@asgardeo/auth-react 1.1.5 → 1.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/main.js +73 -43
- package/dist/src/api.d.ts +11 -2
- package/dist/src/api.d.ts.map +1 -1
- package/dist/src/authenticate.d.ts +3 -3
- package/dist/src/authenticate.d.ts.map +1 -1
- package/dist/tsconfig.tsbuildinfo +181 -79
- package/package.json +2 -2
- package/src/api.ts +14 -2
- package/src/authenticate.tsx +14 -9
package/dist/main.js
CHANGED
|
@@ -1,18 +1,4 @@
|
|
|
1
|
-
!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("react"),require("react-router-dom")):"function"==typeof define&&define.amd?define([,],e):"object"==typeof exports?exports.AsgardeoAuth=e(require("react"),require("react-router-dom")):t.AsgardeoAuth=e(t.React,t.ReactRouter)}(this,(function(t,e){return function(t){var e={};function n(l){if(e[l])return e[l].exports;var i=e[l]={i:l,l:!1,exports:{}};return t[l].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=t,n.c=e,n.d=function(t,e,l){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:l})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var l=Object.create(null);if(n.r(l),Object.defineProperty(l,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)n.d(l,i,function(e){return t[e]}.bind(null,i));return l},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=596)}([function(t,e,n){var l=n(1),i=n(31).f,c=n(28),o=n(19),r=n(131),a=n(132),d=n(88);t.exports=function(t,e){var n,u,Z,s,b,I=t.target,m=t.global,h=t.stat;if(n=m?l:h?l[I]||r(I,{}):(l[I]||{}).prototype)for(u in e){if(s=e[u],Z=t.noTargetGet?(b=i(n,u))&&b.value:n[u],!d(m?u:I+(h?".":"#")+u,t.forced)&&void 0!==Z){if(typeof s==typeof Z)continue;a(s,Z)}(t.sham||Z&&Z.sham)&&c(s,"sham",!0),o(n,u,s,t)}}},function(t,e,n){(function(e){var n=function(t){return t&&t.Math==Math&&t};t.exports=n("object"==typeof globalThis&&globalThis)||n("object"==typeof window&&window)||n("object"==typeof self&&self)||n("object"==typeof e&&e)||function(){return this}()||Function("return this")()}).call(this,n(163))},function(t,e,n){var l=n(1),i=n(12),c=l.String,o=l.TypeError;t.exports=function(t){if(i(t))return t;throw o(c(t)+" is not an object")}},function(t,e,n){var l=n(83),i=Function.prototype,c=i.bind,o=i.call,r=l&&c.bind(o,o);t.exports=l?function(t){return t&&r(t)}:function(t){return t&&function(){return o.apply(t,arguments)}}},function(t,e){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,e,n){var l=n(83),i=Function.prototype.call;t.exports=l?i.bind(i):function(){return i.apply(i,arguments)}},function(t,e,n){var l=n(1),i=n(10),c=n(73),o=l.TypeError;t.exports=function(t){if(i(t))return t;throw o(c(t)+" is not a function")}},function(t,e,n){var l=n(1),i=n(63),c=n(15),o=n(85),r=n(72),a=n(164),d=i("wks"),u=l.Symbol,Z=u&&u.for,s=a?u:u&&u.withoutSetter||o;t.exports=function(t){if(!c(d,t)||!r&&"string"!=typeof d[t]){var e="Symbol."+t;r&&c(u,t)?d[t]=u[t]:d[t]=a&&Z?Z(e):s(e)}return d[t]}},function(t,e,n){var l=n(1),i=n(22),c=n(5),o=n(2),r=n(73),a=n(139),d=n(21),u=n(36),Z=n(45),s=n(61),b=n(107),I=l.TypeError,m=function(t,e){this.stopped=t,this.result=e},h=m.prototype;t.exports=function(t,e,n){var l,p,g,G,y,X,V,W=n&&n.that,C=!(!n||!n.AS_ENTRIES),R=!(!n||!n.IS_ITERATOR),f=!(!n||!n.INTERRUPTED),S=i(e,W),v=function(t){return l&&b(l,"normal",t),new m(!0,t)},Y=function(t){return C?(o(t),f?S(t[0],t[1],v):S(t[0],t[1])):f?S(t,v):S(t)};if(R)l=t;else{if(!(p=s(t)))throw I(r(t)+" is not iterable");if(a(p)){for(g=0,G=d(t);G>g;g++)if((y=Y(t[g]))&&u(h,y))return y;return new m(!1)}l=Z(t,p)}for(X=l.next;!(V=c(X,l)).done;){try{y=Y(V.value)}catch(t){b(l,"throw",t)}if("object"==typeof y&&y&&u(h,y))return y}return new m(!1)}},function(t,e,n){var l=n(4);t.exports=!l((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},function(t,e){t.exports=function(t){return"function"==typeof t}},function(t,e,n){var l=n(1),i=n(10),c=function(t){return i(t)?t:void 0};t.exports=function(t,e){return arguments.length<2?c(l[t]):l[t]&&l[t][e]}},function(t,e,n){var l=n(10);t.exports=function(t){return"object"==typeof t?null!==t:l(t)}},function(t,e,n){var l=n(1),i=n(26),c=l.Object;t.exports=function(t){return c(i(t))}},function(t,e,n){var l=n(1),i=n(64),c=l.String;t.exports=function(t){if("Symbol"===i(t))throw TypeError("Cannot convert a Symbol value to a string");return c(t)}},function(t,e,n){var l=n(3),i=n(13),c=l({}.hasOwnProperty);t.exports=Object.hasOwn||function(t,e){return c(i(t),e)}},function(t,e,n){var l=n(1),i=n(9),c=n(166),o=n(167),r=n(2),a=n(55),d=l.TypeError,u=Object.defineProperty,Z=Object.getOwnPropertyDescriptor;e.f=i?o?function(t,e,n){if(r(t),e=a(e),r(n),"function"==typeof t&&"prototype"===e&&"value"in n&&"writable"in n&&!n.writable){var l=Z(t,e);l&&l.writable&&(t[e]=n.value,n={configurable:"configurable"in n?n.configurable:l.configurable,enumerable:"enumerable"in n?n.enumerable:l.enumerable,writable:!1})}return u(t,e,n)}:u:function(t,e,n){if(r(t),e=a(e),r(n),c)try{return u(t,e,n)}catch(t){}if("get"in n||"set"in n)throw d("Accessors not supported");return"value"in n&&(t[e]=n.value),t}},function(t,e,n){"use strict";var l,i,c,o=n(144),r=n(9),a=n(1),d=n(10),u=n(12),Z=n(15),s=n(64),b=n(73),I=n(28),m=n(19),h=n(16).f,p=n(36),g=n(32),G=n(52),y=n(7),X=n(85),V=a.Int8Array,W=V&&V.prototype,C=a.Uint8ClampedArray,R=C&&C.prototype,f=V&&g(V),S=W&&g(W),v=Object.prototype,Y=a.TypeError,K=y("toStringTag"),N=X("TYPED_ARRAY_TAG"),J=X("TYPED_ARRAY_CONSTRUCTOR"),H=o&&!!G&&"Opera"!==s(a.opera),U=!1,L={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},B={BigInt64Array:8,BigUint64Array:8},k=function(t){if(!u(t))return!1;var e=s(t);return Z(L,e)||Z(B,e)};for(l in L)(c=(i=a[l])&&i.prototype)?I(c,J,i):H=!1;for(l in B)(c=(i=a[l])&&i.prototype)&&I(c,J,i);if((!H||!d(f)||f===Function.prototype)&&(f=function(){throw Y("Incorrect invocation")},H))for(l in L)a[l]&&G(a[l],f);if((!H||!S||S===v)&&(S=f.prototype,H))for(l in L)a[l]&&G(a[l].prototype,S);if(H&&g(R)!==S&&G(R,S),r&&!Z(S,K))for(l in U=!0,h(S,K,{get:function(){return u(this)?this[N]:void 0}}),L)a[l]&&I(a[l],N,l);t.exports={NATIVE_ARRAY_BUFFER_VIEWS:H,TYPED_ARRAY_CONSTRUCTOR:J,TYPED_ARRAY_TAG:U&&N,aTypedArray:function(t){if(k(t))return t;throw Y("Target is not a typed array")},aTypedArrayConstructor:function(t){if(d(t)&&(!G||p(f,t)))return t;throw Y(b(t)+" is not a typed array constructor")},exportTypedArrayMethod:function(t,e,n,l){if(r){if(n)for(var i in L){var c=a[i];if(c&&Z(c.prototype,t))try{delete c.prototype[t]}catch(n){try{c.prototype[t]=e}catch(t){}}}S[t]&&!n||m(S,t,n?e:H&&W[t]||e,l)}},exportTypedArrayStaticMethod:function(t,e,n){var l,i;if(r){if(G){if(n)for(l in L)if((i=a[l])&&Z(i,t))try{delete i[t]}catch(t){}if(f[t]&&!n)return;try{return m(f,t,n?e:H&&f[t]||e)}catch(t){}}for(l in L)!(i=a[l])||i[t]&&!n||m(i,t,e)}},isView:function(t){if(!u(t))return!1;var e=s(t);return"DataView"===e||Z(L,e)||Z(B,e)},isTypedArray:k,TypedArray:f,TypedArrayPrototype:S}},function(t,e,n){var l=n(83),i=Function.prototype,c=i.apply,o=i.call;t.exports="object"==typeof Reflect&&Reflect.apply||(l?o.bind(c):function(){return o.apply(c,arguments)})},function(t,e,n){var l=n(1),i=n(10),c=n(15),o=n(28),r=n(131),a=n(103),d=n(20),u=n(74).CONFIGURABLE,Z=d.get,s=d.enforce,b=String(String).split("String");(t.exports=function(t,e,n,a){var d,Z=!!a&&!!a.unsafe,I=!!a&&!!a.enumerable,m=!!a&&!!a.noTargetGet,h=a&&void 0!==a.name?a.name:e;i(n)&&("Symbol("===String(h).slice(0,7)&&(h="["+String(h).replace(/^Symbol\(([^)]*)\)/,"$1")+"]"),(!c(n,"name")||u&&n.name!==h)&&o(n,"name",h),(d=s(n)).source||(d.source=b.join("string"==typeof h?h:""))),t!==l?(Z?!m&&t[e]&&(I=!0):delete t[e],I?t[e]=n:o(t,e,n)):I?t[e]=n:r(e,n)})(Function.prototype,"toString",(function(){return i(this)&&Z(this).source||a(this)}))},function(t,e,n){var l,i,c,o=n(168),r=n(1),a=n(3),d=n(12),u=n(28),Z=n(15),s=n(101),b=n(104),I=n(86),m=r.TypeError,h=r.WeakMap;if(o||s.state){var p=s.state||(s.state=new h),g=a(p.get),G=a(p.has),y=a(p.set);l=function(t,e){if(G(p,t))throw new m("Object already initialized");return e.facade=t,y(p,t,e),e},i=function(t){return g(p,t)||{}},c=function(t){return G(p,t)}}else{var X=b("state");I[X]=!0,l=function(t,e){if(Z(t,X))throw new m("Object already initialized");return e.facade=t,u(t,X,e),e},i=function(t){return Z(t,X)?t[X]:{}},c=function(t){return Z(t,X)}}t.exports={set:l,get:i,has:c,enforce:function(t){return c(t)?i(t):l(t,{})},getterFor:function(t){return function(e){var n;if(!d(e)||(n=i(e)).type!==t)throw m("Incompatible receiver, "+t+" required");return n}}}},function(t,e,n){var l=n(37);t.exports=function(t){return l(t.length)}},function(t,e,n){var l=n(3),i=n(6),c=n(83),o=l(l.bind);t.exports=function(t,e){return i(t),void 0===e?t:c?o(t,e):function(){return t.apply(e,arguments)}}},function(e,n){e.exports=t},function(t,e){t.exports=!1},function(t,e,n){var l=n(222),i=n(15),c=n(171),o=n(16).f;t.exports=function(t){var e=l.Symbol||(l.Symbol={});i(e,t)||o(e,t,{value:c.f(t)})}},function(t,e,n){var l=n(1).TypeError;t.exports=function(t){if(null==t)throw l("Can't call method on "+t);return t}},function(t,e,n){var l=n(6);t.exports=function(t,e){var n=t[e];return null==n?void 0:l(n)}},function(t,e,n){var l=n(9),i=n(16),c=n(43);t.exports=l?function(t,e,n){return i.f(t,e,c(1,n))}:function(t,e,n){return t[e]=n,t}},function(t,e,n){var l,i=n(2),c=n(106),o=n(134),r=n(86),a=n(170),d=n(102),u=n(104),Z=u("IE_PROTO"),s=function(){},b=function(t){return"<script>"+t+"<\/script>"},I=function(t){t.write(b("")),t.close();var e=t.parentWindow.Object;return t=null,e},m=function(){try{l=new ActiveXObject("htmlfile")}catch(t){}var t,e;m="undefined"!=typeof document?document.domain&&l?I(l):((e=d("iframe")).style.display="none",a.appendChild(e),e.src=String("javascript:"),(t=e.contentWindow.document).open(),t.write(b("document.F=Object")),t.close(),t.F):I(l);for(var n=o.length;n--;)delete m.prototype[o[n]];return m()};r[Z]=!0,t.exports=Object.create||function(t,e){var n;return null!==t?(s.prototype=i(t),n=new s,s.prototype=null,n[Z]=t):n=m(),void 0===e?n:c.f(n,e)}},function(t,e,n){var l=n(22),i=n(3),c=n(84),o=n(13),r=n(21),a=n(76),d=i([].push),u=function(t){var e=1==t,n=2==t,i=3==t,u=4==t,Z=6==t,s=7==t,b=5==t||Z;return function(I,m,h,p){for(var g,G,y=o(I),X=c(y),V=l(m,h),W=r(X),C=0,R=p||a,f=e?R(I,W):n||s?R(I,0):void 0;W>C;C++)if((b||C in X)&&(G=V(g=X[C],C,y),t))if(e)f[C]=G;else if(G)switch(t){case 3:return!0;case 5:return g;case 6:return C;case 2:d(f,g)}else switch(t){case 4:return!1;case 7:d(f,g)}return Z?-1:i||u?u:f}};t.exports={forEach:u(0),map:u(1),filter:u(2),some:u(3),every:u(4),find:u(5),findIndex:u(6),filterReject:u(7)}},function(t,e,n){var l=n(9),i=n(5),c=n(100),o=n(43),r=n(34),a=n(55),d=n(15),u=n(166),Z=Object.getOwnPropertyDescriptor;e.f=l?Z:function(t,e){if(t=r(t),e=a(e),u)try{return Z(t,e)}catch(t){}if(d(t,e))return o(!i(c.f,t,e),t[e])}},function(t,e,n){var l=n(1),i=n(15),c=n(10),o=n(13),r=n(104),a=n(141),d=r("IE_PROTO"),u=l.Object,Z=u.prototype;t.exports=a?u.getPrototypeOf:function(t){var e=o(t);if(i(e,d))return e[d];var n=e.constructor;return c(n)&&e instanceof n?n.prototype:e instanceof u?Z:null}},function(t,e,n){var l=n(2),i=n(112),c=n(7)("species");t.exports=function(t,e){var n,o=l(t).constructor;return void 0===o||null==(n=l(o)[c])?e:i(n)}},function(t,e,n){var l=n(84),i=n(26);t.exports=function(t){return l(i(t))}},function(t,e){var n=Math.ceil,l=Math.floor;t.exports=function(t){var e=+t;return e!=e||0===e?0:(e>0?l:n)(e)}},function(t,e,n){var l=n(3);t.exports=l({}.isPrototypeOf)},function(t,e,n){var l=n(35),i=Math.min;t.exports=function(t){return t>0?i(l(t),9007199254740991):0}},function(t,e,n){var l=n(3),i=n(26),c=n(14),o=/"/g,r=l("".replace);t.exports=function(t,e,n,l){var a=c(i(t)),d="<"+e;return""!==n&&(d+=" "+n+'="'+r(c(l),o,""")+'"'),d+">"+a+"</"+e+">"}},function(t,e,n){var l=n(4);t.exports=function(t){return l((function(){var e=""[t]('"');return e!==e.toLowerCase()||e.split('"').length>3}))}},function(t,e,n){var l=n(3),i=l({}.toString),c=l("".slice);t.exports=function(t){return c(i(t),8,-1)}},function(t,e,n){var l=n(16).f,i=n(15),c=n(7)("toStringTag");t.exports=function(t,e,n){t&&!n&&(t=t.prototype),t&&!i(t,c)&&l(t,c,{configurable:!0,value:e})}},function(t,e,n){var l=n(1),i=n(36),c=l.TypeError;t.exports=function(t,e){if(i(e,t))return t;throw c("Incorrect invocation")}},function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e,n){var l=n(7),i=n(29),c=n(16),o=l("unscopables"),r=Array.prototype;null==r[o]&&c.f(r,o,{configurable:!0,value:i(null)}),t.exports=function(t){r[o][t]=!0}},function(t,e,n){var l=n(1),i=n(5),c=n(6),o=n(2),r=n(73),a=n(61),d=l.TypeError;t.exports=function(t,e){var n=arguments.length<2?a(t):e;if(c(n))return o(i(n,t));throw d(r(t)+" is not iterable")}},function(t,e,n){var l=n(19);t.exports=function(t,e,n){for(var i in e)l(t,i,e[i],n);return t}},function(t,e,n){var l=n(5);t.exports=function(t){return l(Map.prototype.entries,t)}},function(t,e,n){"use strict";(function(t){function l(t,e,n,l){return new(n||(n=Promise))((function(i,c){function o(t){try{a(l.next(t))}catch(t){c(t)}}function r(t){try{a(l.throw(t))}catch(t){c(t)}}function a(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(o,r)}a((l=l.apply(t,e||[])).next())}))}
|
|
2
|
-
/*! *****************************************************************************
|
|
3
|
-
Copyright (c) Microsoft Corporation.
|
|
4
|
-
|
|
5
|
-
Permission to use, copy, modify, and/or distribute this software for any
|
|
6
|
-
purpose with or without fee is hereby granted.
|
|
7
|
-
|
|
8
|
-
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
9
|
-
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
10
|
-
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
11
|
-
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
12
|
-
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
13
|
-
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
14
|
-
PERFORMANCE OF THIS SOFTWARE.
|
|
15
|
-
***************************************************************************** */function i(t,e,n,l){return new(n||(n=Promise))((function(i,c){function o(t){try{a(l.next(t))}catch(t){c(t)}}function r(t){try{a(l.throw(t))}catch(t){c(t)}}function a(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(o,r)}a((l=l.apply(t,e||[])).next())}))}var c;n.d(e,"a",(function(){return g})),n.d(e,"b",(function(){return J})),n.d(e,"c",(function(){return R})),n.d(e,"d",(function(){return Pl})),n.d(e,"e",(function(){return f})),n.d(e,"f",(function(){return h})),n.d(e,"g",(function(){return d})),n.d(e,"h",(function(){return u})),n.d(e,"i",(function(){return K})),n.d(e,"j",(function(){return U})),n.d(e,"k",(function(){return p})),n.d(e,"l",(function(){return W})),n.d(e,"m",(function(){return b})),n.d(e,"n",(function(){return I})),n.d(e,"o",(function(){return s})),n.d(e,"p",(function(){return c})),n.d(e,"q",(function(){return a})),n.d(e,"r",(function(){return G})),n.d(e,"s",(function(){return X})),n.d(e,"t",(function(){return y})),n.d(e,"u",(function(){return k})),n.d(e,"v",(function(){return V})),n.d(e,"w",(function(){return m})),n.d(e,"x",(function(){return H})),n.d(e,"y",(function(){return Z})),n.d(e,"z",(function(){return o})),n.d(e,"A",(function(){return r})),n.d(e,"B",(function(){return Ql})),function(t){t.formPost="form_post",t.query="query"}(c||(c={}));const o="{{token}}",r="{{username}}",a="{{scope}}",d="{{clientID}}",u="{{clientSecret}}";var Z;!function(t){t.ConfigData="config_data",t.OIDCProviderMetaData="oidc_provider_meta_data",t.SessionData="session_data",t.TemporaryData="temporary_data"}(Z||(Z={}));const s="refresh_token_timer",b="pkce_code_verifier",I="#",m=["RS256","RS512","RS384","PS256"],h="ERR_JWT_CLAIM_VALIDATION_FAILED",p="nbf",g="code",G="session_state",y="sign_out_url",X="sign_out_success",V="state",W="openid";var C;!function(t){t.Include="include",t.SameOrigin="same-origin",t.Omit="omit"}(C||(C={}));class R{constructor(t,e,n){this.message=n,this.name=e,this.code=t,Object.setPrototypeOf(this,new.target.prototype)}}class f{constructor(){}static filterClaimsFromIDTokenPayload(t){const e=Object.assign({},t);null==e||delete e.iss,null==e||delete e.aud,null==e||delete e.exp,null==e||delete e.iat,null==e||delete e.acr,null==e||delete e.amr,null==e||delete e.azp,null==e||delete e.auth_time,null==e||delete e.nonce,null==e||delete e.c_hash,null==e||delete e.at_hash,null==e||delete e.nbf,null==e||delete e.isk,null==e||delete e.sid;const n={};return Object.entries(e).forEach(([t,e])=>{const l=t.split("_").map((t,e)=>0===e?t:[t[0].toUpperCase(),...t.slice(1)].join("")).join("");n[l]=e}),n}static getTokenRequestHeaders(){return{Accept:"application/json","Content-Type":"application/x-www-form-urlencoded"}}static generateStateParamForRequestCorrelation(t,e){const n=parseInt(t.split("#")[1]);return e?`${e}_request_${n}`:"request_"+n}static extractPKCEKeyFromStateParam(t){return"pkce_code_verifier#"+parseInt(t.split("request_")[1])}}f.getTenantDomainFromIdTokenPayload=(t,e="@")=>{const n=t.sub.split(e);return n.length>2?n[n.length-1]:""};class S{constructor(t,e){this._dataLayer=t,this._config=()=>i(this,void 0,void 0,(function*(){return yield this._dataLayer.getConfigData()})),this._oidcProviderMetaData=()=>i(this,void 0,void 0,(function*(){return yield this._dataLayer.getOIDCProviderMetaData()})),this._cryptoHelper=e}resolveEndpoints(t){return i(this,void 0,void 0,(function*(){const e={},n=yield this._config();return n.endpoints&&Object.keys(n.endpoints).forEach(t=>{const l=t.replace(/[A-Z]/g,t=>"_"+t.toLowerCase());e[l]=(null==n?void 0:n.endpoints)?n.endpoints[t]:""}),Object.assign(Object.assign({},t),e)}))}resolveEndpointsExplicitly(){return i(this,void 0,void 0,(function*(){const t={},e=yield this._config(),n=["authorization_endpoint","end_session_endpoint","jwks_uri","check_session_iframe","revocation_endpoint","token_endpoint","issuer","userinfo_endpoint"];if(!e.endpoints||!Object.keys(null==e?void 0:e.endpoints).every(t=>{const e=t.replace(/[A-Z]/g,t=>"_"+t.toLowerCase());return n.includes(e)}))throw new R("JS-AUTH_HELPER-REE-NF01","No required endpoints.","Required oidc endpoints are not defined");return e.endpoints&&Object.keys(e.endpoints).forEach(n=>{const l=n.replace(/[A-Z]/g,t=>"_"+t.toLowerCase());t[l]=(null==e?void 0:e.endpoints)?e.endpoints[n]:""}),Object.assign({},t)}))}resolveEndpointsByBaseURL(){return i(this,void 0,void 0,(function*(){const t={},e=yield this._config(),n=e.baseUrl;if(!n)throw new R("JS-AUTH_HELPER_REBO-NF01","Base URL not defined.","Base URL is not defined in AuthClient config.");e.endpoints&&Object.keys(e.endpoints).forEach(n=>{const l=n.replace(/[A-Z]/g,t=>"_"+t.toLowerCase());t[l]=(null==e?void 0:e.endpoints)?e.endpoints[n]:""});const l={authorization_endpoint:n+"/oauth2/authorize",end_session_endpoint:n+"/oidc/logout",issuer:n+"/oauth2/token",jwks_uri:n+"/oauth2/jwks",check_session_iframe:n+"/oidc/checksession",revocation_endpoint:n+"/oauth2/revoke",token_endpoint:n+"/oauth2/token",userinfo_endpoint:n+"/oauth2/userinfo"};return Object.assign(Object.assign({},l),t)}))}validateIdToken(t){return i(this,void 0,void 0,(function*(){const e=(yield this._dataLayer.getOIDCProviderMetaData()).jwks_uri,n=yield this._config();if(!e||0===e.trim().length)throw new R("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 l;try{l=yield fetch(e,{credentials:n.sendCookiesInRequests?C.Include:C.SameOrigin})}catch(e){throw new R("JS-AUTH_HELPER-VIT-NE02","Request to jwks endpoint failed.",null!=e?e:"The request sent to get the jwks from the server failed.")}if(200!==l.status||!l.ok)throw new R("JS-AUTH_HELPER-VIT-HE03",`Invalid response status received for jwks request (${l.statusText}).`,yield l.json());const i=(yield this._oidcProviderMetaData()).issuer,{keys:c}=yield l.json(),o=yield this._cryptoHelper.getJWKForTheIdToken(t.split(".")[0],c);return this._cryptoHelper.isValidIdToken(t,o,(yield this._config()).clientID,null!=i?i:"",this._cryptoHelper.decodeIDToken(t).sub,(yield this._config()).clockTolerance)}))}getAuthenticatedUserInfo(t){var e,n,l,i;const c=this._cryptoHelper.decodeIDToken(t),o=f.getTenantDomainFromIdTokenPayload(c),r=null!==(e=null==c?void 0:c.username)&&void 0!==e?e:"",a=null!==(n=c.given_name)&&void 0!==n?n:"",d=null!==(l=c.family_name)&&void 0!==l?l:"",u=a&&d?`${a} ${d}`:a||d||"",Z=null!==(i=c.preferred_username)&&void 0!==i?i:u;return Object.assign({displayName:Z,tenantDomain:o,username:r},f.filterClaimsFromIDTokenPayload(c))}replaceCustomGrantTemplateTags(t,e){var n;return i(this,void 0,void 0,(function*(){let l="openid";const i=yield this._config(),c=yield this._dataLayer.getSessionData(e);return i.scope&&i.scope.length>0&&(i.scope.includes("openid")||i.scope.push("openid"),l=i.scope.join(" ")),t.replace("{{token}}",c.access_token).replace("{{username}}",this.getAuthenticatedUserInfo(c.id_token).username).replace("{{scope}}",l).replace("{{clientID}}",i.clientID).replace("{{clientSecret}}",null!==(n=i.clientSecret)&&void 0!==n?n:"")}))}clearUserSessionData(t){return i(this,void 0,void 0,(function*(){yield this._dataLayer.removeTemporaryData(t),yield this._dataLayer.removeSessionData(t)}))}handleTokenResponse(t,e){return i(this,void 0,void 0,(function*(){if(200!==t.status||!t.ok)throw new R("JS-AUTH_HELPER-HTR-NE01",`Invalid response status received for token request (${t.statusText}).`,yield t.json());const n=yield t.json();if(n.created_at=(new Date).getTime(),(yield this._config()).validateIDToken)return this.validateIdToken(n.id_token).then(()=>i(this,void 0,void 0,(function*(){yield this._dataLayer.setSessionData(n,e);const t={accessToken:n.access_token,createdAt:n.created_at,expiresIn:n.expires_in,idToken:n.id_token,refreshToken:n.refresh_token,scope:n.scope,tokenType:n.token_type};return Promise.resolve(t)})));{const t={accessToken:n.access_token,createdAt:n.created_at,expiresIn:n.expires_in,idToken:n.id_token,refreshToken:n.refresh_token,scope:n.scope,tokenType:n.token_type};return yield this._dataLayer.setSessionData(n,e),Promise.resolve(t)}}))}generatePKCEKey(t){var e;return i(this,void 0,void 0,(function*(){const n=yield this._dataLayer.getTemporaryData(t),l=[];Object.keys(n).forEach(t=>{t.startsWith("pkce_code_verifier")&&l.push(t)});const i=l.sort().pop();return"pkce_code_verifier#"+(parseInt(null!==(e=null==i?void 0:i.split("#")[1])&&void 0!==e?e:"-1")+1)}))}}class v{constructor(t){this._cryptoUtils=t}getCodeVerifier(){return this._cryptoUtils.base64URLEncode(this._cryptoUtils.generateRandomBytes(32))}getCodeChallenge(t){return this._cryptoUtils.base64URLEncode(this._cryptoUtils.hashSha256(t))}getJWKForTheIdToken(t,e){const n=JSON.parse(this._cryptoUtils.base64URLDecode(t));for(const t of e)if(n.kid===t.kid)return t;throw new R("JS-CRYPTO_UTIL-GJFTIT-IV01","kid not found.","Failed to find the 'kid' specified in the id_token. 'kid' found in the header : "+n.kid+", Expected values: "+e.map(t=>t.kid).join(", "))}isValidIdToken(t,e,n,l,i,c){return this._cryptoUtils.verifyJwt(t,e,m,n,l,i,c).then(t=>t?Promise.resolve(!0):Promise.reject(new R("JS-CRYPTO_HELPER-IVIT-IV01","Invalid ID token.","ID token validation returned false"))).catch(t=>"ERR_JWT_CLAIM_VALIDATION_FAILED"===(null==t?void 0:t.code)&&"nbf"===(null==t?void 0:t.claim)?Promise.reject(new R("JS-CRYPTO_UTILS-IVIT-IV02","JWT NBF CLAIM VALIDATION FAILED","JWT NBF claim validation has been failed")):Promise.reject(new R("JS-CRYPTO_UTILS-IVIT-IV03","JWT VALIDATION FAILED","JWT validation has been failed")))}decodeIDToken(t){try{const e=this._cryptoUtils.base64URLDecode(t.split(".")[1]);return JSON.parse(e)}catch(t){throw new R("JS-CRYPTO_UTIL-DIT-IV01","Decoding ID token failed.",t)}}}class Y{constructor(t,e){this._cryptoUtils=e,this._cryptoHelper=new v(e),this._authenticationHelper=new S(t,this._cryptoHelper),this._dataLayer=t,this._config=()=>i(this,void 0,void 0,(function*(){return yield this._dataLayer.getConfigData()})),this._oidcProviderMetaData=()=>i(this,void 0,void 0,(function*(){return yield this._dataLayer.getOIDCProviderMetaData()}))}getAuthorizationURL(t,e){var n,l,c;return i(this,void 0,void 0,(function*(){const i=yield this._dataLayer.getOIDCProviderMetaDataParameter("authorization_endpoint"),o=yield this._config();if(!i||0===i.trim().length)throw new R("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 r=new URL(i),a=new Map;a.set("response_type","code"),a.set("client_id",o.clientID);let d="openid";o.scope&&o.scope.length>0&&(o.scope.includes("openid")||o.scope.push("openid"),d=o.scope.join(" ")),a.set("scope",d),a.set("redirect_uri",o.signInRedirectURL),o.responseMode&&a.set("response_mode",o.responseMode);const u=yield this._authenticationHelper.generatePKCEKey(e);if(o.enablePKCE){const t=null===(n=this._cryptoHelper)||void 0===n?void 0:n.getCodeVerifier(),i=null===(l=this._cryptoHelper)||void 0===l?void 0:l.getCodeChallenge(t);yield this._dataLayer.setTemporaryDataParameter(u,t,e),a.set("code_challenge_method","S256"),a.set("code_challenge",i)}o.prompt&&a.set("prompt",o.prompt);const Z=t;if(Z)for(const[t,e]of Object.entries(Z))if(""!=t&&""!=e&&"state"!==t){const n=t.replace(/[A-Z]/g,t=>"_"+t.toLowerCase());a.set(n,e.toString())}a.set("state",f.generateStateParamForRequestCorrelation(u,Z?null===(c=Z.state)||void 0===c?void 0:c.toString():""));for(const[t,e]of a.entries())r.searchParams.append(t,e);return r.toString()}))}requestAccessToken(t,e,n,l){return i(this,void 0,void 0,(function*(){const i=(yield this._oidcProviderMetaData()).token_endpoint,c=yield this._config();if(!i||0===i.trim().length)throw new R("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.");e&&(yield this._dataLayer.setSessionDataParameter("session_state",e,l));const o=[];o.push("client_id="+c.clientID),c.clientSecret&&c.clientSecret.trim().length>0&&o.push("client_secret="+c.clientSecret);const r=t;let a;o.push("code="+r),o.push("grant_type=authorization_code"),o.push("redirect_uri="+c.signInRedirectURL),c.enablePKCE&&(o.push("code_verifier="+(yield this._dataLayer.getTemporaryDataParameter(f.extractPKCEKeyFromStateParam(n),l))),yield this._dataLayer.removeTemporaryDataParameter(f.extractPKCEKeyFromStateParam(n),l));try{a=yield fetch(i,{body:o.join("&"),credentials:c.sendCookiesInRequests?C.Include:C.SameOrigin,headers:new Headers(f.getTokenRequestHeaders()),method:"POST"})}catch(i){throw new R("JS-AUTH_CORE-RAT1-NE02","Requesting access token failed",null!=i?i:"The request to get the access token from the server failed.")}if(!a.ok)throw new R("JS-AUTH_CORE-RAT1-HE03","Requesting access token failed with "+a.statusText,yield a.json());return yield this._authenticationHelper.handleTokenResponse(a,l)}))}refreshAccessToken(t){return i(this,void 0,void 0,(function*(){const e=(yield this._oidcProviderMetaData()).token_endpoint,n=yield this._config(),l=yield this._dataLayer.getSessionData(t);if(!l.refresh_token)throw new R("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(!e||0===e.trim().length)throw new R("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 i=[];let c;i.push("client_id="+n.clientID),i.push("refresh_token="+l.refresh_token),i.push("grant_type=refresh_token"),n.clientSecret&&n.clientSecret.trim().length>0&&i.push("client_secret="+n.clientSecret);try{c=yield fetch(e,{body:i.join("&"),credentials:n.sendCookiesInRequests?C.Include:C.SameOrigin,headers:new Headers(f.getTokenRequestHeaders()),method:"POST"})}catch(e){throw new R("JS-AUTH_CORE-RAT2-NR03","Refresh access token request failed.",null!=e?e:"The request to refresh the access token failed.")}if(!c.ok)throw new R("JS-AUTH_CORE-RAT2-HE04","Refreshing access token failed with "+c.statusText,yield c.json());return this._authenticationHelper.handleTokenResponse(c,t)}))}revokeAccessToken(t){return i(this,void 0,void 0,(function*(){const e=(yield this._oidcProviderMetaData()).revocation_endpoint,n=yield this._config();if(!e||0===e.trim().length)throw new R("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 l=[];let i;l.push("client_id="+n.clientID),l.push("token="+(yield this._dataLayer.getSessionData(t)).access_token),l.push("token_type_hint=access_token");try{i=yield fetch(e,{body:l.join("&"),credentials:n.sendCookiesInRequests?C.Include:C.SameOrigin,headers:new Headers(f.getTokenRequestHeaders()),method:"POST"})}catch(e){throw new R("JS-AUTH_CORE-RAT3-NE02","The request to revoke access token failed.",null!=e?e:"The request sent to revoke the access token failed.")}if(200!==i.status||!i.ok)throw new R("JS-AUTH_CORE-RAT3-HE03",`Invalid response status received for revoke access token request (${i.statusText}).`,yield i.json());return this._authenticationHelper.clearUserSessionData(t),Promise.resolve(i)}))}requestCustomGrant(t,e){return i(this,void 0,void 0,(function*(){const n=yield this._oidcProviderMetaData(),l=yield this._config();let c;if(c=t.tokenEndpoint&&0!==t.tokenEndpoint.trim().length?t.tokenEndpoint:n.token_endpoint,!c||0===c.trim().length)throw new R("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(t.data).map(([t,n])=>i(this,void 0,void 0,(function*(){const l=yield this._authenticationHelper.replaceCustomGrantTemplateTags(n,e);return`${t}=${l}`}))));let r=Object.assign({},f.getTokenRequestHeaders());t.attachToken&&(r=Object.assign(Object.assign({},r),{Authorization:"Bearer "+(yield this._dataLayer.getSessionData(e)).access_token}));const a={body:o.join("&"),credentials:l.sendCookiesInRequests?C.Include:C.SameOrigin,headers:new Headers(r),method:"POST"};let d;try{d=yield fetch(c,a)}catch(t){throw new R("JS-AUTH_CORE-RCG-NE02","The custom grant request failed.",null!=t?t:"The request sent to get the custom grant failed.")}if(200!==d.status||!d.ok)throw new R("JS-AUTH_CORE-RCG-HE03",`Invalid response status received for the custom grant request. (${d.statusText})`,yield d.json());return t.returnsSession?this._authenticationHelper.handleTokenResponse(d,e):Promise.resolve(yield d.json())}))}getBasicUserInfo(t){return i(this,void 0,void 0,(function*(){const e=yield this._dataLayer.getSessionData(t),n=this._authenticationHelper.getAuthenticatedUserInfo(null==e?void 0:e.id_token);let l={allowedScopes:e.scope,sessionState:e.session_state};return Object.keys(n).forEach(t=>{void 0!==n[t]&&""!==n[t]&&null!==n[t]||delete n[t]}),l=Object.assign(Object.assign({},l),n),l}))}getDecodedIDToken(t){return i(this,void 0,void 0,(function*(){const e=(yield this._dataLayer.getSessionData(t)).id_token;return this._cryptoHelper.decodeIDToken(e)}))}getIDToken(t){return i(this,void 0,void 0,(function*(){return(yield this._dataLayer.getSessionData(t)).id_token}))}getOIDCProviderMetaData(t){return i(this,void 0,void 0,(function*(){const e=yield this._config();if(!t&&(yield this._dataLayer.getTemporaryDataParameter("op_config_initiated")))return Promise.resolve();const n=e.wellKnownEndpoint;if(n){let t;try{if(t=yield fetch(n),200!==t.status||!t.ok)throw new Error}catch(e){throw new R("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 t.json())),yield this._dataLayer.setTemporaryDataParameter("op_config_initiated",!0),Promise.resolve()}if(e.baseUrl){try{yield this._dataLayer.setOIDCProviderMetaData(yield this._authenticationHelper.resolveEndpointsByBaseURL())}catch(e){throw new R("JS-AUTH_CORE-GOPMD-IV02","Resolving endpoints failed.",null!=e?e:"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(e){throw new R("JS-AUTH_CORE-GOPMD-IV03","Resolving endpoints failed.",null!=e?e:"Resolving endpoints by explicitly failed.")}return yield this._dataLayer.setTemporaryDataParameter("op_config_initiated",!0),Promise.resolve()}))}getOIDCServiceEndpoints(){var t,e,n,l,c,o,r,a,d,u;return i(this,void 0,void 0,(function*(){const i=yield this._oidcProviderMetaData();return{authorizationEndpoint:null!==(t=i.authorization_endpoint)&&void 0!==t?t:"",checkSessionIframe:null!==(e=i.check_session_iframe)&&void 0!==e?e:"",endSessionEndpoint:null!==(n=i.end_session_endpoint)&&void 0!==n?n:"",introspectionEndpoint:null!==(l=i.introspection_endpoint)&&void 0!==l?l:"",issuer:null!==(c=i.issuer)&&void 0!==c?c:"",jwksUri:null!==(o=i.jwks_uri)&&void 0!==o?o:"",registrationEndpoint:null!==(r=i.registration_endpoint)&&void 0!==r?r:"",revocationEndpoint:null!==(a=i.revocation_endpoint)&&void 0!==a?a:"",tokenEndpoint:null!==(d=i.token_endpoint)&&void 0!==d?d:"",userinfoEndpoint:null!==(u=i.userinfo_endpoint)&&void 0!==u?u:""}}))}getSignOutURL(t){var e,n,l;return i(this,void 0,void 0,(function*(){const i=null===(e=yield this._oidcProviderMetaData())||void 0===e?void 0:e.end_session_endpoint,c=yield this._config();if(!i||0===i.trim().length)throw new R("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 o=null===(n=yield this._dataLayer.getSessionData(t))||void 0===n?void 0:n.id_token;if(!o||0===o.trim().length)throw new R("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 r=null!==(l=null==c?void 0:c.signOutRedirectURL)&&void 0!==l?l:null==c?void 0:c.signInRedirectURL;if(!r||0===r.trim().length)throw new R("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`${i}?id_token_hint=${o}&post_logout_redirect_uri=${r}&state=sign_out_success`}))}signOut(t){return i(this,void 0,void 0,(function*(){const e=yield this.getSignOutURL(t);return this._authenticationHelper.clearUserSessionData(t),e}))}getAccessToken(t){var e;return i(this,void 0,void 0,(function*(){return null===(e=yield this._dataLayer.getSessionData(t))||void 0===e?void 0:e.access_token}))}isAuthenticated(t){return i(this,void 0,void 0,(function*(){return Boolean(yield this.getAccessToken(t))}))}getPKCECode(t,e){return i(this,void 0,void 0,(function*(){return yield this._dataLayer.getTemporaryDataParameter(f.extractPKCEKeyFromStateParam(t),e)}))}setPKCECode(t,e,n){return i(this,void 0,void 0,(function*(){return yield this._dataLayer.setTemporaryDataParameter(f.extractPKCEKeyFromStateParam(e),t,n)}))}updateConfig(t){return i(this,void 0,void 0,(function*(){yield this._dataLayer.setConfigData(t),yield this.getOIDCProviderMetaData(!0)}))}}class K{constructor(t,e){this._id=t,this._store=e}setDataInBulk(t,e){var n;return i(this,void 0,void 0,(function*(){const l=null!==(n=yield this._store.getData(t))&&void 0!==n?n:null,i=l&&JSON.parse(l),c=Object.assign(Object.assign({},i),e),o=JSON.stringify(c);yield this._store.setData(t,o)}))}setValue(t,e,n){var l;return i(this,void 0,void 0,(function*(){const i=null!==(l=yield this._store.getData(t))&&void 0!==l?l:null,c=i&&JSON.parse(i),o=Object.assign(Object.assign({},c),{[e]:n}),r=JSON.stringify(o);yield this._store.setData(t,r)}))}removeValue(t,e){var n;return i(this,void 0,void 0,(function*(){const l=null!==(n=yield this._store.getData(t))&&void 0!==n?n:null,i=l&&JSON.parse(l),c=Object.assign({},i);delete c[e];const o=JSON.stringify(c);yield this._store.setData(t,o)}))}_resolveKey(t,e){return e?`${t}-${this._id}-${e}`:`${t}-${this._id}`}setConfigData(t){return i(this,void 0,void 0,(function*(){yield this.setDataInBulk(this._resolveKey(Z.ConfigData),t)}))}setOIDCProviderMetaData(t){return i(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(Z.OIDCProviderMetaData),t)}))}setTemporaryData(t,e){return i(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(Z.TemporaryData,e),t)}))}setSessionData(t,e){return i(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(Z.SessionData,e),t)}))}getConfigData(){var t;return i(this,void 0,void 0,(function*(){return JSON.parse(null!==(t=yield this._store.getData(this._resolveKey(Z.ConfigData)))&&void 0!==t?t:null)}))}getOIDCProviderMetaData(){var t;return i(this,void 0,void 0,(function*(){return JSON.parse(null!==(t=yield this._store.getData(this._resolveKey(Z.OIDCProviderMetaData)))&&void 0!==t?t:null)}))}getTemporaryData(t){var e;return i(this,void 0,void 0,(function*(){return JSON.parse(null!==(e=yield this._store.getData(this._resolveKey(Z.TemporaryData,t)))&&void 0!==e?e:null)}))}getSessionData(t){var e;return i(this,void 0,void 0,(function*(){return JSON.parse(null!==(e=yield this._store.getData(this._resolveKey(Z.SessionData,t)))&&void 0!==e?e:null)}))}removeConfigData(){return i(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(Z.ConfigData))}))}removeOIDCProviderMetaData(){return i(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(Z.OIDCProviderMetaData))}))}removeTemporaryData(t){return i(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(Z.TemporaryData,t))}))}removeSessionData(t){return i(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(Z.SessionData,t))}))}getConfigDataParameter(t){return i(this,void 0,void 0,(function*(){const e=yield this._store.getData(this._resolveKey(Z.ConfigData));return e&&JSON.parse(e)[t]}))}getOIDCProviderMetaDataParameter(t){return i(this,void 0,void 0,(function*(){const e=yield this._store.getData(this._resolveKey(Z.OIDCProviderMetaData));return e&&JSON.parse(e)[t]}))}getTemporaryDataParameter(t,e){return i(this,void 0,void 0,(function*(){const n=yield this._store.getData(this._resolveKey(Z.TemporaryData,e));return n&&JSON.parse(n)[t]}))}getSessionDataParameter(t,e){return i(this,void 0,void 0,(function*(){const n=yield this._store.getData(this._resolveKey(Z.SessionData,e));return n&&JSON.parse(n)[t]}))}setConfigDataParameter(t,e){return i(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(Z.ConfigData),t,e)}))}setOIDCProviderMetaDataParameter(t,e){return i(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(Z.OIDCProviderMetaData),t,e)}))}setTemporaryDataParameter(t,e,n){return i(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(Z.TemporaryData,n),t,e)}))}setSessionDataParameter(t,e,n){return i(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(Z.SessionData,n),t,e)}))}removeConfigDataParameter(t){return i(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(Z.ConfigData),t)}))}removeOIDCProviderMetaDataParameter(t){return i(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(Z.OIDCProviderMetaData),t)}))}removeTemporaryDataParameter(t,e){return i(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(Z.TemporaryData,e),t)}))}removeSessionDataParameter(t,e){return i(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(Z.SessionData,e),t)}))}}const N={clockTolerance:300,enablePKCE:!0,responseMode:c.query,scope:["openid"],sendCookiesInRequests:!0,validateIDToken:!0};class J{
|
|
1
|
+
!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("react"),require("react-router-dom")):"function"==typeof define&&define.amd?define([,],e):"object"==typeof exports?exports.AsgardeoAuth=e(require("react"),require("react-router-dom")):t.AsgardeoAuth=e(t.React,t.ReactRouter)}(this,(function(t,e){return function(t){var e={};function l(n){if(e[n])return e[n].exports;var i=e[n]={i:n,l:!1,exports:{}};return t[n].call(i.exports,i,i.exports,l),i.l=!0,i.exports}return l.m=t,l.c=e,l.d=function(t,e,n){l.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},l.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},l.t=function(t,e){if(1&e&&(t=l(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(l.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)l.d(n,i,function(e){return t[e]}.bind(null,i));return n},l.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return l.d(e,"a",e),e},l.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},l.p="",l(l.s=596)}([function(t,e,l){var n=l(1),i=l(31).f,c=l(28),o=l(19),d=l(131),a=l(132),r=l(88);t.exports=function(t,e){var l,u,s,Z,b,h=t.target,m=t.global,I=t.stat;if(l=m?n:I?n[h]||d(h,{}):(n[h]||{}).prototype)for(u in e){if(Z=e[u],s=t.noTargetGet?(b=i(l,u))&&b.value:l[u],!r(m?u:h+(I?".":"#")+u,t.forced)&&void 0!==s){if(typeof Z==typeof s)continue;a(Z,s)}(t.sham||s&&s.sham)&&c(Z,"sham",!0),o(l,u,Z,t)}}},function(t,e,l){(function(e){var l=function(t){return t&&t.Math==Math&&t};t.exports=l("object"==typeof globalThis&&globalThis)||l("object"==typeof window&&window)||l("object"==typeof self&&self)||l("object"==typeof e&&e)||function(){return this}()||Function("return this")()}).call(this,l(163))},function(t,e,l){var n=l(1),i=l(12),c=n.String,o=n.TypeError;t.exports=function(t){if(i(t))return t;throw o(c(t)+" is not an object")}},function(t,e,l){var n=l(83),i=Function.prototype,c=i.bind,o=i.call,d=n&&c.bind(o,o);t.exports=n?function(t){return t&&d(t)}:function(t){return t&&function(){return o.apply(t,arguments)}}},function(t,e){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,e,l){var n=l(83),i=Function.prototype.call;t.exports=n?i.bind(i):function(){return i.apply(i,arguments)}},function(t,e,l){var n=l(1),i=l(10),c=l(73),o=n.TypeError;t.exports=function(t){if(i(t))return t;throw o(c(t)+" is not a function")}},function(t,e,l){var n=l(1),i=l(63),c=l(15),o=l(85),d=l(72),a=l(164),r=i("wks"),u=n.Symbol,s=u&&u.for,Z=a?u:u&&u.withoutSetter||o;t.exports=function(t){if(!c(r,t)||!d&&"string"!=typeof r[t]){var e="Symbol."+t;d&&c(u,t)?r[t]=u[t]:r[t]=a&&s?s(e):Z(e)}return r[t]}},function(t,e,l){var n=l(1),i=l(22),c=l(5),o=l(2),d=l(73),a=l(139),r=l(21),u=l(36),s=l(45),Z=l(61),b=l(107),h=n.TypeError,m=function(t,e){this.stopped=t,this.result=e},I=m.prototype;t.exports=function(t,e,l){var n,G,p,g,X,V,y,W=l&&l.that,C=!(!l||!l.AS_ENTRIES),R=!(!l||!l.IS_ITERATOR),f=!(!l||!l.INTERRUPTED),Y=i(e,W),S=function(t){return n&&b(n,"normal",t),new m(!0,t)},v=function(t){return C?(o(t),f?Y(t[0],t[1],S):Y(t[0],t[1])):f?Y(t,S):Y(t)};if(R)n=t;else{if(!(G=Z(t)))throw h(d(t)+" is not iterable");if(a(G)){for(p=0,g=r(t);g>p;p++)if((X=v(t[p]))&&u(I,X))return X;return new m(!1)}n=s(t,G)}for(V=n.next;!(y=c(V,n)).done;){try{X=v(y.value)}catch(t){b(n,"throw",t)}if("object"==typeof X&&X&&u(I,X))return X}return new m(!1)}},function(t,e,l){var n=l(4);t.exports=!n((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},function(t,e){t.exports=function(t){return"function"==typeof t}},function(t,e,l){var n=l(1),i=l(10),c=function(t){return i(t)?t:void 0};t.exports=function(t,e){return arguments.length<2?c(n[t]):n[t]&&n[t][e]}},function(t,e,l){var n=l(10);t.exports=function(t){return"object"==typeof t?null!==t:n(t)}},function(t,e,l){var n=l(1),i=l(26),c=n.Object;t.exports=function(t){return c(i(t))}},function(t,e,l){var n=l(1),i=l(64),c=n.String;t.exports=function(t){if("Symbol"===i(t))throw TypeError("Cannot convert a Symbol value to a string");return c(t)}},function(t,e,l){var n=l(3),i=l(13),c=n({}.hasOwnProperty);t.exports=Object.hasOwn||function(t,e){return c(i(t),e)}},function(t,e,l){var n=l(1),i=l(9),c=l(166),o=l(167),d=l(2),a=l(55),r=n.TypeError,u=Object.defineProperty,s=Object.getOwnPropertyDescriptor;e.f=i?o?function(t,e,l){if(d(t),e=a(e),d(l),"function"==typeof t&&"prototype"===e&&"value"in l&&"writable"in l&&!l.writable){var n=s(t,e);n&&n.writable&&(t[e]=l.value,l={configurable:"configurable"in l?l.configurable:n.configurable,enumerable:"enumerable"in l?l.enumerable:n.enumerable,writable:!1})}return u(t,e,l)}:u:function(t,e,l){if(d(t),e=a(e),d(l),c)try{return u(t,e,l)}catch(t){}if("get"in l||"set"in l)throw r("Accessors not supported");return"value"in l&&(t[e]=l.value),t}},function(t,e,l){"use strict";var n,i,c,o=l(144),d=l(9),a=l(1),r=l(10),u=l(12),s=l(15),Z=l(64),b=l(73),h=l(28),m=l(19),I=l(16).f,G=l(36),p=l(32),g=l(51),X=l(7),V=l(85),y=a.Int8Array,W=y&&y.prototype,C=a.Uint8ClampedArray,R=C&&C.prototype,f=y&&p(y),Y=W&&p(W),S=Object.prototype,v=a.TypeError,K=X("toStringTag"),N=V("TYPED_ARRAY_TAG"),J=V("TYPED_ARRAY_CONSTRUCTOR"),H=o&&!!g&&"Opera"!==Z(a.opera),U=!1,L={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},k={BigInt64Array:8,BigUint64Array:8},T=function(t){if(!u(t))return!1;var e=Z(t);return s(L,e)||s(k,e)};for(n in L)(c=(i=a[n])&&i.prototype)?h(c,J,i):H=!1;for(n in k)(c=(i=a[n])&&i.prototype)&&h(c,J,i);if((!H||!r(f)||f===Function.prototype)&&(f=function(){throw v("Incorrect invocation")},H))for(n in L)a[n]&&g(a[n],f);if((!H||!Y||Y===S)&&(Y=f.prototype,H))for(n in L)a[n]&&g(a[n].prototype,Y);if(H&&p(R)!==Y&&g(R,Y),d&&!s(Y,K))for(n in U=!0,I(Y,K,{get:function(){return u(this)?this[N]:void 0}}),L)a[n]&&h(a[n],N,n);t.exports={NATIVE_ARRAY_BUFFER_VIEWS:H,TYPED_ARRAY_CONSTRUCTOR:J,TYPED_ARRAY_TAG:U&&N,aTypedArray:function(t){if(T(t))return t;throw v("Target is not a typed array")},aTypedArrayConstructor:function(t){if(r(t)&&(!g||G(f,t)))return t;throw v(b(t)+" is not a typed array constructor")},exportTypedArrayMethod:function(t,e,l,n){if(d){if(l)for(var i in L){var c=a[i];if(c&&s(c.prototype,t))try{delete c.prototype[t]}catch(l){try{c.prototype[t]=e}catch(t){}}}Y[t]&&!l||m(Y,t,l?e:H&&W[t]||e,n)}},exportTypedArrayStaticMethod:function(t,e,l){var n,i;if(d){if(g){if(l)for(n in L)if((i=a[n])&&s(i,t))try{delete i[t]}catch(t){}if(f[t]&&!l)return;try{return m(f,t,l?e:H&&f[t]||e)}catch(t){}}for(n in L)!(i=a[n])||i[t]&&!l||m(i,t,e)}},isView:function(t){if(!u(t))return!1;var e=Z(t);return"DataView"===e||s(L,e)||s(k,e)},isTypedArray:T,TypedArray:f,TypedArrayPrototype:Y}},function(t,e,l){var n=l(83),i=Function.prototype,c=i.apply,o=i.call;t.exports="object"==typeof Reflect&&Reflect.apply||(n?o.bind(c):function(){return o.apply(c,arguments)})},function(t,e,l){var n=l(1),i=l(10),c=l(15),o=l(28),d=l(131),a=l(103),r=l(20),u=l(74).CONFIGURABLE,s=r.get,Z=r.enforce,b=String(String).split("String");(t.exports=function(t,e,l,a){var r,s=!!a&&!!a.unsafe,h=!!a&&!!a.enumerable,m=!!a&&!!a.noTargetGet,I=a&&void 0!==a.name?a.name:e;i(l)&&("Symbol("===String(I).slice(0,7)&&(I="["+String(I).replace(/^Symbol\(([^)]*)\)/,"$1")+"]"),(!c(l,"name")||u&&l.name!==I)&&o(l,"name",I),(r=Z(l)).source||(r.source=b.join("string"==typeof I?I:""))),t!==n?(s?!m&&t[e]&&(h=!0):delete t[e],h?t[e]=l:o(t,e,l)):h?t[e]=l:d(e,l)})(Function.prototype,"toString",(function(){return i(this)&&s(this).source||a(this)}))},function(t,e,l){var n,i,c,o=l(168),d=l(1),a=l(3),r=l(12),u=l(28),s=l(15),Z=l(101),b=l(104),h=l(86),m=d.TypeError,I=d.WeakMap;if(o||Z.state){var G=Z.state||(Z.state=new I),p=a(G.get),g=a(G.has),X=a(G.set);n=function(t,e){if(g(G,t))throw new m("Object already initialized");return e.facade=t,X(G,t,e),e},i=function(t){return p(G,t)||{}},c=function(t){return g(G,t)}}else{var V=b("state");h[V]=!0,n=function(t,e){if(s(t,V))throw new m("Object already initialized");return e.facade=t,u(t,V,e),e},i=function(t){return s(t,V)?t[V]:{}},c=function(t){return s(t,V)}}t.exports={set:n,get:i,has:c,enforce:function(t){return c(t)?i(t):n(t,{})},getterFor:function(t){return function(e){var l;if(!r(e)||(l=i(e)).type!==t)throw m("Incompatible receiver, "+t+" required");return l}}}},function(t,e,l){var n=l(37);t.exports=function(t){return n(t.length)}},function(t,e,l){var n=l(3),i=l(6),c=l(83),o=n(n.bind);t.exports=function(t,e){return i(t),void 0===e?t:c?o(t,e):function(){return t.apply(e,arguments)}}},function(e,l){e.exports=t},function(t,e){t.exports=!1},function(t,e,l){var n=l(222),i=l(15),c=l(171),o=l(16).f;t.exports=function(t){var e=n.Symbol||(n.Symbol={});i(e,t)||o(e,t,{value:c.f(t)})}},function(t,e,l){var n=l(1).TypeError;t.exports=function(t){if(null==t)throw n("Can't call method on "+t);return t}},function(t,e,l){var n=l(6);t.exports=function(t,e){var l=t[e];return null==l?void 0:n(l)}},function(t,e,l){var n=l(9),i=l(16),c=l(43);t.exports=n?function(t,e,l){return i.f(t,e,c(1,l))}:function(t,e,l){return t[e]=l,t}},function(t,e,l){var n,i=l(2),c=l(106),o=l(134),d=l(86),a=l(170),r=l(102),u=l(104),s=u("IE_PROTO"),Z=function(){},b=function(t){return"<script>"+t+"<\/script>"},h=function(t){t.write(b("")),t.close();var e=t.parentWindow.Object;return t=null,e},m=function(){try{n=new ActiveXObject("htmlfile")}catch(t){}var t,e;m="undefined"!=typeof document?document.domain&&n?h(n):((e=r("iframe")).style.display="none",a.appendChild(e),e.src=String("javascript:"),(t=e.contentWindow.document).open(),t.write(b("document.F=Object")),t.close(),t.F):h(n);for(var l=o.length;l--;)delete m.prototype[o[l]];return m()};d[s]=!0,t.exports=Object.create||function(t,e){var l;return null!==t?(Z.prototype=i(t),l=new Z,Z.prototype=null,l[s]=t):l=m(),void 0===e?l:c.f(l,e)}},function(t,e,l){var n=l(22),i=l(3),c=l(84),o=l(13),d=l(21),a=l(76),r=i([].push),u=function(t){var e=1==t,l=2==t,i=3==t,u=4==t,s=6==t,Z=7==t,b=5==t||s;return function(h,m,I,G){for(var p,g,X=o(h),V=c(X),y=n(m,I),W=d(V),C=0,R=G||a,f=e?R(h,W):l||Z?R(h,0):void 0;W>C;C++)if((b||C in V)&&(g=y(p=V[C],C,X),t))if(e)f[C]=g;else if(g)switch(t){case 3:return!0;case 5:return p;case 6:return C;case 2:r(f,p)}else switch(t){case 4:return!1;case 7:r(f,p)}return s?-1:i||u?u:f}};t.exports={forEach:u(0),map:u(1),filter:u(2),some:u(3),every:u(4),find:u(5),findIndex:u(6),filterReject:u(7)}},function(t,e,l){var n=l(9),i=l(5),c=l(100),o=l(43),d=l(34),a=l(55),r=l(15),u=l(166),s=Object.getOwnPropertyDescriptor;e.f=n?s:function(t,e){if(t=d(t),e=a(e),u)try{return s(t,e)}catch(t){}if(r(t,e))return o(!i(c.f,t,e),t[e])}},function(t,e,l){var n=l(1),i=l(15),c=l(10),o=l(13),d=l(104),a=l(141),r=d("IE_PROTO"),u=n.Object,s=u.prototype;t.exports=a?u.getPrototypeOf:function(t){var e=o(t);if(i(e,r))return e[r];var l=e.constructor;return c(l)&&e instanceof l?l.prototype:e instanceof u?s:null}},function(t,e,l){var n=l(2),i=l(112),c=l(7)("species");t.exports=function(t,e){var l,o=n(t).constructor;return void 0===o||null==(l=n(o)[c])?e:i(l)}},function(t,e,l){var n=l(84),i=l(26);t.exports=function(t){return n(i(t))}},function(t,e){var l=Math.ceil,n=Math.floor;t.exports=function(t){var e=+t;return e!=e||0===e?0:(e>0?n:l)(e)}},function(t,e,l){var n=l(3);t.exports=n({}.isPrototypeOf)},function(t,e,l){var n=l(35),i=Math.min;t.exports=function(t){return t>0?i(n(t),9007199254740991):0}},function(t,e,l){var n=l(3),i=l(26),c=l(14),o=/"/g,d=n("".replace);t.exports=function(t,e,l,n){var a=c(i(t)),r="<"+e;return""!==l&&(r+=" "+l+'="'+d(c(n),o,""")+'"'),r+">"+a+"</"+e+">"}},function(t,e,l){var n=l(4);t.exports=function(t){return n((function(){var e=""[t]('"');return e!==e.toLowerCase()||e.split('"').length>3}))}},function(t,e,l){var n=l(3),i=n({}.toString),c=n("".slice);t.exports=function(t){return c(i(t),8,-1)}},function(t,e,l){var n=l(16).f,i=l(15),c=l(7)("toStringTag");t.exports=function(t,e,l){t&&!l&&(t=t.prototype),t&&!i(t,c)&&n(t,c,{configurable:!0,value:e})}},function(t,e,l){var n=l(1),i=l(36),c=n.TypeError;t.exports=function(t,e){if(i(e,t))return t;throw c("Incorrect invocation")}},function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e,l){var n=l(7),i=l(29),c=l(16),o=n("unscopables"),d=Array.prototype;null==d[o]&&c.f(d,o,{configurable:!0,value:i(null)}),t.exports=function(t){d[o][t]=!0}},function(t,e,l){var n=l(1),i=l(5),c=l(6),o=l(2),d=l(73),a=l(61),r=n.TypeError;t.exports=function(t,e){var l=arguments.length<2?a(t):e;if(c(l))return o(i(l,t));throw r(d(t)+" is not iterable")}},function(t,e,l){var n=l(19);t.exports=function(t,e,l){for(var i in e)n(t,i,e[i],l);return t}},function(t,e,l){var n=l(5);t.exports=function(t){return n(Map.prototype.entries,t)}},function(t,e,l){var n=l(11);t.exports=n("navigator","userAgent")||""},function(t,e,l){var n=l(35),i=Math.max,c=Math.min;t.exports=function(t,e){var l=n(t);return l<0?i(l+e,0):c(l,e)}},function(t,e,l){"use strict";var n=l(4);t.exports=function(t,e){var l=[][t];return!!l&&n((function(){l.call(null,e||function(){return 1},1)}))}},function(t,e,l){var n=l(3),i=l(2),c=l(179);t.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var t,e=!1,l={};try{(t=n(Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set))(l,[]),e=l instanceof Array}catch(t){}return function(l,n){return i(l),c(n),e?t(l,n):l.__proto__=n,l}}():void 0)},function(t,e,l){"use strict";var n=l(0),i=l(1),c=l(5),o=l(9),d=l(158),a=l(17),r=l(111),u=l(42),s=l(43),Z=l(28),b=l(151),h=l(37),m=l(183),I=l(206),G=l(55),p=l(15),g=l(64),X=l(12),V=l(71),y=l(29),W=l(36),C=l(51),R=l(57).f,f=l(207),Y=l(30).forEach,S=l(66),v=l(16),K=l(31),N=l(20),J=l(115),H=N.get,U=N.set,L=v.f,k=K.f,T=Math.round,B=i.RangeError,F=r.ArrayBuffer,A=F.prototype,x=r.DataView,z=a.NATIVE_ARRAY_BUFFER_VIEWS,w=a.TYPED_ARRAY_CONSTRUCTOR,Q=a.TYPED_ARRAY_TAG,P=a.TypedArray,j=a.TypedArrayPrototype,M=a.aTypedArrayConstructor,E=a.isTypedArray,D=function(t,e){M(t);for(var l=0,n=e.length,i=new t(n);n>l;)i[l]=e[l++];return i},O=function(t,e){L(t,e,{get:function(){return H(this)[e]}})},_=function(t){var e;return W(A,t)||"ArrayBuffer"==(e=g(t))||"SharedArrayBuffer"==e},q=function(t,e){return E(t)&&!V(e)&&e in t&&b(+e)&&e>=0},$=function(t,e){return e=G(e),q(t,e)?s(2,t[e]):k(t,e)},tt=function(t,e,l){return e=G(e),!(q(t,e)&&X(l)&&p(l,"value"))||p(l,"get")||p(l,"set")||l.configurable||p(l,"writable")&&!l.writable||p(l,"enumerable")&&!l.enumerable?L(t,e,l):(t[e]=l.value,t)};o?(z||(K.f=$,v.f=tt,O(j,"buffer"),O(j,"byteOffset"),O(j,"byteLength"),O(j,"length")),n({target:"Object",stat:!0,forced:!z},{getOwnPropertyDescriptor:$,defineProperty:tt}),t.exports=function(t,e,l){var o=t.match(/\d+$/)[0]/8,a=t+(l?"Clamped":"")+"Array",r="get"+t,s="set"+t,b=i[a],G=b,p=G&&G.prototype,g={},V=function(t,e){L(t,e,{get:function(){return function(t,e){var l=H(t);return l.view[r](e*o+l.byteOffset,!0)}(this,e)},set:function(t){return function(t,e,n){var i=H(t);l&&(n=(n=T(n))<0?0:n>255?255:255&n),i.view[s](e*o+i.byteOffset,n,!0)}(this,e,t)},enumerable:!0})};z?d&&(G=e((function(t,e,l,n){return u(t,p),J(X(e)?_(e)?void 0!==n?new b(e,I(l,o),n):void 0!==l?new b(e,I(l,o)):new b(e):E(e)?D(G,e):c(f,G,e):new b(m(e)),t,G)})),C&&C(G,P),Y(R(b),(function(t){t in G||Z(G,t,b[t])})),G.prototype=p):(G=e((function(t,e,l,n){u(t,p);var i,d,a,r=0,s=0;if(X(e)){if(!_(e))return E(e)?D(G,e):c(f,G,e);i=e,s=I(l,o);var Z=e.byteLength;if(void 0===n){if(Z%o)throw B("Wrong length");if((d=Z-s)<0)throw B("Wrong length")}else if((d=h(n)*o)+s>Z)throw B("Wrong length");a=d/o}else a=m(e),i=new F(d=a*o);for(U(t,{buffer:i,byteOffset:s,byteLength:d,length:a,view:new x(i)});r<a;)V(t,r++)})),C&&C(G,P),p=G.prototype=y(j)),p.constructor!==G&&Z(p,"constructor",G),Z(p,w,G),Q&&Z(p,Q,a),g[a]=G,n({global:!0,forced:G!=b,sham:!z},g),"BYTES_PER_ELEMENT"in G||Z(G,"BYTES_PER_ELEMENT",o),"BYTES_PER_ELEMENT"in p||Z(p,"BYTES_PER_ELEMENT",o),S(a)}):t.exports=function(){}},function(t,e,l){l(147),l(159);var n=l(11),i=l(3),c=l(63),o=n("Map"),d=n("WeakMap"),a=i([].push),r=c("metadata"),u=r.store||(r.store=new d),s=function(t,e,l){var n=u.get(t);if(!n){if(!l)return;u.set(t,n=new o)}var i=n.get(e);if(!i){if(!l)return;n.set(e,i=new o)}return i};t.exports={store:u,getMap:s,has:function(t,e,l){var n=s(e,l,!1);return void 0!==n&&n.has(t)},get:function(t,e,l){var n=s(e,l,!1);return void 0===n?void 0:n.get(t)},set:function(t,e,l,n){s(l,n,!0).set(t,e)},keys:function(t,e){var l=s(t,e,!1),n=[];return l&&l.forEach((function(t,e){a(n,e)})),n},toKey:function(t){return void 0===t||"symbol"==typeof t?t:String(t)}}},function(t,e,l){"use strict";(function(t){function n(t,e,l,n){return new(l||(l=Promise))((function(i,c){function o(t){try{a(n.next(t))}catch(t){c(t)}}function d(t){try{a(n.throw(t))}catch(t){c(t)}}function a(t){var e;t.done?i(t.value):(e=t.value,e instanceof l?e:new l((function(t){t(e)}))).then(o,d)}a((n=n.apply(t,e||[])).next())}))}function i(t,e,l,n){return new(l||(l=Promise))((function(i,c){function o(t){try{a(n.next(t))}catch(t){c(t)}}function d(t){try{a(n.throw(t))}catch(t){c(t)}}function a(t){var e;t.done?i(t.value):(e=t.value,e instanceof l?e:new l((function(t){t(e)}))).then(o,d)}a((n=n.apply(t,e||[])).next())}))}var c;l.d(e,"a",(function(){return p})),l.d(e,"b",(function(){return J})),l.d(e,"c",(function(){return R})),l.d(e,"d",(function(){return Mn})),l.d(e,"e",(function(){return B})),l.d(e,"f",(function(){return f})),l.d(e,"g",(function(){return I})),l.d(e,"h",(function(){return r})),l.d(e,"i",(function(){return u})),l.d(e,"j",(function(){return K})),l.d(e,"k",(function(){return L})),l.d(e,"l",(function(){return G})),l.d(e,"m",(function(){return W})),l.d(e,"n",(function(){return b})),l.d(e,"o",(function(){return h})),l.d(e,"p",(function(){return Z})),l.d(e,"q",(function(){return c})),l.d(e,"r",(function(){return a})),l.d(e,"s",(function(){return g})),l.d(e,"t",(function(){return V})),l.d(e,"u",(function(){return X})),l.d(e,"v",(function(){return F})),l.d(e,"w",(function(){return x})),l.d(e,"x",(function(){return y})),l.d(e,"y",(function(){return m})),l.d(e,"z",(function(){return U})),l.d(e,"A",(function(){return s})),l.d(e,"B",(function(){return o})),l.d(e,"C",(function(){return d})),l.d(e,"D",(function(){return En})),l.d(e,"E",(function(){return Dn})),function(t){t.formPost="form_post",t.query="query"}(c||(c={}));const o="{{token}}",d="{{username}}",a="{{scope}}",r="{{clientID}}",u="{{clientSecret}}";var s;!function(t){t.ConfigData="config_data",t.OIDCProviderMetaData="oidc_provider_meta_data",t.SessionData="session_data",t.TemporaryData="temporary_data"}(s||(s={}));const Z="refresh_token_timer",b="pkce_code_verifier",h="#",m=["RS256","RS512","RS384","PS256"],I="ERR_JWT_CLAIM_VALIDATION_FAILED",G="nbf",p="code",g="session_state",X="sign_out_url",V="sign_out_success",y="state",W="openid";var C;!function(t){t.Include="include",t.SameOrigin="same-origin",t.Omit="omit"}(C||(C={}));class R{constructor(t,e,l){this.message=l,this.name=e,this.code=t,Object.setPrototypeOf(this,new.target.prototype)}}class f{constructor(){}static filterClaimsFromIDTokenPayload(t){const e=Object.assign({},t);null==e||delete e.iss,null==e||delete e.aud,null==e||delete e.exp,null==e||delete e.iat,null==e||delete e.acr,null==e||delete e.amr,null==e||delete e.azp,null==e||delete e.auth_time,null==e||delete e.nonce,null==e||delete e.c_hash,null==e||delete e.at_hash,null==e||delete e.nbf,null==e||delete e.isk,null==e||delete e.sid;const l={};return Object.entries(e).forEach(([t,e])=>{const n=t.split("_").map((t,e)=>0===e?t:[t[0].toUpperCase(),...t.slice(1)].join("")).join("");l[n]=e}),l}static getTokenRequestHeaders(){return{Accept:"application/json","Content-Type":"application/x-www-form-urlencoded"}}static generateStateParamForRequestCorrelation(t,e){const l=parseInt(t.split("#")[1]);return e?`${e}_request_${l}`:"request_"+l}static extractPKCEKeyFromStateParam(t){return"pkce_code_verifier#"+parseInt(t.split("request_")[1])}}f.getTenantDomainFromIdTokenPayload=(t,e="@")=>{const l=t.sub.split(e);return l.length>2?l[l.length-1]:""};class Y{constructor(t,e){this._dataLayer=t,this._config=()=>i(this,void 0,void 0,(function*(){return yield this._dataLayer.getConfigData()})),this._oidcProviderMetaData=()=>i(this,void 0,void 0,(function*(){return yield this._dataLayer.getOIDCProviderMetaData()})),this._cryptoHelper=e}resolveEndpoints(t){return i(this,void 0,void 0,(function*(){const e={},l=yield this._config();return l.endpoints&&Object.keys(l.endpoints).forEach(t=>{const n=t.replace(/[A-Z]/g,t=>"_"+t.toLowerCase());e[n]=(null==l?void 0:l.endpoints)?l.endpoints[t]:""}),Object.assign(Object.assign({},t),e)}))}resolveEndpointsExplicitly(){return i(this,void 0,void 0,(function*(){const t={},e=yield this._config(),l=["authorization_endpoint","end_session_endpoint","jwks_uri","check_session_iframe","revocation_endpoint","token_endpoint","issuer","userinfo_endpoint"];if(!e.endpoints||!Object.keys(null==e?void 0:e.endpoints).every(t=>{const e=t.replace(/[A-Z]/g,t=>"_"+t.toLowerCase());return l.includes(e)}))throw new R("JS-AUTH_HELPER-REE-NF01","No required endpoints.","Required oidc endpoints are not defined");return e.endpoints&&Object.keys(e.endpoints).forEach(l=>{const n=l.replace(/[A-Z]/g,t=>"_"+t.toLowerCase());t[n]=(null==e?void 0:e.endpoints)?e.endpoints[l]:""}),Object.assign({},t)}))}resolveEndpointsByBaseURL(){return i(this,void 0,void 0,(function*(){const t={},e=yield this._config(),l=e.baseUrl;if(!l)throw new R("JS-AUTH_HELPER_REBO-NF01","Base URL not defined.","Base URL is not defined in AuthClient config.");e.endpoints&&Object.keys(e.endpoints).forEach(l=>{const n=l.replace(/[A-Z]/g,t=>"_"+t.toLowerCase());t[n]=(null==e?void 0:e.endpoints)?e.endpoints[l]:""});const n={authorization_endpoint:l+"/oauth2/authorize",end_session_endpoint:l+"/oidc/logout",issuer:l+"/oauth2/token",jwks_uri:l+"/oauth2/jwks",check_session_iframe:l+"/oidc/checksession",revocation_endpoint:l+"/oauth2/revoke",token_endpoint:l+"/oauth2/token",userinfo_endpoint:l+"/oauth2/userinfo"};return Object.assign(Object.assign({},n),t)}))}validateIdToken(t){return i(this,void 0,void 0,(function*(){const e=(yield this._dataLayer.getOIDCProviderMetaData()).jwks_uri,l=yield this._config();if(!e||0===e.trim().length)throw new R("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(e,{credentials:l.sendCookiesInRequests?C.Include:C.SameOrigin})}catch(e){throw new R("JS-AUTH_HELPER-VIT-NE02","Request to jwks endpoint failed.",null!=e?e:"The request sent to get the jwks from the server failed.")}if(200!==n.status||!n.ok)throw new R("JS-AUTH_HELPER-VIT-HE03",`Invalid response status received for jwks request (${n.statusText}).`,yield n.json());const i=(yield this._oidcProviderMetaData()).issuer,{keys:c}=yield n.json(),o=yield this._cryptoHelper.getJWKForTheIdToken(t.split(".")[0],c);return this._cryptoHelper.isValidIdToken(t,o,(yield this._config()).clientID,null!=i?i:"",this._cryptoHelper.decodeIDToken(t).sub,(yield this._config()).clockTolerance)}))}getAuthenticatedUserInfo(t){var e,l,n,i;const c=this._cryptoHelper.decodeIDToken(t),o=f.getTenantDomainFromIdTokenPayload(c),d=null!==(e=null==c?void 0:c.username)&&void 0!==e?e:"",a=null!==(l=c.given_name)&&void 0!==l?l:"",r=null!==(n=c.family_name)&&void 0!==n?n:"",u=a&&r?`${a} ${r}`:a||r||"",s=null!==(i=c.preferred_username)&&void 0!==i?i:u;return Object.assign({displayName:s,tenantDomain:o,username:d},f.filterClaimsFromIDTokenPayload(c))}replaceCustomGrantTemplateTags(t,e){var l;return i(this,void 0,void 0,(function*(){let n="openid";const i=yield this._config(),c=yield this._dataLayer.getSessionData(e);return i.scope&&i.scope.length>0&&(i.scope.includes("openid")||i.scope.push("openid"),n=i.scope.join(" ")),t.replace("{{token}}",c.access_token).replace("{{username}}",this.getAuthenticatedUserInfo(c.id_token).username).replace("{{scope}}",n).replace("{{clientID}}",i.clientID).replace("{{clientSecret}}",null!==(l=i.clientSecret)&&void 0!==l?l:"")}))}clearUserSessionData(t){return i(this,void 0,void 0,(function*(){yield this._dataLayer.removeTemporaryData(t),yield this._dataLayer.removeSessionData(t)}))}handleTokenResponse(t,e){return i(this,void 0,void 0,(function*(){if(200!==t.status||!t.ok)throw new R("JS-AUTH_HELPER-HTR-NE01",`Invalid response status received for token request (${t.statusText}).`,yield t.json());const l=yield t.json();if(l.created_at=(new Date).getTime(),(yield this._config()).validateIDToken)return this.validateIdToken(l.id_token).then(()=>i(this,void 0,void 0,(function*(){yield this._dataLayer.setSessionData(l,e);const t={accessToken:l.access_token,createdAt:l.created_at,expiresIn:l.expires_in,idToken:l.id_token,refreshToken:l.refresh_token,scope:l.scope,tokenType:l.token_type};return Promise.resolve(t)})));{const t={accessToken:l.access_token,createdAt:l.created_at,expiresIn:l.expires_in,idToken:l.id_token,refreshToken:l.refresh_token,scope:l.scope,tokenType:l.token_type};return yield this._dataLayer.setSessionData(l,e),Promise.resolve(t)}}))}generatePKCEKey(t){var e;return i(this,void 0,void 0,(function*(){const l=yield this._dataLayer.getTemporaryData(t),n=[];Object.keys(l).forEach(t=>{t.startsWith("pkce_code_verifier")&&n.push(t)});const i=n.sort().pop();return"pkce_code_verifier#"+(parseInt(null!==(e=null==i?void 0:i.split("#")[1])&&void 0!==e?e:"-1")+1)}))}}class S{constructor(t){this._cryptoUtils=t}getCodeVerifier(){return this._cryptoUtils.base64URLEncode(this._cryptoUtils.generateRandomBytes(32))}getCodeChallenge(t){return this._cryptoUtils.base64URLEncode(this._cryptoUtils.hashSha256(t))}getJWKForTheIdToken(t,e){const l=JSON.parse(this._cryptoUtils.base64URLDecode(t));for(const t of e)if(l.kid===t.kid)return t;throw new R("JS-CRYPTO_UTIL-GJFTIT-IV01","kid not found.","Failed to find the 'kid' specified in the id_token. 'kid' found in the header : "+l.kid+", Expected values: "+e.map(t=>t.kid).join(", "))}isValidIdToken(t,e,l,n,i,c){return this._cryptoUtils.verifyJwt(t,e,m,l,n,i,c).then(t=>t?Promise.resolve(!0):Promise.reject(new R("JS-CRYPTO_HELPER-IVIT-IV01","Invalid ID token.","ID token validation returned false"))).catch(t=>"ERR_JWT_CLAIM_VALIDATION_FAILED"===(null==t?void 0:t.code)&&"nbf"===(null==t?void 0:t.claim)?Promise.reject(new R("JS-CRYPTO_UTILS-IVIT-IV02","JWT NBF CLAIM VALIDATION FAILED","JWT NBF claim validation has been failed")):Promise.reject(new R("JS-CRYPTO_UTILS-IVIT-IV03","JWT VALIDATION FAILED","JWT validation has been failed")))}decodeIDToken(t){try{const e=this._cryptoUtils.base64URLDecode(t.split(".")[1]);return JSON.parse(e)}catch(t){throw new R("JS-CRYPTO_UTIL-DIT-IV01","Decoding ID token failed.",t)}}}class v{constructor(t,e){this._cryptoUtils=e,this._cryptoHelper=new S(e),this._authenticationHelper=new Y(t,this._cryptoHelper),this._dataLayer=t,this._config=()=>i(this,void 0,void 0,(function*(){return yield this._dataLayer.getConfigData()})),this._oidcProviderMetaData=()=>i(this,void 0,void 0,(function*(){return yield this._dataLayer.getOIDCProviderMetaData()}))}getAuthorizationURL(t,e){var l,n,c;return i(this,void 0,void 0,(function*(){const i=yield this._dataLayer.getOIDCProviderMetaDataParameter("authorization_endpoint"),o=yield this._config();if(!i||0===i.trim().length)throw new R("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 d=new URL(i),a=new Map;a.set("response_type","code"),a.set("client_id",o.clientID);let r="openid";o.scope&&o.scope.length>0&&(o.scope.includes("openid")||o.scope.push("openid"),r=o.scope.join(" ")),a.set("scope",r),a.set("redirect_uri",o.signInRedirectURL),o.responseMode&&a.set("response_mode",o.responseMode);const u=yield this._authenticationHelper.generatePKCEKey(e);if(o.enablePKCE){const t=null===(l=this._cryptoHelper)||void 0===l?void 0:l.getCodeVerifier(),i=null===(n=this._cryptoHelper)||void 0===n?void 0:n.getCodeChallenge(t);yield this._dataLayer.setTemporaryDataParameter(u,t,e),a.set("code_challenge_method","S256"),a.set("code_challenge",i)}o.prompt&&a.set("prompt",o.prompt);const s=t;if(s)for(const[t,e]of Object.entries(s))if(""!=t&&""!=e&&"state"!==t){const l=t.replace(/[A-Z]/g,t=>"_"+t.toLowerCase());a.set(l,e.toString())}a.set("state",f.generateStateParamForRequestCorrelation(u,s?null===(c=s.state)||void 0===c?void 0:c.toString():""));for(const[t,e]of a.entries())d.searchParams.append(t,e);return d.toString()}))}requestAccessToken(t,e,l,n){return i(this,void 0,void 0,(function*(){const i=(yield this._oidcProviderMetaData()).token_endpoint,c=yield this._config();if(!i||0===i.trim().length)throw new R("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.");e&&(yield this._dataLayer.setSessionDataParameter("session_state",e,n));const o=[];o.push("client_id="+c.clientID),c.clientSecret&&c.clientSecret.trim().length>0&&o.push("client_secret="+c.clientSecret);const d=t;let a;o.push("code="+d),o.push("grant_type=authorization_code"),o.push("redirect_uri="+c.signInRedirectURL),c.enablePKCE&&(o.push("code_verifier="+(yield this._dataLayer.getTemporaryDataParameter(f.extractPKCEKeyFromStateParam(l),n))),yield this._dataLayer.removeTemporaryDataParameter(f.extractPKCEKeyFromStateParam(l),n));try{a=yield fetch(i,{body:o.join("&"),credentials:c.sendCookiesInRequests?C.Include:C.SameOrigin,headers:new Headers(f.getTokenRequestHeaders()),method:"POST"})}catch(i){throw new R("JS-AUTH_CORE-RAT1-NE02","Requesting access token failed",null!=i?i:"The request to get the access token from the server failed.")}if(!a.ok)throw new R("JS-AUTH_CORE-RAT1-HE03","Requesting access token failed with "+a.statusText,yield a.json());return yield this._authenticationHelper.handleTokenResponse(a,n)}))}refreshAccessToken(t){return i(this,void 0,void 0,(function*(){const e=(yield this._oidcProviderMetaData()).token_endpoint,l=yield this._config(),n=yield this._dataLayer.getSessionData(t);if(!n.refresh_token)throw new R("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(!e||0===e.trim().length)throw new R("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 i=[];let c;i.push("client_id="+l.clientID),i.push("refresh_token="+n.refresh_token),i.push("grant_type=refresh_token"),l.clientSecret&&l.clientSecret.trim().length>0&&i.push("client_secret="+l.clientSecret);try{c=yield fetch(e,{body:i.join("&"),credentials:l.sendCookiesInRequests?C.Include:C.SameOrigin,headers:new Headers(f.getTokenRequestHeaders()),method:"POST"})}catch(e){throw new R("JS-AUTH_CORE-RAT2-NR03","Refresh access token request failed.",null!=e?e:"The request to refresh the access token failed.")}if(!c.ok)throw new R("JS-AUTH_CORE-RAT2-HE04","Refreshing access token failed with "+c.statusText,yield c.json());return this._authenticationHelper.handleTokenResponse(c,t)}))}revokeAccessToken(t){return i(this,void 0,void 0,(function*(){const e=(yield this._oidcProviderMetaData()).revocation_endpoint,l=yield this._config();if(!e||0===e.trim().length)throw new R("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 i;n.push("client_id="+l.clientID),n.push("token="+(yield this._dataLayer.getSessionData(t)).access_token),n.push("token_type_hint=access_token");try{i=yield fetch(e,{body:n.join("&"),credentials:l.sendCookiesInRequests?C.Include:C.SameOrigin,headers:new Headers(f.getTokenRequestHeaders()),method:"POST"})}catch(e){throw new R("JS-AUTH_CORE-RAT3-NE02","The request to revoke access token failed.",null!=e?e:"The request sent to revoke the access token failed.")}if(200!==i.status||!i.ok)throw new R("JS-AUTH_CORE-RAT3-HE03",`Invalid response status received for revoke access token request (${i.statusText}).`,yield i.json());return this._authenticationHelper.clearUserSessionData(t),Promise.resolve(i)}))}requestCustomGrant(t,e){return i(this,void 0,void 0,(function*(){const l=yield this._oidcProviderMetaData(),n=yield this._config();let c;if(c=t.tokenEndpoint&&0!==t.tokenEndpoint.trim().length?t.tokenEndpoint:l.token_endpoint,!c||0===c.trim().length)throw new R("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(t.data).map(([t,l])=>i(this,void 0,void 0,(function*(){const n=yield this._authenticationHelper.replaceCustomGrantTemplateTags(l,e);return`${t}=${n}`}))));let d=Object.assign({},f.getTokenRequestHeaders());t.attachToken&&(d=Object.assign(Object.assign({},d),{Authorization:"Bearer "+(yield this._dataLayer.getSessionData(e)).access_token}));const a={body:o.join("&"),credentials:n.sendCookiesInRequests?C.Include:C.SameOrigin,headers:new Headers(d),method:"POST"};let r;try{r=yield fetch(c,a)}catch(t){throw new R("JS-AUTH_CORE-RCG-NE02","The custom grant request failed.",null!=t?t:"The request sent to get the custom grant failed.")}if(200!==r.status||!r.ok)throw new R("JS-AUTH_CORE-RCG-HE03",`Invalid response status received for the custom grant request. (${r.statusText})`,yield r.json());return t.returnsSession?this._authenticationHelper.handleTokenResponse(r,e):Promise.resolve(yield r.json())}))}getBasicUserInfo(t){return i(this,void 0,void 0,(function*(){const e=yield this._dataLayer.getSessionData(t),l=this._authenticationHelper.getAuthenticatedUserInfo(null==e?void 0:e.id_token);let n={allowedScopes:e.scope,sessionState:e.session_state};return Object.keys(l).forEach(t=>{void 0!==l[t]&&""!==l[t]&&null!==l[t]||delete l[t]}),n=Object.assign(Object.assign({},n),l),n}))}getDecodedIDToken(t){return i(this,void 0,void 0,(function*(){const e=(yield this._dataLayer.getSessionData(t)).id_token;return this._cryptoHelper.decodeIDToken(e)}))}getIDToken(t){return i(this,void 0,void 0,(function*(){return(yield this._dataLayer.getSessionData(t)).id_token}))}getOIDCProviderMetaData(t){return i(this,void 0,void 0,(function*(){const e=yield this._config();if(!t&&(yield this._dataLayer.getTemporaryDataParameter("op_config_initiated")))return Promise.resolve();const l=e.wellKnownEndpoint;if(l){let t;try{if(t=yield fetch(l),200!==t.status||!t.ok)throw new Error}catch(e){throw new R("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 t.json())),yield this._dataLayer.setTemporaryDataParameter("op_config_initiated",!0),Promise.resolve()}if(e.baseUrl){try{yield this._dataLayer.setOIDCProviderMetaData(yield this._authenticationHelper.resolveEndpointsByBaseURL())}catch(e){throw new R("JS-AUTH_CORE-GOPMD-IV02","Resolving endpoints failed.",null!=e?e:"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(e){throw new R("JS-AUTH_CORE-GOPMD-IV03","Resolving endpoints failed.",null!=e?e:"Resolving endpoints by explicitly failed.")}return yield this._dataLayer.setTemporaryDataParameter("op_config_initiated",!0),Promise.resolve()}))}getOIDCServiceEndpoints(){var t,e,l,n,c,o,d,a,r,u;return i(this,void 0,void 0,(function*(){const i=yield this._oidcProviderMetaData();return{authorizationEndpoint:null!==(t=i.authorization_endpoint)&&void 0!==t?t:"",checkSessionIframe:null!==(e=i.check_session_iframe)&&void 0!==e?e:"",endSessionEndpoint:null!==(l=i.end_session_endpoint)&&void 0!==l?l:"",introspectionEndpoint:null!==(n=i.introspection_endpoint)&&void 0!==n?n:"",issuer:null!==(c=i.issuer)&&void 0!==c?c:"",jwksUri:null!==(o=i.jwks_uri)&&void 0!==o?o:"",registrationEndpoint:null!==(d=i.registration_endpoint)&&void 0!==d?d:"",revocationEndpoint:null!==(a=i.revocation_endpoint)&&void 0!==a?a:"",tokenEndpoint:null!==(r=i.token_endpoint)&&void 0!==r?r:"",userinfoEndpoint:null!==(u=i.userinfo_endpoint)&&void 0!==u?u:""}}))}getSignOutURL(t){var e,l,n;return i(this,void 0,void 0,(function*(){const i=null===(e=yield this._oidcProviderMetaData())||void 0===e?void 0:e.end_session_endpoint,c=yield this._config();if(!i||0===i.trim().length)throw new R("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 o=null===(l=yield this._dataLayer.getSessionData(t))||void 0===l?void 0:l.id_token;if(!o||0===o.trim().length)throw new R("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 d=null!==(n=null==c?void 0:c.signOutRedirectURL)&&void 0!==n?n:null==c?void 0:c.signInRedirectURL;if(!d||0===d.trim().length)throw new R("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`${i}?id_token_hint=${o}&post_logout_redirect_uri=${d}&state=sign_out_success`}))}signOut(t){return i(this,void 0,void 0,(function*(){return yield this.getSignOutURL(t)}))}clearUserSessionData(t){return i(this,void 0,void 0,(function*(){yield this._authenticationHelper.clearUserSessionData(t)}))}getAccessToken(t){var e;return i(this,void 0,void 0,(function*(){return null===(e=yield this._dataLayer.getSessionData(t))||void 0===e?void 0:e.access_token}))}isAuthenticated(t){return i(this,void 0,void 0,(function*(){return Boolean(yield this.getAccessToken(t))}))}getPKCECode(t,e){return i(this,void 0,void 0,(function*(){return yield this._dataLayer.getTemporaryDataParameter(f.extractPKCEKeyFromStateParam(t),e)}))}setPKCECode(t,e,l){return i(this,void 0,void 0,(function*(){return yield this._dataLayer.setTemporaryDataParameter(f.extractPKCEKeyFromStateParam(e),t,l)}))}updateConfig(t){return i(this,void 0,void 0,(function*(){yield this._dataLayer.setConfigData(t),yield this.getOIDCProviderMetaData(!0)}))}}class K{constructor(t,e){this._id=t,this._store=e}setDataInBulk(t,e){var l;return i(this,void 0,void 0,(function*(){const n=null!==(l=yield this._store.getData(t))&&void 0!==l?l:null,i=n&&JSON.parse(n),c=Object.assign(Object.assign({},i),e),o=JSON.stringify(c);yield this._store.setData(t,o)}))}setValue(t,e,l){var n;return i(this,void 0,void 0,(function*(){const i=null!==(n=yield this._store.getData(t))&&void 0!==n?n:null,c=i&&JSON.parse(i),o=Object.assign(Object.assign({},c),{[e]:l}),d=JSON.stringify(o);yield this._store.setData(t,d)}))}removeValue(t,e){var l;return i(this,void 0,void 0,(function*(){const n=null!==(l=yield this._store.getData(t))&&void 0!==l?l:null,i=n&&JSON.parse(n),c=Object.assign({},i);delete c[e];const o=JSON.stringify(c);yield this._store.setData(t,o)}))}_resolveKey(t,e){return e?`${t}-${this._id}-${e}`:`${t}-${this._id}`}setConfigData(t){return i(this,void 0,void 0,(function*(){yield this.setDataInBulk(this._resolveKey(s.ConfigData),t)}))}setOIDCProviderMetaData(t){return i(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(s.OIDCProviderMetaData),t)}))}setTemporaryData(t,e){return i(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(s.TemporaryData,e),t)}))}setSessionData(t,e){return i(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(s.SessionData,e),t)}))}setCustomData(t,e,l){return i(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(t,l),e)}))}getConfigData(){var t;return i(this,void 0,void 0,(function*(){return JSON.parse(null!==(t=yield this._store.getData(this._resolveKey(s.ConfigData)))&&void 0!==t?t:null)}))}getOIDCProviderMetaData(){var t;return i(this,void 0,void 0,(function*(){return JSON.parse(null!==(t=yield this._store.getData(this._resolveKey(s.OIDCProviderMetaData)))&&void 0!==t?t:null)}))}getTemporaryData(t){var e;return i(this,void 0,void 0,(function*(){return JSON.parse(null!==(e=yield this._store.getData(this._resolveKey(s.TemporaryData,t)))&&void 0!==e?e:null)}))}getSessionData(t){var e;return i(this,void 0,void 0,(function*(){return JSON.parse(null!==(e=yield this._store.getData(this._resolveKey(s.SessionData,t)))&&void 0!==e?e:null)}))}getCustomData(t,e){var l;return i(this,void 0,void 0,(function*(){return JSON.parse(null!==(l=yield this._store.getData(this._resolveKey(t,e)))&&void 0!==l?l:null)}))}removeConfigData(){return i(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(s.ConfigData))}))}removeOIDCProviderMetaData(){return i(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(s.OIDCProviderMetaData))}))}removeTemporaryData(t){return i(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(s.TemporaryData,t))}))}removeSessionData(t){return i(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(s.SessionData,t))}))}getConfigDataParameter(t){return i(this,void 0,void 0,(function*(){const e=yield this._store.getData(this._resolveKey(s.ConfigData));return e&&JSON.parse(e)[t]}))}getOIDCProviderMetaDataParameter(t){return i(this,void 0,void 0,(function*(){const e=yield this._store.getData(this._resolveKey(s.OIDCProviderMetaData));return e&&JSON.parse(e)[t]}))}getTemporaryDataParameter(t,e){return i(this,void 0,void 0,(function*(){const l=yield this._store.getData(this._resolveKey(s.TemporaryData,e));return l&&JSON.parse(l)[t]}))}getSessionDataParameter(t,e){return i(this,void 0,void 0,(function*(){const l=yield this._store.getData(this._resolveKey(s.SessionData,e));return l&&JSON.parse(l)[t]}))}setConfigDataParameter(t,e){return i(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(s.ConfigData),t,e)}))}setOIDCProviderMetaDataParameter(t,e){return i(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(s.OIDCProviderMetaData),t,e)}))}setTemporaryDataParameter(t,e,l){return i(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(s.TemporaryData,l),t,e)}))}setSessionDataParameter(t,e,l){return i(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(s.SessionData,l),t,e)}))}removeConfigDataParameter(t){return i(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(s.ConfigData),t)}))}removeOIDCProviderMetaDataParameter(t){return i(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(s.OIDCProviderMetaData),t)}))}removeTemporaryDataParameter(t,e){return i(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(s.TemporaryData,e),t)}))}removeSessionDataParameter(t,e){return i(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(s.SessionData,e),t)}))}}const N={clockTolerance:300,enablePKCE:!0,responseMode:c.query,scope:["openid"],sendCookiesInRequests:!0,validateIDToken:!0};class J{
|
|
16
2
|
/**
|
|
17
3
|
* This is the constructor method that returns an instance of the .
|
|
18
4
|
*
|
|
@@ -27,7 +13,7 @@ PERFORMANCE OF THIS SOFTWARE.
|
|
|
27
13
|
* @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#constructor
|
|
28
14
|
* @preserve
|
|
29
15
|
*/
|
|
30
|
-
constructor(t,e){J._instanceID?J._instanceID+=1:J._instanceID=0,this._dataLayer=new K("instance_"+J._instanceID,t),this._authenticationCore=new
|
|
16
|
+
constructor(t,e){J._instanceID?J._instanceID+=1:J._instanceID=0,this._dataLayer=new K("instance_"+J._instanceID,t),this._authenticationCore=new v(this._dataLayer,e),J._authenticationCore=new v(this._dataLayer,e)
|
|
31
17
|
/**
|
|
32
18
|
*
|
|
33
19
|
* This method initializes the SDK with the config data.
|
|
@@ -46,7 +32,7 @@ constructor(t,e){J._instanceID?J._instanceID+=1:J._instanceID=0,this._dataLayer=
|
|
|
46
32
|
* @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#initialize
|
|
47
33
|
*
|
|
48
34
|
* @preserve
|
|
49
|
-
*/}initialize(t){var e,n
|
|
35
|
+
*/}initialize(t){var e,l,n;return i(this,void 0,void 0,(function*(){yield this._dataLayer.setConfigData(Object.assign(Object.assign(Object.assign({},N),t),{scope:[...null!==(e=N.scope)&&void 0!==e?e:[],...null!==(n=null===(l=t.scope)||void 0===l?void 0:l.filter(t=>{var e;return!(null===(e=null==N?void 0:N.scope)||void 0===e?void 0:e.includes(t))}))&&void 0!==n?n:[]]}))}))}
|
|
50
36
|
/**
|
|
51
37
|
* This method returns the `DataLayer` object that allows you to access authentication data.
|
|
52
38
|
*
|
|
@@ -87,7 +73,7 @@ constructor(t,e){J._instanceID?J._instanceID+=1:J._instanceID=0,this._dataLayer=
|
|
|
87
73
|
* @memberof AsgardeoAuthClient
|
|
88
74
|
*
|
|
89
75
|
* @preserve
|
|
90
|
-
*/getAuthorizationURL(t,e){return i(this,void 0,void 0,(function*(){const
|
|
76
|
+
*/getAuthorizationURL(t,e){return i(this,void 0,void 0,(function*(){const l=Object.assign({},t);return null==l||delete l.forceInit,(yield this._dataLayer.getTemporaryDataParameter("op_config_initiated"))?this._authenticationCore.getAuthorizationURL(l,e):this._authenticationCore.getOIDCProviderMetaData(null==t?void 0:t.forceInit).then(()=>this._authenticationCore.getAuthorizationURL(l,e))}))}
|
|
91
77
|
/**
|
|
92
78
|
* This is an async method that sends a request to obtain the access token and returns a Promise
|
|
93
79
|
* that resolves with the token and other relevant data.
|
|
@@ -113,7 +99,7 @@ constructor(t,e){J._instanceID?J._instanceID+=1:J._instanceID=0,this._dataLayer=
|
|
|
113
99
|
* @memberof AsgardeoAuthClient
|
|
114
100
|
*
|
|
115
101
|
* @preserve
|
|
116
|
-
*/requestAccessToken(t,e,n
|
|
102
|
+
*/requestAccessToken(t,e,l,n){return i(this,void 0,void 0,(function*(){return(yield this._dataLayer.getTemporaryDataParameter("op_config_initiated"))?this._authenticationCore.requestAccessToken(t,e,l,n):this._authenticationCore.getOIDCProviderMetaData(!1).then(()=>this._authenticationCore.requestAccessToken(t,e,l,n))}))}
|
|
117
103
|
/**
|
|
118
104
|
* This method clears all authentication data and returns the sign-out URL.
|
|
119
105
|
*
|
|
@@ -392,7 +378,7 @@ constructor(t,e){J._instanceID?J._instanceID+=1:J._instanceID=0,this._dataLayer=
|
|
|
392
378
|
* @memberof AsgardeoAuthClient
|
|
393
379
|
*
|
|
394
380
|
* @preserve
|
|
395
|
-
*/setPKCECode(t,e,
|
|
381
|
+
*/setPKCECode(t,e,l){return i(this,void 0,void 0,(function*(){yield this._authenticationCore.setPKCECode(t,e,l)}))}
|
|
396
382
|
/**
|
|
397
383
|
* This method returns if the sign-out is successful or not.
|
|
398
384
|
*
|
|
@@ -408,7 +394,7 @@ constructor(t,e){J._instanceID?J._instanceID+=1:J._instanceID=0,this._dataLayer=
|
|
|
408
394
|
* @memberof AsgardeoAuthClient
|
|
409
395
|
*
|
|
410
396
|
* @preserve
|
|
411
|
-
*/static isSignOutSuccessful(t){const e=new URL(t),
|
|
397
|
+
*/static isSignOutSuccessful(t){const e=new URL(t),l=e.searchParams.get("state"),n=Boolean(e.searchParams.get("error"));return!!l&&"sign_out_success"===l&&!n}
|
|
412
398
|
/**
|
|
413
399
|
* This method returns if the sign-out has failed or not.
|
|
414
400
|
*
|
|
@@ -424,7 +410,7 @@ constructor(t,e){J._instanceID?J._instanceID+=1:J._instanceID=0,this._dataLayer=
|
|
|
424
410
|
* @memberof AsgardeoAuthClient
|
|
425
411
|
*
|
|
426
412
|
* @preserve
|
|
427
|
-
*/static didSignOutFail(t){const e=new URL(t),
|
|
413
|
+
*/static didSignOutFail(t){const e=new URL(t),l=e.searchParams.get("state"),n=Boolean(e.searchParams.get("error"));return!!l&&"sign_out_success"===l&&n}
|
|
428
414
|
/**
|
|
429
415
|
* This method updates the configuration that was passed into the constructor when instantiating this class.
|
|
430
416
|
*
|
|
@@ -445,8 +431,8 @@ constructor(t,e){J._instanceID?J._instanceID+=1:J._instanceID=0,this._dataLayer=
|
|
|
445
431
|
* @memberof AsgardeoAuthClient
|
|
446
432
|
*
|
|
447
433
|
* @preserve
|
|
448
|
-
*/updateConfig(t){return i(this,void 0,void 0,(function*(){yield this._authenticationCore.updateConfig(t)}))}}var H,U;!function(t){t.LocalStorage="localStorage",t.SessionStorage="sessionStorage",t.WebWorker="webWorker",t.BrowserMemory="browserMemory"}(H||(H={})),function(t){t.SignIn="sign-in",t.SignOut="sign-out",t.Initialize="initialize",t.HttpRequestStart="http-request-start",t.HttpRequestFinish="http-request-finish",t.HttpRequestError="http-request-error",t.HttpRequestSuccess="http-request-success",t.RevokeAccessToken="revoke-access-token",t.CustomGrant="custom-grant",t.SignOutFailed="sign-out-failed"}(U||(U={}));const L="Y2hlY2tTZXNzaW9u";class B{constructor(t){this._authenticationClient=t,this._dataLayer=this._authenticationClient.getDataLayer()}refreshAccessTokenAutomatically(){return l(this,void 0,void 0,(function*(){const t=yield this._dataLayer.getSessionData();if(t.refresh_token){const e=parseInt(t.expires_in),n=setTimeout(()=>l(this,void 0,void 0,(function*(){yield this._authenticationClient.refreshAccessToken()})),1e3*(e<=10?e:e-10));yield this._dataLayer.setTemporaryDataParameter(s,JSON.stringify(n))}}))}clearRefreshTokenTimeout(){return l(this,void 0,void 0,(function*(){if(yield this._dataLayer.getTemporaryDataParameter(s)){const t=JSON.parse(yield this._dataLayer.getTemporaryDataParameter(s));clearTimeout(t)}}))}}class k{constructor(){}static removeAuthorizationCode(){const t=location.href;history.pushState({},document.title,t.replace(/\?code=.*$/,""))}static getPKCE(t){var e;return null!==(e=sessionStorage.getItem(t))&&void 0!==e?e:""}static setPKCE(t,e){sessionStorage.setItem(t,e)}static setSignOutURL(t){sessionStorage.setItem(y,t)}static getSignOutURL(){var t;return null!==(t=sessionStorage.getItem(y))&&void 0!==t?t:""}static removePKCE(t){sessionStorage.removeItem(t)}static canContinueSignIn(t,e){return!(t&&!k.hasErrorInURL()&&!k.hasAuthSearchParamsInURL()&&!e)}static isInitializedSilentSignIn(){return k.isSilentStatePresentInURL()}static wasSignInCalled(){return!(!k.hasErrorInURL()&&!k.hasAuthSearchParamsInURL()||this.isSilentStatePresentInURL())}static wasSilentSignInCalled(){const t=sessionStorage.getItem("initialized-silent-sign-in"),e=t?JSON.parse(t):null;return Boolean(e)}static isSignOutSuccessful(){if(J.isSignOutSuccessful(window.location.href)){const t=window.location.href.split("?")[0];return history.pushState({},document.title,t),!0}return!1}static didSignOutFail(){if(J.didSignOutFail(window.location.href)){const t=new URL(window.location.href),e=t.searchParams.get("error"),n=t.searchParams.get("error_description"),l=window.location.href.split("?")[0];return history.pushState({},document.title,l),{description:null!=n?n:"",error:null!=e?e:""}}return!1}static isSilentStatePresentInURL(){var t;const e=new URL(window.location.href).searchParams.get("state");return null!==(t=null==e?void 0:e.includes("sign-in-silently"))&&void 0!==t&&t}static hasAuthSearchParamsInURL(t=window.location.search){return/[?&]code=[^&]+/.test(t)}static hasErrorInURL(t=window.location.href){const e=new URL(t);return!!e.searchParams.get("error")&&e.searchParams.get("state")!==X}static canSendPromptNoneRequest(){const t=sessionStorage.getItem("promptNoneRequestSent");return!(t&&JSON.parse(t))}static setPromptNoneRequestSent(t){sessionStorage.setItem("promptNoneRequestSent",JSON.stringify(t))}static waitTillPageRedirect(t){return l(this,void 0,void 0,(function*(){const e=null!=t?t:3e3;yield new Promise(t=>setTimeout(t,1e3*e))}))}}const x=(()=>{let t,e,n,i,c,o,r,a,d,u,Z;const s=(l,r,a,d,u,s,I)=>{t=l,e=r,n=a,i=d,c=s,o=u,Z=I,i>-1&&b(),o>-1&&(u=setInterval(()=>{h()},1e3*o))},b=()=>l(void 0,void 0,void 0,(function*(){var o;if(!e||!t||!c)return;const r="opIFrame";function d(){var i;return l(this,void 0,void 0,(function*(){const l=yield n();if(Boolean(t)&&Boolean(l)){const n=`${t} ${l}`,c=document.getElementById("rpIFrame"),o=(null===(i=null==c?void 0:c.contentDocument)||void 0===i?void 0:i.getElementById(r)).contentWindow;null==o||o.postMessage(n,e)}}))}const u=document.getElementById("rpIFrame");(null===(o=null==u?void 0:u.contentDocument)||void 0===o?void 0:o.getElementById(r)).src=e+"?client_id="+t+"&redirect_uri="+c,yield d(),a=setInterval(d,1e3*i),m()})),I=()=>{clearInterval(a),clearInterval(void 0)},m=()=>{null===window||void 0===window||window.addEventListener("message",(function(t){var n;return l(this,void 0,void 0,(function*(){!e||(null==e?void 0:e.indexOf(t.origin))<0||"set_session_state_from_iframe"===(null===(n=null==t?void 0:t.data)||void 0===n?void 0:n.type)||"unchanged"===t.data||("error"===t.data?window.location.href=yield r():"changed"===t.data&&h())}))}),!1)},h=()=>l(void 0,void 0,void 0,(function*(){var t;const e=document.getElementById("rpIFrame"),n=null===(t=null==e?void 0:e.contentDocument)||void 0===t?void 0:t.getElementById("promptNoneIFrame");if(k.canSendPromptNoneRequest()){k.setPromptNoneRequestSent(!0);const t=e=>{var n,l,i;"set_session_state_from_iframe"===(null===(n=null==e?void 0:e.data)||void 0===n?void 0:n.type)&&(u(null!==(i=null===(l=null==e?void 0:e.data)||void 0===l?void 0:l.data)&&void 0!==i?i:""),null===window||void 0===window||window.removeEventListener("message",t))};d!==H.BrowserMemory&&d!==H.WebWorker||null===window||void 0===window||window.addEventListener("message",t);const e=yield Z({prompt:"none",state:L,responseMode:"query"});n.src=e}})),p=t=>l(void 0,void 0,void 0,(function*(){var e,n;const l=new URL(window.location.href).searchParams.get("state"),i=new URL(window.location.href).searchParams.get(G),c=window.parent.parent;if(null!==l&&(l.includes(L)||l.includes("sign-in-silently"))){const o=new URL(window.location.href).searchParams.get("code");if(null!==o&&0!==o.length){if(l.includes("sign-in-silently")){const t={data:{code:o,sessionState:null!=i?i:"",state:l},type:"check_session_signed_in"};return sessionStorage.setItem("initialized-silent-sign-in","false"),c.postMessage(t,c.origin),k.setPromptNoneRequestSent(!1),window.location.href="about:blank",yield k.waitTillPageRedirect(),!0}const r=new URL(window.location.href).searchParams.get("session_state");if(d===H.LocalStorage||d===H.SessionStorage)t&&(yield t(r));else{const t={data:null!=r?r:"",type:"set_session_state_from_iframe"};null===(n=null===(e=null===window||void 0===window?void 0:window.parent)||void 0===e?void 0:e.parent)||void 0===n||n.postMessage(t)}return k.setPromptNoneRequestSent(!1),window.location.href="about:blank",yield k.waitTillPageRedirect(),!0}if(l.includes("sign-in-silently")){const t={type:"check_session_signed_out"};return window.parent.parent.postMessage(t,c.origin),k.setPromptNoneRequestSent(!1),window.location.href="about:blank",yield k.waitTillPageRedirect(),!0}return k.setPromptNoneRequestSent(!1),c.location.href=yield r(),window.location.href="about:blank",yield k.waitTillPageRedirect(),!0}return!1}));return(t,e,n)=>l(void 0,void 0,void 0,(function*(){var l;let i=document.createElement("iframe");i.setAttribute("id","rpIFrame"),i.style.display="none";let c=!1;for(i.onload=()=>{var t,e,n,l;i=document.getElementById("rpIFrame");const o=null==i?void 0:i.contentDocument,r=null==o?void 0:o.createElement("iframe");r&&(r.setAttribute("id","opIFrame"),r.style.display="none");const a=null==o?void 0:o.createElement("iframe");a&&(a.setAttribute("id","promptNoneIFrame"),a.style.display="none"),r&&(null===(e=null===(t=null==i?void 0:i.contentDocument)||void 0===t?void 0:t.body)||void 0===e||e.appendChild(r)),a&&(null===(l=null===(n=null==i?void 0:i.contentDocument)||void 0===n?void 0:n.body)||void 0===l||l.appendChild(a)),c=!0},null===(l=null===document||void 0===document?void 0:document.body)||void 0===l||l.appendChild(i),r=t,d=e,u=n;!1===c;)yield new Promise(t=>setTimeout(t,1));return{initialize:s,receivePromptNoneResponse:p,reset:I}}))})();var T="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==t?t:"undefined"!=typeof self?self:{};var F={exports:{}},A=function(t,e){return function(){for(var n=new Array(arguments.length),l=0;l<n.length;l++)n[l]=arguments[l];return t.apply(e,n)}},z=A,w=Object.prototype.toString;function P(t){return Array.isArray(t)}function Q(t){return void 0===t}function j(t){return"[object ArrayBuffer]"===w.call(t)}function M(t){return null!==t&&"object"==typeof t}function E(t){if("[object Object]"!==w.call(t))return!1;var e=Object.getPrototypeOf(t);return null===e||e===Object.prototype}function D(t){return"[object Function]"===w.call(t)}function O(t,e){if(null!=t)if("object"!=typeof t&&(t=[t]),P(t))for(var n=0,l=t.length;n<l;n++)e.call(null,t[n],n,t);else for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&e.call(null,t[i],i,t)}var _={isArray:P,isArrayBuffer:j,isBuffer:function(t){return null!==t&&!Q(t)&&null!==t.constructor&&!Q(t.constructor)&&"function"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)},isFormData:function(t){return"[object FormData]"===w.call(t)},isArrayBufferView:function(t){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&j(t.buffer)},isString:function(t){return"string"==typeof t},isNumber:function(t){return"number"==typeof t},isObject:M,isPlainObject:E,isUndefined:Q,isDate:function(t){return"[object Date]"===w.call(t)},isFile:function(t){return"[object File]"===w.call(t)},isBlob:function(t){return"[object Blob]"===w.call(t)},isFunction:D,isStream:function(t){return M(t)&&D(t.pipe)},isURLSearchParams:function(t){return"[object URLSearchParams]"===w.call(t)},isStandardBrowserEnv:function(){return("undefined"==typeof navigator||"ReactNative"!==navigator.product&&"NativeScript"!==navigator.product&&"NS"!==navigator.product)&&"undefined"!=typeof window&&"undefined"!=typeof document},forEach:O,merge:function t(){var e={};function n(n,l){E(e[l])&&E(n)?e[l]=t(e[l],n):E(n)?e[l]=t({},n):P(n)?e[l]=n.slice():e[l]=n}for(var l=0,i=arguments.length;l<i;l++)O(arguments[l],n);return e},extend:function(t,e,n){return O(e,(function(e,l){t[l]=n&&"function"==typeof e?z(e,n):e})),t},trim:function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")},stripBOM:function(t){return 65279===t.charCodeAt(0)&&(t=t.slice(1)),t}},q=_;function $(t){return encodeURIComponent(t).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var tt=function(t,e,n){if(!e)return t;var l;if(n)l=n(e);else if(q.isURLSearchParams(e))l=e.toString();else{var i=[];q.forEach(e,(function(t,e){null!=t&&(q.isArray(t)?e+="[]":t=[t],q.forEach(t,(function(t){q.isDate(t)?t=t.toISOString():q.isObject(t)&&(t=JSON.stringify(t)),i.push($(e)+"="+$(t))})))})),l=i.join("&")}if(l){var c=t.indexOf("#");-1!==c&&(t=t.slice(0,c)),t+=(-1===t.indexOf("?")?"?":"&")+l}return t},et=_;function nt(){this.handlers=[]}nt.prototype.use=function(t,e,n){return this.handlers.push({fulfilled:t,rejected:e,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1},nt.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},nt.prototype.forEach=function(t){et.forEach(this.handlers,(function(e){null!==e&&t(e)}))};var lt=nt,it=void 0!==t?t:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{};function ct(){throw new Error("setTimeout has not been defined")}function ot(){throw new Error("clearTimeout has not been defined")}var rt=ct,at=ot;function dt(t){if(rt===setTimeout)return setTimeout(t,0);if((rt===ct||!rt)&&setTimeout)return rt=setTimeout,setTimeout(t,0);try{return rt(t,0)}catch(e){try{return rt.call(null,t,0)}catch(e){return rt.call(this,t,0)}}}"function"==typeof it.setTimeout&&(rt=setTimeout),"function"==typeof it.clearTimeout&&(at=clearTimeout);var ut,Zt=[],st=!1,bt=-1;function It(){st&&ut&&(st=!1,ut.length?Zt=ut.concat(Zt):bt=-1,Zt.length&&mt())}function mt(){if(!st){var t=dt(It);st=!0;for(var e=Zt.length;e;){for(ut=Zt,Zt=[];++bt<e;)ut&&ut[bt].run();bt=-1,e=Zt.length}ut=null,st=!1,function(t){if(at===clearTimeout)return clearTimeout(t);if((at===ot||!at)&&clearTimeout)return at=clearTimeout,clearTimeout(t);try{at(t)}catch(e){try{return at.call(null,t)}catch(e){return at.call(this,t)}}}(t)}}function ht(t,e){this.fun=t,this.array=e}function pt(){}ht.prototype.run=function(){this.fun.apply(null,this.array)};var gt=pt,Gt=pt,yt=pt,Xt=pt,Vt=pt,Wt=pt,Ct=pt,Rt=it.performance||{},ft=Rt.now||Rt.mozNow||Rt.msNow||Rt.oNow||Rt.webkitNow||function(){return(new Date).getTime()},St=new Date,vt={nextTick:function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)e[n-1]=arguments[n];Zt.push(new ht(t,e)),1!==Zt.length||st||dt(mt)},title:"browser",browser:!0,env:{},argv:[],version:"",versions:{},on:gt,addListener:Gt,once:yt,off:Xt,removeListener:Vt,removeAllListeners:Wt,emit:Ct,binding:function(t){throw new Error("process.binding is not supported")},cwd:function(){return"/"},chdir:function(t){throw new Error("process.chdir is not supported")},umask:function(){return 0},hrtime:function(t){var e=.001*ft.call(Rt),n=Math.floor(e),l=Math.floor(e%1*1e9);return t&&(n-=t[0],(l-=t[1])<0&&(n--,l+=1e9)),[n,l]},platform:"browser",release:{},config:{},uptime:function(){return(new Date-St)/1e3}},Yt=_,Kt=function(t,e,n,l,i){return t.config=e,n&&(t.code=n),t.request=l,t.response=i,t.isAxiosError=!0,t.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}},t},Nt={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},Jt=Kt,Ht=function(t,e,n,l,i){var c=new Error(t);return Jt(c,e,n,l,i)},Ut=Ht,Lt=_,Bt=Lt.isStandardBrowserEnv()?{write:function(t,e,n,l,i,c){var o=[];o.push(t+"="+encodeURIComponent(e)),Lt.isNumber(n)&&o.push("expires="+new Date(n).toGMTString()),Lt.isString(l)&&o.push("path="+l),Lt.isString(i)&&o.push("domain="+i),!0===c&&o.push("secure"),document.cookie=o.join("; ")},read:function(t){var e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}},kt=_,xt=["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"],Tt=_,Ft=Tt.isStandardBrowserEnv()?function(){var t,e=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement("a");function l(t){var l=t;return e&&(n.setAttribute("href",l),l=n.href),n.setAttribute("href",l),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:"/"===n.pathname.charAt(0)?n.pathname:"/"+n.pathname}}return t=l(window.location.href),function(e){var n=Tt.isString(e)?l(e):e;return n.protocol===t.protocol&&n.host===t.host}}():function(){return!0};function At(t){this.message=t}At.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},At.prototype.__CANCEL__=!0;var zt=At,wt=_,Pt=Bt,Qt=tt,jt=Ft,Mt=Ht,Et=Nt,Dt=zt,Ot=_,_t=function(t,e){Yt.forEach(t,(function(n,l){l!==e&&l.toUpperCase()===e.toUpperCase()&&(t[e]=n,delete t[l])}))},qt=Kt,$t={"Content-Type":"application/x-www-form-urlencoded"};function te(t,e){!Ot.isUndefined(t)&&Ot.isUndefined(t["Content-Type"])&&(t["Content-Type"]=e)}var ee,ne={transitional:Nt,adapter:(("undefined"!=typeof XMLHttpRequest||void 0!==vt&&"[object process]"===Object.prototype.toString.call(vt))&&(ee=function(t){return new Promise((function(e,n){var l,i=t.data,c=t.headers,o=t.responseType;function r(){t.cancelToken&&t.cancelToken.unsubscribe(l),t.signal&&t.signal.removeEventListener("abort",l)}wt.isFormData(i)&&delete c["Content-Type"];var a=new XMLHttpRequest;if(t.auth){var d=t.auth.username||"",u=t.auth.password?unescape(encodeURIComponent(t.auth.password)):"";c.Authorization="Basic "+btoa(d+":"+u)}var Z=function(t,e){return t&&!function(t){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(t)}(e)?function(t,e){return e?t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,""):t}(t,e):e}(t.baseURL,t.url);function s(){if(a){var l="getAllResponseHeaders"in a?function(t){var e,n,l,i={};return t?(kt.forEach(t.split("\n"),(function(t){if(l=t.indexOf(":"),e=kt.trim(t.substr(0,l)).toLowerCase(),n=kt.trim(t.substr(l+1)),e){if(i[e]&&xt.indexOf(e)>=0)return;i[e]="set-cookie"===e?(i[e]?i[e]:[]).concat([n]):i[e]?i[e]+", "+n:n}})),i):i}(a.getAllResponseHeaders()):null;(function(t,e,n){var l=n.config.validateStatus;n.status&&l&&!l(n.status)?e(Ut("Request failed with status code "+n.status,n.config,null,n.request,n)):t(n)})((function(t){e(t),r()}),(function(t){n(t),r()}),{data:o&&"text"!==o&&"json"!==o?a.response:a.responseText,status:a.status,statusText:a.statusText,headers:l,config:t,request:a}),a=null}}if(a.open(t.method.toUpperCase(),Qt(Z,t.params,t.paramsSerializer),!0),a.timeout=t.timeout,"onloadend"in a?a.onloadend=s:a.onreadystatechange=function(){a&&4===a.readyState&&(0!==a.status||a.responseURL&&0===a.responseURL.indexOf("file:"))&&setTimeout(s)},a.onabort=function(){a&&(n(Mt("Request aborted",t,"ECONNABORTED",a)),a=null)},a.onerror=function(){n(Mt("Network Error",t,null,a)),a=null},a.ontimeout=function(){var e=t.timeout?"timeout of "+t.timeout+"ms exceeded":"timeout exceeded",l=t.transitional||Et;t.timeoutErrorMessage&&(e=t.timeoutErrorMessage),n(Mt(e,t,l.clarifyTimeoutError?"ETIMEDOUT":"ECONNABORTED",a)),a=null},wt.isStandardBrowserEnv()){var b=(t.withCredentials||jt(Z))&&t.xsrfCookieName?Pt.read(t.xsrfCookieName):void 0;b&&(c[t.xsrfHeaderName]=b)}"setRequestHeader"in a&&wt.forEach(c,(function(t,e){void 0===i&&"content-type"===e.toLowerCase()?delete c[e]:a.setRequestHeader(e,t)})),wt.isUndefined(t.withCredentials)||(a.withCredentials=!!t.withCredentials),o&&"json"!==o&&(a.responseType=t.responseType),"function"==typeof t.onDownloadProgress&&a.addEventListener("progress",t.onDownloadProgress),"function"==typeof t.onUploadProgress&&a.upload&&a.upload.addEventListener("progress",t.onUploadProgress),(t.cancelToken||t.signal)&&(l=function(t){a&&(n(!t||t&&t.type?new Dt("canceled"):t),a.abort(),a=null)},t.cancelToken&&t.cancelToken.subscribe(l),t.signal&&(t.signal.aborted?l():t.signal.addEventListener("abort",l))),i||(i=null),a.send(i)}))}),ee),transformRequest:[function(t,e){return _t(e,"Accept"),_t(e,"Content-Type"),Ot.isFormData(t)||Ot.isArrayBuffer(t)||Ot.isBuffer(t)||Ot.isStream(t)||Ot.isFile(t)||Ot.isBlob(t)?t:Ot.isArrayBufferView(t)?t.buffer:Ot.isURLSearchParams(t)?(te(e,"application/x-www-form-urlencoded;charset=utf-8"),t.toString()):Ot.isObject(t)||e&&"application/json"===e["Content-Type"]?(te(e,"application/json"),function(t,e,n){if(Ot.isString(t))try{return(0,JSON.parse)(t),Ot.trim(t)}catch(t){if("SyntaxError"!==t.name)throw t}return(0,JSON.stringify)(t)}(t)):t}],transformResponse:[function(t){var e=this.transitional||ne.transitional,n=e&&e.silentJSONParsing,l=e&&e.forcedJSONParsing,i=!n&&"json"===this.responseType;if(i||l&&Ot.isString(t)&&t.length)try{return JSON.parse(t)}catch(t){if(i){if("SyntaxError"===t.name)throw qt(t,this,"E_JSON_PARSE");throw t}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};Ot.forEach(["delete","get","head"],(function(t){ne.headers[t]={}})),Ot.forEach(["post","put","patch"],(function(t){ne.headers[t]=Ot.merge($t)}));var le=ne,ie=_,ce=le,oe=function(t){return!(!t||!t.__CANCEL__)},re=_,ae=function(t,e,n){var l=this||ce;return ie.forEach(n,(function(n){t=n.call(l,t,e)})),t},de=oe,ue=le,Ze=zt;function se(t){if(t.cancelToken&&t.cancelToken.throwIfRequested(),t.signal&&t.signal.aborted)throw new Ze("canceled")}var be=_,Ie=function(t,e){e=e||{};var n={};function l(t,e){return be.isPlainObject(t)&&be.isPlainObject(e)?be.merge(t,e):be.isPlainObject(e)?be.merge({},e):be.isArray(e)?e.slice():e}function i(n){return be.isUndefined(e[n])?be.isUndefined(t[n])?void 0:l(void 0,t[n]):l(t[n],e[n])}function c(t){if(!be.isUndefined(e[t]))return l(void 0,e[t])}function o(n){return be.isUndefined(e[n])?be.isUndefined(t[n])?void 0:l(void 0,t[n]):l(void 0,e[n])}function r(n){return n in e?l(t[n],e[n]):n in t?l(void 0,t[n]):void 0}var a={url:c,method:c,data:c,baseURL:o,transformRequest:o,transformResponse:o,paramsSerializer:o,timeout:o,timeoutMessage:o,withCredentials:o,adapter:o,responseType:o,xsrfCookieName:o,xsrfHeaderName:o,onUploadProgress:o,onDownloadProgress:o,decompress:o,maxContentLength:o,maxBodyLength:o,transport:o,httpAgent:o,httpsAgent:o,cancelToken:o,socketPath:o,responseEncoding:o,validateStatus:r};return be.forEach(Object.keys(t).concat(Object.keys(e)),(function(t){var e=a[t]||i,l=e(t);be.isUndefined(l)&&e!==r||(n[t]=l)})),n},me={};["object","boolean","number","function","string","symbol"].forEach((function(t,e){me[t]=function(n){return typeof n===t||"a"+(e<1?"n ":" ")+t}}));var he={};me.transitional=function(t,e,n){function l(t,e){return"[Axios v0.26.1] Transitional option '"+t+"'"+e+(n?". "+n:"")}return function(n,i,c){if(!1===t)throw new Error(l(i," has been removed"+(e?" in "+e:"")));return e&&!he[i]&&(he[i]=!0,console.warn(l(i," has been deprecated since v"+e+" and will be removed in the near future"))),!t||t(n,i,c)}};var pe=_,ge=tt,Ge=lt,ye=function(t){return se(t),t.headers=t.headers||{},t.data=ae.call(t,t.data,t.headers,t.transformRequest),t.headers=re.merge(t.headers.common||{},t.headers[t.method]||{},t.headers),re.forEach(["delete","get","head","post","put","patch","common"],(function(e){delete t.headers[e]})),(t.adapter||ue.adapter)(t).then((function(e){return se(t),e.data=ae.call(t,e.data,e.headers,t.transformResponse),e}),(function(e){return de(e)||(se(t),e&&e.response&&(e.response.data=ae.call(t,e.response.data,e.response.headers,t.transformResponse))),Promise.reject(e)}))},Xe=Ie,Ve={assertOptions:function(t,e,n){if("object"!=typeof t)throw new TypeError("options must be an object");for(var l=Object.keys(t),i=l.length;i-- >0;){var c=l[i],o=e[c];if(o){var r=t[c],a=void 0===r||o(r,c,t);if(!0!==a)throw new TypeError("option "+c+" must be "+a)}else if(!0!==n)throw Error("Unknown option "+c)}},validators:me},We=Ve.validators;function Ce(t){this.defaults=t,this.interceptors={request:new Ge,response:new Ge}}Ce.prototype.request=function(t,e){"string"==typeof t?(e=e||{}).url=t:e=t||{},(e=Xe(this.defaults,e)).method?e.method=e.method.toLowerCase():this.defaults.method?e.method=this.defaults.method.toLowerCase():e.method="get";var n=e.transitional;void 0!==n&&Ve.assertOptions(n,{silentJSONParsing:We.transitional(We.boolean),forcedJSONParsing:We.transitional(We.boolean),clarifyTimeoutError:We.transitional(We.boolean)},!1);var l=[],i=!0;this.interceptors.request.forEach((function(t){"function"==typeof t.runWhen&&!1===t.runWhen(e)||(i=i&&t.synchronous,l.unshift(t.fulfilled,t.rejected))}));var c,o=[];if(this.interceptors.response.forEach((function(t){o.push(t.fulfilled,t.rejected)})),!i){var r=[ye,void 0];for(Array.prototype.unshift.apply(r,l),r=r.concat(o),c=Promise.resolve(e);r.length;)c=c.then(r.shift(),r.shift());return c}for(var a=e;l.length;){var d=l.shift(),u=l.shift();try{a=d(a)}catch(t){u(t);break}}try{c=ye(a)}catch(t){return Promise.reject(t)}for(;o.length;)c=c.then(o.shift(),o.shift());return c},Ce.prototype.getUri=function(t){return t=Xe(this.defaults,t),ge(t.url,t.params,t.paramsSerializer).replace(/^\?/,"")},pe.forEach(["delete","get","head","options"],(function(t){Ce.prototype[t]=function(e,n){return this.request(Xe(n||{},{method:t,url:e,data:(n||{}).data}))}})),pe.forEach(["post","put","patch"],(function(t){Ce.prototype[t]=function(e,n,l){return this.request(Xe(l||{},{method:t,url:e,data:n}))}}));var Re=Ce,fe=zt;function Se(t){if("function"!=typeof t)throw new TypeError("executor must be a function.");var e;this.promise=new Promise((function(t){e=t}));var n=this;this.promise.then((function(t){if(n._listeners){var e,l=n._listeners.length;for(e=0;e<l;e++)n._listeners[e](t);n._listeners=null}})),this.promise.then=function(t){var e,l=new Promise((function(t){n.subscribe(t),e=t})).then(t);return l.cancel=function(){n.unsubscribe(e)},l},t((function(t){n.reason||(n.reason=new fe(t),e(n.reason))}))}Se.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},Se.prototype.subscribe=function(t){this.reason?t(this.reason):this._listeners?this._listeners.push(t):this._listeners=[t]},Se.prototype.unsubscribe=function(t){if(this._listeners){var e=this._listeners.indexOf(t);-1!==e&&this._listeners.splice(e,1)}},Se.source=function(){var t;return{token:new Se((function(e){t=e})),cancel:t}};var ve=Se,Ye=_,Ke=_,Ne=A,Je=Re,He=Ie,Ue=function t(e){var n=new Je(e),l=Ne(Je.prototype.request,n);return Ke.extend(l,Je.prototype,n),Ke.extend(l,n),l.create=function(n){return t(He(e,n))},l}(le);Ue.Axios=Je,Ue.Cancel=zt,Ue.CancelToken=ve,Ue.isCancel=oe,Ue.VERSION="0.26.1",Ue.all=function(t){return Promise.all(t)},Ue.spread=function(t){return function(e){return t.apply(null,e)}},Ue.isAxiosError=function(t){return Ye.isObject(t)&&!0===t.isAxiosError},F.exports=Ue,F.exports.default=Ue;var Le,Be=F.exports;let ke=Le=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=Be.create({withCredentials:!0}),this.clientInstance||(this.clientInstance=new Le),this.axiosInstance.interceptors.request.use(t=>l(this,void 0,void 0,(function*(){return yield this.clientInstance.requestHandler(t)}))),this.axiosInstance.interceptors.response.use(t=>this.clientInstance.successHandler(t),t=>this.clientInstance.errorHandler(t)),this.axiosInstance.all=Be.all,this.axiosInstance.spread=Be.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(t){return l(this,void 0,void 0,(function*(){if(yield this.attachToken(t),null==t?void 0:t.shouldEncodeToFormData){const e=null==t?void 0:t.data,n=new FormData;Object.keys(e).forEach(t=>{n.append(t,e[t])}),t.data=n}return Le.isHandlerEnabled&&this.requestStartCallback&&"function"==typeof this.requestStartCallback&&this.requestStartCallback(t),t}))}errorHandler(t){throw Le.isHandlerEnabled&&(this.requestErrorCallback&&"function"==typeof this.requestErrorCallback&&this.requestErrorCallback(t),this.requestFinishCallback&&"function"==typeof this.requestFinishCallback&&this.requestFinishCallback()),t}successHandler(t){return Le.isHandlerEnabled&&(this.requestSuccessCallback&&"function"==typeof this.requestSuccessCallback&&this.requestSuccessCallback(t),this.requestFinishCallback&&"function"==typeof this.requestFinishCallback&&this.requestFinishCallback()),t}init(t=!0,e){return l(this,void 0,void 0,(function*(){Le.isHandlerEnabled=t,this.attachToken=e}))}enableHandler(){Le.isHandlerEnabled=!0}disableHandler(){Le.isHandlerEnabled=!1}disableHandlerWithTimeout(t=Le.DEFAULT_HANDLER_DISABLE_TIMEOUT){Le.isHandlerEnabled=!1,setTimeout(()=>{Le.isHandlerEnabled=!0},t)}setHttpRequestStartCallback(t){this.requestStartCallback=t}setHttpRequestSuccessCallback(t){this.requestSuccessCallback=t}setHttpRequestErrorCallback(t){this.requestErrorCallback=t}setHttpRequestFinishCallback(t){this.requestFinishCallback=t}};ke.DEFAULT_HANDLER_DISABLE_TIMEOUT=1e3,ke=Le=function(t,e,n,l){var i,c=arguments.length,o=c<3?e:null===l?l=Object.getOwnPropertyDescriptor(e,n):l;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(t,e,n,l);else for(var r=t.length-1;r>=0;r--)(i=t[r])&&(o=(c<3?i(o):c>3?i(e,n,o):i(e,n))||o);return c>3&&o&&Object.defineProperty(e,n,o),o}([t=>{}],ke);class xe{setData(t,e){return l(this,void 0,void 0,(function*(){localStorage.setItem(t,e)}))}getData(t){var e;return l(this,void 0,void 0,(function*(){return null!==(e=localStorage.getItem(t))&&void 0!==e?e:"{}"}))}removeData(t){return l(this,void 0,void 0,(function*(){localStorage.removeItem(t)}))}}class Te{constructor(){this._data=new Map}setData(t,e){return l(this,void 0,void 0,(function*(){this._data.set(t,e)}))}getData(t){var e,n;return l(this,void 0,void 0,(function*(){return null!==(n=null===(e=this._data)||void 0===e?void 0:e.get(t))&&void 0!==n?n:"{}"}))}removeData(t){return l(this,void 0,void 0,(function*(){this._data.delete(t)}))}}class Fe{setData(t,e){return l(this,void 0,void 0,(function*(){sessionStorage.setItem(t,e)}))}getData(t){var e;return l(this,void 0,void 0,(function*(){return null!==(e=sessionStorage.getItem(t))&&void 0!==e?e:"{}"}))}removeData(t){return l(this,void 0,void 0,(function*(){sessionStorage.removeItem(t)}))}}var Ae=[],ze=[],we="undefined"!=typeof Uint8Array?Uint8Array:Array,Pe=!1;function Qe(){Pe=!0;for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",e=0,n=t.length;e<n;++e)Ae[e]=t[e],ze[t.charCodeAt(e)]=e;ze["-".charCodeAt(0)]=62,ze["_".charCodeAt(0)]=63}function je(t,e,n){for(var l,i,c=[],o=e;o<n;o+=3)l=(t[o]<<16)+(t[o+1]<<8)+t[o+2],c.push(Ae[(i=l)>>18&63]+Ae[i>>12&63]+Ae[i>>6&63]+Ae[63&i]);return c.join("")}function Me(t){var e;Pe||Qe();for(var n=t.length,l=n%3,i="",c=[],o=16383,r=0,a=n-l;r<a;r+=o)c.push(je(t,r,r+o>a?a:r+o));return 1===l?(e=t[n-1],i+=Ae[e>>2],i+=Ae[e<<4&63],i+="=="):2===l&&(e=(t[n-2]<<8)+t[n-1],i+=Ae[e>>10],i+=Ae[e>>4&63],i+=Ae[e<<2&63],i+="="),c.push(i),c.join("")}function Ee(t,e,n,l,i){var c,o,r=8*i-l-1,a=(1<<r)-1,d=a>>1,u=-7,Z=n?i-1:0,s=n?-1:1,b=t[e+Z];for(Z+=s,c=b&(1<<-u)-1,b>>=-u,u+=r;u>0;c=256*c+t[e+Z],Z+=s,u-=8);for(o=c&(1<<-u)-1,c>>=-u,u+=l;u>0;o=256*o+t[e+Z],Z+=s,u-=8);if(0===c)c=1-d;else{if(c===a)return o?NaN:1/0*(b?-1:1);o+=Math.pow(2,l),c-=d}return(b?-1:1)*o*Math.pow(2,c-l)}function De(t,e,n,l,i,c){var o,r,a,d=8*c-i-1,u=(1<<d)-1,Z=u>>1,s=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,b=l?0:c-1,I=l?1:-1,m=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(r=isNaN(e)?1:0,o=u):(o=Math.floor(Math.log(e)/Math.LN2),e*(a=Math.pow(2,-o))<1&&(o--,a*=2),(e+=o+Z>=1?s/a:s*Math.pow(2,1-Z))*a>=2&&(o++,a/=2),o+Z>=u?(r=0,o=u):o+Z>=1?(r=(e*a-1)*Math.pow(2,i),o+=Z):(r=e*Math.pow(2,Z-1)*Math.pow(2,i),o=0));i>=8;t[n+b]=255&r,b+=I,r/=256,i-=8);for(o=o<<i|r,d+=i;d>0;t[n+b]=255&o,b+=I,o/=256,d-=8);t[n+b-I]|=128*m}var Oe={}.toString,_e=Array.isArray||function(t){return"[object Array]"==Oe.call(t)};en.TYPED_ARRAY_SUPPORT=void 0===it.TYPED_ARRAY_SUPPORT||it.TYPED_ARRAY_SUPPORT;var qe=$e();function $e(){return en.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function tn(t,e){if($e()<e)throw new RangeError("Invalid typed array length");return en.TYPED_ARRAY_SUPPORT?(t=new Uint8Array(e)).__proto__=en.prototype:(null===t&&(t=new en(e)),t.length=e),t}function en(t,e,n){if(!(en.TYPED_ARRAY_SUPPORT||this instanceof en))return new en(t,e,n);if("number"==typeof t){if("string"==typeof e)throw new Error("If encoding is specified then the first argument must be a string");return cn(this,t)}return nn(this,t,e,n)}function nn(t,e,n,l){if("number"==typeof e)throw new TypeError('"value" argument must not be a number');return"undefined"!=typeof ArrayBuffer&&e instanceof ArrayBuffer?function(t,e,n,l){if(e.byteLength,n<0||e.byteLength<n)throw new RangeError("'offset' is out of bounds");if(e.byteLength<n+(l||0))throw new RangeError("'length' is out of bounds");return e=void 0===n&&void 0===l?new Uint8Array(e):void 0===l?new Uint8Array(e,n):new Uint8Array(e,n,l),en.TYPED_ARRAY_SUPPORT?(t=e).__proto__=en.prototype:t=on(t,e),t}(t,e,n,l):"string"==typeof e?function(t,e,n){if("string"==typeof n&&""!==n||(n="utf8"),!en.isEncoding(n))throw new TypeError('"encoding" must be a valid string encoding');var l=0|dn(e,n),i=(t=tn(t,l)).write(e,n);return i!==l&&(t=t.slice(0,i)),t}(t,e,n):function(t,e){if(an(e)){var n=0|rn(e.length);return 0===(t=tn(t,n)).length||e.copy(t,0,0,n),t}if(e){if("undefined"!=typeof ArrayBuffer&&e.buffer instanceof ArrayBuffer||"length"in e)return"number"!=typeof e.length||(l=e.length)!=l?tn(t,0):on(t,e);if("Buffer"===e.type&&_e(e.data))return on(t,e.data)}var l;throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}(t,e)}function ln(t){if("number"!=typeof t)throw new TypeError('"size" argument must be a number');if(t<0)throw new RangeError('"size" argument must not be negative')}function cn(t,e){if(ln(e),t=tn(t,e<0?0:0|rn(e)),!en.TYPED_ARRAY_SUPPORT)for(var n=0;n<e;++n)t[n]=0;return t}function on(t,e){var n=e.length<0?0:0|rn(e.length);t=tn(t,n);for(var l=0;l<n;l+=1)t[l]=255&e[l];return t}function rn(t){if(t>=$e())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+$e().toString(16)+" bytes");return 0|t}function an(t){return!(null==t||!t._isBuffer)}function dn(t,e){if(an(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var n=t.length;if(0===n)return 0;for(var l=!1;;)switch(e){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return Ln(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return Bn(t).length;default:if(l)return Ln(t).length;e=(""+e).toLowerCase(),l=!0}}function un(t,e,n){var l=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return Cn(this,e,n);case"utf8":case"utf-8":return Xn(this,e,n);case"ascii":return Vn(this,e,n);case"latin1":case"binary":return Wn(this,e,n);case"base64":return yn(this,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Rn(this,e,n);default:if(l)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),l=!0}}function Zn(t,e,n){var l=t[e];t[e]=t[n],t[n]=l}function sn(t,e,n,l,i){if(0===t.length)return-1;if("string"==typeof n?(l=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=i?0:t.length-1),n<0&&(n=t.length+n),n>=t.length){if(i)return-1;n=t.length-1}else if(n<0){if(!i)return-1;n=0}if("string"==typeof e&&(e=en.from(e,l)),an(e))return 0===e.length?-1:bn(t,e,n,l,i);if("number"==typeof e)return e&=255,en.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,n):Uint8Array.prototype.lastIndexOf.call(t,e,n):bn(t,[e],n,l,i);throw new TypeError("val must be string, number or Buffer")}function bn(t,e,n,l,i){var c,o=1,r=t.length,a=e.length;if(void 0!==l&&("ucs2"===(l=String(l).toLowerCase())||"ucs-2"===l||"utf16le"===l||"utf-16le"===l)){if(t.length<2||e.length<2)return-1;o=2,r/=2,a/=2,n/=2}function d(t,e){return 1===o?t[e]:t.readUInt16BE(e*o)}if(i){var u=-1;for(c=n;c<r;c++)if(d(t,c)===d(e,-1===u?0:c-u)){if(-1===u&&(u=c),c-u+1===a)return u*o}else-1!==u&&(c-=c-u),u=-1}else for(n+a>r&&(n=r-a),c=n;c>=0;c--){for(var Z=!0,s=0;s<a;s++)if(d(t,c+s)!==d(e,s)){Z=!1;break}if(Z)return c}return-1}function In(t,e,n,l){n=Number(n)||0;var i=t.length-n;l?(l=Number(l))>i&&(l=i):l=i;var c=e.length;if(c%2!=0)throw new TypeError("Invalid hex string");l>c/2&&(l=c/2);for(var o=0;o<l;++o){var r=parseInt(e.substr(2*o,2),16);if(isNaN(r))return o;t[n+o]=r}return o}function mn(t,e,n,l){return kn(Ln(e,t.length-n),t,n,l)}function hn(t,e,n,l){return kn(function(t){for(var e=[],n=0;n<t.length;++n)e.push(255&t.charCodeAt(n));return e}(e),t,n,l)}function pn(t,e,n,l){return hn(t,e,n,l)}function gn(t,e,n,l){return kn(Bn(e),t,n,l)}function Gn(t,e,n,l){return kn(function(t,e){for(var n,l,i,c=[],o=0;o<t.length&&!((e-=2)<0);++o)l=(n=t.charCodeAt(o))>>8,i=n%256,c.push(i),c.push(l);return c}(e,t.length-n),t,n,l)}function yn(t,e,n){return 0===e&&n===t.length?Me(t):Me(t.slice(e,n))}function Xn(t,e,n){n=Math.min(t.length,n);for(var l=[],i=e;i<n;){var c,o,r,a,d=t[i],u=null,Z=d>239?4:d>223?3:d>191?2:1;if(i+Z<=n)switch(Z){case 1:d<128&&(u=d);break;case 2:128==(192&(c=t[i+1]))&&(a=(31&d)<<6|63&c)>127&&(u=a);break;case 3:c=t[i+1],o=t[i+2],128==(192&c)&&128==(192&o)&&(a=(15&d)<<12|(63&c)<<6|63&o)>2047&&(a<55296||a>57343)&&(u=a);break;case 4:c=t[i+1],o=t[i+2],r=t[i+3],128==(192&c)&&128==(192&o)&&128==(192&r)&&(a=(15&d)<<18|(63&c)<<12|(63&o)<<6|63&r)>65535&&a<1114112&&(u=a)}null===u?(u=65533,Z=1):u>65535&&(u-=65536,l.push(u>>>10&1023|55296),u=56320|1023&u),l.push(u),i+=Z}return function(t){var e=t.length;if(e<=4096)return String.fromCharCode.apply(String,t);for(var n="",l=0;l<e;)n+=String.fromCharCode.apply(String,t.slice(l,l+=4096));return n}(l)}function Vn(t,e,n){var l="";n=Math.min(t.length,n);for(var i=e;i<n;++i)l+=String.fromCharCode(127&t[i]);return l}function Wn(t,e,n){var l="";n=Math.min(t.length,n);for(var i=e;i<n;++i)l+=String.fromCharCode(t[i]);return l}function Cn(t,e,n){var l=t.length;(!e||e<0)&&(e=0),(!n||n<0||n>l)&&(n=l);for(var i="",c=e;c<n;++c)i+=Un(t[c]);return i}function Rn(t,e,n){for(var l=t.slice(e,n),i="",c=0;c<l.length;c+=2)i+=String.fromCharCode(l[c]+256*l[c+1]);return i}function fn(t,e,n){if(t%1!=0||t<0)throw new RangeError("offset is not uint");if(t+e>n)throw new RangeError("Trying to access beyond buffer length")}function Sn(t,e,n,l,i,c){if(!an(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>i||e<c)throw new RangeError('"value" argument is out of bounds');if(n+l>t.length)throw new RangeError("Index out of range")}function vn(t,e,n,l){e<0&&(e=65535+e+1);for(var i=0,c=Math.min(t.length-n,2);i<c;++i)t[n+i]=(e&255<<8*(l?i:1-i))>>>8*(l?i:1-i)}function Yn(t,e,n,l){e<0&&(e=4294967295+e+1);for(var i=0,c=Math.min(t.length-n,4);i<c;++i)t[n+i]=e>>>8*(l?i:3-i)&255}function Kn(t,e,n,l,i,c){if(n+l>t.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function Nn(t,e,n,l,i){return i||Kn(t,0,n,4),De(t,e,n,l,23,4),n+4}function Jn(t,e,n,l,i){return i||Kn(t,0,n,8),De(t,e,n,l,52,8),n+8}en.poolSize=8192,en._augment=function(t){return t.__proto__=en.prototype,t},en.from=function(t,e,n){return nn(null,t,e,n)},en.TYPED_ARRAY_SUPPORT&&(en.prototype.__proto__=Uint8Array.prototype,en.__proto__=Uint8Array),en.alloc=function(t,e,n){return function(t,e,n,l){return ln(e),e<=0?tn(t,e):void 0!==n?"string"==typeof l?tn(t,e).fill(n,l):tn(t,e).fill(n):tn(t,e)}(null,t,e,n)},en.allocUnsafe=function(t){return cn(null,t)},en.allocUnsafeSlow=function(t){return cn(null,t)},en.isBuffer=xn,en.compare=function(t,e){if(!an(t)||!an(e))throw new TypeError("Arguments must be Buffers");if(t===e)return 0;for(var n=t.length,l=e.length,i=0,c=Math.min(n,l);i<c;++i)if(t[i]!==e[i]){n=t[i],l=e[i];break}return n<l?-1:l<n?1:0},en.isEncoding=function(t){switch(String(t).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}},en.concat=function(t,e){if(!_e(t))throw new TypeError('"list" argument must be an Array of Buffers');if(0===t.length)return en.alloc(0);var n;if(void 0===e)for(e=0,n=0;n<t.length;++n)e+=t[n].length;var l=en.allocUnsafe(e),i=0;for(n=0;n<t.length;++n){var c=t[n];if(!an(c))throw new TypeError('"list" argument must be an Array of Buffers');c.copy(l,i),i+=c.length}return l},en.byteLength=dn,en.prototype._isBuffer=!0,en.prototype.swap16=function(){var t=this.length;if(t%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var e=0;e<t;e+=2)Zn(this,e,e+1);return this},en.prototype.swap32=function(){var t=this.length;if(t%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var e=0;e<t;e+=4)Zn(this,e,e+3),Zn(this,e+1,e+2);return this},en.prototype.swap64=function(){var t=this.length;if(t%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var e=0;e<t;e+=8)Zn(this,e,e+7),Zn(this,e+1,e+6),Zn(this,e+2,e+5),Zn(this,e+3,e+4);return this},en.prototype.toString=function(){var t=0|this.length;return 0===t?"":0===arguments.length?Xn(this,0,t):un.apply(this,arguments)},en.prototype.equals=function(t){if(!an(t))throw new TypeError("Argument must be a Buffer");return this===t||0===en.compare(this,t)},en.prototype.inspect=function(){var t="";return this.length>0&&(t=this.toString("hex",0,50).match(/.{2}/g).join(" "),this.length>50&&(t+=" ... ")),"<Buffer "+t+">"},en.prototype.compare=function(t,e,n,l,i){if(!an(t))throw new TypeError("Argument must be a Buffer");if(void 0===e&&(e=0),void 0===n&&(n=t?t.length:0),void 0===l&&(l=0),void 0===i&&(i=this.length),e<0||n>t.length||l<0||i>this.length)throw new RangeError("out of range index");if(l>=i&&e>=n)return 0;if(l>=i)return-1;if(e>=n)return 1;if(this===t)return 0;for(var c=(i>>>=0)-(l>>>=0),o=(n>>>=0)-(e>>>=0),r=Math.min(c,o),a=this.slice(l,i),d=t.slice(e,n),u=0;u<r;++u)if(a[u]!==d[u]){c=a[u],o=d[u];break}return c<o?-1:o<c?1:0},en.prototype.includes=function(t,e,n){return-1!==this.indexOf(t,e,n)},en.prototype.indexOf=function(t,e,n){return sn(this,t,e,n,!0)},en.prototype.lastIndexOf=function(t,e,n){return sn(this,t,e,n,!1)},en.prototype.write=function(t,e,n,l){if(void 0===e)l="utf8",n=this.length,e=0;else if(void 0===n&&"string"==typeof e)l=e,n=this.length,e=0;else{if(!isFinite(e))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");e|=0,isFinite(n)?(n|=0,void 0===l&&(l="utf8")):(l=n,n=void 0)}var i=this.length-e;if((void 0===n||n>i)&&(n=i),t.length>0&&(n<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");l||(l="utf8");for(var c=!1;;)switch(l){case"hex":return In(this,t,e,n);case"utf8":case"utf-8":return mn(this,t,e,n);case"ascii":return hn(this,t,e,n);case"latin1":case"binary":return pn(this,t,e,n);case"base64":return gn(this,t,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Gn(this,t,e,n);default:if(c)throw new TypeError("Unknown encoding: "+l);l=(""+l).toLowerCase(),c=!0}},en.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}},en.prototype.slice=function(t,e){var n,l=this.length;if((t=~~t)<0?(t+=l)<0&&(t=0):t>l&&(t=l),(e=void 0===e?l:~~e)<0?(e+=l)<0&&(e=0):e>l&&(e=l),e<t&&(e=t),en.TYPED_ARRAY_SUPPORT)(n=this.subarray(t,e)).__proto__=en.prototype;else{var i=e-t;n=new en(i,void 0);for(var c=0;c<i;++c)n[c]=this[c+t]}return n},en.prototype.readUIntLE=function(t,e,n){t|=0,e|=0,n||fn(t,e,this.length);for(var l=this[t],i=1,c=0;++c<e&&(i*=256);)l+=this[t+c]*i;return l},en.prototype.readUIntBE=function(t,e,n){t|=0,e|=0,n||fn(t,e,this.length);for(var l=this[t+--e],i=1;e>0&&(i*=256);)l+=this[t+--e]*i;return l},en.prototype.readUInt8=function(t,e){return e||fn(t,1,this.length),this[t]},en.prototype.readUInt16LE=function(t,e){return e||fn(t,2,this.length),this[t]|this[t+1]<<8},en.prototype.readUInt16BE=function(t,e){return e||fn(t,2,this.length),this[t]<<8|this[t+1]},en.prototype.readUInt32LE=function(t,e){return e||fn(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},en.prototype.readUInt32BE=function(t,e){return e||fn(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},en.prototype.readIntLE=function(t,e,n){t|=0,e|=0,n||fn(t,e,this.length);for(var l=this[t],i=1,c=0;++c<e&&(i*=256);)l+=this[t+c]*i;return l>=(i*=128)&&(l-=Math.pow(2,8*e)),l},en.prototype.readIntBE=function(t,e,n){t|=0,e|=0,n||fn(t,e,this.length);for(var l=e,i=1,c=this[t+--l];l>0&&(i*=256);)c+=this[t+--l]*i;return c>=(i*=128)&&(c-=Math.pow(2,8*e)),c},en.prototype.readInt8=function(t,e){return e||fn(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},en.prototype.readInt16LE=function(t,e){e||fn(t,2,this.length);var n=this[t]|this[t+1]<<8;return 32768&n?4294901760|n:n},en.prototype.readInt16BE=function(t,e){e||fn(t,2,this.length);var n=this[t+1]|this[t]<<8;return 32768&n?4294901760|n:n},en.prototype.readInt32LE=function(t,e){return e||fn(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},en.prototype.readInt32BE=function(t,e){return e||fn(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},en.prototype.readFloatLE=function(t,e){return e||fn(t,4,this.length),Ee(this,t,!0,23,4)},en.prototype.readFloatBE=function(t,e){return e||fn(t,4,this.length),Ee(this,t,!1,23,4)},en.prototype.readDoubleLE=function(t,e){return e||fn(t,8,this.length),Ee(this,t,!0,52,8)},en.prototype.readDoubleBE=function(t,e){return e||fn(t,8,this.length),Ee(this,t,!1,52,8)},en.prototype.writeUIntLE=function(t,e,n,l){t=+t,e|=0,n|=0,l||Sn(this,t,e,n,Math.pow(2,8*n)-1,0);var i=1,c=0;for(this[e]=255&t;++c<n&&(i*=256);)this[e+c]=t/i&255;return e+n},en.prototype.writeUIntBE=function(t,e,n,l){t=+t,e|=0,n|=0,l||Sn(this,t,e,n,Math.pow(2,8*n)-1,0);var i=n-1,c=1;for(this[e+i]=255&t;--i>=0&&(c*=256);)this[e+i]=t/c&255;return e+n},en.prototype.writeUInt8=function(t,e,n){return t=+t,e|=0,n||Sn(this,t,e,1,255,0),en.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[e]=255&t,e+1},en.prototype.writeUInt16LE=function(t,e,n){return t=+t,e|=0,n||Sn(this,t,e,2,65535,0),en.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):vn(this,t,e,!0),e+2},en.prototype.writeUInt16BE=function(t,e,n){return t=+t,e|=0,n||Sn(this,t,e,2,65535,0),en.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):vn(this,t,e,!1),e+2},en.prototype.writeUInt32LE=function(t,e,n){return t=+t,e|=0,n||Sn(this,t,e,4,4294967295,0),en.TYPED_ARRAY_SUPPORT?(this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t):Yn(this,t,e,!0),e+4},en.prototype.writeUInt32BE=function(t,e,n){return t=+t,e|=0,n||Sn(this,t,e,4,4294967295,0),en.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):Yn(this,t,e,!1),e+4},en.prototype.writeIntLE=function(t,e,n,l){if(t=+t,e|=0,!l){var i=Math.pow(2,8*n-1);Sn(this,t,e,n,i-1,-i)}var c=0,o=1,r=0;for(this[e]=255&t;++c<n&&(o*=256);)t<0&&0===r&&0!==this[e+c-1]&&(r=1),this[e+c]=(t/o>>0)-r&255;return e+n},en.prototype.writeIntBE=function(t,e,n,l){if(t=+t,e|=0,!l){var i=Math.pow(2,8*n-1);Sn(this,t,e,n,i-1,-i)}var c=n-1,o=1,r=0;for(this[e+c]=255&t;--c>=0&&(o*=256);)t<0&&0===r&&0!==this[e+c+1]&&(r=1),this[e+c]=(t/o>>0)-r&255;return e+n},en.prototype.writeInt8=function(t,e,n){return t=+t,e|=0,n||Sn(this,t,e,1,127,-128),en.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[e]=255&t,e+1},en.prototype.writeInt16LE=function(t,e,n){return t=+t,e|=0,n||Sn(this,t,e,2,32767,-32768),en.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):vn(this,t,e,!0),e+2},en.prototype.writeInt16BE=function(t,e,n){return t=+t,e|=0,n||Sn(this,t,e,2,32767,-32768),en.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):vn(this,t,e,!1),e+2},en.prototype.writeInt32LE=function(t,e,n){return t=+t,e|=0,n||Sn(this,t,e,4,2147483647,-2147483648),en.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24):Yn(this,t,e,!0),e+4},en.prototype.writeInt32BE=function(t,e,n){return t=+t,e|=0,n||Sn(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),en.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):Yn(this,t,e,!1),e+4},en.prototype.writeFloatLE=function(t,e,n){return Nn(this,t,e,!0,n)},en.prototype.writeFloatBE=function(t,e,n){return Nn(this,t,e,!1,n)},en.prototype.writeDoubleLE=function(t,e,n){return Jn(this,t,e,!0,n)},en.prototype.writeDoubleBE=function(t,e,n){return Jn(this,t,e,!1,n)},en.prototype.copy=function(t,e,n,l){if(n||(n=0),l||0===l||(l=this.length),e>=t.length&&(e=t.length),e||(e=0),l>0&&l<n&&(l=n),l===n)return 0;if(0===t.length||0===this.length)return 0;if(e<0)throw new RangeError("targetStart out of bounds");if(n<0||n>=this.length)throw new RangeError("sourceStart out of bounds");if(l<0)throw new RangeError("sourceEnd out of bounds");l>this.length&&(l=this.length),t.length-e<l-n&&(l=t.length-e+n);var i,c=l-n;if(this===t&&n<e&&e<l)for(i=c-1;i>=0;--i)t[i+e]=this[i+n];else if(c<1e3||!en.TYPED_ARRAY_SUPPORT)for(i=0;i<c;++i)t[i+e]=this[i+n];else Uint8Array.prototype.set.call(t,this.subarray(n,n+c),e);return c},en.prototype.fill=function(t,e,n,l){if("string"==typeof t){if("string"==typeof e?(l=e,e=0,n=this.length):"string"==typeof n&&(l=n,n=this.length),1===t.length){var i=t.charCodeAt(0);i<256&&(t=i)}if(void 0!==l&&"string"!=typeof l)throw new TypeError("encoding must be a string");if("string"==typeof l&&!en.isEncoding(l))throw new TypeError("Unknown encoding: "+l)}else"number"==typeof t&&(t&=255);if(e<0||this.length<e||this.length<n)throw new RangeError("Out of range index");if(n<=e)return this;var c;if(e>>>=0,n=void 0===n?this.length:n>>>0,t||(t=0),"number"==typeof t)for(c=e;c<n;++c)this[c]=t;else{var o=an(t)?t:Ln(new en(t,l).toString()),r=o.length;for(c=0;c<n-e;++c)this[c+e]=o[c%r]}return this};var Hn=/[^+\/0-9A-Za-z-_]/g;function Un(t){return t<16?"0"+t.toString(16):t.toString(16)}function Ln(t,e){var n;e=e||1/0;for(var l=t.length,i=null,c=[],o=0;o<l;++o){if((n=t.charCodeAt(o))>55295&&n<57344){if(!i){if(n>56319){(e-=3)>-1&&c.push(239,191,189);continue}if(o+1===l){(e-=3)>-1&&c.push(239,191,189);continue}i=n;continue}if(n<56320){(e-=3)>-1&&c.push(239,191,189),i=n;continue}n=65536+(i-55296<<10|n-56320)}else i&&(e-=3)>-1&&c.push(239,191,189);if(i=null,n<128){if((e-=1)<0)break;c.push(n)}else if(n<2048){if((e-=2)<0)break;c.push(n>>6|192,63&n|128)}else if(n<65536){if((e-=3)<0)break;c.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;c.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return c}function Bn(t){return function(t){var e,n,l,i,c,o;Pe||Qe();var r=t.length;if(r%4>0)throw new Error("Invalid string. Length must be a multiple of 4");c="="===t[r-2]?2:"="===t[r-1]?1:0,o=new we(3*r/4-c),l=c>0?r-4:r;var a=0;for(e=0,n=0;e<l;e+=4,n+=3)i=ze[t.charCodeAt(e)]<<18|ze[t.charCodeAt(e+1)]<<12|ze[t.charCodeAt(e+2)]<<6|ze[t.charCodeAt(e+3)],o[a++]=i>>16&255,o[a++]=i>>8&255,o[a++]=255&i;return 2===c?(i=ze[t.charCodeAt(e)]<<2|ze[t.charCodeAt(e+1)]>>4,o[a++]=255&i):1===c&&(i=ze[t.charCodeAt(e)]<<10|ze[t.charCodeAt(e+1)]<<4|ze[t.charCodeAt(e+2)]>>2,o[a++]=i>>8&255,o[a++]=255&i),o}(function(t){if((t=function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}(t).replace(Hn,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function kn(t,e,n,l){for(var i=0;i<l&&!(i+n>=e.length||i>=t.length);++i)e[i+n]=t[i];return i}function xn(t){return null!=t&&(!!t._isBuffer||Tn(t)||function(t){return"function"==typeof t.readFloatLE&&"function"==typeof t.slice&&Tn(t.slice(0,0))}(t))}function Tn(t){return!!t.constructor&&"function"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)}var Fn=Object.freeze({__proto__:null,Buffer:en,INSPECT_MAX_BYTES:50,SlowBuffer:function(t){return+t!=t&&(t=0),en.alloc(+t)},isBuffer:xn,kMaxLength:qe}),An={exports:{}},zn={},wn={};Object.defineProperty(wn,"__esModule",{value:!0}),wn.default=function(t){var e=t.length,n=e%4;if(!n)return t;var l=e,i=4-n,c=e+i,o=en.alloc(c);for(o.write(t);i--;)o.write("=",l++);return o.toString()},Object.defineProperty(zn,"__esModule",{value:!0});var Pn=wn;function Qn(t,e){return void 0===e&&(e="utf8"),en.isBuffer(t)?Mn(t.toString("base64")):Mn(en.from(t,e).toString("base64"))}function jn(t){return t=t.toString(),Pn.default(t).replace(/\-/g,"+").replace(/_/g,"/")}function Mn(t){return t.replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}var En,Dn=Qn;Dn.encode=Qn,Dn.decode=function(t,e){return void 0===e&&(e="utf8"),en.from(jn(t),"base64").toString(e)},Dn.toBase64=jn,Dn.fromBase64=Mn,Dn.toBuffer=function(t){return en.from(jn(t),"base64")},zn.default=Dn,(En=An).exports=zn.default,En.exports.default=En.exports;var On=An.exports,_n={exports:{}};!function(t){!function(e,n){var l={};!function(t){t.__esModule=!0,t.digestLength=32,t.blockSize=64;var e=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 n(t,n,l,i,c){for(var o,r,a,d,u,Z,s,b,I,m,h,p,g;c>=64;){for(o=n[0],r=n[1],a=n[2],d=n[3],u=n[4],Z=n[5],s=n[6],b=n[7],m=0;m<16;m++)h=i+4*m,t[m]=(255&l[h])<<24|(255&l[h+1])<<16|(255&l[h+2])<<8|255&l[h+3];for(m=16;m<64;m++)p=((I=t[m-2])>>>17|I<<15)^(I>>>19|I<<13)^I>>>10,g=((I=t[m-15])>>>7|I<<25)^(I>>>18|I<<14)^I>>>3,t[m]=(p+t[m-7]|0)+(g+t[m-16]|0);for(m=0;m<64;m++)p=(((u>>>6|u<<26)^(u>>>11|u<<21)^(u>>>25|u<<7))+(u&Z^~u&s)|0)+(b+(e[m]+t[m]|0)|0)|0,g=((o>>>2|o<<30)^(o>>>13|o<<19)^(o>>>22|o<<10))+(o&r^o&a^r&a)|0,b=s,s=Z,Z=u,u=d+p|0,d=a,a=r,r=o,o=p+g|0;n[0]+=o,n[1]+=r,n[2]+=a,n[3]+=d,n[4]+=u,n[5]+=Z,n[6]+=s,n[7]+=b,i+=64,c-=64}return i}var l=function(){function e(){this.digestLength=t.digestLength,this.blockSize=t.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 e.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},e.prototype.clean=function(){for(var t=0;t<this.buffer.length;t++)this.buffer[t]=0;for(t=0;t<this.temp.length;t++)this.temp[t]=0;this.reset()},e.prototype.update=function(t,e){if(void 0===e&&(e=t.length),this.finished)throw new Error("SHA256: can't update because hash was finished.");var l=0;if(this.bytesHashed+=e,this.bufferLength>0){for(;this.bufferLength<64&&e>0;)this.buffer[this.bufferLength++]=t[l++],e--;64===this.bufferLength&&(n(this.temp,this.state,this.buffer,0,64),this.bufferLength=0)}for(e>=64&&(l=n(this.temp,this.state,t,l,e),e%=64);e>0;)this.buffer[this.bufferLength++]=t[l++],e--;return this},e.prototype.finish=function(t){if(!this.finished){var e=this.bytesHashed,l=this.bufferLength,i=e/536870912|0,c=e<<3,o=e%64<56?64:128;this.buffer[l]=128;for(var r=l+1;r<o-8;r++)this.buffer[r]=0;this.buffer[o-8]=i>>>24&255,this.buffer[o-7]=i>>>16&255,this.buffer[o-6]=i>>>8&255,this.buffer[o-5]=i>>>0&255,this.buffer[o-4]=c>>>24&255,this.buffer[o-3]=c>>>16&255,this.buffer[o-2]=c>>>8&255,this.buffer[o-1]=c>>>0&255,n(this.temp,this.state,this.buffer,0,o),this.finished=!0}for(r=0;r<8;r++)t[4*r+0]=this.state[r]>>>24&255,t[4*r+1]=this.state[r]>>>16&255,t[4*r+2]=this.state[r]>>>8&255,t[4*r+3]=this.state[r]>>>0&255;return this},e.prototype.digest=function(){var t=new Uint8Array(this.digestLength);return this.finish(t),t},e.prototype._saveState=function(t){for(var e=0;e<this.state.length;e++)t[e]=this.state[e]},e.prototype._restoreState=function(t,e){for(var n=0;n<this.state.length;n++)this.state[n]=t[n];this.bytesHashed=e,this.finished=!1,this.bufferLength=0},e}();t.Hash=l;var i=function(){function t(t){this.inner=new l,this.outer=new l,this.blockSize=this.inner.blockSize,this.digestLength=this.inner.digestLength;var e=new Uint8Array(this.blockSize);if(t.length>this.blockSize)(new l).update(t).finish(e).clean();else for(var n=0;n<t.length;n++)e[n]=t[n];for(n=0;n<e.length;n++)e[n]^=54;for(this.inner.update(e),n=0;n<e.length;n++)e[n]^=106;for(this.outer.update(e),this.istate=new Uint32Array(8),this.ostate=new Uint32Array(8),this.inner._saveState(this.istate),this.outer._saveState(this.ostate),n=0;n<e.length;n++)e[n]=0}return t.prototype.reset=function(){return this.inner._restoreState(this.istate,this.inner.blockSize),this.outer._restoreState(this.ostate,this.outer.blockSize),this},t.prototype.clean=function(){for(var t=0;t<this.istate.length;t++)this.ostate[t]=this.istate[t]=0;this.inner.clean(),this.outer.clean()},t.prototype.update=function(t){return this.inner.update(t),this},t.prototype.finish=function(t){return this.outer.finished?this.outer.finish(t):(this.inner.finish(t),this.outer.update(t,this.digestLength).finish(t)),this},t.prototype.digest=function(){var t=new Uint8Array(this.digestLength);return this.finish(t),t},t}();function c(t){var e=(new l).update(t),n=e.digest();return e.clean(),n}function o(t,e){var n=new i(t).update(e),l=n.digest();return n.clean(),l}function r(t,e,n,l){var i=l[0];if(0===i)throw new Error("hkdf: cannot expand more");e.reset(),i>1&&e.update(t),n&&e.update(n),e.update(l),e.finish(t),l[0]++}t.HMAC=i,t.hash=c,t.default=c,t.hmac=o;var a=new Uint8Array(t.digestLength);t.hkdf=function(t,e,n,l){void 0===e&&(e=a),void 0===l&&(l=32);for(var c=new Uint8Array([1]),d=o(e,t),u=new i(d),Z=new Uint8Array(u.digestLength),s=Z.length,b=new Uint8Array(l),I=0;I<l;I++)s===Z.length&&(r(Z,u,n,c),s=0),b[I]=Z[s++];return u.clean(),Z.fill(0),c.fill(0),b},t.pbkdf2=function(t,e,n,l){for(var c=new i(t),o=c.digestLength,r=new Uint8Array(4),a=new Uint8Array(o),d=new Uint8Array(o),u=new Uint8Array(l),Z=0;Z*o<l;Z++){var s=Z+1;r[0]=s>>>24&255,r[1]=s>>>16&255,r[2]=s>>>8&255,r[3]=s>>>0&255,c.reset(),c.update(e),c.update(r),c.finish(d);for(var b=0;b<o;b++)a[b]=d[b];for(b=2;b<=n;b++){c.reset(),c.update(d).finish(d);for(var I=0;I<o;I++)a[I]^=d[I]}for(b=0;b<o&&Z*o+b<l;b++)u[Z*o+b]=a[b]}for(Z=0;Z<o;Z++)a[Z]=d[Z]=0;for(Z=0;Z<4;Z++)r[Z]=0;return c.clean(),u}}(l);var i=l.default;for(var c in l)i[c]=l[c];t.exports=i}()}(_n);var qn=function(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}(_n.exports),$n=crypto;const tl=t=>t instanceof CryptoKey,el=new TextEncoder,nl=new TextDecoder,ll=t=>{let e=t;e instanceof Uint8Array&&(e=nl.decode(e)),e=e.replace(/-/g,"+").replace(/_/g,"/").replace(/\s/g,"");try{return(t=>{const e=atob(t),n=new Uint8Array(e.length);for(let t=0;t<e.length;t++)n[t]=e.charCodeAt(t);return n})(e)}catch(t){throw new TypeError("The input to be decoded is not correctly encoded.")}};class il extends Error{constructor(t){var e;super(t),this.code="ERR_JOSE_GENERIC",this.name=this.constructor.name,null===(e=Error.captureStackTrace)||void 0===e||e.call(Error,this,this.constructor)}static get code(){return"ERR_JOSE_GENERIC"}}class cl extends il{constructor(t,e="unspecified",n="unspecified"){super(t),this.code="ERR_JWT_CLAIM_VALIDATION_FAILED",this.claim=e,this.reason=n}static get code(){return"ERR_JWT_CLAIM_VALIDATION_FAILED"}}class ol extends il{constructor(t,e="unspecified",n="unspecified"){super(t),this.code="ERR_JWT_EXPIRED",this.claim=e,this.reason=n}static get code(){return"ERR_JWT_EXPIRED"}}class rl extends il{constructor(){super(...arguments),this.code="ERR_JOSE_ALG_NOT_ALLOWED"}static get code(){return"ERR_JOSE_ALG_NOT_ALLOWED"}}class al extends il{constructor(){super(...arguments),this.code="ERR_JOSE_NOT_SUPPORTED"}static get code(){return"ERR_JOSE_NOT_SUPPORTED"}}class dl extends il{constructor(){super(...arguments),this.code="ERR_JWS_INVALID"}static get code(){return"ERR_JWS_INVALID"}}class ul extends il{constructor(){super(...arguments),this.code="ERR_JWT_INVALID"}static get code(){return"ERR_JWT_INVALID"}}class Zl extends il{constructor(){super(...arguments),this.code="ERR_JWKS_INVALID"}static get code(){return"ERR_JWKS_INVALID"}}class sl extends il{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 bl extends il{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 Il extends il{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 ml(){return"function"==typeof WebSocketPair}function hl(){try{return void 0!==vt.versions.node}catch(t){return!1}}function pl(t,e="algorithm.name"){return new TypeError(`CryptoKey does not support this operation, its ${e} must be ${t}`)}function gl(t,e){return t.name===e}function Gl(t){return parseInt(t.name.slice(4),10)}var yl=(t,...e)=>{let n="Key must be ";if(e.length>2){const t=e.pop();n+=`one of type ${e.join(", ")}, or ${t}.`}else 2===e.length?n+=`one of type ${e[0]} or ${e[1]}.`:n+=`of type ${e[0]}.`;return null==t?n+=" Received "+t:"function"==typeof t&&t.name?n+=" Received function "+t.name:"object"==typeof t&&null!=t&&t.constructor&&t.constructor.name&&(n+=" Received an instance of "+t.constructor.name),n},Xl=t=>tl(t);const Vl=["CryptoKey"];function Wl(t){if("object"!=typeof(e=t)||null===e||"[object Object]"!==Object.prototype.toString.call(t))return!1;var e;if(null===Object.getPrototypeOf(t))return!0;let n=t;for(;null!==Object.getPrototypeOf(n);)n=Object.getPrototypeOf(n);return Object.getPrototypeOf(t)===n}const Cl=async t=>{var e,n;const{algorithm:l,keyUsages:i}=function(t){let e,n;switch(t.kty){case"oct":switch(t.alg){case"HS256":case"HS384":case"HS512":e={name:"HMAC",hash:"SHA-"+t.alg.slice(-3)},n=["sign","verify"];break;case"A128CBC-HS256":case"A192CBC-HS384":case"A256CBC-HS512":throw new al(t.alg+" keys cannot be imported as CryptoKey instances");case"A128GCM":case"A192GCM":case"A256GCM":case"A128GCMKW":case"A192GCMKW":case"A256GCMKW":e={name:"AES-GCM"},n=["encrypt","decrypt"];break;case"A128KW":case"A192KW":case"A256KW":e={name:"AES-KW"},n=["wrapKey","unwrapKey"];break;case"PBES2-HS256+A128KW":case"PBES2-HS384+A192KW":case"PBES2-HS512+A256KW":e={name:"PBKDF2"},n=["deriveBits"];break;default:throw new al('Invalid or unsupported JWK "alg" (Algorithm) Parameter value')}break;case"RSA":switch(t.alg){case"PS256":case"PS384":case"PS512":e={name:"RSA-PSS",hash:"SHA-"+t.alg.slice(-3)},n=t.d?["sign"]:["verify"];break;case"RS256":case"RS384":case"RS512":e={name:"RSASSA-PKCS1-v1_5",hash:"SHA-"+t.alg.slice(-3)},n=t.d?["sign"]:["verify"];break;case"RSA-OAEP":case"RSA-OAEP-256":case"RSA-OAEP-384":case"RSA-OAEP-512":e={name:"RSA-OAEP",hash:"SHA-"+(parseInt(t.alg.slice(-3),10)||1)},n=t.d?["decrypt","unwrapKey"]:["encrypt","wrapKey"];break;default:throw new al('Invalid or unsupported JWK "alg" (Algorithm) Parameter value')}break;case"EC":switch(t.alg){case"ES256":e={name:"ECDSA",namedCurve:"P-256"},n=t.d?["sign"]:["verify"];break;case"ES384":e={name:"ECDSA",namedCurve:"P-384"},n=t.d?["sign"]:["verify"];break;case"ES512":e={name:"ECDSA",namedCurve:"P-521"},n=t.d?["sign"]:["verify"];break;case"ECDH-ES":case"ECDH-ES+A128KW":case"ECDH-ES+A192KW":case"ECDH-ES+A256KW":e={name:"ECDH",namedCurve:t.crv},n=t.d?["deriveBits"]:[];break;default:throw new al('Invalid or unsupported JWK "alg" (Algorithm) Parameter value')}break;case(ml()||hl())&&"OKP":if("EdDSA"!==t.alg)throw new al('Invalid or unsupported JWK "alg" (Algorithm) Parameter value');switch(t.crv){case"Ed25519":e={name:"NODE-ED25519",namedCurve:"NODE-ED25519"},n=t.d?["sign"]:["verify"];break;case hl()&&"Ed448":e={name:"NODE-ED448",namedCurve:"NODE-ED448"},n=t.d?["sign"]:["verify"];break;default:throw new al('Invalid or unsupported JWK "crv" (Subtype of Key Pair) Parameter value')}break;default:throw new al('Invalid or unsupported JWK "kty" (Key Type) Parameter value')}return{algorithm:e,keyUsages:n}}(t),c=[l,null!==(e=t.ext)&&void 0!==e&&e,null!==(n=t.key_ops)&&void 0!==n?n:i];if("PBKDF2"===l.name)return $n.subtle.importKey("raw",ll(t.k),...c);const o={...t};return delete o.alg,$n.subtle.importKey("jwk",o,...c)},Rl=async(t,e,n,l)=>{const i=await function(t,e,n){if(tl(e))return function(t,e,...n){switch(e){case"HS256":case"HS384":case"HS512":{if(!gl(t.algorithm,"HMAC"))throw pl("HMAC");const n=parseInt(e.slice(2),10);if(Gl(t.algorithm.hash)!==n)throw pl("SHA-"+n,"algorithm.hash");break}case"RS256":case"RS384":case"RS512":{if(!gl(t.algorithm,"RSASSA-PKCS1-v1_5"))throw pl("RSASSA-PKCS1-v1_5");const n=parseInt(e.slice(2),10);if(Gl(t.algorithm.hash)!==n)throw pl("SHA-"+n,"algorithm.hash");break}case"PS256":case"PS384":case"PS512":{if(!gl(t.algorithm,"RSA-PSS"))throw pl("RSA-PSS");const n=parseInt(e.slice(2),10);if(Gl(t.algorithm.hash)!==n)throw pl("SHA-"+n,"algorithm.hash");break}case hl()&&"EdDSA":if("NODE-ED25519"!==t.algorithm.name&&"NODE-ED448"!==t.algorithm.name)throw pl("NODE-ED25519 or NODE-ED448");break;case ml()&&"EdDSA":if(!gl(t.algorithm,"NODE-ED25519"))throw pl("NODE-ED25519");break;case"ES256":case"ES384":case"ES512":{if(!gl(t.algorithm,"ECDSA"))throw pl("ECDSA");const n=function(t){switch(t){case"ES256":return"P-256";case"ES384":return"P-384";case"ES512":return"P-521";default:throw new Error("unreachable")}}(e);if(t.algorithm.namedCurve!==n)throw pl(n,"algorithm.namedCurve");break}default:throw new TypeError("CryptoKey does not support this operation")}!function(t,e){if(e.length&&!e.some(e=>t.usages.includes(e))){let t="CryptoKey does not support this operation, its usages must include ";if(e.length>2){const n=e.pop();t+=`one of ${e.join(", ")}, or ${n}.`}else 2===e.length?t+=`one of ${e[0]} or ${e[1]}.`:t+=e[0]+".";throw new TypeError(t)}}(t,n)}(e,t,n),e;if(e instanceof Uint8Array){if(!t.startsWith("HS"))throw new TypeError(yl(e,...Vl));return $n.subtle.importKey("raw",e,{hash:"SHA-"+t.slice(-3),name:"HMAC"},!1,[n])}throw new TypeError(yl(e,...Vl,"Uint8Array"))}(t,e,"verify");((t,e)=>{if(t.startsWith("RS")||t.startsWith("PS")){const{modulusLength:n}=e.algorithm;if("number"!=typeof n||n<2048)throw new TypeError(t+" requires key modulusLength to be 2048 bits or larger")}})(t,i);const c=function(t,e){const n="SHA-"+t.slice(-3);switch(t){case"HS256":case"HS384":case"HS512":return{hash:n,name:"HMAC"};case"PS256":case"PS384":case"PS512":return{hash:n,name:"RSA-PSS",saltLength:t.slice(-3)>>3};case"RS256":case"RS384":case"RS512":return{hash:n,name:"RSASSA-PKCS1-v1_5"};case"ES256":case"ES384":case"ES512":return{hash:n,name:"ECDSA",namedCurve:e.namedCurve};case(ml()||hl())&&"EdDSA":const{namedCurve:l}=e;return{name:l,namedCurve:l};default:throw new al(`alg ${t} is not supported either by JOSE or your javascript runtime`)}}(t,i.algorithm);try{return await $n.subtle.verify(c,i,n,l)}catch(t){return!1}};async function fl(t,e,n){var l;if(!Wl(t))throw new dl("Flattened JWS must be an object");if(void 0===t.protected&&void 0===t.header)throw new dl('Flattened JWS must have either of the "protected" or "header" members');if(void 0!==t.protected&&"string"!=typeof t.protected)throw new dl("JWS Protected Header incorrect type");if(void 0===t.payload)throw new dl("JWS Payload missing");if("string"!=typeof t.signature)throw new dl("JWS Signature missing or incorrect type");if(void 0!==t.header&&!Wl(t.header))throw new dl("JWS Unprotected Header incorrect type");let i={};if(t.protected){const e=ll(t.protected);try{i=JSON.parse(nl.decode(e))}catch(t){throw new dl("JWS Protected Header is invalid")}}if(!((...t)=>{const e=t.filter(Boolean);if(0===e.length||1===e.length)return!0;let n;for(const t of e){const e=Object.keys(t);if(n&&0!==n.size)for(const t of e){if(n.has(t))return!1;n.add(t)}else n=new Set(e)}return!0})(i,t.header))throw new dl("JWS Protected and JWS Unprotected Header Parameter names must be disjoint");const c={...i,...t.header};let o=!0;if(function(t,e,n,l,i){if(void 0!==i.crit&&void 0===l.crit)throw new t('"crit" (Critical) Header Parameter MUST be integrity protected');if(!l||void 0===l.crit)return new Set;if(!Array.isArray(l.crit)||0===l.crit.length||l.crit.some(t=>"string"!=typeof t||0===t.length))throw new t('"crit" (Critical) Header Parameter MUST be an array of non-empty strings when present');let c;c=void 0!==n?new Map([...Object.entries(n),...e.entries()]):e;for(const e of l.crit){if(!c.has(e))throw new al(`Extension Header Parameter "${e}" is not recognized`);if(void 0===i[e])throw new t(`Extension Header Parameter "${e}" is missing`);if(c.get(e)&&void 0===l[e])throw new t(`Extension Header Parameter "${e}" MUST be integrity protected`)}return new Set(l.crit)}(dl,new Map([["b64",!0]]),null==n?void 0:n.crit,i,c).has("b64")&&(o=i.b64,"boolean"!=typeof o))throw new dl('The "b64" (base64url-encode payload) Header Parameter must be a boolean');const{alg:r}=c;if("string"!=typeof r||!r)throw new dl('JWS "alg" (Algorithm) Header Parameter missing or invalid');const a=n&&((t,e)=>{if(void 0!==e&&(!Array.isArray(e)||e.some(t=>"string"!=typeof t)))throw new TypeError('"algorithms" option must be an array of strings');if(e)return new Set(e)})(0,n.algorithms);if(a&&!a.has(r))throw new rl('"alg" (Algorithm) Header Parameter not allowed');if(o){if("string"!=typeof t.payload)throw new dl("JWS Payload must be a string")}else if("string"!=typeof t.payload&&!(t.payload instanceof Uint8Array))throw new dl("JWS Payload must be a string or an Uint8Array instance");let d=!1;"function"==typeof e&&(e=await e(i,t),d=!0),((t,e,n)=>{t.startsWith("HS")||"dir"===t||t.startsWith("PBES2")||/^A\d{3}(?:GCM)?KW$/.test(t)?(t=>{if(!(t instanceof Uint8Array)){if(!Xl(t))throw new TypeError(yl(t,...Vl,"Uint8Array"));if("secret"!==t.type)throw new TypeError(Vl.join(" or ")+' instances for symmetric algorithms must be of type "secret"')}})(e):((t,e)=>{if(!Xl(t))throw new TypeError(yl(t,...Vl));if("secret"===t.type)throw new TypeError(Vl.join(" or ")+' instances for asymmetric algorithms must not be of type "secret"');if("sign"===e&&"public"===t.type)throw new TypeError(Vl.join(" or ")+' instances for asymmetric algorithm signing must be of type "private"');if("decrypt"===e&&"public"===t.type)throw new TypeError(Vl.join(" or ")+' instances for asymmetric algorithm decryption must be of type "private"');if(t.algorithm&&"verify"===e&&"private"===t.type)throw new TypeError(Vl.join(" or ")+' instances for asymmetric algorithm verifying must be of type "public"');if(t.algorithm&&"encrypt"===e&&"private"===t.type)throw new TypeError(Vl.join(" or ")+' instances for asymmetric algorithm encryption must be of type "public"')})(e,n)})(r,e,"verify");const u=function(...t){const e=t.reduce((t,{length:e})=>t+e,0),n=new Uint8Array(e);let l=0;return t.forEach(t=>{n.set(t,l),l+=t.length}),n}(el.encode(null!==(l=t.protected)&&void 0!==l?l:""),el.encode("."),"string"==typeof t.payload?el.encode(t.payload):t.payload),Z=ll(t.signature);if(!await Rl(r,e,Z,u))throw new Il;let s;s=o?ll(t.payload):"string"==typeof t.payload?el.encode(t.payload):t.payload;const b={payload:s};return void 0!==t.protected&&(b.protectedHeader=i),void 0!==t.header&&(b.unprotectedHeader=t.header),d?{...b,key:e}:b}const Sl=/^(\d+|\d+\.\d+) ?(seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)$/i;var vl=t=>{const e=Sl.exec(t);if(!e)throw new TypeError("Invalid time period format");const n=parseFloat(e[1]);switch(e[2].toLowerCase()){case"sec":case"secs":case"second":case"seconds":case"s":return Math.round(n);case"minute":case"minutes":case"min":case"mins":case"m":return Math.round(60*n);case"hour":case"hours":case"hr":case"hrs":case"h":return Math.round(3600*n);case"day":case"days":case"d":return Math.round(86400*n);case"week":case"weeks":case"w":return Math.round(604800*n);default:return Math.round(31557600*n)}};const Yl=t=>t.toLowerCase().replace(/^application\//,"");var Kl=(t,e,n={})=>{const{typ:l}=n;if(l&&("string"!=typeof t.typ||Yl(t.typ)!==Yl(l)))throw new cl('unexpected "typ" JWT header value',"typ","check_failed");let i;try{i=JSON.parse(nl.decode(e))}catch(t){}if(!Wl(i))throw new ul("JWT Claims Set must be a top-level JSON object");const{issuer:c}=n;if(c&&!(Array.isArray(c)?c:[c]).includes(i.iss))throw new cl('unexpected "iss" claim value',"iss","check_failed");const{subject:o}=n;if(o&&i.sub!==o)throw new cl('unexpected "sub" claim value',"sub","check_failed");const{audience:r}=n;if(r&&(d="string"==typeof r?[r]:r,!("string"==typeof(a=i.aud)?d.includes(a):Array.isArray(a)&&d.some(Set.prototype.has.bind(new Set(a))))))throw new cl('unexpected "aud" claim value',"aud","check_failed");var a,d;let u;switch(typeof n.clockTolerance){case"string":u=vl(n.clockTolerance);break;case"number":u=n.clockTolerance;break;case"undefined":u=0;break;default:throw new TypeError("Invalid clockTolerance option type")}const{currentDate:Z}=n,s=(b=Z||new Date,Math.floor(b.getTime()/1e3));var b;if((void 0!==i.iat||n.maxTokenAge)&&"number"!=typeof i.iat)throw new cl('"iat" claim must be a number',"iat","invalid");if(void 0!==i.nbf){if("number"!=typeof i.nbf)throw new cl('"nbf" claim must be a number',"nbf","invalid");if(i.nbf>s+u)throw new cl('"nbf" claim timestamp check failed',"nbf","check_failed")}if(void 0!==i.exp){if("number"!=typeof i.exp)throw new cl('"exp" claim must be a number',"exp","invalid");if(i.exp<=s-u)throw new ol('"exp" claim timestamp check failed',"exp","check_failed")}if(n.maxTokenAge){const t=s-i.iat;if(t-u>("number"==typeof n.maxTokenAge?n.maxTokenAge:vl(n.maxTokenAge)))throw new ol('"iat" claim timestamp check failed (too far in the past)',"iat","check_failed");if(t<0-u)throw new cl('"iat" claim timestamp check failed (it should be in the past)',"iat","check_failed")}return i};function Nl(t){return Wl(t)}class Jl{constructor(t){if(this._cached=new WeakMap,!function(t){return t&&"object"==typeof t&&Array.isArray(t.keys)&&t.keys.every(Nl)}(t))throw new Zl("JSON Web Key Set malformed");var e;this._jwks=(e=t,"function"==typeof structuredClone?structuredClone(e):JSON.parse(JSON.stringify(e)))}async getKey(t,e){const{alg:n,kid:l}={...t,...e.header},i=function(t){switch("string"==typeof t&&t.slice(0,2)){case"RS":case"PS":return"RSA";case"ES":return"EC";case"Ed":return"OKP";default:throw new al('Unsupported "alg" value for a JSON Web Key Set')}}(n),c=this._jwks.keys.filter(t=>{let e=i===t.kty;if(e&&"string"==typeof l&&(e=l===t.kid),e&&"string"==typeof t.alg&&(e=n===t.alg),e&&"string"==typeof t.use&&(e="sig"===t.use),e&&Array.isArray(t.key_ops)&&(e=t.key_ops.includes("verify")),e&&"EdDSA"===n&&(e="Ed25519"===t.crv||"Ed448"===t.crv),e)switch(n){case"ES256":e="P-256"===t.crv;break;case"ES256K":e="secp256k1"===t.crv;break;case"ES384":e="P-384"===t.crv;break;case"ES512":e="P-521"===t.crv}return e}),{0:o,length:r}=c;if(0===r)throw new sl;if(1!==r)throw new bl;const a=this._cached.get(o)||this._cached.set(o,{}).get(o);if(void 0===a[n]){const t=await async function(t,e,n){if(!Wl(t))throw new TypeError("JWK must be an object");if(e||(e=t.alg),"string"!=typeof e||!e)throw new TypeError('"alg" argument is required when "jwk.alg" is not present');switch(t.kty){case"oct":if("string"!=typeof t.k||!t.k)throw new TypeError('missing "k" (Key Value) Parameter value');return null!=n||(n=!0!==t.ext),n?Cl({...t,alg:e,ext:!1}):ll(t.k);case"RSA":if(void 0!==t.oth)throw new al('RSA JWK "oth" (Other Primes Info) Parameter value is not supported');case"EC":case"OKP":return Cl({...t,alg:e});default:throw new al('Unsupported "kty" (Key Type) Parameter value')}}({...o,ext:!0},n);if(t instanceof Uint8Array||"public"!==t.type)throw new Zl("JSON Web Key Set members must be public keys");a[n]=t}return a[n]}}var Hl={exports:{}},Ul={exports:{}},Ll=function(t){if(t.__esModule)return t;var e=Object.defineProperty({},"__esModule",{value:!0});return Object.keys(t).forEach((function(n){var l=Object.getOwnPropertyDescriptor(t,n);Object.defineProperty(e,n,l.get?l:{enumerable:!0,get:function(){return t[n]}})})),e}(Fn);
|
|
449
|
-
/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */!function(t,e){var n=Ll,l=n.Buffer;function i(t,e){for(var n in t)e[n]=t[n]}function c(t,e,n){return l(t,e,n)}l.from&&l.alloc&&l.allocUnsafe&&l.allocUnsafeSlow?t.exports=n:(i(n,e),e.Buffer=c),c.prototype=Object.create(l.prototype),i(l,c),c.from=function(t,e,n){if("number"==typeof t)throw new TypeError("Argument must not be a number");return l(t,e,n)},c.alloc=function(t,e,n){if("number"!=typeof t)throw new TypeError("Argument must be a number");var i=l(t);return void 0!==e?"string"==typeof n?i.fill(e,n):i.fill(e):i.fill(0),i},c.allocUnsafe=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return l(t)},c.allocUnsafeSlow=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return n.SlowBuffer(t)}}(Ul,Ul.exports);var Bl=Ul.exports.Buffer,kl=T.crypto||T.msCrypto;kl&&kl.getRandomValues?Hl.exports=function(t,e){if(t>4294967295)throw new RangeError("requested too many random bytes");var n=Bl.allocUnsafe(t);if(t>0)if(t>65536)for(var l=0;l<t;l+=65536)kl.getRandomValues(n.slice(l,l+65536));else kl.getRandomValues(n);return"function"==typeof e?vt.nextTick((function(){e(null,n)})):n}:Hl.exports=function(){throw new Error("Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11")};var xl=Hl.exports;class Tl{base64URLEncode(t){return On.encode(t).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}base64URLDecode(t){return On.decode(t).toString()}hashSha256(t){return en.from(qn((new TextEncoder).encode(t)))}generateRandomBytes(t){return xl(t)}verifyJwt(t,e,n,l,i,c,o){return async function(t,e,n){var l;const i=await async function(t,e,n){if(t instanceof Uint8Array&&(t=nl.decode(t)),"string"!=typeof t)throw new dl("Compact JWS must be a string or Uint8Array");const{0:l,1:i,2:c,length:o}=t.split(".");if(3!==o)throw new dl("Invalid Compact JWS");const r=await fl({payload:i,protected:l,signature:c},e,n),a={payload:r.payload,protectedHeader:r.protectedHeader};return"function"==typeof e?{...a,key:r.key}:a}(t,e,n);if((null===(l=i.protectedHeader.crit)||void 0===l?void 0:l.includes("b64"))&&!1===i.protectedHeader.b64)throw new ul("JWTs MUST NOT use unencoded payload");const c={payload:Kl(i.protectedHeader,i.payload,n),protectedHeader:i.protectedHeader};return"function"==typeof e?{...c,key:i.key}:c}(t,(r={keys:[e]},Jl.prototype.getKey.bind(new Jl(r))),{algorithms:n,audience:l,clockTolerance:o,issuer:i,subject:c}).then(()=>Promise.resolve(!0));var r}}const Fl=t=>l(void 0,void 0,void 0,(function*(){var e;const n=(t=>{switch(t){case H.LocalStorage:return new xe;case H.SessionStorage:return new Fe;case H.BrowserMemory:return new Te;default:return new Fe}})(t.storage),i=new Tl,o=new J(n,i);yield o.initialize(t);const r=new B(o),a=o.getDataLayer(),d=yield x(()=>l(void 0,void 0,void 0,(function*(){return o.signOut()})),null!==(e=t.storage)&&void 0!==e?e:H.SessionStorage,t=>a.setSessionDataParameter(G,null!=t?t:""));let u=!1;const Z=ke.getInstance();let s,b,I=!0;(null==Z?void 0:Z.init)&&(yield Z.init(!0,t=>l(void 0,void 0,void 0,(function*(){Object.assign({attachToken:!0},t).attachToken&&(t.headers=Object.assign(Object.assign({},t.headers),{Authorization:"Bearer "+(yield o.getAccessToken())}))}))));const m=()=>l(void 0,void 0,void 0,(function*(){var t,e,n;const i=yield o.getOIDCServiceEndpoints(),c=yield a.getConfigData();d.initialize(c.clientID,null!==(t=i.checkSessionIframe)&&void 0!==t?t:"",()=>l(void 0,void 0,void 0,(function*(){return(yield o.getBasicUserInfo()).sessionState})),null!==(e=c.checkSessionInterval)&&void 0!==e?e:3,null!==(n=c.sessionRefreshInterval)&&void 0!==n?n:300,c.signInRedirectURL,t=>l(void 0,void 0,void 0,(function*(){return o.getAuthorizationURL(t)})))})),h=t=>l(void 0,void 0,void 0,(function*(){var e,n,i;let c=!0,d=!1;if(null==t?void 0:t.tokenEndpoint){c=!1;for(const l of[...null!==(n=null===(e=yield a.getConfigData())||void 0===e?void 0:e.resourceServerURLs)&&void 0!==n?n:[],t.baseUrl])if(l&&(null===(i=t.tokenEndpoint)||void 0===i?void 0:i.startsWith(l))){d=!0;break}}return t.shouldReplayAfterRefresh&&a.setTemporaryDataParameter("custom_grant_config",JSON.stringify(t)),c||d?o.requestCustomGrant(t).then(e=>l(void 0,void 0,void 0,(function*(){return t.preventSignOutURLUpdate&&(u=!0),t.returnsSession?(r.refreshAccessTokenAutomatically(),o.getBasicUserInfo()):e}))).catch(t=>Promise.reject(t)):Promise.reject(new R("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`"))})),p=()=>l(void 0,void 0,void 0,(function*(){try{yield o.refreshAccessToken();const t=yield X();return t&&(yield h(t)),r.refreshAccessTokenAutomatically(),o.getBasicUserInfo()}catch(t){return Promise.reject(t)}})),y=(t,e,n)=>l(void 0,void 0,void 0,(function*(){const i=yield a.getConfigData();if(i.storage===H.BrowserMemory&&i.enablePKCE){const t=k.getPKCE(f.extractPKCEKeyFromStateParam(n));yield o.setPKCECode(f.extractPKCEKeyFromStateParam(n),t)}return o.requestAccessToken(t,e,n).then(()=>l(void 0,void 0,void 0,(function*(){return k.setSignOutURL(yield o.getSignOutURL()),r.clearRefreshTokenTimeout(),r.refreshAccessTokenAutomatically(),i.enableOIDCSessionManagement&&m(),o.getBasicUserInfo()}))).catch(t=>Promise.reject(t))})),X=()=>l(void 0,void 0,void 0,(function*(){const t=yield a.getTemporaryDataParameter("custom_grant_config");return t?JSON.parse(t):null}));return{disableHttpHandler:()=>((null==Z?void 0:Z.disableHandler)&&Z.disableHandler(),I=!1,!0),enableHttpHandler:()=>((null==Z?void 0:Z.enableHandler)&&Z.enableHandler(),I=!0,!0),getAccessToken:()=>l(void 0,void 0,void 0,(function*(){return o.getAccessToken()})),getBasicUserInfo:()=>l(void 0,void 0,void 0,(function*(){return o.getBasicUserInfo()})),getDecodedIDToken:()=>l(void 0,void 0,void 0,(function*(){return o.getDecodedIDToken()})),getHttpClient:()=>Z,getIDToken:()=>l(void 0,void 0,void 0,(function*(){return o.getIDToken()})),getOIDCServiceEndpoints:()=>l(void 0,void 0,void 0,(function*(){return o.getOIDCServiceEndpoints()})),httpRequest:t=>l(void 0,void 0,void 0,(function*(){var e,n;let i=!1;const c=yield a.getConfigData();for(const l of[...null!==(e=yield null==c?void 0:c.resourceServerURLs)&&void 0!==e?e:[],c.baseUrl])if(l&&(null===(n=null==t?void 0:t.url)||void 0===n?void 0:n.startsWith(l))){i=!0;break}if(i)return Z.request(t).then(t=>Promise.resolve(t)).catch(e=>l(void 0,void 0,void 0,(function*(){var n,l,i;if(401===(null===(n=null==e?void 0:e.response)||void 0===n?void 0:n.status)||!(null==e?void 0:e.response)){let c;try{c=yield p()}catch(n){throw I&&("function"==typeof s&&(yield s(Object.assign(Object.assign({},e),{code:"Access token is invalid"}))),"function"==typeof b&&b()),new R("SPA-MAIN_THREAD_CLIENT-HR-SE01",null!==(l=null==n?void 0:n.name)&&void 0!==l?l:"Refresh token request failed.",null!==(i=null==n?void 0:n.message)&&void 0!==i?i:"An error occurred while trying to refresh the access token following a 401 response from the server.")}if(c)try{const e=yield Z.request(t);return Promise.resolve(e)}catch(n){return I&&("function"==typeof s&&(yield s(n)),"function"==typeof b&&b()),Promise.reject(n)}}return I&&("function"==typeof s&&(yield s(e)),"function"==typeof b&&b()),Promise.reject(e)})));throw new R("SPA-MAIN_THREAD_CLIENT-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:t=>l(void 0,void 0,void 0,(function*(){var e,n,i;let c=!0;const r=yield a.getConfigData();for(const l of t){let t=!1;for(const c of[...null!==(n=null===(e=yield r)||void 0===e?void 0:e.resourceServerURLs)&&void 0!==n?n:[],r.baseUrl])if(c&&(null===(i=l.url)||void 0===i?void 0:i.startsWith(c))){t=!0;break}if(!t){c=!1;break}}const d=[];if(c)return t.forEach(t=>{d.push(Z.request(t))}),(null==Z?void 0:Z.all)&&Z.all(d).then(t=>Promise.resolve(t)).catch(t=>l(void 0,void 0,void 0,(function*(){var e,n,i;if(401===(null===(e=null==t?void 0:t.response)||void 0===e?void 0:e.status)||!(null==t?void 0:t.response)){let e;try{e=yield o.refreshAccessToken()}catch(e){throw I&&("function"==typeof s&&(yield s(Object.assign(Object.assign({},t),{code:"Access token is invalid"}))),"function"==typeof b&&b()),new R("SPA-MAIN_THREAD_CLIENT-HRA-SE01",null!==(n=null==e?void 0:e.name)&&void 0!==n?n:"Refresh token request failed.",null!==(i=null==e?void 0:e.message)&&void 0!==i?i:"An error occurred while trying to refresh the access token following a 401 response from the server.")}if(e)return Z.all&&Z.all(d).then(t=>Promise.resolve(t)).catch(t=>l(void 0,void 0,void 0,(function*(){return I&&("function"==typeof s&&(yield s(t)),"function"==typeof b&&b()),Promise.reject(t)})))}return I&&("function"==typeof s&&(yield s(t)),"function"==typeof b&&b()),Promise.reject(t)})));throw new R("SPA-MAIN_THREAD_CLIENT-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`")})),isAuthenticated:()=>l(void 0,void 0,void 0,(function*(){return o.isAuthenticated()})),refreshAccessToken:p,requestCustomGrant:h,revokeAccessToken:()=>o.revokeAccessToken().then(()=>(d.reset(),r.clearRefreshTokenTimeout(),Promise.resolve(!0))).catch(t=>Promise.reject(t)),setHttpRequestErrorCallback:t=>{s=t},setHttpRequestFinishCallback:t=>{(null==Z?void 0:Z.setHttpRequestFinishCallback)&&Z.setHttpRequestFinishCallback(t),b=t},setHttpRequestStartCallback:t=>{(null==Z?void 0:Z.setHttpRequestStartCallback)&&Z.setHttpRequestStartCallback(t)},setHttpRequestSuccessCallback:t=>{(null==Z?void 0:Z.setHttpRequestSuccessCallback)&&Z.setHttpRequestSuccessCallback(t)},signIn:(t,e,n,i)=>l(void 0,void 0,void 0,(function*(){var u,Z,s;const b=yield a.getConfigData();if(yield d.receivePromptNoneResponse(t=>l(void 0,void 0,void 0,(function*(){yield a.setSessionDataParameter(G,null!=t?t:"")}))))return Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""});if(yield o.isAuthenticated())return r.clearRefreshTokenTimeout(),r.refreshAccessTokenAutomatically(),b.enableOIDCSessionManagement&&m(),Promise.resolve(yield o.getBasicUserInfo());let I,h,p;if((null==b?void 0:b.responseMode)===c.formPost&&e?(I=e,h=null!=n?n:"",p=null!=i?i:""):(I=null!==(u=new URL(window.location.href).searchParams.get(g))&&void 0!==u?u:"",h=null!==(Z=new URL(window.location.href).searchParams.get(G))&&void 0!==Z?Z:"",p=null!==(s=new URL(window.location.href).searchParams.get(V))&&void 0!==s?s:"",k.removeAuthorizationCode()),I&&p)return y(I,h,p);const X=new URL(window.location.href).searchParams.get("error"),W=new URL(window.location.href).searchParams.get("error_description");if(X){const t=new URL(window.location.href);throw t.searchParams.delete("error"),t.searchParams.delete("error_description"),history.pushState(null,document.title,t.toString()),new R("SPA-MAIN_THREAD_CLIENT-SI-SE01",X,null!=W?W:"")}return o.getAuthorizationURL(t).then(t=>l(void 0,void 0,void 0,(function*(){if(b.storage===H.BrowserMemory&&b.enablePKCE){const t=f.extractPKCEKeyFromStateParam(p);k.setPKCE(t,yield o.getPKCECode(p))}return location.href=t,yield k.waitTillPageRedirect(),Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""})})))})),signOut:()=>l(void 0,void 0,void 0,(function*(){return(yield o.isAuthenticated())&&!u?location.href=yield o.signOut():(location.href=k.getSignOutURL(),yield a.removeOIDCProviderMetaData(),yield a.removeTemporaryData(),yield a.removeSessionData()),r.clearRefreshTokenTimeout(),yield k.waitTillPageRedirect(),!0})),trySignInSilently:()=>l(void 0,void 0,void 0,(function*(){var t;const e=yield a.getConfigData();if(k.isInitializedSilentSignIn())return yield d.receivePromptNoneResponse(),Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""});const n=document.getElementById("rpIFrame"),i=null===(t=null==n?void 0:n.contentDocument)||void 0===t?void 0:t.getElementById("promptNoneIFrame");try{const t=yield o.getAuthorizationURL({prompt:"none",state:"sign-in-silently"}),n=new URL(t);n.searchParams.set("response_mode","query");const l=n.toString();if(e.storage===H.BrowserMemory&&e.enablePKCE){const t=n.searchParams.get(V);k.setPKCE(f.extractPKCEKeyFromStateParam(null!=t?t:""),yield o.getPKCECode(null!=t?t:""))}i.src=l}catch(t){return Promise.reject(t)}return new Promise((t,e)=>{const n=setTimeout(()=>{t(!1)},1e4),i=c=>l(void 0,void 0,void 0,(function*(){var l,o,r;const a=c.data;"check_session_signed_out"==(null==a?void 0:a.type)&&(window.removeEventListener("message",i),clearTimeout(n),t(!1)),"check_session_signed_in"==(null==a?void 0:a.type)&&(null===(l=null==a?void 0:a.data)||void 0===l?void 0:l.code)&&y(a.data.code,null===(o=null==a?void 0:a.data)||void 0===o?void 0:o.sessionState,null===(r=null==a?void 0:a.data)||void 0===r?void 0:r.state).then(e=>{window.removeEventListener("message",i),t(e)}).catch(t=>{window.removeEventListener("message",i),e(t)}).finally(()=>{clearTimeout(n)})}));window.addEventListener("message",i)})})),updateConfig:t=>l(void 0,void 0,void 0,(function*(){const e=yield a.getConfigData(),n=!(e&&e.endpoints&&e.endpoints.checkSessionIframe&&t&&t.endpoints&&t.endpoints.checkSessionIframe&&e.endpoints.checkSessionIframe===t.endpoints.checkSessionIframe),l=Object.assign(Object.assign({},e),t);yield o.updateConfig(l),l.enableOIDCSessionManagement&&n&&(d.reset(),m())}))}}));var Al,zl=("Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwp2YXIgd29ya2VyX2NvZGU9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZShlLHQscixuKXtyZXR1cm4gbmV3KHJ8fChyPVByb21pc2UpKSgoZnVuY3Rpb24oaSxvKXtmdW5jdGlvbiBzKGUpe3RyeXtjKG4ubmV4dChlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gYShlKXt0cnl7YyhuLnRocm93KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBjKGUpe3ZhciB0O2UuZG9uZT9pKGUudmFsdWUpOih0PWUudmFsdWUsdCBpbnN0YW5jZW9mIHI/dDpuZXcgcigoZnVuY3Rpb24oZSl7ZSh0KX0pKSkudGhlbihzLGEpfWMoKG49bi5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pKX0KLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4KCiAgICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKICAgIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC4KCiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSAogICAgUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZCiAgICBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsCiAgICBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00KICAgIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SCiAgICBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SCiAgICBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9mdW5jdGlvbiB0KGUsdCxyLG4pe3JldHVybiBuZXcocnx8KHI9UHJvbWlzZSkpKChmdW5jdGlvbihpLG8pe2Z1bmN0aW9uIHMoZSl7dHJ5e2Mobi5uZXh0KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBhKGUpe3RyeXtjKG4udGhyb3coZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIGMoZSl7dmFyIHQ7ZS5kb25lP2koZS52YWx1ZSk6KHQ9ZS52YWx1ZSx0IGluc3RhbmNlb2Ygcj90Om5ldyByKChmdW5jdGlvbihlKXtlKHQpfSkpKS50aGVuKHMsYSl9Yygobj1uLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSkpfXZhciByOyFmdW5jdGlvbihlKXtlLmZvcm1Qb3N0PSJmb3JtX3Bvc3QiLGUucXVlcnk9InF1ZXJ5In0ocnx8KHI9e30pKTt2YXIgbjshZnVuY3Rpb24oZSl7ZS5Db25maWdEYXRhPSJjb25maWdfZGF0YSIsZS5PSURDUHJvdmlkZXJNZXRhRGF0YT0ib2lkY19wcm92aWRlcl9tZXRhX2RhdGEiLGUuU2Vzc2lvbkRhdGE9InNlc3Npb25fZGF0YSIsZS5UZW1wb3JhcnlEYXRhPSJ0ZW1wb3JhcnlfZGF0YSJ9KG58fChuPXt9KSk7Y29uc3QgaT0icmVmcmVzaF90b2tlbl90aW1lciIsbz1bIlJTMjU2IiwiUlM1MTIiLCJSUzM4NCIsIlBTMjU2Il07dmFyIHM7IWZ1bmN0aW9uKGUpe2UuSW5jbHVkZT0iaW5jbHVkZSIsZS5TYW1lT3JpZ2luPSJzYW1lLW9yaWdpbiIsZS5PbWl0PSJvbWl0In0oc3x8KHM9e30pKTtjbGFzcyBhe2NvbnN0cnVjdG9yKGUsdCxyKXt0aGlzLm1lc3NhZ2U9cix0aGlzLm5hbWU9dCx0aGlzLmNvZGU9ZSxPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxuZXcudGFyZ2V0LnByb3RvdHlwZSl9fWNsYXNzIGN7Y29uc3RydWN0b3IoKXt9c3RhdGljIGZpbHRlckNsYWltc0Zyb21JRFRva2VuUGF5bG9hZChlKXtjb25zdCB0PU9iamVjdC5hc3NpZ24oe30sZSk7bnVsbD09dHx8ZGVsZXRlIHQuaXNzLG51bGw9PXR8fGRlbGV0ZSB0LmF1ZCxudWxsPT10fHxkZWxldGUgdC5leHAsbnVsbD09dHx8ZGVsZXRlIHQuaWF0LG51bGw9PXR8fGRlbGV0ZSB0LmFjcixudWxsPT10fHxkZWxldGUgdC5hbXIsbnVsbD09dHx8ZGVsZXRlIHQuYXpwLG51bGw9PXR8fGRlbGV0ZSB0LmF1dGhfdGltZSxudWxsPT10fHxkZWxldGUgdC5ub25jZSxudWxsPT10fHxkZWxldGUgdC5jX2hhc2gsbnVsbD09dHx8ZGVsZXRlIHQuYXRfaGFzaCxudWxsPT10fHxkZWxldGUgdC5uYmYsbnVsbD09dHx8ZGVsZXRlIHQuaXNrLG51bGw9PXR8fGRlbGV0ZSB0LnNpZDtjb25zdCByPXt9O3JldHVybiBPYmplY3QuZW50cmllcyh0KS5mb3JFYWNoKCgoW2UsdF0pPT57Y29uc3Qgbj1lLnNwbGl0KCJfIikubWFwKCgoZSx0KT0+MD09PXQ/ZTpbZVswXS50b1VwcGVyQ2FzZSgpLC4uLmUuc2xpY2UoMSldLmpvaW4oIiIpKSkuam9pbigiIik7cltuXT10fSkpLHJ9c3RhdGljIGdldFRva2VuUmVxdWVzdEhlYWRlcnMoKXtyZXR1cm57QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIiwiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIn19c3RhdGljIGdlbmVyYXRlU3RhdGVQYXJhbUZvclJlcXVlc3RDb3JyZWxhdGlvbihlLHQpe2NvbnN0IHI9cGFyc2VJbnQoZS5zcGxpdCgiIyIpWzFdKTtyZXR1cm4gdD9gJHt0fV9yZXF1ZXN0XyR7cn1gOmByZXF1ZXN0XyR7cn1gfXN0YXRpYyBleHRyYWN0UEtDRUtleUZyb21TdGF0ZVBhcmFtKGUpe3JldHVybmBwa2NlX2NvZGVfdmVyaWZpZXIjJHtwYXJzZUludChlLnNwbGl0KCJyZXF1ZXN0XyIpWzFdKX1gfX1jLmdldFRlbmFudERvbWFpbkZyb21JZFRva2VuUGF5bG9hZD0oZSx0PSJAIik9Pntjb25zdCByPWUuc3ViLnNwbGl0KHQpO3JldHVybiByLmxlbmd0aD4yP3Jbci5sZW5ndGgtMV06IiJ9O2NsYXNzIHV7Y29uc3RydWN0b3IoZSxyKXt0aGlzLl9kYXRhTGF5ZXI9ZSx0aGlzLl9jb25maWc9KCk9PnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLmdldENvbmZpZ0RhdGEoKX0pKSx0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YT0oKT0+dCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoKX0pKSx0aGlzLl9jcnlwdG9IZWxwZXI9cn1yZXNvbHZlRW5kcG9pbnRzKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD17fSxyPXlpZWxkIHRoaXMuX2NvbmZpZygpO3JldHVybiByLmVuZHBvaW50cyYmT2JqZWN0LmtleXMoci5lbmRwb2ludHMpLmZvckVhY2goKGU9Pntjb25zdCBuPWUucmVwbGFjZSgvW0EtWl0vZywoZT0+YF8ke2UudG9Mb3dlckNhc2UoKX1gKSk7dFtuXT0obnVsbD09cj92b2lkIDA6ci5lbmRwb2ludHMpP3IuZW5kcG9pbnRzW2VdOiIifSkpLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSx0KX0pKX1yZXNvbHZlRW5kcG9pbnRzRXhwbGljaXRseSgpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT17fSx0PXlpZWxkIHRoaXMuX2NvbmZpZygpLHI9WyJhdXRob3JpemF0aW9uX2VuZHBvaW50IiwiZW5kX3Nlc3Npb25fZW5kcG9pbnQiLCJqd2tzX3VyaSIsImNoZWNrX3Nlc3Npb25faWZyYW1lIiwicmV2b2NhdGlvbl9lbmRwb2ludCIsInRva2VuX2VuZHBvaW50IiwiaXNzdWVyIiwidXNlcmluZm9fZW5kcG9pbnQiXTtpZighdC5lbmRwb2ludHN8fCFPYmplY3Qua2V5cyhudWxsPT10P3ZvaWQgMDp0LmVuZHBvaW50cykuZXZlcnkoKGU9Pntjb25zdCB0PWUucmVwbGFjZSgvW0EtWl0vZywoZT0+YF8ke2UudG9Mb3dlckNhc2UoKX1gKSk7cmV0dXJuIHIuaW5jbHVkZXModCl9KSkpdGhyb3cgbmV3IGEoIkpTLUFVVEhfSEVMUEVSLVJFRS1ORjAxIiwiTm8gcmVxdWlyZWQgZW5kcG9pbnRzLiIsIlJlcXVpcmVkIG9pZGMgZW5kcG9pbnRzIGFyZSBub3QgZGVmaW5lZCIpO3JldHVybiB0LmVuZHBvaW50cyYmT2JqZWN0LmtleXModC5lbmRwb2ludHMpLmZvckVhY2goKHI9Pntjb25zdCBuPXIucmVwbGFjZSgvW0EtWl0vZywoZT0+YF8ke2UudG9Mb3dlckNhc2UoKX1gKSk7ZVtuXT0obnVsbD09dD92b2lkIDA6dC5lbmRwb2ludHMpP3QuZW5kcG9pbnRzW3JdOiIifSkpLE9iamVjdC5hc3NpZ24oe30sZSl9KSl9cmVzb2x2ZUVuZHBvaW50c0J5QmFzZVVSTCgpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT17fSx0PXlpZWxkIHRoaXMuX2NvbmZpZygpLHI9dC5iYXNlVXJsO2lmKCFyKXRocm93IG5ldyBhKCJKUy1BVVRIX0hFTFBFUl9SRUJPLU5GMDEiLCJCYXNlIFVSTCBub3QgZGVmaW5lZC4iLCJCYXNlIFVSTCBpcyBub3QgZGVmaW5lZCBpbiBBdXRoQ2xpZW50IGNvbmZpZy4iKTt0LmVuZHBvaW50cyYmT2JqZWN0LmtleXModC5lbmRwb2ludHMpLmZvckVhY2goKHI9Pntjb25zdCBuPXIucmVwbGFjZSgvW0EtWl0vZywoZT0+YF8ke2UudG9Mb3dlckNhc2UoKX1gKSk7ZVtuXT0obnVsbD09dD92b2lkIDA6dC5lbmRwb2ludHMpP3QuZW5kcG9pbnRzW3JdOiIifSkpO2NvbnN0IG49e2F1dGhvcml6YXRpb25fZW5kcG9pbnQ6YCR7cn0vb2F1dGgyL2F1dGhvcml6ZWAsZW5kX3Nlc3Npb25fZW5kcG9pbnQ6YCR7cn0vb2lkYy9sb2dvdXRgLGlzc3VlcjpgJHtyfS9vYXV0aDIvdG9rZW5gLGp3a3NfdXJpOmAke3J9L29hdXRoMi9qd2tzYCxjaGVja19zZXNzaW9uX2lmcmFtZTpgJHtyfS9vaWRjL2NoZWNrc2Vzc2lvbmAscmV2b2NhdGlvbl9lbmRwb2ludDpgJHtyfS9vYXV0aDIvcmV2b2tlYCx0b2tlbl9lbmRwb2ludDpgJHtyfS9vYXV0aDIvdG9rZW5gLHVzZXJpbmZvX2VuZHBvaW50OmAke3J9L29hdXRoMi91c2VyaW5mb2B9O3JldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbiksZSl9KSl9dmFsaWRhdGVJZFRva2VuKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD0oeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldE9JRENQcm92aWRlck1ldGFEYXRhKCkpLmp3a3NfdXJpLHI9eWllbGQgdGhpcy5fY29uZmlnKCk7aWYoIXR8fDA9PT10LnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IGEoIkpTX0FVVEhfSEVMUEVSLVZJVC1ORjAxIiwiSldLUyBlbmRwb2ludCBub3QgZm91bmQuIiwiTm8gSldLUyBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSBKV0tTIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpO2xldCBuO3RyeXtuPXlpZWxkIGZldGNoKHQse2NyZWRlbnRpYWxzOnIuc2VuZENvb2tpZXNJblJlcXVlc3RzP3MuSW5jbHVkZTpzLlNhbWVPcmlnaW59KX1jYXRjaCh0KXt0aHJvdyBuZXcgYSgiSlMtQVVUSF9IRUxQRVItVklULU5FMDIiLCJSZXF1ZXN0IHRvIGp3a3MgZW5kcG9pbnQgZmFpbGVkLiIsbnVsbCE9dD90OiJUaGUgcmVxdWVzdCBzZW50IHRvIGdldCB0aGUgandrcyBmcm9tIHRoZSBzZXJ2ZXIgZmFpbGVkLiIpfWlmKDIwMCE9PW4uc3RhdHVzfHwhbi5vayl0aHJvdyBuZXcgYSgiSlMtQVVUSF9IRUxQRVItVklULUhFMDMiLGBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cyByZWNlaXZlZCBmb3IgandrcyByZXF1ZXN0ICgke24uc3RhdHVzVGV4dH0pLmAseWllbGQgbi5qc29uKCkpO2NvbnN0IGk9KHlpZWxkIHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCkpLmlzc3Vlcix7a2V5czpvfT15aWVsZCBuLmpzb24oKSxjPXlpZWxkIHRoaXMuX2NyeXB0b0hlbHBlci5nZXRKV0tGb3JUaGVJZFRva2VuKGUuc3BsaXQoIi4iKVswXSxvKTtyZXR1cm4gdGhpcy5fY3J5cHRvSGVscGVyLmlzVmFsaWRJZFRva2VuKGUsYywoeWllbGQgdGhpcy5fY29uZmlnKCkpLmNsaWVudElELG51bGwhPWk/aToiIix0aGlzLl9jcnlwdG9IZWxwZXIuZGVjb2RlSURUb2tlbihlKS5zdWIsKHlpZWxkIHRoaXMuX2NvbmZpZygpKS5jbG9ja1RvbGVyYW5jZSl9KSl9Z2V0QXV0aGVudGljYXRlZFVzZXJJbmZvKGUpe3ZhciB0LHIsbixpO2NvbnN0IG89dGhpcy5fY3J5cHRvSGVscGVyLmRlY29kZUlEVG9rZW4oZSkscz1jLmdldFRlbmFudERvbWFpbkZyb21JZFRva2VuUGF5bG9hZChvKSxhPW51bGwhPT0odD1udWxsPT1vP3ZvaWQgMDpvLnVzZXJuYW1lKSYmdm9pZCAwIT09dD90OiIiLHU9bnVsbCE9PShyPW8uZ2l2ZW5fbmFtZSkmJnZvaWQgMCE9PXI/cjoiIixsPW51bGwhPT0obj1vLmZhbWlseV9uYW1lKSYmdm9pZCAwIT09bj9uOiIiLGg9dSYmbD9gJHt1fSAke2x9YDp1fHxsfHwiIixkPW51bGwhPT0oaT1vLnByZWZlcnJlZF91c2VybmFtZSkmJnZvaWQgMCE9PWk/aTpoO3JldHVybiBPYmplY3QuYXNzaWduKHtkaXNwbGF5TmFtZTpkLHRlbmFudERvbWFpbjpzLHVzZXJuYW1lOmF9LGMuZmlsdGVyQ2xhaW1zRnJvbUlEVG9rZW5QYXlsb2FkKG8pKX1yZXBsYWNlQ3VzdG9tR3JhbnRUZW1wbGF0ZVRhZ3MoZSxyKXt2YXIgbjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2xldCB0PSJvcGVuaWQiO2NvbnN0IGk9eWllbGQgdGhpcy5fY29uZmlnKCksbz15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEocik7cmV0dXJuIGkuc2NvcGUmJmkuc2NvcGUubGVuZ3RoPjAmJihpLnNjb3BlLmluY2x1ZGVzKCJvcGVuaWQiKXx8aS5zY29wZS5wdXNoKCJvcGVuaWQiKSx0PWkuc2NvcGUuam9pbigiICIpKSxlLnJlcGxhY2UoInt7dG9rZW59fSIsby5hY2Nlc3NfdG9rZW4pLnJlcGxhY2UoInt7dXNlcm5hbWV9fSIsdGhpcy5nZXRBdXRoZW50aWNhdGVkVXNlckluZm8oby5pZF90b2tlbikudXNlcm5hbWUpLnJlcGxhY2UoInt7c2NvcGV9fSIsdCkucmVwbGFjZSgie3tjbGllbnRJRH19IixpLmNsaWVudElEKS5yZXBsYWNlKCJ7e2NsaWVudFNlY3JldH19IixudWxsIT09KG49aS5jbGllbnRTZWNyZXQpJiZ2b2lkIDAhPT1uP246IiIpfSkpfWNsZWFyVXNlclNlc3Npb25EYXRhKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fZGF0YUxheWVyLnJlbW92ZVRlbXBvcmFyeURhdGEoZSkseWllbGQgdGhpcy5fZGF0YUxheWVyLnJlbW92ZVNlc3Npb25EYXRhKGUpfSkpfWhhbmRsZVRva2VuUmVzcG9uc2UoZSxyKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2lmKDIwMCE9PWUuc3RhdHVzfHwhZS5vayl0aHJvdyBuZXcgYSgiSlMtQVVUSF9IRUxQRVItSFRSLU5FMDEiLGBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cyByZWNlaXZlZCBmb3IgdG9rZW4gcmVxdWVzdCAoJHtlLnN0YXR1c1RleHR9KS5gLHlpZWxkIGUuanNvbigpKTtjb25zdCBuPXlpZWxkIGUuanNvbigpO2lmKG4uY3JlYXRlZF9hdD0obmV3IERhdGUpLmdldFRpbWUoKSwoeWllbGQgdGhpcy5fY29uZmlnKCkpLnZhbGlkYXRlSURUb2tlbilyZXR1cm4gdGhpcy52YWxpZGF0ZUlkVG9rZW4obi5pZF90b2tlbikudGhlbigoKCk9PnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0U2Vzc2lvbkRhdGEobixyKTtjb25zdCBlPXthY2Nlc3NUb2tlbjpuLmFjY2Vzc190b2tlbixjcmVhdGVkQXQ6bi5jcmVhdGVkX2F0LGV4cGlyZXNJbjpuLmV4cGlyZXNfaW4saWRUb2tlbjpuLmlkX3Rva2VuLHJlZnJlc2hUb2tlbjpuLnJlZnJlc2hfdG9rZW4sc2NvcGU6bi5zY29wZSx0b2tlblR5cGU6bi50b2tlbl90eXBlfTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGUpfSkpKSk7e2NvbnN0IGU9e2FjY2Vzc1Rva2VuOm4uYWNjZXNzX3Rva2VuLGNyZWF0ZWRBdDpuLmNyZWF0ZWRfYXQsZXhwaXJlc0luOm4uZXhwaXJlc19pbixpZFRva2VuOm4uaWRfdG9rZW4scmVmcmVzaFRva2VuOm4ucmVmcmVzaF90b2tlbixzY29wZTpuLnNjb3BlLHRva2VuVHlwZTpuLnRva2VuX3R5cGV9O3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0U2Vzc2lvbkRhdGEobixyKSxQcm9taXNlLnJlc29sdmUoZSl9fSkpfWdlbmVyYXRlUEtDRUtleShlKXt2YXIgcjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGEoZSksbj1bXTtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChlPT57ZS5zdGFydHNXaXRoKCJwa2NlX2NvZGVfdmVyaWZpZXIiKSYmbi5wdXNoKGUpfSkpO2NvbnN0IGk9bi5zb3J0KCkucG9wKCk7cmV0dXJuYHBrY2VfY29kZV92ZXJpZmllciMke3BhcnNlSW50KG51bGwhPT0ocj1udWxsPT1pP3ZvaWQgMDppLnNwbGl0KCIjIilbMV0pJiZ2b2lkIDAhPT1yP3I6Ii0xIikrMX1gfSkpfX1jbGFzcyBse2NvbnN0cnVjdG9yKGUpe3RoaXMuX2NyeXB0b1V0aWxzPWV9Z2V0Q29kZVZlcmlmaWVyKCl7cmV0dXJuIHRoaXMuX2NyeXB0b1V0aWxzLmJhc2U2NFVSTEVuY29kZSh0aGlzLl9jcnlwdG9VdGlscy5nZW5lcmF0ZVJhbmRvbUJ5dGVzKDMyKSl9Z2V0Q29kZUNoYWxsZW5nZShlKXtyZXR1cm4gdGhpcy5fY3J5cHRvVXRpbHMuYmFzZTY0VVJMRW5jb2RlKHRoaXMuX2NyeXB0b1V0aWxzLmhhc2hTaGEyNTYoZSkpfWdldEpXS0ZvclRoZUlkVG9rZW4oZSx0KXtjb25zdCByPUpTT04ucGFyc2UodGhpcy5fY3J5cHRvVXRpbHMuYmFzZTY0VVJMRGVjb2RlKGUpKTtmb3IoY29uc3QgZSBvZiB0KWlmKHIua2lkPT09ZS5raWQpcmV0dXJuIGU7dGhyb3cgbmV3IGEoIkpTLUNSWVBUT19VVElMLUdKRlRJVC1JVjAxIiwia2lkIG5vdCBmb3VuZC4iLCJGYWlsZWQgdG8gZmluZCB0aGUgJ2tpZCcgc3BlY2lmaWVkIGluIHRoZSBpZF90b2tlbi4gJ2tpZCcgZm91bmQgaW4gdGhlIGhlYWRlciA6ICIrci5raWQrIiwgRXhwZWN0ZWQgdmFsdWVzOiAiK3QubWFwKChlPT5lLmtpZCkpLmpvaW4oIiwgIikpfWlzVmFsaWRJZFRva2VuKGUsdCxyLG4saSxzKXtyZXR1cm4gdGhpcy5fY3J5cHRvVXRpbHMudmVyaWZ5Snd0KGUsdCxvLHIsbixpLHMpLnRoZW4oKGU9PmU/UHJvbWlzZS5yZXNvbHZlKCEwKTpQcm9taXNlLnJlamVjdChuZXcgYSgiSlMtQ1JZUFRPX0hFTFBFUi1JVklULUlWMDEiLCJJbnZhbGlkIElEIHRva2VuLiIsIklEIHRva2VuIHZhbGlkYXRpb24gcmV0dXJuZWQgZmFsc2UiKSkpKS5jYXRjaCgoZT0+IkVSUl9KV1RfQ0xBSU1fVkFMSURBVElPTl9GQUlMRUQiPT09KG51bGw9PWU/dm9pZCAwOmUuY29kZSkmJiJuYmYiPT09KG51bGw9PWU/dm9pZCAwOmUuY2xhaW0pP1Byb21pc2UucmVqZWN0KG5ldyBhKCJKUy1DUllQVE9fVVRJTFMtSVZJVC1JVjAyIiwiSldUIE5CRiBDTEFJTSBWQUxJREFUSU9OIEZBSUxFRCIsIkpXVCBOQkYgY2xhaW0gdmFsaWRhdGlvbiBoYXMgYmVlbiBmYWlsZWQiKSk6UHJvbWlzZS5yZWplY3QobmV3IGEoIkpTLUNSWVBUT19VVElMUy1JVklULUlWMDMiLCJKV1QgVkFMSURBVElPTiBGQUlMRUQiLCJKV1QgdmFsaWRhdGlvbiBoYXMgYmVlbiBmYWlsZWQiKSkpKX1kZWNvZGVJRFRva2VuKGUpe3RyeXtjb25zdCB0PXRoaXMuX2NyeXB0b1V0aWxzLmJhc2U2NFVSTERlY29kZShlLnNwbGl0KCIuIilbMV0pO3JldHVybiBKU09OLnBhcnNlKHQpfWNhdGNoKGUpe3Rocm93IG5ldyBhKCJKUy1DUllQVE9fVVRJTC1ESVQtSVYwMSIsIkRlY29kaW5nIElEIHRva2VuIGZhaWxlZC4iLGUpfX19Y2xhc3MgaHtjb25zdHJ1Y3RvcihlLHIpe3RoaXMuX2NyeXB0b1V0aWxzPXIsdGhpcy5fY3J5cHRvSGVscGVyPW5ldyBsKHIpLHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyPW5ldyB1KGUsdGhpcy5fY3J5cHRvSGVscGVyKSx0aGlzLl9kYXRhTGF5ZXI9ZSx0aGlzLl9jb25maWc9KCk9PnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLmdldENvbmZpZ0RhdGEoKX0pKSx0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YT0oKT0+dCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoKX0pKX1nZXRBdXRob3JpemF0aW9uVVJMKGUscil7dmFyIG4saSxvO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGFQYXJhbWV0ZXIoImF1dGhvcml6YXRpb25fZW5kcG9pbnQiKSxzPXlpZWxkIHRoaXMuX2NvbmZpZygpO2lmKCF0fHwwPT09dC50cmltKCkubGVuZ3RoKXRocm93IG5ldyBhKCJKUy1BVVRIX0NPUkUtR0FVLU5GMDEiLCJObyBhdXRob3JpemF0aW9uIGVuZHBvaW50IGZvdW5kLiIsIk5vIGF1dGhvcml6YXRpb24gZW5kcG9pbnQgd2FzIGZvdW5kIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSBmcm9tIHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSBhdXRob3JpemF0aW9uIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpO2NvbnN0IHU9bmV3IFVSTCh0KSxsPW5ldyBNYXA7bC5zZXQoInJlc3BvbnNlX3R5cGUiLCJjb2RlIiksbC5zZXQoImNsaWVudF9pZCIscy5jbGllbnRJRCk7bGV0IGg9Im9wZW5pZCI7cy5zY29wZSYmcy5zY29wZS5sZW5ndGg+MCYmKHMuc2NvcGUuaW5jbHVkZXMoIm9wZW5pZCIpfHxzLnNjb3BlLnB1c2goIm9wZW5pZCIpLGg9cy5zY29wZS5qb2luKCIgIikpLGwuc2V0KCJzY29wZSIsaCksbC5zZXQoInJlZGlyZWN0X3VyaSIscy5zaWduSW5SZWRpcmVjdFVSTCkscy5yZXNwb25zZU1vZGUmJmwuc2V0KCJyZXNwb25zZV9tb2RlIixzLnJlc3BvbnNlTW9kZSk7Y29uc3QgZD15aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5nZW5lcmF0ZVBLQ0VLZXkocik7aWYocy5lbmFibGVQS0NFKXtjb25zdCBlPW51bGw9PT0obj10aGlzLl9jcnlwdG9IZWxwZXIpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmdldENvZGVWZXJpZmllcigpLHQ9bnVsbD09PShpPXRoaXMuX2NyeXB0b0hlbHBlcil8fHZvaWQgMD09PWk/dm9pZCAwOmkuZ2V0Q29kZUNoYWxsZW5nZShlKTt5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihkLGUsciksbC5zZXQoImNvZGVfY2hhbGxlbmdlX21ldGhvZCIsIlMyNTYiKSxsLnNldCgiY29kZV9jaGFsbGVuZ2UiLHQpfXMucHJvbXB0JiZsLnNldCgicHJvbXB0IixzLnByb21wdCk7Y29uc3QgZj1lO2lmKGYpZm9yKGNvbnN0W2UsdF1vZiBPYmplY3QuZW50cmllcyhmKSlpZigiIiE9ZSYmIiIhPXQmJiJzdGF0ZSIhPT1lKXtjb25zdCByPWUucmVwbGFjZSgvW0EtWl0vZywoZT0+YF8ke2UudG9Mb3dlckNhc2UoKX1gKSk7bC5zZXQocix0LnRvU3RyaW5nKCkpfWwuc2V0KCJzdGF0ZSIsYy5nZW5lcmF0ZVN0YXRlUGFyYW1Gb3JSZXF1ZXN0Q29ycmVsYXRpb24oZCxmP251bGw9PT0obz1mLnN0YXRlKXx8dm9pZCAwPT09bz92b2lkIDA6by50b1N0cmluZygpOiIiKSk7Zm9yKGNvbnN0W2UsdF1vZiBsLmVudHJpZXMoKSl1LnNlYXJjaFBhcmFtcy5hcHBlbmQoZSx0KTtyZXR1cm4gdS50b1N0cmluZygpfSkpfXJlcXVlc3RBY2Nlc3NUb2tlbihlLHIsbixpKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9KHlpZWxkIHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCkpLnRva2VuX2VuZHBvaW50LG89eWllbGQgdGhpcy5fY29uZmlnKCk7aWYoIXR8fDA9PT10LnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IGEoIkpTLUFVVEhfQ09SRS1SQVQxLU5GMDEiLCJUb2tlbiBlbmRwb2ludCBub3QgZm91bmQuIiwiTm8gdG9rZW4gZW5kcG9pbnQgd2FzIGZvdW5kIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgdG9rZW4gZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7ciYmKHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRTZXNzaW9uRGF0YVBhcmFtZXRlcigic2Vzc2lvbl9zdGF0ZSIscixpKSk7Y29uc3QgdT1bXTt1LnB1c2goYGNsaWVudF9pZD0ke28uY2xpZW50SUR9YCksby5jbGllbnRTZWNyZXQmJm8uY2xpZW50U2VjcmV0LnRyaW0oKS5sZW5ndGg+MCYmdS5wdXNoKGBjbGllbnRfc2VjcmV0PSR7by5jbGllbnRTZWNyZXR9YCk7Y29uc3QgbD1lO2xldCBoO3UucHVzaChgY29kZT0ke2x9YCksdS5wdXNoKCJncmFudF90eXBlPWF1dGhvcml6YXRpb25fY29kZSIpLHUucHVzaChgcmVkaXJlY3RfdXJpPSR7by5zaWduSW5SZWRpcmVjdFVSTH1gKSxvLmVuYWJsZVBLQ0UmJih1LnB1c2goYGNvZGVfdmVyaWZpZXI9JHt5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihjLmV4dHJhY3RQS0NFS2V5RnJvbVN0YXRlUGFyYW0obiksaSl9YCkseWllbGQgdGhpcy5fZGF0YUxheWVyLnJlbW92ZVRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoYy5leHRyYWN0UEtDRUtleUZyb21TdGF0ZVBhcmFtKG4pLGkpKTt0cnl7aD15aWVsZCBmZXRjaCh0LHtib2R5OnUuam9pbigiJiIpLGNyZWRlbnRpYWxzOm8uc2VuZENvb2tpZXNJblJlcXVlc3RzP3MuSW5jbHVkZTpzLlNhbWVPcmlnaW4saGVhZGVyczpuZXcgSGVhZGVycyhjLmdldFRva2VuUmVxdWVzdEhlYWRlcnMoKSksbWV0aG9kOiJQT1NUIn0pfWNhdGNoKHQpe3Rocm93IG5ldyBhKCJKUy1BVVRIX0NPUkUtUkFUMS1ORTAyIiwiUmVxdWVzdGluZyBhY2Nlc3MgdG9rZW4gZmFpbGVkIixudWxsIT10P3Q6IlRoZSByZXF1ZXN0IHRvIGdldCB0aGUgYWNjZXNzIHRva2VuIGZyb20gdGhlIHNlcnZlciBmYWlsZWQuIil9aWYoIWgub2spdGhyb3cgbmV3IGEoIkpTLUFVVEhfQ09SRS1SQVQxLUhFMDMiLGBSZXF1ZXN0aW5nIGFjY2VzcyB0b2tlbiBmYWlsZWQgd2l0aCAke2guc3RhdHVzVGV4dH1gLHlpZWxkIGguanNvbigpKTtyZXR1cm4geWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuaGFuZGxlVG9rZW5SZXNwb25zZShoLGkpfSkpfXJlZnJlc2hBY2Nlc3NUb2tlbihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9KHlpZWxkIHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCkpLnRva2VuX2VuZHBvaW50LHI9eWllbGQgdGhpcy5fY29uZmlnKCksbj15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoZSk7aWYoIW4ucmVmcmVzaF90b2tlbil0aHJvdyBuZXcgYSgiSlMtQVVUSF9DT1JFLVJBVDItTkYwMSIsIk5vIHJlZnJlc2ggdG9rZW4gZm91bmQuIiwiVGhlcmUgd2FzIG5vIHJlZnJlc2ggdG9rZW4gZm91bmQuIEFzZ2FyZGVvIGRvZXNuJ3QgcmV0dXJuIGEgcmVmcmVzaCB0b2tlbiBpZiB0aGUgcmVmcmVzaCB0b2tlbiBncmFudCBpcyBub3QgZW5hYmxlZC4iKTtpZighdHx8MD09PXQudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYSgiSlMtQVVUSF9DT1JFLVJBVDItTkYwMiIsIk5vIHJlZnJlc2ggdG9rZW4gZW5kcG9pbnQgZm91bmQuIiwiTm8gcmVmcmVzaCB0b2tlbiBlbmRwb2ludCB3YXMgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSByZWZyZXNoIHRva2VuIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpO2NvbnN0IGk9W107bGV0IG87aS5wdXNoKGBjbGllbnRfaWQ9JHtyLmNsaWVudElEfWApLGkucHVzaChgcmVmcmVzaF90b2tlbj0ke24ucmVmcmVzaF90b2tlbn1gKSxpLnB1c2goImdyYW50X3R5cGU9cmVmcmVzaF90b2tlbiIpLHIuY2xpZW50U2VjcmV0JiZyLmNsaWVudFNlY3JldC50cmltKCkubGVuZ3RoPjAmJmkucHVzaChgY2xpZW50X3NlY3JldD0ke3IuY2xpZW50U2VjcmV0fWApO3RyeXtvPXlpZWxkIGZldGNoKHQse2JvZHk6aS5qb2luKCImIiksY3JlZGVudGlhbHM6ci5zZW5kQ29va2llc0luUmVxdWVzdHM/cy5JbmNsdWRlOnMuU2FtZU9yaWdpbixoZWFkZXJzOm5ldyBIZWFkZXJzKGMuZ2V0VG9rZW5SZXF1ZXN0SGVhZGVycygpKSxtZXRob2Q6IlBPU1QifSl9Y2F0Y2godCl7dGhyb3cgbmV3IGEoIkpTLUFVVEhfQ09SRS1SQVQyLU5SMDMiLCJSZWZyZXNoIGFjY2VzcyB0b2tlbiByZXF1ZXN0IGZhaWxlZC4iLG51bGwhPXQ/dDoiVGhlIHJlcXVlc3QgdG8gcmVmcmVzaCB0aGUgYWNjZXNzIHRva2VuIGZhaWxlZC4iKX1pZighby5vayl0aHJvdyBuZXcgYSgiSlMtQVVUSF9DT1JFLVJBVDItSEUwNCIsYFJlZnJlc2hpbmcgYWNjZXNzIHRva2VuIGZhaWxlZCB3aXRoICR7by5zdGF0dXNUZXh0fWAseWllbGQgby5qc29uKCkpO3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5oYW5kbGVUb2tlblJlc3BvbnNlKG8sZSl9KSl9cmV2b2tlQWNjZXNzVG9rZW4oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PSh5aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpKS5yZXZvY2F0aW9uX2VuZHBvaW50LHI9eWllbGQgdGhpcy5fY29uZmlnKCk7aWYoIXR8fDA9PT10LnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IGEoIkpTLUFVVEhfQ09SRS1SQVQzLU5GMDEiLCJObyByZXZva2UgYWNjZXNzIHRva2VuIGVuZHBvaW50IGZvdW5kLiIsIk5vIHJldm9rZSBhY2Nlc3MgdG9rZW4gZW5kcG9pbnQgd2FzIGZvdW5kIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgcmV2b2tlIGFjY2VzcyB0b2tlbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtjb25zdCBuPVtdO2xldCBpO24ucHVzaChgY2xpZW50X2lkPSR7ci5jbGllbnRJRH1gKSxuLnB1c2goYHRva2VuPSR7KHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShlKSkuYWNjZXNzX3Rva2VufWApLG4ucHVzaCgidG9rZW5fdHlwZV9oaW50PWFjY2Vzc190b2tlbiIpO3RyeXtpPXlpZWxkIGZldGNoKHQse2JvZHk6bi5qb2luKCImIiksY3JlZGVudGlhbHM6ci5zZW5kQ29va2llc0luUmVxdWVzdHM/cy5JbmNsdWRlOnMuU2FtZU9yaWdpbixoZWFkZXJzOm5ldyBIZWFkZXJzKGMuZ2V0VG9rZW5SZXF1ZXN0SGVhZGVycygpKSxtZXRob2Q6IlBPU1QifSl9Y2F0Y2godCl7dGhyb3cgbmV3IGEoIkpTLUFVVEhfQ09SRS1SQVQzLU5FMDIiLCJUaGUgcmVxdWVzdCB0byByZXZva2UgYWNjZXNzIHRva2VuIGZhaWxlZC4iLG51bGwhPXQ/dDoiVGhlIHJlcXVlc3Qgc2VudCB0byByZXZva2UgdGhlIGFjY2VzcyB0b2tlbiBmYWlsZWQuIil9aWYoMjAwIT09aS5zdGF0dXN8fCFpLm9rKXRocm93IG5ldyBhKCJKUy1BVVRIX0NPUkUtUkFUMy1IRTAzIixgSW52YWxpZCByZXNwb25zZSBzdGF0dXMgcmVjZWl2ZWQgZm9yIHJldm9rZSBhY2Nlc3MgdG9rZW4gcmVxdWVzdCAoJHtpLnN0YXR1c1RleHR9KS5gLHlpZWxkIGkuanNvbigpKTtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuY2xlYXJVc2VyU2Vzc2lvbkRhdGEoZSksUHJvbWlzZS5yZXNvbHZlKGkpfSkpfXJlcXVlc3RDdXN0b21HcmFudChlLHIpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgbj15aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpLGk9eWllbGQgdGhpcy5fY29uZmlnKCk7bGV0IG87aWYobz1lLnRva2VuRW5kcG9pbnQmJjAhPT1lLnRva2VuRW5kcG9pbnQudHJpbSgpLmxlbmd0aD9lLnRva2VuRW5kcG9pbnQ6bi50b2tlbl9lbmRwb2ludCwhb3x8MD09PW8udHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYSgiSlMtQVVUSF9DT1JFLVJDRy1ORjAxIiwiVG9rZW4gZW5kcG9pbnQgbm90IGZvdW5kLiIsIk5vIHRva2VuIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIHRva2VuIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpO2NvbnN0IHU9eWllbGQgUHJvbWlzZS5hbGwoT2JqZWN0LmVudHJpZXMoZS5kYXRhKS5tYXAoKChbZSxuXSk9PnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLnJlcGxhY2VDdXN0b21HcmFudFRlbXBsYXRlVGFncyhuLHIpO3JldHVybmAke2V9PSR7dH1gfSkpKSkpO2xldCBsPU9iamVjdC5hc3NpZ24oe30sYy5nZXRUb2tlblJlcXVlc3RIZWFkZXJzKCkpO2UuYXR0YWNoVG9rZW4mJihsPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxsKSx7QXV0aG9yaXphdGlvbjpgQmVhcmVyICR7KHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShyKSkuYWNjZXNzX3Rva2VufWB9KSk7Y29uc3QgaD17Ym9keTp1LmpvaW4oIiYiKSxjcmVkZW50aWFsczppLnNlbmRDb29raWVzSW5SZXF1ZXN0cz9zLkluY2x1ZGU6cy5TYW1lT3JpZ2luLGhlYWRlcnM6bmV3IEhlYWRlcnMobCksbWV0aG9kOiJQT1NUIn07bGV0IGQ7dHJ5e2Q9eWllbGQgZmV0Y2gobyxoKX1jYXRjaChlKXt0aHJvdyBuZXcgYSgiSlMtQVVUSF9DT1JFLVJDRy1ORTAyIiwiVGhlIGN1c3RvbSBncmFudCByZXF1ZXN0IGZhaWxlZC4iLG51bGwhPWU/ZToiVGhlIHJlcXVlc3Qgc2VudCB0byBnZXQgdGhlIGN1c3RvbSBncmFudCBmYWlsZWQuIil9aWYoMjAwIT09ZC5zdGF0dXN8fCFkLm9rKXRocm93IG5ldyBhKCJKUy1BVVRIX0NPUkUtUkNHLUhFMDMiLGBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cyByZWNlaXZlZCBmb3IgdGhlIGN1c3RvbSBncmFudCByZXF1ZXN0LiAoJHtkLnN0YXR1c1RleHR9KWAseWllbGQgZC5qc29uKCkpO3JldHVybiBlLnJldHVybnNTZXNzaW9uP3RoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLmhhbmRsZVRva2VuUmVzcG9uc2UoZCxyKTpQcm9taXNlLnJlc29sdmUoeWllbGQgZC5qc29uKCkpfSkpfWdldEJhc2ljVXNlckluZm8oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShlKSxyPXRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLmdldEF1dGhlbnRpY2F0ZWRVc2VySW5mbyhudWxsPT10P3ZvaWQgMDp0LmlkX3Rva2VuKTtsZXQgbj17YWxsb3dlZFNjb3Blczp0LnNjb3BlLHNlc3Npb25TdGF0ZTp0LnNlc3Npb25fc3RhdGV9O3JldHVybiBPYmplY3Qua2V5cyhyKS5mb3JFYWNoKChlPT57dm9pZCAwIT09cltlXSYmIiIhPT1yW2VdJiZudWxsIT09cltlXXx8ZGVsZXRlIHJbZV19KSksbj1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbiksciksbn0pKX1nZXREZWNvZGVkSURUb2tlbihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9KHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShlKSkuaWRfdG9rZW47cmV0dXJuIHRoaXMuX2NyeXB0b0hlbHBlci5kZWNvZGVJRFRva2VuKHQpfSkpfWdldElEVG9rZW4oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4oeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpKS5pZF90b2tlbn0pKX1nZXRPSURDUHJvdmlkZXJNZXRhRGF0YShlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fY29uZmlnKCk7aWYoIWUmJih5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigib3BfY29uZmlnX2luaXRpYXRlZCIpKSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Y29uc3Qgcj10LndlbGxLbm93bkVuZHBvaW50O2lmKHIpe2xldCBlO3RyeXtpZihlPXlpZWxkIGZldGNoKHIpLDIwMCE9PWUuc3RhdHVzfHwhZS5vayl0aHJvdyBuZXcgRXJyb3J9Y2F0Y2godCl7dGhyb3cgbmV3IGEoIkpTLUFVVEhfQ09SRS1HT1BNRC1IRTAxIiwiSW52YWxpZCB3ZWxsLWtub3duIHJlc3BvbnNlIiwiVGhlIHdlbGwga25vd24gZW5kcG9pbnQgcmVzcG9uc2UgaGFzIGJlZW4gZmFpbGVkIHdpdGggYW4gZXJyb3IuIil9cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRPSURDUHJvdmlkZXJNZXRhRGF0YSh5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXNvbHZlRW5kcG9pbnRzKHlpZWxkIGUuanNvbigpKSkseWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiLCEwKSxQcm9taXNlLnJlc29sdmUoKX1pZih0LmJhc2VVcmwpe3RyeXt5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoeWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIucmVzb2x2ZUVuZHBvaW50c0J5QmFzZVVSTCgpKX1jYXRjaCh0KXt0aHJvdyBuZXcgYSgiSlMtQVVUSF9DT1JFLUdPUE1ELUlWMDIiLCJSZXNvbHZpbmcgZW5kcG9pbnRzIGZhaWxlZC4iLG51bGwhPXQ/dDoiUmVzb2x2aW5nIGVuZHBvaW50cyBieSBiYXNlIHVybCBmYWlsZWQuIil9cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIiwhMCksUHJvbWlzZS5yZXNvbHZlKCl9dHJ5e3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRPSURDUHJvdmlkZXJNZXRhRGF0YSh5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXNvbHZlRW5kcG9pbnRzRXhwbGljaXRseSgpKX1jYXRjaCh0KXt0aHJvdyBuZXcgYSgiSlMtQVVUSF9DT1JFLUdPUE1ELUlWMDMiLCJSZXNvbHZpbmcgZW5kcG9pbnRzIGZhaWxlZC4iLG51bGwhPXQ/dDoiUmVzb2x2aW5nIGVuZHBvaW50cyBieSBleHBsaWNpdGx5IGZhaWxlZC4iKX1yZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiLCEwKSxQcm9taXNlLnJlc29sdmUoKX0pKX1nZXRPSURDU2VydmljZUVuZHBvaW50cygpe3ZhciBlLHIsbixpLG8scyxhLGMsdSxsO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpO3JldHVybnthdXRob3JpemF0aW9uRW5kcG9pbnQ6bnVsbCE9PShlPXQuYXV0aG9yaXphdGlvbl9lbmRwb2ludCkmJnZvaWQgMCE9PWU/ZToiIixjaGVja1Nlc3Npb25JZnJhbWU6bnVsbCE9PShyPXQuY2hlY2tfc2Vzc2lvbl9pZnJhbWUpJiZ2b2lkIDAhPT1yP3I6IiIsZW5kU2Vzc2lvbkVuZHBvaW50Om51bGwhPT0obj10LmVuZF9zZXNzaW9uX2VuZHBvaW50KSYmdm9pZCAwIT09bj9uOiIiLGludHJvc3BlY3Rpb25FbmRwb2ludDpudWxsIT09KGk9dC5pbnRyb3NwZWN0aW9uX2VuZHBvaW50KSYmdm9pZCAwIT09aT9pOiIiLGlzc3VlcjpudWxsIT09KG89dC5pc3N1ZXIpJiZ2b2lkIDAhPT1vP286IiIsandrc1VyaTpudWxsIT09KHM9dC5qd2tzX3VyaSkmJnZvaWQgMCE9PXM/czoiIixyZWdpc3RyYXRpb25FbmRwb2ludDpudWxsIT09KGE9dC5yZWdpc3RyYXRpb25fZW5kcG9pbnQpJiZ2b2lkIDAhPT1hP2E6IiIscmV2b2NhdGlvbkVuZHBvaW50Om51bGwhPT0oYz10LnJldm9jYXRpb25fZW5kcG9pbnQpJiZ2b2lkIDAhPT1jP2M6IiIsdG9rZW5FbmRwb2ludDpudWxsIT09KHU9dC50b2tlbl9lbmRwb2ludCkmJnZvaWQgMCE9PXU/dToiIix1c2VyaW5mb0VuZHBvaW50Om51bGwhPT0obD10LnVzZXJpbmZvX2VuZHBvaW50KSYmdm9pZCAwIT09bD9sOiIifX0pKX1nZXRTaWduT3V0VVJMKGUpe3ZhciByLG4saTtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9bnVsbD09PShyPXlpZWxkIHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCkpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLmVuZF9zZXNzaW9uX2VuZHBvaW50LG89eWllbGQgdGhpcy5fY29uZmlnKCk7aWYoIXR8fDA9PT10LnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IGEoIkpTLUFVVEhfQ09SRS1HU09VLU5GMDEiLCJTaWduLW91dCBlbmRwb2ludCBub3QgZm91bmQuIiwiTm8gc2lnbi1vdXQgZW5kcG9pbnQgd2FzIGZvdW5kIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgc2lnbi1vdXQgZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7Y29uc3Qgcz1udWxsPT09KG49eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpKXx8dm9pZCAwPT09bj92b2lkIDA6bi5pZF90b2tlbjtpZighc3x8MD09PXMudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYSgiSlMtQVVUSF9DT1JFLUdTT1UtTkYwMiIsIklEIHRva2VuIG5vdCBmb3VuZC4iLCJObyBJRCB0b2tlbiBjb3VsZCBiZSBmb3VuZC4gRWl0aGVyIHRoZSBzZXNzaW9uIGluZm9ybWF0aW9uIGlzIGxvc3Qgb3IgeW91IGhhdmUgbm90IHNpZ25lZCBpbi4iKTtjb25zdCBjPW51bGwhPT0oaT1udWxsPT1vP3ZvaWQgMDpvLnNpZ25PdXRSZWRpcmVjdFVSTCkmJnZvaWQgMCE9PWk/aTpudWxsPT1vP3ZvaWQgMDpvLnNpZ25JblJlZGlyZWN0VVJMO2lmKCFjfHwwPT09Yy50cmltKCkubGVuZ3RoKXRocm93IG5ldyBhKCJKUy1BVVRIX0NPUkUtR1NPVS1ORjAzIiwiTm8gc2lnbi1vdXQgcmVkaXJlY3QgVVJMIGZvdW5kLiIsIlRoZSBzaWduLW91dCByZWRpcmVjdCBVUkwgY2Fubm90IGJlIGZvdW5kIG9yIHRoZSBVUkwgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIE5vIHNpZ24taW4gcmVkaXJlY3QgVVJMIGhhcyBiZWVuIGZvdW5kIGVpdGhlci4gIik7cmV0dXJuYCR7dH0/aWRfdG9rZW5faGludD0ke3N9JnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaT0ke2N9JnN0YXRlPXNpZ25fb3V0X3N1Y2Nlc3NgfSkpfXNpZ25PdXQoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuZ2V0U2lnbk91dFVSTChlKTtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuY2xlYXJVc2VyU2Vzc2lvbkRhdGEoZSksdH0pKX1nZXRBY2Nlc3NUb2tlbihlKXt2YXIgcjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBudWxsPT09KHI9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpKXx8dm9pZCAwPT09cj92b2lkIDA6ci5hY2Nlc3NfdG9rZW59KSl9aXNBdXRoZW50aWNhdGVkKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEJvb2xlYW4oeWllbGQgdGhpcy5nZXRBY2Nlc3NUb2tlbihlKSl9KSl9Z2V0UEtDRUNvZGUoZSxyKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihjLmV4dHJhY3RQS0NFS2V5RnJvbVN0YXRlUGFyYW0oZSkscil9KSl9c2V0UEtDRUNvZGUoZSxyLG4pe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGMuZXh0cmFjdFBLQ0VLZXlGcm9tU3RhdGVQYXJhbShyKSxlLG4pfSkpfXVwZGF0ZUNvbmZpZyhlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRDb25maWdEYXRhKGUpLHlpZWxkIHRoaXMuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoITApfSkpfX1jbGFzcyBke2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5faWQ9ZSx0aGlzLl9zdG9yZT10fXNldERhdGFJbkJ1bGsoZSxyKXt2YXIgbjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9bnVsbCE9PShuPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEoZSkpJiZ2b2lkIDAhPT1uP246bnVsbCxpPXQmJkpTT04ucGFyc2UodCksbz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30saSkscikscz1KU09OLnN0cmluZ2lmeShvKTt5aWVsZCB0aGlzLl9zdG9yZS5zZXREYXRhKGUscyl9KSl9c2V0VmFsdWUoZSxyLG4pe3ZhciBpO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD1udWxsIT09KGk9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YShlKSkmJnZvaWQgMCE9PWk/aTpudWxsLG89dCYmSlNPTi5wYXJzZSh0KSxzPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxvKSx7W3JdOm59KSxhPUpTT04uc3RyaW5naWZ5KHMpO3lpZWxkIHRoaXMuX3N0b3JlLnNldERhdGEoZSxhKX0pKX1yZW1vdmVWYWx1ZShlLHIpe3ZhciBuO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD1udWxsIT09KG49eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YShlKSkmJnZvaWQgMCE9PW4/bjpudWxsLGk9dCYmSlNPTi5wYXJzZSh0KSxvPU9iamVjdC5hc3NpZ24oe30saSk7ZGVsZXRlIG9bcl07Y29uc3Qgcz1KU09OLnN0cmluZ2lmeShvKTt5aWVsZCB0aGlzLl9zdG9yZS5zZXREYXRhKGUscyl9KSl9X3Jlc29sdmVLZXkoZSx0KXtyZXR1cm4gdD9gJHtlfS0ke3RoaXMuX2lkfS0ke3R9YDpgJHtlfS0ke3RoaXMuX2lkfWB9c2V0Q29uZmlnRGF0YShlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuc2V0RGF0YUluQnVsayh0aGlzLl9yZXNvbHZlS2V5KG4uQ29uZmlnRGF0YSksZSl9KSl9c2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt0aGlzLnNldERhdGFJbkJ1bGsodGhpcy5fcmVzb2x2ZUtleShuLk9JRENQcm92aWRlck1ldGFEYXRhKSxlKX0pKX1zZXRUZW1wb3JhcnlEYXRhKGUscil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt0aGlzLnNldERhdGFJbkJ1bGsodGhpcy5fcmVzb2x2ZUtleShuLlRlbXBvcmFyeURhdGEsciksZSl9KSl9c2V0U2Vzc2lvbkRhdGEoZSxyKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuc2V0RGF0YUluQnVsayh0aGlzLl9yZXNvbHZlS2V5KG4uU2Vzc2lvbkRhdGEsciksZSl9KSl9Z2V0Q29uZmlnRGF0YSgpe3ZhciBlO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEpTT04ucGFyc2UobnVsbCE9PShlPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShuLkNvbmZpZ0RhdGEpKSkmJnZvaWQgMCE9PWU/ZTpudWxsKX0pKX1nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSgpe3ZhciBlO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEpTT04ucGFyc2UobnVsbCE9PShlPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShuLk9JRENQcm92aWRlck1ldGFEYXRhKSkpJiZ2b2lkIDAhPT1lP2U6bnVsbCl9KSl9Z2V0VGVtcG9yYXJ5RGF0YShlKXt2YXIgcjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBKU09OLnBhcnNlKG51bGwhPT0ocj15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkobi5UZW1wb3JhcnlEYXRhLGUpKSkmJnZvaWQgMCE9PXI/cjpudWxsKX0pKX1nZXRTZXNzaW9uRGF0YShlKXt2YXIgcjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBKU09OLnBhcnNlKG51bGwhPT0ocj15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkobi5TZXNzaW9uRGF0YSxlKSkpJiZ2b2lkIDAhPT1yP3I6bnVsbCl9KSl9cmVtb3ZlQ29uZmlnRGF0YSgpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fc3RvcmUucmVtb3ZlRGF0YSh0aGlzLl9yZXNvbHZlS2V5KG4uQ29uZmlnRGF0YSkpfSkpfXJlbW92ZU9JRENQcm92aWRlck1ldGFEYXRhKCl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9zdG9yZS5yZW1vdmVEYXRhKHRoaXMuX3Jlc29sdmVLZXkobi5PSURDUHJvdmlkZXJNZXRhRGF0YSkpfSkpfXJlbW92ZVRlbXBvcmFyeURhdGEoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9zdG9yZS5yZW1vdmVEYXRhKHRoaXMuX3Jlc29sdmVLZXkobi5UZW1wb3JhcnlEYXRhLGUpKX0pKX1yZW1vdmVTZXNzaW9uRGF0YShlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX3N0b3JlLnJlbW92ZURhdGEodGhpcy5fcmVzb2x2ZUtleShuLlNlc3Npb25EYXRhLGUpKX0pKX1nZXRDb25maWdEYXRhUGFyYW1ldGVyKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkobi5Db25maWdEYXRhKSk7cmV0dXJuIHQmJkpTT04ucGFyc2UodClbZV19KSl9Z2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGFQYXJhbWV0ZXIoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShuLk9JRENQcm92aWRlck1ldGFEYXRhKSk7cmV0dXJuIHQmJkpTT04ucGFyc2UodClbZV19KSl9Z2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihlLHIpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkobi5UZW1wb3JhcnlEYXRhLHIpKTtyZXR1cm4gdCYmSlNPTi5wYXJzZSh0KVtlXX0pKX1nZXRTZXNzaW9uRGF0YVBhcmFtZXRlcihlLHIpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkobi5TZXNzaW9uRGF0YSxyKSk7cmV0dXJuIHQmJkpTT04ucGFyc2UodClbZV19KSl9c2V0Q29uZmlnRGF0YVBhcmFtZXRlcihlLHIpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5zZXRWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KG4uQ29uZmlnRGF0YSksZSxyKX0pKX1zZXRPSURDUHJvdmlkZXJNZXRhRGF0YVBhcmFtZXRlcihlLHIpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5zZXRWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KG4uT0lEQ1Byb3ZpZGVyTWV0YURhdGEpLGUscil9KSl9c2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihlLHIsaSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnNldFZhbHVlKHRoaXMuX3Jlc29sdmVLZXkobi5UZW1wb3JhcnlEYXRhLGkpLGUscil9KSl9c2V0U2Vzc2lvbkRhdGFQYXJhbWV0ZXIoZSxyLGkpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5zZXRWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KG4uU2Vzc2lvbkRhdGEsaSksZSxyKX0pKX1yZW1vdmVDb25maWdEYXRhUGFyYW1ldGVyKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5yZW1vdmVWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KG4uQ29uZmlnRGF0YSksZSl9KSl9cmVtb3ZlT0lEQ1Byb3ZpZGVyTWV0YURhdGFQYXJhbWV0ZXIoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnJlbW92ZVZhbHVlKHRoaXMuX3Jlc29sdmVLZXkobi5PSURDUHJvdmlkZXJNZXRhRGF0YSksZSl9KSl9cmVtb3ZlVGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihlLHIpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5yZW1vdmVWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KG4uVGVtcG9yYXJ5RGF0YSxyKSxlKX0pKX1yZW1vdmVTZXNzaW9uRGF0YVBhcmFtZXRlcihlLHIpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5yZW1vdmVWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KG4uU2Vzc2lvbkRhdGEsciksZSl9KSl9fWNvbnN0IGY9e2Nsb2NrVG9sZXJhbmNlOjMwMCxlbmFibGVQS0NFOiEwLHJlc3BvbnNlTW9kZTpyLnF1ZXJ5LHNjb3BlOlsib3BlbmlkIl0sc2VuZENvb2tpZXNJblJlcXVlc3RzOiEwLHZhbGlkYXRlSURUb2tlbjohMH07Y2xhc3MgcHsKLyoqCiAgICAgICAgICogVGhpcyBpcyB0aGUgY29uc3RydWN0b3IgbWV0aG9kIHRoYXQgcmV0dXJucyBhbiBpbnN0YW5jZSBvZiB0aGUgLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtTdG9yZX0gc3RvcmUgLSBUaGUgc3RvcmUgb2JqZWN0LgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBfc3RvcmU6IFN0b3JlID0gbmV3IERhdGFTdG9yZSgpOwogICAgICAgICAqIGNvbnN0IGF1dGggPSBuZXcgQXNnYXJkZW9BdXRoQ2xpZW50PEN1c3RvbUNsaWVudENvbmZpZz4oX3N0b3JlKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNjb25zdHJ1Y3RvcgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqLwpjb25zdHJ1Y3RvcihlLHQpe3AuX2luc3RhbmNlSUQ/cC5faW5zdGFuY2VJRCs9MTpwLl9pbnN0YW5jZUlEPTAsdGhpcy5fZGF0YUxheWVyPW5ldyBkKGBpbnN0YW5jZV8ke3AuX2luc3RhbmNlSUR9YCxlKSx0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmU9bmV3IGgodGhpcy5fZGF0YUxheWVyLHQpCi8qKgogICAgICAgICAqCiAgICAgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFNESyB3aXRoIHRoZSBjb25maWcgZGF0YS4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7QXV0aENsaWVudENvbmZpZzxUPn0gY29uZmlnIC0gVGhlIGNvbmZpZyBvYmplY3QgdG8gaW5pdGlhbGl6ZSB3aXRoLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBjb25zdCBjb25maWcgPSB7CiAgICAgICAgICogICAgIHNpZ25JblJlZGlyZWN0VVJMOiAiaHR0cDovL2xvY2FsaG9zdDozMDAwL3NpZ24taW4iLAogICAgICAgICAqICAgICBjbGllbnRJRDogImNsaWVudCBJRCIsCiAgICAgICAgICogICAgIGJhc2VVcmw6ICJodHRwczovL2xvY2FsaG9zdDo5NDQzIgogICAgICAgICAqIH0KICAgICAgICAgKgogICAgICAgICAqIGF3YWl0IGF1dGguaW5pdGlhbGl6ZShjb25maWcpOwogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2luaXRpYWxpemUKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL31pbml0aWFsaXplKGUpe3ZhciByLG4saTtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRDb25maWdEYXRhKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGYpLGUpLHtzY29wZTpbLi4ubnVsbCE9PShyPWYuc2NvcGUpJiZ2b2lkIDAhPT1yP3I6W10sLi4ubnVsbCE9PShpPW51bGw9PT0obj1lLnNjb3BlKXx8dm9pZCAwPT09bj92b2lkIDA6bi5maWx0ZXIoKGU9Pnt2YXIgdDtyZXR1cm4hKG51bGw9PT0odD1udWxsPT1mP3ZvaWQgMDpmLnNjb3BlKXx8dm9pZCAwPT09dD92b2lkIDA6dC5pbmNsdWRlcyhlKSl9KSkpJiZ2b2lkIDAhPT1pP2k6W11dfSkpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBgRGF0YUxheWVyYCBvYmplY3QgdGhhdCBhbGxvd3MgeW91IHRvIGFjY2VzcyBhdXRoZW50aWNhdGlvbiBkYXRhLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7RGF0YUxheWVyfSAtIFRoZSBgRGF0YUxheWVyYCBvYmplY3QuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IGRhdGEgPSBhdXRoLmdldERhdGFMYXllcigpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldERhdGFMYXllcgogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0RGF0YUxheWVyKCl7cmV0dXJuIHRoaXMuX2RhdGFMYXllcn0KLyoqCiAgICAgICAgICogVGhpcyBpcyBhbiBhc3luYyBtZXRob2QgdGhhdCByZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGF1dGhvcml6YXRpb24gVVJMLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtHZXRBdXRoVVJMQ29uZmlnfSBjb25maWcgLSAoT3B0aW9uYWwpIEEgY29uZmlnIG9iamVjdCB0byBmb3JjZSBpbml0aWFsaXphdGlvbiBhbmQgcGFzcwogICAgICAgICAqIGN1c3RvbSBwYXRoIHBhcmFtZXRlcnMgc3VjaCBhcyB0aGUgZmlkcCBwYXJhbWV0ZXIuCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgYXV0aG9yaXphdGlvbiBVUkwuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF1dGguZ2V0QXV0aG9yaXphdGlvblVSTCgpLnRoZW4oKHVybCk9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5sb2codXJsKTsKICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAqIH0pOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldEF1dGhvcml6YXRpb25VUkwKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldEF1dGhvcml6YXRpb25VUkwoZSxyKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9T2JqZWN0LmFzc2lnbih7fSxlKTtyZXR1cm4gbnVsbD09dHx8ZGVsZXRlIHQuZm9yY2VJbml0LCh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigib3BfY29uZmlnX2luaXRpYXRlZCIpKT90aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0QXV0aG9yaXphdGlvblVSTCh0LHIpOnRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YShudWxsPT1lP3ZvaWQgMDplLmZvcmNlSW5pdCkudGhlbigoKCk9PnRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRBdXRob3JpemF0aW9uVVJMKHQscikpKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBpcyBhbiBhc3luYyBtZXRob2QgdGhhdCBzZW5kcyBhIHJlcXVlc3QgdG8gb2J0YWluIHRoZSBhY2Nlc3MgdG9rZW4gYW5kIHJldHVybnMgYSBQcm9taXNlCiAgICAgICAgICogdGhhdCByZXNvbHZlcyB3aXRoIHRoZSB0b2tlbiBhbmQgb3RoZXIgcmVsZXZhbnQgZGF0YS4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdXRob3JpemF0aW9uQ29kZSAtIFRoZSBhdXRob3JpemF0aW9uIGNvZGUuCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHNlc3Npb25TdGF0ZSAtIFRoZSBzZXNzaW9uIHN0YXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxUb2tlblJlc3BvbnNlPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSB0b2tlbiByZXNwb25zZS4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogYXV0aC5yZXF1ZXN0QWNjZXNzVG9rZW4oYXV0aENvZGUsIHNlc3Npb25TdGF0ZSkudGhlbigodG9rZW4pPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUubG9nKHRva2VuKTsKICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAqIH0pOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3JlcXVlc3RBY2Nlc3NUb2tlbgogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovcmVxdWVzdEFjY2Vzc1Rva2VuKGUscixuLGkpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIikpP3RoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5yZXF1ZXN0QWNjZXNzVG9rZW4oZSxyLG4saSk6dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldE9JRENQcm92aWRlck1ldGFEYXRhKCExKS50aGVuKCgoKT0+dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnJlcXVlc3RBY2Nlc3NUb2tlbihlLHIsbixpKSkpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCBjbGVhcnMgYWxsIGF1dGhlbnRpY2F0aW9uIGRhdGEgYW5kIHJldHVybnMgdGhlIHNpZ24tb3V0IFVSTC4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHNpZ24tb3V0IFVSTC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3Qgc2lnbk91dFVybCA9IGF3YWl0IGF1dGguc2lnbk91dCgpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3NpZ25PdXQKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL3NpZ25PdXQoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnNpZ25PdXQoZSl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHNpZ24tb3V0IFVSTC4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqCiAgICAgICAgICogKipUaGlzIGRvZXNuJ3QgY2xlYXIgdGhlIGF1dGhlbnRpY2F0aW9uIGRhdGEuKioKICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBzaWduLW91dCBVUkwuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IHNpZ25PdXRVcmwgPSBhd2FpdCBhdXRoLmdldFNpZ25PdXRVUkwoKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRTaWduT3V0VVJMCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9nZXRTaWduT3V0VVJMKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRTaWduT3V0VVJMKGUpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIE9JREMgc2VydmljZSBlbmRwb2ludHMgdGhhdCBhcmUgZmV0Y2hlZCBmcm9tIHRoZSBgLndlbGwta25vd25gIGVuZHBvaW50LgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxPSURDRW5kcG9pbnRzPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBPSURDIHNlcnZpY2UgZW5kcG9pbnRzLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBlbmRwb2ludHMgPSBhd2FpdCBhdXRoLmdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIGRlY29kZXMgdGhlIHBheWxvYWQgb2YgdGhlIElEIHRva2VuIGFuZCByZXR1cm5zIGl0LgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPERlY29kZWRJRFRva2VuUGF5bG9hZD59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgZGVjb2RlZCBJRCB0b2tlbiBwYXlsb2FkLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBkZWNvZGVkSWRUb2tlbiA9IGF3YWl0IGF1dGguZ2V0RGVjb2RlZElEVG9rZW4oKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXREZWNvZGVkSURUb2tlbgogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0RGVjb2RlZElEVG9rZW4oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldERlY29kZWRJRFRva2VuKGUpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBJRCB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIElEIHRva2VuLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBpZFRva2VuID0gYXdhaXQgYXV0aC5nZXRJRFRva2VuKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0SURUb2tlbgogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0SURUb2tlbihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0SURUb2tlbihlKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgYmFzaWMgdXNlciBpbmZvcm1hdGlvbiBvYnRhaW5lZCBmcm9tIHRoZSBJRCB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxCYXNpY1VzZXJJbmZvPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBiYXNpYyB1c2VyIGluZm9ybWF0aW9uLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCB1c2VySW5mbyA9IGF3YWl0IGF1dGguZ2V0QmFzaWNVc2VySW5mbygpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldEJhc2ljVXNlckluZm8KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldEJhc2ljVXNlckluZm8oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldEJhc2ljVXNlckluZm8oZSl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldm9rZXMgdGhlIGFjY2VzcyB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqCiAgICAgICAgICogKipUaGlzIG1ldGhvZCBhbHNvIGNsZWFycyB0aGUgYXV0aGVudGljYXRpb24gZGF0YS4qKgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxGZXRjaFJlc3BvbnNlPn0gLSBBIFByb21pc2UgdGhhdCByZXR1cm5zIHRoZSByZXNwb25zZSBvZiB0aGUgcmV2b2tlLWFjY2Vzcy10b2tlbiByZXF1ZXN0LgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBhdXRoLnJldm9rZUFjY2Vzc1Rva2VuKCkudGhlbigocmVzcG9uc2UpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUubG9nKHJlc3BvbnNlKTsKICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAqIH0pOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3Jldm9rZUFjY2Vzc1Rva2VuCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9yZXZva2VBY2Nlc3NUb2tlbihlKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnJldm9rZUFjY2Vzc1Rva2VuKGUpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZWZyZXNoZXMgdGhlIGFjY2VzcyB0b2tlbiBhbmQgcmV0dXJucyBhIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBuZXcgYWNjZXNzCiAgICAgICAgICogdG9rZW4gYW5kIG90aGVyIHJlbGV2YW50IGRhdGEuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8VG9rZW5SZXNwb25zZT59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdG9rZW4gcmVzcG9uc2UuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF1dGgucmVmcmVzaEFjY2Vzc1Rva2VuKCkudGhlbigocmVzcG9uc2UpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUubG9nKHJlc3BvbnNlKTsKICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAqIH0pOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3JlZnJlc2hBY2Nlc3NUb2tlbgogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovcmVmcmVzaEFjY2Vzc1Rva2VuKGUpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmVmcmVzaEFjY2Vzc1Rva2VuKGUpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBhY2Nlc3MgdG9rZW4uCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBhY2Nlc3MgdG9rZW4uCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXdhaXQgYXV0aC5nZXRBY2Nlc3NUb2tlbigpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldEFjY2Vzc1Rva2VuCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9nZXRBY2Nlc3NUb2tlbihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0QWNjZXNzVG9rZW4oZSl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHNlbmRzIGEgY3VzdG9tLWdyYW50IHJlcXVlc3QgYW5kIHJldHVybnMgYSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgcmVzcG9uc2UKICAgICAgICAgKiBkZXBlbmRpbmcgb24gdGhlIGNvbmZpZyBwYXNzZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge0N1c3RvbUdyYW50Q29uZmlnfSBjb25maWcgLSBBIGNvbmZpZyBvYmplY3QgY29udGFpbmluZyB0aGUgY3VzdG9tIGdyYW50IGNvbmZpZ3VyYXRpb25zLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxUb2tlblJlc3BvbnNlIHwgRmV0Y2hSZXNwb25zZT59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgcmVzcG9uc2UgZGVwZW5kaW5nCiAgICAgICAgICogb24geW91ciBjb25maWd1cmF0aW9ucy4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgY29uZmlnID0gewogICAgICAgICAqICAgYXR0YWNoVG9rZW46IGZhbHNlLAogICAgICAgICAqICAgZGF0YTogewogICAgICAgICAqICAgICAgIGNsaWVudF9pZDogInt7Y2xpZW50SUR9fSIsCiAgICAgICAgICogICAgICAgZ3JhbnRfdHlwZTogImFjY291bnRfc3dpdGNoIiwKICAgICAgICAgKiAgICAgICBzY29wZTogInt7c2NvcGV9fSIsCiAgICAgICAgICogICAgICAgdG9rZW46ICJ7e3Rva2VufX0iLAogICAgICAgICAqICAgfSwKICAgICAgICAgKiAgIGlkOiAiYWNjb3VudC1zd2l0Y2giLAogICAgICAgICAqICAgcmV0dXJuUmVzcG9uc2U6IHRydWUsCiAgICAgICAgICogICByZXR1cm5zU2Vzc2lvbjogdHJ1ZSwKICAgICAgICAgKiAgIHNpZ25JblJlcXVpcmVkOiB0cnVlCiAgICAgICAgICogfQogICAgICAgICAqCiAgICAgICAgICogYXV0aC5yZXF1ZXN0Q3VzdG9tR3JhbnQoY29uZmlnKS50aGVuKChyZXNwb25zZSk9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5sb2cocmVzcG9uc2UpOwogICAgICAgICAqIH0pLmNhdGNoKChlcnJvcik9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5lcnJvcihlcnJvcik7CiAgICAgICAgICogfSk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjcmVxdWVzdEN1c3RvbUdyYW50CiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9yZXF1ZXN0Q3VzdG9tR3JhbnQoZSx0KXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnJlcXVlc3RDdXN0b21HcmFudChlLHQpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGlmIHRoZSB1c2VyIGlzIGF1dGhlbnRpY2F0ZWQgb3Igbm90LgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPGJvb2xlYW4+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggYHRydWVgIGlmIHRoZSB1c2VyIGlzIGF1dGhlbnRpY2F0ZWQsIGBmYWxzZWAgb3RoZXJ3aXNlLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBhd2FpdCBhdXRoLmlzQXV0aGVudGljYXRlZCgpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2lzQXV0aGVudGljYXRlZAogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovaXNBdXRoZW50aWNhdGVkKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5pc0F1dGhlbnRpY2F0ZWQoZSl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFBLQ0UgY29kZSBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSBhdXRoZW50aWNhdGlvbiBVUkwuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3RhdGUgLSBUaGUgc3RhdGUgcGFyYW1ldGVyIHRoYXQgd2FzIHBhc3NlZCBpbiB0aGUgYXV0aGVudGljYXRpb24gVVJMLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIFBLQ0UgY29kZS4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgcGtjZSA9IGF3YWl0IGdldFBLQ0VDb2RlKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0UEtDRUNvZGUKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldFBLQ0VDb2RlKGUscil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldFBLQ0VDb2RlKGUscil9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFBLQ0UgY29kZSB0byB0aGUgZGF0YSBzdG9yZS4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwa2NlIC0gVGhlIFBLQ0UgY29kZS4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3RhdGUgLSBUaGUgc3RhdGUgcGFyYW1ldGVyIHRoYXQgd2FzIHBhc3NlZCBpbiB0aGUgYXV0aGVudGljYXRpb24gVVJMLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBhd2FpdCBhdXRoLnNldFBLQ0VDb2RlKCJwa2NlX2NvZGUiKQogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3NldFBLQ0VDb2RlCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9zZXRQS0NFQ29kZShlLHIsbil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuc2V0UEtDRUNvZGUoZSxyLG4pfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGlmIHRoZSBzaWduLW91dCBpcyBzdWNjZXNzZnVsIG9yIG5vdC4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzaWduT3V0UmVkaXJlY3RVcmwgLSBUaGUgVVJMIHRvIHdoaWNoIHRoZSB1c2VyIGhhcyBiZWVuIHJlZGlyZWN0ZWQgdG8gYWZ0ZXIgc2lnbmluZy1vdXQuCiAgICAgICAgICoKICAgICAgICAgKiAqKlRoZSBzZXJ2ZXIgYXBwZW5kcyBwYXRoIHBhcmFtZXRlcnMgdG8gdGhlIGBzaWduT3V0UmVkaXJlY3RVUkxgIGFuZCB0aGVzZSBwYXRoIHBhcmFtZXRlcnMKICAgICAgICAgKiAgYXJlIHJlcXVpcmVkIGZvciB0aGlzIG1ldGhvZCB0byBmdW5jdGlvbi4qKgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7Ym9vbGVhbn0gLSBgdHJ1ZWAgaWYgc3VjY2Vzc2Z1bCwgYGZhbHNlYCBvdGhlcndpc2UuCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjaXNTaWduT3V0U3VjY2Vzc2Z1bAogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovc3RhdGljIGlzU2lnbk91dFN1Y2Nlc3NmdWwoZSl7Y29uc3QgdD1uZXcgVVJMKGUpLHI9dC5zZWFyY2hQYXJhbXMuZ2V0KCJzdGF0ZSIpLG49Qm9vbGVhbih0LnNlYXJjaFBhcmFtcy5nZXQoImVycm9yIikpO3JldHVybiEhciYmInNpZ25fb3V0X3N1Y2Nlc3MiPT09ciYmIW59Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgaWYgdGhlIHNpZ24tb3V0IGhhcyBmYWlsZWQgb3Igbm90LgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHNpZ25PdXRSZWRpcmVjdFVybCAtIFRoZSBVUkwgdG8gd2hpY2ggdGhlIHVzZXIgaGFzIGJlZW4gcmVkaXJlY3RlZCB0byBhZnRlciBzaWduaW5nLW91dC4KICAgICAgICAgKgogICAgICAgICAqICoqVGhlIHNlcnZlciBhcHBlbmRzIHBhdGggcGFyYW1ldGVycyB0byB0aGUgYHNpZ25PdXRSZWRpcmVjdFVSTGAgYW5kIHRoZXNlIHBhdGggcGFyYW1ldGVycwogICAgICAgICAqICBhcmUgcmVxdWlyZWQgZm9yIHRoaXMgbWV0aG9kIHRvIGZ1bmN0aW9uLioqCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtib29sZWFufSAtIGB0cnVlYCBpZiBzdWNjZXNzZnVsLCBgZmFsc2VgIG90aGVyd2lzZS4KICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNkaWRTaWduT3V0RmFpbAogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovc3RhdGljIGRpZFNpZ25PdXRGYWlsKGUpe2NvbnN0IHQ9bmV3IFVSTChlKSxyPXQuc2VhcmNoUGFyYW1zLmdldCgic3RhdGUiKSxuPUJvb2xlYW4odC5zZWFyY2hQYXJhbXMuZ2V0KCJlcnJvciIpKTtyZXR1cm4hIXImJiJzaWduX291dF9zdWNjZXNzIj09PXImJm59Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHVwZGF0ZXMgdGhlIGNvbmZpZ3VyYXRpb24gdGhhdCB3YXMgcGFzc2VkIGludG8gdGhlIGNvbnN0cnVjdG9yIHdoZW4gaW5zdGFudGlhdGluZyB0aGlzIGNsYXNzLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtQYXJ0aWFsPEF1dGhDbGllbnRDb25maWc8VD4+fSBjb25maWcgLSBBIGNvbmZpZyBvYmplY3QgdG8gdXBkYXRlIHRoZSBTREsgY29uZmlndXJhdGlvbnMgd2l0aC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgY29uZmlnID0gewogICAgICAgICAqICAgICBzaWduSW5SZWRpcmVjdFVSTDogImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9zaWduLWluIiwKICAgICAgICAgKiAgICAgY2xpZW50SUQ6ICJjbGllbnQgSUQiLAogICAgICAgICAqICAgICBiYXNlVXJsOiAiaHR0cHM6Ly9sb2NhbGhvc3Q6OTQ0MyIKICAgICAgICAgKiB9CiAgICAgICAgICoKICAgICAgICAgKiBhd2FpdCBhdXRoLnVwZGF0ZUNvbmZpZyhjb25maWcpOwogICAgICAgICAqIGBgYAogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciN1cGRhdGVDb25maWcKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL3VwZGF0ZUNvbmZpZyhlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS51cGRhdGVDb25maWcoZSl9KSl9fWNvbnN0IGc9ImluaXQiO3ZhciB5LHY7IWZ1bmN0aW9uKGUpe2UuTG9jYWxTdG9yYWdlPSJsb2NhbFN0b3JhZ2UiLGUuU2Vzc2lvblN0b3JhZ2U9InNlc3Npb25TdG9yYWdlIixlLldlYldvcmtlcj0id2ViV29ya2VyIixlLkJyb3dzZXJNZW1vcnk9ImJyb3dzZXJNZW1vcnkifSh5fHwoeT17fSkpLGZ1bmN0aW9uKGUpe2UuU2lnbkluPSJzaWduLWluIixlLlNpZ25PdXQ9InNpZ24tb3V0IixlLkluaXRpYWxpemU9ImluaXRpYWxpemUiLGUuSHR0cFJlcXVlc3RTdGFydD0iaHR0cC1yZXF1ZXN0LXN0YXJ0IixlLkh0dHBSZXF1ZXN0RmluaXNoPSJodHRwLXJlcXVlc3QtZmluaXNoIixlLkh0dHBSZXF1ZXN0RXJyb3I9Imh0dHAtcmVxdWVzdC1lcnJvciIsZS5IdHRwUmVxdWVzdFN1Y2Nlc3M9Imh0dHAtcmVxdWVzdC1zdWNjZXNzIixlLlJldm9rZUFjY2Vzc1Rva2VuPSJyZXZva2UtYWNjZXNzLXRva2VuIixlLkN1c3RvbUdyYW50PSJjdXN0b20tZ3JhbnQiLGUuU2lnbk91dEZhaWxlZD0ic2lnbi1vdXQtZmFpbGVkIn0odnx8KHY9e30pKTtjb25zdCBtPSJjdXN0b21fZ3JhbnRfY29uZmlnIjtjbGFzcyB3e2NvbnN0cnVjdG9yKGUpe3RoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50PWUsdGhpcy5fZGF0YUxheWVyPXRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldERhdGFMYXllcigpfXJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkoKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKCk7aWYodC5yZWZyZXNoX3Rva2VuKXtjb25zdCByPXBhcnNlSW50KHQuZXhwaXJlc19pbiksbj1zZXRUaW1lb3V0KCgoKT0+ZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LnJlZnJlc2hBY2Nlc3NUb2tlbigpfSkpKSwxZTMqKHI8PTEwP3I6ci0xMCkpO3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGksSlNPTi5zdHJpbmdpZnkobikpfX0pKX1jbGVhclJlZnJlc2hUb2tlblRpbWVvdXQoKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2lmKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGkpKXtjb25zdCBlPUpTT04ucGFyc2UoeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoaSkpO2NsZWFyVGltZW91dChlKX19KSl9fWNsYXNzIF97Y29uc3RydWN0b3IoKXt9c3RhdGljIGdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSl7cmV0dXJue2Jsb2I6KG51bGw9PWU/dm9pZCAwOmUuZGF0YSlpbnN0YW5jZW9mIEJsb2I/bnVsbD09ZT92b2lkIDA6ZS5kYXRhOm51bGwsZGF0YTpKU09OLnN0cmluZ2lmeShudWxsIT1lP2U6IiIpLHN1Y2Nlc3M6ITB9fXN0YXRpYyBnZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpe3JldHVybihudWxsPT1lP3ZvaWQgMDplLnRvSlNPTikmJmRlbGV0ZSBlLnRvSlNPTix7ZXJyb3I6SlNPTi5zdHJpbmdpZnkobnVsbCE9ZT9lOiIiKSxzdWNjZXNzOiExfX19dmFyIGI9InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OiJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjp7fTtmdW5jdGlvbiBTKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJkZWZhdWx0Iik/ZS5kZWZhdWx0OmV9ZnVuY3Rpb24gRShlKXtpZihlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZm9yRWFjaCgoZnVuY3Rpb24ocil7dmFyIG49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHIsbi5nZXQ/bjp7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZVtyXX19KX0pKSx0fXZhciBrPXtleHBvcnRzOnt9fSxUPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciByPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKSxuPTA7bjxyLmxlbmd0aDtuKyspcltuXT1hcmd1bWVudHNbbl07cmV0dXJuIGUuYXBwbHkodCxyKX19LFI9VCxBPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7ZnVuY3Rpb24gQyhlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKX1mdW5jdGlvbiBEKGUpe3JldHVybiB2b2lkIDA9PT1lfWZ1bmN0aW9uIFAoZSl7cmV0dXJuIltvYmplY3QgQXJyYXlCdWZmZXJdIj09PUEuY2FsbChlKX1mdW5jdGlvbiBPKGUpe3JldHVybiBudWxsIT09ZSYmIm9iamVjdCI9PXR5cGVvZiBlfWZ1bmN0aW9uIEkoZSl7aWYoIltvYmplY3QgT2JqZWN0XSIhPT1BLmNhbGwoZSkpcmV0dXJuITE7dmFyIHQ9T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO3JldHVybiBudWxsPT09dHx8dD09PU9iamVjdC5wcm90b3R5cGV9ZnVuY3Rpb24gVShlKXtyZXR1cm4iW29iamVjdCBGdW5jdGlvbl0iPT09QS5jYWxsKGUpfWZ1bmN0aW9uIEwoZSx0KXtpZihudWxsIT1lKWlmKCJvYmplY3QiIT10eXBlb2YgZSYmKGU9W2VdKSxDKGUpKWZvcih2YXIgcj0wLG49ZS5sZW5ndGg7cjxuO3IrKyl0LmNhbGwobnVsbCxlW3JdLHIsZSk7ZWxzZSBmb3IodmFyIGkgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxpKSYmdC5jYWxsKG51bGwsZVtpXSxpLGUpfXZhciBIPXtpc0FycmF5OkMsaXNBcnJheUJ1ZmZlcjpQLGlzQnVmZmVyOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT09ZSYmIUQoZSkmJm51bGwhPT1lLmNvbnN0cnVjdG9yJiYhRChlLmNvbnN0cnVjdG9yKSYmImZ1bmN0aW9uIj09dHlwZW9mIGUuY29uc3RydWN0b3IuaXNCdWZmZXImJmUuY29uc3RydWN0b3IuaXNCdWZmZXIoZSl9LGlzRm9ybURhdGE6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgRm9ybURhdGFdIj09PUEuY2FsbChlKX0saXNBcnJheUJ1ZmZlclZpZXc6ZnVuY3Rpb24oZSl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmQXJyYXlCdWZmZXIuaXNWaWV3P0FycmF5QnVmZmVyLmlzVmlldyhlKTplJiZlLmJ1ZmZlciYmUChlLmJ1ZmZlcil9LGlzU3RyaW5nOmZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZX0saXNOdW1iZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlfSxpc09iamVjdDpPLGlzUGxhaW5PYmplY3Q6SSxpc1VuZGVmaW5lZDpELGlzRGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBEYXRlXSI9PT1BLmNhbGwoZSl9LGlzRmlsZTpmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBGaWxlXSI9PT1BLmNhbGwoZSl9LGlzQmxvYjpmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBCbG9iXSI9PT1BLmNhbGwoZSl9LGlzRnVuY3Rpb246VSxpc1N0cmVhbTpmdW5jdGlvbihlKXtyZXR1cm4gTyhlKSYmVShlLnBpcGUpfSxpc1VSTFNlYXJjaFBhcmFtczpmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBVUkxTZWFyY2hQYXJhbXNdIj09PUEuY2FsbChlKX0saXNTdGFuZGFyZEJyb3dzZXJFbnY6ZnVuY3Rpb24oKXtyZXR1cm4oInVuZGVmaW5lZCI9PXR5cGVvZiBuYXZpZ2F0b3J8fCJSZWFjdE5hdGl2ZSIhPT1uYXZpZ2F0b3IucHJvZHVjdCYmIk5hdGl2ZVNjcmlwdCIhPT1uYXZpZ2F0b3IucHJvZHVjdCYmIk5TIiE9PW5hdmlnYXRvci5wcm9kdWN0KSYmKCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiYidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50KX0sZm9yRWFjaDpMLG1lcmdlOmZ1bmN0aW9uIGUoKXt2YXIgdD17fTtmdW5jdGlvbiByKHIsbil7SSh0W25dKSYmSShyKT90W25dPWUodFtuXSxyKTpJKHIpP3Rbbl09ZSh7fSxyKTpDKHIpP3Rbbl09ci5zbGljZSgpOnRbbl09cn1mb3IodmFyIG49MCxpPWFyZ3VtZW50cy5sZW5ndGg7bjxpO24rKylMKGFyZ3VtZW50c1tuXSxyKTtyZXR1cm4gdH0sZXh0ZW5kOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gTCh0LChmdW5jdGlvbih0LG4pe2Vbbl09ciYmImZ1bmN0aW9uIj09dHlwZW9mIHQ/Uih0LHIpOnR9KSksZX0sdHJpbTpmdW5jdGlvbihlKXtyZXR1cm4gZS50cmltP2UudHJpbSgpOmUucmVwbGFjZSgvXlxzK3xccyskL2csIiIpfSxzdHJpcEJPTTpmdW5jdGlvbihlKXtyZXR1cm4gNjUyNzk9PT1lLmNoYXJDb2RlQXQoMCkmJihlPWUuc2xpY2UoMSkpLGV9fSxNPUg7ZnVuY3Rpb24gTihlKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGUpLnJlcGxhY2UoLyUzQS9naSwiOiIpLnJlcGxhY2UoLyUyNC9nLCIkIikucmVwbGFjZSgvJTJDL2dpLCIsIikucmVwbGFjZSgvJTIwL2csIisiKS5yZXBsYWNlKC8lNUIvZ2ksIlsiKS5yZXBsYWNlKC8lNUQvZ2ksIl0iKX12YXIgaj1mdW5jdGlvbihlLHQscil7aWYoIXQpcmV0dXJuIGU7dmFyIG47aWYociluPXIodCk7ZWxzZSBpZihNLmlzVVJMU2VhcmNoUGFyYW1zKHQpKW49dC50b1N0cmluZygpO2Vsc2V7dmFyIGk9W107TS5mb3JFYWNoKHQsKGZ1bmN0aW9uKGUsdCl7bnVsbCE9ZSYmKE0uaXNBcnJheShlKT90Kz0iW10iOmU9W2VdLE0uZm9yRWFjaChlLChmdW5jdGlvbihlKXtNLmlzRGF0ZShlKT9lPWUudG9JU09TdHJpbmcoKTpNLmlzT2JqZWN0KGUpJiYoZT1KU09OLnN0cmluZ2lmeShlKSksaS5wdXNoKE4odCkrIj0iK04oZSkpfSkpKX0pKSxuPWkuam9pbigiJiIpfWlmKG4pe3ZhciBvPWUuaW5kZXhPZigiIyIpOy0xIT09byYmKGU9ZS5zbGljZSgwLG8pKSxlKz0oLTE9PT1lLmluZGV4T2YoIj8iKT8iPyI6IiYiKStufXJldHVybiBlfSx4PUg7ZnVuY3Rpb24gcSgpe3RoaXMuaGFuZGxlcnM9W119cS5wcm90b3R5cGUudXNlPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdGhpcy5oYW5kbGVycy5wdXNoKHtmdWxmaWxsZWQ6ZSxyZWplY3RlZDp0LHN5bmNocm9ub3VzOiEhciYmci5zeW5jaHJvbm91cyxydW5XaGVuOnI/ci5ydW5XaGVuOm51bGx9KSx0aGlzLmhhbmRsZXJzLmxlbmd0aC0xfSxxLnByb3RvdHlwZS5lamVjdD1mdW5jdGlvbihlKXt0aGlzLmhhbmRsZXJzW2VdJiYodGhpcy5oYW5kbGVyc1tlXT1udWxsKX0scS5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbihlKXt4LmZvckVhY2godGhpcy5oYW5kbGVycywoZnVuY3Rpb24odCl7bnVsbCE9PXQmJmUodCl9KSl9O3ZhciBLPXEsSj0idW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9O2Z1bmN0aW9uIEIoKXt0aHJvdyBuZXcgRXJyb3IoInNldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX1mdW5jdGlvbiBGKCl7dGhyb3cgbmV3IEVycm9yKCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX12YXIgVz1CLCQ9RjtmdW5jdGlvbiB6KGUpe2lmKFc9PT1zZXRUaW1lb3V0KXJldHVybiBzZXRUaW1lb3V0KGUsMCk7aWYoKFc9PT1CfHwhVykmJnNldFRpbWVvdXQpcmV0dXJuIFc9c2V0VGltZW91dCxzZXRUaW1lb3V0KGUsMCk7dHJ5e3JldHVybiBXKGUsMCl9Y2F0Y2godCl7dHJ5e3JldHVybiBXLmNhbGwobnVsbCxlLDApfWNhdGNoKHQpe3JldHVybiBXLmNhbGwodGhpcyxlLDApfX19ImZ1bmN0aW9uIj09dHlwZW9mIEouc2V0VGltZW91dCYmKFc9c2V0VGltZW91dCksImZ1bmN0aW9uIj09dHlwZW9mIEouY2xlYXJUaW1lb3V0JiYoJD1jbGVhclRpbWVvdXQpO3ZhciBWLFk9W10sRz0hMSxYPS0xO2Z1bmN0aW9uIFooKXtHJiZWJiYoRz0hMSxWLmxlbmd0aD9ZPVYuY29uY2F0KFkpOlg9LTEsWS5sZW5ndGgmJlEoKSl9ZnVuY3Rpb24gUSgpe2lmKCFHKXt2YXIgZT16KFopO0c9ITA7Zm9yKHZhciB0PVkubGVuZ3RoO3Q7KXtmb3IoVj1ZLFk9W107KytYPHQ7KVYmJlZbWF0ucnVuKCk7WD0tMSx0PVkubGVuZ3RofVY9bnVsbCxHPSExLGZ1bmN0aW9uKGUpe2lmKCQ9PT1jbGVhclRpbWVvdXQpcmV0dXJuIGNsZWFyVGltZW91dChlKTtpZigoJD09PUZ8fCEkKSYmY2xlYXJUaW1lb3V0KXJldHVybiAkPWNsZWFyVGltZW91dCxjbGVhclRpbWVvdXQoZSk7dHJ5eyQoZSl9Y2F0Y2godCl7dHJ5e3JldHVybiAkLmNhbGwobnVsbCxlKX1jYXRjaCh0KXtyZXR1cm4gJC5jYWxsKHRoaXMsZSl9fX0oZSl9fWZ1bmN0aW9uIGVlKGUsdCl7dGhpcy5mdW49ZSx0aGlzLmFycmF5PXR9ZWUucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9O2Z1bmN0aW9uIHRlKCl7fXZhciByZT10ZSxuZT10ZSxpZT10ZSxvZT10ZSxzZT10ZSxhZT10ZSxjZT10ZTt2YXIgdWU9Si5wZXJmb3JtYW5jZXx8e30sbGU9dWUubm93fHx1ZS5tb3pOb3d8fHVlLm1zTm93fHx1ZS5vTm93fHx1ZS53ZWJraXROb3d8fGZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCl9O3ZhciBoZT1uZXcgRGF0ZTt2YXIgZGU9e25leHRUaWNrOmZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlmb3IodmFyIHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXRbci0xXT1hcmd1bWVudHNbcl07WS5wdXNoKG5ldyBlZShlLHQpKSwxIT09WS5sZW5ndGh8fEd8fHooUSl9LHRpdGxlOiJicm93c2VyIixicm93c2VyOiEwLGVudjp7fSxhcmd2OltdLHZlcnNpb246IiIsdmVyc2lvbnM6e30sb246cmUsYWRkTGlzdGVuZXI6bmUsb25jZTppZSxvZmY6b2UscmVtb3ZlTGlzdGVuZXI6c2UscmVtb3ZlQWxsTGlzdGVuZXJzOmFlLGVtaXQ6Y2UsYmluZGluZzpmdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkIil9LGN3ZDpmdW5jdGlvbigpe3JldHVybiIvIn0sY2hkaXI6ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKCJwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQiKX0sdW1hc2s6ZnVuY3Rpb24oKXtyZXR1cm4gMH0saHJ0aW1lOmZ1bmN0aW9uKGUpe3ZhciB0PS4wMDEqbGUuY2FsbCh1ZSkscj1NYXRoLmZsb29yKHQpLG49TWF0aC5mbG9vcih0JTEqMWU5KTtyZXR1cm4gZSYmKHItPWVbMF0sKG4tPWVbMV0pPDAmJihyLS0sbis9MWU5KSksW3Isbl19LHBsYXRmb3JtOiJicm93c2VyIixyZWxlYXNlOnt9LGNvbmZpZzp7fSx1cHRpbWU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUtaGUpLzFlM319LGZlPWRlLHBlPUgsZ2U9ZnVuY3Rpb24oZSx0LHIsbixpKXtyZXR1cm4gZS5jb25maWc9dCxyJiYoZS5jb2RlPXIpLGUucmVxdWVzdD1uLGUucmVzcG9uc2U9aSxlLmlzQXhpb3NFcnJvcj0hMCxlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnttZXNzYWdlOnRoaXMubWVzc2FnZSxuYW1lOnRoaXMubmFtZSxkZXNjcmlwdGlvbjp0aGlzLmRlc2NyaXB0aW9uLG51bWJlcjp0aGlzLm51bWJlcixmaWxlTmFtZTp0aGlzLmZpbGVOYW1lLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGNvbHVtbk51bWJlcjp0aGlzLmNvbHVtbk51bWJlcixzdGFjazp0aGlzLnN0YWNrLGNvbmZpZzp0aGlzLmNvbmZpZyxjb2RlOnRoaXMuY29kZSxzdGF0dXM6dGhpcy5yZXNwb25zZSYmdGhpcy5yZXNwb25zZS5zdGF0dXM/dGhpcy5yZXNwb25zZS5zdGF0dXM6bnVsbH19LGV9LHllPXtzaWxlbnRKU09OUGFyc2luZzohMCxmb3JjZWRKU09OUGFyc2luZzohMCxjbGFyaWZ5VGltZW91dEVycm9yOiExfSx2ZT1nZSxtZT1mdW5jdGlvbihlLHQscixuLGkpe3ZhciBvPW5ldyBFcnJvcihlKTtyZXR1cm4gdmUobyx0LHIsbixpKX0sd2U9bWUsX2U9SCxiZT1fZS5pc1N0YW5kYXJkQnJvd3NlckVudigpP3t3cml0ZTpmdW5jdGlvbihlLHQscixuLGksbyl7dmFyIHM9W107cy5wdXNoKGUrIj0iK2VuY29kZVVSSUNvbXBvbmVudCh0KSksX2UuaXNOdW1iZXIocikmJnMucHVzaCgiZXhwaXJlcz0iK25ldyBEYXRlKHIpLnRvR01UU3RyaW5nKCkpLF9lLmlzU3RyaW5nKG4pJiZzLnB1c2goInBhdGg9IituKSxfZS5pc1N0cmluZyhpKSYmcy5wdXNoKCJkb21haW49IitpKSwhMD09PW8mJnMucHVzaCgic2VjdXJlIiksZG9jdW1lbnQuY29va2llPXMuam9pbigiOyAiKX0scmVhZDpmdW5jdGlvbihlKXt2YXIgdD1kb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgiKF58O1xccyopKCIrZSsiKT0oW147XSopIikpO3JldHVybiB0P2RlY29kZVVSSUNvbXBvbmVudCh0WzNdKTpudWxsfSxyZW1vdmU6ZnVuY3Rpb24oZSl7dGhpcy53cml0ZShlLCIiLERhdGUubm93KCktODY0ZTUpfX06e3dyaXRlOmZ1bmN0aW9uKCl7fSxyZWFkOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LHJlbW92ZTpmdW5jdGlvbigpe319LFNlPWZ1bmN0aW9uKGUpe3JldHVybi9eKFthLXpdW2EtelxkK1wtLl0qOik/XC9cLy9pLnRlc3QoZSl9LEVlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/ZS5yZXBsYWNlKC9cLyskLywiIikrIi8iK3QucmVwbGFjZSgvXlwvKy8sIiIpOmV9LGtlPUgsVGU9WyJhZ2UiLCJhdXRob3JpemF0aW9uIiwiY29udGVudC1sZW5ndGgiLCJjb250ZW50LXR5cGUiLCJldGFnIiwiZXhwaXJlcyIsImZyb20iLCJob3N0IiwiaWYtbW9kaWZpZWQtc2luY2UiLCJpZi11bm1vZGlmaWVkLXNpbmNlIiwibGFzdC1tb2RpZmllZCIsImxvY2F0aW9uIiwibWF4LWZvcndhcmRzIiwicHJveHktYXV0aG9yaXphdGlvbiIsInJlZmVyZXIiLCJyZXRyeS1hZnRlciIsInVzZXItYWdlbnQiXSxSZT1ILEFlPVJlLmlzU3RhbmRhcmRCcm93c2VyRW52KCk/ZnVuY3Rpb24oKXt2YXIgZSx0PS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkscj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7ZnVuY3Rpb24gbihlKXt2YXIgbj1lO3JldHVybiB0JiYoci5zZXRBdHRyaWJ1dGUoImhyZWYiLG4pLG49ci5ocmVmKSxyLnNldEF0dHJpYnV0ZSgiaHJlZiIsbikse2hyZWY6ci5ocmVmLHByb3RvY29sOnIucHJvdG9jb2w/ci5wcm90b2NvbC5yZXBsYWNlKC86JC8sIiIpOiIiLGhvc3Q6ci5ob3N0LHNlYXJjaDpyLnNlYXJjaD9yLnNlYXJjaC5yZXBsYWNlKC9eXD8vLCIiKToiIixoYXNoOnIuaGFzaD9yLmhhc2gucmVwbGFjZSgvXiMvLCIiKToiIixob3N0bmFtZTpyLmhvc3RuYW1lLHBvcnQ6ci5wb3J0LHBhdGhuYW1lOiIvIj09PXIucGF0aG5hbWUuY2hhckF0KDApP3IucGF0aG5hbWU6Ii8iK3IucGF0aG5hbWV9fXJldHVybiBlPW4od2luZG93LmxvY2F0aW9uLmhyZWYpLGZ1bmN0aW9uKHQpe3ZhciByPVJlLmlzU3RyaW5nKHQpP24odCk6dDtyZXR1cm4gci5wcm90b2NvbD09PWUucHJvdG9jb2wmJnIuaG9zdD09PWUuaG9zdH19KCk6ZnVuY3Rpb24oKXtyZXR1cm4hMH07ZnVuY3Rpb24gQ2UoZSl7dGhpcy5tZXNzYWdlPWV9Q2UucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIkNhbmNlbCIrKHRoaXMubWVzc2FnZT8iOiAiK3RoaXMubWVzc2FnZToiIil9LENlLnByb3RvdHlwZS5fX0NBTkNFTF9fPSEwO3ZhciBEZT1DZSxQZT1ILE9lPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztyLnN0YXR1cyYmbiYmIW4oci5zdGF0dXMpP3Qod2UoIlJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgIityLnN0YXR1cyxyLmNvbmZpZyxudWxsLHIucmVxdWVzdCxyKSk6ZShyKX0sSWU9YmUsVWU9aixMZT1mdW5jdGlvbihlLHQpe3JldHVybiBlJiYhU2UodCk/RWUoZSx0KTp0fSxIZT1mdW5jdGlvbihlKXt2YXIgdCxyLG4saT17fTtyZXR1cm4gZT8oa2UuZm9yRWFjaChlLnNwbGl0KCJcbiIpLChmdW5jdGlvbihlKXtpZihuPWUuaW5kZXhPZigiOiIpLHQ9a2UudHJpbShlLnN1YnN0cigwLG4pKS50b0xvd2VyQ2FzZSgpLHI9a2UudHJpbShlLnN1YnN0cihuKzEpKSx0KXtpZihpW3RdJiZUZS5pbmRleE9mKHQpPj0wKXJldHVybjtpW3RdPSJzZXQtY29va2llIj09PXQ/KGlbdF0/aVt0XTpbXSkuY29uY2F0KFtyXSk6aVt0XT9pW3RdKyIsICIrcjpyfX0pKSxpKTppfSxNZT1BZSxOZT1tZSxqZT15ZSx4ZT1EZSxxZT1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKHQscil7dmFyIG4saT1lLmRhdGEsbz1lLmhlYWRlcnMscz1lLnJlc3BvbnNlVHlwZTtmdW5jdGlvbiBhKCl7ZS5jYW5jZWxUb2tlbiYmZS5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShuKSxlLnNpZ25hbCYmZS5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLG4pfVBlLmlzRm9ybURhdGEoaSkmJmRlbGV0ZSBvWyJDb250ZW50LVR5cGUiXTt2YXIgYz1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYoZS5hdXRoKXt2YXIgdT1lLmF1dGgudXNlcm5hbWV8fCIiLGw9ZS5hdXRoLnBhc3N3b3JkP3VuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChlLmF1dGgucGFzc3dvcmQpKToiIjtvLkF1dGhvcml6YXRpb249IkJhc2ljICIrYnRvYSh1KyI6IitsKX12YXIgaD1MZShlLmJhc2VVUkwsZS51cmwpO2Z1bmN0aW9uIGQoKXtpZihjKXt2YXIgbj0iZ2V0QWxsUmVzcG9uc2VIZWFkZXJzImluIGM/SGUoYy5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSk6bnVsbCxpPXtkYXRhOnMmJiJ0ZXh0IiE9PXMmJiJqc29uIiE9PXM/Yy5yZXNwb25zZTpjLnJlc3BvbnNlVGV4dCxzdGF0dXM6Yy5zdGF0dXMsc3RhdHVzVGV4dDpjLnN0YXR1c1RleHQsaGVhZGVyczpuLGNvbmZpZzplLHJlcXVlc3Q6Y307T2UoKGZ1bmN0aW9uKGUpe3QoZSksYSgpfSksKGZ1bmN0aW9uKGUpe3IoZSksYSgpfSksaSksYz1udWxsfX1pZihjLm9wZW4oZS5tZXRob2QudG9VcHBlckNhc2UoKSxVZShoLGUucGFyYW1zLGUucGFyYW1zU2VyaWFsaXplciksITApLGMudGltZW91dD1lLnRpbWVvdXQsIm9ubG9hZGVuZCJpbiBjP2Mub25sb2FkZW5kPWQ6Yy5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtjJiY0PT09Yy5yZWFkeVN0YXRlJiYoMCE9PWMuc3RhdHVzfHxjLnJlc3BvbnNlVVJMJiYwPT09Yy5yZXNwb25zZVVSTC5pbmRleE9mKCJmaWxlOiIpKSYmc2V0VGltZW91dChkKX0sYy5vbmFib3J0PWZ1bmN0aW9uKCl7YyYmKHIoTmUoIlJlcXVlc3QgYWJvcnRlZCIsZSwiRUNPTk5BQk9SVEVEIixjKSksYz1udWxsKX0sYy5vbmVycm9yPWZ1bmN0aW9uKCl7cihOZSgiTmV0d29yayBFcnJvciIsZSxudWxsLGMpKSxjPW51bGx9LGMub250aW1lb3V0PWZ1bmN0aW9uKCl7dmFyIHQ9ZS50aW1lb3V0PyJ0aW1lb3V0IG9mICIrZS50aW1lb3V0KyJtcyBleGNlZWRlZCI6InRpbWVvdXQgZXhjZWVkZWQiLG49ZS50cmFuc2l0aW9uYWx8fGplO2UudGltZW91dEVycm9yTWVzc2FnZSYmKHQ9ZS50aW1lb3V0RXJyb3JNZXNzYWdlKSxyKE5lKHQsZSxuLmNsYXJpZnlUaW1lb3V0RXJyb3I/IkVUSU1FRE9VVCI6IkVDT05OQUJPUlRFRCIsYykpLGM9bnVsbH0sUGUuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSl7dmFyIGY9KGUud2l0aENyZWRlbnRpYWxzfHxNZShoKSkmJmUueHNyZkNvb2tpZU5hbWU/SWUucmVhZChlLnhzcmZDb29raWVOYW1lKTp2b2lkIDA7ZiYmKG9bZS54c3JmSGVhZGVyTmFtZV09Zil9InNldFJlcXVlc3RIZWFkZXIiaW4gYyYmUGUuZm9yRWFjaChvLChmdW5jdGlvbihlLHQpe3ZvaWQgMD09PWkmJiJjb250ZW50LXR5cGUiPT09dC50b0xvd2VyQ2FzZSgpP2RlbGV0ZSBvW3RdOmMuc2V0UmVxdWVzdEhlYWRlcih0LGUpfSkpLFBlLmlzVW5kZWZpbmVkKGUud2l0aENyZWRlbnRpYWxzKXx8KGMud2l0aENyZWRlbnRpYWxzPSEhZS53aXRoQ3JlZGVudGlhbHMpLHMmJiJqc29uIiE9PXMmJihjLnJlc3BvbnNlVHlwZT1lLnJlc3BvbnNlVHlwZSksImZ1bmN0aW9uIj09dHlwZW9mIGUub25Eb3dubG9hZFByb2dyZXNzJiZjLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixlLm9uRG93bmxvYWRQcm9ncmVzcyksImZ1bmN0aW9uIj09dHlwZW9mIGUub25VcGxvYWRQcm9ncmVzcyYmYy51cGxvYWQmJmMudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixlLm9uVXBsb2FkUHJvZ3Jlc3MpLChlLmNhbmNlbFRva2VufHxlLnNpZ25hbCkmJihuPWZ1bmN0aW9uKGUpe2MmJihyKCFlfHxlJiZlLnR5cGU/bmV3IHhlKCJjYW5jZWxlZCIpOmUpLGMuYWJvcnQoKSxjPW51bGwpfSxlLmNhbmNlbFRva2VuJiZlLmNhbmNlbFRva2VuLnN1YnNjcmliZShuKSxlLnNpZ25hbCYmKGUuc2lnbmFsLmFib3J0ZWQ/bigpOmUuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixuKSkpLGl8fChpPW51bGwpLGMuc2VuZChpKX0pKX0sS2U9SCxKZT1mdW5jdGlvbihlLHQpe3BlLmZvckVhY2goZSwoZnVuY3Rpb24ocixuKXtuIT09dCYmbi50b1VwcGVyQ2FzZSgpPT09dC50b1VwcGVyQ2FzZSgpJiYoZVt0XT1yLGRlbGV0ZSBlW25dKX0pKX0sQmU9Z2UsRmU9eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQifTtmdW5jdGlvbiBXZShlLHQpeyFLZS5pc1VuZGVmaW5lZChlKSYmS2UuaXNVbmRlZmluZWQoZVsiQ29udGVudC1UeXBlIl0pJiYoZVsiQ29udGVudC1UeXBlIl09dCl9dmFyICRlLHplPXt0cmFuc2l0aW9uYWw6eWUsYWRhcHRlcjooKCJ1bmRlZmluZWQiIT10eXBlb2YgWE1MSHR0cFJlcXVlc3R8fHZvaWQgMCE9PWZlJiYiW29iamVjdCBwcm9jZXNzXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZmUpKSYmKCRlPXFlKSwkZSksdHJhbnNmb3JtUmVxdWVzdDpbZnVuY3Rpb24oZSx0KXtyZXR1cm4gSmUodCwiQWNjZXB0IiksSmUodCwiQ29udGVudC1UeXBlIiksS2UuaXNGb3JtRGF0YShlKXx8S2UuaXNBcnJheUJ1ZmZlcihlKXx8S2UuaXNCdWZmZXIoZSl8fEtlLmlzU3RyZWFtKGUpfHxLZS5pc0ZpbGUoZSl8fEtlLmlzQmxvYihlKT9lOktlLmlzQXJyYXlCdWZmZXJWaWV3KGUpP2UuYnVmZmVyOktlLmlzVVJMU2VhcmNoUGFyYW1zKGUpPyhXZSh0LCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIpLGUudG9TdHJpbmcoKSk6S2UuaXNPYmplY3QoZSl8fHQmJiJhcHBsaWNhdGlvbi9qc29uIj09PXRbIkNvbnRlbnQtVHlwZSJdPyhXZSh0LCJhcHBsaWNhdGlvbi9qc29uIiksZnVuY3Rpb24oZSx0LHIpe2lmKEtlLmlzU3RyaW5nKGUpKXRyeXtyZXR1cm4odHx8SlNPTi5wYXJzZSkoZSksS2UudHJpbShlKX1jYXRjaChlKXtpZigiU3ludGF4RXJyb3IiIT09ZS5uYW1lKXRocm93IGV9cmV0dXJuKHJ8fEpTT04uc3RyaW5naWZ5KShlKX0oZSkpOmV9XSx0cmFuc2Zvcm1SZXNwb25zZTpbZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy50cmFuc2l0aW9uYWx8fHplLnRyYW5zaXRpb25hbCxyPXQmJnQuc2lsZW50SlNPTlBhcnNpbmcsbj10JiZ0LmZvcmNlZEpTT05QYXJzaW5nLGk9IXImJiJqc29uIj09PXRoaXMucmVzcG9uc2VUeXBlO2lmKGl8fG4mJktlLmlzU3RyaW5nKGUpJiZlLmxlbmd0aCl0cnl7cmV0dXJuIEpTT04ucGFyc2UoZSl9Y2F0Y2goZSl7aWYoaSl7aWYoIlN5bnRheEVycm9yIj09PWUubmFtZSl0aHJvdyBCZShlLHRoaXMsIkVfSlNPTl9QQVJTRSIpO3Rocm93IGV9fXJldHVybiBlfV0sdGltZW91dDowLHhzcmZDb29raWVOYW1lOiJYU1JGLVRPS0VOIix4c3JmSGVhZGVyTmFtZToiWC1YU1JGLVRPS0VOIixtYXhDb250ZW50TGVuZ3RoOi0xLG1heEJvZHlMZW5ndGg6LTEsdmFsaWRhdGVTdGF0dXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTIwMCYmZTwzMDB9LGhlYWRlcnM6e2NvbW1vbjp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyoifX19O0tlLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIl0sKGZ1bmN0aW9uKGUpe3plLmhlYWRlcnNbZV09e319KSksS2UuZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCJdLChmdW5jdGlvbihlKXt6ZS5oZWFkZXJzW2VdPUtlLm1lcmdlKEZlKX0pKTt2YXIgVmU9emUsWWU9SCxHZT1WZSxYZT1mdW5jdGlvbihlKXtyZXR1cm4hKCFlfHwhZS5fX0NBTkNFTF9fKX0sWmU9SCxRZT1mdW5jdGlvbihlLHQscil7dmFyIG49dGhpc3x8R2U7cmV0dXJuIFllLmZvckVhY2gociwoZnVuY3Rpb24ocil7ZT1yLmNhbGwobixlLHQpfSkpLGV9LGV0PVhlLHR0PVZlLHJ0PURlO2Z1bmN0aW9uIG50KGUpe2lmKGUuY2FuY2VsVG9rZW4mJmUuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpLGUuc2lnbmFsJiZlLnNpZ25hbC5hYm9ydGVkKXRocm93IG5ldyBydCgiY2FuY2VsZWQiKX12YXIgaXQ9SCxvdD1mdW5jdGlvbihlLHQpe3Q9dHx8e307dmFyIHI9e307ZnVuY3Rpb24gbihlLHQpe3JldHVybiBpdC5pc1BsYWluT2JqZWN0KGUpJiZpdC5pc1BsYWluT2JqZWN0KHQpP2l0Lm1lcmdlKGUsdCk6aXQuaXNQbGFpbk9iamVjdCh0KT9pdC5tZXJnZSh7fSx0KTppdC5pc0FycmF5KHQpP3Quc2xpY2UoKTp0fWZ1bmN0aW9uIGkocil7cmV0dXJuIGl0LmlzVW5kZWZpbmVkKHRbcl0pP2l0LmlzVW5kZWZpbmVkKGVbcl0pP3ZvaWQgMDpuKHZvaWQgMCxlW3JdKTpuKGVbcl0sdFtyXSl9ZnVuY3Rpb24gbyhlKXtpZighaXQuaXNVbmRlZmluZWQodFtlXSkpcmV0dXJuIG4odm9pZCAwLHRbZV0pfWZ1bmN0aW9uIHMocil7cmV0dXJuIGl0LmlzVW5kZWZpbmVkKHRbcl0pP2l0LmlzVW5kZWZpbmVkKGVbcl0pP3ZvaWQgMDpuKHZvaWQgMCxlW3JdKTpuKHZvaWQgMCx0W3JdKX1mdW5jdGlvbiBhKHIpe3JldHVybiByIGluIHQ/bihlW3JdLHRbcl0pOnIgaW4gZT9uKHZvaWQgMCxlW3JdKTp2b2lkIDB9dmFyIGM9e3VybDpvLG1ldGhvZDpvLGRhdGE6byxiYXNlVVJMOnMsdHJhbnNmb3JtUmVxdWVzdDpzLHRyYW5zZm9ybVJlc3BvbnNlOnMscGFyYW1zU2VyaWFsaXplcjpzLHRpbWVvdXQ6cyx0aW1lb3V0TWVzc2FnZTpzLHdpdGhDcmVkZW50aWFsczpzLGFkYXB0ZXI6cyxyZXNwb25zZVR5cGU6cyx4c3JmQ29va2llTmFtZTpzLHhzcmZIZWFkZXJOYW1lOnMsb25VcGxvYWRQcm9ncmVzczpzLG9uRG93bmxvYWRQcm9ncmVzczpzLGRlY29tcHJlc3M6cyxtYXhDb250ZW50TGVuZ3RoOnMsbWF4Qm9keUxlbmd0aDpzLHRyYW5zcG9ydDpzLGh0dHBBZ2VudDpzLGh0dHBzQWdlbnQ6cyxjYW5jZWxUb2tlbjpzLHNvY2tldFBhdGg6cyxyZXNwb25zZUVuY29kaW5nOnMsdmFsaWRhdGVTdGF0dXM6YX07cmV0dXJuIGl0LmZvckVhY2goT2JqZWN0LmtleXMoZSkuY29uY2F0KE9iamVjdC5rZXlzKHQpKSwoZnVuY3Rpb24oZSl7dmFyIHQ9Y1tlXXx8aSxuPXQoZSk7aXQuaXNVbmRlZmluZWQobikmJnQhPT1hfHwocltlXT1uKX0pKSxyfSxzdD0iMC4yNi4xIixhdD1zdCxjdD17fTtbIm9iamVjdCIsImJvb2xlYW4iLCJudW1iZXIiLCJmdW5jdGlvbiIsInN0cmluZyIsInN5bWJvbCJdLmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7Y3RbZV09ZnVuY3Rpb24ocil7cmV0dXJuIHR5cGVvZiByPT09ZXx8ImEiKyh0PDE/Im4gIjoiICIpK2V9fSkpO3ZhciB1dD17fTtjdC50cmFuc2l0aW9uYWw9ZnVuY3Rpb24oZSx0LHIpe2Z1bmN0aW9uIG4oZSx0KXtyZXR1cm4iW0F4aW9zIHYiK2F0KyJdIFRyYW5zaXRpb25hbCBvcHRpb24gJyIrZSsiJyIrdCsocj8iLiAiK3I6IiIpfXJldHVybiBmdW5jdGlvbihyLGksbyl7aWYoITE9PT1lKXRocm93IG5ldyBFcnJvcihuKGksIiBoYXMgYmVlbiByZW1vdmVkIisodD8iIGluICIrdDoiIikpKTtyZXR1cm4gdCYmIXV0W2ldJiYodXRbaV09ITAsY29uc29sZS53YXJuKG4oaSwiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdiIrdCsiIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlIikpKSwhZXx8ZShyLGksbyl9fTt2YXIgbHQ9e2Fzc2VydE9wdGlvbnM6ZnVuY3Rpb24oZSx0LHIpe2lmKCJvYmplY3QiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Iik7Zm9yKHZhciBuPU9iamVjdC5rZXlzKGUpLGk9bi5sZW5ndGg7aS0tID4wOyl7dmFyIG89bltpXSxzPXRbb107aWYocyl7dmFyIGE9ZVtvXSxjPXZvaWQgMD09PWF8fHMoYSxvLGUpO2lmKCEwIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJvcHRpb24gIitvKyIgbXVzdCBiZSAiK2MpfWVsc2UgaWYoITAhPT1yKXRocm93IEVycm9yKCJVbmtub3duIG9wdGlvbiAiK28pfX0sdmFsaWRhdG9yczpjdH0saHQ9SCxkdD1qLGZ0PUsscHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG50KGUpLGUuaGVhZGVycz1lLmhlYWRlcnN8fHt9LGUuZGF0YT1RZS5jYWxsKGUsZS5kYXRhLGUuaGVhZGVycyxlLnRyYW5zZm9ybVJlcXVlc3QpLGUuaGVhZGVycz1aZS5tZXJnZShlLmhlYWRlcnMuY29tbW9ufHx7fSxlLmhlYWRlcnNbZS5tZXRob2RdfHx7fSxlLmhlYWRlcnMpLFplLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIiwiY29tbW9uIl0sKGZ1bmN0aW9uKHQpe2RlbGV0ZSBlLmhlYWRlcnNbdF19KSksKGUuYWRhcHRlcnx8dHQuYWRhcHRlcikoZSkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIG50KGUpLHQuZGF0YT1RZS5jYWxsKGUsdC5kYXRhLHQuaGVhZGVycyxlLnRyYW5zZm9ybVJlc3BvbnNlKSx0fSksKGZ1bmN0aW9uKHQpe3JldHVybiBldCh0KXx8KG50KGUpLHQmJnQucmVzcG9uc2UmJih0LnJlc3BvbnNlLmRhdGE9UWUuY2FsbChlLHQucmVzcG9uc2UuZGF0YSx0LnJlc3BvbnNlLmhlYWRlcnMsZS50cmFuc2Zvcm1SZXNwb25zZSkpKSxQcm9taXNlLnJlamVjdCh0KX0pKX0sZ3Q9b3QseXQ9bHQsdnQ9eXQudmFsaWRhdG9ycztmdW5jdGlvbiBtdChlKXt0aGlzLmRlZmF1bHRzPWUsdGhpcy5pbnRlcmNlcHRvcnM9e3JlcXVlc3Q6bmV3IGZ0LHJlc3BvbnNlOm5ldyBmdH19bXQucHJvdG90eXBlLnJlcXVlc3Q9ZnVuY3Rpb24oZSx0KXsic3RyaW5nIj09dHlwZW9mIGU/KHQ9dHx8e30pLnVybD1lOnQ9ZXx8e30sKHQ9Z3QodGhpcy5kZWZhdWx0cyx0KSkubWV0aG9kP3QubWV0aG9kPXQubWV0aG9kLnRvTG93ZXJDYXNlKCk6dGhpcy5kZWZhdWx0cy5tZXRob2Q/dC5tZXRob2Q9dGhpcy5kZWZhdWx0cy5tZXRob2QudG9Mb3dlckNhc2UoKTp0Lm1ldGhvZD0iZ2V0Ijt2YXIgcj10LnRyYW5zaXRpb25hbDt2b2lkIDAhPT1yJiZ5dC5hc3NlcnRPcHRpb25zKHIse3NpbGVudEpTT05QYXJzaW5nOnZ0LnRyYW5zaXRpb25hbCh2dC5ib29sZWFuKSxmb3JjZWRKU09OUGFyc2luZzp2dC50cmFuc2l0aW9uYWwodnQuYm9vbGVhbiksY2xhcmlmeVRpbWVvdXRFcnJvcjp2dC50cmFuc2l0aW9uYWwodnQuYm9vbGVhbil9LCExKTt2YXIgbj1bXSxpPSEwO3RoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ImZ1bmN0aW9uIj09dHlwZW9mIGUucnVuV2hlbiYmITE9PT1lLnJ1bldoZW4odCl8fChpPWkmJmUuc3luY2hyb25vdXMsbi51bnNoaWZ0KGUuZnVsZmlsbGVkLGUucmVqZWN0ZWQpKX0pKTt2YXIgbyxzPVtdO2lmKHRoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goKGZ1bmN0aW9uKGUpe3MucHVzaChlLmZ1bGZpbGxlZCxlLnJlamVjdGVkKX0pKSwhaSl7dmFyIGE9W3B0LHZvaWQgMF07Zm9yKEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmFwcGx5KGEsbiksYT1hLmNvbmNhdChzKSxvPVByb21pc2UucmVzb2x2ZSh0KTthLmxlbmd0aDspbz1vLnRoZW4oYS5zaGlmdCgpLGEuc2hpZnQoKSk7cmV0dXJuIG99Zm9yKHZhciBjPXQ7bi5sZW5ndGg7KXt2YXIgdT1uLnNoaWZ0KCksbD1uLnNoaWZ0KCk7dHJ5e2M9dShjKX1jYXRjaChlKXtsKGUpO2JyZWFrfX10cnl7bz1wdChjKX1jYXRjaChlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9Zm9yKDtzLmxlbmd0aDspbz1vLnRoZW4ocy5zaGlmdCgpLHMuc2hpZnQoKSk7cmV0dXJuIG99LG10LnByb3RvdHlwZS5nZXRVcmk9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9Z3QodGhpcy5kZWZhdWx0cyxlKSxkdChlLnVybCxlLnBhcmFtcyxlLnBhcmFtc1NlcmlhbGl6ZXIpLnJlcGxhY2UoL15cPy8sIiIpfSxodC5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsIm9wdGlvbnMiXSwoZnVuY3Rpb24oZSl7bXQucHJvdG90eXBlW2VdPWZ1bmN0aW9uKHQscil7cmV0dXJuIHRoaXMucmVxdWVzdChndChyfHx7fSx7bWV0aG9kOmUsdXJsOnQsZGF0YToocnx8e30pLmRhdGF9KSl9fSkpLGh0LmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSwoZnVuY3Rpb24oZSl7bXQucHJvdG90eXBlW2VdPWZ1bmN0aW9uKHQscixuKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KGd0KG58fHt9LHttZXRob2Q6ZSx1cmw6dCxkYXRhOnJ9KSl9fSkpO3ZhciB3dD1tdCxfdD1EZTtmdW5jdGlvbiBidChlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uIik7dmFyIHQ7dGhpcy5wcm9taXNlPW5ldyBQcm9taXNlKChmdW5jdGlvbihlKXt0PWV9KSk7dmFyIHI9dGhpczt0aGlzLnByb21pc2UudGhlbigoZnVuY3Rpb24oZSl7aWYoci5fbGlzdGVuZXJzKXt2YXIgdCxuPXIuX2xpc3RlbmVycy5sZW5ndGg7Zm9yKHQ9MDt0PG47dCsrKXIuX2xpc3RlbmVyc1t0XShlKTtyLl9saXN0ZW5lcnM9bnVsbH19KSksdGhpcy5wcm9taXNlLnRoZW49ZnVuY3Rpb24oZSl7dmFyIHQsbj1uZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSl7ci5zdWJzY3JpYmUoZSksdD1lfSkpLnRoZW4oZSk7cmV0dXJuIG4uY2FuY2VsPWZ1bmN0aW9uKCl7ci51bnN1YnNjcmliZSh0KX0sbn0sZSgoZnVuY3Rpb24oZSl7ci5yZWFzb258fChyLnJlYXNvbj1uZXcgX3QoZSksdChyLnJlYXNvbikpfSkpfWJ0LnByb3RvdHlwZS50aHJvd0lmUmVxdWVzdGVkPWZ1bmN0aW9uKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259LGJ0LnByb3RvdHlwZS5zdWJzY3JpYmU9ZnVuY3Rpb24oZSl7dGhpcy5yZWFzb24/ZSh0aGlzLnJlYXNvbik6dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKGUpOnRoaXMuX2xpc3RlbmVycz1bZV19LGJ0LnByb3RvdHlwZS51bnN1YnNjcmliZT1mdW5jdGlvbihlKXtpZih0aGlzLl9saXN0ZW5lcnMpe3ZhciB0PXRoaXMuX2xpc3RlbmVycy5pbmRleE9mKGUpOy0xIT09dCYmdGhpcy5fbGlzdGVuZXJzLnNwbGljZSh0LDEpfX0sYnQuc291cmNlPWZ1bmN0aW9uKCl7dmFyIGUsdD1uZXcgYnQoKGZ1bmN0aW9uKHQpe2U9dH0pKTtyZXR1cm57dG9rZW46dCxjYW5jZWw6ZX19O3ZhciBTdD1idCxFdD1ILGt0PUgsVHQ9VCxSdD13dCxBdD1vdDt2YXIgQ3Q9ZnVuY3Rpb24gZSh0KXt2YXIgcj1uZXcgUnQodCksbj1UdChSdC5wcm90b3R5cGUucmVxdWVzdCxyKTtyZXR1cm4ga3QuZXh0ZW5kKG4sUnQucHJvdG90eXBlLHIpLGt0LmV4dGVuZChuLHIpLG4uY3JlYXRlPWZ1bmN0aW9uKHIpe3JldHVybiBlKEF0KHQscikpfSxufShWZSk7Q3QuQXhpb3M9UnQsQ3QuQ2FuY2VsPURlLEN0LkNhbmNlbFRva2VuPVN0LEN0LmlzQ2FuY2VsPVhlLEN0LlZFUlNJT049c3QsQ3QuYWxsPWZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLmFsbChlKX0sQ3Quc3ByZWFkPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS5hcHBseShudWxsLHQpfX0sQ3QuaXNBeGlvc0Vycm9yPWZ1bmN0aW9uKGUpe3JldHVybiBFdC5pc09iamVjdChlKSYmITA9PT1lLmlzQXhpb3NFcnJvcn0say5leHBvcnRzPUN0LGsuZXhwb3J0cy5kZWZhdWx0PUN0O3ZhciBEdCxQdD1rLmV4cG9ydHM7bGV0IE90PUR0PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5hdHRhY2hUb2tlbj0oKT0+UHJvbWlzZS5yZXNvbHZlKCksdGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjaz0oKT0+bnVsbCx0aGlzLnJlcXVlc3RTdWNjZXNzQ2FsbGJhY2s9KCk9Pm51bGwsdGhpcy5yZXF1ZXN0RXJyb3JDYWxsYmFjaz0oKT0+bnVsbCx0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjaz0oKT0+bnVsbCx0aGlzLmluaXQ9dGhpcy5pbml0LmJpbmQodGhpcyksdGhpcy5zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2s9dGhpcy5zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2suYmluZCh0aGlzKSx0aGlzLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2s9dGhpcy5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrLmJpbmQodGhpcyksdGhpcy5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2s9dGhpcy5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2suYmluZCh0aGlzKSx0aGlzLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrPXRoaXMuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2suYmluZCh0aGlzKX1zdGF0aWMgZ2V0SW5zdGFuY2UoKXtyZXR1cm4gdGhpcy5heGlvc0luc3RhbmNlfHwodGhpcy5heGlvc0luc3RhbmNlPVB0LmNyZWF0ZSh7d2l0aENyZWRlbnRpYWxzOiEwfSksdGhpcy5jbGllbnRJbnN0YW5jZXx8KHRoaXMuY2xpZW50SW5zdGFuY2U9bmV3IER0KSx0aGlzLmF4aW9zSW5zdGFuY2UuaW50ZXJjZXB0b3JzLnJlcXVlc3QudXNlKCh0PT5lKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuY2xpZW50SW5zdGFuY2UucmVxdWVzdEhhbmRsZXIodCl9KSkpKSx0aGlzLmF4aW9zSW5zdGFuY2UuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLnVzZSgoZT0+dGhpcy5jbGllbnRJbnN0YW5jZS5zdWNjZXNzSGFuZGxlcihlKSksKGU9PnRoaXMuY2xpZW50SW5zdGFuY2UuZXJyb3JIYW5kbGVyKGUpKSksdGhpcy5heGlvc0luc3RhbmNlLmFsbD1QdC5hbGwsdGhpcy5heGlvc0luc3RhbmNlLnNwcmVhZD1QdC5zcHJlYWQsdGhpcy5heGlvc0luc3RhbmNlLmluaXQ9dGhpcy5jbGllbnRJbnN0YW5jZS5pbml0LHRoaXMuYXhpb3NJbnN0YW5jZS5lbmFibGVIYW5kbGVyPXRoaXMuY2xpZW50SW5zdGFuY2UuZW5hYmxlSGFuZGxlcix0aGlzLmF4aW9zSW5zdGFuY2UuZGlzYWJsZUhhbmRsZXI9dGhpcy5jbGllbnRJbnN0YW5jZS5kaXNhYmxlSGFuZGxlcix0aGlzLmF4aW9zSW5zdGFuY2UuZGlzYWJsZUhhbmRsZXJXaXRoVGltZW91dD10aGlzLmNsaWVudEluc3RhbmNlLmRpc2FibGVIYW5kbGVyV2l0aFRpbWVvdXQsdGhpcy5heGlvc0luc3RhbmNlLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjaz10aGlzLmNsaWVudEluc3RhbmNlLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjayx0aGlzLmF4aW9zSW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2s9dGhpcy5jbGllbnRJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayx0aGlzLmF4aW9zSW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrPXRoaXMuY2xpZW50SW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrLHRoaXMuYXhpb3NJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrPXRoaXMuY2xpZW50SW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjayksdGhpcy5heGlvc0luc3RhbmNlfXJlcXVlc3RIYW5kbGVyKHQpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7aWYoeWllbGQgdGhpcy5hdHRhY2hUb2tlbih0KSxudWxsPT10P3ZvaWQgMDp0LnNob3VsZEVuY29kZVRvRm9ybURhdGEpe2NvbnN0IGU9bnVsbD09dD92b2lkIDA6dC5kYXRhLHI9bmV3IEZvcm1EYXRhO09iamVjdC5rZXlzKGUpLmZvckVhY2goKHQ9PntyLmFwcGVuZCh0LGVbdF0pfSkpLHQuZGF0YT1yfXJldHVybiBEdC5pc0hhbmRsZXJFbmFibGVkJiZ0aGlzLnJlcXVlc3RTdGFydENhbGxiYWNrJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjayYmdGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjayh0KSx0fSkpfWVycm9ySGFuZGxlcihlKXt0aHJvdyBEdC5pc0hhbmRsZXJFbmFibGVkJiYodGhpcy5yZXF1ZXN0RXJyb3JDYWxsYmFjayYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucmVxdWVzdEVycm9yQ2FsbGJhY2smJnRoaXMucmVxdWVzdEVycm9yQ2FsbGJhY2soZSksdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2smJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjayYmdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2soKSksZX1zdWNjZXNzSGFuZGxlcihlKXtyZXR1cm4gRHQuaXNIYW5kbGVyRW5hYmxlZCYmKHRoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayYmdGhpcy5yZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKGUpLHRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2smJnRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrKCkpLGV9aW5pdCh0PSEwLHIpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7RHQuaXNIYW5kbGVyRW5hYmxlZD10LHRoaXMuYXR0YWNoVG9rZW49cn0pKX1lbmFibGVIYW5kbGVyKCl7RHQuaXNIYW5kbGVyRW5hYmxlZD0hMH1kaXNhYmxlSGFuZGxlcigpe0R0LmlzSGFuZGxlckVuYWJsZWQ9ITF9ZGlzYWJsZUhhbmRsZXJXaXRoVGltZW91dChlPUR0LkRFRkFVTFRfSEFORExFUl9ESVNBQkxFX1RJTUVPVVQpe0R0LmlzSGFuZGxlckVuYWJsZWQ9ITEsc2V0VGltZW91dCgoKCk9PntEdC5pc0hhbmRsZXJFbmFibGVkPSEwfSksZSl9c2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrKGUpe3RoaXMucmVxdWVzdFN0YXJ0Q2FsbGJhY2s9ZX1zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayhlKXt0aGlzLnJlcXVlc3RTdWNjZXNzQ2FsbGJhY2s9ZX1zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2soZSl7dGhpcy5yZXF1ZXN0RXJyb3JDYWxsYmFjaz1lfXNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2soZSl7dGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2s9ZX19O090LkRFRkFVTFRfSEFORExFUl9ESVNBQkxFX1RJTUVPVVQ9MWUzLE90PUR0PWZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBpLG89YXJndW1lbnRzLmxlbmd0aCxzPW88Mz90Om51bGw9PT1uP249T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LHIpOm47aWYoIm9iamVjdCI9PXR5cGVvZiBSZWZsZWN0JiYiZnVuY3Rpb24iPT10eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSlzPVJlZmxlY3QuZGVjb3JhdGUoZSx0LHIsbik7ZWxzZSBmb3IodmFyIGE9ZS5sZW5ndGgtMTthPj0wO2EtLSkoaT1lW2FdKSYmKHM9KG88Mz9pKHMpOm8+Mz9pKHQscixzKTppKHQscikpfHxzKTtyZXR1cm4gbz4zJiZzJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLHMpLHN9KFtlPT57fV0sT3QpO2NsYXNzIEl0e2NvbnN0cnVjdG9yKCl7dGhpcy5fZGF0YT1uZXcgTWFwfXNldERhdGEodCxyKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuX2RhdGEuc2V0KHQscil9KSl9Z2V0RGF0YSh0KXt2YXIgcixuO3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIG51bGwhPT0obj1udWxsPT09KHI9dGhpcy5fZGF0YSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuZ2V0KHQpKSYmdm9pZCAwIT09bj9uOiJ7fSJ9KSl9cmVtb3ZlRGF0YSh0KXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuX2RhdGEuZGVsZXRlKHQpfSkpfX12YXIgVXQ9W10sTHQ9W10sSHQ9InVuZGVmaW5lZCIhPXR5cGVvZiBVaW50OEFycmF5P1VpbnQ4QXJyYXk6QXJyYXksTXQ9ITE7ZnVuY3Rpb24gTnQoKXtNdD0hMDtmb3IodmFyIGU9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLHQ9MCxyPWUubGVuZ3RoO3Q8cjsrK3QpVXRbdF09ZVt0XSxMdFtlLmNoYXJDb2RlQXQodCldPXQ7THRbIi0iLmNoYXJDb2RlQXQoMCldPTYyLEx0WyJfIi5jaGFyQ29kZUF0KDApXT02M31mdW5jdGlvbiBqdChlLHQscil7Zm9yKHZhciBuLGksbz1bXSxzPXQ7czxyO3MrPTMpbj0oZVtzXTw8MTYpKyhlW3MrMV08PDgpK2VbcysyXSxvLnB1c2goVXRbKGk9bik+PjE4JjYzXStVdFtpPj4xMiY2M10rVXRbaT4+NiY2M10rVXRbNjMmaV0pO3JldHVybiBvLmpvaW4oIiIpfWZ1bmN0aW9uIHh0KGUpe3ZhciB0O010fHxOdCgpO2Zvcih2YXIgcj1lLmxlbmd0aCxuPXIlMyxpPSIiLG89W10scz0xNjM4MyxhPTAsYz1yLW47YTxjO2ErPXMpby5wdXNoKGp0KGUsYSxhK3M+Yz9jOmErcykpO3JldHVybiAxPT09bj8odD1lW3ItMV0saSs9VXRbdD4+Ml0saSs9VXRbdDw8NCY2M10saSs9Ij09Iik6Mj09PW4mJih0PShlW3ItMl08PDgpK2Vbci0xXSxpKz1VdFt0Pj4xMF0saSs9VXRbdD4+NCY2M10saSs9VXRbdDw8MiY2M10saSs9Ij0iKSxvLnB1c2goaSksby5qb2luKCIiKX1mdW5jdGlvbiBxdChlLHQscixuLGkpe3ZhciBvLHMsYT04Kmktbi0xLGM9KDE8PGEpLTEsdT1jPj4xLGw9LTcsaD1yP2ktMTowLGQ9cj8tMToxLGY9ZVt0K2hdO2ZvcihoKz1kLG89ZiYoMTw8LWwpLTEsZj4+PS1sLGwrPWE7bD4wO289MjU2Km8rZVt0K2hdLGgrPWQsbC09OCk7Zm9yKHM9byYoMTw8LWwpLTEsbz4+PS1sLGwrPW47bD4wO3M9MjU2KnMrZVt0K2hdLGgrPWQsbC09OCk7aWYoMD09PW8pbz0xLXU7ZWxzZXtpZihvPT09YylyZXR1cm4gcz9OYU46MS8wKihmPy0xOjEpO3MrPU1hdGgucG93KDIsbiksby09dX1yZXR1cm4oZj8tMToxKSpzKk1hdGgucG93KDIsby1uKX1mdW5jdGlvbiBLdChlLHQscixuLGksbyl7dmFyIHMsYSxjLHU9OCpvLWktMSxsPSgxPDx1KS0xLGg9bD4+MSxkPTIzPT09aT9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjAsZj1uPzA6by0xLHA9bj8xOi0xLGc9dDwwfHwwPT09dCYmMS90PDA/MTowO2Zvcih0PU1hdGguYWJzKHQpLGlzTmFOKHQpfHx0PT09MS8wPyhhPWlzTmFOKHQpPzE6MCxzPWwpOihzPU1hdGguZmxvb3IoTWF0aC5sb2codCkvTWF0aC5MTjIpLHQqKGM9TWF0aC5wb3coMiwtcykpPDEmJihzLS0sYyo9MiksKHQrPXMraD49MT9kL2M6ZCpNYXRoLnBvdygyLDEtaCkpKmM+PTImJihzKyssYy89MikscytoPj1sPyhhPTAscz1sKTpzK2g+PTE/KGE9KHQqYy0xKSpNYXRoLnBvdygyLGkpLHMrPWgpOihhPXQqTWF0aC5wb3coMixoLTEpKk1hdGgucG93KDIsaSkscz0wKSk7aT49ODtlW3IrZl09MjU1JmEsZis9cCxhLz0yNTYsaS09OCk7Zm9yKHM9czw8aXxhLHUrPWk7dT4wO2VbcitmXT0yNTUmcyxmKz1wLHMvPTI1Nix1LT04KTtlW3IrZi1wXXw9MTI4Kmd9dmFyIEp0PXt9LnRvU3RyaW5nLEJ0PUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PUp0LmNhbGwoZSl9O3p0LlRZUEVEX0FSUkFZX1NVUFBPUlQ9dm9pZCAwPT09Si5UWVBFRF9BUlJBWV9TVVBQT1JUfHxKLlRZUEVEX0FSUkFZX1NVUFBPUlQ7dmFyIEZ0PVd0KCk7ZnVuY3Rpb24gV3QoKXtyZXR1cm4genQuVFlQRURfQVJSQVlfU1VQUE9SVD8yMTQ3NDgzNjQ3OjEwNzM3NDE4MjN9ZnVuY3Rpb24gJHQoZSx0KXtpZihXdCgpPHQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdHlwZWQgYXJyYXkgbGVuZ3RoIik7cmV0dXJuIHp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGU9bmV3IFVpbnQ4QXJyYXkodCkpLl9fcHJvdG9fXz16dC5wcm90b3R5cGU6KG51bGw9PT1lJiYoZT1uZXcgenQodCkpLGUubGVuZ3RoPXQpLGV9ZnVuY3Rpb24genQoZSx0LHIpe2lmKCEoenQuVFlQRURfQVJSQVlfU1VQUE9SVHx8dGhpcyBpbnN0YW5jZW9mIHp0KSlyZXR1cm4gbmV3IHp0KGUsdCxyKTtpZigibnVtYmVyIj09dHlwZW9mIGUpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3IoIklmIGVuY29kaW5nIGlzIHNwZWNpZmllZCB0aGVuIHRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nIik7cmV0dXJuIEd0KHRoaXMsZSl9cmV0dXJuIFZ0KHRoaXMsZSx0LHIpfWZ1bmN0aW9uIFZ0KGUsdCxyLG4pe2lmKCJudW1iZXIiPT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJyk7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmdCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyP2Z1bmN0aW9uKGUsdCxyLG4pe2lmKHQuYnl0ZUxlbmd0aCxyPDB8fHQuYnl0ZUxlbmd0aDxyKXRocm93IG5ldyBSYW5nZUVycm9yKCInb2Zmc2V0JyBpcyBvdXQgb2YgYm91bmRzIik7aWYodC5ieXRlTGVuZ3RoPHIrKG58fDApKXRocm93IG5ldyBSYW5nZUVycm9yKCInbGVuZ3RoJyBpcyBvdXQgb2YgYm91bmRzIik7dD12b2lkIDA9PT1yJiZ2b2lkIDA9PT1uP25ldyBVaW50OEFycmF5KHQpOnZvaWQgMD09PW4/bmV3IFVpbnQ4QXJyYXkodCxyKTpuZXcgVWludDhBcnJheSh0LHIsbik7enQuVFlQRURfQVJSQVlfU1VQUE9SVD8oZT10KS5fX3Byb3RvX189enQucHJvdG90eXBlOmU9WHQoZSx0KTtyZXR1cm4gZX0oZSx0LHIsbik6InN0cmluZyI9PXR5cGVvZiB0P2Z1bmN0aW9uKGUsdCxyKXsic3RyaW5nIj09dHlwZW9mIHImJiIiIT09cnx8KHI9InV0ZjgiKTtpZighenQuaXNFbmNvZGluZyhyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciZW5jb2RpbmciIG11c3QgYmUgYSB2YWxpZCBzdHJpbmcgZW5jb2RpbmcnKTt2YXIgbj0wfGVyKHQsciksaT0oZT0kdChlLG4pKS53cml0ZSh0LHIpO2khPT1uJiYoZT1lLnNsaWNlKDAsaSkpO3JldHVybiBlfShlLHQscik6ZnVuY3Rpb24oZSx0KXtpZihRdCh0KSl7dmFyIHI9MHxadCh0Lmxlbmd0aCk7cmV0dXJuIDA9PT0oZT0kdChlLHIpKS5sZW5ndGh8fHQuY29weShlLDAsMCxyKSxlfWlmKHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJnQuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ8fCJsZW5ndGgiaW4gdClyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHQubGVuZ3RofHwobj10Lmxlbmd0aCkhPW4/JHQoZSwwKTpYdChlLHQpO2lmKCJCdWZmZXIiPT09dC50eXBlJiZCdCh0LmRhdGEpKXJldHVybiBYdChlLHQuZGF0YSl9dmFyIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIGFycmF5LWxpa2Ugb2JqZWN0LiIpfShlLHQpfWZ1bmN0aW9uIFl0KGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpO2lmKGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG5lZ2F0aXZlJyl9ZnVuY3Rpb24gR3QoZSx0KXtpZihZdCh0KSxlPSR0KGUsdDwwPzA6MHxadCh0KSksIXp0LlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKHZhciByPTA7cjx0OysrcillW3JdPTA7cmV0dXJuIGV9ZnVuY3Rpb24gWHQoZSx0KXt2YXIgcj10Lmxlbmd0aDwwPzA6MHxadCh0Lmxlbmd0aCk7ZT0kdChlLHIpO2Zvcih2YXIgbj0wO248cjtuKz0xKWVbbl09MjU1JnRbbl07cmV0dXJuIGV9ZnVuY3Rpb24gWnQoZSl7aWYoZT49V3QoKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweCIrV3QoKS50b1N0cmluZygxNikrIiBieXRlcyIpO3JldHVybiAwfGV9ZnVuY3Rpb24gUXQoZSl7cmV0dXJuIShudWxsPT1lfHwhZS5faXNCdWZmZXIpfWZ1bmN0aW9uIGVyKGUsdCl7aWYoUXQoZSkpcmV0dXJuIGUubGVuZ3RoO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXcmJihBcnJheUJ1ZmZlci5pc1ZpZXcoZSl8fGUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpcmV0dXJuIGUuYnl0ZUxlbmd0aDsic3RyaW5nIiE9dHlwZW9mIGUmJihlPSIiK2UpO3ZhciByPWUubGVuZ3RoO2lmKDA9PT1yKXJldHVybiAwO2Zvcih2YXIgbj0hMTs7KXN3aXRjaCh0KXtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiByO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSB2b2lkIDA6cmV0dXJuIEFyKGUpLmxlbmd0aDtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIDIqcjtjYXNlImhleCI6cmV0dXJuIHI+Pj4xO2Nhc2UiYmFzZTY0IjpyZXR1cm4gQ3IoZSkubGVuZ3RoO2RlZmF1bHQ6aWYobilyZXR1cm4gQXIoZSkubGVuZ3RoO3Q9KCIiK3QpLnRvTG93ZXJDYXNlKCksbj0hMH19ZnVuY3Rpb24gdHIoZSx0LHIpe3ZhciBuPSExO2lmKCh2b2lkIDA9PT10fHx0PDApJiYodD0wKSx0PnRoaXMubGVuZ3RoKXJldHVybiIiO2lmKCh2b2lkIDA9PT1yfHxyPnRoaXMubGVuZ3RoKSYmKHI9dGhpcy5sZW5ndGgpLHI8PTApcmV0dXJuIiI7aWYoKHI+Pj49MCk8PSh0Pj4+PTApKXJldHVybiIiO2ZvcihlfHwoZT0idXRmOCIpOzspc3dpdGNoKGUpe2Nhc2UiaGV4IjpyZXR1cm4geXIodGhpcyx0LHIpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIGRyKHRoaXMsdCxyKTtjYXNlImFzY2lpIjpyZXR1cm4gcHIodGhpcyx0LHIpO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIGdyKHRoaXMsdCxyKTtjYXNlImJhc2U2NCI6cmV0dXJuIGhyKHRoaXMsdCxyKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIHZyKHRoaXMsdCxyKTtkZWZhdWx0OmlmKG4pdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitlKTtlPShlKyIiKS50b0xvd2VyQ2FzZSgpLG49ITB9fWZ1bmN0aW9uIHJyKGUsdCxyKXt2YXIgbj1lW3RdO2VbdF09ZVtyXSxlW3JdPW59ZnVuY3Rpb24gbnIoZSx0LHIsbixpKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiByPyhuPXIscj0wKTpyPjIxNDc0ODM2NDc/cj0yMTQ3NDgzNjQ3OnI8LTIxNDc0ODM2NDgmJihyPS0yMTQ3NDgzNjQ4KSxyPStyLGlzTmFOKHIpJiYocj1pPzA6ZS5sZW5ndGgtMSkscjwwJiYocj1lLmxlbmd0aCtyKSxyPj1lLmxlbmd0aCl7aWYoaSlyZXR1cm4tMTtyPWUubGVuZ3RoLTF9ZWxzZSBpZihyPDApe2lmKCFpKXJldHVybi0xO3I9MH1pZigic3RyaW5nIj09dHlwZW9mIHQmJih0PXp0LmZyb20odCxuKSksUXQodCkpcmV0dXJuIDA9PT10Lmxlbmd0aD8tMTppcihlLHQscixuLGkpO2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gdCY9MjU1LHp0LlRZUEVEX0FSUkFZX1NVUFBPUlQmJiJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP2k/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGUsdCxyKTpVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGUsdCxyKTppcihlLFt0XSxyLG4saSk7dGhyb3cgbmV3IFR5cGVFcnJvcigidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyIil9ZnVuY3Rpb24gaXIoZSx0LHIsbixpKXt2YXIgbyxzPTEsYT1lLmxlbmd0aCxjPXQubGVuZ3RoO2lmKHZvaWQgMCE9PW4mJigidWNzMiI9PT0obj1TdHJpbmcobikudG9Mb3dlckNhc2UoKSl8fCJ1Y3MtMiI9PT1ufHwidXRmMTZsZSI9PT1ufHwidXRmLTE2bGUiPT09bikpe2lmKGUubGVuZ3RoPDJ8fHQubGVuZ3RoPDIpcmV0dXJuLTE7cz0yLGEvPTIsYy89MixyLz0yfWZ1bmN0aW9uIHUoZSx0KXtyZXR1cm4gMT09PXM/ZVt0XTplLnJlYWRVSW50MTZCRSh0KnMpfWlmKGkpe3ZhciBsPS0xO2ZvcihvPXI7bzxhO28rKylpZih1KGUsbyk9PT11KHQsLTE9PT1sPzA6by1sKSl7aWYoLTE9PT1sJiYobD1vKSxvLWwrMT09PWMpcmV0dXJuIGwqc31lbHNlLTEhPT1sJiYoby09by1sKSxsPS0xfWVsc2UgZm9yKHIrYz5hJiYocj1hLWMpLG89cjtvPj0wO28tLSl7Zm9yKHZhciBoPSEwLGQ9MDtkPGM7ZCsrKWlmKHUoZSxvK2QpIT09dSh0LGQpKXtoPSExO2JyZWFrfWlmKGgpcmV0dXJuIG99cmV0dXJuLTF9ZnVuY3Rpb24gb3IoZSx0LHIsbil7cj1OdW1iZXIocil8fDA7dmFyIGk9ZS5sZW5ndGgtcjtuPyhuPU51bWJlcihuKSk+aSYmKG49aSk6bj1pO3ZhciBvPXQubGVuZ3RoO2lmKG8lMiE9MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGhleCBzdHJpbmciKTtuPm8vMiYmKG49by8yKTtmb3IodmFyIHM9MDtzPG47KytzKXt2YXIgYT1wYXJzZUludCh0LnN1YnN0cigyKnMsMiksMTYpO2lmKGlzTmFOKGEpKXJldHVybiBzO2VbcitzXT1hfXJldHVybiBzfWZ1bmN0aW9uIHNyKGUsdCxyLG4pe3JldHVybiBEcihBcih0LGUubGVuZ3RoLXIpLGUscixuKX1mdW5jdGlvbiBhcihlLHQscixuKXtyZXR1cm4gRHIoZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLHI9MDtyPGUubGVuZ3RoOysrcil0LnB1c2goMjU1JmUuY2hhckNvZGVBdChyKSk7cmV0dXJuIHR9KHQpLGUscixuKX1mdW5jdGlvbiBjcihlLHQscixuKXtyZXR1cm4gYXIoZSx0LHIsbil9ZnVuY3Rpb24gdXIoZSx0LHIsbil7cmV0dXJuIERyKENyKHQpLGUscixuKX1mdW5jdGlvbiBscihlLHQscixuKXtyZXR1cm4gRHIoZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIsbixpLG89W10scz0wO3M8ZS5sZW5ndGgmJiEoKHQtPTIpPDApOysrcyluPShyPWUuY2hhckNvZGVBdChzKSk+PjgsaT1yJTI1NixvLnB1c2goaSksby5wdXNoKG4pO3JldHVybiBvfSh0LGUubGVuZ3RoLXIpLGUscixuKX1mdW5jdGlvbiBocihlLHQscil7cmV0dXJuIDA9PT10JiZyPT09ZS5sZW5ndGg/eHQoZSk6eHQoZS5zbGljZSh0LHIpKX1mdW5jdGlvbiBkcihlLHQscil7cj1NYXRoLm1pbihlLmxlbmd0aCxyKTtmb3IodmFyIG49W10saT10O2k8cjspe3ZhciBvLHMsYSxjLHU9ZVtpXSxsPW51bGwsaD11PjIzOT80OnU+MjIzPzM6dT4xOTE/MjoxO2lmKGkraDw9cilzd2l0Y2goaCl7Y2FzZSAxOnU8MTI4JiYobD11KTticmVhaztjYXNlIDI6MTI4PT0oMTkyJihvPWVbaSsxXSkpJiYoYz0oMzEmdSk8PDZ8NjMmbyk+MTI3JiYobD1jKTticmVhaztjYXNlIDM6bz1lW2krMV0scz1lW2krMl0sMTI4PT0oMTkyJm8pJiYxMjg9PSgxOTImcykmJihjPSgxNSZ1KTw8MTJ8KDYzJm8pPDw2fDYzJnMpPjIwNDcmJihjPDU1Mjk2fHxjPjU3MzQzKSYmKGw9Yyk7YnJlYWs7Y2FzZSA0Om89ZVtpKzFdLHM9ZVtpKzJdLGE9ZVtpKzNdLDEyOD09KDE5MiZvKSYmMTI4PT0oMTkyJnMpJiYxMjg9PSgxOTImYSkmJihjPSgxNSZ1KTw8MTh8KDYzJm8pPDwxMnwoNjMmcyk8PDZ8NjMmYSk+NjU1MzUmJmM8MTExNDExMiYmKGw9Yyl9bnVsbD09PWw/KGw9NjU1MzMsaD0xKTpsPjY1NTM1JiYobC09NjU1MzYsbi5wdXNoKGw+Pj4xMCYxMDIzfDU1Mjk2KSxsPTU2MzIwfDEwMjMmbCksbi5wdXNoKGwpLGkrPWh9cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoO2lmKHQ8PWZyKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxlKTt2YXIgcj0iIixuPTA7Zm9yKDtuPHQ7KXIrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGUuc2xpY2UobixuKz1mcikpO3JldHVybiByfShuKX16dC5wb29sU2l6ZT04MTkyLHp0Ll9hdWdtZW50PWZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fXz16dC5wcm90b3R5cGUsZX0senQuZnJvbT1mdW5jdGlvbihlLHQscil7cmV0dXJuIFZ0KG51bGwsZSx0LHIpfSx6dC5UWVBFRF9BUlJBWV9TVVBQT1JUJiYoenQucHJvdG90eXBlLl9fcHJvdG9fXz1VaW50OEFycmF5LnByb3RvdHlwZSx6dC5fX3Byb3RvX189VWludDhBcnJheSksenQuYWxsb2M9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBmdW5jdGlvbihlLHQscixuKXtyZXR1cm4gWXQodCksdDw9MD8kdChlLHQpOnZvaWQgMCE9PXI/InN0cmluZyI9PXR5cGVvZiBuPyR0KGUsdCkuZmlsbChyLG4pOiR0KGUsdCkuZmlsbChyKTokdChlLHQpfShudWxsLGUsdCxyKX0senQuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oZSl7cmV0dXJuIEd0KG51bGwsZSl9LHp0LmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihlKXtyZXR1cm4gR3QobnVsbCxlKX0senQuaXNCdWZmZXI9UHIsenQuY29tcGFyZT1mdW5jdGlvbihlLHQpe2lmKCFRdChlKXx8IVF0KHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyBtdXN0IGJlIEJ1ZmZlcnMiKTtpZihlPT09dClyZXR1cm4gMDtmb3IodmFyIHI9ZS5sZW5ndGgsbj10Lmxlbmd0aCxpPTAsbz1NYXRoLm1pbihyLG4pO2k8bzsrK2kpaWYoZVtpXSE9PXRbaV0pe3I9ZVtpXSxuPXRbaV07YnJlYWt9cmV0dXJuIHI8bj8tMTpuPHI/MTowfSx6dC5pc0VuY29kaW5nPWZ1bmN0aW9uKGUpe3N3aXRjaChTdHJpbmcoZSkudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSx6dC5jb25jYXQ9ZnVuY3Rpb24oZSx0KXtpZighQnQoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO2lmKDA9PT1lLmxlbmd0aClyZXR1cm4genQuYWxsb2MoMCk7dmFyIHI7aWYodm9pZCAwPT09dClmb3IodD0wLHI9MDtyPGUubGVuZ3RoOysrcil0Kz1lW3JdLmxlbmd0aDt2YXIgbj16dC5hbGxvY1Vuc2FmZSh0KSxpPTA7Zm9yKHI9MDtyPGUubGVuZ3RoOysrcil7dmFyIG89ZVtyXTtpZighUXQobykpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO28uY29weShuLGkpLGkrPW8ubGVuZ3RofXJldHVybiBufSx6dC5ieXRlTGVuZ3RoPWVyLHp0LnByb3RvdHlwZS5faXNCdWZmZXI9ITAsenQucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlMiE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMiKTtmb3IodmFyIHQ9MDt0PGU7dCs9Milycih0aGlzLHQsdCsxKTtyZXR1cm4gdGhpc30senQucHJvdG90eXBlLnN3YXAzMj1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlNCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHMiKTtmb3IodmFyIHQ9MDt0PGU7dCs9NClycih0aGlzLHQsdCszKSxycih0aGlzLHQrMSx0KzIpO3JldHVybiB0aGlzfSx6dC5wcm90b3R5cGUuc3dhcDY0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSU4IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz04KXJyKHRoaXMsdCx0KzcpLHJyKHRoaXMsdCsxLHQrNikscnIodGhpcyx0KzIsdCs1KSxycih0aGlzLHQrMyx0KzQpO3JldHVybiB0aGlzfSx6dC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgZT0wfHRoaXMubGVuZ3RoO3JldHVybiAwPT09ZT8iIjowPT09YXJndW1lbnRzLmxlbmd0aD9kcih0aGlzLDAsZSk6dHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSx6dC5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGUpe2lmKCFRdChlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIik7cmV0dXJuIHRoaXM9PT1lfHwwPT09enQuY29tcGFyZSh0aGlzLGUpfSx6dC5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3ZhciBlPSIiO3JldHVybiB0aGlzLmxlbmd0aD4wJiYoZT10aGlzLnRvU3RyaW5nKCJoZXgiLDAsNTApLm1hdGNoKC8uezJ9L2cpLmpvaW4oIiAiKSx0aGlzLmxlbmd0aD41MCYmKGUrPSIgLi4uICIpKSwiPEJ1ZmZlciAiK2UrIj4ifSx6dC5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbihlLHQscixuLGkpe2lmKCFRdChlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIik7aWYodm9pZCAwPT09dCYmKHQ9MCksdm9pZCAwPT09ciYmKHI9ZT9lLmxlbmd0aDowKSx2b2lkIDA9PT1uJiYobj0wKSx2b2lkIDA9PT1pJiYoaT10aGlzLmxlbmd0aCksdDwwfHxyPmUubGVuZ3RofHxuPDB8fGk+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm91dCBvZiByYW5nZSBpbmRleCIpO2lmKG4+PWkmJnQ+PXIpcmV0dXJuIDA7aWYobj49aSlyZXR1cm4tMTtpZih0Pj1yKXJldHVybiAxO2lmKHRoaXM9PT1lKXJldHVybiAwO2Zvcih2YXIgbz0oaT4+Pj0wKS0obj4+Pj0wKSxzPShyPj4+PTApLSh0Pj4+PTApLGE9TWF0aC5taW4obyxzKSxjPXRoaXMuc2xpY2UobixpKSx1PWUuc2xpY2UodCxyKSxsPTA7bDxhOysrbClpZihjW2xdIT09dVtsXSl7bz1jW2xdLHM9dVtsXTticmVha31yZXR1cm4gbzxzPy0xOnM8bz8xOjB9LHp0LnByb3RvdHlwZS5pbmNsdWRlcz1mdW5jdGlvbihlLHQscil7cmV0dXJuLTEhPT10aGlzLmluZGV4T2YoZSx0LHIpfSx6dC5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbihlLHQscil7cmV0dXJuIG5yKHRoaXMsZSx0LHIsITApfSx6dC5wcm90b3R5cGUubGFzdEluZGV4T2Y9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBucih0aGlzLGUsdCxyLCExKX0senQucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKHZvaWQgMD09PXQpbj0idXRmOCIscj10aGlzLmxlbmd0aCx0PTA7ZWxzZSBpZih2b2lkIDA9PT1yJiYic3RyaW5nIj09dHlwZW9mIHQpbj10LHI9dGhpcy5sZW5ndGgsdD0wO2Vsc2V7aWYoIWlzRmluaXRlKHQpKXRocm93IG5ldyBFcnJvcigiQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQiKTt0fD0wLGlzRmluaXRlKHIpPyhyfD0wLHZvaWQgMD09PW4mJihuPSJ1dGY4IikpOihuPXIscj12b2lkIDApfXZhciBpPXRoaXMubGVuZ3RoLXQ7aWYoKHZvaWQgMD09PXJ8fHI+aSkmJihyPWkpLGUubGVuZ3RoPjAmJihyPDB8fHQ8MCl8fHQ+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzIik7bnx8KG49InV0ZjgiKTtmb3IodmFyIG89ITE7Oylzd2l0Y2gobil7Y2FzZSJoZXgiOnJldHVybiBvcih0aGlzLGUsdCxyKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBzcih0aGlzLGUsdCxyKTtjYXNlImFzY2lpIjpyZXR1cm4gYXIodGhpcyxlLHQscik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gY3IodGhpcyxlLHQscik7Y2FzZSJiYXNlNjQiOnJldHVybiB1cih0aGlzLGUsdCxyKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIGxyKHRoaXMsZSx0LHIpO2RlZmF1bHQ6aWYobyl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK24pO249KCIiK24pLnRvTG93ZXJDYXNlKCksbz0hMH19LHp0LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiQnVmZmVyIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O3ZhciBmcj00MDk2O2Z1bmN0aW9uIHByKGUsdCxyKXt2YXIgbj0iIjtyPU1hdGgubWluKGUubGVuZ3RoLHIpO2Zvcih2YXIgaT10O2k8cjsrK2kpbis9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmZVtpXSk7cmV0dXJuIG59ZnVuY3Rpb24gZ3IoZSx0LHIpe3ZhciBuPSIiO3I9TWF0aC5taW4oZS5sZW5ndGgscik7Zm9yKHZhciBpPXQ7aTxyOysraSluKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGVbaV0pO3JldHVybiBufWZ1bmN0aW9uIHlyKGUsdCxyKXt2YXIgbj1lLmxlbmd0aDsoIXR8fHQ8MCkmJih0PTApLCghcnx8cjwwfHxyPm4pJiYocj1uKTtmb3IodmFyIGk9IiIsbz10O288cjsrK28paSs9UnIoZVtvXSk7cmV0dXJuIGl9ZnVuY3Rpb24gdnIoZSx0LHIpe2Zvcih2YXIgbj1lLnNsaWNlKHQsciksaT0iIixvPTA7bzxuLmxlbmd0aDtvKz0yKWkrPVN0cmluZy5mcm9tQ2hhckNvZGUobltvXSsyNTYqbltvKzFdKTtyZXR1cm4gaX1mdW5jdGlvbiBtcihlLHQscil7aWYoZSUxIT0wfHxlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm9mZnNldCBpcyBub3QgdWludCIpO2lmKGUrdD5yKXRocm93IG5ldyBSYW5nZUVycm9yKCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoIil9ZnVuY3Rpb24gd3IoZSx0LHIsbixpLG8pe2lmKCFRdChlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmZmVyIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJyk7aWYodD5pfHx0PG8pdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJ2YWx1ZSIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpO2lmKHIrbj5lLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gX3IoZSx0LHIsbil7dDwwJiYodD02NTUzNSt0KzEpO2Zvcih2YXIgaT0wLG89TWF0aC5taW4oZS5sZW5ndGgtciwyKTtpPG87KytpKWVbcitpXT0odCYyNTU8PDgqKG4/aToxLWkpKT4+PjgqKG4/aToxLWkpfWZ1bmN0aW9uIGJyKGUsdCxyLG4pe3Q8MCYmKHQ9NDI5NDk2NzI5NSt0KzEpO2Zvcih2YXIgaT0wLG89TWF0aC5taW4oZS5sZW5ndGgtciw0KTtpPG87KytpKWVbcitpXT10Pj4+OCoobj9pOjMtaSkmMjU1fWZ1bmN0aW9uIFNyKGUsdCxyLG4saSxvKXtpZihyK24+ZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKHI8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gRXIoZSx0LHIsbixpKXtyZXR1cm4gaXx8U3IoZSwwLHIsNCksS3QoZSx0LHIsbiwyMyw0KSxyKzR9ZnVuY3Rpb24ga3IoZSx0LHIsbixpKXtyZXR1cm4gaXx8U3IoZSwwLHIsOCksS3QoZSx0LHIsbiw1Miw4KSxyKzh9enQucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbj10aGlzLmxlbmd0aDtpZigoZT1+fmUpPDA/KGUrPW4pPDAmJihlPTApOmU+biYmKGU9biksKHQ9dm9pZCAwPT09dD9uOn5+dCk8MD8odCs9bik8MCYmKHQ9MCk6dD5uJiYodD1uKSx0PGUmJih0PWUpLHp0LlRZUEVEX0FSUkFZX1NVUFBPUlQpKHI9dGhpcy5zdWJhcnJheShlLHQpKS5fX3Byb3RvX189enQucHJvdG90eXBlO2Vsc2V7dmFyIGk9dC1lO3I9bmV3IHp0KGksdm9pZCAwKTtmb3IodmFyIG89MDtvPGk7KytvKXJbb109dGhpc1tvK2VdfXJldHVybiByfSx6dC5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fG1yKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbZV0saT0xLG89MDsrK288dCYmKGkqPTI1Nik7KW4rPXRoaXNbZStvXSppO3JldHVybiBufSx6dC5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fG1yKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbZSstLXRdLGk9MTt0PjAmJihpKj0yNTYpOyluKz10aGlzW2UrLS10XSppO3JldHVybiBufSx6dC5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fG1yKGUsMSx0aGlzLmxlbmd0aCksdGhpc1tlXX0senQucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxtcihlLDIsdGhpcy5sZW5ndGgpLHRoaXNbZV18dGhpc1tlKzFdPDw4fSx6dC5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fG1yKGUsMix0aGlzLmxlbmd0aCksdGhpc1tlXTw8OHx0aGlzW2UrMV19LHp0LnByb3RvdHlwZS5yZWFkVUludDMyTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8bXIoZSw0LHRoaXMubGVuZ3RoKSwodGhpc1tlXXx0aGlzW2UrMV08PDh8dGhpc1tlKzJdPDwxNikrMTY3NzcyMTYqdGhpc1tlKzNdfSx6dC5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fG1yKGUsNCx0aGlzLmxlbmd0aCksMTY3NzcyMTYqdGhpc1tlXSsodGhpc1tlKzFdPDwxNnx0aGlzW2UrMl08PDh8dGhpc1tlKzNdKX0senQucHJvdG90eXBlLnJlYWRJbnRMRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fG1yKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbZV0saT0xLG89MDsrK288dCYmKGkqPTI1Nik7KW4rPXRoaXNbZStvXSppO3JldHVybiBuPj0oaSo9MTI4KSYmKG4tPU1hdGgucG93KDIsOCp0KSksbn0senQucHJvdG90eXBlLnJlYWRJbnRCRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fG1yKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXQsaT0xLG89dGhpc1tlKy0tbl07bj4wJiYoaSo9MjU2KTspbys9dGhpc1tlKy0tbl0qaTtyZXR1cm4gbz49KGkqPTEyOCkmJihvLT1NYXRoLnBvdygyLDgqdCkpLG99LHp0LnByb3RvdHlwZS5yZWFkSW50OD1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxtcihlLDEsdGhpcy5sZW5ndGgpLDEyOCZ0aGlzW2VdPy0xKigyNTUtdGhpc1tlXSsxKTp0aGlzW2VdfSx6dC5wcm90b3R5cGUucmVhZEludDE2TEU9ZnVuY3Rpb24oZSx0KXt0fHxtcihlLDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbZV18dGhpc1tlKzFdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSx6dC5wcm90b3R5cGUucmVhZEludDE2QkU9ZnVuY3Rpb24oZSx0KXt0fHxtcihlLDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbZSsxXXx0aGlzW2VdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSx6dC5wcm90b3R5cGUucmVhZEludDMyTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8bXIoZSw0LHRoaXMubGVuZ3RoKSx0aGlzW2VdfHRoaXNbZSsxXTw8OHx0aGlzW2UrMl08PDE2fHRoaXNbZSszXTw8MjR9LHp0LnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxtcihlLDQsdGhpcy5sZW5ndGgpLHRoaXNbZV08PDI0fHRoaXNbZSsxXTw8MTZ8dGhpc1tlKzJdPDw4fHRoaXNbZSszXX0senQucHJvdG90eXBlLnJlYWRGbG9hdExFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fG1yKGUsNCx0aGlzLmxlbmd0aCkscXQodGhpcyxlLCEwLDIzLDQpfSx6dC5wcm90b3R5cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8bXIoZSw0LHRoaXMubGVuZ3RoKSxxdCh0aGlzLGUsITEsMjMsNCl9LHp0LnByb3RvdHlwZS5yZWFkRG91YmxlTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8bXIoZSw4LHRoaXMubGVuZ3RoKSxxdCh0aGlzLGUsITAsNTIsOCl9LHp0LnByb3RvdHlwZS5yZWFkRG91YmxlQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8bXIoZSw4LHRoaXMubGVuZ3RoKSxxdCh0aGlzLGUsITEsNTIsOCl9LHp0LnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbihlLHQscixuKXsoZT0rZSx0fD0wLHJ8PTAsbil8fHdyKHRoaXMsZSx0LHIsTWF0aC5wb3coMiw4KnIpLTEsMCk7dmFyIGk9MSxvPTA7Zm9yKHRoaXNbdF09MjU1JmU7KytvPHImJihpKj0yNTYpOyl0aGlzW3Qrb109ZS9pJjI1NTtyZXR1cm4gdCtyfSx6dC5wcm90b3R5cGUud3JpdGVVSW50QkU9ZnVuY3Rpb24oZSx0LHIsbil7KGU9K2UsdHw9MCxyfD0wLG4pfHx3cih0aGlzLGUsdCxyLE1hdGgucG93KDIsOCpyKS0xLDApO3ZhciBpPXItMSxvPTE7Zm9yKHRoaXNbdCtpXT0yNTUmZTstLWk+PTAmJihvKj0yNTYpOyl0aGlzW3QraV09ZS9vJjI1NTtyZXR1cm4gdCtyfSx6dC5wcm90b3R5cGUud3JpdGVVSW50OD1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHx3cih0aGlzLGUsdCwxLDI1NSwwKSx6dC5UWVBFRF9BUlJBWV9TVVBQT1JUfHwoZT1NYXRoLmZsb29yKGUpKSx0aGlzW3RdPTI1NSZlLHQrMX0senQucHJvdG90eXBlLndyaXRlVUludDE2TEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8d3IodGhpcyxlLHQsMiw2NTUzNSwwKSx6dC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPTI1NSZlLHRoaXNbdCsxXT1lPj4+OCk6X3IodGhpcyxlLHQsITApLHQrMn0senQucHJvdG90eXBlLndyaXRlVUludDE2QkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8d3IodGhpcyxlLHQsMiw2NTUzNSwwKSx6dC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPWU+Pj44LHRoaXNbdCsxXT0yNTUmZSk6X3IodGhpcyxlLHQsITEpLHQrMn0senQucHJvdG90eXBlLndyaXRlVUludDMyTEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8d3IodGhpcyxlLHQsNCw0Mjk0OTY3Mjk1LDApLHp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdCszXT1lPj4+MjQsdGhpc1t0KzJdPWU+Pj4xNix0aGlzW3QrMV09ZT4+PjgsdGhpc1t0XT0yNTUmZSk6YnIodGhpcyxlLHQsITApLHQrNH0senQucHJvdG90eXBlLndyaXRlVUludDMyQkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8d3IodGhpcyxlLHQsNCw0Mjk0OTY3Mjk1LDApLHp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjI0LHRoaXNbdCsxXT1lPj4+MTYsdGhpc1t0KzJdPWU+Pj44LHRoaXNbdCszXT0yNTUmZSk6YnIodGhpcyxlLHQsITEpLHQrNH0senQucHJvdG90eXBlLndyaXRlSW50TEU9ZnVuY3Rpb24oZSx0LHIsbil7aWYoZT0rZSx0fD0wLCFuKXt2YXIgaT1NYXRoLnBvdygyLDgqci0xKTt3cih0aGlzLGUsdCxyLGktMSwtaSl9dmFyIG89MCxzPTEsYT0wO2Zvcih0aGlzW3RdPTI1NSZlOysrbzxyJiYocyo9MjU2KTspZTwwJiYwPT09YSYmMCE9PXRoaXNbdCtvLTFdJiYoYT0xKSx0aGlzW3Qrb109KGUvcz4+MCktYSYyNTU7cmV0dXJuIHQrcn0senQucHJvdG90eXBlLndyaXRlSW50QkU9ZnVuY3Rpb24oZSx0LHIsbil7aWYoZT0rZSx0fD0wLCFuKXt2YXIgaT1NYXRoLnBvdygyLDgqci0xKTt3cih0aGlzLGUsdCxyLGktMSwtaSl9dmFyIG89ci0xLHM9MSxhPTA7Zm9yKHRoaXNbdCtvXT0yNTUmZTstLW8+PTAmJihzKj0yNTYpOyllPDAmJjA9PT1hJiYwIT09dGhpc1t0K28rMV0mJihhPTEpLHRoaXNbdCtvXT0oZS9zPj4wKS1hJjI1NTtyZXR1cm4gdCtyfSx6dC5wcm90b3R5cGUud3JpdGVJbnQ4PWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fHdyKHRoaXMsZSx0LDEsMTI3LC0xMjgpLHp0LlRZUEVEX0FSUkFZX1NVUFBPUlR8fChlPU1hdGguZmxvb3IoZSkpLGU8MCYmKGU9MjU1K2UrMSksdGhpc1t0XT0yNTUmZSx0KzF9LHp0LnByb3RvdHlwZS53cml0ZUludDE2TEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8d3IodGhpcyxlLHQsMiwzMjc2NywtMzI3NjgpLHp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44KTpfcih0aGlzLGUsdCwhMCksdCsyfSx6dC5wcm90b3R5cGUud3JpdGVJbnQxNkJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fHdyKHRoaXMsZSx0LDIsMzI3NjcsLTMyNzY4KSx6dC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPWU+Pj44LHRoaXNbdCsxXT0yNTUmZSk6X3IodGhpcyxlLHQsITEpLHQrMn0senQucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHx3cih0aGlzLGUsdCw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLHp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44LHRoaXNbdCsyXT1lPj4+MTYsdGhpc1t0KzNdPWU+Pj4yNCk6YnIodGhpcyxlLHQsITApLHQrNH0senQucHJvdG90eXBlLndyaXRlSW50MzJCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHx3cih0aGlzLGUsdCw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLGU8MCYmKGU9NDI5NDk2NzI5NStlKzEpLHp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjI0LHRoaXNbdCsxXT1lPj4+MTYsdGhpc1t0KzJdPWU+Pj44LHRoaXNbdCszXT0yNTUmZSk6YnIodGhpcyxlLHQsITEpLHQrNH0senQucHJvdG90eXBlLndyaXRlRmxvYXRMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIEVyKHRoaXMsZSx0LCEwLHIpfSx6dC5wcm90b3R5cGUud3JpdGVGbG9hdEJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gRXIodGhpcyxlLHQsITEscil9LHp0LnByb3RvdHlwZS53cml0ZURvdWJsZUxFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4ga3IodGhpcyxlLHQsITAscil9LHp0LnByb3RvdHlwZS53cml0ZURvdWJsZUJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4ga3IodGhpcyxlLHQsITEscil9LHp0LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGUsdCxyLG4pe2lmKHJ8fChyPTApLG58fDA9PT1ufHwobj10aGlzLmxlbmd0aCksdD49ZS5sZW5ndGgmJih0PWUubGVuZ3RoKSx0fHwodD0wKSxuPjAmJm48ciYmKG49ciksbj09PXIpcmV0dXJuIDA7aWYoMD09PWUubGVuZ3RofHwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIDA7aWYodDwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzIik7aWYocjwwfHxyPj10aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlU3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKG48MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlRW5kIG91dCBvZiBib3VuZHMiKTtuPnRoaXMubGVuZ3RoJiYobj10aGlzLmxlbmd0aCksZS5sZW5ndGgtdDxuLXImJihuPWUubGVuZ3RoLXQrcik7dmFyIGksbz1uLXI7aWYodGhpcz09PWUmJnI8dCYmdDxuKWZvcihpPW8tMTtpPj0wOy0taSllW2krdF09dGhpc1tpK3JdO2Vsc2UgaWYobzwxZTN8fCF6dC5UWVBFRF9BUlJBWV9TVVBQT1JUKWZvcihpPTA7aTxvOysraSllW2krdF09dGhpc1tpK3JdO2Vsc2UgVWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoZSx0aGlzLnN1YmFycmF5KHIscitvKSx0KTtyZXR1cm4gb30senQucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24oZSx0LHIsbil7aWYoInN0cmluZyI9PXR5cGVvZiBlKXtpZigic3RyaW5nIj09dHlwZW9mIHQ/KG49dCx0PTAscj10aGlzLmxlbmd0aCk6InN0cmluZyI9PXR5cGVvZiByJiYobj1yLHI9dGhpcy5sZW5ndGgpLDE9PT1lLmxlbmd0aCl7dmFyIGk9ZS5jaGFyQ29kZUF0KDApO2k8MjU2JiYoZT1pKX1pZih2b2lkIDAhPT1uJiYic3RyaW5nIiE9dHlwZW9mIG4pdGhyb3cgbmV3IFR5cGVFcnJvcigiZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZyIpO2lmKCJzdHJpbmciPT10eXBlb2YgbiYmIXp0LmlzRW5jb2RpbmcobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIituKX1lbHNlIm51bWJlciI9PXR5cGVvZiBlJiYoZSY9MjU1KTtpZih0PDB8fHRoaXMubGVuZ3RoPHR8fHRoaXMubGVuZ3RoPHIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk91dCBvZiByYW5nZSBpbmRleCIpO2lmKHI8PXQpcmV0dXJuIHRoaXM7dmFyIG87aWYodD4+Pj0wLHI9dm9pZCAwPT09cj90aGlzLmxlbmd0aDpyPj4+MCxlfHwoZT0wKSwibnVtYmVyIj09dHlwZW9mIGUpZm9yKG89dDtvPHI7KytvKXRoaXNbb109ZTtlbHNle3ZhciBzPVF0KGUpP2U6QXIobmV3IHp0KGUsbikudG9TdHJpbmcoKSksYT1zLmxlbmd0aDtmb3Iobz0wO288ci10Oysrbyl0aGlzW28rdF09c1tvJWFdfXJldHVybiB0aGlzfTt2YXIgVHI9L1teK1wvMC05QS1aYS16LV9dL2c7ZnVuY3Rpb24gUnIoZSl7cmV0dXJuIGU8MTY/IjAiK2UudG9TdHJpbmcoMTYpOmUudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIEFyKGUsdCl7dmFyIHI7dD10fHwxLzA7Zm9yKHZhciBuPWUubGVuZ3RoLGk9bnVsbCxvPVtdLHM9MDtzPG47KytzKXtpZigocj1lLmNoYXJDb2RlQXQocykpPjU1Mjk1JiZyPDU3MzQ0KXtpZighaSl7aWYocj41NjMxOSl7KHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWlmKHMrMT09PW4peyh0LT0zKT4tMSYmby5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pPXI7Y29udGludWV9aWYocjw1NjMyMCl7KHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpLGk9cjtjb250aW51ZX1yPTY1NTM2KyhpLTU1Mjk2PDwxMHxyLTU2MzIwKX1lbHNlIGkmJih0LT0zKT4tMSYmby5wdXNoKDIzOSwxOTEsMTg5KTtpZihpPW51bGwscjwxMjgpe2lmKCh0LT0xKTwwKWJyZWFrO28ucHVzaChyKX1lbHNlIGlmKHI8MjA0OCl7aWYoKHQtPTIpPDApYnJlYWs7by5wdXNoKHI+PjZ8MTkyLDYzJnJ8MTI4KX1lbHNlIGlmKHI8NjU1MzYpe2lmKCh0LT0zKTwwKWJyZWFrO28ucHVzaChyPj4xMnwyMjQscj4+NiY2M3wxMjgsNjMmcnwxMjgpfWVsc2V7aWYoIShyPDExMTQxMTIpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb2RlIHBvaW50Iik7aWYoKHQtPTQpPDApYnJlYWs7by5wdXNoKHI+PjE4fDI0MCxyPj4xMiY2M3wxMjgscj4+NiY2M3wxMjgsNjMmcnwxMjgpfX1yZXR1cm4gb31mdW5jdGlvbiBDcihlKXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQscixuLGksbyxzO010fHxOdCgpO3ZhciBhPWUubGVuZ3RoO2lmKGElND4wKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCIpO289Ij0iPT09ZVthLTJdPzI6Ij0iPT09ZVthLTFdPzE6MCxzPW5ldyBIdCgzKmEvNC1vKSxuPW8+MD9hLTQ6YTt2YXIgYz0wO2Zvcih0PTAscj0wO3Q8bjt0Kz00LHIrPTMpaT1MdFtlLmNoYXJDb2RlQXQodCldPDwxOHxMdFtlLmNoYXJDb2RlQXQodCsxKV08PDEyfEx0W2UuY2hhckNvZGVBdCh0KzIpXTw8NnxMdFtlLmNoYXJDb2RlQXQodCszKV0sc1tjKytdPWk+PjE2JjI1NSxzW2MrK109aT4+OCYyNTUsc1tjKytdPTI1NSZpO3JldHVybiAyPT09bz8oaT1MdFtlLmNoYXJDb2RlQXQodCldPDwyfEx0W2UuY2hhckNvZGVBdCh0KzEpXT4+NCxzW2MrK109MjU1JmkpOjE9PT1vJiYoaT1MdFtlLmNoYXJDb2RlQXQodCldPDwxMHxMdFtlLmNoYXJDb2RlQXQodCsxKV08PDR8THRbZS5jaGFyQ29kZUF0KHQrMildPj4yLHNbYysrXT1pPj44JjI1NSxzW2MrK109MjU1JmkpLHN9KGZ1bmN0aW9uKGUpe2lmKChlPWZ1bmN0aW9uKGUpe3JldHVybiBlLnRyaW0/ZS50cmltKCk6ZS5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIil9KGUpLnJlcGxhY2UoVHIsIiIpKS5sZW5ndGg8MilyZXR1cm4iIjtmb3IoO2UubGVuZ3RoJTQhPTA7KWUrPSI9IjtyZXR1cm4gZX0oZSkpfWZ1bmN0aW9uIERyKGUsdCxyLG4pe2Zvcih2YXIgaT0wO2k8biYmIShpK3I+PXQubGVuZ3RofHxpPj1lLmxlbmd0aCk7KytpKXRbaStyXT1lW2ldO3JldHVybiBpfWZ1bmN0aW9uIFByKGUpe3JldHVybiBudWxsIT1lJiYoISFlLl9pc0J1ZmZlcnx8T3IoZSl8fGZ1bmN0aW9uKGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlLnJlYWRGbG9hdExFJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5zbGljZSYmT3IoZS5zbGljZSgwLDApKX0oZSkpfWZ1bmN0aW9uIE9yKGUpe3JldHVybiEhZS5jb25zdHJ1Y3RvciYmImZ1bmN0aW9uIj09dHlwZW9mIGUuY29uc3RydWN0b3IuaXNCdWZmZXImJmUuY29uc3RydWN0b3IuaXNCdWZmZXIoZSl9dmFyIElyPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLEJ1ZmZlcjp6dCxJTlNQRUNUX01BWF9CWVRFUzo1MCxTbG93QnVmZmVyOmZ1bmN0aW9uKGUpe3JldHVybitlIT1lJiYoZT0wKSx6dC5hbGxvYygrZSl9LGlzQnVmZmVyOlByLGtNYXhMZW5ndGg6RnR9KSxVcj17ZXhwb3J0czp7fX0sTHI9e30sSHI9e307T2JqZWN0LmRlZmluZVByb3BlcnR5KEhyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxIci5kZWZhdWx0PWZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoLHI9dCU0O2lmKCFyKXJldHVybiBlO3ZhciBuPXQsaT00LXIsbz10K2kscz16dC5hbGxvYyhvKTtmb3Iocy53cml0ZShlKTtpLS07KXMud3JpdGUoIj0iLG4rKyk7cmV0dXJuIHMudG9TdHJpbmcoKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KExyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgTXI9SHI7ZnVuY3Rpb24gTnIoZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9InV0ZjgiKSx6dC5pc0J1ZmZlcihlKT94cihlLnRvU3RyaW5nKCJiYXNlNjQiKSk6eHIoenQuZnJvbShlLHQpLnRvU3RyaW5nKCJiYXNlNjQiKSl9ZnVuY3Rpb24ganIoZSl7cmV0dXJuIGU9ZS50b1N0cmluZygpLE1yLmRlZmF1bHQoZSkucmVwbGFjZSgvXC0vZywiKyIpLnJlcGxhY2UoL18vZywiLyIpfWZ1bmN0aW9uIHhyKGUpe3JldHVybiBlLnJlcGxhY2UoLz0vZywiIikucmVwbGFjZSgvXCsvZywiLSIpLnJlcGxhY2UoL1wvL2csIl8iKX12YXIgcXIsS3I9TnI7S3IuZW5jb2RlPU5yLEtyLmRlY29kZT1mdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0idXRmOCIpLHp0LmZyb20oanIoZSksImJhc2U2NCIpLnRvU3RyaW5nKHQpfSxLci50b0Jhc2U2ND1qcixLci5mcm9tQmFzZTY0PXhyLEtyLnRvQnVmZmVyPWZ1bmN0aW9uKGUpe3JldHVybiB6dC5mcm9tKGpyKGUpLCJiYXNlNjQiKX0sTHIuZGVmYXVsdD1LciwocXI9VXIpLmV4cG9ydHM9THIuZGVmYXVsdCxxci5leHBvcnRzLmRlZmF1bHQ9cXIuZXhwb3J0czt2YXIgSnI9VXIuZXhwb3J0cyxCcj17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGUpeyFmdW5jdGlvbih0LHIpe3ZhciBuPXt9OyFmdW5jdGlvbihlKXtlLl9fZXNNb2R1bGU9ITAsZS5kaWdlc3RMZW5ndGg9MzIsZS5ibG9ja1NpemU9NjQ7dmFyIHQ9bmV3IFVpbnQzMkFycmF5KFsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0MzgxMDgwLDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4NiwyNTU0MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5NTYwMzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdKTtmdW5jdGlvbiByKGUscixuLGksbyl7Zm9yKHZhciBzLGEsYyx1LGwsaCxkLGYscCxnLHksdixtO28+PTY0Oyl7Zm9yKHM9clswXSxhPXJbMV0sYz1yWzJdLHU9clszXSxsPXJbNF0saD1yWzVdLGQ9cls2XSxmPXJbN10sZz0wO2c8MTY7ZysrKXk9aSs0KmcsZVtnXT0oMjU1Jm5beV0pPDwyNHwoMjU1Jm5beSsxXSk8PDE2fCgyNTUmblt5KzJdKTw8OHwyNTUmblt5KzNdO2ZvcihnPTE2O2c8NjQ7ZysrKXY9KChwPWVbZy0yXSk+Pj4xN3xwPDwxNSleKHA+Pj4xOXxwPDwxMylecD4+PjEwLG09KChwPWVbZy0xNV0pPj4+N3xwPDwyNSleKHA+Pj4xOHxwPDwxNClecD4+PjMsZVtnXT0oditlW2ctN118MCkrKG0rZVtnLTE2XXwwKTtmb3IoZz0wO2c8NjQ7ZysrKXY9KCgobD4+PjZ8bDw8MjYpXihsPj4+MTF8bDw8MjEpXihsPj4+MjV8bDw8NykpKyhsJmhefmwmZCl8MCkrKGYrKHRbZ10rZVtnXXwwKXwwKXwwLG09KChzPj4+MnxzPDwzMCleKHM+Pj4xM3xzPDwxOSleKHM+Pj4yMnxzPDwxMCkpKyhzJmFecyZjXmEmYyl8MCxmPWQsZD1oLGg9bCxsPXUrdnwwLHU9YyxjPWEsYT1zLHM9dittfDA7clswXSs9cyxyWzFdKz1hLHJbMl0rPWMsclszXSs9dSxyWzRdKz1sLHJbNV0rPWgscls2XSs9ZCxyWzddKz1mLGkrPTY0LG8tPTY0fXJldHVybiBpfXZhciBuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuZGlnZXN0TGVuZ3RoPWUuZGlnZXN0TGVuZ3RoLHRoaXMuYmxvY2tTaXplPWUuYmxvY2tTaXplLHRoaXMuc3RhdGU9bmV3IEludDMyQXJyYXkoOCksdGhpcy50ZW1wPW5ldyBJbnQzMkFycmF5KDY0KSx0aGlzLmJ1ZmZlcj1uZXcgVWludDhBcnJheSgxMjgpLHRoaXMuYnVmZmVyTGVuZ3RoPTAsdGhpcy5ieXRlc0hhc2hlZD0wLHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5yZXNldCgpfXJldHVybiB0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXRlWzBdPTE3NzkwMzM3MDMsdGhpcy5zdGF0ZVsxXT0zMTQ0MTM0Mjc3LHRoaXMuc3RhdGVbMl09MTAxMzkwNDI0Mix0aGlzLnN0YXRlWzNdPTI3NzM0ODA3NjIsdGhpcy5zdGF0ZVs0XT0xMzU5ODkzMTE5LHRoaXMuc3RhdGVbNV09MjYwMDgyMjkyNCx0aGlzLnN0YXRlWzZdPTUyODczNDYzNSx0aGlzLnN0YXRlWzddPTE1NDE0NTkyMjUsdGhpcy5idWZmZXJMZW5ndGg9MCx0aGlzLmJ5dGVzSGFzaGVkPTAsdGhpcy5maW5pc2hlZD0hMSx0aGlzfSx0LnByb3RvdHlwZS5jbGVhbj1mdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8dGhpcy5idWZmZXIubGVuZ3RoO2UrKyl0aGlzLmJ1ZmZlcltlXT0wO2ZvcihlPTA7ZTx0aGlzLnRlbXAubGVuZ3RoO2UrKyl0aGlzLnRlbXBbZV09MDt0aGlzLnJlc2V0KCl9LHQucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlLHQpe2lmKHZvaWQgMD09PXQmJih0PWUubGVuZ3RoKSx0aGlzLmZpbmlzaGVkKXRocm93IG5ldyBFcnJvcigiU0hBMjU2OiBjYW4ndCB1cGRhdGUgYmVjYXVzZSBoYXNoIHdhcyBmaW5pc2hlZC4iKTt2YXIgbj0wO2lmKHRoaXMuYnl0ZXNIYXNoZWQrPXQsdGhpcy5idWZmZXJMZW5ndGg+MCl7Zm9yKDt0aGlzLmJ1ZmZlckxlbmd0aDw2NCYmdD4wOyl0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlckxlbmd0aCsrXT1lW24rK10sdC0tOzY0PT09dGhpcy5idWZmZXJMZW5ndGgmJihyKHRoaXMudGVtcCx0aGlzLnN0YXRlLHRoaXMuYnVmZmVyLDAsNjQpLHRoaXMuYnVmZmVyTGVuZ3RoPTApfWZvcih0Pj02NCYmKG49cih0aGlzLnRlbXAsdGhpcy5zdGF0ZSxlLG4sdCksdCU9NjQpO3Q+MDspdGhpcy5idWZmZXJbdGhpcy5idWZmZXJMZW5ndGgrK109ZVtuKytdLHQtLTtyZXR1cm4gdGhpc30sdC5wcm90b3R5cGUuZmluaXNoPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLmZpbmlzaGVkKXt2YXIgdD10aGlzLmJ5dGVzSGFzaGVkLG49dGhpcy5idWZmZXJMZW5ndGgsaT10LzUzNjg3MDkxMnwwLG89dDw8MyxzPXQlNjQ8NTY/NjQ6MTI4O3RoaXMuYnVmZmVyW25dPTEyODtmb3IodmFyIGE9bisxO2E8cy04O2ErKyl0aGlzLmJ1ZmZlclthXT0wO3RoaXMuYnVmZmVyW3MtOF09aT4+PjI0JjI1NSx0aGlzLmJ1ZmZlcltzLTddPWk+Pj4xNiYyNTUsdGhpcy5idWZmZXJbcy02XT1pPj4+OCYyNTUsdGhpcy5idWZmZXJbcy01XT1pPj4+MCYyNTUsdGhpcy5idWZmZXJbcy00XT1vPj4+MjQmMjU1LHRoaXMuYnVmZmVyW3MtM109bz4+PjE2JjI1NSx0aGlzLmJ1ZmZlcltzLTJdPW8+Pj44JjI1NSx0aGlzLmJ1ZmZlcltzLTFdPW8+Pj4wJjI1NSxyKHRoaXMudGVtcCx0aGlzLnN0YXRlLHRoaXMuYnVmZmVyLDAscyksdGhpcy5maW5pc2hlZD0hMH1mb3IoYT0wO2E8ODthKyspZVs0KmErMF09dGhpcy5zdGF0ZVthXT4+PjI0JjI1NSxlWzQqYSsxXT10aGlzLnN0YXRlW2FdPj4+MTYmMjU1LGVbNCphKzJdPXRoaXMuc3RhdGVbYV0+Pj44JjI1NSxlWzQqYSszXT10aGlzLnN0YXRlW2FdPj4+MCYyNTU7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbigpe3ZhciBlPW5ldyBVaW50OEFycmF5KHRoaXMuZGlnZXN0TGVuZ3RoKTtyZXR1cm4gdGhpcy5maW5pc2goZSksZX0sdC5wcm90b3R5cGUuX3NhdmVTdGF0ZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PHRoaXMuc3RhdGUubGVuZ3RoO3QrKyllW3RdPXRoaXMuc3RhdGVbdF19LHQucHJvdG90eXBlLl9yZXN0b3JlU3RhdGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9MDtyPHRoaXMuc3RhdGUubGVuZ3RoO3IrKyl0aGlzLnN0YXRlW3JdPWVbcl07dGhpcy5ieXRlc0hhc2hlZD10LHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5idWZmZXJMZW5ndGg9MH0sdH0oKTtlLkhhc2g9bjt2YXIgaT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5pbm5lcj1uZXcgbix0aGlzLm91dGVyPW5ldyBuLHRoaXMuYmxvY2tTaXplPXRoaXMuaW5uZXIuYmxvY2tTaXplLHRoaXMuZGlnZXN0TGVuZ3RoPXRoaXMuaW5uZXIuZGlnZXN0TGVuZ3RoO3ZhciB0PW5ldyBVaW50OEFycmF5KHRoaXMuYmxvY2tTaXplKTtpZihlLmxlbmd0aD50aGlzLmJsb2NrU2l6ZSkobmV3IG4pLnVwZGF0ZShlKS5maW5pc2godCkuY2xlYW4oKTtlbHNlIGZvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXRbcl09ZVtyXTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXRbcl1ePTU0O3RoaXMuaW5uZXIudXBkYXRlKHQpO2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspdFtyXV49MTA2O3RoaXMub3V0ZXIudXBkYXRlKHQpLHRoaXMuaXN0YXRlPW5ldyBVaW50MzJBcnJheSg4KSx0aGlzLm9zdGF0ZT1uZXcgVWludDMyQXJyYXkoOCksdGhpcy5pbm5lci5fc2F2ZVN0YXRlKHRoaXMuaXN0YXRlKSx0aGlzLm91dGVyLl9zYXZlU3RhdGUodGhpcy5vc3RhdGUpO2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspdFtyXT0wfXJldHVybiBlLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlubmVyLl9yZXN0b3JlU3RhdGUodGhpcy5pc3RhdGUsdGhpcy5pbm5lci5ibG9ja1NpemUpLHRoaXMub3V0ZXIuX3Jlc3RvcmVTdGF0ZSh0aGlzLm9zdGF0ZSx0aGlzLm91dGVyLmJsb2NrU2l6ZSksdGhpc30sZS5wcm90b3R5cGUuY2xlYW49ZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPHRoaXMuaXN0YXRlLmxlbmd0aDtlKyspdGhpcy5vc3RhdGVbZV09dGhpcy5pc3RhdGVbZV09MDt0aGlzLmlubmVyLmNsZWFuKCksdGhpcy5vdXRlci5jbGVhbigpfSxlLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaW5uZXIudXBkYXRlKGUpLHRoaXN9LGUucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vdXRlci5maW5pc2hlZD90aGlzLm91dGVyLmZpbmlzaChlKToodGhpcy5pbm5lci5maW5pc2goZSksdGhpcy5vdXRlci51cGRhdGUoZSx0aGlzLmRpZ2VzdExlbmd0aCkuZmluaXNoKGUpKSx0aGlzfSxlLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgVWludDhBcnJheSh0aGlzLmRpZ2VzdExlbmd0aCk7cmV0dXJuIHRoaXMuZmluaXNoKGUpLGV9LGV9KCk7ZnVuY3Rpb24gbyhlKXt2YXIgdD0obmV3IG4pLnVwZGF0ZShlKSxyPXQuZGlnZXN0KCk7cmV0dXJuIHQuY2xlYW4oKSxyfWZ1bmN0aW9uIHMoZSx0KXt2YXIgcj1uZXcgaShlKS51cGRhdGUodCksbj1yLmRpZ2VzdCgpO3JldHVybiByLmNsZWFuKCksbn1mdW5jdGlvbiBhKGUsdCxyLG4pe3ZhciBpPW5bMF07aWYoMD09PWkpdGhyb3cgbmV3IEVycm9yKCJoa2RmOiBjYW5ub3QgZXhwYW5kIG1vcmUiKTt0LnJlc2V0KCksaT4xJiZ0LnVwZGF0ZShlKSxyJiZ0LnVwZGF0ZShyKSx0LnVwZGF0ZShuKSx0LmZpbmlzaChlKSxuWzBdKyt9ZS5ITUFDPWksZS5oYXNoPW8sZS5kZWZhdWx0PW8sZS5obWFjPXM7dmFyIGM9bmV3IFVpbnQ4QXJyYXkoZS5kaWdlc3RMZW5ndGgpO2Z1bmN0aW9uIHUoZSx0LHIsbil7dm9pZCAwPT09dCYmKHQ9Yyksdm9pZCAwPT09biYmKG49MzIpO2Zvcih2YXIgbz1uZXcgVWludDhBcnJheShbMV0pLHU9cyh0LGUpLGw9bmV3IGkodSksaD1uZXcgVWludDhBcnJheShsLmRpZ2VzdExlbmd0aCksZD1oLmxlbmd0aCxmPW5ldyBVaW50OEFycmF5KG4pLHA9MDtwPG47cCsrKWQ9PT1oLmxlbmd0aCYmKGEoaCxsLHIsbyksZD0wKSxmW3BdPWhbZCsrXTtyZXR1cm4gbC5jbGVhbigpLGguZmlsbCgwKSxvLmZpbGwoMCksZn1mdW5jdGlvbiBsKGUsdCxyLG4pe2Zvcih2YXIgbz1uZXcgaShlKSxzPW8uZGlnZXN0TGVuZ3RoLGE9bmV3IFVpbnQ4QXJyYXkoNCksYz1uZXcgVWludDhBcnJheShzKSx1PW5ldyBVaW50OEFycmF5KHMpLGw9bmV3IFVpbnQ4QXJyYXkobiksaD0wO2gqczxuO2grKyl7dmFyIGQ9aCsxO2FbMF09ZD4+PjI0JjI1NSxhWzFdPWQ+Pj4xNiYyNTUsYVsyXT1kPj4+OCYyNTUsYVszXT1kPj4+MCYyNTUsby5yZXNldCgpLG8udXBkYXRlKHQpLG8udXBkYXRlKGEpLG8uZmluaXNoKHUpO2Zvcih2YXIgZj0wO2Y8cztmKyspY1tmXT11W2ZdO2ZvcihmPTI7Zjw9cjtmKyspe28ucmVzZXQoKSxvLnVwZGF0ZSh1KS5maW5pc2godSk7Zm9yKHZhciBwPTA7cDxzO3ArKyljW3BdXj11W3BdfWZvcihmPTA7ZjxzJiZoKnMrZjxuO2YrKylsW2gqcytmXT1jW2ZdfWZvcihoPTA7aDxzO2grKyljW2hdPXVbaF09MDtmb3IoaD0wO2g8NDtoKyspYVtoXT0wO3JldHVybiBvLmNsZWFuKCksbH1lLmhrZGY9dSxlLnBia2RmMj1sfShuKTt2YXIgaT1uLmRlZmF1bHQ7Zm9yKHZhciBvIGluIG4paVtvXT1uW29dO2UuZXhwb3J0cz1pfSgpfShCcik7dmFyIEZyPVMoQnIuZXhwb3J0cyksV3I9Y3J5cHRvO2NvbnN0ICRyPWU9PmUgaW5zdGFuY2VvZiBDcnlwdG9LZXksenI9bmV3IFRleHRFbmNvZGVyLFZyPW5ldyBUZXh0RGVjb2Rlcjtjb25zdCBZcj1lPT57bGV0IHQ9ZTt0IGluc3RhbmNlb2YgVWludDhBcnJheSYmKHQ9VnIuZGVjb2RlKHQpKSx0PXQucmVwbGFjZSgvLS9nLCIrIikucmVwbGFjZSgvXy9nLCIvIikucmVwbGFjZSgvXHMvZywiIik7dHJ5e3JldHVybihlPT57Y29uc3QgdD1hdG9iKGUpLHI9bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgpO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKXJbZV09dC5jaGFyQ29kZUF0KGUpO3JldHVybiByfSkodCl9Y2F0Y2goZSl7dGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGlucHV0IHRvIGJlIGRlY29kZWQgaXMgbm90IGNvcnJlY3RseSBlbmNvZGVkLiIpfX07Y2xhc3MgR3IgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihlKXt2YXIgdDtzdXBlcihlKSx0aGlzLmNvZGU9IkVSUl9KT1NFX0dFTkVSSUMiLHRoaXMubmFtZT10aGlzLmNvbnN0cnVjdG9yLm5hbWUsbnVsbD09PSh0PUVycm9yLmNhcHR1cmVTdGFja1RyYWNlKXx8dm9pZCAwPT09dHx8dC5jYWxsKEVycm9yLHRoaXMsdGhpcy5jb25zdHJ1Y3Rvcil9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KT1NFX0dFTkVSSUMifX1jbGFzcyBYciBleHRlbmRzIEdye2NvbnN0cnVjdG9yKGUsdD0idW5zcGVjaWZpZWQiLHI9InVuc3BlY2lmaWVkIil7c3VwZXIoZSksdGhpcy5jb2RlPSJFUlJfSldUX0NMQUlNX1ZBTElEQVRJT05fRkFJTEVEIix0aGlzLmNsYWltPXQsdGhpcy5yZWFzb249cn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pXVF9DTEFJTV9WQUxJREFUSU9OX0ZBSUxFRCJ9fWNsYXNzIFpyIGV4dGVuZHMgR3J7Y29uc3RydWN0b3IoZSx0PSJ1bnNwZWNpZmllZCIscj0idW5zcGVjaWZpZWQiKXtzdXBlcihlKSx0aGlzLmNvZGU9IkVSUl9KV1RfRVhQSVJFRCIsdGhpcy5jbGFpbT10LHRoaXMucmVhc29uPXJ9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KV1RfRVhQSVJFRCJ9fWNsYXNzIFFyIGV4dGVuZHMgR3J7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pPU0VfQUxHX05PVF9BTExPV0VEIn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pPU0VfQUxHX05PVF9BTExPV0VEIn19Y2xhc3MgZW4gZXh0ZW5kcyBHcntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSk9TRV9OT1RfU1VQUE9SVEVEIn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pPU0VfTk9UX1NVUFBPUlRFRCJ9fWNsYXNzIHRuIGV4dGVuZHMgR3J7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pXU19JTlZBTElEIn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pXU19JTlZBTElEIn19Y2xhc3Mgcm4gZXh0ZW5kcyBHcntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSldUX0lOVkFMSUQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldUX0lOVkFMSUQifX1jbGFzcyBubiBleHRlbmRzIEdye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KV0tTX0lOVkFMSUQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldLU19JTlZBTElEIn19Y2xhc3Mgb24gZXh0ZW5kcyBHcntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSldLU19OT19NQVRDSElOR19LRVkiLHRoaXMubWVzc2FnZT0ibm8gYXBwbGljYWJsZSBrZXkgZm91bmQgaW4gdGhlIEpTT04gV2ViIEtleSBTZXQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldLU19OT19NQVRDSElOR19LRVkifX1jbGFzcyBzbiBleHRlbmRzIEdye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KV0tTX01VTFRJUExFX01BVENISU5HX0tFWVMiLHRoaXMubWVzc2FnZT0ibXVsdGlwbGUgbWF0Y2hpbmcga2V5cyBmb3VuZCBpbiB0aGUgSlNPTiBXZWIgS2V5IFNldCJ9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KV0tTX01VTFRJUExFX01BVENISU5HX0tFWVMifX1jbGFzcyBhbiBleHRlbmRzIEdye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KV1NfU0lHTkFUVVJFX1ZFUklGSUNBVElPTl9GQUlMRUQiLHRoaXMubWVzc2FnZT0ic2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBmYWlsZWQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldTX1NJR05BVFVSRV9WRVJJRklDQVRJT05fRkFJTEVEIn19ZnVuY3Rpb24gY24oKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgV2ViU29ja2V0UGFpcn1mdW5jdGlvbiB1bigpe3RyeXtyZXR1cm4gdm9pZCAwIT09ZmUudmVyc2lvbnMubm9kZX1jYXRjaChlKXtyZXR1cm4hMX19ZnVuY3Rpb24gbG4oZSx0PSJhbGdvcml0aG0ubmFtZSIpe3JldHVybiBuZXcgVHlwZUVycm9yKGBDcnlwdG9LZXkgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIG9wZXJhdGlvbiwgaXRzICR7dH0gbXVzdCBiZSAke2V9YCl9ZnVuY3Rpb24gaG4oZSx0KXtyZXR1cm4gZS5uYW1lPT09dH1mdW5jdGlvbiBkbihlKXtyZXR1cm4gcGFyc2VJbnQoZS5uYW1lLnNsaWNlKDQpLDEwKX1mdW5jdGlvbiBmbihlLHQsLi4ucil7c3dpdGNoKHQpe2Nhc2UiSFMyNTYiOmNhc2UiSFMzODQiOmNhc2UiSFM1MTIiOntpZighaG4oZS5hbGdvcml0aG0sIkhNQUMiKSl0aHJvdyBsbigiSE1BQyIpO2NvbnN0IHI9cGFyc2VJbnQodC5zbGljZSgyKSwxMCk7aWYoZG4oZS5hbGdvcml0aG0uaGFzaCkhPT1yKXRocm93IGxuKGBTSEEtJHtyfWAsImFsZ29yaXRobS5oYXNoIik7YnJlYWt9Y2FzZSJSUzI1NiI6Y2FzZSJSUzM4NCI6Y2FzZSJSUzUxMiI6e2lmKCFobihlLmFsZ29yaXRobSwiUlNBU1NBLVBLQ1MxLXYxXzUiKSl0aHJvdyBsbigiUlNBU1NBLVBLQ1MxLXYxXzUiKTtjb25zdCByPXBhcnNlSW50KHQuc2xpY2UoMiksMTApO2lmKGRuKGUuYWxnb3JpdGhtLmhhc2gpIT09cil0aHJvdyBsbihgU0hBLSR7cn1gLCJhbGdvcml0aG0uaGFzaCIpO2JyZWFrfWNhc2UiUFMyNTYiOmNhc2UiUFMzODQiOmNhc2UiUFM1MTIiOntpZighaG4oZS5hbGdvcml0aG0sIlJTQS1QU1MiKSl0aHJvdyBsbigiUlNBLVBTUyIpO2NvbnN0IHI9cGFyc2VJbnQodC5zbGljZSgyKSwxMCk7aWYoZG4oZS5hbGdvcml0aG0uaGFzaCkhPT1yKXRocm93IGxuKGBTSEEtJHtyfWAsImFsZ29yaXRobS5oYXNoIik7YnJlYWt9Y2FzZSB1bigpJiYiRWREU0EiOmlmKCJOT0RFLUVEMjU1MTkiIT09ZS5hbGdvcml0aG0ubmFtZSYmIk5PREUtRUQ0NDgiIT09ZS5hbGdvcml0aG0ubmFtZSl0aHJvdyBsbigiTk9ERS1FRDI1NTE5IG9yIE5PREUtRUQ0NDgiKTticmVhaztjYXNlIGNuKCkmJiJFZERTQSI6aWYoIWhuKGUuYWxnb3JpdGhtLCJOT0RFLUVEMjU1MTkiKSl0aHJvdyBsbigiTk9ERS1FRDI1NTE5Iik7YnJlYWs7Y2FzZSJFUzI1NiI6Y2FzZSJFUzM4NCI6Y2FzZSJFUzUxMiI6e2lmKCFobihlLmFsZ29yaXRobSwiRUNEU0EiKSl0aHJvdyBsbigiRUNEU0EiKTtjb25zdCByPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIkVTMjU2IjpyZXR1cm4iUC0yNTYiO2Nhc2UiRVMzODQiOnJldHVybiJQLTM4NCI7Y2FzZSJFUzUxMiI6cmV0dXJuIlAtNTIxIjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5yZWFjaGFibGUiKX19KHQpO2lmKGUuYWxnb3JpdGhtLm5hbWVkQ3VydmUhPT1yKXRocm93IGxuKHIsImFsZ29yaXRobS5uYW1lZEN1cnZlIik7YnJlYWt9ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKCJDcnlwdG9LZXkgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIG9wZXJhdGlvbiIpfSFmdW5jdGlvbihlLHQpe2lmKHQubGVuZ3RoJiYhdC5zb21lKCh0PT5lLnVzYWdlcy5pbmNsdWRlcyh0KSkpKXtsZXQgZT0iQ3J5cHRvS2V5IGRvZXMgbm90IHN1cHBvcnQgdGhpcyBvcGVyYXRpb24sIGl0cyB1c2FnZXMgbXVzdCBpbmNsdWRlICI7aWYodC5sZW5ndGg+Mil7Y29uc3Qgcj10LnBvcCgpO2UrPWBvbmUgb2YgJHt0LmpvaW4oIiwgIil9LCBvciAke3J9LmB9ZWxzZSAyPT09dC5sZW5ndGg/ZSs9YG9uZSBvZiAke3RbMF19IG9yICR7dFsxXX0uYDplKz1gJHt0WzBdfS5gO3Rocm93IG5ldyBUeXBlRXJyb3IoZSl9fShlLHIpfXZhciBwbj0oZSwuLi50KT0+e2xldCByPSJLZXkgbXVzdCBiZSAiO2lmKHQubGVuZ3RoPjIpe2NvbnN0IGU9dC5wb3AoKTtyKz1gb25lIG9mIHR5cGUgJHt0LmpvaW4oIiwgIil9LCBvciAke2V9LmB9ZWxzZSAyPT09dC5sZW5ndGg/cis9YG9uZSBvZiB0eXBlICR7dFswXX0gb3IgJHt0WzFdfS5gOnIrPWBvZiB0eXBlICR7dFswXX0uYDtyZXR1cm4gbnVsbD09ZT9yKz1gIFJlY2VpdmVkICR7ZX1gOiJmdW5jdGlvbiI9PXR5cGVvZiBlJiZlLm5hbWU/cis9YCBSZWNlaXZlZCBmdW5jdGlvbiAke2UubmFtZX1gOiJvYmplY3QiPT10eXBlb2YgZSYmbnVsbCE9ZSYmZS5jb25zdHJ1Y3RvciYmZS5jb25zdHJ1Y3Rvci5uYW1lJiYocis9YCBSZWNlaXZlZCBhbiBpbnN0YW5jZSBvZiAke2UuY29uc3RydWN0b3IubmFtZX1gKSxyfSxnbj1lPT4kcihlKTtjb25zdCB5bj1bIkNyeXB0b0tleSJdO2Z1bmN0aW9uIHZuKGUpe2lmKCJvYmplY3QiIT10eXBlb2YodD1lKXx8bnVsbD09PXR8fCJbb2JqZWN0IE9iamVjdF0iIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpKXJldHVybiExO3ZhciB0O2lmKG51bGw9PT1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSkpcmV0dXJuITA7bGV0IHI9ZTtmb3IoO251bGwhPT1PYmplY3QuZ2V0UHJvdG90eXBlT2Yocik7KXI9T2JqZWN0LmdldFByb3RvdHlwZU9mKHIpO3JldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk9PT1yfWNvbnN0IG1uPWFzeW5jIGU9Pnt2YXIgdCxyO2NvbnN0e2FsZ29yaXRobTpuLGtleVVzYWdlczppfT1mdW5jdGlvbihlKXtsZXQgdCxyO3N3aXRjaChlLmt0eSl7Y2FzZSJvY3QiOnN3aXRjaChlLmFsZyl7Y2FzZSJIUzI1NiI6Y2FzZSJIUzM4NCI6Y2FzZSJIUzUxMiI6dD17bmFtZToiSE1BQyIsaGFzaDpgU0hBLSR7ZS5hbGcuc2xpY2UoLTMpfWB9LHI9WyJzaWduIiwidmVyaWZ5Il07YnJlYWs7Y2FzZSJBMTI4Q0JDLUhTMjU2IjpjYXNlIkExOTJDQkMtSFMzODQiOmNhc2UiQTI1NkNCQy1IUzUxMiI6dGhyb3cgbmV3IGVuKGAke2UuYWxnfSBrZXlzIGNhbm5vdCBiZSBpbXBvcnRlZCBhcyBDcnlwdG9LZXkgaW5zdGFuY2VzYCk7Y2FzZSJBMTI4R0NNIjpjYXNlIkExOTJHQ00iOmNhc2UiQTI1NkdDTSI6Y2FzZSJBMTI4R0NNS1ciOmNhc2UiQTE5MkdDTUtXIjpjYXNlIkEyNTZHQ01LVyI6dD17bmFtZToiQUVTLUdDTSJ9LHI9WyJlbmNyeXB0IiwiZGVjcnlwdCJdO2JyZWFrO2Nhc2UiQTEyOEtXIjpjYXNlIkExOTJLVyI6Y2FzZSJBMjU2S1ciOnQ9e25hbWU6IkFFUy1LVyJ9LHI9WyJ3cmFwS2V5IiwidW53cmFwS2V5Il07YnJlYWs7Y2FzZSJQQkVTMi1IUzI1NitBMTI4S1ciOmNhc2UiUEJFUzItSFMzODQrQTE5MktXIjpjYXNlIlBCRVMyLUhTNTEyK0EyNTZLVyI6dD17bmFtZToiUEJLREYyIn0scj1bImRlcml2ZUJpdHMiXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBlbignSW52YWxpZCBvciB1bnN1cHBvcnRlZCBKV0sgImFsZyIgKEFsZ29yaXRobSkgUGFyYW1ldGVyIHZhbHVlJyl9YnJlYWs7Y2FzZSJSU0EiOnN3aXRjaChlLmFsZyl7Y2FzZSJQUzI1NiI6Y2FzZSJQUzM4NCI6Y2FzZSJQUzUxMiI6dD17bmFtZToiUlNBLVBTUyIsaGFzaDpgU0hBLSR7ZS5hbGcuc2xpY2UoLTMpfWB9LHI9ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7Y2FzZSJSUzI1NiI6Y2FzZSJSUzM4NCI6Y2FzZSJSUzUxMiI6dD17bmFtZToiUlNBU1NBLVBLQ1MxLXYxXzUiLGhhc2g6YFNIQS0ke2UuYWxnLnNsaWNlKC0zKX1gfSxyPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2Nhc2UiUlNBLU9BRVAiOmNhc2UiUlNBLU9BRVAtMjU2IjpjYXNlIlJTQS1PQUVQLTM4NCI6Y2FzZSJSU0EtT0FFUC01MTIiOnQ9e25hbWU6IlJTQS1PQUVQIixoYXNoOmBTSEEtJHtwYXJzZUludChlLmFsZy5zbGljZSgtMyksMTApfHwxfWB9LHI9ZS5kP1siZGVjcnlwdCIsInVud3JhcEtleSJdOlsiZW5jcnlwdCIsIndyYXBLZXkiXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBlbignSW52YWxpZCBvciB1bnN1cHBvcnRlZCBKV0sgImFsZyIgKEFsZ29yaXRobSkgUGFyYW1ldGVyIHZhbHVlJyl9YnJlYWs7Y2FzZSJFQyI6c3dpdGNoKGUuYWxnKXtjYXNlIkVTMjU2Ijp0PXtuYW1lOiJFQ0RTQSIsbmFtZWRDdXJ2ZToiUC0yNTYifSxyPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2Nhc2UiRVMzODQiOnQ9e25hbWU6IkVDRFNBIixuYW1lZEN1cnZlOiJQLTM4NCJ9LHI9ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7Y2FzZSJFUzUxMiI6dD17bmFtZToiRUNEU0EiLG5hbWVkQ3VydmU6IlAtNTIxIn0scj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztjYXNlIkVDREgtRVMiOmNhc2UiRUNESC1FUytBMTI4S1ciOmNhc2UiRUNESC1FUytBMTkyS1ciOmNhc2UiRUNESC1FUytBMjU2S1ciOnQ9e25hbWU6IkVDREgiLG5hbWVkQ3VydmU6ZS5jcnZ9LHI9ZS5kP1siZGVyaXZlQml0cyJdOltdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IGVuKCdJbnZhbGlkIG9yIHVuc3VwcG9ydGVkIEpXSyAiYWxnIiAoQWxnb3JpdGhtKSBQYXJhbWV0ZXIgdmFsdWUnKX1icmVhaztjYXNlKGNuKCl8fHVuKCkpJiYiT0tQIjppZigiRWREU0EiIT09ZS5hbGcpdGhyb3cgbmV3IGVuKCdJbnZhbGlkIG9yIHVuc3VwcG9ydGVkIEpXSyAiYWxnIiAoQWxnb3JpdGhtKSBQYXJhbWV0ZXIgdmFsdWUnKTtzd2l0Y2goZS5jcnYpe2Nhc2UiRWQyNTUxOSI6dD17bmFtZToiTk9ERS1FRDI1NTE5IixuYW1lZEN1cnZlOiJOT0RFLUVEMjU1MTkifSxyPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2Nhc2UgdW4oKSYmIkVkNDQ4Ijp0PXtuYW1lOiJOT0RFLUVENDQ4IixuYW1lZEN1cnZlOiJOT0RFLUVENDQ4In0scj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBlbignSW52YWxpZCBvciB1bnN1cHBvcnRlZCBKV0sgImNydiIgKFN1YnR5cGUgb2YgS2V5IFBhaXIpIFBhcmFtZXRlciB2YWx1ZScpfWJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IGVuKCdJbnZhbGlkIG9yIHVuc3VwcG9ydGVkIEpXSyAia3R5IiAoS2V5IFR5cGUpIFBhcmFtZXRlciB2YWx1ZScpfXJldHVybnthbGdvcml0aG06dCxrZXlVc2FnZXM6cn19KGUpLG89W24sbnVsbCE9PSh0PWUuZXh0KSYmdm9pZCAwIT09dCYmdCxudWxsIT09KHI9ZS5rZXlfb3BzKSYmdm9pZCAwIT09cj9yOmldO2lmKCJQQktERjIiPT09bi5uYW1lKXJldHVybiBXci5zdWJ0bGUuaW1wb3J0S2V5KCJyYXciLFlyKGUuayksLi4ubyk7Y29uc3Qgcz17Li4uZX07cmV0dXJuIGRlbGV0ZSBzLmFsZyxXci5zdWJ0bGUuaW1wb3J0S2V5KCJqd2siLHMsLi4ubyl9O2NvbnN0IHduPShlLHQscik9PntlLnN0YXJ0c1dpdGgoIkhTIil8fCJkaXIiPT09ZXx8ZS5zdGFydHNXaXRoKCJQQkVTMiIpfHwvXkFcZHszfSg/OkdDTSk/S1ckLy50ZXN0KGUpPyhlPT57aWYoIShlIGluc3RhbmNlb2YgVWludDhBcnJheSkpe2lmKCFnbihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKHBuKGUsLi4ueW4sIlVpbnQ4QXJyYXkiKSk7aWYoInNlY3JldCIhPT1lLnR5cGUpdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt5bi5qb2luKCIgb3IgIil9IGluc3RhbmNlcyBmb3Igc3ltbWV0cmljIGFsZ29yaXRobXMgbXVzdCBiZSBvZiB0eXBlICJzZWNyZXQiYCl9fSkodCk6KChlLHQpPT57aWYoIWduKGUpKXRocm93IG5ldyBUeXBlRXJyb3IocG4oZSwuLi55bikpO2lmKCJzZWNyZXQiPT09ZS50eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoYCR7eW4uam9pbigiIG9yICIpfSBpbnN0YW5jZXMgZm9yIGFzeW1tZXRyaWMgYWxnb3JpdGhtcyBtdXN0IG5vdCBiZSBvZiB0eXBlICJzZWNyZXQiYCk7aWYoInNpZ24iPT09dCYmInB1YmxpYyI9PT1lLnR5cGUpdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt5bi5qb2luKCIgb3IgIil9IGluc3RhbmNlcyBmb3IgYXN5bW1ldHJpYyBhbGdvcml0aG0gc2lnbmluZyBtdXN0IGJlIG9mIHR5cGUgInByaXZhdGUiYCk7aWYoImRlY3J5cHQiPT09dCYmInB1YmxpYyI9PT1lLnR5cGUpdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt5bi5qb2luKCIgb3IgIil9IGluc3RhbmNlcyBmb3IgYXN5bW1ldHJpYyBhbGdvcml0aG0gZGVjcnlwdGlvbiBtdXN0IGJlIG9mIHR5cGUgInByaXZhdGUiYCk7aWYoZS5hbGdvcml0aG0mJiJ2ZXJpZnkiPT09dCYmInByaXZhdGUiPT09ZS50eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoYCR7eW4uam9pbigiIG9yICIpfSBpbnN0YW5jZXMgZm9yIGFzeW1tZXRyaWMgYWxnb3JpdGhtIHZlcmlmeWluZyBtdXN0IGJlIG9mIHR5cGUgInB1YmxpYyJgKTtpZihlLmFsZ29yaXRobSYmImVuY3J5cHQiPT09dCYmInByaXZhdGUiPT09ZS50eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoYCR7eW4uam9pbigiIG9yICIpfSBpbnN0YW5jZXMgZm9yIGFzeW1tZXRyaWMgYWxnb3JpdGhtIGVuY3J5cHRpb24gbXVzdCBiZSBvZiB0eXBlICJwdWJsaWMiYCl9KSh0LHIpfTtjb25zdCBfbj1hc3luYyhlLHQscixuKT0+e2NvbnN0IGk9YXdhaXQgZnVuY3Rpb24oZSx0LHIpe2lmKCRyKHQpKXJldHVybiBmbih0LGUsciksdDtpZih0IGluc3RhbmNlb2YgVWludDhBcnJheSl7aWYoIWUuc3RhcnRzV2l0aCgiSFMiKSl0aHJvdyBuZXcgVHlwZUVycm9yKHBuKHQsLi4ueW4pKTtyZXR1cm4gV3Iuc3VidGxlLmltcG9ydEtleSgicmF3Iix0LHtoYXNoOmBTSEEtJHtlLnNsaWNlKC0zKX1gLG5hbWU6IkhNQUMifSwhMSxbcl0pfXRocm93IG5ldyBUeXBlRXJyb3IocG4odCwuLi55biwiVWludDhBcnJheSIpKX0oZSx0LCJ2ZXJpZnkiKTsoKGUsdCk9PntpZihlLnN0YXJ0c1dpdGgoIlJTIil8fGUuc3RhcnRzV2l0aCgiUFMiKSl7Y29uc3R7bW9kdWx1c0xlbmd0aDpyfT10LmFsZ29yaXRobTtpZigibnVtYmVyIiE9dHlwZW9mIHJ8fHI8MjA0OCl0aHJvdyBuZXcgVHlwZUVycm9yKGAke2V9IHJlcXVpcmVzIGtleSBtb2R1bHVzTGVuZ3RoIHRvIGJlIDIwNDggYml0cyBvciBsYXJnZXJgKX19KShlLGkpO2NvbnN0IG89ZnVuY3Rpb24oZSx0KXtjb25zdCByPWBTSEEtJHtlLnNsaWNlKC0zKX1gO3N3aXRjaChlKXtjYXNlIkhTMjU2IjpjYXNlIkhTMzg0IjpjYXNlIkhTNTEyIjpyZXR1cm57aGFzaDpyLG5hbWU6IkhNQUMifTtjYXNlIlBTMjU2IjpjYXNlIlBTMzg0IjpjYXNlIlBTNTEyIjpyZXR1cm57aGFzaDpyLG5hbWU6IlJTQS1QU1MiLHNhbHRMZW5ndGg6ZS5zbGljZSgtMyk+PjN9O2Nhc2UiUlMyNTYiOmNhc2UiUlMzODQiOmNhc2UiUlM1MTIiOnJldHVybntoYXNoOnIsbmFtZToiUlNBU1NBLVBLQ1MxLXYxXzUifTtjYXNlIkVTMjU2IjpjYXNlIkVTMzg0IjpjYXNlIkVTNTEyIjpyZXR1cm57aGFzaDpyLG5hbWU6IkVDRFNBIixuYW1lZEN1cnZlOnQubmFtZWRDdXJ2ZX07Y2FzZShjbigpfHx1bigpKSYmIkVkRFNBIjpjb25zdHtuYW1lZEN1cnZlOm59PXQ7cmV0dXJue25hbWU6bixuYW1lZEN1cnZlOm59O2RlZmF1bHQ6dGhyb3cgbmV3IGVuKGBhbGcgJHtlfSBpcyBub3Qgc3VwcG9ydGVkIGVpdGhlciBieSBKT1NFIG9yIHlvdXIgamF2YXNjcmlwdCBydW50aW1lYCl9fShlLGkuYWxnb3JpdGhtKTt0cnl7cmV0dXJuIGF3YWl0IFdyLnN1YnRsZS52ZXJpZnkobyxpLHIsbil9Y2F0Y2goZSl7cmV0dXJuITF9fTthc3luYyBmdW5jdGlvbiBibihlLHQscil7dmFyIG47aWYoIXZuKGUpKXRocm93IG5ldyB0bigiRmxhdHRlbmVkIEpXUyBtdXN0IGJlIGFuIG9iamVjdCIpO2lmKHZvaWQgMD09PWUucHJvdGVjdGVkJiZ2b2lkIDA9PT1lLmhlYWRlcil0aHJvdyBuZXcgdG4oJ0ZsYXR0ZW5lZCBKV1MgbXVzdCBoYXZlIGVpdGhlciBvZiB0aGUgInByb3RlY3RlZCIgb3IgImhlYWRlciIgbWVtYmVycycpO2lmKHZvaWQgMCE9PWUucHJvdGVjdGVkJiYic3RyaW5nIiE9dHlwZW9mIGUucHJvdGVjdGVkKXRocm93IG5ldyB0bigiSldTIFByb3RlY3RlZCBIZWFkZXIgaW5jb3JyZWN0IHR5cGUiKTtpZih2b2lkIDA9PT1lLnBheWxvYWQpdGhyb3cgbmV3IHRuKCJKV1MgUGF5bG9hZCBtaXNzaW5nIik7aWYoInN0cmluZyIhPXR5cGVvZiBlLnNpZ25hdHVyZSl0aHJvdyBuZXcgdG4oIkpXUyBTaWduYXR1cmUgbWlzc2luZyBvciBpbmNvcnJlY3QgdHlwZSIpO2lmKHZvaWQgMCE9PWUuaGVhZGVyJiYhdm4oZS5oZWFkZXIpKXRocm93IG5ldyB0bigiSldTIFVucHJvdGVjdGVkIEhlYWRlciBpbmNvcnJlY3QgdHlwZSIpO2xldCBpPXt9O2lmKGUucHJvdGVjdGVkKXtjb25zdCB0PVlyKGUucHJvdGVjdGVkKTt0cnl7aT1KU09OLnBhcnNlKFZyLmRlY29kZSh0KSl9Y2F0Y2goZSl7dGhyb3cgbmV3IHRuKCJKV1MgUHJvdGVjdGVkIEhlYWRlciBpcyBpbnZhbGlkIil9fWlmKCEoKC4uLmUpPT57Y29uc3QgdD1lLmZpbHRlcihCb29sZWFuKTtpZigwPT09dC5sZW5ndGh8fDE9PT10Lmxlbmd0aClyZXR1cm4hMDtsZXQgcjtmb3IoY29uc3QgZSBvZiB0KXtjb25zdCB0PU9iamVjdC5rZXlzKGUpO2lmKHImJjAhPT1yLnNpemUpZm9yKGNvbnN0IGUgb2YgdCl7aWYoci5oYXMoZSkpcmV0dXJuITE7ci5hZGQoZSl9ZWxzZSByPW5ldyBTZXQodCl9cmV0dXJuITB9KShpLGUuaGVhZGVyKSl0aHJvdyBuZXcgdG4oIkpXUyBQcm90ZWN0ZWQgYW5kIEpXUyBVbnByb3RlY3RlZCBIZWFkZXIgUGFyYW1ldGVyIG5hbWVzIG11c3QgYmUgZGlzam9pbnQiKTtjb25zdCBvPXsuLi5pLC4uLmUuaGVhZGVyfSxzPWZ1bmN0aW9uKGUsdCxyLG4saSl7aWYodm9pZCAwIT09aS5jcml0JiZ2b2lkIDA9PT1uLmNyaXQpdGhyb3cgbmV3IGUoJyJjcml0IiAoQ3JpdGljYWwpIEhlYWRlciBQYXJhbWV0ZXIgTVVTVCBiZSBpbnRlZ3JpdHkgcHJvdGVjdGVkJyk7aWYoIW58fHZvaWQgMD09PW4uY3JpdClyZXR1cm4gbmV3IFNldDtpZighQXJyYXkuaXNBcnJheShuLmNyaXQpfHwwPT09bi5jcml0Lmxlbmd0aHx8bi5jcml0LnNvbWUoKGU9PiJzdHJpbmciIT10eXBlb2YgZXx8MD09PWUubGVuZ3RoKSkpdGhyb3cgbmV3IGUoJyJjcml0IiAoQ3JpdGljYWwpIEhlYWRlciBQYXJhbWV0ZXIgTVVTVCBiZSBhbiBhcnJheSBvZiBub24tZW1wdHkgc3RyaW5ncyB3aGVuIHByZXNlbnQnKTtsZXQgbztvPXZvaWQgMCE9PXI/bmV3IE1hcChbLi4uT2JqZWN0LmVudHJpZXMociksLi4udC5lbnRyaWVzKCldKTp0O2Zvcihjb25zdCB0IG9mIG4uY3JpdCl7aWYoIW8uaGFzKHQpKXRocm93IG5ldyBlbihgRXh0ZW5zaW9uIEhlYWRlciBQYXJhbWV0ZXIgIiR7dH0iIGlzIG5vdCByZWNvZ25pemVkYCk7aWYodm9pZCAwPT09aVt0XSl0aHJvdyBuZXcgZShgRXh0ZW5zaW9uIEhlYWRlciBQYXJhbWV0ZXIgIiR7dH0iIGlzIG1pc3NpbmdgKTtpZihvLmdldCh0KSYmdm9pZCAwPT09blt0XSl0aHJvdyBuZXcgZShgRXh0ZW5zaW9uIEhlYWRlciBQYXJhbWV0ZXIgIiR7dH0iIE1VU1QgYmUgaW50ZWdyaXR5IHByb3RlY3RlZGApfXJldHVybiBuZXcgU2V0KG4uY3JpdCl9KHRuLG5ldyBNYXAoW1siYjY0IiwhMF1dKSxudWxsPT1yP3ZvaWQgMDpyLmNyaXQsaSxvKTtsZXQgYT0hMDtpZihzLmhhcygiYjY0IikmJihhPWkuYjY0LCJib29sZWFuIiE9dHlwZW9mIGEpKXRocm93IG5ldyB0bignVGhlICJiNjQiIChiYXNlNjR1cmwtZW5jb2RlIHBheWxvYWQpIEhlYWRlciBQYXJhbWV0ZXIgbXVzdCBiZSBhIGJvb2xlYW4nKTtjb25zdHthbGc6Y309bztpZigic3RyaW5nIiE9dHlwZW9mIGN8fCFjKXRocm93IG5ldyB0bignSldTICJhbGciIChBbGdvcml0aG0pIEhlYWRlciBQYXJhbWV0ZXIgbWlzc2luZyBvciBpbnZhbGlkJyk7Y29uc3QgdT1yJiYoKGUsdCk9PntpZih2b2lkIDAhPT10JiYoIUFycmF5LmlzQXJyYXkodCl8fHQuc29tZSgoZT0+InN0cmluZyIhPXR5cGVvZiBlKSkpKXRocm93IG5ldyBUeXBlRXJyb3IoYCIke2V9IiBvcHRpb24gbXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdzYCk7aWYodClyZXR1cm4gbmV3IFNldCh0KX0pKCJhbGdvcml0aG1zIixyLmFsZ29yaXRobXMpO2lmKHUmJiF1LmhhcyhjKSl0aHJvdyBuZXcgUXIoJyJhbGciIChBbGdvcml0aG0pIEhlYWRlciBQYXJhbWV0ZXIgbm90IGFsbG93ZWQnKTtpZihhKXtpZigic3RyaW5nIiE9dHlwZW9mIGUucGF5bG9hZCl0aHJvdyBuZXcgdG4oIkpXUyBQYXlsb2FkIG11c3QgYmUgYSBzdHJpbmciKX1lbHNlIGlmKCJzdHJpbmciIT10eXBlb2YgZS5wYXlsb2FkJiYhKGUucGF5bG9hZCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKXRocm93IG5ldyB0bigiSldTIFBheWxvYWQgbXVzdCBiZSBhIHN0cmluZyBvciBhbiBVaW50OEFycmF5IGluc3RhbmNlIik7bGV0IGw9ITE7ImZ1bmN0aW9uIj09dHlwZW9mIHQmJih0PWF3YWl0IHQoaSxlKSxsPSEwKSx3bihjLHQsInZlcmlmeSIpO2NvbnN0IGg9ZnVuY3Rpb24oLi4uZSl7Y29uc3QgdD1lLnJlZHVjZSgoKGUse2xlbmd0aDp0fSk9PmUrdCksMCkscj1uZXcgVWludDhBcnJheSh0KTtsZXQgbj0wO3JldHVybiBlLmZvckVhY2goKGU9PntyLnNldChlLG4pLG4rPWUubGVuZ3RofSkpLHJ9KHpyLmVuY29kZShudWxsIT09KG49ZS5wcm90ZWN0ZWQpJiZ2b2lkIDAhPT1uP246IiIpLHpyLmVuY29kZSgiLiIpLCJzdHJpbmciPT10eXBlb2YgZS5wYXlsb2FkP3pyLmVuY29kZShlLnBheWxvYWQpOmUucGF5bG9hZCksZD1ZcihlLnNpZ25hdHVyZSk7aWYoIWF3YWl0IF9uKGMsdCxkLGgpKXRocm93IG5ldyBhbjtsZXQgZjtmPWE/WXIoZS5wYXlsb2FkKToic3RyaW5nIj09dHlwZW9mIGUucGF5bG9hZD96ci5lbmNvZGUoZS5wYXlsb2FkKTplLnBheWxvYWQ7Y29uc3QgcD17cGF5bG9hZDpmfTtyZXR1cm4gdm9pZCAwIT09ZS5wcm90ZWN0ZWQmJihwLnByb3RlY3RlZEhlYWRlcj1pKSx2b2lkIDAhPT1lLmhlYWRlciYmKHAudW5wcm90ZWN0ZWRIZWFkZXI9ZS5oZWFkZXIpLGw/ey4uLnAsa2V5OnR9OnB9Y29uc3QgU249ODY0MDAsRW49L14oXGQrfFxkK1wuXGQrKSA/KHNlY29uZHM/fHNlY3M/fHN8bWludXRlcz98bWlucz98bXxob3Vycz98aHJzP3xofGRheXM/fGR8d2Vla3M/fHd8eWVhcnM/fHlycz98eSkkL2k7dmFyIGtuPWU9Pntjb25zdCB0PUVuLmV4ZWMoZSk7aWYoIXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCB0aW1lIHBlcmlvZCBmb3JtYXQiKTtjb25zdCByPXBhcnNlRmxvYXQodFsxXSk7c3dpdGNoKHRbMl0udG9Mb3dlckNhc2UoKSl7Y2FzZSJzZWMiOmNhc2Uic2VjcyI6Y2FzZSJzZWNvbmQiOmNhc2Uic2Vjb25kcyI6Y2FzZSJzIjpyZXR1cm4gTWF0aC5yb3VuZChyKTtjYXNlIm1pbnV0ZSI6Y2FzZSJtaW51dGVzIjpjYXNlIm1pbiI6Y2FzZSJtaW5zIjpjYXNlIm0iOnJldHVybiBNYXRoLnJvdW5kKDYwKnIpO2Nhc2UiaG91ciI6Y2FzZSJob3VycyI6Y2FzZSJociI6Y2FzZSJocnMiOmNhc2UiaCI6cmV0dXJuIE1hdGgucm91bmQoMzYwMCpyKTtjYXNlImRheSI6Y2FzZSJkYXlzIjpjYXNlImQiOnJldHVybiBNYXRoLnJvdW5kKHIqU24pO2Nhc2Uid2VlayI6Y2FzZSJ3ZWVrcyI6Y2FzZSJ3IjpyZXR1cm4gTWF0aC5yb3VuZCg2MDQ4MDAqcik7ZGVmYXVsdDpyZXR1cm4gTWF0aC5yb3VuZCgzMTU1NzYwMCpyKX19O2NvbnN0IFRuPWU9PmUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9eYXBwbGljYXRpb25cLy8sIiIpO3ZhciBSbj0oZSx0LHI9e30pPT57Y29uc3R7dHlwOm59PXI7aWYobiYmKCJzdHJpbmciIT10eXBlb2YgZS50eXB8fFRuKGUudHlwKSE9PVRuKG4pKSl0aHJvdyBuZXcgWHIoJ3VuZXhwZWN0ZWQgInR5cCIgSldUIGhlYWRlciB2YWx1ZScsInR5cCIsImNoZWNrX2ZhaWxlZCIpO2xldCBpO3RyeXtpPUpTT04ucGFyc2UoVnIuZGVjb2RlKHQpKX1jYXRjaChlKXt9aWYoIXZuKGkpKXRocm93IG5ldyBybigiSldUIENsYWltcyBTZXQgbXVzdCBiZSBhIHRvcC1sZXZlbCBKU09OIG9iamVjdCIpO2NvbnN0e2lzc3VlcjpvfT1yO2lmKG8mJiEoQXJyYXkuaXNBcnJheShvKT9vOltvXSkuaW5jbHVkZXMoaS5pc3MpKXRocm93IG5ldyBYcigndW5leHBlY3RlZCAiaXNzIiBjbGFpbSB2YWx1ZScsImlzcyIsImNoZWNrX2ZhaWxlZCIpO2NvbnN0e3N1YmplY3Q6c309cjtpZihzJiZpLnN1YiE9PXMpdGhyb3cgbmV3IFhyKCd1bmV4cGVjdGVkICJzdWIiIGNsYWltIHZhbHVlJywic3ViIiwiY2hlY2tfZmFpbGVkIik7Y29uc3R7YXVkaWVuY2U6YX09cjtpZihhJiYoYz1pLmF1ZCx1PSJzdHJpbmciPT10eXBlb2YgYT9bYV06YSwhKCJzdHJpbmciPT10eXBlb2YgYz91LmluY2x1ZGVzKGMpOkFycmF5LmlzQXJyYXkoYykmJnUuc29tZShTZXQucHJvdG90eXBlLmhhcy5iaW5kKG5ldyBTZXQoYykpKSkpKXRocm93IG5ldyBYcigndW5leHBlY3RlZCAiYXVkIiBjbGFpbSB2YWx1ZScsImF1ZCIsImNoZWNrX2ZhaWxlZCIpO3ZhciBjLHU7bGV0IGw7c3dpdGNoKHR5cGVvZiByLmNsb2NrVG9sZXJhbmNlKXtjYXNlInN0cmluZyI6bD1rbihyLmNsb2NrVG9sZXJhbmNlKTticmVhaztjYXNlIm51bWJlciI6bD1yLmNsb2NrVG9sZXJhbmNlO2JyZWFrO2Nhc2UidW5kZWZpbmVkIjpsPTA7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGNsb2NrVG9sZXJhbmNlIG9wdGlvbiB0eXBlIil9Y29uc3R7Y3VycmVudERhdGU6aH09cixkPShmPWh8fG5ldyBEYXRlLE1hdGguZmxvb3IoZi5nZXRUaW1lKCkvMWUzKSk7dmFyIGY7aWYoKHZvaWQgMCE9PWkuaWF0fHxyLm1heFRva2VuQWdlKSYmIm51bWJlciIhPXR5cGVvZiBpLmlhdCl0aHJvdyBuZXcgWHIoJyJpYXQiIGNsYWltIG11c3QgYmUgYSBudW1iZXInLCJpYXQiLCJpbnZhbGlkIik7aWYodm9pZCAwIT09aS5uYmYpe2lmKCJudW1iZXIiIT10eXBlb2YgaS5uYmYpdGhyb3cgbmV3IFhyKCcibmJmIiBjbGFpbSBtdXN0IGJlIGEgbnVtYmVyJywibmJmIiwiaW52YWxpZCIpO2lmKGkubmJmPmQrbCl0aHJvdyBuZXcgWHIoJyJuYmYiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQnLCJuYmYiLCJjaGVja19mYWlsZWQiKX1pZih2b2lkIDAhPT1pLmV4cCl7aWYoIm51bWJlciIhPXR5cGVvZiBpLmV4cCl0aHJvdyBuZXcgWHIoJyJleHAiIGNsYWltIG11c3QgYmUgYSBudW1iZXInLCJleHAiLCJpbnZhbGlkIik7aWYoaS5leHA8PWQtbCl0aHJvdyBuZXcgWnIoJyJleHAiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQnLCJleHAiLCJjaGVja19mYWlsZWQiKX1pZihyLm1heFRva2VuQWdlKXtjb25zdCBlPWQtaS5pYXQ7aWYoZS1sPigibnVtYmVyIj09dHlwZW9mIHIubWF4VG9rZW5BZ2U/ci5tYXhUb2tlbkFnZTprbihyLm1heFRva2VuQWdlKSkpdGhyb3cgbmV3IFpyKCciaWF0IiBjbGFpbSB0aW1lc3RhbXAgY2hlY2sgZmFpbGVkICh0b28gZmFyIGluIHRoZSBwYXN0KScsImlhdCIsImNoZWNrX2ZhaWxlZCIpO2lmKGU8MC1sKXRocm93IG5ldyBYcignImlhdCIgY2xhaW0gdGltZXN0YW1wIGNoZWNrIGZhaWxlZCAoaXQgc2hvdWxkIGJlIGluIHRoZSBwYXN0KScsImlhdCIsImNoZWNrX2ZhaWxlZCIpfXJldHVybiBpfTthc3luYyBmdW5jdGlvbiBBbihlLHQscil7dmFyIG47Y29uc3QgaT1hd2FpdCBhc3luYyBmdW5jdGlvbihlLHQscil7aWYoZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkmJihlPVZyLmRlY29kZShlKSksInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyB0bigiQ29tcGFjdCBKV1MgbXVzdCBiZSBhIHN0cmluZyBvciBVaW50OEFycmF5Iik7Y29uc3R7MDpuLDE6aSwyOm8sbGVuZ3RoOnN9PWUuc3BsaXQoIi4iKTtpZigzIT09cyl0aHJvdyBuZXcgdG4oIkludmFsaWQgQ29tcGFjdCBKV1MiKTtjb25zdCBhPWF3YWl0IGJuKHtwYXlsb2FkOmkscHJvdGVjdGVkOm4sc2lnbmF0dXJlOm99LHQsciksYz17cGF5bG9hZDphLnBheWxvYWQscHJvdGVjdGVkSGVhZGVyOmEucHJvdGVjdGVkSGVhZGVyfTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD97Li4uYyxrZXk6YS5rZXl9OmN9KGUsdCxyKTtpZigobnVsbD09PShuPWkucHJvdGVjdGVkSGVhZGVyLmNyaXQpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmluY2x1ZGVzKCJiNjQiKSkmJiExPT09aS5wcm90ZWN0ZWRIZWFkZXIuYjY0KXRocm93IG5ldyBybigiSldUcyBNVVNUIE5PVCB1c2UgdW5lbmNvZGVkIHBheWxvYWQiKTtjb25zdCBvPXtwYXlsb2FkOlJuKGkucHJvdGVjdGVkSGVhZGVyLGkucGF5bG9hZCxyKSxwcm90ZWN0ZWRIZWFkZXI6aS5wcm90ZWN0ZWRIZWFkZXJ9O3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P3suLi5vLGtleTppLmtleX06b31mdW5jdGlvbiBDbihlKXtyZXR1cm4gdm4oZSl9Y2xhc3MgRG57Y29uc3RydWN0b3IoZSl7aWYodGhpcy5fY2FjaGVkPW5ldyBXZWFrTWFwLCFmdW5jdGlvbihlKXtyZXR1cm4gZSYmIm9iamVjdCI9PXR5cGVvZiBlJiZBcnJheS5pc0FycmF5KGUua2V5cykmJmUua2V5cy5ldmVyeShDbil9KGUpKXRocm93IG5ldyBubigiSlNPTiBXZWIgS2V5IFNldCBtYWxmb3JtZWQiKTt2YXIgdDt0aGlzLl9qd2tzPSh0PWUsImZ1bmN0aW9uIj09dHlwZW9mIHN0cnVjdHVyZWRDbG9uZT9zdHJ1Y3R1cmVkQ2xvbmUodCk6SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0KSkpfWFzeW5jIGdldEtleShlLHQpe2NvbnN0e2FsZzpyLGtpZDpufT17Li4uZSwuLi50LmhlYWRlcn0saT1mdW5jdGlvbihlKXtzd2l0Y2goInN0cmluZyI9PXR5cGVvZiBlJiZlLnNsaWNlKDAsMikpe2Nhc2UiUlMiOmNhc2UiUFMiOnJldHVybiJSU0EiO2Nhc2UiRVMiOnJldHVybiJFQyI7Y2FzZSJFZCI6cmV0dXJuIk9LUCI7ZGVmYXVsdDp0aHJvdyBuZXcgZW4oJ1Vuc3VwcG9ydGVkICJhbGciIHZhbHVlIGZvciBhIEpTT04gV2ViIEtleSBTZXQnKX19KHIpLG89dGhpcy5fandrcy5rZXlzLmZpbHRlcigoZT0+e2xldCB0PWk9PT1lLmt0eTtpZih0JiYic3RyaW5nIj09dHlwZW9mIG4mJih0PW49PT1lLmtpZCksdCYmInN0cmluZyI9PXR5cGVvZiBlLmFsZyYmKHQ9cj09PWUuYWxnKSx0JiYic3RyaW5nIj09dHlwZW9mIGUudXNlJiYodD0ic2lnIj09PWUudXNlKSx0JiZBcnJheS5pc0FycmF5KGUua2V5X29wcykmJih0PWUua2V5X29wcy5pbmNsdWRlcygidmVyaWZ5IikpLHQmJiJFZERTQSI9PT1yJiYodD0iRWQyNTUxOSI9PT1lLmNydnx8IkVkNDQ4Ij09PWUuY3J2KSx0KXN3aXRjaChyKXtjYXNlIkVTMjU2Ijp0PSJQLTI1NiI9PT1lLmNydjticmVhaztjYXNlIkVTMjU2SyI6dD0ic2VjcDI1NmsxIj09PWUuY3J2O2JyZWFrO2Nhc2UiRVMzODQiOnQ9IlAtMzg0Ij09PWUuY3J2O2JyZWFrO2Nhc2UiRVM1MTIiOnQ9IlAtNTIxIj09PWUuY3J2fXJldHVybiB0fSkpLHswOnMsbGVuZ3RoOmF9PW87aWYoMD09PWEpdGhyb3cgbmV3IG9uO2lmKDEhPT1hKXRocm93IG5ldyBzbjtjb25zdCBjPXRoaXMuX2NhY2hlZC5nZXQocyl8fHRoaXMuX2NhY2hlZC5zZXQocyx7fSkuZ2V0KHMpO2lmKHZvaWQgMD09PWNbcl0pe2NvbnN0IGU9YXdhaXQgYXN5bmMgZnVuY3Rpb24oZSx0LHIpe2lmKCF2bihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJKV0sgbXVzdCBiZSBhbiBvYmplY3QiKTtpZih0fHwodD1lLmFsZyksInN0cmluZyIhPXR5cGVvZiB0fHwhdCl0aHJvdyBuZXcgVHlwZUVycm9yKCciYWxnIiBhcmd1bWVudCBpcyByZXF1aXJlZCB3aGVuICJqd2suYWxnIiBpcyBub3QgcHJlc2VudCcpO3N3aXRjaChlLmt0eSl7Y2FzZSJvY3QiOmlmKCJzdHJpbmciIT10eXBlb2YgZS5rfHwhZS5rKXRocm93IG5ldyBUeXBlRXJyb3IoJ21pc3NpbmcgImsiIChLZXkgVmFsdWUpIFBhcmFtZXRlciB2YWx1ZScpO3JldHVybiBudWxsIT1yfHwocj0hMCE9PWUuZXh0KSxyP21uKHsuLi5lLGFsZzp0LGV4dDohMX0pOllyKGUuayk7Y2FzZSJSU0EiOmlmKHZvaWQgMCE9PWUub3RoKXRocm93IG5ldyBlbignUlNBIEpXSyAib3RoIiAoT3RoZXIgUHJpbWVzIEluZm8pIFBhcmFtZXRlciB2YWx1ZSBpcyBub3Qgc3VwcG9ydGVkJyk7Y2FzZSJFQyI6Y2FzZSJPS1AiOnJldHVybiBtbih7Li4uZSxhbGc6dH0pO2RlZmF1bHQ6dGhyb3cgbmV3IGVuKCdVbnN1cHBvcnRlZCAia3R5IiAoS2V5IFR5cGUpIFBhcmFtZXRlciB2YWx1ZScpfX0oey4uLnMsZXh0OiEwfSxyKTtpZihlIGluc3RhbmNlb2YgVWludDhBcnJheXx8InB1YmxpYyIhPT1lLnR5cGUpdGhyb3cgbmV3IG5uKCJKU09OIFdlYiBLZXkgU2V0IG1lbWJlcnMgbXVzdCBiZSBwdWJsaWMga2V5cyIpO2Nbcl09ZX1yZXR1cm4gY1tyXX19dmFyIFBuPXtleHBvcnRzOnt9fSxPbj17ZXhwb3J0czp7fX0sSW49RShJcik7Ci8qISBzYWZlLWJ1ZmZlci4gTUlUIExpY2Vuc2UuIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZy9vcGVuc291cmNlPiAqLwohZnVuY3Rpb24oZSx0KXt2YXIgcj1JbixuPXIuQnVmZmVyO2Z1bmN0aW9uIGkoZSx0KXtmb3IodmFyIHIgaW4gZSl0W3JdPWVbcl19ZnVuY3Rpb24gbyhlLHQscil7cmV0dXJuIG4oZSx0LHIpfW4uZnJvbSYmbi5hbGxvYyYmbi5hbGxvY1Vuc2FmZSYmbi5hbGxvY1Vuc2FmZVNsb3c/ZS5leHBvcnRzPXI6KGkocix0KSx0LkJ1ZmZlcj1vKSxvLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG4ucHJvdG90eXBlKSxpKG4sbyksby5mcm9tPWZ1bmN0aW9uKGUsdCxyKXtpZigibnVtYmVyIj09dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gbihlLHQscil9LG8uYWxsb2M9ZnVuY3Rpb24oZSx0LHIpe2lmKCJudW1iZXIiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7dmFyIGk9bihlKTtyZXR1cm4gdm9pZCAwIT09dD8ic3RyaW5nIj09dHlwZW9mIHI/aS5maWxsKHQscik6aS5maWxsKHQpOmkuZmlsbCgwKSxpfSxvLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIG4oZSl9LG8uYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIHIuU2xvd0J1ZmZlcihlKX19KE9uLE9uLmV4cG9ydHMpO3ZhciBVbj02NTUzNixMbj00Mjk0OTY3Mjk1O3ZhciBIbj1Pbi5leHBvcnRzLkJ1ZmZlcixNbj1iLmNyeXB0b3x8Yi5tc0NyeXB0bztNbiYmTW4uZ2V0UmFuZG9tVmFsdWVzP1BuLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZihlPkxuKXRocm93IG5ldyBSYW5nZUVycm9yKCJyZXF1ZXN0ZWQgdG9vIG1hbnkgcmFuZG9tIGJ5dGVzIik7dmFyIHI9SG4uYWxsb2NVbnNhZmUoZSk7aWYoZT4wKWlmKGU+VW4pZm9yKHZhciBuPTA7bjxlO24rPVVuKU1uLmdldFJhbmRvbVZhbHVlcyhyLnNsaWNlKG4sbitVbikpO2Vsc2UgTW4uZ2V0UmFuZG9tVmFsdWVzKHIpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0KXJldHVybiBmZS5uZXh0VGljaygoZnVuY3Rpb24oKXt0KG51bGwscil9KSk7cmV0dXJuIHJ9OlBuLmV4cG9ydHM9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlNlY3VyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGJyb3dzZXIuXG5Vc2UgQ2hyb21lLCBGaXJlZm94IG9yIEludGVybmV0IEV4cGxvcmVyIDExIil9O3ZhciBObj1Qbi5leHBvcnRzO2NsYXNzIGpue2Jhc2U2NFVSTEVuY29kZShlKXtyZXR1cm4gSnIuZW5jb2RlKGUpLnJlcGxhY2UoL1wrL2csIi0iKS5yZXBsYWNlKC9cLy9nLCJfIikucmVwbGFjZSgvPS9nLCIiKX1iYXNlNjRVUkxEZWNvZGUoZSl7cmV0dXJuIEpyLmRlY29kZShlKS50b1N0cmluZygpfWhhc2hTaGEyNTYoZSl7cmV0dXJuIHp0LmZyb20oRnIoKG5ldyBUZXh0RW5jb2RlcikuZW5jb2RlKGUpKSl9Z2VuZXJhdGVSYW5kb21CeXRlcyhlKXtyZXR1cm4gTm4oZSl9dmVyaWZ5Snd0KGUsdCxyLG4saSxvLHMpe3JldHVybiBBbihlLChhPXtrZXlzOlt0XX0sRG4ucHJvdG90eXBlLmdldEtleS5iaW5kKG5ldyBEbihhKSkpLHthbGdvcml0aG1zOnIsYXVkaWVuY2U6bixjbG9ja1RvbGVyYW5jZTpzLGlzc3VlcjppLHN1YmplY3Q6b30pLnRoZW4oKCgpPT5Qcm9taXNlLnJlc29sdmUoITApKSk7dmFyIGF9fWNvbnN0IHhuPXNlbGY7bGV0IHFuO3huLm9ubWVzc2FnZT0oe2RhdGE6dCxwb3J0czpyfSk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3ZhciBuLGksbyxzO2NvbnN0IGM9clswXTtpZih0LnR5cGU9PT1nfHxxbilzd2l0Y2godC50eXBlKXtjYXNlIGc6dHJ5e2NvbnN0IHI9T2JqZWN0LmFzc2lnbih7fSx0LmRhdGEpO3FuPXlpZWxkKHQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHI9bmV3IEl0LG49bmV3IGpuLGk9bmV3IHAocixuKTt5aWVsZCBpLmluaXRpYWxpemUodCk7Y29uc3Qgbz1uZXcgdyhpKSxzPWkuZ2V0RGF0YUxheWVyKCksYz1PdC5nZXRJbnN0YW5jZSgpOyhudWxsPT1jP3ZvaWQgMDpjLmluaXQpJiYoeWllbGQgYy5pbml0KCEwLCh0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtPYmplY3QuYXNzaWduKHthdHRhY2hUb2tlbjohMH0sdCkuYXR0YWNoVG9rZW4mJih0LmhlYWRlcnM9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuaGVhZGVycykse0F1dGhvcml6YXRpb246YEJlYXJlciAke3lpZWxkIGkuZ2V0QWNjZXNzVG9rZW4oKX1gfSkpfSkpKSkpO2NvbnN0IHU9dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIHIsbixjO2xldCB1PSEwLGw9ITE7aWYobnVsbD09dD92b2lkIDA6dC50b2tlbkVuZHBvaW50KXt1PSExO2Zvcihjb25zdCBlIG9mWy4uLm51bGwhPT0obj1udWxsPT09KHI9eWllbGQgcy5nZXRDb25maWdEYXRhKCkpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLnJlc291cmNlU2VydmVyVVJMcykmJnZvaWQgMCE9PW4/bjpbXSx0LmJhc2VVcmxdKWlmKGUmJihudWxsPT09KGM9dC50b2tlbkVuZHBvaW50KXx8dm9pZCAwPT09Yz92b2lkIDA6Yy5zdGFydHNXaXRoKGUpKSl7bD0hMDticmVha319cmV0dXJuIHQuc2hvdWxkUmVwbGF5QWZ0ZXJSZWZyZXNoJiZzLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIobSxKU09OLnN0cmluZ2lmeSh0KSksdXx8bD9pLnJlcXVlc3RDdXN0b21HcmFudCh0KS50aGVuKChyPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdC5yZXR1cm5zU2Vzc2lvbj8oby5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KCksaS5nZXRCYXNpY1VzZXJJbmZvKCkpOnJ9KSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QoZSkpKTpQcm9taXNlLnJlamVjdChuZXcgYSgiU1BBLVdPUktFUl9DT1JFLVJDRy1JVjAxIiwiUmVxdWVzdCB0byB0aGUgcHJvdmlkZWQgZW5kcG9pbnQgaXMgcHJvaGliaXRlZC4iLCJSZXF1ZXN0cyBjYW4gb25seSBiZSBzZW50IHRvIHJlc291cmNlIHNlcnZlcnMgc3BlY2lmaWVkIGJ5IHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCBhdHRyaWJ1dGUgd2hpbGUgaW5pdGlhbGl6aW5nIHRoZSBTREsuIFRoZSBzcGVjaWZpZWQgdG9rZW4gZW5kcG9pbnQgaW4gdGhpcyByZXF1ZXN0IGNhbm5vdCBiZSBmb3VuZCBhbW9uZyB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AiKSl9KSksbD0oKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dHJ5e3lpZWxkIGkucmVmcmVzaEFjY2Vzc1Rva2VuKCk7Y29uc3QgZT15aWVsZCBoKCk7cmV0dXJuIGUmJih5aWVsZCB1KGUpKSxvLnJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkoKSxpLmdldEJhc2ljVXNlckluZm8oKX1jYXRjaChlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9fSkpLGg9KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9eWllbGQgcy5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKG0pO3JldHVybiBlP0pTT04ucGFyc2UoZSk6bnVsbH0pKTtyZXR1cm57ZGlzYWJsZUh0dHBIYW5kbGVyOigpPT57Yy5kaXNhYmxlSGFuZGxlciYmYy5kaXNhYmxlSGFuZGxlcigpfSxlbmFibGVIdHRwSGFuZGxlcjooKT0+e2MuZW5hYmxlSGFuZGxlciYmYy5lbmFibGVIYW5kbGVyKCl9LGdldEFjY2Vzc1Rva2VuOigpPT5pLmdldEFjY2Vzc1Rva2VuKCksZ2V0QXV0aG9yaXphdGlvblVSTDp0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gaS5nZXRBdXRob3JpemF0aW9uVVJMKHQpLnRoZW4oKHQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3ZhciBlO2NvbnN0IHI9bnVsbCE9PShlPW5ldyBVUkwodCkuc2VhcmNoUGFyYW1zLmdldCgic3RhdGUiKSkmJnZvaWQgMCE9PWU/ZToiIixuPXlpZWxkIGkuZ2V0UEtDRUNvZGUocik7cmV0dXJue2F1dGhvcml6YXRpb25VUkw6dCxwa2NlOm59fSkpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KGUpKSl9KSksZ2V0QmFzaWNVc2VySW5mbzooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIGkuZ2V0QmFzaWNVc2VySW5mbygpfSkpLGdldENvbmZpZ0RhdGE6KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBzLmdldENvbmZpZ0RhdGEoKX0pKSxnZXREZWNvZGVkSURUb2tlbjooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIGkuZ2V0RGVjb2RlZElEVG9rZW4oKX0pKSxnZXRJRFRva2VuOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gaS5nZXRJRFRva2VuKCl9KSksZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHM6KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBpLmdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCl9KSksZ2V0U2lnbk91dFVSTDooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIGkuZ2V0U2lnbk91dFVSTCgpfSkpLGh0dHBSZXF1ZXN0OnI9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3ZhciBuLGksbztsZXQgdT0hMTtmb3IoY29uc3QgZSBvZlsuLi5udWxsIT09KGk9bnVsbD09PShuPXlpZWxkIHMuZ2V0Q29uZmlnRGF0YSgpKXx8dm9pZCAwPT09bj92b2lkIDA6bi5yZXNvdXJjZVNlcnZlclVSTHMpJiZ2b2lkIDAhPT1pP2k6W10sdC5iYXNlVXJsXSlpZihlJiYobnVsbD09PShvPW51bGw9PXI/dm9pZCAwOnIudXJsKXx8dm9pZCAwPT09bz92b2lkIDA6by5zdGFydHNXaXRoKGUpKSl7dT0hMDticmVha31yZXR1cm4gdT9jLnJlcXVlc3QocikudGhlbigoZT0+UHJvbWlzZS5yZXNvbHZlKGUpKSkuY2F0Y2goKHQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3ZhciBlLG4saTtpZig0MDE9PT0obnVsbD09PShlPW51bGw9PXQ/dm9pZCAwOnQucmVzcG9uc2UpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLnN0YXR1cyl8fCEobnVsbD09dD92b2lkIDA6dC5yZXNwb25zZSkpe2xldCBlO3RyeXtlPXlpZWxkIGwoKX1jYXRjaChlKXt0aHJvdyBuZXcgYSgiU1BBLVdPUktFUl9DT1JFLUhSLVNFMDEiLG51bGwhPT0obj1udWxsPT1lP3ZvaWQgMDplLm5hbWUpJiZ2b2lkIDAhPT1uP246IlJlZnJlc2ggdG9rZW4gcmVxdWVzdCBmYWlsZWQuIixudWxsIT09KGk9bnVsbD09ZT92b2lkIDA6ZS5tZXNzYWdlKSYmdm9pZCAwIT09aT9pOiJBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0cnlpbmcgdG8gcmVmcmVzaCB0aGUgYWNjZXNzIHRva2VuIGZvbGxvd2luZyBhIDQwMSByZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXIuIil9aWYoZSlyZXR1cm4gYy5yZXF1ZXN0KHIpLnRoZW4oKGU9PlByb21pc2UucmVzb2x2ZShlKSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChlKSkpfXJldHVybiBQcm9taXNlLnJlamVjdCh0KX0pKSkpOlByb21pc2UucmVqZWN0KG5ldyBhKCJTUEEtV09SS0VSX0NPUkUtSFItSVYwMiIsIlJlcXVlc3QgdG8gdGhlIHByb3ZpZGVkIGVuZHBvaW50IGlzIHByb2hpYml0ZWQuIiwiUmVxdWVzdHMgY2FuIG9ubHkgYmUgc2VudCB0byByZXNvdXJjZSBzZXJ2ZXJzIHNwZWNpZmllZCBieSB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AgYXR0cmlidXRlIHdoaWxlIGluaXRpYWxpemluZyB0aGUgU0RLLiBUaGUgc3BlY2lmaWVkIGVuZHBvaW50IGluIHRoaXMgcmVxdWVzdCBjYW5ub3QgYmUgZm91bmQgYW1vbmcgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIikpfSkpLGh0dHBSZXF1ZXN0QWxsOnI9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3ZhciBuLGksbztsZXQgdT0hMDtmb3IoY29uc3QgZSBvZiByKXtsZXQgcj0hMTtmb3IoY29uc3QgYSBvZlsuLi5udWxsIT09KGk9bnVsbD09PShuPXlpZWxkIHMuZ2V0Q29uZmlnRGF0YSgpKXx8dm9pZCAwPT09bj92b2lkIDA6bi5yZXNvdXJjZVNlcnZlclVSTHMpJiZ2b2lkIDAhPT1pP2k6W10sdC5iYXNlVXJsXSlpZihhJiYobnVsbD09PShvPWUudXJsKXx8dm9pZCAwPT09bz92b2lkIDA6by5zdGFydHNXaXRoKGEpKSl7cj0hMDticmVha31pZighcil7dT0hMTticmVha319Y29uc3QgaD1bXTtyZXR1cm4gdT8oci5mb3JFYWNoKChlPT57aC5wdXNoKGMucmVxdWVzdChlKSl9KSksKG51bGw9PWM/dm9pZCAwOmMuYWxsKSYmYy5hbGwoaCkudGhlbigoZT0+UHJvbWlzZS5yZXNvbHZlKGUpKSkuY2F0Y2goKHQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3ZhciBlLHIsbjtpZig0MDE9PT0obnVsbD09PShlPW51bGw9PXQ/dm9pZCAwOnQucmVzcG9uc2UpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLnN0YXR1cykpe2xldCBlO3RyeXtlPXlpZWxkIGwoKX1jYXRjaChlKXt0aHJvdyBuZXcgYSgiU1BBLVdPUktFUl9DT1JFLUhSQS1TRTAxIixudWxsIT09KHI9bnVsbD09ZT92b2lkIDA6ZS5uYW1lKSYmdm9pZCAwIT09cj9yOiJSZWZyZXNoIHRva2VuIHJlcXVlc3QgZmFpbGVkLiIsbnVsbCE9PShuPW51bGw9PWU/dm9pZCAwOmUubWVzc2FnZSkmJnZvaWQgMCE9PW4/bjoiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIHJlZnJlc2ggdGhlIGFjY2VzcyB0b2tlbiBmb2xsb3dpbmcgYSA0MDEgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyLiIpfWlmKGUpcmV0dXJuIGMuYWxsJiZjLmFsbChoKS50aGVuKChlPT5Qcm9taXNlLnJlc29sdmUoZSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QoZSkpKX1yZXR1cm4gUHJvbWlzZS5yZWplY3QodCl9KSkpKSk6UHJvbWlzZS5yZWplY3QobmV3IGEoIlNQQS1XT1JLRVJfQ09SRS1IUkEtSVYwMiIsIlJlcXVlc3QgdG8gdGhlIHByb3ZpZGVkIGVuZHBvaW50IGlzIHByb2hpYml0ZWQuIiwiUmVxdWVzdHMgY2FuIG9ubHkgYmUgc2VudCB0byByZXNvdXJjZSBzZXJ2ZXJzIHNwZWNpZmllZCBieSB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AgYXR0cmlidXRlIHdoaWxlIGluaXRpYWxpemluZyB0aGUgU0RLLiBUaGUgc3BlY2lmaWVkIGVuZHBvaW50IGluIHRoaXMgcmVxdWVzdCBjYW5ub3QgYmUgZm91bmQgYW1vbmcgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIikpfSkpLGlzQXV0aGVudGljYXRlZDooKT0+aS5pc0F1dGhlbnRpY2F0ZWQoKSxyZWZyZXNoQWNjZXNzVG9rZW46bCxyZXF1ZXN0QWNjZXNzVG9rZW46KHQscixuLGMpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPXlpZWxkIHMuZ2V0Q29uZmlnRGF0YSgpO3JldHVybiBuJiZlLmVuYWJsZVBLQ0UmJih5aWVsZCBpLnNldFBLQ0VDb2RlKG4sbnVsbCE9Yz9jOiIiKSksdD9pLnJlcXVlc3RBY2Nlc3NUb2tlbih0LG51bGwhPXI/cjoiIixudWxsIT1jP2M6IiciKS50aGVuKCgoKT0+KG8ucmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSgpLGkuZ2V0QmFzaWNVc2VySW5mbygpKSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChlKSkpOlByb21pc2UucmVqZWN0KG5ldyBhKCJTUEEtV09SS0VSX0NPUkUtUkFUMS1ORjAxIiwiTm8gYXV0aG9yaXphdGlvbiBjb2RlLiIsIk5vIGF1dGhvcml6YXRpb24gY29kZSB3YXMgZm91bmQuIikpfSkpLHJlcXVlc3RDdXN0b21HcmFudDp1LHJldm9rZUFjY2Vzc1Rva2VuOigpPT5pLnJldm9rZUFjY2Vzc1Rva2VuKCkudGhlbigoKCk9PihvLmNsZWFyUmVmcmVzaFRva2VuVGltZW91dCgpLFByb21pc2UucmVzb2x2ZSghMCkpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KGUpKSksc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjazplPT57KG51bGw9PWM/dm9pZCAwOmMuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjaykmJmMuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjayhlKX0sc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrOmU9PnsobnVsbD09Yz92b2lkIDA6Yy5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2spJiZjLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjayhlKX0sc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2s6ZT0+eyhudWxsPT1jP3ZvaWQgMDpjLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKSYmYy5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayhlKX0sc2V0U2Vzc2lvblN0YXRlOnQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHMuc2V0U2Vzc2lvbkRhdGFQYXJhbWV0ZXIoInNlc3Npb25fc3RhdGUiLHQpfSkpLHNpZ25PdXQ6KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBvLmNsZWFyUmVmcmVzaFRva2VuVGltZW91dCgpLHlpZWxkIGkuc2lnbk91dCgpfSkpLHN0YXJ0QXV0b1JlZnJlc2hUb2tlbjooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7by5jbGVhclJlZnJlc2hUb2tlblRpbWVvdXQoKSxvLnJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkoKX0pKSx1cGRhdGVDb25maWc6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgaS51cGRhdGVDb25maWcodCl9KSl9fSkpKShyKSxxbi5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKEJuKSxxbi5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2soS24pLHFuLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKEpuKSxjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSgpKX1jYXRjaChlKXtjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXRfYXV0aF91cmwiOnFuLmdldEF1dGhvcml6YXRpb25VUkwobnVsbD09dD92b2lkIDA6dC5kYXRhKS50aGVuKChlPT57Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2UicmVxdWVzdF9nZXRfdG9rZW4iOnFuLnJlcXVlc3RBY2Nlc3NUb2tlbihudWxsPT09KG49bnVsbD09dD92b2lkIDA6dC5kYXRhKXx8dm9pZCAwPT09bj92b2lkIDA6bi5jb2RlLG51bGw9PT0oaT1udWxsPT10P3ZvaWQgMDp0LmRhdGEpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLnNlc3Npb25TdGF0ZSxudWxsPT09KG89bnVsbD09dD92b2lkIDA6dC5kYXRhKXx8dm9pZCAwPT09bz92b2lkIDA6by5wa2NlLG51bGw9PT0ocz1udWxsPT10P3ZvaWQgMDp0LmRhdGEpfHx2b2lkIDA9PT1zP3ZvaWQgMDpzLnN0YXRlKS50aGVuKChlPT57Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2UiaHR0cC1yZXF1ZXN0Ijpxbi5odHRwUmVxdWVzdCh0LmRhdGEpLnRoZW4oKGU9PntjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9PntjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSk7YnJlYWs7Y2FzZSJodHRwLXJlcXVlc3QtYWxsIjpxbi5odHRwUmVxdWVzdEFsbCh0LmRhdGEpLnRoZW4oKGU9PntjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9PntjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSk7YnJlYWs7Y2FzZSJzaWduLW91dCI6dHJ5e2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHFuLnNpZ25PdXQoKSkpfWNhdGNoKGUpe2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlInJlcXVlc3QtY3VzdG9tLWdyYW50Ijpxbi5yZXF1ZXN0Q3VzdG9tR3JhbnQodC5kYXRhKS50aGVuKChlPT57Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2UicmV2b2tlLWFjY2Vzcy10b2tlbiI6cW4ucmV2b2tlQWNjZXNzVG9rZW4oKS50aGVuKChlPT57Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2UiZ2V0LW9pZGMtc2VydmljZS1lbmRwb2ludHMiOnRyeXtjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCBxbi5nZXRPSURDU2VydmljZUVuZHBvaW50cygpKSl9Y2F0Y2goZSl7Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0LWJhc2ljLXVzZXItaW5mbyI6dHJ5e2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHFuLmdldEJhc2ljVXNlckluZm8oKSkpfWNhdGNoKGUpe2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlImdldC1kZWNvZGVkLWlkLXRva2VuIjp0cnl7Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgcW4uZ2V0RGVjb2RlZElEVG9rZW4oKSkpfWNhdGNoKGUpe2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlImdldF9pZF90b2tlbiI6dHJ5e2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHFuLmdldElEVG9rZW4oKSkpfWNhdGNoKGUpe2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlImVuYWJsZV9odHRwX2hhbmRsZXIiOnFuLmVuYWJsZUh0dHBIYW5kbGVyKCksYy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoKSk7YnJlYWs7Y2FzZSJkaXNhYmxlX2h0dHBfaGFuZGxlciI6cW4uZGlzYWJsZUh0dHBIYW5kbGVyKCksYy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoKSk7YnJlYWs7Y2FzZSJpc19hdXRoZW50aWNhdGVkIjp0cnl7Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgcW4uaXNBdXRoZW50aWNhdGVkKCkpKX1jYXRjaChlKXtjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXRfc2lnbl9vdXRfdXJsIjp0cnl7Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgcW4uZ2V0U2lnbk91dFVSTCgpKSl9Y2F0Y2goZSl7Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UicmVmcmVzaF9hY2Nlc3MtdG9rZW4iOnRyeXtjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCBxbi5yZWZyZXNoQWNjZXNzVG9rZW4oKSkpfWNhdGNoKGUpe2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlInN0YXJ0X2F1dG9fcmVmcmVzaF90b2tlbiI6dHJ5e2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHFuLnN0YXJ0QXV0b1JlZnJlc2hUb2tlbigpKSl9Y2F0Y2goZSl7Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2Uic2V0X3Nlc3Npb25fc3RhdGUiOnRyeXtjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCBxbi5zZXRTZXNzaW9uU3RhdGUobnVsbD09dD92b2lkIDA6dC5kYXRhKSkpfWNhdGNoKGUpe2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlInVwZGF0ZV9jb25maWciOnRyeXtjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCBxbi51cGRhdGVDb25maWcobnVsbD09dD92b2lkIDA6dC5kYXRhKSkpfWNhdGNoKGUpe2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlImdldF9jb25maWdfZGF0YSI6dHJ5e2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHFuLmdldENvbmZpZ0RhdGEoKSkpfWNhdGNoKGUpe2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztkZWZhdWx0Om51bGw9PWN8fGMucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKG5ldyBhKCJTUEEtQ0xJRU5UX1dPUktFUi1PTk1TRy1JVjAyIiwiVGhlIG1lc3NhZ2UgdHlwZSBpcyBpbnZhbGlkLiIsYFRoZSBtZXNzYWdlIHR5cGUgcHJvdmlkZWQsICR7dC50eXBlfSwgaXMgaW52YWxpZC5gKSkpfWVsc2UgYy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UobmV3IGEoIlNQQS1DTElFTlRfV09SS0VSLU9OTVNHLU5GMDEiLCJUaGUgd2ViIHdvcmtlciBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgeWV0LiIsIlRoZSBpbml0aWFsaXplIG1ldGhvZCBuZWVkcyB0byBiZSBjYWxsZWQgYmVmb3JlIHRoZSBzcGVjaWZpZWQgb3BlcmF0aW9uIGNhbiBiZSBjYXJyaWVkIG91dC4iKSkpfSkpO2NvbnN0IEtuPSgpPT57eG4ucG9zdE1lc3NhZ2Uoe3R5cGU6InJlcXVlc3Qtc3RhcnQifSl9LEpuPWU9Pnt4bi5wb3N0TWVzc2FnZSh7ZGF0YTpKU09OLnN0cmluZ2lmeShudWxsIT1lP2U6IiIpLHR5cGU6InJlcXVlc3Qtc3VjY2VzcyJ9KX0sQm49KCk9Pnt4bi5wb3N0TWVzc2FnZSh7dHlwZToicmVxdWVzdC1maW5pc2gifSl9O3JldHVybnt9fSgpOwoK",null,!1,function(t){return Al=Al||function(t,e,n){var l=void 0===e?null:e,i=function(t,e){var n=atob(t);if(e){for(var l=new Uint8Array(n.length),i=0,c=n.length;i<c;++i)l[i]=n.charCodeAt(i);return String.fromCharCode.apply(null,new Uint16Array(l.buffer))}return n}(t,void 0!==n&&n),c=i.indexOf("\n",10)+1,o=i.substring(c)+(l?"//# sourceMappingURL="+l:""),r=new Blob([o],{type:"application/javascript"});return URL.createObjectURL(r)}("Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwp2YXIgd29ya2VyX2NvZGU9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZShlLHQscixuKXtyZXR1cm4gbmV3KHJ8fChyPVByb21pc2UpKSgoZnVuY3Rpb24oaSxvKXtmdW5jdGlvbiBzKGUpe3RyeXtjKG4ubmV4dChlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gYShlKXt0cnl7YyhuLnRocm93KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBjKGUpe3ZhciB0O2UuZG9uZT9pKGUudmFsdWUpOih0PWUudmFsdWUsdCBpbnN0YW5jZW9mIHI/dDpuZXcgcigoZnVuY3Rpb24oZSl7ZSh0KX0pKSkudGhlbihzLGEpfWMoKG49bi5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pKX0KLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4KCiAgICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKICAgIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC4KCiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSAogICAgUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZCiAgICBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsCiAgICBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00KICAgIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SCiAgICBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SCiAgICBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9mdW5jdGlvbiB0KGUsdCxyLG4pe3JldHVybiBuZXcocnx8KHI9UHJvbWlzZSkpKChmdW5jdGlvbihpLG8pe2Z1bmN0aW9uIHMoZSl7dHJ5e2Mobi5uZXh0KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBhKGUpe3RyeXtjKG4udGhyb3coZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIGMoZSl7dmFyIHQ7ZS5kb25lP2koZS52YWx1ZSk6KHQ9ZS52YWx1ZSx0IGluc3RhbmNlb2Ygcj90Om5ldyByKChmdW5jdGlvbihlKXtlKHQpfSkpKS50aGVuKHMsYSl9Yygobj1uLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSkpfXZhciByOyFmdW5jdGlvbihlKXtlLmZvcm1Qb3N0PSJmb3JtX3Bvc3QiLGUucXVlcnk9InF1ZXJ5In0ocnx8KHI9e30pKTt2YXIgbjshZnVuY3Rpb24oZSl7ZS5Db25maWdEYXRhPSJjb25maWdfZGF0YSIsZS5PSURDUHJvdmlkZXJNZXRhRGF0YT0ib2lkY19wcm92aWRlcl9tZXRhX2RhdGEiLGUuU2Vzc2lvbkRhdGE9InNlc3Npb25fZGF0YSIsZS5UZW1wb3JhcnlEYXRhPSJ0ZW1wb3JhcnlfZGF0YSJ9KG58fChuPXt9KSk7Y29uc3QgaT0icmVmcmVzaF90b2tlbl90aW1lciIsbz1bIlJTMjU2IiwiUlM1MTIiLCJSUzM4NCIsIlBTMjU2Il07dmFyIHM7IWZ1bmN0aW9uKGUpe2UuSW5jbHVkZT0iaW5jbHVkZSIsZS5TYW1lT3JpZ2luPSJzYW1lLW9yaWdpbiIsZS5PbWl0PSJvbWl0In0oc3x8KHM9e30pKTtjbGFzcyBhe2NvbnN0cnVjdG9yKGUsdCxyKXt0aGlzLm1lc3NhZ2U9cix0aGlzLm5hbWU9dCx0aGlzLmNvZGU9ZSxPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxuZXcudGFyZ2V0LnByb3RvdHlwZSl9fWNsYXNzIGN7Y29uc3RydWN0b3IoKXt9c3RhdGljIGZpbHRlckNsYWltc0Zyb21JRFRva2VuUGF5bG9hZChlKXtjb25zdCB0PU9iamVjdC5hc3NpZ24oe30sZSk7bnVsbD09dHx8ZGVsZXRlIHQuaXNzLG51bGw9PXR8fGRlbGV0ZSB0LmF1ZCxudWxsPT10fHxkZWxldGUgdC5leHAsbnVsbD09dHx8ZGVsZXRlIHQuaWF0LG51bGw9PXR8fGRlbGV0ZSB0LmFjcixudWxsPT10fHxkZWxldGUgdC5hbXIsbnVsbD09dHx8ZGVsZXRlIHQuYXpwLG51bGw9PXR8fGRlbGV0ZSB0LmF1dGhfdGltZSxudWxsPT10fHxkZWxldGUgdC5ub25jZSxudWxsPT10fHxkZWxldGUgdC5jX2hhc2gsbnVsbD09dHx8ZGVsZXRlIHQuYXRfaGFzaCxudWxsPT10fHxkZWxldGUgdC5uYmYsbnVsbD09dHx8ZGVsZXRlIHQuaXNrLG51bGw9PXR8fGRlbGV0ZSB0LnNpZDtjb25zdCByPXt9O3JldHVybiBPYmplY3QuZW50cmllcyh0KS5mb3JFYWNoKCgoW2UsdF0pPT57Y29uc3Qgbj1lLnNwbGl0KCJfIikubWFwKCgoZSx0KT0+MD09PXQ/ZTpbZVswXS50b1VwcGVyQ2FzZSgpLC4uLmUuc2xpY2UoMSldLmpvaW4oIiIpKSkuam9pbigiIik7cltuXT10fSkpLHJ9c3RhdGljIGdldFRva2VuUmVxdWVzdEhlYWRlcnMoKXtyZXR1cm57QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIiwiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIn19c3RhdGljIGdlbmVyYXRlU3RhdGVQYXJhbUZvclJlcXVlc3RDb3JyZWxhdGlvbihlLHQpe2NvbnN0IHI9cGFyc2VJbnQoZS5zcGxpdCgiIyIpWzFdKTtyZXR1cm4gdD9gJHt0fV9yZXF1ZXN0XyR7cn1gOmByZXF1ZXN0XyR7cn1gfXN0YXRpYyBleHRyYWN0UEtDRUtleUZyb21TdGF0ZVBhcmFtKGUpe3JldHVybmBwa2NlX2NvZGVfdmVyaWZpZXIjJHtwYXJzZUludChlLnNwbGl0KCJyZXF1ZXN0XyIpWzFdKX1gfX1jLmdldFRlbmFudERvbWFpbkZyb21JZFRva2VuUGF5bG9hZD0oZSx0PSJAIik9Pntjb25zdCByPWUuc3ViLnNwbGl0KHQpO3JldHVybiByLmxlbmd0aD4yP3Jbci5sZW5ndGgtMV06IiJ9O2NsYXNzIHV7Y29uc3RydWN0b3IoZSxyKXt0aGlzLl9kYXRhTGF5ZXI9ZSx0aGlzLl9jb25maWc9KCk9PnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLmdldENvbmZpZ0RhdGEoKX0pKSx0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YT0oKT0+dCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoKX0pKSx0aGlzLl9jcnlwdG9IZWxwZXI9cn1yZXNvbHZlRW5kcG9pbnRzKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD17fSxyPXlpZWxkIHRoaXMuX2NvbmZpZygpO3JldHVybiByLmVuZHBvaW50cyYmT2JqZWN0LmtleXMoci5lbmRwb2ludHMpLmZvckVhY2goKGU9Pntjb25zdCBuPWUucmVwbGFjZSgvW0EtWl0vZywoZT0+YF8ke2UudG9Mb3dlckNhc2UoKX1gKSk7dFtuXT0obnVsbD09cj92b2lkIDA6ci5lbmRwb2ludHMpP3IuZW5kcG9pbnRzW2VdOiIifSkpLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSx0KX0pKX1yZXNvbHZlRW5kcG9pbnRzRXhwbGljaXRseSgpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT17fSx0PXlpZWxkIHRoaXMuX2NvbmZpZygpLHI9WyJhdXRob3JpemF0aW9uX2VuZHBvaW50IiwiZW5kX3Nlc3Npb25fZW5kcG9pbnQiLCJqd2tzX3VyaSIsImNoZWNrX3Nlc3Npb25faWZyYW1lIiwicmV2b2NhdGlvbl9lbmRwb2ludCIsInRva2VuX2VuZHBvaW50IiwiaXNzdWVyIiwidXNlcmluZm9fZW5kcG9pbnQiXTtpZighdC5lbmRwb2ludHN8fCFPYmplY3Qua2V5cyhudWxsPT10P3ZvaWQgMDp0LmVuZHBvaW50cykuZXZlcnkoKGU9Pntjb25zdCB0PWUucmVwbGFjZSgvW0EtWl0vZywoZT0+YF8ke2UudG9Mb3dlckNhc2UoKX1gKSk7cmV0dXJuIHIuaW5jbHVkZXModCl9KSkpdGhyb3cgbmV3IGEoIkpTLUFVVEhfSEVMUEVSLVJFRS1ORjAxIiwiTm8gcmVxdWlyZWQgZW5kcG9pbnRzLiIsIlJlcXVpcmVkIG9pZGMgZW5kcG9pbnRzIGFyZSBub3QgZGVmaW5lZCIpO3JldHVybiB0LmVuZHBvaW50cyYmT2JqZWN0LmtleXModC5lbmRwb2ludHMpLmZvckVhY2goKHI9Pntjb25zdCBuPXIucmVwbGFjZSgvW0EtWl0vZywoZT0+YF8ke2UudG9Mb3dlckNhc2UoKX1gKSk7ZVtuXT0obnVsbD09dD92b2lkIDA6dC5lbmRwb2ludHMpP3QuZW5kcG9pbnRzW3JdOiIifSkpLE9iamVjdC5hc3NpZ24oe30sZSl9KSl9cmVzb2x2ZUVuZHBvaW50c0J5QmFzZVVSTCgpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT17fSx0PXlpZWxkIHRoaXMuX2NvbmZpZygpLHI9dC5iYXNlVXJsO2lmKCFyKXRocm93IG5ldyBhKCJKUy1BVVRIX0hFTFBFUl9SRUJPLU5GMDEiLCJCYXNlIFVSTCBub3QgZGVmaW5lZC4iLCJCYXNlIFVSTCBpcyBub3QgZGVmaW5lZCBpbiBBdXRoQ2xpZW50IGNvbmZpZy4iKTt0LmVuZHBvaW50cyYmT2JqZWN0LmtleXModC5lbmRwb2ludHMpLmZvckVhY2goKHI9Pntjb25zdCBuPXIucmVwbGFjZSgvW0EtWl0vZywoZT0+YF8ke2UudG9Mb3dlckNhc2UoKX1gKSk7ZVtuXT0obnVsbD09dD92b2lkIDA6dC5lbmRwb2ludHMpP3QuZW5kcG9pbnRzW3JdOiIifSkpO2NvbnN0IG49e2F1dGhvcml6YXRpb25fZW5kcG9pbnQ6YCR7cn0vb2F1dGgyL2F1dGhvcml6ZWAsZW5kX3Nlc3Npb25fZW5kcG9pbnQ6YCR7cn0vb2lkYy9sb2dvdXRgLGlzc3VlcjpgJHtyfS9vYXV0aDIvdG9rZW5gLGp3a3NfdXJpOmAke3J9L29hdXRoMi9qd2tzYCxjaGVja19zZXNzaW9uX2lmcmFtZTpgJHtyfS9vaWRjL2NoZWNrc2Vzc2lvbmAscmV2b2NhdGlvbl9lbmRwb2ludDpgJHtyfS9vYXV0aDIvcmV2b2tlYCx0b2tlbl9lbmRwb2ludDpgJHtyfS9vYXV0aDIvdG9rZW5gLHVzZXJpbmZvX2VuZHBvaW50OmAke3J9L29hdXRoMi91c2VyaW5mb2B9O3JldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbiksZSl9KSl9dmFsaWRhdGVJZFRva2VuKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD0oeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldE9JRENQcm92aWRlck1ldGFEYXRhKCkpLmp3a3NfdXJpLHI9eWllbGQgdGhpcy5fY29uZmlnKCk7aWYoIXR8fDA9PT10LnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IGEoIkpTX0FVVEhfSEVMUEVSLVZJVC1ORjAxIiwiSldLUyBlbmRwb2ludCBub3QgZm91bmQuIiwiTm8gSldLUyBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSBKV0tTIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpO2xldCBuO3RyeXtuPXlpZWxkIGZldGNoKHQse2NyZWRlbnRpYWxzOnIuc2VuZENvb2tpZXNJblJlcXVlc3RzP3MuSW5jbHVkZTpzLlNhbWVPcmlnaW59KX1jYXRjaCh0KXt0aHJvdyBuZXcgYSgiSlMtQVVUSF9IRUxQRVItVklULU5FMDIiLCJSZXF1ZXN0IHRvIGp3a3MgZW5kcG9pbnQgZmFpbGVkLiIsbnVsbCE9dD90OiJUaGUgcmVxdWVzdCBzZW50IHRvIGdldCB0aGUgandrcyBmcm9tIHRoZSBzZXJ2ZXIgZmFpbGVkLiIpfWlmKDIwMCE9PW4uc3RhdHVzfHwhbi5vayl0aHJvdyBuZXcgYSgiSlMtQVVUSF9IRUxQRVItVklULUhFMDMiLGBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cyByZWNlaXZlZCBmb3IgandrcyByZXF1ZXN0ICgke24uc3RhdHVzVGV4dH0pLmAseWllbGQgbi5qc29uKCkpO2NvbnN0IGk9KHlpZWxkIHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCkpLmlzc3Vlcix7a2V5czpvfT15aWVsZCBuLmpzb24oKSxjPXlpZWxkIHRoaXMuX2NyeXB0b0hlbHBlci5nZXRKV0tGb3JUaGVJZFRva2VuKGUuc3BsaXQoIi4iKVswXSxvKTtyZXR1cm4gdGhpcy5fY3J5cHRvSGVscGVyLmlzVmFsaWRJZFRva2VuKGUsYywoeWllbGQgdGhpcy5fY29uZmlnKCkpLmNsaWVudElELG51bGwhPWk/aToiIix0aGlzLl9jcnlwdG9IZWxwZXIuZGVjb2RlSURUb2tlbihlKS5zdWIsKHlpZWxkIHRoaXMuX2NvbmZpZygpKS5jbG9ja1RvbGVyYW5jZSl9KSl9Z2V0QXV0aGVudGljYXRlZFVzZXJJbmZvKGUpe3ZhciB0LHIsbixpO2NvbnN0IG89dGhpcy5fY3J5cHRvSGVscGVyLmRlY29kZUlEVG9rZW4oZSkscz1jLmdldFRlbmFudERvbWFpbkZyb21JZFRva2VuUGF5bG9hZChvKSxhPW51bGwhPT0odD1udWxsPT1vP3ZvaWQgMDpvLnVzZXJuYW1lKSYmdm9pZCAwIT09dD90OiIiLHU9bnVsbCE9PShyPW8uZ2l2ZW5fbmFtZSkmJnZvaWQgMCE9PXI/cjoiIixsPW51bGwhPT0obj1vLmZhbWlseV9uYW1lKSYmdm9pZCAwIT09bj9uOiIiLGg9dSYmbD9gJHt1fSAke2x9YDp1fHxsfHwiIixkPW51bGwhPT0oaT1vLnByZWZlcnJlZF91c2VybmFtZSkmJnZvaWQgMCE9PWk/aTpoO3JldHVybiBPYmplY3QuYXNzaWduKHtkaXNwbGF5TmFtZTpkLHRlbmFudERvbWFpbjpzLHVzZXJuYW1lOmF9LGMuZmlsdGVyQ2xhaW1zRnJvbUlEVG9rZW5QYXlsb2FkKG8pKX1yZXBsYWNlQ3VzdG9tR3JhbnRUZW1wbGF0ZVRhZ3MoZSxyKXt2YXIgbjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2xldCB0PSJvcGVuaWQiO2NvbnN0IGk9eWllbGQgdGhpcy5fY29uZmlnKCksbz15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEocik7cmV0dXJuIGkuc2NvcGUmJmkuc2NvcGUubGVuZ3RoPjAmJihpLnNjb3BlLmluY2x1ZGVzKCJvcGVuaWQiKXx8aS5zY29wZS5wdXNoKCJvcGVuaWQiKSx0PWkuc2NvcGUuam9pbigiICIpKSxlLnJlcGxhY2UoInt7dG9rZW59fSIsby5hY2Nlc3NfdG9rZW4pLnJlcGxhY2UoInt7dXNlcm5hbWV9fSIsdGhpcy5nZXRBdXRoZW50aWNhdGVkVXNlckluZm8oby5pZF90b2tlbikudXNlcm5hbWUpLnJlcGxhY2UoInt7c2NvcGV9fSIsdCkucmVwbGFjZSgie3tjbGllbnRJRH19IixpLmNsaWVudElEKS5yZXBsYWNlKCJ7e2NsaWVudFNlY3JldH19IixudWxsIT09KG49aS5jbGllbnRTZWNyZXQpJiZ2b2lkIDAhPT1uP246IiIpfSkpfWNsZWFyVXNlclNlc3Npb25EYXRhKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fZGF0YUxheWVyLnJlbW92ZVRlbXBvcmFyeURhdGEoZSkseWllbGQgdGhpcy5fZGF0YUxheWVyLnJlbW92ZVNlc3Npb25EYXRhKGUpfSkpfWhhbmRsZVRva2VuUmVzcG9uc2UoZSxyKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2lmKDIwMCE9PWUuc3RhdHVzfHwhZS5vayl0aHJvdyBuZXcgYSgiSlMtQVVUSF9IRUxQRVItSFRSLU5FMDEiLGBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cyByZWNlaXZlZCBmb3IgdG9rZW4gcmVxdWVzdCAoJHtlLnN0YXR1c1RleHR9KS5gLHlpZWxkIGUuanNvbigpKTtjb25zdCBuPXlpZWxkIGUuanNvbigpO2lmKG4uY3JlYXRlZF9hdD0obmV3IERhdGUpLmdldFRpbWUoKSwoeWllbGQgdGhpcy5fY29uZmlnKCkpLnZhbGlkYXRlSURUb2tlbilyZXR1cm4gdGhpcy52YWxpZGF0ZUlkVG9rZW4obi5pZF90b2tlbikudGhlbigoKCk9PnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0U2Vzc2lvbkRhdGEobixyKTtjb25zdCBlPXthY2Nlc3NUb2tlbjpuLmFjY2Vzc190b2tlbixjcmVhdGVkQXQ6bi5jcmVhdGVkX2F0LGV4cGlyZXNJbjpuLmV4cGlyZXNfaW4saWRUb2tlbjpuLmlkX3Rva2VuLHJlZnJlc2hUb2tlbjpuLnJlZnJlc2hfdG9rZW4sc2NvcGU6bi5zY29wZSx0b2tlblR5cGU6bi50b2tlbl90eXBlfTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGUpfSkpKSk7e2NvbnN0IGU9e2FjY2Vzc1Rva2VuOm4uYWNjZXNzX3Rva2VuLGNyZWF0ZWRBdDpuLmNyZWF0ZWRfYXQsZXhwaXJlc0luOm4uZXhwaXJlc19pbixpZFRva2VuOm4uaWRfdG9rZW4scmVmcmVzaFRva2VuOm4ucmVmcmVzaF90b2tlbixzY29wZTpuLnNjb3BlLHRva2VuVHlwZTpuLnRva2VuX3R5cGV9O3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0U2Vzc2lvbkRhdGEobixyKSxQcm9taXNlLnJlc29sdmUoZSl9fSkpfWdlbmVyYXRlUEtDRUtleShlKXt2YXIgcjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGEoZSksbj1bXTtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChlPT57ZS5zdGFydHNXaXRoKCJwa2NlX2NvZGVfdmVyaWZpZXIiKSYmbi5wdXNoKGUpfSkpO2NvbnN0IGk9bi5zb3J0KCkucG9wKCk7cmV0dXJuYHBrY2VfY29kZV92ZXJpZmllciMke3BhcnNlSW50KG51bGwhPT0ocj1udWxsPT1pP3ZvaWQgMDppLnNwbGl0KCIjIilbMV0pJiZ2b2lkIDAhPT1yP3I6Ii0xIikrMX1gfSkpfX1jbGFzcyBse2NvbnN0cnVjdG9yKGUpe3RoaXMuX2NyeXB0b1V0aWxzPWV9Z2V0Q29kZVZlcmlmaWVyKCl7cmV0dXJuIHRoaXMuX2NyeXB0b1V0aWxzLmJhc2U2NFVSTEVuY29kZSh0aGlzLl9jcnlwdG9VdGlscy5nZW5lcmF0ZVJhbmRvbUJ5dGVzKDMyKSl9Z2V0Q29kZUNoYWxsZW5nZShlKXtyZXR1cm4gdGhpcy5fY3J5cHRvVXRpbHMuYmFzZTY0VVJMRW5jb2RlKHRoaXMuX2NyeXB0b1V0aWxzLmhhc2hTaGEyNTYoZSkpfWdldEpXS0ZvclRoZUlkVG9rZW4oZSx0KXtjb25zdCByPUpTT04ucGFyc2UodGhpcy5fY3J5cHRvVXRpbHMuYmFzZTY0VVJMRGVjb2RlKGUpKTtmb3IoY29uc3QgZSBvZiB0KWlmKHIua2lkPT09ZS5raWQpcmV0dXJuIGU7dGhyb3cgbmV3IGEoIkpTLUNSWVBUT19VVElMLUdKRlRJVC1JVjAxIiwia2lkIG5vdCBmb3VuZC4iLCJGYWlsZWQgdG8gZmluZCB0aGUgJ2tpZCcgc3BlY2lmaWVkIGluIHRoZSBpZF90b2tlbi4gJ2tpZCcgZm91bmQgaW4gdGhlIGhlYWRlciA6ICIrci5raWQrIiwgRXhwZWN0ZWQgdmFsdWVzOiAiK3QubWFwKChlPT5lLmtpZCkpLmpvaW4oIiwgIikpfWlzVmFsaWRJZFRva2VuKGUsdCxyLG4saSxzKXtyZXR1cm4gdGhpcy5fY3J5cHRvVXRpbHMudmVyaWZ5Snd0KGUsdCxvLHIsbixpLHMpLnRoZW4oKGU9PmU/UHJvbWlzZS5yZXNvbHZlKCEwKTpQcm9taXNlLnJlamVjdChuZXcgYSgiSlMtQ1JZUFRPX0hFTFBFUi1JVklULUlWMDEiLCJJbnZhbGlkIElEIHRva2VuLiIsIklEIHRva2VuIHZhbGlkYXRpb24gcmV0dXJuZWQgZmFsc2UiKSkpKS5jYXRjaCgoZT0+IkVSUl9KV1RfQ0xBSU1fVkFMSURBVElPTl9GQUlMRUQiPT09KG51bGw9PWU/dm9pZCAwOmUuY29kZSkmJiJuYmYiPT09KG51bGw9PWU/dm9pZCAwOmUuY2xhaW0pP1Byb21pc2UucmVqZWN0KG5ldyBhKCJKUy1DUllQVE9fVVRJTFMtSVZJVC1JVjAyIiwiSldUIE5CRiBDTEFJTSBWQUxJREFUSU9OIEZBSUxFRCIsIkpXVCBOQkYgY2xhaW0gdmFsaWRhdGlvbiBoYXMgYmVlbiBmYWlsZWQiKSk6UHJvbWlzZS5yZWplY3QobmV3IGEoIkpTLUNSWVBUT19VVElMUy1JVklULUlWMDMiLCJKV1QgVkFMSURBVElPTiBGQUlMRUQiLCJKV1QgdmFsaWRhdGlvbiBoYXMgYmVlbiBmYWlsZWQiKSkpKX1kZWNvZGVJRFRva2VuKGUpe3RyeXtjb25zdCB0PXRoaXMuX2NyeXB0b1V0aWxzLmJhc2U2NFVSTERlY29kZShlLnNwbGl0KCIuIilbMV0pO3JldHVybiBKU09OLnBhcnNlKHQpfWNhdGNoKGUpe3Rocm93IG5ldyBhKCJKUy1DUllQVE9fVVRJTC1ESVQtSVYwMSIsIkRlY29kaW5nIElEIHRva2VuIGZhaWxlZC4iLGUpfX19Y2xhc3MgaHtjb25zdHJ1Y3RvcihlLHIpe3RoaXMuX2NyeXB0b1V0aWxzPXIsdGhpcy5fY3J5cHRvSGVscGVyPW5ldyBsKHIpLHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyPW5ldyB1KGUsdGhpcy5fY3J5cHRvSGVscGVyKSx0aGlzLl9kYXRhTGF5ZXI9ZSx0aGlzLl9jb25maWc9KCk9PnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLmdldENvbmZpZ0RhdGEoKX0pKSx0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YT0oKT0+dCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoKX0pKX1nZXRBdXRob3JpemF0aW9uVVJMKGUscil7dmFyIG4saSxvO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGFQYXJhbWV0ZXIoImF1dGhvcml6YXRpb25fZW5kcG9pbnQiKSxzPXlpZWxkIHRoaXMuX2NvbmZpZygpO2lmKCF0fHwwPT09dC50cmltKCkubGVuZ3RoKXRocm93IG5ldyBhKCJKUy1BVVRIX0NPUkUtR0FVLU5GMDEiLCJObyBhdXRob3JpemF0aW9uIGVuZHBvaW50IGZvdW5kLiIsIk5vIGF1dGhvcml6YXRpb24gZW5kcG9pbnQgd2FzIGZvdW5kIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSBmcm9tIHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSBhdXRob3JpemF0aW9uIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpO2NvbnN0IHU9bmV3IFVSTCh0KSxsPW5ldyBNYXA7bC5zZXQoInJlc3BvbnNlX3R5cGUiLCJjb2RlIiksbC5zZXQoImNsaWVudF9pZCIscy5jbGllbnRJRCk7bGV0IGg9Im9wZW5pZCI7cy5zY29wZSYmcy5zY29wZS5sZW5ndGg+MCYmKHMuc2NvcGUuaW5jbHVkZXMoIm9wZW5pZCIpfHxzLnNjb3BlLnB1c2goIm9wZW5pZCIpLGg9cy5zY29wZS5qb2luKCIgIikpLGwuc2V0KCJzY29wZSIsaCksbC5zZXQoInJlZGlyZWN0X3VyaSIscy5zaWduSW5SZWRpcmVjdFVSTCkscy5yZXNwb25zZU1vZGUmJmwuc2V0KCJyZXNwb25zZV9tb2RlIixzLnJlc3BvbnNlTW9kZSk7Y29uc3QgZD15aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5nZW5lcmF0ZVBLQ0VLZXkocik7aWYocy5lbmFibGVQS0NFKXtjb25zdCBlPW51bGw9PT0obj10aGlzLl9jcnlwdG9IZWxwZXIpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmdldENvZGVWZXJpZmllcigpLHQ9bnVsbD09PShpPXRoaXMuX2NyeXB0b0hlbHBlcil8fHZvaWQgMD09PWk/dm9pZCAwOmkuZ2V0Q29kZUNoYWxsZW5nZShlKTt5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihkLGUsciksbC5zZXQoImNvZGVfY2hhbGxlbmdlX21ldGhvZCIsIlMyNTYiKSxsLnNldCgiY29kZV9jaGFsbGVuZ2UiLHQpfXMucHJvbXB0JiZsLnNldCgicHJvbXB0IixzLnByb21wdCk7Y29uc3QgZj1lO2lmKGYpZm9yKGNvbnN0W2UsdF1vZiBPYmplY3QuZW50cmllcyhmKSlpZigiIiE9ZSYmIiIhPXQmJiJzdGF0ZSIhPT1lKXtjb25zdCByPWUucmVwbGFjZSgvW0EtWl0vZywoZT0+YF8ke2UudG9Mb3dlckNhc2UoKX1gKSk7bC5zZXQocix0LnRvU3RyaW5nKCkpfWwuc2V0KCJzdGF0ZSIsYy5nZW5lcmF0ZVN0YXRlUGFyYW1Gb3JSZXF1ZXN0Q29ycmVsYXRpb24oZCxmP251bGw9PT0obz1mLnN0YXRlKXx8dm9pZCAwPT09bz92b2lkIDA6by50b1N0cmluZygpOiIiKSk7Zm9yKGNvbnN0W2UsdF1vZiBsLmVudHJpZXMoKSl1LnNlYXJjaFBhcmFtcy5hcHBlbmQoZSx0KTtyZXR1cm4gdS50b1N0cmluZygpfSkpfXJlcXVlc3RBY2Nlc3NUb2tlbihlLHIsbixpKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9KHlpZWxkIHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCkpLnRva2VuX2VuZHBvaW50LG89eWllbGQgdGhpcy5fY29uZmlnKCk7aWYoIXR8fDA9PT10LnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IGEoIkpTLUFVVEhfQ09SRS1SQVQxLU5GMDEiLCJUb2tlbiBlbmRwb2ludCBub3QgZm91bmQuIiwiTm8gdG9rZW4gZW5kcG9pbnQgd2FzIGZvdW5kIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgdG9rZW4gZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7ciYmKHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRTZXNzaW9uRGF0YVBhcmFtZXRlcigic2Vzc2lvbl9zdGF0ZSIscixpKSk7Y29uc3QgdT1bXTt1LnB1c2goYGNsaWVudF9pZD0ke28uY2xpZW50SUR9YCksby5jbGllbnRTZWNyZXQmJm8uY2xpZW50U2VjcmV0LnRyaW0oKS5sZW5ndGg+MCYmdS5wdXNoKGBjbGllbnRfc2VjcmV0PSR7by5jbGllbnRTZWNyZXR9YCk7Y29uc3QgbD1lO2xldCBoO3UucHVzaChgY29kZT0ke2x9YCksdS5wdXNoKCJncmFudF90eXBlPWF1dGhvcml6YXRpb25fY29kZSIpLHUucHVzaChgcmVkaXJlY3RfdXJpPSR7by5zaWduSW5SZWRpcmVjdFVSTH1gKSxvLmVuYWJsZVBLQ0UmJih1LnB1c2goYGNvZGVfdmVyaWZpZXI9JHt5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihjLmV4dHJhY3RQS0NFS2V5RnJvbVN0YXRlUGFyYW0obiksaSl9YCkseWllbGQgdGhpcy5fZGF0YUxheWVyLnJlbW92ZVRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoYy5leHRyYWN0UEtDRUtleUZyb21TdGF0ZVBhcmFtKG4pLGkpKTt0cnl7aD15aWVsZCBmZXRjaCh0LHtib2R5OnUuam9pbigiJiIpLGNyZWRlbnRpYWxzOm8uc2VuZENvb2tpZXNJblJlcXVlc3RzP3MuSW5jbHVkZTpzLlNhbWVPcmlnaW4saGVhZGVyczpuZXcgSGVhZGVycyhjLmdldFRva2VuUmVxdWVzdEhlYWRlcnMoKSksbWV0aG9kOiJQT1NUIn0pfWNhdGNoKHQpe3Rocm93IG5ldyBhKCJKUy1BVVRIX0NPUkUtUkFUMS1ORTAyIiwiUmVxdWVzdGluZyBhY2Nlc3MgdG9rZW4gZmFpbGVkIixudWxsIT10P3Q6IlRoZSByZXF1ZXN0IHRvIGdldCB0aGUgYWNjZXNzIHRva2VuIGZyb20gdGhlIHNlcnZlciBmYWlsZWQuIil9aWYoIWgub2spdGhyb3cgbmV3IGEoIkpTLUFVVEhfQ09SRS1SQVQxLUhFMDMiLGBSZXF1ZXN0aW5nIGFjY2VzcyB0b2tlbiBmYWlsZWQgd2l0aCAke2guc3RhdHVzVGV4dH1gLHlpZWxkIGguanNvbigpKTtyZXR1cm4geWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuaGFuZGxlVG9rZW5SZXNwb25zZShoLGkpfSkpfXJlZnJlc2hBY2Nlc3NUb2tlbihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9KHlpZWxkIHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCkpLnRva2VuX2VuZHBvaW50LHI9eWllbGQgdGhpcy5fY29uZmlnKCksbj15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoZSk7aWYoIW4ucmVmcmVzaF90b2tlbil0aHJvdyBuZXcgYSgiSlMtQVVUSF9DT1JFLVJBVDItTkYwMSIsIk5vIHJlZnJlc2ggdG9rZW4gZm91bmQuIiwiVGhlcmUgd2FzIG5vIHJlZnJlc2ggdG9rZW4gZm91bmQuIEFzZ2FyZGVvIGRvZXNuJ3QgcmV0dXJuIGEgcmVmcmVzaCB0b2tlbiBpZiB0aGUgcmVmcmVzaCB0b2tlbiBncmFudCBpcyBub3QgZW5hYmxlZC4iKTtpZighdHx8MD09PXQudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYSgiSlMtQVVUSF9DT1JFLVJBVDItTkYwMiIsIk5vIHJlZnJlc2ggdG9rZW4gZW5kcG9pbnQgZm91bmQuIiwiTm8gcmVmcmVzaCB0b2tlbiBlbmRwb2ludCB3YXMgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSByZWZyZXNoIHRva2VuIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpO2NvbnN0IGk9W107bGV0IG87aS5wdXNoKGBjbGllbnRfaWQ9JHtyLmNsaWVudElEfWApLGkucHVzaChgcmVmcmVzaF90b2tlbj0ke24ucmVmcmVzaF90b2tlbn1gKSxpLnB1c2goImdyYW50X3R5cGU9cmVmcmVzaF90b2tlbiIpLHIuY2xpZW50U2VjcmV0JiZyLmNsaWVudFNlY3JldC50cmltKCkubGVuZ3RoPjAmJmkucHVzaChgY2xpZW50X3NlY3JldD0ke3IuY2xpZW50U2VjcmV0fWApO3RyeXtvPXlpZWxkIGZldGNoKHQse2JvZHk6aS5qb2luKCImIiksY3JlZGVudGlhbHM6ci5zZW5kQ29va2llc0luUmVxdWVzdHM/cy5JbmNsdWRlOnMuU2FtZU9yaWdpbixoZWFkZXJzOm5ldyBIZWFkZXJzKGMuZ2V0VG9rZW5SZXF1ZXN0SGVhZGVycygpKSxtZXRob2Q6IlBPU1QifSl9Y2F0Y2godCl7dGhyb3cgbmV3IGEoIkpTLUFVVEhfQ09SRS1SQVQyLU5SMDMiLCJSZWZyZXNoIGFjY2VzcyB0b2tlbiByZXF1ZXN0IGZhaWxlZC4iLG51bGwhPXQ/dDoiVGhlIHJlcXVlc3QgdG8gcmVmcmVzaCB0aGUgYWNjZXNzIHRva2VuIGZhaWxlZC4iKX1pZighby5vayl0aHJvdyBuZXcgYSgiSlMtQVVUSF9DT1JFLVJBVDItSEUwNCIsYFJlZnJlc2hpbmcgYWNjZXNzIHRva2VuIGZhaWxlZCB3aXRoICR7by5zdGF0dXNUZXh0fWAseWllbGQgby5qc29uKCkpO3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5oYW5kbGVUb2tlblJlc3BvbnNlKG8sZSl9KSl9cmV2b2tlQWNjZXNzVG9rZW4oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PSh5aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpKS5yZXZvY2F0aW9uX2VuZHBvaW50LHI9eWllbGQgdGhpcy5fY29uZmlnKCk7aWYoIXR8fDA9PT10LnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IGEoIkpTLUFVVEhfQ09SRS1SQVQzLU5GMDEiLCJObyByZXZva2UgYWNjZXNzIHRva2VuIGVuZHBvaW50IGZvdW5kLiIsIk5vIHJldm9rZSBhY2Nlc3MgdG9rZW4gZW5kcG9pbnQgd2FzIGZvdW5kIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgcmV2b2tlIGFjY2VzcyB0b2tlbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtjb25zdCBuPVtdO2xldCBpO24ucHVzaChgY2xpZW50X2lkPSR7ci5jbGllbnRJRH1gKSxuLnB1c2goYHRva2VuPSR7KHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShlKSkuYWNjZXNzX3Rva2VufWApLG4ucHVzaCgidG9rZW5fdHlwZV9oaW50PWFjY2Vzc190b2tlbiIpO3RyeXtpPXlpZWxkIGZldGNoKHQse2JvZHk6bi5qb2luKCImIiksY3JlZGVudGlhbHM6ci5zZW5kQ29va2llc0luUmVxdWVzdHM/cy5JbmNsdWRlOnMuU2FtZU9yaWdpbixoZWFkZXJzOm5ldyBIZWFkZXJzKGMuZ2V0VG9rZW5SZXF1ZXN0SGVhZGVycygpKSxtZXRob2Q6IlBPU1QifSl9Y2F0Y2godCl7dGhyb3cgbmV3IGEoIkpTLUFVVEhfQ09SRS1SQVQzLU5FMDIiLCJUaGUgcmVxdWVzdCB0byByZXZva2UgYWNjZXNzIHRva2VuIGZhaWxlZC4iLG51bGwhPXQ/dDoiVGhlIHJlcXVlc3Qgc2VudCB0byByZXZva2UgdGhlIGFjY2VzcyB0b2tlbiBmYWlsZWQuIil9aWYoMjAwIT09aS5zdGF0dXN8fCFpLm9rKXRocm93IG5ldyBhKCJKUy1BVVRIX0NPUkUtUkFUMy1IRTAzIixgSW52YWxpZCByZXNwb25zZSBzdGF0dXMgcmVjZWl2ZWQgZm9yIHJldm9rZSBhY2Nlc3MgdG9rZW4gcmVxdWVzdCAoJHtpLnN0YXR1c1RleHR9KS5gLHlpZWxkIGkuanNvbigpKTtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuY2xlYXJVc2VyU2Vzc2lvbkRhdGEoZSksUHJvbWlzZS5yZXNvbHZlKGkpfSkpfXJlcXVlc3RDdXN0b21HcmFudChlLHIpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgbj15aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpLGk9eWllbGQgdGhpcy5fY29uZmlnKCk7bGV0IG87aWYobz1lLnRva2VuRW5kcG9pbnQmJjAhPT1lLnRva2VuRW5kcG9pbnQudHJpbSgpLmxlbmd0aD9lLnRva2VuRW5kcG9pbnQ6bi50b2tlbl9lbmRwb2ludCwhb3x8MD09PW8udHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYSgiSlMtQVVUSF9DT1JFLVJDRy1ORjAxIiwiVG9rZW4gZW5kcG9pbnQgbm90IGZvdW5kLiIsIk5vIHRva2VuIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIHRva2VuIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpO2NvbnN0IHU9eWllbGQgUHJvbWlzZS5hbGwoT2JqZWN0LmVudHJpZXMoZS5kYXRhKS5tYXAoKChbZSxuXSk9PnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLnJlcGxhY2VDdXN0b21HcmFudFRlbXBsYXRlVGFncyhuLHIpO3JldHVybmAke2V9PSR7dH1gfSkpKSkpO2xldCBsPU9iamVjdC5hc3NpZ24oe30sYy5nZXRUb2tlblJlcXVlc3RIZWFkZXJzKCkpO2UuYXR0YWNoVG9rZW4mJihsPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxsKSx7QXV0aG9yaXphdGlvbjpgQmVhcmVyICR7KHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShyKSkuYWNjZXNzX3Rva2VufWB9KSk7Y29uc3QgaD17Ym9keTp1LmpvaW4oIiYiKSxjcmVkZW50aWFsczppLnNlbmRDb29raWVzSW5SZXF1ZXN0cz9zLkluY2x1ZGU6cy5TYW1lT3JpZ2luLGhlYWRlcnM6bmV3IEhlYWRlcnMobCksbWV0aG9kOiJQT1NUIn07bGV0IGQ7dHJ5e2Q9eWllbGQgZmV0Y2gobyxoKX1jYXRjaChlKXt0aHJvdyBuZXcgYSgiSlMtQVVUSF9DT1JFLVJDRy1ORTAyIiwiVGhlIGN1c3RvbSBncmFudCByZXF1ZXN0IGZhaWxlZC4iLG51bGwhPWU/ZToiVGhlIHJlcXVlc3Qgc2VudCB0byBnZXQgdGhlIGN1c3RvbSBncmFudCBmYWlsZWQuIil9aWYoMjAwIT09ZC5zdGF0dXN8fCFkLm9rKXRocm93IG5ldyBhKCJKUy1BVVRIX0NPUkUtUkNHLUhFMDMiLGBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cyByZWNlaXZlZCBmb3IgdGhlIGN1c3RvbSBncmFudCByZXF1ZXN0LiAoJHtkLnN0YXR1c1RleHR9KWAseWllbGQgZC5qc29uKCkpO3JldHVybiBlLnJldHVybnNTZXNzaW9uP3RoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLmhhbmRsZVRva2VuUmVzcG9uc2UoZCxyKTpQcm9taXNlLnJlc29sdmUoeWllbGQgZC5qc29uKCkpfSkpfWdldEJhc2ljVXNlckluZm8oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShlKSxyPXRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLmdldEF1dGhlbnRpY2F0ZWRVc2VySW5mbyhudWxsPT10P3ZvaWQgMDp0LmlkX3Rva2VuKTtsZXQgbj17YWxsb3dlZFNjb3Blczp0LnNjb3BlLHNlc3Npb25TdGF0ZTp0LnNlc3Npb25fc3RhdGV9O3JldHVybiBPYmplY3Qua2V5cyhyKS5mb3JFYWNoKChlPT57dm9pZCAwIT09cltlXSYmIiIhPT1yW2VdJiZudWxsIT09cltlXXx8ZGVsZXRlIHJbZV19KSksbj1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbiksciksbn0pKX1nZXREZWNvZGVkSURUb2tlbihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9KHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShlKSkuaWRfdG9rZW47cmV0dXJuIHRoaXMuX2NyeXB0b0hlbHBlci5kZWNvZGVJRFRva2VuKHQpfSkpfWdldElEVG9rZW4oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4oeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpKS5pZF90b2tlbn0pKX1nZXRPSURDUHJvdmlkZXJNZXRhRGF0YShlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fY29uZmlnKCk7aWYoIWUmJih5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigib3BfY29uZmlnX2luaXRpYXRlZCIpKSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Y29uc3Qgcj10LndlbGxLbm93bkVuZHBvaW50O2lmKHIpe2xldCBlO3RyeXtpZihlPXlpZWxkIGZldGNoKHIpLDIwMCE9PWUuc3RhdHVzfHwhZS5vayl0aHJvdyBuZXcgRXJyb3J9Y2F0Y2godCl7dGhyb3cgbmV3IGEoIkpTLUFVVEhfQ09SRS1HT1BNRC1IRTAxIiwiSW52YWxpZCB3ZWxsLWtub3duIHJlc3BvbnNlIiwiVGhlIHdlbGwga25vd24gZW5kcG9pbnQgcmVzcG9uc2UgaGFzIGJlZW4gZmFpbGVkIHdpdGggYW4gZXJyb3IuIil9cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRPSURDUHJvdmlkZXJNZXRhRGF0YSh5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXNvbHZlRW5kcG9pbnRzKHlpZWxkIGUuanNvbigpKSkseWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiLCEwKSxQcm9taXNlLnJlc29sdmUoKX1pZih0LmJhc2VVcmwpe3RyeXt5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoeWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIucmVzb2x2ZUVuZHBvaW50c0J5QmFzZVVSTCgpKX1jYXRjaCh0KXt0aHJvdyBuZXcgYSgiSlMtQVVUSF9DT1JFLUdPUE1ELUlWMDIiLCJSZXNvbHZpbmcgZW5kcG9pbnRzIGZhaWxlZC4iLG51bGwhPXQ/dDoiUmVzb2x2aW5nIGVuZHBvaW50cyBieSBiYXNlIHVybCBmYWlsZWQuIil9cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIiwhMCksUHJvbWlzZS5yZXNvbHZlKCl9dHJ5e3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRPSURDUHJvdmlkZXJNZXRhRGF0YSh5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXNvbHZlRW5kcG9pbnRzRXhwbGljaXRseSgpKX1jYXRjaCh0KXt0aHJvdyBuZXcgYSgiSlMtQVVUSF9DT1JFLUdPUE1ELUlWMDMiLCJSZXNvbHZpbmcgZW5kcG9pbnRzIGZhaWxlZC4iLG51bGwhPXQ/dDoiUmVzb2x2aW5nIGVuZHBvaW50cyBieSBleHBsaWNpdGx5IGZhaWxlZC4iKX1yZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiLCEwKSxQcm9taXNlLnJlc29sdmUoKX0pKX1nZXRPSURDU2VydmljZUVuZHBvaW50cygpe3ZhciBlLHIsbixpLG8scyxhLGMsdSxsO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpO3JldHVybnthdXRob3JpemF0aW9uRW5kcG9pbnQ6bnVsbCE9PShlPXQuYXV0aG9yaXphdGlvbl9lbmRwb2ludCkmJnZvaWQgMCE9PWU/ZToiIixjaGVja1Nlc3Npb25JZnJhbWU6bnVsbCE9PShyPXQuY2hlY2tfc2Vzc2lvbl9pZnJhbWUpJiZ2b2lkIDAhPT1yP3I6IiIsZW5kU2Vzc2lvbkVuZHBvaW50Om51bGwhPT0obj10LmVuZF9zZXNzaW9uX2VuZHBvaW50KSYmdm9pZCAwIT09bj9uOiIiLGludHJvc3BlY3Rpb25FbmRwb2ludDpudWxsIT09KGk9dC5pbnRyb3NwZWN0aW9uX2VuZHBvaW50KSYmdm9pZCAwIT09aT9pOiIiLGlzc3VlcjpudWxsIT09KG89dC5pc3N1ZXIpJiZ2b2lkIDAhPT1vP286IiIsandrc1VyaTpudWxsIT09KHM9dC5qd2tzX3VyaSkmJnZvaWQgMCE9PXM/czoiIixyZWdpc3RyYXRpb25FbmRwb2ludDpudWxsIT09KGE9dC5yZWdpc3RyYXRpb25fZW5kcG9pbnQpJiZ2b2lkIDAhPT1hP2E6IiIscmV2b2NhdGlvbkVuZHBvaW50Om51bGwhPT0oYz10LnJldm9jYXRpb25fZW5kcG9pbnQpJiZ2b2lkIDAhPT1jP2M6IiIsdG9rZW5FbmRwb2ludDpudWxsIT09KHU9dC50b2tlbl9lbmRwb2ludCkmJnZvaWQgMCE9PXU/dToiIix1c2VyaW5mb0VuZHBvaW50Om51bGwhPT0obD10LnVzZXJpbmZvX2VuZHBvaW50KSYmdm9pZCAwIT09bD9sOiIifX0pKX1nZXRTaWduT3V0VVJMKGUpe3ZhciByLG4saTtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9bnVsbD09PShyPXlpZWxkIHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCkpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLmVuZF9zZXNzaW9uX2VuZHBvaW50LG89eWllbGQgdGhpcy5fY29uZmlnKCk7aWYoIXR8fDA9PT10LnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IGEoIkpTLUFVVEhfQ09SRS1HU09VLU5GMDEiLCJTaWduLW91dCBlbmRwb2ludCBub3QgZm91bmQuIiwiTm8gc2lnbi1vdXQgZW5kcG9pbnQgd2FzIGZvdW5kIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgc2lnbi1vdXQgZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7Y29uc3Qgcz1udWxsPT09KG49eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpKXx8dm9pZCAwPT09bj92b2lkIDA6bi5pZF90b2tlbjtpZighc3x8MD09PXMudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYSgiSlMtQVVUSF9DT1JFLUdTT1UtTkYwMiIsIklEIHRva2VuIG5vdCBmb3VuZC4iLCJObyBJRCB0b2tlbiBjb3VsZCBiZSBmb3VuZC4gRWl0aGVyIHRoZSBzZXNzaW9uIGluZm9ybWF0aW9uIGlzIGxvc3Qgb3IgeW91IGhhdmUgbm90IHNpZ25lZCBpbi4iKTtjb25zdCBjPW51bGwhPT0oaT1udWxsPT1vP3ZvaWQgMDpvLnNpZ25PdXRSZWRpcmVjdFVSTCkmJnZvaWQgMCE9PWk/aTpudWxsPT1vP3ZvaWQgMDpvLnNpZ25JblJlZGlyZWN0VVJMO2lmKCFjfHwwPT09Yy50cmltKCkubGVuZ3RoKXRocm93IG5ldyBhKCJKUy1BVVRIX0NPUkUtR1NPVS1ORjAzIiwiTm8gc2lnbi1vdXQgcmVkaXJlY3QgVVJMIGZvdW5kLiIsIlRoZSBzaWduLW91dCByZWRpcmVjdCBVUkwgY2Fubm90IGJlIGZvdW5kIG9yIHRoZSBVUkwgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIE5vIHNpZ24taW4gcmVkaXJlY3QgVVJMIGhhcyBiZWVuIGZvdW5kIGVpdGhlci4gIik7cmV0dXJuYCR7dH0/aWRfdG9rZW5faGludD0ke3N9JnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaT0ke2N9JnN0YXRlPXNpZ25fb3V0X3N1Y2Nlc3NgfSkpfXNpZ25PdXQoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuZ2V0U2lnbk91dFVSTChlKTtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuY2xlYXJVc2VyU2Vzc2lvbkRhdGEoZSksdH0pKX1nZXRBY2Nlc3NUb2tlbihlKXt2YXIgcjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBudWxsPT09KHI9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpKXx8dm9pZCAwPT09cj92b2lkIDA6ci5hY2Nlc3NfdG9rZW59KSl9aXNBdXRoZW50aWNhdGVkKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEJvb2xlYW4oeWllbGQgdGhpcy5nZXRBY2Nlc3NUb2tlbihlKSl9KSl9Z2V0UEtDRUNvZGUoZSxyKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihjLmV4dHJhY3RQS0NFS2V5RnJvbVN0YXRlUGFyYW0oZSkscil9KSl9c2V0UEtDRUNvZGUoZSxyLG4pe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGMuZXh0cmFjdFBLQ0VLZXlGcm9tU3RhdGVQYXJhbShyKSxlLG4pfSkpfXVwZGF0ZUNvbmZpZyhlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRDb25maWdEYXRhKGUpLHlpZWxkIHRoaXMuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoITApfSkpfX1jbGFzcyBke2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5faWQ9ZSx0aGlzLl9zdG9yZT10fXNldERhdGFJbkJ1bGsoZSxyKXt2YXIgbjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9bnVsbCE9PShuPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEoZSkpJiZ2b2lkIDAhPT1uP246bnVsbCxpPXQmJkpTT04ucGFyc2UodCksbz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30saSkscikscz1KU09OLnN0cmluZ2lmeShvKTt5aWVsZCB0aGlzLl9zdG9yZS5zZXREYXRhKGUscyl9KSl9c2V0VmFsdWUoZSxyLG4pe3ZhciBpO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD1udWxsIT09KGk9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YShlKSkmJnZvaWQgMCE9PWk/aTpudWxsLG89dCYmSlNPTi5wYXJzZSh0KSxzPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxvKSx7W3JdOm59KSxhPUpTT04uc3RyaW5naWZ5KHMpO3lpZWxkIHRoaXMuX3N0b3JlLnNldERhdGEoZSxhKX0pKX1yZW1vdmVWYWx1ZShlLHIpe3ZhciBuO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD1udWxsIT09KG49eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YShlKSkmJnZvaWQgMCE9PW4/bjpudWxsLGk9dCYmSlNPTi5wYXJzZSh0KSxvPU9iamVjdC5hc3NpZ24oe30saSk7ZGVsZXRlIG9bcl07Y29uc3Qgcz1KU09OLnN0cmluZ2lmeShvKTt5aWVsZCB0aGlzLl9zdG9yZS5zZXREYXRhKGUscyl9KSl9X3Jlc29sdmVLZXkoZSx0KXtyZXR1cm4gdD9gJHtlfS0ke3RoaXMuX2lkfS0ke3R9YDpgJHtlfS0ke3RoaXMuX2lkfWB9c2V0Q29uZmlnRGF0YShlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuc2V0RGF0YUluQnVsayh0aGlzLl9yZXNvbHZlS2V5KG4uQ29uZmlnRGF0YSksZSl9KSl9c2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt0aGlzLnNldERhdGFJbkJ1bGsodGhpcy5fcmVzb2x2ZUtleShuLk9JRENQcm92aWRlck1ldGFEYXRhKSxlKX0pKX1zZXRUZW1wb3JhcnlEYXRhKGUscil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt0aGlzLnNldERhdGFJbkJ1bGsodGhpcy5fcmVzb2x2ZUtleShuLlRlbXBvcmFyeURhdGEsciksZSl9KSl9c2V0U2Vzc2lvbkRhdGEoZSxyKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuc2V0RGF0YUluQnVsayh0aGlzLl9yZXNvbHZlS2V5KG4uU2Vzc2lvbkRhdGEsciksZSl9KSl9Z2V0Q29uZmlnRGF0YSgpe3ZhciBlO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEpTT04ucGFyc2UobnVsbCE9PShlPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShuLkNvbmZpZ0RhdGEpKSkmJnZvaWQgMCE9PWU/ZTpudWxsKX0pKX1nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSgpe3ZhciBlO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEpTT04ucGFyc2UobnVsbCE9PShlPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShuLk9JRENQcm92aWRlck1ldGFEYXRhKSkpJiZ2b2lkIDAhPT1lP2U6bnVsbCl9KSl9Z2V0VGVtcG9yYXJ5RGF0YShlKXt2YXIgcjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBKU09OLnBhcnNlKG51bGwhPT0ocj15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkobi5UZW1wb3JhcnlEYXRhLGUpKSkmJnZvaWQgMCE9PXI/cjpudWxsKX0pKX1nZXRTZXNzaW9uRGF0YShlKXt2YXIgcjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBKU09OLnBhcnNlKG51bGwhPT0ocj15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkobi5TZXNzaW9uRGF0YSxlKSkpJiZ2b2lkIDAhPT1yP3I6bnVsbCl9KSl9cmVtb3ZlQ29uZmlnRGF0YSgpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fc3RvcmUucmVtb3ZlRGF0YSh0aGlzLl9yZXNvbHZlS2V5KG4uQ29uZmlnRGF0YSkpfSkpfXJlbW92ZU9JRENQcm92aWRlck1ldGFEYXRhKCl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9zdG9yZS5yZW1vdmVEYXRhKHRoaXMuX3Jlc29sdmVLZXkobi5PSURDUHJvdmlkZXJNZXRhRGF0YSkpfSkpfXJlbW92ZVRlbXBvcmFyeURhdGEoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9zdG9yZS5yZW1vdmVEYXRhKHRoaXMuX3Jlc29sdmVLZXkobi5UZW1wb3JhcnlEYXRhLGUpKX0pKX1yZW1vdmVTZXNzaW9uRGF0YShlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX3N0b3JlLnJlbW92ZURhdGEodGhpcy5fcmVzb2x2ZUtleShuLlNlc3Npb25EYXRhLGUpKX0pKX1nZXRDb25maWdEYXRhUGFyYW1ldGVyKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkobi5Db25maWdEYXRhKSk7cmV0dXJuIHQmJkpTT04ucGFyc2UodClbZV19KSl9Z2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGFQYXJhbWV0ZXIoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShuLk9JRENQcm92aWRlck1ldGFEYXRhKSk7cmV0dXJuIHQmJkpTT04ucGFyc2UodClbZV19KSl9Z2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihlLHIpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkobi5UZW1wb3JhcnlEYXRhLHIpKTtyZXR1cm4gdCYmSlNPTi5wYXJzZSh0KVtlXX0pKX1nZXRTZXNzaW9uRGF0YVBhcmFtZXRlcihlLHIpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkobi5TZXNzaW9uRGF0YSxyKSk7cmV0dXJuIHQmJkpTT04ucGFyc2UodClbZV19KSl9c2V0Q29uZmlnRGF0YVBhcmFtZXRlcihlLHIpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5zZXRWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KG4uQ29uZmlnRGF0YSksZSxyKX0pKX1zZXRPSURDUHJvdmlkZXJNZXRhRGF0YVBhcmFtZXRlcihlLHIpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5zZXRWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KG4uT0lEQ1Byb3ZpZGVyTWV0YURhdGEpLGUscil9KSl9c2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihlLHIsaSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnNldFZhbHVlKHRoaXMuX3Jlc29sdmVLZXkobi5UZW1wb3JhcnlEYXRhLGkpLGUscil9KSl9c2V0U2Vzc2lvbkRhdGFQYXJhbWV0ZXIoZSxyLGkpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5zZXRWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KG4uU2Vzc2lvbkRhdGEsaSksZSxyKX0pKX1yZW1vdmVDb25maWdEYXRhUGFyYW1ldGVyKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5yZW1vdmVWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KG4uQ29uZmlnRGF0YSksZSl9KSl9cmVtb3ZlT0lEQ1Byb3ZpZGVyTWV0YURhdGFQYXJhbWV0ZXIoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnJlbW92ZVZhbHVlKHRoaXMuX3Jlc29sdmVLZXkobi5PSURDUHJvdmlkZXJNZXRhRGF0YSksZSl9KSl9cmVtb3ZlVGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihlLHIpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5yZW1vdmVWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KG4uVGVtcG9yYXJ5RGF0YSxyKSxlKX0pKX1yZW1vdmVTZXNzaW9uRGF0YVBhcmFtZXRlcihlLHIpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5yZW1vdmVWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KG4uU2Vzc2lvbkRhdGEsciksZSl9KSl9fWNvbnN0IGY9e2Nsb2NrVG9sZXJhbmNlOjMwMCxlbmFibGVQS0NFOiEwLHJlc3BvbnNlTW9kZTpyLnF1ZXJ5LHNjb3BlOlsib3BlbmlkIl0sc2VuZENvb2tpZXNJblJlcXVlc3RzOiEwLHZhbGlkYXRlSURUb2tlbjohMH07Y2xhc3MgcHsKLyoqCiAgICAgICAgICogVGhpcyBpcyB0aGUgY29uc3RydWN0b3IgbWV0aG9kIHRoYXQgcmV0dXJucyBhbiBpbnN0YW5jZSBvZiB0aGUgLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtTdG9yZX0gc3RvcmUgLSBUaGUgc3RvcmUgb2JqZWN0LgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBfc3RvcmU6IFN0b3JlID0gbmV3IERhdGFTdG9yZSgpOwogICAgICAgICAqIGNvbnN0IGF1dGggPSBuZXcgQXNnYXJkZW9BdXRoQ2xpZW50PEN1c3RvbUNsaWVudENvbmZpZz4oX3N0b3JlKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNjb25zdHJ1Y3RvcgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqLwpjb25zdHJ1Y3RvcihlLHQpe3AuX2luc3RhbmNlSUQ/cC5faW5zdGFuY2VJRCs9MTpwLl9pbnN0YW5jZUlEPTAsdGhpcy5fZGF0YUxheWVyPW5ldyBkKGBpbnN0YW5jZV8ke3AuX2luc3RhbmNlSUR9YCxlKSx0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmU9bmV3IGgodGhpcy5fZGF0YUxheWVyLHQpCi8qKgogICAgICAgICAqCiAgICAgICAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFNESyB3aXRoIHRoZSBjb25maWcgZGF0YS4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7QXV0aENsaWVudENvbmZpZzxUPn0gY29uZmlnIC0gVGhlIGNvbmZpZyBvYmplY3QgdG8gaW5pdGlhbGl6ZSB3aXRoLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBjb25zdCBjb25maWcgPSB7CiAgICAgICAgICogICAgIHNpZ25JblJlZGlyZWN0VVJMOiAiaHR0cDovL2xvY2FsaG9zdDozMDAwL3NpZ24taW4iLAogICAgICAgICAqICAgICBjbGllbnRJRDogImNsaWVudCBJRCIsCiAgICAgICAgICogICAgIGJhc2VVcmw6ICJodHRwczovL2xvY2FsaG9zdDo5NDQzIgogICAgICAgICAqIH0KICAgICAgICAgKgogICAgICAgICAqIGF3YWl0IGF1dGguaW5pdGlhbGl6ZShjb25maWcpOwogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2luaXRpYWxpemUKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL31pbml0aWFsaXplKGUpe3ZhciByLG4saTtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRDb25maWdEYXRhKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGYpLGUpLHtzY29wZTpbLi4ubnVsbCE9PShyPWYuc2NvcGUpJiZ2b2lkIDAhPT1yP3I6W10sLi4ubnVsbCE9PShpPW51bGw9PT0obj1lLnNjb3BlKXx8dm9pZCAwPT09bj92b2lkIDA6bi5maWx0ZXIoKGU9Pnt2YXIgdDtyZXR1cm4hKG51bGw9PT0odD1udWxsPT1mP3ZvaWQgMDpmLnNjb3BlKXx8dm9pZCAwPT09dD92b2lkIDA6dC5pbmNsdWRlcyhlKSl9KSkpJiZ2b2lkIDAhPT1pP2k6W11dfSkpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBgRGF0YUxheWVyYCBvYmplY3QgdGhhdCBhbGxvd3MgeW91IHRvIGFjY2VzcyBhdXRoZW50aWNhdGlvbiBkYXRhLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7RGF0YUxheWVyfSAtIFRoZSBgRGF0YUxheWVyYCBvYmplY3QuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IGRhdGEgPSBhdXRoLmdldERhdGFMYXllcigpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldERhdGFMYXllcgogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0RGF0YUxheWVyKCl7cmV0dXJuIHRoaXMuX2RhdGFMYXllcn0KLyoqCiAgICAgICAgICogVGhpcyBpcyBhbiBhc3luYyBtZXRob2QgdGhhdCByZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGF1dGhvcml6YXRpb24gVVJMLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtHZXRBdXRoVVJMQ29uZmlnfSBjb25maWcgLSAoT3B0aW9uYWwpIEEgY29uZmlnIG9iamVjdCB0byBmb3JjZSBpbml0aWFsaXphdGlvbiBhbmQgcGFzcwogICAgICAgICAqIGN1c3RvbSBwYXRoIHBhcmFtZXRlcnMgc3VjaCBhcyB0aGUgZmlkcCBwYXJhbWV0ZXIuCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgYXV0aG9yaXphdGlvbiBVUkwuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF1dGguZ2V0QXV0aG9yaXphdGlvblVSTCgpLnRoZW4oKHVybCk9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5sb2codXJsKTsKICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAqIH0pOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldEF1dGhvcml6YXRpb25VUkwKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldEF1dGhvcml6YXRpb25VUkwoZSxyKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9T2JqZWN0LmFzc2lnbih7fSxlKTtyZXR1cm4gbnVsbD09dHx8ZGVsZXRlIHQuZm9yY2VJbml0LCh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigib3BfY29uZmlnX2luaXRpYXRlZCIpKT90aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0QXV0aG9yaXphdGlvblVSTCh0LHIpOnRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YShudWxsPT1lP3ZvaWQgMDplLmZvcmNlSW5pdCkudGhlbigoKCk9PnRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRBdXRob3JpemF0aW9uVVJMKHQscikpKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBpcyBhbiBhc3luYyBtZXRob2QgdGhhdCBzZW5kcyBhIHJlcXVlc3QgdG8gb2J0YWluIHRoZSBhY2Nlc3MgdG9rZW4gYW5kIHJldHVybnMgYSBQcm9taXNlCiAgICAgICAgICogdGhhdCByZXNvbHZlcyB3aXRoIHRoZSB0b2tlbiBhbmQgb3RoZXIgcmVsZXZhbnQgZGF0YS4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdXRob3JpemF0aW9uQ29kZSAtIFRoZSBhdXRob3JpemF0aW9uIGNvZGUuCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHNlc3Npb25TdGF0ZSAtIFRoZSBzZXNzaW9uIHN0YXRlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxUb2tlblJlc3BvbnNlPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSB0b2tlbiByZXNwb25zZS4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogYXV0aC5yZXF1ZXN0QWNjZXNzVG9rZW4oYXV0aENvZGUsIHNlc3Npb25TdGF0ZSkudGhlbigodG9rZW4pPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUubG9nKHRva2VuKTsKICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAqIH0pOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3JlcXVlc3RBY2Nlc3NUb2tlbgogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovcmVxdWVzdEFjY2Vzc1Rva2VuKGUscixuLGkpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIikpP3RoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5yZXF1ZXN0QWNjZXNzVG9rZW4oZSxyLG4saSk6dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldE9JRENQcm92aWRlck1ldGFEYXRhKCExKS50aGVuKCgoKT0+dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnJlcXVlc3RBY2Nlc3NUb2tlbihlLHIsbixpKSkpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCBjbGVhcnMgYWxsIGF1dGhlbnRpY2F0aW9uIGRhdGEgYW5kIHJldHVybnMgdGhlIHNpZ24tb3V0IFVSTC4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHNpZ24tb3V0IFVSTC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3Qgc2lnbk91dFVybCA9IGF3YWl0IGF1dGguc2lnbk91dCgpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3NpZ25PdXQKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL3NpZ25PdXQoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnNpZ25PdXQoZSl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHNpZ24tb3V0IFVSTC4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqCiAgICAgICAgICogKipUaGlzIGRvZXNuJ3QgY2xlYXIgdGhlIGF1dGhlbnRpY2F0aW9uIGRhdGEuKioKICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBzaWduLW91dCBVUkwuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IHNpZ25PdXRVcmwgPSBhd2FpdCBhdXRoLmdldFNpZ25PdXRVUkwoKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRTaWduT3V0VVJMCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9nZXRTaWduT3V0VVJMKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRTaWduT3V0VVJMKGUpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIE9JREMgc2VydmljZSBlbmRwb2ludHMgdGhhdCBhcmUgZmV0Y2hlZCBmcm9tIHRoZSBgLndlbGwta25vd25gIGVuZHBvaW50LgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxPSURDRW5kcG9pbnRzPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBPSURDIHNlcnZpY2UgZW5kcG9pbnRzLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBlbmRwb2ludHMgPSBhd2FpdCBhdXRoLmdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIGRlY29kZXMgdGhlIHBheWxvYWQgb2YgdGhlIElEIHRva2VuIGFuZCByZXR1cm5zIGl0LgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPERlY29kZWRJRFRva2VuUGF5bG9hZD59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgZGVjb2RlZCBJRCB0b2tlbiBwYXlsb2FkLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBkZWNvZGVkSWRUb2tlbiA9IGF3YWl0IGF1dGguZ2V0RGVjb2RlZElEVG9rZW4oKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXREZWNvZGVkSURUb2tlbgogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0RGVjb2RlZElEVG9rZW4oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldERlY29kZWRJRFRva2VuKGUpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBJRCB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIElEIHRva2VuLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBpZFRva2VuID0gYXdhaXQgYXV0aC5nZXRJRFRva2VuKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0SURUb2tlbgogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0SURUb2tlbihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0SURUb2tlbihlKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgYmFzaWMgdXNlciBpbmZvcm1hdGlvbiBvYnRhaW5lZCBmcm9tIHRoZSBJRCB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxCYXNpY1VzZXJJbmZvPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBiYXNpYyB1c2VyIGluZm9ybWF0aW9uLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCB1c2VySW5mbyA9IGF3YWl0IGF1dGguZ2V0QmFzaWNVc2VySW5mbygpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldEJhc2ljVXNlckluZm8KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldEJhc2ljVXNlckluZm8oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldEJhc2ljVXNlckluZm8oZSl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldm9rZXMgdGhlIGFjY2VzcyB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqCiAgICAgICAgICogKipUaGlzIG1ldGhvZCBhbHNvIGNsZWFycyB0aGUgYXV0aGVudGljYXRpb24gZGF0YS4qKgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxGZXRjaFJlc3BvbnNlPn0gLSBBIFByb21pc2UgdGhhdCByZXR1cm5zIHRoZSByZXNwb25zZSBvZiB0aGUgcmV2b2tlLWFjY2Vzcy10b2tlbiByZXF1ZXN0LgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBhdXRoLnJldm9rZUFjY2Vzc1Rva2VuKCkudGhlbigocmVzcG9uc2UpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUubG9nKHJlc3BvbnNlKTsKICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAqIH0pOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3Jldm9rZUFjY2Vzc1Rva2VuCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9yZXZva2VBY2Nlc3NUb2tlbihlKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnJldm9rZUFjY2Vzc1Rva2VuKGUpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZWZyZXNoZXMgdGhlIGFjY2VzcyB0b2tlbiBhbmQgcmV0dXJucyBhIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBuZXcgYWNjZXNzCiAgICAgICAgICogdG9rZW4gYW5kIG90aGVyIHJlbGV2YW50IGRhdGEuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8VG9rZW5SZXNwb25zZT59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdG9rZW4gcmVzcG9uc2UuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF1dGgucmVmcmVzaEFjY2Vzc1Rva2VuKCkudGhlbigocmVzcG9uc2UpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUubG9nKHJlc3BvbnNlKTsKICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAqIH0pOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3JlZnJlc2hBY2Nlc3NUb2tlbgogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovcmVmcmVzaEFjY2Vzc1Rva2VuKGUpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmVmcmVzaEFjY2Vzc1Rva2VuKGUpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBhY2Nlc3MgdG9rZW4uCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBhY2Nlc3MgdG9rZW4uCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXdhaXQgYXV0aC5nZXRBY2Nlc3NUb2tlbigpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldEFjY2Vzc1Rva2VuCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9nZXRBY2Nlc3NUb2tlbihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0QWNjZXNzVG9rZW4oZSl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHNlbmRzIGEgY3VzdG9tLWdyYW50IHJlcXVlc3QgYW5kIHJldHVybnMgYSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgcmVzcG9uc2UKICAgICAgICAgKiBkZXBlbmRpbmcgb24gdGhlIGNvbmZpZyBwYXNzZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge0N1c3RvbUdyYW50Q29uZmlnfSBjb25maWcgLSBBIGNvbmZpZyBvYmplY3QgY29udGFpbmluZyB0aGUgY3VzdG9tIGdyYW50IGNvbmZpZ3VyYXRpb25zLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxUb2tlblJlc3BvbnNlIHwgRmV0Y2hSZXNwb25zZT59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgcmVzcG9uc2UgZGVwZW5kaW5nCiAgICAgICAgICogb24geW91ciBjb25maWd1cmF0aW9ucy4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgY29uZmlnID0gewogICAgICAgICAqICAgYXR0YWNoVG9rZW46IGZhbHNlLAogICAgICAgICAqICAgZGF0YTogewogICAgICAgICAqICAgICAgIGNsaWVudF9pZDogInt7Y2xpZW50SUR9fSIsCiAgICAgICAgICogICAgICAgZ3JhbnRfdHlwZTogImFjY291bnRfc3dpdGNoIiwKICAgICAgICAgKiAgICAgICBzY29wZTogInt7c2NvcGV9fSIsCiAgICAgICAgICogICAgICAgdG9rZW46ICJ7e3Rva2VufX0iLAogICAgICAgICAqICAgfSwKICAgICAgICAgKiAgIGlkOiAiYWNjb3VudC1zd2l0Y2giLAogICAgICAgICAqICAgcmV0dXJuUmVzcG9uc2U6IHRydWUsCiAgICAgICAgICogICByZXR1cm5zU2Vzc2lvbjogdHJ1ZSwKICAgICAgICAgKiAgIHNpZ25JblJlcXVpcmVkOiB0cnVlCiAgICAgICAgICogfQogICAgICAgICAqCiAgICAgICAgICogYXV0aC5yZXF1ZXN0Q3VzdG9tR3JhbnQoY29uZmlnKS50aGVuKChyZXNwb25zZSk9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5sb2cocmVzcG9uc2UpOwogICAgICAgICAqIH0pLmNhdGNoKChlcnJvcik9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5lcnJvcihlcnJvcik7CiAgICAgICAgICogfSk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjcmVxdWVzdEN1c3RvbUdyYW50CiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9yZXF1ZXN0Q3VzdG9tR3JhbnQoZSx0KXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnJlcXVlc3RDdXN0b21HcmFudChlLHQpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGlmIHRoZSB1c2VyIGlzIGF1dGhlbnRpY2F0ZWQgb3Igbm90LgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPGJvb2xlYW4+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggYHRydWVgIGlmIHRoZSB1c2VyIGlzIGF1dGhlbnRpY2F0ZWQsIGBmYWxzZWAgb3RoZXJ3aXNlLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBhd2FpdCBhdXRoLmlzQXV0aGVudGljYXRlZCgpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2lzQXV0aGVudGljYXRlZAogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovaXNBdXRoZW50aWNhdGVkKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5pc0F1dGhlbnRpY2F0ZWQoZSl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFBLQ0UgY29kZSBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSBhdXRoZW50aWNhdGlvbiBVUkwuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3RhdGUgLSBUaGUgc3RhdGUgcGFyYW1ldGVyIHRoYXQgd2FzIHBhc3NlZCBpbiB0aGUgYXV0aGVudGljYXRpb24gVVJMLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIFBLQ0UgY29kZS4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgcGtjZSA9IGF3YWl0IGdldFBLQ0VDb2RlKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0UEtDRUNvZGUKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldFBLQ0VDb2RlKGUscil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldFBLQ0VDb2RlKGUscil9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFBLQ0UgY29kZSB0byB0aGUgZGF0YSBzdG9yZS4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwa2NlIC0gVGhlIFBLQ0UgY29kZS4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3RhdGUgLSBUaGUgc3RhdGUgcGFyYW1ldGVyIHRoYXQgd2FzIHBhc3NlZCBpbiB0aGUgYXV0aGVudGljYXRpb24gVVJMLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBhd2FpdCBhdXRoLnNldFBLQ0VDb2RlKCJwa2NlX2NvZGUiKQogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3NldFBLQ0VDb2RlCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9zZXRQS0NFQ29kZShlLHIsbil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuc2V0UEtDRUNvZGUoZSxyLG4pfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGlmIHRoZSBzaWduLW91dCBpcyBzdWNjZXNzZnVsIG9yIG5vdC4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzaWduT3V0UmVkaXJlY3RVcmwgLSBUaGUgVVJMIHRvIHdoaWNoIHRoZSB1c2VyIGhhcyBiZWVuIHJlZGlyZWN0ZWQgdG8gYWZ0ZXIgc2lnbmluZy1vdXQuCiAgICAgICAgICoKICAgICAgICAgKiAqKlRoZSBzZXJ2ZXIgYXBwZW5kcyBwYXRoIHBhcmFtZXRlcnMgdG8gdGhlIGBzaWduT3V0UmVkaXJlY3RVUkxgIGFuZCB0aGVzZSBwYXRoIHBhcmFtZXRlcnMKICAgICAgICAgKiAgYXJlIHJlcXVpcmVkIGZvciB0aGlzIG1ldGhvZCB0byBmdW5jdGlvbi4qKgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7Ym9vbGVhbn0gLSBgdHJ1ZWAgaWYgc3VjY2Vzc2Z1bCwgYGZhbHNlYCBvdGhlcndpc2UuCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjaXNTaWduT3V0U3VjY2Vzc2Z1bAogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovc3RhdGljIGlzU2lnbk91dFN1Y2Nlc3NmdWwoZSl7Y29uc3QgdD1uZXcgVVJMKGUpLHI9dC5zZWFyY2hQYXJhbXMuZ2V0KCJzdGF0ZSIpLG49Qm9vbGVhbih0LnNlYXJjaFBhcmFtcy5nZXQoImVycm9yIikpO3JldHVybiEhciYmInNpZ25fb3V0X3N1Y2Nlc3MiPT09ciYmIW59Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgaWYgdGhlIHNpZ24tb3V0IGhhcyBmYWlsZWQgb3Igbm90LgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHNpZ25PdXRSZWRpcmVjdFVybCAtIFRoZSBVUkwgdG8gd2hpY2ggdGhlIHVzZXIgaGFzIGJlZW4gcmVkaXJlY3RlZCB0byBhZnRlciBzaWduaW5nLW91dC4KICAgICAgICAgKgogICAgICAgICAqICoqVGhlIHNlcnZlciBhcHBlbmRzIHBhdGggcGFyYW1ldGVycyB0byB0aGUgYHNpZ25PdXRSZWRpcmVjdFVSTGAgYW5kIHRoZXNlIHBhdGggcGFyYW1ldGVycwogICAgICAgICAqICBhcmUgcmVxdWlyZWQgZm9yIHRoaXMgbWV0aG9kIHRvIGZ1bmN0aW9uLioqCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtib29sZWFufSAtIGB0cnVlYCBpZiBzdWNjZXNzZnVsLCBgZmFsc2VgIG90aGVyd2lzZS4KICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNkaWRTaWduT3V0RmFpbAogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovc3RhdGljIGRpZFNpZ25PdXRGYWlsKGUpe2NvbnN0IHQ9bmV3IFVSTChlKSxyPXQuc2VhcmNoUGFyYW1zLmdldCgic3RhdGUiKSxuPUJvb2xlYW4odC5zZWFyY2hQYXJhbXMuZ2V0KCJlcnJvciIpKTtyZXR1cm4hIXImJiJzaWduX291dF9zdWNjZXNzIj09PXImJm59Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHVwZGF0ZXMgdGhlIGNvbmZpZ3VyYXRpb24gdGhhdCB3YXMgcGFzc2VkIGludG8gdGhlIGNvbnN0cnVjdG9yIHdoZW4gaW5zdGFudGlhdGluZyB0aGlzIGNsYXNzLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtQYXJ0aWFsPEF1dGhDbGllbnRDb25maWc8VD4+fSBjb25maWcgLSBBIGNvbmZpZyBvYmplY3QgdG8gdXBkYXRlIHRoZSBTREsgY29uZmlndXJhdGlvbnMgd2l0aC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgY29uZmlnID0gewogICAgICAgICAqICAgICBzaWduSW5SZWRpcmVjdFVSTDogImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9zaWduLWluIiwKICAgICAgICAgKiAgICAgY2xpZW50SUQ6ICJjbGllbnQgSUQiLAogICAgICAgICAqICAgICBiYXNlVXJsOiAiaHR0cHM6Ly9sb2NhbGhvc3Q6OTQ0MyIKICAgICAgICAgKiB9CiAgICAgICAgICoKICAgICAgICAgKiBhd2FpdCBhdXRoLnVwZGF0ZUNvbmZpZyhjb25maWcpOwogICAgICAgICAqIGBgYAogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciN1cGRhdGVDb25maWcKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL3VwZGF0ZUNvbmZpZyhlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS51cGRhdGVDb25maWcoZSl9KSl9fWNvbnN0IGc9ImluaXQiO3ZhciB5LHY7IWZ1bmN0aW9uKGUpe2UuTG9jYWxTdG9yYWdlPSJsb2NhbFN0b3JhZ2UiLGUuU2Vzc2lvblN0b3JhZ2U9InNlc3Npb25TdG9yYWdlIixlLldlYldvcmtlcj0id2ViV29ya2VyIixlLkJyb3dzZXJNZW1vcnk9ImJyb3dzZXJNZW1vcnkifSh5fHwoeT17fSkpLGZ1bmN0aW9uKGUpe2UuU2lnbkluPSJzaWduLWluIixlLlNpZ25PdXQ9InNpZ24tb3V0IixlLkluaXRpYWxpemU9ImluaXRpYWxpemUiLGUuSHR0cFJlcXVlc3RTdGFydD0iaHR0cC1yZXF1ZXN0LXN0YXJ0IixlLkh0dHBSZXF1ZXN0RmluaXNoPSJodHRwLXJlcXVlc3QtZmluaXNoIixlLkh0dHBSZXF1ZXN0RXJyb3I9Imh0dHAtcmVxdWVzdC1lcnJvciIsZS5IdHRwUmVxdWVzdFN1Y2Nlc3M9Imh0dHAtcmVxdWVzdC1zdWNjZXNzIixlLlJldm9rZUFjY2Vzc1Rva2VuPSJyZXZva2UtYWNjZXNzLXRva2VuIixlLkN1c3RvbUdyYW50PSJjdXN0b20tZ3JhbnQiLGUuU2lnbk91dEZhaWxlZD0ic2lnbi1vdXQtZmFpbGVkIn0odnx8KHY9e30pKTtjb25zdCBtPSJjdXN0b21fZ3JhbnRfY29uZmlnIjtjbGFzcyB3e2NvbnN0cnVjdG9yKGUpe3RoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50PWUsdGhpcy5fZGF0YUxheWVyPXRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldERhdGFMYXllcigpfXJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkoKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKCk7aWYodC5yZWZyZXNoX3Rva2VuKXtjb25zdCByPXBhcnNlSW50KHQuZXhwaXJlc19pbiksbj1zZXRUaW1lb3V0KCgoKT0+ZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LnJlZnJlc2hBY2Nlc3NUb2tlbigpfSkpKSwxZTMqKHI8PTEwP3I6ci0xMCkpO3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGksSlNPTi5zdHJpbmdpZnkobikpfX0pKX1jbGVhclJlZnJlc2hUb2tlblRpbWVvdXQoKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2lmKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGkpKXtjb25zdCBlPUpTT04ucGFyc2UoeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoaSkpO2NsZWFyVGltZW91dChlKX19KSl9fWNsYXNzIF97Y29uc3RydWN0b3IoKXt9c3RhdGljIGdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSl7cmV0dXJue2Jsb2I6KG51bGw9PWU/dm9pZCAwOmUuZGF0YSlpbnN0YW5jZW9mIEJsb2I/bnVsbD09ZT92b2lkIDA6ZS5kYXRhOm51bGwsZGF0YTpKU09OLnN0cmluZ2lmeShudWxsIT1lP2U6IiIpLHN1Y2Nlc3M6ITB9fXN0YXRpYyBnZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpe3JldHVybihudWxsPT1lP3ZvaWQgMDplLnRvSlNPTikmJmRlbGV0ZSBlLnRvSlNPTix7ZXJyb3I6SlNPTi5zdHJpbmdpZnkobnVsbCE9ZT9lOiIiKSxzdWNjZXNzOiExfX19dmFyIGI9InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OiJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjp7fTtmdW5jdGlvbiBTKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJkZWZhdWx0Iik/ZS5kZWZhdWx0OmV9ZnVuY3Rpb24gRShlKXtpZihlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZm9yRWFjaCgoZnVuY3Rpb24ocil7dmFyIG49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHIsbi5nZXQ/bjp7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZVtyXX19KX0pKSx0fXZhciBrPXtleHBvcnRzOnt9fSxUPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciByPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKSxuPTA7bjxyLmxlbmd0aDtuKyspcltuXT1hcmd1bWVudHNbbl07cmV0dXJuIGUuYXBwbHkodCxyKX19LFI9VCxBPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7ZnVuY3Rpb24gQyhlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKX1mdW5jdGlvbiBEKGUpe3JldHVybiB2b2lkIDA9PT1lfWZ1bmN0aW9uIFAoZSl7cmV0dXJuIltvYmplY3QgQXJyYXlCdWZmZXJdIj09PUEuY2FsbChlKX1mdW5jdGlvbiBPKGUpe3JldHVybiBudWxsIT09ZSYmIm9iamVjdCI9PXR5cGVvZiBlfWZ1bmN0aW9uIEkoZSl7aWYoIltvYmplY3QgT2JqZWN0XSIhPT1BLmNhbGwoZSkpcmV0dXJuITE7dmFyIHQ9T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO3JldHVybiBudWxsPT09dHx8dD09PU9iamVjdC5wcm90b3R5cGV9ZnVuY3Rpb24gVShlKXtyZXR1cm4iW29iamVjdCBGdW5jdGlvbl0iPT09QS5jYWxsKGUpfWZ1bmN0aW9uIEwoZSx0KXtpZihudWxsIT1lKWlmKCJvYmplY3QiIT10eXBlb2YgZSYmKGU9W2VdKSxDKGUpKWZvcih2YXIgcj0wLG49ZS5sZW5ndGg7cjxuO3IrKyl0LmNhbGwobnVsbCxlW3JdLHIsZSk7ZWxzZSBmb3IodmFyIGkgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxpKSYmdC5jYWxsKG51bGwsZVtpXSxpLGUpfXZhciBIPXtpc0FycmF5OkMsaXNBcnJheUJ1ZmZlcjpQLGlzQnVmZmVyOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT09ZSYmIUQoZSkmJm51bGwhPT1lLmNvbnN0cnVjdG9yJiYhRChlLmNvbnN0cnVjdG9yKSYmImZ1bmN0aW9uIj09dHlwZW9mIGUuY29uc3RydWN0b3IuaXNCdWZmZXImJmUuY29uc3RydWN0b3IuaXNCdWZmZXIoZSl9LGlzRm9ybURhdGE6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgRm9ybURhdGFdIj09PUEuY2FsbChlKX0saXNBcnJheUJ1ZmZlclZpZXc6ZnVuY3Rpb24oZSl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmQXJyYXlCdWZmZXIuaXNWaWV3P0FycmF5QnVmZmVyLmlzVmlldyhlKTplJiZlLmJ1ZmZlciYmUChlLmJ1ZmZlcil9LGlzU3RyaW5nOmZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZX0saXNOdW1iZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlfSxpc09iamVjdDpPLGlzUGxhaW5PYmplY3Q6SSxpc1VuZGVmaW5lZDpELGlzRGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBEYXRlXSI9PT1BLmNhbGwoZSl9LGlzRmlsZTpmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBGaWxlXSI9PT1BLmNhbGwoZSl9LGlzQmxvYjpmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBCbG9iXSI9PT1BLmNhbGwoZSl9LGlzRnVuY3Rpb246VSxpc1N0cmVhbTpmdW5jdGlvbihlKXtyZXR1cm4gTyhlKSYmVShlLnBpcGUpfSxpc1VSTFNlYXJjaFBhcmFtczpmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBVUkxTZWFyY2hQYXJhbXNdIj09PUEuY2FsbChlKX0saXNTdGFuZGFyZEJyb3dzZXJFbnY6ZnVuY3Rpb24oKXtyZXR1cm4oInVuZGVmaW5lZCI9PXR5cGVvZiBuYXZpZ2F0b3J8fCJSZWFjdE5hdGl2ZSIhPT1uYXZpZ2F0b3IucHJvZHVjdCYmIk5hdGl2ZVNjcmlwdCIhPT1uYXZpZ2F0b3IucHJvZHVjdCYmIk5TIiE9PW5hdmlnYXRvci5wcm9kdWN0KSYmKCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiYidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50KX0sZm9yRWFjaDpMLG1lcmdlOmZ1bmN0aW9uIGUoKXt2YXIgdD17fTtmdW5jdGlvbiByKHIsbil7SSh0W25dKSYmSShyKT90W25dPWUodFtuXSxyKTpJKHIpP3Rbbl09ZSh7fSxyKTpDKHIpP3Rbbl09ci5zbGljZSgpOnRbbl09cn1mb3IodmFyIG49MCxpPWFyZ3VtZW50cy5sZW5ndGg7bjxpO24rKylMKGFyZ3VtZW50c1tuXSxyKTtyZXR1cm4gdH0sZXh0ZW5kOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gTCh0LChmdW5jdGlvbih0LG4pe2Vbbl09ciYmImZ1bmN0aW9uIj09dHlwZW9mIHQ/Uih0LHIpOnR9KSksZX0sdHJpbTpmdW5jdGlvbihlKXtyZXR1cm4gZS50cmltP2UudHJpbSgpOmUucmVwbGFjZSgvXlxzK3xccyskL2csIiIpfSxzdHJpcEJPTTpmdW5jdGlvbihlKXtyZXR1cm4gNjUyNzk9PT1lLmNoYXJDb2RlQXQoMCkmJihlPWUuc2xpY2UoMSkpLGV9fSxNPUg7ZnVuY3Rpb24gTihlKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGUpLnJlcGxhY2UoLyUzQS9naSwiOiIpLnJlcGxhY2UoLyUyNC9nLCIkIikucmVwbGFjZSgvJTJDL2dpLCIsIikucmVwbGFjZSgvJTIwL2csIisiKS5yZXBsYWNlKC8lNUIvZ2ksIlsiKS5yZXBsYWNlKC8lNUQvZ2ksIl0iKX12YXIgaj1mdW5jdGlvbihlLHQscil7aWYoIXQpcmV0dXJuIGU7dmFyIG47aWYociluPXIodCk7ZWxzZSBpZihNLmlzVVJMU2VhcmNoUGFyYW1zKHQpKW49dC50b1N0cmluZygpO2Vsc2V7dmFyIGk9W107TS5mb3JFYWNoKHQsKGZ1bmN0aW9uKGUsdCl7bnVsbCE9ZSYmKE0uaXNBcnJheShlKT90Kz0iW10iOmU9W2VdLE0uZm9yRWFjaChlLChmdW5jdGlvbihlKXtNLmlzRGF0ZShlKT9lPWUudG9JU09TdHJpbmcoKTpNLmlzT2JqZWN0KGUpJiYoZT1KU09OLnN0cmluZ2lmeShlKSksaS5wdXNoKE4odCkrIj0iK04oZSkpfSkpKX0pKSxuPWkuam9pbigiJiIpfWlmKG4pe3ZhciBvPWUuaW5kZXhPZigiIyIpOy0xIT09byYmKGU9ZS5zbGljZSgwLG8pKSxlKz0oLTE9PT1lLmluZGV4T2YoIj8iKT8iPyI6IiYiKStufXJldHVybiBlfSx4PUg7ZnVuY3Rpb24gcSgpe3RoaXMuaGFuZGxlcnM9W119cS5wcm90b3R5cGUudXNlPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdGhpcy5oYW5kbGVycy5wdXNoKHtmdWxmaWxsZWQ6ZSxyZWplY3RlZDp0LHN5bmNocm9ub3VzOiEhciYmci5zeW5jaHJvbm91cyxydW5XaGVuOnI/ci5ydW5XaGVuOm51bGx9KSx0aGlzLmhhbmRsZXJzLmxlbmd0aC0xfSxxLnByb3RvdHlwZS5lamVjdD1mdW5jdGlvbihlKXt0aGlzLmhhbmRsZXJzW2VdJiYodGhpcy5oYW5kbGVyc1tlXT1udWxsKX0scS5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbihlKXt4LmZvckVhY2godGhpcy5oYW5kbGVycywoZnVuY3Rpb24odCl7bnVsbCE9PXQmJmUodCl9KSl9O3ZhciBLPXEsSj0idW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9O2Z1bmN0aW9uIEIoKXt0aHJvdyBuZXcgRXJyb3IoInNldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX1mdW5jdGlvbiBGKCl7dGhyb3cgbmV3IEVycm9yKCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX12YXIgVz1CLCQ9RjtmdW5jdGlvbiB6KGUpe2lmKFc9PT1zZXRUaW1lb3V0KXJldHVybiBzZXRUaW1lb3V0KGUsMCk7aWYoKFc9PT1CfHwhVykmJnNldFRpbWVvdXQpcmV0dXJuIFc9c2V0VGltZW91dCxzZXRUaW1lb3V0KGUsMCk7dHJ5e3JldHVybiBXKGUsMCl9Y2F0Y2godCl7dHJ5e3JldHVybiBXLmNhbGwobnVsbCxlLDApfWNhdGNoKHQpe3JldHVybiBXLmNhbGwodGhpcyxlLDApfX19ImZ1bmN0aW9uIj09dHlwZW9mIEouc2V0VGltZW91dCYmKFc9c2V0VGltZW91dCksImZ1bmN0aW9uIj09dHlwZW9mIEouY2xlYXJUaW1lb3V0JiYoJD1jbGVhclRpbWVvdXQpO3ZhciBWLFk9W10sRz0hMSxYPS0xO2Z1bmN0aW9uIFooKXtHJiZWJiYoRz0hMSxWLmxlbmd0aD9ZPVYuY29uY2F0KFkpOlg9LTEsWS5sZW5ndGgmJlEoKSl9ZnVuY3Rpb24gUSgpe2lmKCFHKXt2YXIgZT16KFopO0c9ITA7Zm9yKHZhciB0PVkubGVuZ3RoO3Q7KXtmb3IoVj1ZLFk9W107KytYPHQ7KVYmJlZbWF0ucnVuKCk7WD0tMSx0PVkubGVuZ3RofVY9bnVsbCxHPSExLGZ1bmN0aW9uKGUpe2lmKCQ9PT1jbGVhclRpbWVvdXQpcmV0dXJuIGNsZWFyVGltZW91dChlKTtpZigoJD09PUZ8fCEkKSYmY2xlYXJUaW1lb3V0KXJldHVybiAkPWNsZWFyVGltZW91dCxjbGVhclRpbWVvdXQoZSk7dHJ5eyQoZSl9Y2F0Y2godCl7dHJ5e3JldHVybiAkLmNhbGwobnVsbCxlKX1jYXRjaCh0KXtyZXR1cm4gJC5jYWxsKHRoaXMsZSl9fX0oZSl9fWZ1bmN0aW9uIGVlKGUsdCl7dGhpcy5mdW49ZSx0aGlzLmFycmF5PXR9ZWUucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9O2Z1bmN0aW9uIHRlKCl7fXZhciByZT10ZSxuZT10ZSxpZT10ZSxvZT10ZSxzZT10ZSxhZT10ZSxjZT10ZTt2YXIgdWU9Si5wZXJmb3JtYW5jZXx8e30sbGU9dWUubm93fHx1ZS5tb3pOb3d8fHVlLm1zTm93fHx1ZS5vTm93fHx1ZS53ZWJraXROb3d8fGZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCl9O3ZhciBoZT1uZXcgRGF0ZTt2YXIgZGU9e25leHRUaWNrOmZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlmb3IodmFyIHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXRbci0xXT1hcmd1bWVudHNbcl07WS5wdXNoKG5ldyBlZShlLHQpKSwxIT09WS5sZW5ndGh8fEd8fHooUSl9LHRpdGxlOiJicm93c2VyIixicm93c2VyOiEwLGVudjp7fSxhcmd2OltdLHZlcnNpb246IiIsdmVyc2lvbnM6e30sb246cmUsYWRkTGlzdGVuZXI6bmUsb25jZTppZSxvZmY6b2UscmVtb3ZlTGlzdGVuZXI6c2UscmVtb3ZlQWxsTGlzdGVuZXJzOmFlLGVtaXQ6Y2UsYmluZGluZzpmdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkIil9LGN3ZDpmdW5jdGlvbigpe3JldHVybiIvIn0sY2hkaXI6ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKCJwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQiKX0sdW1hc2s6ZnVuY3Rpb24oKXtyZXR1cm4gMH0saHJ0aW1lOmZ1bmN0aW9uKGUpe3ZhciB0PS4wMDEqbGUuY2FsbCh1ZSkscj1NYXRoLmZsb29yKHQpLG49TWF0aC5mbG9vcih0JTEqMWU5KTtyZXR1cm4gZSYmKHItPWVbMF0sKG4tPWVbMV0pPDAmJihyLS0sbis9MWU5KSksW3Isbl19LHBsYXRmb3JtOiJicm93c2VyIixyZWxlYXNlOnt9LGNvbmZpZzp7fSx1cHRpbWU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUtaGUpLzFlM319LGZlPWRlLHBlPUgsZ2U9ZnVuY3Rpb24oZSx0LHIsbixpKXtyZXR1cm4gZS5jb25maWc9dCxyJiYoZS5jb2RlPXIpLGUucmVxdWVzdD1uLGUucmVzcG9uc2U9aSxlLmlzQXhpb3NFcnJvcj0hMCxlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnttZXNzYWdlOnRoaXMubWVzc2FnZSxuYW1lOnRoaXMubmFtZSxkZXNjcmlwdGlvbjp0aGlzLmRlc2NyaXB0aW9uLG51bWJlcjp0aGlzLm51bWJlcixmaWxlTmFtZTp0aGlzLmZpbGVOYW1lLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGNvbHVtbk51bWJlcjp0aGlzLmNvbHVtbk51bWJlcixzdGFjazp0aGlzLnN0YWNrLGNvbmZpZzp0aGlzLmNvbmZpZyxjb2RlOnRoaXMuY29kZSxzdGF0dXM6dGhpcy5yZXNwb25zZSYmdGhpcy5yZXNwb25zZS5zdGF0dXM/dGhpcy5yZXNwb25zZS5zdGF0dXM6bnVsbH19LGV9LHllPXtzaWxlbnRKU09OUGFyc2luZzohMCxmb3JjZWRKU09OUGFyc2luZzohMCxjbGFyaWZ5VGltZW91dEVycm9yOiExfSx2ZT1nZSxtZT1mdW5jdGlvbihlLHQscixuLGkpe3ZhciBvPW5ldyBFcnJvcihlKTtyZXR1cm4gdmUobyx0LHIsbixpKX0sd2U9bWUsX2U9SCxiZT1fZS5pc1N0YW5kYXJkQnJvd3NlckVudigpP3t3cml0ZTpmdW5jdGlvbihlLHQscixuLGksbyl7dmFyIHM9W107cy5wdXNoKGUrIj0iK2VuY29kZVVSSUNvbXBvbmVudCh0KSksX2UuaXNOdW1iZXIocikmJnMucHVzaCgiZXhwaXJlcz0iK25ldyBEYXRlKHIpLnRvR01UU3RyaW5nKCkpLF9lLmlzU3RyaW5nKG4pJiZzLnB1c2goInBhdGg9IituKSxfZS5pc1N0cmluZyhpKSYmcy5wdXNoKCJkb21haW49IitpKSwhMD09PW8mJnMucHVzaCgic2VjdXJlIiksZG9jdW1lbnQuY29va2llPXMuam9pbigiOyAiKX0scmVhZDpmdW5jdGlvbihlKXt2YXIgdD1kb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgiKF58O1xccyopKCIrZSsiKT0oW147XSopIikpO3JldHVybiB0P2RlY29kZVVSSUNvbXBvbmVudCh0WzNdKTpudWxsfSxyZW1vdmU6ZnVuY3Rpb24oZSl7dGhpcy53cml0ZShlLCIiLERhdGUubm93KCktODY0ZTUpfX06e3dyaXRlOmZ1bmN0aW9uKCl7fSxyZWFkOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LHJlbW92ZTpmdW5jdGlvbigpe319LFNlPWZ1bmN0aW9uKGUpe3JldHVybi9eKFthLXpdW2EtelxkK1wtLl0qOik/XC9cLy9pLnRlc3QoZSl9LEVlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/ZS5yZXBsYWNlKC9cLyskLywiIikrIi8iK3QucmVwbGFjZSgvXlwvKy8sIiIpOmV9LGtlPUgsVGU9WyJhZ2UiLCJhdXRob3JpemF0aW9uIiwiY29udGVudC1sZW5ndGgiLCJjb250ZW50LXR5cGUiLCJldGFnIiwiZXhwaXJlcyIsImZyb20iLCJob3N0IiwiaWYtbW9kaWZpZWQtc2luY2UiLCJpZi11bm1vZGlmaWVkLXNpbmNlIiwibGFzdC1tb2RpZmllZCIsImxvY2F0aW9uIiwibWF4LWZvcndhcmRzIiwicHJveHktYXV0aG9yaXphdGlvbiIsInJlZmVyZXIiLCJyZXRyeS1hZnRlciIsInVzZXItYWdlbnQiXSxSZT1ILEFlPVJlLmlzU3RhbmRhcmRCcm93c2VyRW52KCk/ZnVuY3Rpb24oKXt2YXIgZSx0PS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkscj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7ZnVuY3Rpb24gbihlKXt2YXIgbj1lO3JldHVybiB0JiYoci5zZXRBdHRyaWJ1dGUoImhyZWYiLG4pLG49ci5ocmVmKSxyLnNldEF0dHJpYnV0ZSgiaHJlZiIsbikse2hyZWY6ci5ocmVmLHByb3RvY29sOnIucHJvdG9jb2w/ci5wcm90b2NvbC5yZXBsYWNlKC86JC8sIiIpOiIiLGhvc3Q6ci5ob3N0LHNlYXJjaDpyLnNlYXJjaD9yLnNlYXJjaC5yZXBsYWNlKC9eXD8vLCIiKToiIixoYXNoOnIuaGFzaD9yLmhhc2gucmVwbGFjZSgvXiMvLCIiKToiIixob3N0bmFtZTpyLmhvc3RuYW1lLHBvcnQ6ci5wb3J0LHBhdGhuYW1lOiIvIj09PXIucGF0aG5hbWUuY2hhckF0KDApP3IucGF0aG5hbWU6Ii8iK3IucGF0aG5hbWV9fXJldHVybiBlPW4od2luZG93LmxvY2F0aW9uLmhyZWYpLGZ1bmN0aW9uKHQpe3ZhciByPVJlLmlzU3RyaW5nKHQpP24odCk6dDtyZXR1cm4gci5wcm90b2NvbD09PWUucHJvdG9jb2wmJnIuaG9zdD09PWUuaG9zdH19KCk6ZnVuY3Rpb24oKXtyZXR1cm4hMH07ZnVuY3Rpb24gQ2UoZSl7dGhpcy5tZXNzYWdlPWV9Q2UucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIkNhbmNlbCIrKHRoaXMubWVzc2FnZT8iOiAiK3RoaXMubWVzc2FnZToiIil9LENlLnByb3RvdHlwZS5fX0NBTkNFTF9fPSEwO3ZhciBEZT1DZSxQZT1ILE9lPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztyLnN0YXR1cyYmbiYmIW4oci5zdGF0dXMpP3Qod2UoIlJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgIityLnN0YXR1cyxyLmNvbmZpZyxudWxsLHIucmVxdWVzdCxyKSk6ZShyKX0sSWU9YmUsVWU9aixMZT1mdW5jdGlvbihlLHQpe3JldHVybiBlJiYhU2UodCk/RWUoZSx0KTp0fSxIZT1mdW5jdGlvbihlKXt2YXIgdCxyLG4saT17fTtyZXR1cm4gZT8oa2UuZm9yRWFjaChlLnNwbGl0KCJcbiIpLChmdW5jdGlvbihlKXtpZihuPWUuaW5kZXhPZigiOiIpLHQ9a2UudHJpbShlLnN1YnN0cigwLG4pKS50b0xvd2VyQ2FzZSgpLHI9a2UudHJpbShlLnN1YnN0cihuKzEpKSx0KXtpZihpW3RdJiZUZS5pbmRleE9mKHQpPj0wKXJldHVybjtpW3RdPSJzZXQtY29va2llIj09PXQ/KGlbdF0/aVt0XTpbXSkuY29uY2F0KFtyXSk6aVt0XT9pW3RdKyIsICIrcjpyfX0pKSxpKTppfSxNZT1BZSxOZT1tZSxqZT15ZSx4ZT1EZSxxZT1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKHQscil7dmFyIG4saT1lLmRhdGEsbz1lLmhlYWRlcnMscz1lLnJlc3BvbnNlVHlwZTtmdW5jdGlvbiBhKCl7ZS5jYW5jZWxUb2tlbiYmZS5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShuKSxlLnNpZ25hbCYmZS5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLG4pfVBlLmlzRm9ybURhdGEoaSkmJmRlbGV0ZSBvWyJDb250ZW50LVR5cGUiXTt2YXIgYz1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYoZS5hdXRoKXt2YXIgdT1lLmF1dGgudXNlcm5hbWV8fCIiLGw9ZS5hdXRoLnBhc3N3b3JkP3VuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChlLmF1dGgucGFzc3dvcmQpKToiIjtvLkF1dGhvcml6YXRpb249IkJhc2ljICIrYnRvYSh1KyI6IitsKX12YXIgaD1MZShlLmJhc2VVUkwsZS51cmwpO2Z1bmN0aW9uIGQoKXtpZihjKXt2YXIgbj0iZ2V0QWxsUmVzcG9uc2VIZWFkZXJzImluIGM/SGUoYy5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSk6bnVsbCxpPXtkYXRhOnMmJiJ0ZXh0IiE9PXMmJiJqc29uIiE9PXM/Yy5yZXNwb25zZTpjLnJlc3BvbnNlVGV4dCxzdGF0dXM6Yy5zdGF0dXMsc3RhdHVzVGV4dDpjLnN0YXR1c1RleHQsaGVhZGVyczpuLGNvbmZpZzplLHJlcXVlc3Q6Y307T2UoKGZ1bmN0aW9uKGUpe3QoZSksYSgpfSksKGZ1bmN0aW9uKGUpe3IoZSksYSgpfSksaSksYz1udWxsfX1pZihjLm9wZW4oZS5tZXRob2QudG9VcHBlckNhc2UoKSxVZShoLGUucGFyYW1zLGUucGFyYW1zU2VyaWFsaXplciksITApLGMudGltZW91dD1lLnRpbWVvdXQsIm9ubG9hZGVuZCJpbiBjP2Mub25sb2FkZW5kPWQ6Yy5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtjJiY0PT09Yy5yZWFkeVN0YXRlJiYoMCE9PWMuc3RhdHVzfHxjLnJlc3BvbnNlVVJMJiYwPT09Yy5yZXNwb25zZVVSTC5pbmRleE9mKCJmaWxlOiIpKSYmc2V0VGltZW91dChkKX0sYy5vbmFib3J0PWZ1bmN0aW9uKCl7YyYmKHIoTmUoIlJlcXVlc3QgYWJvcnRlZCIsZSwiRUNPTk5BQk9SVEVEIixjKSksYz1udWxsKX0sYy5vbmVycm9yPWZ1bmN0aW9uKCl7cihOZSgiTmV0d29yayBFcnJvciIsZSxudWxsLGMpKSxjPW51bGx9LGMub250aW1lb3V0PWZ1bmN0aW9uKCl7dmFyIHQ9ZS50aW1lb3V0PyJ0aW1lb3V0IG9mICIrZS50aW1lb3V0KyJtcyBleGNlZWRlZCI6InRpbWVvdXQgZXhjZWVkZWQiLG49ZS50cmFuc2l0aW9uYWx8fGplO2UudGltZW91dEVycm9yTWVzc2FnZSYmKHQ9ZS50aW1lb3V0RXJyb3JNZXNzYWdlKSxyKE5lKHQsZSxuLmNsYXJpZnlUaW1lb3V0RXJyb3I/IkVUSU1FRE9VVCI6IkVDT05OQUJPUlRFRCIsYykpLGM9bnVsbH0sUGUuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSl7dmFyIGY9KGUud2l0aENyZWRlbnRpYWxzfHxNZShoKSkmJmUueHNyZkNvb2tpZU5hbWU/SWUucmVhZChlLnhzcmZDb29raWVOYW1lKTp2b2lkIDA7ZiYmKG9bZS54c3JmSGVhZGVyTmFtZV09Zil9InNldFJlcXVlc3RIZWFkZXIiaW4gYyYmUGUuZm9yRWFjaChvLChmdW5jdGlvbihlLHQpe3ZvaWQgMD09PWkmJiJjb250ZW50LXR5cGUiPT09dC50b0xvd2VyQ2FzZSgpP2RlbGV0ZSBvW3RdOmMuc2V0UmVxdWVzdEhlYWRlcih0LGUpfSkpLFBlLmlzVW5kZWZpbmVkKGUud2l0aENyZWRlbnRpYWxzKXx8KGMud2l0aENyZWRlbnRpYWxzPSEhZS53aXRoQ3JlZGVudGlhbHMpLHMmJiJqc29uIiE9PXMmJihjLnJlc3BvbnNlVHlwZT1lLnJlc3BvbnNlVHlwZSksImZ1bmN0aW9uIj09dHlwZW9mIGUub25Eb3dubG9hZFByb2dyZXNzJiZjLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixlLm9uRG93bmxvYWRQcm9ncmVzcyksImZ1bmN0aW9uIj09dHlwZW9mIGUub25VcGxvYWRQcm9ncmVzcyYmYy51cGxvYWQmJmMudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixlLm9uVXBsb2FkUHJvZ3Jlc3MpLChlLmNhbmNlbFRva2VufHxlLnNpZ25hbCkmJihuPWZ1bmN0aW9uKGUpe2MmJihyKCFlfHxlJiZlLnR5cGU/bmV3IHhlKCJjYW5jZWxlZCIpOmUpLGMuYWJvcnQoKSxjPW51bGwpfSxlLmNhbmNlbFRva2VuJiZlLmNhbmNlbFRva2VuLnN1YnNjcmliZShuKSxlLnNpZ25hbCYmKGUuc2lnbmFsLmFib3J0ZWQ/bigpOmUuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixuKSkpLGl8fChpPW51bGwpLGMuc2VuZChpKX0pKX0sS2U9SCxKZT1mdW5jdGlvbihlLHQpe3BlLmZvckVhY2goZSwoZnVuY3Rpb24ocixuKXtuIT09dCYmbi50b1VwcGVyQ2FzZSgpPT09dC50b1VwcGVyQ2FzZSgpJiYoZVt0XT1yLGRlbGV0ZSBlW25dKX0pKX0sQmU9Z2UsRmU9eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQifTtmdW5jdGlvbiBXZShlLHQpeyFLZS5pc1VuZGVmaW5lZChlKSYmS2UuaXNVbmRlZmluZWQoZVsiQ29udGVudC1UeXBlIl0pJiYoZVsiQ29udGVudC1UeXBlIl09dCl9dmFyICRlLHplPXt0cmFuc2l0aW9uYWw6eWUsYWRhcHRlcjooKCJ1bmRlZmluZWQiIT10eXBlb2YgWE1MSHR0cFJlcXVlc3R8fHZvaWQgMCE9PWZlJiYiW29iamVjdCBwcm9jZXNzXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZmUpKSYmKCRlPXFlKSwkZSksdHJhbnNmb3JtUmVxdWVzdDpbZnVuY3Rpb24oZSx0KXtyZXR1cm4gSmUodCwiQWNjZXB0IiksSmUodCwiQ29udGVudC1UeXBlIiksS2UuaXNGb3JtRGF0YShlKXx8S2UuaXNBcnJheUJ1ZmZlcihlKXx8S2UuaXNCdWZmZXIoZSl8fEtlLmlzU3RyZWFtKGUpfHxLZS5pc0ZpbGUoZSl8fEtlLmlzQmxvYihlKT9lOktlLmlzQXJyYXlCdWZmZXJWaWV3KGUpP2UuYnVmZmVyOktlLmlzVVJMU2VhcmNoUGFyYW1zKGUpPyhXZSh0LCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIpLGUudG9TdHJpbmcoKSk6S2UuaXNPYmplY3QoZSl8fHQmJiJhcHBsaWNhdGlvbi9qc29uIj09PXRbIkNvbnRlbnQtVHlwZSJdPyhXZSh0LCJhcHBsaWNhdGlvbi9qc29uIiksZnVuY3Rpb24oZSx0LHIpe2lmKEtlLmlzU3RyaW5nKGUpKXRyeXtyZXR1cm4odHx8SlNPTi5wYXJzZSkoZSksS2UudHJpbShlKX1jYXRjaChlKXtpZigiU3ludGF4RXJyb3IiIT09ZS5uYW1lKXRocm93IGV9cmV0dXJuKHJ8fEpTT04uc3RyaW5naWZ5KShlKX0oZSkpOmV9XSx0cmFuc2Zvcm1SZXNwb25zZTpbZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy50cmFuc2l0aW9uYWx8fHplLnRyYW5zaXRpb25hbCxyPXQmJnQuc2lsZW50SlNPTlBhcnNpbmcsbj10JiZ0LmZvcmNlZEpTT05QYXJzaW5nLGk9IXImJiJqc29uIj09PXRoaXMucmVzcG9uc2VUeXBlO2lmKGl8fG4mJktlLmlzU3RyaW5nKGUpJiZlLmxlbmd0aCl0cnl7cmV0dXJuIEpTT04ucGFyc2UoZSl9Y2F0Y2goZSl7aWYoaSl7aWYoIlN5bnRheEVycm9yIj09PWUubmFtZSl0aHJvdyBCZShlLHRoaXMsIkVfSlNPTl9QQVJTRSIpO3Rocm93IGV9fXJldHVybiBlfV0sdGltZW91dDowLHhzcmZDb29raWVOYW1lOiJYU1JGLVRPS0VOIix4c3JmSGVhZGVyTmFtZToiWC1YU1JGLVRPS0VOIixtYXhDb250ZW50TGVuZ3RoOi0xLG1heEJvZHlMZW5ndGg6LTEsdmFsaWRhdGVTdGF0dXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTIwMCYmZTwzMDB9LGhlYWRlcnM6e2NvbW1vbjp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyoifX19O0tlLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIl0sKGZ1bmN0aW9uKGUpe3plLmhlYWRlcnNbZV09e319KSksS2UuZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCJdLChmdW5jdGlvbihlKXt6ZS5oZWFkZXJzW2VdPUtlLm1lcmdlKEZlKX0pKTt2YXIgVmU9emUsWWU9SCxHZT1WZSxYZT1mdW5jdGlvbihlKXtyZXR1cm4hKCFlfHwhZS5fX0NBTkNFTF9fKX0sWmU9SCxRZT1mdW5jdGlvbihlLHQscil7dmFyIG49dGhpc3x8R2U7cmV0dXJuIFllLmZvckVhY2gociwoZnVuY3Rpb24ocil7ZT1yLmNhbGwobixlLHQpfSkpLGV9LGV0PVhlLHR0PVZlLHJ0PURlO2Z1bmN0aW9uIG50KGUpe2lmKGUuY2FuY2VsVG9rZW4mJmUuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpLGUuc2lnbmFsJiZlLnNpZ25hbC5hYm9ydGVkKXRocm93IG5ldyBydCgiY2FuY2VsZWQiKX12YXIgaXQ9SCxvdD1mdW5jdGlvbihlLHQpe3Q9dHx8e307dmFyIHI9e307ZnVuY3Rpb24gbihlLHQpe3JldHVybiBpdC5pc1BsYWluT2JqZWN0KGUpJiZpdC5pc1BsYWluT2JqZWN0KHQpP2l0Lm1lcmdlKGUsdCk6aXQuaXNQbGFpbk9iamVjdCh0KT9pdC5tZXJnZSh7fSx0KTppdC5pc0FycmF5KHQpP3Quc2xpY2UoKTp0fWZ1bmN0aW9uIGkocil7cmV0dXJuIGl0LmlzVW5kZWZpbmVkKHRbcl0pP2l0LmlzVW5kZWZpbmVkKGVbcl0pP3ZvaWQgMDpuKHZvaWQgMCxlW3JdKTpuKGVbcl0sdFtyXSl9ZnVuY3Rpb24gbyhlKXtpZighaXQuaXNVbmRlZmluZWQodFtlXSkpcmV0dXJuIG4odm9pZCAwLHRbZV0pfWZ1bmN0aW9uIHMocil7cmV0dXJuIGl0LmlzVW5kZWZpbmVkKHRbcl0pP2l0LmlzVW5kZWZpbmVkKGVbcl0pP3ZvaWQgMDpuKHZvaWQgMCxlW3JdKTpuKHZvaWQgMCx0W3JdKX1mdW5jdGlvbiBhKHIpe3JldHVybiByIGluIHQ/bihlW3JdLHRbcl0pOnIgaW4gZT9uKHZvaWQgMCxlW3JdKTp2b2lkIDB9dmFyIGM9e3VybDpvLG1ldGhvZDpvLGRhdGE6byxiYXNlVVJMOnMsdHJhbnNmb3JtUmVxdWVzdDpzLHRyYW5zZm9ybVJlc3BvbnNlOnMscGFyYW1zU2VyaWFsaXplcjpzLHRpbWVvdXQ6cyx0aW1lb3V0TWVzc2FnZTpzLHdpdGhDcmVkZW50aWFsczpzLGFkYXB0ZXI6cyxyZXNwb25zZVR5cGU6cyx4c3JmQ29va2llTmFtZTpzLHhzcmZIZWFkZXJOYW1lOnMsb25VcGxvYWRQcm9ncmVzczpzLG9uRG93bmxvYWRQcm9ncmVzczpzLGRlY29tcHJlc3M6cyxtYXhDb250ZW50TGVuZ3RoOnMsbWF4Qm9keUxlbmd0aDpzLHRyYW5zcG9ydDpzLGh0dHBBZ2VudDpzLGh0dHBzQWdlbnQ6cyxjYW5jZWxUb2tlbjpzLHNvY2tldFBhdGg6cyxyZXNwb25zZUVuY29kaW5nOnMsdmFsaWRhdGVTdGF0dXM6YX07cmV0dXJuIGl0LmZvckVhY2goT2JqZWN0LmtleXMoZSkuY29uY2F0KE9iamVjdC5rZXlzKHQpKSwoZnVuY3Rpb24oZSl7dmFyIHQ9Y1tlXXx8aSxuPXQoZSk7aXQuaXNVbmRlZmluZWQobikmJnQhPT1hfHwocltlXT1uKX0pKSxyfSxzdD0iMC4yNi4xIixhdD1zdCxjdD17fTtbIm9iamVjdCIsImJvb2xlYW4iLCJudW1iZXIiLCJmdW5jdGlvbiIsInN0cmluZyIsInN5bWJvbCJdLmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7Y3RbZV09ZnVuY3Rpb24ocil7cmV0dXJuIHR5cGVvZiByPT09ZXx8ImEiKyh0PDE/Im4gIjoiICIpK2V9fSkpO3ZhciB1dD17fTtjdC50cmFuc2l0aW9uYWw9ZnVuY3Rpb24oZSx0LHIpe2Z1bmN0aW9uIG4oZSx0KXtyZXR1cm4iW0F4aW9zIHYiK2F0KyJdIFRyYW5zaXRpb25hbCBvcHRpb24gJyIrZSsiJyIrdCsocj8iLiAiK3I6IiIpfXJldHVybiBmdW5jdGlvbihyLGksbyl7aWYoITE9PT1lKXRocm93IG5ldyBFcnJvcihuKGksIiBoYXMgYmVlbiByZW1vdmVkIisodD8iIGluICIrdDoiIikpKTtyZXR1cm4gdCYmIXV0W2ldJiYodXRbaV09ITAsY29uc29sZS53YXJuKG4oaSwiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdiIrdCsiIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlIikpKSwhZXx8ZShyLGksbyl9fTt2YXIgbHQ9e2Fzc2VydE9wdGlvbnM6ZnVuY3Rpb24oZSx0LHIpe2lmKCJvYmplY3QiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Iik7Zm9yKHZhciBuPU9iamVjdC5rZXlzKGUpLGk9bi5sZW5ndGg7aS0tID4wOyl7dmFyIG89bltpXSxzPXRbb107aWYocyl7dmFyIGE9ZVtvXSxjPXZvaWQgMD09PWF8fHMoYSxvLGUpO2lmKCEwIT09Yyl0aHJvdyBuZXcgVHlwZUVycm9yKCJvcHRpb24gIitvKyIgbXVzdCBiZSAiK2MpfWVsc2UgaWYoITAhPT1yKXRocm93IEVycm9yKCJVbmtub3duIG9wdGlvbiAiK28pfX0sdmFsaWRhdG9yczpjdH0saHQ9SCxkdD1qLGZ0PUsscHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG50KGUpLGUuaGVhZGVycz1lLmhlYWRlcnN8fHt9LGUuZGF0YT1RZS5jYWxsKGUsZS5kYXRhLGUuaGVhZGVycyxlLnRyYW5zZm9ybVJlcXVlc3QpLGUuaGVhZGVycz1aZS5tZXJnZShlLmhlYWRlcnMuY29tbW9ufHx7fSxlLmhlYWRlcnNbZS5tZXRob2RdfHx7fSxlLmhlYWRlcnMpLFplLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIiwiY29tbW9uIl0sKGZ1bmN0aW9uKHQpe2RlbGV0ZSBlLmhlYWRlcnNbdF19KSksKGUuYWRhcHRlcnx8dHQuYWRhcHRlcikoZSkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIG50KGUpLHQuZGF0YT1RZS5jYWxsKGUsdC5kYXRhLHQuaGVhZGVycyxlLnRyYW5zZm9ybVJlc3BvbnNlKSx0fSksKGZ1bmN0aW9uKHQpe3JldHVybiBldCh0KXx8KG50KGUpLHQmJnQucmVzcG9uc2UmJih0LnJlc3BvbnNlLmRhdGE9UWUuY2FsbChlLHQucmVzcG9uc2UuZGF0YSx0LnJlc3BvbnNlLmhlYWRlcnMsZS50cmFuc2Zvcm1SZXNwb25zZSkpKSxQcm9taXNlLnJlamVjdCh0KX0pKX0sZ3Q9b3QseXQ9bHQsdnQ9eXQudmFsaWRhdG9ycztmdW5jdGlvbiBtdChlKXt0aGlzLmRlZmF1bHRzPWUsdGhpcy5pbnRlcmNlcHRvcnM9e3JlcXVlc3Q6bmV3IGZ0LHJlc3BvbnNlOm5ldyBmdH19bXQucHJvdG90eXBlLnJlcXVlc3Q9ZnVuY3Rpb24oZSx0KXsic3RyaW5nIj09dHlwZW9mIGU/KHQ9dHx8e30pLnVybD1lOnQ9ZXx8e30sKHQ9Z3QodGhpcy5kZWZhdWx0cyx0KSkubWV0aG9kP3QubWV0aG9kPXQubWV0aG9kLnRvTG93ZXJDYXNlKCk6dGhpcy5kZWZhdWx0cy5tZXRob2Q/dC5tZXRob2Q9dGhpcy5kZWZhdWx0cy5tZXRob2QudG9Mb3dlckNhc2UoKTp0Lm1ldGhvZD0iZ2V0Ijt2YXIgcj10LnRyYW5zaXRpb25hbDt2b2lkIDAhPT1yJiZ5dC5hc3NlcnRPcHRpb25zKHIse3NpbGVudEpTT05QYXJzaW5nOnZ0LnRyYW5zaXRpb25hbCh2dC5ib29sZWFuKSxmb3JjZWRKU09OUGFyc2luZzp2dC50cmFuc2l0aW9uYWwodnQuYm9vbGVhbiksY2xhcmlmeVRpbWVvdXRFcnJvcjp2dC50cmFuc2l0aW9uYWwodnQuYm9vbGVhbil9LCExKTt2YXIgbj1bXSxpPSEwO3RoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ImZ1bmN0aW9uIj09dHlwZW9mIGUucnVuV2hlbiYmITE9PT1lLnJ1bldoZW4odCl8fChpPWkmJmUuc3luY2hyb25vdXMsbi51bnNoaWZ0KGUuZnVsZmlsbGVkLGUucmVqZWN0ZWQpKX0pKTt2YXIgbyxzPVtdO2lmKHRoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goKGZ1bmN0aW9uKGUpe3MucHVzaChlLmZ1bGZpbGxlZCxlLnJlamVjdGVkKX0pKSwhaSl7dmFyIGE9W3B0LHZvaWQgMF07Zm9yKEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmFwcGx5KGEsbiksYT1hLmNvbmNhdChzKSxvPVByb21pc2UucmVzb2x2ZSh0KTthLmxlbmd0aDspbz1vLnRoZW4oYS5zaGlmdCgpLGEuc2hpZnQoKSk7cmV0dXJuIG99Zm9yKHZhciBjPXQ7bi5sZW5ndGg7KXt2YXIgdT1uLnNoaWZ0KCksbD1uLnNoaWZ0KCk7dHJ5e2M9dShjKX1jYXRjaChlKXtsKGUpO2JyZWFrfX10cnl7bz1wdChjKX1jYXRjaChlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9Zm9yKDtzLmxlbmd0aDspbz1vLnRoZW4ocy5zaGlmdCgpLHMuc2hpZnQoKSk7cmV0dXJuIG99LG10LnByb3RvdHlwZS5nZXRVcmk9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9Z3QodGhpcy5kZWZhdWx0cyxlKSxkdChlLnVybCxlLnBhcmFtcyxlLnBhcmFtc1NlcmlhbGl6ZXIpLnJlcGxhY2UoL15cPy8sIiIpfSxodC5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsIm9wdGlvbnMiXSwoZnVuY3Rpb24oZSl7bXQucHJvdG90eXBlW2VdPWZ1bmN0aW9uKHQscil7cmV0dXJuIHRoaXMucmVxdWVzdChndChyfHx7fSx7bWV0aG9kOmUsdXJsOnQsZGF0YToocnx8e30pLmRhdGF9KSl9fSkpLGh0LmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSwoZnVuY3Rpb24oZSl7bXQucHJvdG90eXBlW2VdPWZ1bmN0aW9uKHQscixuKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KGd0KG58fHt9LHttZXRob2Q6ZSx1cmw6dCxkYXRhOnJ9KSl9fSkpO3ZhciB3dD1tdCxfdD1EZTtmdW5jdGlvbiBidChlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uIik7dmFyIHQ7dGhpcy5wcm9taXNlPW5ldyBQcm9taXNlKChmdW5jdGlvbihlKXt0PWV9KSk7dmFyIHI9dGhpczt0aGlzLnByb21pc2UudGhlbigoZnVuY3Rpb24oZSl7aWYoci5fbGlzdGVuZXJzKXt2YXIgdCxuPXIuX2xpc3RlbmVycy5sZW5ndGg7Zm9yKHQ9MDt0PG47dCsrKXIuX2xpc3RlbmVyc1t0XShlKTtyLl9saXN0ZW5lcnM9bnVsbH19KSksdGhpcy5wcm9taXNlLnRoZW49ZnVuY3Rpb24oZSl7dmFyIHQsbj1uZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSl7ci5zdWJzY3JpYmUoZSksdD1lfSkpLnRoZW4oZSk7cmV0dXJuIG4uY2FuY2VsPWZ1bmN0aW9uKCl7ci51bnN1YnNjcmliZSh0KX0sbn0sZSgoZnVuY3Rpb24oZSl7ci5yZWFzb258fChyLnJlYXNvbj1uZXcgX3QoZSksdChyLnJlYXNvbikpfSkpfWJ0LnByb3RvdHlwZS50aHJvd0lmUmVxdWVzdGVkPWZ1bmN0aW9uKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259LGJ0LnByb3RvdHlwZS5zdWJzY3JpYmU9ZnVuY3Rpb24oZSl7dGhpcy5yZWFzb24/ZSh0aGlzLnJlYXNvbik6dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKGUpOnRoaXMuX2xpc3RlbmVycz1bZV19LGJ0LnByb3RvdHlwZS51bnN1YnNjcmliZT1mdW5jdGlvbihlKXtpZih0aGlzLl9saXN0ZW5lcnMpe3ZhciB0PXRoaXMuX2xpc3RlbmVycy5pbmRleE9mKGUpOy0xIT09dCYmdGhpcy5fbGlzdGVuZXJzLnNwbGljZSh0LDEpfX0sYnQuc291cmNlPWZ1bmN0aW9uKCl7dmFyIGUsdD1uZXcgYnQoKGZ1bmN0aW9uKHQpe2U9dH0pKTtyZXR1cm57dG9rZW46dCxjYW5jZWw6ZX19O3ZhciBTdD1idCxFdD1ILGt0PUgsVHQ9VCxSdD13dCxBdD1vdDt2YXIgQ3Q9ZnVuY3Rpb24gZSh0KXt2YXIgcj1uZXcgUnQodCksbj1UdChSdC5wcm90b3R5cGUucmVxdWVzdCxyKTtyZXR1cm4ga3QuZXh0ZW5kKG4sUnQucHJvdG90eXBlLHIpLGt0LmV4dGVuZChuLHIpLG4uY3JlYXRlPWZ1bmN0aW9uKHIpe3JldHVybiBlKEF0KHQscikpfSxufShWZSk7Q3QuQXhpb3M9UnQsQ3QuQ2FuY2VsPURlLEN0LkNhbmNlbFRva2VuPVN0LEN0LmlzQ2FuY2VsPVhlLEN0LlZFUlNJT049c3QsQ3QuYWxsPWZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLmFsbChlKX0sQ3Quc3ByZWFkPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS5hcHBseShudWxsLHQpfX0sQ3QuaXNBeGlvc0Vycm9yPWZ1bmN0aW9uKGUpe3JldHVybiBFdC5pc09iamVjdChlKSYmITA9PT1lLmlzQXhpb3NFcnJvcn0say5leHBvcnRzPUN0LGsuZXhwb3J0cy5kZWZhdWx0PUN0O3ZhciBEdCxQdD1rLmV4cG9ydHM7bGV0IE90PUR0PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5hdHRhY2hUb2tlbj0oKT0+UHJvbWlzZS5yZXNvbHZlKCksdGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjaz0oKT0+bnVsbCx0aGlzLnJlcXVlc3RTdWNjZXNzQ2FsbGJhY2s9KCk9Pm51bGwsdGhpcy5yZXF1ZXN0RXJyb3JDYWxsYmFjaz0oKT0+bnVsbCx0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjaz0oKT0+bnVsbCx0aGlzLmluaXQ9dGhpcy5pbml0LmJpbmQodGhpcyksdGhpcy5zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2s9dGhpcy5zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2suYmluZCh0aGlzKSx0aGlzLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2s9dGhpcy5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrLmJpbmQodGhpcyksdGhpcy5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2s9dGhpcy5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2suYmluZCh0aGlzKSx0aGlzLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrPXRoaXMuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2suYmluZCh0aGlzKX1zdGF0aWMgZ2V0SW5zdGFuY2UoKXtyZXR1cm4gdGhpcy5heGlvc0luc3RhbmNlfHwodGhpcy5heGlvc0luc3RhbmNlPVB0LmNyZWF0ZSh7d2l0aENyZWRlbnRpYWxzOiEwfSksdGhpcy5jbGllbnRJbnN0YW5jZXx8KHRoaXMuY2xpZW50SW5zdGFuY2U9bmV3IER0KSx0aGlzLmF4aW9zSW5zdGFuY2UuaW50ZXJjZXB0b3JzLnJlcXVlc3QudXNlKCh0PT5lKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuY2xpZW50SW5zdGFuY2UucmVxdWVzdEhhbmRsZXIodCl9KSkpKSx0aGlzLmF4aW9zSW5zdGFuY2UuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLnVzZSgoZT0+dGhpcy5jbGllbnRJbnN0YW5jZS5zdWNjZXNzSGFuZGxlcihlKSksKGU9PnRoaXMuY2xpZW50SW5zdGFuY2UuZXJyb3JIYW5kbGVyKGUpKSksdGhpcy5heGlvc0luc3RhbmNlLmFsbD1QdC5hbGwsdGhpcy5heGlvc0luc3RhbmNlLnNwcmVhZD1QdC5zcHJlYWQsdGhpcy5heGlvc0luc3RhbmNlLmluaXQ9dGhpcy5jbGllbnRJbnN0YW5jZS5pbml0LHRoaXMuYXhpb3NJbnN0YW5jZS5lbmFibGVIYW5kbGVyPXRoaXMuY2xpZW50SW5zdGFuY2UuZW5hYmxlSGFuZGxlcix0aGlzLmF4aW9zSW5zdGFuY2UuZGlzYWJsZUhhbmRsZXI9dGhpcy5jbGllbnRJbnN0YW5jZS5kaXNhYmxlSGFuZGxlcix0aGlzLmF4aW9zSW5zdGFuY2UuZGlzYWJsZUhhbmRsZXJXaXRoVGltZW91dD10aGlzLmNsaWVudEluc3RhbmNlLmRpc2FibGVIYW5kbGVyV2l0aFRpbWVvdXQsdGhpcy5heGlvc0luc3RhbmNlLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjaz10aGlzLmNsaWVudEluc3RhbmNlLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjayx0aGlzLmF4aW9zSW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2s9dGhpcy5jbGllbnRJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayx0aGlzLmF4aW9zSW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrPXRoaXMuY2xpZW50SW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrLHRoaXMuYXhpb3NJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrPXRoaXMuY2xpZW50SW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjayksdGhpcy5heGlvc0luc3RhbmNlfXJlcXVlc3RIYW5kbGVyKHQpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7aWYoeWllbGQgdGhpcy5hdHRhY2hUb2tlbih0KSxudWxsPT10P3ZvaWQgMDp0LnNob3VsZEVuY29kZVRvRm9ybURhdGEpe2NvbnN0IGU9bnVsbD09dD92b2lkIDA6dC5kYXRhLHI9bmV3IEZvcm1EYXRhO09iamVjdC5rZXlzKGUpLmZvckVhY2goKHQ9PntyLmFwcGVuZCh0LGVbdF0pfSkpLHQuZGF0YT1yfXJldHVybiBEdC5pc0hhbmRsZXJFbmFibGVkJiZ0aGlzLnJlcXVlc3RTdGFydENhbGxiYWNrJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjayYmdGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjayh0KSx0fSkpfWVycm9ySGFuZGxlcihlKXt0aHJvdyBEdC5pc0hhbmRsZXJFbmFibGVkJiYodGhpcy5yZXF1ZXN0RXJyb3JDYWxsYmFjayYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucmVxdWVzdEVycm9yQ2FsbGJhY2smJnRoaXMucmVxdWVzdEVycm9yQ2FsbGJhY2soZSksdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2smJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjayYmdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2soKSksZX1zdWNjZXNzSGFuZGxlcihlKXtyZXR1cm4gRHQuaXNIYW5kbGVyRW5hYmxlZCYmKHRoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayYmdGhpcy5yZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKGUpLHRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2smJnRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrKCkpLGV9aW5pdCh0PSEwLHIpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7RHQuaXNIYW5kbGVyRW5hYmxlZD10LHRoaXMuYXR0YWNoVG9rZW49cn0pKX1lbmFibGVIYW5kbGVyKCl7RHQuaXNIYW5kbGVyRW5hYmxlZD0hMH1kaXNhYmxlSGFuZGxlcigpe0R0LmlzSGFuZGxlckVuYWJsZWQ9ITF9ZGlzYWJsZUhhbmRsZXJXaXRoVGltZW91dChlPUR0LkRFRkFVTFRfSEFORExFUl9ESVNBQkxFX1RJTUVPVVQpe0R0LmlzSGFuZGxlckVuYWJsZWQ9ITEsc2V0VGltZW91dCgoKCk9PntEdC5pc0hhbmRsZXJFbmFibGVkPSEwfSksZSl9c2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrKGUpe3RoaXMucmVxdWVzdFN0YXJ0Q2FsbGJhY2s9ZX1zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayhlKXt0aGlzLnJlcXVlc3RTdWNjZXNzQ2FsbGJhY2s9ZX1zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2soZSl7dGhpcy5yZXF1ZXN0RXJyb3JDYWxsYmFjaz1lfXNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2soZSl7dGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2s9ZX19O090LkRFRkFVTFRfSEFORExFUl9ESVNBQkxFX1RJTUVPVVQ9MWUzLE90PUR0PWZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBpLG89YXJndW1lbnRzLmxlbmd0aCxzPW88Mz90Om51bGw9PT1uP249T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LHIpOm47aWYoIm9iamVjdCI9PXR5cGVvZiBSZWZsZWN0JiYiZnVuY3Rpb24iPT10eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSlzPVJlZmxlY3QuZGVjb3JhdGUoZSx0LHIsbik7ZWxzZSBmb3IodmFyIGE9ZS5sZW5ndGgtMTthPj0wO2EtLSkoaT1lW2FdKSYmKHM9KG88Mz9pKHMpOm8+Mz9pKHQscixzKTppKHQscikpfHxzKTtyZXR1cm4gbz4zJiZzJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLHMpLHN9KFtlPT57fV0sT3QpO2NsYXNzIEl0e2NvbnN0cnVjdG9yKCl7dGhpcy5fZGF0YT1uZXcgTWFwfXNldERhdGEodCxyKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuX2RhdGEuc2V0KHQscil9KSl9Z2V0RGF0YSh0KXt2YXIgcixuO3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIG51bGwhPT0obj1udWxsPT09KHI9dGhpcy5fZGF0YSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuZ2V0KHQpKSYmdm9pZCAwIT09bj9uOiJ7fSJ9KSl9cmVtb3ZlRGF0YSh0KXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuX2RhdGEuZGVsZXRlKHQpfSkpfX12YXIgVXQ9W10sTHQ9W10sSHQ9InVuZGVmaW5lZCIhPXR5cGVvZiBVaW50OEFycmF5P1VpbnQ4QXJyYXk6QXJyYXksTXQ9ITE7ZnVuY3Rpb24gTnQoKXtNdD0hMDtmb3IodmFyIGU9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLHQ9MCxyPWUubGVuZ3RoO3Q8cjsrK3QpVXRbdF09ZVt0XSxMdFtlLmNoYXJDb2RlQXQodCldPXQ7THRbIi0iLmNoYXJDb2RlQXQoMCldPTYyLEx0WyJfIi5jaGFyQ29kZUF0KDApXT02M31mdW5jdGlvbiBqdChlLHQscil7Zm9yKHZhciBuLGksbz1bXSxzPXQ7czxyO3MrPTMpbj0oZVtzXTw8MTYpKyhlW3MrMV08PDgpK2VbcysyXSxvLnB1c2goVXRbKGk9bik+PjE4JjYzXStVdFtpPj4xMiY2M10rVXRbaT4+NiY2M10rVXRbNjMmaV0pO3JldHVybiBvLmpvaW4oIiIpfWZ1bmN0aW9uIHh0KGUpe3ZhciB0O010fHxOdCgpO2Zvcih2YXIgcj1lLmxlbmd0aCxuPXIlMyxpPSIiLG89W10scz0xNjM4MyxhPTAsYz1yLW47YTxjO2ErPXMpby5wdXNoKGp0KGUsYSxhK3M+Yz9jOmErcykpO3JldHVybiAxPT09bj8odD1lW3ItMV0saSs9VXRbdD4+Ml0saSs9VXRbdDw8NCY2M10saSs9Ij09Iik6Mj09PW4mJih0PShlW3ItMl08PDgpK2Vbci0xXSxpKz1VdFt0Pj4xMF0saSs9VXRbdD4+NCY2M10saSs9VXRbdDw8MiY2M10saSs9Ij0iKSxvLnB1c2goaSksby5qb2luKCIiKX1mdW5jdGlvbiBxdChlLHQscixuLGkpe3ZhciBvLHMsYT04Kmktbi0xLGM9KDE8PGEpLTEsdT1jPj4xLGw9LTcsaD1yP2ktMTowLGQ9cj8tMToxLGY9ZVt0K2hdO2ZvcihoKz1kLG89ZiYoMTw8LWwpLTEsZj4+PS1sLGwrPWE7bD4wO289MjU2Km8rZVt0K2hdLGgrPWQsbC09OCk7Zm9yKHM9byYoMTw8LWwpLTEsbz4+PS1sLGwrPW47bD4wO3M9MjU2KnMrZVt0K2hdLGgrPWQsbC09OCk7aWYoMD09PW8pbz0xLXU7ZWxzZXtpZihvPT09YylyZXR1cm4gcz9OYU46MS8wKihmPy0xOjEpO3MrPU1hdGgucG93KDIsbiksby09dX1yZXR1cm4oZj8tMToxKSpzKk1hdGgucG93KDIsby1uKX1mdW5jdGlvbiBLdChlLHQscixuLGksbyl7dmFyIHMsYSxjLHU9OCpvLWktMSxsPSgxPDx1KS0xLGg9bD4+MSxkPTIzPT09aT9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjAsZj1uPzA6by0xLHA9bj8xOi0xLGc9dDwwfHwwPT09dCYmMS90PDA/MTowO2Zvcih0PU1hdGguYWJzKHQpLGlzTmFOKHQpfHx0PT09MS8wPyhhPWlzTmFOKHQpPzE6MCxzPWwpOihzPU1hdGguZmxvb3IoTWF0aC5sb2codCkvTWF0aC5MTjIpLHQqKGM9TWF0aC5wb3coMiwtcykpPDEmJihzLS0sYyo9MiksKHQrPXMraD49MT9kL2M6ZCpNYXRoLnBvdygyLDEtaCkpKmM+PTImJihzKyssYy89MikscytoPj1sPyhhPTAscz1sKTpzK2g+PTE/KGE9KHQqYy0xKSpNYXRoLnBvdygyLGkpLHMrPWgpOihhPXQqTWF0aC5wb3coMixoLTEpKk1hdGgucG93KDIsaSkscz0wKSk7aT49ODtlW3IrZl09MjU1JmEsZis9cCxhLz0yNTYsaS09OCk7Zm9yKHM9czw8aXxhLHUrPWk7dT4wO2VbcitmXT0yNTUmcyxmKz1wLHMvPTI1Nix1LT04KTtlW3IrZi1wXXw9MTI4Kmd9dmFyIEp0PXt9LnRvU3RyaW5nLEJ0PUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PUp0LmNhbGwoZSl9O3p0LlRZUEVEX0FSUkFZX1NVUFBPUlQ9dm9pZCAwPT09Si5UWVBFRF9BUlJBWV9TVVBQT1JUfHxKLlRZUEVEX0FSUkFZX1NVUFBPUlQ7dmFyIEZ0PVd0KCk7ZnVuY3Rpb24gV3QoKXtyZXR1cm4genQuVFlQRURfQVJSQVlfU1VQUE9SVD8yMTQ3NDgzNjQ3OjEwNzM3NDE4MjN9ZnVuY3Rpb24gJHQoZSx0KXtpZihXdCgpPHQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdHlwZWQgYXJyYXkgbGVuZ3RoIik7cmV0dXJuIHp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGU9bmV3IFVpbnQ4QXJyYXkodCkpLl9fcHJvdG9fXz16dC5wcm90b3R5cGU6KG51bGw9PT1lJiYoZT1uZXcgenQodCkpLGUubGVuZ3RoPXQpLGV9ZnVuY3Rpb24genQoZSx0LHIpe2lmKCEoenQuVFlQRURfQVJSQVlfU1VQUE9SVHx8dGhpcyBpbnN0YW5jZW9mIHp0KSlyZXR1cm4gbmV3IHp0KGUsdCxyKTtpZigibnVtYmVyIj09dHlwZW9mIGUpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3IoIklmIGVuY29kaW5nIGlzIHNwZWNpZmllZCB0aGVuIHRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nIik7cmV0dXJuIEd0KHRoaXMsZSl9cmV0dXJuIFZ0KHRoaXMsZSx0LHIpfWZ1bmN0aW9uIFZ0KGUsdCxyLG4pe2lmKCJudW1iZXIiPT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJyk7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmdCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyP2Z1bmN0aW9uKGUsdCxyLG4pe2lmKHQuYnl0ZUxlbmd0aCxyPDB8fHQuYnl0ZUxlbmd0aDxyKXRocm93IG5ldyBSYW5nZUVycm9yKCInb2Zmc2V0JyBpcyBvdXQgb2YgYm91bmRzIik7aWYodC5ieXRlTGVuZ3RoPHIrKG58fDApKXRocm93IG5ldyBSYW5nZUVycm9yKCInbGVuZ3RoJyBpcyBvdXQgb2YgYm91bmRzIik7dD12b2lkIDA9PT1yJiZ2b2lkIDA9PT1uP25ldyBVaW50OEFycmF5KHQpOnZvaWQgMD09PW4/bmV3IFVpbnQ4QXJyYXkodCxyKTpuZXcgVWludDhBcnJheSh0LHIsbik7enQuVFlQRURfQVJSQVlfU1VQUE9SVD8oZT10KS5fX3Byb3RvX189enQucHJvdG90eXBlOmU9WHQoZSx0KTtyZXR1cm4gZX0oZSx0LHIsbik6InN0cmluZyI9PXR5cGVvZiB0P2Z1bmN0aW9uKGUsdCxyKXsic3RyaW5nIj09dHlwZW9mIHImJiIiIT09cnx8KHI9InV0ZjgiKTtpZighenQuaXNFbmNvZGluZyhyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciZW5jb2RpbmciIG11c3QgYmUgYSB2YWxpZCBzdHJpbmcgZW5jb2RpbmcnKTt2YXIgbj0wfGVyKHQsciksaT0oZT0kdChlLG4pKS53cml0ZSh0LHIpO2khPT1uJiYoZT1lLnNsaWNlKDAsaSkpO3JldHVybiBlfShlLHQscik6ZnVuY3Rpb24oZSx0KXtpZihRdCh0KSl7dmFyIHI9MHxadCh0Lmxlbmd0aCk7cmV0dXJuIDA9PT0oZT0kdChlLHIpKS5sZW5ndGh8fHQuY29weShlLDAsMCxyKSxlfWlmKHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJnQuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ8fCJsZW5ndGgiaW4gdClyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHQubGVuZ3RofHwobj10Lmxlbmd0aCkhPW4/JHQoZSwwKTpYdChlLHQpO2lmKCJCdWZmZXIiPT09dC50eXBlJiZCdCh0LmRhdGEpKXJldHVybiBYdChlLHQuZGF0YSl9dmFyIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIGFycmF5LWxpa2Ugb2JqZWN0LiIpfShlLHQpfWZ1bmN0aW9uIFl0KGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpO2lmKGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG5lZ2F0aXZlJyl9ZnVuY3Rpb24gR3QoZSx0KXtpZihZdCh0KSxlPSR0KGUsdDwwPzA6MHxadCh0KSksIXp0LlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKHZhciByPTA7cjx0OysrcillW3JdPTA7cmV0dXJuIGV9ZnVuY3Rpb24gWHQoZSx0KXt2YXIgcj10Lmxlbmd0aDwwPzA6MHxadCh0Lmxlbmd0aCk7ZT0kdChlLHIpO2Zvcih2YXIgbj0wO248cjtuKz0xKWVbbl09MjU1JnRbbl07cmV0dXJuIGV9ZnVuY3Rpb24gWnQoZSl7aWYoZT49V3QoKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweCIrV3QoKS50b1N0cmluZygxNikrIiBieXRlcyIpO3JldHVybiAwfGV9ZnVuY3Rpb24gUXQoZSl7cmV0dXJuIShudWxsPT1lfHwhZS5faXNCdWZmZXIpfWZ1bmN0aW9uIGVyKGUsdCl7aWYoUXQoZSkpcmV0dXJuIGUubGVuZ3RoO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXcmJihBcnJheUJ1ZmZlci5pc1ZpZXcoZSl8fGUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpcmV0dXJuIGUuYnl0ZUxlbmd0aDsic3RyaW5nIiE9dHlwZW9mIGUmJihlPSIiK2UpO3ZhciByPWUubGVuZ3RoO2lmKDA9PT1yKXJldHVybiAwO2Zvcih2YXIgbj0hMTs7KXN3aXRjaCh0KXtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiByO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSB2b2lkIDA6cmV0dXJuIEFyKGUpLmxlbmd0aDtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIDIqcjtjYXNlImhleCI6cmV0dXJuIHI+Pj4xO2Nhc2UiYmFzZTY0IjpyZXR1cm4gQ3IoZSkubGVuZ3RoO2RlZmF1bHQ6aWYobilyZXR1cm4gQXIoZSkubGVuZ3RoO3Q9KCIiK3QpLnRvTG93ZXJDYXNlKCksbj0hMH19ZnVuY3Rpb24gdHIoZSx0LHIpe3ZhciBuPSExO2lmKCh2b2lkIDA9PT10fHx0PDApJiYodD0wKSx0PnRoaXMubGVuZ3RoKXJldHVybiIiO2lmKCh2b2lkIDA9PT1yfHxyPnRoaXMubGVuZ3RoKSYmKHI9dGhpcy5sZW5ndGgpLHI8PTApcmV0dXJuIiI7aWYoKHI+Pj49MCk8PSh0Pj4+PTApKXJldHVybiIiO2ZvcihlfHwoZT0idXRmOCIpOzspc3dpdGNoKGUpe2Nhc2UiaGV4IjpyZXR1cm4geXIodGhpcyx0LHIpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIGRyKHRoaXMsdCxyKTtjYXNlImFzY2lpIjpyZXR1cm4gcHIodGhpcyx0LHIpO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIGdyKHRoaXMsdCxyKTtjYXNlImJhc2U2NCI6cmV0dXJuIGhyKHRoaXMsdCxyKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIHZyKHRoaXMsdCxyKTtkZWZhdWx0OmlmKG4pdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitlKTtlPShlKyIiKS50b0xvd2VyQ2FzZSgpLG49ITB9fWZ1bmN0aW9uIHJyKGUsdCxyKXt2YXIgbj1lW3RdO2VbdF09ZVtyXSxlW3JdPW59ZnVuY3Rpb24gbnIoZSx0LHIsbixpKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiByPyhuPXIscj0wKTpyPjIxNDc0ODM2NDc/cj0yMTQ3NDgzNjQ3OnI8LTIxNDc0ODM2NDgmJihyPS0yMTQ3NDgzNjQ4KSxyPStyLGlzTmFOKHIpJiYocj1pPzA6ZS5sZW5ndGgtMSkscjwwJiYocj1lLmxlbmd0aCtyKSxyPj1lLmxlbmd0aCl7aWYoaSlyZXR1cm4tMTtyPWUubGVuZ3RoLTF9ZWxzZSBpZihyPDApe2lmKCFpKXJldHVybi0xO3I9MH1pZigic3RyaW5nIj09dHlwZW9mIHQmJih0PXp0LmZyb20odCxuKSksUXQodCkpcmV0dXJuIDA9PT10Lmxlbmd0aD8tMTppcihlLHQscixuLGkpO2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gdCY9MjU1LHp0LlRZUEVEX0FSUkFZX1NVUFBPUlQmJiJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP2k/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGUsdCxyKTpVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGUsdCxyKTppcihlLFt0XSxyLG4saSk7dGhyb3cgbmV3IFR5cGVFcnJvcigidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyIil9ZnVuY3Rpb24gaXIoZSx0LHIsbixpKXt2YXIgbyxzPTEsYT1lLmxlbmd0aCxjPXQubGVuZ3RoO2lmKHZvaWQgMCE9PW4mJigidWNzMiI9PT0obj1TdHJpbmcobikudG9Mb3dlckNhc2UoKSl8fCJ1Y3MtMiI9PT1ufHwidXRmMTZsZSI9PT1ufHwidXRmLTE2bGUiPT09bikpe2lmKGUubGVuZ3RoPDJ8fHQubGVuZ3RoPDIpcmV0dXJuLTE7cz0yLGEvPTIsYy89MixyLz0yfWZ1bmN0aW9uIHUoZSx0KXtyZXR1cm4gMT09PXM/ZVt0XTplLnJlYWRVSW50MTZCRSh0KnMpfWlmKGkpe3ZhciBsPS0xO2ZvcihvPXI7bzxhO28rKylpZih1KGUsbyk9PT11KHQsLTE9PT1sPzA6by1sKSl7aWYoLTE9PT1sJiYobD1vKSxvLWwrMT09PWMpcmV0dXJuIGwqc31lbHNlLTEhPT1sJiYoby09by1sKSxsPS0xfWVsc2UgZm9yKHIrYz5hJiYocj1hLWMpLG89cjtvPj0wO28tLSl7Zm9yKHZhciBoPSEwLGQ9MDtkPGM7ZCsrKWlmKHUoZSxvK2QpIT09dSh0LGQpKXtoPSExO2JyZWFrfWlmKGgpcmV0dXJuIG99cmV0dXJuLTF9ZnVuY3Rpb24gb3IoZSx0LHIsbil7cj1OdW1iZXIocil8fDA7dmFyIGk9ZS5sZW5ndGgtcjtuPyhuPU51bWJlcihuKSk+aSYmKG49aSk6bj1pO3ZhciBvPXQubGVuZ3RoO2lmKG8lMiE9MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGhleCBzdHJpbmciKTtuPm8vMiYmKG49by8yKTtmb3IodmFyIHM9MDtzPG47KytzKXt2YXIgYT1wYXJzZUludCh0LnN1YnN0cigyKnMsMiksMTYpO2lmKGlzTmFOKGEpKXJldHVybiBzO2VbcitzXT1hfXJldHVybiBzfWZ1bmN0aW9uIHNyKGUsdCxyLG4pe3JldHVybiBEcihBcih0LGUubGVuZ3RoLXIpLGUscixuKX1mdW5jdGlvbiBhcihlLHQscixuKXtyZXR1cm4gRHIoZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLHI9MDtyPGUubGVuZ3RoOysrcil0LnB1c2goMjU1JmUuY2hhckNvZGVBdChyKSk7cmV0dXJuIHR9KHQpLGUscixuKX1mdW5jdGlvbiBjcihlLHQscixuKXtyZXR1cm4gYXIoZSx0LHIsbil9ZnVuY3Rpb24gdXIoZSx0LHIsbil7cmV0dXJuIERyKENyKHQpLGUscixuKX1mdW5jdGlvbiBscihlLHQscixuKXtyZXR1cm4gRHIoZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIsbixpLG89W10scz0wO3M8ZS5sZW5ndGgmJiEoKHQtPTIpPDApOysrcyluPShyPWUuY2hhckNvZGVBdChzKSk+PjgsaT1yJTI1NixvLnB1c2goaSksby5wdXNoKG4pO3JldHVybiBvfSh0LGUubGVuZ3RoLXIpLGUscixuKX1mdW5jdGlvbiBocihlLHQscil7cmV0dXJuIDA9PT10JiZyPT09ZS5sZW5ndGg/eHQoZSk6eHQoZS5zbGljZSh0LHIpKX1mdW5jdGlvbiBkcihlLHQscil7cj1NYXRoLm1pbihlLmxlbmd0aCxyKTtmb3IodmFyIG49W10saT10O2k8cjspe3ZhciBvLHMsYSxjLHU9ZVtpXSxsPW51bGwsaD11PjIzOT80OnU+MjIzPzM6dT4xOTE/MjoxO2lmKGkraDw9cilzd2l0Y2goaCl7Y2FzZSAxOnU8MTI4JiYobD11KTticmVhaztjYXNlIDI6MTI4PT0oMTkyJihvPWVbaSsxXSkpJiYoYz0oMzEmdSk8PDZ8NjMmbyk+MTI3JiYobD1jKTticmVhaztjYXNlIDM6bz1lW2krMV0scz1lW2krMl0sMTI4PT0oMTkyJm8pJiYxMjg9PSgxOTImcykmJihjPSgxNSZ1KTw8MTJ8KDYzJm8pPDw2fDYzJnMpPjIwNDcmJihjPDU1Mjk2fHxjPjU3MzQzKSYmKGw9Yyk7YnJlYWs7Y2FzZSA0Om89ZVtpKzFdLHM9ZVtpKzJdLGE9ZVtpKzNdLDEyOD09KDE5MiZvKSYmMTI4PT0oMTkyJnMpJiYxMjg9PSgxOTImYSkmJihjPSgxNSZ1KTw8MTh8KDYzJm8pPDwxMnwoNjMmcyk8PDZ8NjMmYSk+NjU1MzUmJmM8MTExNDExMiYmKGw9Yyl9bnVsbD09PWw/KGw9NjU1MzMsaD0xKTpsPjY1NTM1JiYobC09NjU1MzYsbi5wdXNoKGw+Pj4xMCYxMDIzfDU1Mjk2KSxsPTU2MzIwfDEwMjMmbCksbi5wdXNoKGwpLGkrPWh9cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoO2lmKHQ8PWZyKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxlKTt2YXIgcj0iIixuPTA7Zm9yKDtuPHQ7KXIrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGUuc2xpY2UobixuKz1mcikpO3JldHVybiByfShuKX16dC5wb29sU2l6ZT04MTkyLHp0Ll9hdWdtZW50PWZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fXz16dC5wcm90b3R5cGUsZX0senQuZnJvbT1mdW5jdGlvbihlLHQscil7cmV0dXJuIFZ0KG51bGwsZSx0LHIpfSx6dC5UWVBFRF9BUlJBWV9TVVBQT1JUJiYoenQucHJvdG90eXBlLl9fcHJvdG9fXz1VaW50OEFycmF5LnByb3RvdHlwZSx6dC5fX3Byb3RvX189VWludDhBcnJheSksenQuYWxsb2M9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBmdW5jdGlvbihlLHQscixuKXtyZXR1cm4gWXQodCksdDw9MD8kdChlLHQpOnZvaWQgMCE9PXI/InN0cmluZyI9PXR5cGVvZiBuPyR0KGUsdCkuZmlsbChyLG4pOiR0KGUsdCkuZmlsbChyKTokdChlLHQpfShudWxsLGUsdCxyKX0senQuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oZSl7cmV0dXJuIEd0KG51bGwsZSl9LHp0LmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihlKXtyZXR1cm4gR3QobnVsbCxlKX0senQuaXNCdWZmZXI9UHIsenQuY29tcGFyZT1mdW5jdGlvbihlLHQpe2lmKCFRdChlKXx8IVF0KHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyBtdXN0IGJlIEJ1ZmZlcnMiKTtpZihlPT09dClyZXR1cm4gMDtmb3IodmFyIHI9ZS5sZW5ndGgsbj10Lmxlbmd0aCxpPTAsbz1NYXRoLm1pbihyLG4pO2k8bzsrK2kpaWYoZVtpXSE9PXRbaV0pe3I9ZVtpXSxuPXRbaV07YnJlYWt9cmV0dXJuIHI8bj8tMTpuPHI/MTowfSx6dC5pc0VuY29kaW5nPWZ1bmN0aW9uKGUpe3N3aXRjaChTdHJpbmcoZSkudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSx6dC5jb25jYXQ9ZnVuY3Rpb24oZSx0KXtpZighQnQoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO2lmKDA9PT1lLmxlbmd0aClyZXR1cm4genQuYWxsb2MoMCk7dmFyIHI7aWYodm9pZCAwPT09dClmb3IodD0wLHI9MDtyPGUubGVuZ3RoOysrcil0Kz1lW3JdLmxlbmd0aDt2YXIgbj16dC5hbGxvY1Vuc2FmZSh0KSxpPTA7Zm9yKHI9MDtyPGUubGVuZ3RoOysrcil7dmFyIG89ZVtyXTtpZighUXQobykpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO28uY29weShuLGkpLGkrPW8ubGVuZ3RofXJldHVybiBufSx6dC5ieXRlTGVuZ3RoPWVyLHp0LnByb3RvdHlwZS5faXNCdWZmZXI9ITAsenQucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlMiE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMiKTtmb3IodmFyIHQ9MDt0PGU7dCs9Milycih0aGlzLHQsdCsxKTtyZXR1cm4gdGhpc30senQucHJvdG90eXBlLnN3YXAzMj1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlNCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHMiKTtmb3IodmFyIHQ9MDt0PGU7dCs9NClycih0aGlzLHQsdCszKSxycih0aGlzLHQrMSx0KzIpO3JldHVybiB0aGlzfSx6dC5wcm90b3R5cGUuc3dhcDY0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSU4IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz04KXJyKHRoaXMsdCx0KzcpLHJyKHRoaXMsdCsxLHQrNikscnIodGhpcyx0KzIsdCs1KSxycih0aGlzLHQrMyx0KzQpO3JldHVybiB0aGlzfSx6dC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgZT0wfHRoaXMubGVuZ3RoO3JldHVybiAwPT09ZT8iIjowPT09YXJndW1lbnRzLmxlbmd0aD9kcih0aGlzLDAsZSk6dHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSx6dC5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGUpe2lmKCFRdChlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIik7cmV0dXJuIHRoaXM9PT1lfHwwPT09enQuY29tcGFyZSh0aGlzLGUpfSx6dC5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3ZhciBlPSIiO3JldHVybiB0aGlzLmxlbmd0aD4wJiYoZT10aGlzLnRvU3RyaW5nKCJoZXgiLDAsNTApLm1hdGNoKC8uezJ9L2cpLmpvaW4oIiAiKSx0aGlzLmxlbmd0aD41MCYmKGUrPSIgLi4uICIpKSwiPEJ1ZmZlciAiK2UrIj4ifSx6dC5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbihlLHQscixuLGkpe2lmKCFRdChlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIik7aWYodm9pZCAwPT09dCYmKHQ9MCksdm9pZCAwPT09ciYmKHI9ZT9lLmxlbmd0aDowKSx2b2lkIDA9PT1uJiYobj0wKSx2b2lkIDA9PT1pJiYoaT10aGlzLmxlbmd0aCksdDwwfHxyPmUubGVuZ3RofHxuPDB8fGk+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm91dCBvZiByYW5nZSBpbmRleCIpO2lmKG4+PWkmJnQ+PXIpcmV0dXJuIDA7aWYobj49aSlyZXR1cm4tMTtpZih0Pj1yKXJldHVybiAxO2lmKHRoaXM9PT1lKXJldHVybiAwO2Zvcih2YXIgbz0oaT4+Pj0wKS0obj4+Pj0wKSxzPShyPj4+PTApLSh0Pj4+PTApLGE9TWF0aC5taW4obyxzKSxjPXRoaXMuc2xpY2UobixpKSx1PWUuc2xpY2UodCxyKSxsPTA7bDxhOysrbClpZihjW2xdIT09dVtsXSl7bz1jW2xdLHM9dVtsXTticmVha31yZXR1cm4gbzxzPy0xOnM8bz8xOjB9LHp0LnByb3RvdHlwZS5pbmNsdWRlcz1mdW5jdGlvbihlLHQscil7cmV0dXJuLTEhPT10aGlzLmluZGV4T2YoZSx0LHIpfSx6dC5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbihlLHQscil7cmV0dXJuIG5yKHRoaXMsZSx0LHIsITApfSx6dC5wcm90b3R5cGUubGFzdEluZGV4T2Y9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBucih0aGlzLGUsdCxyLCExKX0senQucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKHZvaWQgMD09PXQpbj0idXRmOCIscj10aGlzLmxlbmd0aCx0PTA7ZWxzZSBpZih2b2lkIDA9PT1yJiYic3RyaW5nIj09dHlwZW9mIHQpbj10LHI9dGhpcy5sZW5ndGgsdD0wO2Vsc2V7aWYoIWlzRmluaXRlKHQpKXRocm93IG5ldyBFcnJvcigiQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQiKTt0fD0wLGlzRmluaXRlKHIpPyhyfD0wLHZvaWQgMD09PW4mJihuPSJ1dGY4IikpOihuPXIscj12b2lkIDApfXZhciBpPXRoaXMubGVuZ3RoLXQ7aWYoKHZvaWQgMD09PXJ8fHI+aSkmJihyPWkpLGUubGVuZ3RoPjAmJihyPDB8fHQ8MCl8fHQ+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzIik7bnx8KG49InV0ZjgiKTtmb3IodmFyIG89ITE7Oylzd2l0Y2gobil7Y2FzZSJoZXgiOnJldHVybiBvcih0aGlzLGUsdCxyKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBzcih0aGlzLGUsdCxyKTtjYXNlImFzY2lpIjpyZXR1cm4gYXIodGhpcyxlLHQscik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gY3IodGhpcyxlLHQscik7Y2FzZSJiYXNlNjQiOnJldHVybiB1cih0aGlzLGUsdCxyKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIGxyKHRoaXMsZSx0LHIpO2RlZmF1bHQ6aWYobyl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK24pO249KCIiK24pLnRvTG93ZXJDYXNlKCksbz0hMH19LHp0LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiQnVmZmVyIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O3ZhciBmcj00MDk2O2Z1bmN0aW9uIHByKGUsdCxyKXt2YXIgbj0iIjtyPU1hdGgubWluKGUubGVuZ3RoLHIpO2Zvcih2YXIgaT10O2k8cjsrK2kpbis9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmZVtpXSk7cmV0dXJuIG59ZnVuY3Rpb24gZ3IoZSx0LHIpe3ZhciBuPSIiO3I9TWF0aC5taW4oZS5sZW5ndGgscik7Zm9yKHZhciBpPXQ7aTxyOysraSluKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGVbaV0pO3JldHVybiBufWZ1bmN0aW9uIHlyKGUsdCxyKXt2YXIgbj1lLmxlbmd0aDsoIXR8fHQ8MCkmJih0PTApLCghcnx8cjwwfHxyPm4pJiYocj1uKTtmb3IodmFyIGk9IiIsbz10O288cjsrK28paSs9UnIoZVtvXSk7cmV0dXJuIGl9ZnVuY3Rpb24gdnIoZSx0LHIpe2Zvcih2YXIgbj1lLnNsaWNlKHQsciksaT0iIixvPTA7bzxuLmxlbmd0aDtvKz0yKWkrPVN0cmluZy5mcm9tQ2hhckNvZGUobltvXSsyNTYqbltvKzFdKTtyZXR1cm4gaX1mdW5jdGlvbiBtcihlLHQscil7aWYoZSUxIT0wfHxlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm9mZnNldCBpcyBub3QgdWludCIpO2lmKGUrdD5yKXRocm93IG5ldyBSYW5nZUVycm9yKCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoIil9ZnVuY3Rpb24gd3IoZSx0LHIsbixpLG8pe2lmKCFRdChlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmZmVyIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJyk7aWYodD5pfHx0PG8pdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJ2YWx1ZSIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpO2lmKHIrbj5lLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gX3IoZSx0LHIsbil7dDwwJiYodD02NTUzNSt0KzEpO2Zvcih2YXIgaT0wLG89TWF0aC5taW4oZS5sZW5ndGgtciwyKTtpPG87KytpKWVbcitpXT0odCYyNTU8PDgqKG4/aToxLWkpKT4+PjgqKG4/aToxLWkpfWZ1bmN0aW9uIGJyKGUsdCxyLG4pe3Q8MCYmKHQ9NDI5NDk2NzI5NSt0KzEpO2Zvcih2YXIgaT0wLG89TWF0aC5taW4oZS5sZW5ndGgtciw0KTtpPG87KytpKWVbcitpXT10Pj4+OCoobj9pOjMtaSkmMjU1fWZ1bmN0aW9uIFNyKGUsdCxyLG4saSxvKXtpZihyK24+ZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKHI8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gRXIoZSx0LHIsbixpKXtyZXR1cm4gaXx8U3IoZSwwLHIsNCksS3QoZSx0LHIsbiwyMyw0KSxyKzR9ZnVuY3Rpb24ga3IoZSx0LHIsbixpKXtyZXR1cm4gaXx8U3IoZSwwLHIsOCksS3QoZSx0LHIsbiw1Miw4KSxyKzh9enQucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbj10aGlzLmxlbmd0aDtpZigoZT1+fmUpPDA/KGUrPW4pPDAmJihlPTApOmU+biYmKGU9biksKHQ9dm9pZCAwPT09dD9uOn5+dCk8MD8odCs9bik8MCYmKHQ9MCk6dD5uJiYodD1uKSx0PGUmJih0PWUpLHp0LlRZUEVEX0FSUkFZX1NVUFBPUlQpKHI9dGhpcy5zdWJhcnJheShlLHQpKS5fX3Byb3RvX189enQucHJvdG90eXBlO2Vsc2V7dmFyIGk9dC1lO3I9bmV3IHp0KGksdm9pZCAwKTtmb3IodmFyIG89MDtvPGk7KytvKXJbb109dGhpc1tvK2VdfXJldHVybiByfSx6dC5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fG1yKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbZV0saT0xLG89MDsrK288dCYmKGkqPTI1Nik7KW4rPXRoaXNbZStvXSppO3JldHVybiBufSx6dC5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fG1yKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbZSstLXRdLGk9MTt0PjAmJihpKj0yNTYpOyluKz10aGlzW2UrLS10XSppO3JldHVybiBufSx6dC5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fG1yKGUsMSx0aGlzLmxlbmd0aCksdGhpc1tlXX0senQucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxtcihlLDIsdGhpcy5sZW5ndGgpLHRoaXNbZV18dGhpc1tlKzFdPDw4fSx6dC5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fG1yKGUsMix0aGlzLmxlbmd0aCksdGhpc1tlXTw8OHx0aGlzW2UrMV19LHp0LnByb3RvdHlwZS5yZWFkVUludDMyTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8bXIoZSw0LHRoaXMubGVuZ3RoKSwodGhpc1tlXXx0aGlzW2UrMV08PDh8dGhpc1tlKzJdPDwxNikrMTY3NzcyMTYqdGhpc1tlKzNdfSx6dC5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fG1yKGUsNCx0aGlzLmxlbmd0aCksMTY3NzcyMTYqdGhpc1tlXSsodGhpc1tlKzFdPDwxNnx0aGlzW2UrMl08PDh8dGhpc1tlKzNdKX0senQucHJvdG90eXBlLnJlYWRJbnRMRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fG1yKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbZV0saT0xLG89MDsrK288dCYmKGkqPTI1Nik7KW4rPXRoaXNbZStvXSppO3JldHVybiBuPj0oaSo9MTI4KSYmKG4tPU1hdGgucG93KDIsOCp0KSksbn0senQucHJvdG90eXBlLnJlYWRJbnRCRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fG1yKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXQsaT0xLG89dGhpc1tlKy0tbl07bj4wJiYoaSo9MjU2KTspbys9dGhpc1tlKy0tbl0qaTtyZXR1cm4gbz49KGkqPTEyOCkmJihvLT1NYXRoLnBvdygyLDgqdCkpLG99LHp0LnByb3RvdHlwZS5yZWFkSW50OD1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxtcihlLDEsdGhpcy5sZW5ndGgpLDEyOCZ0aGlzW2VdPy0xKigyNTUtdGhpc1tlXSsxKTp0aGlzW2VdfSx6dC5wcm90b3R5cGUucmVhZEludDE2TEU9ZnVuY3Rpb24oZSx0KXt0fHxtcihlLDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbZV18dGhpc1tlKzFdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSx6dC5wcm90b3R5cGUucmVhZEludDE2QkU9ZnVuY3Rpb24oZSx0KXt0fHxtcihlLDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbZSsxXXx0aGlzW2VdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSx6dC5wcm90b3R5cGUucmVhZEludDMyTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8bXIoZSw0LHRoaXMubGVuZ3RoKSx0aGlzW2VdfHRoaXNbZSsxXTw8OHx0aGlzW2UrMl08PDE2fHRoaXNbZSszXTw8MjR9LHp0LnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxtcihlLDQsdGhpcy5sZW5ndGgpLHRoaXNbZV08PDI0fHRoaXNbZSsxXTw8MTZ8dGhpc1tlKzJdPDw4fHRoaXNbZSszXX0senQucHJvdG90eXBlLnJlYWRGbG9hdExFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fG1yKGUsNCx0aGlzLmxlbmd0aCkscXQodGhpcyxlLCEwLDIzLDQpfSx6dC5wcm90b3R5cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8bXIoZSw0LHRoaXMubGVuZ3RoKSxxdCh0aGlzLGUsITEsMjMsNCl9LHp0LnByb3RvdHlwZS5yZWFkRG91YmxlTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8bXIoZSw4LHRoaXMubGVuZ3RoKSxxdCh0aGlzLGUsITAsNTIsOCl9LHp0LnByb3RvdHlwZS5yZWFkRG91YmxlQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8bXIoZSw4LHRoaXMubGVuZ3RoKSxxdCh0aGlzLGUsITEsNTIsOCl9LHp0LnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbihlLHQscixuKXsoZT0rZSx0fD0wLHJ8PTAsbil8fHdyKHRoaXMsZSx0LHIsTWF0aC5wb3coMiw4KnIpLTEsMCk7dmFyIGk9MSxvPTA7Zm9yKHRoaXNbdF09MjU1JmU7KytvPHImJihpKj0yNTYpOyl0aGlzW3Qrb109ZS9pJjI1NTtyZXR1cm4gdCtyfSx6dC5wcm90b3R5cGUud3JpdGVVSW50QkU9ZnVuY3Rpb24oZSx0LHIsbil7KGU9K2UsdHw9MCxyfD0wLG4pfHx3cih0aGlzLGUsdCxyLE1hdGgucG93KDIsOCpyKS0xLDApO3ZhciBpPXItMSxvPTE7Zm9yKHRoaXNbdCtpXT0yNTUmZTstLWk+PTAmJihvKj0yNTYpOyl0aGlzW3QraV09ZS9vJjI1NTtyZXR1cm4gdCtyfSx6dC5wcm90b3R5cGUud3JpdGVVSW50OD1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHx3cih0aGlzLGUsdCwxLDI1NSwwKSx6dC5UWVBFRF9BUlJBWV9TVVBQT1JUfHwoZT1NYXRoLmZsb29yKGUpKSx0aGlzW3RdPTI1NSZlLHQrMX0senQucHJvdG90eXBlLndyaXRlVUludDE2TEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8d3IodGhpcyxlLHQsMiw2NTUzNSwwKSx6dC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPTI1NSZlLHRoaXNbdCsxXT1lPj4+OCk6X3IodGhpcyxlLHQsITApLHQrMn0senQucHJvdG90eXBlLndyaXRlVUludDE2QkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8d3IodGhpcyxlLHQsMiw2NTUzNSwwKSx6dC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPWU+Pj44LHRoaXNbdCsxXT0yNTUmZSk6X3IodGhpcyxlLHQsITEpLHQrMn0senQucHJvdG90eXBlLndyaXRlVUludDMyTEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8d3IodGhpcyxlLHQsNCw0Mjk0OTY3Mjk1LDApLHp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdCszXT1lPj4+MjQsdGhpc1t0KzJdPWU+Pj4xNix0aGlzW3QrMV09ZT4+PjgsdGhpc1t0XT0yNTUmZSk6YnIodGhpcyxlLHQsITApLHQrNH0senQucHJvdG90eXBlLndyaXRlVUludDMyQkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8d3IodGhpcyxlLHQsNCw0Mjk0OTY3Mjk1LDApLHp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjI0LHRoaXNbdCsxXT1lPj4+MTYsdGhpc1t0KzJdPWU+Pj44LHRoaXNbdCszXT0yNTUmZSk6YnIodGhpcyxlLHQsITEpLHQrNH0senQucHJvdG90eXBlLndyaXRlSW50TEU9ZnVuY3Rpb24oZSx0LHIsbil7aWYoZT0rZSx0fD0wLCFuKXt2YXIgaT1NYXRoLnBvdygyLDgqci0xKTt3cih0aGlzLGUsdCxyLGktMSwtaSl9dmFyIG89MCxzPTEsYT0wO2Zvcih0aGlzW3RdPTI1NSZlOysrbzxyJiYocyo9MjU2KTspZTwwJiYwPT09YSYmMCE9PXRoaXNbdCtvLTFdJiYoYT0xKSx0aGlzW3Qrb109KGUvcz4+MCktYSYyNTU7cmV0dXJuIHQrcn0senQucHJvdG90eXBlLndyaXRlSW50QkU9ZnVuY3Rpb24oZSx0LHIsbil7aWYoZT0rZSx0fD0wLCFuKXt2YXIgaT1NYXRoLnBvdygyLDgqci0xKTt3cih0aGlzLGUsdCxyLGktMSwtaSl9dmFyIG89ci0xLHM9MSxhPTA7Zm9yKHRoaXNbdCtvXT0yNTUmZTstLW8+PTAmJihzKj0yNTYpOyllPDAmJjA9PT1hJiYwIT09dGhpc1t0K28rMV0mJihhPTEpLHRoaXNbdCtvXT0oZS9zPj4wKS1hJjI1NTtyZXR1cm4gdCtyfSx6dC5wcm90b3R5cGUud3JpdGVJbnQ4PWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fHdyKHRoaXMsZSx0LDEsMTI3LC0xMjgpLHp0LlRZUEVEX0FSUkFZX1NVUFBPUlR8fChlPU1hdGguZmxvb3IoZSkpLGU8MCYmKGU9MjU1K2UrMSksdGhpc1t0XT0yNTUmZSx0KzF9LHp0LnByb3RvdHlwZS53cml0ZUludDE2TEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8d3IodGhpcyxlLHQsMiwzMjc2NywtMzI3NjgpLHp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44KTpfcih0aGlzLGUsdCwhMCksdCsyfSx6dC5wcm90b3R5cGUud3JpdGVJbnQxNkJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fHdyKHRoaXMsZSx0LDIsMzI3NjcsLTMyNzY4KSx6dC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPWU+Pj44LHRoaXNbdCsxXT0yNTUmZSk6X3IodGhpcyxlLHQsITEpLHQrMn0senQucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHx3cih0aGlzLGUsdCw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLHp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44LHRoaXNbdCsyXT1lPj4+MTYsdGhpc1t0KzNdPWU+Pj4yNCk6YnIodGhpcyxlLHQsITApLHQrNH0senQucHJvdG90eXBlLndyaXRlSW50MzJCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHx3cih0aGlzLGUsdCw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLGU8MCYmKGU9NDI5NDk2NzI5NStlKzEpLHp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjI0LHRoaXNbdCsxXT1lPj4+MTYsdGhpc1t0KzJdPWU+Pj44LHRoaXNbdCszXT0yNTUmZSk6YnIodGhpcyxlLHQsITEpLHQrNH0senQucHJvdG90eXBlLndyaXRlRmxvYXRMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIEVyKHRoaXMsZSx0LCEwLHIpfSx6dC5wcm90b3R5cGUud3JpdGVGbG9hdEJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gRXIodGhpcyxlLHQsITEscil9LHp0LnByb3RvdHlwZS53cml0ZURvdWJsZUxFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4ga3IodGhpcyxlLHQsITAscil9LHp0LnByb3RvdHlwZS53cml0ZURvdWJsZUJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4ga3IodGhpcyxlLHQsITEscil9LHp0LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGUsdCxyLG4pe2lmKHJ8fChyPTApLG58fDA9PT1ufHwobj10aGlzLmxlbmd0aCksdD49ZS5sZW5ndGgmJih0PWUubGVuZ3RoKSx0fHwodD0wKSxuPjAmJm48ciYmKG49ciksbj09PXIpcmV0dXJuIDA7aWYoMD09PWUubGVuZ3RofHwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIDA7aWYodDwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzIik7aWYocjwwfHxyPj10aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlU3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKG48MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlRW5kIG91dCBvZiBib3VuZHMiKTtuPnRoaXMubGVuZ3RoJiYobj10aGlzLmxlbmd0aCksZS5sZW5ndGgtdDxuLXImJihuPWUubGVuZ3RoLXQrcik7dmFyIGksbz1uLXI7aWYodGhpcz09PWUmJnI8dCYmdDxuKWZvcihpPW8tMTtpPj0wOy0taSllW2krdF09dGhpc1tpK3JdO2Vsc2UgaWYobzwxZTN8fCF6dC5UWVBFRF9BUlJBWV9TVVBQT1JUKWZvcihpPTA7aTxvOysraSllW2krdF09dGhpc1tpK3JdO2Vsc2UgVWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoZSx0aGlzLnN1YmFycmF5KHIscitvKSx0KTtyZXR1cm4gb30senQucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24oZSx0LHIsbil7aWYoInN0cmluZyI9PXR5cGVvZiBlKXtpZigic3RyaW5nIj09dHlwZW9mIHQ/KG49dCx0PTAscj10aGlzLmxlbmd0aCk6InN0cmluZyI9PXR5cGVvZiByJiYobj1yLHI9dGhpcy5sZW5ndGgpLDE9PT1lLmxlbmd0aCl7dmFyIGk9ZS5jaGFyQ29kZUF0KDApO2k8MjU2JiYoZT1pKX1pZih2b2lkIDAhPT1uJiYic3RyaW5nIiE9dHlwZW9mIG4pdGhyb3cgbmV3IFR5cGVFcnJvcigiZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZyIpO2lmKCJzdHJpbmciPT10eXBlb2YgbiYmIXp0LmlzRW5jb2RpbmcobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIituKX1lbHNlIm51bWJlciI9PXR5cGVvZiBlJiYoZSY9MjU1KTtpZih0PDB8fHRoaXMubGVuZ3RoPHR8fHRoaXMubGVuZ3RoPHIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk91dCBvZiByYW5nZSBpbmRleCIpO2lmKHI8PXQpcmV0dXJuIHRoaXM7dmFyIG87aWYodD4+Pj0wLHI9dm9pZCAwPT09cj90aGlzLmxlbmd0aDpyPj4+MCxlfHwoZT0wKSwibnVtYmVyIj09dHlwZW9mIGUpZm9yKG89dDtvPHI7KytvKXRoaXNbb109ZTtlbHNle3ZhciBzPVF0KGUpP2U6QXIobmV3IHp0KGUsbikudG9TdHJpbmcoKSksYT1zLmxlbmd0aDtmb3Iobz0wO288ci10Oysrbyl0aGlzW28rdF09c1tvJWFdfXJldHVybiB0aGlzfTt2YXIgVHI9L1teK1wvMC05QS1aYS16LV9dL2c7ZnVuY3Rpb24gUnIoZSl7cmV0dXJuIGU8MTY/IjAiK2UudG9TdHJpbmcoMTYpOmUudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIEFyKGUsdCl7dmFyIHI7dD10fHwxLzA7Zm9yKHZhciBuPWUubGVuZ3RoLGk9bnVsbCxvPVtdLHM9MDtzPG47KytzKXtpZigocj1lLmNoYXJDb2RlQXQocykpPjU1Mjk1JiZyPDU3MzQ0KXtpZighaSl7aWYocj41NjMxOSl7KHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWlmKHMrMT09PW4peyh0LT0zKT4tMSYmby5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pPXI7Y29udGludWV9aWYocjw1NjMyMCl7KHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpLGk9cjtjb250aW51ZX1yPTY1NTM2KyhpLTU1Mjk2PDwxMHxyLTU2MzIwKX1lbHNlIGkmJih0LT0zKT4tMSYmby5wdXNoKDIzOSwxOTEsMTg5KTtpZihpPW51bGwscjwxMjgpe2lmKCh0LT0xKTwwKWJyZWFrO28ucHVzaChyKX1lbHNlIGlmKHI8MjA0OCl7aWYoKHQtPTIpPDApYnJlYWs7by5wdXNoKHI+PjZ8MTkyLDYzJnJ8MTI4KX1lbHNlIGlmKHI8NjU1MzYpe2lmKCh0LT0zKTwwKWJyZWFrO28ucHVzaChyPj4xMnwyMjQscj4+NiY2M3wxMjgsNjMmcnwxMjgpfWVsc2V7aWYoIShyPDExMTQxMTIpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb2RlIHBvaW50Iik7aWYoKHQtPTQpPDApYnJlYWs7by5wdXNoKHI+PjE4fDI0MCxyPj4xMiY2M3wxMjgscj4+NiY2M3wxMjgsNjMmcnwxMjgpfX1yZXR1cm4gb31mdW5jdGlvbiBDcihlKXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQscixuLGksbyxzO010fHxOdCgpO3ZhciBhPWUubGVuZ3RoO2lmKGElND4wKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCIpO289Ij0iPT09ZVthLTJdPzI6Ij0iPT09ZVthLTFdPzE6MCxzPW5ldyBIdCgzKmEvNC1vKSxuPW8+MD9hLTQ6YTt2YXIgYz0wO2Zvcih0PTAscj0wO3Q8bjt0Kz00LHIrPTMpaT1MdFtlLmNoYXJDb2RlQXQodCldPDwxOHxMdFtlLmNoYXJDb2RlQXQodCsxKV08PDEyfEx0W2UuY2hhckNvZGVBdCh0KzIpXTw8NnxMdFtlLmNoYXJDb2RlQXQodCszKV0sc1tjKytdPWk+PjE2JjI1NSxzW2MrK109aT4+OCYyNTUsc1tjKytdPTI1NSZpO3JldHVybiAyPT09bz8oaT1MdFtlLmNoYXJDb2RlQXQodCldPDwyfEx0W2UuY2hhckNvZGVBdCh0KzEpXT4+NCxzW2MrK109MjU1JmkpOjE9PT1vJiYoaT1MdFtlLmNoYXJDb2RlQXQodCldPDwxMHxMdFtlLmNoYXJDb2RlQXQodCsxKV08PDR8THRbZS5jaGFyQ29kZUF0KHQrMildPj4yLHNbYysrXT1pPj44JjI1NSxzW2MrK109MjU1JmkpLHN9KGZ1bmN0aW9uKGUpe2lmKChlPWZ1bmN0aW9uKGUpe3JldHVybiBlLnRyaW0/ZS50cmltKCk6ZS5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIil9KGUpLnJlcGxhY2UoVHIsIiIpKS5sZW5ndGg8MilyZXR1cm4iIjtmb3IoO2UubGVuZ3RoJTQhPTA7KWUrPSI9IjtyZXR1cm4gZX0oZSkpfWZ1bmN0aW9uIERyKGUsdCxyLG4pe2Zvcih2YXIgaT0wO2k8biYmIShpK3I+PXQubGVuZ3RofHxpPj1lLmxlbmd0aCk7KytpKXRbaStyXT1lW2ldO3JldHVybiBpfWZ1bmN0aW9uIFByKGUpe3JldHVybiBudWxsIT1lJiYoISFlLl9pc0J1ZmZlcnx8T3IoZSl8fGZ1bmN0aW9uKGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlLnJlYWRGbG9hdExFJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5zbGljZSYmT3IoZS5zbGljZSgwLDApKX0oZSkpfWZ1bmN0aW9uIE9yKGUpe3JldHVybiEhZS5jb25zdHJ1Y3RvciYmImZ1bmN0aW9uIj09dHlwZW9mIGUuY29uc3RydWN0b3IuaXNCdWZmZXImJmUuY29uc3RydWN0b3IuaXNCdWZmZXIoZSl9dmFyIElyPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLEJ1ZmZlcjp6dCxJTlNQRUNUX01BWF9CWVRFUzo1MCxTbG93QnVmZmVyOmZ1bmN0aW9uKGUpe3JldHVybitlIT1lJiYoZT0wKSx6dC5hbGxvYygrZSl9LGlzQnVmZmVyOlByLGtNYXhMZW5ndGg6RnR9KSxVcj17ZXhwb3J0czp7fX0sTHI9e30sSHI9e307T2JqZWN0LmRlZmluZVByb3BlcnR5KEhyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxIci5kZWZhdWx0PWZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoLHI9dCU0O2lmKCFyKXJldHVybiBlO3ZhciBuPXQsaT00LXIsbz10K2kscz16dC5hbGxvYyhvKTtmb3Iocy53cml0ZShlKTtpLS07KXMud3JpdGUoIj0iLG4rKyk7cmV0dXJuIHMudG9TdHJpbmcoKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KExyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgTXI9SHI7ZnVuY3Rpb24gTnIoZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9InV0ZjgiKSx6dC5pc0J1ZmZlcihlKT94cihlLnRvU3RyaW5nKCJiYXNlNjQiKSk6eHIoenQuZnJvbShlLHQpLnRvU3RyaW5nKCJiYXNlNjQiKSl9ZnVuY3Rpb24ganIoZSl7cmV0dXJuIGU9ZS50b1N0cmluZygpLE1yLmRlZmF1bHQoZSkucmVwbGFjZSgvXC0vZywiKyIpLnJlcGxhY2UoL18vZywiLyIpfWZ1bmN0aW9uIHhyKGUpe3JldHVybiBlLnJlcGxhY2UoLz0vZywiIikucmVwbGFjZSgvXCsvZywiLSIpLnJlcGxhY2UoL1wvL2csIl8iKX12YXIgcXIsS3I9TnI7S3IuZW5jb2RlPU5yLEtyLmRlY29kZT1mdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0idXRmOCIpLHp0LmZyb20oanIoZSksImJhc2U2NCIpLnRvU3RyaW5nKHQpfSxLci50b0Jhc2U2ND1qcixLci5mcm9tQmFzZTY0PXhyLEtyLnRvQnVmZmVyPWZ1bmN0aW9uKGUpe3JldHVybiB6dC5mcm9tKGpyKGUpLCJiYXNlNjQiKX0sTHIuZGVmYXVsdD1LciwocXI9VXIpLmV4cG9ydHM9THIuZGVmYXVsdCxxci5leHBvcnRzLmRlZmF1bHQ9cXIuZXhwb3J0czt2YXIgSnI9VXIuZXhwb3J0cyxCcj17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGUpeyFmdW5jdGlvbih0LHIpe3ZhciBuPXt9OyFmdW5jdGlvbihlKXtlLl9fZXNNb2R1bGU9ITAsZS5kaWdlc3RMZW5ndGg9MzIsZS5ibG9ja1NpemU9NjQ7dmFyIHQ9bmV3IFVpbnQzMkFycmF5KFsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0MzgxMDgwLDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4NiwyNTU0MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5NTYwMzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdKTtmdW5jdGlvbiByKGUscixuLGksbyl7Zm9yKHZhciBzLGEsYyx1LGwsaCxkLGYscCxnLHksdixtO28+PTY0Oyl7Zm9yKHM9clswXSxhPXJbMV0sYz1yWzJdLHU9clszXSxsPXJbNF0saD1yWzVdLGQ9cls2XSxmPXJbN10sZz0wO2c8MTY7ZysrKXk9aSs0KmcsZVtnXT0oMjU1Jm5beV0pPDwyNHwoMjU1Jm5beSsxXSk8PDE2fCgyNTUmblt5KzJdKTw8OHwyNTUmblt5KzNdO2ZvcihnPTE2O2c8NjQ7ZysrKXY9KChwPWVbZy0yXSk+Pj4xN3xwPDwxNSleKHA+Pj4xOXxwPDwxMylecD4+PjEwLG09KChwPWVbZy0xNV0pPj4+N3xwPDwyNSleKHA+Pj4xOHxwPDwxNClecD4+PjMsZVtnXT0oditlW2ctN118MCkrKG0rZVtnLTE2XXwwKTtmb3IoZz0wO2c8NjQ7ZysrKXY9KCgobD4+PjZ8bDw8MjYpXihsPj4+MTF8bDw8MjEpXihsPj4+MjV8bDw8NykpKyhsJmhefmwmZCl8MCkrKGYrKHRbZ10rZVtnXXwwKXwwKXwwLG09KChzPj4+MnxzPDwzMCleKHM+Pj4xM3xzPDwxOSleKHM+Pj4yMnxzPDwxMCkpKyhzJmFecyZjXmEmYyl8MCxmPWQsZD1oLGg9bCxsPXUrdnwwLHU9YyxjPWEsYT1zLHM9dittfDA7clswXSs9cyxyWzFdKz1hLHJbMl0rPWMsclszXSs9dSxyWzRdKz1sLHJbNV0rPWgscls2XSs9ZCxyWzddKz1mLGkrPTY0LG8tPTY0fXJldHVybiBpfXZhciBuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuZGlnZXN0TGVuZ3RoPWUuZGlnZXN0TGVuZ3RoLHRoaXMuYmxvY2tTaXplPWUuYmxvY2tTaXplLHRoaXMuc3RhdGU9bmV3IEludDMyQXJyYXkoOCksdGhpcy50ZW1wPW5ldyBJbnQzMkFycmF5KDY0KSx0aGlzLmJ1ZmZlcj1uZXcgVWludDhBcnJheSgxMjgpLHRoaXMuYnVmZmVyTGVuZ3RoPTAsdGhpcy5ieXRlc0hhc2hlZD0wLHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5yZXNldCgpfXJldHVybiB0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXRlWzBdPTE3NzkwMzM3MDMsdGhpcy5zdGF0ZVsxXT0zMTQ0MTM0Mjc3LHRoaXMuc3RhdGVbMl09MTAxMzkwNDI0Mix0aGlzLnN0YXRlWzNdPTI3NzM0ODA3NjIsdGhpcy5zdGF0ZVs0XT0xMzU5ODkzMTE5LHRoaXMuc3RhdGVbNV09MjYwMDgyMjkyNCx0aGlzLnN0YXRlWzZdPTUyODczNDYzNSx0aGlzLnN0YXRlWzddPTE1NDE0NTkyMjUsdGhpcy5idWZmZXJMZW5ndGg9MCx0aGlzLmJ5dGVzSGFzaGVkPTAsdGhpcy5maW5pc2hlZD0hMSx0aGlzfSx0LnByb3RvdHlwZS5jbGVhbj1mdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8dGhpcy5idWZmZXIubGVuZ3RoO2UrKyl0aGlzLmJ1ZmZlcltlXT0wO2ZvcihlPTA7ZTx0aGlzLnRlbXAubGVuZ3RoO2UrKyl0aGlzLnRlbXBbZV09MDt0aGlzLnJlc2V0KCl9LHQucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlLHQpe2lmKHZvaWQgMD09PXQmJih0PWUubGVuZ3RoKSx0aGlzLmZpbmlzaGVkKXRocm93IG5ldyBFcnJvcigiU0hBMjU2OiBjYW4ndCB1cGRhdGUgYmVjYXVzZSBoYXNoIHdhcyBmaW5pc2hlZC4iKTt2YXIgbj0wO2lmKHRoaXMuYnl0ZXNIYXNoZWQrPXQsdGhpcy5idWZmZXJMZW5ndGg+MCl7Zm9yKDt0aGlzLmJ1ZmZlckxlbmd0aDw2NCYmdD4wOyl0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlckxlbmd0aCsrXT1lW24rK10sdC0tOzY0PT09dGhpcy5idWZmZXJMZW5ndGgmJihyKHRoaXMudGVtcCx0aGlzLnN0YXRlLHRoaXMuYnVmZmVyLDAsNjQpLHRoaXMuYnVmZmVyTGVuZ3RoPTApfWZvcih0Pj02NCYmKG49cih0aGlzLnRlbXAsdGhpcy5zdGF0ZSxlLG4sdCksdCU9NjQpO3Q+MDspdGhpcy5idWZmZXJbdGhpcy5idWZmZXJMZW5ndGgrK109ZVtuKytdLHQtLTtyZXR1cm4gdGhpc30sdC5wcm90b3R5cGUuZmluaXNoPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLmZpbmlzaGVkKXt2YXIgdD10aGlzLmJ5dGVzSGFzaGVkLG49dGhpcy5idWZmZXJMZW5ndGgsaT10LzUzNjg3MDkxMnwwLG89dDw8MyxzPXQlNjQ8NTY/NjQ6MTI4O3RoaXMuYnVmZmVyW25dPTEyODtmb3IodmFyIGE9bisxO2E8cy04O2ErKyl0aGlzLmJ1ZmZlclthXT0wO3RoaXMuYnVmZmVyW3MtOF09aT4+PjI0JjI1NSx0aGlzLmJ1ZmZlcltzLTddPWk+Pj4xNiYyNTUsdGhpcy5idWZmZXJbcy02XT1pPj4+OCYyNTUsdGhpcy5idWZmZXJbcy01XT1pPj4+MCYyNTUsdGhpcy5idWZmZXJbcy00XT1vPj4+MjQmMjU1LHRoaXMuYnVmZmVyW3MtM109bz4+PjE2JjI1NSx0aGlzLmJ1ZmZlcltzLTJdPW8+Pj44JjI1NSx0aGlzLmJ1ZmZlcltzLTFdPW8+Pj4wJjI1NSxyKHRoaXMudGVtcCx0aGlzLnN0YXRlLHRoaXMuYnVmZmVyLDAscyksdGhpcy5maW5pc2hlZD0hMH1mb3IoYT0wO2E8ODthKyspZVs0KmErMF09dGhpcy5zdGF0ZVthXT4+PjI0JjI1NSxlWzQqYSsxXT10aGlzLnN0YXRlW2FdPj4+MTYmMjU1LGVbNCphKzJdPXRoaXMuc3RhdGVbYV0+Pj44JjI1NSxlWzQqYSszXT10aGlzLnN0YXRlW2FdPj4+MCYyNTU7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbigpe3ZhciBlPW5ldyBVaW50OEFycmF5KHRoaXMuZGlnZXN0TGVuZ3RoKTtyZXR1cm4gdGhpcy5maW5pc2goZSksZX0sdC5wcm90b3R5cGUuX3NhdmVTdGF0ZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PHRoaXMuc3RhdGUubGVuZ3RoO3QrKyllW3RdPXRoaXMuc3RhdGVbdF19LHQucHJvdG90eXBlLl9yZXN0b3JlU3RhdGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9MDtyPHRoaXMuc3RhdGUubGVuZ3RoO3IrKyl0aGlzLnN0YXRlW3JdPWVbcl07dGhpcy5ieXRlc0hhc2hlZD10LHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5idWZmZXJMZW5ndGg9MH0sdH0oKTtlLkhhc2g9bjt2YXIgaT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5pbm5lcj1uZXcgbix0aGlzLm91dGVyPW5ldyBuLHRoaXMuYmxvY2tTaXplPXRoaXMuaW5uZXIuYmxvY2tTaXplLHRoaXMuZGlnZXN0TGVuZ3RoPXRoaXMuaW5uZXIuZGlnZXN0TGVuZ3RoO3ZhciB0PW5ldyBVaW50OEFycmF5KHRoaXMuYmxvY2tTaXplKTtpZihlLmxlbmd0aD50aGlzLmJsb2NrU2l6ZSkobmV3IG4pLnVwZGF0ZShlKS5maW5pc2godCkuY2xlYW4oKTtlbHNlIGZvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXRbcl09ZVtyXTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXRbcl1ePTU0O3RoaXMuaW5uZXIudXBkYXRlKHQpO2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspdFtyXV49MTA2O3RoaXMub3V0ZXIudXBkYXRlKHQpLHRoaXMuaXN0YXRlPW5ldyBVaW50MzJBcnJheSg4KSx0aGlzLm9zdGF0ZT1uZXcgVWludDMyQXJyYXkoOCksdGhpcy5pbm5lci5fc2F2ZVN0YXRlKHRoaXMuaXN0YXRlKSx0aGlzLm91dGVyLl9zYXZlU3RhdGUodGhpcy5vc3RhdGUpO2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspdFtyXT0wfXJldHVybiBlLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlubmVyLl9yZXN0b3JlU3RhdGUodGhpcy5pc3RhdGUsdGhpcy5pbm5lci5ibG9ja1NpemUpLHRoaXMub3V0ZXIuX3Jlc3RvcmVTdGF0ZSh0aGlzLm9zdGF0ZSx0aGlzLm91dGVyLmJsb2NrU2l6ZSksdGhpc30sZS5wcm90b3R5cGUuY2xlYW49ZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPHRoaXMuaXN0YXRlLmxlbmd0aDtlKyspdGhpcy5vc3RhdGVbZV09dGhpcy5pc3RhdGVbZV09MDt0aGlzLmlubmVyLmNsZWFuKCksdGhpcy5vdXRlci5jbGVhbigpfSxlLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaW5uZXIudXBkYXRlKGUpLHRoaXN9LGUucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vdXRlci5maW5pc2hlZD90aGlzLm91dGVyLmZpbmlzaChlKToodGhpcy5pbm5lci5maW5pc2goZSksdGhpcy5vdXRlci51cGRhdGUoZSx0aGlzLmRpZ2VzdExlbmd0aCkuZmluaXNoKGUpKSx0aGlzfSxlLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgVWludDhBcnJheSh0aGlzLmRpZ2VzdExlbmd0aCk7cmV0dXJuIHRoaXMuZmluaXNoKGUpLGV9LGV9KCk7ZnVuY3Rpb24gbyhlKXt2YXIgdD0obmV3IG4pLnVwZGF0ZShlKSxyPXQuZGlnZXN0KCk7cmV0dXJuIHQuY2xlYW4oKSxyfWZ1bmN0aW9uIHMoZSx0KXt2YXIgcj1uZXcgaShlKS51cGRhdGUodCksbj1yLmRpZ2VzdCgpO3JldHVybiByLmNsZWFuKCksbn1mdW5jdGlvbiBhKGUsdCxyLG4pe3ZhciBpPW5bMF07aWYoMD09PWkpdGhyb3cgbmV3IEVycm9yKCJoa2RmOiBjYW5ub3QgZXhwYW5kIG1vcmUiKTt0LnJlc2V0KCksaT4xJiZ0LnVwZGF0ZShlKSxyJiZ0LnVwZGF0ZShyKSx0LnVwZGF0ZShuKSx0LmZpbmlzaChlKSxuWzBdKyt9ZS5ITUFDPWksZS5oYXNoPW8sZS5kZWZhdWx0PW8sZS5obWFjPXM7dmFyIGM9bmV3IFVpbnQ4QXJyYXkoZS5kaWdlc3RMZW5ndGgpO2Z1bmN0aW9uIHUoZSx0LHIsbil7dm9pZCAwPT09dCYmKHQ9Yyksdm9pZCAwPT09biYmKG49MzIpO2Zvcih2YXIgbz1uZXcgVWludDhBcnJheShbMV0pLHU9cyh0LGUpLGw9bmV3IGkodSksaD1uZXcgVWludDhBcnJheShsLmRpZ2VzdExlbmd0aCksZD1oLmxlbmd0aCxmPW5ldyBVaW50OEFycmF5KG4pLHA9MDtwPG47cCsrKWQ9PT1oLmxlbmd0aCYmKGEoaCxsLHIsbyksZD0wKSxmW3BdPWhbZCsrXTtyZXR1cm4gbC5jbGVhbigpLGguZmlsbCgwKSxvLmZpbGwoMCksZn1mdW5jdGlvbiBsKGUsdCxyLG4pe2Zvcih2YXIgbz1uZXcgaShlKSxzPW8uZGlnZXN0TGVuZ3RoLGE9bmV3IFVpbnQ4QXJyYXkoNCksYz1uZXcgVWludDhBcnJheShzKSx1PW5ldyBVaW50OEFycmF5KHMpLGw9bmV3IFVpbnQ4QXJyYXkobiksaD0wO2gqczxuO2grKyl7dmFyIGQ9aCsxO2FbMF09ZD4+PjI0JjI1NSxhWzFdPWQ+Pj4xNiYyNTUsYVsyXT1kPj4+OCYyNTUsYVszXT1kPj4+MCYyNTUsby5yZXNldCgpLG8udXBkYXRlKHQpLG8udXBkYXRlKGEpLG8uZmluaXNoKHUpO2Zvcih2YXIgZj0wO2Y8cztmKyspY1tmXT11W2ZdO2ZvcihmPTI7Zjw9cjtmKyspe28ucmVzZXQoKSxvLnVwZGF0ZSh1KS5maW5pc2godSk7Zm9yKHZhciBwPTA7cDxzO3ArKyljW3BdXj11W3BdfWZvcihmPTA7ZjxzJiZoKnMrZjxuO2YrKylsW2gqcytmXT1jW2ZdfWZvcihoPTA7aDxzO2grKyljW2hdPXVbaF09MDtmb3IoaD0wO2g8NDtoKyspYVtoXT0wO3JldHVybiBvLmNsZWFuKCksbH1lLmhrZGY9dSxlLnBia2RmMj1sfShuKTt2YXIgaT1uLmRlZmF1bHQ7Zm9yKHZhciBvIGluIG4paVtvXT1uW29dO2UuZXhwb3J0cz1pfSgpfShCcik7dmFyIEZyPVMoQnIuZXhwb3J0cyksV3I9Y3J5cHRvO2NvbnN0ICRyPWU9PmUgaW5zdGFuY2VvZiBDcnlwdG9LZXksenI9bmV3IFRleHRFbmNvZGVyLFZyPW5ldyBUZXh0RGVjb2Rlcjtjb25zdCBZcj1lPT57bGV0IHQ9ZTt0IGluc3RhbmNlb2YgVWludDhBcnJheSYmKHQ9VnIuZGVjb2RlKHQpKSx0PXQucmVwbGFjZSgvLS9nLCIrIikucmVwbGFjZSgvXy9nLCIvIikucmVwbGFjZSgvXHMvZywiIik7dHJ5e3JldHVybihlPT57Y29uc3QgdD1hdG9iKGUpLHI9bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgpO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKXJbZV09dC5jaGFyQ29kZUF0KGUpO3JldHVybiByfSkodCl9Y2F0Y2goZSl7dGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGlucHV0IHRvIGJlIGRlY29kZWQgaXMgbm90IGNvcnJlY3RseSBlbmNvZGVkLiIpfX07Y2xhc3MgR3IgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihlKXt2YXIgdDtzdXBlcihlKSx0aGlzLmNvZGU9IkVSUl9KT1NFX0dFTkVSSUMiLHRoaXMubmFtZT10aGlzLmNvbnN0cnVjdG9yLm5hbWUsbnVsbD09PSh0PUVycm9yLmNhcHR1cmVTdGFja1RyYWNlKXx8dm9pZCAwPT09dHx8dC5jYWxsKEVycm9yLHRoaXMsdGhpcy5jb25zdHJ1Y3Rvcil9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KT1NFX0dFTkVSSUMifX1jbGFzcyBYciBleHRlbmRzIEdye2NvbnN0cnVjdG9yKGUsdD0idW5zcGVjaWZpZWQiLHI9InVuc3BlY2lmaWVkIil7c3VwZXIoZSksdGhpcy5jb2RlPSJFUlJfSldUX0NMQUlNX1ZBTElEQVRJT05fRkFJTEVEIix0aGlzLmNsYWltPXQsdGhpcy5yZWFzb249cn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pXVF9DTEFJTV9WQUxJREFUSU9OX0ZBSUxFRCJ9fWNsYXNzIFpyIGV4dGVuZHMgR3J7Y29uc3RydWN0b3IoZSx0PSJ1bnNwZWNpZmllZCIscj0idW5zcGVjaWZpZWQiKXtzdXBlcihlKSx0aGlzLmNvZGU9IkVSUl9KV1RfRVhQSVJFRCIsdGhpcy5jbGFpbT10LHRoaXMucmVhc29uPXJ9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KV1RfRVhQSVJFRCJ9fWNsYXNzIFFyIGV4dGVuZHMgR3J7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pPU0VfQUxHX05PVF9BTExPV0VEIn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pPU0VfQUxHX05PVF9BTExPV0VEIn19Y2xhc3MgZW4gZXh0ZW5kcyBHcntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSk9TRV9OT1RfU1VQUE9SVEVEIn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pPU0VfTk9UX1NVUFBPUlRFRCJ9fWNsYXNzIHRuIGV4dGVuZHMgR3J7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pXU19JTlZBTElEIn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pXU19JTlZBTElEIn19Y2xhc3Mgcm4gZXh0ZW5kcyBHcntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSldUX0lOVkFMSUQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldUX0lOVkFMSUQifX1jbGFzcyBubiBleHRlbmRzIEdye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KV0tTX0lOVkFMSUQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldLU19JTlZBTElEIn19Y2xhc3Mgb24gZXh0ZW5kcyBHcntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSldLU19OT19NQVRDSElOR19LRVkiLHRoaXMubWVzc2FnZT0ibm8gYXBwbGljYWJsZSBrZXkgZm91bmQgaW4gdGhlIEpTT04gV2ViIEtleSBTZXQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldLU19OT19NQVRDSElOR19LRVkifX1jbGFzcyBzbiBleHRlbmRzIEdye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KV0tTX01VTFRJUExFX01BVENISU5HX0tFWVMiLHRoaXMubWVzc2FnZT0ibXVsdGlwbGUgbWF0Y2hpbmcga2V5cyBmb3VuZCBpbiB0aGUgSlNPTiBXZWIgS2V5IFNldCJ9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KV0tTX01VTFRJUExFX01BVENISU5HX0tFWVMifX1jbGFzcyBhbiBleHRlbmRzIEdye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KV1NfU0lHTkFUVVJFX1ZFUklGSUNBVElPTl9GQUlMRUQiLHRoaXMubWVzc2FnZT0ic2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBmYWlsZWQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldTX1NJR05BVFVSRV9WRVJJRklDQVRJT05fRkFJTEVEIn19ZnVuY3Rpb24gY24oKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgV2ViU29ja2V0UGFpcn1mdW5jdGlvbiB1bigpe3RyeXtyZXR1cm4gdm9pZCAwIT09ZmUudmVyc2lvbnMubm9kZX1jYXRjaChlKXtyZXR1cm4hMX19ZnVuY3Rpb24gbG4oZSx0PSJhbGdvcml0aG0ubmFtZSIpe3JldHVybiBuZXcgVHlwZUVycm9yKGBDcnlwdG9LZXkgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIG9wZXJhdGlvbiwgaXRzICR7dH0gbXVzdCBiZSAke2V9YCl9ZnVuY3Rpb24gaG4oZSx0KXtyZXR1cm4gZS5uYW1lPT09dH1mdW5jdGlvbiBkbihlKXtyZXR1cm4gcGFyc2VJbnQoZS5uYW1lLnNsaWNlKDQpLDEwKX1mdW5jdGlvbiBmbihlLHQsLi4ucil7c3dpdGNoKHQpe2Nhc2UiSFMyNTYiOmNhc2UiSFMzODQiOmNhc2UiSFM1MTIiOntpZighaG4oZS5hbGdvcml0aG0sIkhNQUMiKSl0aHJvdyBsbigiSE1BQyIpO2NvbnN0IHI9cGFyc2VJbnQodC5zbGljZSgyKSwxMCk7aWYoZG4oZS5hbGdvcml0aG0uaGFzaCkhPT1yKXRocm93IGxuKGBTSEEtJHtyfWAsImFsZ29yaXRobS5oYXNoIik7YnJlYWt9Y2FzZSJSUzI1NiI6Y2FzZSJSUzM4NCI6Y2FzZSJSUzUxMiI6e2lmKCFobihlLmFsZ29yaXRobSwiUlNBU1NBLVBLQ1MxLXYxXzUiKSl0aHJvdyBsbigiUlNBU1NBLVBLQ1MxLXYxXzUiKTtjb25zdCByPXBhcnNlSW50KHQuc2xpY2UoMiksMTApO2lmKGRuKGUuYWxnb3JpdGhtLmhhc2gpIT09cil0aHJvdyBsbihgU0hBLSR7cn1gLCJhbGdvcml0aG0uaGFzaCIpO2JyZWFrfWNhc2UiUFMyNTYiOmNhc2UiUFMzODQiOmNhc2UiUFM1MTIiOntpZighaG4oZS5hbGdvcml0aG0sIlJTQS1QU1MiKSl0aHJvdyBsbigiUlNBLVBTUyIpO2NvbnN0IHI9cGFyc2VJbnQodC5zbGljZSgyKSwxMCk7aWYoZG4oZS5hbGdvcml0aG0uaGFzaCkhPT1yKXRocm93IGxuKGBTSEEtJHtyfWAsImFsZ29yaXRobS5oYXNoIik7YnJlYWt9Y2FzZSB1bigpJiYiRWREU0EiOmlmKCJOT0RFLUVEMjU1MTkiIT09ZS5hbGdvcml0aG0ubmFtZSYmIk5PREUtRUQ0NDgiIT09ZS5hbGdvcml0aG0ubmFtZSl0aHJvdyBsbigiTk9ERS1FRDI1NTE5IG9yIE5PREUtRUQ0NDgiKTticmVhaztjYXNlIGNuKCkmJiJFZERTQSI6aWYoIWhuKGUuYWxnb3JpdGhtLCJOT0RFLUVEMjU1MTkiKSl0aHJvdyBsbigiTk9ERS1FRDI1NTE5Iik7YnJlYWs7Y2FzZSJFUzI1NiI6Y2FzZSJFUzM4NCI6Y2FzZSJFUzUxMiI6e2lmKCFobihlLmFsZ29yaXRobSwiRUNEU0EiKSl0aHJvdyBsbigiRUNEU0EiKTtjb25zdCByPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIkVTMjU2IjpyZXR1cm4iUC0yNTYiO2Nhc2UiRVMzODQiOnJldHVybiJQLTM4NCI7Y2FzZSJFUzUxMiI6cmV0dXJuIlAtNTIxIjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5yZWFjaGFibGUiKX19KHQpO2lmKGUuYWxnb3JpdGhtLm5hbWVkQ3VydmUhPT1yKXRocm93IGxuKHIsImFsZ29yaXRobS5uYW1lZEN1cnZlIik7YnJlYWt9ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKCJDcnlwdG9LZXkgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIG9wZXJhdGlvbiIpfSFmdW5jdGlvbihlLHQpe2lmKHQubGVuZ3RoJiYhdC5zb21lKCh0PT5lLnVzYWdlcy5pbmNsdWRlcyh0KSkpKXtsZXQgZT0iQ3J5cHRvS2V5IGRvZXMgbm90IHN1cHBvcnQgdGhpcyBvcGVyYXRpb24sIGl0cyB1c2FnZXMgbXVzdCBpbmNsdWRlICI7aWYodC5sZW5ndGg+Mil7Y29uc3Qgcj10LnBvcCgpO2UrPWBvbmUgb2YgJHt0LmpvaW4oIiwgIil9LCBvciAke3J9LmB9ZWxzZSAyPT09dC5sZW5ndGg/ZSs9YG9uZSBvZiAke3RbMF19IG9yICR7dFsxXX0uYDplKz1gJHt0WzBdfS5gO3Rocm93IG5ldyBUeXBlRXJyb3IoZSl9fShlLHIpfXZhciBwbj0oZSwuLi50KT0+e2xldCByPSJLZXkgbXVzdCBiZSAiO2lmKHQubGVuZ3RoPjIpe2NvbnN0IGU9dC5wb3AoKTtyKz1gb25lIG9mIHR5cGUgJHt0LmpvaW4oIiwgIil9LCBvciAke2V9LmB9ZWxzZSAyPT09dC5sZW5ndGg/cis9YG9uZSBvZiB0eXBlICR7dFswXX0gb3IgJHt0WzFdfS5gOnIrPWBvZiB0eXBlICR7dFswXX0uYDtyZXR1cm4gbnVsbD09ZT9yKz1gIFJlY2VpdmVkICR7ZX1gOiJmdW5jdGlvbiI9PXR5cGVvZiBlJiZlLm5hbWU/cis9YCBSZWNlaXZlZCBmdW5jdGlvbiAke2UubmFtZX1gOiJvYmplY3QiPT10eXBlb2YgZSYmbnVsbCE9ZSYmZS5jb25zdHJ1Y3RvciYmZS5jb25zdHJ1Y3Rvci5uYW1lJiYocis9YCBSZWNlaXZlZCBhbiBpbnN0YW5jZSBvZiAke2UuY29uc3RydWN0b3IubmFtZX1gKSxyfSxnbj1lPT4kcihlKTtjb25zdCB5bj1bIkNyeXB0b0tleSJdO2Z1bmN0aW9uIHZuKGUpe2lmKCJvYmplY3QiIT10eXBlb2YodD1lKXx8bnVsbD09PXR8fCJbb2JqZWN0IE9iamVjdF0iIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpKXJldHVybiExO3ZhciB0O2lmKG51bGw9PT1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSkpcmV0dXJuITA7bGV0IHI9ZTtmb3IoO251bGwhPT1PYmplY3QuZ2V0UHJvdG90eXBlT2Yocik7KXI9T2JqZWN0LmdldFByb3RvdHlwZU9mKHIpO3JldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk9PT1yfWNvbnN0IG1uPWFzeW5jIGU9Pnt2YXIgdCxyO2NvbnN0e2FsZ29yaXRobTpuLGtleVVzYWdlczppfT1mdW5jdGlvbihlKXtsZXQgdCxyO3N3aXRjaChlLmt0eSl7Y2FzZSJvY3QiOnN3aXRjaChlLmFsZyl7Y2FzZSJIUzI1NiI6Y2FzZSJIUzM4NCI6Y2FzZSJIUzUxMiI6dD17bmFtZToiSE1BQyIsaGFzaDpgU0hBLSR7ZS5hbGcuc2xpY2UoLTMpfWB9LHI9WyJzaWduIiwidmVyaWZ5Il07YnJlYWs7Y2FzZSJBMTI4Q0JDLUhTMjU2IjpjYXNlIkExOTJDQkMtSFMzODQiOmNhc2UiQTI1NkNCQy1IUzUxMiI6dGhyb3cgbmV3IGVuKGAke2UuYWxnfSBrZXlzIGNhbm5vdCBiZSBpbXBvcnRlZCBhcyBDcnlwdG9LZXkgaW5zdGFuY2VzYCk7Y2FzZSJBMTI4R0NNIjpjYXNlIkExOTJHQ00iOmNhc2UiQTI1NkdDTSI6Y2FzZSJBMTI4R0NNS1ciOmNhc2UiQTE5MkdDTUtXIjpjYXNlIkEyNTZHQ01LVyI6dD17bmFtZToiQUVTLUdDTSJ9LHI9WyJlbmNyeXB0IiwiZGVjcnlwdCJdO2JyZWFrO2Nhc2UiQTEyOEtXIjpjYXNlIkExOTJLVyI6Y2FzZSJBMjU2S1ciOnQ9e25hbWU6IkFFUy1LVyJ9LHI9WyJ3cmFwS2V5IiwidW53cmFwS2V5Il07YnJlYWs7Y2FzZSJQQkVTMi1IUzI1NitBMTI4S1ciOmNhc2UiUEJFUzItSFMzODQrQTE5MktXIjpjYXNlIlBCRVMyLUhTNTEyK0EyNTZLVyI6dD17bmFtZToiUEJLREYyIn0scj1bImRlcml2ZUJpdHMiXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBlbignSW52YWxpZCBvciB1bnN1cHBvcnRlZCBKV0sgImFsZyIgKEFsZ29yaXRobSkgUGFyYW1ldGVyIHZhbHVlJyl9YnJlYWs7Y2FzZSJSU0EiOnN3aXRjaChlLmFsZyl7Y2FzZSJQUzI1NiI6Y2FzZSJQUzM4NCI6Y2FzZSJQUzUxMiI6dD17bmFtZToiUlNBLVBTUyIsaGFzaDpgU0hBLSR7ZS5hbGcuc2xpY2UoLTMpfWB9LHI9ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7Y2FzZSJSUzI1NiI6Y2FzZSJSUzM4NCI6Y2FzZSJSUzUxMiI6dD17bmFtZToiUlNBU1NBLVBLQ1MxLXYxXzUiLGhhc2g6YFNIQS0ke2UuYWxnLnNsaWNlKC0zKX1gfSxyPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2Nhc2UiUlNBLU9BRVAiOmNhc2UiUlNBLU9BRVAtMjU2IjpjYXNlIlJTQS1PQUVQLTM4NCI6Y2FzZSJSU0EtT0FFUC01MTIiOnQ9e25hbWU6IlJTQS1PQUVQIixoYXNoOmBTSEEtJHtwYXJzZUludChlLmFsZy5zbGljZSgtMyksMTApfHwxfWB9LHI9ZS5kP1siZGVjcnlwdCIsInVud3JhcEtleSJdOlsiZW5jcnlwdCIsIndyYXBLZXkiXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBlbignSW52YWxpZCBvciB1bnN1cHBvcnRlZCBKV0sgImFsZyIgKEFsZ29yaXRobSkgUGFyYW1ldGVyIHZhbHVlJyl9YnJlYWs7Y2FzZSJFQyI6c3dpdGNoKGUuYWxnKXtjYXNlIkVTMjU2Ijp0PXtuYW1lOiJFQ0RTQSIsbmFtZWRDdXJ2ZToiUC0yNTYifSxyPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2Nhc2UiRVMzODQiOnQ9e25hbWU6IkVDRFNBIixuYW1lZEN1cnZlOiJQLTM4NCJ9LHI9ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7Y2FzZSJFUzUxMiI6dD17bmFtZToiRUNEU0EiLG5hbWVkQ3VydmU6IlAtNTIxIn0scj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztjYXNlIkVDREgtRVMiOmNhc2UiRUNESC1FUytBMTI4S1ciOmNhc2UiRUNESC1FUytBMTkyS1ciOmNhc2UiRUNESC1FUytBMjU2S1ciOnQ9e25hbWU6IkVDREgiLG5hbWVkQ3VydmU6ZS5jcnZ9LHI9ZS5kP1siZGVyaXZlQml0cyJdOltdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IGVuKCdJbnZhbGlkIG9yIHVuc3VwcG9ydGVkIEpXSyAiYWxnIiAoQWxnb3JpdGhtKSBQYXJhbWV0ZXIgdmFsdWUnKX1icmVhaztjYXNlKGNuKCl8fHVuKCkpJiYiT0tQIjppZigiRWREU0EiIT09ZS5hbGcpdGhyb3cgbmV3IGVuKCdJbnZhbGlkIG9yIHVuc3VwcG9ydGVkIEpXSyAiYWxnIiAoQWxnb3JpdGhtKSBQYXJhbWV0ZXIgdmFsdWUnKTtzd2l0Y2goZS5jcnYpe2Nhc2UiRWQyNTUxOSI6dD17bmFtZToiTk9ERS1FRDI1NTE5IixuYW1lZEN1cnZlOiJOT0RFLUVEMjU1MTkifSxyPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2Nhc2UgdW4oKSYmIkVkNDQ4Ijp0PXtuYW1lOiJOT0RFLUVENDQ4IixuYW1lZEN1cnZlOiJOT0RFLUVENDQ4In0scj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBlbignSW52YWxpZCBvciB1bnN1cHBvcnRlZCBKV0sgImNydiIgKFN1YnR5cGUgb2YgS2V5IFBhaXIpIFBhcmFtZXRlciB2YWx1ZScpfWJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IGVuKCdJbnZhbGlkIG9yIHVuc3VwcG9ydGVkIEpXSyAia3R5IiAoS2V5IFR5cGUpIFBhcmFtZXRlciB2YWx1ZScpfXJldHVybnthbGdvcml0aG06dCxrZXlVc2FnZXM6cn19KGUpLG89W24sbnVsbCE9PSh0PWUuZXh0KSYmdm9pZCAwIT09dCYmdCxudWxsIT09KHI9ZS5rZXlfb3BzKSYmdm9pZCAwIT09cj9yOmldO2lmKCJQQktERjIiPT09bi5uYW1lKXJldHVybiBXci5zdWJ0bGUuaW1wb3J0S2V5KCJyYXciLFlyKGUuayksLi4ubyk7Y29uc3Qgcz17Li4uZX07cmV0dXJuIGRlbGV0ZSBzLmFsZyxXci5zdWJ0bGUuaW1wb3J0S2V5KCJqd2siLHMsLi4ubyl9O2NvbnN0IHduPShlLHQscik9PntlLnN0YXJ0c1dpdGgoIkhTIil8fCJkaXIiPT09ZXx8ZS5zdGFydHNXaXRoKCJQQkVTMiIpfHwvXkFcZHszfSg/OkdDTSk/S1ckLy50ZXN0KGUpPyhlPT57aWYoIShlIGluc3RhbmNlb2YgVWludDhBcnJheSkpe2lmKCFnbihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKHBuKGUsLi4ueW4sIlVpbnQ4QXJyYXkiKSk7aWYoInNlY3JldCIhPT1lLnR5cGUpdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt5bi5qb2luKCIgb3IgIil9IGluc3RhbmNlcyBmb3Igc3ltbWV0cmljIGFsZ29yaXRobXMgbXVzdCBiZSBvZiB0eXBlICJzZWNyZXQiYCl9fSkodCk6KChlLHQpPT57aWYoIWduKGUpKXRocm93IG5ldyBUeXBlRXJyb3IocG4oZSwuLi55bikpO2lmKCJzZWNyZXQiPT09ZS50eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoYCR7eW4uam9pbigiIG9yICIpfSBpbnN0YW5jZXMgZm9yIGFzeW1tZXRyaWMgYWxnb3JpdGhtcyBtdXN0IG5vdCBiZSBvZiB0eXBlICJzZWNyZXQiYCk7aWYoInNpZ24iPT09dCYmInB1YmxpYyI9PT1lLnR5cGUpdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt5bi5qb2luKCIgb3IgIil9IGluc3RhbmNlcyBmb3IgYXN5bW1ldHJpYyBhbGdvcml0aG0gc2lnbmluZyBtdXN0IGJlIG9mIHR5cGUgInByaXZhdGUiYCk7aWYoImRlY3J5cHQiPT09dCYmInB1YmxpYyI9PT1lLnR5cGUpdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt5bi5qb2luKCIgb3IgIil9IGluc3RhbmNlcyBmb3IgYXN5bW1ldHJpYyBhbGdvcml0aG0gZGVjcnlwdGlvbiBtdXN0IGJlIG9mIHR5cGUgInByaXZhdGUiYCk7aWYoZS5hbGdvcml0aG0mJiJ2ZXJpZnkiPT09dCYmInByaXZhdGUiPT09ZS50eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoYCR7eW4uam9pbigiIG9yICIpfSBpbnN0YW5jZXMgZm9yIGFzeW1tZXRyaWMgYWxnb3JpdGhtIHZlcmlmeWluZyBtdXN0IGJlIG9mIHR5cGUgInB1YmxpYyJgKTtpZihlLmFsZ29yaXRobSYmImVuY3J5cHQiPT09dCYmInByaXZhdGUiPT09ZS50eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoYCR7eW4uam9pbigiIG9yICIpfSBpbnN0YW5jZXMgZm9yIGFzeW1tZXRyaWMgYWxnb3JpdGhtIGVuY3J5cHRpb24gbXVzdCBiZSBvZiB0eXBlICJwdWJsaWMiYCl9KSh0LHIpfTtjb25zdCBfbj1hc3luYyhlLHQscixuKT0+e2NvbnN0IGk9YXdhaXQgZnVuY3Rpb24oZSx0LHIpe2lmKCRyKHQpKXJldHVybiBmbih0LGUsciksdDtpZih0IGluc3RhbmNlb2YgVWludDhBcnJheSl7aWYoIWUuc3RhcnRzV2l0aCgiSFMiKSl0aHJvdyBuZXcgVHlwZUVycm9yKHBuKHQsLi4ueW4pKTtyZXR1cm4gV3Iuc3VidGxlLmltcG9ydEtleSgicmF3Iix0LHtoYXNoOmBTSEEtJHtlLnNsaWNlKC0zKX1gLG5hbWU6IkhNQUMifSwhMSxbcl0pfXRocm93IG5ldyBUeXBlRXJyb3IocG4odCwuLi55biwiVWludDhBcnJheSIpKX0oZSx0LCJ2ZXJpZnkiKTsoKGUsdCk9PntpZihlLnN0YXJ0c1dpdGgoIlJTIil8fGUuc3RhcnRzV2l0aCgiUFMiKSl7Y29uc3R7bW9kdWx1c0xlbmd0aDpyfT10LmFsZ29yaXRobTtpZigibnVtYmVyIiE9dHlwZW9mIHJ8fHI8MjA0OCl0aHJvdyBuZXcgVHlwZUVycm9yKGAke2V9IHJlcXVpcmVzIGtleSBtb2R1bHVzTGVuZ3RoIHRvIGJlIDIwNDggYml0cyBvciBsYXJnZXJgKX19KShlLGkpO2NvbnN0IG89ZnVuY3Rpb24oZSx0KXtjb25zdCByPWBTSEEtJHtlLnNsaWNlKC0zKX1gO3N3aXRjaChlKXtjYXNlIkhTMjU2IjpjYXNlIkhTMzg0IjpjYXNlIkhTNTEyIjpyZXR1cm57aGFzaDpyLG5hbWU6IkhNQUMifTtjYXNlIlBTMjU2IjpjYXNlIlBTMzg0IjpjYXNlIlBTNTEyIjpyZXR1cm57aGFzaDpyLG5hbWU6IlJTQS1QU1MiLHNhbHRMZW5ndGg6ZS5zbGljZSgtMyk+PjN9O2Nhc2UiUlMyNTYiOmNhc2UiUlMzODQiOmNhc2UiUlM1MTIiOnJldHVybntoYXNoOnIsbmFtZToiUlNBU1NBLVBLQ1MxLXYxXzUifTtjYXNlIkVTMjU2IjpjYXNlIkVTMzg0IjpjYXNlIkVTNTEyIjpyZXR1cm57aGFzaDpyLG5hbWU6IkVDRFNBIixuYW1lZEN1cnZlOnQubmFtZWRDdXJ2ZX07Y2FzZShjbigpfHx1bigpKSYmIkVkRFNBIjpjb25zdHtuYW1lZEN1cnZlOm59PXQ7cmV0dXJue25hbWU6bixuYW1lZEN1cnZlOm59O2RlZmF1bHQ6dGhyb3cgbmV3IGVuKGBhbGcgJHtlfSBpcyBub3Qgc3VwcG9ydGVkIGVpdGhlciBieSBKT1NFIG9yIHlvdXIgamF2YXNjcmlwdCBydW50aW1lYCl9fShlLGkuYWxnb3JpdGhtKTt0cnl7cmV0dXJuIGF3YWl0IFdyLnN1YnRsZS52ZXJpZnkobyxpLHIsbil9Y2F0Y2goZSl7cmV0dXJuITF9fTthc3luYyBmdW5jdGlvbiBibihlLHQscil7dmFyIG47aWYoIXZuKGUpKXRocm93IG5ldyB0bigiRmxhdHRlbmVkIEpXUyBtdXN0IGJlIGFuIG9iamVjdCIpO2lmKHZvaWQgMD09PWUucHJvdGVjdGVkJiZ2b2lkIDA9PT1lLmhlYWRlcil0aHJvdyBuZXcgdG4oJ0ZsYXR0ZW5lZCBKV1MgbXVzdCBoYXZlIGVpdGhlciBvZiB0aGUgInByb3RlY3RlZCIgb3IgImhlYWRlciIgbWVtYmVycycpO2lmKHZvaWQgMCE9PWUucHJvdGVjdGVkJiYic3RyaW5nIiE9dHlwZW9mIGUucHJvdGVjdGVkKXRocm93IG5ldyB0bigiSldTIFByb3RlY3RlZCBIZWFkZXIgaW5jb3JyZWN0IHR5cGUiKTtpZih2b2lkIDA9PT1lLnBheWxvYWQpdGhyb3cgbmV3IHRuKCJKV1MgUGF5bG9hZCBtaXNzaW5nIik7aWYoInN0cmluZyIhPXR5cGVvZiBlLnNpZ25hdHVyZSl0aHJvdyBuZXcgdG4oIkpXUyBTaWduYXR1cmUgbWlzc2luZyBvciBpbmNvcnJlY3QgdHlwZSIpO2lmKHZvaWQgMCE9PWUuaGVhZGVyJiYhdm4oZS5oZWFkZXIpKXRocm93IG5ldyB0bigiSldTIFVucHJvdGVjdGVkIEhlYWRlciBpbmNvcnJlY3QgdHlwZSIpO2xldCBpPXt9O2lmKGUucHJvdGVjdGVkKXtjb25zdCB0PVlyKGUucHJvdGVjdGVkKTt0cnl7aT1KU09OLnBhcnNlKFZyLmRlY29kZSh0KSl9Y2F0Y2goZSl7dGhyb3cgbmV3IHRuKCJKV1MgUHJvdGVjdGVkIEhlYWRlciBpcyBpbnZhbGlkIil9fWlmKCEoKC4uLmUpPT57Y29uc3QgdD1lLmZpbHRlcihCb29sZWFuKTtpZigwPT09dC5sZW5ndGh8fDE9PT10Lmxlbmd0aClyZXR1cm4hMDtsZXQgcjtmb3IoY29uc3QgZSBvZiB0KXtjb25zdCB0PU9iamVjdC5rZXlzKGUpO2lmKHImJjAhPT1yLnNpemUpZm9yKGNvbnN0IGUgb2YgdCl7aWYoci5oYXMoZSkpcmV0dXJuITE7ci5hZGQoZSl9ZWxzZSByPW5ldyBTZXQodCl9cmV0dXJuITB9KShpLGUuaGVhZGVyKSl0aHJvdyBuZXcgdG4oIkpXUyBQcm90ZWN0ZWQgYW5kIEpXUyBVbnByb3RlY3RlZCBIZWFkZXIgUGFyYW1ldGVyIG5hbWVzIG11c3QgYmUgZGlzam9pbnQiKTtjb25zdCBvPXsuLi5pLC4uLmUuaGVhZGVyfSxzPWZ1bmN0aW9uKGUsdCxyLG4saSl7aWYodm9pZCAwIT09aS5jcml0JiZ2b2lkIDA9PT1uLmNyaXQpdGhyb3cgbmV3IGUoJyJjcml0IiAoQ3JpdGljYWwpIEhlYWRlciBQYXJhbWV0ZXIgTVVTVCBiZSBpbnRlZ3JpdHkgcHJvdGVjdGVkJyk7aWYoIW58fHZvaWQgMD09PW4uY3JpdClyZXR1cm4gbmV3IFNldDtpZighQXJyYXkuaXNBcnJheShuLmNyaXQpfHwwPT09bi5jcml0Lmxlbmd0aHx8bi5jcml0LnNvbWUoKGU9PiJzdHJpbmciIT10eXBlb2YgZXx8MD09PWUubGVuZ3RoKSkpdGhyb3cgbmV3IGUoJyJjcml0IiAoQ3JpdGljYWwpIEhlYWRlciBQYXJhbWV0ZXIgTVVTVCBiZSBhbiBhcnJheSBvZiBub24tZW1wdHkgc3RyaW5ncyB3aGVuIHByZXNlbnQnKTtsZXQgbztvPXZvaWQgMCE9PXI/bmV3IE1hcChbLi4uT2JqZWN0LmVudHJpZXMociksLi4udC5lbnRyaWVzKCldKTp0O2Zvcihjb25zdCB0IG9mIG4uY3JpdCl7aWYoIW8uaGFzKHQpKXRocm93IG5ldyBlbihgRXh0ZW5zaW9uIEhlYWRlciBQYXJhbWV0ZXIgIiR7dH0iIGlzIG5vdCByZWNvZ25pemVkYCk7aWYodm9pZCAwPT09aVt0XSl0aHJvdyBuZXcgZShgRXh0ZW5zaW9uIEhlYWRlciBQYXJhbWV0ZXIgIiR7dH0iIGlzIG1pc3NpbmdgKTtpZihvLmdldCh0KSYmdm9pZCAwPT09blt0XSl0aHJvdyBuZXcgZShgRXh0ZW5zaW9uIEhlYWRlciBQYXJhbWV0ZXIgIiR7dH0iIE1VU1QgYmUgaW50ZWdyaXR5IHByb3RlY3RlZGApfXJldHVybiBuZXcgU2V0KG4uY3JpdCl9KHRuLG5ldyBNYXAoW1siYjY0IiwhMF1dKSxudWxsPT1yP3ZvaWQgMDpyLmNyaXQsaSxvKTtsZXQgYT0hMDtpZihzLmhhcygiYjY0IikmJihhPWkuYjY0LCJib29sZWFuIiE9dHlwZW9mIGEpKXRocm93IG5ldyB0bignVGhlICJiNjQiIChiYXNlNjR1cmwtZW5jb2RlIHBheWxvYWQpIEhlYWRlciBQYXJhbWV0ZXIgbXVzdCBiZSBhIGJvb2xlYW4nKTtjb25zdHthbGc6Y309bztpZigic3RyaW5nIiE9dHlwZW9mIGN8fCFjKXRocm93IG5ldyB0bignSldTICJhbGciIChBbGdvcml0aG0pIEhlYWRlciBQYXJhbWV0ZXIgbWlzc2luZyBvciBpbnZhbGlkJyk7Y29uc3QgdT1yJiYoKGUsdCk9PntpZih2b2lkIDAhPT10JiYoIUFycmF5LmlzQXJyYXkodCl8fHQuc29tZSgoZT0+InN0cmluZyIhPXR5cGVvZiBlKSkpKXRocm93IG5ldyBUeXBlRXJyb3IoYCIke2V9IiBvcHRpb24gbXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdzYCk7aWYodClyZXR1cm4gbmV3IFNldCh0KX0pKCJhbGdvcml0aG1zIixyLmFsZ29yaXRobXMpO2lmKHUmJiF1LmhhcyhjKSl0aHJvdyBuZXcgUXIoJyJhbGciIChBbGdvcml0aG0pIEhlYWRlciBQYXJhbWV0ZXIgbm90IGFsbG93ZWQnKTtpZihhKXtpZigic3RyaW5nIiE9dHlwZW9mIGUucGF5bG9hZCl0aHJvdyBuZXcgdG4oIkpXUyBQYXlsb2FkIG11c3QgYmUgYSBzdHJpbmciKX1lbHNlIGlmKCJzdHJpbmciIT10eXBlb2YgZS5wYXlsb2FkJiYhKGUucGF5bG9hZCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKXRocm93IG5ldyB0bigiSldTIFBheWxvYWQgbXVzdCBiZSBhIHN0cmluZyBvciBhbiBVaW50OEFycmF5IGluc3RhbmNlIik7bGV0IGw9ITE7ImZ1bmN0aW9uIj09dHlwZW9mIHQmJih0PWF3YWl0IHQoaSxlKSxsPSEwKSx3bihjLHQsInZlcmlmeSIpO2NvbnN0IGg9ZnVuY3Rpb24oLi4uZSl7Y29uc3QgdD1lLnJlZHVjZSgoKGUse2xlbmd0aDp0fSk9PmUrdCksMCkscj1uZXcgVWludDhBcnJheSh0KTtsZXQgbj0wO3JldHVybiBlLmZvckVhY2goKGU9PntyLnNldChlLG4pLG4rPWUubGVuZ3RofSkpLHJ9KHpyLmVuY29kZShudWxsIT09KG49ZS5wcm90ZWN0ZWQpJiZ2b2lkIDAhPT1uP246IiIpLHpyLmVuY29kZSgiLiIpLCJzdHJpbmciPT10eXBlb2YgZS5wYXlsb2FkP3pyLmVuY29kZShlLnBheWxvYWQpOmUucGF5bG9hZCksZD1ZcihlLnNpZ25hdHVyZSk7aWYoIWF3YWl0IF9uKGMsdCxkLGgpKXRocm93IG5ldyBhbjtsZXQgZjtmPWE/WXIoZS5wYXlsb2FkKToic3RyaW5nIj09dHlwZW9mIGUucGF5bG9hZD96ci5lbmNvZGUoZS5wYXlsb2FkKTplLnBheWxvYWQ7Y29uc3QgcD17cGF5bG9hZDpmfTtyZXR1cm4gdm9pZCAwIT09ZS5wcm90ZWN0ZWQmJihwLnByb3RlY3RlZEhlYWRlcj1pKSx2b2lkIDAhPT1lLmhlYWRlciYmKHAudW5wcm90ZWN0ZWRIZWFkZXI9ZS5oZWFkZXIpLGw/ey4uLnAsa2V5OnR9OnB9Y29uc3QgU249ODY0MDAsRW49L14oXGQrfFxkK1wuXGQrKSA/KHNlY29uZHM/fHNlY3M/fHN8bWludXRlcz98bWlucz98bXxob3Vycz98aHJzP3xofGRheXM/fGR8d2Vla3M/fHd8eWVhcnM/fHlycz98eSkkL2k7dmFyIGtuPWU9Pntjb25zdCB0PUVuLmV4ZWMoZSk7aWYoIXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCB0aW1lIHBlcmlvZCBmb3JtYXQiKTtjb25zdCByPXBhcnNlRmxvYXQodFsxXSk7c3dpdGNoKHRbMl0udG9Mb3dlckNhc2UoKSl7Y2FzZSJzZWMiOmNhc2Uic2VjcyI6Y2FzZSJzZWNvbmQiOmNhc2Uic2Vjb25kcyI6Y2FzZSJzIjpyZXR1cm4gTWF0aC5yb3VuZChyKTtjYXNlIm1pbnV0ZSI6Y2FzZSJtaW51dGVzIjpjYXNlIm1pbiI6Y2FzZSJtaW5zIjpjYXNlIm0iOnJldHVybiBNYXRoLnJvdW5kKDYwKnIpO2Nhc2UiaG91ciI6Y2FzZSJob3VycyI6Y2FzZSJociI6Y2FzZSJocnMiOmNhc2UiaCI6cmV0dXJuIE1hdGgucm91bmQoMzYwMCpyKTtjYXNlImRheSI6Y2FzZSJkYXlzIjpjYXNlImQiOnJldHVybiBNYXRoLnJvdW5kKHIqU24pO2Nhc2Uid2VlayI6Y2FzZSJ3ZWVrcyI6Y2FzZSJ3IjpyZXR1cm4gTWF0aC5yb3VuZCg2MDQ4MDAqcik7ZGVmYXVsdDpyZXR1cm4gTWF0aC5yb3VuZCgzMTU1NzYwMCpyKX19O2NvbnN0IFRuPWU9PmUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9eYXBwbGljYXRpb25cLy8sIiIpO3ZhciBSbj0oZSx0LHI9e30pPT57Y29uc3R7dHlwOm59PXI7aWYobiYmKCJzdHJpbmciIT10eXBlb2YgZS50eXB8fFRuKGUudHlwKSE9PVRuKG4pKSl0aHJvdyBuZXcgWHIoJ3VuZXhwZWN0ZWQgInR5cCIgSldUIGhlYWRlciB2YWx1ZScsInR5cCIsImNoZWNrX2ZhaWxlZCIpO2xldCBpO3RyeXtpPUpTT04ucGFyc2UoVnIuZGVjb2RlKHQpKX1jYXRjaChlKXt9aWYoIXZuKGkpKXRocm93IG5ldyBybigiSldUIENsYWltcyBTZXQgbXVzdCBiZSBhIHRvcC1sZXZlbCBKU09OIG9iamVjdCIpO2NvbnN0e2lzc3VlcjpvfT1yO2lmKG8mJiEoQXJyYXkuaXNBcnJheShvKT9vOltvXSkuaW5jbHVkZXMoaS5pc3MpKXRocm93IG5ldyBYcigndW5leHBlY3RlZCAiaXNzIiBjbGFpbSB2YWx1ZScsImlzcyIsImNoZWNrX2ZhaWxlZCIpO2NvbnN0e3N1YmplY3Q6c309cjtpZihzJiZpLnN1YiE9PXMpdGhyb3cgbmV3IFhyKCd1bmV4cGVjdGVkICJzdWIiIGNsYWltIHZhbHVlJywic3ViIiwiY2hlY2tfZmFpbGVkIik7Y29uc3R7YXVkaWVuY2U6YX09cjtpZihhJiYoYz1pLmF1ZCx1PSJzdHJpbmciPT10eXBlb2YgYT9bYV06YSwhKCJzdHJpbmciPT10eXBlb2YgYz91LmluY2x1ZGVzKGMpOkFycmF5LmlzQXJyYXkoYykmJnUuc29tZShTZXQucHJvdG90eXBlLmhhcy5iaW5kKG5ldyBTZXQoYykpKSkpKXRocm93IG5ldyBYcigndW5leHBlY3RlZCAiYXVkIiBjbGFpbSB2YWx1ZScsImF1ZCIsImNoZWNrX2ZhaWxlZCIpO3ZhciBjLHU7bGV0IGw7c3dpdGNoKHR5cGVvZiByLmNsb2NrVG9sZXJhbmNlKXtjYXNlInN0cmluZyI6bD1rbihyLmNsb2NrVG9sZXJhbmNlKTticmVhaztjYXNlIm51bWJlciI6bD1yLmNsb2NrVG9sZXJhbmNlO2JyZWFrO2Nhc2UidW5kZWZpbmVkIjpsPTA7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGNsb2NrVG9sZXJhbmNlIG9wdGlvbiB0eXBlIil9Y29uc3R7Y3VycmVudERhdGU6aH09cixkPShmPWh8fG5ldyBEYXRlLE1hdGguZmxvb3IoZi5nZXRUaW1lKCkvMWUzKSk7dmFyIGY7aWYoKHZvaWQgMCE9PWkuaWF0fHxyLm1heFRva2VuQWdlKSYmIm51bWJlciIhPXR5cGVvZiBpLmlhdCl0aHJvdyBuZXcgWHIoJyJpYXQiIGNsYWltIG11c3QgYmUgYSBudW1iZXInLCJpYXQiLCJpbnZhbGlkIik7aWYodm9pZCAwIT09aS5uYmYpe2lmKCJudW1iZXIiIT10eXBlb2YgaS5uYmYpdGhyb3cgbmV3IFhyKCcibmJmIiBjbGFpbSBtdXN0IGJlIGEgbnVtYmVyJywibmJmIiwiaW52YWxpZCIpO2lmKGkubmJmPmQrbCl0aHJvdyBuZXcgWHIoJyJuYmYiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQnLCJuYmYiLCJjaGVja19mYWlsZWQiKX1pZih2b2lkIDAhPT1pLmV4cCl7aWYoIm51bWJlciIhPXR5cGVvZiBpLmV4cCl0aHJvdyBuZXcgWHIoJyJleHAiIGNsYWltIG11c3QgYmUgYSBudW1iZXInLCJleHAiLCJpbnZhbGlkIik7aWYoaS5leHA8PWQtbCl0aHJvdyBuZXcgWnIoJyJleHAiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQnLCJleHAiLCJjaGVja19mYWlsZWQiKX1pZihyLm1heFRva2VuQWdlKXtjb25zdCBlPWQtaS5pYXQ7aWYoZS1sPigibnVtYmVyIj09dHlwZW9mIHIubWF4VG9rZW5BZ2U/ci5tYXhUb2tlbkFnZTprbihyLm1heFRva2VuQWdlKSkpdGhyb3cgbmV3IFpyKCciaWF0IiBjbGFpbSB0aW1lc3RhbXAgY2hlY2sgZmFpbGVkICh0b28gZmFyIGluIHRoZSBwYXN0KScsImlhdCIsImNoZWNrX2ZhaWxlZCIpO2lmKGU8MC1sKXRocm93IG5ldyBYcignImlhdCIgY2xhaW0gdGltZXN0YW1wIGNoZWNrIGZhaWxlZCAoaXQgc2hvdWxkIGJlIGluIHRoZSBwYXN0KScsImlhdCIsImNoZWNrX2ZhaWxlZCIpfXJldHVybiBpfTthc3luYyBmdW5jdGlvbiBBbihlLHQscil7dmFyIG47Y29uc3QgaT1hd2FpdCBhc3luYyBmdW5jdGlvbihlLHQscil7aWYoZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkmJihlPVZyLmRlY29kZShlKSksInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyB0bigiQ29tcGFjdCBKV1MgbXVzdCBiZSBhIHN0cmluZyBvciBVaW50OEFycmF5Iik7Y29uc3R7MDpuLDE6aSwyOm8sbGVuZ3RoOnN9PWUuc3BsaXQoIi4iKTtpZigzIT09cyl0aHJvdyBuZXcgdG4oIkludmFsaWQgQ29tcGFjdCBKV1MiKTtjb25zdCBhPWF3YWl0IGJuKHtwYXlsb2FkOmkscHJvdGVjdGVkOm4sc2lnbmF0dXJlOm99LHQsciksYz17cGF5bG9hZDphLnBheWxvYWQscHJvdGVjdGVkSGVhZGVyOmEucHJvdGVjdGVkSGVhZGVyfTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD97Li4uYyxrZXk6YS5rZXl9OmN9KGUsdCxyKTtpZigobnVsbD09PShuPWkucHJvdGVjdGVkSGVhZGVyLmNyaXQpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmluY2x1ZGVzKCJiNjQiKSkmJiExPT09aS5wcm90ZWN0ZWRIZWFkZXIuYjY0KXRocm93IG5ldyBybigiSldUcyBNVVNUIE5PVCB1c2UgdW5lbmNvZGVkIHBheWxvYWQiKTtjb25zdCBvPXtwYXlsb2FkOlJuKGkucHJvdGVjdGVkSGVhZGVyLGkucGF5bG9hZCxyKSxwcm90ZWN0ZWRIZWFkZXI6aS5wcm90ZWN0ZWRIZWFkZXJ9O3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P3suLi5vLGtleTppLmtleX06b31mdW5jdGlvbiBDbihlKXtyZXR1cm4gdm4oZSl9Y2xhc3MgRG57Y29uc3RydWN0b3IoZSl7aWYodGhpcy5fY2FjaGVkPW5ldyBXZWFrTWFwLCFmdW5jdGlvbihlKXtyZXR1cm4gZSYmIm9iamVjdCI9PXR5cGVvZiBlJiZBcnJheS5pc0FycmF5KGUua2V5cykmJmUua2V5cy5ldmVyeShDbil9KGUpKXRocm93IG5ldyBubigiSlNPTiBXZWIgS2V5IFNldCBtYWxmb3JtZWQiKTt2YXIgdDt0aGlzLl9qd2tzPSh0PWUsImZ1bmN0aW9uIj09dHlwZW9mIHN0cnVjdHVyZWRDbG9uZT9zdHJ1Y3R1cmVkQ2xvbmUodCk6SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0KSkpfWFzeW5jIGdldEtleShlLHQpe2NvbnN0e2FsZzpyLGtpZDpufT17Li4uZSwuLi50LmhlYWRlcn0saT1mdW5jdGlvbihlKXtzd2l0Y2goInN0cmluZyI9PXR5cGVvZiBlJiZlLnNsaWNlKDAsMikpe2Nhc2UiUlMiOmNhc2UiUFMiOnJldHVybiJSU0EiO2Nhc2UiRVMiOnJldHVybiJFQyI7Y2FzZSJFZCI6cmV0dXJuIk9LUCI7ZGVmYXVsdDp0aHJvdyBuZXcgZW4oJ1Vuc3VwcG9ydGVkICJhbGciIHZhbHVlIGZvciBhIEpTT04gV2ViIEtleSBTZXQnKX19KHIpLG89dGhpcy5fandrcy5rZXlzLmZpbHRlcigoZT0+e2xldCB0PWk9PT1lLmt0eTtpZih0JiYic3RyaW5nIj09dHlwZW9mIG4mJih0PW49PT1lLmtpZCksdCYmInN0cmluZyI9PXR5cGVvZiBlLmFsZyYmKHQ9cj09PWUuYWxnKSx0JiYic3RyaW5nIj09dHlwZW9mIGUudXNlJiYodD0ic2lnIj09PWUudXNlKSx0JiZBcnJheS5pc0FycmF5KGUua2V5X29wcykmJih0PWUua2V5X29wcy5pbmNsdWRlcygidmVyaWZ5IikpLHQmJiJFZERTQSI9PT1yJiYodD0iRWQyNTUxOSI9PT1lLmNydnx8IkVkNDQ4Ij09PWUuY3J2KSx0KXN3aXRjaChyKXtjYXNlIkVTMjU2Ijp0PSJQLTI1NiI9PT1lLmNydjticmVhaztjYXNlIkVTMjU2SyI6dD0ic2VjcDI1NmsxIj09PWUuY3J2O2JyZWFrO2Nhc2UiRVMzODQiOnQ9IlAtMzg0Ij09PWUuY3J2O2JyZWFrO2Nhc2UiRVM1MTIiOnQ9IlAtNTIxIj09PWUuY3J2fXJldHVybiB0fSkpLHswOnMsbGVuZ3RoOmF9PW87aWYoMD09PWEpdGhyb3cgbmV3IG9uO2lmKDEhPT1hKXRocm93IG5ldyBzbjtjb25zdCBjPXRoaXMuX2NhY2hlZC5nZXQocyl8fHRoaXMuX2NhY2hlZC5zZXQocyx7fSkuZ2V0KHMpO2lmKHZvaWQgMD09PWNbcl0pe2NvbnN0IGU9YXdhaXQgYXN5bmMgZnVuY3Rpb24oZSx0LHIpe2lmKCF2bihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJKV0sgbXVzdCBiZSBhbiBvYmplY3QiKTtpZih0fHwodD1lLmFsZyksInN0cmluZyIhPXR5cGVvZiB0fHwhdCl0aHJvdyBuZXcgVHlwZUVycm9yKCciYWxnIiBhcmd1bWVudCBpcyByZXF1aXJlZCB3aGVuICJqd2suYWxnIiBpcyBub3QgcHJlc2VudCcpO3N3aXRjaChlLmt0eSl7Y2FzZSJvY3QiOmlmKCJzdHJpbmciIT10eXBlb2YgZS5rfHwhZS5rKXRocm93IG5ldyBUeXBlRXJyb3IoJ21pc3NpbmcgImsiIChLZXkgVmFsdWUpIFBhcmFtZXRlciB2YWx1ZScpO3JldHVybiBudWxsIT1yfHwocj0hMCE9PWUuZXh0KSxyP21uKHsuLi5lLGFsZzp0LGV4dDohMX0pOllyKGUuayk7Y2FzZSJSU0EiOmlmKHZvaWQgMCE9PWUub3RoKXRocm93IG5ldyBlbignUlNBIEpXSyAib3RoIiAoT3RoZXIgUHJpbWVzIEluZm8pIFBhcmFtZXRlciB2YWx1ZSBpcyBub3Qgc3VwcG9ydGVkJyk7Y2FzZSJFQyI6Y2FzZSJPS1AiOnJldHVybiBtbih7Li4uZSxhbGc6dH0pO2RlZmF1bHQ6dGhyb3cgbmV3IGVuKCdVbnN1cHBvcnRlZCAia3R5IiAoS2V5IFR5cGUpIFBhcmFtZXRlciB2YWx1ZScpfX0oey4uLnMsZXh0OiEwfSxyKTtpZihlIGluc3RhbmNlb2YgVWludDhBcnJheXx8InB1YmxpYyIhPT1lLnR5cGUpdGhyb3cgbmV3IG5uKCJKU09OIFdlYiBLZXkgU2V0IG1lbWJlcnMgbXVzdCBiZSBwdWJsaWMga2V5cyIpO2Nbcl09ZX1yZXR1cm4gY1tyXX19dmFyIFBuPXtleHBvcnRzOnt9fSxPbj17ZXhwb3J0czp7fX0sSW49RShJcik7Ci8qISBzYWZlLWJ1ZmZlci4gTUlUIExpY2Vuc2UuIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZy9vcGVuc291cmNlPiAqLwohZnVuY3Rpb24oZSx0KXt2YXIgcj1JbixuPXIuQnVmZmVyO2Z1bmN0aW9uIGkoZSx0KXtmb3IodmFyIHIgaW4gZSl0W3JdPWVbcl19ZnVuY3Rpb24gbyhlLHQscil7cmV0dXJuIG4oZSx0LHIpfW4uZnJvbSYmbi5hbGxvYyYmbi5hbGxvY1Vuc2FmZSYmbi5hbGxvY1Vuc2FmZVNsb3c/ZS5leHBvcnRzPXI6KGkocix0KSx0LkJ1ZmZlcj1vKSxvLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG4ucHJvdG90eXBlKSxpKG4sbyksby5mcm9tPWZ1bmN0aW9uKGUsdCxyKXtpZigibnVtYmVyIj09dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gbihlLHQscil9LG8uYWxsb2M9ZnVuY3Rpb24oZSx0LHIpe2lmKCJudW1iZXIiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7dmFyIGk9bihlKTtyZXR1cm4gdm9pZCAwIT09dD8ic3RyaW5nIj09dHlwZW9mIHI/aS5maWxsKHQscik6aS5maWxsKHQpOmkuZmlsbCgwKSxpfSxvLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIG4oZSl9LG8uYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIHIuU2xvd0J1ZmZlcihlKX19KE9uLE9uLmV4cG9ydHMpO3ZhciBVbj02NTUzNixMbj00Mjk0OTY3Mjk1O3ZhciBIbj1Pbi5leHBvcnRzLkJ1ZmZlcixNbj1iLmNyeXB0b3x8Yi5tc0NyeXB0bztNbiYmTW4uZ2V0UmFuZG9tVmFsdWVzP1BuLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZihlPkxuKXRocm93IG5ldyBSYW5nZUVycm9yKCJyZXF1ZXN0ZWQgdG9vIG1hbnkgcmFuZG9tIGJ5dGVzIik7dmFyIHI9SG4uYWxsb2NVbnNhZmUoZSk7aWYoZT4wKWlmKGU+VW4pZm9yKHZhciBuPTA7bjxlO24rPVVuKU1uLmdldFJhbmRvbVZhbHVlcyhyLnNsaWNlKG4sbitVbikpO2Vsc2UgTW4uZ2V0UmFuZG9tVmFsdWVzKHIpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0KXJldHVybiBmZS5uZXh0VGljaygoZnVuY3Rpb24oKXt0KG51bGwscil9KSk7cmV0dXJuIHJ9OlBuLmV4cG9ydHM9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlNlY3VyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGJyb3dzZXIuXG5Vc2UgQ2hyb21lLCBGaXJlZm94IG9yIEludGVybmV0IEV4cGxvcmVyIDExIil9O3ZhciBObj1Qbi5leHBvcnRzO2NsYXNzIGpue2Jhc2U2NFVSTEVuY29kZShlKXtyZXR1cm4gSnIuZW5jb2RlKGUpLnJlcGxhY2UoL1wrL2csIi0iKS5yZXBsYWNlKC9cLy9nLCJfIikucmVwbGFjZSgvPS9nLCIiKX1iYXNlNjRVUkxEZWNvZGUoZSl7cmV0dXJuIEpyLmRlY29kZShlKS50b1N0cmluZygpfWhhc2hTaGEyNTYoZSl7cmV0dXJuIHp0LmZyb20oRnIoKG5ldyBUZXh0RW5jb2RlcikuZW5jb2RlKGUpKSl9Z2VuZXJhdGVSYW5kb21CeXRlcyhlKXtyZXR1cm4gTm4oZSl9dmVyaWZ5Snd0KGUsdCxyLG4saSxvLHMpe3JldHVybiBBbihlLChhPXtrZXlzOlt0XX0sRG4ucHJvdG90eXBlLmdldEtleS5iaW5kKG5ldyBEbihhKSkpLHthbGdvcml0aG1zOnIsYXVkaWVuY2U6bixjbG9ja1RvbGVyYW5jZTpzLGlzc3VlcjppLHN1YmplY3Q6b30pLnRoZW4oKCgpPT5Qcm9taXNlLnJlc29sdmUoITApKSk7dmFyIGF9fWNvbnN0IHhuPXNlbGY7bGV0IHFuO3huLm9ubWVzc2FnZT0oe2RhdGE6dCxwb3J0czpyfSk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3ZhciBuLGksbyxzO2NvbnN0IGM9clswXTtpZih0LnR5cGU9PT1nfHxxbilzd2l0Y2godC50eXBlKXtjYXNlIGc6dHJ5e2NvbnN0IHI9T2JqZWN0LmFzc2lnbih7fSx0LmRhdGEpO3FuPXlpZWxkKHQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHI9bmV3IEl0LG49bmV3IGpuLGk9bmV3IHAocixuKTt5aWVsZCBpLmluaXRpYWxpemUodCk7Y29uc3Qgbz1uZXcgdyhpKSxzPWkuZ2V0RGF0YUxheWVyKCksYz1PdC5nZXRJbnN0YW5jZSgpOyhudWxsPT1jP3ZvaWQgMDpjLmluaXQpJiYoeWllbGQgYy5pbml0KCEwLCh0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtPYmplY3QuYXNzaWduKHthdHRhY2hUb2tlbjohMH0sdCkuYXR0YWNoVG9rZW4mJih0LmhlYWRlcnM9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHQuaGVhZGVycykse0F1dGhvcml6YXRpb246YEJlYXJlciAke3lpZWxkIGkuZ2V0QWNjZXNzVG9rZW4oKX1gfSkpfSkpKSkpO2NvbnN0IHU9dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIHIsbixjO2xldCB1PSEwLGw9ITE7aWYobnVsbD09dD92b2lkIDA6dC50b2tlbkVuZHBvaW50KXt1PSExO2Zvcihjb25zdCBlIG9mWy4uLm51bGwhPT0obj1udWxsPT09KHI9eWllbGQgcy5nZXRDb25maWdEYXRhKCkpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLnJlc291cmNlU2VydmVyVVJMcykmJnZvaWQgMCE9PW4/bjpbXSx0LmJhc2VVcmxdKWlmKGUmJihudWxsPT09KGM9dC50b2tlbkVuZHBvaW50KXx8dm9pZCAwPT09Yz92b2lkIDA6Yy5zdGFydHNXaXRoKGUpKSl7bD0hMDticmVha319cmV0dXJuIHQuc2hvdWxkUmVwbGF5QWZ0ZXJSZWZyZXNoJiZzLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIobSxKU09OLnN0cmluZ2lmeSh0KSksdXx8bD9pLnJlcXVlc3RDdXN0b21HcmFudCh0KS50aGVuKChyPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdC5yZXR1cm5zU2Vzc2lvbj8oby5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KCksaS5nZXRCYXNpY1VzZXJJbmZvKCkpOnJ9KSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QoZSkpKTpQcm9taXNlLnJlamVjdChuZXcgYSgiU1BBLVdPUktFUl9DT1JFLVJDRy1JVjAxIiwiUmVxdWVzdCB0byB0aGUgcHJvdmlkZWQgZW5kcG9pbnQgaXMgcHJvaGliaXRlZC4iLCJSZXF1ZXN0cyBjYW4gb25seSBiZSBzZW50IHRvIHJlc291cmNlIHNlcnZlcnMgc3BlY2lmaWVkIGJ5IHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCBhdHRyaWJ1dGUgd2hpbGUgaW5pdGlhbGl6aW5nIHRoZSBTREsuIFRoZSBzcGVjaWZpZWQgdG9rZW4gZW5kcG9pbnQgaW4gdGhpcyByZXF1ZXN0IGNhbm5vdCBiZSBmb3VuZCBhbW9uZyB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AiKSl9KSksbD0oKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dHJ5e3lpZWxkIGkucmVmcmVzaEFjY2Vzc1Rva2VuKCk7Y29uc3QgZT15aWVsZCBoKCk7cmV0dXJuIGUmJih5aWVsZCB1KGUpKSxvLnJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkoKSxpLmdldEJhc2ljVXNlckluZm8oKX1jYXRjaChlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9fSkpLGg9KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9eWllbGQgcy5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKG0pO3JldHVybiBlP0pTT04ucGFyc2UoZSk6bnVsbH0pKTtyZXR1cm57ZGlzYWJsZUh0dHBIYW5kbGVyOigpPT57Yy5kaXNhYmxlSGFuZGxlciYmYy5kaXNhYmxlSGFuZGxlcigpfSxlbmFibGVIdHRwSGFuZGxlcjooKT0+e2MuZW5hYmxlSGFuZGxlciYmYy5lbmFibGVIYW5kbGVyKCl9LGdldEFjY2Vzc1Rva2VuOigpPT5pLmdldEFjY2Vzc1Rva2VuKCksZ2V0QXV0aG9yaXphdGlvblVSTDp0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gaS5nZXRBdXRob3JpemF0aW9uVVJMKHQpLnRoZW4oKHQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3ZhciBlO2NvbnN0IHI9bnVsbCE9PShlPW5ldyBVUkwodCkuc2VhcmNoUGFyYW1zLmdldCgic3RhdGUiKSkmJnZvaWQgMCE9PWU/ZToiIixuPXlpZWxkIGkuZ2V0UEtDRUNvZGUocik7cmV0dXJue2F1dGhvcml6YXRpb25VUkw6dCxwa2NlOm59fSkpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KGUpKSl9KSksZ2V0QmFzaWNVc2VySW5mbzooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIGkuZ2V0QmFzaWNVc2VySW5mbygpfSkpLGdldENvbmZpZ0RhdGE6KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBzLmdldENvbmZpZ0RhdGEoKX0pKSxnZXREZWNvZGVkSURUb2tlbjooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIGkuZ2V0RGVjb2RlZElEVG9rZW4oKX0pKSxnZXRJRFRva2VuOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gaS5nZXRJRFRva2VuKCl9KSksZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHM6KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBpLmdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCl9KSksZ2V0U2lnbk91dFVSTDooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIGkuZ2V0U2lnbk91dFVSTCgpfSkpLGh0dHBSZXF1ZXN0OnI9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3ZhciBuLGksbztsZXQgdT0hMTtmb3IoY29uc3QgZSBvZlsuLi5udWxsIT09KGk9bnVsbD09PShuPXlpZWxkIHMuZ2V0Q29uZmlnRGF0YSgpKXx8dm9pZCAwPT09bj92b2lkIDA6bi5yZXNvdXJjZVNlcnZlclVSTHMpJiZ2b2lkIDAhPT1pP2k6W10sdC5iYXNlVXJsXSlpZihlJiYobnVsbD09PShvPW51bGw9PXI/dm9pZCAwOnIudXJsKXx8dm9pZCAwPT09bz92b2lkIDA6by5zdGFydHNXaXRoKGUpKSl7dT0hMDticmVha31yZXR1cm4gdT9jLnJlcXVlc3QocikudGhlbigoZT0+UHJvbWlzZS5yZXNvbHZlKGUpKSkuY2F0Y2goKHQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3ZhciBlLG4saTtpZig0MDE9PT0obnVsbD09PShlPW51bGw9PXQ/dm9pZCAwOnQucmVzcG9uc2UpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLnN0YXR1cyl8fCEobnVsbD09dD92b2lkIDA6dC5yZXNwb25zZSkpe2xldCBlO3RyeXtlPXlpZWxkIGwoKX1jYXRjaChlKXt0aHJvdyBuZXcgYSgiU1BBLVdPUktFUl9DT1JFLUhSLVNFMDEiLG51bGwhPT0obj1udWxsPT1lP3ZvaWQgMDplLm5hbWUpJiZ2b2lkIDAhPT1uP246IlJlZnJlc2ggdG9rZW4gcmVxdWVzdCBmYWlsZWQuIixudWxsIT09KGk9bnVsbD09ZT92b2lkIDA6ZS5tZXNzYWdlKSYmdm9pZCAwIT09aT9pOiJBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0cnlpbmcgdG8gcmVmcmVzaCB0aGUgYWNjZXNzIHRva2VuIGZvbGxvd2luZyBhIDQwMSByZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXIuIil9aWYoZSlyZXR1cm4gYy5yZXF1ZXN0KHIpLnRoZW4oKGU9PlByb21pc2UucmVzb2x2ZShlKSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChlKSkpfXJldHVybiBQcm9taXNlLnJlamVjdCh0KX0pKSkpOlByb21pc2UucmVqZWN0KG5ldyBhKCJTUEEtV09SS0VSX0NPUkUtSFItSVYwMiIsIlJlcXVlc3QgdG8gdGhlIHByb3ZpZGVkIGVuZHBvaW50IGlzIHByb2hpYml0ZWQuIiwiUmVxdWVzdHMgY2FuIG9ubHkgYmUgc2VudCB0byByZXNvdXJjZSBzZXJ2ZXJzIHNwZWNpZmllZCBieSB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AgYXR0cmlidXRlIHdoaWxlIGluaXRpYWxpemluZyB0aGUgU0RLLiBUaGUgc3BlY2lmaWVkIGVuZHBvaW50IGluIHRoaXMgcmVxdWVzdCBjYW5ub3QgYmUgZm91bmQgYW1vbmcgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIikpfSkpLGh0dHBSZXF1ZXN0QWxsOnI9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3ZhciBuLGksbztsZXQgdT0hMDtmb3IoY29uc3QgZSBvZiByKXtsZXQgcj0hMTtmb3IoY29uc3QgYSBvZlsuLi5udWxsIT09KGk9bnVsbD09PShuPXlpZWxkIHMuZ2V0Q29uZmlnRGF0YSgpKXx8dm9pZCAwPT09bj92b2lkIDA6bi5yZXNvdXJjZVNlcnZlclVSTHMpJiZ2b2lkIDAhPT1pP2k6W10sdC5iYXNlVXJsXSlpZihhJiYobnVsbD09PShvPWUudXJsKXx8dm9pZCAwPT09bz92b2lkIDA6by5zdGFydHNXaXRoKGEpKSl7cj0hMDticmVha31pZighcil7dT0hMTticmVha319Y29uc3QgaD1bXTtyZXR1cm4gdT8oci5mb3JFYWNoKChlPT57aC5wdXNoKGMucmVxdWVzdChlKSl9KSksKG51bGw9PWM/dm9pZCAwOmMuYWxsKSYmYy5hbGwoaCkudGhlbigoZT0+UHJvbWlzZS5yZXNvbHZlKGUpKSkuY2F0Y2goKHQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3ZhciBlLHIsbjtpZig0MDE9PT0obnVsbD09PShlPW51bGw9PXQ/dm9pZCAwOnQucmVzcG9uc2UpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLnN0YXR1cykpe2xldCBlO3RyeXtlPXlpZWxkIGwoKX1jYXRjaChlKXt0aHJvdyBuZXcgYSgiU1BBLVdPUktFUl9DT1JFLUhSQS1TRTAxIixudWxsIT09KHI9bnVsbD09ZT92b2lkIDA6ZS5uYW1lKSYmdm9pZCAwIT09cj9yOiJSZWZyZXNoIHRva2VuIHJlcXVlc3QgZmFpbGVkLiIsbnVsbCE9PShuPW51bGw9PWU/dm9pZCAwOmUubWVzc2FnZSkmJnZvaWQgMCE9PW4/bjoiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIHJlZnJlc2ggdGhlIGFjY2VzcyB0b2tlbiBmb2xsb3dpbmcgYSA0MDEgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyLiIpfWlmKGUpcmV0dXJuIGMuYWxsJiZjLmFsbChoKS50aGVuKChlPT5Qcm9taXNlLnJlc29sdmUoZSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QoZSkpKX1yZXR1cm4gUHJvbWlzZS5yZWplY3QodCl9KSkpKSk6UHJvbWlzZS5yZWplY3QobmV3IGEoIlNQQS1XT1JLRVJfQ09SRS1IUkEtSVYwMiIsIlJlcXVlc3QgdG8gdGhlIHByb3ZpZGVkIGVuZHBvaW50IGlzIHByb2hpYml0ZWQuIiwiUmVxdWVzdHMgY2FuIG9ubHkgYmUgc2VudCB0byByZXNvdXJjZSBzZXJ2ZXJzIHNwZWNpZmllZCBieSB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AgYXR0cmlidXRlIHdoaWxlIGluaXRpYWxpemluZyB0aGUgU0RLLiBUaGUgc3BlY2lmaWVkIGVuZHBvaW50IGluIHRoaXMgcmVxdWVzdCBjYW5ub3QgYmUgZm91bmQgYW1vbmcgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIikpfSkpLGlzQXV0aGVudGljYXRlZDooKT0+aS5pc0F1dGhlbnRpY2F0ZWQoKSxyZWZyZXNoQWNjZXNzVG9rZW46bCxyZXF1ZXN0QWNjZXNzVG9rZW46KHQscixuLGMpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPXlpZWxkIHMuZ2V0Q29uZmlnRGF0YSgpO3JldHVybiBuJiZlLmVuYWJsZVBLQ0UmJih5aWVsZCBpLnNldFBLQ0VDb2RlKG4sbnVsbCE9Yz9jOiIiKSksdD9pLnJlcXVlc3RBY2Nlc3NUb2tlbih0LG51bGwhPXI/cjoiIixudWxsIT1jP2M6IiciKS50aGVuKCgoKT0+KG8ucmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSgpLGkuZ2V0QmFzaWNVc2VySW5mbygpKSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChlKSkpOlByb21pc2UucmVqZWN0KG5ldyBhKCJTUEEtV09SS0VSX0NPUkUtUkFUMS1ORjAxIiwiTm8gYXV0aG9yaXphdGlvbiBjb2RlLiIsIk5vIGF1dGhvcml6YXRpb24gY29kZSB3YXMgZm91bmQuIikpfSkpLHJlcXVlc3RDdXN0b21HcmFudDp1LHJldm9rZUFjY2Vzc1Rva2VuOigpPT5pLnJldm9rZUFjY2Vzc1Rva2VuKCkudGhlbigoKCk9PihvLmNsZWFyUmVmcmVzaFRva2VuVGltZW91dCgpLFByb21pc2UucmVzb2x2ZSghMCkpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KGUpKSksc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjazplPT57KG51bGw9PWM/dm9pZCAwOmMuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjaykmJmMuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjayhlKX0sc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrOmU9PnsobnVsbD09Yz92b2lkIDA6Yy5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2spJiZjLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjayhlKX0sc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2s6ZT0+eyhudWxsPT1jP3ZvaWQgMDpjLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKSYmYy5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayhlKX0sc2V0U2Vzc2lvblN0YXRlOnQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHMuc2V0U2Vzc2lvbkRhdGFQYXJhbWV0ZXIoInNlc3Npb25fc3RhdGUiLHQpfSkpLHNpZ25PdXQ6KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBvLmNsZWFyUmVmcmVzaFRva2VuVGltZW91dCgpLHlpZWxkIGkuc2lnbk91dCgpfSkpLHN0YXJ0QXV0b1JlZnJlc2hUb2tlbjooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7by5jbGVhclJlZnJlc2hUb2tlblRpbWVvdXQoKSxvLnJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkoKX0pKSx1cGRhdGVDb25maWc6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgaS51cGRhdGVDb25maWcodCl9KSl9fSkpKShyKSxxbi5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKEJuKSxxbi5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2soS24pLHFuLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKEpuKSxjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSgpKX1jYXRjaChlKXtjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXRfYXV0aF91cmwiOnFuLmdldEF1dGhvcml6YXRpb25VUkwobnVsbD09dD92b2lkIDA6dC5kYXRhKS50aGVuKChlPT57Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2UicmVxdWVzdF9nZXRfdG9rZW4iOnFuLnJlcXVlc3RBY2Nlc3NUb2tlbihudWxsPT09KG49bnVsbD09dD92b2lkIDA6dC5kYXRhKXx8dm9pZCAwPT09bj92b2lkIDA6bi5jb2RlLG51bGw9PT0oaT1udWxsPT10P3ZvaWQgMDp0LmRhdGEpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLnNlc3Npb25TdGF0ZSxudWxsPT09KG89bnVsbD09dD92b2lkIDA6dC5kYXRhKXx8dm9pZCAwPT09bz92b2lkIDA6by5wa2NlLG51bGw9PT0ocz1udWxsPT10P3ZvaWQgMDp0LmRhdGEpfHx2b2lkIDA9PT1zP3ZvaWQgMDpzLnN0YXRlKS50aGVuKChlPT57Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2UiaHR0cC1yZXF1ZXN0Ijpxbi5odHRwUmVxdWVzdCh0LmRhdGEpLnRoZW4oKGU9PntjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9PntjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSk7YnJlYWs7Y2FzZSJodHRwLXJlcXVlc3QtYWxsIjpxbi5odHRwUmVxdWVzdEFsbCh0LmRhdGEpLnRoZW4oKGU9PntjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9PntjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSk7YnJlYWs7Y2FzZSJzaWduLW91dCI6dHJ5e2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHFuLnNpZ25PdXQoKSkpfWNhdGNoKGUpe2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlInJlcXVlc3QtY3VzdG9tLWdyYW50Ijpxbi5yZXF1ZXN0Q3VzdG9tR3JhbnQodC5kYXRhKS50aGVuKChlPT57Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2UicmV2b2tlLWFjY2Vzcy10b2tlbiI6cW4ucmV2b2tlQWNjZXNzVG9rZW4oKS50aGVuKChlPT57Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2UiZ2V0LW9pZGMtc2VydmljZS1lbmRwb2ludHMiOnRyeXtjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCBxbi5nZXRPSURDU2VydmljZUVuZHBvaW50cygpKSl9Y2F0Y2goZSl7Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0LWJhc2ljLXVzZXItaW5mbyI6dHJ5e2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHFuLmdldEJhc2ljVXNlckluZm8oKSkpfWNhdGNoKGUpe2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlImdldC1kZWNvZGVkLWlkLXRva2VuIjp0cnl7Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgcW4uZ2V0RGVjb2RlZElEVG9rZW4oKSkpfWNhdGNoKGUpe2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlImdldF9pZF90b2tlbiI6dHJ5e2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHFuLmdldElEVG9rZW4oKSkpfWNhdGNoKGUpe2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlImVuYWJsZV9odHRwX2hhbmRsZXIiOnFuLmVuYWJsZUh0dHBIYW5kbGVyKCksYy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoKSk7YnJlYWs7Y2FzZSJkaXNhYmxlX2h0dHBfaGFuZGxlciI6cW4uZGlzYWJsZUh0dHBIYW5kbGVyKCksYy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoKSk7YnJlYWs7Y2FzZSJpc19hdXRoZW50aWNhdGVkIjp0cnl7Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgcW4uaXNBdXRoZW50aWNhdGVkKCkpKX1jYXRjaChlKXtjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXRfc2lnbl9vdXRfdXJsIjp0cnl7Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgcW4uZ2V0U2lnbk91dFVSTCgpKSl9Y2F0Y2goZSl7Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UicmVmcmVzaF9hY2Nlc3MtdG9rZW4iOnRyeXtjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCBxbi5yZWZyZXNoQWNjZXNzVG9rZW4oKSkpfWNhdGNoKGUpe2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlInN0YXJ0X2F1dG9fcmVmcmVzaF90b2tlbiI6dHJ5e2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHFuLnN0YXJ0QXV0b1JlZnJlc2hUb2tlbigpKSl9Y2F0Y2goZSl7Yy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2Uic2V0X3Nlc3Npb25fc3RhdGUiOnRyeXtjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCBxbi5zZXRTZXNzaW9uU3RhdGUobnVsbD09dD92b2lkIDA6dC5kYXRhKSkpfWNhdGNoKGUpe2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlInVwZGF0ZV9jb25maWciOnRyeXtjLnBvc3RNZXNzYWdlKF8uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCBxbi51cGRhdGVDb25maWcobnVsbD09dD92b2lkIDA6dC5kYXRhKSkpfWNhdGNoKGUpe2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlImdldF9jb25maWdfZGF0YSI6dHJ5e2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHFuLmdldENvbmZpZ0RhdGEoKSkpfWNhdGNoKGUpe2MucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztkZWZhdWx0Om51bGw9PWN8fGMucG9zdE1lc3NhZ2UoXy5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKG5ldyBhKCJTUEEtQ0xJRU5UX1dPUktFUi1PTk1TRy1JVjAyIiwiVGhlIG1lc3NhZ2UgdHlwZSBpcyBpbnZhbGlkLiIsYFRoZSBtZXNzYWdlIHR5cGUgcHJvdmlkZWQsICR7dC50eXBlfSwgaXMgaW52YWxpZC5gKSkpfWVsc2UgYy5wb3N0TWVzc2FnZShfLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UobmV3IGEoIlNQQS1DTElFTlRfV09SS0VSLU9OTVNHLU5GMDEiLCJUaGUgd2ViIHdvcmtlciBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgeWV0LiIsIlRoZSBpbml0aWFsaXplIG1ldGhvZCBuZWVkcyB0byBiZSBjYWxsZWQgYmVmb3JlIHRoZSBzcGVjaWZpZWQgb3BlcmF0aW9uIGNhbiBiZSBjYXJyaWVkIG91dC4iKSkpfSkpO2NvbnN0IEtuPSgpPT57eG4ucG9zdE1lc3NhZ2Uoe3R5cGU6InJlcXVlc3Qtc3RhcnQifSl9LEpuPWU9Pnt4bi5wb3N0TWVzc2FnZSh7ZGF0YTpKU09OLnN0cmluZ2lmeShudWxsIT1lP2U6IiIpLHR5cGU6InJlcXVlc3Qtc3VjY2VzcyJ9KX0sQm49KCk9Pnt4bi5wb3N0TWVzc2FnZSh7dHlwZToicmVxdWVzdC1maW5pc2gifSl9O3JldHVybnt9fSgpOwoK",null,!1),new Worker(Al,t)});const wl={checkSessionInterval:3,clientHost:origin,enableOIDCSessionManagement:!1,sessionRefreshInterval:300,storage:H.SessionStorage};class Pl{constructor(t){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=t}_isInitialized(){return l(this,void 0,void 0,(function*(){if(!this._startedInitialize)return!1;let t=0;for(;!this._initialized;)1e4===t&&console.warn("It is taking longer than usual for the object to be initialized"),yield new Promise(t=>setTimeout(t,1)),t++;return!0}))}_validateMethod(){return l(this,void 0,void 0,(function*(){return(yield this._isInitialized())&&!!(yield this.isAuthenticated())||Promise.reject()}))}
|
|
434
|
+
*/updateConfig(t){return i(this,void 0,void 0,(function*(){yield this._authenticationCore.updateConfig(t)}))}static clearUserSessionData(t){return i(this,void 0,void 0,(function*(){yield this._authenticationCore.clearUserSessionData(t)}))}}var H,U,L,k=("Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwp2YXIgd29ya2VyX2NvZGU9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZShlLHQsbixyKXtyZXR1cm4gbmV3KG58fChuPVByb21pc2UpKSgoZnVuY3Rpb24oaSxvKXtmdW5jdGlvbiBzKGUpe3RyeXtjKHIubmV4dChlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gYShlKXt0cnl7YyhyLnRocm93KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBjKGUpe3ZhciB0O2UuZG9uZT9pKGUudmFsdWUpOih0PWUudmFsdWUsdCBpbnN0YW5jZW9mIG4/dDpuZXcgbigoZnVuY3Rpb24oZSl7ZSh0KX0pKSkudGhlbihzLGEpfWMoKHI9ci5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pKX1mdW5jdGlvbiB0KGUsdCxuLHIpe3JldHVybiBuZXcobnx8KG49UHJvbWlzZSkpKChmdW5jdGlvbihpLG8pe2Z1bmN0aW9uIHMoZSl7dHJ5e2Moci5uZXh0KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBhKGUpe3RyeXtjKHIudGhyb3coZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIGMoZSl7dmFyIHQ7ZS5kb25lP2koZS52YWx1ZSk6KHQ9ZS52YWx1ZSx0IGluc3RhbmNlb2Ygbj90Om5ldyBuKChmdW5jdGlvbihlKXtlKHQpfSkpKS50aGVuKHMsYSl9Yygocj1yLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSkpfXZhciBuOyFmdW5jdGlvbihlKXtlLmZvcm1Qb3N0PSJmb3JtX3Bvc3QiLGUucXVlcnk9InF1ZXJ5In0obnx8KG49e30pKTt2YXIgcjshZnVuY3Rpb24oZSl7ZS5Db25maWdEYXRhPSJjb25maWdfZGF0YSIsZS5PSURDUHJvdmlkZXJNZXRhRGF0YT0ib2lkY19wcm92aWRlcl9tZXRhX2RhdGEiLGUuU2Vzc2lvbkRhdGE9InNlc3Npb25fZGF0YSIsZS5UZW1wb3JhcnlEYXRhPSJ0ZW1wb3JhcnlfZGF0YSJ9KHJ8fChyPXt9KSk7Y29uc3QgaT0icmVmcmVzaF90b2tlbl90aW1lciIsbz1bIlJTMjU2IiwiUlM1MTIiLCJSUzM4NCIsIlBTMjU2Il0scz0ic2lnbl9vdXRfdXJsIjt2YXIgYTshZnVuY3Rpb24oZSl7ZS5JbmNsdWRlPSJpbmNsdWRlIixlLlNhbWVPcmlnaW49InNhbWUtb3JpZ2luIixlLk9taXQ9Im9taXQifShhfHwoYT17fSkpO2NsYXNzIGN7Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMubWVzc2FnZT1uLHRoaXMubmFtZT10LHRoaXMuY29kZT1lLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLG5ldy50YXJnZXQucHJvdG90eXBlKX19Y2xhc3MgdXtjb25zdHJ1Y3Rvcigpe31zdGF0aWMgZmlsdGVyQ2xhaW1zRnJvbUlEVG9rZW5QYXlsb2FkKGUpe2NvbnN0IHQ9T2JqZWN0LmFzc2lnbih7fSxlKTtudWxsPT10fHxkZWxldGUgdC5pc3MsbnVsbD09dHx8ZGVsZXRlIHQuYXVkLG51bGw9PXR8fGRlbGV0ZSB0LmV4cCxudWxsPT10fHxkZWxldGUgdC5pYXQsbnVsbD09dHx8ZGVsZXRlIHQuYWNyLG51bGw9PXR8fGRlbGV0ZSB0LmFtcixudWxsPT10fHxkZWxldGUgdC5henAsbnVsbD09dHx8ZGVsZXRlIHQuYXV0aF90aW1lLG51bGw9PXR8fGRlbGV0ZSB0Lm5vbmNlLG51bGw9PXR8fGRlbGV0ZSB0LmNfaGFzaCxudWxsPT10fHxkZWxldGUgdC5hdF9oYXNoLG51bGw9PXR8fGRlbGV0ZSB0Lm5iZixudWxsPT10fHxkZWxldGUgdC5pc2ssbnVsbD09dHx8ZGVsZXRlIHQuc2lkO2NvbnN0IG49e307cmV0dXJuIE9iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKChbZSx0XSk9Pntjb25zdCByPWUuc3BsaXQoIl8iKS5tYXAoKChlLHQpPT4wPT09dD9lOltlWzBdLnRvVXBwZXJDYXNlKCksLi4uZS5zbGljZSgxKV0uam9pbigiIikpKS5qb2luKCIiKTtuW3JdPXR9KSksbn1zdGF0aWMgZ2V0VG9rZW5SZXF1ZXN0SGVhZGVycygpe3JldHVybntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24iLCJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQifX1zdGF0aWMgZ2VuZXJhdGVTdGF0ZVBhcmFtRm9yUmVxdWVzdENvcnJlbGF0aW9uKGUsdCl7Y29uc3Qgbj1wYXJzZUludChlLnNwbGl0KCIjIilbMV0pO3JldHVybiB0P2Ake3R9X3JlcXVlc3RfJHtufWA6YHJlcXVlc3RfJHtufWB9c3RhdGljIGV4dHJhY3RQS0NFS2V5RnJvbVN0YXRlUGFyYW0oZSl7cmV0dXJuYHBrY2VfY29kZV92ZXJpZmllciMke3BhcnNlSW50KGUuc3BsaXQoInJlcXVlc3RfIilbMV0pfWB9fXUuZ2V0VGVuYW50RG9tYWluRnJvbUlkVG9rZW5QYXlsb2FkPShlLHQ9IkAiKT0+e2NvbnN0IG49ZS5zdWIuc3BsaXQodCk7cmV0dXJuIG4ubGVuZ3RoPjI/bltuLmxlbmd0aC0xXToiIn07Y2xhc3MgbHtjb25zdHJ1Y3RvcihlLG4pe3RoaXMuX2RhdGFMYXllcj1lLHRoaXMuX2NvbmZpZz0oKT0+dCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0Q29uZmlnRGF0YSgpfSkpLHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhPSgpPT50KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSgpfSkpLHRoaXMuX2NyeXB0b0hlbHBlcj1ufXJlc29sdmVFbmRwb2ludHMoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXt9LG49eWllbGQgdGhpcy5fY29uZmlnKCk7cmV0dXJuIG4uZW5kcG9pbnRzJiZPYmplY3Qua2V5cyhuLmVuZHBvaW50cykuZm9yRWFjaCgoZT0+e2NvbnN0IHI9ZS5yZXBsYWNlKC9bQS1aXS9nLChlPT5gXyR7ZS50b0xvd2VyQ2FzZSgpfWApKTt0W3JdPShudWxsPT1uP3ZvaWQgMDpuLmVuZHBvaW50cyk/bi5lbmRwb2ludHNbZV06IiJ9KSksT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHQpfSkpfXJlc29sdmVFbmRwb2ludHNFeHBsaWNpdGx5KCl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPXt9LHQ9eWllbGQgdGhpcy5fY29uZmlnKCksbj1bImF1dGhvcml6YXRpb25fZW5kcG9pbnQiLCJlbmRfc2Vzc2lvbl9lbmRwb2ludCIsImp3a3NfdXJpIiwiY2hlY2tfc2Vzc2lvbl9pZnJhbWUiLCJyZXZvY2F0aW9uX2VuZHBvaW50IiwidG9rZW5fZW5kcG9pbnQiLCJpc3N1ZXIiLCJ1c2VyaW5mb19lbmRwb2ludCJdO2lmKCF0LmVuZHBvaW50c3x8IU9iamVjdC5rZXlzKG51bGw9PXQ/dm9pZCAwOnQuZW5kcG9pbnRzKS5ldmVyeSgoZT0+e2NvbnN0IHQ9ZS5yZXBsYWNlKC9bQS1aXS9nLChlPT5gXyR7ZS50b0xvd2VyQ2FzZSgpfWApKTtyZXR1cm4gbi5pbmNsdWRlcyh0KX0pKSl0aHJvdyBuZXcgYygiSlMtQVVUSF9IRUxQRVItUkVFLU5GMDEiLCJObyByZXF1aXJlZCBlbmRwb2ludHMuIiwiUmVxdWlyZWQgb2lkYyBlbmRwb2ludHMgYXJlIG5vdCBkZWZpbmVkIik7cmV0dXJuIHQuZW5kcG9pbnRzJiZPYmplY3Qua2V5cyh0LmVuZHBvaW50cykuZm9yRWFjaCgobj0+e2NvbnN0IHI9bi5yZXBsYWNlKC9bQS1aXS9nLChlPT5gXyR7ZS50b0xvd2VyQ2FzZSgpfWApKTtlW3JdPShudWxsPT10P3ZvaWQgMDp0LmVuZHBvaW50cyk/dC5lbmRwb2ludHNbbl06IiJ9KSksT2JqZWN0LmFzc2lnbih7fSxlKX0pKX1yZXNvbHZlRW5kcG9pbnRzQnlCYXNlVVJMKCl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPXt9LHQ9eWllbGQgdGhpcy5fY29uZmlnKCksbj10LmJhc2VVcmw7aWYoIW4pdGhyb3cgbmV3IGMoIkpTLUFVVEhfSEVMUEVSX1JFQk8tTkYwMSIsIkJhc2UgVVJMIG5vdCBkZWZpbmVkLiIsIkJhc2UgVVJMIGlzIG5vdCBkZWZpbmVkIGluIEF1dGhDbGllbnQgY29uZmlnLiIpO3QuZW5kcG9pbnRzJiZPYmplY3Qua2V5cyh0LmVuZHBvaW50cykuZm9yRWFjaCgobj0+e2NvbnN0IHI9bi5yZXBsYWNlKC9bQS1aXS9nLChlPT5gXyR7ZS50b0xvd2VyQ2FzZSgpfWApKTtlW3JdPShudWxsPT10P3ZvaWQgMDp0LmVuZHBvaW50cyk/dC5lbmRwb2ludHNbbl06IiJ9KSk7Y29uc3Qgcj17YXV0aG9yaXphdGlvbl9lbmRwb2ludDpgJHtufS9vYXV0aDIvYXV0aG9yaXplYCxlbmRfc2Vzc2lvbl9lbmRwb2ludDpgJHtufS9vaWRjL2xvZ291dGAsaXNzdWVyOmAke259L29hdXRoMi90b2tlbmAsandrc191cmk6YCR7bn0vb2F1dGgyL2p3a3NgLGNoZWNrX3Nlc3Npb25faWZyYW1lOmAke259L29pZGMvY2hlY2tzZXNzaW9uYCxyZXZvY2F0aW9uX2VuZHBvaW50OmAke259L29hdXRoMi9yZXZva2VgLHRva2VuX2VuZHBvaW50OmAke259L29hdXRoMi90b2tlbmAsdXNlcmluZm9fZW5kcG9pbnQ6YCR7bn0vb2F1dGgyL3VzZXJpbmZvYH07cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxyKSxlKX0pKX12YWxpZGF0ZUlkVG9rZW4oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PSh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoKSkuandrc191cmksbj15aWVsZCB0aGlzLl9jb25maWcoKTtpZighdHx8MD09PXQudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYygiSlNfQVVUSF9IRUxQRVItVklULU5GMDEiLCJKV0tTIGVuZHBvaW50IG5vdCBmb3VuZC4iLCJObyBKV0tTIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIEpXS1MgZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7bGV0IHI7dHJ5e3I9eWllbGQgZmV0Y2godCx7Y3JlZGVudGlhbHM6bi5zZW5kQ29va2llc0luUmVxdWVzdHM/YS5JbmNsdWRlOmEuU2FtZU9yaWdpbn0pfWNhdGNoKHQpe3Rocm93IG5ldyBjKCJKUy1BVVRIX0hFTFBFUi1WSVQtTkUwMiIsIlJlcXVlc3QgdG8gandrcyBlbmRwb2ludCBmYWlsZWQuIixudWxsIT10P3Q6IlRoZSByZXF1ZXN0IHNlbnQgdG8gZ2V0IHRoZSBqd2tzIGZyb20gdGhlIHNlcnZlciBmYWlsZWQuIil9aWYoMjAwIT09ci5zdGF0dXN8fCFyLm9rKXRocm93IG5ldyBjKCJKUy1BVVRIX0hFTFBFUi1WSVQtSEUwMyIsYEludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIHJlY2VpdmVkIGZvciBqd2tzIHJlcXVlc3QgKCR7ci5zdGF0dXNUZXh0fSkuYCx5aWVsZCByLmpzb24oKSk7Y29uc3QgaT0oeWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSkuaXNzdWVyLHtrZXlzOm99PXlpZWxkIHIuanNvbigpLHM9eWllbGQgdGhpcy5fY3J5cHRvSGVscGVyLmdldEpXS0ZvclRoZUlkVG9rZW4oZS5zcGxpdCgiLiIpWzBdLG8pO3JldHVybiB0aGlzLl9jcnlwdG9IZWxwZXIuaXNWYWxpZElkVG9rZW4oZSxzLCh5aWVsZCB0aGlzLl9jb25maWcoKSkuY2xpZW50SUQsbnVsbCE9aT9pOiIiLHRoaXMuX2NyeXB0b0hlbHBlci5kZWNvZGVJRFRva2VuKGUpLnN1YiwoeWllbGQgdGhpcy5fY29uZmlnKCkpLmNsb2NrVG9sZXJhbmNlKX0pKX1nZXRBdXRoZW50aWNhdGVkVXNlckluZm8oZSl7dmFyIHQsbixyLGk7Y29uc3Qgbz10aGlzLl9jcnlwdG9IZWxwZXIuZGVjb2RlSURUb2tlbihlKSxzPXUuZ2V0VGVuYW50RG9tYWluRnJvbUlkVG9rZW5QYXlsb2FkKG8pLGE9bnVsbCE9PSh0PW51bGw9PW8/dm9pZCAwOm8udXNlcm5hbWUpJiZ2b2lkIDAhPT10P3Q6IiIsYz1udWxsIT09KG49by5naXZlbl9uYW1lKSYmdm9pZCAwIT09bj9uOiIiLGw9bnVsbCE9PShyPW8uZmFtaWx5X25hbWUpJiZ2b2lkIDAhPT1yP3I6IiIsZD1jJiZsP2Ake2N9ICR7bH1gOmN8fGx8fCIiLGg9bnVsbCE9PShpPW8ucHJlZmVycmVkX3VzZXJuYW1lKSYmdm9pZCAwIT09aT9pOmQ7cmV0dXJuIE9iamVjdC5hc3NpZ24oe2Rpc3BsYXlOYW1lOmgsdGVuYW50RG9tYWluOnMsdXNlcm5hbWU6YX0sdS5maWx0ZXJDbGFpbXNGcm9tSURUb2tlblBheWxvYWQobykpfXJlcGxhY2VDdXN0b21HcmFudFRlbXBsYXRlVGFncyhlLG4pe3ZhciByO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7bGV0IHQ9Im9wZW5pZCI7Y29uc3QgaT15aWVsZCB0aGlzLl9jb25maWcoKSxvPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShuKTtyZXR1cm4gaS5zY29wZSYmaS5zY29wZS5sZW5ndGg+MCYmKGkuc2NvcGUuaW5jbHVkZXMoIm9wZW5pZCIpfHxpLnNjb3BlLnB1c2goIm9wZW5pZCIpLHQ9aS5zY29wZS5qb2luKCIgIikpLGUucmVwbGFjZSgie3t0b2tlbn19IixvLmFjY2Vzc190b2tlbikucmVwbGFjZSgie3t1c2VybmFtZX19Iix0aGlzLmdldEF1dGhlbnRpY2F0ZWRVc2VySW5mbyhvLmlkX3Rva2VuKS51c2VybmFtZSkucmVwbGFjZSgie3tzY29wZX19Iix0KS5yZXBsYWNlKCJ7e2NsaWVudElEfX0iLGkuY2xpZW50SUQpLnJlcGxhY2UoInt7Y2xpZW50U2VjcmV0fX0iLG51bGwhPT0ocj1pLmNsaWVudFNlY3JldCkmJnZvaWQgMCE9PXI/cjoiIil9KSl9Y2xlYXJVc2VyU2Vzc2lvbkRhdGEoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9kYXRhTGF5ZXIucmVtb3ZlVGVtcG9yYXJ5RGF0YShlKSx5aWVsZCB0aGlzLl9kYXRhTGF5ZXIucmVtb3ZlU2Vzc2lvbkRhdGEoZSl9KSl9aGFuZGxlVG9rZW5SZXNwb25zZShlLG4pe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7aWYoMjAwIT09ZS5zdGF0dXN8fCFlLm9rKXRocm93IG5ldyBjKCJKUy1BVVRIX0hFTFBFUi1IVFItTkUwMSIsYEludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIHJlY2VpdmVkIGZvciB0b2tlbiByZXF1ZXN0ICgke2Uuc3RhdHVzVGV4dH0pLmAseWllbGQgZS5qc29uKCkpO2NvbnN0IHI9eWllbGQgZS5qc29uKCk7aWYoci5jcmVhdGVkX2F0PShuZXcgRGF0ZSkuZ2V0VGltZSgpLCh5aWVsZCB0aGlzLl9jb25maWcoKSkudmFsaWRhdGVJRFRva2VuKXJldHVybiB0aGlzLnZhbGlkYXRlSWRUb2tlbihyLmlkX3Rva2VuKS50aGVuKCgoKT0+dCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRTZXNzaW9uRGF0YShyLG4pO2NvbnN0IGU9e2FjY2Vzc1Rva2VuOnIuYWNjZXNzX3Rva2VuLGNyZWF0ZWRBdDpyLmNyZWF0ZWRfYXQsZXhwaXJlc0luOnIuZXhwaXJlc19pbixpZFRva2VuOnIuaWRfdG9rZW4scmVmcmVzaFRva2VuOnIucmVmcmVzaF90b2tlbixzY29wZTpyLnNjb3BlLHRva2VuVHlwZTpyLnRva2VuX3R5cGV9O3JldHVybiBQcm9taXNlLnJlc29sdmUoZSl9KSkpKTt7Y29uc3QgZT17YWNjZXNzVG9rZW46ci5hY2Nlc3NfdG9rZW4sY3JlYXRlZEF0OnIuY3JlYXRlZF9hdCxleHBpcmVzSW46ci5leHBpcmVzX2luLGlkVG9rZW46ci5pZF90b2tlbixyZWZyZXNoVG9rZW46ci5yZWZyZXNoX3Rva2VuLHNjb3BlOnIuc2NvcGUsdG9rZW5UeXBlOnIudG9rZW5fdHlwZX07cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRTZXNzaW9uRGF0YShyLG4pLFByb21pc2UucmVzb2x2ZShlKX19KSl9Z2VuZXJhdGVQS0NFS2V5KGUpe3ZhciBuO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YShlKSxyPVtdO09iamVjdC5rZXlzKHQpLmZvckVhY2goKGU9PntlLnN0YXJ0c1dpdGgoInBrY2VfY29kZV92ZXJpZmllciIpJiZyLnB1c2goZSl9KSk7Y29uc3QgaT1yLnNvcnQoKS5wb3AoKTtyZXR1cm5gcGtjZV9jb2RlX3ZlcmlmaWVyIyR7cGFyc2VJbnQobnVsbCE9PShuPW51bGw9PWk/dm9pZCAwOmkuc3BsaXQoIiMiKVsxXSkmJnZvaWQgMCE9PW4/bjoiLTEiKSsxfWB9KSl9fWNsYXNzIGR7Y29uc3RydWN0b3IoZSl7dGhpcy5fY3J5cHRvVXRpbHM9ZX1nZXRDb2RlVmVyaWZpZXIoKXtyZXR1cm4gdGhpcy5fY3J5cHRvVXRpbHMuYmFzZTY0VVJMRW5jb2RlKHRoaXMuX2NyeXB0b1V0aWxzLmdlbmVyYXRlUmFuZG9tQnl0ZXMoMzIpKX1nZXRDb2RlQ2hhbGxlbmdlKGUpe3JldHVybiB0aGlzLl9jcnlwdG9VdGlscy5iYXNlNjRVUkxFbmNvZGUodGhpcy5fY3J5cHRvVXRpbHMuaGFzaFNoYTI1NihlKSl9Z2V0SldLRm9yVGhlSWRUb2tlbihlLHQpe2NvbnN0IG49SlNPTi5wYXJzZSh0aGlzLl9jcnlwdG9VdGlscy5iYXNlNjRVUkxEZWNvZGUoZSkpO2Zvcihjb25zdCBlIG9mIHQpaWYobi5raWQ9PT1lLmtpZClyZXR1cm4gZTt0aHJvdyBuZXcgYygiSlMtQ1JZUFRPX1VUSUwtR0pGVElULUlWMDEiLCJraWQgbm90IGZvdW5kLiIsIkZhaWxlZCB0byBmaW5kIHRoZSAna2lkJyBzcGVjaWZpZWQgaW4gdGhlIGlkX3Rva2VuLiAna2lkJyBmb3VuZCBpbiB0aGUgaGVhZGVyIDogIituLmtpZCsiLCBFeHBlY3RlZCB2YWx1ZXM6ICIrdC5tYXAoKGU9PmUua2lkKSkuam9pbigiLCAiKSl9aXNWYWxpZElkVG9rZW4oZSx0LG4scixpLHMpe3JldHVybiB0aGlzLl9jcnlwdG9VdGlscy52ZXJpZnlKd3QoZSx0LG8sbixyLGkscykudGhlbigoZT0+ZT9Qcm9taXNlLnJlc29sdmUoITApOlByb21pc2UucmVqZWN0KG5ldyBjKCJKUy1DUllQVE9fSEVMUEVSLUlWSVQtSVYwMSIsIkludmFsaWQgSUQgdG9rZW4uIiwiSUQgdG9rZW4gdmFsaWRhdGlvbiByZXR1cm5lZCBmYWxzZSIpKSkpLmNhdGNoKChlPT4iRVJSX0pXVF9DTEFJTV9WQUxJREFUSU9OX0ZBSUxFRCI9PT0obnVsbD09ZT92b2lkIDA6ZS5jb2RlKSYmIm5iZiI9PT0obnVsbD09ZT92b2lkIDA6ZS5jbGFpbSk/UHJvbWlzZS5yZWplY3QobmV3IGMoIkpTLUNSWVBUT19VVElMUy1JVklULUlWMDIiLCJKV1QgTkJGIENMQUlNIFZBTElEQVRJT04gRkFJTEVEIiwiSldUIE5CRiBjbGFpbSB2YWxpZGF0aW9uIGhhcyBiZWVuIGZhaWxlZCIpKTpQcm9taXNlLnJlamVjdChuZXcgYygiSlMtQ1JZUFRPX1VUSUxTLUlWSVQtSVYwMyIsIkpXVCBWQUxJREFUSU9OIEZBSUxFRCIsIkpXVCB2YWxpZGF0aW9uIGhhcyBiZWVuIGZhaWxlZCIpKSkpfWRlY29kZUlEVG9rZW4oZSl7dHJ5e2NvbnN0IHQ9dGhpcy5fY3J5cHRvVXRpbHMuYmFzZTY0VVJMRGVjb2RlKGUuc3BsaXQoIi4iKVsxXSk7cmV0dXJuIEpTT04ucGFyc2UodCl9Y2F0Y2goZSl7dGhyb3cgbmV3IGMoIkpTLUNSWVBUT19VVElMLURJVC1JVjAxIiwiRGVjb2RpbmcgSUQgdG9rZW4gZmFpbGVkLiIsZSl9fX1jbGFzcyBoe2NvbnN0cnVjdG9yKGUsbil7dGhpcy5fY3J5cHRvVXRpbHM9bix0aGlzLl9jcnlwdG9IZWxwZXI9bmV3IGQobiksdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXI9bmV3IGwoZSx0aGlzLl9jcnlwdG9IZWxwZXIpLHRoaXMuX2RhdGFMYXllcj1lLHRoaXMuX2NvbmZpZz0oKT0+dCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0Q29uZmlnRGF0YSgpfSkpLHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhPSgpPT50KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSgpfSkpfWdldEF1dGhvcml6YXRpb25VUkwoZSxuKXt2YXIgcixpLG87cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YVBhcmFtZXRlcigiYXV0aG9yaXphdGlvbl9lbmRwb2ludCIpLHM9eWllbGQgdGhpcy5fY29uZmlnKCk7aWYoIXR8fDA9PT10LnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1HQVUtTkYwMSIsIk5vIGF1dGhvcml6YXRpb24gZW5kcG9pbnQgZm91bmQuIiwiTm8gYXV0aG9yaXphdGlvbiBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIGZyb20gdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIGF1dGhvcml6YXRpb24gZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7Y29uc3QgYT1uZXcgVVJMKHQpLGw9bmV3IE1hcDtsLnNldCgicmVzcG9uc2VfdHlwZSIsImNvZGUiKSxsLnNldCgiY2xpZW50X2lkIixzLmNsaWVudElEKTtsZXQgZD0ib3BlbmlkIjtzLnNjb3BlJiZzLnNjb3BlLmxlbmd0aD4wJiYocy5zY29wZS5pbmNsdWRlcygib3BlbmlkIil8fHMuc2NvcGUucHVzaCgib3BlbmlkIiksZD1zLnNjb3BlLmpvaW4oIiAiKSksbC5zZXQoInNjb3BlIixkKSxsLnNldCgicmVkaXJlY3RfdXJpIixzLnNpZ25JblJlZGlyZWN0VVJMKSxzLnJlc3BvbnNlTW9kZSYmbC5zZXQoInJlc3BvbnNlX21vZGUiLHMucmVzcG9uc2VNb2RlKTtjb25zdCBoPXlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLmdlbmVyYXRlUEtDRUtleShuKTtpZihzLmVuYWJsZVBLQ0Upe2NvbnN0IGU9bnVsbD09PShyPXRoaXMuX2NyeXB0b0hlbHBlcil8fHZvaWQgMD09PXI/dm9pZCAwOnIuZ2V0Q29kZVZlcmlmaWVyKCksdD1udWxsPT09KGk9dGhpcy5fY3J5cHRvSGVscGVyKXx8dm9pZCAwPT09aT92b2lkIDA6aS5nZXRDb2RlQ2hhbGxlbmdlKGUpO3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGgsZSxuKSxsLnNldCgiY29kZV9jaGFsbGVuZ2VfbWV0aG9kIiwiUzI1NiIpLGwuc2V0KCJjb2RlX2NoYWxsZW5nZSIsdCl9cy5wcm9tcHQmJmwuc2V0KCJwcm9tcHQiLHMucHJvbXB0KTtjb25zdCBmPWU7aWYoZilmb3IoY29uc3RbZSx0XW9mIE9iamVjdC5lbnRyaWVzKGYpKWlmKCIiIT1lJiYiIiE9dCYmInN0YXRlIiE9PWUpe2NvbnN0IG49ZS5yZXBsYWNlKC9bQS1aXS9nLChlPT5gXyR7ZS50b0xvd2VyQ2FzZSgpfWApKTtsLnNldChuLHQudG9TdHJpbmcoKSl9bC5zZXQoInN0YXRlIix1LmdlbmVyYXRlU3RhdGVQYXJhbUZvclJlcXVlc3RDb3JyZWxhdGlvbihoLGY/bnVsbD09PShvPWYuc3RhdGUpfHx2b2lkIDA9PT1vP3ZvaWQgMDpvLnRvU3RyaW5nKCk6IiIpKTtmb3IoY29uc3RbZSx0XW9mIGwuZW50cmllcygpKWEuc2VhcmNoUGFyYW1zLmFwcGVuZChlLHQpO3JldHVybiBhLnRvU3RyaW5nKCl9KSl9cmVxdWVzdEFjY2Vzc1Rva2VuKGUsbixyLGkpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD0oeWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSkudG9rZW5fZW5kcG9pbnQsbz15aWVsZCB0aGlzLl9jb25maWcoKTtpZighdHx8MD09PXQudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLVJBVDEtTkYwMSIsIlRva2VuIGVuZHBvaW50IG5vdCBmb3VuZC4iLCJObyB0b2tlbiBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSB0b2tlbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtuJiYoeWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFNlc3Npb25EYXRhUGFyYW1ldGVyKCJzZXNzaW9uX3N0YXRlIixuLGkpKTtjb25zdCBzPVtdO3MucHVzaChgY2xpZW50X2lkPSR7by5jbGllbnRJRH1gKSxvLmNsaWVudFNlY3JldCYmby5jbGllbnRTZWNyZXQudHJpbSgpLmxlbmd0aD4wJiZzLnB1c2goYGNsaWVudF9zZWNyZXQ9JHtvLmNsaWVudFNlY3JldH1gKTtjb25zdCBsPWU7bGV0IGQ7cy5wdXNoKGBjb2RlPSR7bH1gKSxzLnB1c2goImdyYW50X3R5cGU9YXV0aG9yaXphdGlvbl9jb2RlIikscy5wdXNoKGByZWRpcmVjdF91cmk9JHtvLnNpZ25JblJlZGlyZWN0VVJMfWApLG8uZW5hYmxlUEtDRSYmKHMucHVzaChgY29kZV92ZXJpZmllcj0ke3lpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKHUuZXh0cmFjdFBLQ0VLZXlGcm9tU3RhdGVQYXJhbShyKSxpKX1gKSx5aWVsZCB0aGlzLl9kYXRhTGF5ZXIucmVtb3ZlVGVtcG9yYXJ5RGF0YVBhcmFtZXRlcih1LmV4dHJhY3RQS0NFS2V5RnJvbVN0YXRlUGFyYW0ociksaSkpO3RyeXtkPXlpZWxkIGZldGNoKHQse2JvZHk6cy5qb2luKCImIiksY3JlZGVudGlhbHM6by5zZW5kQ29va2llc0luUmVxdWVzdHM/YS5JbmNsdWRlOmEuU2FtZU9yaWdpbixoZWFkZXJzOm5ldyBIZWFkZXJzKHUuZ2V0VG9rZW5SZXF1ZXN0SGVhZGVycygpKSxtZXRob2Q6IlBPU1QifSl9Y2F0Y2godCl7dGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1SQVQxLU5FMDIiLCJSZXF1ZXN0aW5nIGFjY2VzcyB0b2tlbiBmYWlsZWQiLG51bGwhPXQ/dDoiVGhlIHJlcXVlc3QgdG8gZ2V0IHRoZSBhY2Nlc3MgdG9rZW4gZnJvbSB0aGUgc2VydmVyIGZhaWxlZC4iKX1pZighZC5vayl0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLVJBVDEtSEUwMyIsYFJlcXVlc3RpbmcgYWNjZXNzIHRva2VuIGZhaWxlZCB3aXRoICR7ZC5zdGF0dXNUZXh0fWAseWllbGQgZC5qc29uKCkpO3JldHVybiB5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5oYW5kbGVUb2tlblJlc3BvbnNlKGQsaSl9KSl9cmVmcmVzaEFjY2Vzc1Rva2VuKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD0oeWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSkudG9rZW5fZW5kcG9pbnQsbj15aWVsZCB0aGlzLl9jb25maWcoKSxyPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShlKTtpZighci5yZWZyZXNoX3Rva2VuKXRocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkFUMi1ORjAxIiwiTm8gcmVmcmVzaCB0b2tlbiBmb3VuZC4iLCJUaGVyZSB3YXMgbm8gcmVmcmVzaCB0b2tlbiBmb3VuZC4gQXNnYXJkZW8gZG9lc24ndCByZXR1cm4gYSByZWZyZXNoIHRva2VuIGlmIHRoZSByZWZyZXNoIHRva2VuIGdyYW50IGlzIG5vdCBlbmFibGVkLiIpO2lmKCF0fHwwPT09dC50cmltKCkubGVuZ3RoKXRocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkFUMi1ORjAyIiwiTm8gcmVmcmVzaCB0b2tlbiBlbmRwb2ludCBmb3VuZC4iLCJObyByZWZyZXNoIHRva2VuIGVuZHBvaW50IHdhcyBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIHJlZnJlc2ggdG9rZW4gZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7Y29uc3QgaT1bXTtsZXQgbztpLnB1c2goYGNsaWVudF9pZD0ke24uY2xpZW50SUR9YCksaS5wdXNoKGByZWZyZXNoX3Rva2VuPSR7ci5yZWZyZXNoX3Rva2VufWApLGkucHVzaCgiZ3JhbnRfdHlwZT1yZWZyZXNoX3Rva2VuIiksbi5jbGllbnRTZWNyZXQmJm4uY2xpZW50U2VjcmV0LnRyaW0oKS5sZW5ndGg+MCYmaS5wdXNoKGBjbGllbnRfc2VjcmV0PSR7bi5jbGllbnRTZWNyZXR9YCk7dHJ5e289eWllbGQgZmV0Y2godCx7Ym9keTppLmpvaW4oIiYiKSxjcmVkZW50aWFsczpuLnNlbmRDb29raWVzSW5SZXF1ZXN0cz9hLkluY2x1ZGU6YS5TYW1lT3JpZ2luLGhlYWRlcnM6bmV3IEhlYWRlcnModS5nZXRUb2tlblJlcXVlc3RIZWFkZXJzKCkpLG1ldGhvZDoiUE9TVCJ9KX1jYXRjaCh0KXt0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLVJBVDItTlIwMyIsIlJlZnJlc2ggYWNjZXNzIHRva2VuIHJlcXVlc3QgZmFpbGVkLiIsbnVsbCE9dD90OiJUaGUgcmVxdWVzdCB0byByZWZyZXNoIHRoZSBhY2Nlc3MgdG9rZW4gZmFpbGVkLiIpfWlmKCFvLm9rKXRocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkFUMi1IRTA0IixgUmVmcmVzaGluZyBhY2Nlc3MgdG9rZW4gZmFpbGVkIHdpdGggJHtvLnN0YXR1c1RleHR9YCx5aWVsZCBvLmpzb24oKSk7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLmhhbmRsZVRva2VuUmVzcG9uc2UobyxlKX0pKX1yZXZva2VBY2Nlc3NUb2tlbihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9KHlpZWxkIHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCkpLnJldm9jYXRpb25fZW5kcG9pbnQsbj15aWVsZCB0aGlzLl9jb25maWcoKTtpZighdHx8MD09PXQudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLVJBVDMtTkYwMSIsIk5vIHJldm9rZSBhY2Nlc3MgdG9rZW4gZW5kcG9pbnQgZm91bmQuIiwiTm8gcmV2b2tlIGFjY2VzcyB0b2tlbiBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSByZXZva2UgYWNjZXNzIHRva2VuIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpO2NvbnN0IHI9W107bGV0IGk7ci5wdXNoKGBjbGllbnRfaWQ9JHtuLmNsaWVudElEfWApLHIucHVzaChgdG9rZW49JHsoeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpKS5hY2Nlc3NfdG9rZW59YCksci5wdXNoKCJ0b2tlbl90eXBlX2hpbnQ9YWNjZXNzX3Rva2VuIik7dHJ5e2k9eWllbGQgZmV0Y2godCx7Ym9keTpyLmpvaW4oIiYiKSxjcmVkZW50aWFsczpuLnNlbmRDb29raWVzSW5SZXF1ZXN0cz9hLkluY2x1ZGU6YS5TYW1lT3JpZ2luLGhlYWRlcnM6bmV3IEhlYWRlcnModS5nZXRUb2tlblJlcXVlc3RIZWFkZXJzKCkpLG1ldGhvZDoiUE9TVCJ9KX1jYXRjaCh0KXt0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLVJBVDMtTkUwMiIsIlRoZSByZXF1ZXN0IHRvIHJldm9rZSBhY2Nlc3MgdG9rZW4gZmFpbGVkLiIsbnVsbCE9dD90OiJUaGUgcmVxdWVzdCBzZW50IHRvIHJldm9rZSB0aGUgYWNjZXNzIHRva2VuIGZhaWxlZC4iKX1pZigyMDAhPT1pLnN0YXR1c3x8IWkub2spdGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1SQVQzLUhFMDMiLGBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cyByZWNlaXZlZCBmb3IgcmV2b2tlIGFjY2VzcyB0b2tlbiByZXF1ZXN0ICgke2kuc3RhdHVzVGV4dH0pLmAseWllbGQgaS5qc29uKCkpO3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5jbGVhclVzZXJTZXNzaW9uRGF0YShlKSxQcm9taXNlLnJlc29sdmUoaSl9KSl9cmVxdWVzdEN1c3RvbUdyYW50KGUsbil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCByPXlpZWxkIHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCksaT15aWVsZCB0aGlzLl9jb25maWcoKTtsZXQgbztpZihvPWUudG9rZW5FbmRwb2ludCYmMCE9PWUudG9rZW5FbmRwb2ludC50cmltKCkubGVuZ3RoP2UudG9rZW5FbmRwb2ludDpyLnRva2VuX2VuZHBvaW50LCFvfHwwPT09by50cmltKCkubGVuZ3RoKXRocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkNHLU5GMDEiLCJUb2tlbiBlbmRwb2ludCBub3QgZm91bmQuIiwiTm8gdG9rZW4gZW5kcG9pbnQgd2FzIGZvdW5kIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgdG9rZW4gZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7Y29uc3Qgcz15aWVsZCBQcm9taXNlLmFsbChPYmplY3QuZW50cmllcyhlLmRhdGEpLm1hcCgoKFtlLHJdKT0+dCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIucmVwbGFjZUN1c3RvbUdyYW50VGVtcGxhdGVUYWdzKHIsbik7cmV0dXJuYCR7ZX09JHt0fWB9KSkpKSk7bGV0IGw9T2JqZWN0LmFzc2lnbih7fSx1LmdldFRva2VuUmVxdWVzdEhlYWRlcnMoKSk7ZS5hdHRhY2hUb2tlbiYmKGw9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGwpLHtBdXRob3JpemF0aW9uOmBCZWFyZXIgJHsoeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKG4pKS5hY2Nlc3NfdG9rZW59YH0pKTtjb25zdCBkPXtib2R5OnMuam9pbigiJiIpLGNyZWRlbnRpYWxzOmkuc2VuZENvb2tpZXNJblJlcXVlc3RzP2EuSW5jbHVkZTphLlNhbWVPcmlnaW4saGVhZGVyczpuZXcgSGVhZGVycyhsKSxtZXRob2Q6IlBPU1QifTtsZXQgaDt0cnl7aD15aWVsZCBmZXRjaChvLGQpfWNhdGNoKGUpe3Rocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkNHLU5FMDIiLCJUaGUgY3VzdG9tIGdyYW50IHJlcXVlc3QgZmFpbGVkLiIsbnVsbCE9ZT9lOiJUaGUgcmVxdWVzdCBzZW50IHRvIGdldCB0aGUgY3VzdG9tIGdyYW50IGZhaWxlZC4iKX1pZigyMDAhPT1oLnN0YXR1c3x8IWgub2spdGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1SQ0ctSEUwMyIsYEludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIHJlY2VpdmVkIGZvciB0aGUgY3VzdG9tIGdyYW50IHJlcXVlc3QuICgke2guc3RhdHVzVGV4dH0pYCx5aWVsZCBoLmpzb24oKSk7cmV0dXJuIGUucmV0dXJuc1Nlc3Npb24/dGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuaGFuZGxlVG9rZW5SZXNwb25zZShoLG4pOlByb21pc2UucmVzb2x2ZSh5aWVsZCBoLmpzb24oKSl9KSl9Z2V0QmFzaWNVc2VySW5mbyhlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpLG49dGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuZ2V0QXV0aGVudGljYXRlZFVzZXJJbmZvKG51bGw9PXQ/dm9pZCAwOnQuaWRfdG9rZW4pO2xldCByPXthbGxvd2VkU2NvcGVzOnQuc2NvcGUsc2Vzc2lvblN0YXRlOnQuc2Vzc2lvbl9zdGF0ZX07cmV0dXJuIE9iamVjdC5rZXlzKG4pLmZvckVhY2goKGU9Pnt2b2lkIDAhPT1uW2VdJiYiIiE9PW5bZV0mJm51bGwhPT1uW2VdfHxkZWxldGUgbltlXX0pKSxyPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxyKSxuKSxyfSkpfWdldERlY29kZWRJRFRva2VuKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD0oeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpKS5pZF90b2tlbjtyZXR1cm4gdGhpcy5fY3J5cHRvSGVscGVyLmRlY29kZUlEVG9rZW4odCl9KSl9Z2V0SURUb2tlbihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybih5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoZSkpLmlkX3Rva2VufSkpfWdldE9JRENQcm92aWRlck1ldGFEYXRhKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9jb25maWcoKTtpZighZSYmKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIikpKXJldHVybiBQcm9taXNlLnJlc29sdmUoKTtjb25zdCBuPXQud2VsbEtub3duRW5kcG9pbnQ7aWYobil7bGV0IGU7dHJ5e2lmKGU9eWllbGQgZmV0Y2gobiksMjAwIT09ZS5zdGF0dXN8fCFlLm9rKXRocm93IG5ldyBFcnJvcn1jYXRjaCh0KXt0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLUdPUE1ELUhFMDEiLCJJbnZhbGlkIHdlbGwta25vd24gcmVzcG9uc2UiLCJUaGUgd2VsbCBrbm93biBlbmRwb2ludCByZXNwb25zZSBoYXMgYmVlbiBmYWlsZWQgd2l0aCBhbiBlcnJvci4iKX1yZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLnNldE9JRENQcm92aWRlck1ldGFEYXRhKHlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLnJlc29sdmVFbmRwb2ludHMoeWllbGQgZS5qc29uKCkpKSx5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigib3BfY29uZmlnX2luaXRpYXRlZCIsITApLFByb21pc2UucmVzb2x2ZSgpfWlmKHQuYmFzZVVybCl7dHJ5e3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRPSURDUHJvdmlkZXJNZXRhRGF0YSh5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXNvbHZlRW5kcG9pbnRzQnlCYXNlVVJMKCkpfWNhdGNoKHQpe3Rocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtR09QTUQtSVYwMiIsIlJlc29sdmluZyBlbmRwb2ludHMgZmFpbGVkLiIsbnVsbCE9dD90OiJSZXNvbHZpbmcgZW5kcG9pbnRzIGJ5IGJhc2UgdXJsIGZhaWxlZC4iKX1yZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiLCEwKSxQcm9taXNlLnJlc29sdmUoKX10cnl7eWllbGQgdGhpcy5fZGF0YUxheWVyLnNldE9JRENQcm92aWRlck1ldGFEYXRhKHlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLnJlc29sdmVFbmRwb2ludHNFeHBsaWNpdGx5KCkpfWNhdGNoKHQpe3Rocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtR09QTUQtSVYwMyIsIlJlc29sdmluZyBlbmRwb2ludHMgZmFpbGVkLiIsbnVsbCE9dD90OiJSZXNvbHZpbmcgZW5kcG9pbnRzIGJ5IGV4cGxpY2l0bHkgZmFpbGVkLiIpfXJldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigib3BfY29uZmlnX2luaXRpYXRlZCIsITApLFByb21pc2UucmVzb2x2ZSgpfSkpfWdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCl7dmFyIGUsbixyLGksbyxzLGEsYyx1LGw7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCk7cmV0dXJue2F1dGhvcml6YXRpb25FbmRwb2ludDpudWxsIT09KGU9dC5hdXRob3JpemF0aW9uX2VuZHBvaW50KSYmdm9pZCAwIT09ZT9lOiIiLGNoZWNrU2Vzc2lvbklmcmFtZTpudWxsIT09KG49dC5jaGVja19zZXNzaW9uX2lmcmFtZSkmJnZvaWQgMCE9PW4/bjoiIixlbmRTZXNzaW9uRW5kcG9pbnQ6bnVsbCE9PShyPXQuZW5kX3Nlc3Npb25fZW5kcG9pbnQpJiZ2b2lkIDAhPT1yP3I6IiIsaW50cm9zcGVjdGlvbkVuZHBvaW50Om51bGwhPT0oaT10LmludHJvc3BlY3Rpb25fZW5kcG9pbnQpJiZ2b2lkIDAhPT1pP2k6IiIsaXNzdWVyOm51bGwhPT0obz10Lmlzc3VlcikmJnZvaWQgMCE9PW8/bzoiIixqd2tzVXJpOm51bGwhPT0ocz10Lmp3a3NfdXJpKSYmdm9pZCAwIT09cz9zOiIiLHJlZ2lzdHJhdGlvbkVuZHBvaW50Om51bGwhPT0oYT10LnJlZ2lzdHJhdGlvbl9lbmRwb2ludCkmJnZvaWQgMCE9PWE/YToiIixyZXZvY2F0aW9uRW5kcG9pbnQ6bnVsbCE9PShjPXQucmV2b2NhdGlvbl9lbmRwb2ludCkmJnZvaWQgMCE9PWM/YzoiIix0b2tlbkVuZHBvaW50Om51bGwhPT0odT10LnRva2VuX2VuZHBvaW50KSYmdm9pZCAwIT09dT91OiIiLHVzZXJpbmZvRW5kcG9pbnQ6bnVsbCE9PShsPXQudXNlcmluZm9fZW5kcG9pbnQpJiZ2b2lkIDAhPT1sP2w6IiJ9fSkpfWdldFNpZ25PdXRVUkwoZSl7dmFyIG4scixpO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD1udWxsPT09KG49eWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uZW5kX3Nlc3Npb25fZW5kcG9pbnQsbz15aWVsZCB0aGlzLl9jb25maWcoKTtpZighdHx8MD09PXQudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLUdTT1UtTkYwMSIsIlNpZ24tb3V0IGVuZHBvaW50IG5vdCBmb3VuZC4iLCJObyBzaWduLW91dCBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSBzaWduLW91dCBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtjb25zdCBzPW51bGw9PT0ocj15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoZSkpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLmlkX3Rva2VuO2lmKCFzfHwwPT09cy50cmltKCkubGVuZ3RoKXRocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtR1NPVS1ORjAyIiwiSUQgdG9rZW4gbm90IGZvdW5kLiIsIk5vIElEIHRva2VuIGNvdWxkIGJlIGZvdW5kLiBFaXRoZXIgdGhlIHNlc3Npb24gaW5mb3JtYXRpb24gaXMgbG9zdCBvciB5b3UgaGF2ZSBub3Qgc2lnbmVkIGluLiIpO2NvbnN0IGE9bnVsbCE9PShpPW51bGw9PW8/dm9pZCAwOm8uc2lnbk91dFJlZGlyZWN0VVJMKSYmdm9pZCAwIT09aT9pOm51bGw9PW8/dm9pZCAwOm8uc2lnbkluUmVkaXJlY3RVUkw7aWYoIWF8fDA9PT1hLnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1HU09VLU5GMDMiLCJObyBzaWduLW91dCByZWRpcmVjdCBVUkwgZm91bmQuIiwiVGhlIHNpZ24tb3V0IHJlZGlyZWN0IFVSTCBjYW5ub3QgYmUgZm91bmQgb3IgdGhlIFVSTCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4gTm8gc2lnbi1pbiByZWRpcmVjdCBVUkwgaGFzIGJlZW4gZm91bmQgZWl0aGVyLiAiKTtyZXR1cm5gJHt0fT9pZF90b2tlbl9oaW50PSR7c30mcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpPSR7YX0mc3RhdGU9c2lnbl9vdXRfc3VjY2Vzc2B9KSl9c2lnbk91dChlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmdldFNpZ25PdXRVUkwoZSl9KSl9Y2xlYXJVc2VyU2Vzc2lvbkRhdGEoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5jbGVhclVzZXJTZXNzaW9uRGF0YShlKX0pKX1nZXRBY2Nlc3NUb2tlbihlKXt2YXIgbjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBudWxsPT09KG49eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpKXx8dm9pZCAwPT09bj92b2lkIDA6bi5hY2Nlc3NfdG9rZW59KSl9aXNBdXRoZW50aWNhdGVkKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEJvb2xlYW4oeWllbGQgdGhpcy5nZXRBY2Nlc3NUb2tlbihlKSl9KSl9Z2V0UEtDRUNvZGUoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcih1LmV4dHJhY3RQS0NFS2V5RnJvbVN0YXRlUGFyYW0oZSksbil9KSl9c2V0UEtDRUNvZGUoZSxuLHIpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKHUuZXh0cmFjdFBLQ0VLZXlGcm9tU3RhdGVQYXJhbShuKSxlLHIpfSkpfXVwZGF0ZUNvbmZpZyhlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRDb25maWdEYXRhKGUpLHlpZWxkIHRoaXMuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoITApfSkpfX1jbGFzcyBme2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5faWQ9ZSx0aGlzLl9zdG9yZT10fXNldERhdGFJbkJ1bGsoZSxuKXt2YXIgcjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9bnVsbCE9PShyPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEoZSkpJiZ2b2lkIDAhPT1yP3I6bnVsbCxpPXQmJkpTT04ucGFyc2UodCksbz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30saSksbikscz1KU09OLnN0cmluZ2lmeShvKTt5aWVsZCB0aGlzLl9zdG9yZS5zZXREYXRhKGUscyl9KSl9c2V0VmFsdWUoZSxuLHIpe3ZhciBpO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD1udWxsIT09KGk9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YShlKSkmJnZvaWQgMCE9PWk/aTpudWxsLG89dCYmSlNPTi5wYXJzZSh0KSxzPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxvKSx7W25dOnJ9KSxhPUpTT04uc3RyaW5naWZ5KHMpO3lpZWxkIHRoaXMuX3N0b3JlLnNldERhdGEoZSxhKX0pKX1yZW1vdmVWYWx1ZShlLG4pe3ZhciByO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD1udWxsIT09KHI9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YShlKSkmJnZvaWQgMCE9PXI/cjpudWxsLGk9dCYmSlNPTi5wYXJzZSh0KSxvPU9iamVjdC5hc3NpZ24oe30saSk7ZGVsZXRlIG9bbl07Y29uc3Qgcz1KU09OLnN0cmluZ2lmeShvKTt5aWVsZCB0aGlzLl9zdG9yZS5zZXREYXRhKGUscyl9KSl9X3Jlc29sdmVLZXkoZSx0KXtyZXR1cm4gdD9gJHtlfS0ke3RoaXMuX2lkfS0ke3R9YDpgJHtlfS0ke3RoaXMuX2lkfWB9c2V0Q29uZmlnRGF0YShlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuc2V0RGF0YUluQnVsayh0aGlzLl9yZXNvbHZlS2V5KHIuQ29uZmlnRGF0YSksZSl9KSl9c2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt0aGlzLnNldERhdGFJbkJ1bGsodGhpcy5fcmVzb2x2ZUtleShyLk9JRENQcm92aWRlck1ldGFEYXRhKSxlKX0pKX1zZXRUZW1wb3JhcnlEYXRhKGUsbil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt0aGlzLnNldERhdGFJbkJ1bGsodGhpcy5fcmVzb2x2ZUtleShyLlRlbXBvcmFyeURhdGEsbiksZSl9KSl9c2V0U2Vzc2lvbkRhdGEoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuc2V0RGF0YUluQnVsayh0aGlzLl9yZXNvbHZlS2V5KHIuU2Vzc2lvbkRhdGEsbiksZSl9KSl9c2V0Q3VzdG9tRGF0YShlLG4scil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt0aGlzLnNldERhdGFJbkJ1bGsodGhpcy5fcmVzb2x2ZUtleShlLHIpLG4pfSkpfWdldENvbmZpZ0RhdGEoKXt2YXIgZTtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBKU09OLnBhcnNlKG51bGwhPT0oZT15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoci5Db25maWdEYXRhKSkpJiZ2b2lkIDAhPT1lP2U6bnVsbCl9KSl9Z2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoKXt2YXIgZTtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBKU09OLnBhcnNlKG51bGwhPT0oZT15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoci5PSURDUHJvdmlkZXJNZXRhRGF0YSkpKSYmdm9pZCAwIT09ZT9lOm51bGwpfSkpfWdldFRlbXBvcmFyeURhdGEoZSl7dmFyIG47cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gSlNPTi5wYXJzZShudWxsIT09KG49eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuVGVtcG9yYXJ5RGF0YSxlKSkpJiZ2b2lkIDAhPT1uP246bnVsbCl9KSl9Z2V0U2Vzc2lvbkRhdGEoZSl7dmFyIG47cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gSlNPTi5wYXJzZShudWxsIT09KG49eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuU2Vzc2lvbkRhdGEsZSkpKSYmdm9pZCAwIT09bj9uOm51bGwpfSkpfWdldEN1c3RvbURhdGEoZSxuKXt2YXIgcjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBKU09OLnBhcnNlKG51bGwhPT0ocj15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoZSxuKSkpJiZ2b2lkIDAhPT1yP3I6bnVsbCl9KSl9cmVtb3ZlQ29uZmlnRGF0YSgpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fc3RvcmUucmVtb3ZlRGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuQ29uZmlnRGF0YSkpfSkpfXJlbW92ZU9JRENQcm92aWRlck1ldGFEYXRhKCl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9zdG9yZS5yZW1vdmVEYXRhKHRoaXMuX3Jlc29sdmVLZXkoci5PSURDUHJvdmlkZXJNZXRhRGF0YSkpfSkpfXJlbW92ZVRlbXBvcmFyeURhdGEoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9zdG9yZS5yZW1vdmVEYXRhKHRoaXMuX3Jlc29sdmVLZXkoci5UZW1wb3JhcnlEYXRhLGUpKX0pKX1yZW1vdmVTZXNzaW9uRGF0YShlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX3N0b3JlLnJlbW92ZURhdGEodGhpcy5fcmVzb2x2ZUtleShyLlNlc3Npb25EYXRhLGUpKX0pKX1nZXRDb25maWdEYXRhUGFyYW1ldGVyKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoci5Db25maWdEYXRhKSk7cmV0dXJuIHQmJkpTT04ucGFyc2UodClbZV19KSl9Z2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGFQYXJhbWV0ZXIoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShyLk9JRENQcm92aWRlck1ldGFEYXRhKSk7cmV0dXJuIHQmJkpTT04ucGFyc2UodClbZV19KSl9Z2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihlLG4pe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoci5UZW1wb3JhcnlEYXRhLG4pKTtyZXR1cm4gdCYmSlNPTi5wYXJzZSh0KVtlXX0pKX1nZXRTZXNzaW9uRGF0YVBhcmFtZXRlcihlLG4pe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoci5TZXNzaW9uRGF0YSxuKSk7cmV0dXJuIHQmJkpTT04ucGFyc2UodClbZV19KSl9c2V0Q29uZmlnRGF0YVBhcmFtZXRlcihlLG4pe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5zZXRWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KHIuQ29uZmlnRGF0YSksZSxuKX0pKX1zZXRPSURDUHJvdmlkZXJNZXRhRGF0YVBhcmFtZXRlcihlLG4pe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5zZXRWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KHIuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpLGUsbil9KSl9c2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihlLG4saSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnNldFZhbHVlKHRoaXMuX3Jlc29sdmVLZXkoci5UZW1wb3JhcnlEYXRhLGkpLGUsbil9KSl9c2V0U2Vzc2lvbkRhdGFQYXJhbWV0ZXIoZSxuLGkpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5zZXRWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KHIuU2Vzc2lvbkRhdGEsaSksZSxuKX0pKX1yZW1vdmVDb25maWdEYXRhUGFyYW1ldGVyKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5yZW1vdmVWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KHIuQ29uZmlnRGF0YSksZSl9KSl9cmVtb3ZlT0lEQ1Byb3ZpZGVyTWV0YURhdGFQYXJhbWV0ZXIoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnJlbW92ZVZhbHVlKHRoaXMuX3Jlc29sdmVLZXkoci5PSURDUHJvdmlkZXJNZXRhRGF0YSksZSl9KSl9cmVtb3ZlVGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihlLG4pe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5yZW1vdmVWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KHIuVGVtcG9yYXJ5RGF0YSxuKSxlKX0pKX1yZW1vdmVTZXNzaW9uRGF0YVBhcmFtZXRlcihlLG4pe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5yZW1vdmVWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KHIuU2Vzc2lvbkRhdGEsbiksZSl9KSl9fWNvbnN0IHA9e2Nsb2NrVG9sZXJhbmNlOjMwMCxlbmFibGVQS0NFOiEwLHJlc3BvbnNlTW9kZTpuLnF1ZXJ5LHNjb3BlOlsib3BlbmlkIl0sc2VuZENvb2tpZXNJblJlcXVlc3RzOiEwLHZhbGlkYXRlSURUb2tlbjohMH07Y2xhc3MgZ3sKLyoqCiAgICAgICAgICogVGhpcyBpcyB0aGUgY29uc3RydWN0b3IgbWV0aG9kIHRoYXQgcmV0dXJucyBhbiBpbnN0YW5jZSBvZiB0aGUgLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtTdG9yZX0gc3RvcmUgLSBUaGUgc3RvcmUgb2JqZWN0LgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBfc3RvcmU6IFN0b3JlID0gbmV3IERhdGFTdG9yZSgpOwogICAgICAgICAqIGNvbnN0IGF1dGggPSBuZXcgQXNnYXJkZW9BdXRoQ2xpZW50PEN1c3RvbUNsaWVudENvbmZpZz4oX3N0b3JlKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNjb25zdHJ1Y3RvcgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqLwpjb25zdHJ1Y3RvcihlLHQpe2cuX2luc3RhbmNlSUQ/Zy5faW5zdGFuY2VJRCs9MTpnLl9pbnN0YW5jZUlEPTAsdGhpcy5fZGF0YUxheWVyPW5ldyBmKGBpbnN0YW5jZV8ke2cuX2luc3RhbmNlSUR9YCxlKSx0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmU9bmV3IGgodGhpcy5fZGF0YUxheWVyLHQpLGcuX2F1dGhlbnRpY2F0aW9uQ29yZT1uZXcgaCh0aGlzLl9kYXRhTGF5ZXIsdCkKLyoqCiAgICAgICAgICoKICAgICAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgU0RLIHdpdGggdGhlIGNvbmZpZyBkYXRhLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtBdXRoQ2xpZW50Q29uZmlnPFQ+fSBjb25maWcgLSBUaGUgY29uZmlnIG9iamVjdCB0byBpbml0aWFsaXplIHdpdGguCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGNvbnN0IGNvbmZpZyA9IHsKICAgICAgICAgKiAgICAgc2lnbkluUmVkaXJlY3RVUkw6ICJodHRwOi8vbG9jYWxob3N0OjMwMDAvc2lnbi1pbiIsCiAgICAgICAgICogICAgIGNsaWVudElEOiAiY2xpZW50IElEIiwKICAgICAgICAgKiAgICAgYmFzZVVybDogImh0dHBzOi8vbG9jYWxob3N0Ojk0NDMiCiAgICAgICAgICogfQogICAgICAgICAqCiAgICAgICAgICogYXdhaXQgYXV0aC5pbml0aWFsaXplKGNvbmZpZyk7CiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjaW5pdGlhbGl6ZQogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovfWluaXRpYWxpemUoZSl7dmFyIG4scixpO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fZGF0YUxheWVyLnNldENvbmZpZ0RhdGEoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30scCksZSkse3Njb3BlOlsuLi5udWxsIT09KG49cC5zY29wZSkmJnZvaWQgMCE9PW4/bjpbXSwuLi5udWxsIT09KGk9bnVsbD09PShyPWUuc2NvcGUpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLmZpbHRlcigoZT0+e3ZhciB0O3JldHVybiEobnVsbD09PSh0PW51bGw9PXA/dm9pZCAwOnAuc2NvcGUpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmluY2x1ZGVzKGUpKX0pKSkmJnZvaWQgMCE9PWk/aTpbXV19KSl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGBEYXRhTGF5ZXJgIG9iamVjdCB0aGF0IGFsbG93cyB5b3UgdG8gYWNjZXNzIGF1dGhlbnRpY2F0aW9uIGRhdGEuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtEYXRhTGF5ZXJ9IC0gVGhlIGBEYXRhTGF5ZXJgIG9iamVjdC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgZGF0YSA9IGF1dGguZ2V0RGF0YUxheWVyKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0RGF0YUxheWVyCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9nZXREYXRhTGF5ZXIoKXtyZXR1cm4gdGhpcy5fZGF0YUxheWVyfQovKioKICAgICAgICAgKiBUaGlzIGlzIGFuIGFzeW5jIG1ldGhvZCB0aGF0IHJldHVybnMgYSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgYXV0aG9yaXphdGlvbiBVUkwuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge0dldEF1dGhVUkxDb25maWd9IGNvbmZpZyAtIChPcHRpb25hbCkgQSBjb25maWcgb2JqZWN0IHRvIGZvcmNlIGluaXRpYWxpemF0aW9uIGFuZCBwYXNzCiAgICAgICAgICogY3VzdG9tIHBhdGggcGFyYW1ldGVycyBzdWNoIGFzIHRoZSBmaWRwIHBhcmFtZXRlci4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nPn0gLSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBhdXRob3JpemF0aW9uIFVSTC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogYXV0aC5nZXRBdXRob3JpemF0aW9uVVJMKCkudGhlbigodXJsKT0+ewogICAgICAgICAqICAvLyBjb25zb2xlLmxvZyh1cmwpOwogICAgICAgICAqIH0pLmNhdGNoKChlcnJvcik9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5lcnJvcihlcnJvcik7CiAgICAgICAgICogfSk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0QXV0aG9yaXphdGlvblVSTAogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0QXV0aG9yaXphdGlvblVSTChlLG4pe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD1PYmplY3QuYXNzaWduKHt9LGUpO3JldHVybiBudWxsPT10fHxkZWxldGUgdC5mb3JjZUluaXQsKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIikpP3RoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRBdXRob3JpemF0aW9uVVJMKHQsbik6dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldE9JRENQcm92aWRlck1ldGFEYXRhKG51bGw9PWU/dm9pZCAwOmUuZm9yY2VJbml0KS50aGVuKCgoKT0+dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldEF1dGhvcml6YXRpb25VUkwodCxuKSkpfSkpfQovKioKICAgICAgICAgKiBUaGlzIGlzIGFuIGFzeW5jIG1ldGhvZCB0aGF0IHNlbmRzIGEgcmVxdWVzdCB0byBvYnRhaW4gdGhlIGFjY2VzcyB0b2tlbiBhbmQgcmV0dXJucyBhIFByb21pc2UKICAgICAgICAgKiB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHRva2VuIGFuZCBvdGhlciByZWxldmFudCBkYXRhLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGF1dGhvcml6YXRpb25Db2RlIC0gVGhlIGF1dGhvcml6YXRpb24gY29kZS4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2Vzc2lvblN0YXRlIC0gVGhlIHNlc3Npb24gc3RhdGUuCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPFRva2VuUmVzcG9uc2U+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHRva2VuIHJlc3BvbnNlLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBhdXRoLnJlcXVlc3RBY2Nlc3NUb2tlbihhdXRoQ29kZSwgc2Vzc2lvblN0YXRlKS50aGVuKCh0b2tlbik9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5sb2codG9rZW4pOwogICAgICAgICAqIH0pLmNhdGNoKChlcnJvcik9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5lcnJvcihlcnJvcik7CiAgICAgICAgICogfSk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjcmVxdWVzdEFjY2Vzc1Rva2VuCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9yZXF1ZXN0QWNjZXNzVG9rZW4oZSxuLHIsaSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4oeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiKSk/dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnJlcXVlc3RBY2Nlc3NUb2tlbihlLG4scixpKTp0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoITEpLnRoZW4oKCgpPT50aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmVxdWVzdEFjY2Vzc1Rva2VuKGUsbixyLGkpKSl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIGNsZWFycyBhbGwgYXV0aGVudGljYXRpb24gZGF0YSBhbmQgcmV0dXJucyB0aGUgc2lnbi1vdXQgVVJMLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgc2lnbi1vdXQgVVJMLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBzaWduT3V0VXJsID0gYXdhaXQgYXV0aC5zaWduT3V0KCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjc2lnbk91dAogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovc2lnbk91dChlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuc2lnbk91dChlKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgc2lnbi1vdXQgVVJMLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiAqKlRoaXMgZG9lc24ndCBjbGVhciB0aGUgYXV0aGVudGljYXRpb24gZGF0YS4qKgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHNpZ24tb3V0IFVSTC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3Qgc2lnbk91dFVybCA9IGF3YWl0IGF1dGguZ2V0U2lnbk91dFVSTCgpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldFNpZ25PdXRVUkwKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldFNpZ25PdXRVUkwoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldFNpZ25PdXRVUkwoZSl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgT0lEQyBzZXJ2aWNlIGVuZHBvaW50cyB0aGF0IGFyZSBmZXRjaGVkIGZyb20gdGhlIGAud2VsbC1rbm93bmAgZW5kcG9pbnQuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPE9JRENFbmRwb2ludHM+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIE9JREMgc2VydmljZSBlbmRwb2ludHMuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IGVuZHBvaW50cyA9IGF3YWl0IGF1dGguZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRPSURDU2VydmljZUVuZHBvaW50cwogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgZGVjb2RlcyB0aGUgcGF5bG9hZCBvZiB0aGUgSUQgdG9rZW4gYW5kIHJldHVybnMgaXQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8RGVjb2RlZElEVG9rZW5QYXlsb2FkPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBkZWNvZGVkIElEIHRva2VuIHBheWxvYWQuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IGRlY29kZWRJZFRva2VuID0gYXdhaXQgYXV0aC5nZXREZWNvZGVkSURUb2tlbigpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldERlY29kZWRJRFRva2VuCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9nZXREZWNvZGVkSURUb2tlbihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0RGVjb2RlZElEVG9rZW4oZSl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIElEIHRva2VuLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgSUQgdG9rZW4uCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IGlkVG9rZW4gPSBhd2FpdCBhdXRoLmdldElEVG9rZW4oKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRJRFRva2VuCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9nZXRJRFRva2VuKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRJRFRva2VuKGUpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBiYXNpYyB1c2VyIGluZm9ybWF0aW9uIG9idGFpbmVkIGZyb20gdGhlIElEIHRva2VuLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPEJhc2ljVXNlckluZm8+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGJhc2ljIHVzZXIgaW5mb3JtYXRpb24uCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IHVzZXJJbmZvID0gYXdhaXQgYXV0aC5nZXRCYXNpY1VzZXJJbmZvKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0QmFzaWNVc2VySW5mbwogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0QmFzaWNVc2VySW5mbyhlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0QmFzaWNVc2VySW5mbyhlKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV2b2tlcyB0aGUgYWNjZXNzIHRva2VuLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiAqKlRoaXMgbWV0aG9kIGFsc28gY2xlYXJzIHRoZSBhdXRoZW50aWNhdGlvbiBkYXRhLioqCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPEZldGNoUmVzcG9uc2U+fSAtIEEgUHJvbWlzZSB0aGF0IHJldHVybnMgdGhlIHJlc3BvbnNlIG9mIHRoZSByZXZva2UtYWNjZXNzLXRva2VuIHJlcXVlc3QuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF1dGgucmV2b2tlQWNjZXNzVG9rZW4oKS50aGVuKChyZXNwb25zZSk9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5sb2cocmVzcG9uc2UpOwogICAgICAgICAqIH0pLmNhdGNoKChlcnJvcik9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5lcnJvcihlcnJvcik7CiAgICAgICAgICogfSk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjcmV2b2tlQWNjZXNzVG9rZW4KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL3Jldm9rZUFjY2Vzc1Rva2VuKGUpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmV2b2tlQWNjZXNzVG9rZW4oZSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJlZnJlc2hlcyB0aGUgYWNjZXNzIHRva2VuIGFuZCByZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIG5ldyBhY2Nlc3MKICAgICAgICAgKiB0b2tlbiBhbmQgb3RoZXIgcmVsZXZhbnQgZGF0YS4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxUb2tlblJlc3BvbnNlPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSB0b2tlbiByZXNwb25zZS4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogYXV0aC5yZWZyZXNoQWNjZXNzVG9rZW4oKS50aGVuKChyZXNwb25zZSk9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5sb2cocmVzcG9uc2UpOwogICAgICAgICAqIH0pLmNhdGNoKChlcnJvcik9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5lcnJvcihlcnJvcik7CiAgICAgICAgICogfSk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjcmVmcmVzaEFjY2Vzc1Rva2VuCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9yZWZyZXNoQWNjZXNzVG9rZW4oZSl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5yZWZyZXNoQWNjZXNzVG9rZW4oZSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGFjY2VzcyB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGFjY2VzcyB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBhdXRoLmdldEFjY2Vzc1Rva2VuKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0QWNjZXNzVG9rZW4KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldEFjY2Vzc1Rva2VuKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRBY2Nlc3NUb2tlbihlKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2Qgc2VuZHMgYSBjdXN0b20tZ3JhbnQgcmVxdWVzdCBhbmQgcmV0dXJucyBhIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSByZXNwb25zZQogICAgICAgICAqIGRlcGVuZGluZyBvbiB0aGUgY29uZmlnIHBhc3NlZC4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7Q3VzdG9tR3JhbnRDb25maWd9IGNvbmZpZyAtIEEgY29uZmlnIG9iamVjdCBjb250YWluaW5nIHRoZSBjdXN0b20gZ3JhbnQgY29uZmlndXJhdGlvbnMuCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPFRva2VuUmVzcG9uc2UgfCBGZXRjaFJlc3BvbnNlPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSByZXNwb25zZSBkZXBlbmRpbmcKICAgICAgICAgKiBvbiB5b3VyIGNvbmZpZ3VyYXRpb25zLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBjb25maWcgPSB7CiAgICAgICAgICogICBhdHRhY2hUb2tlbjogZmFsc2UsCiAgICAgICAgICogICBkYXRhOiB7CiAgICAgICAgICogICAgICAgY2xpZW50X2lkOiAie3tjbGllbnRJRH19IiwKICAgICAgICAgKiAgICAgICBncmFudF90eXBlOiAiYWNjb3VudF9zd2l0Y2giLAogICAgICAgICAqICAgICAgIHNjb3BlOiAie3tzY29wZX19IiwKICAgICAgICAgKiAgICAgICB0b2tlbjogInt7dG9rZW59fSIsCiAgICAgICAgICogICB9LAogICAgICAgICAqICAgaWQ6ICJhY2NvdW50LXN3aXRjaCIsCiAgICAgICAgICogICByZXR1cm5SZXNwb25zZTogdHJ1ZSwKICAgICAgICAgKiAgIHJldHVybnNTZXNzaW9uOiB0cnVlLAogICAgICAgICAqICAgc2lnbkluUmVxdWlyZWQ6IHRydWUKICAgICAgICAgKiB9CiAgICAgICAgICoKICAgICAgICAgKiBhdXRoLnJlcXVlc3RDdXN0b21HcmFudChjb25maWcpLnRoZW4oKHJlc3BvbnNlKT0+ewogICAgICAgICAqICAvLyBjb25zb2xlLmxvZyhyZXNwb25zZSk7CiAgICAgICAgICogfSkuY2F0Y2goKGVycm9yKT0+ewogICAgICAgICAqICAvLyBjb25zb2xlLmVycm9yKGVycm9yKTsKICAgICAgICAgKiB9KTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNyZXF1ZXN0Q3VzdG9tR3JhbnQKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL3JlcXVlc3RDdXN0b21HcmFudChlLHQpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmVxdWVzdEN1c3RvbUdyYW50KGUsdCl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgaWYgdGhlIHVzZXIgaXMgYXV0aGVudGljYXRlZCBvciBub3QuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8Ym9vbGVhbj59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBgdHJ1ZWAgaWYgdGhlIHVzZXIgaXMgYXV0aGVudGljYXRlZCwgYGZhbHNlYCBvdGhlcndpc2UuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF3YWl0IGF1dGguaXNBdXRoZW50aWNhdGVkKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjaXNBdXRoZW50aWNhdGVkCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9pc0F1dGhlbnRpY2F0ZWQoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmlzQXV0aGVudGljYXRlZChlKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgUEtDRSBjb2RlIGdlbmVyYXRlZCBkdXJpbmcgdGhlIGdlbmVyYXRpb24gb2YgdGhlIGF1dGhlbnRpY2F0aW9uIFVSTC4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdGF0ZSAtIFRoZSBzdGF0ZSBwYXJhbWV0ZXIgdGhhdCB3YXMgcGFzc2VkIGluIHRoZSBhdXRoZW50aWNhdGlvbiBVUkwuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgUEtDRSBjb2RlLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBwa2NlID0gYXdhaXQgZ2V0UEtDRUNvZGUoKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRQS0NFQ29kZQogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0UEtDRUNvZGUoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0UEtDRUNvZGUoZSxuKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgUEtDRSBjb2RlIHRvIHRoZSBkYXRhIHN0b3JlLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHBrY2UgLSBUaGUgUEtDRSBjb2RlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdGF0ZSAtIFRoZSBzdGF0ZSBwYXJhbWV0ZXIgdGhhdCB3YXMgcGFzc2VkIGluIHRoZSBhdXRoZW50aWNhdGlvbiBVUkwuCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF3YWl0IGF1dGguc2V0UEtDRUNvZGUoInBrY2VfY29kZSIpCiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjc2V0UEtDRUNvZGUKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL3NldFBLQ0VDb2RlKGUsbixyKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5zZXRQS0NFQ29kZShlLG4scil9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgaWYgdGhlIHNpZ24tb3V0IGlzIHN1Y2Nlc3NmdWwgb3Igbm90LgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHNpZ25PdXRSZWRpcmVjdFVybCAtIFRoZSBVUkwgdG8gd2hpY2ggdGhlIHVzZXIgaGFzIGJlZW4gcmVkaXJlY3RlZCB0byBhZnRlciBzaWduaW5nLW91dC4KICAgICAgICAgKgogICAgICAgICAqICoqVGhlIHNlcnZlciBhcHBlbmRzIHBhdGggcGFyYW1ldGVycyB0byB0aGUgYHNpZ25PdXRSZWRpcmVjdFVSTGAgYW5kIHRoZXNlIHBhdGggcGFyYW1ldGVycwogICAgICAgICAqICBhcmUgcmVxdWlyZWQgZm9yIHRoaXMgbWV0aG9kIHRvIGZ1bmN0aW9uLioqCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtib29sZWFufSAtIGB0cnVlYCBpZiBzdWNjZXNzZnVsLCBgZmFsc2VgIG90aGVyd2lzZS4KICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNpc1NpZ25PdXRTdWNjZXNzZnVsCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9zdGF0aWMgaXNTaWduT3V0U3VjY2Vzc2Z1bChlKXtjb25zdCB0PW5ldyBVUkwoZSksbj10LnNlYXJjaFBhcmFtcy5nZXQoInN0YXRlIikscj1Cb29sZWFuKHQuc2VhcmNoUGFyYW1zLmdldCgiZXJyb3IiKSk7cmV0dXJuISFuJiYic2lnbl9vdXRfc3VjY2VzcyI9PT1uJiYhcn0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBpZiB0aGUgc2lnbi1vdXQgaGFzIGZhaWxlZCBvciBub3QuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2lnbk91dFJlZGlyZWN0VXJsIC0gVGhlIFVSTCB0byB3aGljaCB0aGUgdXNlciBoYXMgYmVlbiByZWRpcmVjdGVkIHRvIGFmdGVyIHNpZ25pbmctb3V0LgogICAgICAgICAqCiAgICAgICAgICogKipUaGUgc2VydmVyIGFwcGVuZHMgcGF0aCBwYXJhbWV0ZXJzIHRvIHRoZSBgc2lnbk91dFJlZGlyZWN0VVJMYCBhbmQgdGhlc2UgcGF0aCBwYXJhbWV0ZXJzCiAgICAgICAgICogIGFyZSByZXF1aXJlZCBmb3IgdGhpcyBtZXRob2QgdG8gZnVuY3Rpb24uKioKICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IC0gYHRydWVgIGlmIHN1Y2Nlc3NmdWwsIGBmYWxzZWAgb3RoZXJ3aXNlLgogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2RpZFNpZ25PdXRGYWlsCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9zdGF0aWMgZGlkU2lnbk91dEZhaWwoZSl7Y29uc3QgdD1uZXcgVVJMKGUpLG49dC5zZWFyY2hQYXJhbXMuZ2V0KCJzdGF0ZSIpLHI9Qm9vbGVhbih0LnNlYXJjaFBhcmFtcy5nZXQoImVycm9yIikpO3JldHVybiEhbiYmInNpZ25fb3V0X3N1Y2Nlc3MiPT09biYmcn0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgdXBkYXRlcyB0aGUgY29uZmlndXJhdGlvbiB0aGF0IHdhcyBwYXNzZWQgaW50byB0aGUgY29uc3RydWN0b3Igd2hlbiBpbnN0YW50aWF0aW5nIHRoaXMgY2xhc3MuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge1BhcnRpYWw8QXV0aENsaWVudENvbmZpZzxUPj59IGNvbmZpZyAtIEEgY29uZmlnIG9iamVjdCB0byB1cGRhdGUgdGhlIFNESyBjb25maWd1cmF0aW9ucyB3aXRoLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBjb25maWcgPSB7CiAgICAgICAgICogICAgIHNpZ25JblJlZGlyZWN0VVJMOiAiaHR0cDovL2xvY2FsaG9zdDozMDAwL3NpZ24taW4iLAogICAgICAgICAqICAgICBjbGllbnRJRDogImNsaWVudCBJRCIsCiAgICAgICAgICogICAgIGJhc2VVcmw6ICJodHRwczovL2xvY2FsaG9zdDo5NDQzIgogICAgICAgICAqIH0KICAgICAgICAgKgogICAgICAgICAqIGF3YWl0IGF1dGgudXBkYXRlQ29uZmlnKGNvbmZpZyk7CiAgICAgICAgICogYGBgCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3VwZGF0ZUNvbmZpZwogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovdXBkYXRlQ29uZmlnKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnVwZGF0ZUNvbmZpZyhlKX0pKX1zdGF0aWMgY2xlYXJVc2VyU2Vzc2lvbkRhdGEoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuY2xlYXJVc2VyU2Vzc2lvbkRhdGEoZSl9KSl9fWNvbnN0IHY9ImluaXQiO3ZhciB5LG07IWZ1bmN0aW9uKGUpe2UuTG9jYWxTdG9yYWdlPSJsb2NhbFN0b3JhZ2UiLGUuU2Vzc2lvblN0b3JhZ2U9InNlc3Npb25TdG9yYWdlIixlLldlYldvcmtlcj0id2ViV29ya2VyIixlLkJyb3dzZXJNZW1vcnk9ImJyb3dzZXJNZW1vcnkifSh5fHwoeT17fSkpLGZ1bmN0aW9uKGUpe2UuU2lnbkluPSJzaWduLWluIixlLlNpZ25PdXQ9InNpZ24tb3V0IixlLkluaXRpYWxpemU9ImluaXRpYWxpemUiLGUuSHR0cFJlcXVlc3RTdGFydD0iaHR0cC1yZXF1ZXN0LXN0YXJ0IixlLkh0dHBSZXF1ZXN0RmluaXNoPSJodHRwLXJlcXVlc3QtZmluaXNoIixlLkh0dHBSZXF1ZXN0RXJyb3I9Imh0dHAtcmVxdWVzdC1lcnJvciIsZS5IdHRwUmVxdWVzdFN1Y2Nlc3M9Imh0dHAtcmVxdWVzdC1zdWNjZXNzIixlLlJldm9rZUFjY2Vzc1Rva2VuPSJyZXZva2UtYWNjZXNzLXRva2VuIixlLkN1c3RvbUdyYW50PSJjdXN0b20tZ3JhbnQiLGUuU2lnbk91dEZhaWxlZD0ic2lnbi1vdXQtZmFpbGVkIn0obXx8KG09e30pKTtjb25zdCB3PSJwcm9tcHROb25lUmVxdWVzdFNlbnQiLF89ImVycm9yIixTPSJlcnJvcl9kZXNjcmlwdGlvbiIsYj0iY3VzdG9tX2dyYW50X2NvbmZpZyIsaz0iQWNjZXNzIHRva2VuIGlzIGludmFsaWQiO3ZhciBFPSJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzoidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6e307ZnVuY3Rpb24gVChlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSwiZGVmYXVsdCIpP2UuZGVmYXVsdDplfWZ1bmN0aW9uIEEoZSl7aWYoZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSxuKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLHIuZ2V0P3I6e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGVbbl19fSl9KSksdH12YXIgUj17ZXhwb3J0czp7fX0sQz1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgbj1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCkscj0wO3I8bi5sZW5ndGg7cisrKW5bcl09YXJndW1lbnRzW3JdO3JldHVybiBlLmFwcGx5KHQsbil9fSxEPUMsUD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2Z1bmN0aW9uIEkoZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSl9ZnVuY3Rpb24gTyhlKXtyZXR1cm4gdm9pZCAwPT09ZX1mdW5jdGlvbiBVKGUpe3JldHVybiJbb2JqZWN0IEFycmF5QnVmZmVyXSI9PT1QLmNhbGwoZSl9ZnVuY3Rpb24gTChlKXtyZXR1cm4gbnVsbCE9PWUmJiJvYmplY3QiPT10eXBlb2YgZX1mdW5jdGlvbiBIKGUpe2lmKCJbb2JqZWN0IE9iamVjdF0iIT09UC5jYWxsKGUpKXJldHVybiExO3ZhciB0PU9iamVjdC5nZXRQcm90b3R5cGVPZihlKTtyZXR1cm4gbnVsbD09PXR8fHQ9PT1PYmplY3QucHJvdG90eXBlfWZ1bmN0aW9uIE0oZSl7cmV0dXJuIltvYmplY3QgRnVuY3Rpb25dIj09PVAuY2FsbChlKX1mdW5jdGlvbiBOKGUsdCl7aWYobnVsbCE9ZSlpZigib2JqZWN0IiE9dHlwZW9mIGUmJihlPVtlXSksSShlKSlmb3IodmFyIG49MCxyPWUubGVuZ3RoO248cjtuKyspdC5jYWxsKG51bGwsZVtuXSxuLGUpO2Vsc2UgZm9yKHZhciBpIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsaSkmJnQuY2FsbChudWxsLGVbaV0saSxlKX12YXIgcT17aXNBcnJheTpJLGlzQXJyYXlCdWZmZXI6VSxpc0J1ZmZlcjpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9PWUmJiFPKGUpJiZudWxsIT09ZS5jb25zdHJ1Y3RvciYmIU8oZS5jb25zdHJ1Y3RvcikmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLmNvbnN0cnVjdG9yLmlzQnVmZmVyJiZlLmNvbnN0cnVjdG9yLmlzQnVmZmVyKGUpfSxpc0Zvcm1EYXRhOmZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEZvcm1EYXRhXSI9PT1QLmNhbGwoZSl9LGlzQXJyYXlCdWZmZXJWaWV3OmZ1bmN0aW9uKGUpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJkFycmF5QnVmZmVyLmlzVmlldz9BcnJheUJ1ZmZlci5pc1ZpZXcoZSk6ZSYmZS5idWZmZXImJlUoZS5idWZmZXIpfSxpc1N0cmluZzpmdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGV9LGlzTnVtYmVyOmZ1bmN0aW9uKGUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgZX0saXNPYmplY3Q6TCxpc1BsYWluT2JqZWN0OkgsaXNVbmRlZmluZWQ6Tyxpc0RhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgRGF0ZV0iPT09UC5jYWxsKGUpfSxpc0ZpbGU6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgRmlsZV0iPT09UC5jYWxsKGUpfSxpc0Jsb2I6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgQmxvYl0iPT09UC5jYWxsKGUpfSxpc0Z1bmN0aW9uOk0saXNTdHJlYW06ZnVuY3Rpb24oZSl7cmV0dXJuIEwoZSkmJk0oZS5waXBlKX0saXNVUkxTZWFyY2hQYXJhbXM6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgVVJMU2VhcmNoUGFyYW1zXSI9PT1QLmNhbGwoZSl9LGlzU3RhbmRhcmRCcm93c2VyRW52OmZ1bmN0aW9uKCl7cmV0dXJuKCJ1bmRlZmluZWQiPT10eXBlb2YgbmF2aWdhdG9yfHwiUmVhY3ROYXRpdmUiIT09bmF2aWdhdG9yLnByb2R1Y3QmJiJOYXRpdmVTY3JpcHQiIT09bmF2aWdhdG9yLnByb2R1Y3QmJiJOUyIhPT1uYXZpZ2F0b3IucHJvZHVjdCkmJigidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmInVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudCl9LGZvckVhY2g6TixtZXJnZTpmdW5jdGlvbiBlKCl7dmFyIHQ9e307ZnVuY3Rpb24gbihuLHIpe0godFtyXSkmJkgobik/dFtyXT1lKHRbcl0sbik6SChuKT90W3JdPWUoe30sbik6SShuKT90W3JdPW4uc2xpY2UoKTp0W3JdPW59Zm9yKHZhciByPTAsaT1hcmd1bWVudHMubGVuZ3RoO3I8aTtyKyspTihhcmd1bWVudHNbcl0sbik7cmV0dXJuIHR9LGV4dGVuZDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIE4odCwoZnVuY3Rpb24odCxyKXtlW3JdPW4mJiJmdW5jdGlvbiI9PXR5cGVvZiB0P0QodCxuKTp0fSkpLGV9LHRyaW06ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpbT9lLnRyaW0oKTplLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX0sc3RyaXBCT006ZnVuY3Rpb24oZSl7cmV0dXJuIDY1Mjc5PT09ZS5jaGFyQ29kZUF0KDApJiYoZT1lLnNsaWNlKDEpKSxlfX0saj1xO2Z1bmN0aW9uIHgoZSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChlKS5yZXBsYWNlKC8lM0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjQvZywiJCIpLnJlcGxhY2UoLyUyQy9naSwiLCIpLnJlcGxhY2UoLyUyMC9nLCIrIikucmVwbGFjZSgvJTVCL2dpLCJbIikucmVwbGFjZSgvJTVEL2dpLCJdIil9dmFyIEs9ZnVuY3Rpb24oZSx0LG4pe2lmKCF0KXJldHVybiBlO3ZhciByO2lmKG4pcj1uKHQpO2Vsc2UgaWYoai5pc1VSTFNlYXJjaFBhcmFtcyh0KSlyPXQudG9TdHJpbmcoKTtlbHNle3ZhciBpPVtdO2ouZm9yRWFjaCh0LChmdW5jdGlvbihlLHQpe251bGwhPWUmJihqLmlzQXJyYXkoZSk/dCs9IltdIjplPVtlXSxqLmZvckVhY2goZSwoZnVuY3Rpb24oZSl7ai5pc0RhdGUoZSk/ZT1lLnRvSVNPU3RyaW5nKCk6ai5pc09iamVjdChlKSYmKGU9SlNPTi5zdHJpbmdpZnkoZSkpLGkucHVzaCh4KHQpKyI9Iit4KGUpKX0pKSl9KSkscj1pLmpvaW4oIiYiKX1pZihyKXt2YXIgbz1lLmluZGV4T2YoIiMiKTstMSE9PW8mJihlPWUuc2xpY2UoMCxvKSksZSs9KC0xPT09ZS5pbmRleE9mKCI/Iik/Ij8iOiImIikrcn1yZXR1cm4gZX0sSj1xO2Z1bmN0aW9uIEIoKXt0aGlzLmhhbmRsZXJzPVtdfUIucHJvdG90eXBlLnVzZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMuaGFuZGxlcnMucHVzaCh7ZnVsZmlsbGVkOmUscmVqZWN0ZWQ6dCxzeW5jaHJvbm91czohIW4mJm4uc3luY2hyb25vdXMscnVuV2hlbjpuP24ucnVuV2hlbjpudWxsfSksdGhpcy5oYW5kbGVycy5sZW5ndGgtMX0sQi5wcm90b3R5cGUuZWplY3Q9ZnVuY3Rpb24oZSl7dGhpcy5oYW5kbGVyc1tlXSYmKHRoaXMuaGFuZGxlcnNbZV09bnVsbCl9LEIucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oZSl7Si5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsKGZ1bmN0aW9uKHQpe251bGwhPT10JiZlKHQpfSkpfTt2YXIgRj1CLFc9InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fTtmdW5jdGlvbiAkKCl7dGhyb3cgbmV3IEVycm9yKCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24geigpe3Rocm93IG5ldyBFcnJvcigiY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9dmFyIFY9JCxZPXo7ZnVuY3Rpb24gRyhlKXtpZihWPT09c2V0VGltZW91dClyZXR1cm4gc2V0VGltZW91dChlLDApO2lmKChWPT09JHx8IVYpJiZzZXRUaW1lb3V0KXJldHVybiBWPXNldFRpbWVvdXQsc2V0VGltZW91dChlLDApO3RyeXtyZXR1cm4gVihlLDApfWNhdGNoKHQpe3RyeXtyZXR1cm4gVi5jYWxsKG51bGwsZSwwKX1jYXRjaCh0KXtyZXR1cm4gVi5jYWxsKHRoaXMsZSwwKX19fSJmdW5jdGlvbiI9PXR5cGVvZiBXLnNldFRpbWVvdXQmJihWPXNldFRpbWVvdXQpLCJmdW5jdGlvbiI9PXR5cGVvZiBXLmNsZWFyVGltZW91dCYmKFk9Y2xlYXJUaW1lb3V0KTt2YXIgWCxaPVtdLFE9ITEsZWU9LTE7ZnVuY3Rpb24gdGUoKXtRJiZYJiYoUT0hMSxYLmxlbmd0aD9aPVguY29uY2F0KFopOmVlPS0xLFoubGVuZ3RoJiZuZSgpKX1mdW5jdGlvbiBuZSgpe2lmKCFRKXt2YXIgZT1HKHRlKTtRPSEwO2Zvcih2YXIgdD1aLmxlbmd0aDt0Oyl7Zm9yKFg9WixaPVtdOysrZWU8dDspWCYmWFtlZV0ucnVuKCk7ZWU9LTEsdD1aLmxlbmd0aH1YPW51bGwsUT0hMSxmdW5jdGlvbihlKXtpZihZPT09Y2xlYXJUaW1lb3V0KXJldHVybiBjbGVhclRpbWVvdXQoZSk7aWYoKFk9PT16fHwhWSkmJmNsZWFyVGltZW91dClyZXR1cm4gWT1jbGVhclRpbWVvdXQsY2xlYXJUaW1lb3V0KGUpO3RyeXtZKGUpfWNhdGNoKHQpe3RyeXtyZXR1cm4gWS5jYWxsKG51bGwsZSl9Y2F0Y2godCl7cmV0dXJuIFkuY2FsbCh0aGlzLGUpfX19KGUpfX1mdW5jdGlvbiByZShlLHQpe3RoaXMuZnVuPWUsdGhpcy5hcnJheT10fXJlLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt0aGlzLmZ1bi5hcHBseShudWxsLHRoaXMuYXJyYXkpfTtmdW5jdGlvbiBpZSgpe312YXIgb2U9aWUsc2U9aWUsYWU9aWUsY2U9aWUsdWU9aWUsbGU9aWUsZGU9aWU7dmFyIGhlPVcucGVyZm9ybWFuY2V8fHt9LGZlPWhlLm5vd3x8aGUubW96Tm93fHxoZS5tc05vd3x8aGUub05vd3x8aGUud2Via2l0Tm93fHxmdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZSkuZ2V0VGltZSgpfTt2YXIgcGU9bmV3IERhdGU7dmFyIGdlPXtuZXh0VGljazpmdW5jdGlvbihlKXt2YXIgdD1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aC0xKTtpZihhcmd1bWVudHMubGVuZ3RoPjEpZm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0W24tMV09YXJndW1lbnRzW25dO1oucHVzaChuZXcgcmUoZSx0KSksMSE9PVoubGVuZ3RofHxRfHxHKG5lKX0sdGl0bGU6ImJyb3dzZXIiLGJyb3dzZXI6ITAsZW52Ont9LGFyZ3Y6W10sdmVyc2lvbjoiIix2ZXJzaW9uczp7fSxvbjpvZSxhZGRMaXN0ZW5lcjpzZSxvbmNlOmFlLG9mZjpjZSxyZW1vdmVMaXN0ZW5lcjp1ZSxyZW1vdmVBbGxMaXN0ZW5lcnM6bGUsZW1pdDpkZSxiaW5kaW5nOmZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQiKX0sY3dkOmZ1bmN0aW9uKCl7cmV0dXJuIi8ifSxjaGRpcjpmdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCIpfSx1bWFzazpmdW5jdGlvbigpe3JldHVybiAwfSxocnRpbWU6ZnVuY3Rpb24oZSl7dmFyIHQ9LjAwMSpmZS5jYWxsKGhlKSxuPU1hdGguZmxvb3IodCkscj1NYXRoLmZsb29yKHQlMSoxZTkpO3JldHVybiBlJiYobi09ZVswXSwoci09ZVsxXSk8MCYmKG4tLSxyKz0xZTkpKSxbbixyXX0scGxhdGZvcm06ImJyb3dzZXIiLHJlbGVhc2U6e30sY29uZmlnOnt9LHVwdGltZTpmdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZS1wZSkvMWUzfX0sdmU9Z2UseWU9cSxtZT1mdW5jdGlvbihlLHQsbixyLGkpe3JldHVybiBlLmNvbmZpZz10LG4mJihlLmNvZGU9biksZS5yZXF1ZXN0PXIsZS5yZXNwb25zZT1pLGUuaXNBeGlvc0Vycm9yPSEwLGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue21lc3NhZ2U6dGhpcy5tZXNzYWdlLG5hbWU6dGhpcy5uYW1lLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sbnVtYmVyOnRoaXMubnVtYmVyLGZpbGVOYW1lOnRoaXMuZmlsZU5hbWUsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uTnVtYmVyOnRoaXMuY29sdW1uTnVtYmVyLHN0YWNrOnRoaXMuc3RhY2ssY29uZmlnOnRoaXMuY29uZmlnLGNvZGU6dGhpcy5jb2RlLHN0YXR1czp0aGlzLnJlc3BvbnNlJiZ0aGlzLnJlc3BvbnNlLnN0YXR1cz90aGlzLnJlc3BvbnNlLnN0YXR1czpudWxsfX0sZX0sd2U9e3NpbGVudEpTT05QYXJzaW5nOiEwLGZvcmNlZEpTT05QYXJzaW5nOiEwLGNsYXJpZnlUaW1lb3V0RXJyb3I6ITF9LF9lPW1lLFNlPWZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG89bmV3IEVycm9yKGUpO3JldHVybiBfZShvLHQsbixyLGkpfSxiZT1TZSxrZT1xLEVlPWtlLmlzU3RhbmRhcmRCcm93c2VyRW52KCk/e3dyaXRlOmZ1bmN0aW9uKGUsdCxuLHIsaSxvKXt2YXIgcz1bXTtzLnB1c2goZSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KHQpKSxrZS5pc051bWJlcihuKSYmcy5wdXNoKCJleHBpcmVzPSIrbmV3IERhdGUobikudG9HTVRTdHJpbmcoKSksa2UuaXNTdHJpbmcocikmJnMucHVzaCgicGF0aD0iK3IpLGtlLmlzU3RyaW5nKGkpJiZzLnB1c2goImRvbWFpbj0iK2kpLCEwPT09byYmcy5wdXNoKCJzZWN1cmUiKSxkb2N1bWVudC5jb29raWU9cy5qb2luKCI7ICIpfSxyZWFkOmZ1bmN0aW9uKGUpe3ZhciB0PWRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCIoXnw7XFxzKikoIitlKyIpPShbXjtdKikiKSk7cmV0dXJuIHQ/ZGVjb2RlVVJJQ29tcG9uZW50KHRbM10pOm51bGx9LHJlbW92ZTpmdW5jdGlvbihlKXt0aGlzLndyaXRlKGUsIiIsRGF0ZS5ub3coKS04NjRlNSl9fTp7d3JpdGU6ZnVuY3Rpb24oKXt9LHJlYWQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0scmVtb3ZlOmZ1bmN0aW9uKCl7fX0sVGU9ZnVuY3Rpb24oZSl7cmV0dXJuL14oW2Etel1bYS16XGQrXC0uXSo6KT9cL1wvL2kudGVzdChlKX0sQWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD9lLnJlcGxhY2UoL1wvKyQvLCIiKSsiLyIrdC5yZXBsYWNlKC9eXC8rLywiIik6ZX0sUmU9cSxDZT1bImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdLERlPXEsUGU9RGUuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKT9mdW5jdGlvbigpe3ZhciBlLHQ9Lyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtmdW5jdGlvbiByKGUpe3ZhciByPWU7cmV0dXJuIHQmJihuLnNldEF0dHJpYnV0ZSgiaHJlZiIscikscj1uLmhyZWYpLG4uc2V0QXR0cmlidXRlKCJocmVmIixyKSx7aHJlZjpuLmhyZWYscHJvdG9jb2w6bi5wcm90b2NvbD9uLnByb3RvY29sLnJlcGxhY2UoLzokLywiIik6IiIsaG9zdDpuLmhvc3Qsc2VhcmNoOm4uc2VhcmNoP24uc2VhcmNoLnJlcGxhY2UoL15cPy8sIiIpOiIiLGhhc2g6bi5oYXNoP24uaGFzaC5yZXBsYWNlKC9eIy8sIiIpOiIiLGhvc3RuYW1lOm4uaG9zdG5hbWUscG9ydDpuLnBvcnQscGF0aG5hbWU6Ii8iPT09bi5wYXRobmFtZS5jaGFyQXQoMCk/bi5wYXRobmFtZToiLyIrbi5wYXRobmFtZX19cmV0dXJuIGU9cih3aW5kb3cubG9jYXRpb24uaHJlZiksZnVuY3Rpb24odCl7dmFyIG49RGUuaXNTdHJpbmcodCk/cih0KTp0O3JldHVybiBuLnByb3RvY29sPT09ZS5wcm90b2NvbCYmbi5ob3N0PT09ZS5ob3N0fX0oKTpmdW5jdGlvbigpe3JldHVybiEwfTtmdW5jdGlvbiBJZShlKXt0aGlzLm1lc3NhZ2U9ZX1JZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iQ2FuY2VsIisodGhpcy5tZXNzYWdlPyI6ICIrdGhpcy5tZXNzYWdlOiIiKX0sSWUucHJvdG90eXBlLl9fQ0FOQ0VMX189ITA7dmFyIE9lPUllLFVlPXEsTGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4uY29uZmlnLnZhbGlkYXRlU3RhdHVzO24uc3RhdHVzJiZyJiYhcihuLnN0YXR1cyk/dChiZSgiUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAiK24uc3RhdHVzLG4uY29uZmlnLG51bGwsbi5yZXF1ZXN0LG4pKTplKG4pfSxIZT1FZSxNZT1LLE5lPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJiFUZSh0KT9BZShlLHQpOnR9LHFlPWZ1bmN0aW9uKGUpe3ZhciB0LG4scixpPXt9O3JldHVybiBlPyhSZS5mb3JFYWNoKGUuc3BsaXQoIlxuIiksKGZ1bmN0aW9uKGUpe2lmKHI9ZS5pbmRleE9mKCI6IiksdD1SZS50cmltKGUuc3Vic3RyKDAscikpLnRvTG93ZXJDYXNlKCksbj1SZS50cmltKGUuc3Vic3RyKHIrMSkpLHQpe2lmKGlbdF0mJkNlLmluZGV4T2YodCk+PTApcmV0dXJuO2lbdF09InNldC1jb29raWUiPT09dD8oaVt0XT9pW3RdOltdKS5jb25jYXQoW25dKTppW3RdP2lbdF0rIiwgIituOm59fSkpLGkpOml9LGplPVBlLHhlPVNlLEtlPXdlLEplPU9lLEJlPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24odCxuKXt2YXIgcixpPWUuZGF0YSxvPWUuaGVhZGVycyxzPWUucmVzcG9uc2VUeXBlO2Z1bmN0aW9uIGEoKXtlLmNhbmNlbFRva2VuJiZlLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKHIpLGUuc2lnbmFsJiZlLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIscil9VWUuaXNGb3JtRGF0YShpKSYmZGVsZXRlIG9bIkNvbnRlbnQtVHlwZSJdO3ZhciBjPW5ldyBYTUxIdHRwUmVxdWVzdDtpZihlLmF1dGgpe3ZhciB1PWUuYXV0aC51c2VybmFtZXx8IiIsbD1lLmF1dGgucGFzc3dvcmQ/dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGUuYXV0aC5wYXNzd29yZCkpOiIiO28uQXV0aG9yaXphdGlvbj0iQmFzaWMgIitidG9hKHUrIjoiK2wpfXZhciBkPU5lKGUuYmFzZVVSTCxlLnVybCk7ZnVuY3Rpb24gaCgpe2lmKGMpe3ZhciByPSJnZXRBbGxSZXNwb25zZUhlYWRlcnMiaW4gYz9xZShjLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKTpudWxsLGk9e2RhdGE6cyYmInRleHQiIT09cyYmImpzb24iIT09cz9jLnJlc3BvbnNlOmMucmVzcG9uc2VUZXh0LHN0YXR1czpjLnN0YXR1cyxzdGF0dXNUZXh0OmMuc3RhdHVzVGV4dCxoZWFkZXJzOnIsY29uZmlnOmUscmVxdWVzdDpjfTtMZSgoZnVuY3Rpb24oZSl7dChlKSxhKCl9KSwoZnVuY3Rpb24oZSl7bihlKSxhKCl9KSxpKSxjPW51bGx9fWlmKGMub3BlbihlLm1ldGhvZC50b1VwcGVyQ2FzZSgpLE1lKGQsZS5wYXJhbXMsZS5wYXJhbXNTZXJpYWxpemVyKSwhMCksYy50aW1lb3V0PWUudGltZW91dCwib25sb2FkZW5kImluIGM/Yy5vbmxvYWRlbmQ9aDpjLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe2MmJjQ9PT1jLnJlYWR5U3RhdGUmJigwIT09Yy5zdGF0dXN8fGMucmVzcG9uc2VVUkwmJjA9PT1jLnJlc3BvbnNlVVJMLmluZGV4T2YoImZpbGU6IikpJiZzZXRUaW1lb3V0KGgpfSxjLm9uYWJvcnQ9ZnVuY3Rpb24oKXtjJiYobih4ZSgiUmVxdWVzdCBhYm9ydGVkIixlLCJFQ09OTkFCT1JURUQiLGMpKSxjPW51bGwpfSxjLm9uZXJyb3I9ZnVuY3Rpb24oKXtuKHhlKCJOZXR3b3JrIEVycm9yIixlLG51bGwsYykpLGM9bnVsbH0sYy5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXt2YXIgdD1lLnRpbWVvdXQ/InRpbWVvdXQgb2YgIitlLnRpbWVvdXQrIm1zIGV4Y2VlZGVkIjoidGltZW91dCBleGNlZWRlZCIscj1lLnRyYW5zaXRpb25hbHx8S2U7ZS50aW1lb3V0RXJyb3JNZXNzYWdlJiYodD1lLnRpbWVvdXRFcnJvck1lc3NhZ2UpLG4oeGUodCxlLHIuY2xhcmlmeVRpbWVvdXRFcnJvcj8iRVRJTUVET1VUIjoiRUNPTk5BQk9SVEVEIixjKSksYz1udWxsfSxVZS5pc1N0YW5kYXJkQnJvd3NlckVudigpKXt2YXIgZj0oZS53aXRoQ3JlZGVudGlhbHN8fGplKGQpKSYmZS54c3JmQ29va2llTmFtZT9IZS5yZWFkKGUueHNyZkNvb2tpZU5hbWUpOnZvaWQgMDtmJiYob1tlLnhzcmZIZWFkZXJOYW1lXT1mKX0ic2V0UmVxdWVzdEhlYWRlciJpbiBjJiZVZS5mb3JFYWNoKG8sKGZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09aSYmImNvbnRlbnQtdHlwZSI9PT10LnRvTG93ZXJDYXNlKCk/ZGVsZXRlIG9bdF06Yy5zZXRSZXF1ZXN0SGVhZGVyKHQsZSl9KSksVWUuaXNVbmRlZmluZWQoZS53aXRoQ3JlZGVudGlhbHMpfHwoYy53aXRoQ3JlZGVudGlhbHM9ISFlLndpdGhDcmVkZW50aWFscykscyYmImpzb24iIT09cyYmKGMucmVzcG9uc2VUeXBlPWUucmVzcG9uc2VUeXBlKSwiZnVuY3Rpb24iPT10eXBlb2YgZS5vbkRvd25sb2FkUHJvZ3Jlc3MmJmMuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGUub25Eb3dubG9hZFByb2dyZXNzKSwiZnVuY3Rpb24iPT10eXBlb2YgZS5vblVwbG9hZFByb2dyZXNzJiZjLnVwbG9hZCYmYy51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGUub25VcGxvYWRQcm9ncmVzcyksKGUuY2FuY2VsVG9rZW58fGUuc2lnbmFsKSYmKHI9ZnVuY3Rpb24oZSl7YyYmKG4oIWV8fGUmJmUudHlwZT9uZXcgSmUoImNhbmNlbGVkIik6ZSksYy5hYm9ydCgpLGM9bnVsbCl9LGUuY2FuY2VsVG9rZW4mJmUuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKHIpLGUuc2lnbmFsJiYoZS5zaWduYWwuYWJvcnRlZD9yKCk6ZS5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHIpKSksaXx8KGk9bnVsbCksYy5zZW5kKGkpfSkpfSxGZT1xLFdlPWZ1bmN0aW9uKGUsdCl7eWUuZm9yRWFjaChlLChmdW5jdGlvbihuLHIpe3IhPT10JiZyLnRvVXBwZXJDYXNlKCk9PT10LnRvVXBwZXJDYXNlKCkmJihlW3RdPW4sZGVsZXRlIGVbcl0pfSkpfSwkZT1tZSx6ZT17IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCJ9O2Z1bmN0aW9uIFZlKGUsdCl7IUZlLmlzVW5kZWZpbmVkKGUpJiZGZS5pc1VuZGVmaW5lZChlWyJDb250ZW50LVR5cGUiXSkmJihlWyJDb250ZW50LVR5cGUiXT10KX12YXIgWWUsR2U9e3RyYW5zaXRpb25hbDp3ZSxhZGFwdGVyOigoInVuZGVmaW5lZCIhPXR5cGVvZiBYTUxIdHRwUmVxdWVzdHx8dm9pZCAwIT09dmUmJiJbb2JqZWN0IHByb2Nlc3NdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2ZSkpJiYoWWU9QmUpLFllKSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbihlLHQpe3JldHVybiBXZSh0LCJBY2NlcHQiKSxXZSh0LCJDb250ZW50LVR5cGUiKSxGZS5pc0Zvcm1EYXRhKGUpfHxGZS5pc0FycmF5QnVmZmVyKGUpfHxGZS5pc0J1ZmZlcihlKXx8RmUuaXNTdHJlYW0oZSl8fEZlLmlzRmlsZShlKXx8RmUuaXNCbG9iKGUpP2U6RmUuaXNBcnJheUJ1ZmZlclZpZXcoZSk/ZS5idWZmZXI6RmUuaXNVUkxTZWFyY2hQYXJhbXMoZSk/KFZlKHQsImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04IiksZS50b1N0cmluZygpKTpGZS5pc09iamVjdChlKXx8dCYmImFwcGxpY2F0aW9uL2pzb24iPT09dFsiQ29udGVudC1UeXBlIl0/KFZlKHQsImFwcGxpY2F0aW9uL2pzb24iKSxmdW5jdGlvbihlLHQsbil7aWYoRmUuaXNTdHJpbmcoZSkpdHJ5e3JldHVybih0fHxKU09OLnBhcnNlKShlKSxGZS50cmltKGUpfWNhdGNoKGUpe2lmKCJTeW50YXhFcnJvciIhPT1lLm5hbWUpdGhyb3cgZX1yZXR1cm4obnx8SlNPTi5zdHJpbmdpZnkpKGUpfShlKSk6ZX1dLHRyYW5zZm9ybVJlc3BvbnNlOltmdW5jdGlvbihlKXt2YXIgdD10aGlzLnRyYW5zaXRpb25hbHx8R2UudHJhbnNpdGlvbmFsLG49dCYmdC5zaWxlbnRKU09OUGFyc2luZyxyPXQmJnQuZm9yY2VkSlNPTlBhcnNpbmcsaT0hbiYmImpzb24iPT09dGhpcy5yZXNwb25zZVR5cGU7aWYoaXx8ciYmRmUuaXNTdHJpbmcoZSkmJmUubGVuZ3RoKXRyeXtyZXR1cm4gSlNPTi5wYXJzZShlKX1jYXRjaChlKXtpZihpKXtpZigiU3ludGF4RXJyb3IiPT09ZS5uYW1lKXRocm93ICRlKGUsdGhpcywiRV9KU09OX1BBUlNFIik7dGhyb3cgZX19cmV0dXJuIGV9XSx0aW1lb3V0OjAseHNyZkNvb2tpZU5hbWU6IlhTUkYtVE9LRU4iLHhzcmZIZWFkZXJOYW1lOiJYLVhTUkYtVE9LRU4iLG1heENvbnRlbnRMZW5ndGg6LTEsbWF4Qm9keUxlbmd0aDotMSx2YWxpZGF0ZVN0YXR1czpmdW5jdGlvbihlKXtyZXR1cm4gZT49MjAwJiZlPDMwMH0saGVhZGVyczp7Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiJ9fX07RmUuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiXSwoZnVuY3Rpb24oZSl7R2UuaGVhZGVyc1tlXT17fX0pKSxGZS5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sKGZ1bmN0aW9uKGUpe0dlLmhlYWRlcnNbZV09RmUubWVyZ2UoemUpfSkpO3ZhciBYZT1HZSxaZT1xLFFlPVhlLGV0PWZ1bmN0aW9uKGUpe3JldHVybiEoIWV8fCFlLl9fQ0FOQ0VMX18pfSx0dD1xLG50PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzfHxRZTtyZXR1cm4gWmUuZm9yRWFjaChuLChmdW5jdGlvbihuKXtlPW4uY2FsbChyLGUsdCl9KSksZX0scnQ9ZXQsaXQ9WGUsb3Q9T2U7ZnVuY3Rpb24gc3QoZSl7aWYoZS5jYW5jZWxUb2tlbiYmZS5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCksZS5zaWduYWwmJmUuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IG90KCJjYW5jZWxlZCIpfXZhciBhdD1xLGN0PWZ1bmN0aW9uKGUsdCl7dD10fHx7fTt2YXIgbj17fTtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIGF0LmlzUGxhaW5PYmplY3QoZSkmJmF0LmlzUGxhaW5PYmplY3QodCk/YXQubWVyZ2UoZSx0KTphdC5pc1BsYWluT2JqZWN0KHQpP2F0Lm1lcmdlKHt9LHQpOmF0LmlzQXJyYXkodCk/dC5zbGljZSgpOnR9ZnVuY3Rpb24gaShuKXtyZXR1cm4gYXQuaXNVbmRlZmluZWQodFtuXSk/YXQuaXNVbmRlZmluZWQoZVtuXSk/dm9pZCAwOnIodm9pZCAwLGVbbl0pOnIoZVtuXSx0W25dKX1mdW5jdGlvbiBvKGUpe2lmKCFhdC5pc1VuZGVmaW5lZCh0W2VdKSlyZXR1cm4gcih2b2lkIDAsdFtlXSl9ZnVuY3Rpb24gcyhuKXtyZXR1cm4gYXQuaXNVbmRlZmluZWQodFtuXSk/YXQuaXNVbmRlZmluZWQoZVtuXSk/dm9pZCAwOnIodm9pZCAwLGVbbl0pOnIodm9pZCAwLHRbbl0pfWZ1bmN0aW9uIGEobil7cmV0dXJuIG4gaW4gdD9yKGVbbl0sdFtuXSk6biBpbiBlP3Iodm9pZCAwLGVbbl0pOnZvaWQgMH12YXIgYz17dXJsOm8sbWV0aG9kOm8sZGF0YTpvLGJhc2VVUkw6cyx0cmFuc2Zvcm1SZXF1ZXN0OnMsdHJhbnNmb3JtUmVzcG9uc2U6cyxwYXJhbXNTZXJpYWxpemVyOnMsdGltZW91dDpzLHRpbWVvdXRNZXNzYWdlOnMsd2l0aENyZWRlbnRpYWxzOnMsYWRhcHRlcjpzLHJlc3BvbnNlVHlwZTpzLHhzcmZDb29raWVOYW1lOnMseHNyZkhlYWRlck5hbWU6cyxvblVwbG9hZFByb2dyZXNzOnMsb25Eb3dubG9hZFByb2dyZXNzOnMsZGVjb21wcmVzczpzLG1heENvbnRlbnRMZW5ndGg6cyxtYXhCb2R5TGVuZ3RoOnMsdHJhbnNwb3J0OnMsaHR0cEFnZW50OnMsaHR0cHNBZ2VudDpzLGNhbmNlbFRva2VuOnMsc29ja2V0UGF0aDpzLHJlc3BvbnNlRW5jb2Rpbmc6cyx2YWxpZGF0ZVN0YXR1czphfTtyZXR1cm4gYXQuZm9yRWFjaChPYmplY3Qua2V5cyhlKS5jb25jYXQoT2JqZWN0LmtleXModCkpLChmdW5jdGlvbihlKXt2YXIgdD1jW2VdfHxpLHI9dChlKTthdC5pc1VuZGVmaW5lZChyKSYmdCE9PWF8fChuW2VdPXIpfSkpLG59LHV0PSIwLjI2LjEiLGx0PXV0LGR0PXt9O1sib2JqZWN0IiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwic3RyaW5nIiwic3ltYm9sIl0uZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXtkdFtlXT1mdW5jdGlvbihuKXtyZXR1cm4gdHlwZW9mIG49PT1lfHwiYSIrKHQ8MT8ibiAiOiIgIikrZX19KSk7dmFyIGh0PXt9O2R0LnRyYW5zaXRpb25hbD1mdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQpe3JldHVybiJbQXhpb3MgdiIrbHQrIl0gVHJhbnNpdGlvbmFsIG9wdGlvbiAnIitlKyInIit0KyhuPyIuICIrbjoiIil9cmV0dXJuIGZ1bmN0aW9uKG4saSxvKXtpZighMT09PWUpdGhyb3cgbmV3IEVycm9yKHIoaSwiIGhhcyBiZWVuIHJlbW92ZWQiKyh0PyIgaW4gIit0OiIiKSkpO3JldHVybiB0JiYhaHRbaV0mJihodFtpXT0hMCxjb25zb2xlLndhcm4ocihpLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2Iit0KyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkpLCFlfHxlKG4saSxvKX19O3ZhciBmdD17YXNzZXJ0T3B0aW9uczpmdW5jdGlvbihlLHQsbil7aWYoIm9iamVjdCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIm9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QiKTtmb3IodmFyIHI9T2JqZWN0LmtleXMoZSksaT1yLmxlbmd0aDtpLS0gPjA7KXt2YXIgbz1yW2ldLHM9dFtvXTtpZihzKXt2YXIgYT1lW29dLGM9dm9pZCAwPT09YXx8cyhhLG8sZSk7aWYoITAhPT1jKXRocm93IG5ldyBUeXBlRXJyb3IoIm9wdGlvbiAiK28rIiBtdXN0IGJlICIrYyl9ZWxzZSBpZighMCE9PW4pdGhyb3cgRXJyb3IoIlVua25vd24gb3B0aW9uICIrbyl9fSx2YWxpZGF0b3JzOmR0fSxwdD1xLGd0PUssdnQ9Rix5dD1mdW5jdGlvbihlKXtyZXR1cm4gc3QoZSksZS5oZWFkZXJzPWUuaGVhZGVyc3x8e30sZS5kYXRhPW50LmNhbGwoZSxlLmRhdGEsZS5oZWFkZXJzLGUudHJhbnNmb3JtUmVxdWVzdCksZS5oZWFkZXJzPXR0Lm1lcmdlKGUuaGVhZGVycy5jb21tb258fHt9LGUuaGVhZGVyc1tlLm1ldGhvZF18fHt9LGUuaGVhZGVycyksdHQuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSwoZnVuY3Rpb24odCl7ZGVsZXRlIGUuaGVhZGVyc1t0XX0pKSwoZS5hZGFwdGVyfHxpdC5hZGFwdGVyKShlKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gc3QoZSksdC5kYXRhPW50LmNhbGwoZSx0LmRhdGEsdC5oZWFkZXJzLGUudHJhbnNmb3JtUmVzcG9uc2UpLHR9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHJ0KHQpfHwoc3QoZSksdCYmdC5yZXNwb25zZSYmKHQucmVzcG9uc2UuZGF0YT1udC5jYWxsKGUsdC5yZXNwb25zZS5kYXRhLHQucmVzcG9uc2UuaGVhZGVycyxlLnRyYW5zZm9ybVJlc3BvbnNlKSkpLFByb21pc2UucmVqZWN0KHQpfSkpfSxtdD1jdCx3dD1mdCxfdD13dC52YWxpZGF0b3JzO2Z1bmN0aW9uIFN0KGUpe3RoaXMuZGVmYXVsdHM9ZSx0aGlzLmludGVyY2VwdG9ycz17cmVxdWVzdDpuZXcgdnQscmVzcG9uc2U6bmV3IHZ0fX1TdC5wcm90b3R5cGUucmVxdWVzdD1mdW5jdGlvbihlLHQpeyJzdHJpbmciPT10eXBlb2YgZT8odD10fHx7fSkudXJsPWU6dD1lfHx7fSwodD1tdCh0aGlzLmRlZmF1bHRzLHQpKS5tZXRob2Q/dC5tZXRob2Q9dC5tZXRob2QudG9Mb3dlckNhc2UoKTp0aGlzLmRlZmF1bHRzLm1ldGhvZD90Lm1ldGhvZD10aGlzLmRlZmF1bHRzLm1ldGhvZC50b0xvd2VyQ2FzZSgpOnQubWV0aG9kPSJnZXQiO3ZhciBuPXQudHJhbnNpdGlvbmFsO3ZvaWQgMCE9PW4mJnd0LmFzc2VydE9wdGlvbnMobix7c2lsZW50SlNPTlBhcnNpbmc6X3QudHJhbnNpdGlvbmFsKF90LmJvb2xlYW4pLGZvcmNlZEpTT05QYXJzaW5nOl90LnRyYW5zaXRpb25hbChfdC5ib29sZWFuKSxjbGFyaWZ5VGltZW91dEVycm9yOl90LnRyYW5zaXRpb25hbChfdC5ib29sZWFuKX0sITEpO3ZhciByPVtdLGk9ITA7dGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKChmdW5jdGlvbihlKXsiZnVuY3Rpb24iPT10eXBlb2YgZS5ydW5XaGVuJiYhMT09PWUucnVuV2hlbih0KXx8KGk9aSYmZS5zeW5jaHJvbm91cyxyLnVuc2hpZnQoZS5mdWxmaWxsZWQsZS5yZWplY3RlZCkpfSkpO3ZhciBvLHM9W107aWYodGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cy5wdXNoKGUuZnVsZmlsbGVkLGUucmVqZWN0ZWQpfSkpLCFpKXt2YXIgYT1beXQsdm9pZCAwXTtmb3IoQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBwbHkoYSxyKSxhPWEuY29uY2F0KHMpLG89UHJvbWlzZS5yZXNvbHZlKHQpO2EubGVuZ3RoOylvPW8udGhlbihhLnNoaWZ0KCksYS5zaGlmdCgpKTtyZXR1cm4gb31mb3IodmFyIGM9dDtyLmxlbmd0aDspe3ZhciB1PXIuc2hpZnQoKSxsPXIuc2hpZnQoKTt0cnl7Yz11KGMpfWNhdGNoKGUpe2woZSk7YnJlYWt9fXRyeXtvPXl0KGMpfWNhdGNoKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX1mb3IoO3MubGVuZ3RoOylvPW8udGhlbihzLnNoaWZ0KCkscy5zaGlmdCgpKTtyZXR1cm4gb30sU3QucHJvdG90eXBlLmdldFVyaT1mdW5jdGlvbihlKXtyZXR1cm4gZT1tdCh0aGlzLmRlZmF1bHRzLGUpLGd0KGUudXJsLGUucGFyYW1zLGUucGFyYW1zU2VyaWFsaXplcikucmVwbGFjZSgvXlw/LywiIil9LHB0LmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0aW9ucyJdLChmdW5jdGlvbihlKXtTdC5wcm90b3R5cGVbZV09ZnVuY3Rpb24odCxuKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KG10KG58fHt9LHttZXRob2Q6ZSx1cmw6dCxkYXRhOihufHx7fSkuZGF0YX0pKX19KSkscHQuZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCJdLChmdW5jdGlvbihlKXtTdC5wcm90b3R5cGVbZV09ZnVuY3Rpb24odCxuLHIpe3JldHVybiB0aGlzLnJlcXVlc3QobXQocnx8e30se21ldGhvZDplLHVybDp0LGRhdGE6bn0pKX19KSk7dmFyIGJ0PVN0LGt0PU9lO2Z1bmN0aW9uIEV0KGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoImV4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4iKTt2YXIgdDt0aGlzLnByb21pc2U9bmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe3Q9ZX0pKTt2YXIgbj10aGlzO3RoaXMucHJvbWlzZS50aGVuKChmdW5jdGlvbihlKXtpZihuLl9saXN0ZW5lcnMpe3ZhciB0LHI9bi5fbGlzdGVuZXJzLmxlbmd0aDtmb3IodD0wO3Q8cjt0Kyspbi5fbGlzdGVuZXJzW3RdKGUpO24uX2xpc3RlbmVycz1udWxsfX0pKSx0aGlzLnByb21pc2UudGhlbj1mdW5jdGlvbihlKXt2YXIgdCxyPW5ldyBQcm9taXNlKChmdW5jdGlvbihlKXtuLnN1YnNjcmliZShlKSx0PWV9KSkudGhlbihlKTtyZXR1cm4gci5jYW5jZWw9ZnVuY3Rpb24oKXtuLnVuc3Vic2NyaWJlKHQpfSxyfSxlKChmdW5jdGlvbihlKXtuLnJlYXNvbnx8KG4ucmVhc29uPW5ldyBrdChlKSx0KG4ucmVhc29uKSl9KSl9RXQucHJvdG90eXBlLnRocm93SWZSZXF1ZXN0ZWQ9ZnVuY3Rpb24oKXtpZih0aGlzLnJlYXNvbil0aHJvdyB0aGlzLnJlYXNvbn0sRXQucHJvdG90eXBlLnN1YnNjcmliZT1mdW5jdGlvbihlKXt0aGlzLnJlYXNvbj9lKHRoaXMucmVhc29uKTp0aGlzLl9saXN0ZW5lcnM/dGhpcy5fbGlzdGVuZXJzLnB1c2goZSk6dGhpcy5fbGlzdGVuZXJzPVtlXX0sRXQucHJvdG90eXBlLnVuc3Vic2NyaWJlPWZ1bmN0aW9uKGUpe2lmKHRoaXMuX2xpc3RlbmVycyl7dmFyIHQ9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YoZSk7LTEhPT10JiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKHQsMSl9fSxFdC5zb3VyY2U9ZnVuY3Rpb24oKXt2YXIgZSx0PW5ldyBFdCgoZnVuY3Rpb24odCl7ZT10fSkpO3JldHVybnt0b2tlbjp0LGNhbmNlbDplfX07dmFyIFR0PUV0LEF0PXEsUnQ9cSxDdD1DLER0PWJ0LFB0PWN0O3ZhciBJdD1mdW5jdGlvbiBlKHQpe3ZhciBuPW5ldyBEdCh0KSxyPUN0KER0LnByb3RvdHlwZS5yZXF1ZXN0LG4pO3JldHVybiBSdC5leHRlbmQocixEdC5wcm90b3R5cGUsbiksUnQuZXh0ZW5kKHIsbiksci5jcmVhdGU9ZnVuY3Rpb24obil7cmV0dXJuIGUoUHQodCxuKSl9LHJ9KFhlKTtJdC5BeGlvcz1EdCxJdC5DYW5jZWw9T2UsSXQuQ2FuY2VsVG9rZW49VHQsSXQuaXNDYW5jZWw9ZXQsSXQuVkVSU0lPTj11dCxJdC5hbGw9ZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UuYWxsKGUpfSxJdC5zcHJlYWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLmFwcGx5KG51bGwsdCl9fSxJdC5pc0F4aW9zRXJyb3I9ZnVuY3Rpb24oZSl7cmV0dXJuIEF0LmlzT2JqZWN0KGUpJiYhMD09PWUuaXNBeGlvc0Vycm9yfSxSLmV4cG9ydHM9SXQsUi5leHBvcnRzLmRlZmF1bHQ9SXQ7dmFyIE90LFV0PVIuZXhwb3J0cztsZXQgTHQ9T3Q9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmF0dGFjaFRva2VuPSgpPT5Qcm9taXNlLnJlc29sdmUoKSx0aGlzLnJlcXVlc3RTdGFydENhbGxiYWNrPSgpPT5udWxsLHRoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjaz0oKT0+bnVsbCx0aGlzLnJlcXVlc3RFcnJvckNhbGxiYWNrPSgpPT5udWxsLHRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrPSgpPT5udWxsLHRoaXMuaW5pdD10aGlzLmluaXQuYmluZCh0aGlzKSx0aGlzLnNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjaz10aGlzLnNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjay5iaW5kKHRoaXMpLHRoaXMuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjaz10aGlzLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2suYmluZCh0aGlzKSx0aGlzLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjaz10aGlzLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjay5iaW5kKHRoaXMpLHRoaXMuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2s9dGhpcy5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjay5iaW5kKHRoaXMpfXN0YXRpYyBnZXRJbnN0YW5jZSgpe3JldHVybiB0aGlzLmF4aW9zSW5zdGFuY2V8fCh0aGlzLmF4aW9zSW5zdGFuY2U9VXQuY3JlYXRlKHt3aXRoQ3JlZGVudGlhbHM6ITB9KSx0aGlzLmNsaWVudEluc3RhbmNlfHwodGhpcy5jbGllbnRJbnN0YW5jZT1uZXcgT3QpLHRoaXMuYXhpb3NJbnN0YW5jZS5pbnRlcmNlcHRvcnMucmVxdWVzdC51c2UoKHQ9PmUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5jbGllbnRJbnN0YW5jZS5yZXF1ZXN0SGFuZGxlcih0KX0pKSkpLHRoaXMuYXhpb3NJbnN0YW5jZS5pbnRlcmNlcHRvcnMucmVzcG9uc2UudXNlKChlPT50aGlzLmNsaWVudEluc3RhbmNlLnN1Y2Nlc3NIYW5kbGVyKGUpKSwoZT0+dGhpcy5jbGllbnRJbnN0YW5jZS5lcnJvckhhbmRsZXIoZSkpKSx0aGlzLmF4aW9zSW5zdGFuY2UuYWxsPVV0LmFsbCx0aGlzLmF4aW9zSW5zdGFuY2Uuc3ByZWFkPVV0LnNwcmVhZCx0aGlzLmF4aW9zSW5zdGFuY2UuaW5pdD10aGlzLmNsaWVudEluc3RhbmNlLmluaXQsdGhpcy5heGlvc0luc3RhbmNlLmVuYWJsZUhhbmRsZXI9dGhpcy5jbGllbnRJbnN0YW5jZS5lbmFibGVIYW5kbGVyLHRoaXMuYXhpb3NJbnN0YW5jZS5kaXNhYmxlSGFuZGxlcj10aGlzLmNsaWVudEluc3RhbmNlLmRpc2FibGVIYW5kbGVyLHRoaXMuYXhpb3NJbnN0YW5jZS5kaXNhYmxlSGFuZGxlcldpdGhUaW1lb3V0PXRoaXMuY2xpZW50SW5zdGFuY2UuZGlzYWJsZUhhbmRsZXJXaXRoVGltZW91dCx0aGlzLmF4aW9zSW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrPXRoaXMuY2xpZW50SW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrLHRoaXMuYXhpb3NJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjaz10aGlzLmNsaWVudEluc3RhbmNlLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrLHRoaXMuYXhpb3NJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2s9dGhpcy5jbGllbnRJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2ssdGhpcy5heGlvc0luc3RhbmNlLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2s9dGhpcy5jbGllbnRJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKSx0aGlzLmF4aW9zSW5zdGFuY2V9cmVxdWVzdEhhbmRsZXIodCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtpZih5aWVsZCB0aGlzLmF0dGFjaFRva2VuKHQpLG51bGw9PXQ/dm9pZCAwOnQuc2hvdWxkRW5jb2RlVG9Gb3JtRGF0YSl7Y29uc3QgZT1udWxsPT10P3ZvaWQgMDp0LmRhdGEsbj1uZXcgRm9ybURhdGE7T2JqZWN0LmtleXMoZSkuZm9yRWFjaCgodD0+e24uYXBwZW5kKHQsZVt0XSl9KSksdC5kYXRhPW59cmV0dXJuIE90LmlzSGFuZGxlckVuYWJsZWQmJnRoaXMucmVxdWVzdFN0YXJ0Q2FsbGJhY2smJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnJlcXVlc3RTdGFydENhbGxiYWNrJiZ0aGlzLnJlcXVlc3RTdGFydENhbGxiYWNrKHQpLHR9KSl9ZXJyb3JIYW5kbGVyKGUpe3Rocm93IE90LmlzSGFuZGxlckVuYWJsZWQmJih0aGlzLnJlcXVlc3RFcnJvckNhbGxiYWNrJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXF1ZXN0RXJyb3JDYWxsYmFjayYmdGhpcy5yZXF1ZXN0RXJyb3JDYWxsYmFjayhlKSx0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjayYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrJiZ0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjaygpKSxlfXN1Y2Nlc3NIYW5kbGVyKGUpe3JldHVybiBPdC5pc0hhbmRsZXJFbmFibGVkJiYodGhpcy5yZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrJiZ0aGlzLnJlcXVlc3RTdWNjZXNzQ2FsbGJhY2soZSksdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2smJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjayYmdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2soKSksZX1pbml0KHQ9ITAsbil7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtPdC5pc0hhbmRsZXJFbmFibGVkPXQsdGhpcy5hdHRhY2hUb2tlbj1ufSkpfWVuYWJsZUhhbmRsZXIoKXtPdC5pc0hhbmRsZXJFbmFibGVkPSEwfWRpc2FibGVIYW5kbGVyKCl7T3QuaXNIYW5kbGVyRW5hYmxlZD0hMX1kaXNhYmxlSGFuZGxlcldpdGhUaW1lb3V0KGU9T3QuREVGQVVMVF9IQU5ETEVSX0RJU0FCTEVfVElNRU9VVCl7T3QuaXNIYW5kbGVyRW5hYmxlZD0hMSxzZXRUaW1lb3V0KCgoKT0+e090LmlzSGFuZGxlckVuYWJsZWQ9ITB9KSxlKX1zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2soZSl7dGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjaz1lfXNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKGUpe3RoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjaz1lfXNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjayhlKXt0aGlzLnJlcXVlc3RFcnJvckNhbGxiYWNrPWV9c2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjayhlKXt0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjaz1lfX07THQuREVGQVVMVF9IQU5ETEVSX0RJU0FCTEVfVElNRU9VVD0xZTMsTHQ9T3Q9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbz1hcmd1bWVudHMubGVuZ3RoLHM9bzwzP3Q6bnVsbD09PXI/cj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik6cjtpZigib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3QmJiJmdW5jdGlvbiI9PXR5cGVvZiBSZWZsZWN0LmRlY29yYXRlKXM9UmVmbGVjdC5kZWNvcmF0ZShlLHQsbixyKTtlbHNlIGZvcih2YXIgYT1lLmxlbmd0aC0xO2E+PTA7YS0tKShpPWVbYV0pJiYocz0obzwzP2kocyk6bz4zP2kodCxuLHMpOmkodCxuKSl8fHMpO3JldHVybiBvPjMmJnMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4scyksc30oW2U9Pnt9XSxMdCk7Y2xhc3MgSHR7Y29uc3RydWN0b3IoKXt0aGlzLl9kYXRhPW5ldyBNYXB9c2V0RGF0YSh0LG4pe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dGhpcy5fZGF0YS5zZXQodCxuKX0pKX1nZXREYXRhKHQpe3ZhciBuLHI7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gbnVsbCE9PShyPW51bGw9PT0obj10aGlzLl9kYXRhKXx8dm9pZCAwPT09bj92b2lkIDA6bi5nZXQodCkpJiZ2b2lkIDAhPT1yP3I6Int9In0pKX1yZW1vdmVEYXRhKHQpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dGhpcy5fZGF0YS5kZWxldGUodCl9KSl9fWNsYXNzIE10e2NvbnN0cnVjdG9yKCl7fXN0YXRpYyBnZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpe3JldHVybntibG9iOihudWxsPT1lP3ZvaWQgMDplLmRhdGEpaW5zdGFuY2VvZiBCbG9iP251bGw9PWU/dm9pZCAwOmUuZGF0YTpudWxsLGRhdGE6SlNPTi5zdHJpbmdpZnkobnVsbCE9ZT9lOiIiKSxzdWNjZXNzOiEwfX1zdGF0aWMgZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKXtyZXR1cm4obnVsbD09ZT92b2lkIDA6ZS50b0pTT04pJiZkZWxldGUgZS50b0pTT04se2Vycm9yOkpTT04uc3RyaW5naWZ5KG51bGwhPWU/ZToiIiksc3VjY2VzczohMX19fWNsYXNzIE50e2NvbnN0cnVjdG9yKCl7fXN0YXRpYyByZW1vdmVBdXRob3JpemF0aW9uQ29kZSgpe2NvbnN0IGU9bG9jYXRpb24uaHJlZjtoaXN0b3J5LnB1c2hTdGF0ZSh7fSxkb2N1bWVudC50aXRsZSxlLnJlcGxhY2UoL1w/Y29kZT0uKiQvLCIiKSl9c3RhdGljIGdldFBLQ0UoZSl7dmFyIHQ7cmV0dXJuIG51bGwhPT0odD1zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGUpKSYmdm9pZCAwIT09dD90OiIifXN0YXRpYyBzZXRQS0NFKGUsdCl7c2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShlLHQpfXN0YXRpYyBzZXRTaWduT3V0VVJMKGUpe3Nlc3Npb25TdG9yYWdlLnNldEl0ZW0ocyxlKX1zdGF0aWMgZ2V0U2lnbk91dFVSTCgpe3ZhciBlO3JldHVybiBudWxsIT09KGU9c2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShzKSkmJnZvaWQgMCE9PWU/ZToiIn1zdGF0aWMgcmVtb3ZlUEtDRShlKXtzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKGUpfXN0YXRpYyBjYW5Db250aW51ZVNpZ25JbihlLHQpe3JldHVybiEoZSYmIU50Lmhhc0Vycm9ySW5VUkwoKSYmIU50Lmhhc0F1dGhTZWFyY2hQYXJhbXNJblVSTCgpJiYhdCl9c3RhdGljIGlzSW5pdGlhbGl6ZWRTaWxlbnRTaWduSW4oKXtyZXR1cm4gTnQuaXNTaWxlbnRTdGF0ZVByZXNlbnRJblVSTCgpfXN0YXRpYyB3YXNTaWduSW5DYWxsZWQoKXtyZXR1cm4hKCFOdC5oYXNFcnJvckluVVJMKCkmJiFOdC5oYXNBdXRoU2VhcmNoUGFyYW1zSW5VUkwoKXx8dGhpcy5pc1NpbGVudFN0YXRlUHJlc2VudEluVVJMKCkpfXN0YXRpYyB3YXNTaWxlbnRTaWduSW5DYWxsZWQoKXtjb25zdCBlPXNlc3Npb25TdG9yYWdlLmdldEl0ZW0oImluaXRpYWxpemVkLXNpbGVudC1zaWduLWluIiksdD1lP0pTT04ucGFyc2UoZSk6bnVsbDtyZXR1cm4gQm9vbGVhbih0KX1zdGF0aWMgaXNTaWduT3V0U3VjY2Vzc2Z1bCgpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7aWYoZy5pc1NpZ25PdXRTdWNjZXNzZnVsKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSl7Y29uc3QgZT13aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdCgiPyIpWzBdO3JldHVybiBoaXN0b3J5LnB1c2hTdGF0ZSh7fSxkb2N1bWVudC50aXRsZSxlKSx5aWVsZCBnLmNsZWFyVXNlclNlc3Npb25EYXRhKCksITB9cmV0dXJuITF9KSl9c3RhdGljIGRpZFNpZ25PdXRGYWlsKCl7aWYoZy5kaWRTaWduT3V0RmFpbCh3aW5kb3cubG9jYXRpb24uaHJlZikpe2NvbnN0IGU9bmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZiksdD1lLnNlYXJjaFBhcmFtcy5nZXQoXyksbj1lLnNlYXJjaFBhcmFtcy5nZXQoUykscj13aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdCgiPyIpWzBdO3JldHVybiBoaXN0b3J5LnB1c2hTdGF0ZSh7fSxkb2N1bWVudC50aXRsZSxyKSx7ZGVzY3JpcHRpb246bnVsbCE9bj9uOiIiLGVycm9yOm51bGwhPXQ/dDoiIn19cmV0dXJuITF9c3RhdGljIGlzU2lsZW50U3RhdGVQcmVzZW50SW5VUkwoKXt2YXIgZTtjb25zdCB0PW5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpLnNlYXJjaFBhcmFtcy5nZXQoInN0YXRlIik7cmV0dXJuIG51bGwhPT0oZT1udWxsPT10P3ZvaWQgMDp0LmluY2x1ZGVzKCJzaWduLWluLXNpbGVudGx5IikpJiZ2b2lkIDAhPT1lJiZlfXN0YXRpYyBoYXNBdXRoU2VhcmNoUGFyYW1zSW5VUkwoZT13aW5kb3cubG9jYXRpb24uc2VhcmNoKXtyZXR1cm4vWz8mXWNvZGU9W14mXSsvLnRlc3QoZSl9c3RhdGljIGhhc0Vycm9ySW5VUkwoZT13aW5kb3cubG9jYXRpb24uaHJlZil7Y29uc3QgdD1uZXcgVVJMKGUpO3JldHVybiEhdC5zZWFyY2hQYXJhbXMuZ2V0KF8pJiYic2lnbl9vdXRfc3VjY2VzcyIhPT10LnNlYXJjaFBhcmFtcy5nZXQoInN0YXRlIil9c3RhdGljIGNhblNlbmRQcm9tcHROb25lUmVxdWVzdCgpe2NvbnN0IGU9c2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSh3KTtyZXR1cm4hKGU/SlNPTi5wYXJzZShlKTpudWxsKX1zdGF0aWMgc2V0UHJvbXB0Tm9uZVJlcXVlc3RTZW50KGUpe3Nlc3Npb25TdG9yYWdlLnNldEl0ZW0odyxKU09OLnN0cmluZ2lmeShlKSl9c3RhdGljIHdhaXRUaWxsUGFnZVJlZGlyZWN0KHQpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT1udWxsIT10P3Q6M2UzO3lpZWxkIG5ldyBQcm9taXNlKCh0PT5zZXRUaW1lb3V0KHQsMWUzKmUpKSl9KSl9fXZhciBxdD1bXSxqdD1bXSx4dD0idW5kZWZpbmVkIiE9dHlwZW9mIFVpbnQ4QXJyYXk/VWludDhBcnJheTpBcnJheSxLdD0hMTtmdW5jdGlvbiBKdCgpe0t0PSEwO2Zvcih2YXIgZT0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIsdD0wLG49ZS5sZW5ndGg7dDxuOysrdClxdFt0XT1lW3RdLGp0W2UuY2hhckNvZGVBdCh0KV09dDtqdFsiLSIuY2hhckNvZGVBdCgwKV09NjIsanRbIl8iLmNoYXJDb2RlQXQoMCldPTYzfWZ1bmN0aW9uIEJ0KGUsdCxuKXtmb3IodmFyIHIsaSxvPVtdLHM9dDtzPG47cys9MylyPShlW3NdPDwxNikrKGVbcysxXTw8OCkrZVtzKzJdLG8ucHVzaChxdFsoaT1yKT4+MTgmNjNdK3F0W2k+PjEyJjYzXStxdFtpPj42JjYzXStxdFs2MyZpXSk7cmV0dXJuIG8uam9pbigiIil9ZnVuY3Rpb24gRnQoZSl7dmFyIHQ7S3R8fEp0KCk7Zm9yKHZhciBuPWUubGVuZ3RoLHI9biUzLGk9IiIsbz1bXSxzPTE2MzgzLGE9MCxjPW4tcjthPGM7YSs9cylvLnB1c2goQnQoZSxhLGErcz5jP2M6YStzKSk7cmV0dXJuIDE9PT1yPyh0PWVbbi0xXSxpKz1xdFt0Pj4yXSxpKz1xdFt0PDw0JjYzXSxpKz0iPT0iKToyPT09ciYmKHQ9KGVbbi0yXTw8OCkrZVtuLTFdLGkrPXF0W3Q+PjEwXSxpKz1xdFt0Pj40JjYzXSxpKz1xdFt0PDwyJjYzXSxpKz0iPSIpLG8ucHVzaChpKSxvLmpvaW4oIiIpfWZ1bmN0aW9uIFd0KGUsdCxuLHIsaSl7dmFyIG8scyxhPTgqaS1yLTEsYz0oMTw8YSktMSx1PWM+PjEsbD0tNyxkPW4/aS0xOjAsaD1uPy0xOjEsZj1lW3QrZF07Zm9yKGQrPWgsbz1mJigxPDwtbCktMSxmPj49LWwsbCs9YTtsPjA7bz0yNTYqbytlW3QrZF0sZCs9aCxsLT04KTtmb3Iocz1vJigxPDwtbCktMSxvPj49LWwsbCs9cjtsPjA7cz0yNTYqcytlW3QrZF0sZCs9aCxsLT04KTtpZigwPT09bylvPTEtdTtlbHNle2lmKG89PT1jKXJldHVybiBzP05hTjoxLzAqKGY/LTE6MSk7cys9TWF0aC5wb3coMixyKSxvLT11fXJldHVybihmPy0xOjEpKnMqTWF0aC5wb3coMixvLXIpfWZ1bmN0aW9uICR0KGUsdCxuLHIsaSxvKXt2YXIgcyxhLGMsdT04Km8taS0xLGw9KDE8PHUpLTEsZD1sPj4xLGg9MjM9PT1pP01hdGgucG93KDIsLTI0KS1NYXRoLnBvdygyLC03Nyk6MCxmPXI/MDpvLTEscD1yPzE6LTEsZz10PDB8fDA9PT10JiYxL3Q8MD8xOjA7Zm9yKHQ9TWF0aC5hYnModCksaXNOYU4odCl8fHQ9PT0xLzA/KGE9aXNOYU4odCk/MTowLHM9bCk6KHM9TWF0aC5mbG9vcihNYXRoLmxvZyh0KS9NYXRoLkxOMiksdCooYz1NYXRoLnBvdygyLC1zKSk8MSYmKHMtLSxjKj0yKSwodCs9cytkPj0xP2gvYzpoKk1hdGgucG93KDIsMS1kKSkqYz49MiYmKHMrKyxjLz0yKSxzK2Q+PWw/KGE9MCxzPWwpOnMrZD49MT8oYT0odCpjLTEpKk1hdGgucG93KDIsaSkscys9ZCk6KGE9dCpNYXRoLnBvdygyLGQtMSkqTWF0aC5wb3coMixpKSxzPTApKTtpPj04O2VbbitmXT0yNTUmYSxmKz1wLGEvPTI1NixpLT04KTtmb3Iocz1zPDxpfGEsdSs9aTt1PjA7ZVtuK2ZdPTI1NSZzLGYrPXAscy89MjU2LHUtPTgpO2VbbitmLXBdfD0xMjgqZ312YXIgenQ9e30udG9TdHJpbmcsVnQ9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgQXJyYXldIj09enQuY2FsbChlKX07WnQuVFlQRURfQVJSQVlfU1VQUE9SVD12b2lkIDA9PT1XLlRZUEVEX0FSUkFZX1NVUFBPUlR8fFcuVFlQRURfQVJSQVlfU1VQUE9SVDt2YXIgWXQ9R3QoKTtmdW5jdGlvbiBHdCgpe3JldHVybiBadC5UWVBFRF9BUlJBWV9TVVBQT1JUPzIxNDc0ODM2NDc6MTA3Mzc0MTgyM31mdW5jdGlvbiBYdChlLHQpe2lmKEd0KCk8dCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCB0eXBlZCBhcnJheSBsZW5ndGgiKTtyZXR1cm4gWnQuVFlQRURfQVJSQVlfU1VQUE9SVD8oZT1uZXcgVWludDhBcnJheSh0KSkuX19wcm90b19fPVp0LnByb3RvdHlwZToobnVsbD09PWUmJihlPW5ldyBadCh0KSksZS5sZW5ndGg9dCksZX1mdW5jdGlvbiBadChlLHQsbil7aWYoIShadC5UWVBFRF9BUlJBWV9TVVBQT1JUfHx0aGlzIGluc3RhbmNlb2YgWnQpKXJldHVybiBuZXcgWnQoZSx0LG4pO2lmKCJudW1iZXIiPT10eXBlb2YgZSl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcigiSWYgZW5jb2RpbmcgaXMgc3BlY2lmaWVkIHRoZW4gdGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmciKTtyZXR1cm4gdG4odGhpcyxlKX1yZXR1cm4gUXQodGhpcyxlLHQsbil9ZnVuY3Rpb24gUXQoZSx0LG4scil7aWYoIm51bWJlciI9PXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoJyJ2YWx1ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXInKTtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZ0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/ZnVuY3Rpb24oZSx0LG4scil7aWYodC5ieXRlTGVuZ3RoLG48MHx8dC5ieXRlTGVuZ3RoPG4pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIidvZmZzZXQnIGlzIG91dCBvZiBib3VuZHMiKTtpZih0LmJ5dGVMZW5ndGg8bisocnx8MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIidsZW5ndGgnIGlzIG91dCBvZiBib3VuZHMiKTt0PXZvaWQgMD09PW4mJnZvaWQgMD09PXI/bmV3IFVpbnQ4QXJyYXkodCk6dm9pZCAwPT09cj9uZXcgVWludDhBcnJheSh0LG4pOm5ldyBVaW50OEFycmF5KHQsbixyKTtadC5UWVBFRF9BUlJBWV9TVVBQT1JUPyhlPXQpLl9fcHJvdG9fXz1adC5wcm90b3R5cGU6ZT1ubihlLHQpO3JldHVybiBlfShlLHQsbixyKToic3RyaW5nIj09dHlwZW9mIHQ/ZnVuY3Rpb24oZSx0LG4peyJzdHJpbmciPT10eXBlb2YgbiYmIiIhPT1ufHwobj0idXRmOCIpO2lmKCFadC5pc0VuY29kaW5nKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoJyJlbmNvZGluZyIgbXVzdCBiZSBhIHZhbGlkIHN0cmluZyBlbmNvZGluZycpO3ZhciByPTB8c24odCxuKSxpPShlPVh0KGUscikpLndyaXRlKHQsbik7aSE9PXImJihlPWUuc2xpY2UoMCxpKSk7cmV0dXJuIGV9KGUsdCxuKTpmdW5jdGlvbihlLHQpe2lmKG9uKHQpKXt2YXIgbj0wfHJuKHQubGVuZ3RoKTtyZXR1cm4gMD09PShlPVh0KGUsbikpLmxlbmd0aHx8dC5jb3B5KGUsMCwwLG4pLGV9aWYodCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmdC5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcnx8Imxlbmd0aCJpbiB0KXJldHVybiJudW1iZXIiIT10eXBlb2YgdC5sZW5ndGh8fChyPXQubGVuZ3RoKSE9cj9YdChlLDApOm5uKGUsdCk7aWYoIkJ1ZmZlciI9PT10LnR5cGUmJlZ0KHQuZGF0YSkpcmV0dXJuIG5uKGUsdC5kYXRhKX12YXIgcjt0aHJvdyBuZXcgVHlwZUVycm9yKCJGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgYXJyYXktbGlrZSBvYmplY3QuIil9KGUsdCl9ZnVuY3Rpb24gZW4oZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJyJzaXplIiBhcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJyk7aWYoZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgbmVnYXRpdmUnKX1mdW5jdGlvbiB0bihlLHQpe2lmKGVuKHQpLGU9WHQoZSx0PDA/MDowfHJuKHQpKSwhWnQuVFlQRURfQVJSQVlfU1VQUE9SVClmb3IodmFyIG49MDtuPHQ7KytuKWVbbl09MDtyZXR1cm4gZX1mdW5jdGlvbiBubihlLHQpe3ZhciBuPXQubGVuZ3RoPDA/MDowfHJuKHQubGVuZ3RoKTtlPVh0KGUsbik7Zm9yKHZhciByPTA7cjxuO3IrPTEpZVtyXT0yNTUmdFtyXTtyZXR1cm4gZX1mdW5jdGlvbiBybihlKXtpZihlPj1HdCgpKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIHNpemU6IDB4IitHdCgpLnRvU3RyaW5nKDE2KSsiIGJ5dGVzIik7cmV0dXJuIDB8ZX1mdW5jdGlvbiBvbihlKXtyZXR1cm4hKG51bGw9PWV8fCFlLl9pc0J1ZmZlcil9ZnVuY3Rpb24gc24oZSx0KXtpZihvbihlKSlyZXR1cm4gZS5sZW5ndGg7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmImZ1bmN0aW9uIj09dHlwZW9mIEFycmF5QnVmZmVyLmlzVmlldyYmKEFycmF5QnVmZmVyLmlzVmlldyhlKXx8ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSlyZXR1cm4gZS5ieXRlTGVuZ3RoOyJzdHJpbmciIT10eXBlb2YgZSYmKGU9IiIrZSk7dmFyIG49ZS5sZW5ndGg7aWYoMD09PW4pcmV0dXJuIDA7Zm9yKHZhciByPSExOzspc3dpdGNoKHQpe2Nhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIG47Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlIHZvaWQgMDpyZXR1cm4gVW4oZSkubGVuZ3RoO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gMipuO2Nhc2UiaGV4IjpyZXR1cm4gbj4+PjE7Y2FzZSJiYXNlNjQiOnJldHVybiBMbihlKS5sZW5ndGg7ZGVmYXVsdDppZihyKXJldHVybiBVbihlKS5sZW5ndGg7dD0oIiIrdCkudG9Mb3dlckNhc2UoKSxyPSEwfX1mdW5jdGlvbiBhbihlLHQsbil7dmFyIHI9ITE7aWYoKHZvaWQgMD09PXR8fHQ8MCkmJih0PTApLHQ+dGhpcy5sZW5ndGgpcmV0dXJuIiI7aWYoKHZvaWQgMD09PW58fG4+dGhpcy5sZW5ndGgpJiYobj10aGlzLmxlbmd0aCksbjw9MClyZXR1cm4iIjtpZigobj4+Pj0wKTw9KHQ+Pj49MCkpcmV0dXJuIiI7Zm9yKGV8fChlPSJ1dGY4Iik7Oylzd2l0Y2goZSl7Y2FzZSJoZXgiOnJldHVybiBibih0aGlzLHQsbik7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gbW4odGhpcyx0LG4pO2Nhc2UiYXNjaWkiOnJldHVybiBfbih0aGlzLHQsbik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gU24odGhpcyx0LG4pO2Nhc2UiYmFzZTY0IjpyZXR1cm4geW4odGhpcyx0LG4pO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4ga24odGhpcyx0LG4pO2RlZmF1bHQ6aWYocil0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK2UpO2U9KGUrIiIpLnRvTG93ZXJDYXNlKCkscj0hMH19ZnVuY3Rpb24gY24oZSx0LG4pe3ZhciByPWVbdF07ZVt0XT1lW25dLGVbbl09cn1mdW5jdGlvbiB1bihlLHQsbixyLGkpe2lmKDA9PT1lLmxlbmd0aClyZXR1cm4tMTtpZigic3RyaW5nIj09dHlwZW9mIG4/KHI9bixuPTApOm4+MjE0NzQ4MzY0Nz9uPTIxNDc0ODM2NDc6bjwtMjE0NzQ4MzY0OCYmKG49LTIxNDc0ODM2NDgpLG49K24saXNOYU4obikmJihuPWk/MDplLmxlbmd0aC0xKSxuPDAmJihuPWUubGVuZ3RoK24pLG4+PWUubGVuZ3RoKXtpZihpKXJldHVybi0xO249ZS5sZW5ndGgtMX1lbHNlIGlmKG48MCl7aWYoIWkpcmV0dXJuLTE7bj0wfWlmKCJzdHJpbmciPT10eXBlb2YgdCYmKHQ9WnQuZnJvbSh0LHIpKSxvbih0KSlyZXR1cm4gMD09PXQubGVuZ3RoPy0xOmxuKGUsdCxuLHIsaSk7aWYoIm51bWJlciI9PXR5cGVvZiB0KXJldHVybiB0Jj0yNTUsWnQuVFlQRURfQVJSQVlfU1VQUE9SVCYmImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/aT9VaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoZSx0LG4pOlVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoZSx0LG4pOmxuKGUsW3RdLG4scixpKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJ2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXIiKX1mdW5jdGlvbiBsbihlLHQsbixyLGkpe3ZhciBvLHM9MSxhPWUubGVuZ3RoLGM9dC5sZW5ndGg7aWYodm9pZCAwIT09ciYmKCJ1Y3MyIj09PShyPVN0cmluZyhyKS50b0xvd2VyQ2FzZSgpKXx8InVjcy0yIj09PXJ8fCJ1dGYxNmxlIj09PXJ8fCJ1dGYtMTZsZSI9PT1yKSl7aWYoZS5sZW5ndGg8Mnx8dC5sZW5ndGg8MilyZXR1cm4tMTtzPTIsYS89MixjLz0yLG4vPTJ9ZnVuY3Rpb24gdShlLHQpe3JldHVybiAxPT09cz9lW3RdOmUucmVhZFVJbnQxNkJFKHQqcyl9aWYoaSl7dmFyIGw9LTE7Zm9yKG89bjtvPGE7bysrKWlmKHUoZSxvKT09PXUodCwtMT09PWw/MDpvLWwpKXtpZigtMT09PWwmJihsPW8pLG8tbCsxPT09YylyZXR1cm4gbCpzfWVsc2UtMSE9PWwmJihvLT1vLWwpLGw9LTF9ZWxzZSBmb3IobitjPmEmJihuPWEtYyksbz1uO28+PTA7by0tKXtmb3IodmFyIGQ9ITAsaD0wO2g8YztoKyspaWYodShlLG8raCkhPT11KHQsaCkpe2Q9ITE7YnJlYWt9aWYoZClyZXR1cm4gb31yZXR1cm4tMX1mdW5jdGlvbiBkbihlLHQsbixyKXtuPU51bWJlcihuKXx8MDt2YXIgaT1lLmxlbmd0aC1uO3I/KHI9TnVtYmVyKHIpKT5pJiYocj1pKTpyPWk7dmFyIG89dC5sZW5ndGg7aWYobyUyIT0wKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgaGV4IHN0cmluZyIpO3I+by8yJiYocj1vLzIpO2Zvcih2YXIgcz0wO3M8cjsrK3Mpe3ZhciBhPXBhcnNlSW50KHQuc3Vic3RyKDIqcywyKSwxNik7aWYoaXNOYU4oYSkpcmV0dXJuIHM7ZVtuK3NdPWF9cmV0dXJuIHN9ZnVuY3Rpb24gaG4oZSx0LG4scil7cmV0dXJuIEhuKFVuKHQsZS5sZW5ndGgtbiksZSxuLHIpfWZ1bmN0aW9uIGZuKGUsdCxuLHIpe3JldHVybiBIbihmdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbj0wO248ZS5sZW5ndGg7KytuKXQucHVzaCgyNTUmZS5jaGFyQ29kZUF0KG4pKTtyZXR1cm4gdH0odCksZSxuLHIpfWZ1bmN0aW9uIHBuKGUsdCxuLHIpe3JldHVybiBmbihlLHQsbixyKX1mdW5jdGlvbiBnbihlLHQsbixyKXtyZXR1cm4gSG4oTG4odCksZSxuLHIpfWZ1bmN0aW9uIHZuKGUsdCxuLHIpe3JldHVybiBIbihmdW5jdGlvbihlLHQpe2Zvcih2YXIgbixyLGksbz1bXSxzPTA7czxlLmxlbmd0aCYmISgodC09Mik8MCk7KytzKXI9KG49ZS5jaGFyQ29kZUF0KHMpKT4+OCxpPW4lMjU2LG8ucHVzaChpKSxvLnB1c2gocik7cmV0dXJuIG99KHQsZS5sZW5ndGgtbiksZSxuLHIpfWZ1bmN0aW9uIHluKGUsdCxuKXtyZXR1cm4gMD09PXQmJm49PT1lLmxlbmd0aD9GdChlKTpGdChlLnNsaWNlKHQsbikpfWZ1bmN0aW9uIG1uKGUsdCxuKXtuPU1hdGgubWluKGUubGVuZ3RoLG4pO2Zvcih2YXIgcj1bXSxpPXQ7aTxuOyl7dmFyIG8scyxhLGMsdT1lW2ldLGw9bnVsbCxkPXU+MjM5PzQ6dT4yMjM/Mzp1PjE5MT8yOjE7aWYoaStkPD1uKXN3aXRjaChkKXtjYXNlIDE6dTwxMjgmJihsPXUpO2JyZWFrO2Nhc2UgMjoxMjg9PSgxOTImKG89ZVtpKzFdKSkmJihjPSgzMSZ1KTw8Nnw2MyZvKT4xMjcmJihsPWMpO2JyZWFrO2Nhc2UgMzpvPWVbaSsxXSxzPWVbaSsyXSwxMjg9PSgxOTImbykmJjEyOD09KDE5MiZzKSYmKGM9KDE1JnUpPDwxMnwoNjMmbyk8PDZ8NjMmcyk+MjA0NyYmKGM8NTUyOTZ8fGM+NTczNDMpJiYobD1jKTticmVhaztjYXNlIDQ6bz1lW2krMV0scz1lW2krMl0sYT1lW2krM10sMTI4PT0oMTkyJm8pJiYxMjg9PSgxOTImcykmJjEyOD09KDE5MiZhKSYmKGM9KDE1JnUpPDwxOHwoNjMmbyk8PDEyfCg2MyZzKTw8Nnw2MyZhKT42NTUzNSYmYzwxMTE0MTEyJiYobD1jKX1udWxsPT09bD8obD02NTUzMyxkPTEpOmw+NjU1MzUmJihsLT02NTUzNixyLnB1c2gobD4+PjEwJjEwMjN8NTUyOTYpLGw9NTYzMjB8MTAyMyZsKSxyLnB1c2gobCksaSs9ZH1yZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGg7aWYodDw9d24pcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGUpO3ZhciBuPSIiLHI9MDtmb3IoO3I8dDspbis9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsZS5zbGljZShyLHIrPXduKSk7cmV0dXJuIG59KHIpfVp0LnBvb2xTaXplPTgxOTIsWnQuX2F1Z21lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19fPVp0LnByb3RvdHlwZSxlfSxadC5mcm9tPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gUXQobnVsbCxlLHQsbil9LFp0LlRZUEVEX0FSUkFZX1NVUFBPUlQmJihadC5wcm90b3R5cGUuX19wcm90b19fPVVpbnQ4QXJyYXkucHJvdG90eXBlLFp0Ll9fcHJvdG9fXz1VaW50OEFycmF5KSxadC5hbGxvYz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBlbih0KSx0PD0wP1h0KGUsdCk6dm9pZCAwIT09bj8ic3RyaW5nIj09dHlwZW9mIHI/WHQoZSx0KS5maWxsKG4scik6WHQoZSx0KS5maWxsKG4pOlh0KGUsdCl9KG51bGwsZSx0LG4pfSxadC5hbGxvY1Vuc2FmZT1mdW5jdGlvbihlKXtyZXR1cm4gdG4obnVsbCxlKX0sWnQuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKGUpe3JldHVybiB0bihudWxsLGUpfSxadC5pc0J1ZmZlcj1NbixadC5jb21wYXJlPWZ1bmN0aW9uKGUsdCl7aWYoIW9uKGUpfHwhb24odCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIG11c3QgYmUgQnVmZmVycyIpO2lmKGU9PT10KXJldHVybiAwO2Zvcih2YXIgbj1lLmxlbmd0aCxyPXQubGVuZ3RoLGk9MCxvPU1hdGgubWluKG4scik7aTxvOysraSlpZihlW2ldIT09dFtpXSl7bj1lW2ldLHI9dFtpXTticmVha31yZXR1cm4gbjxyPy0xOnI8bj8xOjB9LFp0LmlzRW5jb2Rpbmc9ZnVuY3Rpb24oZSl7c3dpdGNoKFN0cmluZyhlKS50b0xvd2VyQ2FzZSgpKXtjYXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOmNhc2UiYmFzZTY0IjpjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19LFp0LmNvbmNhdD1mdW5jdGlvbihlLHQpe2lmKCFWdChlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aWYoMD09PWUubGVuZ3RoKXJldHVybiBadC5hbGxvYygwKTt2YXIgbjtpZih2b2lkIDA9PT10KWZvcih0PTAsbj0wO248ZS5sZW5ndGg7KytuKXQrPWVbbl0ubGVuZ3RoO3ZhciByPVp0LmFsbG9jVW5zYWZlKHQpLGk9MDtmb3Iobj0wO248ZS5sZW5ndGg7KytuKXt2YXIgbz1lW25dO2lmKCFvbihvKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7by5jb3B5KHIsaSksaSs9by5sZW5ndGh9cmV0dXJuIHJ9LFp0LmJ5dGVMZW5ndGg9c24sWnQucHJvdG90eXBlLl9pc0J1ZmZlcj0hMCxadC5wcm90b3R5cGUuc3dhcDE2PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSUyIT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz0yKWNuKHRoaXMsdCx0KzEpO3JldHVybiB0aGlzfSxadC5wcm90b3R5cGUuc3dhcDMyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSU0IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz00KWNuKHRoaXMsdCx0KzMpLGNuKHRoaXMsdCsxLHQrMik7cmV0dXJuIHRoaXN9LFp0LnByb3RvdHlwZS5zd2FwNjQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTghPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzIik7Zm9yKHZhciB0PTA7dDxlO3QrPTgpY24odGhpcyx0LHQrNyksY24odGhpcyx0KzEsdCs2KSxjbih0aGlzLHQrMix0KzUpLGNuKHRoaXMsdCszLHQrNCk7cmV0dXJuIHRoaXN9LFp0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBlPTB8dGhpcy5sZW5ndGg7cmV0dXJuIDA9PT1lPyIiOjA9PT1hcmd1bWVudHMubGVuZ3RoP21uKHRoaXMsMCxlKTphbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LFp0LnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oZSl7aWYoIW9uKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtyZXR1cm4gdGhpcz09PWV8fDA9PT1adC5jb21wYXJlKHRoaXMsZSl9LFp0LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7dmFyIGU9IiI7cmV0dXJuIHRoaXMubGVuZ3RoPjAmJihlPXRoaXMudG9TdHJpbmcoImhleCIsMCw1MCkubWF0Y2goLy57Mn0vZykuam9pbigiICIpLHRoaXMubGVuZ3RoPjUwJiYoZSs9IiAuLi4gIikpLCI8QnVmZmVyICIrZSsiPiJ9LFp0LnByb3RvdHlwZS5jb21wYXJlPWZ1bmN0aW9uKGUsdCxuLHIsaSl7aWYoIW9uKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtpZih2b2lkIDA9PT10JiYodD0wKSx2b2lkIDA9PT1uJiYobj1lP2UubGVuZ3RoOjApLHZvaWQgMD09PXImJihyPTApLHZvaWQgMD09PWkmJihpPXRoaXMubGVuZ3RoKSx0PDB8fG4+ZS5sZW5ndGh8fHI8MHx8aT50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIGluZGV4Iik7aWYocj49aSYmdD49bilyZXR1cm4gMDtpZihyPj1pKXJldHVybi0xO2lmKHQ+PW4pcmV0dXJuIDE7aWYodGhpcz09PWUpcmV0dXJuIDA7Zm9yKHZhciBvPShpPj4+PTApLShyPj4+PTApLHM9KG4+Pj49MCktKHQ+Pj49MCksYT1NYXRoLm1pbihvLHMpLGM9dGhpcy5zbGljZShyLGkpLHU9ZS5zbGljZSh0LG4pLGw9MDtsPGE7KytsKWlmKGNbbF0hPT11W2xdKXtvPWNbbF0scz11W2xdO2JyZWFrfXJldHVybiBvPHM/LTE6czxvPzE6MH0sWnQucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZihlLHQsbil9LFp0LnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdW4odGhpcyxlLHQsbiwhMCl9LFp0LnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHVuKHRoaXMsZSx0LG4sITEpfSxadC5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oZSx0LG4scil7aWYodm9pZCAwPT09dClyPSJ1dGY4IixuPXRoaXMubGVuZ3RoLHQ9MDtlbHNlIGlmKHZvaWQgMD09PW4mJiJzdHJpbmciPT10eXBlb2YgdClyPXQsbj10aGlzLmxlbmd0aCx0PTA7ZWxzZXtpZighaXNGaW5pdGUodCkpdGhyb3cgbmV3IEVycm9yKCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpO3R8PTAsaXNGaW5pdGUobik/KG58PTAsdm9pZCAwPT09ciYmKHI9InV0ZjgiKSk6KHI9bixuPXZvaWQgMCl9dmFyIGk9dGhpcy5sZW5ndGgtdDtpZigodm9pZCAwPT09bnx8bj5pKSYmKG49aSksZS5sZW5ndGg+MCYmKG48MHx8dDwwKXx8dD50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMiKTtyfHwocj0idXRmOCIpO2Zvcih2YXIgbz0hMTs7KXN3aXRjaChyKXtjYXNlImhleCI6cmV0dXJuIGRuKHRoaXMsZSx0LG4pO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIGhuKHRoaXMsZSx0LG4pO2Nhc2UiYXNjaWkiOnJldHVybiBmbih0aGlzLGUsdCxuKTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBwbih0aGlzLGUsdCxuKTtjYXNlImJhc2U2NCI6cmV0dXJuIGduKHRoaXMsZSx0LG4pO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gdm4odGhpcyxlLHQsbik7ZGVmYXVsdDppZihvKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrcik7cj0oIiIrcikudG9Mb3dlckNhc2UoKSxvPSEwfX0sWnQucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJCdWZmZXIiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX07dmFyIHduPTQwOTY7ZnVuY3Rpb24gX24oZSx0LG4pe3ZhciByPSIiO249TWF0aC5taW4oZS5sZW5ndGgsbik7Zm9yKHZhciBpPXQ7aTxuOysraSlyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDEyNyZlW2ldKTtyZXR1cm4gcn1mdW5jdGlvbiBTbihlLHQsbil7dmFyIHI9IiI7bj1NYXRoLm1pbihlLmxlbmd0aCxuKTtmb3IodmFyIGk9dDtpPG47KytpKXIrPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtpXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gYm4oZSx0LG4pe3ZhciByPWUubGVuZ3RoOyghdHx8dDwwKSYmKHQ9MCksKCFufHxuPDB8fG4+cikmJihuPXIpO2Zvcih2YXIgaT0iIixvPXQ7bzxuOysrbylpKz1PbihlW29dKTtyZXR1cm4gaX1mdW5jdGlvbiBrbihlLHQsbil7Zm9yKHZhciByPWUuc2xpY2UodCxuKSxpPSIiLG89MDtvPHIubGVuZ3RoO28rPTIpaSs9U3RyaW5nLmZyb21DaGFyQ29kZShyW29dKzI1NipyW28rMV0pO3JldHVybiBpfWZ1bmN0aW9uIEVuKGUsdCxuKXtpZihlJTEhPTB8fGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib2Zmc2V0IGlzIG5vdCB1aW50Iik7aWYoZSt0Pm4pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlRyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgiKX1mdW5jdGlvbiBUbihlLHQsbixyLGksbyl7aWYoIW9uKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJidWZmZXIiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKTtpZih0Pml8fHQ8byl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInZhbHVlIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJyk7aWYobityPmUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBBbihlLHQsbixyKXt0PDAmJih0PTY1NTM1K3QrMSk7Zm9yKHZhciBpPTAsbz1NYXRoLm1pbihlLmxlbmd0aC1uLDIpO2k8bzsrK2kpZVtuK2ldPSh0JjI1NTw8OCoocj9pOjEtaSkpPj4+OCoocj9pOjEtaSl9ZnVuY3Rpb24gUm4oZSx0LG4scil7dDwwJiYodD00Mjk0OTY3Mjk1K3QrMSk7Zm9yKHZhciBpPTAsbz1NYXRoLm1pbihlLmxlbmd0aC1uLDQpO2k8bzsrK2kpZVtuK2ldPXQ+Pj44KihyP2k6My1pKSYyNTV9ZnVuY3Rpb24gQ24oZSx0LG4scixpLG8pe2lmKG4rcj5lLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYobjwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBEbihlLHQsbixyLGkpe3JldHVybiBpfHxDbihlLDAsbiw0KSwkdChlLHQsbixyLDIzLDQpLG4rNH1mdW5jdGlvbiBQbihlLHQsbixyLGkpe3JldHVybiBpfHxDbihlLDAsbiw4KSwkdChlLHQsbixyLDUyLDgpLG4rOH1adC5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24oZSx0KXt2YXIgbixyPXRoaXMubGVuZ3RoO2lmKChlPX5+ZSk8MD8oZSs9cik8MCYmKGU9MCk6ZT5yJiYoZT1yKSwodD12b2lkIDA9PT10P3I6fn50KTwwPyh0Kz1yKTwwJiYodD0wKTp0PnImJih0PXIpLHQ8ZSYmKHQ9ZSksWnQuVFlQRURfQVJSQVlfU1VQUE9SVCkobj10aGlzLnN1YmFycmF5KGUsdCkpLl9fcHJvdG9fXz1adC5wcm90b3R5cGU7ZWxzZXt2YXIgaT10LWU7bj1uZXcgWnQoaSx2b2lkIDApO2Zvcih2YXIgbz0wO288aTsrK28pbltvXT10aGlzW28rZV19cmV0dXJuIG59LFp0LnByb3RvdHlwZS5yZWFkVUludExFPWZ1bmN0aW9uKGUsdCxuKXtlfD0wLHR8PTAsbnx8RW4oZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIHI9dGhpc1tlXSxpPTEsbz0wOysrbzx0JiYoaSo9MjU2KTspcis9dGhpc1tlK29dKmk7cmV0dXJuIHJ9LFp0LnByb3RvdHlwZS5yZWFkVUludEJFPWZ1bmN0aW9uKGUsdCxuKXtlfD0wLHR8PTAsbnx8RW4oZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIHI9dGhpc1tlKy0tdF0saT0xO3Q+MCYmKGkqPTI1Nik7KXIrPXRoaXNbZSstLXRdKmk7cmV0dXJuIHJ9LFp0LnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8RW4oZSwxLHRoaXMubGVuZ3RoKSx0aGlzW2VdfSxadC5wcm90b3R5cGUucmVhZFVJbnQxNkxFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEVuKGUsMix0aGlzLmxlbmd0aCksdGhpc1tlXXx0aGlzW2UrMV08PDh9LFp0LnByb3RvdHlwZS5yZWFkVUludDE2QkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8RW4oZSwyLHRoaXMubGVuZ3RoKSx0aGlzW2VdPDw4fHRoaXNbZSsxXX0sWnQucHJvdG90eXBlLnJlYWRVSW50MzJMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxFbihlLDQsdGhpcy5sZW5ndGgpLCh0aGlzW2VdfHRoaXNbZSsxXTw8OHx0aGlzW2UrMl08PDE2KSsxNjc3NzIxNip0aGlzW2UrM119LFp0LnByb3RvdHlwZS5yZWFkVUludDMyQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8RW4oZSw0LHRoaXMubGVuZ3RoKSwxNjc3NzIxNip0aGlzW2VdKyh0aGlzW2UrMV08PDE2fHRoaXNbZSsyXTw8OHx0aGlzW2UrM10pfSxadC5wcm90b3R5cGUucmVhZEludExFPWZ1bmN0aW9uKGUsdCxuKXtlfD0wLHR8PTAsbnx8RW4oZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIHI9dGhpc1tlXSxpPTEsbz0wOysrbzx0JiYoaSo9MjU2KTspcis9dGhpc1tlK29dKmk7cmV0dXJuIHI+PShpKj0xMjgpJiYoci09TWF0aC5wb3coMiw4KnQpKSxyfSxadC5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKGUsdCxuKXtlfD0wLHR8PTAsbnx8RW4oZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIHI9dCxpPTEsbz10aGlzW2UrLS1yXTtyPjAmJihpKj0yNTYpOylvKz10aGlzW2UrLS1yXSppO3JldHVybiBvPj0oaSo9MTI4KSYmKG8tPU1hdGgucG93KDIsOCp0KSksb30sWnQucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEVuKGUsMSx0aGlzLmxlbmd0aCksMTI4JnRoaXNbZV0/LTEqKDI1NS10aGlzW2VdKzEpOnRoaXNbZV19LFp0LnByb3RvdHlwZS5yZWFkSW50MTZMRT1mdW5jdGlvbihlLHQpe3R8fEVuKGUsMix0aGlzLmxlbmd0aCk7dmFyIG49dGhpc1tlXXx0aGlzW2UrMV08PDg7cmV0dXJuIDMyNzY4Jm4/NDI5NDkwMTc2MHxuOm59LFp0LnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbihlLHQpe3R8fEVuKGUsMix0aGlzLmxlbmd0aCk7dmFyIG49dGhpc1tlKzFdfHRoaXNbZV08PDg7cmV0dXJuIDMyNzY4Jm4/NDI5NDkwMTc2MHxuOm59LFp0LnByb3RvdHlwZS5yZWFkSW50MzJMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxFbihlLDQsdGhpcy5sZW5ndGgpLHRoaXNbZV18dGhpc1tlKzFdPDw4fHRoaXNbZSsyXTw8MTZ8dGhpc1tlKzNdPDwyNH0sWnQucHJvdG90eXBlLnJlYWRJbnQzMkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEVuKGUsNCx0aGlzLmxlbmd0aCksdGhpc1tlXTw8MjR8dGhpc1tlKzFdPDwxNnx0aGlzW2UrMl08PDh8dGhpc1tlKzNdfSxadC5wcm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8RW4oZSw0LHRoaXMubGVuZ3RoKSxXdCh0aGlzLGUsITAsMjMsNCl9LFp0LnByb3RvdHlwZS5yZWFkRmxvYXRCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxFbihlLDQsdGhpcy5sZW5ndGgpLFd0KHRoaXMsZSwhMSwyMyw0KX0sWnQucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxFbihlLDgsdGhpcy5sZW5ndGgpLFd0KHRoaXMsZSwhMCw1Miw4KX0sWnQucHJvdG90eXBlLnJlYWREb3VibGVCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxFbihlLDgsdGhpcy5sZW5ndGgpLFd0KHRoaXMsZSwhMSw1Miw4KX0sWnQucHJvdG90eXBlLndyaXRlVUludExFPWZ1bmN0aW9uKGUsdCxuLHIpeyhlPStlLHR8PTAsbnw9MCxyKXx8VG4odGhpcyxlLHQsbixNYXRoLnBvdygyLDgqbiktMSwwKTt2YXIgaT0xLG89MDtmb3IodGhpc1t0XT0yNTUmZTsrK288biYmKGkqPTI1Nik7KXRoaXNbdCtvXT1lL2kmMjU1O3JldHVybiB0K259LFp0LnByb3RvdHlwZS53cml0ZVVJbnRCRT1mdW5jdGlvbihlLHQsbixyKXsoZT0rZSx0fD0wLG58PTAscil8fFRuKHRoaXMsZSx0LG4sTWF0aC5wb3coMiw4Km4pLTEsMCk7dmFyIGk9bi0xLG89MTtmb3IodGhpc1t0K2ldPTI1NSZlOy0taT49MCYmKG8qPTI1Nik7KXRoaXNbdCtpXT1lL28mMjU1O3JldHVybiB0K259LFp0LnByb3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fFRuKHRoaXMsZSx0LDEsMjU1LDApLFp0LlRZUEVEX0FSUkFZX1NVUFBPUlR8fChlPU1hdGguZmxvb3IoZSkpLHRoaXNbdF09MjU1JmUsdCsxfSxadC5wcm90b3R5cGUud3JpdGVVSW50MTZMRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxUbih0aGlzLGUsdCwyLDY1NTM1LDApLFp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44KTpBbih0aGlzLGUsdCwhMCksdCsyfSxadC5wcm90b3R5cGUud3JpdGVVSW50MTZCRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxUbih0aGlzLGUsdCwyLDY1NTM1LDApLFp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjgsdGhpc1t0KzFdPTI1NSZlKTpBbih0aGlzLGUsdCwhMSksdCsyfSxadC5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxUbih0aGlzLGUsdCw0LDQyOTQ5NjcyOTUsMCksWnQuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0KzNdPWU+Pj4yNCx0aGlzW3QrMl09ZT4+PjE2LHRoaXNbdCsxXT1lPj4+OCx0aGlzW3RdPTI1NSZlKTpSbih0aGlzLGUsdCwhMCksdCs0fSxadC5wcm90b3R5cGUud3JpdGVVSW50MzJCRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxUbih0aGlzLGUsdCw0LDQyOTQ5NjcyOTUsMCksWnQuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+MjQsdGhpc1t0KzFdPWU+Pj4xNix0aGlzW3QrMl09ZT4+PjgsdGhpc1t0KzNdPTI1NSZlKTpSbih0aGlzLGUsdCwhMSksdCs0fSxadC5wcm90b3R5cGUud3JpdGVJbnRMRT1mdW5jdGlvbihlLHQsbixyKXtpZihlPStlLHR8PTAsIXIpe3ZhciBpPU1hdGgucG93KDIsOCpuLTEpO1RuKHRoaXMsZSx0LG4saS0xLC1pKX12YXIgbz0wLHM9MSxhPTA7Zm9yKHRoaXNbdF09MjU1JmU7KytvPG4mJihzKj0yNTYpOyllPDAmJjA9PT1hJiYwIT09dGhpc1t0K28tMV0mJihhPTEpLHRoaXNbdCtvXT0oZS9zPj4wKS1hJjI1NTtyZXR1cm4gdCtufSxadC5wcm90b3R5cGUud3JpdGVJbnRCRT1mdW5jdGlvbihlLHQsbixyKXtpZihlPStlLHR8PTAsIXIpe3ZhciBpPU1hdGgucG93KDIsOCpuLTEpO1RuKHRoaXMsZSx0LG4saS0xLC1pKX12YXIgbz1uLTEscz0xLGE9MDtmb3IodGhpc1t0K29dPTI1NSZlOy0tbz49MCYmKHMqPTI1Nik7KWU8MCYmMD09PWEmJjAhPT10aGlzW3QrbysxXSYmKGE9MSksdGhpc1t0K29dPShlL3M+PjApLWEmMjU1O3JldHVybiB0K259LFp0LnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8VG4odGhpcyxlLHQsMSwxMjcsLTEyOCksWnQuVFlQRURfQVJSQVlfU1VQUE9SVHx8KGU9TWF0aC5mbG9vcihlKSksZTwwJiYoZT0yNTUrZSsxKSx0aGlzW3RdPTI1NSZlLHQrMX0sWnQucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxUbih0aGlzLGUsdCwyLDMyNzY3LC0zMjc2OCksWnQuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT0yNTUmZSx0aGlzW3QrMV09ZT4+PjgpOkFuKHRoaXMsZSx0LCEwKSx0KzJ9LFp0LnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8VG4odGhpcyxlLHQsMiwzMjc2NywtMzI3NjgpLFp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjgsdGhpc1t0KzFdPTI1NSZlKTpBbih0aGlzLGUsdCwhMSksdCsyfSxadC5wcm90b3R5cGUud3JpdGVJbnQzMkxFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fFRuKHRoaXMsZSx0LDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksWnQuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT0yNTUmZSx0aGlzW3QrMV09ZT4+PjgsdGhpc1t0KzJdPWU+Pj4xNix0aGlzW3QrM109ZT4+PjI0KTpSbih0aGlzLGUsdCwhMCksdCs0fSxadC5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fFRuKHRoaXMsZSx0LDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksZTwwJiYoZT00Mjk0OTY3Mjk1K2UrMSksWnQuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+MjQsdGhpc1t0KzFdPWU+Pj4xNix0aGlzW3QrMl09ZT4+PjgsdGhpc1t0KzNdPTI1NSZlKTpSbih0aGlzLGUsdCwhMSksdCs0fSxadC5wcm90b3R5cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gRG4odGhpcyxlLHQsITAsbil9LFp0LnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBEbih0aGlzLGUsdCwhMSxuKX0sWnQucHJvdG90eXBlLndyaXRlRG91YmxlTEU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBQbih0aGlzLGUsdCwhMCxuKX0sWnQucHJvdG90eXBlLndyaXRlRG91YmxlQkU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBQbih0aGlzLGUsdCwhMSxuKX0sWnQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZSx0LG4scil7aWYobnx8KG49MCkscnx8MD09PXJ8fChyPXRoaXMubGVuZ3RoKSx0Pj1lLmxlbmd0aCYmKHQ9ZS5sZW5ndGgpLHR8fCh0PTApLHI+MCYmcjxuJiYocj1uKSxyPT09bilyZXR1cm4gMDtpZigwPT09ZS5sZW5ndGh8fDA9PT10aGlzLmxlbmd0aClyZXR1cm4gMDtpZih0PDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoInRhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMiKTtpZihuPDB8fG4+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VTdGFydCBvdXQgb2YgYm91bmRzIik7aWYocjwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcyIpO3I+dGhpcy5sZW5ndGgmJihyPXRoaXMubGVuZ3RoKSxlLmxlbmd0aC10PHItbiYmKHI9ZS5sZW5ndGgtdCtuKTt2YXIgaSxvPXItbjtpZih0aGlzPT09ZSYmbjx0JiZ0PHIpZm9yKGk9by0xO2k+PTA7LS1pKWVbaSt0XT10aGlzW2krbl07ZWxzZSBpZihvPDFlM3x8IVp0LlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKGk9MDtpPG87KytpKWVbaSt0XT10aGlzW2krbl07ZWxzZSBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChlLHRoaXMuc3ViYXJyYXkobixuK28pLHQpO3JldHVybiBvfSxadC5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbihlLHQsbixyKXtpZigic3RyaW5nIj09dHlwZW9mIGUpe2lmKCJzdHJpbmciPT10eXBlb2YgdD8ocj10LHQ9MCxuPXRoaXMubGVuZ3RoKToic3RyaW5nIj09dHlwZW9mIG4mJihyPW4sbj10aGlzLmxlbmd0aCksMT09PWUubGVuZ3RoKXt2YXIgaT1lLmNoYXJDb2RlQXQoMCk7aTwyNTYmJihlPWkpfWlmKHZvaWQgMCE9PXImJiJzdHJpbmciIT10eXBlb2Ygcil0aHJvdyBuZXcgVHlwZUVycm9yKCJlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nIik7aWYoInN0cmluZyI9PXR5cGVvZiByJiYhWnQuaXNFbmNvZGluZyhyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK3IpfWVsc2UibnVtYmVyIj09dHlwZW9mIGUmJihlJj0yNTUpO2lmKHQ8MHx8dGhpcy5sZW5ndGg8dHx8dGhpcy5sZW5ndGg8bil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiT3V0IG9mIHJhbmdlIGluZGV4Iik7aWYobjw9dClyZXR1cm4gdGhpczt2YXIgbztpZih0Pj4+PTAsbj12b2lkIDA9PT1uP3RoaXMubGVuZ3RoOm4+Pj4wLGV8fChlPTApLCJudW1iZXIiPT10eXBlb2YgZSlmb3Iobz10O288bjsrK28pdGhpc1tvXT1lO2Vsc2V7dmFyIHM9b24oZSk/ZTpVbihuZXcgWnQoZSxyKS50b1N0cmluZygpKSxhPXMubGVuZ3RoO2ZvcihvPTA7bzxuLXQ7KytvKXRoaXNbbyt0XT1zW28lYV19cmV0dXJuIHRoaXN9O3ZhciBJbj0vW14rXC8wLTlBLVphLXotX10vZztmdW5jdGlvbiBPbihlKXtyZXR1cm4gZTwxNj8iMCIrZS50b1N0cmluZygxNik6ZS50b1N0cmluZygxNil9ZnVuY3Rpb24gVW4oZSx0KXt2YXIgbjt0PXR8fDEvMDtmb3IodmFyIHI9ZS5sZW5ndGgsaT1udWxsLG89W10scz0wO3M8cjsrK3Mpe2lmKChuPWUuY2hhckNvZGVBdChzKSk+NTUyOTUmJm48NTczNDQpe2lmKCFpKXtpZihuPjU2MzE5KXsodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aWYocysxPT09cil7KHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWk9bjtjb250aW51ZX1pZihuPDU2MzIwKXsodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSksaT1uO2NvbnRpbnVlfW49NjU1MzYrKGktNTUyOTY8PDEwfG4tNTYzMjApfWVsc2UgaSYmKHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2lmKGk9bnVsbCxuPDEyOCl7aWYoKHQtPTEpPDApYnJlYWs7by5wdXNoKG4pfWVsc2UgaWYobjwyMDQ4KXtpZigodC09Mik8MClicmVhaztvLnB1c2gobj4+NnwxOTIsNjMmbnwxMjgpfWVsc2UgaWYobjw2NTUzNil7aWYoKHQtPTMpPDApYnJlYWs7by5wdXNoKG4+PjEyfDIyNCxuPj42JjYzfDEyOCw2MyZufDEyOCl9ZWxzZXtpZighKG48MTExNDExMikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvZGUgcG9pbnQiKTtpZigodC09NCk8MClicmVhaztvLnB1c2gobj4+MTh8MjQwLG4+PjEyJjYzfDEyOCxuPj42JjYzfDEyOCw2MyZufDEyOCl9fXJldHVybiBvfWZ1bmN0aW9uIExuKGUpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLHM7S3R8fEp0KCk7dmFyIGE9ZS5sZW5ndGg7aWYoYSU0PjApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Iik7bz0iPSI9PT1lW2EtMl0/MjoiPSI9PT1lW2EtMV0/MTowLHM9bmV3IHh0KDMqYS80LW8pLHI9bz4wP2EtNDphO3ZhciBjPTA7Zm9yKHQ9MCxuPTA7dDxyO3QrPTQsbis9MylpPWp0W2UuY2hhckNvZGVBdCh0KV08PDE4fGp0W2UuY2hhckNvZGVBdCh0KzEpXTw8MTJ8anRbZS5jaGFyQ29kZUF0KHQrMildPDw2fGp0W2UuY2hhckNvZGVBdCh0KzMpXSxzW2MrK109aT4+MTYmMjU1LHNbYysrXT1pPj44JjI1NSxzW2MrK109MjU1Jmk7cmV0dXJuIDI9PT1vPyhpPWp0W2UuY2hhckNvZGVBdCh0KV08PDJ8anRbZS5jaGFyQ29kZUF0KHQrMSldPj40LHNbYysrXT0yNTUmaSk6MT09PW8mJihpPWp0W2UuY2hhckNvZGVBdCh0KV08PDEwfGp0W2UuY2hhckNvZGVBdCh0KzEpXTw8NHxqdFtlLmNoYXJDb2RlQXQodCsyKV0+PjIsc1tjKytdPWk+PjgmMjU1LHNbYysrXT0yNTUmaSksc30oZnVuY3Rpb24oZSl7aWYoKGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpbT9lLnRyaW0oKTplLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX0oZSkucmVwbGFjZShJbiwiIikpLmxlbmd0aDwyKXJldHVybiIiO2Zvcig7ZS5sZW5ndGglNCE9MDspZSs9Ij0iO3JldHVybiBlfShlKSl9ZnVuY3Rpb24gSG4oZSx0LG4scil7Zm9yKHZhciBpPTA7aTxyJiYhKGkrbj49dC5sZW5ndGh8fGk+PWUubGVuZ3RoKTsrK2kpdFtpK25dPWVbaV07cmV0dXJuIGl9ZnVuY3Rpb24gTW4oZSl7cmV0dXJuIG51bGwhPWUmJighIWUuX2lzQnVmZmVyfHxObihlKXx8ZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGUucmVhZEZsb2F0TEUmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLnNsaWNlJiZObihlLnNsaWNlKDAsMCkpfShlKSl9ZnVuY3Rpb24gTm4oZSl7cmV0dXJuISFlLmNvbnN0cnVjdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihlKX12YXIgcW49T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsQnVmZmVyOlp0LElOU1BFQ1RfTUFYX0JZVEVTOjUwLFNsb3dCdWZmZXI6ZnVuY3Rpb24oZSl7cmV0dXJuK2UhPWUmJihlPTApLFp0LmFsbG9jKCtlKX0saXNCdWZmZXI6TW4sa01heExlbmd0aDpZdH0pLGpuPXtleHBvcnRzOnt9fSx4bj17fSxLbj17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoS24sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEtuLmRlZmF1bHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGgsbj10JTQ7aWYoIW4pcmV0dXJuIGU7dmFyIHI9dCxpPTQtbixvPXQraSxzPVp0LmFsbG9jKG8pO2ZvcihzLndyaXRlKGUpO2ktLTspcy53cml0ZSgiPSIscisrKTtyZXR1cm4gcy50b1N0cmluZygpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeG4sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBKbj1LbjtmdW5jdGlvbiBCbihlLHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0idXRmOCIpLFp0LmlzQnVmZmVyKGUpP1duKGUudG9TdHJpbmcoImJhc2U2NCIpKTpXbihadC5mcm9tKGUsdCkudG9TdHJpbmcoImJhc2U2NCIpKX1mdW5jdGlvbiBGbihlKXtyZXR1cm4gZT1lLnRvU3RyaW5nKCksSm4uZGVmYXVsdChlKS5yZXBsYWNlKC9cLS9nLCIrIikucmVwbGFjZSgvXy9nLCIvIil9ZnVuY3Rpb24gV24oZSl7cmV0dXJuIGUucmVwbGFjZSgvPS9nLCIiKS5yZXBsYWNlKC9cKy9nLCItIikucmVwbGFjZSgvXC8vZywiXyIpfXZhciAkbix6bj1Cbjt6bi5lbmNvZGU9Qm4sem4uZGVjb2RlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSJ1dGY4IiksWnQuZnJvbShGbihlKSwiYmFzZTY0IikudG9TdHJpbmcodCl9LHpuLnRvQmFzZTY0PUZuLHpuLmZyb21CYXNlNjQ9V24sem4udG9CdWZmZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIFp0LmZyb20oRm4oZSksImJhc2U2NCIpfSx4bi5kZWZhdWx0PXpuLCgkbj1qbikuZXhwb3J0cz14bi5kZWZhdWx0LCRuLmV4cG9ydHMuZGVmYXVsdD0kbi5leHBvcnRzO3ZhciBWbj1qbi5leHBvcnRzLFluPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKHQsbil7dmFyIHI9e307IWZ1bmN0aW9uKGUpe2UuX19lc01vZHVsZT0hMCxlLmRpZ2VzdExlbmd0aD0zMixlLmJsb2NrU2l6ZT02NDt2YXIgdD1uZXcgVWludDMyQXJyYXkoWzExMTYzNTI0MDgsMTg5OTQ0NzQ0MSwzMDQ5MzIzNDcxLDM5MjEwMDk1NzMsOTYxOTg3MTYzLDE1MDg5NzA5OTMsMjQ1MzYzNTc0OCwyODcwNzYzMjIxLDM2MjQzODEwODAsMzEwNTk4NDAxLDYwNzIyNTI3OCwxNDI2ODgxOTg3LDE5MjUwNzgzODgsMjE2MjA3ODIwNiwyNjE0ODg4MTAzLDMyNDgyMjI1ODAsMzgzNTM5MDQwMSw0MDIyMjI0Nzc0LDI2NDM0NzA3OCw2MDQ4MDc2MjgsNzcwMjU1OTgzLDEyNDkxNTAxMjIsMTU1NTA4MTY5MiwxOTk2MDY0OTg2LDI1NTQyMjA4ODIsMjgyMTgzNDM0OSwyOTUyOTk2ODA4LDMyMTAzMTM2NzEsMzMzNjU3MTg5MSwzNTg0NTI4NzExLDExMzkyNjk5MywzMzgyNDE4OTUsNjY2MzA3MjA1LDc3MzUyOTkxMiwxMjk0NzU3MzcyLDEzOTYxODIyOTEsMTY5NTE4MzcwMCwxOTg2NjYxMDUxLDIxNzcwMjYzNTAsMjQ1Njk1NjAzNywyNzMwNDg1OTIxLDI4MjAzMDI0MTEsMzI1OTczMDgwMCwzMzQ1NzY0NzcxLDM1MTYwNjU4MTcsMzYwMDM1MjgwNCw0MDk0NTcxOTA5LDI3NTQyMzM0NCw0MzAyMjc3MzQsNTA2OTQ4NjE2LDY1OTA2MDU1Niw4ODM5OTc4NzcsOTU4MTM5NTcxLDEzMjI4MjIyMTgsMTUzNzAwMjA2MywxNzQ3ODczNzc5LDE5NTU1NjIyMjIsMjAyNDEwNDgxNSwyMjI3NzMwNDUyLDIzNjE4NTI0MjQsMjQyODQzNjQ3NCwyNzU2NzM0MTg3LDMyMDQwMzE0NzksMzMyOTMyNTI5OF0pO2Z1bmN0aW9uIG4oZSxuLHIsaSxvKXtmb3IodmFyIHMsYSxjLHUsbCxkLGgsZixwLGcsdix5LG07bz49NjQ7KXtmb3Iocz1uWzBdLGE9blsxXSxjPW5bMl0sdT1uWzNdLGw9bls0XSxkPW5bNV0saD1uWzZdLGY9bls3XSxnPTA7ZzwxNjtnKyspdj1pKzQqZyxlW2ddPSgyNTUmclt2XSk8PDI0fCgyNTUmclt2KzFdKTw8MTZ8KDI1NSZyW3YrMl0pPDw4fDI1NSZyW3YrM107Zm9yKGc9MTY7Zzw2NDtnKyspeT0oKHA9ZVtnLTJdKT4+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+Pj4wJjI1NSxvLnJlc2V0KCksby51cGRhdGUodCksby51cGRhdGUoYSksby5maW5pc2godSk7Zm9yKHZhciBmPTA7ZjxzO2YrKyljW2ZdPXVbZl07Zm9yKGY9MjtmPD1uO2YrKyl7by5yZXNldCgpLG8udXBkYXRlKHUpLmZpbmlzaCh1KTtmb3IodmFyIHA9MDtwPHM7cCsrKWNbcF1ePXVbcF19Zm9yKGY9MDtmPHMmJmQqcytmPHI7ZisrKWxbZCpzK2ZdPWNbZl19Zm9yKGQ9MDtkPHM7ZCsrKWNbZF09dVtkXT0wO2ZvcihkPTA7ZDw0O2QrKylhW2RdPTA7cmV0dXJuIG8uY2xlYW4oKSxsfWUuaGtkZj11LGUucGJrZGYyPWx9KHIpO3ZhciBpPXIuZGVmYXVsdDtmb3IodmFyIG8gaW4gcilpW29dPXJbb107ZS5leHBvcnRzPWl9KCl9KFluKTt2YXIgR249VChZbi5leHBvcnRzKSxYbj1jcnlwdG87Y29uc3QgWm49ZT0+ZSBpbnN0YW5jZW9mIENyeXB0b0tleSxRbj1uZXcgVGV4dEVuY29kZXIsZXI9bmV3IFRleHREZWNvZGVyO2NvbnN0IHRyPWU9PntsZXQgdD1lO3QgaW5zdGFuY2VvZiBVaW50OEFycmF5JiYodD1lci5kZWNvZGUodCkpLHQ9dC5yZXBsYWNlKC8tL2csIisiKS5yZXBsYWNlKC9fL2csIi8iKS5yZXBsYWNlKC9ccy9nLCIiKTt0cnl7cmV0dXJuKGU9Pntjb25zdCB0PWF0b2IoZSksbj1uZXcgVWludDhBcnJheSh0Lmxlbmd0aCk7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspbltlXT10LmNoYXJDb2RlQXQoZSk7cmV0dXJuIG59KSh0KX1jYXRjaChlKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgaW5wdXQgdG8gYmUgZGVjb2RlZCBpcyBub3QgY29ycmVjdGx5IGVuY29kZWQuIil9fTtjbGFzcyBuciBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGUpe3ZhciB0O3N1cGVyKGUpLHRoaXMuY29kZT0iRVJSX0pPU0VfR0VORVJJQyIsdGhpcy5uYW1lPXRoaXMuY29uc3RydWN0b3IubmFtZSxudWxsPT09KHQ9RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpfHx2b2lkIDA9PT10fHx0LmNhbGwoRXJyb3IsdGhpcyx0aGlzLmNvbnN0cnVjdG9yKX1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pPU0VfR0VORVJJQyJ9fWNsYXNzIHJyIGV4dGVuZHMgbnJ7Y29uc3RydWN0b3IoZSx0PSJ1bnNwZWNpZmllZCIsbj0idW5zcGVjaWZpZWQiKXtzdXBlcihlKSx0aGlzLmNvZGU9IkVSUl9KV1RfQ0xBSU1fVkFMSURBVElPTl9GQUlMRUQiLHRoaXMuY2xhaW09dCx0aGlzLnJlYXNvbj1ufXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldUX0NMQUlNX1ZBTElEQVRJT05fRkFJTEVEIn19Y2xhc3MgaXIgZXh0ZW5kcyBucntjb25zdHJ1Y3RvcihlLHQ9InVuc3BlY2lmaWVkIixuPSJ1bnNwZWNpZmllZCIpe3N1cGVyKGUpLHRoaXMuY29kZT0iRVJSX0pXVF9FWFBJUkVEIix0aGlzLmNsYWltPXQsdGhpcy5yZWFzb249bn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pXVF9FWFBJUkVEIn19Y2xhc3Mgb3IgZXh0ZW5kcyBucntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSk9TRV9BTEdfTk9UX0FMTE9XRUQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSk9TRV9BTEdfTk9UX0FMTE9XRUQifX1jbGFzcyBzciBleHRlbmRzIG5ye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KT1NFX05PVF9TVVBQT1JURUQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSk9TRV9OT1RfU1VQUE9SVEVEIn19Y2xhc3MgYXIgZXh0ZW5kcyBucntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSldTX0lOVkFMSUQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldTX0lOVkFMSUQifX1jbGFzcyBjciBleHRlbmRzIG5ye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KV1RfSU5WQUxJRCJ9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KV1RfSU5WQUxJRCJ9fWNsYXNzIHVyIGV4dGVuZHMgbnJ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pXS1NfSU5WQUxJRCJ9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KV0tTX0lOVkFMSUQifX1jbGFzcyBsciBleHRlbmRzIG5ye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KV0tTX05PX01BVENISU5HX0tFWSIsdGhpcy5tZXNzYWdlPSJubyBhcHBsaWNhYmxlIGtleSBmb3VuZCBpbiB0aGUgSlNPTiBXZWIgS2V5IFNldCJ9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KV0tTX05PX01BVENISU5HX0tFWSJ9fWNsYXNzIGRyIGV4dGVuZHMgbnJ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pXS1NfTVVMVElQTEVfTUFUQ0hJTkdfS0VZUyIsdGhpcy5tZXNzYWdlPSJtdWx0aXBsZSBtYXRjaGluZyBrZXlzIGZvdW5kIGluIHRoZSBKU09OIFdlYiBLZXkgU2V0In1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pXS1NfTVVMVElQTEVfTUFUQ0hJTkdfS0VZUyJ9fWNsYXNzIGhyIGV4dGVuZHMgbnJ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pXU19TSUdOQVRVUkVfVkVSSUZJQ0FUSU9OX0ZBSUxFRCIsdGhpcy5tZXNzYWdlPSJzaWduYXR1cmUgdmVyaWZpY2F0aW9uIGZhaWxlZCJ9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KV1NfU0lHTkFUVVJFX1ZFUklGSUNBVElPTl9GQUlMRUQifX1mdW5jdGlvbiBmcigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBXZWJTb2NrZXRQYWlyfWZ1bmN0aW9uIHByKCl7dHJ5e3JldHVybiB2b2lkIDAhPT12ZS52ZXJzaW9ucy5ub2RlfWNhdGNoKGUpe3JldHVybiExfX1mdW5jdGlvbiBncihlLHQ9ImFsZ29yaXRobS5uYW1lIil7cmV0dXJuIG5ldyBUeXBlRXJyb3IoYENyeXB0b0tleSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgb3BlcmF0aW9uLCBpdHMgJHt0fSBtdXN0IGJlICR7ZX1gKX1mdW5jdGlvbiB2cihlLHQpe3JldHVybiBlLm5hbWU9PT10fWZ1bmN0aW9uIHlyKGUpe3JldHVybiBwYXJzZUludChlLm5hbWUuc2xpY2UoNCksMTApfWZ1bmN0aW9uIG1yKGUsdCwuLi5uKXtzd2l0Y2godCl7Y2FzZSJIUzI1NiI6Y2FzZSJIUzM4NCI6Y2FzZSJIUzUxMiI6e2lmKCF2cihlLmFsZ29yaXRobSwiSE1BQyIpKXRocm93IGdyKCJITUFDIik7Y29uc3Qgbj1wYXJzZUludCh0LnNsaWNlKDIpLDEwKTtpZih5cihlLmFsZ29yaXRobS5oYXNoKSE9PW4pdGhyb3cgZ3IoYFNIQS0ke259YCwiYWxnb3JpdGhtLmhhc2giKTticmVha31jYXNlIlJTMjU2IjpjYXNlIlJTMzg0IjpjYXNlIlJTNTEyIjp7aWYoIXZyKGUuYWxnb3JpdGhtLCJSU0FTU0EtUEtDUzEtdjFfNSIpKXRocm93IGdyKCJSU0FTU0EtUEtDUzEtdjFfNSIpO2NvbnN0IG49cGFyc2VJbnQodC5zbGljZSgyKSwxMCk7aWYoeXIoZS5hbGdvcml0aG0uaGFzaCkhPT1uKXRocm93IGdyKGBTSEEtJHtufWAsImFsZ29yaXRobS5oYXNoIik7YnJlYWt9Y2FzZSJQUzI1NiI6Y2FzZSJQUzM4NCI6Y2FzZSJQUzUxMiI6e2lmKCF2cihlLmFsZ29yaXRobSwiUlNBLVBTUyIpKXRocm93IGdyKCJSU0EtUFNTIik7Y29uc3Qgbj1wYXJzZUludCh0LnNsaWNlKDIpLDEwKTtpZih5cihlLmFsZ29yaXRobS5oYXNoKSE9PW4pdGhyb3cgZ3IoYFNIQS0ke259YCwiYWxnb3JpdGhtLmhhc2giKTticmVha31jYXNlIHByKCkmJiJFZERTQSI6aWYoIk5PREUtRUQyNTUxOSIhPT1lLmFsZ29yaXRobS5uYW1lJiYiTk9ERS1FRDQ0OCIhPT1lLmFsZ29yaXRobS5uYW1lKXRocm93IGdyKCJOT0RFLUVEMjU1MTkgb3IgTk9ERS1FRDQ0OCIpO2JyZWFrO2Nhc2UgZnIoKSYmIkVkRFNBIjppZighdnIoZS5hbGdvcml0aG0sIk5PREUtRUQyNTUxOSIpKXRocm93IGdyKCJOT0RFLUVEMjU1MTkiKTticmVhaztjYXNlIkVTMjU2IjpjYXNlIkVTMzg0IjpjYXNlIkVTNTEyIjp7aWYoIXZyKGUuYWxnb3JpdGhtLCJFQ0RTQSIpKXRocm93IGdyKCJFQ0RTQSIpO2NvbnN0IG49ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UiRVMyNTYiOnJldHVybiJQLTI1NiI7Y2FzZSJFUzM4NCI6cmV0dXJuIlAtMzg0IjtjYXNlIkVTNTEyIjpyZXR1cm4iUC01MjEiO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bnJlYWNoYWJsZSIpfX0odCk7aWYoZS5hbGdvcml0aG0ubmFtZWRDdXJ2ZSE9PW4pdGhyb3cgZ3IobiwiYWxnb3JpdGhtLm5hbWVkQ3VydmUiKTticmVha31kZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoIkNyeXB0b0tleSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgb3BlcmF0aW9uIil9IWZ1bmN0aW9uKGUsdCl7aWYodC5sZW5ndGgmJiF0LnNvbWUoKHQ9PmUudXNhZ2VzLmluY2x1ZGVzKHQpKSkpe2xldCBlPSJDcnlwdG9LZXkgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIG9wZXJhdGlvbiwgaXRzIHVzYWdlcyBtdXN0IGluY2x1ZGUgIjtpZih0Lmxlbmd0aD4yKXtjb25zdCBuPXQucG9wKCk7ZSs9YG9uZSBvZiAke3Quam9pbigiLCAiKX0sIG9yICR7bn0uYH1lbHNlIDI9PT10Lmxlbmd0aD9lKz1gb25lIG9mICR7dFswXX0gb3IgJHt0WzFdfS5gOmUrPWAke3RbMF19LmA7dGhyb3cgbmV3IFR5cGVFcnJvcihlKX19KGUsbil9dmFyIHdyPShlLC4uLnQpPT57bGV0IG49IktleSBtdXN0IGJlICI7aWYodC5sZW5ndGg+Mil7Y29uc3QgZT10LnBvcCgpO24rPWBvbmUgb2YgdHlwZSAke3Quam9pbigiLCAiKX0sIG9yICR7ZX0uYH1lbHNlIDI9PT10Lmxlbmd0aD9uKz1gb25lIG9mIHR5cGUgJHt0WzBdfSBvciAke3RbMV19LmA6bis9YG9mIHR5cGUgJHt0WzBdfS5gO3JldHVybiBudWxsPT1lP24rPWAgUmVjZWl2ZWQgJHtlfWA6ImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUubmFtZT9uKz1gIFJlY2VpdmVkIGZ1bmN0aW9uICR7ZS5uYW1lfWA6Im9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT1lJiZlLmNvbnN0cnVjdG9yJiZlLmNvbnN0cnVjdG9yLm5hbWUmJihuKz1gIFJlY2VpdmVkIGFuIGluc3RhbmNlIG9mICR7ZS5jb25zdHJ1Y3Rvci5uYW1lfWApLG59LF9yPWU9PlpuKGUpO2NvbnN0IFNyPVsiQ3J5cHRvS2V5Il07ZnVuY3Rpb24gYnIoZSl7aWYoIm9iamVjdCIhPXR5cGVvZih0PWUpfHxudWxsPT09dHx8IltvYmplY3QgT2JqZWN0XSIhPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkpcmV0dXJuITE7dmFyIHQ7aWYobnVsbD09PU9iamVjdC5nZXRQcm90b3R5cGVPZihlKSlyZXR1cm4hMDtsZXQgbj1lO2Zvcig7bnVsbCE9PU9iamVjdC5nZXRQcm90b3R5cGVPZihuKTspbj1PYmplY3QuZ2V0UHJvdG90eXBlT2Yobik7cmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihlKT09PW59Y29uc3Qga3I9YXN5bmMgZT0+e3ZhciB0LG47Y29uc3R7YWxnb3JpdGhtOnIsa2V5VXNhZ2VzOml9PWZ1bmN0aW9uKGUpe2xldCB0LG47c3dpdGNoKGUua3R5KXtjYXNlIm9jdCI6c3dpdGNoKGUuYWxnKXtjYXNlIkhTMjU2IjpjYXNlIkhTMzg0IjpjYXNlIkhTNTEyIjp0PXtuYW1lOiJITUFDIixoYXNoOmBTSEEtJHtlLmFsZy5zbGljZSgtMyl9YH0sbj1bInNpZ24iLCJ2ZXJpZnkiXTticmVhaztjYXNlIkExMjhDQkMtSFMyNTYiOmNhc2UiQTE5MkNCQy1IUzM4NCI6Y2FzZSJBMjU2Q0JDLUhTNTEyIjp0aHJvdyBuZXcgc3IoYCR7ZS5hbGd9IGtleXMgY2Fubm90IGJlIGltcG9ydGVkIGFzIENyeXB0b0tleSBpbnN0YW5jZXNgKTtjYXNlIkExMjhHQ00iOmNhc2UiQTE5MkdDTSI6Y2FzZSJBMjU2R0NNIjpjYXNlIkExMjhHQ01LVyI6Y2FzZSJBMTkyR0NNS1ciOmNhc2UiQTI1NkdDTUtXIjp0PXtuYW1lOiJBRVMtR0NNIn0sbj1bImVuY3J5cHQiLCJkZWNyeXB0Il07YnJlYWs7Y2FzZSJBMTI4S1ciOmNhc2UiQTE5MktXIjpjYXNlIkEyNTZLVyI6dD17bmFtZToiQUVTLUtXIn0sbj1bIndyYXBLZXkiLCJ1bndyYXBLZXkiXTticmVhaztjYXNlIlBCRVMyLUhTMjU2K0ExMjhLVyI6Y2FzZSJQQkVTMi1IUzM4NCtBMTkyS1ciOmNhc2UiUEJFUzItSFM1MTIrQTI1NktXIjp0PXtuYW1lOiJQQktERjIifSxuPVsiZGVyaXZlQml0cyJdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IHNyKCdJbnZhbGlkIG9yIHVuc3VwcG9ydGVkIEpXSyAiYWxnIiAoQWxnb3JpdGhtKSBQYXJhbWV0ZXIgdmFsdWUnKX1icmVhaztjYXNlIlJTQSI6c3dpdGNoKGUuYWxnKXtjYXNlIlBTMjU2IjpjYXNlIlBTMzg0IjpjYXNlIlBTNTEyIjp0PXtuYW1lOiJSU0EtUFNTIixoYXNoOmBTSEEtJHtlLmFsZy5zbGljZSgtMyl9YH0sbj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztjYXNlIlJTMjU2IjpjYXNlIlJTMzg0IjpjYXNlIlJTNTEyIjp0PXtuYW1lOiJSU0FTU0EtUEtDUzEtdjFfNSIsaGFzaDpgU0hBLSR7ZS5hbGcuc2xpY2UoLTMpfWB9LG49ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7Y2FzZSJSU0EtT0FFUCI6Y2FzZSJSU0EtT0FFUC0yNTYiOmNhc2UiUlNBLU9BRVAtMzg0IjpjYXNlIlJTQS1PQUVQLTUxMiI6dD17bmFtZToiUlNBLU9BRVAiLGhhc2g6YFNIQS0ke3BhcnNlSW50KGUuYWxnLnNsaWNlKC0zKSwxMCl8fDF9YH0sbj1lLmQ/WyJkZWNyeXB0IiwidW53cmFwS2V5Il06WyJlbmNyeXB0Iiwid3JhcEtleSJdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IHNyKCdJbnZhbGlkIG9yIHVuc3VwcG9ydGVkIEpXSyAiYWxnIiAoQWxnb3JpdGhtKSBQYXJhbWV0ZXIgdmFsdWUnKX1icmVhaztjYXNlIkVDIjpzd2l0Y2goZS5hbGcpe2Nhc2UiRVMyNTYiOnQ9e25hbWU6IkVDRFNBIixuYW1lZEN1cnZlOiJQLTI1NiJ9LG49ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7Y2FzZSJFUzM4NCI6dD17bmFtZToiRUNEU0EiLG5hbWVkQ3VydmU6IlAtMzg0In0sbj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztjYXNlIkVTNTEyIjp0PXtuYW1lOiJFQ0RTQSIsbmFtZWRDdXJ2ZToiUC01MjEifSxuPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2Nhc2UiRUNESC1FUyI6Y2FzZSJFQ0RILUVTK0ExMjhLVyI6Y2FzZSJFQ0RILUVTK0ExOTJLVyI6Y2FzZSJFQ0RILUVTK0EyNTZLVyI6dD17bmFtZToiRUNESCIsbmFtZWRDdXJ2ZTplLmNydn0sbj1lLmQ/WyJkZXJpdmVCaXRzIl06W107YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgc3IoJ0ludmFsaWQgb3IgdW5zdXBwb3J0ZWQgSldLICJhbGciIChBbGdvcml0aG0pIFBhcmFtZXRlciB2YWx1ZScpfWJyZWFrO2Nhc2UoZnIoKXx8cHIoKSkmJiJPS1AiOmlmKCJFZERTQSIhPT1lLmFsZyl0aHJvdyBuZXcgc3IoJ0ludmFsaWQgb3IgdW5zdXBwb3J0ZWQgSldLICJhbGciIChBbGdvcml0aG0pIFBhcmFtZXRlciB2YWx1ZScpO3N3aXRjaChlLmNydil7Y2FzZSJFZDI1NTE5Ijp0PXtuYW1lOiJOT0RFLUVEMjU1MTkiLG5hbWVkQ3VydmU6Ik5PREUtRUQyNTUxOSJ9LG49ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7Y2FzZSBwcigpJiYiRWQ0NDgiOnQ9e25hbWU6Ik5PREUtRUQ0NDgiLG5hbWVkQ3VydmU6Ik5PREUtRUQ0NDgifSxuPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IHNyKCdJbnZhbGlkIG9yIHVuc3VwcG9ydGVkIEpXSyAiY3J2IiAoU3VidHlwZSBvZiBLZXkgUGFpcikgUGFyYW1ldGVyIHZhbHVlJyl9YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgc3IoJ0ludmFsaWQgb3IgdW5zdXBwb3J0ZWQgSldLICJrdHkiIChLZXkgVHlwZSkgUGFyYW1ldGVyIHZhbHVlJyl9cmV0dXJue2FsZ29yaXRobTp0LGtleVVzYWdlczpufX0oZSksbz1bcixudWxsIT09KHQ9ZS5leHQpJiZ2b2lkIDAhPT10JiZ0LG51bGwhPT0obj1lLmtleV9vcHMpJiZ2b2lkIDAhPT1uP246aV07aWYoIlBCS0RGMiI9PT1yLm5hbWUpcmV0dXJuIFhuLnN1YnRsZS5pbXBvcnRLZXkoInJhdyIsdHIoZS5rKSwuLi5vKTtjb25zdCBzPXsuLi5lfTtyZXR1cm4gZGVsZXRlIHMuYWxnLFhuLnN1YnRsZS5pbXBvcnRLZXkoImp3ayIscywuLi5vKX07Y29uc3QgRXI9KGUsdCxuKT0+e2Uuc3RhcnRzV2l0aCgiSFMiKXx8ImRpciI9PT1lfHxlLnN0YXJ0c1dpdGgoIlBCRVMyIil8fC9eQVxkezN9KD86R0NNKT9LVyQvLnRlc3QoZSk/KGU9PntpZighKGUgaW5zdGFuY2VvZiBVaW50OEFycmF5KSl7aWYoIV9yKGUpKXRocm93IG5ldyBUeXBlRXJyb3Iod3IoZSwuLi5TciwiVWludDhBcnJheSIpKTtpZigic2VjcmV0IiE9PWUudHlwZSl0aHJvdyBuZXcgVHlwZUVycm9yKGAke1NyLmpvaW4oIiBvciAiKX0gaW5zdGFuY2VzIGZvciBzeW1tZXRyaWMgYWxnb3JpdGhtcyBtdXN0IGJlIG9mIHR5cGUgInNlY3JldCJgKX19KSh0KTooKGUsdCk9PntpZighX3IoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcih3cihlLC4uLlNyKSk7aWYoInNlY3JldCI9PT1lLnR5cGUpdGhyb3cgbmV3IFR5cGVFcnJvcihgJHtTci5qb2luKCIgb3IgIil9IGluc3RhbmNlcyBmb3IgYXN5bW1ldHJpYyBhbGdvcml0aG1zIG11c3Qgbm90IGJlIG9mIHR5cGUgInNlY3JldCJgKTtpZigic2lnbiI9PT10JiYicHVibGljIj09PWUudHlwZSl0aHJvdyBuZXcgVHlwZUVycm9yKGAke1NyLmpvaW4oIiBvciAiKX0gaW5zdGFuY2VzIGZvciBhc3ltbWV0cmljIGFsZ29yaXRobSBzaWduaW5nIG11c3QgYmUgb2YgdHlwZSAicHJpdmF0ZSJgKTtpZigiZGVjcnlwdCI9PT10JiYicHVibGljIj09PWUudHlwZSl0aHJvdyBuZXcgVHlwZUVycm9yKGAke1NyLmpvaW4oIiBvciAiKX0gaW5zdGFuY2VzIGZvciBhc3ltbWV0cmljIGFsZ29yaXRobSBkZWNyeXB0aW9uIG11c3QgYmUgb2YgdHlwZSAicHJpdmF0ZSJgKTtpZihlLmFsZ29yaXRobSYmInZlcmlmeSI9PT10JiYicHJpdmF0ZSI9PT1lLnR5cGUpdGhyb3cgbmV3IFR5cGVFcnJvcihgJHtTci5qb2luKCIgb3IgIil9IGluc3RhbmNlcyBmb3IgYXN5bW1ldHJpYyBhbGdvcml0aG0gdmVyaWZ5aW5nIG11c3QgYmUgb2YgdHlwZSAicHVibGljImApO2lmKGUuYWxnb3JpdGhtJiYiZW5jcnlwdCI9PT10JiYicHJpdmF0ZSI9PT1lLnR5cGUpdGhyb3cgbmV3IFR5cGVFcnJvcihgJHtTci5qb2luKCIgb3IgIil9IGluc3RhbmNlcyBmb3IgYXN5bW1ldHJpYyBhbGdvcml0aG0gZW5jcnlwdGlvbiBtdXN0IGJlIG9mIHR5cGUgInB1YmxpYyJgKX0pKHQsbil9O2NvbnN0IFRyPWFzeW5jKGUsdCxuLHIpPT57Y29uc3QgaT1hd2FpdCBmdW5jdGlvbihlLHQsbil7aWYoWm4odCkpcmV0dXJuIG1yKHQsZSxuKSx0O2lmKHQgaW5zdGFuY2VvZiBVaW50OEFycmF5KXtpZighZS5zdGFydHNXaXRoKCJIUyIpKXRocm93IG5ldyBUeXBlRXJyb3Iod3IodCwuLi5TcikpO3JldHVybiBYbi5zdWJ0bGUuaW1wb3J0S2V5KCJyYXciLHQse2hhc2g6YFNIQS0ke2Uuc2xpY2UoLTMpfWAsbmFtZToiSE1BQyJ9LCExLFtuXSl9dGhyb3cgbmV3IFR5cGVFcnJvcih3cih0LC4uLlNyLCJVaW50OEFycmF5IikpfShlLHQsInZlcmlmeSIpOygoZSx0KT0+e2lmKGUuc3RhcnRzV2l0aCgiUlMiKXx8ZS5zdGFydHNXaXRoKCJQUyIpKXtjb25zdHttb2R1bHVzTGVuZ3RoOm59PXQuYWxnb3JpdGhtO2lmKCJudW1iZXIiIT10eXBlb2Ygbnx8bjwyMDQ4KXRocm93IG5ldyBUeXBlRXJyb3IoYCR7ZX0gcmVxdWlyZXMga2V5IG1vZHVsdXNMZW5ndGggdG8gYmUgMjA0OCBiaXRzIG9yIGxhcmdlcmApfX0pKGUsaSk7Y29uc3Qgbz1mdW5jdGlvbihlLHQpe2NvbnN0IG49YFNIQS0ke2Uuc2xpY2UoLTMpfWA7c3dpdGNoKGUpe2Nhc2UiSFMyNTYiOmNhc2UiSFMzODQiOmNhc2UiSFM1MTIiOnJldHVybntoYXNoOm4sbmFtZToiSE1BQyJ9O2Nhc2UiUFMyNTYiOmNhc2UiUFMzODQiOmNhc2UiUFM1MTIiOnJldHVybntoYXNoOm4sbmFtZToiUlNBLVBTUyIsc2FsdExlbmd0aDplLnNsaWNlKC0zKT4+M307Y2FzZSJSUzI1NiI6Y2FzZSJSUzM4NCI6Y2FzZSJSUzUxMiI6cmV0dXJue2hhc2g6bixuYW1lOiJSU0FTU0EtUEtDUzEtdjFfNSJ9O2Nhc2UiRVMyNTYiOmNhc2UiRVMzODQiOmNhc2UiRVM1MTIiOnJldHVybntoYXNoOm4sbmFtZToiRUNEU0EiLG5hbWVkQ3VydmU6dC5uYW1lZEN1cnZlfTtjYXNlKGZyKCl8fHByKCkpJiYiRWREU0EiOmNvbnN0e25hbWVkQ3VydmU6cn09dDtyZXR1cm57bmFtZTpyLG5hbWVkQ3VydmU6cn07ZGVmYXVsdDp0aHJvdyBuZXcgc3IoYGFsZyAke2V9IGlzIG5vdCBzdXBwb3J0ZWQgZWl0aGVyIGJ5IEpPU0Ugb3IgeW91ciBqYXZhc2NyaXB0IHJ1bnRpbWVgKX19KGUsaS5hbGdvcml0aG0pO3RyeXtyZXR1cm4gYXdhaXQgWG4uc3VidGxlLnZlcmlmeShvLGksbixyKX1jYXRjaChlKXtyZXR1cm4hMX19O2FzeW5jIGZ1bmN0aW9uIEFyKGUsdCxuKXt2YXIgcjtpZighYnIoZSkpdGhyb3cgbmV3IGFyKCJGbGF0dGVuZWQgSldTIG11c3QgYmUgYW4gb2JqZWN0Iik7aWYodm9pZCAwPT09ZS5wcm90ZWN0ZWQmJnZvaWQgMD09PWUuaGVhZGVyKXRocm93IG5ldyBhcignRmxhdHRlbmVkIEpXUyBtdXN0IGhhdmUgZWl0aGVyIG9mIHRoZSAicHJvdGVjdGVkIiBvciAiaGVhZGVyIiBtZW1iZXJzJyk7aWYodm9pZCAwIT09ZS5wcm90ZWN0ZWQmJiJzdHJpbmciIT10eXBlb2YgZS5wcm90ZWN0ZWQpdGhyb3cgbmV3IGFyKCJKV1MgUHJvdGVjdGVkIEhlYWRlciBpbmNvcnJlY3QgdHlwZSIpO2lmKHZvaWQgMD09PWUucGF5bG9hZCl0aHJvdyBuZXcgYXIoIkpXUyBQYXlsb2FkIG1pc3NpbmciKTtpZigic3RyaW5nIiE9dHlwZW9mIGUuc2lnbmF0dXJlKXRocm93IG5ldyBhcigiSldTIFNpZ25hdHVyZSBtaXNzaW5nIG9yIGluY29ycmVjdCB0eXBlIik7aWYodm9pZCAwIT09ZS5oZWFkZXImJiFicihlLmhlYWRlcikpdGhyb3cgbmV3IGFyKCJKV1MgVW5wcm90ZWN0ZWQgSGVhZGVyIGluY29ycmVjdCB0eXBlIik7bGV0IGk9e307aWYoZS5wcm90ZWN0ZWQpe2NvbnN0IHQ9dHIoZS5wcm90ZWN0ZWQpO3RyeXtpPUpTT04ucGFyc2UoZXIuZGVjb2RlKHQpKX1jYXRjaChlKXt0aHJvdyBuZXcgYXIoIkpXUyBQcm90ZWN0ZWQgSGVhZGVyIGlzIGludmFsaWQiKX19aWYoISgoLi4uZSk9Pntjb25zdCB0PWUuZmlsdGVyKEJvb2xlYW4pO2lmKDA9PT10Lmxlbmd0aHx8MT09PXQubGVuZ3RoKXJldHVybiEwO2xldCBuO2Zvcihjb25zdCBlIG9mIHQpe2NvbnN0IHQ9T2JqZWN0LmtleXMoZSk7aWYobiYmMCE9PW4uc2l6ZSlmb3IoY29uc3QgZSBvZiB0KXtpZihuLmhhcyhlKSlyZXR1cm4hMTtuLmFkZChlKX1lbHNlIG49bmV3IFNldCh0KX1yZXR1cm4hMH0pKGksZS5oZWFkZXIpKXRocm93IG5ldyBhcigiSldTIFByb3RlY3RlZCBhbmQgSldTIFVucHJvdGVjdGVkIEhlYWRlciBQYXJhbWV0ZXIgbmFtZXMgbXVzdCBiZSBkaXNqb2ludCIpO2NvbnN0IG89ey4uLmksLi4uZS5oZWFkZXJ9LHM9ZnVuY3Rpb24oZSx0LG4scixpKXtpZih2b2lkIDAhPT1pLmNyaXQmJnZvaWQgMD09PXIuY3JpdCl0aHJvdyBuZXcgZSgnImNyaXQiIChDcml0aWNhbCkgSGVhZGVyIFBhcmFtZXRlciBNVVNUIGJlIGludGVncml0eSBwcm90ZWN0ZWQnKTtpZighcnx8dm9pZCAwPT09ci5jcml0KXJldHVybiBuZXcgU2V0O2lmKCFBcnJheS5pc0FycmF5KHIuY3JpdCl8fDA9PT1yLmNyaXQubGVuZ3RofHxyLmNyaXQuc29tZSgoZT0+InN0cmluZyIhPXR5cGVvZiBlfHwwPT09ZS5sZW5ndGgpKSl0aHJvdyBuZXcgZSgnImNyaXQiIChDcml0aWNhbCkgSGVhZGVyIFBhcmFtZXRlciBNVVNUIGJlIGFuIGFycmF5IG9mIG5vbi1lbXB0eSBzdHJpbmdzIHdoZW4gcHJlc2VudCcpO2xldCBvO289dm9pZCAwIT09bj9uZXcgTWFwKFsuLi5PYmplY3QuZW50cmllcyhuKSwuLi50LmVudHJpZXMoKV0pOnQ7Zm9yKGNvbnN0IHQgb2Ygci5jcml0KXtpZighby5oYXModCkpdGhyb3cgbmV3IHNyKGBFeHRlbnNpb24gSGVhZGVyIFBhcmFtZXRlciAiJHt0fSIgaXMgbm90IHJlY29nbml6ZWRgKTtpZih2b2lkIDA9PT1pW3RdKXRocm93IG5ldyBlKGBFeHRlbnNpb24gSGVhZGVyIFBhcmFtZXRlciAiJHt0fSIgaXMgbWlzc2luZ2ApO2lmKG8uZ2V0KHQpJiZ2b2lkIDA9PT1yW3RdKXRocm93IG5ldyBlKGBFeHRlbnNpb24gSGVhZGVyIFBhcmFtZXRlciAiJHt0fSIgTVVTVCBiZSBpbnRlZ3JpdHkgcHJvdGVjdGVkYCl9cmV0dXJuIG5ldyBTZXQoci5jcml0KX0oYXIsbmV3IE1hcChbWyJiNjQiLCEwXV0pLG51bGw9PW4/dm9pZCAwOm4uY3JpdCxpLG8pO2xldCBhPSEwO2lmKHMuaGFzKCJiNjQiKSYmKGE9aS5iNjQsImJvb2xlYW4iIT10eXBlb2YgYSkpdGhyb3cgbmV3IGFyKCdUaGUgImI2NCIgKGJhc2U2NHVybC1lbmNvZGUgcGF5bG9hZCkgSGVhZGVyIFBhcmFtZXRlciBtdXN0IGJlIGEgYm9vbGVhbicpO2NvbnN0e2FsZzpjfT1vO2lmKCJzdHJpbmciIT10eXBlb2YgY3x8IWMpdGhyb3cgbmV3IGFyKCdKV1MgImFsZyIgKEFsZ29yaXRobSkgSGVhZGVyIFBhcmFtZXRlciBtaXNzaW5nIG9yIGludmFsaWQnKTtjb25zdCB1PW4mJigoZSx0KT0+e2lmKHZvaWQgMCE9PXQmJighQXJyYXkuaXNBcnJheSh0KXx8dC5zb21lKChlPT4ic3RyaW5nIiE9dHlwZW9mIGUpKSkpdGhyb3cgbmV3IFR5cGVFcnJvcihgIiR7ZX0iIG9wdGlvbiBtdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ3NgKTtpZih0KXJldHVybiBuZXcgU2V0KHQpfSkoImFsZ29yaXRobXMiLG4uYWxnb3JpdGhtcyk7aWYodSYmIXUuaGFzKGMpKXRocm93IG5ldyBvcignImFsZyIgKEFsZ29yaXRobSkgSGVhZGVyIFBhcmFtZXRlciBub3QgYWxsb3dlZCcpO2lmKGEpe2lmKCJzdHJpbmciIT10eXBlb2YgZS5wYXlsb2FkKXRocm93IG5ldyBhcigiSldTIFBheWxvYWQgbXVzdCBiZSBhIHN0cmluZyIpfWVsc2UgaWYoInN0cmluZyIhPXR5cGVvZiBlLnBheWxvYWQmJiEoZS5wYXlsb2FkIGluc3RhbmNlb2YgVWludDhBcnJheSkpdGhyb3cgbmV3IGFyKCJKV1MgUGF5bG9hZCBtdXN0IGJlIGEgc3RyaW5nIG9yIGFuIFVpbnQ4QXJyYXkgaW5zdGFuY2UiKTtsZXQgbD0hMTsiZnVuY3Rpb24iPT10eXBlb2YgdCYmKHQ9YXdhaXQgdChpLGUpLGw9ITApLEVyKGMsdCwidmVyaWZ5Iik7Y29uc3QgZD1mdW5jdGlvbiguLi5lKXtjb25zdCB0PWUucmVkdWNlKCgoZSx7bGVuZ3RoOnR9KT0+ZSt0KSwwKSxuPW5ldyBVaW50OEFycmF5KHQpO2xldCByPTA7cmV0dXJuIGUuZm9yRWFjaCgoZT0+e24uc2V0KGUscikscis9ZS5sZW5ndGh9KSksbn0oUW4uZW5jb2RlKG51bGwhPT0ocj1lLnByb3RlY3RlZCkmJnZvaWQgMCE9PXI/cjoiIiksUW4uZW5jb2RlKCIuIiksInN0cmluZyI9PXR5cGVvZiBlLnBheWxvYWQ/UW4uZW5jb2RlKGUucGF5bG9hZCk6ZS5wYXlsb2FkKSxoPXRyKGUuc2lnbmF0dXJlKTtpZighYXdhaXQgVHIoYyx0LGgsZCkpdGhyb3cgbmV3IGhyO2xldCBmO2Y9YT90cihlLnBheWxvYWQpOiJzdHJpbmciPT10eXBlb2YgZS5wYXlsb2FkP1FuLmVuY29kZShlLnBheWxvYWQpOmUucGF5bG9hZDtjb25zdCBwPXtwYXlsb2FkOmZ9O3JldHVybiB2b2lkIDAhPT1lLnByb3RlY3RlZCYmKHAucHJvdGVjdGVkSGVhZGVyPWkpLHZvaWQgMCE9PWUuaGVhZGVyJiYocC51bnByb3RlY3RlZEhlYWRlcj1lLmhlYWRlciksbD97Li4ucCxrZXk6dH06cH1jb25zdCBScj04NjQwMCxDcj0vXihcZCt8XGQrXC5cZCspID8oc2Vjb25kcz98c2Vjcz98c3xtaW51dGVzP3xtaW5zP3xtfGhvdXJzP3xocnM/fGh8ZGF5cz98ZHx3ZWVrcz98d3x5ZWFycz98eXJzP3x5KSQvaTt2YXIgRHI9ZT0+e2NvbnN0IHQ9Q3IuZXhlYyhlKTtpZighdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIHRpbWUgcGVyaW9kIGZvcm1hdCIpO2NvbnN0IG49cGFyc2VGbG9hdCh0WzFdKTtzd2l0Y2godFsyXS50b0xvd2VyQ2FzZSgpKXtjYXNlInNlYyI6Y2FzZSJzZWNzIjpjYXNlInNlY29uZCI6Y2FzZSJzZWNvbmRzIjpjYXNlInMiOnJldHVybiBNYXRoLnJvdW5kKG4pO2Nhc2UibWludXRlIjpjYXNlIm1pbnV0ZXMiOmNhc2UibWluIjpjYXNlIm1pbnMiOmNhc2UibSI6cmV0dXJuIE1hdGgucm91bmQoNjAqbik7Y2FzZSJob3VyIjpjYXNlImhvdXJzIjpjYXNlImhyIjpjYXNlImhycyI6Y2FzZSJoIjpyZXR1cm4gTWF0aC5yb3VuZCgzNjAwKm4pO2Nhc2UiZGF5IjpjYXNlImRheXMiOmNhc2UiZCI6cmV0dXJuIE1hdGgucm91bmQobipScik7Y2FzZSJ3ZWVrIjpjYXNlIndlZWtzIjpjYXNlInciOnJldHVybiBNYXRoLnJvdW5kKDYwNDgwMCpuKTtkZWZhdWx0OnJldHVybiBNYXRoLnJvdW5kKDMxNTU3NjAwKm4pfX07Y29uc3QgUHI9ZT0+ZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL15hcHBsaWNhdGlvblwvLywiIik7dmFyIElyPShlLHQsbj17fSk9Pntjb25zdHt0eXA6cn09bjtpZihyJiYoInN0cmluZyIhPXR5cGVvZiBlLnR5cHx8UHIoZS50eXApIT09UHIocikpKXRocm93IG5ldyBycigndW5leHBlY3RlZCAidHlwIiBKV1QgaGVhZGVyIHZhbHVlJywidHlwIiwiY2hlY2tfZmFpbGVkIik7bGV0IGk7dHJ5e2k9SlNPTi5wYXJzZShlci5kZWNvZGUodCkpfWNhdGNoKGUpe31pZighYnIoaSkpdGhyb3cgbmV3IGNyKCJKV1QgQ2xhaW1zIFNldCBtdXN0IGJlIGEgdG9wLWxldmVsIEpTT04gb2JqZWN0Iik7Y29uc3R7aXNzdWVyOm99PW47aWYobyYmIShBcnJheS5pc0FycmF5KG8pP286W29dKS5pbmNsdWRlcyhpLmlzcykpdGhyb3cgbmV3IHJyKCd1bmV4cGVjdGVkICJpc3MiIGNsYWltIHZhbHVlJywiaXNzIiwiY2hlY2tfZmFpbGVkIik7Y29uc3R7c3ViamVjdDpzfT1uO2lmKHMmJmkuc3ViIT09cyl0aHJvdyBuZXcgcnIoJ3VuZXhwZWN0ZWQgInN1YiIgY2xhaW0gdmFsdWUnLCJzdWIiLCJjaGVja19mYWlsZWQiKTtjb25zdHthdWRpZW5jZTphfT1uO2lmKGEmJihjPWkuYXVkLHU9InN0cmluZyI9PXR5cGVvZiBhP1thXTphLCEoInN0cmluZyI9PXR5cGVvZiBjP3UuaW5jbHVkZXMoYyk6QXJyYXkuaXNBcnJheShjKSYmdS5zb21lKFNldC5wcm90b3R5cGUuaGFzLmJpbmQobmV3IFNldChjKSkpKSkpdGhyb3cgbmV3IHJyKCd1bmV4cGVjdGVkICJhdWQiIGNsYWltIHZhbHVlJywiYXVkIiwiY2hlY2tfZmFpbGVkIik7dmFyIGMsdTtsZXQgbDtzd2l0Y2godHlwZW9mIG4uY2xvY2tUb2xlcmFuY2Upe2Nhc2Uic3RyaW5nIjpsPURyKG4uY2xvY2tUb2xlcmFuY2UpO2JyZWFrO2Nhc2UibnVtYmVyIjpsPW4uY2xvY2tUb2xlcmFuY2U7YnJlYWs7Y2FzZSJ1bmRlZmluZWQiOmw9MDticmVhaztkZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgY2xvY2tUb2xlcmFuY2Ugb3B0aW9uIHR5cGUiKX1jb25zdHtjdXJyZW50RGF0ZTpkfT1uLGg9KGY9ZHx8bmV3IERhdGUsTWF0aC5mbG9vcihmLmdldFRpbWUoKS8xZTMpKTt2YXIgZjtpZigodm9pZCAwIT09aS5pYXR8fG4ubWF4VG9rZW5BZ2UpJiYibnVtYmVyIiE9dHlwZW9mIGkuaWF0KXRocm93IG5ldyBycignImlhdCIgY2xhaW0gbXVzdCBiZSBhIG51bWJlcicsImlhdCIsImludmFsaWQiKTtpZih2b2lkIDAhPT1pLm5iZil7aWYoIm51bWJlciIhPXR5cGVvZiBpLm5iZil0aHJvdyBuZXcgcnIoJyJuYmYiIGNsYWltIG11c3QgYmUgYSBudW1iZXInLCJuYmYiLCJpbnZhbGlkIik7aWYoaS5uYmY+aCtsKXRocm93IG5ldyBycignIm5iZiIgY2xhaW0gdGltZXN0YW1wIGNoZWNrIGZhaWxlZCcsIm5iZiIsImNoZWNrX2ZhaWxlZCIpfWlmKHZvaWQgMCE9PWkuZXhwKXtpZigibnVtYmVyIiE9dHlwZW9mIGkuZXhwKXRocm93IG5ldyBycignImV4cCIgY2xhaW0gbXVzdCBiZSBhIG51bWJlcicsImV4cCIsImludmFsaWQiKTtpZihpLmV4cDw9aC1sKXRocm93IG5ldyBpcignImV4cCIgY2xhaW0gdGltZXN0YW1wIGNoZWNrIGZhaWxlZCcsImV4cCIsImNoZWNrX2ZhaWxlZCIpfWlmKG4ubWF4VG9rZW5BZ2Upe2NvbnN0IGU9aC1pLmlhdDtpZihlLWw+KCJudW1iZXIiPT10eXBlb2Ygbi5tYXhUb2tlbkFnZT9uLm1heFRva2VuQWdlOkRyKG4ubWF4VG9rZW5BZ2UpKSl0aHJvdyBuZXcgaXIoJyJpYXQiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQgKHRvbyBmYXIgaW4gdGhlIHBhc3QpJywiaWF0IiwiY2hlY2tfZmFpbGVkIik7aWYoZTwwLWwpdGhyb3cgbmV3IHJyKCciaWF0IiBjbGFpbSB0aW1lc3RhbXAgY2hlY2sgZmFpbGVkIChpdCBzaG91bGQgYmUgaW4gdGhlIHBhc3QpJywiaWF0IiwiY2hlY2tfZmFpbGVkIil9cmV0dXJuIGl9O2FzeW5jIGZ1bmN0aW9uIE9yKGUsdCxuKXt2YXIgcjtjb25zdCBpPWF3YWl0IGFzeW5jIGZ1bmN0aW9uKGUsdCxuKXtpZihlIGluc3RhbmNlb2YgVWludDhBcnJheSYmKGU9ZXIuZGVjb2RlKGUpKSwic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IGFyKCJDb21wYWN0IEpXUyBtdXN0IGJlIGEgc3RyaW5nIG9yIFVpbnQ4QXJyYXkiKTtjb25zdHswOnIsMTppLDI6byxsZW5ndGg6c309ZS5zcGxpdCgiLiIpO2lmKDMhPT1zKXRocm93IG5ldyBhcigiSW52YWxpZCBDb21wYWN0IEpXUyIpO2NvbnN0IGE9YXdhaXQgQXIoe3BheWxvYWQ6aSxwcm90ZWN0ZWQ6cixzaWduYXR1cmU6b30sdCxuKSxjPXtwYXlsb2FkOmEucGF5bG9hZCxwcm90ZWN0ZWRIZWFkZXI6YS5wcm90ZWN0ZWRIZWFkZXJ9O3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P3suLi5jLGtleTphLmtleX06Y30oZSx0LG4pO2lmKChudWxsPT09KHI9aS5wcm90ZWN0ZWRIZWFkZXIuY3JpdCl8fHZvaWQgMD09PXI/dm9pZCAwOnIuaW5jbHVkZXMoImI2NCIpKSYmITE9PT1pLnByb3RlY3RlZEhlYWRlci5iNjQpdGhyb3cgbmV3IGNyKCJKV1RzIE1VU1QgTk9UIHVzZSB1bmVuY29kZWQgcGF5bG9hZCIpO2NvbnN0IG89e3BheWxvYWQ6SXIoaS5wcm90ZWN0ZWRIZWFkZXIsaS5wYXlsb2FkLG4pLHByb3RlY3RlZEhlYWRlcjppLnByb3RlY3RlZEhlYWRlcn07cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/ey4uLm8sa2V5Omkua2V5fTpvfWZ1bmN0aW9uIFVyKGUpe3JldHVybiBicihlKX1jbGFzcyBMcntjb25zdHJ1Y3RvcihlKXtpZih0aGlzLl9jYWNoZWQ9bmV3IFdlYWtNYXAsIWZ1bmN0aW9uKGUpe3JldHVybiBlJiYib2JqZWN0Ij09dHlwZW9mIGUmJkFycmF5LmlzQXJyYXkoZS5rZXlzKSYmZS5rZXlzLmV2ZXJ5KFVyKX0oZSkpdGhyb3cgbmV3IHVyKCJKU09OIFdlYiBLZXkgU2V0IG1hbGZvcm1lZCIpO3ZhciB0O3RoaXMuX2p3a3M9KHQ9ZSwiZnVuY3Rpb24iPT10eXBlb2Ygc3RydWN0dXJlZENsb25lP3N0cnVjdHVyZWRDbG9uZSh0KTpKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQpKSl9YXN5bmMgZ2V0S2V5KGUsdCl7Y29uc3R7YWxnOm4sa2lkOnJ9PXsuLi5lLC4uLnQuaGVhZGVyfSxpPWZ1bmN0aW9uKGUpe3N3aXRjaCgic3RyaW5nIj09dHlwZW9mIGUmJmUuc2xpY2UoMCwyKSl7Y2FzZSJSUyI6Y2FzZSJQUyI6cmV0dXJuIlJTQSI7Y2FzZSJFUyI6cmV0dXJuIkVDIjtjYXNlIkVkIjpyZXR1cm4iT0tQIjtkZWZhdWx0OnRocm93IG5ldyBzcignVW5zdXBwb3J0ZWQgImFsZyIgdmFsdWUgZm9yIGEgSlNPTiBXZWIgS2V5IFNldCcpfX0obiksbz10aGlzLl9qd2tzLmtleXMuZmlsdGVyKChlPT57bGV0IHQ9aT09PWUua3R5O2lmKHQmJiJzdHJpbmciPT10eXBlb2YgciYmKHQ9cj09PWUua2lkKSx0JiYic3RyaW5nIj09dHlwZW9mIGUuYWxnJiYodD1uPT09ZS5hbGcpLHQmJiJzdHJpbmciPT10eXBlb2YgZS51c2UmJih0PSJzaWciPT09ZS51c2UpLHQmJkFycmF5LmlzQXJyYXkoZS5rZXlfb3BzKSYmKHQ9ZS5rZXlfb3BzLmluY2x1ZGVzKCJ2ZXJpZnkiKSksdCYmIkVkRFNBIj09PW4mJih0PSJFZDI1NTE5Ij09PWUuY3J2fHwiRWQ0NDgiPT09ZS5jcnYpLHQpc3dpdGNoKG4pe2Nhc2UiRVMyNTYiOnQ9IlAtMjU2Ij09PWUuY3J2O2JyZWFrO2Nhc2UiRVMyNTZLIjp0PSJzZWNwMjU2azEiPT09ZS5jcnY7YnJlYWs7Y2FzZSJFUzM4NCI6dD0iUC0zODQiPT09ZS5jcnY7YnJlYWs7Y2FzZSJFUzUxMiI6dD0iUC01MjEiPT09ZS5jcnZ9cmV0dXJuIHR9KSksezA6cyxsZW5ndGg6YX09bztpZigwPT09YSl0aHJvdyBuZXcgbHI7aWYoMSE9PWEpdGhyb3cgbmV3IGRyO2NvbnN0IGM9dGhpcy5fY2FjaGVkLmdldChzKXx8dGhpcy5fY2FjaGVkLnNldChzLHt9KS5nZXQocyk7aWYodm9pZCAwPT09Y1tuXSl7Y29uc3QgZT1hd2FpdCBhc3luYyBmdW5jdGlvbihlLHQsbil7aWYoIWJyKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkpXSyBtdXN0IGJlIGFuIG9iamVjdCIpO2lmKHR8fCh0PWUuYWxnKSwic3RyaW5nIiE9dHlwZW9mIHR8fCF0KXRocm93IG5ldyBUeXBlRXJyb3IoJyJhbGciIGFyZ3VtZW50IGlzIHJlcXVpcmVkIHdoZW4gImp3ay5hbGciIGlzIG5vdCBwcmVzZW50Jyk7c3dpdGNoKGUua3R5KXtjYXNlIm9jdCI6aWYoInN0cmluZyIhPXR5cGVvZiBlLmt8fCFlLmspdGhyb3cgbmV3IFR5cGVFcnJvcignbWlzc2luZyAiayIgKEtleSBWYWx1ZSkgUGFyYW1ldGVyIHZhbHVlJyk7cmV0dXJuIG51bGwhPW58fChuPSEwIT09ZS5leHQpLG4/a3Ioey4uLmUsYWxnOnQsZXh0OiExfSk6dHIoZS5rKTtjYXNlIlJTQSI6aWYodm9pZCAwIT09ZS5vdGgpdGhyb3cgbmV3IHNyKCdSU0EgSldLICJvdGgiIChPdGhlciBQcmltZXMgSW5mbykgUGFyYW1ldGVyIHZhbHVlIGlzIG5vdCBzdXBwb3J0ZWQnKTtjYXNlIkVDIjpjYXNlIk9LUCI6cmV0dXJuIGtyKHsuLi5lLGFsZzp0fSk7ZGVmYXVsdDp0aHJvdyBuZXcgc3IoJ1Vuc3VwcG9ydGVkICJrdHkiIChLZXkgVHlwZSkgUGFyYW1ldGVyIHZhbHVlJyl9fSh7Li4ucyxleHQ6ITB9LG4pO2lmKGUgaW5zdGFuY2VvZiBVaW50OEFycmF5fHwicHVibGljIiE9PWUudHlwZSl0aHJvdyBuZXcgdXIoIkpTT04gV2ViIEtleSBTZXQgbWVtYmVycyBtdXN0IGJlIHB1YmxpYyBrZXlzIik7Y1tuXT1lfXJldHVybiBjW25dfX12YXIgSHI9e2V4cG9ydHM6e319LE1yPXtleHBvcnRzOnt9fSxOcj1BKHFuKTsKLyohIHNhZmUtYnVmZmVyLiBNSVQgTGljZW5zZS4gRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnL29wZW5zb3VyY2U+ICovCiFmdW5jdGlvbihlLHQpe3ZhciBuPU5yLHI9bi5CdWZmZXI7ZnVuY3Rpb24gaShlLHQpe2Zvcih2YXIgbiBpbiBlKXRbbl09ZVtuXX1mdW5jdGlvbiBvKGUsdCxuKXtyZXR1cm4gcihlLHQsbil9ci5mcm9tJiZyLmFsbG9jJiZyLmFsbG9jVW5zYWZlJiZyLmFsbG9jVW5zYWZlU2xvdz9lLmV4cG9ydHM9bjooaShuLHQpLHQuQnVmZmVyPW8pLG8ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoci5wcm90b3R5cGUpLGkocixvKSxvLmZyb209ZnVuY3Rpb24oZSx0LG4pe2lmKCJudW1iZXIiPT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlciIpO3JldHVybiByKGUsdCxuKX0sby5hbGxvYz1mdW5jdGlvbihlLHQsbil7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTt2YXIgaT1yKGUpO3JldHVybiB2b2lkIDAhPT10PyJzdHJpbmciPT10eXBlb2Ygbj9pLmZpbGwodCxuKTppLmZpbGwodCk6aS5maWxsKDApLGl9LG8uYWxsb2NVbnNhZmU9ZnVuY3Rpb24oZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gcihlKX0sby5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24oZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gbi5TbG93QnVmZmVyKGUpfX0oTXIsTXIuZXhwb3J0cyk7dmFyIHFyPTY1NTM2LGpyPTQyOTQ5NjcyOTU7dmFyIHhyPU1yLmV4cG9ydHMuQnVmZmVyLEtyPUUuY3J5cHRvfHxFLm1zQ3J5cHRvO0tyJiZLci5nZXRSYW5kb21WYWx1ZXM/SHIuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKGU+anIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoInJlcXVlc3RlZCB0b28gbWFueSByYW5kb20gYnl0ZXMiKTt2YXIgbj14ci5hbGxvY1Vuc2FmZShlKTtpZihlPjApaWYoZT5xcilmb3IodmFyIHI9MDtyPGU7cis9cXIpS3IuZ2V0UmFuZG9tVmFsdWVzKG4uc2xpY2UocixyK3FyKSk7ZWxzZSBLci5nZXRSYW5kb21WYWx1ZXMobik7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQpcmV0dXJuIHZlLm5leHRUaWNrKChmdW5jdGlvbigpe3QobnVsbCxuKX0pKTtyZXR1cm4gbn06SHIuZXhwb3J0cz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiU2VjdXJlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnJvd3Nlci5cblVzZSBDaHJvbWUsIEZpcmVmb3ggb3IgSW50ZXJuZXQgRXhwbG9yZXIgMTEiKX07dmFyIEpyPUhyLmV4cG9ydHM7Y2xhc3MgQnJ7YmFzZTY0VVJMRW5jb2RlKGUpe3JldHVybiBWbi5lbmNvZGUoZSkucmVwbGFjZSgvXCsvZywiLSIpLnJlcGxhY2UoL1wvL2csIl8iKS5yZXBsYWNlKC89L2csIiIpfWJhc2U2NFVSTERlY29kZShlKXtyZXR1cm4gVm4uZGVjb2RlKGUpLnRvU3RyaW5nKCl9aGFzaFNoYTI1NihlKXtyZXR1cm4gWnQuZnJvbShHbigobmV3IFRleHRFbmNvZGVyKS5lbmNvZGUoZSkpKX1nZW5lcmF0ZVJhbmRvbUJ5dGVzKGUpe3JldHVybiBKcihlKX12ZXJpZnlKd3QoZSx0LG4scixpLG8scyl7cmV0dXJuIE9yKGUsKGE9e2tleXM6W3RdfSxMci5wcm90b3R5cGUuZ2V0S2V5LmJpbmQobmV3IExyKGEpKSkse2FsZ29yaXRobXM6bixhdWRpZW5jZTpyLGNsb2NrVG9sZXJhbmNlOnMsaXNzdWVyOmksc3ViamVjdDpvfSkudGhlbigoKCk9PlByb21pc2UucmVzb2x2ZSghMCkpKTt2YXIgYX19b3JpZ2luLHkuU2Vzc2lvblN0b3JhZ2U7Y2xhc3MgRnJ7Y29uc3RydWN0b3IoZSl7dGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQ9ZSx0aGlzLl9kYXRhTGF5ZXI9dGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0RGF0YUxheWVyKCl9cmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSgpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoKTtpZih0LnJlZnJlc2hfdG9rZW4pe2NvbnN0IG49cGFyc2VJbnQodC5leHBpcmVzX2luKSxyPXNldFRpbWVvdXQoKCgpPT5lKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQucmVmcmVzaEFjY2Vzc1Rva2VuKCl9KSkpLDFlMyoobjw9MTA/bjpuLTEwKSk7eWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoaSxKU09OLnN0cmluZ2lmeShyKSl9fSkpfWNsZWFyUmVmcmVzaFRva2VuVGltZW91dCgpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7aWYoeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoaSkpe2NvbnN0IGU9SlNPTi5wYXJzZSh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihpKSk7Y2xlYXJUaW1lb3V0KGUpfX0pKX19Y2xhc3MgV3J7Y29uc3RydWN0b3IoZSx0KXt0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudD1lLHRoaXMuX2RhdGFMYXllcj10aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXREYXRhTGF5ZXIoKSx0aGlzLl9zcGFIZWxwZXI9dH1hdHRhY2hUb2tlbih0KXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe09iamVjdC5hc3NpZ24oe2F0dGFjaFRva2VuOiEwfSx0KS5hdHRhY2hUb2tlbiYmKHQuaGVhZGVycz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5oZWFkZXJzKSx7QXV0aG9yaXphdGlvbjpgQmVhcmVyICR7eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0QWNjZXNzVG9rZW4oKX1gfSkpfSkpfXNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjayhlLHQpeyhudWxsPT1lP3ZvaWQgMDplLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjaykmJmUuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrKHQpfXNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKGUsdCl7KG51bGw9PWU/dm9pZCAwOmUuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2spJiZlLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKHQpfXNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2soZSx0KXsobnVsbD09ZT92b2lkIDA6ZS5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKSYmZS5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKHQpfWVuYWJsZUh0dHBIYW5kbGVyKGUpeyhudWxsPT1lP3ZvaWQgMDplLmVuYWJsZUhhbmRsZXIpJiZlLmVuYWJsZUhhbmRsZXIoKX1kaXNhYmxlSHR0cEhhbmRsZXIoZSl7KG51bGw9PWU/dm9pZCAwOmUuZGlzYWJsZUhhbmRsZXIpJiZlLmRpc2FibGVIYW5kbGVyKCl9aW5pdGlhbGl6ZVNlc3Npb25NYW5nZXIoZSx0LG4scixpKXt2YXIgbyxzLGE7aS5pbml0aWFsaXplKGUuY2xpZW50SUQsbnVsbCE9PShvPXQuY2hlY2tTZXNzaW9uSWZyYW1lKSYmdm9pZCAwIT09bz9vOiIiLG4sbnVsbCE9PShzPWUuY2hlY2tTZXNzaW9uSW50ZXJ2YWwpJiZ2b2lkIDAhPT1zP3M6MyxudWxsIT09KGE9ZS5zZXNzaW9uUmVmcmVzaEludGVydmFsKSYmdm9pZCAwIT09YT9hOjMwMCxlLnNpZ25JblJlZGlyZWN0VVJMLHIpfXJlcXVlc3RDdXN0b21HcmFudCh0LG4pe3ZhciByLGksbztyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2xldCBzPSEwLGE9ITE7aWYobnVsbD09dD92b2lkIDA6dC50b2tlbkVuZHBvaW50KXtzPSExO2Zvcihjb25zdCBlIG9mWy4uLm51bGwhPT0oaT1udWxsPT09KHI9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldENvbmZpZ0RhdGEoKSl8fHZvaWQgMD09PXI/dm9pZCAwOnIucmVzb3VyY2VTZXJ2ZXJVUkxzKSYmdm9pZCAwIT09aT9pOltdLHQuYmFzZVVybF0paWYoZSYmKG51bGw9PT0obz10LnRva2VuRW5kcG9pbnQpfHx2b2lkIDA9PT1vP3ZvaWQgMDpvLnN0YXJ0c1dpdGgoZSkpKXthPSEwO2JyZWFrfX1yZXR1cm4gdC5zaG91bGRSZXBsYXlBZnRlclJlZnJlc2gmJnRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGIsSlNPTi5zdHJpbmdpZnkodCkpLHN8fGE/dGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQucmVxdWVzdEN1c3RvbUdyYW50KHQpLnRoZW4oKHI9PmUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gbiYmImZ1bmN0aW9uIj09dHlwZW9mIG4mJm4odCksdC5yZXR1cm5zU2Vzc2lvbj8odGhpcy5fc3BhSGVscGVyLnJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkoKSx0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXRCYXNpY1VzZXJJbmZvKCkpOnJ9KSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QoZSkpKTpQcm9taXNlLnJlamVjdChuZXcgYygiU1BBLU1BSU5fVEhSRUFEX0NMSUVOVC1SQ0ctSVYwMSIsIlJlcXVlc3QgdG8gdGhlIHByb3ZpZGVkIGVuZHBvaW50IGlzIHByb2hpYml0ZWQuIiwiUmVxdWVzdHMgY2FuIG9ubHkgYmUgc2VudCB0byByZXNvdXJjZSBzZXJ2ZXJzIHNwZWNpZmllZCBieSB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AgYXR0cmlidXRlIHdoaWxlIGluaXRpYWxpemluZyB0aGUgU0RLLiBUaGUgc3BlY2lmaWVkIHRva2VuIGVuZHBvaW50IGluIHRoaXMgcmVxdWVzdCBjYW5ub3QgYmUgZm91bmQgYW1vbmcgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIikpfSkpfWdldEN1c3RvbUdyYW50Q29uZmlnRGF0YSgpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihiKTtyZXR1cm4gZT9KU09OLnBhcnNlKGUpOm51bGx9KSl9cmVmcmVzaEFjY2Vzc1Rva2VuKHQpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dHJ5e3lpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LnJlZnJlc2hBY2Nlc3NUb2tlbigpO2NvbnN0IGU9eWllbGQgdGhpcy5nZXRDdXN0b21HcmFudENvbmZpZ0RhdGEoKTtyZXR1cm4gZSYmKHlpZWxkIHRoaXMucmVxdWVzdEN1c3RvbUdyYW50KGUsdCkpLHRoaXMuX3NwYUhlbHBlci5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KCksdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0QmFzaWNVc2VySW5mbygpfWNhdGNoKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX19KSl9aHR0cFJlcXVlc3QodCxuLHIsaSxvLHMpe3ZhciBhLHU7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtsZXQgbD0hMTtjb25zdCBkPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRDb25maWdEYXRhKCk7Zm9yKGNvbnN0IGUgb2ZbLi4ubnVsbCE9PShhPXlpZWxkIG51bGw9PWQ/dm9pZCAwOmQucmVzb3VyY2VTZXJ2ZXJVUkxzKSYmdm9pZCAwIT09YT9hOltdLGQuYmFzZVVybF0paWYoZSYmKG51bGw9PT0odT1udWxsPT1uP3ZvaWQgMDpuLnVybCl8fHZvaWQgMD09PXU/dm9pZCAwOnUuc3RhcnRzV2l0aChlKSkpe2w9ITA7YnJlYWt9cmV0dXJuIGw/dC5yZXF1ZXN0KG4pLnRoZW4oKGU9PlByb21pc2UucmVzb2x2ZShlKSkpLmNhdGNoKChhPT5lKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIGUsdSxsO2lmKDQwMT09PShudWxsPT09KGU9bnVsbD09YT92b2lkIDA6YS5yZXNwb25zZSl8fHZvaWQgMD09PWU/dm9pZCAwOmUuc3RhdHVzKXx8IShudWxsPT1hP3ZvaWQgMDphLnJlc3BvbnNlKSl7bGV0IGU7dHJ5e2U9eWllbGQgdGhpcy5yZWZyZXNoQWNjZXNzVG9rZW4ocyl9Y2F0Y2goZSl7dGhyb3cgciYmKCJmdW5jdGlvbiI9PXR5cGVvZiBpJiYoeWllbGQgaShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sYSkse2NvZGU6a30pKSksImZ1bmN0aW9uIj09dHlwZW9mIG8mJm8oKSksbmV3IGMoIlNQQS1BVVRIX0hFTFBFUi1IUi1TRTAxIixudWxsIT09KHU9bnVsbD09ZT92b2lkIDA6ZS5uYW1lKSYmdm9pZCAwIT09dT91OiJSZWZyZXNoIHRva2VuIHJlcXVlc3QgZmFpbGVkLiIsbnVsbCE9PShsPW51bGw9PWU/dm9pZCAwOmUubWVzc2FnZSkmJnZvaWQgMCE9PWw/bDoiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIHJlZnJlc2ggdGhlIGFjY2VzcyB0b2tlbiBmb2xsb3dpbmcgYSA0MDEgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyLiIpfWlmKGUpdHJ5e2NvbnN0IGU9eWllbGQgdC5yZXF1ZXN0KG4pO3JldHVybiBQcm9taXNlLnJlc29sdmUoZSl9Y2F0Y2goZSl7cmV0dXJuIHImJigiZnVuY3Rpb24iPT10eXBlb2YgaSYmKHlpZWxkIGkoZSkpLCJmdW5jdGlvbiI9PXR5cGVvZiBvJiZvKCkpLFByb21pc2UucmVqZWN0KGUpfX1yZXR1cm4gciYmKCJmdW5jdGlvbiI9PXR5cGVvZiBpJiYoeWllbGQgaShhKSksImZ1bmN0aW9uIj09dHlwZW9mIG8mJm8oKSksUHJvbWlzZS5yZWplY3QoYSl9KSkpKTpQcm9taXNlLnJlamVjdChuZXcgYygiU1BBLUFVVEhfSEVMUEVSLUhSLUlWMDIiLCJSZXF1ZXN0IHRvIHRoZSBwcm92aWRlZCBlbmRwb2ludCBpcyBwcm9oaWJpdGVkLiIsIlJlcXVlc3RzIGNhbiBvbmx5IGJlIHNlbnQgdG8gcmVzb3VyY2Ugc2VydmVycyBzcGVjaWZpZWQgYnkgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIGF0dHJpYnV0ZSB3aGlsZSBpbml0aWFsaXppbmcgdGhlIFNESy4gVGhlIHNwZWNpZmllZCBlbmRwb2ludCBpbiB0aGlzIHJlcXVlc3QgY2Fubm90IGJlIGZvdW5kIGFtb25nIHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCIpKX0pKX1odHRwUmVxdWVzdEFsbCh0LG4scixpLG8pe3ZhciBzLGEsdTtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2xldCBsPSEwO2NvbnN0IGQ9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldENvbmZpZ0RhdGEoKTtmb3IoY29uc3QgZSBvZiB0KXtsZXQgdD0hMTtmb3IoY29uc3QgbiBvZlsuLi5udWxsIT09KGE9bnVsbD09PShzPXlpZWxkIGQpfHx2b2lkIDA9PT1zP3ZvaWQgMDpzLnJlc291cmNlU2VydmVyVVJMcykmJnZvaWQgMCE9PWE/YTpbXSxkLmJhc2VVcmxdKWlmKG4mJihudWxsPT09KHU9ZS51cmwpfHx2b2lkIDA9PT11P3ZvaWQgMDp1LnN0YXJ0c1dpdGgobikpKXt0PSEwO2JyZWFrfWlmKCF0KXtsPSExO2JyZWFrfX1jb25zdCBoPVtdO2lmKGwpcmV0dXJuIHQuZm9yRWFjaCgoZT0+e2gucHVzaChuLnJlcXVlc3QoZSkpfSkpLChudWxsPT1uP3ZvaWQgMDpuLmFsbCkmJm4uYWxsKGgpLnRoZW4oKGU9PlByb21pc2UucmVzb2x2ZShlKSkpLmNhdGNoKCh0PT5lKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIHMsYSx1O2lmKDQwMT09PShudWxsPT09KHM9bnVsbD09dD92b2lkIDA6dC5yZXNwb25zZSl8fHZvaWQgMD09PXM/dm9pZCAwOnMuc3RhdHVzKXx8IShudWxsPT10P3ZvaWQgMDp0LnJlc3BvbnNlKSl7bGV0IHM7dHJ5e3M9eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQucmVmcmVzaEFjY2Vzc1Rva2VuKCl9Y2F0Y2goZSl7dGhyb3cgciYmKCJmdW5jdGlvbiI9PXR5cGVvZiBpJiYoeWllbGQgaShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2NvZGU6a30pKSksImZ1bmN0aW9uIj09dHlwZW9mIG8mJm8oKSksbmV3IGMoIlNQQS1BVVRIX0hFTFBFUi1IUkEtU0UwMSIsbnVsbCE9PShhPW51bGw9PWU/dm9pZCAwOmUubmFtZSkmJnZvaWQgMCE9PWE/YToiUmVmcmVzaCB0b2tlbiByZXF1ZXN0IGZhaWxlZC4iLG51bGwhPT0odT1udWxsPT1lP3ZvaWQgMDplLm1lc3NhZ2UpJiZ2b2lkIDAhPT11P3U6IkFuIGVycm9yIG9jY3VycmVkIHdoaWxlIHRyeWluZyB0byByZWZyZXNoIHRoZSBhY2Nlc3MgdG9rZW4gZm9sbG93aW5nIGEgNDAxIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlci4iKX1pZihzKXJldHVybiBuLmFsbCYmbi5hbGwoaCkudGhlbigoZT0+UHJvbWlzZS5yZXNvbHZlKGUpKSkuY2F0Y2goKHQ9PmUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gciYmKCJmdW5jdGlvbiI9PXR5cGVvZiBpJiYoeWllbGQgaSh0KSksImZ1bmN0aW9uIj09dHlwZW9mIG8mJm8oKSksUHJvbWlzZS5yZWplY3QodCl9KSkpKX1yZXR1cm4gciYmKCJmdW5jdGlvbiI9PXR5cGVvZiBpJiYoeWllbGQgaSh0KSksImZ1bmN0aW9uIj09dHlwZW9mIG8mJm8oKSksUHJvbWlzZS5yZWplY3QodCl9KSkpKTt0aHJvdyBuZXcgYygiU1BBLUFVVEhfSEVMUEVSLUhSQS1JVjAyIiwiUmVxdWVzdCB0byB0aGUgcHJvdmlkZWQgZW5kcG9pbnQgaXMgcHJvaGliaXRlZC4iLCJSZXF1ZXN0cyBjYW4gb25seSBiZSBzZW50IHRvIHJlc291cmNlIHNlcnZlcnMgc3BlY2lmaWVkIGJ5IHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCBhdHRyaWJ1dGUgd2hpbGUgaW5pdGlhbGl6aW5nIHRoZSBTREsuIFRoZSBzcGVjaWZpZWQgZW5kcG9pbnQgaW4gdGhpcyByZXF1ZXN0IGNhbm5vdCBiZSBmb3VuZCBhbW9uZyB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AiKX0pKX1yZXF1ZXN0QWNjZXNzVG9rZW4odCxuLHIsaSxvKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHM9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldENvbmZpZ0RhdGEoKTtpZihzLnN0b3JhZ2U9PT15LkJyb3dzZXJNZW1vcnkmJnMuZW5hYmxlUEtDRSYmbil7Y29uc3QgZT1OdC5nZXRQS0NFKHUuZXh0cmFjdFBLQ0VLZXlGcm9tU3RhdGVQYXJhbShuKSk7eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuc2V0UEtDRUNvZGUodS5leHRyYWN0UEtDRUtleUZyb21TdGF0ZVBhcmFtKG4pLGUpfWVsc2Ugcy5zdG9yYWdlPT09eS5XZWJXb3JrZXImJmkmJih5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5zZXRQS0NFQ29kZShpLG51bGwhPW8/bzoiIikpO3JldHVybiB0P3RoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LnJlcXVlc3RBY2Nlc3NUb2tlbih0LG51bGwhPW4/bjoiIixudWxsIT1vP286IiIpLnRoZW4oKCgpPT5lKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHMuc3RvcmFnZSE9PXkuV2ViV29ya2VyPyhOdC5zZXRTaWduT3V0VVJMKHlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldFNpZ25PdXRVUkwoKSksdGhpcy5fc3BhSGVscGVyJiYodGhpcy5fc3BhSGVscGVyLmNsZWFyUmVmcmVzaFRva2VuVGltZW91dCgpLHRoaXMuX3NwYUhlbHBlci5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KCkpLHImJiJmdW5jdGlvbiI9PXR5cGVvZiByJiZzLmVuYWJsZU9JRENTZXNzaW9uTWFuYWdlbWVudCYmcigpKTp0aGlzLl9zcGFIZWxwZXImJnRoaXMuX3NwYUhlbHBlci5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KCksdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0QmFzaWNVc2VySW5mbygpfSkpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KGUpKSk6UHJvbWlzZS5yZWplY3QobmV3IGMoIlNQQS1BVVRIX0hFTFBFUi1SQVQxLU5GMDEiLCJObyBhdXRob3JpemF0aW9uIGNvZGUuIiwiTm8gYXV0aG9yaXphdGlvbiBjb2RlIHdhcyBmb3VuZC4iKSl9KSl9dHJ5U2lnbkluU2lsZW50bHkodCxuLHIpe3ZhciBpO3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7aWYoTnQuaXNJbml0aWFsaXplZFNpbGVudFNpZ25JbigpKXJldHVybiB5aWVsZCByLnJlY2VpdmVQcm9tcHROb25lUmVzcG9uc2UoKSxQcm9taXNlLnJlc29sdmUoe2FsbG93ZWRTY29wZXM6IiIsZGlzcGxheU5hbWU6IiIsZW1haWw6IiIsc2Vzc2lvblN0YXRlOiIiLHN1YjoiIix0ZW5hbnREb21haW46IiIsdXNlcm5hbWU6IiJ9KTtjb25zdCBvPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJycElGcmFtZSIpLHM9bnVsbD09PShpPW51bGw9PW8/dm9pZCAwOm8uY29udGVudERvY3VtZW50KXx8dm9pZCAwPT09aT92b2lkIDA6aS5nZXRFbGVtZW50QnlJZCgicHJvbXB0Tm9uZUlGcmFtZSIpO3RyeXtjb25zdCBlPXlpZWxkIHQoKTtzLnNyYz1lfWNhdGNoKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX1yZXR1cm4gbmV3IFByb21pc2UoKCh0LHIpPT57Y29uc3QgaT1zZXRUaW1lb3V0KCgoKT0+e3QoITEpfSksMWU0KSxvPXM9PmUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt2YXIgZSxhLGMsdTtjb25zdCBsPXMuZGF0YTsiY2hlY2tfc2Vzc2lvbl9zaWduZWRfb3V0Ij09KG51bGw9PWw/dm9pZCAwOmwudHlwZSkmJih3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsbyksY2xlYXJUaW1lb3V0KGkpLHQoITEpKSwiY2hlY2tfc2Vzc2lvbl9zaWduZWRfaW4iPT0obnVsbD09bD92b2lkIDA6bC50eXBlKSYmKG51bGw9PT0oZT1udWxsPT1sP3ZvaWQgMDpsLmRhdGEpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmNvZGUpJiZuKG51bGw9PT0oYT1udWxsPT1sP3ZvaWQgMDpsLmRhdGEpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmNvZGUsbnVsbD09PShjPW51bGw9PWw/dm9pZCAwOmwuZGF0YSl8fHZvaWQgMD09PWM/dm9pZCAwOmMuc2Vzc2lvblN0YXRlLG51bGw9PT0odT1udWxsPT1sP3ZvaWQgMDpsLmRhdGEpfHx2b2lkIDA9PT11P3ZvaWQgMDp1LnN0YXRlKS50aGVuKChlPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLG8pLHQoZSl9KSkuY2F0Y2goKGU9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsbykscihlKX0pKS5maW5hbGx5KCgoKT0+e2NsZWFyVGltZW91dChpKX0pKX0pKTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsbyl9KSl9KSl9aGFuZGxlU2lnbkluKHQsbixyKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldENvbmZpZ0RhdGEoKTtpZih5aWVsZCB0KCkpcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7YWxsb3dlZFNjb3BlczoiIixkaXNwbGF5TmFtZToiIixlbWFpbDoiIixzZXNzaW9uU3RhdGU6IiIsc3ViOiIiLHRlbmFudERvbWFpbjoiIix1c2VybmFtZToiIn0pO2lmKGUuc3RvcmFnZSE9PXkuV2ViV29ya2VyJiYoeWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuaXNBdXRoZW50aWNhdGVkKCkpKXJldHVybiB0aGlzLl9zcGFIZWxwZXIuY2xlYXJSZWZyZXNoVG9rZW5UaW1lb3V0KCksdGhpcy5fc3BhSGVscGVyLnJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkoKSxlLmVuYWJsZU9JRENTZXNzaW9uTWFuYWdlbWVudCYmbigpLFByb21pc2UucmVzb2x2ZSh5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXRCYXNpY1VzZXJJbmZvKCkpO2NvbnN0IGk9bmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZikuc2VhcmNoUGFyYW1zLmdldChfKSxvPW5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpLnNlYXJjaFBhcmFtcy5nZXQoUyk7aWYoaSl7Y29uc3QgZT1uZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTt0aHJvdyBlLnNlYXJjaFBhcmFtcy5kZWxldGUoXyksZS5zZWFyY2hQYXJhbXMuZGVsZXRlKFMpLGhpc3RvcnkucHVzaFN0YXRlKG51bGwsZG9jdW1lbnQudGl0bGUsZS50b1N0cmluZygpKSxuZXcgYygiU1BBLUFVVEhfSEVMUEVSLVNJLVNFMDEiLGksbnVsbCE9bz9vOiIiKX1pZihlLnN0b3JhZ2U9PT15LldlYldvcmtlciYmcil7Y29uc3QgZT15aWVsZCByKCk7aWYoZSlyZXR1cm4gZX19KSl9Z2V0QmFzaWNVc2VySW5mbygpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldEJhc2ljVXNlckluZm8oKX0pKX1nZXREZWNvZGVkSURUb2tlbigpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldERlY29kZWRJRFRva2VuKCl9KSl9Z2V0SURUb2tlbigpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldElEVG9rZW4oKX0pKX1nZXRPSURDU2VydmljZUVuZHBvaW50cygpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCl9KSl9Z2V0QWNjZXNzVG9rZW4oKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXRBY2Nlc3NUb2tlbigpfSkpfWdldERhdGFMYXllcigpe3JldHVybiB0aGlzLl9kYXRhTGF5ZXJ9aXNBdXRoZW50aWNhdGVkKCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuaXNBdXRoZW50aWNhdGVkKCl9KSl9fSh0PT57Y29uc3Qgbj1zZWxmO2xldCByO24ub25tZXNzYWdlPSh7ZGF0YTpuLHBvcnRzOmF9KT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIHUsbCxkLGg7Y29uc3QgZj1hWzBdO2lmKG4udHlwZT09PXZ8fHIpc3dpdGNoKG4udHlwZSl7Y2FzZSB2OnRyeXtjb25zdCBhPU9iamVjdC5hc3NpZ24oe30sbi5kYXRhKTtyPXlpZWxkKCh0LG4pPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCByPW5ldyBIdCxpPW5ldyBCcixvPW5ldyBnKHIsaSk7eWllbGQgby5pbml0aWFsaXplKHQpO2NvbnN0IHM9bmV3IEZyKG8pLGE9bihvLHMpLGM9by5nZXREYXRhTGF5ZXIoKSx1PUx0LmdldEluc3RhbmNlKCk7cmV0dXJuKG51bGw9PXU/dm9pZCAwOnUuaW5pdCkmJih5aWVsZCB1LmluaXQoITAsYS5hdHRhY2hUb2tlbikpLHtkaXNhYmxlSHR0cEhhbmRsZXI6KCk9PnthLmRpc2FibGVIdHRwSGFuZGxlcih1KX0sZW5hYmxlSHR0cEhhbmRsZXI6KCk9PnthLmVuYWJsZUh0dHBIYW5kbGVyKHUpfSxnZXRBY2Nlc3NUb2tlbjooKT0+YS5nZXRBY2Nlc3NUb2tlbigpLGdldEF1dGhvcml6YXRpb25VUkw6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIG8uZ2V0QXV0aG9yaXphdGlvblVSTCh0KS50aGVuKCh0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt2YXIgZTtjb25zdCBuPW51bGwhPT0oZT1uZXcgVVJMKHQpLnNlYXJjaFBhcmFtcy5nZXQoInN0YXRlIikpJiZ2b2lkIDAhPT1lP2U6IiIscj15aWVsZCBvLmdldFBLQ0VDb2RlKG4pO3JldHVybnthdXRob3JpemF0aW9uVVJMOnQscGtjZTpyfX0pKSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChlKSkpfSkpLGdldEJhc2ljVXNlckluZm86KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBhLmdldEJhc2ljVXNlckluZm8oKX0pKSxnZXRDb25maWdEYXRhOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gYy5nZXRDb25maWdEYXRhKCl9KSksZ2V0RGVjb2RlZElEVG9rZW46KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBhLmdldERlY29kZWRJRFRva2VuKCl9KSksZ2V0SURUb2tlbjooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIGEuZ2V0SURUb2tlbigpfSkpLGdldE9JRENTZXJ2aWNlRW5kcG9pbnRzOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gYS5nZXRPSURDU2VydmljZUVuZHBvaW50cygpfSkpLGdldFNpZ25PdXRVUkw6KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCBvLmdldFNpZ25PdXRVUkwoKX0pKSxodHRwUmVxdWVzdDp0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgYS5odHRwUmVxdWVzdCh1LHQpfSkpLGh0dHBSZXF1ZXN0QWxsOnQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCBhLmh0dHBSZXF1ZXN0QWxsKHQsdSl9KSksaXNBdXRoZW50aWNhdGVkOigpPT5hLmlzQXV0aGVudGljYXRlZCgpLHJlZnJlc2hBY2Nlc3NUb2tlbjooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dHJ5e3JldHVybiB5aWVsZCBhLnJlZnJlc2hBY2Nlc3NUb2tlbigpfWNhdGNoKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX19KSkscmVxdWVzdEFjY2Vzc1Rva2VuOih0LG4scixpKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIGEucmVxdWVzdEFjY2Vzc1Rva2VuKHQsbix2b2lkIDAscixpKX0pKSxyZXF1ZXN0Q3VzdG9tR3JhbnQ6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIGEucmVxdWVzdEN1c3RvbUdyYW50KHQpfSkpLHJldm9rZUFjY2Vzc1Rva2VuOigpPT5vLnJldm9rZUFjY2Vzc1Rva2VuKCkudGhlbigoKCk9PihzLmNsZWFyUmVmcmVzaFRva2VuVGltZW91dCgpLFByb21pc2UucmVzb2x2ZSghMCkpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KGUpKSksc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjazplPT57KG51bGw9PXU/dm9pZCAwOnUuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjaykmJnUuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjayhlKX0sc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrOmU9PnthLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjayh1LGUpfSxzZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjazplPT57YS5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayh1LGUpfSxzZXRTZXNzaW9uU3RhdGU6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgYy5zZXRTZXNzaW9uRGF0YVBhcmFtZXRlcigic2Vzc2lvbl9zdGF0ZSIsdCl9KSksc2lnbk91dDooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHMuY2xlYXJSZWZyZXNoVG9rZW5UaW1lb3V0KCkseWllbGQgby5zaWduT3V0KCl9KSksc3RhcnRBdXRvUmVmcmVzaFRva2VuOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtzLmNsZWFyUmVmcmVzaFRva2VuVGltZW91dCgpLHMucmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSgpfSkpLHVwZGF0ZUNvbmZpZzp0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCBvLnVwZGF0ZUNvbmZpZyh0KX0pKX19KSkpKGEsdCksci5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKHMpLHIuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrKGkpLHIuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2sobyksZi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKCkpfWNhdGNoKGUpe2YucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXRfYXV0aF91cmwiOnIuZ2V0QXV0aG9yaXphdGlvblVSTChudWxsPT1uP3ZvaWQgMDpuLmRhdGEpLnRoZW4oKGU9PntmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX0pKTticmVhaztjYXNlInJlcXVlc3RfZ2V0X3Rva2VuIjpyLnJlcXVlc3RBY2Nlc3NUb2tlbihudWxsPT09KHU9bnVsbD09bj92b2lkIDA6bi5kYXRhKXx8dm9pZCAwPT09dT92b2lkIDA6dS5jb2RlLG51bGw9PT0obD1udWxsPT1uP3ZvaWQgMDpuLmRhdGEpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLnNlc3Npb25TdGF0ZSxudWxsPT09KGQ9bnVsbD09bj92b2lkIDA6bi5kYXRhKXx8dm9pZCAwPT09ZD92b2lkIDA6ZC5wa2NlLG51bGw9PT0oaD1udWxsPT1uP3ZvaWQgMDpuLmRhdGEpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLnN0YXRlKS50aGVuKChlPT57Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpKX0pKS5jYXRjaCgoZT0+e2YucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSk7YnJlYWs7Y2FzZSJodHRwLXJlcXVlc3QiOnIuaHR0cFJlcXVlc3Qobi5kYXRhKS50aGVuKChlPT57Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpKX0pKS5jYXRjaCgoZT0+e2YucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSk7YnJlYWs7Y2FzZSJodHRwLXJlcXVlc3QtYWxsIjpyLmh0dHBSZXF1ZXN0QWxsKG4uZGF0YSkudGhlbigoZT0+e2YucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9PntmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2Uic2lnbi1vdXQiOnRyeXtmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgci5zaWduT3V0KCkpKX1jYXRjaChlKXtmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UicmVxdWVzdC1jdXN0b20tZ3JhbnQiOnIucmVxdWVzdEN1c3RvbUdyYW50KG4uZGF0YSkudGhlbigoZT0+e2YucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9PntmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2UicmV2b2tlLWFjY2Vzcy10b2tlbiI6ci5yZXZva2VBY2Nlc3NUb2tlbigpLnRoZW4oKGU9PntmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX0pKTticmVhaztjYXNlImdldC1vaWRjLXNlcnZpY2UtZW5kcG9pbnRzIjp0cnl7Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIuZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKSkpfWNhdGNoKGUpe2YucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXQtYmFzaWMtdXNlci1pbmZvIjp0cnl7Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIuZ2V0QmFzaWNVc2VySW5mbygpKSl9Y2F0Y2goZSl7Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlImdldC1kZWNvZGVkLWlkLXRva2VuIjp0cnl7Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIuZ2V0RGVjb2RlZElEVG9rZW4oKSkpfWNhdGNoKGUpe2YucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXRfaWRfdG9rZW4iOnRyeXtmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgci5nZXRJRFRva2VuKCkpKX1jYXRjaChlKXtmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZW5hYmxlX2h0dHBfaGFuZGxlciI6ci5lbmFibGVIdHRwSGFuZGxlcigpLGYucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSgpKTticmVhaztjYXNlImRpc2FibGVfaHR0cF9oYW5kbGVyIjpyLmRpc2FibGVIdHRwSGFuZGxlcigpLGYucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSgpKTticmVhaztjYXNlImlzX2F1dGhlbnRpY2F0ZWQiOnRyeXtmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgci5pc0F1dGhlbnRpY2F0ZWQoKSkpfWNhdGNoKGUpe2YucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXRfc2lnbl9vdXRfdXJsIjp0cnl7Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIuZ2V0U2lnbk91dFVSTCgpKSl9Y2F0Y2goZSl7Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlInJlZnJlc2hfYWNjZXNzLXRva2VuIjp0cnl7Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIucmVmcmVzaEFjY2Vzc1Rva2VuKCkpKX1jYXRjaChlKXtmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2Uic3RhcnRfYXV0b19yZWZyZXNoX3Rva2VuIjp0cnl7Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHIuc3RhcnRBdXRvUmVmcmVzaFRva2VuKCkpKX1jYXRjaChlKXtmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2Uic2V0X3Nlc3Npb25fc3RhdGUiOnRyeXtmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgci5zZXRTZXNzaW9uU3RhdGUobnVsbD09bj92b2lkIDA6bi5kYXRhKSkpfWNhdGNoKGUpe2YucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJ1cGRhdGVfY29uZmlnIjp0cnl7Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIudXBkYXRlQ29uZmlnKG51bGw9PW4/dm9pZCAwOm4uZGF0YSkpKX1jYXRjaChlKXtmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0X2NvbmZpZ19kYXRhIjp0cnl7Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIuZ2V0Q29uZmlnRGF0YSgpKSl9Y2F0Y2goZSl7Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztkZWZhdWx0Om51bGw9PWZ8fGYucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShuZXcgYygiU1BBLUNMSUVOVF9XT1JLRVItT05NU0ctSVYwMiIsIlRoZSBtZXNzYWdlIHR5cGUgaXMgaW52YWxpZC4iLGBUaGUgbWVzc2FnZSB0eXBlIHByb3ZpZGVkLCAke24udHlwZX0sIGlzIGludmFsaWQuYCkpKX1lbHNlIGYucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShuZXcgYygiU1BBLUNMSUVOVF9XT1JLRVItT05NU0ctTkYwMSIsIlRoZSB3ZWIgd29ya2VyIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCB5ZXQuIiwiVGhlIGluaXRpYWxpemUgbWV0aG9kIG5lZWRzIHRvIGJlIGNhbGxlZCBiZWZvcmUgdGhlIHNwZWNpZmllZCBvcGVyYXRpb24gY2FuIGJlIGNhcnJpZWQgb3V0LiIpKSl9KSk7Y29uc3QgaT0oKT0+e24ucG9zdE1lc3NhZ2Uoe3R5cGU6InJlcXVlc3Qtc3RhcnQifSl9LG89ZT0+e24ucG9zdE1lc3NhZ2Uoe2RhdGE6SlNPTi5zdHJpbmdpZnkobnVsbCE9ZT9lOiIiKSx0eXBlOiJyZXF1ZXN0LXN1Y2Nlc3MifSl9LHM9KCk9PntuLnBvc3RNZXNzYWdlKHt0eXBlOiJyZXF1ZXN0LWZpbmlzaCJ9KX19KSgoKGUsdCk9Pm5ldyBXcihlLHQpKSk7cmV0dXJue319KCk7Cgo=",null,!1,function(t){return H=H||function(t,e,l){var n=void 0===e?null:e,i=function(t,e){var l=atob(t);if(e){for(var n=new Uint8Array(l.length),i=0,c=l.length;i<c;++i)n[i]=l.charCodeAt(i);return String.fromCharCode.apply(null,new Uint16Array(n.buffer))}return l}(t,void 0!==l&&l),c=i.indexOf("\n",10)+1,o=i.substring(c)+(n?"//# sourceMappingURL="+n:""),d=new Blob([o],{type:"application/javascript"});return URL.createObjectURL(d)}("Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwp2YXIgd29ya2VyX2NvZGU9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZShlLHQsbixyKXtyZXR1cm4gbmV3KG58fChuPVByb21pc2UpKSgoZnVuY3Rpb24oaSxvKXtmdW5jdGlvbiBzKGUpe3RyeXtjKHIubmV4dChlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gYShlKXt0cnl7YyhyLnRocm93KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBjKGUpe3ZhciB0O2UuZG9uZT9pKGUudmFsdWUpOih0PWUudmFsdWUsdCBpbnN0YW5jZW9mIG4/dDpuZXcgbigoZnVuY3Rpb24oZSl7ZSh0KX0pKSkudGhlbihzLGEpfWMoKHI9ci5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pKX1mdW5jdGlvbiB0KGUsdCxuLHIpe3JldHVybiBuZXcobnx8KG49UHJvbWlzZSkpKChmdW5jdGlvbihpLG8pe2Z1bmN0aW9uIHMoZSl7dHJ5e2Moci5uZXh0KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBhKGUpe3RyeXtjKHIudGhyb3coZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIGMoZSl7dmFyIHQ7ZS5kb25lP2koZS52YWx1ZSk6KHQ9ZS52YWx1ZSx0IGluc3RhbmNlb2Ygbj90Om5ldyBuKChmdW5jdGlvbihlKXtlKHQpfSkpKS50aGVuKHMsYSl9Yygocj1yLmFwcGx5KGUsdHx8W10pKS5uZXh0KCkpfSkpfXZhciBuOyFmdW5jdGlvbihlKXtlLmZvcm1Qb3N0PSJmb3JtX3Bvc3QiLGUucXVlcnk9InF1ZXJ5In0obnx8KG49e30pKTt2YXIgcjshZnVuY3Rpb24oZSl7ZS5Db25maWdEYXRhPSJjb25maWdfZGF0YSIsZS5PSURDUHJvdmlkZXJNZXRhRGF0YT0ib2lkY19wcm92aWRlcl9tZXRhX2RhdGEiLGUuU2Vzc2lvbkRhdGE9InNlc3Npb25fZGF0YSIsZS5UZW1wb3JhcnlEYXRhPSJ0ZW1wb3JhcnlfZGF0YSJ9KHJ8fChyPXt9KSk7Y29uc3QgaT0icmVmcmVzaF90b2tlbl90aW1lciIsbz1bIlJTMjU2IiwiUlM1MTIiLCJSUzM4NCIsIlBTMjU2Il0scz0ic2lnbl9vdXRfdXJsIjt2YXIgYTshZnVuY3Rpb24oZSl7ZS5JbmNsdWRlPSJpbmNsdWRlIixlLlNhbWVPcmlnaW49InNhbWUtb3JpZ2luIixlLk9taXQ9Im9taXQifShhfHwoYT17fSkpO2NsYXNzIGN7Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMubWVzc2FnZT1uLHRoaXMubmFtZT10LHRoaXMuY29kZT1lLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLG5ldy50YXJnZXQucHJvdG90eXBlKX19Y2xhc3MgdXtjb25zdHJ1Y3Rvcigpe31zdGF0aWMgZmlsdGVyQ2xhaW1zRnJvbUlEVG9rZW5QYXlsb2FkKGUpe2NvbnN0IHQ9T2JqZWN0LmFzc2lnbih7fSxlKTtudWxsPT10fHxkZWxldGUgdC5pc3MsbnVsbD09dHx8ZGVsZXRlIHQuYXVkLG51bGw9PXR8fGRlbGV0ZSB0LmV4cCxudWxsPT10fHxkZWxldGUgdC5pYXQsbnVsbD09dHx8ZGVsZXRlIHQuYWNyLG51bGw9PXR8fGRlbGV0ZSB0LmFtcixudWxsPT10fHxkZWxldGUgdC5henAsbnVsbD09dHx8ZGVsZXRlIHQuYXV0aF90aW1lLG51bGw9PXR8fGRlbGV0ZSB0Lm5vbmNlLG51bGw9PXR8fGRlbGV0ZSB0LmNfaGFzaCxudWxsPT10fHxkZWxldGUgdC5hdF9oYXNoLG51bGw9PXR8fGRlbGV0ZSB0Lm5iZixudWxsPT10fHxkZWxldGUgdC5pc2ssbnVsbD09dHx8ZGVsZXRlIHQuc2lkO2NvbnN0IG49e307cmV0dXJuIE9iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKChbZSx0XSk9Pntjb25zdCByPWUuc3BsaXQoIl8iKS5tYXAoKChlLHQpPT4wPT09dD9lOltlWzBdLnRvVXBwZXJDYXNlKCksLi4uZS5zbGljZSgxKV0uam9pbigiIikpKS5qb2luKCIiKTtuW3JdPXR9KSksbn1zdGF0aWMgZ2V0VG9rZW5SZXF1ZXN0SGVhZGVycygpe3JldHVybntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24iLCJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQifX1zdGF0aWMgZ2VuZXJhdGVTdGF0ZVBhcmFtRm9yUmVxdWVzdENvcnJlbGF0aW9uKGUsdCl7Y29uc3Qgbj1wYXJzZUludChlLnNwbGl0KCIjIilbMV0pO3JldHVybiB0P2Ake3R9X3JlcXVlc3RfJHtufWA6YHJlcXVlc3RfJHtufWB9c3RhdGljIGV4dHJhY3RQS0NFS2V5RnJvbVN0YXRlUGFyYW0oZSl7cmV0dXJuYHBrY2VfY29kZV92ZXJpZmllciMke3BhcnNlSW50KGUuc3BsaXQoInJlcXVlc3RfIilbMV0pfWB9fXUuZ2V0VGVuYW50RG9tYWluRnJvbUlkVG9rZW5QYXlsb2FkPShlLHQ9IkAiKT0+e2NvbnN0IG49ZS5zdWIuc3BsaXQodCk7cmV0dXJuIG4ubGVuZ3RoPjI/bltuLmxlbmd0aC0xXToiIn07Y2xhc3MgbHtjb25zdHJ1Y3RvcihlLG4pe3RoaXMuX2RhdGFMYXllcj1lLHRoaXMuX2NvbmZpZz0oKT0+dCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0Q29uZmlnRGF0YSgpfSkpLHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhPSgpPT50KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSgpfSkpLHRoaXMuX2NyeXB0b0hlbHBlcj1ufXJlc29sdmVFbmRwb2ludHMoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXt9LG49eWllbGQgdGhpcy5fY29uZmlnKCk7cmV0dXJuIG4uZW5kcG9pbnRzJiZPYmplY3Qua2V5cyhuLmVuZHBvaW50cykuZm9yRWFjaCgoZT0+e2NvbnN0IHI9ZS5yZXBsYWNlKC9bQS1aXS9nLChlPT5gXyR7ZS50b0xvd2VyQ2FzZSgpfWApKTt0W3JdPShudWxsPT1uP3ZvaWQgMDpuLmVuZHBvaW50cyk/bi5lbmRwb2ludHNbZV06IiJ9KSksT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHQpfSkpfXJlc29sdmVFbmRwb2ludHNFeHBsaWNpdGx5KCl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPXt9LHQ9eWllbGQgdGhpcy5fY29uZmlnKCksbj1bImF1dGhvcml6YXRpb25fZW5kcG9pbnQiLCJlbmRfc2Vzc2lvbl9lbmRwb2ludCIsImp3a3NfdXJpIiwiY2hlY2tfc2Vzc2lvbl9pZnJhbWUiLCJyZXZvY2F0aW9uX2VuZHBvaW50IiwidG9rZW5fZW5kcG9pbnQiLCJpc3N1ZXIiLCJ1c2VyaW5mb19lbmRwb2ludCJdO2lmKCF0LmVuZHBvaW50c3x8IU9iamVjdC5rZXlzKG51bGw9PXQ/dm9pZCAwOnQuZW5kcG9pbnRzKS5ldmVyeSgoZT0+e2NvbnN0IHQ9ZS5yZXBsYWNlKC9bQS1aXS9nLChlPT5gXyR7ZS50b0xvd2VyQ2FzZSgpfWApKTtyZXR1cm4gbi5pbmNsdWRlcyh0KX0pKSl0aHJvdyBuZXcgYygiSlMtQVVUSF9IRUxQRVItUkVFLU5GMDEiLCJObyByZXF1aXJlZCBlbmRwb2ludHMuIiwiUmVxdWlyZWQgb2lkYyBlbmRwb2ludHMgYXJlIG5vdCBkZWZpbmVkIik7cmV0dXJuIHQuZW5kcG9pbnRzJiZPYmplY3Qua2V5cyh0LmVuZHBvaW50cykuZm9yRWFjaCgobj0+e2NvbnN0IHI9bi5yZXBsYWNlKC9bQS1aXS9nLChlPT5gXyR7ZS50b0xvd2VyQ2FzZSgpfWApKTtlW3JdPShudWxsPT10P3ZvaWQgMDp0LmVuZHBvaW50cyk/dC5lbmRwb2ludHNbbl06IiJ9KSksT2JqZWN0LmFzc2lnbih7fSxlKX0pKX1yZXNvbHZlRW5kcG9pbnRzQnlCYXNlVVJMKCl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPXt9LHQ9eWllbGQgdGhpcy5fY29uZmlnKCksbj10LmJhc2VVcmw7aWYoIW4pdGhyb3cgbmV3IGMoIkpTLUFVVEhfSEVMUEVSX1JFQk8tTkYwMSIsIkJhc2UgVVJMIG5vdCBkZWZpbmVkLiIsIkJhc2UgVVJMIGlzIG5vdCBkZWZpbmVkIGluIEF1dGhDbGllbnQgY29uZmlnLiIpO3QuZW5kcG9pbnRzJiZPYmplY3Qua2V5cyh0LmVuZHBvaW50cykuZm9yRWFjaCgobj0+e2NvbnN0IHI9bi5yZXBsYWNlKC9bQS1aXS9nLChlPT5gXyR7ZS50b0xvd2VyQ2FzZSgpfWApKTtlW3JdPShudWxsPT10P3ZvaWQgMDp0LmVuZHBvaW50cyk/dC5lbmRwb2ludHNbbl06IiJ9KSk7Y29uc3Qgcj17YXV0aG9yaXphdGlvbl9lbmRwb2ludDpgJHtufS9vYXV0aDIvYXV0aG9yaXplYCxlbmRfc2Vzc2lvbl9lbmRwb2ludDpgJHtufS9vaWRjL2xvZ291dGAsaXNzdWVyOmAke259L29hdXRoMi90b2tlbmAsandrc191cmk6YCR7bn0vb2F1dGgyL2p3a3NgLGNoZWNrX3Nlc3Npb25faWZyYW1lOmAke259L29pZGMvY2hlY2tzZXNzaW9uYCxyZXZvY2F0aW9uX2VuZHBvaW50OmAke259L29hdXRoMi9yZXZva2VgLHRva2VuX2VuZHBvaW50OmAke259L29hdXRoMi90b2tlbmAsdXNlcmluZm9fZW5kcG9pbnQ6YCR7bn0vb2F1dGgyL3VzZXJpbmZvYH07cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxyKSxlKX0pKX12YWxpZGF0ZUlkVG9rZW4oZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PSh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoKSkuandrc191cmksbj15aWVsZCB0aGlzLl9jb25maWcoKTtpZighdHx8MD09PXQudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYygiSlNfQVVUSF9IRUxQRVItVklULU5GMDEiLCJKV0tTIGVuZHBvaW50IG5vdCBmb3VuZC4iLCJObyBKV0tTIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIEpXS1MgZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7bGV0IHI7dHJ5e3I9eWllbGQgZmV0Y2godCx7Y3JlZGVudGlhbHM6bi5zZW5kQ29va2llc0luUmVxdWVzdHM/YS5JbmNsdWRlOmEuU2FtZU9yaWdpbn0pfWNhdGNoKHQpe3Rocm93IG5ldyBjKCJKUy1BVVRIX0hFTFBFUi1WSVQtTkUwMiIsIlJlcXVlc3QgdG8gandrcyBlbmRwb2ludCBmYWlsZWQuIixudWxsIT10P3Q6IlRoZSByZXF1ZXN0IHNlbnQgdG8gZ2V0IHRoZSBqd2tzIGZyb20gdGhlIHNlcnZlciBmYWlsZWQuIil9aWYoMjAwIT09ci5zdGF0dXN8fCFyLm9rKXRocm93IG5ldyBjKCJKUy1BVVRIX0hFTFBFUi1WSVQtSEUwMyIsYEludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIHJlY2VpdmVkIGZvciBqd2tzIHJlcXVlc3QgKCR7ci5zdGF0dXNUZXh0fSkuYCx5aWVsZCByLmpzb24oKSk7Y29uc3QgaT0oeWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSkuaXNzdWVyLHtrZXlzOm99PXlpZWxkIHIuanNvbigpLHM9eWllbGQgdGhpcy5fY3J5cHRvSGVscGVyLmdldEpXS0ZvclRoZUlkVG9rZW4oZS5zcGxpdCgiLiIpWzBdLG8pO3JldHVybiB0aGlzLl9jcnlwdG9IZWxwZXIuaXNWYWxpZElkVG9rZW4oZSxzLCh5aWVsZCB0aGlzLl9jb25maWcoKSkuY2xpZW50SUQsbnVsbCE9aT9pOiIiLHRoaXMuX2NyeXB0b0hlbHBlci5kZWNvZGVJRFRva2VuKGUpLnN1YiwoeWllbGQgdGhpcy5fY29uZmlnKCkpLmNsb2NrVG9sZXJhbmNlKX0pKX1nZXRBdXRoZW50aWNhdGVkVXNlckluZm8oZSl7dmFyIHQsbixyLGk7Y29uc3Qgbz10aGlzLl9jcnlwdG9IZWxwZXIuZGVjb2RlSURUb2tlbihlKSxzPXUuZ2V0VGVuYW50RG9tYWluRnJvbUlkVG9rZW5QYXlsb2FkKG8pLGE9bnVsbCE9PSh0PW51bGw9PW8/dm9pZCAwOm8udXNlcm5hbWUpJiZ2b2lkIDAhPT10P3Q6IiIsYz1udWxsIT09KG49by5naXZlbl9uYW1lKSYmdm9pZCAwIT09bj9uOiIiLGw9bnVsbCE9PShyPW8uZmFtaWx5X25hbWUpJiZ2b2lkIDAhPT1yP3I6IiIsZD1jJiZsP2Ake2N9ICR7bH1gOmN8fGx8fCIiLGg9bnVsbCE9PShpPW8ucHJlZmVycmVkX3VzZXJuYW1lKSYmdm9pZCAwIT09aT9pOmQ7cmV0dXJuIE9iamVjdC5hc3NpZ24oe2Rpc3BsYXlOYW1lOmgsdGVuYW50RG9tYWluOnMsdXNlcm5hbWU6YX0sdS5maWx0ZXJDbGFpbXNGcm9tSURUb2tlblBheWxvYWQobykpfXJlcGxhY2VDdXN0b21HcmFudFRlbXBsYXRlVGFncyhlLG4pe3ZhciByO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7bGV0IHQ9Im9wZW5pZCI7Y29uc3QgaT15aWVsZCB0aGlzLl9jb25maWcoKSxvPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShuKTtyZXR1cm4gaS5zY29wZSYmaS5zY29wZS5sZW5ndGg+MCYmKGkuc2NvcGUuaW5jbHVkZXMoIm9wZW5pZCIpfHxpLnNjb3BlLnB1c2goIm9wZW5pZCIpLHQ9aS5zY29wZS5qb2luKCIgIikpLGUucmVwbGFjZSgie3t0b2tlbn19IixvLmFjY2Vzc190b2tlbikucmVwbGFjZSgie3t1c2VybmFtZX19Iix0aGlzLmdldEF1dGhlbnRpY2F0ZWRVc2VySW5mbyhvLmlkX3Rva2VuKS51c2VybmFtZSkucmVwbGFjZSgie3tzY29wZX19Iix0KS5yZXBsYWNlKCJ7e2NsaWVudElEfX0iLGkuY2xpZW50SUQpLnJlcGxhY2UoInt7Y2xpZW50U2VjcmV0fX0iLG51bGwhPT0ocj1pLmNsaWVudFNlY3JldCkmJnZvaWQgMCE9PXI/cjoiIil9KSl9Y2xlYXJVc2VyU2Vzc2lvbkRhdGEoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9kYXRhTGF5ZXIucmVtb3ZlVGVtcG9yYXJ5RGF0YShlKSx5aWVsZCB0aGlzLl9kYXRhTGF5ZXIucmVtb3ZlU2Vzc2lvbkRhdGEoZSl9KSl9aGFuZGxlVG9rZW5SZXNwb25zZShlLG4pe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7aWYoMjAwIT09ZS5zdGF0dXN8fCFlLm9rKXRocm93IG5ldyBjKCJKUy1BVVRIX0hFTFBFUi1IVFItTkUwMSIsYEludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIHJlY2VpdmVkIGZvciB0b2tlbiByZXF1ZXN0ICgke2Uuc3RhdHVzVGV4dH0pLmAseWllbGQgZS5qc29uKCkpO2NvbnN0IHI9eWllbGQgZS5qc29uKCk7aWYoci5jcmVhdGVkX2F0PShuZXcgRGF0ZSkuZ2V0VGltZSgpLCh5aWVsZCB0aGlzLl9jb25maWcoKSkudmFsaWRhdGVJRFRva2VuKXJldHVybiB0aGlzLnZhbGlkYXRlSWRUb2tlbihyLmlkX3Rva2VuKS50aGVuKCgoKT0+dCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRTZXNzaW9uRGF0YShyLG4pO2NvbnN0IGU9e2FjY2Vzc1Rva2VuOnIuYWNjZXNzX3Rva2VuLGNyZWF0ZWRBdDpyLmNyZWF0ZWRfYXQsZXhwaXJlc0luOnIuZXhwaXJlc19pbixpZFRva2VuOnIuaWRfdG9rZW4scmVmcmVzaFRva2VuOnIucmVmcmVzaF90b2tlbixzY29wZTpyLnNjb3BlLHRva2VuVHlwZTpyLnRva2VuX3R5cGV9O3JldHVybiBQcm9taXNlLnJlc29sdmUoZSl9KSkpKTt7Y29uc3QgZT17YWNjZXNzVG9rZW46ci5hY2Nlc3NfdG9rZW4sY3JlYXRlZEF0OnIuY3JlYXRlZF9hdCxleHBpcmVzSW46ci5leHBpcmVzX2luLGlkVG9rZW46ci5pZF90b2tlbixyZWZyZXNoVG9rZW46ci5yZWZyZXNoX3Rva2VuLHNjb3BlOnIuc2NvcGUsdG9rZW5UeXBlOnIudG9rZW5fdHlwZX07cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRTZXNzaW9uRGF0YShyLG4pLFByb21pc2UucmVzb2x2ZShlKX19KSl9Z2VuZXJhdGVQS0NFS2V5KGUpe3ZhciBuO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YShlKSxyPVtdO09iamVjdC5rZXlzKHQpLmZvckVhY2goKGU9PntlLnN0YXJ0c1dpdGgoInBrY2VfY29kZV92ZXJpZmllciIpJiZyLnB1c2goZSl9KSk7Y29uc3QgaT1yLnNvcnQoKS5wb3AoKTtyZXR1cm5gcGtjZV9jb2RlX3ZlcmlmaWVyIyR7cGFyc2VJbnQobnVsbCE9PShuPW51bGw9PWk/dm9pZCAwOmkuc3BsaXQoIiMiKVsxXSkmJnZvaWQgMCE9PW4/bjoiLTEiKSsxfWB9KSl9fWNsYXNzIGR7Y29uc3RydWN0b3IoZSl7dGhpcy5fY3J5cHRvVXRpbHM9ZX1nZXRDb2RlVmVyaWZpZXIoKXtyZXR1cm4gdGhpcy5fY3J5cHRvVXRpbHMuYmFzZTY0VVJMRW5jb2RlKHRoaXMuX2NyeXB0b1V0aWxzLmdlbmVyYXRlUmFuZG9tQnl0ZXMoMzIpKX1nZXRDb2RlQ2hhbGxlbmdlKGUpe3JldHVybiB0aGlzLl9jcnlwdG9VdGlscy5iYXNlNjRVUkxFbmNvZGUodGhpcy5fY3J5cHRvVXRpbHMuaGFzaFNoYTI1NihlKSl9Z2V0SldLRm9yVGhlSWRUb2tlbihlLHQpe2NvbnN0IG49SlNPTi5wYXJzZSh0aGlzLl9jcnlwdG9VdGlscy5iYXNlNjRVUkxEZWNvZGUoZSkpO2Zvcihjb25zdCBlIG9mIHQpaWYobi5raWQ9PT1lLmtpZClyZXR1cm4gZTt0aHJvdyBuZXcgYygiSlMtQ1JZUFRPX1VUSUwtR0pGVElULUlWMDEiLCJraWQgbm90IGZvdW5kLiIsIkZhaWxlZCB0byBmaW5kIHRoZSAna2lkJyBzcGVjaWZpZWQgaW4gdGhlIGlkX3Rva2VuLiAna2lkJyBmb3VuZCBpbiB0aGUgaGVhZGVyIDogIituLmtpZCsiLCBFeHBlY3RlZCB2YWx1ZXM6ICIrdC5tYXAoKGU9PmUua2lkKSkuam9pbigiLCAiKSl9aXNWYWxpZElkVG9rZW4oZSx0LG4scixpLHMpe3JldHVybiB0aGlzLl9jcnlwdG9VdGlscy52ZXJpZnlKd3QoZSx0LG8sbixyLGkscykudGhlbigoZT0+ZT9Qcm9taXNlLnJlc29sdmUoITApOlByb21pc2UucmVqZWN0KG5ldyBjKCJKUy1DUllQVE9fSEVMUEVSLUlWSVQtSVYwMSIsIkludmFsaWQgSUQgdG9rZW4uIiwiSUQgdG9rZW4gdmFsaWRhdGlvbiByZXR1cm5lZCBmYWxzZSIpKSkpLmNhdGNoKChlPT4iRVJSX0pXVF9DTEFJTV9WQUxJREFUSU9OX0ZBSUxFRCI9PT0obnVsbD09ZT92b2lkIDA6ZS5jb2RlKSYmIm5iZiI9PT0obnVsbD09ZT92b2lkIDA6ZS5jbGFpbSk/UHJvbWlzZS5yZWplY3QobmV3IGMoIkpTLUNSWVBUT19VVElMUy1JVklULUlWMDIiLCJKV1QgTkJGIENMQUlNIFZBTElEQVRJT04gRkFJTEVEIiwiSldUIE5CRiBjbGFpbSB2YWxpZGF0aW9uIGhhcyBiZWVuIGZhaWxlZCIpKTpQcm9taXNlLnJlamVjdChuZXcgYygiSlMtQ1JZUFRPX1VUSUxTLUlWSVQtSVYwMyIsIkpXVCBWQUxJREFUSU9OIEZBSUxFRCIsIkpXVCB2YWxpZGF0aW9uIGhhcyBiZWVuIGZhaWxlZCIpKSkpfWRlY29kZUlEVG9rZW4oZSl7dHJ5e2NvbnN0IHQ9dGhpcy5fY3J5cHRvVXRpbHMuYmFzZTY0VVJMRGVjb2RlKGUuc3BsaXQoIi4iKVsxXSk7cmV0dXJuIEpTT04ucGFyc2UodCl9Y2F0Y2goZSl7dGhyb3cgbmV3IGMoIkpTLUNSWVBUT19VVElMLURJVC1JVjAxIiwiRGVjb2RpbmcgSUQgdG9rZW4gZmFpbGVkLiIsZSl9fX1jbGFzcyBoe2NvbnN0cnVjdG9yKGUsbil7dGhpcy5fY3J5cHRvVXRpbHM9bix0aGlzLl9jcnlwdG9IZWxwZXI9bmV3IGQobiksdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXI9bmV3IGwoZSx0aGlzLl9jcnlwdG9IZWxwZXIpLHRoaXMuX2RhdGFMYXllcj1lLHRoaXMuX2NvbmZpZz0oKT0+dCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0Q29uZmlnRGF0YSgpfSkpLHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhPSgpPT50KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSgpfSkpfWdldEF1dGhvcml6YXRpb25VUkwoZSxuKXt2YXIgcixpLG87cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YVBhcmFtZXRlcigiYXV0aG9yaXphdGlvbl9lbmRwb2ludCIpLHM9eWllbGQgdGhpcy5fY29uZmlnKCk7aWYoIXR8fDA9PT10LnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1HQVUtTkYwMSIsIk5vIGF1dGhvcml6YXRpb24gZW5kcG9pbnQgZm91bmQuIiwiTm8gYXV0aG9yaXphdGlvbiBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIGZyb20gdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIGF1dGhvcml6YXRpb24gZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7Y29uc3QgYT1uZXcgVVJMKHQpLGw9bmV3IE1hcDtsLnNldCgicmVzcG9uc2VfdHlwZSIsImNvZGUiKSxsLnNldCgiY2xpZW50X2lkIixzLmNsaWVudElEKTtsZXQgZD0ib3BlbmlkIjtzLnNjb3BlJiZzLnNjb3BlLmxlbmd0aD4wJiYocy5zY29wZS5pbmNsdWRlcygib3BlbmlkIil8fHMuc2NvcGUucHVzaCgib3BlbmlkIiksZD1zLnNjb3BlLmpvaW4oIiAiKSksbC5zZXQoInNjb3BlIixkKSxsLnNldCgicmVkaXJlY3RfdXJpIixzLnNpZ25JblJlZGlyZWN0VVJMKSxzLnJlc3BvbnNlTW9kZSYmbC5zZXQoInJlc3BvbnNlX21vZGUiLHMucmVzcG9uc2VNb2RlKTtjb25zdCBoPXlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLmdlbmVyYXRlUEtDRUtleShuKTtpZihzLmVuYWJsZVBLQ0Upe2NvbnN0IGU9bnVsbD09PShyPXRoaXMuX2NyeXB0b0hlbHBlcil8fHZvaWQgMD09PXI/dm9pZCAwOnIuZ2V0Q29kZVZlcmlmaWVyKCksdD1udWxsPT09KGk9dGhpcy5fY3J5cHRvSGVscGVyKXx8dm9pZCAwPT09aT92b2lkIDA6aS5nZXRDb2RlQ2hhbGxlbmdlKGUpO3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGgsZSxuKSxsLnNldCgiY29kZV9jaGFsbGVuZ2VfbWV0aG9kIiwiUzI1NiIpLGwuc2V0KCJjb2RlX2NoYWxsZW5nZSIsdCl9cy5wcm9tcHQmJmwuc2V0KCJwcm9tcHQiLHMucHJvbXB0KTtjb25zdCBmPWU7aWYoZilmb3IoY29uc3RbZSx0XW9mIE9iamVjdC5lbnRyaWVzKGYpKWlmKCIiIT1lJiYiIiE9dCYmInN0YXRlIiE9PWUpe2NvbnN0IG49ZS5yZXBsYWNlKC9bQS1aXS9nLChlPT5gXyR7ZS50b0xvd2VyQ2FzZSgpfWApKTtsLnNldChuLHQudG9TdHJpbmcoKSl9bC5zZXQoInN0YXRlIix1LmdlbmVyYXRlU3RhdGVQYXJhbUZvclJlcXVlc3RDb3JyZWxhdGlvbihoLGY/bnVsbD09PShvPWYuc3RhdGUpfHx2b2lkIDA9PT1vP3ZvaWQgMDpvLnRvU3RyaW5nKCk6IiIpKTtmb3IoY29uc3RbZSx0XW9mIGwuZW50cmllcygpKWEuc2VhcmNoUGFyYW1zLmFwcGVuZChlLHQpO3JldHVybiBhLnRvU3RyaW5nKCl9KSl9cmVxdWVzdEFjY2Vzc1Rva2VuKGUsbixyLGkpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD0oeWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSkudG9rZW5fZW5kcG9pbnQsbz15aWVsZCB0aGlzLl9jb25maWcoKTtpZighdHx8MD09PXQudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLVJBVDEtTkYwMSIsIlRva2VuIGVuZHBvaW50IG5vdCBmb3VuZC4iLCJObyB0b2tlbiBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSB0b2tlbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtuJiYoeWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFNlc3Npb25EYXRhUGFyYW1ldGVyKCJzZXNzaW9uX3N0YXRlIixuLGkpKTtjb25zdCBzPVtdO3MucHVzaChgY2xpZW50X2lkPSR7by5jbGllbnRJRH1gKSxvLmNsaWVudFNlY3JldCYmby5jbGllbnRTZWNyZXQudHJpbSgpLmxlbmd0aD4wJiZzLnB1c2goYGNsaWVudF9zZWNyZXQ9JHtvLmNsaWVudFNlY3JldH1gKTtjb25zdCBsPWU7bGV0IGQ7cy5wdXNoKGBjb2RlPSR7bH1gKSxzLnB1c2goImdyYW50X3R5cGU9YXV0aG9yaXphdGlvbl9jb2RlIikscy5wdXNoKGByZWRpcmVjdF91cmk9JHtvLnNpZ25JblJlZGlyZWN0VVJMfWApLG8uZW5hYmxlUEtDRSYmKHMucHVzaChgY29kZV92ZXJpZmllcj0ke3lpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKHUuZXh0cmFjdFBLQ0VLZXlGcm9tU3RhdGVQYXJhbShyKSxpKX1gKSx5aWVsZCB0aGlzLl9kYXRhTGF5ZXIucmVtb3ZlVGVtcG9yYXJ5RGF0YVBhcmFtZXRlcih1LmV4dHJhY3RQS0NFS2V5RnJvbVN0YXRlUGFyYW0ociksaSkpO3RyeXtkPXlpZWxkIGZldGNoKHQse2JvZHk6cy5qb2luKCImIiksY3JlZGVudGlhbHM6by5zZW5kQ29va2llc0luUmVxdWVzdHM/YS5JbmNsdWRlOmEuU2FtZU9yaWdpbixoZWFkZXJzOm5ldyBIZWFkZXJzKHUuZ2V0VG9rZW5SZXF1ZXN0SGVhZGVycygpKSxtZXRob2Q6IlBPU1QifSl9Y2F0Y2godCl7dGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1SQVQxLU5FMDIiLCJSZXF1ZXN0aW5nIGFjY2VzcyB0b2tlbiBmYWlsZWQiLG51bGwhPXQ/dDoiVGhlIHJlcXVlc3QgdG8gZ2V0IHRoZSBhY2Nlc3MgdG9rZW4gZnJvbSB0aGUgc2VydmVyIGZhaWxlZC4iKX1pZighZC5vayl0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLVJBVDEtSEUwMyIsYFJlcXVlc3RpbmcgYWNjZXNzIHRva2VuIGZhaWxlZCB3aXRoICR7ZC5zdGF0dXNUZXh0fWAseWllbGQgZC5qc29uKCkpO3JldHVybiB5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5oYW5kbGVUb2tlblJlc3BvbnNlKGQsaSl9KSl9cmVmcmVzaEFjY2Vzc1Rva2VuKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD0oeWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSkudG9rZW5fZW5kcG9pbnQsbj15aWVsZCB0aGlzLl9jb25maWcoKSxyPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YShlKTtpZighci5yZWZyZXNoX3Rva2VuKXRocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkFUMi1ORjAxIiwiTm8gcmVmcmVzaCB0b2tlbiBmb3VuZC4iLCJUaGVyZSB3YXMgbm8gcmVmcmVzaCB0b2tlbiBmb3VuZC4gQXNnYXJkZW8gZG9lc24ndCByZXR1cm4gYSByZWZyZXNoIHRva2VuIGlmIHRoZSByZWZyZXNoIHRva2VuIGdyYW50IGlzIG5vdCBlbmFibGVkLiIpO2lmKCF0fHwwPT09dC50cmltKCkubGVuZ3RoKXRocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkFUMi1ORjAyIiwiTm8gcmVmcmVzaCB0b2tlbiBlbmRwb2ludCBmb3VuZC4iLCJObyByZWZyZXNoIHRva2VuIGVuZHBvaW50IHdhcyBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIHJlZnJlc2ggdG9rZW4gZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7Y29uc3QgaT1bXTtsZXQgbztpLnB1c2goYGNsaWVudF9pZD0ke24uY2xpZW50SUR9YCksaS5wdXNoKGByZWZyZXNoX3Rva2VuPSR7ci5yZWZyZXNoX3Rva2VufWApLGkucHVzaCgiZ3JhbnRfdHlwZT1yZWZyZXNoX3Rva2VuIiksbi5jbGllbnRTZWNyZXQmJm4uY2xpZW50U2VjcmV0LnRyaW0oKS5sZW5ndGg+MCYmaS5wdXNoKGBjbGllbnRfc2VjcmV0PSR7bi5jbGllbnRTZWNyZXR9YCk7dHJ5e289eWllbGQgZmV0Y2godCx7Ym9keTppLmpvaW4oIiYiKSxjcmVkZW50aWFsczpuLnNlbmRDb29raWVzSW5SZXF1ZXN0cz9hLkluY2x1ZGU6YS5TYW1lT3JpZ2luLGhlYWRlcnM6bmV3IEhlYWRlcnModS5nZXRUb2tlblJlcXVlc3RIZWFkZXJzKCkpLG1ldGhvZDoiUE9TVCJ9KX1jYXRjaCh0KXt0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLVJBVDItTlIwMyIsIlJlZnJlc2ggYWNjZXNzIHRva2VuIHJlcXVlc3QgZmFpbGVkLiIsbnVsbCE9dD90OiJUaGUgcmVxdWVzdCB0byByZWZyZXNoIHRoZSBhY2Nlc3MgdG9rZW4gZmFpbGVkLiIpfWlmKCFvLm9rKXRocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkFUMi1IRTA0IixgUmVmcmVzaGluZyBhY2Nlc3MgdG9rZW4gZmFpbGVkIHdpdGggJHtvLnN0YXR1c1RleHR9YCx5aWVsZCBvLmpzb24oKSk7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLmhhbmRsZVRva2VuUmVzcG9uc2UobyxlKX0pKX1yZXZva2VBY2Nlc3NUb2tlbihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9KHlpZWxkIHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCkpLnJldm9jYXRpb25fZW5kcG9pbnQsbj15aWVsZCB0aGlzLl9jb25maWcoKTtpZighdHx8MD09PXQudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLVJBVDMtTkYwMSIsIk5vIHJldm9rZSBhY2Nlc3MgdG9rZW4gZW5kcG9pbnQgZm91bmQuIiwiTm8gcmV2b2tlIGFjY2VzcyB0b2tlbiBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSByZXZva2UgYWNjZXNzIHRva2VuIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpO2NvbnN0IHI9W107bGV0IGk7ci5wdXNoKGBjbGllbnRfaWQ9JHtuLmNsaWVudElEfWApLHIucHVzaChgdG9rZW49JHsoeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpKS5hY2Nlc3NfdG9rZW59YCksci5wdXNoKCJ0b2tlbl90eXBlX2hpbnQ9YWNjZXNzX3Rva2VuIik7dHJ5e2k9eWllbGQgZmV0Y2godCx7Ym9keTpyLmpvaW4oIiYiKSxjcmVkZW50aWFsczpuLnNlbmRDb29raWVzSW5SZXF1ZXN0cz9hLkluY2x1ZGU6YS5TYW1lT3JpZ2luLGhlYWRlcnM6bmV3IEhlYWRlcnModS5nZXRUb2tlblJlcXVlc3RIZWFkZXJzKCkpLG1ldGhvZDoiUE9TVCJ9KX1jYXRjaCh0KXt0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLVJBVDMtTkUwMiIsIlRoZSByZXF1ZXN0IHRvIHJldm9rZSBhY2Nlc3MgdG9rZW4gZmFpbGVkLiIsbnVsbCE9dD90OiJUaGUgcmVxdWVzdCBzZW50IHRvIHJldm9rZSB0aGUgYWNjZXNzIHRva2VuIGZhaWxlZC4iKX1pZigyMDAhPT1pLnN0YXR1c3x8IWkub2spdGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1SQVQzLUhFMDMiLGBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cyByZWNlaXZlZCBmb3IgcmV2b2tlIGFjY2VzcyB0b2tlbiByZXF1ZXN0ICgke2kuc3RhdHVzVGV4dH0pLmAseWllbGQgaS5qc29uKCkpO3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5jbGVhclVzZXJTZXNzaW9uRGF0YShlKSxQcm9taXNlLnJlc29sdmUoaSl9KSl9cmVxdWVzdEN1c3RvbUdyYW50KGUsbil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCByPXlpZWxkIHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCksaT15aWVsZCB0aGlzLl9jb25maWcoKTtsZXQgbztpZihvPWUudG9rZW5FbmRwb2ludCYmMCE9PWUudG9rZW5FbmRwb2ludC50cmltKCkubGVuZ3RoP2UudG9rZW5FbmRwb2ludDpyLnRva2VuX2VuZHBvaW50LCFvfHwwPT09by50cmltKCkubGVuZ3RoKXRocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkNHLU5GMDEiLCJUb2tlbiBlbmRwb2ludCBub3QgZm91bmQuIiwiTm8gdG9rZW4gZW5kcG9pbnQgd2FzIGZvdW5kIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgdG9rZW4gZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIik7Y29uc3Qgcz15aWVsZCBQcm9taXNlLmFsbChPYmplY3QuZW50cmllcyhlLmRhdGEpLm1hcCgoKFtlLHJdKT0+dCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIucmVwbGFjZUN1c3RvbUdyYW50VGVtcGxhdGVUYWdzKHIsbik7cmV0dXJuYCR7ZX09JHt0fWB9KSkpKSk7bGV0IGw9T2JqZWN0LmFzc2lnbih7fSx1LmdldFRva2VuUmVxdWVzdEhlYWRlcnMoKSk7ZS5hdHRhY2hUb2tlbiYmKGw9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGwpLHtBdXRob3JpemF0aW9uOmBCZWFyZXIgJHsoeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKG4pKS5hY2Nlc3NfdG9rZW59YH0pKTtjb25zdCBkPXtib2R5OnMuam9pbigiJiIpLGNyZWRlbnRpYWxzOmkuc2VuZENvb2tpZXNJblJlcXVlc3RzP2EuSW5jbHVkZTphLlNhbWVPcmlnaW4saGVhZGVyczpuZXcgSGVhZGVycyhsKSxtZXRob2Q6IlBPU1QifTtsZXQgaDt0cnl7aD15aWVsZCBmZXRjaChvLGQpfWNhdGNoKGUpe3Rocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtUkNHLU5FMDIiLCJUaGUgY3VzdG9tIGdyYW50IHJlcXVlc3QgZmFpbGVkLiIsbnVsbCE9ZT9lOiJUaGUgcmVxdWVzdCBzZW50IHRvIGdldCB0aGUgY3VzdG9tIGdyYW50IGZhaWxlZC4iKX1pZigyMDAhPT1oLnN0YXR1c3x8IWgub2spdGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1SQ0ctSEUwMyIsYEludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIHJlY2VpdmVkIGZvciB0aGUgY3VzdG9tIGdyYW50IHJlcXVlc3QuICgke2guc3RhdHVzVGV4dH0pYCx5aWVsZCBoLmpzb24oKSk7cmV0dXJuIGUucmV0dXJuc1Nlc3Npb24/dGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuaGFuZGxlVG9rZW5SZXNwb25zZShoLG4pOlByb21pc2UucmVzb2x2ZSh5aWVsZCBoLmpzb24oKSl9KSl9Z2V0QmFzaWNVc2VySW5mbyhlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpLG49dGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuZ2V0QXV0aGVudGljYXRlZFVzZXJJbmZvKG51bGw9PXQ/dm9pZCAwOnQuaWRfdG9rZW4pO2xldCByPXthbGxvd2VkU2NvcGVzOnQuc2NvcGUsc2Vzc2lvblN0YXRlOnQuc2Vzc2lvbl9zdGF0ZX07cmV0dXJuIE9iamVjdC5rZXlzKG4pLmZvckVhY2goKGU9Pnt2b2lkIDAhPT1uW2VdJiYiIiE9PW5bZV0mJm51bGwhPT1uW2VdfHxkZWxldGUgbltlXX0pKSxyPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxyKSxuKSxyfSkpfWdldERlY29kZWRJRFRva2VuKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD0oeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpKS5pZF90b2tlbjtyZXR1cm4gdGhpcy5fY3J5cHRvSGVscGVyLmRlY29kZUlEVG9rZW4odCl9KSl9Z2V0SURUb2tlbihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybih5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoZSkpLmlkX3Rva2VufSkpfWdldE9JRENQcm92aWRlck1ldGFEYXRhKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9jb25maWcoKTtpZighZSYmKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIikpKXJldHVybiBQcm9taXNlLnJlc29sdmUoKTtjb25zdCBuPXQud2VsbEtub3duRW5kcG9pbnQ7aWYobil7bGV0IGU7dHJ5e2lmKGU9eWllbGQgZmV0Y2gobiksMjAwIT09ZS5zdGF0dXN8fCFlLm9rKXRocm93IG5ldyBFcnJvcn1jYXRjaCh0KXt0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLUdPUE1ELUhFMDEiLCJJbnZhbGlkIHdlbGwta25vd24gcmVzcG9uc2UiLCJUaGUgd2VsbCBrbm93biBlbmRwb2ludCByZXNwb25zZSBoYXMgYmVlbiBmYWlsZWQgd2l0aCBhbiBlcnJvci4iKX1yZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLnNldE9JRENQcm92aWRlck1ldGFEYXRhKHlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLnJlc29sdmVFbmRwb2ludHMoeWllbGQgZS5qc29uKCkpKSx5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigib3BfY29uZmlnX2luaXRpYXRlZCIsITApLFByb21pc2UucmVzb2x2ZSgpfWlmKHQuYmFzZVVybCl7dHJ5e3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRPSURDUHJvdmlkZXJNZXRhRGF0YSh5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXNvbHZlRW5kcG9pbnRzQnlCYXNlVVJMKCkpfWNhdGNoKHQpe3Rocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtR09QTUQtSVYwMiIsIlJlc29sdmluZyBlbmRwb2ludHMgZmFpbGVkLiIsbnVsbCE9dD90OiJSZXNvbHZpbmcgZW5kcG9pbnRzIGJ5IGJhc2UgdXJsIGZhaWxlZC4iKX1yZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiLCEwKSxQcm9taXNlLnJlc29sdmUoKX10cnl7eWllbGQgdGhpcy5fZGF0YUxheWVyLnNldE9JRENQcm92aWRlck1ldGFEYXRhKHlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyLnJlc29sdmVFbmRwb2ludHNFeHBsaWNpdGx5KCkpfWNhdGNoKHQpe3Rocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtR09QTUQtSVYwMyIsIlJlc29sdmluZyBlbmRwb2ludHMgZmFpbGVkLiIsbnVsbCE9dD90OiJSZXNvbHZpbmcgZW5kcG9pbnRzIGJ5IGV4cGxpY2l0bHkgZmFpbGVkLiIpfXJldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigib3BfY29uZmlnX2luaXRpYXRlZCIsITApLFByb21pc2UucmVzb2x2ZSgpfSkpfWdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCl7dmFyIGUsbixyLGksbyxzLGEsYyx1LGw7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCk7cmV0dXJue2F1dGhvcml6YXRpb25FbmRwb2ludDpudWxsIT09KGU9dC5hdXRob3JpemF0aW9uX2VuZHBvaW50KSYmdm9pZCAwIT09ZT9lOiIiLGNoZWNrU2Vzc2lvbklmcmFtZTpudWxsIT09KG49dC5jaGVja19zZXNzaW9uX2lmcmFtZSkmJnZvaWQgMCE9PW4/bjoiIixlbmRTZXNzaW9uRW5kcG9pbnQ6bnVsbCE9PShyPXQuZW5kX3Nlc3Npb25fZW5kcG9pbnQpJiZ2b2lkIDAhPT1yP3I6IiIsaW50cm9zcGVjdGlvbkVuZHBvaW50Om51bGwhPT0oaT10LmludHJvc3BlY3Rpb25fZW5kcG9pbnQpJiZ2b2lkIDAhPT1pP2k6IiIsaXNzdWVyOm51bGwhPT0obz10Lmlzc3VlcikmJnZvaWQgMCE9PW8/bzoiIixqd2tzVXJpOm51bGwhPT0ocz10Lmp3a3NfdXJpKSYmdm9pZCAwIT09cz9zOiIiLHJlZ2lzdHJhdGlvbkVuZHBvaW50Om51bGwhPT0oYT10LnJlZ2lzdHJhdGlvbl9lbmRwb2ludCkmJnZvaWQgMCE9PWE/YToiIixyZXZvY2F0aW9uRW5kcG9pbnQ6bnVsbCE9PShjPXQucmV2b2NhdGlvbl9lbmRwb2ludCkmJnZvaWQgMCE9PWM/YzoiIix0b2tlbkVuZHBvaW50Om51bGwhPT0odT10LnRva2VuX2VuZHBvaW50KSYmdm9pZCAwIT09dT91OiIiLHVzZXJpbmZvRW5kcG9pbnQ6bnVsbCE9PShsPXQudXNlcmluZm9fZW5kcG9pbnQpJiZ2b2lkIDAhPT1sP2w6IiJ9fSkpfWdldFNpZ25PdXRVUkwoZSl7dmFyIG4scixpO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD1udWxsPT09KG49eWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uZW5kX3Nlc3Npb25fZW5kcG9pbnQsbz15aWVsZCB0aGlzLl9jb25maWcoKTtpZighdHx8MD09PXQudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgYygiSlMtQVVUSF9DT1JFLUdTT1UtTkYwMSIsIlNpZ24tb3V0IGVuZHBvaW50IG5vdCBmb3VuZC4iLCJObyBzaWduLW91dCBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSBzaWduLW91dCBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtjb25zdCBzPW51bGw9PT0ocj15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoZSkpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLmlkX3Rva2VuO2lmKCFzfHwwPT09cy50cmltKCkubGVuZ3RoKXRocm93IG5ldyBjKCJKUy1BVVRIX0NPUkUtR1NPVS1ORjAyIiwiSUQgdG9rZW4gbm90IGZvdW5kLiIsIk5vIElEIHRva2VuIGNvdWxkIGJlIGZvdW5kLiBFaXRoZXIgdGhlIHNlc3Npb24gaW5mb3JtYXRpb24gaXMgbG9zdCBvciB5b3UgaGF2ZSBub3Qgc2lnbmVkIGluLiIpO2NvbnN0IGE9bnVsbCE9PShpPW51bGw9PW8/dm9pZCAwOm8uc2lnbk91dFJlZGlyZWN0VVJMKSYmdm9pZCAwIT09aT9pOm51bGw9PW8/dm9pZCAwOm8uc2lnbkluUmVkaXJlY3RVUkw7aWYoIWF8fDA9PT1hLnRyaW0oKS5sZW5ndGgpdGhyb3cgbmV3IGMoIkpTLUFVVEhfQ09SRS1HU09VLU5GMDMiLCJObyBzaWduLW91dCByZWRpcmVjdCBVUkwgZm91bmQuIiwiVGhlIHNpZ24tb3V0IHJlZGlyZWN0IFVSTCBjYW5ub3QgYmUgZm91bmQgb3IgdGhlIFVSTCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4gTm8gc2lnbi1pbiByZWRpcmVjdCBVUkwgaGFzIGJlZW4gZm91bmQgZWl0aGVyLiAiKTtyZXR1cm5gJHt0fT9pZF90b2tlbl9oaW50PSR7c30mcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpPSR7YX0mc3RhdGU9c2lnbl9vdXRfc3VjY2Vzc2B9KSl9c2lnbk91dChlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmdldFNpZ25PdXRVUkwoZSl9KSl9Y2xlYXJVc2VyU2Vzc2lvbkRhdGEoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5jbGVhclVzZXJTZXNzaW9uRGF0YShlKX0pKX1nZXRBY2Nlc3NUb2tlbihlKXt2YXIgbjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBudWxsPT09KG49eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKGUpKXx8dm9pZCAwPT09bj92b2lkIDA6bi5hY2Nlc3NfdG9rZW59KSl9aXNBdXRoZW50aWNhdGVkKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEJvb2xlYW4oeWllbGQgdGhpcy5nZXRBY2Nlc3NUb2tlbihlKSl9KSl9Z2V0UEtDRUNvZGUoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcih1LmV4dHJhY3RQS0NFS2V5RnJvbVN0YXRlUGFyYW0oZSksbil9KSl9c2V0UEtDRUNvZGUoZSxuLHIpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKHUuZXh0cmFjdFBLQ0VLZXlGcm9tU3RhdGVQYXJhbShuKSxlLHIpfSkpfXVwZGF0ZUNvbmZpZyhlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRDb25maWdEYXRhKGUpLHlpZWxkIHRoaXMuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoITApfSkpfX1jbGFzcyBme2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5faWQ9ZSx0aGlzLl9zdG9yZT10fXNldERhdGFJbkJ1bGsoZSxuKXt2YXIgcjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9bnVsbCE9PShyPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEoZSkpJiZ2b2lkIDAhPT1yP3I6bnVsbCxpPXQmJkpTT04ucGFyc2UodCksbz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30saSksbikscz1KU09OLnN0cmluZ2lmeShvKTt5aWVsZCB0aGlzLl9zdG9yZS5zZXREYXRhKGUscyl9KSl9c2V0VmFsdWUoZSxuLHIpe3ZhciBpO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD1udWxsIT09KGk9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YShlKSkmJnZvaWQgMCE9PWk/aTpudWxsLG89dCYmSlNPTi5wYXJzZSh0KSxzPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxvKSx7W25dOnJ9KSxhPUpTT04uc3RyaW5naWZ5KHMpO3lpZWxkIHRoaXMuX3N0b3JlLnNldERhdGEoZSxhKX0pKX1yZW1vdmVWYWx1ZShlLG4pe3ZhciByO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD1udWxsIT09KHI9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YShlKSkmJnZvaWQgMCE9PXI/cjpudWxsLGk9dCYmSlNPTi5wYXJzZSh0KSxvPU9iamVjdC5hc3NpZ24oe30saSk7ZGVsZXRlIG9bbl07Y29uc3Qgcz1KU09OLnN0cmluZ2lmeShvKTt5aWVsZCB0aGlzLl9zdG9yZS5zZXREYXRhKGUscyl9KSl9X3Jlc29sdmVLZXkoZSx0KXtyZXR1cm4gdD9gJHtlfS0ke3RoaXMuX2lkfS0ke3R9YDpgJHtlfS0ke3RoaXMuX2lkfWB9c2V0Q29uZmlnRGF0YShlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuc2V0RGF0YUluQnVsayh0aGlzLl9yZXNvbHZlS2V5KHIuQ29uZmlnRGF0YSksZSl9KSl9c2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt0aGlzLnNldERhdGFJbkJ1bGsodGhpcy5fcmVzb2x2ZUtleShyLk9JRENQcm92aWRlck1ldGFEYXRhKSxlKX0pKX1zZXRUZW1wb3JhcnlEYXRhKGUsbil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt0aGlzLnNldERhdGFJbkJ1bGsodGhpcy5fcmVzb2x2ZUtleShyLlRlbXBvcmFyeURhdGEsbiksZSl9KSl9c2V0U2Vzc2lvbkRhdGEoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuc2V0RGF0YUluQnVsayh0aGlzLl9yZXNvbHZlS2V5KHIuU2Vzc2lvbkRhdGEsbiksZSl9KSl9c2V0Q3VzdG9tRGF0YShlLG4scil7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt0aGlzLnNldERhdGFJbkJ1bGsodGhpcy5fcmVzb2x2ZUtleShlLHIpLG4pfSkpfWdldENvbmZpZ0RhdGEoKXt2YXIgZTtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBKU09OLnBhcnNlKG51bGwhPT0oZT15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoci5Db25maWdEYXRhKSkpJiZ2b2lkIDAhPT1lP2U6bnVsbCl9KSl9Z2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoKXt2YXIgZTtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBKU09OLnBhcnNlKG51bGwhPT0oZT15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoci5PSURDUHJvdmlkZXJNZXRhRGF0YSkpKSYmdm9pZCAwIT09ZT9lOm51bGwpfSkpfWdldFRlbXBvcmFyeURhdGEoZSl7dmFyIG47cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gSlNPTi5wYXJzZShudWxsIT09KG49eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuVGVtcG9yYXJ5RGF0YSxlKSkpJiZ2b2lkIDAhPT1uP246bnVsbCl9KSl9Z2V0U2Vzc2lvbkRhdGEoZSl7dmFyIG47cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gSlNPTi5wYXJzZShudWxsIT09KG49eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuU2Vzc2lvbkRhdGEsZSkpKSYmdm9pZCAwIT09bj9uOm51bGwpfSkpfWdldEN1c3RvbURhdGEoZSxuKXt2YXIgcjtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBKU09OLnBhcnNlKG51bGwhPT0ocj15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoZSxuKSkpJiZ2b2lkIDAhPT1yP3I6bnVsbCl9KSl9cmVtb3ZlQ29uZmlnRGF0YSgpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fc3RvcmUucmVtb3ZlRGF0YSh0aGlzLl9yZXNvbHZlS2V5KHIuQ29uZmlnRGF0YSkpfSkpfXJlbW92ZU9JRENQcm92aWRlck1ldGFEYXRhKCl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9zdG9yZS5yZW1vdmVEYXRhKHRoaXMuX3Jlc29sdmVLZXkoci5PSURDUHJvdmlkZXJNZXRhRGF0YSkpfSkpfXJlbW92ZVRlbXBvcmFyeURhdGEoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9zdG9yZS5yZW1vdmVEYXRhKHRoaXMuX3Jlc29sdmVLZXkoci5UZW1wb3JhcnlEYXRhLGUpKX0pKX1yZW1vdmVTZXNzaW9uRGF0YShlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX3N0b3JlLnJlbW92ZURhdGEodGhpcy5fcmVzb2x2ZUtleShyLlNlc3Npb25EYXRhLGUpKX0pKX1nZXRDb25maWdEYXRhUGFyYW1ldGVyKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoci5Db25maWdEYXRhKSk7cmV0dXJuIHQmJkpTT04ucGFyc2UodClbZV19KSl9Z2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGFQYXJhbWV0ZXIoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShyLk9JRENQcm92aWRlck1ldGFEYXRhKSk7cmV0dXJuIHQmJkpTT04ucGFyc2UodClbZV19KSl9Z2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihlLG4pe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoci5UZW1wb3JhcnlEYXRhLG4pKTtyZXR1cm4gdCYmSlNPTi5wYXJzZSh0KVtlXX0pKX1nZXRTZXNzaW9uRGF0YVBhcmFtZXRlcihlLG4pe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoci5TZXNzaW9uRGF0YSxuKSk7cmV0dXJuIHQmJkpTT04ucGFyc2UodClbZV19KSl9c2V0Q29uZmlnRGF0YVBhcmFtZXRlcihlLG4pe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5zZXRWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KHIuQ29uZmlnRGF0YSksZSxuKX0pKX1zZXRPSURDUHJvdmlkZXJNZXRhRGF0YVBhcmFtZXRlcihlLG4pe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5zZXRWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KHIuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpLGUsbil9KSl9c2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihlLG4saSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnNldFZhbHVlKHRoaXMuX3Jlc29sdmVLZXkoci5UZW1wb3JhcnlEYXRhLGkpLGUsbil9KSl9c2V0U2Vzc2lvbkRhdGFQYXJhbWV0ZXIoZSxuLGkpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5zZXRWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KHIuU2Vzc2lvbkRhdGEsaSksZSxuKX0pKX1yZW1vdmVDb25maWdEYXRhUGFyYW1ldGVyKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5yZW1vdmVWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KHIuQ29uZmlnRGF0YSksZSl9KSl9cmVtb3ZlT0lEQ1Byb3ZpZGVyTWV0YURhdGFQYXJhbWV0ZXIoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnJlbW92ZVZhbHVlKHRoaXMuX3Jlc29sdmVLZXkoci5PSURDUHJvdmlkZXJNZXRhRGF0YSksZSl9KSl9cmVtb3ZlVGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihlLG4pe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5yZW1vdmVWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KHIuVGVtcG9yYXJ5RGF0YSxuKSxlKX0pKX1yZW1vdmVTZXNzaW9uRGF0YVBhcmFtZXRlcihlLG4pe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5yZW1vdmVWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KHIuU2Vzc2lvbkRhdGEsbiksZSl9KSl9fWNvbnN0IHA9e2Nsb2NrVG9sZXJhbmNlOjMwMCxlbmFibGVQS0NFOiEwLHJlc3BvbnNlTW9kZTpuLnF1ZXJ5LHNjb3BlOlsib3BlbmlkIl0sc2VuZENvb2tpZXNJblJlcXVlc3RzOiEwLHZhbGlkYXRlSURUb2tlbjohMH07Y2xhc3MgZ3sKLyoqCiAgICAgICAgICogVGhpcyBpcyB0aGUgY29uc3RydWN0b3IgbWV0aG9kIHRoYXQgcmV0dXJucyBhbiBpbnN0YW5jZSBvZiB0aGUgLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtTdG9yZX0gc3RvcmUgLSBUaGUgc3RvcmUgb2JqZWN0LgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBfc3RvcmU6IFN0b3JlID0gbmV3IERhdGFTdG9yZSgpOwogICAgICAgICAqIGNvbnN0IGF1dGggPSBuZXcgQXNnYXJkZW9BdXRoQ2xpZW50PEN1c3RvbUNsaWVudENvbmZpZz4oX3N0b3JlKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNjb25zdHJ1Y3RvcgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqLwpjb25zdHJ1Y3RvcihlLHQpe2cuX2luc3RhbmNlSUQ/Zy5faW5zdGFuY2VJRCs9MTpnLl9pbnN0YW5jZUlEPTAsdGhpcy5fZGF0YUxheWVyPW5ldyBmKGBpbnN0YW5jZV8ke2cuX2luc3RhbmNlSUR9YCxlKSx0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmU9bmV3IGgodGhpcy5fZGF0YUxheWVyLHQpLGcuX2F1dGhlbnRpY2F0aW9uQ29yZT1uZXcgaCh0aGlzLl9kYXRhTGF5ZXIsdCkKLyoqCiAgICAgICAgICoKICAgICAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgU0RLIHdpdGggdGhlIGNvbmZpZyBkYXRhLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtBdXRoQ2xpZW50Q29uZmlnPFQ+fSBjb25maWcgLSBUaGUgY29uZmlnIG9iamVjdCB0byBpbml0aWFsaXplIHdpdGguCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGNvbnN0IGNvbmZpZyA9IHsKICAgICAgICAgKiAgICAgc2lnbkluUmVkaXJlY3RVUkw6ICJodHRwOi8vbG9jYWxob3N0OjMwMDAvc2lnbi1pbiIsCiAgICAgICAgICogICAgIGNsaWVudElEOiAiY2xpZW50IElEIiwKICAgICAgICAgKiAgICAgYmFzZVVybDogImh0dHBzOi8vbG9jYWxob3N0Ojk0NDMiCiAgICAgICAgICogfQogICAgICAgICAqCiAgICAgICAgICogYXdhaXQgYXV0aC5pbml0aWFsaXplKGNvbmZpZyk7CiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjaW5pdGlhbGl6ZQogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovfWluaXRpYWxpemUoZSl7dmFyIG4scixpO3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fZGF0YUxheWVyLnNldENvbmZpZ0RhdGEoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30scCksZSkse3Njb3BlOlsuLi5udWxsIT09KG49cC5zY29wZSkmJnZvaWQgMCE9PW4/bjpbXSwuLi5udWxsIT09KGk9bnVsbD09PShyPWUuc2NvcGUpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLmZpbHRlcigoZT0+e3ZhciB0O3JldHVybiEobnVsbD09PSh0PW51bGw9PXA/dm9pZCAwOnAuc2NvcGUpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmluY2x1ZGVzKGUpKX0pKSkmJnZvaWQgMCE9PWk/aTpbXV19KSl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGBEYXRhTGF5ZXJgIG9iamVjdCB0aGF0IGFsbG93cyB5b3UgdG8gYWNjZXNzIGF1dGhlbnRpY2F0aW9uIGRhdGEuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtEYXRhTGF5ZXJ9IC0gVGhlIGBEYXRhTGF5ZXJgIG9iamVjdC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgZGF0YSA9IGF1dGguZ2V0RGF0YUxheWVyKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0RGF0YUxheWVyCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9nZXREYXRhTGF5ZXIoKXtyZXR1cm4gdGhpcy5fZGF0YUxheWVyfQovKioKICAgICAgICAgKiBUaGlzIGlzIGFuIGFzeW5jIG1ldGhvZCB0aGF0IHJldHVybnMgYSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgYXV0aG9yaXphdGlvbiBVUkwuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge0dldEF1dGhVUkxDb25maWd9IGNvbmZpZyAtIChPcHRpb25hbCkgQSBjb25maWcgb2JqZWN0IHRvIGZvcmNlIGluaXRpYWxpemF0aW9uIGFuZCBwYXNzCiAgICAgICAgICogY3VzdG9tIHBhdGggcGFyYW1ldGVycyBzdWNoIGFzIHRoZSBmaWRwIHBhcmFtZXRlci4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nPn0gLSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBhdXRob3JpemF0aW9uIFVSTC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogYXV0aC5nZXRBdXRob3JpemF0aW9uVVJMKCkudGhlbigodXJsKT0+ewogICAgICAgICAqICAvLyBjb25zb2xlLmxvZyh1cmwpOwogICAgICAgICAqIH0pLmNhdGNoKChlcnJvcik9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5lcnJvcihlcnJvcik7CiAgICAgICAgICogfSk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0QXV0aG9yaXphdGlvblVSTAogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0QXV0aG9yaXphdGlvblVSTChlLG4pe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD1PYmplY3QuYXNzaWduKHt9LGUpO3JldHVybiBudWxsPT10fHxkZWxldGUgdC5mb3JjZUluaXQsKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIikpP3RoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRBdXRob3JpemF0aW9uVVJMKHQsbik6dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldE9JRENQcm92aWRlck1ldGFEYXRhKG51bGw9PWU/dm9pZCAwOmUuZm9yY2VJbml0KS50aGVuKCgoKT0+dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldEF1dGhvcml6YXRpb25VUkwodCxuKSkpfSkpfQovKioKICAgICAgICAgKiBUaGlzIGlzIGFuIGFzeW5jIG1ldGhvZCB0aGF0IHNlbmRzIGEgcmVxdWVzdCB0byBvYnRhaW4gdGhlIGFjY2VzcyB0b2tlbiBhbmQgcmV0dXJucyBhIFByb21pc2UKICAgICAgICAgKiB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHRva2VuIGFuZCBvdGhlciByZWxldmFudCBkYXRhLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGF1dGhvcml6YXRpb25Db2RlIC0gVGhlIGF1dGhvcml6YXRpb24gY29kZS4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2Vzc2lvblN0YXRlIC0gVGhlIHNlc3Npb24gc3RhdGUuCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPFRva2VuUmVzcG9uc2U+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHRva2VuIHJlc3BvbnNlLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBhdXRoLnJlcXVlc3RBY2Nlc3NUb2tlbihhdXRoQ29kZSwgc2Vzc2lvblN0YXRlKS50aGVuKCh0b2tlbik9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5sb2codG9rZW4pOwogICAgICAgICAqIH0pLmNhdGNoKChlcnJvcik9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5lcnJvcihlcnJvcik7CiAgICAgICAgICogfSk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjcmVxdWVzdEFjY2Vzc1Rva2VuCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9yZXF1ZXN0QWNjZXNzVG9rZW4oZSxuLHIsaSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4oeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiKSk/dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnJlcXVlc3RBY2Nlc3NUb2tlbihlLG4scixpKTp0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoITEpLnRoZW4oKCgpPT50aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmVxdWVzdEFjY2Vzc1Rva2VuKGUsbixyLGkpKSl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIGNsZWFycyBhbGwgYXV0aGVudGljYXRpb24gZGF0YSBhbmQgcmV0dXJucyB0aGUgc2lnbi1vdXQgVVJMLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgc2lnbi1vdXQgVVJMLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBzaWduT3V0VXJsID0gYXdhaXQgYXV0aC5zaWduT3V0KCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjc2lnbk91dAogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovc2lnbk91dChlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuc2lnbk91dChlKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgc2lnbi1vdXQgVVJMLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiAqKlRoaXMgZG9lc24ndCBjbGVhciB0aGUgYXV0aGVudGljYXRpb24gZGF0YS4qKgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHNpZ24tb3V0IFVSTC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3Qgc2lnbk91dFVybCA9IGF3YWl0IGF1dGguZ2V0U2lnbk91dFVSTCgpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldFNpZ25PdXRVUkwKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldFNpZ25PdXRVUkwoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldFNpZ25PdXRVUkwoZSl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgT0lEQyBzZXJ2aWNlIGVuZHBvaW50cyB0aGF0IGFyZSBmZXRjaGVkIGZyb20gdGhlIGAud2VsbC1rbm93bmAgZW5kcG9pbnQuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPE9JRENFbmRwb2ludHM+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIE9JREMgc2VydmljZSBlbmRwb2ludHMuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IGVuZHBvaW50cyA9IGF3YWl0IGF1dGguZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRPSURDU2VydmljZUVuZHBvaW50cwogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgZGVjb2RlcyB0aGUgcGF5bG9hZCBvZiB0aGUgSUQgdG9rZW4gYW5kIHJldHVybnMgaXQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8RGVjb2RlZElEVG9rZW5QYXlsb2FkPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBkZWNvZGVkIElEIHRva2VuIHBheWxvYWQuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IGRlY29kZWRJZFRva2VuID0gYXdhaXQgYXV0aC5nZXREZWNvZGVkSURUb2tlbigpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldERlY29kZWRJRFRva2VuCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9nZXREZWNvZGVkSURUb2tlbihlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0RGVjb2RlZElEVG9rZW4oZSl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIElEIHRva2VuLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgSUQgdG9rZW4uCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IGlkVG9rZW4gPSBhd2FpdCBhdXRoLmdldElEVG9rZW4oKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRJRFRva2VuCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9nZXRJRFRva2VuKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRJRFRva2VuKGUpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBiYXNpYyB1c2VyIGluZm9ybWF0aW9uIG9idGFpbmVkIGZyb20gdGhlIElEIHRva2VuLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPEJhc2ljVXNlckluZm8+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGJhc2ljIHVzZXIgaW5mb3JtYXRpb24uCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IHVzZXJJbmZvID0gYXdhaXQgYXV0aC5nZXRCYXNpY1VzZXJJbmZvKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0QmFzaWNVc2VySW5mbwogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0QmFzaWNVc2VySW5mbyhlKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0QmFzaWNVc2VySW5mbyhlKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV2b2tlcyB0aGUgYWNjZXNzIHRva2VuLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiAqKlRoaXMgbWV0aG9kIGFsc28gY2xlYXJzIHRoZSBhdXRoZW50aWNhdGlvbiBkYXRhLioqCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPEZldGNoUmVzcG9uc2U+fSAtIEEgUHJvbWlzZSB0aGF0IHJldHVybnMgdGhlIHJlc3BvbnNlIG9mIHRoZSByZXZva2UtYWNjZXNzLXRva2VuIHJlcXVlc3QuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF1dGgucmV2b2tlQWNjZXNzVG9rZW4oKS50aGVuKChyZXNwb25zZSk9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5sb2cocmVzcG9uc2UpOwogICAgICAgICAqIH0pLmNhdGNoKChlcnJvcik9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5lcnJvcihlcnJvcik7CiAgICAgICAgICogfSk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjcmV2b2tlQWNjZXNzVG9rZW4KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL3Jldm9rZUFjY2Vzc1Rva2VuKGUpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmV2b2tlQWNjZXNzVG9rZW4oZSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJlZnJlc2hlcyB0aGUgYWNjZXNzIHRva2VuIGFuZCByZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIG5ldyBhY2Nlc3MKICAgICAgICAgKiB0b2tlbiBhbmQgb3RoZXIgcmVsZXZhbnQgZGF0YS4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxUb2tlblJlc3BvbnNlPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSB0b2tlbiByZXNwb25zZS4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogYXV0aC5yZWZyZXNoQWNjZXNzVG9rZW4oKS50aGVuKChyZXNwb25zZSk9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5sb2cocmVzcG9uc2UpOwogICAgICAgICAqIH0pLmNhdGNoKChlcnJvcik9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5lcnJvcihlcnJvcik7CiAgICAgICAgICogfSk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjcmVmcmVzaEFjY2Vzc1Rva2VuCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9yZWZyZXNoQWNjZXNzVG9rZW4oZSl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5yZWZyZXNoQWNjZXNzVG9rZW4oZSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGFjY2VzcyB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGFjY2VzcyB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBhdXRoLmdldEFjY2Vzc1Rva2VuKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0QWNjZXNzVG9rZW4KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldEFjY2Vzc1Rva2VuKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRBY2Nlc3NUb2tlbihlKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2Qgc2VuZHMgYSBjdXN0b20tZ3JhbnQgcmVxdWVzdCBhbmQgcmV0dXJucyBhIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSByZXNwb25zZQogICAgICAgICAqIGRlcGVuZGluZyBvbiB0aGUgY29uZmlnIHBhc3NlZC4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7Q3VzdG9tR3JhbnRDb25maWd9IGNvbmZpZyAtIEEgY29uZmlnIG9iamVjdCBjb250YWluaW5nIHRoZSBjdXN0b20gZ3JhbnQgY29uZmlndXJhdGlvbnMuCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPFRva2VuUmVzcG9uc2UgfCBGZXRjaFJlc3BvbnNlPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSByZXNwb25zZSBkZXBlbmRpbmcKICAgICAgICAgKiBvbiB5b3VyIGNvbmZpZ3VyYXRpb25zLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBjb25maWcgPSB7CiAgICAgICAgICogICBhdHRhY2hUb2tlbjogZmFsc2UsCiAgICAgICAgICogICBkYXRhOiB7CiAgICAgICAgICogICAgICAgY2xpZW50X2lkOiAie3tjbGllbnRJRH19IiwKICAgICAgICAgKiAgICAgICBncmFudF90eXBlOiAiYWNjb3VudF9zd2l0Y2giLAogICAgICAgICAqICAgICAgIHNjb3BlOiAie3tzY29wZX19IiwKICAgICAgICAgKiAgICAgICB0b2tlbjogInt7dG9rZW59fSIsCiAgICAgICAgICogICB9LAogICAgICAgICAqICAgaWQ6ICJhY2NvdW50LXN3aXRjaCIsCiAgICAgICAgICogICByZXR1cm5SZXNwb25zZTogdHJ1ZSwKICAgICAgICAgKiAgIHJldHVybnNTZXNzaW9uOiB0cnVlLAogICAgICAgICAqICAgc2lnbkluUmVxdWlyZWQ6IHRydWUKICAgICAgICAgKiB9CiAgICAgICAgICoKICAgICAgICAgKiBhdXRoLnJlcXVlc3RDdXN0b21HcmFudChjb25maWcpLnRoZW4oKHJlc3BvbnNlKT0+ewogICAgICAgICAqICAvLyBjb25zb2xlLmxvZyhyZXNwb25zZSk7CiAgICAgICAgICogfSkuY2F0Y2goKGVycm9yKT0+ewogICAgICAgICAqICAvLyBjb25zb2xlLmVycm9yKGVycm9yKTsKICAgICAgICAgKiB9KTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNyZXF1ZXN0Q3VzdG9tR3JhbnQKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL3JlcXVlc3RDdXN0b21HcmFudChlLHQpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmVxdWVzdEN1c3RvbUdyYW50KGUsdCl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgaWYgdGhlIHVzZXIgaXMgYXV0aGVudGljYXRlZCBvciBub3QuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklEIC0gKE9wdGlvbmFsKSBBIHVuaXF1ZSBJRCBvZiB0aGUgdXNlciB0byBiZSBhdXRoZW50aWNhdGVkLiBUaGlzIGlzIHVzZWZ1bCBpbiBtdWx0aS11c2VyCiAgICAgICAgICogc2NlbmFyaW9zIHdoZXJlIGVhY2ggdXNlciBzaG91bGQgYmUgdW5pcXVlbHkgaWRlbnRpZmllZC4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8Ym9vbGVhbj59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBgdHJ1ZWAgaWYgdGhlIHVzZXIgaXMgYXV0aGVudGljYXRlZCwgYGZhbHNlYCBvdGhlcndpc2UuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF3YWl0IGF1dGguaXNBdXRoZW50aWNhdGVkKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjaXNBdXRoZW50aWNhdGVkCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9pc0F1dGhlbnRpY2F0ZWQoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmlzQXV0aGVudGljYXRlZChlKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgUEtDRSBjb2RlIGdlbmVyYXRlZCBkdXJpbmcgdGhlIGdlbmVyYXRpb24gb2YgdGhlIGF1dGhlbnRpY2F0aW9uIFVSTC4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySUQgLSAoT3B0aW9uYWwpIEEgdW5pcXVlIElEIG9mIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgdXNlZnVsIGluIG11bHRpLXVzZXIKICAgICAgICAgKiBzY2VuYXJpb3Mgd2hlcmUgZWFjaCB1c2VyIHNob3VsZCBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdGF0ZSAtIFRoZSBzdGF0ZSBwYXJhbWV0ZXIgdGhhdCB3YXMgcGFzc2VkIGluIHRoZSBhdXRoZW50aWNhdGlvbiBVUkwuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgUEtDRSBjb2RlLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBwa2NlID0gYXdhaXQgZ2V0UEtDRUNvZGUoKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRQS0NFQ29kZQogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0UEtDRUNvZGUoZSxuKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuZ2V0UEtDRUNvZGUoZSxuKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgUEtDRSBjb2RlIHRvIHRoZSBkYXRhIHN0b3JlLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHBrY2UgLSBUaGUgUEtDRSBjb2RlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdGF0ZSAtIFRoZSBzdGF0ZSBwYXJhbWV0ZXIgdGhhdCB3YXMgcGFzc2VkIGluIHRoZSBhdXRoZW50aWNhdGlvbiBVUkwuCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJJRCAtIChPcHRpb25hbCkgQSB1bmlxdWUgSUQgb2YgdGhlIHVzZXIgdG8gYmUgYXV0aGVudGljYXRlZC4gVGhpcyBpcyB1c2VmdWwgaW4gbXVsdGktdXNlcgogICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBlYWNoIHVzZXIgc2hvdWxkIGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF3YWl0IGF1dGguc2V0UEtDRUNvZGUoInBrY2VfY29kZSIpCiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjc2V0UEtDRUNvZGUKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL3NldFBLQ0VDb2RlKGUsbixyKXtyZXR1cm4gdCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5zZXRQS0NFQ29kZShlLG4scil9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgaWYgdGhlIHNpZ24tb3V0IGlzIHN1Y2Nlc3NmdWwgb3Igbm90LgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHNpZ25PdXRSZWRpcmVjdFVybCAtIFRoZSBVUkwgdG8gd2hpY2ggdGhlIHVzZXIgaGFzIGJlZW4gcmVkaXJlY3RlZCB0byBhZnRlciBzaWduaW5nLW91dC4KICAgICAgICAgKgogICAgICAgICAqICoqVGhlIHNlcnZlciBhcHBlbmRzIHBhdGggcGFyYW1ldGVycyB0byB0aGUgYHNpZ25PdXRSZWRpcmVjdFVSTGAgYW5kIHRoZXNlIHBhdGggcGFyYW1ldGVycwogICAgICAgICAqICBhcmUgcmVxdWlyZWQgZm9yIHRoaXMgbWV0aG9kIHRvIGZ1bmN0aW9uLioqCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtib29sZWFufSAtIGB0cnVlYCBpZiBzdWNjZXNzZnVsLCBgZmFsc2VgIG90aGVyd2lzZS4KICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNpc1NpZ25PdXRTdWNjZXNzZnVsCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9zdGF0aWMgaXNTaWduT3V0U3VjY2Vzc2Z1bChlKXtjb25zdCB0PW5ldyBVUkwoZSksbj10LnNlYXJjaFBhcmFtcy5nZXQoInN0YXRlIikscj1Cb29sZWFuKHQuc2VhcmNoUGFyYW1zLmdldCgiZXJyb3IiKSk7cmV0dXJuISFuJiYic2lnbl9vdXRfc3VjY2VzcyI9PT1uJiYhcn0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBpZiB0aGUgc2lnbi1vdXQgaGFzIGZhaWxlZCBvciBub3QuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2lnbk91dFJlZGlyZWN0VXJsIC0gVGhlIFVSTCB0byB3aGljaCB0aGUgdXNlciBoYXMgYmVlbiByZWRpcmVjdGVkIHRvIGFmdGVyIHNpZ25pbmctb3V0LgogICAgICAgICAqCiAgICAgICAgICogKipUaGUgc2VydmVyIGFwcGVuZHMgcGF0aCBwYXJhbWV0ZXJzIHRvIHRoZSBgc2lnbk91dFJlZGlyZWN0VVJMYCBhbmQgdGhlc2UgcGF0aCBwYXJhbWV0ZXJzCiAgICAgICAgICogIGFyZSByZXF1aXJlZCBmb3IgdGhpcyBtZXRob2QgdG8gZnVuY3Rpb24uKioKICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IC0gYHRydWVgIGlmIHN1Y2Nlc3NmdWwsIGBmYWxzZWAgb3RoZXJ3aXNlLgogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2RpZFNpZ25PdXRGYWlsCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9zdGF0aWMgZGlkU2lnbk91dEZhaWwoZSl7Y29uc3QgdD1uZXcgVVJMKGUpLG49dC5zZWFyY2hQYXJhbXMuZ2V0KCJzdGF0ZSIpLHI9Qm9vbGVhbih0LnNlYXJjaFBhcmFtcy5nZXQoImVycm9yIikpO3JldHVybiEhbiYmInNpZ25fb3V0X3N1Y2Nlc3MiPT09biYmcn0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgdXBkYXRlcyB0aGUgY29uZmlndXJhdGlvbiB0aGF0IHdhcyBwYXNzZWQgaW50byB0aGUgY29uc3RydWN0b3Igd2hlbiBpbnN0YW50aWF0aW5nIHRoaXMgY2xhc3MuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge1BhcnRpYWw8QXV0aENsaWVudENvbmZpZzxUPj59IGNvbmZpZyAtIEEgY29uZmlnIG9iamVjdCB0byB1cGRhdGUgdGhlIFNESyBjb25maWd1cmF0aW9ucyB3aXRoLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBjb25maWcgPSB7CiAgICAgICAgICogICAgIHNpZ25JblJlZGlyZWN0VVJMOiAiaHR0cDovL2xvY2FsaG9zdDozMDAwL3NpZ24taW4iLAogICAgICAgICAqICAgICBjbGllbnRJRDogImNsaWVudCBJRCIsCiAgICAgICAgICogICAgIGJhc2VVcmw6ICJodHRwczovL2xvY2FsaG9zdDo5NDQzIgogICAgICAgICAqIH0KICAgICAgICAgKgogICAgICAgICAqIGF3YWl0IGF1dGgudXBkYXRlQ29uZmlnKGNvbmZpZyk7CiAgICAgICAgICogYGBgCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3VwZGF0ZUNvbmZpZwogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovdXBkYXRlQ29uZmlnKGUpe3JldHVybiB0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnVwZGF0ZUNvbmZpZyhlKX0pKX1zdGF0aWMgY2xlYXJVc2VyU2Vzc2lvbkRhdGEoZSl7cmV0dXJuIHQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuY2xlYXJVc2VyU2Vzc2lvbkRhdGEoZSl9KSl9fWNvbnN0IHY9ImluaXQiO3ZhciB5LG07IWZ1bmN0aW9uKGUpe2UuTG9jYWxTdG9yYWdlPSJsb2NhbFN0b3JhZ2UiLGUuU2Vzc2lvblN0b3JhZ2U9InNlc3Npb25TdG9yYWdlIixlLldlYldvcmtlcj0id2ViV29ya2VyIixlLkJyb3dzZXJNZW1vcnk9ImJyb3dzZXJNZW1vcnkifSh5fHwoeT17fSkpLGZ1bmN0aW9uKGUpe2UuU2lnbkluPSJzaWduLWluIixlLlNpZ25PdXQ9InNpZ24tb3V0IixlLkluaXRpYWxpemU9ImluaXRpYWxpemUiLGUuSHR0cFJlcXVlc3RTdGFydD0iaHR0cC1yZXF1ZXN0LXN0YXJ0IixlLkh0dHBSZXF1ZXN0RmluaXNoPSJodHRwLXJlcXVlc3QtZmluaXNoIixlLkh0dHBSZXF1ZXN0RXJyb3I9Imh0dHAtcmVxdWVzdC1lcnJvciIsZS5IdHRwUmVxdWVzdFN1Y2Nlc3M9Imh0dHAtcmVxdWVzdC1zdWNjZXNzIixlLlJldm9rZUFjY2Vzc1Rva2VuPSJyZXZva2UtYWNjZXNzLXRva2VuIixlLkN1c3RvbUdyYW50PSJjdXN0b20tZ3JhbnQiLGUuU2lnbk91dEZhaWxlZD0ic2lnbi1vdXQtZmFpbGVkIn0obXx8KG09e30pKTtjb25zdCB3PSJwcm9tcHROb25lUmVxdWVzdFNlbnQiLF89ImVycm9yIixTPSJlcnJvcl9kZXNjcmlwdGlvbiIsYj0iY3VzdG9tX2dyYW50X2NvbmZpZyIsaz0iQWNjZXNzIHRva2VuIGlzIGludmFsaWQiO3ZhciBFPSJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzoidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6e307ZnVuY3Rpb24gVChlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSwiZGVmYXVsdCIpP2UuZGVmYXVsdDplfWZ1bmN0aW9uIEEoZSl7aWYoZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSxuKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLHIuZ2V0P3I6e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGVbbl19fSl9KSksdH12YXIgUj17ZXhwb3J0czp7fX0sQz1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgbj1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCkscj0wO3I8bi5sZW5ndGg7cisrKW5bcl09YXJndW1lbnRzW3JdO3JldHVybiBlLmFwcGx5KHQsbil9fSxEPUMsUD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2Z1bmN0aW9uIEkoZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSl9ZnVuY3Rpb24gTyhlKXtyZXR1cm4gdm9pZCAwPT09ZX1mdW5jdGlvbiBVKGUpe3JldHVybiJbb2JqZWN0IEFycmF5QnVmZmVyXSI9PT1QLmNhbGwoZSl9ZnVuY3Rpb24gTChlKXtyZXR1cm4gbnVsbCE9PWUmJiJvYmplY3QiPT10eXBlb2YgZX1mdW5jdGlvbiBIKGUpe2lmKCJbb2JqZWN0IE9iamVjdF0iIT09UC5jYWxsKGUpKXJldHVybiExO3ZhciB0PU9iamVjdC5nZXRQcm90b3R5cGVPZihlKTtyZXR1cm4gbnVsbD09PXR8fHQ9PT1PYmplY3QucHJvdG90eXBlfWZ1bmN0aW9uIE0oZSl7cmV0dXJuIltvYmplY3QgRnVuY3Rpb25dIj09PVAuY2FsbChlKX1mdW5jdGlvbiBOKGUsdCl7aWYobnVsbCE9ZSlpZigib2JqZWN0IiE9dHlwZW9mIGUmJihlPVtlXSksSShlKSlmb3IodmFyIG49MCxyPWUubGVuZ3RoO248cjtuKyspdC5jYWxsKG51bGwsZVtuXSxuLGUpO2Vsc2UgZm9yKHZhciBpIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsaSkmJnQuY2FsbChudWxsLGVbaV0saSxlKX12YXIgcT17aXNBcnJheTpJLGlzQXJyYXlCdWZmZXI6VSxpc0J1ZmZlcjpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9PWUmJiFPKGUpJiZudWxsIT09ZS5jb25zdHJ1Y3RvciYmIU8oZS5jb25zdHJ1Y3RvcikmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLmNvbnN0cnVjdG9yLmlzQnVmZmVyJiZlLmNvbnN0cnVjdG9yLmlzQnVmZmVyKGUpfSxpc0Zvcm1EYXRhOmZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEZvcm1EYXRhXSI9PT1QLmNhbGwoZSl9LGlzQXJyYXlCdWZmZXJWaWV3OmZ1bmN0aW9uKGUpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJkFycmF5QnVmZmVyLmlzVmlldz9BcnJheUJ1ZmZlci5pc1ZpZXcoZSk6ZSYmZS5idWZmZXImJlUoZS5idWZmZXIpfSxpc1N0cmluZzpmdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGV9LGlzTnVtYmVyOmZ1bmN0aW9uKGUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgZX0saXNPYmplY3Q6TCxpc1BsYWluT2JqZWN0OkgsaXNVbmRlZmluZWQ6Tyxpc0RhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgRGF0ZV0iPT09UC5jYWxsKGUpfSxpc0ZpbGU6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgRmlsZV0iPT09UC5jYWxsKGUpfSxpc0Jsb2I6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgQmxvYl0iPT09UC5jYWxsKGUpfSxpc0Z1bmN0aW9uOk0saXNTdHJlYW06ZnVuY3Rpb24oZSl7cmV0dXJuIEwoZSkmJk0oZS5waXBlKX0saXNVUkxTZWFyY2hQYXJhbXM6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgVVJMU2VhcmNoUGFyYW1zXSI9PT1QLmNhbGwoZSl9LGlzU3RhbmRhcmRCcm93c2VyRW52OmZ1bmN0aW9uKCl7cmV0dXJuKCJ1bmRlZmluZWQiPT10eXBlb2YgbmF2aWdhdG9yfHwiUmVhY3ROYXRpdmUiIT09bmF2aWdhdG9yLnByb2R1Y3QmJiJOYXRpdmVTY3JpcHQiIT09bmF2aWdhdG9yLnByb2R1Y3QmJiJOUyIhPT1uYXZpZ2F0b3IucHJvZHVjdCkmJigidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmInVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudCl9LGZvckVhY2g6TixtZXJnZTpmdW5jdGlvbiBlKCl7dmFyIHQ9e307ZnVuY3Rpb24gbihuLHIpe0godFtyXSkmJkgobik/dFtyXT1lKHRbcl0sbik6SChuKT90W3JdPWUoe30sbik6SShuKT90W3JdPW4uc2xpY2UoKTp0W3JdPW59Zm9yKHZhciByPTAsaT1hcmd1bWVudHMubGVuZ3RoO3I8aTtyKyspTihhcmd1bWVudHNbcl0sbik7cmV0dXJuIHR9LGV4dGVuZDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIE4odCwoZnVuY3Rpb24odCxyKXtlW3JdPW4mJiJmdW5jdGlvbiI9PXR5cGVvZiB0P0QodCxuKTp0fSkpLGV9LHRyaW06ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpbT9lLnRyaW0oKTplLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX0sc3RyaXBCT006ZnVuY3Rpb24oZSl7cmV0dXJuIDY1Mjc5PT09ZS5jaGFyQ29kZUF0KDApJiYoZT1lLnNsaWNlKDEpKSxlfX0saj1xO2Z1bmN0aW9uIHgoZSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChlKS5yZXBsYWNlKC8lM0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjQvZywiJCIpLnJlcGxhY2UoLyUyQy9naSwiLCIpLnJlcGxhY2UoLyUyMC9nLCIrIikucmVwbGFjZSgvJTVCL2dpLCJbIikucmVwbGFjZSgvJTVEL2dpLCJdIil9dmFyIEs9ZnVuY3Rpb24oZSx0LG4pe2lmKCF0KXJldHVybiBlO3ZhciByO2lmKG4pcj1uKHQpO2Vsc2UgaWYoai5pc1VSTFNlYXJjaFBhcmFtcyh0KSlyPXQudG9TdHJpbmcoKTtlbHNle3ZhciBpPVtdO2ouZm9yRWFjaCh0LChmdW5jdGlvbihlLHQpe251bGwhPWUmJihqLmlzQXJyYXkoZSk/dCs9IltdIjplPVtlXSxqLmZvckVhY2goZSwoZnVuY3Rpb24oZSl7ai5pc0RhdGUoZSk/ZT1lLnRvSVNPU3RyaW5nKCk6ai5pc09iamVjdChlKSYmKGU9SlNPTi5zdHJpbmdpZnkoZSkpLGkucHVzaCh4KHQpKyI9Iit4KGUpKX0pKSl9KSkscj1pLmpvaW4oIiYiKX1pZihyKXt2YXIgbz1lLmluZGV4T2YoIiMiKTstMSE9PW8mJihlPWUuc2xpY2UoMCxvKSksZSs9KC0xPT09ZS5pbmRleE9mKCI/Iik/Ij8iOiImIikrcn1yZXR1cm4gZX0sSj1xO2Z1bmN0aW9uIEIoKXt0aGlzLmhhbmRsZXJzPVtdfUIucHJvdG90eXBlLnVzZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMuaGFuZGxlcnMucHVzaCh7ZnVsZmlsbGVkOmUscmVqZWN0ZWQ6dCxzeW5jaHJvbm91czohIW4mJm4uc3luY2hyb25vdXMscnVuV2hlbjpuP24ucnVuV2hlbjpudWxsfSksdGhpcy5oYW5kbGVycy5sZW5ndGgtMX0sQi5wcm90b3R5cGUuZWplY3Q9ZnVuY3Rpb24oZSl7dGhpcy5oYW5kbGVyc1tlXSYmKHRoaXMuaGFuZGxlcnNbZV09bnVsbCl9LEIucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oZSl7Si5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsKGZ1bmN0aW9uKHQpe251bGwhPT10JiZlKHQpfSkpfTt2YXIgRj1CLFc9InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fTtmdW5jdGlvbiAkKCl7dGhyb3cgbmV3IEVycm9yKCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24geigpe3Rocm93IG5ldyBFcnJvcigiY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9dmFyIFY9JCxZPXo7ZnVuY3Rpb24gRyhlKXtpZihWPT09c2V0VGltZW91dClyZXR1cm4gc2V0VGltZW91dChlLDApO2lmKChWPT09JHx8IVYpJiZzZXRUaW1lb3V0KXJldHVybiBWPXNldFRpbWVvdXQsc2V0VGltZW91dChlLDApO3RyeXtyZXR1cm4gVihlLDApfWNhdGNoKHQpe3RyeXtyZXR1cm4gVi5jYWxsKG51bGwsZSwwKX1jYXRjaCh0KXtyZXR1cm4gVi5jYWxsKHRoaXMsZSwwKX19fSJmdW5jdGlvbiI9PXR5cGVvZiBXLnNldFRpbWVvdXQmJihWPXNldFRpbWVvdXQpLCJmdW5jdGlvbiI9PXR5cGVvZiBXLmNsZWFyVGltZW91dCYmKFk9Y2xlYXJUaW1lb3V0KTt2YXIgWCxaPVtdLFE9ITEsZWU9LTE7ZnVuY3Rpb24gdGUoKXtRJiZYJiYoUT0hMSxYLmxlbmd0aD9aPVguY29uY2F0KFopOmVlPS0xLFoubGVuZ3RoJiZuZSgpKX1mdW5jdGlvbiBuZSgpe2lmKCFRKXt2YXIgZT1HKHRlKTtRPSEwO2Zvcih2YXIgdD1aLmxlbmd0aDt0Oyl7Zm9yKFg9WixaPVtdOysrZWU8dDspWCYmWFtlZV0ucnVuKCk7ZWU9LTEsdD1aLmxlbmd0aH1YPW51bGwsUT0hMSxmdW5jdGlvbihlKXtpZihZPT09Y2xlYXJUaW1lb3V0KXJldHVybiBjbGVhclRpbWVvdXQoZSk7aWYoKFk9PT16fHwhWSkmJmNsZWFyVGltZW91dClyZXR1cm4gWT1jbGVhclRpbWVvdXQsY2xlYXJUaW1lb3V0KGUpO3RyeXtZKGUpfWNhdGNoKHQpe3RyeXtyZXR1cm4gWS5jYWxsKG51bGwsZSl9Y2F0Y2godCl7cmV0dXJuIFkuY2FsbCh0aGlzLGUpfX19KGUpfX1mdW5jdGlvbiByZShlLHQpe3RoaXMuZnVuPWUsdGhpcy5hcnJheT10fXJlLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt0aGlzLmZ1bi5hcHBseShudWxsLHRoaXMuYXJyYXkpfTtmdW5jdGlvbiBpZSgpe312YXIgb2U9aWUsc2U9aWUsYWU9aWUsY2U9aWUsdWU9aWUsbGU9aWUsZGU9aWU7dmFyIGhlPVcucGVyZm9ybWFuY2V8fHt9LGZlPWhlLm5vd3x8aGUubW96Tm93fHxoZS5tc05vd3x8aGUub05vd3x8aGUud2Via2l0Tm93fHxmdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZSkuZ2V0VGltZSgpfTt2YXIgcGU9bmV3IERhdGU7dmFyIGdlPXtuZXh0VGljazpmdW5jdGlvbihlKXt2YXIgdD1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aC0xKTtpZihhcmd1bWVudHMubGVuZ3RoPjEpZm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0W24tMV09YXJndW1lbnRzW25dO1oucHVzaChuZXcgcmUoZSx0KSksMSE9PVoubGVuZ3RofHxRfHxHKG5lKX0sdGl0bGU6ImJyb3dzZXIiLGJyb3dzZXI6ITAsZW52Ont9LGFyZ3Y6W10sdmVyc2lvbjoiIix2ZXJzaW9uczp7fSxvbjpvZSxhZGRMaXN0ZW5lcjpzZSxvbmNlOmFlLG9mZjpjZSxyZW1vdmVMaXN0ZW5lcjp1ZSxyZW1vdmVBbGxMaXN0ZW5lcnM6bGUsZW1pdDpkZSxiaW5kaW5nOmZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQiKX0sY3dkOmZ1bmN0aW9uKCl7cmV0dXJuIi8ifSxjaGRpcjpmdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCIpfSx1bWFzazpmdW5jdGlvbigpe3JldHVybiAwfSxocnRpbWU6ZnVuY3Rpb24oZSl7dmFyIHQ9LjAwMSpmZS5jYWxsKGhlKSxuPU1hdGguZmxvb3IodCkscj1NYXRoLmZsb29yKHQlMSoxZTkpO3JldHVybiBlJiYobi09ZVswXSwoci09ZVsxXSk8MCYmKG4tLSxyKz0xZTkpKSxbbixyXX0scGxhdGZvcm06ImJyb3dzZXIiLHJlbGVhc2U6e30sY29uZmlnOnt9LHVwdGltZTpmdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZS1wZSkvMWUzfX0sdmU9Z2UseWU9cSxtZT1mdW5jdGlvbihlLHQsbixyLGkpe3JldHVybiBlLmNvbmZpZz10LG4mJihlLmNvZGU9biksZS5yZXF1ZXN0PXIsZS5yZXNwb25zZT1pLGUuaXNBeGlvc0Vycm9yPSEwLGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue21lc3NhZ2U6dGhpcy5tZXNzYWdlLG5hbWU6dGhpcy5uYW1lLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sbnVtYmVyOnRoaXMubnVtYmVyLGZpbGVOYW1lOnRoaXMuZmlsZU5hbWUsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uTnVtYmVyOnRoaXMuY29sdW1uTnVtYmVyLHN0YWNrOnRoaXMuc3RhY2ssY29uZmlnOnRoaXMuY29uZmlnLGNvZGU6dGhpcy5jb2RlLHN0YXR1czp0aGlzLnJlc3BvbnNlJiZ0aGlzLnJlc3BvbnNlLnN0YXR1cz90aGlzLnJlc3BvbnNlLnN0YXR1czpudWxsfX0sZX0sd2U9e3NpbGVudEpTT05QYXJzaW5nOiEwLGZvcmNlZEpTT05QYXJzaW5nOiEwLGNsYXJpZnlUaW1lb3V0RXJyb3I6ITF9LF9lPW1lLFNlPWZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG89bmV3IEVycm9yKGUpO3JldHVybiBfZShvLHQsbixyLGkpfSxiZT1TZSxrZT1xLEVlPWtlLmlzU3RhbmRhcmRCcm93c2VyRW52KCk/e3dyaXRlOmZ1bmN0aW9uKGUsdCxuLHIsaSxvKXt2YXIgcz1bXTtzLnB1c2goZSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KHQpKSxrZS5pc051bWJlcihuKSYmcy5wdXNoKCJleHBpcmVzPSIrbmV3IERhdGUobikudG9HTVRTdHJpbmcoKSksa2UuaXNTdHJpbmcocikmJnMucHVzaCgicGF0aD0iK3IpLGtlLmlzU3RyaW5nKGkpJiZzLnB1c2goImRvbWFpbj0iK2kpLCEwPT09byYmcy5wdXNoKCJzZWN1cmUiKSxkb2N1bWVudC5jb29raWU9cy5qb2luKCI7ICIpfSxyZWFkOmZ1bmN0aW9uKGUpe3ZhciB0PWRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCIoXnw7XFxzKikoIitlKyIpPShbXjtdKikiKSk7cmV0dXJuIHQ/ZGVjb2RlVVJJQ29tcG9uZW50KHRbM10pOm51bGx9LHJlbW92ZTpmdW5jdGlvbihlKXt0aGlzLndyaXRlKGUsIiIsRGF0ZS5ub3coKS04NjRlNSl9fTp7d3JpdGU6ZnVuY3Rpb24oKXt9LHJlYWQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0scmVtb3ZlOmZ1bmN0aW9uKCl7fX0sVGU9ZnVuY3Rpb24oZSl7cmV0dXJuL14oW2Etel1bYS16XGQrXC0uXSo6KT9cL1wvL2kudGVzdChlKX0sQWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD9lLnJlcGxhY2UoL1wvKyQvLCIiKSsiLyIrdC5yZXBsYWNlKC9eXC8rLywiIik6ZX0sUmU9cSxDZT1bImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdLERlPXEsUGU9RGUuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKT9mdW5jdGlvbigpe3ZhciBlLHQ9Lyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtmdW5jdGlvbiByKGUpe3ZhciByPWU7cmV0dXJuIHQmJihuLnNldEF0dHJpYnV0ZSgiaHJlZiIscikscj1uLmhyZWYpLG4uc2V0QXR0cmlidXRlKCJocmVmIixyKSx7aHJlZjpuLmhyZWYscHJvdG9jb2w6bi5wcm90b2NvbD9uLnByb3RvY29sLnJlcGxhY2UoLzokLywiIik6IiIsaG9zdDpuLmhvc3Qsc2VhcmNoOm4uc2VhcmNoP24uc2VhcmNoLnJlcGxhY2UoL15cPy8sIiIpOiIiLGhhc2g6bi5oYXNoP24uaGFzaC5yZXBsYWNlKC9eIy8sIiIpOiIiLGhvc3RuYW1lOm4uaG9zdG5hbWUscG9ydDpuLnBvcnQscGF0aG5hbWU6Ii8iPT09bi5wYXRobmFtZS5jaGFyQXQoMCk/bi5wYXRobmFtZToiLyIrbi5wYXRobmFtZX19cmV0dXJuIGU9cih3aW5kb3cubG9jYXRpb24uaHJlZiksZnVuY3Rpb24odCl7dmFyIG49RGUuaXNTdHJpbmcodCk/cih0KTp0O3JldHVybiBuLnByb3RvY29sPT09ZS5wcm90b2NvbCYmbi5ob3N0PT09ZS5ob3N0fX0oKTpmdW5jdGlvbigpe3JldHVybiEwfTtmdW5jdGlvbiBJZShlKXt0aGlzLm1lc3NhZ2U9ZX1JZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iQ2FuY2VsIisodGhpcy5tZXNzYWdlPyI6ICIrdGhpcy5tZXNzYWdlOiIiKX0sSWUucHJvdG90eXBlLl9fQ0FOQ0VMX189ITA7dmFyIE9lPUllLFVlPXEsTGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4uY29uZmlnLnZhbGlkYXRlU3RhdHVzO24uc3RhdHVzJiZyJiYhcihuLnN0YXR1cyk/dChiZSgiUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAiK24uc3RhdHVzLG4uY29uZmlnLG51bGwsbi5yZXF1ZXN0LG4pKTplKG4pfSxIZT1FZSxNZT1LLE5lPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJiFUZSh0KT9BZShlLHQpOnR9LHFlPWZ1bmN0aW9uKGUpe3ZhciB0LG4scixpPXt9O3JldHVybiBlPyhSZS5mb3JFYWNoKGUuc3BsaXQoIlxuIiksKGZ1bmN0aW9uKGUpe2lmKHI9ZS5pbmRleE9mKCI6IiksdD1SZS50cmltKGUuc3Vic3RyKDAscikpLnRvTG93ZXJDYXNlKCksbj1SZS50cmltKGUuc3Vic3RyKHIrMSkpLHQpe2lmKGlbdF0mJkNlLmluZGV4T2YodCk+PTApcmV0dXJuO2lbdF09InNldC1jb29raWUiPT09dD8oaVt0XT9pW3RdOltdKS5jb25jYXQoW25dKTppW3RdP2lbdF0rIiwgIituOm59fSkpLGkpOml9LGplPVBlLHhlPVNlLEtlPXdlLEplPU9lLEJlPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24odCxuKXt2YXIgcixpPWUuZGF0YSxvPWUuaGVhZGVycyxzPWUucmVzcG9uc2VUeXBlO2Z1bmN0aW9uIGEoKXtlLmNhbmNlbFRva2VuJiZlLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKHIpLGUuc2lnbmFsJiZlLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIscil9VWUuaXNGb3JtRGF0YShpKSYmZGVsZXRlIG9bIkNvbnRlbnQtVHlwZSJdO3ZhciBjPW5ldyBYTUxIdHRwUmVxdWVzdDtpZihlLmF1dGgpe3ZhciB1PWUuYXV0aC51c2VybmFtZXx8IiIsbD1lLmF1dGgucGFzc3dvcmQ/dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGUuYXV0aC5wYXNzd29yZCkpOiIiO28uQXV0aG9yaXphdGlvbj0iQmFzaWMgIitidG9hKHUrIjoiK2wpfXZhciBkPU5lKGUuYmFzZVVSTCxlLnVybCk7ZnVuY3Rpb24gaCgpe2lmKGMpe3ZhciByPSJnZXRBbGxSZXNwb25zZUhlYWRlcnMiaW4gYz9xZShjLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKTpudWxsLGk9e2RhdGE6cyYmInRleHQiIT09cyYmImpzb24iIT09cz9jLnJlc3BvbnNlOmMucmVzcG9uc2VUZXh0LHN0YXR1czpjLnN0YXR1cyxzdGF0dXNUZXh0OmMuc3RhdHVzVGV4dCxoZWFkZXJzOnIsY29uZmlnOmUscmVxdWVzdDpjfTtMZSgoZnVuY3Rpb24oZSl7dChlKSxhKCl9KSwoZnVuY3Rpb24oZSl7bihlKSxhKCl9KSxpKSxjPW51bGx9fWlmKGMub3BlbihlLm1ldGhvZC50b1VwcGVyQ2FzZSgpLE1lKGQsZS5wYXJhbXMsZS5wYXJhbXNTZXJpYWxpemVyKSwhMCksYy50aW1lb3V0PWUudGltZW91dCwib25sb2FkZW5kImluIGM/Yy5vbmxvYWRlbmQ9aDpjLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe2MmJjQ9PT1jLnJlYWR5U3RhdGUmJigwIT09Yy5zdGF0dXN8fGMucmVzcG9uc2VVUkwmJjA9PT1jLnJlc3BvbnNlVVJMLmluZGV4T2YoImZpbGU6IikpJiZzZXRUaW1lb3V0KGgpfSxjLm9uYWJvcnQ9ZnVuY3Rpb24oKXtjJiYobih4ZSgiUmVxdWVzdCBhYm9ydGVkIixlLCJFQ09OTkFCT1JURUQiLGMpKSxjPW51bGwpfSxjLm9uZXJyb3I9ZnVuY3Rpb24oKXtuKHhlKCJOZXR3b3JrIEVycm9yIixlLG51bGwsYykpLGM9bnVsbH0sYy5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXt2YXIgdD1lLnRpbWVvdXQ/InRpbWVvdXQgb2YgIitlLnRpbWVvdXQrIm1zIGV4Y2VlZGVkIjoidGltZW91dCBleGNlZWRlZCIscj1lLnRyYW5zaXRpb25hbHx8S2U7ZS50aW1lb3V0RXJyb3JNZXNzYWdlJiYodD1lLnRpbWVvdXRFcnJvck1lc3NhZ2UpLG4oeGUodCxlLHIuY2xhcmlmeVRpbWVvdXRFcnJvcj8iRVRJTUVET1VUIjoiRUNPTk5BQk9SVEVEIixjKSksYz1udWxsfSxVZS5pc1N0YW5kYXJkQnJvd3NlckVudigpKXt2YXIgZj0oZS53aXRoQ3JlZGVudGlhbHN8fGplKGQpKSYmZS54c3JmQ29va2llTmFtZT9IZS5yZWFkKGUueHNyZkNvb2tpZU5hbWUpOnZvaWQgMDtmJiYob1tlLnhzcmZIZWFkZXJOYW1lXT1mKX0ic2V0UmVxdWVzdEhlYWRlciJpbiBjJiZVZS5mb3JFYWNoKG8sKGZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09aSYmImNvbnRlbnQtdHlwZSI9PT10LnRvTG93ZXJDYXNlKCk/ZGVsZXRlIG9bdF06Yy5zZXRSZXF1ZXN0SGVhZGVyKHQsZSl9KSksVWUuaXNVbmRlZmluZWQoZS53aXRoQ3JlZGVudGlhbHMpfHwoYy53aXRoQ3JlZGVudGlhbHM9ISFlLndpdGhDcmVkZW50aWFscykscyYmImpzb24iIT09cyYmKGMucmVzcG9uc2VUeXBlPWUucmVzcG9uc2VUeXBlKSwiZnVuY3Rpb24iPT10eXBlb2YgZS5vbkRvd25sb2FkUHJvZ3Jlc3MmJmMuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGUub25Eb3dubG9hZFByb2dyZXNzKSwiZnVuY3Rpb24iPT10eXBlb2YgZS5vblVwbG9hZFByb2dyZXNzJiZjLnVwbG9hZCYmYy51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGUub25VcGxvYWRQcm9ncmVzcyksKGUuY2FuY2VsVG9rZW58fGUuc2lnbmFsKSYmKHI9ZnVuY3Rpb24oZSl7YyYmKG4oIWV8fGUmJmUudHlwZT9uZXcgSmUoImNhbmNlbGVkIik6ZSksYy5hYm9ydCgpLGM9bnVsbCl9LGUuY2FuY2VsVG9rZW4mJmUuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKHIpLGUuc2lnbmFsJiYoZS5zaWduYWwuYWJvcnRlZD9yKCk6ZS5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHIpKSksaXx8KGk9bnVsbCksYy5zZW5kKGkpfSkpfSxGZT1xLFdlPWZ1bmN0aW9uKGUsdCl7eWUuZm9yRWFjaChlLChmdW5jdGlvbihuLHIpe3IhPT10JiZyLnRvVXBwZXJDYXNlKCk9PT10LnRvVXBwZXJDYXNlKCkmJihlW3RdPW4sZGVsZXRlIGVbcl0pfSkpfSwkZT1tZSx6ZT17IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCJ9O2Z1bmN0aW9uIFZlKGUsdCl7IUZlLmlzVW5kZWZpbmVkKGUpJiZGZS5pc1VuZGVmaW5lZChlWyJDb250ZW50LVR5cGUiXSkmJihlWyJDb250ZW50LVR5cGUiXT10KX12YXIgWWUsR2U9e3RyYW5zaXRpb25hbDp3ZSxhZGFwdGVyOigoInVuZGVmaW5lZCIhPXR5cGVvZiBYTUxIdHRwUmVxdWVzdHx8dm9pZCAwIT09dmUmJiJbb2JqZWN0IHByb2Nlc3NdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2ZSkpJiYoWWU9QmUpLFllKSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbihlLHQpe3JldHVybiBXZSh0LCJBY2NlcHQiKSxXZSh0LCJDb250ZW50LVR5cGUiKSxGZS5pc0Zvcm1EYXRhKGUpfHxGZS5pc0FycmF5QnVmZmVyKGUpfHxGZS5pc0J1ZmZlcihlKXx8RmUuaXNTdHJlYW0oZSl8fEZlLmlzRmlsZShlKXx8RmUuaXNCbG9iKGUpP2U6RmUuaXNBcnJheUJ1ZmZlclZpZXcoZSk/ZS5idWZmZXI6RmUuaXNVUkxTZWFyY2hQYXJhbXMoZSk/KFZlKHQsImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04IiksZS50b1N0cmluZygpKTpGZS5pc09iamVjdChlKXx8dCYmImFwcGxpY2F0aW9uL2pzb24iPT09dFsiQ29udGVudC1UeXBlIl0/KFZlKHQsImFwcGxpY2F0aW9uL2pzb24iKSxmdW5jdGlvbihlLHQsbil7aWYoRmUuaXNTdHJpbmcoZSkpdHJ5e3JldHVybih0fHxKU09OLnBhcnNlKShlKSxGZS50cmltKGUpfWNhdGNoKGUpe2lmKCJTeW50YXhFcnJvciIhPT1lLm5hbWUpdGhyb3cgZX1yZXR1cm4obnx8SlNPTi5zdHJpbmdpZnkpKGUpfShlKSk6ZX1dLHRyYW5zZm9ybVJlc3BvbnNlOltmdW5jdGlvbihlKXt2YXIgdD10aGlzLnRyYW5zaXRpb25hbHx8R2UudHJhbnNpdGlvbmFsLG49dCYmdC5zaWxlbnRKU09OUGFyc2luZyxyPXQmJnQuZm9yY2VkSlNPTlBhcnNpbmcsaT0hbiYmImpzb24iPT09dGhpcy5yZXNwb25zZVR5cGU7aWYoaXx8ciYmRmUuaXNTdHJpbmcoZSkmJmUubGVuZ3RoKXRyeXtyZXR1cm4gSlNPTi5wYXJzZShlKX1jYXRjaChlKXtpZihpKXtpZigiU3ludGF4RXJyb3IiPT09ZS5uYW1lKXRocm93ICRlKGUsdGhpcywiRV9KU09OX1BBUlNFIik7dGhyb3cgZX19cmV0dXJuIGV9XSx0aW1lb3V0OjAseHNyZkNvb2tpZU5hbWU6IlhTUkYtVE9LRU4iLHhzcmZIZWFkZXJOYW1lOiJYLVhTUkYtVE9LRU4iLG1heENvbnRlbnRMZW5ndGg6LTEsbWF4Qm9keUxlbmd0aDotMSx2YWxpZGF0ZVN0YXR1czpmdW5jdGlvbihlKXtyZXR1cm4gZT49MjAwJiZlPDMwMH0saGVhZGVyczp7Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiJ9fX07RmUuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiXSwoZnVuY3Rpb24oZSl7R2UuaGVhZGVyc1tlXT17fX0pKSxGZS5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sKGZ1bmN0aW9uKGUpe0dlLmhlYWRlcnNbZV09RmUubWVyZ2UoemUpfSkpO3ZhciBYZT1HZSxaZT1xLFFlPVhlLGV0PWZ1bmN0aW9uKGUpe3JldHVybiEoIWV8fCFlLl9fQ0FOQ0VMX18pfSx0dD1xLG50PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzfHxRZTtyZXR1cm4gWmUuZm9yRWFjaChuLChmdW5jdGlvbihuKXtlPW4uY2FsbChyLGUsdCl9KSksZX0scnQ9ZXQsaXQ9WGUsb3Q9T2U7ZnVuY3Rpb24gc3QoZSl7aWYoZS5jYW5jZWxUb2tlbiYmZS5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCksZS5zaWduYWwmJmUuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IG90KCJjYW5jZWxlZCIpfXZhciBhdD1xLGN0PWZ1bmN0aW9uKGUsdCl7dD10fHx7fTt2YXIgbj17fTtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIGF0LmlzUGxhaW5PYmplY3QoZSkmJmF0LmlzUGxhaW5PYmplY3QodCk/YXQubWVyZ2UoZSx0KTphdC5pc1BsYWluT2JqZWN0KHQpP2F0Lm1lcmdlKHt9LHQpOmF0LmlzQXJyYXkodCk/dC5zbGljZSgpOnR9ZnVuY3Rpb24gaShuKXtyZXR1cm4gYXQuaXNVbmRlZmluZWQodFtuXSk/YXQuaXNVbmRlZmluZWQoZVtuXSk/dm9pZCAwOnIodm9pZCAwLGVbbl0pOnIoZVtuXSx0W25dKX1mdW5jdGlvbiBvKGUpe2lmKCFhdC5pc1VuZGVmaW5lZCh0W2VdKSlyZXR1cm4gcih2b2lkIDAsdFtlXSl9ZnVuY3Rpb24gcyhuKXtyZXR1cm4gYXQuaXNVbmRlZmluZWQodFtuXSk/YXQuaXNVbmRlZmluZWQoZVtuXSk/dm9pZCAwOnIodm9pZCAwLGVbbl0pOnIodm9pZCAwLHRbbl0pfWZ1bmN0aW9uIGEobil7cmV0dXJuIG4gaW4gdD9yKGVbbl0sdFtuXSk6biBpbiBlP3Iodm9pZCAwLGVbbl0pOnZvaWQgMH12YXIgYz17dXJsOm8sbWV0aG9kOm8sZGF0YTpvLGJhc2VVUkw6cyx0cmFuc2Zvcm1SZXF1ZXN0OnMsdHJhbnNmb3JtUmVzcG9uc2U6cyxwYXJhbXNTZXJpYWxpemVyOnMsdGltZW91dDpzLHRpbWVvdXRNZXNzYWdlOnMsd2l0aENyZWRlbnRpYWxzOnMsYWRhcHRlcjpzLHJlc3BvbnNlVHlwZTpzLHhzcmZDb29raWVOYW1lOnMseHNyZkhlYWRlck5hbWU6cyxvblVwbG9hZFByb2dyZXNzOnMsb25Eb3dubG9hZFByb2dyZXNzOnMsZGVjb21wcmVzczpzLG1heENvbnRlbnRMZW5ndGg6cyxtYXhCb2R5TGVuZ3RoOnMsdHJhbnNwb3J0OnMsaHR0cEFnZW50OnMsaHR0cHNBZ2VudDpzLGNhbmNlbFRva2VuOnMsc29ja2V0UGF0aDpzLHJlc3BvbnNlRW5jb2Rpbmc6cyx2YWxpZGF0ZVN0YXR1czphfTtyZXR1cm4gYXQuZm9yRWFjaChPYmplY3Qua2V5cyhlKS5jb25jYXQoT2JqZWN0LmtleXModCkpLChmdW5jdGlvbihlKXt2YXIgdD1jW2VdfHxpLHI9dChlKTthdC5pc1VuZGVmaW5lZChyKSYmdCE9PWF8fChuW2VdPXIpfSkpLG59LHV0PSIwLjI2LjEiLGx0PXV0LGR0PXt9O1sib2JqZWN0IiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwic3RyaW5nIiwic3ltYm9sIl0uZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXtkdFtlXT1mdW5jdGlvbihuKXtyZXR1cm4gdHlwZW9mIG49PT1lfHwiYSIrKHQ8MT8ibiAiOiIgIikrZX19KSk7dmFyIGh0PXt9O2R0LnRyYW5zaXRpb25hbD1mdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQpe3JldHVybiJbQXhpb3MgdiIrbHQrIl0gVHJhbnNpdGlvbmFsIG9wdGlvbiAnIitlKyInIit0KyhuPyIuICIrbjoiIil9cmV0dXJuIGZ1bmN0aW9uKG4saSxvKXtpZighMT09PWUpdGhyb3cgbmV3IEVycm9yKHIoaSwiIGhhcyBiZWVuIHJlbW92ZWQiKyh0PyIgaW4gIit0OiIiKSkpO3JldHVybiB0JiYhaHRbaV0mJihodFtpXT0hMCxjb25zb2xlLndhcm4ocihpLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2Iit0KyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkpLCFlfHxlKG4saSxvKX19O3ZhciBmdD17YXNzZXJ0T3B0aW9uczpmdW5jdGlvbihlLHQsbil7aWYoIm9iamVjdCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIm9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QiKTtmb3IodmFyIHI9T2JqZWN0LmtleXMoZSksaT1yLmxlbmd0aDtpLS0gPjA7KXt2YXIgbz1yW2ldLHM9dFtvXTtpZihzKXt2YXIgYT1lW29dLGM9dm9pZCAwPT09YXx8cyhhLG8sZSk7aWYoITAhPT1jKXRocm93IG5ldyBUeXBlRXJyb3IoIm9wdGlvbiAiK28rIiBtdXN0IGJlICIrYyl9ZWxzZSBpZighMCE9PW4pdGhyb3cgRXJyb3IoIlVua25vd24gb3B0aW9uICIrbyl9fSx2YWxpZGF0b3JzOmR0fSxwdD1xLGd0PUssdnQ9Rix5dD1mdW5jdGlvbihlKXtyZXR1cm4gc3QoZSksZS5oZWFkZXJzPWUuaGVhZGVyc3x8e30sZS5kYXRhPW50LmNhbGwoZSxlLmRhdGEsZS5oZWFkZXJzLGUudHJhbnNmb3JtUmVxdWVzdCksZS5oZWFkZXJzPXR0Lm1lcmdlKGUuaGVhZGVycy5jb21tb258fHt9LGUuaGVhZGVyc1tlLm1ldGhvZF18fHt9LGUuaGVhZGVycyksdHQuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSwoZnVuY3Rpb24odCl7ZGVsZXRlIGUuaGVhZGVyc1t0XX0pKSwoZS5hZGFwdGVyfHxpdC5hZGFwdGVyKShlKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gc3QoZSksdC5kYXRhPW50LmNhbGwoZSx0LmRhdGEsdC5oZWFkZXJzLGUudHJhbnNmb3JtUmVzcG9uc2UpLHR9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHJ0KHQpfHwoc3QoZSksdCYmdC5yZXNwb25zZSYmKHQucmVzcG9uc2UuZGF0YT1udC5jYWxsKGUsdC5yZXNwb25zZS5kYXRhLHQucmVzcG9uc2UuaGVhZGVycyxlLnRyYW5zZm9ybVJlc3BvbnNlKSkpLFByb21pc2UucmVqZWN0KHQpfSkpfSxtdD1jdCx3dD1mdCxfdD13dC52YWxpZGF0b3JzO2Z1bmN0aW9uIFN0KGUpe3RoaXMuZGVmYXVsdHM9ZSx0aGlzLmludGVyY2VwdG9ycz17cmVxdWVzdDpuZXcgdnQscmVzcG9uc2U6bmV3IHZ0fX1TdC5wcm90b3R5cGUucmVxdWVzdD1mdW5jdGlvbihlLHQpeyJzdHJpbmciPT10eXBlb2YgZT8odD10fHx7fSkudXJsPWU6dD1lfHx7fSwodD1tdCh0aGlzLmRlZmF1bHRzLHQpKS5tZXRob2Q/dC5tZXRob2Q9dC5tZXRob2QudG9Mb3dlckNhc2UoKTp0aGlzLmRlZmF1bHRzLm1ldGhvZD90Lm1ldGhvZD10aGlzLmRlZmF1bHRzLm1ldGhvZC50b0xvd2VyQ2FzZSgpOnQubWV0aG9kPSJnZXQiO3ZhciBuPXQudHJhbnNpdGlvbmFsO3ZvaWQgMCE9PW4mJnd0LmFzc2VydE9wdGlvbnMobix7c2lsZW50SlNPTlBhcnNpbmc6X3QudHJhbnNpdGlvbmFsKF90LmJvb2xlYW4pLGZvcmNlZEpTT05QYXJzaW5nOl90LnRyYW5zaXRpb25hbChfdC5ib29sZWFuKSxjbGFyaWZ5VGltZW91dEVycm9yOl90LnRyYW5zaXRpb25hbChfdC5ib29sZWFuKX0sITEpO3ZhciByPVtdLGk9ITA7dGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKChmdW5jdGlvbihlKXsiZnVuY3Rpb24iPT10eXBlb2YgZS5ydW5XaGVuJiYhMT09PWUucnVuV2hlbih0KXx8KGk9aSYmZS5zeW5jaHJvbm91cyxyLnVuc2hpZnQoZS5mdWxmaWxsZWQsZS5yZWplY3RlZCkpfSkpO3ZhciBvLHM9W107aWYodGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cy5wdXNoKGUuZnVsZmlsbGVkLGUucmVqZWN0ZWQpfSkpLCFpKXt2YXIgYT1beXQsdm9pZCAwXTtmb3IoQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBwbHkoYSxyKSxhPWEuY29uY2F0KHMpLG89UHJvbWlzZS5yZXNvbHZlKHQpO2EubGVuZ3RoOylvPW8udGhlbihhLnNoaWZ0KCksYS5zaGlmdCgpKTtyZXR1cm4gb31mb3IodmFyIGM9dDtyLmxlbmd0aDspe3ZhciB1PXIuc2hpZnQoKSxsPXIuc2hpZnQoKTt0cnl7Yz11KGMpfWNhdGNoKGUpe2woZSk7YnJlYWt9fXRyeXtvPXl0KGMpfWNhdGNoKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX1mb3IoO3MubGVuZ3RoOylvPW8udGhlbihzLnNoaWZ0KCkscy5zaGlmdCgpKTtyZXR1cm4gb30sU3QucHJvdG90eXBlLmdldFVyaT1mdW5jdGlvbihlKXtyZXR1cm4gZT1tdCh0aGlzLmRlZmF1bHRzLGUpLGd0KGUudXJsLGUucGFyYW1zLGUucGFyYW1zU2VyaWFsaXplcikucmVwbGFjZSgvXlw/LywiIil9LHB0LmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0aW9ucyJdLChmdW5jdGlvbihlKXtTdC5wcm90b3R5cGVbZV09ZnVuY3Rpb24odCxuKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KG10KG58fHt9LHttZXRob2Q6ZSx1cmw6dCxkYXRhOihufHx7fSkuZGF0YX0pKX19KSkscHQuZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCJdLChmdW5jdGlvbihlKXtTdC5wcm90b3R5cGVbZV09ZnVuY3Rpb24odCxuLHIpe3JldHVybiB0aGlzLnJlcXVlc3QobXQocnx8e30se21ldGhvZDplLHVybDp0LGRhdGE6bn0pKX19KSk7dmFyIGJ0PVN0LGt0PU9lO2Z1bmN0aW9uIEV0KGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoImV4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4iKTt2YXIgdDt0aGlzLnByb21pc2U9bmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe3Q9ZX0pKTt2YXIgbj10aGlzO3RoaXMucHJvbWlzZS50aGVuKChmdW5jdGlvbihlKXtpZihuLl9saXN0ZW5lcnMpe3ZhciB0LHI9bi5fbGlzdGVuZXJzLmxlbmd0aDtmb3IodD0wO3Q8cjt0Kyspbi5fbGlzdGVuZXJzW3RdKGUpO24uX2xpc3RlbmVycz1udWxsfX0pKSx0aGlzLnByb21pc2UudGhlbj1mdW5jdGlvbihlKXt2YXIgdCxyPW5ldyBQcm9taXNlKChmdW5jdGlvbihlKXtuLnN1YnNjcmliZShlKSx0PWV9KSkudGhlbihlKTtyZXR1cm4gci5jYW5jZWw9ZnVuY3Rpb24oKXtuLnVuc3Vic2NyaWJlKHQpfSxyfSxlKChmdW5jdGlvbihlKXtuLnJlYXNvbnx8KG4ucmVhc29uPW5ldyBrdChlKSx0KG4ucmVhc29uKSl9KSl9RXQucHJvdG90eXBlLnRocm93SWZSZXF1ZXN0ZWQ9ZnVuY3Rpb24oKXtpZih0aGlzLnJlYXNvbil0aHJvdyB0aGlzLnJlYXNvbn0sRXQucHJvdG90eXBlLnN1YnNjcmliZT1mdW5jdGlvbihlKXt0aGlzLnJlYXNvbj9lKHRoaXMucmVhc29uKTp0aGlzLl9saXN0ZW5lcnM/dGhpcy5fbGlzdGVuZXJzLnB1c2goZSk6dGhpcy5fbGlzdGVuZXJzPVtlXX0sRXQucHJvdG90eXBlLnVuc3Vic2NyaWJlPWZ1bmN0aW9uKGUpe2lmKHRoaXMuX2xpc3RlbmVycyl7dmFyIHQ9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YoZSk7LTEhPT10JiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKHQsMSl9fSxFdC5zb3VyY2U9ZnVuY3Rpb24oKXt2YXIgZSx0PW5ldyBFdCgoZnVuY3Rpb24odCl7ZT10fSkpO3JldHVybnt0b2tlbjp0LGNhbmNlbDplfX07dmFyIFR0PUV0LEF0PXEsUnQ9cSxDdD1DLER0PWJ0LFB0PWN0O3ZhciBJdD1mdW5jdGlvbiBlKHQpe3ZhciBuPW5ldyBEdCh0KSxyPUN0KER0LnByb3RvdHlwZS5yZXF1ZXN0LG4pO3JldHVybiBSdC5leHRlbmQocixEdC5wcm90b3R5cGUsbiksUnQuZXh0ZW5kKHIsbiksci5jcmVhdGU9ZnVuY3Rpb24obil7cmV0dXJuIGUoUHQodCxuKSl9LHJ9KFhlKTtJdC5BeGlvcz1EdCxJdC5DYW5jZWw9T2UsSXQuQ2FuY2VsVG9rZW49VHQsSXQuaXNDYW5jZWw9ZXQsSXQuVkVSU0lPTj11dCxJdC5hbGw9ZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UuYWxsKGUpfSxJdC5zcHJlYWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLmFwcGx5KG51bGwsdCl9fSxJdC5pc0F4aW9zRXJyb3I9ZnVuY3Rpb24oZSl7cmV0dXJuIEF0LmlzT2JqZWN0KGUpJiYhMD09PWUuaXNBeGlvc0Vycm9yfSxSLmV4cG9ydHM9SXQsUi5leHBvcnRzLmRlZmF1bHQ9SXQ7dmFyIE90LFV0PVIuZXhwb3J0cztsZXQgTHQ9T3Q9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmF0dGFjaFRva2VuPSgpPT5Qcm9taXNlLnJlc29sdmUoKSx0aGlzLnJlcXVlc3RTdGFydENhbGxiYWNrPSgpPT5udWxsLHRoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjaz0oKT0+bnVsbCx0aGlzLnJlcXVlc3RFcnJvckNhbGxiYWNrPSgpPT5udWxsLHRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrPSgpPT5udWxsLHRoaXMuaW5pdD10aGlzLmluaXQuYmluZCh0aGlzKSx0aGlzLnNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjaz10aGlzLnNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjay5iaW5kKHRoaXMpLHRoaXMuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjaz10aGlzLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2suYmluZCh0aGlzKSx0aGlzLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjaz10aGlzLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjay5iaW5kKHRoaXMpLHRoaXMuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2s9dGhpcy5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjay5iaW5kKHRoaXMpfXN0YXRpYyBnZXRJbnN0YW5jZSgpe3JldHVybiB0aGlzLmF4aW9zSW5zdGFuY2V8fCh0aGlzLmF4aW9zSW5zdGFuY2U9VXQuY3JlYXRlKHt3aXRoQ3JlZGVudGlhbHM6ITB9KSx0aGlzLmNsaWVudEluc3RhbmNlfHwodGhpcy5jbGllbnRJbnN0YW5jZT1uZXcgT3QpLHRoaXMuYXhpb3NJbnN0YW5jZS5pbnRlcmNlcHRvcnMucmVxdWVzdC51c2UoKHQ9PmUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5jbGllbnRJbnN0YW5jZS5yZXF1ZXN0SGFuZGxlcih0KX0pKSkpLHRoaXMuYXhpb3NJbnN0YW5jZS5pbnRlcmNlcHRvcnMucmVzcG9uc2UudXNlKChlPT50aGlzLmNsaWVudEluc3RhbmNlLnN1Y2Nlc3NIYW5kbGVyKGUpKSwoZT0+dGhpcy5jbGllbnRJbnN0YW5jZS5lcnJvckhhbmRsZXIoZSkpKSx0aGlzLmF4aW9zSW5zdGFuY2UuYWxsPVV0LmFsbCx0aGlzLmF4aW9zSW5zdGFuY2Uuc3ByZWFkPVV0LnNwcmVhZCx0aGlzLmF4aW9zSW5zdGFuY2UuaW5pdD10aGlzLmNsaWVudEluc3RhbmNlLmluaXQsdGhpcy5heGlvc0luc3RhbmNlLmVuYWJsZUhhbmRsZXI9dGhpcy5jbGllbnRJbnN0YW5jZS5lbmFibGVIYW5kbGVyLHRoaXMuYXhpb3NJbnN0YW5jZS5kaXNhYmxlSGFuZGxlcj10aGlzLmNsaWVudEluc3RhbmNlLmRpc2FibGVIYW5kbGVyLHRoaXMuYXhpb3NJbnN0YW5jZS5kaXNhYmxlSGFuZGxlcldpdGhUaW1lb3V0PXRoaXMuY2xpZW50SW5zdGFuY2UuZGlzYWJsZUhhbmRsZXJXaXRoVGltZW91dCx0aGlzLmF4aW9zSW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrPXRoaXMuY2xpZW50SW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrLHRoaXMuYXhpb3NJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjaz10aGlzLmNsaWVudEluc3RhbmNlLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrLHRoaXMuYXhpb3NJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2s9dGhpcy5jbGllbnRJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2ssdGhpcy5heGlvc0luc3RhbmNlLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2s9dGhpcy5jbGllbnRJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKSx0aGlzLmF4aW9zSW5zdGFuY2V9cmVxdWVzdEhhbmRsZXIodCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtpZih5aWVsZCB0aGlzLmF0dGFjaFRva2VuKHQpLG51bGw9PXQ/dm9pZCAwOnQuc2hvdWxkRW5jb2RlVG9Gb3JtRGF0YSl7Y29uc3QgZT1udWxsPT10P3ZvaWQgMDp0LmRhdGEsbj1uZXcgRm9ybURhdGE7T2JqZWN0LmtleXMoZSkuZm9yRWFjaCgodD0+e24uYXBwZW5kKHQsZVt0XSl9KSksdC5kYXRhPW59cmV0dXJuIE90LmlzSGFuZGxlckVuYWJsZWQmJnRoaXMucmVxdWVzdFN0YXJ0Q2FsbGJhY2smJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnJlcXVlc3RTdGFydENhbGxiYWNrJiZ0aGlzLnJlcXVlc3RTdGFydENhbGxiYWNrKHQpLHR9KSl9ZXJyb3JIYW5kbGVyKGUpe3Rocm93IE90LmlzSGFuZGxlckVuYWJsZWQmJih0aGlzLnJlcXVlc3RFcnJvckNhbGxiYWNrJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXF1ZXN0RXJyb3JDYWxsYmFjayYmdGhpcy5yZXF1ZXN0RXJyb3JDYWxsYmFjayhlKSx0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjayYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrJiZ0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjaygpKSxlfXN1Y2Nlc3NIYW5kbGVyKGUpe3JldHVybiBPdC5pc0hhbmRsZXJFbmFibGVkJiYodGhpcy5yZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrJiZ0aGlzLnJlcXVlc3RTdWNjZXNzQ2FsbGJhY2soZSksdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2smJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjayYmdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2soKSksZX1pbml0KHQ9ITAsbil7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtPdC5pc0hhbmRsZXJFbmFibGVkPXQsdGhpcy5hdHRhY2hUb2tlbj1ufSkpfWVuYWJsZUhhbmRsZXIoKXtPdC5pc0hhbmRsZXJFbmFibGVkPSEwfWRpc2FibGVIYW5kbGVyKCl7T3QuaXNIYW5kbGVyRW5hYmxlZD0hMX1kaXNhYmxlSGFuZGxlcldpdGhUaW1lb3V0KGU9T3QuREVGQVVMVF9IQU5ETEVSX0RJU0FCTEVfVElNRU9VVCl7T3QuaXNIYW5kbGVyRW5hYmxlZD0hMSxzZXRUaW1lb3V0KCgoKT0+e090LmlzSGFuZGxlckVuYWJsZWQ9ITB9KSxlKX1zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2soZSl7dGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjaz1lfXNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKGUpe3RoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjaz1lfXNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjayhlKXt0aGlzLnJlcXVlc3RFcnJvckNhbGxiYWNrPWV9c2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjayhlKXt0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjaz1lfX07THQuREVGQVVMVF9IQU5ETEVSX0RJU0FCTEVfVElNRU9VVD0xZTMsTHQ9T3Q9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbz1hcmd1bWVudHMubGVuZ3RoLHM9bzwzP3Q6bnVsbD09PXI/cj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik6cjtpZigib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3QmJiJmdW5jdGlvbiI9PXR5cGVvZiBSZWZsZWN0LmRlY29yYXRlKXM9UmVmbGVjdC5kZWNvcmF0ZShlLHQsbixyKTtlbHNlIGZvcih2YXIgYT1lLmxlbmd0aC0xO2E+PTA7YS0tKShpPWVbYV0pJiYocz0obzwzP2kocyk6bz4zP2kodCxuLHMpOmkodCxuKSl8fHMpO3JldHVybiBvPjMmJnMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4scyksc30oW2U9Pnt9XSxMdCk7Y2xhc3MgSHR7Y29uc3RydWN0b3IoKXt0aGlzLl9kYXRhPW5ldyBNYXB9c2V0RGF0YSh0LG4pe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dGhpcy5fZGF0YS5zZXQodCxuKX0pKX1nZXREYXRhKHQpe3ZhciBuLHI7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gbnVsbCE9PShyPW51bGw9PT0obj10aGlzLl9kYXRhKXx8dm9pZCAwPT09bj92b2lkIDA6bi5nZXQodCkpJiZ2b2lkIDAhPT1yP3I6Int9In0pKX1yZW1vdmVEYXRhKHQpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dGhpcy5fZGF0YS5kZWxldGUodCl9KSl9fWNsYXNzIE10e2NvbnN0cnVjdG9yKCl7fXN0YXRpYyBnZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpe3JldHVybntibG9iOihudWxsPT1lP3ZvaWQgMDplLmRhdGEpaW5zdGFuY2VvZiBCbG9iP251bGw9PWU/dm9pZCAwOmUuZGF0YTpudWxsLGRhdGE6SlNPTi5zdHJpbmdpZnkobnVsbCE9ZT9lOiIiKSxzdWNjZXNzOiEwfX1zdGF0aWMgZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKXtyZXR1cm4obnVsbD09ZT92b2lkIDA6ZS50b0pTT04pJiZkZWxldGUgZS50b0pTT04se2Vycm9yOkpTT04uc3RyaW5naWZ5KG51bGwhPWU/ZToiIiksc3VjY2VzczohMX19fWNsYXNzIE50e2NvbnN0cnVjdG9yKCl7fXN0YXRpYyByZW1vdmVBdXRob3JpemF0aW9uQ29kZSgpe2NvbnN0IGU9bG9jYXRpb24uaHJlZjtoaXN0b3J5LnB1c2hTdGF0ZSh7fSxkb2N1bWVudC50aXRsZSxlLnJlcGxhY2UoL1w/Y29kZT0uKiQvLCIiKSl9c3RhdGljIGdldFBLQ0UoZSl7dmFyIHQ7cmV0dXJuIG51bGwhPT0odD1zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGUpKSYmdm9pZCAwIT09dD90OiIifXN0YXRpYyBzZXRQS0NFKGUsdCl7c2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShlLHQpfXN0YXRpYyBzZXRTaWduT3V0VVJMKGUpe3Nlc3Npb25TdG9yYWdlLnNldEl0ZW0ocyxlKX1zdGF0aWMgZ2V0U2lnbk91dFVSTCgpe3ZhciBlO3JldHVybiBudWxsIT09KGU9c2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShzKSkmJnZvaWQgMCE9PWU/ZToiIn1zdGF0aWMgcmVtb3ZlUEtDRShlKXtzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKGUpfXN0YXRpYyBjYW5Db250aW51ZVNpZ25JbihlLHQpe3JldHVybiEoZSYmIU50Lmhhc0Vycm9ySW5VUkwoKSYmIU50Lmhhc0F1dGhTZWFyY2hQYXJhbXNJblVSTCgpJiYhdCl9c3RhdGljIGlzSW5pdGlhbGl6ZWRTaWxlbnRTaWduSW4oKXtyZXR1cm4gTnQuaXNTaWxlbnRTdGF0ZVByZXNlbnRJblVSTCgpfXN0YXRpYyB3YXNTaWduSW5DYWxsZWQoKXtyZXR1cm4hKCFOdC5oYXNFcnJvckluVVJMKCkmJiFOdC5oYXNBdXRoU2VhcmNoUGFyYW1zSW5VUkwoKXx8dGhpcy5pc1NpbGVudFN0YXRlUHJlc2VudEluVVJMKCkpfXN0YXRpYyB3YXNTaWxlbnRTaWduSW5DYWxsZWQoKXtjb25zdCBlPXNlc3Npb25TdG9yYWdlLmdldEl0ZW0oImluaXRpYWxpemVkLXNpbGVudC1zaWduLWluIiksdD1lP0pTT04ucGFyc2UoZSk6bnVsbDtyZXR1cm4gQm9vbGVhbih0KX1zdGF0aWMgaXNTaWduT3V0U3VjY2Vzc2Z1bCgpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7aWYoZy5pc1NpZ25PdXRTdWNjZXNzZnVsKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSl7Y29uc3QgZT13aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdCgiPyIpWzBdO3JldHVybiBoaXN0b3J5LnB1c2hTdGF0ZSh7fSxkb2N1bWVudC50aXRsZSxlKSx5aWVsZCBnLmNsZWFyVXNlclNlc3Npb25EYXRhKCksITB9cmV0dXJuITF9KSl9c3RhdGljIGRpZFNpZ25PdXRGYWlsKCl7aWYoZy5kaWRTaWduT3V0RmFpbCh3aW5kb3cubG9jYXRpb24uaHJlZikpe2NvbnN0IGU9bmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZiksdD1lLnNlYXJjaFBhcmFtcy5nZXQoXyksbj1lLnNlYXJjaFBhcmFtcy5nZXQoUykscj13aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdCgiPyIpWzBdO3JldHVybiBoaXN0b3J5LnB1c2hTdGF0ZSh7fSxkb2N1bWVudC50aXRsZSxyKSx7ZGVzY3JpcHRpb246bnVsbCE9bj9uOiIiLGVycm9yOm51bGwhPXQ/dDoiIn19cmV0dXJuITF9c3RhdGljIGlzU2lsZW50U3RhdGVQcmVzZW50SW5VUkwoKXt2YXIgZTtjb25zdCB0PW5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpLnNlYXJjaFBhcmFtcy5nZXQoInN0YXRlIik7cmV0dXJuIG51bGwhPT0oZT1udWxsPT10P3ZvaWQgMDp0LmluY2x1ZGVzKCJzaWduLWluLXNpbGVudGx5IikpJiZ2b2lkIDAhPT1lJiZlfXN0YXRpYyBoYXNBdXRoU2VhcmNoUGFyYW1zSW5VUkwoZT13aW5kb3cubG9jYXRpb24uc2VhcmNoKXtyZXR1cm4vWz8mXWNvZGU9W14mXSsvLnRlc3QoZSl9c3RhdGljIGhhc0Vycm9ySW5VUkwoZT13aW5kb3cubG9jYXRpb24uaHJlZil7Y29uc3QgdD1uZXcgVVJMKGUpO3JldHVybiEhdC5zZWFyY2hQYXJhbXMuZ2V0KF8pJiYic2lnbl9vdXRfc3VjY2VzcyIhPT10LnNlYXJjaFBhcmFtcy5nZXQoInN0YXRlIil9c3RhdGljIGNhblNlbmRQcm9tcHROb25lUmVxdWVzdCgpe2NvbnN0IGU9c2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSh3KTtyZXR1cm4hKGU/SlNPTi5wYXJzZShlKTpudWxsKX1zdGF0aWMgc2V0UHJvbXB0Tm9uZVJlcXVlc3RTZW50KGUpe3Nlc3Npb25TdG9yYWdlLnNldEl0ZW0odyxKU09OLnN0cmluZ2lmeShlKSl9c3RhdGljIHdhaXRUaWxsUGFnZVJlZGlyZWN0KHQpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT1udWxsIT10P3Q6M2UzO3lpZWxkIG5ldyBQcm9taXNlKCh0PT5zZXRUaW1lb3V0KHQsMWUzKmUpKSl9KSl9fXZhciBxdD1bXSxqdD1bXSx4dD0idW5kZWZpbmVkIiE9dHlwZW9mIFVpbnQ4QXJyYXk/VWludDhBcnJheTpBcnJheSxLdD0hMTtmdW5jdGlvbiBKdCgpe0t0PSEwO2Zvcih2YXIgZT0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIsdD0wLG49ZS5sZW5ndGg7dDxuOysrdClxdFt0XT1lW3RdLGp0W2UuY2hhckNvZGVBdCh0KV09dDtqdFsiLSIuY2hhckNvZGVBdCgwKV09NjIsanRbIl8iLmNoYXJDb2RlQXQoMCldPTYzfWZ1bmN0aW9uIEJ0KGUsdCxuKXtmb3IodmFyIHIsaSxvPVtdLHM9dDtzPG47cys9MylyPShlW3NdPDwxNikrKGVbcysxXTw8OCkrZVtzKzJdLG8ucHVzaChxdFsoaT1yKT4+MTgmNjNdK3F0W2k+PjEyJjYzXStxdFtpPj42JjYzXStxdFs2MyZpXSk7cmV0dXJuIG8uam9pbigiIil9ZnVuY3Rpb24gRnQoZSl7dmFyIHQ7S3R8fEp0KCk7Zm9yKHZhciBuPWUubGVuZ3RoLHI9biUzLGk9IiIsbz1bXSxzPTE2MzgzLGE9MCxjPW4tcjthPGM7YSs9cylvLnB1c2goQnQoZSxhLGErcz5jP2M6YStzKSk7cmV0dXJuIDE9PT1yPyh0PWVbbi0xXSxpKz1xdFt0Pj4yXSxpKz1xdFt0PDw0JjYzXSxpKz0iPT0iKToyPT09ciYmKHQ9KGVbbi0yXTw8OCkrZVtuLTFdLGkrPXF0W3Q+PjEwXSxpKz1xdFt0Pj40JjYzXSxpKz1xdFt0PDwyJjYzXSxpKz0iPSIpLG8ucHVzaChpKSxvLmpvaW4oIiIpfWZ1bmN0aW9uIFd0KGUsdCxuLHIsaSl7dmFyIG8scyxhPTgqaS1yLTEsYz0oMTw8YSktMSx1PWM+PjEsbD0tNyxkPW4/aS0xOjAsaD1uPy0xOjEsZj1lW3QrZF07Zm9yKGQrPWgsbz1mJigxPDwtbCktMSxmPj49LWwsbCs9YTtsPjA7bz0yNTYqbytlW3QrZF0sZCs9aCxsLT04KTtmb3Iocz1vJigxPDwtbCktMSxvPj49LWwsbCs9cjtsPjA7cz0yNTYqcytlW3QrZF0sZCs9aCxsLT04KTtpZigwPT09bylvPTEtdTtlbHNle2lmKG89PT1jKXJldHVybiBzP05hTjoxLzAqKGY/LTE6MSk7cys9TWF0aC5wb3coMixyKSxvLT11fXJldHVybihmPy0xOjEpKnMqTWF0aC5wb3coMixvLXIpfWZ1bmN0aW9uICR0KGUsdCxuLHIsaSxvKXt2YXIgcyxhLGMsdT04Km8taS0xLGw9KDE8PHUpLTEsZD1sPj4xLGg9MjM9PT1pP01hdGgucG93KDIsLTI0KS1NYXRoLnBvdygyLC03Nyk6MCxmPXI/MDpvLTEscD1yPzE6LTEsZz10PDB8fDA9PT10JiYxL3Q8MD8xOjA7Zm9yKHQ9TWF0aC5hYnModCksaXNOYU4odCl8fHQ9PT0xLzA/KGE9aXNOYU4odCk/MTowLHM9bCk6KHM9TWF0aC5mbG9vcihNYXRoLmxvZyh0KS9NYXRoLkxOMiksdCooYz1NYXRoLnBvdygyLC1zKSk8MSYmKHMtLSxjKj0yKSwodCs9cytkPj0xP2gvYzpoKk1hdGgucG93KDIsMS1kKSkqYz49MiYmKHMrKyxjLz0yKSxzK2Q+PWw/KGE9MCxzPWwpOnMrZD49MT8oYT0odCpjLTEpKk1hdGgucG93KDIsaSkscys9ZCk6KGE9dCpNYXRoLnBvdygyLGQtMSkqTWF0aC5wb3coMixpKSxzPTApKTtpPj04O2VbbitmXT0yNTUmYSxmKz1wLGEvPTI1NixpLT04KTtmb3Iocz1zPDxpfGEsdSs9aTt1PjA7ZVtuK2ZdPTI1NSZzLGYrPXAscy89MjU2LHUtPTgpO2VbbitmLXBdfD0xMjgqZ312YXIgenQ9e30udG9TdHJpbmcsVnQ9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgQXJyYXldIj09enQuY2FsbChlKX07WnQuVFlQRURfQVJSQVlfU1VQUE9SVD12b2lkIDA9PT1XLlRZUEVEX0FSUkFZX1NVUFBPUlR8fFcuVFlQRURfQVJSQVlfU1VQUE9SVDt2YXIgWXQ9R3QoKTtmdW5jdGlvbiBHdCgpe3JldHVybiBadC5UWVBFRF9BUlJBWV9TVVBQT1JUPzIxNDc0ODM2NDc6MTA3Mzc0MTgyM31mdW5jdGlvbiBYdChlLHQpe2lmKEd0KCk8dCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCB0eXBlZCBhcnJheSBsZW5ndGgiKTtyZXR1cm4gWnQuVFlQRURfQVJSQVlfU1VQUE9SVD8oZT1uZXcgVWludDhBcnJheSh0KSkuX19wcm90b19fPVp0LnByb3RvdHlwZToobnVsbD09PWUmJihlPW5ldyBadCh0KSksZS5sZW5ndGg9dCksZX1mdW5jdGlvbiBadChlLHQsbil7aWYoIShadC5UWVBFRF9BUlJBWV9TVVBQT1JUfHx0aGlzIGluc3RhbmNlb2YgWnQpKXJldHVybiBuZXcgWnQoZSx0LG4pO2lmKCJudW1iZXIiPT10eXBlb2YgZSl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcigiSWYgZW5jb2RpbmcgaXMgc3BlY2lmaWVkIHRoZW4gdGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmciKTtyZXR1cm4gdG4odGhpcyxlKX1yZXR1cm4gUXQodGhpcyxlLHQsbil9ZnVuY3Rpb24gUXQoZSx0LG4scil7aWYoIm51bWJlciI9PXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoJyJ2YWx1ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXInKTtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZ0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/ZnVuY3Rpb24oZSx0LG4scil7aWYodC5ieXRlTGVuZ3RoLG48MHx8dC5ieXRlTGVuZ3RoPG4pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIidvZmZzZXQnIGlzIG91dCBvZiBib3VuZHMiKTtpZih0LmJ5dGVMZW5ndGg8bisocnx8MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIidsZW5ndGgnIGlzIG91dCBvZiBib3VuZHMiKTt0PXZvaWQgMD09PW4mJnZvaWQgMD09PXI/bmV3IFVpbnQ4QXJyYXkodCk6dm9pZCAwPT09cj9uZXcgVWludDhBcnJheSh0LG4pOm5ldyBVaW50OEFycmF5KHQsbixyKTtadC5UWVBFRF9BUlJBWV9TVVBQT1JUPyhlPXQpLl9fcHJvdG9fXz1adC5wcm90b3R5cGU6ZT1ubihlLHQpO3JldHVybiBlfShlLHQsbixyKToic3RyaW5nIj09dHlwZW9mIHQ/ZnVuY3Rpb24oZSx0LG4peyJzdHJpbmciPT10eXBlb2YgbiYmIiIhPT1ufHwobj0idXRmOCIpO2lmKCFadC5pc0VuY29kaW5nKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoJyJlbmNvZGluZyIgbXVzdCBiZSBhIHZhbGlkIHN0cmluZyBlbmNvZGluZycpO3ZhciByPTB8c24odCxuKSxpPShlPVh0KGUscikpLndyaXRlKHQsbik7aSE9PXImJihlPWUuc2xpY2UoMCxpKSk7cmV0dXJuIGV9KGUsdCxuKTpmdW5jdGlvbihlLHQpe2lmKG9uKHQpKXt2YXIgbj0wfHJuKHQubGVuZ3RoKTtyZXR1cm4gMD09PShlPVh0KGUsbikpLmxlbmd0aHx8dC5jb3B5KGUsMCwwLG4pLGV9aWYodCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmdC5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcnx8Imxlbmd0aCJpbiB0KXJldHVybiJudW1iZXIiIT10eXBlb2YgdC5sZW5ndGh8fChyPXQubGVuZ3RoKSE9cj9YdChlLDApOm5uKGUsdCk7aWYoIkJ1ZmZlciI9PT10LnR5cGUmJlZ0KHQuZGF0YSkpcmV0dXJuIG5uKGUsdC5kYXRhKX12YXIgcjt0aHJvdyBuZXcgVHlwZUVycm9yKCJGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgYXJyYXktbGlrZSBvYmplY3QuIil9KGUsdCl9ZnVuY3Rpb24gZW4oZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJyJzaXplIiBhcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJyk7aWYoZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgbmVnYXRpdmUnKX1mdW5jdGlvbiB0bihlLHQpe2lmKGVuKHQpLGU9WHQoZSx0PDA/MDowfHJuKHQpKSwhWnQuVFlQRURfQVJSQVlfU1VQUE9SVClmb3IodmFyIG49MDtuPHQ7KytuKWVbbl09MDtyZXR1cm4gZX1mdW5jdGlvbiBubihlLHQpe3ZhciBuPXQubGVuZ3RoPDA/MDowfHJuKHQubGVuZ3RoKTtlPVh0KGUsbik7Zm9yKHZhciByPTA7cjxuO3IrPTEpZVtyXT0yNTUmdFtyXTtyZXR1cm4gZX1mdW5jdGlvbiBybihlKXtpZihlPj1HdCgpKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIHNpemU6IDB4IitHdCgpLnRvU3RyaW5nKDE2KSsiIGJ5dGVzIik7cmV0dXJuIDB8ZX1mdW5jdGlvbiBvbihlKXtyZXR1cm4hKG51bGw9PWV8fCFlLl9pc0J1ZmZlcil9ZnVuY3Rpb24gc24oZSx0KXtpZihvbihlKSlyZXR1cm4gZS5sZW5ndGg7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmImZ1bmN0aW9uIj09dHlwZW9mIEFycmF5QnVmZmVyLmlzVmlldyYmKEFycmF5QnVmZmVyLmlzVmlldyhlKXx8ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSlyZXR1cm4gZS5ieXRlTGVuZ3RoOyJzdHJpbmciIT10eXBlb2YgZSYmKGU9IiIrZSk7dmFyIG49ZS5sZW5ndGg7aWYoMD09PW4pcmV0dXJuIDA7Zm9yKHZhciByPSExOzspc3dpdGNoKHQpe2Nhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIG47Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlIHZvaWQgMDpyZXR1cm4gVW4oZSkubGVuZ3RoO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gMipuO2Nhc2UiaGV4IjpyZXR1cm4gbj4+PjE7Y2FzZSJiYXNlNjQiOnJldHVybiBMbihlKS5sZW5ndGg7ZGVmYXVsdDppZihyKXJldHVybiBVbihlKS5sZW5ndGg7dD0oIiIrdCkudG9Mb3dlckNhc2UoKSxyPSEwfX1mdW5jdGlvbiBhbihlLHQsbil7dmFyIHI9ITE7aWYoKHZvaWQgMD09PXR8fHQ8MCkmJih0PTApLHQ+dGhpcy5sZW5ndGgpcmV0dXJuIiI7aWYoKHZvaWQgMD09PW58fG4+dGhpcy5sZW5ndGgpJiYobj10aGlzLmxlbmd0aCksbjw9MClyZXR1cm4iIjtpZigobj4+Pj0wKTw9KHQ+Pj49MCkpcmV0dXJuIiI7Zm9yKGV8fChlPSJ1dGY4Iik7Oylzd2l0Y2goZSl7Y2FzZSJoZXgiOnJldHVybiBibih0aGlzLHQsbik7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gbW4odGhpcyx0LG4pO2Nhc2UiYXNjaWkiOnJldHVybiBfbih0aGlzLHQsbik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gU24odGhpcyx0LG4pO2Nhc2UiYmFzZTY0IjpyZXR1cm4geW4odGhpcyx0LG4pO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4ga24odGhpcyx0LG4pO2RlZmF1bHQ6aWYocil0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK2UpO2U9KGUrIiIpLnRvTG93ZXJDYXNlKCkscj0hMH19ZnVuY3Rpb24gY24oZSx0LG4pe3ZhciByPWVbdF07ZVt0XT1lW25dLGVbbl09cn1mdW5jdGlvbiB1bihlLHQsbixyLGkpe2lmKDA9PT1lLmxlbmd0aClyZXR1cm4tMTtpZigic3RyaW5nIj09dHlwZW9mIG4/KHI9bixuPTApOm4+MjE0NzQ4MzY0Nz9uPTIxNDc0ODM2NDc6bjwtMjE0NzQ4MzY0OCYmKG49LTIxNDc0ODM2NDgpLG49K24saXNOYU4obikmJihuPWk/MDplLmxlbmd0aC0xKSxuPDAmJihuPWUubGVuZ3RoK24pLG4+PWUubGVuZ3RoKXtpZihpKXJldHVybi0xO249ZS5sZW5ndGgtMX1lbHNlIGlmKG48MCl7aWYoIWkpcmV0dXJuLTE7bj0wfWlmKCJzdHJpbmciPT10eXBlb2YgdCYmKHQ9WnQuZnJvbSh0LHIpKSxvbih0KSlyZXR1cm4gMD09PXQubGVuZ3RoPy0xOmxuKGUsdCxuLHIsaSk7aWYoIm51bWJlciI9PXR5cGVvZiB0KXJldHVybiB0Jj0yNTUsWnQuVFlQRURfQVJSQVlfU1VQUE9SVCYmImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/aT9VaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoZSx0LG4pOlVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoZSx0LG4pOmxuKGUsW3RdLG4scixpKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJ2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXIiKX1mdW5jdGlvbiBsbihlLHQsbixyLGkpe3ZhciBvLHM9MSxhPWUubGVuZ3RoLGM9dC5sZW5ndGg7aWYodm9pZCAwIT09ciYmKCJ1Y3MyIj09PShyPVN0cmluZyhyKS50b0xvd2VyQ2FzZSgpKXx8InVjcy0yIj09PXJ8fCJ1dGYxNmxlIj09PXJ8fCJ1dGYtMTZsZSI9PT1yKSl7aWYoZS5sZW5ndGg8Mnx8dC5sZW5ndGg8MilyZXR1cm4tMTtzPTIsYS89MixjLz0yLG4vPTJ9ZnVuY3Rpb24gdShlLHQpe3JldHVybiAxPT09cz9lW3RdOmUucmVhZFVJbnQxNkJFKHQqcyl9aWYoaSl7dmFyIGw9LTE7Zm9yKG89bjtvPGE7bysrKWlmKHUoZSxvKT09PXUodCwtMT09PWw/MDpvLWwpKXtpZigtMT09PWwmJihsPW8pLG8tbCsxPT09YylyZXR1cm4gbCpzfWVsc2UtMSE9PWwmJihvLT1vLWwpLGw9LTF9ZWxzZSBmb3IobitjPmEmJihuPWEtYyksbz1uO28+PTA7by0tKXtmb3IodmFyIGQ9ITAsaD0wO2g8YztoKyspaWYodShlLG8raCkhPT11KHQsaCkpe2Q9ITE7YnJlYWt9aWYoZClyZXR1cm4gb31yZXR1cm4tMX1mdW5jdGlvbiBkbihlLHQsbixyKXtuPU51bWJlcihuKXx8MDt2YXIgaT1lLmxlbmd0aC1uO3I/KHI9TnVtYmVyKHIpKT5pJiYocj1pKTpyPWk7dmFyIG89dC5sZW5ndGg7aWYobyUyIT0wKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgaGV4IHN0cmluZyIpO3I+by8yJiYocj1vLzIpO2Zvcih2YXIgcz0wO3M8cjsrK3Mpe3ZhciBhPXBhcnNlSW50KHQuc3Vic3RyKDIqcywyKSwxNik7aWYoaXNOYU4oYSkpcmV0dXJuIHM7ZVtuK3NdPWF9cmV0dXJuIHN9ZnVuY3Rpb24gaG4oZSx0LG4scil7cmV0dXJuIEhuKFVuKHQsZS5sZW5ndGgtbiksZSxuLHIpfWZ1bmN0aW9uIGZuKGUsdCxuLHIpe3JldHVybiBIbihmdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbj0wO248ZS5sZW5ndGg7KytuKXQucHVzaCgyNTUmZS5jaGFyQ29kZUF0KG4pKTtyZXR1cm4gdH0odCksZSxuLHIpfWZ1bmN0aW9uIHBuKGUsdCxuLHIpe3JldHVybiBmbihlLHQsbixyKX1mdW5jdGlvbiBnbihlLHQsbixyKXtyZXR1cm4gSG4oTG4odCksZSxuLHIpfWZ1bmN0aW9uIHZuKGUsdCxuLHIpe3JldHVybiBIbihmdW5jdGlvbihlLHQpe2Zvcih2YXIgbixyLGksbz1bXSxzPTA7czxlLmxlbmd0aCYmISgodC09Mik8MCk7KytzKXI9KG49ZS5jaGFyQ29kZUF0KHMpKT4+OCxpPW4lMjU2LG8ucHVzaChpKSxvLnB1c2gocik7cmV0dXJuIG99KHQsZS5sZW5ndGgtbiksZSxuLHIpfWZ1bmN0aW9uIHluKGUsdCxuKXtyZXR1cm4gMD09PXQmJm49PT1lLmxlbmd0aD9GdChlKTpGdChlLnNsaWNlKHQsbikpfWZ1bmN0aW9uIG1uKGUsdCxuKXtuPU1hdGgubWluKGUubGVuZ3RoLG4pO2Zvcih2YXIgcj1bXSxpPXQ7aTxuOyl7dmFyIG8scyxhLGMsdT1lW2ldLGw9bnVsbCxkPXU+MjM5PzQ6dT4yMjM/Mzp1PjE5MT8yOjE7aWYoaStkPD1uKXN3aXRjaChkKXtjYXNlIDE6dTwxMjgmJihsPXUpO2JyZWFrO2Nhc2UgMjoxMjg9PSgxOTImKG89ZVtpKzFdKSkmJihjPSgzMSZ1KTw8Nnw2MyZvKT4xMjcmJihsPWMpO2JyZWFrO2Nhc2UgMzpvPWVbaSsxXSxzPWVbaSsyXSwxMjg9PSgxOTImbykmJjEyOD09KDE5MiZzKSYmKGM9KDE1JnUpPDwxMnwoNjMmbyk8PDZ8NjMmcyk+MjA0NyYmKGM8NTUyOTZ8fGM+NTczNDMpJiYobD1jKTticmVhaztjYXNlIDQ6bz1lW2krMV0scz1lW2krMl0sYT1lW2krM10sMTI4PT0oMTkyJm8pJiYxMjg9PSgxOTImcykmJjEyOD09KDE5MiZhKSYmKGM9KDE1JnUpPDwxOHwoNjMmbyk8PDEyfCg2MyZzKTw8Nnw2MyZhKT42NTUzNSYmYzwxMTE0MTEyJiYobD1jKX1udWxsPT09bD8obD02NTUzMyxkPTEpOmw+NjU1MzUmJihsLT02NTUzNixyLnB1c2gobD4+PjEwJjEwMjN8NTUyOTYpLGw9NTYzMjB8MTAyMyZsKSxyLnB1c2gobCksaSs9ZH1yZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGg7aWYodDw9d24pcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGUpO3ZhciBuPSIiLHI9MDtmb3IoO3I8dDspbis9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsZS5zbGljZShyLHIrPXduKSk7cmV0dXJuIG59KHIpfVp0LnBvb2xTaXplPTgxOTIsWnQuX2F1Z21lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19fPVp0LnByb3RvdHlwZSxlfSxadC5mcm9tPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gUXQobnVsbCxlLHQsbil9LFp0LlRZUEVEX0FSUkFZX1NVUFBPUlQmJihadC5wcm90b3R5cGUuX19wcm90b19fPVVpbnQ4QXJyYXkucHJvdG90eXBlLFp0Ll9fcHJvdG9fXz1VaW50OEFycmF5KSxadC5hbGxvYz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBlbih0KSx0PD0wP1h0KGUsdCk6dm9pZCAwIT09bj8ic3RyaW5nIj09dHlwZW9mIHI/WHQoZSx0KS5maWxsKG4scik6WHQoZSx0KS5maWxsKG4pOlh0KGUsdCl9KG51bGwsZSx0LG4pfSxadC5hbGxvY1Vuc2FmZT1mdW5jdGlvbihlKXtyZXR1cm4gdG4obnVsbCxlKX0sWnQuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKGUpe3JldHVybiB0bihudWxsLGUpfSxadC5pc0J1ZmZlcj1NbixadC5jb21wYXJlPWZ1bmN0aW9uKGUsdCl7aWYoIW9uKGUpfHwhb24odCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIG11c3QgYmUgQnVmZmVycyIpO2lmKGU9PT10KXJldHVybiAwO2Zvcih2YXIgbj1lLmxlbmd0aCxyPXQubGVuZ3RoLGk9MCxvPU1hdGgubWluKG4scik7aTxvOysraSlpZihlW2ldIT09dFtpXSl7bj1lW2ldLHI9dFtpXTticmVha31yZXR1cm4gbjxyPy0xOnI8bj8xOjB9LFp0LmlzRW5jb2Rpbmc9ZnVuY3Rpb24oZSl7c3dpdGNoKFN0cmluZyhlKS50b0xvd2VyQ2FzZSgpKXtjYXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOmNhc2UiYmFzZTY0IjpjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19LFp0LmNvbmNhdD1mdW5jdGlvbihlLHQpe2lmKCFWdChlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aWYoMD09PWUubGVuZ3RoKXJldHVybiBadC5hbGxvYygwKTt2YXIgbjtpZih2b2lkIDA9PT10KWZvcih0PTAsbj0wO248ZS5sZW5ndGg7KytuKXQrPWVbbl0ubGVuZ3RoO3ZhciByPVp0LmFsbG9jVW5zYWZlKHQpLGk9MDtmb3Iobj0wO248ZS5sZW5ndGg7KytuKXt2YXIgbz1lW25dO2lmKCFvbihvKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7by5jb3B5KHIsaSksaSs9by5sZW5ndGh9cmV0dXJuIHJ9LFp0LmJ5dGVMZW5ndGg9c24sWnQucHJvdG90eXBlLl9pc0J1ZmZlcj0hMCxadC5wcm90b3R5cGUuc3dhcDE2PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSUyIT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz0yKWNuKHRoaXMsdCx0KzEpO3JldHVybiB0aGlzfSxadC5wcm90b3R5cGUuc3dhcDMyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSU0IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz00KWNuKHRoaXMsdCx0KzMpLGNuKHRoaXMsdCsxLHQrMik7cmV0dXJuIHRoaXN9LFp0LnByb3RvdHlwZS5zd2FwNjQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTghPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzIik7Zm9yKHZhciB0PTA7dDxlO3QrPTgpY24odGhpcyx0LHQrNyksY24odGhpcyx0KzEsdCs2KSxjbih0aGlzLHQrMix0KzUpLGNuKHRoaXMsdCszLHQrNCk7cmV0dXJuIHRoaXN9LFp0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBlPTB8dGhpcy5sZW5ndGg7cmV0dXJuIDA9PT1lPyIiOjA9PT1hcmd1bWVudHMubGVuZ3RoP21uKHRoaXMsMCxlKTphbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LFp0LnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oZSl7aWYoIW9uKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtyZXR1cm4gdGhpcz09PWV8fDA9PT1adC5jb21wYXJlKHRoaXMsZSl9LFp0LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7dmFyIGU9IiI7cmV0dXJuIHRoaXMubGVuZ3RoPjAmJihlPXRoaXMudG9TdHJpbmcoImhleCIsMCw1MCkubWF0Y2goLy57Mn0vZykuam9pbigiICIpLHRoaXMubGVuZ3RoPjUwJiYoZSs9IiAuLi4gIikpLCI8QnVmZmVyICIrZSsiPiJ9LFp0LnByb3RvdHlwZS5jb21wYXJlPWZ1bmN0aW9uKGUsdCxuLHIsaSl7aWYoIW9uKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtpZih2b2lkIDA9PT10JiYodD0wKSx2b2lkIDA9PT1uJiYobj1lP2UubGVuZ3RoOjApLHZvaWQgMD09PXImJihyPTApLHZvaWQgMD09PWkmJihpPXRoaXMubGVuZ3RoKSx0PDB8fG4+ZS5sZW5ndGh8fHI8MHx8aT50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIGluZGV4Iik7aWYocj49aSYmdD49bilyZXR1cm4gMDtpZihyPj1pKXJldHVybi0xO2lmKHQ+PW4pcmV0dXJuIDE7aWYodGhpcz09PWUpcmV0dXJuIDA7Zm9yKHZhciBvPShpPj4+PTApLShyPj4+PTApLHM9KG4+Pj49MCktKHQ+Pj49MCksYT1NYXRoLm1pbihvLHMpLGM9dGhpcy5zbGljZShyLGkpLHU9ZS5zbGljZSh0LG4pLGw9MDtsPGE7KytsKWlmKGNbbF0hPT11W2xdKXtvPWNbbF0scz11W2xdO2JyZWFrfXJldHVybiBvPHM/LTE6czxvPzE6MH0sWnQucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZihlLHQsbil9LFp0LnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdW4odGhpcyxlLHQsbiwhMCl9LFp0LnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHVuKHRoaXMsZSx0LG4sITEpfSxadC5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oZSx0LG4scil7aWYodm9pZCAwPT09dClyPSJ1dGY4IixuPXRoaXMubGVuZ3RoLHQ9MDtlbHNlIGlmKHZvaWQgMD09PW4mJiJzdHJpbmciPT10eXBlb2YgdClyPXQsbj10aGlzLmxlbmd0aCx0PTA7ZWxzZXtpZighaXNGaW5pdGUodCkpdGhyb3cgbmV3IEVycm9yKCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpO3R8PTAsaXNGaW5pdGUobik/KG58PTAsdm9pZCAwPT09ciYmKHI9InV0ZjgiKSk6KHI9bixuPXZvaWQgMCl9dmFyIGk9dGhpcy5sZW5ndGgtdDtpZigodm9pZCAwPT09bnx8bj5pKSYmKG49aSksZS5sZW5ndGg+MCYmKG48MHx8dDwwKXx8dD50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMiKTtyfHwocj0idXRmOCIpO2Zvcih2YXIgbz0hMTs7KXN3aXRjaChyKXtjYXNlImhleCI6cmV0dXJuIGRuKHRoaXMsZSx0LG4pO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIGhuKHRoaXMsZSx0LG4pO2Nhc2UiYXNjaWkiOnJldHVybiBmbih0aGlzLGUsdCxuKTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBwbih0aGlzLGUsdCxuKTtjYXNlImJhc2U2NCI6cmV0dXJuIGduKHRoaXMsZSx0LG4pO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gdm4odGhpcyxlLHQsbik7ZGVmYXVsdDppZihvKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrcik7cj0oIiIrcikudG9Mb3dlckNhc2UoKSxvPSEwfX0sWnQucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJCdWZmZXIiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX07dmFyIHduPTQwOTY7ZnVuY3Rpb24gX24oZSx0LG4pe3ZhciByPSIiO249TWF0aC5taW4oZS5sZW5ndGgsbik7Zm9yKHZhciBpPXQ7aTxuOysraSlyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDEyNyZlW2ldKTtyZXR1cm4gcn1mdW5jdGlvbiBTbihlLHQsbil7dmFyIHI9IiI7bj1NYXRoLm1pbihlLmxlbmd0aCxuKTtmb3IodmFyIGk9dDtpPG47KytpKXIrPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtpXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gYm4oZSx0LG4pe3ZhciByPWUubGVuZ3RoOyghdHx8dDwwKSYmKHQ9MCksKCFufHxuPDB8fG4+cikmJihuPXIpO2Zvcih2YXIgaT0iIixvPXQ7bzxuOysrbylpKz1PbihlW29dKTtyZXR1cm4gaX1mdW5jdGlvbiBrbihlLHQsbil7Zm9yKHZhciByPWUuc2xpY2UodCxuKSxpPSIiLG89MDtvPHIubGVuZ3RoO28rPTIpaSs9U3RyaW5nLmZyb21DaGFyQ29kZShyW29dKzI1NipyW28rMV0pO3JldHVybiBpfWZ1bmN0aW9uIEVuKGUsdCxuKXtpZihlJTEhPTB8fGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib2Zmc2V0IGlzIG5vdCB1aW50Iik7aWYoZSt0Pm4pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlRyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgiKX1mdW5jdGlvbiBUbihlLHQsbixyLGksbyl7aWYoIW9uKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJidWZmZXIiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKTtpZih0Pml8fHQ8byl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInZhbHVlIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJyk7aWYobityPmUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBBbihlLHQsbixyKXt0PDAmJih0PTY1NTM1K3QrMSk7Zm9yKHZhciBpPTAsbz1NYXRoLm1pbihlLmxlbmd0aC1uLDIpO2k8bzsrK2kpZVtuK2ldPSh0JjI1NTw8OCoocj9pOjEtaSkpPj4+OCoocj9pOjEtaSl9ZnVuY3Rpb24gUm4oZSx0LG4scil7dDwwJiYodD00Mjk0OTY3Mjk1K3QrMSk7Zm9yKHZhciBpPTAsbz1NYXRoLm1pbihlLmxlbmd0aC1uLDQpO2k8bzsrK2kpZVtuK2ldPXQ+Pj44KihyP2k6My1pKSYyNTV9ZnVuY3Rpb24gQ24oZSx0LG4scixpLG8pe2lmKG4rcj5lLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYobjwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBEbihlLHQsbixyLGkpe3JldHVybiBpfHxDbihlLDAsbiw0KSwkdChlLHQsbixyLDIzLDQpLG4rNH1mdW5jdGlvbiBQbihlLHQsbixyLGkpe3JldHVybiBpfHxDbihlLDAsbiw4KSwkdChlLHQsbixyLDUyLDgpLG4rOH1adC5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24oZSx0KXt2YXIgbixyPXRoaXMubGVuZ3RoO2lmKChlPX5+ZSk8MD8oZSs9cik8MCYmKGU9MCk6ZT5yJiYoZT1yKSwodD12b2lkIDA9PT10P3I6fn50KTwwPyh0Kz1yKTwwJiYodD0wKTp0PnImJih0PXIpLHQ8ZSYmKHQ9ZSksWnQuVFlQRURfQVJSQVlfU1VQUE9SVCkobj10aGlzLnN1YmFycmF5KGUsdCkpLl9fcHJvdG9fXz1adC5wcm90b3R5cGU7ZWxzZXt2YXIgaT10LWU7bj1uZXcgWnQoaSx2b2lkIDApO2Zvcih2YXIgbz0wO288aTsrK28pbltvXT10aGlzW28rZV19cmV0dXJuIG59LFp0LnByb3RvdHlwZS5yZWFkVUludExFPWZ1bmN0aW9uKGUsdCxuKXtlfD0wLHR8PTAsbnx8RW4oZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIHI9dGhpc1tlXSxpPTEsbz0wOysrbzx0JiYoaSo9MjU2KTspcis9dGhpc1tlK29dKmk7cmV0dXJuIHJ9LFp0LnByb3RvdHlwZS5yZWFkVUludEJFPWZ1bmN0aW9uKGUsdCxuKXtlfD0wLHR8PTAsbnx8RW4oZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIHI9dGhpc1tlKy0tdF0saT0xO3Q+MCYmKGkqPTI1Nik7KXIrPXRoaXNbZSstLXRdKmk7cmV0dXJuIHJ9LFp0LnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8RW4oZSwxLHRoaXMubGVuZ3RoKSx0aGlzW2VdfSxadC5wcm90b3R5cGUucmVhZFVJbnQxNkxFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEVuKGUsMix0aGlzLmxlbmd0aCksdGhpc1tlXXx0aGlzW2UrMV08PDh9LFp0LnByb3RvdHlwZS5yZWFkVUludDE2QkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8RW4oZSwyLHRoaXMubGVuZ3RoKSx0aGlzW2VdPDw4fHRoaXNbZSsxXX0sWnQucHJvdG90eXBlLnJlYWRVSW50MzJMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxFbihlLDQsdGhpcy5sZW5ndGgpLCh0aGlzW2VdfHRoaXNbZSsxXTw8OHx0aGlzW2UrMl08PDE2KSsxNjc3NzIxNip0aGlzW2UrM119LFp0LnByb3RvdHlwZS5yZWFkVUludDMyQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8RW4oZSw0LHRoaXMubGVuZ3RoKSwxNjc3NzIxNip0aGlzW2VdKyh0aGlzW2UrMV08PDE2fHRoaXNbZSsyXTw8OHx0aGlzW2UrM10pfSxadC5wcm90b3R5cGUucmVhZEludExFPWZ1bmN0aW9uKGUsdCxuKXtlfD0wLHR8PTAsbnx8RW4oZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIHI9dGhpc1tlXSxpPTEsbz0wOysrbzx0JiYoaSo9MjU2KTspcis9dGhpc1tlK29dKmk7cmV0dXJuIHI+PShpKj0xMjgpJiYoci09TWF0aC5wb3coMiw4KnQpKSxyfSxadC5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKGUsdCxuKXtlfD0wLHR8PTAsbnx8RW4oZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIHI9dCxpPTEsbz10aGlzW2UrLS1yXTtyPjAmJihpKj0yNTYpOylvKz10aGlzW2UrLS1yXSppO3JldHVybiBvPj0oaSo9MTI4KSYmKG8tPU1hdGgucG93KDIsOCp0KSksb30sWnQucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEVuKGUsMSx0aGlzLmxlbmd0aCksMTI4JnRoaXNbZV0/LTEqKDI1NS10aGlzW2VdKzEpOnRoaXNbZV19LFp0LnByb3RvdHlwZS5yZWFkSW50MTZMRT1mdW5jdGlvbihlLHQpe3R8fEVuKGUsMix0aGlzLmxlbmd0aCk7dmFyIG49dGhpc1tlXXx0aGlzW2UrMV08PDg7cmV0dXJuIDMyNzY4Jm4/NDI5NDkwMTc2MHxuOm59LFp0LnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbihlLHQpe3R8fEVuKGUsMix0aGlzLmxlbmd0aCk7dmFyIG49dGhpc1tlKzFdfHRoaXNbZV08PDg7cmV0dXJuIDMyNzY4Jm4/NDI5NDkwMTc2MHxuOm59LFp0LnByb3RvdHlwZS5yZWFkSW50MzJMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxFbihlLDQsdGhpcy5sZW5ndGgpLHRoaXNbZV18dGhpc1tlKzFdPDw4fHRoaXNbZSsyXTw8MTZ8dGhpc1tlKzNdPDwyNH0sWnQucHJvdG90eXBlLnJlYWRJbnQzMkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEVuKGUsNCx0aGlzLmxlbmd0aCksdGhpc1tlXTw8MjR8dGhpc1tlKzFdPDwxNnx0aGlzW2UrMl08PDh8dGhpc1tlKzNdfSxadC5wcm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8RW4oZSw0LHRoaXMubGVuZ3RoKSxXdCh0aGlzLGUsITAsMjMsNCl9LFp0LnByb3RvdHlwZS5yZWFkRmxvYXRCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxFbihlLDQsdGhpcy5sZW5ndGgpLFd0KHRoaXMsZSwhMSwyMyw0KX0sWnQucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxFbihlLDgsdGhpcy5sZW5ndGgpLFd0KHRoaXMsZSwhMCw1Miw4KX0sWnQucHJvdG90eXBlLnJlYWREb3VibGVCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxFbihlLDgsdGhpcy5sZW5ndGgpLFd0KHRoaXMsZSwhMSw1Miw4KX0sWnQucHJvdG90eXBlLndyaXRlVUludExFPWZ1bmN0aW9uKGUsdCxuLHIpeyhlPStlLHR8PTAsbnw9MCxyKXx8VG4odGhpcyxlLHQsbixNYXRoLnBvdygyLDgqbiktMSwwKTt2YXIgaT0xLG89MDtmb3IodGhpc1t0XT0yNTUmZTsrK288biYmKGkqPTI1Nik7KXRoaXNbdCtvXT1lL2kmMjU1O3JldHVybiB0K259LFp0LnByb3RvdHlwZS53cml0ZVVJbnRCRT1mdW5jdGlvbihlLHQsbixyKXsoZT0rZSx0fD0wLG58PTAscil8fFRuKHRoaXMsZSx0LG4sTWF0aC5wb3coMiw4Km4pLTEsMCk7dmFyIGk9bi0xLG89MTtmb3IodGhpc1t0K2ldPTI1NSZlOy0taT49MCYmKG8qPTI1Nik7KXRoaXNbdCtpXT1lL28mMjU1O3JldHVybiB0K259LFp0LnByb3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fFRuKHRoaXMsZSx0LDEsMjU1LDApLFp0LlRZUEVEX0FSUkFZX1NVUFBPUlR8fChlPU1hdGguZmxvb3IoZSkpLHRoaXNbdF09MjU1JmUsdCsxfSxadC5wcm90b3R5cGUud3JpdGVVSW50MTZMRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxUbih0aGlzLGUsdCwyLDY1NTM1LDApLFp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44KTpBbih0aGlzLGUsdCwhMCksdCsyfSxadC5wcm90b3R5cGUud3JpdGVVSW50MTZCRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxUbih0aGlzLGUsdCwyLDY1NTM1LDApLFp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjgsdGhpc1t0KzFdPTI1NSZlKTpBbih0aGlzLGUsdCwhMSksdCsyfSxadC5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxUbih0aGlzLGUsdCw0LDQyOTQ5NjcyOTUsMCksWnQuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0KzNdPWU+Pj4yNCx0aGlzW3QrMl09ZT4+PjE2LHRoaXNbdCsxXT1lPj4+OCx0aGlzW3RdPTI1NSZlKTpSbih0aGlzLGUsdCwhMCksdCs0fSxadC5wcm90b3R5cGUud3JpdGVVSW50MzJCRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxUbih0aGlzLGUsdCw0LDQyOTQ5NjcyOTUsMCksWnQuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+MjQsdGhpc1t0KzFdPWU+Pj4xNix0aGlzW3QrMl09ZT4+PjgsdGhpc1t0KzNdPTI1NSZlKTpSbih0aGlzLGUsdCwhMSksdCs0fSxadC5wcm90b3R5cGUud3JpdGVJbnRMRT1mdW5jdGlvbihlLHQsbixyKXtpZihlPStlLHR8PTAsIXIpe3ZhciBpPU1hdGgucG93KDIsOCpuLTEpO1RuKHRoaXMsZSx0LG4saS0xLC1pKX12YXIgbz0wLHM9MSxhPTA7Zm9yKHRoaXNbdF09MjU1JmU7KytvPG4mJihzKj0yNTYpOyllPDAmJjA9PT1hJiYwIT09dGhpc1t0K28tMV0mJihhPTEpLHRoaXNbdCtvXT0oZS9zPj4wKS1hJjI1NTtyZXR1cm4gdCtufSxadC5wcm90b3R5cGUud3JpdGVJbnRCRT1mdW5jdGlvbihlLHQsbixyKXtpZihlPStlLHR8PTAsIXIpe3ZhciBpPU1hdGgucG93KDIsOCpuLTEpO1RuKHRoaXMsZSx0LG4saS0xLC1pKX12YXIgbz1uLTEscz0xLGE9MDtmb3IodGhpc1t0K29dPTI1NSZlOy0tbz49MCYmKHMqPTI1Nik7KWU8MCYmMD09PWEmJjAhPT10aGlzW3QrbysxXSYmKGE9MSksdGhpc1t0K29dPShlL3M+PjApLWEmMjU1O3JldHVybiB0K259LFp0LnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8VG4odGhpcyxlLHQsMSwxMjcsLTEyOCksWnQuVFlQRURfQVJSQVlfU1VQUE9SVHx8KGU9TWF0aC5mbG9vcihlKSksZTwwJiYoZT0yNTUrZSsxKSx0aGlzW3RdPTI1NSZlLHQrMX0sWnQucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxUbih0aGlzLGUsdCwyLDMyNzY3LC0zMjc2OCksWnQuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT0yNTUmZSx0aGlzW3QrMV09ZT4+PjgpOkFuKHRoaXMsZSx0LCEwKSx0KzJ9LFp0LnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8VG4odGhpcyxlLHQsMiwzMjc2NywtMzI3NjgpLFp0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjgsdGhpc1t0KzFdPTI1NSZlKTpBbih0aGlzLGUsdCwhMSksdCsyfSxadC5wcm90b3R5cGUud3JpdGVJbnQzMkxFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fFRuKHRoaXMsZSx0LDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksWnQuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT0yNTUmZSx0aGlzW3QrMV09ZT4+PjgsdGhpc1t0KzJdPWU+Pj4xNix0aGlzW3QrM109ZT4+PjI0KTpSbih0aGlzLGUsdCwhMCksdCs0fSxadC5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fFRuKHRoaXMsZSx0LDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksZTwwJiYoZT00Mjk0OTY3Mjk1K2UrMSksWnQuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+MjQsdGhpc1t0KzFdPWU+Pj4xNix0aGlzW3QrMl09ZT4+PjgsdGhpc1t0KzNdPTI1NSZlKTpSbih0aGlzLGUsdCwhMSksdCs0fSxadC5wcm90b3R5cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gRG4odGhpcyxlLHQsITAsbil9LFp0LnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBEbih0aGlzLGUsdCwhMSxuKX0sWnQucHJvdG90eXBlLndyaXRlRG91YmxlTEU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBQbih0aGlzLGUsdCwhMCxuKX0sWnQucHJvdG90eXBlLndyaXRlRG91YmxlQkU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBQbih0aGlzLGUsdCwhMSxuKX0sWnQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZSx0LG4scil7aWYobnx8KG49MCkscnx8MD09PXJ8fChyPXRoaXMubGVuZ3RoKSx0Pj1lLmxlbmd0aCYmKHQ9ZS5sZW5ndGgpLHR8fCh0PTApLHI+MCYmcjxuJiYocj1uKSxyPT09bilyZXR1cm4gMDtpZigwPT09ZS5sZW5ndGh8fDA9PT10aGlzLmxlbmd0aClyZXR1cm4gMDtpZih0PDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoInRhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMiKTtpZihuPDB8fG4+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VTdGFydCBvdXQgb2YgYm91bmRzIik7aWYocjwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcyIpO3I+dGhpcy5sZW5ndGgmJihyPXRoaXMubGVuZ3RoKSxlLmxlbmd0aC10PHItbiYmKHI9ZS5sZW5ndGgtdCtuKTt2YXIgaSxvPXItbjtpZih0aGlzPT09ZSYmbjx0JiZ0PHIpZm9yKGk9by0xO2k+PTA7LS1pKWVbaSt0XT10aGlzW2krbl07ZWxzZSBpZihvPDFlM3x8IVp0LlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKGk9MDtpPG87KytpKWVbaSt0XT10aGlzW2krbl07ZWxzZSBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChlLHRoaXMuc3ViYXJyYXkobixuK28pLHQpO3JldHVybiBvfSxadC5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbihlLHQsbixyKXtpZigic3RyaW5nIj09dHlwZW9mIGUpe2lmKCJzdHJpbmciPT10eXBlb2YgdD8ocj10LHQ9MCxuPXRoaXMubGVuZ3RoKToic3RyaW5nIj09dHlwZW9mIG4mJihyPW4sbj10aGlzLmxlbmd0aCksMT09PWUubGVuZ3RoKXt2YXIgaT1lLmNoYXJDb2RlQXQoMCk7aTwyNTYmJihlPWkpfWlmKHZvaWQgMCE9PXImJiJzdHJpbmciIT10eXBlb2Ygcil0aHJvdyBuZXcgVHlwZUVycm9yKCJlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nIik7aWYoInN0cmluZyI9PXR5cGVvZiByJiYhWnQuaXNFbmNvZGluZyhyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK3IpfWVsc2UibnVtYmVyIj09dHlwZW9mIGUmJihlJj0yNTUpO2lmKHQ8MHx8dGhpcy5sZW5ndGg8dHx8dGhpcy5sZW5ndGg8bil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiT3V0IG9mIHJhbmdlIGluZGV4Iik7aWYobjw9dClyZXR1cm4gdGhpczt2YXIgbztpZih0Pj4+PTAsbj12b2lkIDA9PT1uP3RoaXMubGVuZ3RoOm4+Pj4wLGV8fChlPTApLCJudW1iZXIiPT10eXBlb2YgZSlmb3Iobz10O288bjsrK28pdGhpc1tvXT1lO2Vsc2V7dmFyIHM9b24oZSk/ZTpVbihuZXcgWnQoZSxyKS50b1N0cmluZygpKSxhPXMubGVuZ3RoO2ZvcihvPTA7bzxuLXQ7KytvKXRoaXNbbyt0XT1zW28lYV19cmV0dXJuIHRoaXN9O3ZhciBJbj0vW14rXC8wLTlBLVphLXotX10vZztmdW5jdGlvbiBPbihlKXtyZXR1cm4gZTwxNj8iMCIrZS50b1N0cmluZygxNik6ZS50b1N0cmluZygxNil9ZnVuY3Rpb24gVW4oZSx0KXt2YXIgbjt0PXR8fDEvMDtmb3IodmFyIHI9ZS5sZW5ndGgsaT1udWxsLG89W10scz0wO3M8cjsrK3Mpe2lmKChuPWUuY2hhckNvZGVBdChzKSk+NTUyOTUmJm48NTczNDQpe2lmKCFpKXtpZihuPjU2MzE5KXsodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aWYocysxPT09cil7KHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWk9bjtjb250aW51ZX1pZihuPDU2MzIwKXsodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSksaT1uO2NvbnRpbnVlfW49NjU1MzYrKGktNTUyOTY8PDEwfG4tNTYzMjApfWVsc2UgaSYmKHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2lmKGk9bnVsbCxuPDEyOCl7aWYoKHQtPTEpPDApYnJlYWs7by5wdXNoKG4pfWVsc2UgaWYobjwyMDQ4KXtpZigodC09Mik8MClicmVhaztvLnB1c2gobj4+NnwxOTIsNjMmbnwxMjgpfWVsc2UgaWYobjw2NTUzNil7aWYoKHQtPTMpPDApYnJlYWs7by5wdXNoKG4+PjEyfDIyNCxuPj42JjYzfDEyOCw2MyZufDEyOCl9ZWxzZXtpZighKG48MTExNDExMikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvZGUgcG9pbnQiKTtpZigodC09NCk8MClicmVhaztvLnB1c2gobj4+MTh8MjQwLG4+PjEyJjYzfDEyOCxuPj42JjYzfDEyOCw2MyZufDEyOCl9fXJldHVybiBvfWZ1bmN0aW9uIExuKGUpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLHM7S3R8fEp0KCk7dmFyIGE9ZS5sZW5ndGg7aWYoYSU0PjApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Iik7bz0iPSI9PT1lW2EtMl0/MjoiPSI9PT1lW2EtMV0/MTowLHM9bmV3IHh0KDMqYS80LW8pLHI9bz4wP2EtNDphO3ZhciBjPTA7Zm9yKHQ9MCxuPTA7dDxyO3QrPTQsbis9MylpPWp0W2UuY2hhckNvZGVBdCh0KV08PDE4fGp0W2UuY2hhckNvZGVBdCh0KzEpXTw8MTJ8anRbZS5jaGFyQ29kZUF0KHQrMildPDw2fGp0W2UuY2hhckNvZGVBdCh0KzMpXSxzW2MrK109aT4+MTYmMjU1LHNbYysrXT1pPj44JjI1NSxzW2MrK109MjU1Jmk7cmV0dXJuIDI9PT1vPyhpPWp0W2UuY2hhckNvZGVBdCh0KV08PDJ8anRbZS5jaGFyQ29kZUF0KHQrMSldPj40LHNbYysrXT0yNTUmaSk6MT09PW8mJihpPWp0W2UuY2hhckNvZGVBdCh0KV08PDEwfGp0W2UuY2hhckNvZGVBdCh0KzEpXTw8NHxqdFtlLmNoYXJDb2RlQXQodCsyKV0+PjIsc1tjKytdPWk+PjgmMjU1LHNbYysrXT0yNTUmaSksc30oZnVuY3Rpb24oZSl7aWYoKGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpbT9lLnRyaW0oKTplLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX0oZSkucmVwbGFjZShJbiwiIikpLmxlbmd0aDwyKXJldHVybiIiO2Zvcig7ZS5sZW5ndGglNCE9MDspZSs9Ij0iO3JldHVybiBlfShlKSl9ZnVuY3Rpb24gSG4oZSx0LG4scil7Zm9yKHZhciBpPTA7aTxyJiYhKGkrbj49dC5sZW5ndGh8fGk+PWUubGVuZ3RoKTsrK2kpdFtpK25dPWVbaV07cmV0dXJuIGl9ZnVuY3Rpb24gTW4oZSl7cmV0dXJuIG51bGwhPWUmJighIWUuX2lzQnVmZmVyfHxObihlKXx8ZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGUucmVhZEZsb2F0TEUmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLnNsaWNlJiZObihlLnNsaWNlKDAsMCkpfShlKSl9ZnVuY3Rpb24gTm4oZSl7cmV0dXJuISFlLmNvbnN0cnVjdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihlKX12YXIgcW49T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsQnVmZmVyOlp0LElOU1BFQ1RfTUFYX0JZVEVTOjUwLFNsb3dCdWZmZXI6ZnVuY3Rpb24oZSl7cmV0dXJuK2UhPWUmJihlPTApLFp0LmFsbG9jKCtlKX0saXNCdWZmZXI6TW4sa01heExlbmd0aDpZdH0pLGpuPXtleHBvcnRzOnt9fSx4bj17fSxLbj17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoS24sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEtuLmRlZmF1bHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGgsbj10JTQ7aWYoIW4pcmV0dXJuIGU7dmFyIHI9dCxpPTQtbixvPXQraSxzPVp0LmFsbG9jKG8pO2ZvcihzLndyaXRlKGUpO2ktLTspcy53cml0ZSgiPSIscisrKTtyZXR1cm4gcy50b1N0cmluZygpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeG4sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBKbj1LbjtmdW5jdGlvbiBCbihlLHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0idXRmOCIpLFp0LmlzQnVmZmVyKGUpP1duKGUudG9TdHJpbmcoImJhc2U2NCIpKTpXbihadC5mcm9tKGUsdCkudG9TdHJpbmcoImJhc2U2NCIpKX1mdW5jdGlvbiBGbihlKXtyZXR1cm4gZT1lLnRvU3RyaW5nKCksSm4uZGVmYXVsdChlKS5yZXBsYWNlKC9cLS9nLCIrIikucmVwbGFjZSgvXy9nLCIvIil9ZnVuY3Rpb24gV24oZSl7cmV0dXJuIGUucmVwbGFjZSgvPS9nLCIiKS5yZXBsYWNlKC9cKy9nLCItIikucmVwbGFjZSgvXC8vZywiXyIpfXZhciAkbix6bj1Cbjt6bi5lbmNvZGU9Qm4sem4uZGVjb2RlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSJ1dGY4IiksWnQuZnJvbShGbihlKSwiYmFzZTY0IikudG9TdHJpbmcodCl9LHpuLnRvQmFzZTY0PUZuLHpuLmZyb21CYXNlNjQ9V24sem4udG9CdWZmZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIFp0LmZyb20oRm4oZSksImJhc2U2NCIpfSx4bi5kZWZhdWx0PXpuLCgkbj1qbikuZXhwb3J0cz14bi5kZWZhdWx0LCRuLmV4cG9ydHMuZGVmYXVsdD0kbi5leHBvcnRzO3ZhciBWbj1qbi5leHBvcnRzLFluPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKHQsbil7dmFyIHI9e307IWZ1bmN0aW9uKGUpe2UuX19lc01vZHVsZT0hMCxlLmRpZ2VzdExlbmd0aD0zMixlLmJsb2NrU2l6ZT02NDt2YXIgdD1uZXcgVWludDMyQXJyYXkoWzExMTYzNTI0MDgsMTg5OTQ0NzQ0MSwzMDQ5MzIzNDcxLDM5MjEwMDk1NzMsOTYxOTg3MTYzLDE1MDg5NzA5OTMsMjQ1MzYzNTc0OCwyODcwNzYzMjIxLDM2MjQzODEwODAsMzEwNTk4NDAxLDYwNzIyNTI3OCwxNDI2ODgxOTg3LDE5MjUwNzgzODgsMjE2MjA3ODIwNiwyNjE0ODg4MTAzLDMyNDgyMjI1ODAsMzgzNTM5MDQwMSw0MDIyMjI0Nzc0LDI2NDM0NzA3OCw2MDQ4MDc2MjgsNzcwMjU1OTgzLDEyNDkxNTAxMjIsMTU1NTA4MTY5MiwxOTk2MDY0OTg2LDI1NTQyMjA4ODIsMjgyMTgzNDM0OSwyOTUyOTk2ODA4LDMyMTAzMTM2NzEsMzMzNjU3MTg5MSwzNTg0NTI4NzExLDExMzkyNjk5MywzMzgyNDE4OTUsNjY2MzA3MjA1LDc3MzUyOTkxMiwxMjk0NzU3MzcyLDEzOTYxODIyOTEsMTY5NTE4MzcwMCwxOTg2NjYxMDUxLDIxNzcwMjYzNTAsMjQ1Njk1NjAzNywyNzMwNDg1OTIxLDI4MjAzMDI0MTEsMzI1OTczMDgwMCwzMzQ1NzY0NzcxLDM1MTYwNjU4MTcsMzYwMDM1MjgwNCw0MDk0NTcxOTA5LDI3NTQyMzM0NCw0MzAyMjc3MzQsNTA2OTQ4NjE2LDY1OTA2MDU1Niw4ODM5OTc4NzcsOTU4MTM5NTcxLDEzMjI4MjIyMTgsMTUzNzAwMjA2MywxNzQ3ODczNzc5LDE5NTU1NjIyMjIsMjAyNDEwNDgxNSwyMjI3NzMwNDUyLDIzNjE4NTI0MjQsMjQyODQzNjQ3NCwyNzU2NzM0MTg3LDMyMDQwMzE0NzksMzMyOTMyNTI5OF0pO2Z1bmN0aW9uIG4oZSxuLHIsaSxvKXtmb3IodmFyIHMsYSxjLHUsbCxkLGgsZixwLGcsdix5LG07bz49NjQ7KXtmb3Iocz1uWzBdLGE9blsxXSxjPW5bMl0sdT1uWzNdLGw9bls0XSxkPW5bNV0saD1uWzZdLGY9bls3XSxnPTA7ZzwxNjtnKyspdj1pKzQqZyxlW2ddPSgyNTUmclt2XSk8PDI0fCgyNTUmclt2KzFdKTw8MTZ8KDI1NSZyW3YrMl0pPDw4fDI1NSZyW3YrM107Zm9yKGc9MTY7Zzw2NDtnKyspeT0oKHA9ZVtnLTJdKT4+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+Pj4wJjI1NSxvLnJlc2V0KCksby51cGRhdGUodCksby51cGRhdGUoYSksby5maW5pc2godSk7Zm9yKHZhciBmPTA7ZjxzO2YrKyljW2ZdPXVbZl07Zm9yKGY9MjtmPD1uO2YrKyl7by5yZXNldCgpLG8udXBkYXRlKHUpLmZpbmlzaCh1KTtmb3IodmFyIHA9MDtwPHM7cCsrKWNbcF1ePXVbcF19Zm9yKGY9MDtmPHMmJmQqcytmPHI7ZisrKWxbZCpzK2ZdPWNbZl19Zm9yKGQ9MDtkPHM7ZCsrKWNbZF09dVtkXT0wO2ZvcihkPTA7ZDw0O2QrKylhW2RdPTA7cmV0dXJuIG8uY2xlYW4oKSxsfWUuaGtkZj11LGUucGJrZGYyPWx9KHIpO3ZhciBpPXIuZGVmYXVsdDtmb3IodmFyIG8gaW4gcilpW29dPXJbb107ZS5leHBvcnRzPWl9KCl9KFluKTt2YXIgR249VChZbi5leHBvcnRzKSxYbj1jcnlwdG87Y29uc3QgWm49ZT0+ZSBpbnN0YW5jZW9mIENyeXB0b0tleSxRbj1uZXcgVGV4dEVuY29kZXIsZXI9bmV3IFRleHREZWNvZGVyO2NvbnN0IHRyPWU9PntsZXQgdD1lO3QgaW5zdGFuY2VvZiBVaW50OEFycmF5JiYodD1lci5kZWNvZGUodCkpLHQ9dC5yZXBsYWNlKC8tL2csIisiKS5yZXBsYWNlKC9fL2csIi8iKS5yZXBsYWNlKC9ccy9nLCIiKTt0cnl7cmV0dXJuKGU9Pntjb25zdCB0PWF0b2IoZSksbj1uZXcgVWludDhBcnJheSh0Lmxlbmd0aCk7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspbltlXT10LmNoYXJDb2RlQXQoZSk7cmV0dXJuIG59KSh0KX1jYXRjaChlKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgaW5wdXQgdG8gYmUgZGVjb2RlZCBpcyBub3QgY29ycmVjdGx5IGVuY29kZWQuIil9fTtjbGFzcyBuciBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGUpe3ZhciB0O3N1cGVyKGUpLHRoaXMuY29kZT0iRVJSX0pPU0VfR0VORVJJQyIsdGhpcy5uYW1lPXRoaXMuY29uc3RydWN0b3IubmFtZSxudWxsPT09KHQ9RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpfHx2b2lkIDA9PT10fHx0LmNhbGwoRXJyb3IsdGhpcyx0aGlzLmNvbnN0cnVjdG9yKX1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pPU0VfR0VORVJJQyJ9fWNsYXNzIHJyIGV4dGVuZHMgbnJ7Y29uc3RydWN0b3IoZSx0PSJ1bnNwZWNpZmllZCIsbj0idW5zcGVjaWZpZWQiKXtzdXBlcihlKSx0aGlzLmNvZGU9IkVSUl9KV1RfQ0xBSU1fVkFMSURBVElPTl9GQUlMRUQiLHRoaXMuY2xhaW09dCx0aGlzLnJlYXNvbj1ufXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldUX0NMQUlNX1ZBTElEQVRJT05fRkFJTEVEIn19Y2xhc3MgaXIgZXh0ZW5kcyBucntjb25zdHJ1Y3RvcihlLHQ9InVuc3BlY2lmaWVkIixuPSJ1bnNwZWNpZmllZCIpe3N1cGVyKGUpLHRoaXMuY29kZT0iRVJSX0pXVF9FWFBJUkVEIix0aGlzLmNsYWltPXQsdGhpcy5yZWFzb249bn1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pXVF9FWFBJUkVEIn19Y2xhc3Mgb3IgZXh0ZW5kcyBucntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSk9TRV9BTEdfTk9UX0FMTE9XRUQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSk9TRV9BTEdfTk9UX0FMTE9XRUQifX1jbGFzcyBzciBleHRlbmRzIG5ye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KT1NFX05PVF9TVVBQT1JURUQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSk9TRV9OT1RfU1VQUE9SVEVEIn19Y2xhc3MgYXIgZXh0ZW5kcyBucntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSldTX0lOVkFMSUQifXN0YXRpYyBnZXQgY29kZSgpe3JldHVybiJFUlJfSldTX0lOVkFMSUQifX1jbGFzcyBjciBleHRlbmRzIG5ye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KV1RfSU5WQUxJRCJ9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KV1RfSU5WQUxJRCJ9fWNsYXNzIHVyIGV4dGVuZHMgbnJ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pXS1NfSU5WQUxJRCJ9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KV0tTX0lOVkFMSUQifX1jbGFzcyBsciBleHRlbmRzIG5ye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KV0tTX05PX01BVENISU5HX0tFWSIsdGhpcy5tZXNzYWdlPSJubyBhcHBsaWNhYmxlIGtleSBmb3VuZCBpbiB0aGUgSlNPTiBXZWIgS2V5IFNldCJ9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KV0tTX05PX01BVENISU5HX0tFWSJ9fWNsYXNzIGRyIGV4dGVuZHMgbnJ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pXS1NfTVVMVElQTEVfTUFUQ0hJTkdfS0VZUyIsdGhpcy5tZXNzYWdlPSJtdWx0aXBsZSBtYXRjaGluZyBrZXlzIGZvdW5kIGluIHRoZSBKU09OIFdlYiBLZXkgU2V0In1zdGF0aWMgZ2V0IGNvZGUoKXtyZXR1cm4iRVJSX0pXS1NfTVVMVElQTEVfTUFUQ0hJTkdfS0VZUyJ9fWNsYXNzIGhyIGV4dGVuZHMgbnJ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pXU19TSUdOQVRVUkVfVkVSSUZJQ0FUSU9OX0ZBSUxFRCIsdGhpcy5tZXNzYWdlPSJzaWduYXR1cmUgdmVyaWZpY2F0aW9uIGZhaWxlZCJ9c3RhdGljIGdldCBjb2RlKCl7cmV0dXJuIkVSUl9KV1NfU0lHTkFUVVJFX1ZFUklGSUNBVElPTl9GQUlMRUQifX1mdW5jdGlvbiBmcigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBXZWJTb2NrZXRQYWlyfWZ1bmN0aW9uIHByKCl7dHJ5e3JldHVybiB2b2lkIDAhPT12ZS52ZXJzaW9ucy5ub2RlfWNhdGNoKGUpe3JldHVybiExfX1mdW5jdGlvbiBncihlLHQ9ImFsZ29yaXRobS5uYW1lIil7cmV0dXJuIG5ldyBUeXBlRXJyb3IoYENyeXB0b0tleSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgb3BlcmF0aW9uLCBpdHMgJHt0fSBtdXN0IGJlICR7ZX1gKX1mdW5jdGlvbiB2cihlLHQpe3JldHVybiBlLm5hbWU9PT10fWZ1bmN0aW9uIHlyKGUpe3JldHVybiBwYXJzZUludChlLm5hbWUuc2xpY2UoNCksMTApfWZ1bmN0aW9uIG1yKGUsdCwuLi5uKXtzd2l0Y2godCl7Y2FzZSJIUzI1NiI6Y2FzZSJIUzM4NCI6Y2FzZSJIUzUxMiI6e2lmKCF2cihlLmFsZ29yaXRobSwiSE1BQyIpKXRocm93IGdyKCJITUFDIik7Y29uc3Qgbj1wYXJzZUludCh0LnNsaWNlKDIpLDEwKTtpZih5cihlLmFsZ29yaXRobS5oYXNoKSE9PW4pdGhyb3cgZ3IoYFNIQS0ke259YCwiYWxnb3JpdGhtLmhhc2giKTticmVha31jYXNlIlJTMjU2IjpjYXNlIlJTMzg0IjpjYXNlIlJTNTEyIjp7aWYoIXZyKGUuYWxnb3JpdGhtLCJSU0FTU0EtUEtDUzEtdjFfNSIpKXRocm93IGdyKCJSU0FTU0EtUEtDUzEtdjFfNSIpO2NvbnN0IG49cGFyc2VJbnQodC5zbGljZSgyKSwxMCk7aWYoeXIoZS5hbGdvcml0aG0uaGFzaCkhPT1uKXRocm93IGdyKGBTSEEtJHtufWAsImFsZ29yaXRobS5oYXNoIik7YnJlYWt9Y2FzZSJQUzI1NiI6Y2FzZSJQUzM4NCI6Y2FzZSJQUzUxMiI6e2lmKCF2cihlLmFsZ29yaXRobSwiUlNBLVBTUyIpKXRocm93IGdyKCJSU0EtUFNTIik7Y29uc3Qgbj1wYXJzZUludCh0LnNsaWNlKDIpLDEwKTtpZih5cihlLmFsZ29yaXRobS5oYXNoKSE9PW4pdGhyb3cgZ3IoYFNIQS0ke259YCwiYWxnb3JpdGhtLmhhc2giKTticmVha31jYXNlIHByKCkmJiJFZERTQSI6aWYoIk5PREUtRUQyNTUxOSIhPT1lLmFsZ29yaXRobS5uYW1lJiYiTk9ERS1FRDQ0OCIhPT1lLmFsZ29yaXRobS5uYW1lKXRocm93IGdyKCJOT0RFLUVEMjU1MTkgb3IgTk9ERS1FRDQ0OCIpO2JyZWFrO2Nhc2UgZnIoKSYmIkVkRFNBIjppZighdnIoZS5hbGdvcml0aG0sIk5PREUtRUQyNTUxOSIpKXRocm93IGdyKCJOT0RFLUVEMjU1MTkiKTticmVhaztjYXNlIkVTMjU2IjpjYXNlIkVTMzg0IjpjYXNlIkVTNTEyIjp7aWYoIXZyKGUuYWxnb3JpdGhtLCJFQ0RTQSIpKXRocm93IGdyKCJFQ0RTQSIpO2NvbnN0IG49ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UiRVMyNTYiOnJldHVybiJQLTI1NiI7Y2FzZSJFUzM4NCI6cmV0dXJuIlAtMzg0IjtjYXNlIkVTNTEyIjpyZXR1cm4iUC01MjEiO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bnJlYWNoYWJsZSIpfX0odCk7aWYoZS5hbGdvcml0aG0ubmFtZWRDdXJ2ZSE9PW4pdGhyb3cgZ3IobiwiYWxnb3JpdGhtLm5hbWVkQ3VydmUiKTticmVha31kZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoIkNyeXB0b0tleSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgb3BlcmF0aW9uIil9IWZ1bmN0aW9uKGUsdCl7aWYodC5sZW5ndGgmJiF0LnNvbWUoKHQ9PmUudXNhZ2VzLmluY2x1ZGVzKHQpKSkpe2xldCBlPSJDcnlwdG9LZXkgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIG9wZXJhdGlvbiwgaXRzIHVzYWdlcyBtdXN0IGluY2x1ZGUgIjtpZih0Lmxlbmd0aD4yKXtjb25zdCBuPXQucG9wKCk7ZSs9YG9uZSBvZiAke3Quam9pbigiLCAiKX0sIG9yICR7bn0uYH1lbHNlIDI9PT10Lmxlbmd0aD9lKz1gb25lIG9mICR7dFswXX0gb3IgJHt0WzFdfS5gOmUrPWAke3RbMF19LmA7dGhyb3cgbmV3IFR5cGVFcnJvcihlKX19KGUsbil9dmFyIHdyPShlLC4uLnQpPT57bGV0IG49IktleSBtdXN0IGJlICI7aWYodC5sZW5ndGg+Mil7Y29uc3QgZT10LnBvcCgpO24rPWBvbmUgb2YgdHlwZSAke3Quam9pbigiLCAiKX0sIG9yICR7ZX0uYH1lbHNlIDI9PT10Lmxlbmd0aD9uKz1gb25lIG9mIHR5cGUgJHt0WzBdfSBvciAke3RbMV19LmA6bis9YG9mIHR5cGUgJHt0WzBdfS5gO3JldHVybiBudWxsPT1lP24rPWAgUmVjZWl2ZWQgJHtlfWA6ImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUubmFtZT9uKz1gIFJlY2VpdmVkIGZ1bmN0aW9uICR7ZS5uYW1lfWA6Im9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT1lJiZlLmNvbnN0cnVjdG9yJiZlLmNvbnN0cnVjdG9yLm5hbWUmJihuKz1gIFJlY2VpdmVkIGFuIGluc3RhbmNlIG9mICR7ZS5jb25zdHJ1Y3Rvci5uYW1lfWApLG59LF9yPWU9PlpuKGUpO2NvbnN0IFNyPVsiQ3J5cHRvS2V5Il07ZnVuY3Rpb24gYnIoZSl7aWYoIm9iamVjdCIhPXR5cGVvZih0PWUpfHxudWxsPT09dHx8IltvYmplY3QgT2JqZWN0XSIhPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkpcmV0dXJuITE7dmFyIHQ7aWYobnVsbD09PU9iamVjdC5nZXRQcm90b3R5cGVPZihlKSlyZXR1cm4hMDtsZXQgbj1lO2Zvcig7bnVsbCE9PU9iamVjdC5nZXRQcm90b3R5cGVPZihuKTspbj1PYmplY3QuZ2V0UHJvdG90eXBlT2Yobik7cmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihlKT09PW59Y29uc3Qga3I9YXN5bmMgZT0+e3ZhciB0LG47Y29uc3R7YWxnb3JpdGhtOnIsa2V5VXNhZ2VzOml9PWZ1bmN0aW9uKGUpe2xldCB0LG47c3dpdGNoKGUua3R5KXtjYXNlIm9jdCI6c3dpdGNoKGUuYWxnKXtjYXNlIkhTMjU2IjpjYXNlIkhTMzg0IjpjYXNlIkhTNTEyIjp0PXtuYW1lOiJITUFDIixoYXNoOmBTSEEtJHtlLmFsZy5zbGljZSgtMyl9YH0sbj1bInNpZ24iLCJ2ZXJpZnkiXTticmVhaztjYXNlIkExMjhDQkMtSFMyNTYiOmNhc2UiQTE5MkNCQy1IUzM4NCI6Y2FzZSJBMjU2Q0JDLUhTNTEyIjp0aHJvdyBuZXcgc3IoYCR7ZS5hbGd9IGtleXMgY2Fubm90IGJlIGltcG9ydGVkIGFzIENyeXB0b0tleSBpbnN0YW5jZXNgKTtjYXNlIkExMjhHQ00iOmNhc2UiQTE5MkdDTSI6Y2FzZSJBMjU2R0NNIjpjYXNlIkExMjhHQ01LVyI6Y2FzZSJBMTkyR0NNS1ciOmNhc2UiQTI1NkdDTUtXIjp0PXtuYW1lOiJBRVMtR0NNIn0sbj1bImVuY3J5cHQiLCJkZWNyeXB0Il07YnJlYWs7Y2FzZSJBMTI4S1ciOmNhc2UiQTE5MktXIjpjYXNlIkEyNTZLVyI6dD17bmFtZToiQUVTLUtXIn0sbj1bIndyYXBLZXkiLCJ1bndyYXBLZXkiXTticmVhaztjYXNlIlBCRVMyLUhTMjU2K0ExMjhLVyI6Y2FzZSJQQkVTMi1IUzM4NCtBMTkyS1ciOmNhc2UiUEJFUzItSFM1MTIrQTI1NktXIjp0PXtuYW1lOiJQQktERjIifSxuPVsiZGVyaXZlQml0cyJdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IHNyKCdJbnZhbGlkIG9yIHVuc3VwcG9ydGVkIEpXSyAiYWxnIiAoQWxnb3JpdGhtKSBQYXJhbWV0ZXIgdmFsdWUnKX1icmVhaztjYXNlIlJTQSI6c3dpdGNoKGUuYWxnKXtjYXNlIlBTMjU2IjpjYXNlIlBTMzg0IjpjYXNlIlBTNTEyIjp0PXtuYW1lOiJSU0EtUFNTIixoYXNoOmBTSEEtJHtlLmFsZy5zbGljZSgtMyl9YH0sbj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztjYXNlIlJTMjU2IjpjYXNlIlJTMzg0IjpjYXNlIlJTNTEyIjp0PXtuYW1lOiJSU0FTU0EtUEtDUzEtdjFfNSIsaGFzaDpgU0hBLSR7ZS5hbGcuc2xpY2UoLTMpfWB9LG49ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7Y2FzZSJSU0EtT0FFUCI6Y2FzZSJSU0EtT0FFUC0yNTYiOmNhc2UiUlNBLU9BRVAtMzg0IjpjYXNlIlJTQS1PQUVQLTUxMiI6dD17bmFtZToiUlNBLU9BRVAiLGhhc2g6YFNIQS0ke3BhcnNlSW50KGUuYWxnLnNsaWNlKC0zKSwxMCl8fDF9YH0sbj1lLmQ/WyJkZWNyeXB0IiwidW53cmFwS2V5Il06WyJlbmNyeXB0Iiwid3JhcEtleSJdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IHNyKCdJbnZhbGlkIG9yIHVuc3VwcG9ydGVkIEpXSyAiYWxnIiAoQWxnb3JpdGhtKSBQYXJhbWV0ZXIgdmFsdWUnKX1icmVhaztjYXNlIkVDIjpzd2l0Y2goZS5hbGcpe2Nhc2UiRVMyNTYiOnQ9e25hbWU6IkVDRFNBIixuYW1lZEN1cnZlOiJQLTI1NiJ9LG49ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7Y2FzZSJFUzM4NCI6dD17bmFtZToiRUNEU0EiLG5hbWVkQ3VydmU6IlAtMzg0In0sbj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztjYXNlIkVTNTEyIjp0PXtuYW1lOiJFQ0RTQSIsbmFtZWRDdXJ2ZToiUC01MjEifSxuPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2Nhc2UiRUNESC1FUyI6Y2FzZSJFQ0RILUVTK0ExMjhLVyI6Y2FzZSJFQ0RILUVTK0ExOTJLVyI6Y2FzZSJFQ0RILUVTK0EyNTZLVyI6dD17bmFtZToiRUNESCIsbmFtZWRDdXJ2ZTplLmNydn0sbj1lLmQ/WyJkZXJpdmVCaXRzIl06W107YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgc3IoJ0ludmFsaWQgb3IgdW5zdXBwb3J0ZWQgSldLICJhbGciIChBbGdvcml0aG0pIFBhcmFtZXRlciB2YWx1ZScpfWJyZWFrO2Nhc2UoZnIoKXx8cHIoKSkmJiJPS1AiOmlmKCJFZERTQSIhPT1lLmFsZyl0aHJvdyBuZXcgc3IoJ0ludmFsaWQgb3IgdW5zdXBwb3J0ZWQgSldLICJhbGciIChBbGdvcml0aG0pIFBhcmFtZXRlciB2YWx1ZScpO3N3aXRjaChlLmNydil7Y2FzZSJFZDI1NTE5Ijp0PXtuYW1lOiJOT0RFLUVEMjU1MTkiLG5hbWVkQ3VydmU6Ik5PREUtRUQyNTUxOSJ9LG49ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7Y2FzZSBwcigpJiYiRWQ0NDgiOnQ9e25hbWU6Ik5PREUtRUQ0NDgiLG5hbWVkQ3VydmU6Ik5PREUtRUQ0NDgifSxuPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IHNyKCdJbnZhbGlkIG9yIHVuc3VwcG9ydGVkIEpXSyAiY3J2IiAoU3VidHlwZSBvZiBLZXkgUGFpcikgUGFyYW1ldGVyIHZhbHVlJyl9YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgc3IoJ0ludmFsaWQgb3IgdW5zdXBwb3J0ZWQgSldLICJrdHkiIChLZXkgVHlwZSkgUGFyYW1ldGVyIHZhbHVlJyl9cmV0dXJue2FsZ29yaXRobTp0LGtleVVzYWdlczpufX0oZSksbz1bcixudWxsIT09KHQ9ZS5leHQpJiZ2b2lkIDAhPT10JiZ0LG51bGwhPT0obj1lLmtleV9vcHMpJiZ2b2lkIDAhPT1uP246aV07aWYoIlBCS0RGMiI9PT1yLm5hbWUpcmV0dXJuIFhuLnN1YnRsZS5pbXBvcnRLZXkoInJhdyIsdHIoZS5rKSwuLi5vKTtjb25zdCBzPXsuLi5lfTtyZXR1cm4gZGVsZXRlIHMuYWxnLFhuLnN1YnRsZS5pbXBvcnRLZXkoImp3ayIscywuLi5vKX07Y29uc3QgRXI9KGUsdCxuKT0+e2Uuc3RhcnRzV2l0aCgiSFMiKXx8ImRpciI9PT1lfHxlLnN0YXJ0c1dpdGgoIlBCRVMyIil8fC9eQVxkezN9KD86R0NNKT9LVyQvLnRlc3QoZSk/KGU9PntpZighKGUgaW5zdGFuY2VvZiBVaW50OEFycmF5KSl7aWYoIV9yKGUpKXRocm93IG5ldyBUeXBlRXJyb3Iod3IoZSwuLi5TciwiVWludDhBcnJheSIpKTtpZigic2VjcmV0IiE9PWUudHlwZSl0aHJvdyBuZXcgVHlwZUVycm9yKGAke1NyLmpvaW4oIiBvciAiKX0gaW5zdGFuY2VzIGZvciBzeW1tZXRyaWMgYWxnb3JpdGhtcyBtdXN0IGJlIG9mIHR5cGUgInNlY3JldCJgKX19KSh0KTooKGUsdCk9PntpZighX3IoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcih3cihlLC4uLlNyKSk7aWYoInNlY3JldCI9PT1lLnR5cGUpdGhyb3cgbmV3IFR5cGVFcnJvcihgJHtTci5qb2luKCIgb3IgIil9IGluc3RhbmNlcyBmb3IgYXN5bW1ldHJpYyBhbGdvcml0aG1zIG11c3Qgbm90IGJlIG9mIHR5cGUgInNlY3JldCJgKTtpZigic2lnbiI9PT10JiYicHVibGljIj09PWUudHlwZSl0aHJvdyBuZXcgVHlwZUVycm9yKGAke1NyLmpvaW4oIiBvciAiKX0gaW5zdGFuY2VzIGZvciBhc3ltbWV0cmljIGFsZ29yaXRobSBzaWduaW5nIG11c3QgYmUgb2YgdHlwZSAicHJpdmF0ZSJgKTtpZigiZGVjcnlwdCI9PT10JiYicHVibGljIj09PWUudHlwZSl0aHJvdyBuZXcgVHlwZUVycm9yKGAke1NyLmpvaW4oIiBvciAiKX0gaW5zdGFuY2VzIGZvciBhc3ltbWV0cmljIGFsZ29yaXRobSBkZWNyeXB0aW9uIG11c3QgYmUgb2YgdHlwZSAicHJpdmF0ZSJgKTtpZihlLmFsZ29yaXRobSYmInZlcmlmeSI9PT10JiYicHJpdmF0ZSI9PT1lLnR5cGUpdGhyb3cgbmV3IFR5cGVFcnJvcihgJHtTci5qb2luKCIgb3IgIil9IGluc3RhbmNlcyBmb3IgYXN5bW1ldHJpYyBhbGdvcml0aG0gdmVyaWZ5aW5nIG11c3QgYmUgb2YgdHlwZSAicHVibGljImApO2lmKGUuYWxnb3JpdGhtJiYiZW5jcnlwdCI9PT10JiYicHJpdmF0ZSI9PT1lLnR5cGUpdGhyb3cgbmV3IFR5cGVFcnJvcihgJHtTci5qb2luKCIgb3IgIil9IGluc3RhbmNlcyBmb3IgYXN5bW1ldHJpYyBhbGdvcml0aG0gZW5jcnlwdGlvbiBtdXN0IGJlIG9mIHR5cGUgInB1YmxpYyJgKX0pKHQsbil9O2NvbnN0IFRyPWFzeW5jKGUsdCxuLHIpPT57Y29uc3QgaT1hd2FpdCBmdW5jdGlvbihlLHQsbil7aWYoWm4odCkpcmV0dXJuIG1yKHQsZSxuKSx0O2lmKHQgaW5zdGFuY2VvZiBVaW50OEFycmF5KXtpZighZS5zdGFydHNXaXRoKCJIUyIpKXRocm93IG5ldyBUeXBlRXJyb3Iod3IodCwuLi5TcikpO3JldHVybiBYbi5zdWJ0bGUuaW1wb3J0S2V5KCJyYXciLHQse2hhc2g6YFNIQS0ke2Uuc2xpY2UoLTMpfWAsbmFtZToiSE1BQyJ9LCExLFtuXSl9dGhyb3cgbmV3IFR5cGVFcnJvcih3cih0LC4uLlNyLCJVaW50OEFycmF5IikpfShlLHQsInZlcmlmeSIpOygoZSx0KT0+e2lmKGUuc3RhcnRzV2l0aCgiUlMiKXx8ZS5zdGFydHNXaXRoKCJQUyIpKXtjb25zdHttb2R1bHVzTGVuZ3RoOm59PXQuYWxnb3JpdGhtO2lmKCJudW1iZXIiIT10eXBlb2Ygbnx8bjwyMDQ4KXRocm93IG5ldyBUeXBlRXJyb3IoYCR7ZX0gcmVxdWlyZXMga2V5IG1vZHVsdXNMZW5ndGggdG8gYmUgMjA0OCBiaXRzIG9yIGxhcmdlcmApfX0pKGUsaSk7Y29uc3Qgbz1mdW5jdGlvbihlLHQpe2NvbnN0IG49YFNIQS0ke2Uuc2xpY2UoLTMpfWA7c3dpdGNoKGUpe2Nhc2UiSFMyNTYiOmNhc2UiSFMzODQiOmNhc2UiSFM1MTIiOnJldHVybntoYXNoOm4sbmFtZToiSE1BQyJ9O2Nhc2UiUFMyNTYiOmNhc2UiUFMzODQiOmNhc2UiUFM1MTIiOnJldHVybntoYXNoOm4sbmFtZToiUlNBLVBTUyIsc2FsdExlbmd0aDplLnNsaWNlKC0zKT4+M307Y2FzZSJSUzI1NiI6Y2FzZSJSUzM4NCI6Y2FzZSJSUzUxMiI6cmV0dXJue2hhc2g6bixuYW1lOiJSU0FTU0EtUEtDUzEtdjFfNSJ9O2Nhc2UiRVMyNTYiOmNhc2UiRVMzODQiOmNhc2UiRVM1MTIiOnJldHVybntoYXNoOm4sbmFtZToiRUNEU0EiLG5hbWVkQ3VydmU6dC5uYW1lZEN1cnZlfTtjYXNlKGZyKCl8fHByKCkpJiYiRWREU0EiOmNvbnN0e25hbWVkQ3VydmU6cn09dDtyZXR1cm57bmFtZTpyLG5hbWVkQ3VydmU6cn07ZGVmYXVsdDp0aHJvdyBuZXcgc3IoYGFsZyAke2V9IGlzIG5vdCBzdXBwb3J0ZWQgZWl0aGVyIGJ5IEpPU0Ugb3IgeW91ciBqYXZhc2NyaXB0IHJ1bnRpbWVgKX19KGUsaS5hbGdvcml0aG0pO3RyeXtyZXR1cm4gYXdhaXQgWG4uc3VidGxlLnZlcmlmeShvLGksbixyKX1jYXRjaChlKXtyZXR1cm4hMX19O2FzeW5jIGZ1bmN0aW9uIEFyKGUsdCxuKXt2YXIgcjtpZighYnIoZSkpdGhyb3cgbmV3IGFyKCJGbGF0dGVuZWQgSldTIG11c3QgYmUgYW4gb2JqZWN0Iik7aWYodm9pZCAwPT09ZS5wcm90ZWN0ZWQmJnZvaWQgMD09PWUuaGVhZGVyKXRocm93IG5ldyBhcignRmxhdHRlbmVkIEpXUyBtdXN0IGhhdmUgZWl0aGVyIG9mIHRoZSAicHJvdGVjdGVkIiBvciAiaGVhZGVyIiBtZW1iZXJzJyk7aWYodm9pZCAwIT09ZS5wcm90ZWN0ZWQmJiJzdHJpbmciIT10eXBlb2YgZS5wcm90ZWN0ZWQpdGhyb3cgbmV3IGFyKCJKV1MgUHJvdGVjdGVkIEhlYWRlciBpbmNvcnJlY3QgdHlwZSIpO2lmKHZvaWQgMD09PWUucGF5bG9hZCl0aHJvdyBuZXcgYXIoIkpXUyBQYXlsb2FkIG1pc3NpbmciKTtpZigic3RyaW5nIiE9dHlwZW9mIGUuc2lnbmF0dXJlKXRocm93IG5ldyBhcigiSldTIFNpZ25hdHVyZSBtaXNzaW5nIG9yIGluY29ycmVjdCB0eXBlIik7aWYodm9pZCAwIT09ZS5oZWFkZXImJiFicihlLmhlYWRlcikpdGhyb3cgbmV3IGFyKCJKV1MgVW5wcm90ZWN0ZWQgSGVhZGVyIGluY29ycmVjdCB0eXBlIik7bGV0IGk9e307aWYoZS5wcm90ZWN0ZWQpe2NvbnN0IHQ9dHIoZS5wcm90ZWN0ZWQpO3RyeXtpPUpTT04ucGFyc2UoZXIuZGVjb2RlKHQpKX1jYXRjaChlKXt0aHJvdyBuZXcgYXIoIkpXUyBQcm90ZWN0ZWQgSGVhZGVyIGlzIGludmFsaWQiKX19aWYoISgoLi4uZSk9Pntjb25zdCB0PWUuZmlsdGVyKEJvb2xlYW4pO2lmKDA9PT10Lmxlbmd0aHx8MT09PXQubGVuZ3RoKXJldHVybiEwO2xldCBuO2Zvcihjb25zdCBlIG9mIHQpe2NvbnN0IHQ9T2JqZWN0LmtleXMoZSk7aWYobiYmMCE9PW4uc2l6ZSlmb3IoY29uc3QgZSBvZiB0KXtpZihuLmhhcyhlKSlyZXR1cm4hMTtuLmFkZChlKX1lbHNlIG49bmV3IFNldCh0KX1yZXR1cm4hMH0pKGksZS5oZWFkZXIpKXRocm93IG5ldyBhcigiSldTIFByb3RlY3RlZCBhbmQgSldTIFVucHJvdGVjdGVkIEhlYWRlciBQYXJhbWV0ZXIgbmFtZXMgbXVzdCBiZSBkaXNqb2ludCIpO2NvbnN0IG89ey4uLmksLi4uZS5oZWFkZXJ9LHM9ZnVuY3Rpb24oZSx0LG4scixpKXtpZih2b2lkIDAhPT1pLmNyaXQmJnZvaWQgMD09PXIuY3JpdCl0aHJvdyBuZXcgZSgnImNyaXQiIChDcml0aWNhbCkgSGVhZGVyIFBhcmFtZXRlciBNVVNUIGJlIGludGVncml0eSBwcm90ZWN0ZWQnKTtpZighcnx8dm9pZCAwPT09ci5jcml0KXJldHVybiBuZXcgU2V0O2lmKCFBcnJheS5pc0FycmF5KHIuY3JpdCl8fDA9PT1yLmNyaXQubGVuZ3RofHxyLmNyaXQuc29tZSgoZT0+InN0cmluZyIhPXR5cGVvZiBlfHwwPT09ZS5sZW5ndGgpKSl0aHJvdyBuZXcgZSgnImNyaXQiIChDcml0aWNhbCkgSGVhZGVyIFBhcmFtZXRlciBNVVNUIGJlIGFuIGFycmF5IG9mIG5vbi1lbXB0eSBzdHJpbmdzIHdoZW4gcHJlc2VudCcpO2xldCBvO289dm9pZCAwIT09bj9uZXcgTWFwKFsuLi5PYmplY3QuZW50cmllcyhuKSwuLi50LmVudHJpZXMoKV0pOnQ7Zm9yKGNvbnN0IHQgb2Ygci5jcml0KXtpZighby5oYXModCkpdGhyb3cgbmV3IHNyKGBFeHRlbnNpb24gSGVhZGVyIFBhcmFtZXRlciAiJHt0fSIgaXMgbm90IHJlY29nbml6ZWRgKTtpZih2b2lkIDA9PT1pW3RdKXRocm93IG5ldyBlKGBFeHRlbnNpb24gSGVhZGVyIFBhcmFtZXRlciAiJHt0fSIgaXMgbWlzc2luZ2ApO2lmKG8uZ2V0KHQpJiZ2b2lkIDA9PT1yW3RdKXRocm93IG5ldyBlKGBFeHRlbnNpb24gSGVhZGVyIFBhcmFtZXRlciAiJHt0fSIgTVVTVCBiZSBpbnRlZ3JpdHkgcHJvdGVjdGVkYCl9cmV0dXJuIG5ldyBTZXQoci5jcml0KX0oYXIsbmV3IE1hcChbWyJiNjQiLCEwXV0pLG51bGw9PW4/dm9pZCAwOm4uY3JpdCxpLG8pO2xldCBhPSEwO2lmKHMuaGFzKCJiNjQiKSYmKGE9aS5iNjQsImJvb2xlYW4iIT10eXBlb2YgYSkpdGhyb3cgbmV3IGFyKCdUaGUgImI2NCIgKGJhc2U2NHVybC1lbmNvZGUgcGF5bG9hZCkgSGVhZGVyIFBhcmFtZXRlciBtdXN0IGJlIGEgYm9vbGVhbicpO2NvbnN0e2FsZzpjfT1vO2lmKCJzdHJpbmciIT10eXBlb2YgY3x8IWMpdGhyb3cgbmV3IGFyKCdKV1MgImFsZyIgKEFsZ29yaXRobSkgSGVhZGVyIFBhcmFtZXRlciBtaXNzaW5nIG9yIGludmFsaWQnKTtjb25zdCB1PW4mJigoZSx0KT0+e2lmKHZvaWQgMCE9PXQmJighQXJyYXkuaXNBcnJheSh0KXx8dC5zb21lKChlPT4ic3RyaW5nIiE9dHlwZW9mIGUpKSkpdGhyb3cgbmV3IFR5cGVFcnJvcihgIiR7ZX0iIG9wdGlvbiBtdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ3NgKTtpZih0KXJldHVybiBuZXcgU2V0KHQpfSkoImFsZ29yaXRobXMiLG4uYWxnb3JpdGhtcyk7aWYodSYmIXUuaGFzKGMpKXRocm93IG5ldyBvcignImFsZyIgKEFsZ29yaXRobSkgSGVhZGVyIFBhcmFtZXRlciBub3QgYWxsb3dlZCcpO2lmKGEpe2lmKCJzdHJpbmciIT10eXBlb2YgZS5wYXlsb2FkKXRocm93IG5ldyBhcigiSldTIFBheWxvYWQgbXVzdCBiZSBhIHN0cmluZyIpfWVsc2UgaWYoInN0cmluZyIhPXR5cGVvZiBlLnBheWxvYWQmJiEoZS5wYXlsb2FkIGluc3RhbmNlb2YgVWludDhBcnJheSkpdGhyb3cgbmV3IGFyKCJKV1MgUGF5bG9hZCBtdXN0IGJlIGEgc3RyaW5nIG9yIGFuIFVpbnQ4QXJyYXkgaW5zdGFuY2UiKTtsZXQgbD0hMTsiZnVuY3Rpb24iPT10eXBlb2YgdCYmKHQ9YXdhaXQgdChpLGUpLGw9ITApLEVyKGMsdCwidmVyaWZ5Iik7Y29uc3QgZD1mdW5jdGlvbiguLi5lKXtjb25zdCB0PWUucmVkdWNlKCgoZSx7bGVuZ3RoOnR9KT0+ZSt0KSwwKSxuPW5ldyBVaW50OEFycmF5KHQpO2xldCByPTA7cmV0dXJuIGUuZm9yRWFjaCgoZT0+e24uc2V0KGUscikscis9ZS5sZW5ndGh9KSksbn0oUW4uZW5jb2RlKG51bGwhPT0ocj1lLnByb3RlY3RlZCkmJnZvaWQgMCE9PXI/cjoiIiksUW4uZW5jb2RlKCIuIiksInN0cmluZyI9PXR5cGVvZiBlLnBheWxvYWQ/UW4uZW5jb2RlKGUucGF5bG9hZCk6ZS5wYXlsb2FkKSxoPXRyKGUuc2lnbmF0dXJlKTtpZighYXdhaXQgVHIoYyx0LGgsZCkpdGhyb3cgbmV3IGhyO2xldCBmO2Y9YT90cihlLnBheWxvYWQpOiJzdHJpbmciPT10eXBlb2YgZS5wYXlsb2FkP1FuLmVuY29kZShlLnBheWxvYWQpOmUucGF5bG9hZDtjb25zdCBwPXtwYXlsb2FkOmZ9O3JldHVybiB2b2lkIDAhPT1lLnByb3RlY3RlZCYmKHAucHJvdGVjdGVkSGVhZGVyPWkpLHZvaWQgMCE9PWUuaGVhZGVyJiYocC51bnByb3RlY3RlZEhlYWRlcj1lLmhlYWRlciksbD97Li4ucCxrZXk6dH06cH1jb25zdCBScj04NjQwMCxDcj0vXihcZCt8XGQrXC5cZCspID8oc2Vjb25kcz98c2Vjcz98c3xtaW51dGVzP3xtaW5zP3xtfGhvdXJzP3xocnM/fGh8ZGF5cz98ZHx3ZWVrcz98d3x5ZWFycz98eXJzP3x5KSQvaTt2YXIgRHI9ZT0+e2NvbnN0IHQ9Q3IuZXhlYyhlKTtpZighdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIHRpbWUgcGVyaW9kIGZvcm1hdCIpO2NvbnN0IG49cGFyc2VGbG9hdCh0WzFdKTtzd2l0Y2godFsyXS50b0xvd2VyQ2FzZSgpKXtjYXNlInNlYyI6Y2FzZSJzZWNzIjpjYXNlInNlY29uZCI6Y2FzZSJzZWNvbmRzIjpjYXNlInMiOnJldHVybiBNYXRoLnJvdW5kKG4pO2Nhc2UibWludXRlIjpjYXNlIm1pbnV0ZXMiOmNhc2UibWluIjpjYXNlIm1pbnMiOmNhc2UibSI6cmV0dXJuIE1hdGgucm91bmQoNjAqbik7Y2FzZSJob3VyIjpjYXNlImhvdXJzIjpjYXNlImhyIjpjYXNlImhycyI6Y2FzZSJoIjpyZXR1cm4gTWF0aC5yb3VuZCgzNjAwKm4pO2Nhc2UiZGF5IjpjYXNlImRheXMiOmNhc2UiZCI6cmV0dXJuIE1hdGgucm91bmQobipScik7Y2FzZSJ3ZWVrIjpjYXNlIndlZWtzIjpjYXNlInciOnJldHVybiBNYXRoLnJvdW5kKDYwNDgwMCpuKTtkZWZhdWx0OnJldHVybiBNYXRoLnJvdW5kKDMxNTU3NjAwKm4pfX07Y29uc3QgUHI9ZT0+ZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL15hcHBsaWNhdGlvblwvLywiIik7dmFyIElyPShlLHQsbj17fSk9Pntjb25zdHt0eXA6cn09bjtpZihyJiYoInN0cmluZyIhPXR5cGVvZiBlLnR5cHx8UHIoZS50eXApIT09UHIocikpKXRocm93IG5ldyBycigndW5leHBlY3RlZCAidHlwIiBKV1QgaGVhZGVyIHZhbHVlJywidHlwIiwiY2hlY2tfZmFpbGVkIik7bGV0IGk7dHJ5e2k9SlNPTi5wYXJzZShlci5kZWNvZGUodCkpfWNhdGNoKGUpe31pZighYnIoaSkpdGhyb3cgbmV3IGNyKCJKV1QgQ2xhaW1zIFNldCBtdXN0IGJlIGEgdG9wLWxldmVsIEpTT04gb2JqZWN0Iik7Y29uc3R7aXNzdWVyOm99PW47aWYobyYmIShBcnJheS5pc0FycmF5KG8pP286W29dKS5pbmNsdWRlcyhpLmlzcykpdGhyb3cgbmV3IHJyKCd1bmV4cGVjdGVkICJpc3MiIGNsYWltIHZhbHVlJywiaXNzIiwiY2hlY2tfZmFpbGVkIik7Y29uc3R7c3ViamVjdDpzfT1uO2lmKHMmJmkuc3ViIT09cyl0aHJvdyBuZXcgcnIoJ3VuZXhwZWN0ZWQgInN1YiIgY2xhaW0gdmFsdWUnLCJzdWIiLCJjaGVja19mYWlsZWQiKTtjb25zdHthdWRpZW5jZTphfT1uO2lmKGEmJihjPWkuYXVkLHU9InN0cmluZyI9PXR5cGVvZiBhP1thXTphLCEoInN0cmluZyI9PXR5cGVvZiBjP3UuaW5jbHVkZXMoYyk6QXJyYXkuaXNBcnJheShjKSYmdS5zb21lKFNldC5wcm90b3R5cGUuaGFzLmJpbmQobmV3IFNldChjKSkpKSkpdGhyb3cgbmV3IHJyKCd1bmV4cGVjdGVkICJhdWQiIGNsYWltIHZhbHVlJywiYXVkIiwiY2hlY2tfZmFpbGVkIik7dmFyIGMsdTtsZXQgbDtzd2l0Y2godHlwZW9mIG4uY2xvY2tUb2xlcmFuY2Upe2Nhc2Uic3RyaW5nIjpsPURyKG4uY2xvY2tUb2xlcmFuY2UpO2JyZWFrO2Nhc2UibnVtYmVyIjpsPW4uY2xvY2tUb2xlcmFuY2U7YnJlYWs7Y2FzZSJ1bmRlZmluZWQiOmw9MDticmVhaztkZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgY2xvY2tUb2xlcmFuY2Ugb3B0aW9uIHR5cGUiKX1jb25zdHtjdXJyZW50RGF0ZTpkfT1uLGg9KGY9ZHx8bmV3IERhdGUsTWF0aC5mbG9vcihmLmdldFRpbWUoKS8xZTMpKTt2YXIgZjtpZigodm9pZCAwIT09aS5pYXR8fG4ubWF4VG9rZW5BZ2UpJiYibnVtYmVyIiE9dHlwZW9mIGkuaWF0KXRocm93IG5ldyBycignImlhdCIgY2xhaW0gbXVzdCBiZSBhIG51bWJlcicsImlhdCIsImludmFsaWQiKTtpZih2b2lkIDAhPT1pLm5iZil7aWYoIm51bWJlciIhPXR5cGVvZiBpLm5iZil0aHJvdyBuZXcgcnIoJyJuYmYiIGNsYWltIG11c3QgYmUgYSBudW1iZXInLCJuYmYiLCJpbnZhbGlkIik7aWYoaS5uYmY+aCtsKXRocm93IG5ldyBycignIm5iZiIgY2xhaW0gdGltZXN0YW1wIGNoZWNrIGZhaWxlZCcsIm5iZiIsImNoZWNrX2ZhaWxlZCIpfWlmKHZvaWQgMCE9PWkuZXhwKXtpZigibnVtYmVyIiE9dHlwZW9mIGkuZXhwKXRocm93IG5ldyBycignImV4cCIgY2xhaW0gbXVzdCBiZSBhIG51bWJlcicsImV4cCIsImludmFsaWQiKTtpZihpLmV4cDw9aC1sKXRocm93IG5ldyBpcignImV4cCIgY2xhaW0gdGltZXN0YW1wIGNoZWNrIGZhaWxlZCcsImV4cCIsImNoZWNrX2ZhaWxlZCIpfWlmKG4ubWF4VG9rZW5BZ2Upe2NvbnN0IGU9aC1pLmlhdDtpZihlLWw+KCJudW1iZXIiPT10eXBlb2Ygbi5tYXhUb2tlbkFnZT9uLm1heFRva2VuQWdlOkRyKG4ubWF4VG9rZW5BZ2UpKSl0aHJvdyBuZXcgaXIoJyJpYXQiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQgKHRvbyBmYXIgaW4gdGhlIHBhc3QpJywiaWF0IiwiY2hlY2tfZmFpbGVkIik7aWYoZTwwLWwpdGhyb3cgbmV3IHJyKCciaWF0IiBjbGFpbSB0aW1lc3RhbXAgY2hlY2sgZmFpbGVkIChpdCBzaG91bGQgYmUgaW4gdGhlIHBhc3QpJywiaWF0IiwiY2hlY2tfZmFpbGVkIil9cmV0dXJuIGl9O2FzeW5jIGZ1bmN0aW9uIE9yKGUsdCxuKXt2YXIgcjtjb25zdCBpPWF3YWl0IGFzeW5jIGZ1bmN0aW9uKGUsdCxuKXtpZihlIGluc3RhbmNlb2YgVWludDhBcnJheSYmKGU9ZXIuZGVjb2RlKGUpKSwic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IGFyKCJDb21wYWN0IEpXUyBtdXN0IGJlIGEgc3RyaW5nIG9yIFVpbnQ4QXJyYXkiKTtjb25zdHswOnIsMTppLDI6byxsZW5ndGg6c309ZS5zcGxpdCgiLiIpO2lmKDMhPT1zKXRocm93IG5ldyBhcigiSW52YWxpZCBDb21wYWN0IEpXUyIpO2NvbnN0IGE9YXdhaXQgQXIoe3BheWxvYWQ6aSxwcm90ZWN0ZWQ6cixzaWduYXR1cmU6b30sdCxuKSxjPXtwYXlsb2FkOmEucGF5bG9hZCxwcm90ZWN0ZWRIZWFkZXI6YS5wcm90ZWN0ZWRIZWFkZXJ9O3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P3suLi5jLGtleTphLmtleX06Y30oZSx0LG4pO2lmKChudWxsPT09KHI9aS5wcm90ZWN0ZWRIZWFkZXIuY3JpdCl8fHZvaWQgMD09PXI/dm9pZCAwOnIuaW5jbHVkZXMoImI2NCIpKSYmITE9PT1pLnByb3RlY3RlZEhlYWRlci5iNjQpdGhyb3cgbmV3IGNyKCJKV1RzIE1VU1QgTk9UIHVzZSB1bmVuY29kZWQgcGF5bG9hZCIpO2NvbnN0IG89e3BheWxvYWQ6SXIoaS5wcm90ZWN0ZWRIZWFkZXIsaS5wYXlsb2FkLG4pLHByb3RlY3RlZEhlYWRlcjppLnByb3RlY3RlZEhlYWRlcn07cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/ey4uLm8sa2V5Omkua2V5fTpvfWZ1bmN0aW9uIFVyKGUpe3JldHVybiBicihlKX1jbGFzcyBMcntjb25zdHJ1Y3RvcihlKXtpZih0aGlzLl9jYWNoZWQ9bmV3IFdlYWtNYXAsIWZ1bmN0aW9uKGUpe3JldHVybiBlJiYib2JqZWN0Ij09dHlwZW9mIGUmJkFycmF5LmlzQXJyYXkoZS5rZXlzKSYmZS5rZXlzLmV2ZXJ5KFVyKX0oZSkpdGhyb3cgbmV3IHVyKCJKU09OIFdlYiBLZXkgU2V0IG1hbGZvcm1lZCIpO3ZhciB0O3RoaXMuX2p3a3M9KHQ9ZSwiZnVuY3Rpb24iPT10eXBlb2Ygc3RydWN0dXJlZENsb25lP3N0cnVjdHVyZWRDbG9uZSh0KTpKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQpKSl9YXN5bmMgZ2V0S2V5KGUsdCl7Y29uc3R7YWxnOm4sa2lkOnJ9PXsuLi5lLC4uLnQuaGVhZGVyfSxpPWZ1bmN0aW9uKGUpe3N3aXRjaCgic3RyaW5nIj09dHlwZW9mIGUmJmUuc2xpY2UoMCwyKSl7Y2FzZSJSUyI6Y2FzZSJQUyI6cmV0dXJuIlJTQSI7Y2FzZSJFUyI6cmV0dXJuIkVDIjtjYXNlIkVkIjpyZXR1cm4iT0tQIjtkZWZhdWx0OnRocm93IG5ldyBzcignVW5zdXBwb3J0ZWQgImFsZyIgdmFsdWUgZm9yIGEgSlNPTiBXZWIgS2V5IFNldCcpfX0obiksbz10aGlzLl9qd2tzLmtleXMuZmlsdGVyKChlPT57bGV0IHQ9aT09PWUua3R5O2lmKHQmJiJzdHJpbmciPT10eXBlb2YgciYmKHQ9cj09PWUua2lkKSx0JiYic3RyaW5nIj09dHlwZW9mIGUuYWxnJiYodD1uPT09ZS5hbGcpLHQmJiJzdHJpbmciPT10eXBlb2YgZS51c2UmJih0PSJzaWciPT09ZS51c2UpLHQmJkFycmF5LmlzQXJyYXkoZS5rZXlfb3BzKSYmKHQ9ZS5rZXlfb3BzLmluY2x1ZGVzKCJ2ZXJpZnkiKSksdCYmIkVkRFNBIj09PW4mJih0PSJFZDI1NTE5Ij09PWUuY3J2fHwiRWQ0NDgiPT09ZS5jcnYpLHQpc3dpdGNoKG4pe2Nhc2UiRVMyNTYiOnQ9IlAtMjU2Ij09PWUuY3J2O2JyZWFrO2Nhc2UiRVMyNTZLIjp0PSJzZWNwMjU2azEiPT09ZS5jcnY7YnJlYWs7Y2FzZSJFUzM4NCI6dD0iUC0zODQiPT09ZS5jcnY7YnJlYWs7Y2FzZSJFUzUxMiI6dD0iUC01MjEiPT09ZS5jcnZ9cmV0dXJuIHR9KSksezA6cyxsZW5ndGg6YX09bztpZigwPT09YSl0aHJvdyBuZXcgbHI7aWYoMSE9PWEpdGhyb3cgbmV3IGRyO2NvbnN0IGM9dGhpcy5fY2FjaGVkLmdldChzKXx8dGhpcy5fY2FjaGVkLnNldChzLHt9KS5nZXQocyk7aWYodm9pZCAwPT09Y1tuXSl7Y29uc3QgZT1hd2FpdCBhc3luYyBmdW5jdGlvbihlLHQsbil7aWYoIWJyKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkpXSyBtdXN0IGJlIGFuIG9iamVjdCIpO2lmKHR8fCh0PWUuYWxnKSwic3RyaW5nIiE9dHlwZW9mIHR8fCF0KXRocm93IG5ldyBUeXBlRXJyb3IoJyJhbGciIGFyZ3VtZW50IGlzIHJlcXVpcmVkIHdoZW4gImp3ay5hbGciIGlzIG5vdCBwcmVzZW50Jyk7c3dpdGNoKGUua3R5KXtjYXNlIm9jdCI6aWYoInN0cmluZyIhPXR5cGVvZiBlLmt8fCFlLmspdGhyb3cgbmV3IFR5cGVFcnJvcignbWlzc2luZyAiayIgKEtleSBWYWx1ZSkgUGFyYW1ldGVyIHZhbHVlJyk7cmV0dXJuIG51bGwhPW58fChuPSEwIT09ZS5leHQpLG4/a3Ioey4uLmUsYWxnOnQsZXh0OiExfSk6dHIoZS5rKTtjYXNlIlJTQSI6aWYodm9pZCAwIT09ZS5vdGgpdGhyb3cgbmV3IHNyKCdSU0EgSldLICJvdGgiIChPdGhlciBQcmltZXMgSW5mbykgUGFyYW1ldGVyIHZhbHVlIGlzIG5vdCBzdXBwb3J0ZWQnKTtjYXNlIkVDIjpjYXNlIk9LUCI6cmV0dXJuIGtyKHsuLi5lLGFsZzp0fSk7ZGVmYXVsdDp0aHJvdyBuZXcgc3IoJ1Vuc3VwcG9ydGVkICJrdHkiIChLZXkgVHlwZSkgUGFyYW1ldGVyIHZhbHVlJyl9fSh7Li4ucyxleHQ6ITB9LG4pO2lmKGUgaW5zdGFuY2VvZiBVaW50OEFycmF5fHwicHVibGljIiE9PWUudHlwZSl0aHJvdyBuZXcgdXIoIkpTT04gV2ViIEtleSBTZXQgbWVtYmVycyBtdXN0IGJlIHB1YmxpYyBrZXlzIik7Y1tuXT1lfXJldHVybiBjW25dfX12YXIgSHI9e2V4cG9ydHM6e319LE1yPXtleHBvcnRzOnt9fSxOcj1BKHFuKTsKLyohIHNhZmUtYnVmZmVyLiBNSVQgTGljZW5zZS4gRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnL29wZW5zb3VyY2U+ICovCiFmdW5jdGlvbihlLHQpe3ZhciBuPU5yLHI9bi5CdWZmZXI7ZnVuY3Rpb24gaShlLHQpe2Zvcih2YXIgbiBpbiBlKXRbbl09ZVtuXX1mdW5jdGlvbiBvKGUsdCxuKXtyZXR1cm4gcihlLHQsbil9ci5mcm9tJiZyLmFsbG9jJiZyLmFsbG9jVW5zYWZlJiZyLmFsbG9jVW5zYWZlU2xvdz9lLmV4cG9ydHM9bjooaShuLHQpLHQuQnVmZmVyPW8pLG8ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoci5wcm90b3R5cGUpLGkocixvKSxvLmZyb209ZnVuY3Rpb24oZSx0LG4pe2lmKCJudW1iZXIiPT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlciIpO3JldHVybiByKGUsdCxuKX0sby5hbGxvYz1mdW5jdGlvbihlLHQsbil7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTt2YXIgaT1yKGUpO3JldHVybiB2b2lkIDAhPT10PyJzdHJpbmciPT10eXBlb2Ygbj9pLmZpbGwodCxuKTppLmZpbGwodCk6aS5maWxsKDApLGl9LG8uYWxsb2NVbnNhZmU9ZnVuY3Rpb24oZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gcihlKX0sby5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24oZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gbi5TbG93QnVmZmVyKGUpfX0oTXIsTXIuZXhwb3J0cyk7dmFyIHFyPTY1NTM2LGpyPTQyOTQ5NjcyOTU7dmFyIHhyPU1yLmV4cG9ydHMuQnVmZmVyLEtyPUUuY3J5cHRvfHxFLm1zQ3J5cHRvO0tyJiZLci5nZXRSYW5kb21WYWx1ZXM/SHIuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKGU+anIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoInJlcXVlc3RlZCB0b28gbWFueSByYW5kb20gYnl0ZXMiKTt2YXIgbj14ci5hbGxvY1Vuc2FmZShlKTtpZihlPjApaWYoZT5xcilmb3IodmFyIHI9MDtyPGU7cis9cXIpS3IuZ2V0UmFuZG9tVmFsdWVzKG4uc2xpY2UocixyK3FyKSk7ZWxzZSBLci5nZXRSYW5kb21WYWx1ZXMobik7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQpcmV0dXJuIHZlLm5leHRUaWNrKChmdW5jdGlvbigpe3QobnVsbCxuKX0pKTtyZXR1cm4gbn06SHIuZXhwb3J0cz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiU2VjdXJlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnJvd3Nlci5cblVzZSBDaHJvbWUsIEZpcmVmb3ggb3IgSW50ZXJuZXQgRXhwbG9yZXIgMTEiKX07dmFyIEpyPUhyLmV4cG9ydHM7Y2xhc3MgQnJ7YmFzZTY0VVJMRW5jb2RlKGUpe3JldHVybiBWbi5lbmNvZGUoZSkucmVwbGFjZSgvXCsvZywiLSIpLnJlcGxhY2UoL1wvL2csIl8iKS5yZXBsYWNlKC89L2csIiIpfWJhc2U2NFVSTERlY29kZShlKXtyZXR1cm4gVm4uZGVjb2RlKGUpLnRvU3RyaW5nKCl9aGFzaFNoYTI1NihlKXtyZXR1cm4gWnQuZnJvbShHbigobmV3IFRleHRFbmNvZGVyKS5lbmNvZGUoZSkpKX1nZW5lcmF0ZVJhbmRvbUJ5dGVzKGUpe3JldHVybiBKcihlKX12ZXJpZnlKd3QoZSx0LG4scixpLG8scyl7cmV0dXJuIE9yKGUsKGE9e2tleXM6W3RdfSxMci5wcm90b3R5cGUuZ2V0S2V5LmJpbmQobmV3IExyKGEpKSkse2FsZ29yaXRobXM6bixhdWRpZW5jZTpyLGNsb2NrVG9sZXJhbmNlOnMsaXNzdWVyOmksc3ViamVjdDpvfSkudGhlbigoKCk9PlByb21pc2UucmVzb2x2ZSghMCkpKTt2YXIgYX19b3JpZ2luLHkuU2Vzc2lvblN0b3JhZ2U7Y2xhc3MgRnJ7Y29uc3RydWN0b3IoZSl7dGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQ9ZSx0aGlzLl9kYXRhTGF5ZXI9dGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0RGF0YUxheWVyKCl9cmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSgpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoKTtpZih0LnJlZnJlc2hfdG9rZW4pe2NvbnN0IG49cGFyc2VJbnQodC5leHBpcmVzX2luKSxyPXNldFRpbWVvdXQoKCgpPT5lKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQucmVmcmVzaEFjY2Vzc1Rva2VuKCl9KSkpLDFlMyoobjw9MTA/bjpuLTEwKSk7eWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoaSxKU09OLnN0cmluZ2lmeShyKSl9fSkpfWNsZWFyUmVmcmVzaFRva2VuVGltZW91dCgpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7aWYoeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoaSkpe2NvbnN0IGU9SlNPTi5wYXJzZSh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihpKSk7Y2xlYXJUaW1lb3V0KGUpfX0pKX19Y2xhc3MgV3J7Y29uc3RydWN0b3IoZSx0KXt0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudD1lLHRoaXMuX2RhdGFMYXllcj10aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXREYXRhTGF5ZXIoKSx0aGlzLl9zcGFIZWxwZXI9dH1hdHRhY2hUb2tlbih0KXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe09iamVjdC5hc3NpZ24oe2F0dGFjaFRva2VuOiEwfSx0KS5hdHRhY2hUb2tlbiYmKHQuaGVhZGVycz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5oZWFkZXJzKSx7QXV0aG9yaXphdGlvbjpgQmVhcmVyICR7eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0QWNjZXNzVG9rZW4oKX1gfSkpfSkpfXNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjayhlLHQpeyhudWxsPT1lP3ZvaWQgMDplLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjaykmJmUuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrKHQpfXNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKGUsdCl7KG51bGw9PWU/dm9pZCAwOmUuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2spJiZlLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKHQpfXNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2soZSx0KXsobnVsbD09ZT92b2lkIDA6ZS5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKSYmZS5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKHQpfWVuYWJsZUh0dHBIYW5kbGVyKGUpeyhudWxsPT1lP3ZvaWQgMDplLmVuYWJsZUhhbmRsZXIpJiZlLmVuYWJsZUhhbmRsZXIoKX1kaXNhYmxlSHR0cEhhbmRsZXIoZSl7KG51bGw9PWU/dm9pZCAwOmUuZGlzYWJsZUhhbmRsZXIpJiZlLmRpc2FibGVIYW5kbGVyKCl9aW5pdGlhbGl6ZVNlc3Npb25NYW5nZXIoZSx0LG4scixpKXt2YXIgbyxzLGE7aS5pbml0aWFsaXplKGUuY2xpZW50SUQsbnVsbCE9PShvPXQuY2hlY2tTZXNzaW9uSWZyYW1lKSYmdm9pZCAwIT09bz9vOiIiLG4sbnVsbCE9PShzPWUuY2hlY2tTZXNzaW9uSW50ZXJ2YWwpJiZ2b2lkIDAhPT1zP3M6MyxudWxsIT09KGE9ZS5zZXNzaW9uUmVmcmVzaEludGVydmFsKSYmdm9pZCAwIT09YT9hOjMwMCxlLnNpZ25JblJlZGlyZWN0VVJMLHIpfXJlcXVlc3RDdXN0b21HcmFudCh0LG4pe3ZhciByLGksbztyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2xldCBzPSEwLGE9ITE7aWYobnVsbD09dD92b2lkIDA6dC50b2tlbkVuZHBvaW50KXtzPSExO2Zvcihjb25zdCBlIG9mWy4uLm51bGwhPT0oaT1udWxsPT09KHI9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldENvbmZpZ0RhdGEoKSl8fHZvaWQgMD09PXI/dm9pZCAwOnIucmVzb3VyY2VTZXJ2ZXJVUkxzKSYmdm9pZCAwIT09aT9pOltdLHQuYmFzZVVybF0paWYoZSYmKG51bGw9PT0obz10LnRva2VuRW5kcG9pbnQpfHx2b2lkIDA9PT1vP3ZvaWQgMDpvLnN0YXJ0c1dpdGgoZSkpKXthPSEwO2JyZWFrfX1yZXR1cm4gdC5zaG91bGRSZXBsYXlBZnRlclJlZnJlc2gmJnRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGIsSlNPTi5zdHJpbmdpZnkodCkpLHN8fGE/dGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQucmVxdWVzdEN1c3RvbUdyYW50KHQpLnRoZW4oKHI9PmUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gbiYmImZ1bmN0aW9uIj09dHlwZW9mIG4mJm4odCksdC5yZXR1cm5zU2Vzc2lvbj8odGhpcy5fc3BhSGVscGVyLnJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkoKSx0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXRCYXNpY1VzZXJJbmZvKCkpOnJ9KSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QoZSkpKTpQcm9taXNlLnJlamVjdChuZXcgYygiU1BBLU1BSU5fVEhSRUFEX0NMSUVOVC1SQ0ctSVYwMSIsIlJlcXVlc3QgdG8gdGhlIHByb3ZpZGVkIGVuZHBvaW50IGlzIHByb2hpYml0ZWQuIiwiUmVxdWVzdHMgY2FuIG9ubHkgYmUgc2VudCB0byByZXNvdXJjZSBzZXJ2ZXJzIHNwZWNpZmllZCBieSB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AgYXR0cmlidXRlIHdoaWxlIGluaXRpYWxpemluZyB0aGUgU0RLLiBUaGUgc3BlY2lmaWVkIHRva2VuIGVuZHBvaW50IGluIHRoaXMgcmVxdWVzdCBjYW5ub3QgYmUgZm91bmQgYW1vbmcgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIikpfSkpfWdldEN1c3RvbUdyYW50Q29uZmlnRGF0YSgpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihiKTtyZXR1cm4gZT9KU09OLnBhcnNlKGUpOm51bGx9KSl9cmVmcmVzaEFjY2Vzc1Rva2VuKHQpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dHJ5e3lpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LnJlZnJlc2hBY2Nlc3NUb2tlbigpO2NvbnN0IGU9eWllbGQgdGhpcy5nZXRDdXN0b21HcmFudENvbmZpZ0RhdGEoKTtyZXR1cm4gZSYmKHlpZWxkIHRoaXMucmVxdWVzdEN1c3RvbUdyYW50KGUsdCkpLHRoaXMuX3NwYUhlbHBlci5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KCksdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0QmFzaWNVc2VySW5mbygpfWNhdGNoKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX19KSl9aHR0cFJlcXVlc3QodCxuLHIsaSxvLHMpe3ZhciBhLHU7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtsZXQgbD0hMTtjb25zdCBkPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRDb25maWdEYXRhKCk7Zm9yKGNvbnN0IGUgb2ZbLi4ubnVsbCE9PShhPXlpZWxkIG51bGw9PWQ/dm9pZCAwOmQucmVzb3VyY2VTZXJ2ZXJVUkxzKSYmdm9pZCAwIT09YT9hOltdLGQuYmFzZVVybF0paWYoZSYmKG51bGw9PT0odT1udWxsPT1uP3ZvaWQgMDpuLnVybCl8fHZvaWQgMD09PXU/dm9pZCAwOnUuc3RhcnRzV2l0aChlKSkpe2w9ITA7YnJlYWt9cmV0dXJuIGw/dC5yZXF1ZXN0KG4pLnRoZW4oKGU9PlByb21pc2UucmVzb2x2ZShlKSkpLmNhdGNoKChhPT5lKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIGUsdSxsO2lmKDQwMT09PShudWxsPT09KGU9bnVsbD09YT92b2lkIDA6YS5yZXNwb25zZSl8fHZvaWQgMD09PWU/dm9pZCAwOmUuc3RhdHVzKXx8IShudWxsPT1hP3ZvaWQgMDphLnJlc3BvbnNlKSl7bGV0IGU7dHJ5e2U9eWllbGQgdGhpcy5yZWZyZXNoQWNjZXNzVG9rZW4ocyl9Y2F0Y2goZSl7dGhyb3cgciYmKCJmdW5jdGlvbiI9PXR5cGVvZiBpJiYoeWllbGQgaShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sYSkse2NvZGU6a30pKSksImZ1bmN0aW9uIj09dHlwZW9mIG8mJm8oKSksbmV3IGMoIlNQQS1BVVRIX0hFTFBFUi1IUi1TRTAxIixudWxsIT09KHU9bnVsbD09ZT92b2lkIDA6ZS5uYW1lKSYmdm9pZCAwIT09dT91OiJSZWZyZXNoIHRva2VuIHJlcXVlc3QgZmFpbGVkLiIsbnVsbCE9PShsPW51bGw9PWU/dm9pZCAwOmUubWVzc2FnZSkmJnZvaWQgMCE9PWw/bDoiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIHJlZnJlc2ggdGhlIGFjY2VzcyB0b2tlbiBmb2xsb3dpbmcgYSA0MDEgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyLiIpfWlmKGUpdHJ5e2NvbnN0IGU9eWllbGQgdC5yZXF1ZXN0KG4pO3JldHVybiBQcm9taXNlLnJlc29sdmUoZSl9Y2F0Y2goZSl7cmV0dXJuIHImJigiZnVuY3Rpb24iPT10eXBlb2YgaSYmKHlpZWxkIGkoZSkpLCJmdW5jdGlvbiI9PXR5cGVvZiBvJiZvKCkpLFByb21pc2UucmVqZWN0KGUpfX1yZXR1cm4gciYmKCJmdW5jdGlvbiI9PXR5cGVvZiBpJiYoeWllbGQgaShhKSksImZ1bmN0aW9uIj09dHlwZW9mIG8mJm8oKSksUHJvbWlzZS5yZWplY3QoYSl9KSkpKTpQcm9taXNlLnJlamVjdChuZXcgYygiU1BBLUFVVEhfSEVMUEVSLUhSLUlWMDIiLCJSZXF1ZXN0IHRvIHRoZSBwcm92aWRlZCBlbmRwb2ludCBpcyBwcm9oaWJpdGVkLiIsIlJlcXVlc3RzIGNhbiBvbmx5IGJlIHNlbnQgdG8gcmVzb3VyY2Ugc2VydmVycyBzcGVjaWZpZWQgYnkgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIGF0dHJpYnV0ZSB3aGlsZSBpbml0aWFsaXppbmcgdGhlIFNESy4gVGhlIHNwZWNpZmllZCBlbmRwb2ludCBpbiB0aGlzIHJlcXVlc3QgY2Fubm90IGJlIGZvdW5kIGFtb25nIHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCIpKX0pKX1odHRwUmVxdWVzdEFsbCh0LG4scixpLG8pe3ZhciBzLGEsdTtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2xldCBsPSEwO2NvbnN0IGQ9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldENvbmZpZ0RhdGEoKTtmb3IoY29uc3QgZSBvZiB0KXtsZXQgdD0hMTtmb3IoY29uc3QgbiBvZlsuLi5udWxsIT09KGE9bnVsbD09PShzPXlpZWxkIGQpfHx2b2lkIDA9PT1zP3ZvaWQgMDpzLnJlc291cmNlU2VydmVyVVJMcykmJnZvaWQgMCE9PWE/YTpbXSxkLmJhc2VVcmxdKWlmKG4mJihudWxsPT09KHU9ZS51cmwpfHx2b2lkIDA9PT11P3ZvaWQgMDp1LnN0YXJ0c1dpdGgobikpKXt0PSEwO2JyZWFrfWlmKCF0KXtsPSExO2JyZWFrfX1jb25zdCBoPVtdO2lmKGwpcmV0dXJuIHQuZm9yRWFjaCgoZT0+e2gucHVzaChuLnJlcXVlc3QoZSkpfSkpLChudWxsPT1uP3ZvaWQgMDpuLmFsbCkmJm4uYWxsKGgpLnRoZW4oKGU9PlByb21pc2UucmVzb2x2ZShlKSkpLmNhdGNoKCh0PT5lKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIHMsYSx1O2lmKDQwMT09PShudWxsPT09KHM9bnVsbD09dD92b2lkIDA6dC5yZXNwb25zZSl8fHZvaWQgMD09PXM/dm9pZCAwOnMuc3RhdHVzKXx8IShudWxsPT10P3ZvaWQgMDp0LnJlc3BvbnNlKSl7bGV0IHM7dHJ5e3M9eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQucmVmcmVzaEFjY2Vzc1Rva2VuKCl9Y2F0Y2goZSl7dGhyb3cgciYmKCJmdW5jdGlvbiI9PXR5cGVvZiBpJiYoeWllbGQgaShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdCkse2NvZGU6a30pKSksImZ1bmN0aW9uIj09dHlwZW9mIG8mJm8oKSksbmV3IGMoIlNQQS1BVVRIX0hFTFBFUi1IUkEtU0UwMSIsbnVsbCE9PShhPW51bGw9PWU/dm9pZCAwOmUubmFtZSkmJnZvaWQgMCE9PWE/YToiUmVmcmVzaCB0b2tlbiByZXF1ZXN0IGZhaWxlZC4iLG51bGwhPT0odT1udWxsPT1lP3ZvaWQgMDplLm1lc3NhZ2UpJiZ2b2lkIDAhPT11P3U6IkFuIGVycm9yIG9jY3VycmVkIHdoaWxlIHRyeWluZyB0byByZWZyZXNoIHRoZSBhY2Nlc3MgdG9rZW4gZm9sbG93aW5nIGEgNDAxIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlci4iKX1pZihzKXJldHVybiBuLmFsbCYmbi5hbGwoaCkudGhlbigoZT0+UHJvbWlzZS5yZXNvbHZlKGUpKSkuY2F0Y2goKHQ9PmUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gciYmKCJmdW5jdGlvbiI9PXR5cGVvZiBpJiYoeWllbGQgaSh0KSksImZ1bmN0aW9uIj09dHlwZW9mIG8mJm8oKSksUHJvbWlzZS5yZWplY3QodCl9KSkpKX1yZXR1cm4gciYmKCJmdW5jdGlvbiI9PXR5cGVvZiBpJiYoeWllbGQgaSh0KSksImZ1bmN0aW9uIj09dHlwZW9mIG8mJm8oKSksUHJvbWlzZS5yZWplY3QodCl9KSkpKTt0aHJvdyBuZXcgYygiU1BBLUFVVEhfSEVMUEVSLUhSQS1JVjAyIiwiUmVxdWVzdCB0byB0aGUgcHJvdmlkZWQgZW5kcG9pbnQgaXMgcHJvaGliaXRlZC4iLCJSZXF1ZXN0cyBjYW4gb25seSBiZSBzZW50IHRvIHJlc291cmNlIHNlcnZlcnMgc3BlY2lmaWVkIGJ5IHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCBhdHRyaWJ1dGUgd2hpbGUgaW5pdGlhbGl6aW5nIHRoZSBTREsuIFRoZSBzcGVjaWZpZWQgZW5kcG9pbnQgaW4gdGhpcyByZXF1ZXN0IGNhbm5vdCBiZSBmb3VuZCBhbW9uZyB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AiKX0pKX1yZXF1ZXN0QWNjZXNzVG9rZW4odCxuLHIsaSxvKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHM9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldENvbmZpZ0RhdGEoKTtpZihzLnN0b3JhZ2U9PT15LkJyb3dzZXJNZW1vcnkmJnMuZW5hYmxlUEtDRSYmbil7Y29uc3QgZT1OdC5nZXRQS0NFKHUuZXh0cmFjdFBLQ0VLZXlGcm9tU3RhdGVQYXJhbShuKSk7eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuc2V0UEtDRUNvZGUodS5leHRyYWN0UEtDRUtleUZyb21TdGF0ZVBhcmFtKG4pLGUpfWVsc2Ugcy5zdG9yYWdlPT09eS5XZWJXb3JrZXImJmkmJih5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5zZXRQS0NFQ29kZShpLG51bGwhPW8/bzoiIikpO3JldHVybiB0P3RoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LnJlcXVlc3RBY2Nlc3NUb2tlbih0LG51bGwhPW4/bjoiIixudWxsIT1vP286IiIpLnRoZW4oKCgpPT5lKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHMuc3RvcmFnZSE9PXkuV2ViV29ya2VyPyhOdC5zZXRTaWduT3V0VVJMKHlpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldFNpZ25PdXRVUkwoKSksdGhpcy5fc3BhSGVscGVyJiYodGhpcy5fc3BhSGVscGVyLmNsZWFyUmVmcmVzaFRva2VuVGltZW91dCgpLHRoaXMuX3NwYUhlbHBlci5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KCkpLHImJiJmdW5jdGlvbiI9PXR5cGVvZiByJiZzLmVuYWJsZU9JRENTZXNzaW9uTWFuYWdlbWVudCYmcigpKTp0aGlzLl9zcGFIZWxwZXImJnRoaXMuX3NwYUhlbHBlci5yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KCksdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0QmFzaWNVc2VySW5mbygpfSkpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KGUpKSk6UHJvbWlzZS5yZWplY3QobmV3IGMoIlNQQS1BVVRIX0hFTFBFUi1SQVQxLU5GMDEiLCJObyBhdXRob3JpemF0aW9uIGNvZGUuIiwiTm8gYXV0aG9yaXphdGlvbiBjb2RlIHdhcyBmb3VuZC4iKSl9KSl9dHJ5U2lnbkluU2lsZW50bHkodCxuLHIpe3ZhciBpO3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7aWYoTnQuaXNJbml0aWFsaXplZFNpbGVudFNpZ25JbigpKXJldHVybiB5aWVsZCByLnJlY2VpdmVQcm9tcHROb25lUmVzcG9uc2UoKSxQcm9taXNlLnJlc29sdmUoe2FsbG93ZWRTY29wZXM6IiIsZGlzcGxheU5hbWU6IiIsZW1haWw6IiIsc2Vzc2lvblN0YXRlOiIiLHN1YjoiIix0ZW5hbnREb21haW46IiIsdXNlcm5hbWU6IiJ9KTtjb25zdCBvPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJycElGcmFtZSIpLHM9bnVsbD09PShpPW51bGw9PW8/dm9pZCAwOm8uY29udGVudERvY3VtZW50KXx8dm9pZCAwPT09aT92b2lkIDA6aS5nZXRFbGVtZW50QnlJZCgicHJvbXB0Tm9uZUlGcmFtZSIpO3RyeXtjb25zdCBlPXlpZWxkIHQoKTtzLnNyYz1lfWNhdGNoKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX1yZXR1cm4gbmV3IFByb21pc2UoKCh0LHIpPT57Y29uc3QgaT1zZXRUaW1lb3V0KCgoKT0+e3QoITEpfSksMWU0KSxvPXM9PmUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt2YXIgZSxhLGMsdTtjb25zdCBsPXMuZGF0YTsiY2hlY2tfc2Vzc2lvbl9zaWduZWRfb3V0Ij09KG51bGw9PWw/dm9pZCAwOmwudHlwZSkmJih3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsbyksY2xlYXJUaW1lb3V0KGkpLHQoITEpKSwiY2hlY2tfc2Vzc2lvbl9zaWduZWRfaW4iPT0obnVsbD09bD92b2lkIDA6bC50eXBlKSYmKG51bGw9PT0oZT1udWxsPT1sP3ZvaWQgMDpsLmRhdGEpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmNvZGUpJiZuKG51bGw9PT0oYT1udWxsPT1sP3ZvaWQgMDpsLmRhdGEpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmNvZGUsbnVsbD09PShjPW51bGw9PWw/dm9pZCAwOmwuZGF0YSl8fHZvaWQgMD09PWM/dm9pZCAwOmMuc2Vzc2lvblN0YXRlLG51bGw9PT0odT1udWxsPT1sP3ZvaWQgMDpsLmRhdGEpfHx2b2lkIDA9PT11P3ZvaWQgMDp1LnN0YXRlKS50aGVuKChlPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLG8pLHQoZSl9KSkuY2F0Y2goKGU9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsbykscihlKX0pKS5maW5hbGx5KCgoKT0+e2NsZWFyVGltZW91dChpKX0pKX0pKTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsbyl9KSl9KSl9aGFuZGxlU2lnbkluKHQsbixyKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldENvbmZpZ0RhdGEoKTtpZih5aWVsZCB0KCkpcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7YWxsb3dlZFNjb3BlczoiIixkaXNwbGF5TmFtZToiIixlbWFpbDoiIixzZXNzaW9uU3RhdGU6IiIsc3ViOiIiLHRlbmFudERvbWFpbjoiIix1c2VybmFtZToiIn0pO2lmKGUuc3RvcmFnZSE9PXkuV2ViV29ya2VyJiYoeWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuaXNBdXRoZW50aWNhdGVkKCkpKXJldHVybiB0aGlzLl9zcGFIZWxwZXIuY2xlYXJSZWZyZXNoVG9rZW5UaW1lb3V0KCksdGhpcy5fc3BhSGVscGVyLnJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkoKSxlLmVuYWJsZU9JRENTZXNzaW9uTWFuYWdlbWVudCYmbigpLFByb21pc2UucmVzb2x2ZSh5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXRCYXNpY1VzZXJJbmZvKCkpO2NvbnN0IGk9bmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZikuc2VhcmNoUGFyYW1zLmdldChfKSxvPW5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpLnNlYXJjaFBhcmFtcy5nZXQoUyk7aWYoaSl7Y29uc3QgZT1uZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTt0aHJvdyBlLnNlYXJjaFBhcmFtcy5kZWxldGUoXyksZS5zZWFyY2hQYXJhbXMuZGVsZXRlKFMpLGhpc3RvcnkucHVzaFN0YXRlKG51bGwsZG9jdW1lbnQudGl0bGUsZS50b1N0cmluZygpKSxuZXcgYygiU1BBLUFVVEhfSEVMUEVSLVNJLVNFMDEiLGksbnVsbCE9bz9vOiIiKX1pZihlLnN0b3JhZ2U9PT15LldlYldvcmtlciYmcil7Y29uc3QgZT15aWVsZCByKCk7aWYoZSlyZXR1cm4gZX19KSl9Z2V0QmFzaWNVc2VySW5mbygpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldEJhc2ljVXNlckluZm8oKX0pKX1nZXREZWNvZGVkSURUb2tlbigpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldERlY29kZWRJRFRva2VuKCl9KSl9Z2V0SURUb2tlbigpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldElEVG9rZW4oKX0pKX1nZXRPSURDU2VydmljZUVuZHBvaW50cygpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ2xpZW50LmdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCl9KSl9Z2V0QWNjZXNzVG9rZW4oKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXRBY2Nlc3NUb2tlbigpfSkpfWdldERhdGFMYXllcigpe3JldHVybiB0aGlzLl9kYXRhTGF5ZXJ9aXNBdXRoZW50aWNhdGVkKCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuaXNBdXRoZW50aWNhdGVkKCl9KSl9fSh0PT57Y29uc3Qgbj1zZWxmO2xldCByO24ub25tZXNzYWdlPSh7ZGF0YTpuLHBvcnRzOmF9KT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIHUsbCxkLGg7Y29uc3QgZj1hWzBdO2lmKG4udHlwZT09PXZ8fHIpc3dpdGNoKG4udHlwZSl7Y2FzZSB2OnRyeXtjb25zdCBhPU9iamVjdC5hc3NpZ24oe30sbi5kYXRhKTtyPXlpZWxkKCh0LG4pPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCByPW5ldyBIdCxpPW5ldyBCcixvPW5ldyBnKHIsaSk7eWllbGQgby5pbml0aWFsaXplKHQpO2NvbnN0IHM9bmV3IEZyKG8pLGE9bihvLHMpLGM9by5nZXREYXRhTGF5ZXIoKSx1PUx0LmdldEluc3RhbmNlKCk7cmV0dXJuKG51bGw9PXU/dm9pZCAwOnUuaW5pdCkmJih5aWVsZCB1LmluaXQoITAsYS5hdHRhY2hUb2tlbikpLHtkaXNhYmxlSHR0cEhhbmRsZXI6KCk9PnthLmRpc2FibGVIdHRwSGFuZGxlcih1KX0sZW5hYmxlSHR0cEhhbmRsZXI6KCk9PnthLmVuYWJsZUh0dHBIYW5kbGVyKHUpfSxnZXRBY2Nlc3NUb2tlbjooKT0+YS5nZXRBY2Nlc3NUb2tlbigpLGdldEF1dGhvcml6YXRpb25VUkw6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIG8uZ2V0QXV0aG9yaXphdGlvblVSTCh0KS50aGVuKCh0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt2YXIgZTtjb25zdCBuPW51bGwhPT0oZT1uZXcgVVJMKHQpLnNlYXJjaFBhcmFtcy5nZXQoInN0YXRlIikpJiZ2b2lkIDAhPT1lP2U6IiIscj15aWVsZCBvLmdldFBLQ0VDb2RlKG4pO3JldHVybnthdXRob3JpemF0aW9uVVJMOnQscGtjZTpyfX0pKSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChlKSkpfSkpLGdldEJhc2ljVXNlckluZm86KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBhLmdldEJhc2ljVXNlckluZm8oKX0pKSxnZXRDb25maWdEYXRhOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gYy5nZXRDb25maWdEYXRhKCl9KSksZ2V0RGVjb2RlZElEVG9rZW46KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBhLmdldERlY29kZWRJRFRva2VuKCl9KSksZ2V0SURUb2tlbjooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIGEuZ2V0SURUb2tlbigpfSkpLGdldE9JRENTZXJ2aWNlRW5kcG9pbnRzOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gYS5nZXRPSURDU2VydmljZUVuZHBvaW50cygpfSkpLGdldFNpZ25PdXRVUkw6KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCBvLmdldFNpZ25PdXRVUkwoKX0pKSxodHRwUmVxdWVzdDp0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgYS5odHRwUmVxdWVzdCh1LHQpfSkpLGh0dHBSZXF1ZXN0QWxsOnQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCBhLmh0dHBSZXF1ZXN0QWxsKHQsdSl9KSksaXNBdXRoZW50aWNhdGVkOigpPT5hLmlzQXV0aGVudGljYXRlZCgpLHJlZnJlc2hBY2Nlc3NUb2tlbjooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dHJ5e3JldHVybiB5aWVsZCBhLnJlZnJlc2hBY2Nlc3NUb2tlbigpfWNhdGNoKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX19KSkscmVxdWVzdEFjY2Vzc1Rva2VuOih0LG4scixpKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIGEucmVxdWVzdEFjY2Vzc1Rva2VuKHQsbix2b2lkIDAscixpKX0pKSxyZXF1ZXN0Q3VzdG9tR3JhbnQ6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIGEucmVxdWVzdEN1c3RvbUdyYW50KHQpfSkpLHJldm9rZUFjY2Vzc1Rva2VuOigpPT5vLnJldm9rZUFjY2Vzc1Rva2VuKCkudGhlbigoKCk9PihzLmNsZWFyUmVmcmVzaFRva2VuVGltZW91dCgpLFByb21pc2UucmVzb2x2ZSghMCkpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KGUpKSksc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjazplPT57KG51bGw9PXU/dm9pZCAwOnUuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjaykmJnUuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjayhlKX0sc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrOmU9PnthLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjayh1LGUpfSxzZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjazplPT57YS5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayh1LGUpfSxzZXRTZXNzaW9uU3RhdGU6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgYy5zZXRTZXNzaW9uRGF0YVBhcmFtZXRlcigic2Vzc2lvbl9zdGF0ZSIsdCl9KSksc2lnbk91dDooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHMuY2xlYXJSZWZyZXNoVG9rZW5UaW1lb3V0KCkseWllbGQgby5zaWduT3V0KCl9KSksc3RhcnRBdXRvUmVmcmVzaFRva2VuOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtzLmNsZWFyUmVmcmVzaFRva2VuVGltZW91dCgpLHMucmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSgpfSkpLHVwZGF0ZUNvbmZpZzp0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCBvLnVwZGF0ZUNvbmZpZyh0KX0pKX19KSkpKGEsdCksci5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKHMpLHIuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrKGkpLHIuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2sobyksZi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKCkpfWNhdGNoKGUpe2YucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXRfYXV0aF91cmwiOnIuZ2V0QXV0aG9yaXphdGlvblVSTChudWxsPT1uP3ZvaWQgMDpuLmRhdGEpLnRoZW4oKGU9PntmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX0pKTticmVhaztjYXNlInJlcXVlc3RfZ2V0X3Rva2VuIjpyLnJlcXVlc3RBY2Nlc3NUb2tlbihudWxsPT09KHU9bnVsbD09bj92b2lkIDA6bi5kYXRhKXx8dm9pZCAwPT09dT92b2lkIDA6dS5jb2RlLG51bGw9PT0obD1udWxsPT1uP3ZvaWQgMDpuLmRhdGEpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLnNlc3Npb25TdGF0ZSxudWxsPT09KGQ9bnVsbD09bj92b2lkIDA6bi5kYXRhKXx8dm9pZCAwPT09ZD92b2lkIDA6ZC5wa2NlLG51bGw9PT0oaD1udWxsPT1uP3ZvaWQgMDpuLmRhdGEpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLnN0YXRlKS50aGVuKChlPT57Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpKX0pKS5jYXRjaCgoZT0+e2YucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSk7YnJlYWs7Y2FzZSJodHRwLXJlcXVlc3QiOnIuaHR0cFJlcXVlc3Qobi5kYXRhKS50aGVuKChlPT57Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpKX0pKS5jYXRjaCgoZT0+e2YucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSk7YnJlYWs7Y2FzZSJodHRwLXJlcXVlc3QtYWxsIjpyLmh0dHBSZXF1ZXN0QWxsKG4uZGF0YSkudGhlbigoZT0+e2YucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9PntmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2Uic2lnbi1vdXQiOnRyeXtmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgci5zaWduT3V0KCkpKX1jYXRjaChlKXtmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UicmVxdWVzdC1jdXN0b20tZ3JhbnQiOnIucmVxdWVzdEN1c3RvbUdyYW50KG4uZGF0YSkudGhlbigoZT0+e2YucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9PntmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2UicmV2b2tlLWFjY2Vzcy10b2tlbiI6ci5yZXZva2VBY2Nlc3NUb2tlbigpLnRoZW4oKGU9PntmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX0pKTticmVhaztjYXNlImdldC1vaWRjLXNlcnZpY2UtZW5kcG9pbnRzIjp0cnl7Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIuZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKSkpfWNhdGNoKGUpe2YucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXQtYmFzaWMtdXNlci1pbmZvIjp0cnl7Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIuZ2V0QmFzaWNVc2VySW5mbygpKSl9Y2F0Y2goZSl7Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlImdldC1kZWNvZGVkLWlkLXRva2VuIjp0cnl7Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIuZ2V0RGVjb2RlZElEVG9rZW4oKSkpfWNhdGNoKGUpe2YucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXRfaWRfdG9rZW4iOnRyeXtmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgci5nZXRJRFRva2VuKCkpKX1jYXRjaChlKXtmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZW5hYmxlX2h0dHBfaGFuZGxlciI6ci5lbmFibGVIdHRwSGFuZGxlcigpLGYucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSgpKTticmVhaztjYXNlImRpc2FibGVfaHR0cF9oYW5kbGVyIjpyLmRpc2FibGVIdHRwSGFuZGxlcigpLGYucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSgpKTticmVhaztjYXNlImlzX2F1dGhlbnRpY2F0ZWQiOnRyeXtmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgci5pc0F1dGhlbnRpY2F0ZWQoKSkpfWNhdGNoKGUpe2YucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXRfc2lnbl9vdXRfdXJsIjp0cnl7Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIuZ2V0U2lnbk91dFVSTCgpKSl9Y2F0Y2goZSl7Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlInJlZnJlc2hfYWNjZXNzLXRva2VuIjp0cnl7Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIucmVmcmVzaEFjY2Vzc1Rva2VuKCkpKX1jYXRjaChlKXtmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2Uic3RhcnRfYXV0b19yZWZyZXNoX3Rva2VuIjp0cnl7Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHIuc3RhcnRBdXRvUmVmcmVzaFRva2VuKCkpKX1jYXRjaChlKXtmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2Uic2V0X3Nlc3Npb25fc3RhdGUiOnRyeXtmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgci5zZXRTZXNzaW9uU3RhdGUobnVsbD09bj92b2lkIDA6bi5kYXRhKSkpfWNhdGNoKGUpe2YucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJ1cGRhdGVfY29uZmlnIjp0cnl7Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIudXBkYXRlQ29uZmlnKG51bGw9PW4/dm9pZCAwOm4uZGF0YSkpKX1jYXRjaChlKXtmLnBvc3RNZXNzYWdlKE10LmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0X2NvbmZpZ19kYXRhIjp0cnl7Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIHIuZ2V0Q29uZmlnRGF0YSgpKSl9Y2F0Y2goZSl7Zi5wb3N0TWVzc2FnZShNdC5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztkZWZhdWx0Om51bGw9PWZ8fGYucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShuZXcgYygiU1BBLUNMSUVOVF9XT1JLRVItT05NU0ctSVYwMiIsIlRoZSBtZXNzYWdlIHR5cGUgaXMgaW52YWxpZC4iLGBUaGUgbWVzc2FnZSB0eXBlIHByb3ZpZGVkLCAke24udHlwZX0sIGlzIGludmFsaWQuYCkpKX1lbHNlIGYucG9zdE1lc3NhZ2UoTXQuZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShuZXcgYygiU1BBLUNMSUVOVF9XT1JLRVItT05NU0ctTkYwMSIsIlRoZSB3ZWIgd29ya2VyIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCB5ZXQuIiwiVGhlIGluaXRpYWxpemUgbWV0aG9kIG5lZWRzIHRvIGJlIGNhbGxlZCBiZWZvcmUgdGhlIHNwZWNpZmllZCBvcGVyYXRpb24gY2FuIGJlIGNhcnJpZWQgb3V0LiIpKSl9KSk7Y29uc3QgaT0oKT0+e24ucG9zdE1lc3NhZ2Uoe3R5cGU6InJlcXVlc3Qtc3RhcnQifSl9LG89ZT0+e24ucG9zdE1lc3NhZ2Uoe2RhdGE6SlNPTi5zdHJpbmdpZnkobnVsbCE9ZT9lOiIiKSx0eXBlOiJyZXF1ZXN0LXN1Y2Nlc3MifSl9LHM9KCk9PntuLnBvc3RNZXNzYWdlKHt0eXBlOiJyZXF1ZXN0LWZpbmlzaCJ9KX19KSgoKGUsdCk9Pm5ldyBXcihlLHQpKSk7cmV0dXJue319KCk7Cgo=",null,!1),new Worker(H,t)});!function(t){t.LocalStorage="localStorage",t.SessionStorage="sessionStorage",t.WebWorker="webWorker",t.BrowserMemory="browserMemory"}(U||(U={})),function(t){t.SignIn="sign-in",t.SignOut="sign-out",t.Initialize="initialize",t.HttpRequestStart="http-request-start",t.HttpRequestFinish="http-request-finish",t.HttpRequestError="http-request-error",t.HttpRequestSuccess="http-request-success",t.RevokeAccessToken="revoke-access-token",t.CustomGrant="custom-grant",t.SignOutFailed="sign-out-failed"}(L||(L={}));const T="Y2hlY2tTZXNzaW9u";class B{constructor(t,e){this._authenticationClient=t,this._dataLayer=this._authenticationClient.getDataLayer(),this._spaHelper=e}attachToken(t){return n(this,void 0,void 0,(function*(){Object.assign({attachToken:!0},t).attachToken&&(t.headers=Object.assign(Object.assign({},t.headers),{Authorization:"Bearer "+(yield this._authenticationClient.getAccessToken())}))}))}setHttpRequestStartCallback(t,e){(null==t?void 0:t.setHttpRequestStartCallback)&&t.setHttpRequestStartCallback(e)}setHttpRequestSuccessCallback(t,e){(null==t?void 0:t.setHttpRequestSuccessCallback)&&t.setHttpRequestSuccessCallback(e)}setHttpRequestFinishCallback(t,e){(null==t?void 0:t.setHttpRequestFinishCallback)&&t.setHttpRequestFinishCallback(e)}enableHttpHandler(t){(null==t?void 0:t.enableHandler)&&t.enableHandler()}disableHttpHandler(t){(null==t?void 0:t.disableHandler)&&t.disableHandler()}initializeSessionManger(t,e,l,n,i){var c,o,d;i.initialize(t.clientID,null!==(c=e.checkSessionIframe)&&void 0!==c?c:"",l,null!==(o=t.checkSessionInterval)&&void 0!==o?o:3,null!==(d=t.sessionRefreshInterval)&&void 0!==d?d:300,t.signInRedirectURL,n)}requestCustomGrant(t,e){var l,i,c;return n(this,void 0,void 0,(function*(){let o=!0,d=!1;if(null==t?void 0:t.tokenEndpoint){o=!1;for(const e of[...null!==(i=null===(l=yield this._dataLayer.getConfigData())||void 0===l?void 0:l.resourceServerURLs)&&void 0!==i?i:[],t.baseUrl])if(e&&(null===(c=t.tokenEndpoint)||void 0===c?void 0:c.startsWith(e))){d=!0;break}}return t.shouldReplayAfterRefresh&&this._dataLayer.setTemporaryDataParameter("custom_grant_config",JSON.stringify(t)),o||d?this._authenticationClient.requestCustomGrant(t).then(l=>n(this,void 0,void 0,(function*(){return e&&"function"==typeof e&&e(t),t.returnsSession?(this._spaHelper.refreshAccessTokenAutomatically(),this._authenticationClient.getBasicUserInfo()):l}))).catch(t=>Promise.reject(t)):Promise.reject(new R("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 n(this,void 0,void 0,(function*(){const t=yield this._dataLayer.getTemporaryDataParameter("custom_grant_config");return t?JSON.parse(t):null}))}refreshAccessToken(t){return n(this,void 0,void 0,(function*(){try{yield this._authenticationClient.refreshAccessToken();const e=yield this.getCustomGrantConfigData();return e&&(yield this.requestCustomGrant(e,t)),this._spaHelper.refreshAccessTokenAutomatically(),this._authenticationClient.getBasicUserInfo()}catch(t){return Promise.reject(t)}}))}httpRequest(t,e,l,i,c,o){var d,a;return n(this,void 0,void 0,(function*(){let r=!1;const u=yield this._dataLayer.getConfigData();for(const t of[...null!==(d=yield null==u?void 0:u.resourceServerURLs)&&void 0!==d?d:[],u.baseUrl])if(t&&(null===(a=null==e?void 0:e.url)||void 0===a?void 0:a.startsWith(t))){r=!0;break}return r?t.request(e).then(t=>Promise.resolve(t)).catch(d=>n(this,void 0,void 0,(function*(){var n,a,r;if(401===(null===(n=null==d?void 0:d.response)||void 0===n?void 0:n.status)||!(null==d?void 0:d.response)){let u;try{u=yield this.refreshAccessToken(o)}catch(n){throw l&&("function"==typeof i&&(yield i(Object.assign(Object.assign({},d),{code:"Access token is invalid"}))),"function"==typeof c&&c()),new R("SPA-AUTH_HELPER-HR-SE01",null!==(a=null==n?void 0:n.name)&&void 0!==a?a:"Refresh token request failed.",null!==(r=null==n?void 0:n.message)&&void 0!==r?r:"An error occurred while trying to refresh the access token following a 401 response from the server.")}if(u)try{const l=yield t.request(e);return Promise.resolve(l)}catch(n){return l&&("function"==typeof i&&(yield i(n)),"function"==typeof c&&c()),Promise.reject(n)}}return l&&("function"==typeof i&&(yield i(d)),"function"==typeof c&&c()),Promise.reject(d)}))):Promise.reject(new R("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(t,e,l,i,c){var o,d,a;return n(this,void 0,void 0,(function*(){let r=!0;const u=yield this._dataLayer.getConfigData();for(const e of t){let t=!1;for(const l of[...null!==(d=null===(o=yield u)||void 0===o?void 0:o.resourceServerURLs)&&void 0!==d?d:[],u.baseUrl])if(l&&(null===(a=e.url)||void 0===a?void 0:a.startsWith(l))){t=!0;break}if(!t){r=!1;break}}const s=[];if(r)return t.forEach(t=>{s.push(e.request(t))}),(null==e?void 0:e.all)&&e.all(s).then(t=>Promise.resolve(t)).catch(t=>n(this,void 0,void 0,(function*(){var o,d,a;if(401===(null===(o=null==t?void 0:t.response)||void 0===o?void 0:o.status)||!(null==t?void 0:t.response)){let o;try{o=yield this._authenticationClient.refreshAccessToken()}catch(e){throw l&&("function"==typeof i&&(yield i(Object.assign(Object.assign({},t),{code:"Access token is invalid"}))),"function"==typeof c&&c()),new R("SPA-AUTH_HELPER-HRA-SE01",null!==(d=null==e?void 0:e.name)&&void 0!==d?d:"Refresh token request failed.",null!==(a=null==e?void 0:e.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 e.all&&e.all(s).then(t=>Promise.resolve(t)).catch(t=>n(this,void 0,void 0,(function*(){return l&&("function"==typeof i&&(yield i(t)),"function"==typeof c&&c()),Promise.reject(t)})))}return l&&("function"==typeof i&&(yield i(t)),"function"==typeof c&&c()),Promise.reject(t)})));throw new R("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,e,l,i,c){return n(this,void 0,void 0,(function*(){const o=yield this._dataLayer.getConfigData();if(o.storage===U.BrowserMemory&&o.enablePKCE&&e){const t=x.getPKCE(f.extractPKCEKeyFromStateParam(e));yield this._authenticationClient.setPKCECode(f.extractPKCEKeyFromStateParam(e),t)}else o.storage===U.WebWorker&&i&&(yield this._authenticationClient.setPKCECode(i,null!=c?c:""));return t?this._authenticationClient.requestAccessToken(t,null!=e?e:"",null!=c?c:"").then(()=>n(this,void 0,void 0,(function*(){return o.storage!==U.WebWorker?(x.setSignOutURL(yield this._authenticationClient.getSignOutURL()),this._spaHelper&&(this._spaHelper.clearRefreshTokenTimeout(),this._spaHelper.refreshAccessTokenAutomatically()),l&&"function"==typeof l&&o.enableOIDCSessionManagement&&l()):this._spaHelper&&this._spaHelper.refreshAccessTokenAutomatically(),this._authenticationClient.getBasicUserInfo()}))).catch(t=>Promise.reject(t)):Promise.reject(new R("SPA-AUTH_HELPER-RAT1-NF01","No authorization code.","No authorization code was found."))}))}trySignInSilently(t,e,l){var i;return n(this,void 0,void 0,(function*(){if(x.isInitializedSilentSignIn())return yield l.receivePromptNoneResponse(),Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""});const c=document.getElementById("rpIFrame"),o=null===(i=null==c?void 0:c.contentDocument)||void 0===i?void 0:i.getElementById("promptNoneIFrame");try{const e=yield t();o.src=e}catch(t){return Promise.reject(t)}return new Promise((t,l)=>{const i=setTimeout(()=>{t(!1)},1e4),c=o=>n(this,void 0,void 0,(function*(){var n,d,a,r;const u=o.data;"check_session_signed_out"==(null==u?void 0:u.type)&&(window.removeEventListener("message",c),clearTimeout(i),t(!1)),"check_session_signed_in"==(null==u?void 0:u.type)&&(null===(n=null==u?void 0:u.data)||void 0===n?void 0:n.code)&&e(null===(d=null==u?void 0:u.data)||void 0===d?void 0:d.code,null===(a=null==u?void 0:u.data)||void 0===a?void 0:a.sessionState,null===(r=null==u?void 0:u.data)||void 0===r?void 0:r.state).then(e=>{window.removeEventListener("message",c),t(e)}).catch(t=>{window.removeEventListener("message",c),l(t)}).finally(()=>{clearTimeout(i)})}));window.addEventListener("message",c)})}))}handleSignIn(t,e,l){return n(this,void 0,void 0,(function*(){const n=yield this._dataLayer.getConfigData();if(yield t())return Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""});if(n.storage!==U.WebWorker&&(yield this._authenticationClient.isAuthenticated()))return this._spaHelper.clearRefreshTokenTimeout(),this._spaHelper.refreshAccessTokenAutomatically(),n.enableOIDCSessionManagement&&e(),Promise.resolve(yield this._authenticationClient.getBasicUserInfo());const i=new URL(window.location.href).searchParams.get("error"),c=new URL(window.location.href).searchParams.get("error_description");if(i){const t=new URL(window.location.href);throw t.searchParams.delete("error"),t.searchParams.delete("error_description"),history.pushState(null,document.title,t.toString()),new R("SPA-AUTH_HELPER-SI-SE01",i,null!=c?c:"")}if(n.storage===U.WebWorker&&l){const t=yield l();if(t)return t}}))}getBasicUserInfo(){return n(this,void 0,void 0,(function*(){return this._authenticationClient.getBasicUserInfo()}))}getDecodedIDToken(){return n(this,void 0,void 0,(function*(){return this._authenticationClient.getDecodedIDToken()}))}getIDToken(){return n(this,void 0,void 0,(function*(){return this._authenticationClient.getIDToken()}))}getOIDCServiceEndpoints(){return n(this,void 0,void 0,(function*(){return this._authenticationClient.getOIDCServiceEndpoints()}))}getAccessToken(){return n(this,void 0,void 0,(function*(){return this._authenticationClient.getAccessToken()}))}getDataLayer(){return this._dataLayer}isAuthenticated(){return n(this,void 0,void 0,(function*(){return this._authenticationClient.isAuthenticated()}))}}class F{constructor(t){this._authenticationClient=t,this._dataLayer=this._authenticationClient.getDataLayer()}refreshAccessTokenAutomatically(){return n(this,void 0,void 0,(function*(){const t=yield this._dataLayer.getSessionData();if(t.refresh_token){const e=parseInt(t.expires_in),l=setTimeout(()=>n(this,void 0,void 0,(function*(){yield this._authenticationClient.refreshAccessToken()})),1e3*(e<=10?e:e-10));yield this._dataLayer.setTemporaryDataParameter(Z,JSON.stringify(l))}}))}clearRefreshTokenTimeout(){return n(this,void 0,void 0,(function*(){if(yield this._dataLayer.getTemporaryDataParameter(Z)){const t=JSON.parse(yield this._dataLayer.getTemporaryDataParameter(Z));clearTimeout(t)}}))}}class A{constructor(){}static generateSuccessMessage(t){return{blob:(null==t?void 0:t.data)instanceof Blob?null==t?void 0:t.data:null,data:JSON.stringify(null!=t?t:""),success:!0}}static generateFailureMessage(t){return(null==t?void 0:t.toJSON)&&delete t.toJSON,{error:JSON.stringify(null!=t?t:""),success:!1}}}class x{constructor(){}static removeAuthorizationCode(){const t=location.href;history.pushState({},document.title,t.replace(/\?code=.*$/,""))}static getPKCE(t){var e;return null!==(e=sessionStorage.getItem(t))&&void 0!==e?e:""}static setPKCE(t,e){sessionStorage.setItem(t,e)}static setSignOutURL(t){sessionStorage.setItem(X,t)}static getSignOutURL(){var t;return null!==(t=sessionStorage.getItem(X))&&void 0!==t?t:""}static removePKCE(t){sessionStorage.removeItem(t)}static canContinueSignIn(t,e){return!(t&&!x.hasErrorInURL()&&!x.hasAuthSearchParamsInURL()&&!e)}static isInitializedSilentSignIn(){return x.isSilentStatePresentInURL()}static wasSignInCalled(){return!(!x.hasErrorInURL()&&!x.hasAuthSearchParamsInURL()||this.isSilentStatePresentInURL())}static wasSilentSignInCalled(){const t=sessionStorage.getItem("initialized-silent-sign-in"),e=t?JSON.parse(t):null;return Boolean(e)}static isSignOutSuccessful(){return n(this,void 0,void 0,(function*(){if(J.isSignOutSuccessful(window.location.href)){const t=window.location.href.split("?")[0];return history.pushState({},document.title,t),yield J.clearUserSessionData(),!0}return!1}))}static didSignOutFail(){if(J.didSignOutFail(window.location.href)){const t=new URL(window.location.href),e=t.searchParams.get("error"),l=t.searchParams.get("error_description"),n=window.location.href.split("?")[0];return history.pushState({},document.title,n),{description:null!=l?l:"",error:null!=e?e:""}}return!1}static isSilentStatePresentInURL(){var t;const e=new URL(window.location.href).searchParams.get("state");return null!==(t=null==e?void 0:e.includes("sign-in-silently"))&&void 0!==t&&t}static hasAuthSearchParamsInURL(t=window.location.search){return/[?&]code=[^&]+/.test(t)}static hasErrorInURL(t=window.location.href){const e=new URL(t);return!!e.searchParams.get("error")&&e.searchParams.get("state")!==V}static canSendPromptNoneRequest(){const t=sessionStorage.getItem("promptNoneRequestSent");return!(t&&JSON.parse(t))}static setPromptNoneRequestSent(t){sessionStorage.setItem("promptNoneRequestSent",JSON.stringify(t))}static waitTillPageRedirect(t){return n(this,void 0,void 0,(function*(){const e=null!=t?t:3e3;yield new Promise(t=>setTimeout(t,1e3*e))}))}}const z=(()=>{let t,e,l,i,c,o,d,a,r,u,s;const Z=(n,d,a,r,u,Z,h)=>{t=n,e=d,l=a,i=r,c=Z,o=u,s=h,i>-1&&b(),o>-1&&(u=setInterval(()=>{I()},1e3*o))},b=()=>n(void 0,void 0,void 0,(function*(){var o;if(!e||!t||!c)return;const d="opIFrame";function r(){var i;return n(this,void 0,void 0,(function*(){const n=yield l();if(Boolean(t)&&Boolean(n)){const l=`${t} ${n}`,c=document.getElementById("rpIFrame"),o=(null===(i=null==c?void 0:c.contentDocument)||void 0===i?void 0:i.getElementById(d)).contentWindow;null==o||o.postMessage(l,e)}}))}const u=document.getElementById("rpIFrame");(null===(o=null==u?void 0:u.contentDocument)||void 0===o?void 0:o.getElementById(d)).src=e+"?client_id="+t+"&redirect_uri="+c,yield r(),a=setInterval(r,1e3*i),m()})),h=()=>{clearInterval(a),clearInterval(void 0)},m=()=>{null===window||void 0===window||window.addEventListener("message",(function(t){var l;return n(this,void 0,void 0,(function*(){!e||(null==e?void 0:e.indexOf(t.origin))<0||"set_session_state_from_iframe"===(null===(l=null==t?void 0:t.data)||void 0===l?void 0:l.type)||"unchanged"===t.data||("error"===t.data?window.location.href=yield d():"changed"===t.data&&I())}))}),!1)},I=()=>n(void 0,void 0,void 0,(function*(){var t;const e=document.getElementById("rpIFrame"),l=null===(t=null==e?void 0:e.contentDocument)||void 0===t?void 0:t.getElementById("promptNoneIFrame");if(x.canSendPromptNoneRequest()){x.setPromptNoneRequestSent(!0);const t=e=>{var l,n,i;"set_session_state_from_iframe"===(null===(l=null==e?void 0:e.data)||void 0===l?void 0:l.type)&&(u(null!==(i=null===(n=null==e?void 0:e.data)||void 0===n?void 0:n.data)&&void 0!==i?i:""),null===window||void 0===window||window.removeEventListener("message",t))};r!==U.BrowserMemory&&r!==U.WebWorker||null===window||void 0===window||window.addEventListener("message",t);const e=yield s({prompt:"none",responseMode:"query",state:T});l.src=e}})),G=t=>n(void 0,void 0,void 0,(function*(){var e,l;const n=new URL(window.location.href).searchParams.get("state"),i=new URL(window.location.href).searchParams.get(g),c=window.parent.parent;if(null!==n&&(n.includes(T)||n.includes("sign-in-silently"))){const o=new URL(window.location.href).searchParams.get("code");if(null!==o&&0!==o.length){if(n.includes("sign-in-silently")){const t={data:{code:o,sessionState:null!=i?i:"",state:n},type:"check_session_signed_in"};return sessionStorage.setItem("initialized-silent-sign-in","false"),c.postMessage(t,c.origin),x.setPromptNoneRequestSent(!1),window.location.href="about:blank",yield x.waitTillPageRedirect(),!0}const d=new URL(window.location.href).searchParams.get("session_state");if(r===U.LocalStorage||r===U.SessionStorage)t&&(yield t(d));else{const t={data:null!=d?d:"",type:"set_session_state_from_iframe"};null===(l=null===(e=null===window||void 0===window?void 0:window.parent)||void 0===e?void 0:e.parent)||void 0===l||l.postMessage(t)}return x.setPromptNoneRequestSent(!1),window.location.href="about:blank",yield x.waitTillPageRedirect(),!0}if(n.includes("sign-in-silently")){const t={type:"check_session_signed_out"};return window.parent.parent.postMessage(t,c.origin),x.setPromptNoneRequestSent(!1),window.location.href="about:blank",yield x.waitTillPageRedirect(),!0}return x.setPromptNoneRequestSent(!1),c.location.href=yield d(),window.location.href="about:blank",yield x.waitTillPageRedirect(),!0}return!1}));return(t,e,l)=>n(void 0,void 0,void 0,(function*(){var n;let i=document.createElement("iframe");i.setAttribute("id","rpIFrame"),i.style.display="none";let c=!1;for(i.onload=()=>{var t,e,l,n;i=document.getElementById("rpIFrame");const o=null==i?void 0:i.contentDocument,d=null==o?void 0:o.createElement("iframe");d&&(d.setAttribute("id","opIFrame"),d.style.display="none");const a=null==o?void 0:o.createElement("iframe");a&&(a.setAttribute("id","promptNoneIFrame"),a.style.display="none"),d&&(null===(e=null===(t=null==i?void 0:i.contentDocument)||void 0===t?void 0:t.body)||void 0===e||e.appendChild(d)),a&&(null===(n=null===(l=null==i?void 0:i.contentDocument)||void 0===l?void 0:l.body)||void 0===n||n.appendChild(a)),c=!0},null===(n=null===document||void 0===document?void 0:document.body)||void 0===n||n.appendChild(i),d=t,r=e,u=l;!1===c;)yield new Promise(t=>setTimeout(t,1));return{initialize:Z,receivePromptNoneResponse:G,reset:h}}))})();var w="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==t?t:"undefined"!=typeof self?self:{};var Q={exports:{}},P=function(t,e){return function(){for(var l=new Array(arguments.length),n=0;n<l.length;n++)l[n]=arguments[n];return t.apply(e,l)}},j=P,M=Object.prototype.toString;function E(t){return Array.isArray(t)}function D(t){return void 0===t}function O(t){return"[object ArrayBuffer]"===M.call(t)}function _(t){return null!==t&&"object"==typeof t}function q(t){if("[object Object]"!==M.call(t))return!1;var e=Object.getPrototypeOf(t);return null===e||e===Object.prototype}function $(t){return"[object Function]"===M.call(t)}function tt(t,e){if(null!=t)if("object"!=typeof t&&(t=[t]),E(t))for(var l=0,n=t.length;l<n;l++)e.call(null,t[l],l,t);else for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&e.call(null,t[i],i,t)}var et={isArray:E,isArrayBuffer:O,isBuffer:function(t){return null!==t&&!D(t)&&null!==t.constructor&&!D(t.constructor)&&"function"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)},isFormData:function(t){return"[object FormData]"===M.call(t)},isArrayBufferView:function(t){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&O(t.buffer)},isString:function(t){return"string"==typeof t},isNumber:function(t){return"number"==typeof t},isObject:_,isPlainObject:q,isUndefined:D,isDate:function(t){return"[object Date]"===M.call(t)},isFile:function(t){return"[object File]"===M.call(t)},isBlob:function(t){return"[object Blob]"===M.call(t)},isFunction:$,isStream:function(t){return _(t)&&$(t.pipe)},isURLSearchParams:function(t){return"[object URLSearchParams]"===M.call(t)},isStandardBrowserEnv:function(){return("undefined"==typeof navigator||"ReactNative"!==navigator.product&&"NativeScript"!==navigator.product&&"NS"!==navigator.product)&&"undefined"!=typeof window&&"undefined"!=typeof document},forEach:tt,merge:function t(){var e={};function l(l,n){q(e[n])&&q(l)?e[n]=t(e[n],l):q(l)?e[n]=t({},l):E(l)?e[n]=l.slice():e[n]=l}for(var n=0,i=arguments.length;n<i;n++)tt(arguments[n],l);return e},extend:function(t,e,l){return tt(e,(function(e,n){t[n]=l&&"function"==typeof e?j(e,l):e})),t},trim:function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")},stripBOM:function(t){return 65279===t.charCodeAt(0)&&(t=t.slice(1)),t}},lt=et;function nt(t){return encodeURIComponent(t).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var it=function(t,e,l){if(!e)return t;var n;if(l)n=l(e);else if(lt.isURLSearchParams(e))n=e.toString();else{var i=[];lt.forEach(e,(function(t,e){null!=t&&(lt.isArray(t)?e+="[]":t=[t],lt.forEach(t,(function(t){lt.isDate(t)?t=t.toISOString():lt.isObject(t)&&(t=JSON.stringify(t)),i.push(nt(e)+"="+nt(t))})))})),n=i.join("&")}if(n){var c=t.indexOf("#");-1!==c&&(t=t.slice(0,c)),t+=(-1===t.indexOf("?")?"?":"&")+n}return t},ct=et;function ot(){this.handlers=[]}ot.prototype.use=function(t,e,l){return this.handlers.push({fulfilled:t,rejected:e,synchronous:!!l&&l.synchronous,runWhen:l?l.runWhen:null}),this.handlers.length-1},ot.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},ot.prototype.forEach=function(t){ct.forEach(this.handlers,(function(e){null!==e&&t(e)}))};var dt=ot,at=void 0!==t?t:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{};function rt(){throw new Error("setTimeout has not been defined")}function ut(){throw new Error("clearTimeout has not been defined")}var st=rt,Zt=ut;function bt(t){if(st===setTimeout)return setTimeout(t,0);if((st===rt||!st)&&setTimeout)return st=setTimeout,setTimeout(t,0);try{return st(t,0)}catch(e){try{return st.call(null,t,0)}catch(e){return st.call(this,t,0)}}}"function"==typeof at.setTimeout&&(st=setTimeout),"function"==typeof at.clearTimeout&&(Zt=clearTimeout);var ht,mt=[],It=!1,Gt=-1;function pt(){It&&ht&&(It=!1,ht.length?mt=ht.concat(mt):Gt=-1,mt.length&>())}function gt(){if(!It){var t=bt(pt);It=!0;for(var e=mt.length;e;){for(ht=mt,mt=[];++Gt<e;)ht&&ht[Gt].run();Gt=-1,e=mt.length}ht=null,It=!1,function(t){if(Zt===clearTimeout)return clearTimeout(t);if((Zt===ut||!Zt)&&clearTimeout)return Zt=clearTimeout,clearTimeout(t);try{Zt(t)}catch(e){try{return Zt.call(null,t)}catch(e){return Zt.call(this,t)}}}(t)}}function Xt(t,e){this.fun=t,this.array=e}function Vt(){}Xt.prototype.run=function(){this.fun.apply(null,this.array)};var yt=Vt,Wt=Vt,Ct=Vt,Rt=Vt,ft=Vt,Yt=Vt,St=Vt,vt=at.performance||{},Kt=vt.now||vt.mozNow||vt.msNow||vt.oNow||vt.webkitNow||function(){return(new Date).getTime()},Nt=new Date,Jt={nextTick:function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var l=1;l<arguments.length;l++)e[l-1]=arguments[l];mt.push(new Xt(t,e)),1!==mt.length||It||bt(gt)},title:"browser",browser:!0,env:{},argv:[],version:"",versions:{},on:yt,addListener:Wt,once:Ct,off:Rt,removeListener:ft,removeAllListeners:Yt,emit:St,binding:function(t){throw new Error("process.binding is not supported")},cwd:function(){return"/"},chdir:function(t){throw new Error("process.chdir is not supported")},umask:function(){return 0},hrtime:function(t){var e=.001*Kt.call(vt),l=Math.floor(e),n=Math.floor(e%1*1e9);return t&&(l-=t[0],(n-=t[1])<0&&(l--,n+=1e9)),[l,n]},platform:"browser",release:{},config:{},uptime:function(){return(new Date-Nt)/1e3}},Ht=et,Ut=function(t,e,l,n,i){return t.config=e,l&&(t.code=l),t.request=n,t.response=i,t.isAxiosError=!0,t.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}},t},Lt={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},kt=Ut,Tt=function(t,e,l,n,i){var c=new Error(t);return kt(c,e,l,n,i)},Bt=Tt,Ft=et,At=Ft.isStandardBrowserEnv()?{write:function(t,e,l,n,i,c){var o=[];o.push(t+"="+encodeURIComponent(e)),Ft.isNumber(l)&&o.push("expires="+new Date(l).toGMTString()),Ft.isString(n)&&o.push("path="+n),Ft.isString(i)&&o.push("domain="+i),!0===c&&o.push("secure"),document.cookie=o.join("; ")},read:function(t){var e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}},xt=et,zt=["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"],wt=et,Qt=wt.isStandardBrowserEnv()?function(){var t,e=/(msie|trident)/i.test(navigator.userAgent),l=document.createElement("a");function n(t){var n=t;return e&&(l.setAttribute("href",n),n=l.href),l.setAttribute("href",n),{href:l.href,protocol:l.protocol?l.protocol.replace(/:$/,""):"",host:l.host,search:l.search?l.search.replace(/^\?/,""):"",hash:l.hash?l.hash.replace(/^#/,""):"",hostname:l.hostname,port:l.port,pathname:"/"===l.pathname.charAt(0)?l.pathname:"/"+l.pathname}}return t=n(window.location.href),function(e){var l=wt.isString(e)?n(e):e;return l.protocol===t.protocol&&l.host===t.host}}():function(){return!0};function Pt(t){this.message=t}Pt.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},Pt.prototype.__CANCEL__=!0;var jt=Pt,Mt=et,Et=At,Dt=it,Ot=Qt,_t=Tt,qt=Lt,$t=jt,te=et,ee=function(t,e){Ht.forEach(t,(function(l,n){n!==e&&n.toUpperCase()===e.toUpperCase()&&(t[e]=l,delete t[n])}))},le=Ut,ne={"Content-Type":"application/x-www-form-urlencoded"};function ie(t,e){!te.isUndefined(t)&&te.isUndefined(t["Content-Type"])&&(t["Content-Type"]=e)}var ce,oe={transitional:Lt,adapter:(("undefined"!=typeof XMLHttpRequest||void 0!==Jt&&"[object process]"===Object.prototype.toString.call(Jt))&&(ce=function(t){return new Promise((function(e,l){var n,i=t.data,c=t.headers,o=t.responseType;function d(){t.cancelToken&&t.cancelToken.unsubscribe(n),t.signal&&t.signal.removeEventListener("abort",n)}Mt.isFormData(i)&&delete c["Content-Type"];var a=new XMLHttpRequest;if(t.auth){var r=t.auth.username||"",u=t.auth.password?unescape(encodeURIComponent(t.auth.password)):"";c.Authorization="Basic "+btoa(r+":"+u)}var s=function(t,e){return t&&!function(t){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(t)}(e)?function(t,e){return e?t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,""):t}(t,e):e}(t.baseURL,t.url);function Z(){if(a){var n="getAllResponseHeaders"in a?function(t){var e,l,n,i={};return t?(xt.forEach(t.split("\n"),(function(t){if(n=t.indexOf(":"),e=xt.trim(t.substr(0,n)).toLowerCase(),l=xt.trim(t.substr(n+1)),e){if(i[e]&&zt.indexOf(e)>=0)return;i[e]="set-cookie"===e?(i[e]?i[e]:[]).concat([l]):i[e]?i[e]+", "+l:l}})),i):i}(a.getAllResponseHeaders()):null;(function(t,e,l){var n=l.config.validateStatus;l.status&&n&&!n(l.status)?e(Bt("Request failed with status code "+l.status,l.config,null,l.request,l)):t(l)})((function(t){e(t),d()}),(function(t){l(t),d()}),{data:o&&"text"!==o&&"json"!==o?a.response:a.responseText,status:a.status,statusText:a.statusText,headers:n,config:t,request:a}),a=null}}if(a.open(t.method.toUpperCase(),Dt(s,t.params,t.paramsSerializer),!0),a.timeout=t.timeout,"onloadend"in a?a.onloadend=Z:a.onreadystatechange=function(){a&&4===a.readyState&&(0!==a.status||a.responseURL&&0===a.responseURL.indexOf("file:"))&&setTimeout(Z)},a.onabort=function(){a&&(l(_t("Request aborted",t,"ECONNABORTED",a)),a=null)},a.onerror=function(){l(_t("Network Error",t,null,a)),a=null},a.ontimeout=function(){var e=t.timeout?"timeout of "+t.timeout+"ms exceeded":"timeout exceeded",n=t.transitional||qt;t.timeoutErrorMessage&&(e=t.timeoutErrorMessage),l(_t(e,t,n.clarifyTimeoutError?"ETIMEDOUT":"ECONNABORTED",a)),a=null},Mt.isStandardBrowserEnv()){var b=(t.withCredentials||Ot(s))&&t.xsrfCookieName?Et.read(t.xsrfCookieName):void 0;b&&(c[t.xsrfHeaderName]=b)}"setRequestHeader"in a&&Mt.forEach(c,(function(t,e){void 0===i&&"content-type"===e.toLowerCase()?delete c[e]:a.setRequestHeader(e,t)})),Mt.isUndefined(t.withCredentials)||(a.withCredentials=!!t.withCredentials),o&&"json"!==o&&(a.responseType=t.responseType),"function"==typeof t.onDownloadProgress&&a.addEventListener("progress",t.onDownloadProgress),"function"==typeof t.onUploadProgress&&a.upload&&a.upload.addEventListener("progress",t.onUploadProgress),(t.cancelToken||t.signal)&&(n=function(t){a&&(l(!t||t&&t.type?new $t("canceled"):t),a.abort(),a=null)},t.cancelToken&&t.cancelToken.subscribe(n),t.signal&&(t.signal.aborted?n():t.signal.addEventListener("abort",n))),i||(i=null),a.send(i)}))}),ce),transformRequest:[function(t,e){return ee(e,"Accept"),ee(e,"Content-Type"),te.isFormData(t)||te.isArrayBuffer(t)||te.isBuffer(t)||te.isStream(t)||te.isFile(t)||te.isBlob(t)?t:te.isArrayBufferView(t)?t.buffer:te.isURLSearchParams(t)?(ie(e,"application/x-www-form-urlencoded;charset=utf-8"),t.toString()):te.isObject(t)||e&&"application/json"===e["Content-Type"]?(ie(e,"application/json"),function(t,e,l){if(te.isString(t))try{return(0,JSON.parse)(t),te.trim(t)}catch(t){if("SyntaxError"!==t.name)throw t}return(0,JSON.stringify)(t)}(t)):t}],transformResponse:[function(t){var e=this.transitional||oe.transitional,l=e&&e.silentJSONParsing,n=e&&e.forcedJSONParsing,i=!l&&"json"===this.responseType;if(i||n&&te.isString(t)&&t.length)try{return JSON.parse(t)}catch(t){if(i){if("SyntaxError"===t.name)throw le(t,this,"E_JSON_PARSE");throw t}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};te.forEach(["delete","get","head"],(function(t){oe.headers[t]={}})),te.forEach(["post","put","patch"],(function(t){oe.headers[t]=te.merge(ne)}));var de=oe,ae=et,re=de,ue=function(t){return!(!t||!t.__CANCEL__)},se=et,Ze=function(t,e,l){var n=this||re;return ae.forEach(l,(function(l){t=l.call(n,t,e)})),t},be=ue,he=de,me=jt;function Ie(t){if(t.cancelToken&&t.cancelToken.throwIfRequested(),t.signal&&t.signal.aborted)throw new me("canceled")}var Ge=et,pe=function(t,e){e=e||{};var l={};function n(t,e){return Ge.isPlainObject(t)&&Ge.isPlainObject(e)?Ge.merge(t,e):Ge.isPlainObject(e)?Ge.merge({},e):Ge.isArray(e)?e.slice():e}function i(l){return Ge.isUndefined(e[l])?Ge.isUndefined(t[l])?void 0:n(void 0,t[l]):n(t[l],e[l])}function c(t){if(!Ge.isUndefined(e[t]))return n(void 0,e[t])}function o(l){return Ge.isUndefined(e[l])?Ge.isUndefined(t[l])?void 0:n(void 0,t[l]):n(void 0,e[l])}function d(l){return l in e?n(t[l],e[l]):l in t?n(void 0,t[l]):void 0}var a={url:c,method:c,data:c,baseURL:o,transformRequest:o,transformResponse:o,paramsSerializer:o,timeout:o,timeoutMessage:o,withCredentials:o,adapter:o,responseType:o,xsrfCookieName:o,xsrfHeaderName:o,onUploadProgress:o,onDownloadProgress:o,decompress:o,maxContentLength:o,maxBodyLength:o,transport:o,httpAgent:o,httpsAgent:o,cancelToken:o,socketPath:o,responseEncoding:o,validateStatus:d};return Ge.forEach(Object.keys(t).concat(Object.keys(e)),(function(t){var e=a[t]||i,n=e(t);Ge.isUndefined(n)&&e!==d||(l[t]=n)})),l},ge={};["object","boolean","number","function","string","symbol"].forEach((function(t,e){ge[t]=function(l){return typeof l===t||"a"+(e<1?"n ":" ")+t}}));var Xe={};ge.transitional=function(t,e,l){function n(t,e){return"[Axios v0.26.1] Transitional option '"+t+"'"+e+(l?". "+l:"")}return function(l,i,c){if(!1===t)throw new Error(n(i," has been removed"+(e?" in "+e:"")));return e&&!Xe[i]&&(Xe[i]=!0,console.warn(n(i," has been deprecated since v"+e+" and will be removed in the near future"))),!t||t(l,i,c)}};var Ve=et,ye=it,We=dt,Ce=function(t){return Ie(t),t.headers=t.headers||{},t.data=Ze.call(t,t.data,t.headers,t.transformRequest),t.headers=se.merge(t.headers.common||{},t.headers[t.method]||{},t.headers),se.forEach(["delete","get","head","post","put","patch","common"],(function(e){delete t.headers[e]})),(t.adapter||he.adapter)(t).then((function(e){return Ie(t),e.data=Ze.call(t,e.data,e.headers,t.transformResponse),e}),(function(e){return be(e)||(Ie(t),e&&e.response&&(e.response.data=Ze.call(t,e.response.data,e.response.headers,t.transformResponse))),Promise.reject(e)}))},Re=pe,fe={assertOptions:function(t,e,l){if("object"!=typeof t)throw new TypeError("options must be an object");for(var n=Object.keys(t),i=n.length;i-- >0;){var c=n[i],o=e[c];if(o){var d=t[c],a=void 0===d||o(d,c,t);if(!0!==a)throw new TypeError("option "+c+" must be "+a)}else if(!0!==l)throw Error("Unknown option "+c)}},validators:ge},Ye=fe.validators;function Se(t){this.defaults=t,this.interceptors={request:new We,response:new We}}Se.prototype.request=function(t,e){"string"==typeof t?(e=e||{}).url=t:e=t||{},(e=Re(this.defaults,e)).method?e.method=e.method.toLowerCase():this.defaults.method?e.method=this.defaults.method.toLowerCase():e.method="get";var l=e.transitional;void 0!==l&&fe.assertOptions(l,{silentJSONParsing:Ye.transitional(Ye.boolean),forcedJSONParsing:Ye.transitional(Ye.boolean),clarifyTimeoutError:Ye.transitional(Ye.boolean)},!1);var n=[],i=!0;this.interceptors.request.forEach((function(t){"function"==typeof t.runWhen&&!1===t.runWhen(e)||(i=i&&t.synchronous,n.unshift(t.fulfilled,t.rejected))}));var c,o=[];if(this.interceptors.response.forEach((function(t){o.push(t.fulfilled,t.rejected)})),!i){var d=[Ce,void 0];for(Array.prototype.unshift.apply(d,n),d=d.concat(o),c=Promise.resolve(e);d.length;)c=c.then(d.shift(),d.shift());return c}for(var a=e;n.length;){var r=n.shift(),u=n.shift();try{a=r(a)}catch(t){u(t);break}}try{c=Ce(a)}catch(t){return Promise.reject(t)}for(;o.length;)c=c.then(o.shift(),o.shift());return c},Se.prototype.getUri=function(t){return t=Re(this.defaults,t),ye(t.url,t.params,t.paramsSerializer).replace(/^\?/,"")},Ve.forEach(["delete","get","head","options"],(function(t){Se.prototype[t]=function(e,l){return this.request(Re(l||{},{method:t,url:e,data:(l||{}).data}))}})),Ve.forEach(["post","put","patch"],(function(t){Se.prototype[t]=function(e,l,n){return this.request(Re(n||{},{method:t,url:e,data:l}))}}));var ve=Se,Ke=jt;function Ne(t){if("function"!=typeof t)throw new TypeError("executor must be a function.");var e;this.promise=new Promise((function(t){e=t}));var l=this;this.promise.then((function(t){if(l._listeners){var e,n=l._listeners.length;for(e=0;e<n;e++)l._listeners[e](t);l._listeners=null}})),this.promise.then=function(t){var e,n=new Promise((function(t){l.subscribe(t),e=t})).then(t);return n.cancel=function(){l.unsubscribe(e)},n},t((function(t){l.reason||(l.reason=new Ke(t),e(l.reason))}))}Ne.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},Ne.prototype.subscribe=function(t){this.reason?t(this.reason):this._listeners?this._listeners.push(t):this._listeners=[t]},Ne.prototype.unsubscribe=function(t){if(this._listeners){var e=this._listeners.indexOf(t);-1!==e&&this._listeners.splice(e,1)}},Ne.source=function(){var t;return{token:new Ne((function(e){t=e})),cancel:t}};var Je=Ne,He=et,Ue=et,Le=P,ke=ve,Te=pe,Be=function t(e){var l=new ke(e),n=Le(ke.prototype.request,l);return Ue.extend(n,ke.prototype,l),Ue.extend(n,l),n.create=function(l){return t(Te(e,l))},n}(de);Be.Axios=ke,Be.Cancel=jt,Be.CancelToken=Je,Be.isCancel=ue,Be.VERSION="0.26.1",Be.all=function(t){return Promise.all(t)},Be.spread=function(t){return function(e){return t.apply(null,e)}},Be.isAxiosError=function(t){return He.isObject(t)&&!0===t.isAxiosError},Q.exports=Be,Q.exports.default=Be;var Fe,Ae=Q.exports;let xe=Fe=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=Ae.create({withCredentials:!0}),this.clientInstance||(this.clientInstance=new Fe),this.axiosInstance.interceptors.request.use(t=>n(this,void 0,void 0,(function*(){return yield this.clientInstance.requestHandler(t)}))),this.axiosInstance.interceptors.response.use(t=>this.clientInstance.successHandler(t),t=>this.clientInstance.errorHandler(t)),this.axiosInstance.all=Ae.all,this.axiosInstance.spread=Ae.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(t){return n(this,void 0,void 0,(function*(){if(yield this.attachToken(t),null==t?void 0:t.shouldEncodeToFormData){const e=null==t?void 0:t.data,l=new FormData;Object.keys(e).forEach(t=>{l.append(t,e[t])}),t.data=l}return Fe.isHandlerEnabled&&this.requestStartCallback&&"function"==typeof this.requestStartCallback&&this.requestStartCallback(t),t}))}errorHandler(t){throw Fe.isHandlerEnabled&&(this.requestErrorCallback&&"function"==typeof this.requestErrorCallback&&this.requestErrorCallback(t),this.requestFinishCallback&&"function"==typeof this.requestFinishCallback&&this.requestFinishCallback()),t}successHandler(t){return Fe.isHandlerEnabled&&(this.requestSuccessCallback&&"function"==typeof this.requestSuccessCallback&&this.requestSuccessCallback(t),this.requestFinishCallback&&"function"==typeof this.requestFinishCallback&&this.requestFinishCallback()),t}init(t=!0,e){return n(this,void 0,void 0,(function*(){Fe.isHandlerEnabled=t,this.attachToken=e}))}enableHandler(){Fe.isHandlerEnabled=!0}disableHandler(){Fe.isHandlerEnabled=!1}disableHandlerWithTimeout(t=Fe.DEFAULT_HANDLER_DISABLE_TIMEOUT){Fe.isHandlerEnabled=!1,setTimeout(()=>{Fe.isHandlerEnabled=!0},t)}setHttpRequestStartCallback(t){this.requestStartCallback=t}setHttpRequestSuccessCallback(t){this.requestSuccessCallback=t}setHttpRequestErrorCallback(t){this.requestErrorCallback=t}setHttpRequestFinishCallback(t){this.requestFinishCallback=t}};xe.DEFAULT_HANDLER_DISABLE_TIMEOUT=1e3,xe=Fe=function(t,e,l,n){var i,c=arguments.length,o=c<3?e:null===n?n=Object.getOwnPropertyDescriptor(e,l):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(t,e,l,n);else for(var d=t.length-1;d>=0;d--)(i=t[d])&&(o=(c<3?i(o):c>3?i(e,l,o):i(e,l))||o);return c>3&&o&&Object.defineProperty(e,l,o),o}([t=>{}],xe);class ze{setData(t,e){return n(this,void 0,void 0,(function*(){localStorage.setItem(t,e)}))}getData(t){var e;return n(this,void 0,void 0,(function*(){return null!==(e=localStorage.getItem(t))&&void 0!==e?e:"{}"}))}removeData(t){return n(this,void 0,void 0,(function*(){localStorage.removeItem(t)}))}}class we{constructor(){this._data=new Map}setData(t,e){return n(this,void 0,void 0,(function*(){this._data.set(t,e)}))}getData(t){var e,l;return n(this,void 0,void 0,(function*(){return null!==(l=null===(e=this._data)||void 0===e?void 0:e.get(t))&&void 0!==l?l:"{}"}))}removeData(t){return n(this,void 0,void 0,(function*(){this._data.delete(t)}))}}class Qe{setData(t,e){return n(this,void 0,void 0,(function*(){sessionStorage.setItem(t,e)}))}getData(t){var e;return n(this,void 0,void 0,(function*(){return null!==(e=sessionStorage.getItem(t))&&void 0!==e?e:"{}"}))}removeData(t){return n(this,void 0,void 0,(function*(){sessionStorage.removeItem(t)}))}}var Pe=[],je=[],Me="undefined"!=typeof Uint8Array?Uint8Array:Array,Ee=!1;function De(){Ee=!0;for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",e=0,l=t.length;e<l;++e)Pe[e]=t[e],je[t.charCodeAt(e)]=e;je["-".charCodeAt(0)]=62,je["_".charCodeAt(0)]=63}function Oe(t,e,l){for(var n,i,c=[],o=e;o<l;o+=3)n=(t[o]<<16)+(t[o+1]<<8)+t[o+2],c.push(Pe[(i=n)>>18&63]+Pe[i>>12&63]+Pe[i>>6&63]+Pe[63&i]);return c.join("")}function _e(t){var e;Ee||De();for(var l=t.length,n=l%3,i="",c=[],o=16383,d=0,a=l-n;d<a;d+=o)c.push(Oe(t,d,d+o>a?a:d+o));return 1===n?(e=t[l-1],i+=Pe[e>>2],i+=Pe[e<<4&63],i+="=="):2===n&&(e=(t[l-2]<<8)+t[l-1],i+=Pe[e>>10],i+=Pe[e>>4&63],i+=Pe[e<<2&63],i+="="),c.push(i),c.join("")}function qe(t,e,l,n,i){var c,o,d=8*i-n-1,a=(1<<d)-1,r=a>>1,u=-7,s=l?i-1:0,Z=l?-1:1,b=t[e+s];for(s+=Z,c=b&(1<<-u)-1,b>>=-u,u+=d;u>0;c=256*c+t[e+s],s+=Z,u-=8);for(o=c&(1<<-u)-1,c>>=-u,u+=n;u>0;o=256*o+t[e+s],s+=Z,u-=8);if(0===c)c=1-r;else{if(c===a)return o?NaN:1/0*(b?-1:1);o+=Math.pow(2,n),c-=r}return(b?-1:1)*o*Math.pow(2,c-n)}function $e(t,e,l,n,i,c){var o,d,a,r=8*c-i-1,u=(1<<r)-1,s=u>>1,Z=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,b=n?0:c-1,h=n?1:-1,m=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(d=isNaN(e)?1:0,o=u):(o=Math.floor(Math.log(e)/Math.LN2),e*(a=Math.pow(2,-o))<1&&(o--,a*=2),(e+=o+s>=1?Z/a:Z*Math.pow(2,1-s))*a>=2&&(o++,a/=2),o+s>=u?(d=0,o=u):o+s>=1?(d=(e*a-1)*Math.pow(2,i),o+=s):(d=e*Math.pow(2,s-1)*Math.pow(2,i),o=0));i>=8;t[l+b]=255&d,b+=h,d/=256,i-=8);for(o=o<<i|d,r+=i;r>0;t[l+b]=255&o,b+=h,o/=256,r-=8);t[l+b-h]|=128*m}var tl={}.toString,el=Array.isArray||function(t){return"[object Array]"==tl.call(t)};cl.TYPED_ARRAY_SUPPORT=void 0===at.TYPED_ARRAY_SUPPORT||at.TYPED_ARRAY_SUPPORT;var ll=nl();function nl(){return cl.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function il(t,e){if(nl()<e)throw new RangeError("Invalid typed array length");return cl.TYPED_ARRAY_SUPPORT?(t=new Uint8Array(e)).__proto__=cl.prototype:(null===t&&(t=new cl(e)),t.length=e),t}function cl(t,e,l){if(!(cl.TYPED_ARRAY_SUPPORT||this instanceof cl))return new cl(t,e,l);if("number"==typeof t){if("string"==typeof e)throw new Error("If encoding is specified then the first argument must be a string");return al(this,t)}return ol(this,t,e,l)}function ol(t,e,l,n){if("number"==typeof e)throw new TypeError('"value" argument must not be a number');return"undefined"!=typeof ArrayBuffer&&e instanceof ArrayBuffer?function(t,e,l,n){if(e.byteLength,l<0||e.byteLength<l)throw new RangeError("'offset' is out of bounds");if(e.byteLength<l+(n||0))throw new RangeError("'length' is out of bounds");return e=void 0===l&&void 0===n?new Uint8Array(e):void 0===n?new Uint8Array(e,l):new Uint8Array(e,l,n),cl.TYPED_ARRAY_SUPPORT?(t=e).__proto__=cl.prototype:t=rl(t,e),t}(t,e,l,n):"string"==typeof e?function(t,e,l){if("string"==typeof l&&""!==l||(l="utf8"),!cl.isEncoding(l))throw new TypeError('"encoding" must be a valid string encoding');var n=0|Zl(e,l),i=(t=il(t,n)).write(e,l);return i!==n&&(t=t.slice(0,i)),t}(t,e,l):function(t,e){if(sl(e)){var l=0|ul(e.length);return 0===(t=il(t,l)).length||e.copy(t,0,0,l),t}if(e){if("undefined"!=typeof ArrayBuffer&&e.buffer instanceof ArrayBuffer||"length"in e)return"number"!=typeof e.length||(n=e.length)!=n?il(t,0):rl(t,e);if("Buffer"===e.type&&el(e.data))return rl(t,e.data)}var n;throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}(t,e)}function dl(t){if("number"!=typeof t)throw new TypeError('"size" argument must be a number');if(t<0)throw new RangeError('"size" argument must not be negative')}function al(t,e){if(dl(e),t=il(t,e<0?0:0|ul(e)),!cl.TYPED_ARRAY_SUPPORT)for(var l=0;l<e;++l)t[l]=0;return t}function rl(t,e){var l=e.length<0?0:0|ul(e.length);t=il(t,l);for(var n=0;n<l;n+=1)t[n]=255&e[n];return t}function ul(t){if(t>=nl())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+nl().toString(16)+" bytes");return 0|t}function sl(t){return!(null==t||!t._isBuffer)}function Zl(t,e){if(sl(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var l=t.length;if(0===l)return 0;for(var n=!1;;)switch(e){case"ascii":case"latin1":case"binary":return l;case"utf8":case"utf-8":case void 0:return Bl(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*l;case"hex":return l>>>1;case"base64":return Fl(t).length;default:if(n)return Bl(t).length;e=(""+e).toLowerCase(),n=!0}}function bl(t,e,l){var n=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===l||l>this.length)&&(l=this.length),l<=0)return"";if((l>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return Yl(this,e,l);case"utf8":case"utf-8":return Cl(this,e,l);case"ascii":return Rl(this,e,l);case"latin1":case"binary":return fl(this,e,l);case"base64":return Wl(this,e,l);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Sl(this,e,l);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}function hl(t,e,l){var n=t[e];t[e]=t[l],t[l]=n}function ml(t,e,l,n,i){if(0===t.length)return-1;if("string"==typeof l?(n=l,l=0):l>2147483647?l=2147483647:l<-2147483648&&(l=-2147483648),l=+l,isNaN(l)&&(l=i?0:t.length-1),l<0&&(l=t.length+l),l>=t.length){if(i)return-1;l=t.length-1}else if(l<0){if(!i)return-1;l=0}if("string"==typeof e&&(e=cl.from(e,n)),sl(e))return 0===e.length?-1:Il(t,e,l,n,i);if("number"==typeof e)return e&=255,cl.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,l):Uint8Array.prototype.lastIndexOf.call(t,e,l):Il(t,[e],l,n,i);throw new TypeError("val must be string, number or Buffer")}function Il(t,e,l,n,i){var c,o=1,d=t.length,a=e.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||e.length<2)return-1;o=2,d/=2,a/=2,l/=2}function r(t,e){return 1===o?t[e]:t.readUInt16BE(e*o)}if(i){var u=-1;for(c=l;c<d;c++)if(r(t,c)===r(e,-1===u?0:c-u)){if(-1===u&&(u=c),c-u+1===a)return u*o}else-1!==u&&(c-=c-u),u=-1}else for(l+a>d&&(l=d-a),c=l;c>=0;c--){for(var s=!0,Z=0;Z<a;Z++)if(r(t,c+Z)!==r(e,Z)){s=!1;break}if(s)return c}return-1}function Gl(t,e,l,n){l=Number(l)||0;var i=t.length-l;n?(n=Number(n))>i&&(n=i):n=i;var c=e.length;if(c%2!=0)throw new TypeError("Invalid hex string");n>c/2&&(n=c/2);for(var o=0;o<n;++o){var d=parseInt(e.substr(2*o,2),16);if(isNaN(d))return o;t[l+o]=d}return o}function pl(t,e,l,n){return Al(Bl(e,t.length-l),t,l,n)}function gl(t,e,l,n){return Al(function(t){for(var e=[],l=0;l<t.length;++l)e.push(255&t.charCodeAt(l));return e}(e),t,l,n)}function Xl(t,e,l,n){return gl(t,e,l,n)}function Vl(t,e,l,n){return Al(Fl(e),t,l,n)}function yl(t,e,l,n){return Al(function(t,e){for(var l,n,i,c=[],o=0;o<t.length&&!((e-=2)<0);++o)n=(l=t.charCodeAt(o))>>8,i=l%256,c.push(i),c.push(n);return c}(e,t.length-l),t,l,n)}function Wl(t,e,l){return 0===e&&l===t.length?_e(t):_e(t.slice(e,l))}function Cl(t,e,l){l=Math.min(t.length,l);for(var n=[],i=e;i<l;){var c,o,d,a,r=t[i],u=null,s=r>239?4:r>223?3:r>191?2:1;if(i+s<=l)switch(s){case 1:r<128&&(u=r);break;case 2:128==(192&(c=t[i+1]))&&(a=(31&r)<<6|63&c)>127&&(u=a);break;case 3:c=t[i+1],o=t[i+2],128==(192&c)&&128==(192&o)&&(a=(15&r)<<12|(63&c)<<6|63&o)>2047&&(a<55296||a>57343)&&(u=a);break;case 4:c=t[i+1],o=t[i+2],d=t[i+3],128==(192&c)&&128==(192&o)&&128==(192&d)&&(a=(15&r)<<18|(63&c)<<12|(63&o)<<6|63&d)>65535&&a<1114112&&(u=a)}null===u?(u=65533,s=1):u>65535&&(u-=65536,n.push(u>>>10&1023|55296),u=56320|1023&u),n.push(u),i+=s}return function(t){var e=t.length;if(e<=4096)return String.fromCharCode.apply(String,t);for(var l="",n=0;n<e;)l+=String.fromCharCode.apply(String,t.slice(n,n+=4096));return l}(n)}function Rl(t,e,l){var n="";l=Math.min(t.length,l);for(var i=e;i<l;++i)n+=String.fromCharCode(127&t[i]);return n}function fl(t,e,l){var n="";l=Math.min(t.length,l);for(var i=e;i<l;++i)n+=String.fromCharCode(t[i]);return n}function Yl(t,e,l){var n=t.length;(!e||e<0)&&(e=0),(!l||l<0||l>n)&&(l=n);for(var i="",c=e;c<l;++c)i+=Tl(t[c]);return i}function Sl(t,e,l){for(var n=t.slice(e,l),i="",c=0;c<n.length;c+=2)i+=String.fromCharCode(n[c]+256*n[c+1]);return i}function vl(t,e,l){if(t%1!=0||t<0)throw new RangeError("offset is not uint");if(t+e>l)throw new RangeError("Trying to access beyond buffer length")}function Kl(t,e,l,n,i,c){if(!sl(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>i||e<c)throw new RangeError('"value" argument is out of bounds');if(l+n>t.length)throw new RangeError("Index out of range")}function Nl(t,e,l,n){e<0&&(e=65535+e+1);for(var i=0,c=Math.min(t.length-l,2);i<c;++i)t[l+i]=(e&255<<8*(n?i:1-i))>>>8*(n?i:1-i)}function Jl(t,e,l,n){e<0&&(e=4294967295+e+1);for(var i=0,c=Math.min(t.length-l,4);i<c;++i)t[l+i]=e>>>8*(n?i:3-i)&255}function Hl(t,e,l,n,i,c){if(l+n>t.length)throw new RangeError("Index out of range");if(l<0)throw new RangeError("Index out of range")}function Ul(t,e,l,n,i){return i||Hl(t,0,l,4),$e(t,e,l,n,23,4),l+4}function Ll(t,e,l,n,i){return i||Hl(t,0,l,8),$e(t,e,l,n,52,8),l+8}cl.poolSize=8192,cl._augment=function(t){return t.__proto__=cl.prototype,t},cl.from=function(t,e,l){return ol(null,t,e,l)},cl.TYPED_ARRAY_SUPPORT&&(cl.prototype.__proto__=Uint8Array.prototype,cl.__proto__=Uint8Array),cl.alloc=function(t,e,l){return function(t,e,l,n){return dl(e),e<=0?il(t,e):void 0!==l?"string"==typeof n?il(t,e).fill(l,n):il(t,e).fill(l):il(t,e)}(null,t,e,l)},cl.allocUnsafe=function(t){return al(null,t)},cl.allocUnsafeSlow=function(t){return al(null,t)},cl.isBuffer=xl,cl.compare=function(t,e){if(!sl(t)||!sl(e))throw new TypeError("Arguments must be Buffers");if(t===e)return 0;for(var l=t.length,n=e.length,i=0,c=Math.min(l,n);i<c;++i)if(t[i]!==e[i]){l=t[i],n=e[i];break}return l<n?-1:n<l?1:0},cl.isEncoding=function(t){switch(String(t).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}},cl.concat=function(t,e){if(!el(t))throw new TypeError('"list" argument must be an Array of Buffers');if(0===t.length)return cl.alloc(0);var l;if(void 0===e)for(e=0,l=0;l<t.length;++l)e+=t[l].length;var n=cl.allocUnsafe(e),i=0;for(l=0;l<t.length;++l){var c=t[l];if(!sl(c))throw new TypeError('"list" argument must be an Array of Buffers');c.copy(n,i),i+=c.length}return n},cl.byteLength=Zl,cl.prototype._isBuffer=!0,cl.prototype.swap16=function(){var t=this.length;if(t%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var e=0;e<t;e+=2)hl(this,e,e+1);return this},cl.prototype.swap32=function(){var t=this.length;if(t%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var e=0;e<t;e+=4)hl(this,e,e+3),hl(this,e+1,e+2);return this},cl.prototype.swap64=function(){var t=this.length;if(t%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var e=0;e<t;e+=8)hl(this,e,e+7),hl(this,e+1,e+6),hl(this,e+2,e+5),hl(this,e+3,e+4);return this},cl.prototype.toString=function(){var t=0|this.length;return 0===t?"":0===arguments.length?Cl(this,0,t):bl.apply(this,arguments)},cl.prototype.equals=function(t){if(!sl(t))throw new TypeError("Argument must be a Buffer");return this===t||0===cl.compare(this,t)},cl.prototype.inspect=function(){var t="";return this.length>0&&(t=this.toString("hex",0,50).match(/.{2}/g).join(" "),this.length>50&&(t+=" ... ")),"<Buffer "+t+">"},cl.prototype.compare=function(t,e,l,n,i){if(!sl(t))throw new TypeError("Argument must be a Buffer");if(void 0===e&&(e=0),void 0===l&&(l=t?t.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),e<0||l>t.length||n<0||i>this.length)throw new RangeError("out of range index");if(n>=i&&e>=l)return 0;if(n>=i)return-1;if(e>=l)return 1;if(this===t)return 0;for(var c=(i>>>=0)-(n>>>=0),o=(l>>>=0)-(e>>>=0),d=Math.min(c,o),a=this.slice(n,i),r=t.slice(e,l),u=0;u<d;++u)if(a[u]!==r[u]){c=a[u],o=r[u];break}return c<o?-1:o<c?1:0},cl.prototype.includes=function(t,e,l){return-1!==this.indexOf(t,e,l)},cl.prototype.indexOf=function(t,e,l){return ml(this,t,e,l,!0)},cl.prototype.lastIndexOf=function(t,e,l){return ml(this,t,e,l,!1)},cl.prototype.write=function(t,e,l,n){if(void 0===e)n="utf8",l=this.length,e=0;else if(void 0===l&&"string"==typeof e)n=e,l=this.length,e=0;else{if(!isFinite(e))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");e|=0,isFinite(l)?(l|=0,void 0===n&&(n="utf8")):(n=l,l=void 0)}var i=this.length-e;if((void 0===l||l>i)&&(l=i),t.length>0&&(l<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var c=!1;;)switch(n){case"hex":return Gl(this,t,e,l);case"utf8":case"utf-8":return pl(this,t,e,l);case"ascii":return gl(this,t,e,l);case"latin1":case"binary":return Xl(this,t,e,l);case"base64":return Vl(this,t,e,l);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return yl(this,t,e,l);default:if(c)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),c=!0}},cl.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}},cl.prototype.slice=function(t,e){var l,n=this.length;if((t=~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),(e=void 0===e?n:~~e)<0?(e+=n)<0&&(e=0):e>n&&(e=n),e<t&&(e=t),cl.TYPED_ARRAY_SUPPORT)(l=this.subarray(t,e)).__proto__=cl.prototype;else{var i=e-t;l=new cl(i,void 0);for(var c=0;c<i;++c)l[c]=this[c+t]}return l},cl.prototype.readUIntLE=function(t,e,l){t|=0,e|=0,l||vl(t,e,this.length);for(var n=this[t],i=1,c=0;++c<e&&(i*=256);)n+=this[t+c]*i;return n},cl.prototype.readUIntBE=function(t,e,l){t|=0,e|=0,l||vl(t,e,this.length);for(var n=this[t+--e],i=1;e>0&&(i*=256);)n+=this[t+--e]*i;return n},cl.prototype.readUInt8=function(t,e){return e||vl(t,1,this.length),this[t]},cl.prototype.readUInt16LE=function(t,e){return e||vl(t,2,this.length),this[t]|this[t+1]<<8},cl.prototype.readUInt16BE=function(t,e){return e||vl(t,2,this.length),this[t]<<8|this[t+1]},cl.prototype.readUInt32LE=function(t,e){return e||vl(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},cl.prototype.readUInt32BE=function(t,e){return e||vl(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},cl.prototype.readIntLE=function(t,e,l){t|=0,e|=0,l||vl(t,e,this.length);for(var n=this[t],i=1,c=0;++c<e&&(i*=256);)n+=this[t+c]*i;return n>=(i*=128)&&(n-=Math.pow(2,8*e)),n},cl.prototype.readIntBE=function(t,e,l){t|=0,e|=0,l||vl(t,e,this.length);for(var n=e,i=1,c=this[t+--n];n>0&&(i*=256);)c+=this[t+--n]*i;return c>=(i*=128)&&(c-=Math.pow(2,8*e)),c},cl.prototype.readInt8=function(t,e){return e||vl(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},cl.prototype.readInt16LE=function(t,e){e||vl(t,2,this.length);var l=this[t]|this[t+1]<<8;return 32768&l?4294901760|l:l},cl.prototype.readInt16BE=function(t,e){e||vl(t,2,this.length);var l=this[t+1]|this[t]<<8;return 32768&l?4294901760|l:l},cl.prototype.readInt32LE=function(t,e){return e||vl(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},cl.prototype.readInt32BE=function(t,e){return e||vl(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},cl.prototype.readFloatLE=function(t,e){return e||vl(t,4,this.length),qe(this,t,!0,23,4)},cl.prototype.readFloatBE=function(t,e){return e||vl(t,4,this.length),qe(this,t,!1,23,4)},cl.prototype.readDoubleLE=function(t,e){return e||vl(t,8,this.length),qe(this,t,!0,52,8)},cl.prototype.readDoubleBE=function(t,e){return e||vl(t,8,this.length),qe(this,t,!1,52,8)},cl.prototype.writeUIntLE=function(t,e,l,n){t=+t,e|=0,l|=0,n||Kl(this,t,e,l,Math.pow(2,8*l)-1,0);var i=1,c=0;for(this[e]=255&t;++c<l&&(i*=256);)this[e+c]=t/i&255;return e+l},cl.prototype.writeUIntBE=function(t,e,l,n){t=+t,e|=0,l|=0,n||Kl(this,t,e,l,Math.pow(2,8*l)-1,0);var i=l-1,c=1;for(this[e+i]=255&t;--i>=0&&(c*=256);)this[e+i]=t/c&255;return e+l},cl.prototype.writeUInt8=function(t,e,l){return t=+t,e|=0,l||Kl(this,t,e,1,255,0),cl.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[e]=255&t,e+1},cl.prototype.writeUInt16LE=function(t,e,l){return t=+t,e|=0,l||Kl(this,t,e,2,65535,0),cl.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):Nl(this,t,e,!0),e+2},cl.prototype.writeUInt16BE=function(t,e,l){return t=+t,e|=0,l||Kl(this,t,e,2,65535,0),cl.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):Nl(this,t,e,!1),e+2},cl.prototype.writeUInt32LE=function(t,e,l){return t=+t,e|=0,l||Kl(this,t,e,4,4294967295,0),cl.TYPED_ARRAY_SUPPORT?(this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t):Jl(this,t,e,!0),e+4},cl.prototype.writeUInt32BE=function(t,e,l){return t=+t,e|=0,l||Kl(this,t,e,4,4294967295,0),cl.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):Jl(this,t,e,!1),e+4},cl.prototype.writeIntLE=function(t,e,l,n){if(t=+t,e|=0,!n){var i=Math.pow(2,8*l-1);Kl(this,t,e,l,i-1,-i)}var c=0,o=1,d=0;for(this[e]=255&t;++c<l&&(o*=256);)t<0&&0===d&&0!==this[e+c-1]&&(d=1),this[e+c]=(t/o>>0)-d&255;return e+l},cl.prototype.writeIntBE=function(t,e,l,n){if(t=+t,e|=0,!n){var i=Math.pow(2,8*l-1);Kl(this,t,e,l,i-1,-i)}var c=l-1,o=1,d=0;for(this[e+c]=255&t;--c>=0&&(o*=256);)t<0&&0===d&&0!==this[e+c+1]&&(d=1),this[e+c]=(t/o>>0)-d&255;return e+l},cl.prototype.writeInt8=function(t,e,l){return t=+t,e|=0,l||Kl(this,t,e,1,127,-128),cl.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[e]=255&t,e+1},cl.prototype.writeInt16LE=function(t,e,l){return t=+t,e|=0,l||Kl(this,t,e,2,32767,-32768),cl.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):Nl(this,t,e,!0),e+2},cl.prototype.writeInt16BE=function(t,e,l){return t=+t,e|=0,l||Kl(this,t,e,2,32767,-32768),cl.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):Nl(this,t,e,!1),e+2},cl.prototype.writeInt32LE=function(t,e,l){return t=+t,e|=0,l||Kl(this,t,e,4,2147483647,-2147483648),cl.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24):Jl(this,t,e,!0),e+4},cl.prototype.writeInt32BE=function(t,e,l){return t=+t,e|=0,l||Kl(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),cl.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):Jl(this,t,e,!1),e+4},cl.prototype.writeFloatLE=function(t,e,l){return Ul(this,t,e,!0,l)},cl.prototype.writeFloatBE=function(t,e,l){return Ul(this,t,e,!1,l)},cl.prototype.writeDoubleLE=function(t,e,l){return Ll(this,t,e,!0,l)},cl.prototype.writeDoubleBE=function(t,e,l){return Ll(this,t,e,!1,l)},cl.prototype.copy=function(t,e,l,n){if(l||(l=0),n||0===n||(n=this.length),e>=t.length&&(e=t.length),e||(e=0),n>0&&n<l&&(n=l),n===l)return 0;if(0===t.length||0===this.length)return 0;if(e<0)throw new RangeError("targetStart out of bounds");if(l<0||l>=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),t.length-e<n-l&&(n=t.length-e+l);var i,c=n-l;if(this===t&&l<e&&e<n)for(i=c-1;i>=0;--i)t[i+e]=this[i+l];else if(c<1e3||!cl.TYPED_ARRAY_SUPPORT)for(i=0;i<c;++i)t[i+e]=this[i+l];else Uint8Array.prototype.set.call(t,this.subarray(l,l+c),e);return c},cl.prototype.fill=function(t,e,l,n){if("string"==typeof t){if("string"==typeof e?(n=e,e=0,l=this.length):"string"==typeof l&&(n=l,l=this.length),1===t.length){var i=t.charCodeAt(0);i<256&&(t=i)}if(void 0!==n&&"string"!=typeof n)throw new TypeError("encoding must be a string");if("string"==typeof n&&!cl.isEncoding(n))throw new TypeError("Unknown encoding: "+n)}else"number"==typeof t&&(t&=255);if(e<0||this.length<e||this.length<l)throw new RangeError("Out of range index");if(l<=e)return this;var c;if(e>>>=0,l=void 0===l?this.length:l>>>0,t||(t=0),"number"==typeof t)for(c=e;c<l;++c)this[c]=t;else{var o=sl(t)?t:Bl(new cl(t,n).toString()),d=o.length;for(c=0;c<l-e;++c)this[c+e]=o[c%d]}return this};var kl=/[^+\/0-9A-Za-z-_]/g;function Tl(t){return t<16?"0"+t.toString(16):t.toString(16)}function Bl(t,e){var l;e=e||1/0;for(var n=t.length,i=null,c=[],o=0;o<n;++o){if((l=t.charCodeAt(o))>55295&&l<57344){if(!i){if(l>56319){(e-=3)>-1&&c.push(239,191,189);continue}if(o+1===n){(e-=3)>-1&&c.push(239,191,189);continue}i=l;continue}if(l<56320){(e-=3)>-1&&c.push(239,191,189),i=l;continue}l=65536+(i-55296<<10|l-56320)}else i&&(e-=3)>-1&&c.push(239,191,189);if(i=null,l<128){if((e-=1)<0)break;c.push(l)}else if(l<2048){if((e-=2)<0)break;c.push(l>>6|192,63&l|128)}else if(l<65536){if((e-=3)<0)break;c.push(l>>12|224,l>>6&63|128,63&l|128)}else{if(!(l<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;c.push(l>>18|240,l>>12&63|128,l>>6&63|128,63&l|128)}}return c}function Fl(t){return function(t){var e,l,n,i,c,o;Ee||De();var d=t.length;if(d%4>0)throw new Error("Invalid string. Length must be a multiple of 4");c="="===t[d-2]?2:"="===t[d-1]?1:0,o=new Me(3*d/4-c),n=c>0?d-4:d;var a=0;for(e=0,l=0;e<n;e+=4,l+=3)i=je[t.charCodeAt(e)]<<18|je[t.charCodeAt(e+1)]<<12|je[t.charCodeAt(e+2)]<<6|je[t.charCodeAt(e+3)],o[a++]=i>>16&255,o[a++]=i>>8&255,o[a++]=255&i;return 2===c?(i=je[t.charCodeAt(e)]<<2|je[t.charCodeAt(e+1)]>>4,o[a++]=255&i):1===c&&(i=je[t.charCodeAt(e)]<<10|je[t.charCodeAt(e+1)]<<4|je[t.charCodeAt(e+2)]>>2,o[a++]=i>>8&255,o[a++]=255&i),o}(function(t){if((t=function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}(t).replace(kl,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function Al(t,e,l,n){for(var i=0;i<n&&!(i+l>=e.length||i>=t.length);++i)e[i+l]=t[i];return i}function xl(t){return null!=t&&(!!t._isBuffer||zl(t)||function(t){return"function"==typeof t.readFloatLE&&"function"==typeof t.slice&&zl(t.slice(0,0))}(t))}function zl(t){return!!t.constructor&&"function"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)}var wl=Object.freeze({__proto__:null,Buffer:cl,INSPECT_MAX_BYTES:50,SlowBuffer:function(t){return+t!=t&&(t=0),cl.alloc(+t)},isBuffer:xl,kMaxLength:ll}),Ql={exports:{}},Pl={},jl={};Object.defineProperty(jl,"__esModule",{value:!0}),jl.default=function(t){var e=t.length,l=e%4;if(!l)return t;var n=e,i=4-l,c=e+i,o=cl.alloc(c);for(o.write(t);i--;)o.write("=",n++);return o.toString()},Object.defineProperty(Pl,"__esModule",{value:!0});var Ml=jl;function El(t,e){return void 0===e&&(e="utf8"),cl.isBuffer(t)?Ol(t.toString("base64")):Ol(cl.from(t,e).toString("base64"))}function Dl(t){return t=t.toString(),Ml.default(t).replace(/\-/g,"+").replace(/_/g,"/")}function Ol(t){return t.replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}var _l,ql=El;ql.encode=El,ql.decode=function(t,e){return void 0===e&&(e="utf8"),cl.from(Dl(t),"base64").toString(e)},ql.toBase64=Dl,ql.fromBase64=Ol,ql.toBuffer=function(t){return cl.from(Dl(t),"base64")},Pl.default=ql,(_l=Ql).exports=Pl.default,_l.exports.default=_l.exports;var $l=Ql.exports,tn={exports:{}};!function(t){!function(e,l){var n={};!function(t){t.__esModule=!0,t.digestLength=32,t.blockSize=64;var e=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 l(t,l,n,i,c){for(var o,d,a,r,u,s,Z,b,h,m,I,G,p;c>=64;){for(o=l[0],d=l[1],a=l[2],r=l[3],u=l[4],s=l[5],Z=l[6],b=l[7],m=0;m<16;m++)I=i+4*m,t[m]=(255&n[I])<<24|(255&n[I+1])<<16|(255&n[I+2])<<8|255&n[I+3];for(m=16;m<64;m++)G=((h=t[m-2])>>>17|h<<15)^(h>>>19|h<<13)^h>>>10,p=((h=t[m-15])>>>7|h<<25)^(h>>>18|h<<14)^h>>>3,t[m]=(G+t[m-7]|0)+(p+t[m-16]|0);for(m=0;m<64;m++)G=(((u>>>6|u<<26)^(u>>>11|u<<21)^(u>>>25|u<<7))+(u&s^~u&Z)|0)+(b+(e[m]+t[m]|0)|0)|0,p=((o>>>2|o<<30)^(o>>>13|o<<19)^(o>>>22|o<<10))+(o&d^o&a^d&a)|0,b=Z,Z=s,s=u,u=r+G|0,r=a,a=d,d=o,o=G+p|0;l[0]+=o,l[1]+=d,l[2]+=a,l[3]+=r,l[4]+=u,l[5]+=s,l[6]+=Z,l[7]+=b,i+=64,c-=64}return i}var n=function(){function e(){this.digestLength=t.digestLength,this.blockSize=t.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 e.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},e.prototype.clean=function(){for(var t=0;t<this.buffer.length;t++)this.buffer[t]=0;for(t=0;t<this.temp.length;t++)this.temp[t]=0;this.reset()},e.prototype.update=function(t,e){if(void 0===e&&(e=t.length),this.finished)throw new Error("SHA256: can't update because hash was finished.");var n=0;if(this.bytesHashed+=e,this.bufferLength>0){for(;this.bufferLength<64&&e>0;)this.buffer[this.bufferLength++]=t[n++],e--;64===this.bufferLength&&(l(this.temp,this.state,this.buffer,0,64),this.bufferLength=0)}for(e>=64&&(n=l(this.temp,this.state,t,n,e),e%=64);e>0;)this.buffer[this.bufferLength++]=t[n++],e--;return this},e.prototype.finish=function(t){if(!this.finished){var e=this.bytesHashed,n=this.bufferLength,i=e/536870912|0,c=e<<3,o=e%64<56?64:128;this.buffer[n]=128;for(var d=n+1;d<o-8;d++)this.buffer[d]=0;this.buffer[o-8]=i>>>24&255,this.buffer[o-7]=i>>>16&255,this.buffer[o-6]=i>>>8&255,this.buffer[o-5]=i>>>0&255,this.buffer[o-4]=c>>>24&255,this.buffer[o-3]=c>>>16&255,this.buffer[o-2]=c>>>8&255,this.buffer[o-1]=c>>>0&255,l(this.temp,this.state,this.buffer,0,o),this.finished=!0}for(d=0;d<8;d++)t[4*d+0]=this.state[d]>>>24&255,t[4*d+1]=this.state[d]>>>16&255,t[4*d+2]=this.state[d]>>>8&255,t[4*d+3]=this.state[d]>>>0&255;return this},e.prototype.digest=function(){var t=new Uint8Array(this.digestLength);return this.finish(t),t},e.prototype._saveState=function(t){for(var e=0;e<this.state.length;e++)t[e]=this.state[e]},e.prototype._restoreState=function(t,e){for(var l=0;l<this.state.length;l++)this.state[l]=t[l];this.bytesHashed=e,this.finished=!1,this.bufferLength=0},e}();t.Hash=n;var i=function(){function t(t){this.inner=new n,this.outer=new n,this.blockSize=this.inner.blockSize,this.digestLength=this.inner.digestLength;var e=new Uint8Array(this.blockSize);if(t.length>this.blockSize)(new n).update(t).finish(e).clean();else for(var l=0;l<t.length;l++)e[l]=t[l];for(l=0;l<e.length;l++)e[l]^=54;for(this.inner.update(e),l=0;l<e.length;l++)e[l]^=106;for(this.outer.update(e),this.istate=new Uint32Array(8),this.ostate=new Uint32Array(8),this.inner._saveState(this.istate),this.outer._saveState(this.ostate),l=0;l<e.length;l++)e[l]=0}return t.prototype.reset=function(){return this.inner._restoreState(this.istate,this.inner.blockSize),this.outer._restoreState(this.ostate,this.outer.blockSize),this},t.prototype.clean=function(){for(var t=0;t<this.istate.length;t++)this.ostate[t]=this.istate[t]=0;this.inner.clean(),this.outer.clean()},t.prototype.update=function(t){return this.inner.update(t),this},t.prototype.finish=function(t){return this.outer.finished?this.outer.finish(t):(this.inner.finish(t),this.outer.update(t,this.digestLength).finish(t)),this},t.prototype.digest=function(){var t=new Uint8Array(this.digestLength);return this.finish(t),t},t}();function c(t){var e=(new n).update(t),l=e.digest();return e.clean(),l}function o(t,e){var l=new i(t).update(e),n=l.digest();return l.clean(),n}function d(t,e,l,n){var i=n[0];if(0===i)throw new Error("hkdf: cannot expand more");e.reset(),i>1&&e.update(t),l&&e.update(l),e.update(n),e.finish(t),n[0]++}t.HMAC=i,t.hash=c,t.default=c,t.hmac=o;var a=new Uint8Array(t.digestLength);t.hkdf=function(t,e,l,n){void 0===e&&(e=a),void 0===n&&(n=32);for(var c=new Uint8Array([1]),r=o(e,t),u=new i(r),s=new Uint8Array(u.digestLength),Z=s.length,b=new Uint8Array(n),h=0;h<n;h++)Z===s.length&&(d(s,u,l,c),Z=0),b[h]=s[Z++];return u.clean(),s.fill(0),c.fill(0),b},t.pbkdf2=function(t,e,l,n){for(var c=new i(t),o=c.digestLength,d=new Uint8Array(4),a=new Uint8Array(o),r=new Uint8Array(o),u=new Uint8Array(n),s=0;s*o<n;s++){var Z=s+1;d[0]=Z>>>24&255,d[1]=Z>>>16&255,d[2]=Z>>>8&255,d[3]=Z>>>0&255,c.reset(),c.update(e),c.update(d),c.finish(r);for(var b=0;b<o;b++)a[b]=r[b];for(b=2;b<=l;b++){c.reset(),c.update(r).finish(r);for(var h=0;h<o;h++)a[h]^=r[h]}for(b=0;b<o&&s*o+b<n;b++)u[s*o+b]=a[b]}for(s=0;s<o;s++)a[s]=r[s]=0;for(s=0;s<4;s++)d[s]=0;return c.clean(),u}}(n);var i=n.default;for(var c in n)i[c]=n[c];t.exports=i}()}(tn);var en=function(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}(tn.exports),ln=crypto;const nn=t=>t instanceof CryptoKey,cn=new TextEncoder,on=new TextDecoder,dn=t=>{let e=t;e instanceof Uint8Array&&(e=on.decode(e)),e=e.replace(/-/g,"+").replace(/_/g,"/").replace(/\s/g,"");try{return(t=>{const e=atob(t),l=new Uint8Array(e.length);for(let t=0;t<e.length;t++)l[t]=e.charCodeAt(t);return l})(e)}catch(t){throw new TypeError("The input to be decoded is not correctly encoded.")}};class an extends Error{constructor(t){var e;super(t),this.code="ERR_JOSE_GENERIC",this.name=this.constructor.name,null===(e=Error.captureStackTrace)||void 0===e||e.call(Error,this,this.constructor)}static get code(){return"ERR_JOSE_GENERIC"}}class rn extends an{constructor(t,e="unspecified",l="unspecified"){super(t),this.code="ERR_JWT_CLAIM_VALIDATION_FAILED",this.claim=e,this.reason=l}static get code(){return"ERR_JWT_CLAIM_VALIDATION_FAILED"}}class un extends an{constructor(t,e="unspecified",l="unspecified"){super(t),this.code="ERR_JWT_EXPIRED",this.claim=e,this.reason=l}static get code(){return"ERR_JWT_EXPIRED"}}class sn extends an{constructor(){super(...arguments),this.code="ERR_JOSE_ALG_NOT_ALLOWED"}static get code(){return"ERR_JOSE_ALG_NOT_ALLOWED"}}class Zn extends an{constructor(){super(...arguments),this.code="ERR_JOSE_NOT_SUPPORTED"}static get code(){return"ERR_JOSE_NOT_SUPPORTED"}}class bn extends an{constructor(){super(...arguments),this.code="ERR_JWS_INVALID"}static get code(){return"ERR_JWS_INVALID"}}class hn extends an{constructor(){super(...arguments),this.code="ERR_JWT_INVALID"}static get code(){return"ERR_JWT_INVALID"}}class mn extends an{constructor(){super(...arguments),this.code="ERR_JWKS_INVALID"}static get code(){return"ERR_JWKS_INVALID"}}class In extends an{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 Gn extends an{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 pn extends an{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 gn(){return"function"==typeof WebSocketPair}function Xn(){try{return void 0!==Jt.versions.node}catch(t){return!1}}function Vn(t,e="algorithm.name"){return new TypeError(`CryptoKey does not support this operation, its ${e} must be ${t}`)}function yn(t,e){return t.name===e}function Wn(t){return parseInt(t.name.slice(4),10)}var Cn=(t,...e)=>{let l="Key must be ";if(e.length>2){const t=e.pop();l+=`one of type ${e.join(", ")}, or ${t}.`}else 2===e.length?l+=`one of type ${e[0]} or ${e[1]}.`:l+=`of type ${e[0]}.`;return null==t?l+=" Received "+t:"function"==typeof t&&t.name?l+=" Received function "+t.name:"object"==typeof t&&null!=t&&t.constructor&&t.constructor.name&&(l+=" Received an instance of "+t.constructor.name),l},Rn=t=>nn(t);const fn=["CryptoKey"];function Yn(t){if("object"!=typeof(e=t)||null===e||"[object Object]"!==Object.prototype.toString.call(t))return!1;var e;if(null===Object.getPrototypeOf(t))return!0;let l=t;for(;null!==Object.getPrototypeOf(l);)l=Object.getPrototypeOf(l);return Object.getPrototypeOf(t)===l}const Sn=async t=>{var e,l;const{algorithm:n,keyUsages:i}=function(t){let e,l;switch(t.kty){case"oct":switch(t.alg){case"HS256":case"HS384":case"HS512":e={name:"HMAC",hash:"SHA-"+t.alg.slice(-3)},l=["sign","verify"];break;case"A128CBC-HS256":case"A192CBC-HS384":case"A256CBC-HS512":throw new Zn(t.alg+" keys cannot be imported as CryptoKey instances");case"A128GCM":case"A192GCM":case"A256GCM":case"A128GCMKW":case"A192GCMKW":case"A256GCMKW":e={name:"AES-GCM"},l=["encrypt","decrypt"];break;case"A128KW":case"A192KW":case"A256KW":e={name:"AES-KW"},l=["wrapKey","unwrapKey"];break;case"PBES2-HS256+A128KW":case"PBES2-HS384+A192KW":case"PBES2-HS512+A256KW":e={name:"PBKDF2"},l=["deriveBits"];break;default:throw new Zn('Invalid or unsupported JWK "alg" (Algorithm) Parameter value')}break;case"RSA":switch(t.alg){case"PS256":case"PS384":case"PS512":e={name:"RSA-PSS",hash:"SHA-"+t.alg.slice(-3)},l=t.d?["sign"]:["verify"];break;case"RS256":case"RS384":case"RS512":e={name:"RSASSA-PKCS1-v1_5",hash:"SHA-"+t.alg.slice(-3)},l=t.d?["sign"]:["verify"];break;case"RSA-OAEP":case"RSA-OAEP-256":case"RSA-OAEP-384":case"RSA-OAEP-512":e={name:"RSA-OAEP",hash:"SHA-"+(parseInt(t.alg.slice(-3),10)||1)},l=t.d?["decrypt","unwrapKey"]:["encrypt","wrapKey"];break;default:throw new Zn('Invalid or unsupported JWK "alg" (Algorithm) Parameter value')}break;case"EC":switch(t.alg){case"ES256":e={name:"ECDSA",namedCurve:"P-256"},l=t.d?["sign"]:["verify"];break;case"ES384":e={name:"ECDSA",namedCurve:"P-384"},l=t.d?["sign"]:["verify"];break;case"ES512":e={name:"ECDSA",namedCurve:"P-521"},l=t.d?["sign"]:["verify"];break;case"ECDH-ES":case"ECDH-ES+A128KW":case"ECDH-ES+A192KW":case"ECDH-ES+A256KW":e={name:"ECDH",namedCurve:t.crv},l=t.d?["deriveBits"]:[];break;default:throw new Zn('Invalid or unsupported JWK "alg" (Algorithm) Parameter value')}break;case(gn()||Xn())&&"OKP":if("EdDSA"!==t.alg)throw new Zn('Invalid or unsupported JWK "alg" (Algorithm) Parameter value');switch(t.crv){case"Ed25519":e={name:"NODE-ED25519",namedCurve:"NODE-ED25519"},l=t.d?["sign"]:["verify"];break;case Xn()&&"Ed448":e={name:"NODE-ED448",namedCurve:"NODE-ED448"},l=t.d?["sign"]:["verify"];break;default:throw new Zn('Invalid or unsupported JWK "crv" (Subtype of Key Pair) Parameter value')}break;default:throw new Zn('Invalid or unsupported JWK "kty" (Key Type) Parameter value')}return{algorithm:e,keyUsages:l}}(t),c=[n,null!==(e=t.ext)&&void 0!==e&&e,null!==(l=t.key_ops)&&void 0!==l?l:i];if("PBKDF2"===n.name)return ln.subtle.importKey("raw",dn(t.k),...c);const o={...t};return delete o.alg,ln.subtle.importKey("jwk",o,...c)},vn=async(t,e,l,n)=>{const i=await function(t,e,l){if(nn(e))return function(t,e,...l){switch(e){case"HS256":case"HS384":case"HS512":{if(!yn(t.algorithm,"HMAC"))throw Vn("HMAC");const l=parseInt(e.slice(2),10);if(Wn(t.algorithm.hash)!==l)throw Vn("SHA-"+l,"algorithm.hash");break}case"RS256":case"RS384":case"RS512":{if(!yn(t.algorithm,"RSASSA-PKCS1-v1_5"))throw Vn("RSASSA-PKCS1-v1_5");const l=parseInt(e.slice(2),10);if(Wn(t.algorithm.hash)!==l)throw Vn("SHA-"+l,"algorithm.hash");break}case"PS256":case"PS384":case"PS512":{if(!yn(t.algorithm,"RSA-PSS"))throw Vn("RSA-PSS");const l=parseInt(e.slice(2),10);if(Wn(t.algorithm.hash)!==l)throw Vn("SHA-"+l,"algorithm.hash");break}case Xn()&&"EdDSA":if("NODE-ED25519"!==t.algorithm.name&&"NODE-ED448"!==t.algorithm.name)throw Vn("NODE-ED25519 or NODE-ED448");break;case gn()&&"EdDSA":if(!yn(t.algorithm,"NODE-ED25519"))throw Vn("NODE-ED25519");break;case"ES256":case"ES384":case"ES512":{if(!yn(t.algorithm,"ECDSA"))throw Vn("ECDSA");const l=function(t){switch(t){case"ES256":return"P-256";case"ES384":return"P-384";case"ES512":return"P-521";default:throw new Error("unreachable")}}(e);if(t.algorithm.namedCurve!==l)throw Vn(l,"algorithm.namedCurve");break}default:throw new TypeError("CryptoKey does not support this operation")}!function(t,e){if(e.length&&!e.some(e=>t.usages.includes(e))){let t="CryptoKey does not support this operation, its usages must include ";if(e.length>2){const l=e.pop();t+=`one of ${e.join(", ")}, or ${l}.`}else 2===e.length?t+=`one of ${e[0]} or ${e[1]}.`:t+=e[0]+".";throw new TypeError(t)}}(t,l)}(e,t,l),e;if(e instanceof Uint8Array){if(!t.startsWith("HS"))throw new TypeError(Cn(e,...fn));return ln.subtle.importKey("raw",e,{hash:"SHA-"+t.slice(-3),name:"HMAC"},!1,[l])}throw new TypeError(Cn(e,...fn,"Uint8Array"))}(t,e,"verify");((t,e)=>{if(t.startsWith("RS")||t.startsWith("PS")){const{modulusLength:l}=e.algorithm;if("number"!=typeof l||l<2048)throw new TypeError(t+" requires key modulusLength to be 2048 bits or larger")}})(t,i);const c=function(t,e){const l="SHA-"+t.slice(-3);switch(t){case"HS256":case"HS384":case"HS512":return{hash:l,name:"HMAC"};case"PS256":case"PS384":case"PS512":return{hash:l,name:"RSA-PSS",saltLength:t.slice(-3)>>3};case"RS256":case"RS384":case"RS512":return{hash:l,name:"RSASSA-PKCS1-v1_5"};case"ES256":case"ES384":case"ES512":return{hash:l,name:"ECDSA",namedCurve:e.namedCurve};case(gn()||Xn())&&"EdDSA":const{namedCurve:n}=e;return{name:n,namedCurve:n};default:throw new Zn(`alg ${t} is not supported either by JOSE or your javascript runtime`)}}(t,i.algorithm);try{return await ln.subtle.verify(c,i,l,n)}catch(t){return!1}};async function Kn(t,e,l){var n;if(!Yn(t))throw new bn("Flattened JWS must be an object");if(void 0===t.protected&&void 0===t.header)throw new bn('Flattened JWS must have either of the "protected" or "header" members');if(void 0!==t.protected&&"string"!=typeof t.protected)throw new bn("JWS Protected Header incorrect type");if(void 0===t.payload)throw new bn("JWS Payload missing");if("string"!=typeof t.signature)throw new bn("JWS Signature missing or incorrect type");if(void 0!==t.header&&!Yn(t.header))throw new bn("JWS Unprotected Header incorrect type");let i={};if(t.protected){const e=dn(t.protected);try{i=JSON.parse(on.decode(e))}catch(t){throw new bn("JWS Protected Header is invalid")}}if(!((...t)=>{const e=t.filter(Boolean);if(0===e.length||1===e.length)return!0;let l;for(const t of e){const e=Object.keys(t);if(l&&0!==l.size)for(const t of e){if(l.has(t))return!1;l.add(t)}else l=new Set(e)}return!0})(i,t.header))throw new bn("JWS Protected and JWS Unprotected Header Parameter names must be disjoint");const c={...i,...t.header};let o=!0;if(function(t,e,l,n,i){if(void 0!==i.crit&&void 0===n.crit)throw new t('"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(t=>"string"!=typeof t||0===t.length))throw new t('"crit" (Critical) Header Parameter MUST be an array of non-empty strings when present');let c;c=void 0!==l?new Map([...Object.entries(l),...e.entries()]):e;for(const e of n.crit){if(!c.has(e))throw new Zn(`Extension Header Parameter "${e}" is not recognized`);if(void 0===i[e])throw new t(`Extension Header Parameter "${e}" is missing`);if(c.get(e)&&void 0===n[e])throw new t(`Extension Header Parameter "${e}" MUST be integrity protected`)}return new Set(n.crit)}(bn,new Map([["b64",!0]]),null==l?void 0:l.crit,i,c).has("b64")&&(o=i.b64,"boolean"!=typeof o))throw new bn('The "b64" (base64url-encode payload) Header Parameter must be a boolean');const{alg:d}=c;if("string"!=typeof d||!d)throw new bn('JWS "alg" (Algorithm) Header Parameter missing or invalid');const a=l&&((t,e)=>{if(void 0!==e&&(!Array.isArray(e)||e.some(t=>"string"!=typeof t)))throw new TypeError('"algorithms" option must be an array of strings');if(e)return new Set(e)})(0,l.algorithms);if(a&&!a.has(d))throw new sn('"alg" (Algorithm) Header Parameter not allowed');if(o){if("string"!=typeof t.payload)throw new bn("JWS Payload must be a string")}else if("string"!=typeof t.payload&&!(t.payload instanceof Uint8Array))throw new bn("JWS Payload must be a string or an Uint8Array instance");let r=!1;"function"==typeof e&&(e=await e(i,t),r=!0),((t,e,l)=>{t.startsWith("HS")||"dir"===t||t.startsWith("PBES2")||/^A\d{3}(?:GCM)?KW$/.test(t)?(t=>{if(!(t instanceof Uint8Array)){if(!Rn(t))throw new TypeError(Cn(t,...fn,"Uint8Array"));if("secret"!==t.type)throw new TypeError(fn.join(" or ")+' instances for symmetric algorithms must be of type "secret"')}})(e):((t,e)=>{if(!Rn(t))throw new TypeError(Cn(t,...fn));if("secret"===t.type)throw new TypeError(fn.join(" or ")+' instances for asymmetric algorithms must not be of type "secret"');if("sign"===e&&"public"===t.type)throw new TypeError(fn.join(" or ")+' instances for asymmetric algorithm signing must be of type "private"');if("decrypt"===e&&"public"===t.type)throw new TypeError(fn.join(" or ")+' instances for asymmetric algorithm decryption must be of type "private"');if(t.algorithm&&"verify"===e&&"private"===t.type)throw new TypeError(fn.join(" or ")+' instances for asymmetric algorithm verifying must be of type "public"');if(t.algorithm&&"encrypt"===e&&"private"===t.type)throw new TypeError(fn.join(" or ")+' instances for asymmetric algorithm encryption must be of type "public"')})(e,l)})(d,e,"verify");const u=function(...t){const e=t.reduce((t,{length:e})=>t+e,0),l=new Uint8Array(e);let n=0;return t.forEach(t=>{l.set(t,n),n+=t.length}),l}(cn.encode(null!==(n=t.protected)&&void 0!==n?n:""),cn.encode("."),"string"==typeof t.payload?cn.encode(t.payload):t.payload),s=dn(t.signature);if(!await vn(d,e,s,u))throw new pn;let Z;Z=o?dn(t.payload):"string"==typeof t.payload?cn.encode(t.payload):t.payload;const b={payload:Z};return void 0!==t.protected&&(b.protectedHeader=i),void 0!==t.header&&(b.unprotectedHeader=t.header),r?{...b,key:e}:b}const Nn=/^(\d+|\d+\.\d+) ?(seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)$/i;var Jn=t=>{const e=Nn.exec(t);if(!e)throw new TypeError("Invalid time period format");const l=parseFloat(e[1]);switch(e[2].toLowerCase()){case"sec":case"secs":case"second":case"seconds":case"s":return Math.round(l);case"minute":case"minutes":case"min":case"mins":case"m":return Math.round(60*l);case"hour":case"hours":case"hr":case"hrs":case"h":return Math.round(3600*l);case"day":case"days":case"d":return Math.round(86400*l);case"week":case"weeks":case"w":return Math.round(604800*l);default:return Math.round(31557600*l)}};const Hn=t=>t.toLowerCase().replace(/^application\//,"");var Un=(t,e,l={})=>{const{typ:n}=l;if(n&&("string"!=typeof t.typ||Hn(t.typ)!==Hn(n)))throw new rn('unexpected "typ" JWT header value',"typ","check_failed");let i;try{i=JSON.parse(on.decode(e))}catch(t){}if(!Yn(i))throw new hn("JWT Claims Set must be a top-level JSON object");const{issuer:c}=l;if(c&&!(Array.isArray(c)?c:[c]).includes(i.iss))throw new rn('unexpected "iss" claim value',"iss","check_failed");const{subject:o}=l;if(o&&i.sub!==o)throw new rn('unexpected "sub" claim value',"sub","check_failed");const{audience:d}=l;if(d&&(r="string"==typeof d?[d]:d,!("string"==typeof(a=i.aud)?r.includes(a):Array.isArray(a)&&r.some(Set.prototype.has.bind(new Set(a))))))throw new rn('unexpected "aud" claim value',"aud","check_failed");var a,r;let u;switch(typeof l.clockTolerance){case"string":u=Jn(l.clockTolerance);break;case"number":u=l.clockTolerance;break;case"undefined":u=0;break;default:throw new TypeError("Invalid clockTolerance option type")}const{currentDate:s}=l,Z=(b=s||new Date,Math.floor(b.getTime()/1e3));var b;if((void 0!==i.iat||l.maxTokenAge)&&"number"!=typeof i.iat)throw new rn('"iat" claim must be a number',"iat","invalid");if(void 0!==i.nbf){if("number"!=typeof i.nbf)throw new rn('"nbf" claim must be a number',"nbf","invalid");if(i.nbf>Z+u)throw new rn('"nbf" claim timestamp check failed',"nbf","check_failed")}if(void 0!==i.exp){if("number"!=typeof i.exp)throw new rn('"exp" claim must be a number',"exp","invalid");if(i.exp<=Z-u)throw new un('"exp" claim timestamp check failed',"exp","check_failed")}if(l.maxTokenAge){const t=Z-i.iat;if(t-u>("number"==typeof l.maxTokenAge?l.maxTokenAge:Jn(l.maxTokenAge)))throw new un('"iat" claim timestamp check failed (too far in the past)',"iat","check_failed");if(t<0-u)throw new rn('"iat" claim timestamp check failed (it should be in the past)',"iat","check_failed")}return i};function Ln(t){return Yn(t)}class kn{constructor(t){if(this._cached=new WeakMap,!function(t){return t&&"object"==typeof t&&Array.isArray(t.keys)&&t.keys.every(Ln)}(t))throw new mn("JSON Web Key Set malformed");var e;this._jwks=(e=t,"function"==typeof structuredClone?structuredClone(e):JSON.parse(JSON.stringify(e)))}async getKey(t,e){const{alg:l,kid:n}={...t,...e.header},i=function(t){switch("string"==typeof t&&t.slice(0,2)){case"RS":case"PS":return"RSA";case"ES":return"EC";case"Ed":return"OKP";default:throw new Zn('Unsupported "alg" value for a JSON Web Key Set')}}(l),c=this._jwks.keys.filter(t=>{let e=i===t.kty;if(e&&"string"==typeof n&&(e=n===t.kid),e&&"string"==typeof t.alg&&(e=l===t.alg),e&&"string"==typeof t.use&&(e="sig"===t.use),e&&Array.isArray(t.key_ops)&&(e=t.key_ops.includes("verify")),e&&"EdDSA"===l&&(e="Ed25519"===t.crv||"Ed448"===t.crv),e)switch(l){case"ES256":e="P-256"===t.crv;break;case"ES256K":e="secp256k1"===t.crv;break;case"ES384":e="P-384"===t.crv;break;case"ES512":e="P-521"===t.crv}return e}),{0:o,length:d}=c;if(0===d)throw new In;if(1!==d)throw new Gn;const a=this._cached.get(o)||this._cached.set(o,{}).get(o);if(void 0===a[l]){const t=await async function(t,e,l){if(!Yn(t))throw new TypeError("JWK must be an object");if(e||(e=t.alg),"string"!=typeof e||!e)throw new TypeError('"alg" argument is required when "jwk.alg" is not present');switch(t.kty){case"oct":if("string"!=typeof t.k||!t.k)throw new TypeError('missing "k" (Key Value) Parameter value');return null!=l||(l=!0!==t.ext),l?Sn({...t,alg:e,ext:!1}):dn(t.k);case"RSA":if(void 0!==t.oth)throw new Zn('RSA JWK "oth" (Other Primes Info) Parameter value is not supported');case"EC":case"OKP":return Sn({...t,alg:e});default:throw new Zn('Unsupported "kty" (Key Type) Parameter value')}}({...o,ext:!0},l);if(t instanceof Uint8Array||"public"!==t.type)throw new mn("JSON Web Key Set members must be public keys");a[l]=t}return a[l]}}var Tn={exports:{}},Bn={exports:{}},Fn=function(t){if(t.__esModule)return t;var e=Object.defineProperty({},"__esModule",{value:!0});return Object.keys(t).forEach((function(l){var n=Object.getOwnPropertyDescriptor(t,l);Object.defineProperty(e,l,n.get?n:{enumerable:!0,get:function(){return t[l]}})})),e}(wl);
|
|
435
|
+
/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */!function(t,e){var l=Fn,n=l.Buffer;function i(t,e){for(var l in t)e[l]=t[l]}function c(t,e,l){return n(t,e,l)}n.from&&n.alloc&&n.allocUnsafe&&n.allocUnsafeSlow?t.exports=l:(i(l,e),e.Buffer=c),c.prototype=Object.create(n.prototype),i(n,c),c.from=function(t,e,l){if("number"==typeof t)throw new TypeError("Argument must not be a number");return n(t,e,l)},c.alloc=function(t,e,l){if("number"!=typeof t)throw new TypeError("Argument must be a number");var i=n(t);return void 0!==e?"string"==typeof l?i.fill(e,l):i.fill(e):i.fill(0),i},c.allocUnsafe=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return n(t)},c.allocUnsafeSlow=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return l.SlowBuffer(t)}}(Bn,Bn.exports);var An=Bn.exports.Buffer,xn=w.crypto||w.msCrypto;xn&&xn.getRandomValues?Tn.exports=function(t,e){if(t>4294967295)throw new RangeError("requested too many random bytes");var l=An.allocUnsafe(t);if(t>0)if(t>65536)for(var n=0;n<t;n+=65536)xn.getRandomValues(l.slice(n,n+65536));else xn.getRandomValues(l);return"function"==typeof e?Jt.nextTick((function(){e(null,l)})):l}:Tn.exports=function(){throw new Error("Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11")};var zn=Tn.exports;class wn{base64URLEncode(t){return $l.encode(t).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}base64URLDecode(t){return $l.decode(t).toString()}hashSha256(t){return cl.from(en((new TextEncoder).encode(t)))}generateRandomBytes(t){return zn(t)}verifyJwt(t,e,l,n,i,c,o){return async function(t,e,l){var n;const i=await async function(t,e,l){if(t instanceof Uint8Array&&(t=on.decode(t)),"string"!=typeof t)throw new bn("Compact JWS must be a string or Uint8Array");const{0:n,1:i,2:c,length:o}=t.split(".");if(3!==o)throw new bn("Invalid Compact JWS");const d=await Kn({payload:i,protected:n,signature:c},e,l),a={payload:d.payload,protectedHeader:d.protectedHeader};return"function"==typeof e?{...a,key:d.key}:a}(t,e,l);if((null===(n=i.protectedHeader.crit)||void 0===n?void 0:n.includes("b64"))&&!1===i.protectedHeader.b64)throw new hn("JWTs MUST NOT use unencoded payload");const c={payload:Un(i.protectedHeader,i.payload,l),protectedHeader:i.protectedHeader};return"function"==typeof e?{...c,key:i.key}:c}(t,(d={keys:[e]},kn.prototype.getKey.bind(new kn(d))),{algorithms:l,audience:n,clockTolerance:o,issuer:i,subject:c}).then(()=>Promise.resolve(!0));var d}}const Qn=(t,e)=>n(void 0,void 0,void 0,(function*(){var l;const i=(t=>{switch(t){case U.LocalStorage:return new ze;case U.SessionStorage:return new Qe;case U.BrowserMemory:return new we;default:return new Qe}})(t.storage),o=new wn,d=new J(i,o);yield d.initialize(t);const a=new F(d),r=d.getDataLayer(),u=yield z(()=>n(void 0,void 0,void 0,(function*(){return d.signOut()})),null!==(l=t.storage)&&void 0!==l?l:U.SessionStorage,t=>r.setSessionDataParameter(g,null!=t?t:"")),s=e(d,a);let Z=!1;const b=xe.getInstance();let h,m,I=!0;(null==b?void 0:b.init)&&(yield b.init(!0,s.attachToken));const G=()=>n(void 0,void 0,void 0,(function*(){const t=yield d.getOIDCServiceEndpoints(),e=yield r.getConfigData();s.initializeSessionManger(e,t,()=>n(void 0,void 0,void 0,(function*(){return(yield d.getBasicUserInfo()).sessionState})),t=>n(void 0,void 0,void 0,(function*(){return d.getAuthorizationURL(t)})),u)})),X=()=>n(void 0,void 0,void 0,(function*(){return yield u.receivePromptNoneResponse(t=>n(void 0,void 0,void 0,(function*(){yield r.setSessionDataParameter(g,null!=t?t:"")})))})),V=t=>{t.preventSignOutURLUpdate&&(Z=!0)},W=(t,e,l)=>n(void 0,void 0,void 0,(function*(){return yield s.requestAccessToken(t,e,G,void 0,l)})),C=()=>n(void 0,void 0,void 0,(function*(){const t=yield r.getConfigData(),e=yield d.getAuthorizationURL({prompt:"none",state:"sign-in-silently"}),l=new URL(e);l.searchParams.set("response_mode","query");const n=l.toString();if(t.storage===U.BrowserMemory&&t.enablePKCE){const t=l.searchParams.get(y);x.setPKCE(f.extractPKCEKeyFromStateParam(null!=t?t:""),yield d.getPKCECode(null!=t?t:""))}return n}));return{disableHttpHandler:()=>(s.disableHttpHandler(b),I=!1,!0),enableHttpHandler:()=>(s.enableHttpHandler(b),I=!0,!0),getAccessToken:()=>n(void 0,void 0,void 0,(function*(){return s.getAccessToken()})),getBasicUserInfo:()=>n(void 0,void 0,void 0,(function*(){return s.getBasicUserInfo()})),getDataLayer:()=>n(void 0,void 0,void 0,(function*(){return s.getDataLayer()})),getDecodedIDToken:()=>n(void 0,void 0,void 0,(function*(){return s.getDecodedIDToken()})),getHttpClient:()=>b,getIDToken:()=>n(void 0,void 0,void 0,(function*(){return s.getIDToken()})),getOIDCServiceEndpoints:()=>n(void 0,void 0,void 0,(function*(){return s.getOIDCServiceEndpoints()})),httpRequest:t=>n(void 0,void 0,void 0,(function*(){return yield s.httpRequest(b,t,I,h,m)})),httpRequestAll:t=>n(void 0,void 0,void 0,(function*(){return yield s.httpRequestAll(t,b,I,h,m)})),isAuthenticated:()=>n(void 0,void 0,void 0,(function*(){return s.isAuthenticated()})),refreshAccessToken:()=>n(void 0,void 0,void 0,(function*(){try{return yield s.refreshAccessToken(V)}catch(t){return Promise.reject(t)}})),requestCustomGrant:t=>n(void 0,void 0,void 0,(function*(){return yield s.requestCustomGrant(t,V)})),revokeAccessToken:()=>d.revokeAccessToken().then(()=>(u.reset(),a.clearRefreshTokenTimeout(),Promise.resolve(!0))).catch(t=>Promise.reject(t)),setHttpRequestErrorCallback:t=>{h=t},setHttpRequestFinishCallback:t=>{s.setHttpRequestFinishCallback(b,t),m=t},setHttpRequestStartCallback:t=>{s.setHttpRequestStartCallback(b,t)},setHttpRequestSuccessCallback:t=>{s.setHttpRequestSuccessCallback(b,t)},signIn:(e,l,i,o)=>n(void 0,void 0,void 0,(function*(){var a,r,u;const Z=yield s.handleSignIn(X,G);if(Z)return Z;{let s,Z,b;return(null==t?void 0:t.responseMode)===c.formPost&&l?(s=l,Z=null!=i?i:"",b=null!=o?o:""):(s=null!==(a=new URL(window.location.href).searchParams.get(p))&&void 0!==a?a:"",Z=null!==(r=new URL(window.location.href).searchParams.get(g))&&void 0!==r?r:"",b=null!==(u=new URL(window.location.href).searchParams.get(y))&&void 0!==u?u:"",x.removeAuthorizationCode()),s&&b?W(s,Z,b):d.getAuthorizationURL(e).then(e=>n(void 0,void 0,void 0,(function*(){if(t.storage===U.BrowserMemory&&t.enablePKCE){const t=f.extractPKCEKeyFromStateParam(b);x.setPKCE(t,yield d.getPKCECode(b))}return location.href=e,yield x.waitTillPageRedirect(),Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""})})))}})),signOut:()=>n(void 0,void 0,void 0,(function*(){return(yield d.isAuthenticated())&&!Z?location.href=yield d.signOut():(location.href=x.getSignOutURL(),yield r.removeOIDCProviderMetaData(),yield r.removeTemporaryData(),yield r.removeSessionData()),a.clearRefreshTokenTimeout(),yield x.waitTillPageRedirect(),!0})),trySignInSilently:()=>n(void 0,void 0,void 0,(function*(){return yield s.trySignInSilently(C,W,u)})),updateConfig:t=>n(void 0,void 0,void 0,(function*(){const e=yield r.getConfigData(),l=!(e&&e.endpoints&&e.endpoints.checkSessionIframe&&t&&t.endpoints&&t.endpoints.checkSessionIframe&&e.endpoints.checkSessionIframe===t.endpoints.checkSessionIframe),n=Object.assign(Object.assign({},e),t);yield d.updateConfig(n),n.enableOIDCSessionManagement&&l&&(u.reset(),G())}))}})),Pn=(t,e,l)=>n(void 0,void 0,void 0,(function*(){var i;let o;const d=null!==(i=null==t?void 0:t.requestTimeout)&&void 0!==i?i:6e4;let a=!0,r=!1;const u=(t=>{switch(t){case U.LocalStorage:return new ze;case U.SessionStorage:return new Qe;case U.BrowserMemory:return new we;default:return new Qe}})(t.storage),s=new wn,Z=new J(u,s);yield Z.initialize(t);const b=new F(Z),h=yield z(()=>n(void 0,void 0,void 0,(function*(){const t={type:"sign-out"};try{return yield G(t)}catch(t){return x.getSignOutURL()}})),t.storage,t=>X(t)),m=l(Z,b),I=new e,G=t=>{const e=new MessageChannel;return I.postMessage(t,[e.port2]),new Promise((t,l)=>{const n=setTimeout(()=>{l(new R("SPA-WEB_WORKER_CLIENT-COM-TO01","Operation timed out.","No response was received from the web worker for "+d/1e3+" since dispatching the request"))},d);return e.port1.onmessage=({data:e})=>{if(clearTimeout(n),null==e?void 0:e.success){const l=(null==e?void 0:e.data)?JSON.parse(null==e?void 0:e.data):null;(null==e?void 0:e.blob)&&(l.data=null==e?void 0:e.blob),t(l)}else l(e.error?JSON.parse(e.error):null)}})},X=t=>G({data:t,type:"set_session_state"}),V=()=>G({type:"start_auto_refresh_token"}),W=()=>n(void 0,void 0,void 0,(function*(){const t=yield N(),e=yield H();m.initializeSessionManger(e,t,()=>n(void 0,void 0,void 0,(function*(){return(yield L()).sessionState})),t=>n(void 0,void 0,void 0,(function*(){return(yield Y(t)).authorizationURL})),h)})),C=()=>n(void 0,void 0,void 0,(function*(){var t;const e=yield H(),l=yield G({data:{prompt:"none",state:"sign-in-silently"},type:"get_auth_url"}),n=f.extractPKCEKeyFromStateParam(null!==(t=new URL(l.authorizationURL).searchParams.get(y))&&void 0!==t?t:"");l.pkce&&e.enablePKCE&&x.setPKCE(n,l.pkce);const i=l.authorizationURL,c=new URL(i);return c.searchParams.set("response_mode","query"),c.toString()})),Y=t=>n(void 0,void 0,void 0,(function*(){const e=yield H();return G({data:t,type:"get_auth_url"}).then(t=>n(void 0,void 0,void 0,(function*(){var l;if(t.pkce&&e.enablePKCE){const e=f.extractPKCEKeyFromStateParam(null!==(l=new URL(t.authorizationURL).searchParams.get(y))&&void 0!==l?l:"");x.setPKCE(e,t.pkce)}return Promise.resolve(t)})))})),S=(t,e,l)=>n(void 0,void 0,void 0,(function*(){const n=yield H(),i=f.extractPKCEKeyFromStateParam(l),c={data:{code:t,pkce:n.enablePKCE?x.getPKCE(i):void 0,sessionState:e,state:l},type:"request_get_token"};return n.enablePKCE&&x.removePKCE(i),G(c).then(t=>G({type:"get_sign_out_url"}).then(e=>(x.setSignOutURL(e),n.enableOIDCSessionManagement&&W(),V(),Promise.resolve(t))).catch(t=>Promise.reject(t))).catch(t=>Promise.reject(t))})),v=()=>n(void 0,void 0,void 0,(function*(){return yield h.receivePromptNoneResponse(t=>n(void 0,void 0,void 0,(function*(){return X(t)})))})),K=()=>n(void 0,void 0,void 0,(function*(){if(yield k())return yield V(),t.enableOIDCSessionManagement&&W(),L()})),N=()=>G({type:"get-oidc-service-endpoints"}).then(t=>Promise.resolve(t)).catch(t=>Promise.reject(t)),H=()=>G({type:"get_config_data"}).then(t=>Promise.resolve(t)).catch(t=>Promise.reject(t)),L=()=>G({type:"get-basic-user-info"}).then(t=>Promise.resolve(t)).catch(t=>Promise.reject(t)),k=()=>G({type:"is_authenticated"}).then(t=>Promise.resolve(t)).catch(t=>Promise.reject(t));return{disableHttpHandler:()=>G({type:"disable_http_handler"}).then(()=>(a=!1,Promise.resolve(!0))).catch(t=>Promise.reject(t)),enableHttpHandler:()=>G({type:"enable_http_handler"}).then(()=>(a=!0,Promise.resolve(!0))).catch(t=>Promise.reject(t)),getBasicUserInfo:L,getDecodedIDToken:()=>G({type:"get-decoded-id-token"}).then(t=>Promise.resolve(t)).catch(t=>Promise.reject(t)),getIDToken:()=>G({type:"get_id_token"}).then(t=>Promise.resolve(t)).catch(t=>Promise.reject(t)),getOIDCServiceEndpoints:N,httpRequest:t=>G({data:t,type:"http-request"}).then(t=>Promise.resolve(t)).catch(t=>n(void 0,void 0,void 0,(function*(){return a&&("function"==typeof o.requestErrorCallback&&(yield o.requestErrorCallback(t)),"function"==typeof o.requestFinishCallback&&o.requestFinishCallback()),Promise.reject(t)}))),httpRequestAll:t=>G({data:t,type:"http-request-all"}).then(t=>Promise.resolve(t)).catch(t=>n(void 0,void 0,void 0,(function*(){return a&&("function"==typeof o.requestErrorCallback&&(yield o.requestErrorCallback(t)),"function"==typeof o.requestFinishCallback&&o.requestFinishCallback()),Promise.reject(t)}))),initialize:()=>(o||(o={requestErrorCallback:()=>Promise.resolve(),requestFinishCallback:()=>null,requestStartCallback:()=>null,requestSuccessCallback:()=>null}),I.onmessage=({data:t})=>{switch(t.type){case"request-finish":(null==o?void 0:o.requestFinishCallback)&&(null==o||o.requestFinishCallback());break;case"request-start":(null==o?void 0:o.requestStartCallback)&&(null==o||o.requestStartCallback());break;case"request-success":(null==o?void 0:o.requestSuccessCallback)&&(null==o||o.requestSuccessCallback(t.data?JSON.parse(t.data):null))}},G({data:t,type:"init"}).then(()=>Promise.resolve(!0)).catch(t=>Promise.reject(t))),isAuthenticated:k,refreshAccessToken:()=>G({type:"refresh_access-token"}),requestCustomGrant:t=>G({data:t,type:"request-custom-grant"}).then(e=>(t.preventSignOutURLUpdate&&(r=!0),Promise.resolve(e))).catch(t=>Promise.reject(t)),revokeAccessToken:()=>G({type:"revoke-access-token"}).then(t=>(h.reset(),Promise.resolve(t))).catch(t=>Promise.reject(t)),setHttpRequestErrorCallback:t=>{t&&"function"==typeof t&&(o.requestErrorCallback=t)},setHttpRequestFinishCallback:t=>{t&&"function"==typeof t&&(o.requestFinishCallback=t)},setHttpRequestStartCallback:t=>{t&&"function"==typeof t&&(o.requestStartCallback=t)},setHttpRequestSuccessCallback:t=>{t&&"function"==typeof t&&(o.requestSuccessCallback=t)},signIn:(e,l,i,o)=>n(void 0,void 0,void 0,(function*(){var d,a,r;const u=yield m.handleSignIn(v,W,K);if(u)return u;{let u,s,Z;return(null==t?void 0:t.responseMode)===c.formPost&&l?(u=l,s=null!=i?i:"",Z=null!=o?o:""):(u=null!==(d=new URL(window.location.href).searchParams.get(p))&&void 0!==d?d:"",s=null!==(a=new URL(window.location.href).searchParams.get(g))&&void 0!==a?a:"",Z=null!==(r=new URL(window.location.href).searchParams.get(y))&&void 0!==r?r:"",x.removeAuthorizationCode()),u&&Z?S(u,s,Z):Y(e).then(t=>n(void 0,void 0,void 0,(function*(){return location.href=t.authorizationURL,yield x.waitTillPageRedirect(),Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""})}))).catch(t=>Promise.reject(t))}})),signOut:()=>k().then(t=>n(void 0,void 0,void 0,(function*(){return t&&!r?G({type:"sign-out"}).then(t=>n(void 0,void 0,void 0,(function*(){return window.location.href=t,yield x.waitTillPageRedirect(),Promise.resolve(!0)}))).catch(t=>Promise.reject(t)):(window.location.href=x.getSignOutURL(),yield x.waitTillPageRedirect(),Promise.resolve(!0))}))).catch(t=>Promise.reject(t)),trySignInSilently:()=>n(void 0,void 0,void 0,(function*(){return yield m.trySignInSilently(C,S,h)})),updateConfig:t=>n(void 0,void 0,void 0,(function*(){const e=yield H(),l=!(e&&e.endpoints&&e.endpoints.checkSessionIframe&&t&&t.endpoints&&t.endpoints.checkSessionIframe&&e.endpoints.checkSessionIframe===t.endpoints.checkSessionIframe),n=Object.assign(Object.assign({},e),t),i={data:n,type:"update_config"};yield G(i),n.enableOIDCSessionManagement&&l&&(h.reset(),W())}))}})),jn={checkSessionInterval:3,clientHost:origin,enableOIDCSessionManagement:!1,sessionRefreshInterval:300,storage:U.SessionStorage};class Mn{constructor(t){this._authHelper=B,this._worker=k,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=t}instantiateAuthHelper(t){this._authHelper=t||B}instantiateWorker(t){this._worker=t||k}_isInitialized(){return n(this,void 0,void 0,(function*(){if(!this._startedInitialize)return!1;let t=0;for(;!this._initialized;)1e4===t&&console.warn("It is taking longer than usual for the object to be initialized"),yield new Promise(t=>setTimeout(t,1)),t++;return!0}))}_validateMethod(){return n(this,void 0,void 0,(function*(){return(yield this._isInitialized())&&!!(yield this.isAuthenticated())||Promise.reject()}))}
|
|
450
436
|
/**
|
|
451
437
|
* This method returns the instance of the singleton class.
|
|
452
438
|
*
|
|
@@ -462,7 +448,7 @@ constructor(t,e){J._instanceID?J._instanceID+=1:J._instanceID=0,this._dataLayer=
|
|
|
462
448
|
* @memberof AsgardeoSPAClient
|
|
463
449
|
*
|
|
464
450
|
* @preserve
|
|
465
|
-
*/static getInstance(t){var e,
|
|
451
|
+
*/static getInstance(t){var e,l;return t&&(null===(e=this._instances)||void 0===e?void 0:e.get(t))?this._instances.get(t):!t&&(null===(l=this._instances)||void 0===l?void 0:l.get("primaryInstance"))?this._instances.get("primaryInstance"):t?(this._instances.set(t,new Mn(t)),this._instances.get(t)):(this._instances.set("primaryInstance",new Mn("primaryInstance")),this._instances.get("primaryInstance"))}
|
|
466
452
|
/**
|
|
467
453
|
* This method initializes the `AsgardeoSPAClient` instance.
|
|
468
454
|
*
|
|
@@ -484,7 +470,7 @@ constructor(t,e){J._instanceID?J._instanceID+=1:J._instanceID=0,this._dataLayer=
|
|
|
484
470
|
* @memberof AsgardeoSPAClient
|
|
485
471
|
*
|
|
486
472
|
* @preserve
|
|
487
|
-
*/initialize(t){var
|
|
473
|
+
*/initialize(t,e,l){var i;return n(this,void 0,void 0,(function*(){if(this._storage=null!==(i=t.storage)&&void 0!==i?i:U.SessionStorage,this._initialized=!1,this._startedInitialize=!0,e&&this.instantiateAuthHelper(e),l&&this.instantiateWorker(l),this._storage!==U.WebWorker){if(!this._client){const e=t,l=Object.assign({},jn);this._client=yield Qn(Object.assign(Object.assign({},l),e),(t,e)=>new this._authHelper(t,e))}return this._initialized=!0,this._onInitialize&&this._onInitialize(!0),Promise.resolve(!0)}if(!this._client){const e=t;return this._client=yield Pn(Object.assign(Object.assign({},jn),e),this._worker,(t,e)=>new this._authHelper(t,e)),this._client.initialize().then(()=>(this._onInitialize&&this._onInitialize(!0),this._initialized=!0,Promise.resolve(!0))).catch(t=>Promise.reject(t))}return Promise.resolve(!0)}))}
|
|
488
474
|
/**
|
|
489
475
|
* This method returns a Promise that resolves with the basic user information obtained from the ID token.
|
|
490
476
|
*
|
|
@@ -504,7 +490,7 @@ constructor(t,e){J._instanceID?J._instanceID+=1:J._instanceID=0,this._dataLayer=
|
|
|
504
490
|
* @memberof AsgardeoSPAClient
|
|
505
491
|
*
|
|
506
492
|
* @preserve
|
|
507
|
-
*/getBasicUserInfo(){var t;return
|
|
493
|
+
*/getBasicUserInfo(){var t;return n(this,void 0,void 0,(function*(){return yield this._validateMethod(),null===(t=this._client)||void 0===t?void 0:t.getBasicUserInfo()}))}
|
|
508
494
|
/**
|
|
509
495
|
* This method initiates the authentication flow. This should be called twice.
|
|
510
496
|
* 1. To initiate the authentication flow.
|
|
@@ -540,7 +526,7 @@ constructor(t,e){J._instanceID?J._instanceID+=1:J._instanceID=0,this._dataLayer=
|
|
|
540
526
|
* @memberof AsgardeoSPAClient
|
|
541
527
|
*
|
|
542
528
|
* @preserve
|
|
543
|
-
*/signIn(t,e,
|
|
529
|
+
*/signIn(t,e,l,i){var c;return n(this,void 0,void 0,(function*(){if(yield this._isInitialized(),x.canContinueSignIn(Boolean(null==t?void 0:t.callOnlyOnRedirect),e))return null==t||delete t.callOnlyOnRedirect,null===(c=this._client)||void 0===c?void 0:c.signIn(t,e,l,i).then(t=>(this._onSignInCallback&&(t.allowedScopes||t.displayName||t.email||t.username)&&this._onSignInCallback(t),t))}))}trySignInSilently(){var t;return n(this,void 0,void 0,(function*(){if(yield this._isInitialized(),!x.wasSignInCalled())return null===(t=this._client)||void 0===t?void 0:t.trySignInSilently().then(t=>{if(this._onSignInCallback&&t){const e=t;(e.allowedScopes||e.displayName||e.email||e.username)&&this._onSignInCallback(e)}return t})}))}
|
|
544
530
|
/**
|
|
545
531
|
* This method initiates the sign-out flow.
|
|
546
532
|
*
|
|
@@ -560,7 +546,7 @@ constructor(t,e){J._instanceID?J._instanceID+=1:J._instanceID=0,this._dataLayer=
|
|
|
560
546
|
* @memberof AsgardeoSPAClient
|
|
561
547
|
*
|
|
562
548
|
* @preserve
|
|
563
|
-
*/signOut(){var t,e;return
|
|
549
|
+
*/signOut(){var t,e;return n(this,void 0,void 0,(function*(){return yield this._validateMethod(),null!==(e=yield null===(t=this._client)||void 0===t?void 0:t.signOut())&&void 0!==e&&e}))}
|
|
564
550
|
/**
|
|
565
551
|
* This method sends an API request to a protected endpoint.
|
|
566
552
|
* The access token is automatically attached to the header of the request.
|
|
@@ -597,7 +583,7 @@ constructor(t,e){J._instanceID?J._instanceID+=1:J._instanceID=0,this._dataLayer=
|
|
|
597
583
|
* @memberof AsgardeoSPAClient
|
|
598
584
|
*
|
|
599
585
|
* @preserve
|
|
600
|
-
*/httpRequest(t){var e;return
|
|
586
|
+
*/httpRequest(t){var e;return n(this,void 0,void 0,(function*(){return yield this._validateMethod(),null===(e=this._client)||void 0===e?void 0:e.httpRequest(t)}))}
|
|
601
587
|
/**
|
|
602
588
|
* This method sends multiple API requests to a protected endpoint.
|
|
603
589
|
* The access token is automatically attached to the header of the request.
|
|
@@ -644,7 +630,7 @@ constructor(t,e){J._instanceID?J._instanceID+=1:J._instanceID=0,this._dataLayer=
|
|
|
644
630
|
* @memberof AsgardeoSPAClient
|
|
645
631
|
*
|
|
646
632
|
* @preserve
|
|
647
|
-
*/httpRequestAll(t){var e;return
|
|
633
|
+
*/httpRequestAll(t){var e;return n(this,void 0,void 0,(function*(){return yield this._validateMethod(),null===(e=this._client)||void 0===e?void 0:e.httpRequestAll(t)}))}
|
|
648
634
|
/**
|
|
649
635
|
* This method allows you to send a request with a custom grant.
|
|
650
636
|
*
|
|
@@ -675,7 +661,7 @@ constructor(t,e){J._instanceID?J._instanceID+=1:J._instanceID=0,this._dataLayer=
|
|
|
675
661
|
* @memberof AsgardeoSPAClient
|
|
676
662
|
*
|
|
677
663
|
* @preserve
|
|
678
|
-
*/requestCustomGrant(t){var e,
|
|
664
|
+
*/requestCustomGrant(t){var e,l;return n(this,void 0,void 0,(function*(){if(t.signInRequired,yield this._validateMethod(),!t.id)return Promise.reject(new R("SPA-AUTH_CLIENT-RCG-NF01","The custom grant request id not found.","The id attribute of the custom grant config object passed as an argument should have a value."));const n=yield null===(e=this._client)||void 0===e?void 0:e.requestCustomGrant(t),i=this._onCustomGrant.get(t.id);return i&&i(null===(l=this._onCustomGrant)||void 0===l?void 0:l.get(t.id)),n}))}
|
|
679
665
|
/**
|
|
680
666
|
* This method ends a user session. The access token is revoked and the session information is destroyed.
|
|
681
667
|
*
|
|
@@ -695,7 +681,7 @@ constructor(t,e){J._instanceID?J._instanceID+=1:J._instanceID=0,this._dataLayer=
|
|
|
695
681
|
* @memberof AsgardeoSPAClient
|
|
696
682
|
*
|
|
697
683
|
* @preserve
|
|
698
|
-
*/revokeAccessToken(){var t;return
|
|
684
|
+
*/revokeAccessToken(){var t;return n(this,void 0,void 0,(function*(){yield this._validateMethod();const e=yield null===(t=this._client)||void 0===t?void 0:t.revokeAccessToken();return this._onEndUserSession&&(yield this._onEndUserSession(e)),e}))}
|
|
699
685
|
/**
|
|
700
686
|
* This method returns a Promise that resolves with an object containing the service endpoints.
|
|
701
687
|
*
|
|
@@ -715,7 +701,7 @@ constructor(t,e){J._instanceID?J._instanceID+=1:J._instanceID=0,this._dataLayer=
|
|
|
715
701
|
* @memberof AsgardeoSPAClient
|
|
716
702
|
*
|
|
717
703
|
* @preserve
|
|
718
|
-
*/getOIDCServiceEndpoints(){var t;return
|
|
704
|
+
*/getOIDCServiceEndpoints(){var t;return n(this,void 0,void 0,(function*(){return yield this._isInitialized(),null===(t=this._client)||void 0===t?void 0:t.getOIDCServiceEndpoints()}))}
|
|
719
705
|
/**
|
|
720
706
|
* This methods returns the Axios http client.
|
|
721
707
|
*
|
|
@@ -724,7 +710,7 @@ constructor(t,e){J._instanceID?J._instanceID+=1:J._instanceID=0,this._dataLayer=
|
|
|
724
710
|
* @memberof AsgardeoSPAClient
|
|
725
711
|
*
|
|
726
712
|
* @preserve
|
|
727
|
-
*/getHttpClient(){if(this._client){if(this._storage!==
|
|
713
|
+
*/getHttpClient(){if(this._client){if(this._storage!==U.WebWorker)return this._client.getHttpClient();throw new R("SPA-AUTH_CLIENT-GHC-IV01","Http client cannot be returned.","The http client cannot be returned when the storage type is set to webWorker.")}throw new R("SPA-AUTH_CLIENT-GHC-NF02","The SDK is not initialized.","The SDK has not been initialized yet. Initialize the SDK using the initialize method before calling this method.")}
|
|
728
714
|
/**
|
|
729
715
|
* This method decodes the payload of the id token and returns it.
|
|
730
716
|
*
|
|
@@ -744,7 +730,7 @@ constructor(t,e){J._instanceID?J._instanceID+=1:J._instanceID=0,this._dataLayer=
|
|
|
744
730
|
* @memberof AsgardeoSPAClient
|
|
745
731
|
*
|
|
746
732
|
* @preserve
|
|
747
|
-
*/getDecodedIDToken(){var t;return
|
|
733
|
+
*/getDecodedIDToken(){var t;return n(this,void 0,void 0,(function*(){return yield this._validateMethod(),null===(t=this._client)||void 0===t?void 0:t.getDecodedIDToken()}))}
|
|
748
734
|
/**
|
|
749
735
|
* This method return the ID token.
|
|
750
736
|
*
|
|
@@ -760,7 +746,7 @@ constructor(t,e){J._instanceID?J._instanceID+=1:J._instanceID=0,this._dataLayer=
|
|
|
760
746
|
* @memberof AsgardeoAuthClient
|
|
761
747
|
*
|
|
762
748
|
* @preserve
|
|
763
|
-
*/getIDToken(){var t;return
|
|
749
|
+
*/getIDToken(){var t;return n(this,void 0,void 0,(function*(){return yield this._validateMethod(),null===(t=this._client)||void 0===t?void 0:t.getIDToken()}))}
|
|
764
750
|
/**
|
|
765
751
|
* This method return a Promise that resolves with the access token.
|
|
766
752
|
*
|
|
@@ -782,7 +768,51 @@ constructor(t,e){J._instanceID?J._instanceID+=1:J._instanceID=0,this._dataLayer=
|
|
|
782
768
|
* @memberof AsgardeoSPAClient
|
|
783
769
|
*
|
|
784
770
|
* @preserve
|
|
785
|
-
*/getAccessToken(){return
|
|
771
|
+
*/getAccessToken(){return n(this,void 0,void 0,(function*(){return yield this._validateMethod(),this._storage&&[(U.WebWorker,U.BrowserMemory)].includes(this._storage)?Promise.reject(new R("SPA-AUTH_CLIENT-GAT-IV01","The access token cannot be returned.","The access token cannot be returned when the storage type is set to webWorker or browserMemory.")):this._client.getAccessToken()}))}
|
|
772
|
+
/**
|
|
773
|
+
* This method return a Promise that resolves with the idp access token.
|
|
774
|
+
*
|
|
775
|
+
* **This method will not return the access token if the storage type is set to `webWorker`.**
|
|
776
|
+
*
|
|
777
|
+
* @return {Promise<string>} - A Promise that resolves with the idp access token.
|
|
778
|
+
*
|
|
779
|
+
* @example
|
|
780
|
+
* ```
|
|
781
|
+
* auth.getIDPAccessToken().then((token) => {
|
|
782
|
+
* // console.log(token);
|
|
783
|
+
* }).catch((error) => {
|
|
784
|
+
* // console.error(error);
|
|
785
|
+
* });
|
|
786
|
+
* ```
|
|
787
|
+
*
|
|
788
|
+
* @link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#getaccesstoken
|
|
789
|
+
*
|
|
790
|
+
* @memberof AsgardeoSPAClient
|
|
791
|
+
*
|
|
792
|
+
* @preserve
|
|
793
|
+
*/getIDPAccessToken(){return n(this,void 0,void 0,(function*(){return yield this._validateMethod(),this._storage&&[(U.WebWorker,U.BrowserMemory)].includes(this._storage)?Promise.reject(new R("SPA-AUTH_CLIENT-GAT-IV01","The access token cannot be returned.","The access token cannot be returned when the storage type is set to webWorker or browserMemory.")):this._client.getAccessToken()}))}
|
|
794
|
+
/**
|
|
795
|
+
* This method return a Promise that resolves with the data layer object.
|
|
796
|
+
*
|
|
797
|
+
* **This method will not return the data layer object, if the storage type is set to `webWorker`.**
|
|
798
|
+
*
|
|
799
|
+
* @return {Promise<string>} - A Promise that resolves with the data layer object.
|
|
800
|
+
*
|
|
801
|
+
* @example
|
|
802
|
+
* ```
|
|
803
|
+
* auth.getDataLayer().then((dataLayer) => {
|
|
804
|
+
* // console.log(dataLayer);
|
|
805
|
+
* }).catch((error) => {
|
|
806
|
+
* // console.error(error);
|
|
807
|
+
* });
|
|
808
|
+
* ```
|
|
809
|
+
*
|
|
810
|
+
* @link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#getdatalayer
|
|
811
|
+
*
|
|
812
|
+
* @memberof AsgardeoSPAClient
|
|
813
|
+
*
|
|
814
|
+
* @preserve
|
|
815
|
+
*/getDataLayer(){return n(this,void 0,void 0,(function*(){return yield this._validateMethod(),this._storage&&[(U.WebWorker,U.BrowserMemory)].includes(this._storage)?Promise.reject(new R("SPA-AUTH_CLIENT-GAT-IV01","The access token cannot be returned.","The access token cannot be returned when the storage type is set to webWorker or browserMemory.")):this._client.getDataLayer()}))}
|
|
786
816
|
/**
|
|
787
817
|
* This method refreshes the access token.
|
|
788
818
|
*
|
|
@@ -803,7 +833,7 @@ constructor(t,e){J._instanceID?J._instanceID+=1:J._instanceID=0,this._dataLayer=
|
|
|
803
833
|
* @memberof AsgardeoSPAClient
|
|
804
834
|
*
|
|
805
835
|
* @preserve
|
|
806
|
-
*/refreshAccessToken(){var t;return
|
|
836
|
+
*/refreshAccessToken(){var t;return n(this,void 0,void 0,(function*(){return yield this._validateMethod(),null===(t=this._client)||void 0===t?void 0:t.refreshAccessToken()}))}
|
|
807
837
|
/**
|
|
808
838
|
* This method specifies if the user is authenticated or not.
|
|
809
839
|
*
|
|
@@ -812,7 +842,7 @@ constructor(t,e){J._instanceID?J._instanceID+=1:J._instanceID=0,this._dataLayer=
|
|
|
812
842
|
* @memberof AsgardeoSPAClient
|
|
813
843
|
*
|
|
814
844
|
* @preserve
|
|
815
|
-
*/isAuthenticated(){var t;return
|
|
845
|
+
*/isAuthenticated(){var t;return n(this,void 0,void 0,(function*(){return yield this._isInitialized(),null===(t=this._client)||void 0===t?void 0:t.isAuthenticated()}))}on(t,e,l){var i,c,o,d;return n(this,void 0,void 0,(function*(){if(yield this._isInitialized(),!e||"function"!=typeof e)throw new R("SPA-AUTH_CLIENT-ON-IV02","Invalid callback function.","The provided callback function is invalid.");switch(t){case L.SignIn:this._onSignInCallback=e;break;case L.SignOut:this._onSignOutCallback=e,(yield x.isSignOutSuccessful())&&this._onSignOutCallback();break;case L.RevokeAccessToken:this._onEndUserSession=e;break;case L.Initialize:this._onInitialize=e;break;case L.HttpRequestError:null===(i=this._client)||void 0===i||i.setHttpRequestErrorCallback(e);break;case L.HttpRequestFinish:null===(c=this._client)||void 0===c||c.setHttpRequestFinishCallback(e);break;case L.HttpRequestStart:null===(o=this._client)||void 0===o||o.setHttpRequestStartCallback(e);break;case L.HttpRequestSuccess:null===(d=this._client)||void 0===d||d.setHttpRequestSuccessCallback(e);break;case L.CustomGrant:l&&this._onCustomGrant.set(l,e);break;case L.SignOutFailed:{this._onSignOutFailedCallback=e;const t=x.didSignOutFail();t&&this._onSignOutFailedCallback(t);break}default:throw new R("SPA-AUTH_CLIENT-ON-IV01","Invalid hook.","The provided hook is invalid.")}}))}
|
|
816
846
|
/**
|
|
817
847
|
* This method enables callback functions attached to the http client.
|
|
818
848
|
*
|
|
@@ -828,7 +858,7 @@ constructor(t,e){J._instanceID?J._instanceID+=1:J._instanceID=0,this._dataLayer=
|
|
|
828
858
|
* @memberof AsgardeoSPAClient
|
|
829
859
|
*
|
|
830
860
|
* @preserve
|
|
831
|
-
*/enableHttpHandler(){var t;return
|
|
861
|
+
*/enableHttpHandler(){var t;return n(this,void 0,void 0,(function*(){return yield this._isInitialized(),null===(t=this._client)||void 0===t?void 0:t.enableHttpHandler()}))}
|
|
832
862
|
/**
|
|
833
863
|
* This method disables callback functions attached to the http client.
|
|
834
864
|
*
|
|
@@ -844,7 +874,7 @@ constructor(t,e){J._instanceID?J._instanceID+=1:J._instanceID=0,this._dataLayer=
|
|
|
844
874
|
* @memberof AsgardeoSPAClient
|
|
845
875
|
*
|
|
846
876
|
* @preserve
|
|
847
|
-
*/disableHttpHandler(){var t;return
|
|
877
|
+
*/disableHttpHandler(){var t;return n(this,void 0,void 0,(function*(){return yield this._isInitialized(),null===(t=this._client)||void 0===t?void 0:t.disableHttpHandler()}))}
|
|
848
878
|
/**
|
|
849
879
|
* This method updates the configuration that was passed into the constructor when instantiating this class.
|
|
850
880
|
*
|
|
@@ -864,4 +894,4 @@ constructor(t,e){J._instanceID?J._instanceID+=1:J._instanceID=0,this._dataLayer=
|
|
|
864
894
|
* @memberof AsgardeoAuthClient
|
|
865
895
|
*
|
|
866
896
|
* @preserve
|
|
867
|
-
*/updateConfig(t){return l(this,void 0,void 0,(function*(){if(yield this._isInitialized(),this._storage===H.WebWorker){const e=this._client;yield e.updateConfig(t)}else{const e=this._client;yield e.updateConfig(t)}}))}}Pl._instances=new Map;class Ql extends Worker{constructor(){super(...arguments),this.onmessage=()=>null}}}).call(this,n(163))},function(t,e,n){var l=n(11);t.exports=l("navigator","userAgent")||""},function(t,e,n){var l=n(35),i=Math.max,c=Math.min;t.exports=function(t,e){var n=l(t);return n<0?i(n+e,0):c(n,e)}},function(t,e,n){"use strict";var l=n(4);t.exports=function(t,e){var n=[][t];return!!n&&l((function(){n.call(null,e||function(){return 1},1)}))}},function(t,e,n){var l=n(3),i=n(2),c=n(179);t.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var t,e=!1,n={};try{(t=l(Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set))(n,[]),e=n instanceof Array}catch(t){}return function(n,l){return i(n),c(l),e?t(n,l):n.__proto__=l,n}}():void 0)},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(5),o=n(9),r=n(158),a=n(17),d=n(111),u=n(42),Z=n(43),s=n(28),b=n(151),I=n(37),m=n(183),h=n(206),p=n(55),g=n(15),G=n(64),y=n(12),X=n(71),V=n(29),W=n(36),C=n(52),R=n(57).f,f=n(207),S=n(30).forEach,v=n(66),Y=n(16),K=n(31),N=n(20),J=n(115),H=N.get,U=N.set,L=Y.f,B=K.f,k=Math.round,x=i.RangeError,T=d.ArrayBuffer,F=T.prototype,A=d.DataView,z=a.NATIVE_ARRAY_BUFFER_VIEWS,w=a.TYPED_ARRAY_CONSTRUCTOR,P=a.TYPED_ARRAY_TAG,Q=a.TypedArray,j=a.TypedArrayPrototype,M=a.aTypedArrayConstructor,E=a.isTypedArray,D=function(t,e){M(t);for(var n=0,l=e.length,i=new t(l);l>n;)i[n]=e[n++];return i},O=function(t,e){L(t,e,{get:function(){return H(this)[e]}})},_=function(t){var e;return W(F,t)||"ArrayBuffer"==(e=G(t))||"SharedArrayBuffer"==e},q=function(t,e){return E(t)&&!X(e)&&e in t&&b(+e)&&e>=0},$=function(t,e){return e=p(e),q(t,e)?Z(2,t[e]):B(t,e)},tt=function(t,e,n){return e=p(e),!(q(t,e)&&y(n)&&g(n,"value"))||g(n,"get")||g(n,"set")||n.configurable||g(n,"writable")&&!n.writable||g(n,"enumerable")&&!n.enumerable?L(t,e,n):(t[e]=n.value,t)};o?(z||(K.f=$,Y.f=tt,O(j,"buffer"),O(j,"byteOffset"),O(j,"byteLength"),O(j,"length")),l({target:"Object",stat:!0,forced:!z},{getOwnPropertyDescriptor:$,defineProperty:tt}),t.exports=function(t,e,n){var o=t.match(/\d+$/)[0]/8,a=t+(n?"Clamped":"")+"Array",d="get"+t,Z="set"+t,b=i[a],p=b,g=p&&p.prototype,G={},X=function(t,e){L(t,e,{get:function(){return function(t,e){var n=H(t);return n.view[d](e*o+n.byteOffset,!0)}(this,e)},set:function(t){return function(t,e,l){var i=H(t);n&&(l=(l=k(l))<0?0:l>255?255:255&l),i.view[Z](e*o+i.byteOffset,l,!0)}(this,e,t)},enumerable:!0})};z?r&&(p=e((function(t,e,n,l){return u(t,g),J(y(e)?_(e)?void 0!==l?new b(e,h(n,o),l):void 0!==n?new b(e,h(n,o)):new b(e):E(e)?D(p,e):c(f,p,e):new b(m(e)),t,p)})),C&&C(p,Q),S(R(b),(function(t){t in p||s(p,t,b[t])})),p.prototype=g):(p=e((function(t,e,n,l){u(t,g);var i,r,a,d=0,Z=0;if(y(e)){if(!_(e))return E(e)?D(p,e):c(f,p,e);i=e,Z=h(n,o);var s=e.byteLength;if(void 0===l){if(s%o)throw x("Wrong length");if((r=s-Z)<0)throw x("Wrong length")}else if((r=I(l)*o)+Z>s)throw x("Wrong length");a=r/o}else a=m(e),i=new T(r=a*o);for(U(t,{buffer:i,byteOffset:Z,byteLength:r,length:a,view:new A(i)});d<a;)X(t,d++)})),C&&C(p,Q),g=p.prototype=V(j)),g.constructor!==p&&s(g,"constructor",p),s(g,w,p),P&&s(g,P,a),G[a]=p,l({global:!0,forced:p!=b,sham:!z},G),"BYTES_PER_ELEMENT"in p||s(p,"BYTES_PER_ELEMENT",o),"BYTES_PER_ELEMENT"in g||s(g,"BYTES_PER_ELEMENT",o),v(a)}):t.exports=function(){}},function(t,e,n){n(147),n(159);var l=n(11),i=n(3),c=n(63),o=l("Map"),r=l("WeakMap"),a=i([].push),d=c("metadata"),u=d.store||(d.store=new r),Z=function(t,e,n){var l=u.get(t);if(!l){if(!n)return;u.set(t,l=new o)}var i=l.get(e);if(!i){if(!n)return;l.set(e,i=new o)}return i};t.exports={store:u,getMap:Z,has:function(t,e,n){var l=Z(e,n,!1);return void 0!==l&&l.has(t)},get:function(t,e,n){var l=Z(e,n,!1);return void 0===l?void 0:l.get(t)},set:function(t,e,n,l){Z(n,l,!0).set(t,e)},keys:function(t,e){var n=Z(t,e,!1),l=[];return n&&n.forEach((function(t,e){a(l,e)})),l},toKey:function(t){return void 0===t||"symbol"==typeof t?t:String(t)}}},function(t,e,n){var l=n(130),i=n(71);t.exports=function(t){var e=l(t,"string");return i(e)?e:e+""}},function(t,e,n){var l,i,c=n(1),o=n(49),r=c.process,a=c.Deno,d=r&&r.versions||a&&a.version,u=d&&d.v8;u&&(i=(l=u.split("."))[0]>0&&l[0]<4?1:+(l[0]+l[1])),!i&&o&&(!(l=o.match(/Edge\/(\d+)/))||l[1]>=74)&&(l=o.match(/Chrome\/(\d+)/))&&(i=+l[1]),t.exports=i},function(t,e,n){var l=n(169),i=n(134).concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return l(t,i)}},function(t,e,n){"use strict";var l=n(55),i=n(16),c=n(43);t.exports=function(t,e,n){var o=l(e);o in t?i.f(t,o,c(0,n)):t[o]=n}},function(t,e,n){var l=n(40);t.exports=Array.isArray||function(t){return"Array"==l(t)}},function(t,e,n){var l=n(3);t.exports=l([].slice)},function(t,e,n){var l=n(64),i=n(27),c=n(91),o=n(7)("iterator");t.exports=function(t){if(null!=t)return i(t,o)||i(t,"@@iterator")||c[l(t)]}},function(t,e,n){"use strict";var l=n(6),i=function(t){var e,n;this.promise=new t((function(t,l){if(void 0!==e||void 0!==n)throw TypeError("Bad Promise constructor");e=t,n=l})),this.resolve=l(e),this.reject=l(n)};t.exports.f=function(t){return new i(t)}},function(t,e,n){var l=n(24),i=n(101);(t.exports=function(t,e){return i[t]||(i[t]=void 0!==e?e:{})})("versions",[]).push({version:"3.22.1",mode:l?"pure":"global",copyright:"© 2014-2022 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.22.1/LICENSE",source:"https://github.com/zloirock/core-js"})},function(t,e,n){var l=n(1),i=n(135),c=n(10),o=n(40),r=n(7)("toStringTag"),a=l.Object,d="Arguments"==o(function(){return arguments}());t.exports=i?o:function(t){var e,n,l;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=function(t,e){try{return t[e]}catch(t){}}(e=a(t),r))?n:d?o(e):"Object"==(l=o(e))&&c(e.callee)?"Arguments":l}},function(t,e,n){var l=n(3),i=n(4),c=n(10),o=n(64),r=n(11),a=n(103),d=function(){},u=[],Z=r("Reflect","construct"),s=/^\s*(?:class|function)\b/,b=l(s.exec),I=!s.exec(d),m=function(t){if(!c(t))return!1;try{return Z(d,u,t),!0}catch(t){return!1}},h=function(t){if(!c(t))return!1;switch(o(t)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return I||!!b(s,a(t))}catch(t){return!0}};h.sham=!0,t.exports=!Z||i((function(){var t;return m(m.call)||!m(Object)||!m((function(){t=!0}))||t}))?h:m},function(t,e,n){"use strict";var l=n(11),i=n(16),c=n(7),o=n(9),r=c("species");t.exports=function(t){var e=l(t),n=i.f;o&&e&&!e[r]&&n(e,r,{configurable:!0,get:function(){return this}})}},function(t,e,n){var l=n(0),i=n(3),c=n(86),o=n(12),r=n(15),a=n(16).f,d=n(57),u=n(136),Z=n(114),s=n(85),b=n(93),I=!1,m=s("meta"),h=0,p=function(t){a(t,m,{value:{objectID:"O"+h++,weakData:{}}})},g=t.exports={enable:function(){g.enable=function(){},I=!0;var t=d.f,e=i([].splice),n={};n[m]=1,t(n).length&&(d.f=function(n){for(var l=t(n),i=0,c=l.length;i<c;i++)if(l[i]===m){e(l,i,1);break}return l},l({target:"Object",stat:!0,forced:!0},{getOwnPropertyNames:u.f}))},fastKey:function(t,e){if(!o(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!r(t,m)){if(!Z(t))return"F";if(!e)return"E";p(t)}return t[m].objectID},getWeakData:function(t,e){if(!r(t,m)){if(!Z(t))return!0;if(!e)return!1;p(t)}return t[m].weakData},onFreeze:function(t){return b&&I&&Z(t)&&!r(t,m)&&p(t),t}};c[m]=!0},function(t,e,n){"use strict";var l=n(5),i=n(6),c=n(2),o=n(29),r=n(28),a=n(46),d=n(7),u=n(20),Z=n(11),s=n(27),b=n(126),I=Z("Promise"),m=u.set,h=u.getterFor("AsyncIteratorProxy"),p=d("toStringTag");t.exports=function(t,e){var n=function(t){t.type="AsyncIteratorProxy",t.next=i(t.iterator.next),t.done=!1,t.ignoreArgument=!e,m(this,t)};return n.prototype=a(o(b),{next:function(n){var i=this,o=!!arguments.length;return new I((function(r){var a=h(i),d=o?[a.ignoreArgument?void 0:n]:e?[]:[void 0];a.ignoreArgument=!1,r(a.done?{done:!0,value:void 0}:c(l(t,a,I,d)))}))},return:function(t){var e=this;return new I((function(n,i){var o=h(e),r=o.iterator;o.done=!0;var a=s(r,"return");if(void 0===a)return n({done:!0,value:t});I.resolve(l(a,r,t)).then((function(e){c(e),n({done:!0,value:t})}),i)}))},throw:function(t){var e=this;return new I((function(n,i){var c=h(e),o=c.iterator;c.done=!0;var r=s(o,"throw");if(void 0===r)return i(t);n(l(r,o,t))}))}}),e||r(n.prototype,p,"Generator"),n}},function(t,e,n){"use strict";var l=n(5),i=n(6),c=n(2),o=n(29),r=n(28),a=n(46),d=n(7),u=n(20),Z=n(27),s=n(92).IteratorPrototype,b=u.set,I=u.getterFor("IteratorProxy"),m=d("toStringTag");t.exports=function(t,e){var n=function(t){t.type="IteratorProxy",t.next=i(t.iterator.next),t.done=!1,t.ignoreArg=!e,b(this,t)};return n.prototype=a(o(s),{next:function(n){var i=I(this),c=arguments.length?[i.ignoreArg?void 0:n]:e?[]:[void 0];i.ignoreArg=!1;var o=i.done?void 0:l(t,i,c);return{done:i.done,value:o}},return:function(t){var e=I(this),n=e.iterator;e.done=!0;var i=Z(n,"return");return{done:!0,value:i?c(l(i,n,t)).value:t}},throw:function(t){var e=I(this),n=e.iterator;e.done=!0;var i=Z(n,"throw");if(i)return l(i,n,t);throw t}}),e||r(n.prototype,m,"Generator"),n}},function(t,e,n){var l=n(5);t.exports=function(t){return l(Set.prototype.values,t)}},function(t,e,n){var l=n(1),i=n(11),c=n(10),o=n(36),r=n(164),a=l.Object;t.exports=r?function(t){return"symbol"==typeof t}:function(t){var e=i("Symbol");return c(e)&&o(e.prototype,a(t))}},function(t,e,n){var l=n(56),i=n(4);t.exports=!!Object.getOwnPropertySymbols&&!i((function(){var t=Symbol();return!String(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&l&&l<41}))},function(t,e,n){var l=n(1).String;t.exports=function(t){try{return l(t)}catch(t){return"Object"}}},function(t,e,n){var l=n(9),i=n(15),c=Function.prototype,o=l&&Object.getOwnPropertyDescriptor,r=i(c,"name"),a=r&&"something"===function(){}.name,d=r&&(!l||l&&o(c,"name").configurable);t.exports={EXISTS:r,PROPER:a,CONFIGURABLE:d}},function(t,e,n){var l=n(169),i=n(134);t.exports=Object.keys||function(t){return l(t,i)}},function(t,e,n){var l=n(223);t.exports=function(t,e){return new(l(t))(0===e?0:e)}},function(t,e,n){"use strict";var l=n(92).IteratorPrototype,i=n(29),c=n(43),o=n(41),r=n(91),a=function(){return this};t.exports=function(t,e,n,d){var u=e+" Iterator";return t.prototype=i(l,{next:c(+!d,n)}),o(t,u,!1,!0),r[u]=a,t}},function(t,e,n){var l=n(40),i=n(1);t.exports="process"==l(i.process)},function(t,e,n){var l=n(3),i=n(26),c=n(14),o=n(117),r=l("".replace),a="["+o+"]",d=RegExp("^"+a+a+"*"),u=RegExp(a+a+"*$"),Z=function(t){return function(e){var n=c(i(e));return 1&t&&(n=r(n,d,"")),2&t&&(n=r(n,u,"")),n}};t.exports={start:Z(1),end:Z(2),trim:Z(3)}},function(t,e){t.exports=function(t){try{return{error:!1,value:t()}}catch(t){return{error:!0,value:t}}}},function(t,e,n){var l=n(1);t.exports=l.Promise},function(t,e,n){var l=n(3),i=n(35),c=n(14),o=n(26),r=l("".charAt),a=l("".charCodeAt),d=l("".slice),u=function(t){return function(e,n){var l,u,Z=c(o(e)),s=i(n),b=Z.length;return s<0||s>=b?t?"":void 0:(l=a(Z,s))<55296||l>56319||s+1===b||(u=a(Z,s+1))<56320||u>57343?t?r(Z,s):l:t?d(Z,s,s+2):u-56320+(l-55296<<10)+65536}};t.exports={codeAt:u(!1),charAt:u(!0)}},function(t,e,n){var l=n(4);t.exports=!l((function(){var t=function(){}.bind();return"function"!=typeof t||t.hasOwnProperty("prototype")}))},function(t,e,n){var l=n(1),i=n(3),c=n(4),o=n(40),r=l.Object,a=i("".split);t.exports=c((function(){return!r("z").propertyIsEnumerable(0)}))?function(t){return"String"==o(t)?a(t,""):r(t)}:r},function(t,e,n){var l=n(3),i=0,c=Math.random(),o=l(1..toString);t.exports=function(t){return"Symbol("+(void 0===t?"":t)+")_"+o(++i+c,36)}},function(t,e){t.exports={}},function(t,e,n){var l=n(34),i=n(50),c=n(21),o=function(t){return function(e,n,o){var r,a=l(e),d=c(a),u=i(o,d);if(t&&n!=n){for(;d>u;)if((r=a[u++])!=r)return!0}else for(;d>u;u++)if((t||u in a)&&a[u]===n)return t||u||0;return!t&&-1}};t.exports={includes:o(!0),indexOf:o(!1)}},function(t,e,n){var l=n(4),i=n(10),c=/#|\.prototype\./,o=function(t,e){var n=a[r(t)];return n==u||n!=d&&(i(e)?l(e):!!e)},r=o.normalize=function(t){return String(t).replace(c,".").toLowerCase()},a=o.data={},d=o.NATIVE="N",u=o.POLYFILL="P";t.exports=o},function(t,e,n){var l=n(1),i=n(50),c=n(21),o=n(58),r=l.Array,a=Math.max;t.exports=function(t,e,n){for(var l=c(t),d=i(e,l),u=i(void 0===n?l:n,l),Z=r(a(u-d,0)),s=0;d<u;d++,s++)o(Z,s,t[d]);return Z.length=s,Z}},function(t,e,n){var l=n(4),i=n(7),c=n(56),o=i("species");t.exports=function(t){return c>=51||!l((function(){var e=[];return(e.constructor={})[o]=function(){return{foo:1}},1!==e[t](Boolean).foo}))}},function(t,e){t.exports={}},function(t,e,n){"use strict";var l,i,c,o=n(4),r=n(10),a=n(29),d=n(32),u=n(19),Z=n(7),s=n(24),b=Z("iterator"),I=!1;[].keys&&("next"in(c=[].keys())?(i=d(d(c)))!==Object.prototype&&(l=i):I=!0),null==l||o((function(){var t={};return l[b].call(t)!==t}))?l={}:s&&(l=a(l)),r(l[b])||u(l,b,(function(){return this})),t.exports={IteratorPrototype:l,BUGGY_SAFARI_ITERATORS:I}},function(t,e,n){var l=n(4);t.exports=!l((function(){return Object.isExtensible(Object.preventExtensions({}))}))},function(t,e,n){var l=n(1).TypeError;t.exports=function(t,e){if(t<e)throw l("Not enough arguments");return t}},function(t,e,n){var l=n(1),i=n(81),c=n(10),o=n(88),r=n(103),a=n(7),d=n(352),u=n(24),Z=n(56),s=i&&i.prototype,b=a("species"),I=!1,m=c(l.PromiseRejectionEvent),h=o("Promise",(function(){var t=r(i),e=t!==String(i);if(!e&&66===Z)return!0;if(u&&(!s.catch||!s.finally))return!0;if(Z>=51&&/native code/.test(t))return!1;var n=new i((function(t){t(1)})),l=function(t){t((function(){}),(function(){}))};return(n.constructor={})[b]=l,!(I=n.then((function(){}))instanceof l)||!e&&d&&!m}));t.exports={CONSTRUCTOR:h,REJECTION_EVENT:m,SUBCLASSING:I}},function(t,e,n){var l=n(12),i=n(40),c=n(7)("match");t.exports=function(t){var e;return l(t)&&(void 0!==(e=t[c])?!!e:"RegExp"==i(t))}},function(t,e,n){var l=n(1),i=n(5),c=n(2),o=n(10),r=n(40),a=n(122),d=l.TypeError;t.exports=function(t,e){var n=t.exec;if(o(n)){var l=i(n,t,e);return null!==l&&c(l),l}if("RegExp"===r(t))return i(a,t,e);throw d("RegExp#exec called on incompatible receiver")}},function(t,e,n){var l=n(1),i=n(35),c=l.RangeError;t.exports=function(t){var e=i(t);if(e<0)throw c("The argument can't be less than 0");return e}},function(t,e,n){"use strict";var l=n(1),i=n(5),c=n(6),o=n(2),r=n(11),a=n(27),d=l.TypeError,u=function(t){var e=0==t,n=1==t,l=2==t,u=3==t;return function(t,Z,s){o(t);var b=r("Promise"),I=c(t.next),m=0,h=void 0!==Z;return!h&&e||c(Z),new b((function(c,r){var p=function(e,n){try{var l=a(t,"return");if(l)return b.resolve(i(l,t)).then((function(){e(n)}),(function(t){r(t)}))}catch(t){return r(t)}e(n)},g=function(t){p(r,t)},G=function(){try{if(e&&m>9007199254740991&&h)throw d("The allowed number of iterations has been exceeded");b.resolve(o(i(I,t))).then((function(t){try{if(o(t).done)e?(s.length=m,c(s)):c(!u&&(l||void 0));else{var i=t.value;h?b.resolve(e?Z(i,m):Z(i)).then((function(t){n?G():l?t?G():p(c,!1):e?(s[m++]=t,G()):t?p(c,u||i):G()}),g):(s[m++]=i,G())}}catch(t){g(t)}}),g)}catch(t){g(t)}};G()}))}};t.exports={toArray:u(0),forEach:u(1),every:u(2),some:u(3),find:u(4)}},function(t,e,n){"use strict";var l={}.propertyIsEnumerable,i=Object.getOwnPropertyDescriptor,c=i&&!l.call({1:2},1);e.f=c?function(t){var e=i(this,t);return!!e&&e.enumerable}:l},function(t,e,n){var l=n(1),i=n(131),c=l["__core-js_shared__"]||i("__core-js_shared__",{});t.exports=c},function(t,e,n){var l=n(1),i=n(12),c=l.document,o=i(c)&&i(c.createElement);t.exports=function(t){return o?c.createElement(t):{}}},function(t,e,n){var l=n(3),i=n(10),c=n(101),o=l(Function.toString);i(c.inspectSource)||(c.inspectSource=function(t){return o(t)}),t.exports=c.inspectSource},function(t,e,n){var l=n(63),i=n(85),c=l("keys");t.exports=function(t){return c[t]||(c[t]=i(t))}},function(t,e){e.f=Object.getOwnPropertySymbols},function(t,e,n){var l=n(9),i=n(167),c=n(16),o=n(2),r=n(34),a=n(75);e.f=l&&!i?Object.defineProperties:function(t,e){o(t);for(var n,l=r(e),i=a(e),d=i.length,u=0;d>u;)c.f(t,n=i[u++],l[n]);return t}},function(t,e,n){var l=n(5),i=n(2),c=n(27);t.exports=function(t,e,n){var o,r;i(t);try{if(!(o=c(t,"return"))){if("throw"===e)throw n;return n}o=l(o,t)}catch(t){r=!0,o=t}if("throw"===e)throw n;if(r)throw o;return i(o),n}},function(t,e,n){var l=n(7)("iterator"),i=!1;try{var c=0,o={next:function(){return{done:!!c++}},return:function(){i=!0}};o[l]=function(){return this},Array.from(o,(function(){throw 2}))}catch(t){}t.exports=function(t,e){if(!e&&!i)return!1;var n=!1;try{var c={};c[l]=function(){return{next:function(){return{done:n=!0}}}},t(c)}catch(t){}return n}},function(t,e,n){"use strict";var l=n(34),i=n(44),c=n(91),o=n(20),r=n(16).f,a=n(140),d=n(24),u=n(9),Z=o.set,s=o.getterFor("Array Iterator");t.exports=a(Array,"Array",(function(t,e){Z(this,{type:"Array Iterator",target:l(t),index:0,kind:e})}),(function(){var t=s(this),e=t.target,n=t.kind,l=t.index++;return!e||l>=e.length?(t.target=void 0,{value:void 0,done:!0}):"keys"==n?{value:l,done:!1}:"values"==n?{value:e[l],done:!1}:{value:[l,e[l]],done:!1}}),"values");var b=c.Arguments=c.Array;if(i("keys"),i("values"),i("entries"),!d&&u&&"values"!==b.name)try{r(b,"name",{value:"values"})}catch(t){}},function(t,e,n){var l=n(1),i=n(6),c=n(13),o=n(84),r=n(21),a=l.TypeError,d=function(t){return function(e,n,l,d){i(n);var u=c(e),Z=o(u),s=r(u),b=t?s-1:0,I=t?-1:1;if(l<2)for(;;){if(b in Z){d=Z[b],b+=I;break}if(b+=I,t?b<0:s<=b)throw a("Reduce of empty array with no initial value")}for(;t?b>=0:s>b;b+=I)b in Z&&(d=n(d,Z[b],b,u));return d}};t.exports={left:d(!1),right:d(!0)}},function(t,e,n){"use strict";var l=n(1),i=n(3),c=n(9),o=n(144),r=n(74),a=n(28),d=n(46),u=n(4),Z=n(42),s=n(35),b=n(37),I=n(183),m=n(270),h=n(32),p=n(52),g=n(57).f,G=n(16).f,y=n(137),X=n(89),V=n(41),W=n(20),C=r.PROPER,R=r.CONFIGURABLE,f=W.get,S=W.set,v=l.ArrayBuffer,Y=v,K=Y&&Y.prototype,N=l.DataView,J=N&&N.prototype,H=Object.prototype,U=l.Array,L=l.RangeError,B=i(y),k=i([].reverse),x=m.pack,T=m.unpack,F=function(t){return[255&t]},A=function(t){return[255&t,t>>8&255]},z=function(t){return[255&t,t>>8&255,t>>16&255,t>>24&255]},w=function(t){return t[3]<<24|t[2]<<16|t[1]<<8|t[0]},P=function(t){return x(t,23,4)},Q=function(t){return x(t,52,8)},j=function(t,e){G(t.prototype,e,{get:function(){return f(this)[e]}})},M=function(t,e,n,l){var i=I(n),c=f(t);if(i+e>c.byteLength)throw L("Wrong index");var o=f(c.buffer).bytes,r=i+c.byteOffset,a=X(o,r,r+e);return l?a:k(a)},E=function(t,e,n,l,i,c){var o=I(n),r=f(t);if(o+e>r.byteLength)throw L("Wrong index");for(var a=f(r.buffer).bytes,d=o+r.byteOffset,u=l(+i),Z=0;Z<e;Z++)a[d+Z]=u[c?Z:e-Z-1]};if(o){var D=C&&"ArrayBuffer"!==v.name;if(u((function(){v(1)}))&&u((function(){new v(-1)}))&&!u((function(){return new v,new v(1.5),new v(NaN),D&&!R})))D&&R&&a(v,"name","ArrayBuffer");else{(Y=function(t){return Z(this,K),new v(I(t))}).prototype=K;for(var O,_=g(v),q=0;_.length>q;)(O=_[q++])in Y||a(Y,O,v[O]);K.constructor=Y}p&&h(J)!==H&&p(J,H);var $=new N(new Y(2)),tt=i(J.setInt8);$.setInt8(0,2147483648),$.setInt8(1,2147483649),!$.getInt8(0)&&$.getInt8(1)||d(J,{setInt8:function(t,e){tt(this,t,e<<24>>24)},setUint8:function(t,e){tt(this,t,e<<24>>24)}},{unsafe:!0})}else K=(Y=function(t){Z(this,K);var e=I(t);S(this,{bytes:B(U(e),0),byteLength:e}),c||(this.byteLength=e)}).prototype,J=(N=function(t,e,n){Z(this,J),Z(t,K);var l=f(t).byteLength,i=s(e);if(i<0||i>l)throw L("Wrong offset");if(i+(n=void 0===n?l-i:b(n))>l)throw L("Wrong length");S(this,{buffer:t,byteLength:n,byteOffset:i}),c||(this.buffer=t,this.byteLength=n,this.byteOffset=i)}).prototype,c&&(j(Y,"byteLength"),j(N,"buffer"),j(N,"byteLength"),j(N,"byteOffset")),d(J,{getInt8:function(t){return M(this,1,t)[0]<<24>>24},getUint8:function(t){return M(this,1,t)[0]},getInt16:function(t){var e=M(this,2,t,arguments.length>1?arguments[1]:void 0);return(e[1]<<8|e[0])<<16>>16},getUint16:function(t){var e=M(this,2,t,arguments.length>1?arguments[1]:void 0);return e[1]<<8|e[0]},getInt32:function(t){return w(M(this,4,t,arguments.length>1?arguments[1]:void 0))},getUint32:function(t){return w(M(this,4,t,arguments.length>1?arguments[1]:void 0))>>>0},getFloat32:function(t){return T(M(this,4,t,arguments.length>1?arguments[1]:void 0),23)},getFloat64:function(t){return T(M(this,8,t,arguments.length>1?arguments[1]:void 0),52)},setInt8:function(t,e){E(this,1,t,F,e)},setUint8:function(t,e){E(this,1,t,F,e)},setInt16:function(t,e){E(this,2,t,A,e,arguments.length>2?arguments[2]:void 0)},setUint16:function(t,e){E(this,2,t,A,e,arguments.length>2?arguments[2]:void 0)},setInt32:function(t,e){E(this,4,t,z,e,arguments.length>2?arguments[2]:void 0)},setUint32:function(t,e){E(this,4,t,z,e,arguments.length>2?arguments[2]:void 0)},setFloat32:function(t,e){E(this,4,t,P,e,arguments.length>2?arguments[2]:void 0)},setFloat64:function(t,e){E(this,8,t,Q,e,arguments.length>2?arguments[2]:void 0)}});V(Y,"ArrayBuffer"),V(N,"DataView"),t.exports={ArrayBuffer:Y,DataView:N}},function(t,e,n){var l=n(1),i=n(65),c=n(73),o=l.TypeError;t.exports=function(t){if(i(t))return t;throw o(c(t)+" is not a constructor")}},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(3),o=n(88),r=n(19),a=n(67),d=n(8),u=n(42),Z=n(10),s=n(12),b=n(4),I=n(108),m=n(41),h=n(115);t.exports=function(t,e,n){var p=-1!==t.indexOf("Map"),g=-1!==t.indexOf("Weak"),G=p?"set":"add",y=i[t],X=y&&y.prototype,V=y,W={},C=function(t){var e=c(X[t]);r(X,t,"add"==t?function(t){return e(this,0===t?0:t),this}:"delete"==t?function(t){return!(g&&!s(t))&&e(this,0===t?0:t)}:"get"==t?function(t){return g&&!s(t)?void 0:e(this,0===t?0:t)}:"has"==t?function(t){return!(g&&!s(t))&&e(this,0===t?0:t)}:function(t,n){return e(this,0===t?0:t,n),this})};if(o(t,!Z(y)||!(g||X.forEach&&!b((function(){(new y).entries().next()})))))V=n.getConstructor(e,t,p,G),a.enable();else if(o(t,!0)){var R=new V,f=R[G](g?{}:-0,1)!=R,S=b((function(){R.has(1)})),v=I((function(t){new y(t)})),Y=!g&&b((function(){for(var t=new y,e=5;e--;)t[G](e,e);return!t.has(-0)}));v||((V=e((function(t,e){u(t,X);var n=h(new y,t,V);return null!=e&&d(e,n[G],{that:n,AS_ENTRIES:p}),n}))).prototype=X,X.constructor=V),(S||Y)&&(C("delete"),C("has"),p&&C("get")),(Y||f)&&C(G),g&&X.clear&&delete X.clear}return W[t]=V,l({global:!0,forced:V!=y},W),m(V,t),g||n.setStrong(V,t,p),V}},function(t,e,n){var l=n(4),i=n(12),c=n(40),o=n(148),r=Object.isExtensible,a=l((function(){r(1)}));t.exports=a||o?function(t){return!!i(t)&&((!o||"ArrayBuffer"!=c(t))&&(!r||r(t)))}:r},function(t,e,n){var l=n(10),i=n(12),c=n(52);t.exports=function(t,e,n){var o,r;return c&&l(o=e.constructor)&&o!==n&&i(r=o.prototype)&&r!==n.prototype&&c(t,r),t}},function(t,e){var n=Math.expm1,l=Math.exp;t.exports=!n||n(10)>22025.465794806718||n(10)<22025.465794806718||-2e-17!=n(-2e-17)?function(t){return 0==(t=+t)?t:t>-1e-6&&t<1e-6?t+t*t/2:l(t)-1}:n},function(t,e){t.exports="\t\n\v\f\r \u2028\u2029\ufeff"},function(t,e,n){"use strict";var l=n(24),i=n(1),c=n(4),o=n(143);t.exports=l||!c((function(){if(!(o&&o<535)){var t=Math.random();__defineSetter__.call(null,t,(function(){})),delete i[t]}}))},function(t,e,n){var l,i,c,o,r=n(1),a=n(18),d=n(22),u=n(10),Z=n(15),s=n(4),b=n(170),I=n(60),m=n(102),h=n(94),p=n(193),g=n(78),G=r.setImmediate,y=r.clearImmediate,X=r.process,V=r.Dispatch,W=r.Function,C=r.MessageChannel,R=r.String,f=0,S={};try{l=r.location}catch(t){}var v=function(t){if(Z(S,t)){var e=S[t];delete S[t],e()}},Y=function(t){return function(){v(t)}},K=function(t){v(t.data)},N=function(t){r.postMessage(R(t),l.protocol+"//"+l.host)};G&&y||(G=function(t){h(arguments.length,1);var e=u(t)?t:W(t),n=I(arguments,1);return S[++f]=function(){a(e,void 0,n)},i(f),f},y=function(t){delete S[t]},g?i=function(t){X.nextTick(Y(t))}:V&&V.now?i=function(t){V.now(Y(t))}:C&&!p?(o=(c=new C).port2,c.port1.onmessage=K,i=d(o.postMessage,o)):r.addEventListener&&u(r.postMessage)&&!r.importScripts&&l&&"file:"!==l.protocol&&!s(N)?(i=N,r.addEventListener("message",K,!1)):i="onreadystatechange"in m("script")?function(t){b.appendChild(m("script")).onreadystatechange=function(){b.removeChild(this),v(t)}}:function(t){setTimeout(Y(t),0)}),t.exports={set:G,clear:y}},function(t,e,n){var l=n(5),i=n(15),c=n(36),o=n(153),r=RegExp.prototype;t.exports=function(t){var e=t.flags;return void 0!==e||"flags"in r||i(t,"flags")||!c(r,t)?e:l(o,t)}},function(t,e,n){var l=n(4),i=n(1).RegExp,c=l((function(){var t=i("a","y");return t.lastIndex=2,null!=t.exec("abcd")})),o=c||l((function(){return!i("a","y").sticky})),r=c||l((function(){var t=i("^r","gy");return t.lastIndex=2,null!=t.exec("str")}));t.exports={BROKEN_CARET:r,MISSED_STICKY:o,UNSUPPORTED_Y:c}},function(t,e,n){"use strict";var l,i,c=n(5),o=n(3),r=n(14),a=n(153),d=n(121),u=n(63),Z=n(29),s=n(20).get,b=n(199),I=n(200),m=u("native-string-replace",String.prototype.replace),h=RegExp.prototype.exec,p=h,g=o("".charAt),G=o("".indexOf),y=o("".replace),X=o("".slice),V=(i=/b*/g,c(h,l=/a/,"a"),c(h,i,"a"),0!==l.lastIndex||0!==i.lastIndex),W=d.BROKEN_CARET,C=void 0!==/()??/.exec("")[1];(V||C||W||b||I)&&(p=function(t){var e,n,l,i,o,d,u,b=this,I=s(b),R=r(t),f=I.raw;if(f)return f.lastIndex=b.lastIndex,e=c(p,f,R),b.lastIndex=f.lastIndex,e;var S=I.groups,v=W&&b.sticky,Y=c(a,b),K=b.source,N=0,J=R;if(v&&(Y=y(Y,"y",""),-1===G(Y,"g")&&(Y+="g"),J=X(R,b.lastIndex),b.lastIndex>0&&(!b.multiline||b.multiline&&"\n"!==g(R,b.lastIndex-1))&&(K="(?: "+K+")",J=" "+J,N++),n=new RegExp("^(?:"+K+")",Y)),C&&(n=new RegExp("^"+K+"$(?!\\s)",Y)),V&&(l=b.lastIndex),i=c(h,v?n:b,J),v?i?(i.input=X(i.input,N),i[0]=X(i[0],N),i.index=b.lastIndex,b.lastIndex+=i[0].length):b.lastIndex=0:V&&i&&(b.lastIndex=b.global?i.index+i[0].length:l),C&&i&&i.length>1&&c(m,i[0],n,(function(){for(o=1;o<arguments.length-2;o++)void 0===arguments[o]&&(i[o]=void 0)})),i&&S)for(i.groups=d=Z(null),o=0;o<S.length;o++)d[(u=S[o])[0]]=i[u[1]];return i}),t.exports=p},function(t,e,n){"use strict";n(154);var l=n(3),i=n(19),c=n(122),o=n(4),r=n(7),a=n(28),d=r("species"),u=RegExp.prototype;t.exports=function(t,e,n,Z){var s=r(t),b=!o((function(){var e={};return e[s]=function(){return 7},7!=""[t](e)})),I=b&&!o((function(){var e=!1,n=/a/;return"split"===t&&((n={}).constructor={},n.constructor[d]=function(){return n},n.flags="",n[s]=/./[s]),n.exec=function(){return e=!0,null},n[s](""),!e}));if(!b||!I||n){var m=l(/./[s]),h=e(s,""[t],(function(t,e,n,i,o){var r=l(t),a=e.exec;return a===c||a===u.exec?b&&!o?{done:!0,value:m(e,n,i)}:{done:!0,value:r(n,e,i)}:{done:!1}}));i(String.prototype,t,h[0]),i(u,s,h[1])}Z&&a(u[s],"sham",!0)}},function(t,e,n){"use strict";var l=n(82).charAt;t.exports=function(t,e,n){return e+(n?l(t,e).length:1)}},function(t,e,n){var l=n(17),i=n(33),c=l.TYPED_ARRAY_CONSTRUCTOR,o=l.aTypedArrayConstructor;t.exports=function(t){return o(i(t,t[c]))}},function(t,e,n){var l,i,c=n(1),o=n(101),r=n(10),a=n(29),d=n(32),u=n(19),Z=n(7),s=n(24),b=Z("asyncIterator"),I=c.AsyncIterator,m=o.AsyncIteratorPrototype;if(m)l=m;else if(r(I))l=I.prototype;else if(o.USE_FUNCTION_CONSTRUCTOR||c.USE_FUNCTION_CONSTRUCTOR)try{i=d(d(d(Function("return async function*(){}()")()))),d(i)===Object.prototype&&(l=i)}catch(t){}l?s&&(l=a(l)):l={},r(l[b])||u(l,b,(function(){return this})),t.exports=l},function(t,e,n){"use strict";var l=n(5),i=n(6),c=n(2);t.exports=function(){for(var t,e=c(this),n=i(e.delete),o=!0,r=0,a=arguments.length;r<a;r++)t=l(n,e,arguments[r]),o=o&&t;return!!o}},function(t,e,n){"use strict";var l=n(22),i=n(5),c=n(6),o=n(112),r=n(8),a=[].push;t.exports=function(t){var e,n,d,u,Z=arguments.length,s=Z>1?arguments[1]:void 0;return o(this),(e=void 0!==s)&&c(s),null==t?new this:(n=[],e?(d=0,u=l(s,Z>2?arguments[2]:void 0),r(t,(function(t){i(a,n,u(t,d++))}))):r(t,a,{that:n}),new this(n))}},function(t,e,n){"use strict";var l=n(60);t.exports=function(){return new this(l(arguments))}},function(t,e,n){var l=n(1),i=n(5),c=n(12),o=n(71),r=n(27),a=n(165),d=n(7),u=l.TypeError,Z=d("toPrimitive");t.exports=function(t,e){if(!c(t)||o(t))return t;var n,l=r(t,Z);if(l){if(void 0===e&&(e="default"),n=i(l,t,e),!c(n)||o(n))return n;throw u("Can't convert object to primitive value")}return void 0===e&&(e="number"),a(t,e)}},function(t,e,n){var l=n(1),i=Object.defineProperty;t.exports=function(t,e){try{i(l,t,{value:e,configurable:!0,writable:!0})}catch(n){l[t]=e}return e}},function(t,e,n){var l=n(15),i=n(133),c=n(31),o=n(16);t.exports=function(t,e,n){for(var r=i(e),a=o.f,d=c.f,u=0;u<r.length;u++){var Z=r[u];l(t,Z)||n&&l(n,Z)||a(t,Z,d(e,Z))}}},function(t,e,n){var l=n(11),i=n(3),c=n(57),o=n(105),r=n(2),a=i([].concat);t.exports=l("Reflect","ownKeys")||function(t){var e=c.f(r(t)),n=o.f;return n?a(e,n(t)):e}},function(t,e){t.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},function(t,e,n){var l={};l[n(7)("toStringTag")]="z",t.exports="[object z]"===String(l)},function(t,e,n){var l=n(40),i=n(34),c=n(57).f,o=n(89),r="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];t.exports.f=function(t){return r&&"Window"==l(t)?function(t){try{return c(t)}catch(t){return o(r)}}(t):c(i(t))}},function(t,e,n){"use strict";var l=n(13),i=n(50),c=n(21);t.exports=function(t){for(var e=l(this),n=c(e),o=arguments.length,r=i(o>1?arguments[1]:void 0,n),a=o>2?arguments[2]:void 0,d=void 0===a?n:i(a,n);d>r;)e[r++]=t;return e}},function(t,e,n){var l=n(2),i=n(107);t.exports=function(t,e,n,c){try{return c?e(l(n)[0],n[1]):e(n)}catch(e){i(t,"throw",e)}}},function(t,e,n){var l=n(7),i=n(91),c=l("iterator"),o=Array.prototype;t.exports=function(t){return void 0!==t&&(i.Array===t||o[c]===t)}},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(24),o=n(74),r=n(10),a=n(77),d=n(32),u=n(52),Z=n(41),s=n(28),b=n(19),I=n(7),m=n(91),h=n(92),p=o.PROPER,g=o.CONFIGURABLE,G=h.IteratorPrototype,y=h.BUGGY_SAFARI_ITERATORS,X=I("iterator"),V=function(){return this};t.exports=function(t,e,n,o,I,h,W){a(n,e,o);var C,R,f,S=function(t){if(t===I&&J)return J;if(!y&&t in K)return K[t];switch(t){case"keys":case"values":case"entries":return function(){return new n(this,t)}}return function(){return new n(this)}},v=e+" Iterator",Y=!1,K=t.prototype,N=K[X]||K["@@iterator"]||I&&K[I],J=!y&&N||S(I),H="Array"==e&&K.entries||N;if(H&&(C=d(H.call(new t)))!==Object.prototype&&C.next&&(c||d(C)===G||(u?u(C,G):r(C[X])||b(C,X,V)),Z(C,v,!0,!0),c&&(m[v]=V)),p&&"values"==I&&N&&"values"!==N.name&&(!c&&g?s(K,"name","values"):(Y=!0,J=function(){return i(N,this)})),I)if(R={values:S("values"),keys:h?J:S("keys"),entries:S("entries")},W)for(f in R)(y||Y||!(f in K))&&b(K,f,R[f]);else l({target:e,proto:!0,forced:y||Y},R);return c&&!W||K[X]===J||b(K,X,J,{name:I}),m[e]=J,R}},function(t,e,n){var l=n(4);t.exports=!l((function(){function t(){}return t.prototype.constructor=null,Object.getPrototypeOf(new t)!==t.prototype}))},function(t,e,n){var l=n(89),i=Math.floor,c=function(t,e){var n=t.length,a=i(n/2);return n<8?o(t,e):r(t,c(l(t,0,a),e),c(l(t,a),e),e)},o=function(t,e){for(var n,l,i=t.length,c=1;c<i;){for(l=c,n=t[c];l&&e(t[l-1],n)>0;)t[l]=t[--l];l!==c++&&(t[l]=n)}return t},r=function(t,e,n,l){for(var i=e.length,c=n.length,o=0,r=0;o<i||r<c;)t[o+r]=o<i&&r<c?l(e[o],n[r])<=0?e[o++]:n[r++]:o<i?e[o++]:n[r++];return t};t.exports=c},function(t,e,n){var l=n(49).match(/AppleWebKit\/(\d+)\./);t.exports=!!l&&+l[1]},function(t,e){t.exports="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof DataView},function(t,e,n){var l=n(3),i=n(37),c=n(14),o=n(146),r=n(26),a=l(o),d=l("".slice),u=Math.ceil,Z=function(t){return function(e,n,l){var o,Z,s=c(r(e)),b=i(n),I=s.length,m=void 0===l?" ":c(l);return b<=I||""==m?s:((Z=a(m,u((o=b-I)/m.length))).length>o&&(Z=d(Z,0,o)),t?s+Z:Z+s)}};t.exports={start:Z(!1),end:Z(!0)}},function(t,e,n){"use strict";var l=n(1),i=n(35),c=n(14),o=n(26),r=l.RangeError;t.exports=function(t){var e=c(o(this)),n="",l=i(t);if(l<0||l==1/0)throw r("Wrong number of repetitions");for(;l>0;(l>>>=1)&&(e+=e))1&l&&(n+=e);return n}},function(t,e,n){n(287)},function(t,e,n){var l=n(4);t.exports=l((function(){if("function"==typeof ArrayBuffer){var t=new ArrayBuffer(8);Object.isExtensible(t)&&Object.defineProperty(t,"a",{value:8})}}))},function(t,e){t.exports=Math.sign||function(t){return 0==(t=+t)||t!=t?t:t<0?-1:1}},function(t,e,n){var l=n(3);t.exports=l(1..valueOf)},function(t,e,n){var l=n(12),i=Math.floor;t.exports=Number.isInteger||function(t){return!l(t)&&isFinite(t)&&i(t)===t}},function(t,e,n){var l=n(1),i=n(4),c=n(3),o=n(14),r=n(79).trim,a=n(117),d=l.parseInt,u=l.Symbol,Z=u&&u.iterator,s=/^[+-]?0x/i,b=c(s.exec),I=8!==d(a+"08")||22!==d(a+"0x16")||Z&&!i((function(){d(Object(Z))}));t.exports=I?function(t,e){var n=r(o(t));return d(n,e>>>0||(b(s,n)?16:10))}:d},function(t,e,n){"use strict";var l=n(2);t.exports=function(){var t=l(this),e="";return t.hasIndices&&(e+="d"),t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.dotAll&&(e+="s"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e}},function(t,e,n){"use strict";var l=n(0),i=n(122);l({target:"RegExp",proto:!0,forced:/./.exec!==i},{exec:i})},function(t,e,n){var l=n(1),i=n(96),c=l.TypeError;t.exports=function(t){if(i(t))throw c("The method doesn't accept regular expressions");return t}},function(t,e,n){var l=n(7)("match");t.exports=function(t){var e=/./;try{"/./"[t](e)}catch(n){try{return e[l]=!1,"/./"[t](e)}catch(t){}}return!1}},function(t,e,n){var l=n(74).PROPER,i=n(4),c=n(117);t.exports=function(t){return i((function(){return!!c[t]()||"
"!=="
"[t]()||l&&c[t].name!==t}))}},function(t,e,n){var l=n(1),i=n(4),c=n(108),o=n(17).NATIVE_ARRAY_BUFFER_VIEWS,r=l.ArrayBuffer,a=l.Int8Array;t.exports=!o||!i((function(){a(1)}))||!i((function(){new a(-1)}))||!c((function(t){new a,new a(null),new a(1.5),new a(t)}),!0)||i((function(){return 1!==new a(new r(2),1,void 0).length}))},function(t,e,n){n(449)},function(t,e,n){"use strict";var l=n(1),i=n(5),c=n(6),o=n(10),r=n(2),a=l.TypeError;t.exports=function(t,e){var n,l=r(this),d=c(l.get),u=c(l.has),Z=c(l.set),s=arguments.length>2?arguments[2]:void 0;if(!o(e)&&!o(s))throw a("At least one callback required");return i(u,l,t)?(n=i(d,l,t),o(e)&&(n=e(n),i(Z,l,t,n))):o(s)&&(n=s(),i(Z,l,t,n)),n}},function(t,e,n){"use strict";var l=n(20),i=n(77),c=n(15),o=n(75),r=n(13),a=l.set,d=l.getterFor("Object Iterator");t.exports=i((function(t,e){var n=r(t);a(this,{type:"Object Iterator",mode:e,object:n,keys:o(n),index:0})}),"Object",(function(){for(var t=d(this),e=t.keys;;){if(null===e||t.index>=e.length)return t.object=t.keys=null,{value:void 0,done:!0};var n=e[t.index++],l=t.object;if(c(l,n)){switch(t.mode){case"keys":return{value:n,done:!1};case"values":return{value:l[n],done:!1}}return{value:[n,l[n]],done:!1}}}}))},function(t,e,n){var l=n(1),i=n(10),c=n(7)("observable"),o=l.Observable,r=o&&o.prototype;t.exports=!(i(o)&&i(o.from)&&i(o.of)&&i(r.subscribe)&&i(r[c]))},function(t,e){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(t){"object"==typeof window&&(n=window)}t.exports=n},function(t,e,n){var l=n(72);t.exports=l&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},function(t,e,n){var l=n(1),i=n(5),c=n(10),o=n(12),r=l.TypeError;t.exports=function(t,e){var n,l;if("string"===e&&c(n=t.toString)&&!o(l=i(n,t)))return l;if(c(n=t.valueOf)&&!o(l=i(n,t)))return l;if("string"!==e&&c(n=t.toString)&&!o(l=i(n,t)))return l;throw r("Can't convert object to primitive value")}},function(t,e,n){var l=n(9),i=n(4),c=n(102);t.exports=!l&&!i((function(){return 7!=Object.defineProperty(c("div"),"a",{get:function(){return 7}}).a}))},function(t,e,n){var l=n(9),i=n(4);t.exports=l&&i((function(){return 42!=Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype}))},function(t,e,n){var l=n(1),i=n(10),c=n(103),o=l.WeakMap;t.exports=i(o)&&/native code/.test(c(o))},function(t,e,n){var l=n(3),i=n(15),c=n(34),o=n(87).indexOf,r=n(86),a=l([].push);t.exports=function(t,e){var n,l=c(t),d=0,u=[];for(n in l)!i(r,n)&&i(l,n)&&a(u,n);for(;e.length>d;)i(l,n=e[d++])&&(~o(u,n)||a(u,n));return u}},function(t,e,n){var l=n(11);t.exports=l("document","documentElement")},function(t,e,n){var l=n(7);e.f=l},function(t,e,n){var l=n(5),i=n(11),c=n(7),o=n(19);t.exports=function(){var t=i("Symbol"),e=t&&t.prototype,n=e&&e.valueOf,r=c("toPrimitive");e&&!e[r]&&o(e,r,(function(t){return l(n,this)}))}},function(t,e,n){var l=n(72);t.exports=l&&!!Symbol.for&&!!Symbol.keyFor},function(t,e,n){var l=n(0),i=n(11),c=n(18),o=n(5),r=n(3),a=n(4),d=n(59),u=n(10),Z=n(12),s=n(71),b=n(60),I=n(72),m=i("JSON","stringify"),h=r(/./.exec),p=r("".charAt),g=r("".charCodeAt),G=r("".replace),y=r(1..toString),X=/[\uD800-\uDFFF]/g,V=/^[\uD800-\uDBFF]$/,W=/^[\uDC00-\uDFFF]$/,C=!I||a((function(){var t=i("Symbol")();return"[null]"!=m([t])||"{}"!=m({a:t})||"{}"!=m(Object(t))})),R=a((function(){return'"\\udf06\\ud834"'!==m("\udf06\ud834")||'"\\udead"'!==m("\udead")})),f=function(t,e){var n=b(arguments),l=e;if((Z(e)||void 0!==t)&&!s(t))return d(e)||(e=function(t,e){if(u(l)&&(e=o(l,this,t,e)),!s(e))return e}),n[1]=e,c(m,null,n)},S=function(t,e,n){var l=p(n,e-1),i=p(n,e+1);return h(V,t)&&!h(W,i)||h(W,t)&&!h(V,l)?"\\u"+y(g(t,0),16):t};m&&l({target:"JSON",stat:!0,forced:C||R},{stringify:function(t,e,n){var l=b(arguments),i=c(C?f:m,null,l);return R&&"string"==typeof i?G(i,X,S):i}})},function(t,e,n){"use strict";var l=n(13),i=n(50),c=n(21),o=Math.min;t.exports=[].copyWithin||function(t,e){var n=l(this),r=c(n),a=i(t,r),d=i(e,r),u=arguments.length>2?arguments[2]:void 0,Z=o((void 0===u?r:i(u,r))-d,r-a),s=1;for(d<a&&a<d+Z&&(s=-1,d+=Z-1,a+=Z-1);Z-- >0;)d in n?n[a]=n[d]:delete n[a],a+=s,d+=s;return n}},function(t,e,n){"use strict";var l=n(1),i=n(59),c=n(21),o=n(22),r=l.TypeError,a=function(t,e,n,l,d,u,Z,s){for(var b,I,m=d,h=0,p=!!Z&&o(Z,s);h<l;){if(h in n){if(b=p?p(n[h],h,e):n[h],u>0&&i(b))I=c(b),m=a(t,e,b,I,m,u-1)-1;else{if(m>=9007199254740991)throw r("Exceed the acceptable array length");t[m]=b}m++}h++}return m};t.exports=a},function(t,e,n){"use strict";var l=n(30).forEach,i=n(51)("forEach");t.exports=i?[].forEach:function(t){return l(this,t,arguments.length>1?arguments[1]:void 0)}},function(t,e,n){"use strict";var l=n(1),i=n(22),c=n(5),o=n(13),r=n(138),a=n(139),d=n(65),u=n(21),Z=n(58),s=n(45),b=n(61),I=l.Array;t.exports=function(t){var e=o(t),n=d(this),l=arguments.length,m=l>1?arguments[1]:void 0,h=void 0!==m;h&&(m=i(m,l>2?arguments[2]:void 0));var p,g,G,y,X,V,W=b(e),C=0;if(!W||this==I&&a(W))for(p=u(e),g=n?new this(p):I(p);p>C;C++)V=h?m(e[C],C):e[C],Z(g,C,V);else for(X=(y=s(e,W)).next,g=n?new this:[];!(G=c(X,y)).done;C++)V=h?r(y,m,[G.value,C],!0):G.value,Z(g,C,V);return g.length=C,g}},function(t,e,n){var l=n(1),i=n(10),c=l.String,o=l.TypeError;t.exports=function(t){if("object"==typeof t||i(t))return t;throw o("Can't set "+c(t)+" as a prototype")}},function(t,e,n){"use strict";var l=n(18),i=n(34),c=n(35),o=n(21),r=n(51),a=Math.min,d=[].lastIndexOf,u=!!d&&1/[1].lastIndexOf(1,-0)<0,Z=r("lastIndexOf"),s=u||!Z;t.exports=s?function(t){if(u)return l(d,this,arguments)||0;var e=i(this),n=o(e),r=n-1;for(arguments.length>1&&(r=a(r,c(arguments[1]))),r<0&&(r=n+r);r>=0;r--)if(r in e&&e[r]===t)return r||0;return-1}:d},function(t,e,n){var l=n(49).match(/firefox\/(\d+)/i);t.exports=!!l&&+l[1]},function(t,e,n){var l=n(49);t.exports=/MSIE|Trident/.test(l)},function(t,e,n){var l=n(1),i=n(35),c=n(37),o=l.RangeError;t.exports=function(t){if(void 0===t)return 0;var e=i(t),n=c(e);if(e!==n)throw o("Wrong length or index");return n}},function(t,e,n){"use strict";var l=n(1),i=n(3),c=n(6),o=n(12),r=n(15),a=n(60),d=n(83),u=l.Function,Z=i([].concat),s=i([].join),b={},I=function(t,e,n){if(!r(b,e)){for(var l=[],i=0;i<e;i++)l[i]="a["+i+"]";b[e]=u("C,a","return new C("+s(l,",")+")")}return b[e](t,n)};t.exports=d?u.bind:function(t){var e=c(this),n=e.prototype,l=a(arguments,1),i=function(){var n=Z(l,a(arguments));return this instanceof i?I(e,n.length,n):e.apply(t,n)};return o(n)&&(i.prototype=n),i}},function(t,e,n){"use strict";var l=n(16).f,i=n(29),c=n(46),o=n(22),r=n(42),a=n(8),d=n(140),u=n(66),Z=n(9),s=n(67).fastKey,b=n(20),I=b.set,m=b.getterFor;t.exports={getConstructor:function(t,e,n,d){var u=t((function(t,l){r(t,b),I(t,{type:e,index:i(null),first:void 0,last:void 0,size:0}),Z||(t.size=0),null!=l&&a(l,t[d],{that:t,AS_ENTRIES:n})})),b=u.prototype,h=m(e),p=function(t,e,n){var l,i,c=h(t),o=g(t,e);return o?o.value=n:(c.last=o={index:i=s(e,!0),key:e,value:n,previous:l=c.last,next:void 0,removed:!1},c.first||(c.first=o),l&&(l.next=o),Z?c.size++:t.size++,"F"!==i&&(c.index[i]=o)),t},g=function(t,e){var n,l=h(t),i=s(e);if("F"!==i)return l.index[i];for(n=l.first;n;n=n.next)if(n.key==e)return n};return c(b,{clear:function(){for(var t=h(this),e=t.index,n=t.first;n;)n.removed=!0,n.previous&&(n.previous=n.previous.next=void 0),delete e[n.index],n=n.next;t.first=t.last=void 0,Z?t.size=0:this.size=0},delete:function(t){var e=h(this),n=g(this,t);if(n){var l=n.next,i=n.previous;delete e.index[n.index],n.removed=!0,i&&(i.next=l),l&&(l.previous=i),e.first==n&&(e.first=l),e.last==n&&(e.last=i),Z?e.size--:this.size--}return!!n},forEach:function(t){for(var e,n=h(this),l=o(t,arguments.length>1?arguments[1]:void 0);e=e?e.next:n.first;)for(l(e.value,e.key,this);e&&e.removed;)e=e.previous},has:function(t){return!!g(this,t)}}),c(b,n?{get:function(t){var e=g(this,t);return e&&e.value},set:function(t,e){return p(this,0===t?0:t,e)}}:{add:function(t){return p(this,t=0===t?0:t,t)}}),Z&&l(b,"size",{get:function(){return h(this).size}}),u},setStrong:function(t,e,n){var l=e+" Iterator",i=m(e),c=m(l);d(t,e,(function(t,e){I(this,{type:l,target:t,state:i(t),kind:e,last:void 0})}),(function(){for(var t=c(this),e=t.kind,n=t.last;n&&n.removed;)n=n.previous;return t.target&&(t.last=n=n?n.next:t.state.first)?"keys"==e?{value:n.key,done:!1}:"values"==e?{value:n.value,done:!1}:{value:[n.key,n.value],done:!1}:(t.target=void 0,{value:void 0,done:!0})}),n?"entries":"values",!n,!0),u(e)}}},function(t,e){var n=Math.log;t.exports=Math.log1p||function(t){return(t=+t)>-1e-8&&t<1e-8?t-t*t/2:n(1+t)}},function(t,e,n){var l=n(149),i=Math.abs,c=Math.pow,o=c(2,-52),r=c(2,-23),a=c(2,127)*(2-r),d=c(2,-126);t.exports=Math.fround||function(t){var e,n,c=i(t),u=l(t);return c<d?u*(c/d/r+1/o-1/o)*d*r:(n=(e=(1+r/o)*c)-(e-c))>a||n!=n?u*(1/0):u*n}},function(t,e,n){var l=n(1).isFinite;t.exports=Number.isFinite||function(t){return"number"==typeof t&&l(t)}},function(t,e,n){var l=n(1),i=n(4),c=n(3),o=n(14),r=n(79).trim,a=n(117),d=c("".charAt),u=l.parseFloat,Z=l.Symbol,s=Z&&Z.iterator,b=1/u(a+"-0")!=-1/0||s&&!i((function(){u(Object(s))}));t.exports=b?function(t){var e=r(o(t)),n=u(e);return 0===n&&"-"==d(e,0)?-0:n}:u},function(t,e,n){"use strict";var l=n(9),i=n(3),c=n(5),o=n(4),r=n(75),a=n(105),d=n(100),u=n(13),Z=n(84),s=Object.assign,b=Object.defineProperty,I=i([].concat);t.exports=!s||o((function(){if(l&&1!==s({b:1},s(b({},"a",{enumerable:!0,get:function(){b(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var t={},e={},n=Symbol();return t[n]=7,"abcdefghijklmnopqrst".split("").forEach((function(t){e[t]=t})),7!=s({},t)[n]||"abcdefghijklmnopqrst"!=r(s({},e)).join("")}))?function(t,e){for(var n=u(t),i=arguments.length,o=1,s=a.f,b=d.f;i>o;)for(var m,h=Z(arguments[o++]),p=s?I(r(h),s(h)):r(h),g=p.length,G=0;g>G;)m=p[G++],l&&!c(b,h,m)||(n[m]=h[m]);return n}:s},function(t,e,n){var l=n(9),i=n(3),c=n(75),o=n(34),r=i(n(100).f),a=i([].push),d=function(t){return function(e){for(var n,i=o(e),d=c(i),u=d.length,Z=0,s=[];u>Z;)n=d[Z++],l&&!r(i,n)||a(s,t?[n,i[n]]:i[n]);return s}};t.exports={entries:d(!0),values:d(!1)}},function(t,e){t.exports=Object.is||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}},function(t,e,n){var l=n(49);t.exports=/(?:ipad|iphone|ipod).*applewebkit/i.test(l)},function(t,e,n){var l,i,c,o,r,a,d,u,Z=n(1),s=n(22),b=n(31).f,I=n(119).set,m=n(193),h=n(349),p=n(350),g=n(78),G=Z.MutationObserver||Z.WebKitMutationObserver,y=Z.document,X=Z.process,V=Z.Promise,W=b(Z,"queueMicrotask"),C=W&&W.value;C||(l=function(){var t,e;for(g&&(t=X.domain)&&t.exit();i;){e=i.fn,i=i.next;try{e()}catch(t){throw i?o():c=void 0,t}}c=void 0,t&&t.enter()},m||g||p||!G||!y?!h&&V&&V.resolve?((d=V.resolve(void 0)).constructor=V,u=s(d.then,d),o=function(){u(l)}):g?o=function(){X.nextTick(l)}:(I=s(I,Z),o=function(){I(l)}):(r=!0,a=y.createTextNode(""),new G(l).observe(a,{characterData:!0}),o=function(){a.data=r=!r})),t.exports=C||function(t){var e={fn:t,next:void 0};c&&(c.next=e),i||(i=e,o()),c=e}},function(t,e,n){var l=n(1);t.exports=function(t,e){var n=l.console;n&&n.error&&(1==arguments.length?n.error(t):n.error(t,e))}},function(t,e,n){var l=n(81),i=n(108),c=n(95).CONSTRUCTOR;t.exports=c||!i((function(t){l.all(t).then(void 0,(function(){}))}))},function(t,e,n){var l=n(2),i=n(12),c=n(62);t.exports=function(t,e){if(l(t),i(e)&&e.constructor===t)return e;var n=c.f(t);return(0,n.resolve)(e),n.promise}},function(t,e,n){var l=n(15);t.exports=function(t){return void 0!==t&&(l(t,"value")||l(t,"writable"))}},function(t,e,n){var l=n(4),i=n(1).RegExp;t.exports=l((function(){var t=i(".","s");return!(t.dotAll&&t.exec("\n")&&"s"===t.flags)}))},function(t,e,n){var l=n(4),i=n(1).RegExp;t.exports=l((function(){var t=i("(?<a>b)","g");return"b"!==t.exec("b").groups.a||"bc"!=="b".replace(t,"$<a>c")}))},function(t,e,n){"use strict";var l=n(82).charAt,i=n(14),c=n(20),o=n(140),r=c.set,a=c.getterFor("String Iterator");o(String,"String",(function(t){r(this,{type:"String Iterator",string:i(t),index:0})}),(function(){var t,e=a(this),n=e.string,i=e.index;return i>=n.length?{value:void 0,done:!0}:(t=l(n,i),e.index+=t.length,{value:t,done:!1})}))},function(t,e,n){var l=n(49);t.exports=/Version\/10(?:\.\d+){1,2}(?: [\w./]+)?(?: Mobile\/\w+)? Safari\//.test(l)},function(t,e,n){var l=n(3),i=n(13),c=Math.floor,o=l("".charAt),r=l("".replace),a=l("".slice),d=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,u=/\$([$&'`]|\d{1,2})/g;t.exports=function(t,e,n,l,Z,s){var b=n+t.length,I=l.length,m=u;return void 0!==Z&&(Z=i(Z),m=d),r(s,m,(function(i,r){var d;switch(o(r,0)){case"$":return"$";case"&":return t;case"`":return a(e,0,n);case"'":return a(e,b);case"<":d=Z[a(r,1,-1)];break;default:var u=+r;if(0===u)return i;if(u>I){var s=c(u/10);return 0===s?i:s<=I?void 0===l[s-1]?o(r,1):l[s-1]+o(r,1):i}d=l[u-1]}return void 0===d?"":d}))}},function(t,e,n){"use strict";var l=n(79).end,i=n(157);t.exports=i("trimEnd")?function(){return l(this)}:"".trimEnd},function(t,e,n){"use strict";var l=n(79).start,i=n(157);t.exports=i("trimStart")?function(){return l(this)}:"".trimStart},function(t,e,n){var l=n(1),i=n(98),c=l.RangeError;t.exports=function(t,e){var n=i(t);if(n%e)throw c("Wrong offset");return n}},function(t,e,n){var l=n(22),i=n(5),c=n(112),o=n(13),r=n(21),a=n(45),d=n(61),u=n(139),Z=n(17).aTypedArrayConstructor;t.exports=function(t){var e,n,s,b,I,m,h=c(this),p=o(t),g=arguments.length,G=g>1?arguments[1]:void 0,y=void 0!==G,X=d(p);if(X&&!u(X))for(m=(I=a(p,X)).next,p=[];!(b=i(m,I)).done;)p.push(b.value);for(y&&g>2&&(G=l(G,arguments[2])),n=r(p),s=new(Z(h))(n),e=0;n>e;e++)s[e]=y?G(p[e],e):p[e];return s}},function(t,e,n){"use strict";var l=n(3),i=n(46),c=n(67).getWeakData,o=n(2),r=n(12),a=n(42),d=n(8),u=n(30),Z=n(15),s=n(20),b=s.set,I=s.getterFor,m=u.find,h=u.findIndex,p=l([].splice),g=0,G=function(t){return t.frozen||(t.frozen=new y)},y=function(){this.entries=[]},X=function(t,e){return m(t.entries,(function(t){return t[0]===e}))};y.prototype={get:function(t){var e=X(this,t);if(e)return e[1]},has:function(t){return!!X(this,t)},set:function(t,e){var n=X(this,t);n?n[1]=e:this.entries.push([t,e])},delete:function(t){var e=h(this.entries,(function(e){return e[0]===t}));return~e&&p(this.entries,e,1),!!~e}},t.exports={getConstructor:function(t,e,n,l){var u=t((function(t,i){a(t,s),b(t,{type:e,id:g++,frozen:void 0}),null!=i&&d(i,t[l],{that:t,AS_ENTRIES:n})})),s=u.prototype,m=I(e),h=function(t,e,n){var l=m(t),i=c(o(e),!0);return!0===i?G(l).set(e,n):i[l.id]=n,t};return i(s,{delete:function(t){var e=m(this);if(!r(t))return!1;var n=c(t);return!0===n?G(e).delete(t):n&&Z(n,e.id)&&delete n[e.id]},has:function(t){var e=m(this);if(!r(t))return!1;var n=c(t);return!0===n?G(e).has(t):n&&Z(n,e.id)}}),i(s,n?{get:function(t){var e=m(this);if(r(t)){var n=c(t);return!0===n?G(e).get(t):n?n[e.id]:void 0}},set:function(t,e){return h(this,t,e)}}:{add:function(t){return h(this,t,!0)}}),u}}},function(t,e,n){var l=n(5),i=n(210),c=n(2),o=n(45),r=n(27),a=n(7)("asyncIterator");t.exports=function(t,e){var n=arguments.length<2?r(t,a):e;return n?c(l(n,t)):new i(o(t))}},function(t,e,n){"use strict";var l=n(18),i=n(2),c=n(29),o=n(27),r=n(46),a=n(20),d=n(11),u=n(126),Z=d("Promise"),s=a.set,b=a.getterFor("AsyncFromSyncIterator"),I=function(t,e,n){var l=t.done;Z.resolve(t.value).then((function(t){e({done:l,value:t})}),n)},m=function(t){s(this,{type:"AsyncFromSyncIterator",iterator:i(t),next:t.next})};m.prototype=r(c(u),{next:function(t){var e=b(this),n=!!arguments.length;return new Z((function(c,o){var r=i(l(e.next,e.iterator,n?[t]:[]));I(r,c,o)}))},return:function(t){var e=b(this).iterator,n=!!arguments.length;return new Z((function(c,r){var a=o(e,"return");if(void 0===a)return c({done:!0,value:t});var d=i(l(a,e,n?[t]:[]));I(d,c,r)}))},throw:function(t){var e=b(this).iterator,n=!!arguments.length;return new Z((function(c,r){var a=o(e,"throw");if(void 0===a)return r(t);var d=i(l(a,e,n?[t]:[]));I(d,c,r)}))}}),t.exports=m},function(t,e,n){n(147),n(159);var l=n(1),i=n(11),c=n(29),o=n(12),r=l.Object,a=l.TypeError,d=i("Map"),u=i("WeakMap"),Z=function(){this.object=null,this.symbol=null,this.primitives=null,this.objectsByIndex=c(null)};Z.prototype.get=function(t,e){return this[t]||(this[t]=e())},Z.prototype.next=function(t,e,n){var l=n?this.objectsByIndex[t]||(this.objectsByIndex[t]=new u):this.primitives||(this.primitives=new d),i=l.get(e);return i||l.set(e,i=new Z),i};var s=new Z;t.exports=function(){var t,e,n=s,l=arguments.length;for(t=0;t<l;t++)o(e=arguments[t])&&(n=n.next(t,e,!0));if(this===r&&n===s)throw a("Composite keys must contain a non-primitive component");for(t=0;t<l;t++)o(e=arguments[t])||(n=n.next(t,e,!1));return n}},function(t,e){t.exports=Math.scale||function(t,e,n,l,i){var c=+t,o=+e,r=+n,a=+l,d=+i;return c!=c||o!=o||r!=r||a!=a||d!=d?NaN:c===1/0||c===-1/0?c:(c-o)*(d-a)/(r-o)+a}},function(t,e,n){"use strict";var l=n(5),i=n(6),c=n(2);t.exports=function(){for(var t=c(this),e=i(t.add),n=0,o=arguments.length;n<o;n++)l(e,t,arguments[n]);return t}},function(t,e){t.exports={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}},function(t,e,n){var l=n(102)("span").classList,i=l&&l.constructor&&l.constructor.prototype;t.exports=i===Object.prototype?void 0:i},function(t,e,n){var l=n(1),i=n(18),c=n(10),o=n(49),r=n(60),a=n(94),d=/MSIE .\./.test(o),u=l.Function,Z=function(t){return d?function(e,n){var l=a(arguments.length,1)>2,o=c(e)?e:u(e),d=l?r(arguments,2):void 0;return t(l?function(){i(o,this,d)}:o,n)}:t};t.exports={setTimeout:Z(l.setTimeout),setInterval:Z(l.setInterval)}},function(t,e,n){var l=n(4),i=n(7),c=n(24),o=i("iterator");t.exports=!l((function(){var t=new URL("b?a=1&b=2&c=3","http://a"),e=t.searchParams,n="";return t.pathname="c%20d",e.forEach((function(t,l){e.delete("b"),n+=l+t})),c&&!t.toJSON||!e.sort||"http://a/c%20d?a=1&c=3"!==t.href||"3"!==e.get("c")||"a=1"!==String(new URLSearchParams("?a=1"))||!e[o]||"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"!==n||"x"!==new URL("http://x",void 0).host}))},function(t,e,n){"use strict";n(109);var l=n(0),i=n(1),c=n(5),o=n(3),r=n(9),a=n(217),d=n(19),u=n(46),Z=n(41),s=n(77),b=n(20),I=n(42),m=n(10),h=n(15),p=n(22),g=n(64),G=n(2),y=n(12),X=n(14),V=n(29),W=n(43),C=n(45),R=n(61),f=n(94),S=n(7),v=n(142),Y=S("iterator"),K=b.set,N=b.getterFor("URLSearchParams"),J=b.getterFor("URLSearchParamsIterator"),H=Object.getOwnPropertyDescriptor,U=function(t){if(!r)return i(t);var e=H(i,t);return e&&e.value},L=U("fetch"),B=U("Request"),k=U("Headers"),x=B&&B.prototype,T=k&&k.prototype,F=i.RegExp,A=i.TypeError,z=i.decodeURIComponent,w=i.encodeURIComponent,P=o("".charAt),Q=o([].join),j=o([].push),M=o("".replace),E=o([].shift),D=o([].splice),O=o("".split),_=o("".slice),q=/\+/g,$=Array(4),tt=function(t){return $[t-1]||($[t-1]=F("((?:%[\\da-f]{2}){"+t+"})","gi"))},et=function(t){try{return z(t)}catch(e){return t}},nt=function(t){var e=M(t,q," "),n=4;try{return z(e)}catch(t){for(;n;)e=M(e,tt(n--),et);return e}},lt=/[!'()~]|%20/g,it={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"},ct=function(t){return it[t]},ot=function(t){return M(w(t),lt,ct)},rt=s((function(t,e){K(this,{type:"URLSearchParamsIterator",iterator:C(N(t).entries),kind:e})}),"Iterator",(function(){var t=J(this),e=t.kind,n=t.iterator.next(),l=n.value;return n.done||(n.value="keys"===e?l.key:"values"===e?l.value:[l.key,l.value]),n}),!0),at=function(t){this.entries=[],this.url=null,void 0!==t&&(y(t)?this.parseObject(t):this.parseQuery("string"==typeof t?"?"===P(t,0)?_(t,1):t:X(t)))};at.prototype={type:"URLSearchParams",bindURL:function(t){this.url=t,this.update()},parseObject:function(t){var e,n,l,i,o,r,a,d=R(t);if(d)for(n=(e=C(t,d)).next;!(l=c(n,e)).done;){if(o=(i=C(G(l.value))).next,(r=c(o,i)).done||(a=c(o,i)).done||!c(o,i).done)throw A("Expected sequence with length 2");j(this.entries,{key:X(r.value),value:X(a.value)})}else for(var u in t)h(t,u)&&j(this.entries,{key:u,value:X(t[u])})},parseQuery:function(t){if(t)for(var e,n,l=O(t,"&"),i=0;i<l.length;)(e=l[i++]).length&&(n=O(e,"="),j(this.entries,{key:nt(E(n)),value:nt(Q(n,"="))}))},serialize:function(){for(var t,e=this.entries,n=[],l=0;l<e.length;)t=e[l++],j(n,ot(t.key)+"="+ot(t.value));return Q(n,"&")},update:function(){this.entries.length=0,this.parseQuery(this.url.query)},updateURL:function(){this.url&&this.url.update()}};var dt=function(){I(this,ut);var t=arguments.length>0?arguments[0]:void 0;K(this,new at(t))},ut=dt.prototype;if(u(ut,{append:function(t,e){f(arguments.length,2);var n=N(this);j(n.entries,{key:X(t),value:X(e)}),n.updateURL()},delete:function(t){f(arguments.length,1);for(var e=N(this),n=e.entries,l=X(t),i=0;i<n.length;)n[i].key===l?D(n,i,1):i++;e.updateURL()},get:function(t){f(arguments.length,1);for(var e=N(this).entries,n=X(t),l=0;l<e.length;l++)if(e[l].key===n)return e[l].value;return null},getAll:function(t){f(arguments.length,1);for(var e=N(this).entries,n=X(t),l=[],i=0;i<e.length;i++)e[i].key===n&&j(l,e[i].value);return l},has:function(t){f(arguments.length,1);for(var e=N(this).entries,n=X(t),l=0;l<e.length;)if(e[l++].key===n)return!0;return!1},set:function(t,e){f(arguments.length,1);for(var n,l=N(this),i=l.entries,c=!1,o=X(t),r=X(e),a=0;a<i.length;a++)(n=i[a]).key===o&&(c?D(i,a--,1):(c=!0,n.value=r));c||j(i,{key:o,value:r}),l.updateURL()},sort:function(){var t=N(this);v(t.entries,(function(t,e){return t.key>e.key?1:-1})),t.updateURL()},forEach:function(t){for(var e,n=N(this).entries,l=p(t,arguments.length>1?arguments[1]:void 0),i=0;i<n.length;)l((e=n[i++]).value,e.key,this)},keys:function(){return new rt(this,"keys")},values:function(){return new rt(this,"values")},entries:function(){return new rt(this,"entries")}},{enumerable:!0}),d(ut,Y,ut.entries,{name:"entries"}),d(ut,"toString",(function(){return N(this).serialize()}),{enumerable:!0}),Z(dt,"URLSearchParams"),l({global:!0,forced:!a},{URLSearchParams:dt}),!a&&m(k)){var Zt=o(T.has),st=o(T.set),bt=function(t){if(y(t)){var e,n=t.body;if("URLSearchParams"===g(n))return e=t.headers?new k(t.headers):new k,Zt(e,"content-type")||st(e,"content-type","application/x-www-form-urlencoded;charset=UTF-8"),V(t,{body:W(0,X(n)),headers:W(0,e)})}return t};if(m(L)&&l({global:!0,enumerable:!0,noTargetGet:!0,forced:!0},{fetch:function(t){return L(t,arguments.length>1?bt(arguments[1]):{})}}),m(B)){var It=function(t){return I(this,x),new B(t,arguments.length>1?bt(arguments[1]):{})};x.constructor=It,It.prototype=x,l({global:!0,forced:!0,noTargetGet:!0},{Request:It})}}t.exports={URLSearchParams:dt,getState:N}},function(t,n){t.exports=e},function(t,e,n){n(221),n(224),n(225),n(174),n(226)},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(5),o=n(3),r=n(24),a=n(9),d=n(72),u=n(4),Z=n(15),s=n(36),b=n(2),I=n(34),m=n(55),h=n(14),p=n(43),g=n(29),G=n(75),y=n(57),X=n(136),V=n(105),W=n(31),C=n(16),R=n(106),f=n(100),S=n(19),v=n(63),Y=n(104),K=n(86),N=n(85),J=n(7),H=n(171),U=n(25),L=n(172),B=n(41),k=n(20),x=n(30).forEach,T=Y("hidden"),F=k.set,A=k.getterFor("Symbol"),z=Object.prototype,w=i.Symbol,P=w&&w.prototype,Q=i.TypeError,j=i.QObject,M=W.f,E=C.f,D=X.f,O=f.f,_=o([].push),q=v("symbols"),$=v("op-symbols"),tt=v("wks"),et=!j||!j.prototype||!j.prototype.findChild,nt=a&&u((function(){return 7!=g(E({},"a",{get:function(){return E(this,"a",{value:7}).a}})).a}))?function(t,e,n){var l=M(z,e);l&&delete z[e],E(t,e,n),l&&t!==z&&E(z,e,l)}:E,lt=function(t,e){var n=q[t]=g(P);return F(n,{type:"Symbol",tag:t,description:e}),a||(n.description=e),n},it=function(t,e,n){t===z&&it($,e,n),b(t);var l=m(e);return b(n),Z(q,l)?(n.enumerable?(Z(t,T)&&t[T][l]&&(t[T][l]=!1),n=g(n,{enumerable:p(0,!1)})):(Z(t,T)||E(t,T,p(1,{})),t[T][l]=!0),nt(t,l,n)):E(t,l,n)},ct=function(t,e){b(t);var n=I(e),l=G(n).concat(dt(n));return x(l,(function(e){a&&!c(ot,n,e)||it(t,e,n[e])})),t},ot=function(t){var e=m(t),n=c(O,this,e);return!(this===z&&Z(q,e)&&!Z($,e))&&(!(n||!Z(this,e)||!Z(q,e)||Z(this,T)&&this[T][e])||n)},rt=function(t,e){var n=I(t),l=m(e);if(n!==z||!Z(q,l)||Z($,l)){var i=M(n,l);return!i||!Z(q,l)||Z(n,T)&&n[T][l]||(i.enumerable=!0),i}},at=function(t){var e=D(I(t)),n=[];return x(e,(function(t){Z(q,t)||Z(K,t)||_(n,t)})),n},dt=function(t){var e=t===z,n=D(e?$:I(t)),l=[];return x(n,(function(t){!Z(q,t)||e&&!Z(z,t)||_(l,q[t])})),l};d||(S(P=(w=function(){if(s(P,this))throw Q("Symbol is not a constructor");var t=arguments.length&&void 0!==arguments[0]?h(arguments[0]):void 0,e=N(t),n=function(t){this===z&&c(n,$,t),Z(this,T)&&Z(this[T],e)&&(this[T][e]=!1),nt(this,e,p(1,t))};return a&&et&&nt(z,e,{configurable:!0,set:n}),lt(e,t)}).prototype,"toString",(function(){return A(this).tag})),S(w,"withoutSetter",(function(t){return lt(N(t),t)})),f.f=ot,C.f=it,R.f=ct,W.f=rt,y.f=X.f=at,V.f=dt,H.f=function(t){return lt(J(t),t)},a&&(E(P,"description",{configurable:!0,get:function(){return A(this).description}}),r||S(z,"propertyIsEnumerable",ot,{unsafe:!0}))),l({global:!0,wrap:!0,forced:!d,sham:!d},{Symbol:w}),x(G(tt),(function(t){U(t)})),l({target:"Symbol",stat:!0,forced:!d},{useSetter:function(){et=!0},useSimple:function(){et=!1}}),l({target:"Object",stat:!0,forced:!d,sham:!a},{create:function(t,e){return void 0===e?g(t):ct(g(t),e)},defineProperty:it,defineProperties:ct,getOwnPropertyDescriptor:rt}),l({target:"Object",stat:!0,forced:!d},{getOwnPropertyNames:at}),L(),B(w,"Symbol"),K[T]=!0},function(t,e,n){var l=n(1);t.exports=l},function(t,e,n){var l=n(1),i=n(59),c=n(65),o=n(12),r=n(7)("species"),a=l.Array;t.exports=function(t){var e;return i(t)&&(e=t.constructor,(c(e)&&(e===a||i(e.prototype))||o(e)&&null===(e=e[r]))&&(e=void 0)),void 0===e?a:e}},function(t,e,n){var l=n(0),i=n(11),c=n(15),o=n(14),r=n(63),a=n(173),d=r("string-to-symbol-registry"),u=r("symbol-to-string-registry");l({target:"Symbol",stat:!0,forced:!a},{for:function(t){var e=o(t);if(c(d,e))return d[e];var n=i("Symbol")(e);return d[e]=n,u[n]=e,n}})},function(t,e,n){var l=n(0),i=n(15),c=n(71),o=n(73),r=n(63),a=n(173),d=r("symbol-to-string-registry");l({target:"Symbol",stat:!0,forced:!a},{keyFor:function(t){if(!c(t))throw TypeError(o(t)+" is not a symbol");if(i(d,t))return d[t]}})},function(t,e,n){var l=n(0),i=n(72),c=n(4),o=n(105),r=n(13);l({target:"Object",stat:!0,forced:!i||c((function(){o.f(1)}))},{getOwnPropertySymbols:function(t){var e=o.f;return e?e(r(t)):[]}})},function(t,e,n){"use strict";var l=n(0),i=n(9),c=n(1),o=n(3),r=n(15),a=n(10),d=n(36),u=n(14),Z=n(16).f,s=n(132),b=c.Symbol,I=b&&b.prototype;if(i&&a(b)&&(!("description"in I)||void 0!==b().description)){var m={},h=function(){var t=arguments.length<1||void 0===arguments[0]?void 0:u(arguments[0]),e=d(I,this)?new b(t):void 0===t?b():b(t);return""===t&&(m[e]=!0),e};s(h,b),h.prototype=I,I.constructor=h;var p="Symbol(test)"==String(b("test")),g=o(I.toString),G=o(I.valueOf),y=/^Symbol\((.*)\)[^)]+$/,X=o("".replace),V=o("".slice);Z(I,"description",{configurable:!0,get:function(){var t=G(this),e=g(t);if(r(m,t))return"";var n=p?V(e,7,-1):X(e,y,"$1");return""===n?void 0:n}}),l({global:!0,forced:!0},{Symbol:h})}},function(t,e,n){n(25)("asyncIterator")},function(t,e,n){n(25)("hasInstance")},function(t,e,n){n(25)("isConcatSpreadable")},function(t,e,n){n(25)("iterator")},function(t,e,n){n(25)("match")},function(t,e,n){n(25)("matchAll")},function(t,e,n){n(25)("replace")},function(t,e,n){n(25)("search")},function(t,e,n){n(25)("species")},function(t,e,n){n(25)("split")},function(t,e,n){var l=n(25),i=n(172);l("toPrimitive"),i()},function(t,e,n){var l=n(11),i=n(25),c=n(41);i("toStringTag"),c(l("Symbol"),"Symbol")},function(t,e,n){n(25)("unscopables")},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(4),o=n(59),r=n(12),a=n(13),d=n(21),u=n(58),Z=n(76),s=n(90),b=n(7),I=n(56),m=b("isConcatSpreadable"),h=i.TypeError,p=I>=51||!c((function(){var t=[];return t[m]=!1,t.concat()[0]!==t})),g=s("concat"),G=function(t){if(!r(t))return!1;var e=t[m];return void 0!==e?!!e:o(t)};l({target:"Array",proto:!0,forced:!p||!g},{concat:function(t){var e,n,l,i,c,o=a(this),r=Z(o,0),s=0;for(e=-1,l=arguments.length;e<l;e++)if(G(c=-1===e?o:arguments[e])){if(s+(i=d(c))>9007199254740991)throw h("Maximum allowed index exceeded");for(n=0;n<i;n++,s++)n in c&&u(r,s,c[n])}else{if(s>=9007199254740991)throw h("Maximum allowed index exceeded");u(r,s++,c)}return r.length=s,r}})},function(t,e,n){var l=n(0),i=n(175),c=n(44);l({target:"Array",proto:!0},{copyWithin:i}),c("copyWithin")},function(t,e,n){"use strict";var l=n(0),i=n(30).every;l({target:"Array",proto:!0,forced:!n(51)("every")},{every:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,e,n){var l=n(0),i=n(137),c=n(44);l({target:"Array",proto:!0},{fill:i}),c("fill")},function(t,e,n){"use strict";var l=n(0),i=n(30).filter;l({target:"Array",proto:!0,forced:!n(90)("filter")},{filter:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,e,n){"use strict";var l=n(0),i=n(30).find,c=n(44),o=!0;"find"in[]&&Array(1).find((function(){o=!1})),l({target:"Array",proto:!0,forced:o},{find:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),c("find")},function(t,e,n){"use strict";var l=n(0),i=n(30).findIndex,c=n(44),o=!0;"findIndex"in[]&&Array(1).findIndex((function(){o=!1})),l({target:"Array",proto:!0,forced:o},{findIndex:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),c("findIndex")},function(t,e,n){"use strict";var l=n(0),i=n(176),c=n(13),o=n(21),r=n(35),a=n(76);l({target:"Array",proto:!0},{flat:function(){var t=arguments.length?arguments[0]:void 0,e=c(this),n=o(e),l=a(e,0);return l.length=i(l,e,e,n,0,void 0===t?1:r(t)),l}})},function(t,e,n){"use strict";var l=n(0),i=n(176),c=n(6),o=n(13),r=n(21),a=n(76);l({target:"Array",proto:!0},{flatMap:function(t){var e,n=o(this),l=r(n);return c(t),(e=a(n,0)).length=i(e,n,n,l,0,1,t,arguments.length>1?arguments[1]:void 0),e}})},function(t,e,n){"use strict";var l=n(0),i=n(177);l({target:"Array",proto:!0,forced:[].forEach!=i},{forEach:i})},function(t,e,n){var l=n(0),i=n(178);l({target:"Array",stat:!0,forced:!n(108)((function(t){Array.from(t)}))},{from:i})},function(t,e,n){"use strict";var l=n(0),i=n(87).includes,c=n(44);l({target:"Array",proto:!0},{includes:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),c("includes")},function(t,e,n){"use strict";var l=n(0),i=n(3),c=n(87).indexOf,o=n(51),r=i([].indexOf),a=!!r&&1/r([1],1,-0)<0,d=o("indexOf");l({target:"Array",proto:!0,forced:a||!d},{indexOf:function(t){var e=arguments.length>1?arguments[1]:void 0;return a?r(this,t,e)||0:c(this,t,e)}})},function(t,e,n){n(0)({target:"Array",stat:!0},{isArray:n(59)})},function(t,e,n){"use strict";var l=n(0),i=n(3),c=n(84),o=n(34),r=n(51),a=i([].join),d=c!=Object,u=r("join",",");l({target:"Array",proto:!0,forced:d||!u},{join:function(t){return a(o(this),void 0===t?",":t)}})},function(t,e,n){var l=n(0),i=n(180);l({target:"Array",proto:!0,forced:i!==[].lastIndexOf},{lastIndexOf:i})},function(t,e,n){"use strict";var l=n(0),i=n(30).map;l({target:"Array",proto:!0,forced:!n(90)("map")},{map:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(4),o=n(65),r=n(58),a=i.Array;l({target:"Array",stat:!0,forced:c((function(){function t(){}return!(a.of.call(t)instanceof t)}))},{of:function(){for(var t=0,e=arguments.length,n=new(o(this)?this:a)(e);e>t;)r(n,t,arguments[t++]);return n.length=e,n}})},function(t,e,n){"use strict";var l=n(0),i=n(110).left,c=n(51),o=n(56),r=n(78);l({target:"Array",proto:!0,forced:!c("reduce")||!r&&o>79&&o<83},{reduce:function(t){var e=arguments.length;return i(this,t,e,e>1?arguments[1]:void 0)}})},function(t,e,n){"use strict";var l=n(0),i=n(110).right,c=n(51),o=n(56),r=n(78);l({target:"Array",proto:!0,forced:!c("reduceRight")||!r&&o>79&&o<83},{reduceRight:function(t){return i(this,t,arguments.length,arguments.length>1?arguments[1]:void 0)}})},function(t,e,n){"use strict";var l=n(0),i=n(3),c=n(59),o=i([].reverse),r=[1,2];l({target:"Array",proto:!0,forced:String(r)===String(r.reverse())},{reverse:function(){return c(this)&&(this.length=this.length),o(this)}})},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(59),o=n(65),r=n(12),a=n(50),d=n(21),u=n(34),Z=n(58),s=n(7),b=n(90),I=n(60),m=b("slice"),h=s("species"),p=i.Array,g=Math.max;l({target:"Array",proto:!0,forced:!m},{slice:function(t,e){var n,l,i,s=u(this),b=d(s),m=a(t,b),G=a(void 0===e?b:e,b);if(c(s)&&(n=s.constructor,(o(n)&&(n===p||c(n.prototype))||r(n)&&null===(n=n[h]))&&(n=void 0),n===p||void 0===n))return I(s,m,G);for(l=new(void 0===n?p:n)(g(G-m,0)),i=0;m<G;m++,i++)m in s&&Z(l,i,s[m]);return l.length=i,l}})},function(t,e,n){"use strict";var l=n(0),i=n(30).some;l({target:"Array",proto:!0,forced:!n(51)("some")},{some:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,e,n){"use strict";var l=n(0),i=n(3),c=n(6),o=n(13),r=n(21),a=n(14),d=n(4),u=n(142),Z=n(51),s=n(181),b=n(182),I=n(56),m=n(143),h=[],p=i(h.sort),g=i(h.push),G=d((function(){h.sort(void 0)})),y=d((function(){h.sort(null)})),X=Z("sort"),V=!d((function(){if(I)return I<70;if(!(s&&s>3)){if(b)return!0;if(m)return m<603;var t,e,n,l,i="";for(t=65;t<76;t++){switch(e=String.fromCharCode(t),t){case 66:case 69:case 70:case 72:n=3;break;case 68:case 71:n=4;break;default:n=2}for(l=0;l<47;l++)h.push({k:e+l,v:n})}for(h.sort((function(t,e){return e.v-t.v})),l=0;l<h.length;l++)e=h[l].k.charAt(0),i.charAt(i.length-1)!==e&&(i+=e);return"DGBEFHACIJK"!==i}}));l({target:"Array",proto:!0,forced:G||!y||!X||!V},{sort:function(t){void 0!==t&&c(t);var e=o(this);if(V)return void 0===t?p(e):p(e,t);var n,l,i=[],d=r(e);for(l=0;l<d;l++)l in e&&g(i,e[l]);for(u(i,function(t){return function(e,n){return void 0===n?-1:void 0===e?1:void 0!==t?+t(e,n)||0:a(e)>a(n)?1:-1}}(t)),n=i.length,l=0;l<n;)e[l]=i[l++];for(;l<d;)delete e[l++];return e}})},function(t,e,n){n(66)("Array")},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(50),o=n(35),r=n(21),a=n(13),d=n(76),u=n(58),Z=n(90)("splice"),s=i.TypeError,b=Math.max,I=Math.min;l({target:"Array",proto:!0,forced:!Z},{splice:function(t,e){var n,l,i,Z,m,h,p=a(this),g=r(p),G=c(t,g),y=arguments.length;if(0===y?n=l=0:1===y?(n=0,l=g-G):(n=y-2,l=I(b(o(e),0),g-G)),g+n-l>9007199254740991)throw s("Maximum allowed length exceeded");for(i=d(p,l),Z=0;Z<l;Z++)(m=G+Z)in p&&u(i,Z,p[m]);if(i.length=l,n<l){for(Z=G;Z<g-l;Z++)h=Z+n,(m=Z+l)in p?p[h]=p[m]:delete p[h];for(Z=g;Z>g-l+n;Z--)delete p[Z-1]}else if(n>l)for(Z=g-l;Z>G;Z--)h=Z+n-1,(m=Z+l-1)in p?p[h]=p[m]:delete p[h];for(Z=0;Z<n;Z++)p[Z+G]=arguments[Z+2];return p.length=g-l+n,i}})},function(t,e,n){n(44)("flat")},function(t,e,n){n(44)("flatMap")},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(111),o=n(66),r=c.ArrayBuffer;l({global:!0,forced:i.ArrayBuffer!==r},{ArrayBuffer:r}),o("ArrayBuffer")},function(t,e,n){var l=n(1).Array,i=Math.abs,c=Math.pow,o=Math.floor,r=Math.log,a=Math.LN2;t.exports={pack:function(t,e,n){var d,u,Z,s=l(n),b=8*n-e-1,I=(1<<b)-1,m=I>>1,h=23===e?c(2,-24)-c(2,-77):0,p=t<0||0===t&&1/t<0?1:0,g=0;for((t=i(t))!=t||t===1/0?(u=t!=t?1:0,d=I):(d=o(r(t)/a),t*(Z=c(2,-d))<1&&(d--,Z*=2),(t+=d+m>=1?h/Z:h*c(2,1-m))*Z>=2&&(d++,Z/=2),d+m>=I?(u=0,d=I):d+m>=1?(u=(t*Z-1)*c(2,e),d+=m):(u=t*c(2,m-1)*c(2,e),d=0));e>=8;)s[g++]=255&u,u/=256,e-=8;for(d=d<<e|u,b+=e;b>0;)s[g++]=255&d,d/=256,b-=8;return s[--g]|=128*p,s},unpack:function(t,e){var n,l=t.length,i=8*l-e-1,o=(1<<i)-1,r=o>>1,a=i-7,d=l-1,u=t[d--],Z=127&u;for(u>>=7;a>0;)Z=256*Z+t[d--],a-=8;for(n=Z&(1<<-a)-1,Z>>=-a,a+=e;a>0;)n=256*n+t[d--],a-=8;if(0===Z)Z=1-r;else{if(Z===o)return n?NaN:u?-1/0:1/0;n+=c(2,e),Z-=r}return(u?-1:1)*n*c(2,Z-e)}}},function(t,e,n){var l=n(0),i=n(17);l({target:"ArrayBuffer",stat:!0,forced:!i.NATIVE_ARRAY_BUFFER_VIEWS},{isView:i.isView})},function(t,e,n){"use strict";var l=n(0),i=n(3),c=n(4),o=n(111),r=n(2),a=n(50),d=n(37),u=n(33),Z=o.ArrayBuffer,s=o.DataView,b=s.prototype,I=i(Z.prototype.slice),m=i(b.getUint8),h=i(b.setUint8);l({target:"ArrayBuffer",proto:!0,unsafe:!0,forced:c((function(){return!new Z(2).slice(1,void 0).byteLength}))},{slice:function(t,e){if(I&&void 0===e)return I(r(this),t);for(var n=r(this).byteLength,l=a(t,n),i=a(void 0===e?n:e,n),c=new(u(this,Z))(d(i-l)),o=new s(this),b=new s(c),p=0;l<i;)h(b,p++,m(o,l++));return c}})},function(t,e,n){n(274)},function(t,e,n){var l=n(0),i=n(111);l({global:!0,forced:!n(144)},{DataView:i.DataView})},function(t,e,n){var l=n(0),i=n(1),c=n(3),o=i.Date,r=c(o.prototype.getTime);l({target:"Date",stat:!0},{now:function(){return r(new o)}})},function(t,e,n){var l=n(0),i=n(277);l({target:"Date",proto:!0,forced:Date.prototype.toISOString!==i},{toISOString:i})},function(t,e,n){"use strict";var l=n(1),i=n(3),c=n(4),o=n(145).start,r=l.RangeError,a=Math.abs,d=Date.prototype,u=d.toISOString,Z=i(d.getTime),s=i(d.getUTCDate),b=i(d.getUTCFullYear),I=i(d.getUTCHours),m=i(d.getUTCMilliseconds),h=i(d.getUTCMinutes),p=i(d.getUTCMonth),g=i(d.getUTCSeconds);t.exports=c((function(){return"0385-07-25T07:06:39.999Z"!=u.call(new Date(-50000000000001))}))||!c((function(){u.call(new Date(NaN))}))?function(){if(!isFinite(Z(this)))throw r("Invalid time value");var t=b(this),e=m(this),n=t<0?"-":t>9999?"+":"";return n+o(a(t),n?6:4,0)+"-"+o(p(this)+1,2,0)+"-"+o(s(this),2,0)+"T"+o(I(this),2,0)+":"+o(h(this),2,0)+":"+o(g(this),2,0)+"."+o(e,3,0)+"Z"}:u},function(t,e,n){"use strict";var l=n(0),i=n(4),c=n(13),o=n(130);l({target:"Date",proto:!0,forced:i((function(){return null!==new Date(NaN).toJSON()||1!==Date.prototype.toJSON.call({toISOString:function(){return 1}})}))},{toJSON:function(t){var e=c(this),n=o(e,"number");return"number"!=typeof n||isFinite(n)?e.toISOString():null}})},function(t,e,n){var l=n(15),i=n(19),c=n(280),o=n(7)("toPrimitive"),r=Date.prototype;l(r,o)||i(r,o,c)},function(t,e,n){"use strict";var l=n(1),i=n(2),c=n(165),o=l.TypeError;t.exports=function(t){if(i(this),"string"===t||"default"===t)t="string";else if("number"!==t)throw o("Incorrect hint");return c(this,t)}},function(t,e,n){var l=n(3),i=n(19),c=Date.prototype,o=l(c.toString),r=l(c.getTime);"Invalid Date"!=String(new Date(NaN))&&i(c,"toString",(function(){var t=r(this);return t==t?o(this):"Invalid Date"}))},function(t,e,n){var l=n(0),i=n(184);l({target:"Function",proto:!0,forced:Function.bind!==i},{bind:i})},function(t,e,n){"use strict";var l=n(10),i=n(12),c=n(16),o=n(32),r=n(7)("hasInstance"),a=Function.prototype;r in a||c.f(a,r,{value:function(t){if(!l(this)||!i(t))return!1;var e=this.prototype;if(!i(e))return t instanceof this;for(;t=o(t);)if(e===t)return!0;return!1}})},function(t,e,n){var l=n(9),i=n(74).EXISTS,c=n(3),o=n(16).f,r=Function.prototype,a=c(r.toString),d=/function\b(?:\s|\/\*[\S\s]*?\*\/|\/\/[^\n\r]*[\n\r]+)*([^\s(/]*)/,u=c(d.exec);l&&!i&&o(r,"name",{configurable:!0,get:function(){try{return u(d,a(this))[1]}catch(t){return""}}})},function(t,e,n){n(0)({global:!0},{globalThis:n(1)})},function(t,e,n){var l=n(1);n(41)(l.JSON,"JSON",!0)},function(t,e,n){"use strict";n(113)("Map",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),n(185))},function(t,e,n){var l=n(0),i=n(186),c=Math.acosh,o=Math.log,r=Math.sqrt,a=Math.LN2;l({target:"Math",stat:!0,forced:!c||710!=Math.floor(c(Number.MAX_VALUE))||c(1/0)!=1/0},{acosh:function(t){return(t=+t)<1?NaN:t>94906265.62425156?o(t)+a:i(t-1+r(t-1)*r(t+1))}})},function(t,e,n){var l=n(0),i=Math.asinh,c=Math.log,o=Math.sqrt;l({target:"Math",stat:!0,forced:!(i&&1/i(0)>0)},{asinh:function t(e){return isFinite(e=+e)&&0!=e?e<0?-t(-e):c(e+o(e*e+1)):e}})},function(t,e,n){var l=n(0),i=Math.atanh,c=Math.log;l({target:"Math",stat:!0,forced:!(i&&1/i(-0)<0)},{atanh:function(t){return 0==(t=+t)?t:c((1+t)/(1-t))/2}})},function(t,e,n){var l=n(0),i=n(149),c=Math.abs,o=Math.pow;l({target:"Math",stat:!0},{cbrt:function(t){return i(t=+t)*o(c(t),1/3)}})},function(t,e,n){var l=n(0),i=Math.floor,c=Math.log,o=Math.LOG2E;l({target:"Math",stat:!0},{clz32:function(t){return(t>>>=0)?31-i(c(t+.5)*o):32}})},function(t,e,n){var l=n(0),i=n(116),c=Math.cosh,o=Math.abs,r=Math.E;l({target:"Math",stat:!0,forced:!c||c(710)===1/0},{cosh:function(t){var e=i(o(t)-1)+1;return(e+1/(e*r*r))*(r/2)}})},function(t,e,n){var l=n(0),i=n(116);l({target:"Math",stat:!0,forced:i!=Math.expm1},{expm1:i})},function(t,e,n){n(0)({target:"Math",stat:!0},{fround:n(187)})},function(t,e,n){var l=n(0),i=Math.hypot,c=Math.abs,o=Math.sqrt;l({target:"Math",stat:!0,forced:!!i&&i(1/0,NaN)!==1/0},{hypot:function(t,e){for(var n,l,i=0,r=0,a=arguments.length,d=0;r<a;)d<(n=c(arguments[r++]))?(i=i*(l=d/n)*l+1,d=n):i+=n>0?(l=n/d)*l:n;return d===1/0?1/0:d*o(i)}})},function(t,e,n){var l=n(0),i=n(4),c=Math.imul;l({target:"Math",stat:!0,forced:i((function(){return-5!=c(4294967295,5)||2!=c.length}))},{imul:function(t,e){var n=+t,l=+e,i=65535&n,c=65535&l;return 0|i*c+((65535&n>>>16)*c+i*(65535&l>>>16)<<16>>>0)}})},function(t,e,n){n(0)({target:"Math",stat:!0},{log10:n(299)})},function(t,e){var n=Math.log,l=Math.LOG10E;t.exports=Math.log10||function(t){return n(t)*l}},function(t,e,n){n(0)({target:"Math",stat:!0},{log1p:n(186)})},function(t,e,n){var l=n(0),i=Math.log,c=Math.LN2;l({target:"Math",stat:!0},{log2:function(t){return i(t)/c}})},function(t,e,n){n(0)({target:"Math",stat:!0},{sign:n(149)})},function(t,e,n){var l=n(0),i=n(4),c=n(116),o=Math.abs,r=Math.exp,a=Math.E;l({target:"Math",stat:!0,forced:i((function(){return-2e-17!=Math.sinh(-2e-17)}))},{sinh:function(t){return o(t=+t)<1?(c(t)-c(-t))/2:(r(t-1)-r(-t-1))*(a/2)}})},function(t,e,n){var l=n(0),i=n(116),c=Math.exp;l({target:"Math",stat:!0},{tanh:function(t){var e=i(t=+t),n=i(-t);return e==1/0?1:n==1/0?-1:(e-n)/(c(t)+c(-t))}})},function(t,e,n){n(41)(Math,"Math",!0)},function(t,e,n){var l=n(0),i=Math.ceil,c=Math.floor;l({target:"Math",stat:!0},{trunc:function(t){return(t>0?c:i)(t)}})},function(t,e,n){"use strict";var l=n(9),i=n(1),c=n(3),o=n(88),r=n(19),a=n(15),d=n(115),u=n(36),Z=n(71),s=n(130),b=n(4),I=n(57).f,m=n(31).f,h=n(16).f,p=n(150),g=n(79).trim,G=i.Number,y=G.prototype,X=i.TypeError,V=c("".slice),W=c("".charCodeAt),C=function(t){var e=s(t,"number");return"bigint"==typeof e?e:R(e)},R=function(t){var e,n,l,i,c,o,r,a,d=s(t,"number");if(Z(d))throw X("Cannot convert a Symbol value to a number");if("string"==typeof d&&d.length>2)if(d=g(d),43===(e=W(d,0))||45===e){if(88===(n=W(d,2))||120===n)return NaN}else if(48===e){switch(W(d,1)){case 66:case 98:l=2,i=49;break;case 79:case 111:l=8,i=55;break;default:return+d}for(o=(c=V(d,2)).length,r=0;r<o;r++)if((a=W(c,r))<48||a>i)return NaN;return parseInt(c,l)}return+d};if(o("Number",!G(" 0o1")||!G("0b1")||G("+0x1"))){for(var f,S=function(t){var e=arguments.length<1?0:G(C(t)),n=this;return u(y,n)&&b((function(){p(n)}))?d(Object(e),n,S):e},v=l?I(G):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,isFinite,isInteger,isNaN,isSafeInteger,parseFloat,parseInt,fromString,range".split(","),Y=0;v.length>Y;Y++)a(G,f=v[Y])&&!a(S,f)&&h(S,f,m(G,f));S.prototype=y,y.constructor=S,r(i,"Number",S)}},function(t,e,n){n(0)({target:"Number",stat:!0},{EPSILON:Math.pow(2,-52)})},function(t,e,n){n(0)({target:"Number",stat:!0},{isFinite:n(188)})},function(t,e,n){n(0)({target:"Number",stat:!0},{isInteger:n(151)})},function(t,e,n){n(0)({target:"Number",stat:!0},{isNaN:function(t){return t!=t}})},function(t,e,n){var l=n(0),i=n(151),c=Math.abs;l({target:"Number",stat:!0},{isSafeInteger:function(t){return i(t)&&c(t)<=9007199254740991}})},function(t,e,n){n(0)({target:"Number",stat:!0},{MAX_SAFE_INTEGER:9007199254740991})},function(t,e,n){n(0)({target:"Number",stat:!0},{MIN_SAFE_INTEGER:-9007199254740991})},function(t,e,n){var l=n(0),i=n(189);l({target:"Number",stat:!0,forced:Number.parseFloat!=i},{parseFloat:i})},function(t,e,n){var l=n(0),i=n(152);l({target:"Number",stat:!0,forced:Number.parseInt!=i},{parseInt:i})},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(3),o=n(35),r=n(150),a=n(146),d=n(4),u=i.RangeError,Z=i.String,s=Math.floor,b=c(a),I=c("".slice),m=c(1..toFixed),h=function(t,e,n){return 0===e?n:e%2==1?h(t,e-1,n*t):h(t*t,e/2,n)},p=function(t,e,n){for(var l=-1,i=n;++l<6;)i+=e*t[l],t[l]=i%1e7,i=s(i/1e7)},g=function(t,e){for(var n=6,l=0;--n>=0;)l+=t[n],t[n]=s(l/e),l=l%e*1e7},G=function(t){for(var e=6,n="";--e>=0;)if(""!==n||0===e||0!==t[e]){var l=Z(t[e]);n=""===n?l:n+b("0",7-l.length)+l}return n};l({target:"Number",proto:!0,forced:d((function(){return"0.000"!==m(8e-5,3)||"1"!==m(.9,0)||"1.25"!==m(1.255,2)||"1000000000000000128"!==m(0xde0b6b3a7640080,0)}))||!d((function(){m({})}))},{toFixed:function(t){var e,n,l,i,c=r(this),a=o(t),d=[0,0,0,0,0,0],s="",m="0";if(a<0||a>20)throw u("Incorrect fraction digits");if(c!=c)return"NaN";if(c<=-1e21||c>=1e21)return Z(c);if(c<0&&(s="-",c=-c),c>1e-21)if(n=(e=function(t){for(var e=0,n=t;n>=4096;)e+=12,n/=4096;for(;n>=2;)e+=1,n/=2;return e}(c*h(2,69,1))-69)<0?c*h(2,-e,1):c/h(2,e,1),n*=4503599627370496,(e=52-e)>0){for(p(d,0,n),l=a;l>=7;)p(d,1e7,0),l-=7;for(p(d,h(10,l,1),0),l=e-1;l>=23;)g(d,1<<23),l-=23;g(d,1<<l),p(d,1,1),g(d,2),m=G(d)}else p(d,0,n),p(d,1<<-e,0),m=G(d)+b("0",a);return m=a>0?s+((i=m.length)<=a?"0."+b("0",a-i)+m:I(m,0,i-a)+"."+I(m,i-a)):s+m}})},function(t,e,n){"use strict";var l=n(0),i=n(3),c=n(4),o=n(150),r=i(1..toPrecision);l({target:"Number",proto:!0,forced:c((function(){return"1"!==r(1,void 0)}))||!c((function(){r({})}))},{toPrecision:function(t){return void 0===t?r(o(this)):r(o(this),t)}})},function(t,e,n){var l=n(0),i=n(190);l({target:"Object",stat:!0,forced:Object.assign!==i},{assign:i})},function(t,e,n){n(0)({target:"Object",stat:!0,sham:!n(9)},{create:n(29)})},function(t,e,n){"use strict";var l=n(0),i=n(9),c=n(118),o=n(6),r=n(13),a=n(16);i&&l({target:"Object",proto:!0,forced:c},{__defineGetter__:function(t,e){a.f(r(this),t,{get:o(e),enumerable:!0,configurable:!0})}})},function(t,e,n){var l=n(0),i=n(9),c=n(106).f;l({target:"Object",stat:!0,forced:Object.defineProperties!==c,sham:!i},{defineProperties:c})},function(t,e,n){var l=n(0),i=n(9),c=n(16).f;l({target:"Object",stat:!0,forced:Object.defineProperty!==c,sham:!i},{defineProperty:c})},function(t,e,n){"use strict";var l=n(0),i=n(9),c=n(118),o=n(6),r=n(13),a=n(16);i&&l({target:"Object",proto:!0,forced:c},{__defineSetter__:function(t,e){a.f(r(this),t,{set:o(e),enumerable:!0,configurable:!0})}})},function(t,e,n){var l=n(0),i=n(191).entries;l({target:"Object",stat:!0},{entries:function(t){return i(t)}})},function(t,e,n){var l=n(0),i=n(93),c=n(4),o=n(12),r=n(67).onFreeze,a=Object.freeze;l({target:"Object",stat:!0,forced:c((function(){a(1)})),sham:!i},{freeze:function(t){return a&&o(t)?a(r(t)):t}})},function(t,e,n){var l=n(0),i=n(8),c=n(58);l({target:"Object",stat:!0},{fromEntries:function(t){var e={};return i(t,(function(t,n){c(e,t,n)}),{AS_ENTRIES:!0}),e}})},function(t,e,n){var l=n(0),i=n(4),c=n(34),o=n(31).f,r=n(9),a=i((function(){o(1)}));l({target:"Object",stat:!0,forced:!r||a,sham:!r},{getOwnPropertyDescriptor:function(t,e){return o(c(t),e)}})},function(t,e,n){var l=n(0),i=n(9),c=n(133),o=n(34),r=n(31),a=n(58);l({target:"Object",stat:!0,sham:!i},{getOwnPropertyDescriptors:function(t){for(var e,n,l=o(t),i=r.f,d=c(l),u={},Z=0;d.length>Z;)void 0!==(n=i(l,e=d[Z++]))&&a(u,e,n);return u}})},function(t,e,n){var l=n(0),i=n(4),c=n(136).f;l({target:"Object",stat:!0,forced:i((function(){return!Object.getOwnPropertyNames(1)}))},{getOwnPropertyNames:c})},function(t,e,n){var l=n(0),i=n(4),c=n(13),o=n(32),r=n(141);l({target:"Object",stat:!0,forced:i((function(){o(1)})),sham:!r},{getPrototypeOf:function(t){return o(c(t))}})},function(t,e,n){n(0)({target:"Object",stat:!0},{is:n(192)})},function(t,e,n){var l=n(0),i=n(114);l({target:"Object",stat:!0,forced:Object.isExtensible!==i},{isExtensible:i})},function(t,e,n){var l=n(0),i=n(4),c=n(12),o=n(40),r=n(148),a=Object.isFrozen;l({target:"Object",stat:!0,forced:i((function(){a(1)}))||r},{isFrozen:function(t){return!c(t)||(!(!r||"ArrayBuffer"!=o(t))||!!a&&a(t))}})},function(t,e,n){var l=n(0),i=n(4),c=n(12),o=n(40),r=n(148),a=Object.isSealed;l({target:"Object",stat:!0,forced:i((function(){a(1)}))||r},{isSealed:function(t){return!c(t)||(!(!r||"ArrayBuffer"!=o(t))||!!a&&a(t))}})},function(t,e,n){var l=n(0),i=n(13),c=n(75);l({target:"Object",stat:!0,forced:n(4)((function(){c(1)}))},{keys:function(t){return c(i(t))}})},function(t,e,n){"use strict";var l=n(0),i=n(9),c=n(118),o=n(13),r=n(55),a=n(32),d=n(31).f;i&&l({target:"Object",proto:!0,forced:c},{__lookupGetter__:function(t){var e,n=o(this),l=r(t);do{if(e=d(n,l))return e.get}while(n=a(n))}})},function(t,e,n){"use strict";var l=n(0),i=n(9),c=n(118),o=n(13),r=n(55),a=n(32),d=n(31).f;i&&l({target:"Object",proto:!0,forced:c},{__lookupSetter__:function(t){var e,n=o(this),l=r(t);do{if(e=d(n,l))return e.set}while(n=a(n))}})},function(t,e,n){var l=n(0),i=n(12),c=n(67).onFreeze,o=n(93),r=n(4),a=Object.preventExtensions;l({target:"Object",stat:!0,forced:r((function(){a(1)})),sham:!o},{preventExtensions:function(t){return a&&i(t)?a(c(t)):t}})},function(t,e,n){var l=n(0),i=n(12),c=n(67).onFreeze,o=n(93),r=n(4),a=Object.seal;l({target:"Object",stat:!0,forced:r((function(){a(1)})),sham:!o},{seal:function(t){return a&&i(t)?a(c(t)):t}})},function(t,e,n){n(0)({target:"Object",stat:!0},{setPrototypeOf:n(52)})},function(t,e,n){var l=n(135),i=n(19),c=n(343);l||i(Object.prototype,"toString",c,{unsafe:!0})},function(t,e,n){"use strict";var l=n(135),i=n(64);t.exports=l?{}.toString:function(){return"[object "+i(this)+"]"}},function(t,e,n){var l=n(0),i=n(191).values;l({target:"Object",stat:!0},{values:function(t){return i(t)}})},function(t,e,n){var l=n(0),i=n(189);l({global:!0,forced:parseFloat!=i},{parseFloat:i})},function(t,e,n){var l=n(0),i=n(152);l({global:!0,forced:parseInt!=i},{parseInt:i})},function(t,e,n){n(348),n(353),n(354),n(355),n(356),n(357)},function(t,e,n){"use strict";var l,i,c,o=n(0),r=n(24),a=n(78),d=n(1),u=n(5),Z=n(19),s=n(46),b=n(52),I=n(41),m=n(66),h=n(6),p=n(10),g=n(12),G=n(42),y=n(33),X=n(119).set,V=n(194),W=n(195),C=n(80),R=n(351),f=n(20),S=n(81),v=n(95),Y=n(62),K=v.CONSTRUCTOR,N=v.REJECTION_EVENT,J=v.SUBCLASSING,H=f.getterFor("Promise"),U=f.set,L=S&&S.prototype,B=S,k=L,x=d.TypeError,T=d.document,F=d.process,A=Y.f,z=A,w=!!(T&&T.createEvent&&d.dispatchEvent),P=function(t){var e;return!(!g(t)||!p(e=t.then))&&e},Q=function(t,e){var n,l,i,c=e.value,o=1==e.state,r=o?t.ok:t.fail,a=t.resolve,d=t.reject,Z=t.domain;try{r?(o||(2===e.rejection&&O(e),e.rejection=1),!0===r?n=c:(Z&&Z.enter(),n=r(c),Z&&(Z.exit(),i=!0)),n===t.promise?d(x("Promise-chain cycle")):(l=P(n))?u(l,n,a,d):a(n)):d(c)}catch(t){Z&&!i&&Z.exit(),d(t)}},j=function(t,e){t.notified||(t.notified=!0,V((function(){for(var n,l=t.reactions;n=l.get();)Q(n,t);t.notified=!1,e&&!t.rejection&&E(t)})))},M=function(t,e,n){var l,i;w?((l=T.createEvent("Event")).promise=e,l.reason=n,l.initEvent(t,!1,!0),d.dispatchEvent(l)):l={promise:e,reason:n},!N&&(i=d["on"+t])?i(l):"unhandledrejection"===t&&W("Unhandled promise rejection",n)},E=function(t){u(X,d,(function(){var e,n=t.facade,l=t.value;if(D(t)&&(e=C((function(){a?F.emit("unhandledRejection",l,n):M("unhandledrejection",n,l)})),t.rejection=a||D(t)?2:1,e.error))throw e.value}))},D=function(t){return 1!==t.rejection&&!t.parent},O=function(t){u(X,d,(function(){var e=t.facade;a?F.emit("rejectionHandled",e):M("rejectionhandled",e,t.value)}))},_=function(t,e,n){return function(l){t(e,l,n)}},q=function(t,e,n){t.done||(t.done=!0,n&&(t=n),t.value=e,t.state=2,j(t,!0))},$=function(t,e,n){if(!t.done){t.done=!0,n&&(t=n);try{if(t.facade===e)throw x("Promise can't be resolved itself");var l=P(e);l?V((function(){var n={done:!1};try{u(l,e,_($,n,t),_(q,n,t))}catch(e){q(n,e,t)}})):(t.value=e,t.state=1,j(t,!1))}catch(e){q({done:!1},e,t)}}};if(K&&(k=(B=function(t){G(this,k),h(t),u(l,this);var e=H(this);try{t(_($,e),_(q,e))}catch(t){q(e,t)}}).prototype,(l=function(t){U(this,{type:"Promise",done:!1,notified:!1,parent:!1,reactions:new R,rejection:!1,state:0,value:void 0})}).prototype=s(k,{then:function(t,e){var n=H(this),l=A(y(this,B));return n.parent=!0,l.ok=!p(t)||t,l.fail=p(e)&&e,l.domain=a?F.domain:void 0,0==n.state?n.reactions.add(l):V((function(){Q(l,n)})),l.promise}}),i=function(){var t=new l,e=H(t);this.promise=t,this.resolve=_($,e),this.reject=_(q,e)},Y.f=A=function(t){return t===B||void 0===t?new i(t):z(t)},!r&&p(S)&&L!==Object.prototype)){c=L.then,J||Z(L,"then",(function(t,e){var n=this;return new B((function(t,e){u(c,n,t,e)})).then(t,e)}),{unsafe:!0});try{delete L.constructor}catch(t){}b&&b(L,k)}o({global:!0,wrap:!0,forced:K},{Promise:B}),I(B,"Promise",!1,!0),m("Promise")},function(t,e,n){var l=n(49),i=n(1);t.exports=/ipad|iphone|ipod/i.test(l)&&void 0!==i.Pebble},function(t,e,n){var l=n(49);t.exports=/web0s(?!.*chrome)/i.test(l)},function(t,e){var n=function(){this.head=null,this.tail=null};n.prototype={add:function(t){var e={item:t,next:null};this.head?this.tail.next=e:this.head=e,this.tail=e},get:function(){var t=this.head;if(t)return this.head=t.next,this.tail===t&&(this.tail=null),t.item}},t.exports=n},function(t,e){t.exports="object"==typeof window&&"object"!=typeof Deno},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(6),o=n(62),r=n(80),a=n(8);l({target:"Promise",stat:!0,forced:n(196)},{all:function(t){var e=this,n=o.f(e),l=n.resolve,d=n.reject,u=r((function(){var n=c(e.resolve),o=[],r=0,u=1;a(t,(function(t){var c=r++,a=!1;u++,i(n,e,t).then((function(t){a||(a=!0,o[c]=t,--u||l(o))}),d)})),--u||l(o)}));return u.error&&d(u.value),n.promise}})},function(t,e,n){"use strict";var l=n(0),i=n(24),c=n(95).CONSTRUCTOR,o=n(81),r=n(11),a=n(10),d=n(19),u=o&&o.prototype;if(l({target:"Promise",proto:!0,forced:c,real:!0},{catch:function(t){return this.then(void 0,t)}}),!i&&a(o)){var Z=r("Promise").prototype.catch;u.catch!==Z&&d(u,"catch",Z,{unsafe:!0})}},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(6),o=n(62),r=n(80),a=n(8);l({target:"Promise",stat:!0,forced:n(196)},{race:function(t){var e=this,n=o.f(e),l=n.reject,d=r((function(){var o=c(e.resolve);a(t,(function(t){i(o,e,t).then(n.resolve,l)}))}));return d.error&&l(d.value),n.promise}})},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(62);l({target:"Promise",stat:!0,forced:n(95).CONSTRUCTOR},{reject:function(t){var e=c.f(this);return i(e.reject,void 0,t),e.promise}})},function(t,e,n){"use strict";var l=n(0),i=n(11),c=n(24),o=n(81),r=n(95).CONSTRUCTOR,a=n(197),d=i("Promise"),u=c&&!r;l({target:"Promise",stat:!0,forced:c||r},{resolve:function(t){return a(u&&this===d?o:this,t)}})},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(6),o=n(62),r=n(80),a=n(8);l({target:"Promise",stat:!0},{allSettled:function(t){var e=this,n=o.f(e),l=n.resolve,d=n.reject,u=r((function(){var n=c(e.resolve),o=[],r=0,d=1;a(t,(function(t){var c=r++,a=!1;d++,i(n,e,t).then((function(t){a||(a=!0,o[c]={status:"fulfilled",value:t},--d||l(o))}),(function(t){a||(a=!0,o[c]={status:"rejected",reason:t},--d||l(o))}))})),--d||l(o)}));return u.error&&d(u.value),n.promise}})},function(t,e,n){"use strict";var l=n(0),i=n(24),c=n(81),o=n(4),r=n(11),a=n(10),d=n(33),u=n(197),Z=n(19),s=c&&c.prototype;if(l({target:"Promise",proto:!0,real:!0,forced:!!c&&o((function(){s.finally.call({then:function(){}},(function(){}))}))},{finally:function(t){var e=d(this,r("Promise")),n=a(t);return this.then(n?function(n){return u(e,t()).then((function(){return n}))}:t,n?function(n){return u(e,t()).then((function(){throw n}))}:t)}}),!i&&a(c)){var b=r("Promise").prototype.finally;s.finally!==b&&Z(s,"finally",b,{unsafe:!0})}},function(t,e,n){var l=n(0),i=n(18),c=n(6),o=n(2);l({target:"Reflect",stat:!0,forced:!n(4)((function(){Reflect.apply((function(){}))}))},{apply:function(t,e,n){return i(c(t),e,o(n))}})},function(t,e,n){var l=n(0),i=n(11),c=n(18),o=n(184),r=n(112),a=n(2),d=n(12),u=n(29),Z=n(4),s=i("Reflect","construct"),b=Object.prototype,I=[].push,m=Z((function(){function t(){}return!(s((function(){}),[],t)instanceof t)})),h=!Z((function(){s((function(){}))})),p=m||h;l({target:"Reflect",stat:!0,forced:p,sham:p},{construct:function(t,e){r(t),a(e);var n=arguments.length<3?t:r(arguments[2]);if(h&&!m)return s(t,e,n);if(t==n){switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3])}var l=[null];return c(I,l,e),new(c(o,t,l))}var i=n.prototype,Z=u(d(i)?i:b),p=c(t,Z,e);return d(p)?p:Z}})},function(t,e,n){var l=n(0),i=n(9),c=n(2),o=n(55),r=n(16);l({target:"Reflect",stat:!0,forced:n(4)((function(){Reflect.defineProperty(r.f({},1,{value:1}),1,{value:2})})),sham:!i},{defineProperty:function(t,e,n){c(t);var l=o(e);c(n);try{return r.f(t,l,n),!0}catch(t){return!1}}})},function(t,e,n){var l=n(0),i=n(2),c=n(31).f;l({target:"Reflect",stat:!0},{deleteProperty:function(t,e){var n=c(i(t),e);return!(n&&!n.configurable)&&delete t[e]}})},function(t,e,n){var l=n(0),i=n(5),c=n(12),o=n(2),r=n(198),a=n(31),d=n(32);l({target:"Reflect",stat:!0},{get:function t(e,n){var l,u,Z=arguments.length<3?e:arguments[2];return o(e)===Z?e[n]:(l=a.f(e,n))?r(l)?l.value:void 0===l.get?void 0:i(l.get,Z):c(u=d(e))?t(u,n,Z):void 0}})},function(t,e,n){var l=n(0),i=n(9),c=n(2),o=n(31);l({target:"Reflect",stat:!0,sham:!i},{getOwnPropertyDescriptor:function(t,e){return o.f(c(t),e)}})},function(t,e,n){var l=n(0),i=n(2),c=n(32);l({target:"Reflect",stat:!0,sham:!n(141)},{getPrototypeOf:function(t){return c(i(t))}})},function(t,e,n){n(0)({target:"Reflect",stat:!0},{has:function(t,e){return e in t}})},function(t,e,n){var l=n(0),i=n(2),c=n(114);l({target:"Reflect",stat:!0},{isExtensible:function(t){return i(t),c(t)}})},function(t,e,n){n(0)({target:"Reflect",stat:!0},{ownKeys:n(133)})},function(t,e,n){var l=n(0),i=n(11),c=n(2);l({target:"Reflect",stat:!0,sham:!n(93)},{preventExtensions:function(t){c(t);try{var e=i("Object","preventExtensions");return e&&e(t),!0}catch(t){return!1}}})},function(t,e,n){var l=n(0),i=n(5),c=n(2),o=n(12),r=n(198),a=n(4),d=n(16),u=n(31),Z=n(32),s=n(43);l({target:"Reflect",stat:!0,forced:a((function(){var t=function(){},e=d.f(new t,"a",{configurable:!0});return!1!==Reflect.set(t.prototype,"a",1,e)}))},{set:function t(e,n,l){var a,b,I,m=arguments.length<4?e:arguments[3],h=u.f(c(e),n);if(!h){if(o(b=Z(e)))return t(b,n,l,m);h=s(0)}if(r(h)){if(!1===h.writable||!o(m))return!1;if(a=u.f(m,n)){if(a.get||a.set||!1===a.writable)return!1;a.value=l,d.f(m,n,a)}else d.f(m,n,s(0,l))}else{if(void 0===(I=h.set))return!1;i(I,m,l)}return!0}})},function(t,e,n){var l=n(0),i=n(2),c=n(179),o=n(52);o&&l({target:"Reflect",stat:!0},{setPrototypeOf:function(t,e){i(t),c(e);try{return o(t,e),!0}catch(t){return!1}}})},function(t,e,n){var l=n(9),i=n(1),c=n(3),o=n(88),r=n(115),a=n(28),d=n(57).f,u=n(36),Z=n(96),s=n(14),b=n(120),I=n(121),m=n(374),h=n(19),p=n(4),g=n(15),G=n(20).enforce,y=n(66),X=n(7),V=n(199),W=n(200),C=X("match"),R=i.RegExp,f=R.prototype,S=i.SyntaxError,v=c(f.exec),Y=c("".charAt),K=c("".replace),N=c("".indexOf),J=c("".slice),H=/^\?<[^\s\d!#%&*+<=>@^][^\s!#%&*+<=>@^]*>/,U=/a/g,L=/a/g,B=new R(U)!==U,k=I.MISSED_STICKY,x=I.UNSUPPORTED_Y,T=l&&(!B||k||V||W||p((function(){return L[C]=!1,R(U)!=U||R(L)==L||"/a/i"!=R(U,"i")})));if(o("RegExp",T)){for(var F=function(t,e){var n,l,i,c,o,d,I=u(f,this),m=Z(t),h=void 0===e,p=[],y=t;if(!I&&m&&h&&t.constructor===F)return t;if((m||u(f,t))&&(t=t.source,h&&(e=b(y))),t=void 0===t?"":s(t),e=void 0===e?"":s(e),y=t,V&&"dotAll"in U&&(l=!!e&&N(e,"s")>-1)&&(e=K(e,/s/g,"")),n=e,k&&"sticky"in U&&(i=!!e&&N(e,"y")>-1)&&x&&(e=K(e,/y/g,"")),W&&(t=(c=function(t){for(var e,n=t.length,l=0,i="",c=[],o={},r=!1,a=!1,d=0,u="";l<=n;l++){if("\\"===(e=Y(t,l)))e+=Y(t,++l);else if("]"===e)r=!1;else if(!r)switch(!0){case"["===e:r=!0;break;case"("===e:v(H,J(t,l+1))&&(l+=2,a=!0),i+=e,d++;continue;case">"===e&&a:if(""===u||g(o,u))throw new S("Invalid capture group name");o[u]=!0,c[c.length]=[u,d],a=!1,u="";continue}a?u+=e:i+=e}return[i,c]}(t))[0],p=c[1]),o=r(R(t,e),I?this:f,F),(l||i||p.length)&&(d=G(o),l&&(d.dotAll=!0,d.raw=F(function(t){for(var e,n=t.length,l=0,i="",c=!1;l<=n;l++)"\\"!==(e=Y(t,l))?c||"."!==e?("["===e?c=!0:"]"===e&&(c=!1),i+=e):i+="[\\s\\S]":i+=e+Y(t,++l);return i}(t),n)),i&&(d.sticky=!0),p.length&&(d.groups=p)),t!==y)try{a(o,"source",""===y?"(?:)":y)}catch(t){}return o},A=d(R),z=0;A.length>z;)m(F,R,A[z++]);f.constructor=F,F.prototype=f,h(i,"RegExp",F)}y("RegExp")},function(t,e,n){var l=n(16).f;t.exports=function(t,e,n){n in t||l(t,n,{configurable:!0,get:function(){return e[n]},set:function(t){e[n]=t}})}},function(t,e,n){var l=n(9),i=n(16),c=n(153),o=n(4),r=RegExp.prototype;l&&o((function(){return"sy"!==Object.getOwnPropertyDescriptor(r,"flags").get.call({dotAll:!0,sticky:!0})}))&&i.f(r,"flags",{configurable:!0,get:c})},function(t,e,n){var l=n(1),i=n(9),c=n(121).MISSED_STICKY,o=n(40),r=n(16).f,a=n(20).get,d=RegExp.prototype,u=l.TypeError;i&&c&&r(d,"sticky",{configurable:!0,get:function(){if(this!==d){if("RegExp"===o(this))return!!a(this).sticky;throw u("Incompatible receiver, RegExp required")}}})},function(t,e,n){"use strict";n(154);var l,i,c=n(0),o=n(1),r=n(5),a=n(3),d=n(10),u=n(12),Z=(l=!1,(i=/[ac]/).exec=function(){return l=!0,/./.exec.apply(this,arguments)},!0===i.test("abc")&&l),s=o.Error,b=a(/./.test);c({target:"RegExp",proto:!0,forced:!Z},{test:function(t){var e=this.exec;if(!d(e))return b(this,t);var n=r(e,this,t);if(null!==n&&!u(n))throw new s("RegExp exec method returned something other than an Object or null");return!!n}})},function(t,e,n){"use strict";var l=n(74).PROPER,i=n(19),c=n(2),o=n(14),r=n(4),a=n(120),d=RegExp.prototype.toString,u=r((function(){return"/a/b"!=d.call({source:"a",flags:"b"})})),Z=l&&"toString"!=d.name;(u||Z)&&i(RegExp.prototype,"toString",(function(){var t=c(this);return"/"+o(t.source)+"/"+o(a(t))}),{unsafe:!0})},function(t,e,n){n(380)},function(t,e,n){"use strict";n(113)("Set",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),n(185))},function(t,e,n){"use strict";var l=n(0),i=n(82).codeAt;l({target:"String",proto:!0},{codePointAt:function(t){return i(this,t)}})},function(t,e,n){"use strict";var l,i=n(0),c=n(3),o=n(31).f,r=n(37),a=n(14),d=n(155),u=n(26),Z=n(156),s=n(24),b=c("".endsWith),I=c("".slice),m=Math.min,h=Z("endsWith");i({target:"String",proto:!0,forced:!!(s||h||(l=o(String.prototype,"endsWith"),!l||l.writable))&&!h},{endsWith:function(t){var e=a(u(this));d(t);var n=arguments.length>1?arguments[1]:void 0,l=e.length,i=void 0===n?l:m(r(n),l),c=a(t);return b?b(e,c,i):I(e,i-c.length,i)===c}})},function(t,e,n){var l=n(0),i=n(1),c=n(3),o=n(50),r=i.RangeError,a=String.fromCharCode,d=String.fromCodePoint,u=c([].join);l({target:"String",stat:!0,forced:!!d&&1!=d.length},{fromCodePoint:function(t){for(var e,n=[],l=arguments.length,i=0;l>i;){if(e=+arguments[i++],o(e,1114111)!==e)throw r(e+" is not a valid code point");n[i]=e<65536?a(e):a(55296+((e-=65536)>>10),e%1024+56320)}return u(n,"")}})},function(t,e,n){"use strict";var l=n(0),i=n(3),c=n(155),o=n(26),r=n(14),a=n(156),d=i("".indexOf);l({target:"String",proto:!0,forced:!a("includes")},{includes:function(t){return!!~d(r(o(this)),r(c(t)),arguments.length>1?arguments[1]:void 0)}})},function(t,e,n){"use strict";var l=n(5),i=n(123),c=n(2),o=n(37),r=n(14),a=n(26),d=n(27),u=n(124),Z=n(97);i("match",(function(t,e,n){return[function(e){var n=a(this),i=null==e?void 0:d(e,t);return i?l(i,e,n):new RegExp(e)[t](r(n))},function(t){var l=c(this),i=r(t),a=n(e,l,i);if(a.done)return a.value;if(!l.global)return Z(l,i);var d=l.unicode;l.lastIndex=0;for(var s,b=[],I=0;null!==(s=Z(l,i));){var m=r(s[0]);b[I]=m,""===m&&(l.lastIndex=u(i,o(l.lastIndex),d)),I++}return 0===I?null:b}]}))},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(5),o=n(3),r=n(77),a=n(26),d=n(37),u=n(14),Z=n(2),s=n(40),b=n(96),I=n(120),m=n(27),h=n(19),p=n(4),g=n(7),G=n(33),y=n(124),X=n(97),V=n(20),W=n(24),C=g("matchAll"),R=V.set,f=V.getterFor("RegExp String Iterator"),S=RegExp.prototype,v=i.TypeError,Y=o("".indexOf),K=o("".matchAll),N=!!K&&!p((function(){K("a",/./)})),J=r((function(t,e,n,l){R(this,{type:"RegExp String Iterator",regexp:t,string:e,global:n,unicode:l,done:!1})}),"RegExp String",(function(){var t=f(this);if(t.done)return{value:void 0,done:!0};var e=t.regexp,n=t.string,l=X(e,n);return null===l?{value:void 0,done:t.done=!0}:t.global?(""===u(l[0])&&(e.lastIndex=y(n,d(e.lastIndex),t.unicode)),{value:l,done:!1}):(t.done=!0,{value:l,done:!1})})),H=function(t){var e,n,l,i=Z(this),c=u(t),o=G(i,RegExp),r=u(I(i));return e=new o(o===RegExp?i.source:i,r),n=!!~Y(r,"g"),l=!!~Y(r,"u"),e.lastIndex=d(i.lastIndex),new J(e,c,n,l)};l({target:"String",proto:!0,forced:N},{matchAll:function(t){var e,n,l,i,o=a(this);if(null!=t){if(b(t)&&(e=u(a(I(t))),!~Y(e,"g")))throw v("`.matchAll` does not allow non-global regexes");if(N)return K(o,t);if(void 0===(l=m(t,C))&&W&&"RegExp"==s(t)&&(l=H),l)return c(l,t,o)}else if(N)return K(o,t);return n=u(o),i=new RegExp(t,"g"),W?c(H,i,n):i[C](n)}}),W||C in S||h(S,C,H)},function(t,e,n){"use strict";var l=n(0),i=n(145).end;l({target:"String",proto:!0,forced:n(202)},{padEnd:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,e,n){"use strict";var l=n(0),i=n(145).start;l({target:"String",proto:!0,forced:n(202)},{padStart:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,e,n){var l=n(0),i=n(3),c=n(34),o=n(13),r=n(14),a=n(21),d=i([].push),u=i([].join);l({target:"String",stat:!0},{raw:function(t){for(var e=c(o(t).raw),n=a(e),l=arguments.length,i=[],Z=0;n>Z;){if(d(i,r(e[Z++])),Z===n)return u(i,"");Z<l&&d(i,r(arguments[Z]))}}})},function(t,e,n){n(0)({target:"String",proto:!0},{repeat:n(146)})},function(t,e,n){"use strict";var l=n(18),i=n(5),c=n(3),o=n(123),r=n(4),a=n(2),d=n(10),u=n(35),Z=n(37),s=n(14),b=n(26),I=n(124),m=n(27),h=n(203),p=n(97),g=n(7)("replace"),G=Math.max,y=Math.min,X=c([].concat),V=c([].push),W=c("".indexOf),C=c("".slice),R="$0"==="a".replace(/./,"$0"),f=!!/./[g]&&""===/./[g]("a","$0");o("replace",(function(t,e,n){var c=f?"$":"$0";return[function(t,n){var l=b(this),c=null==t?void 0:m(t,g);return c?i(c,t,l,n):i(e,s(l),t,n)},function(t,i){var o=a(this),r=s(t);if("string"==typeof i&&-1===W(i,c)&&-1===W(i,"$<")){var b=n(e,o,r,i);if(b.done)return b.value}var m=d(i);m||(i=s(i));var g=o.global;if(g){var R=o.unicode;o.lastIndex=0}for(var f=[];;){var S=p(o,r);if(null===S)break;if(V(f,S),!g)break;""===s(S[0])&&(o.lastIndex=I(r,Z(o.lastIndex),R))}for(var v,Y="",K=0,N=0;N<f.length;N++){for(var J=s((S=f[N])[0]),H=G(y(u(S.index),r.length),0),U=[],L=1;L<S.length;L++)V(U,void 0===(v=S[L])?v:String(v));var B=S.groups;if(m){var k=X([J],U,H,r);void 0!==B&&V(k,B);var x=s(l(i,void 0,k))}else x=h(J,r,H,U,B,i);H>=K&&(Y+=C(r,K,H)+x,K=H+J.length)}return Y+C(r,K)}]}),!!r((function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:"7"},t},"7"!=="".replace(t,"$<a>")}))||!R||f)},function(t,e,n){"use strict";var l=n(5),i=n(123),c=n(2),o=n(26),r=n(192),a=n(14),d=n(27),u=n(97);i("search",(function(t,e,n){return[function(e){var n=o(this),i=null==e?void 0:d(e,t);return i?l(i,e,n):new RegExp(e)[t](a(n))},function(t){var l=c(this),i=a(t),o=n(e,l,i);if(o.done)return o.value;var d=l.lastIndex;r(d,0)||(l.lastIndex=0);var Z=u(l,i);return r(l.lastIndex,d)||(l.lastIndex=d),null===Z?-1:Z.index}]}))},function(t,e,n){"use strict";var l=n(18),i=n(5),c=n(3),o=n(123),r=n(96),a=n(2),d=n(26),u=n(33),Z=n(124),s=n(37),b=n(14),I=n(27),m=n(89),h=n(97),p=n(122),g=n(121),G=n(4),y=g.UNSUPPORTED_Y,X=Math.min,V=[].push,W=c(/./.exec),C=c(V),R=c("".slice);o("split",(function(t,e,n){var c;return c="c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length?function(t,n){var c=b(d(this)),o=void 0===n?4294967295:n>>>0;if(0===o)return[];if(void 0===t)return[c];if(!r(t))return i(e,c,t,o);for(var a,u,Z,s=[],I=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":""),h=0,g=new RegExp(t.source,I+"g");(a=i(p,g,c))&&!((u=g.lastIndex)>h&&(C(s,R(c,h,a.index)),a.length>1&&a.index<c.length&&l(V,s,m(a,1)),Z=a[0].length,h=u,s.length>=o));)g.lastIndex===a.index&&g.lastIndex++;return h===c.length?!Z&&W(g,"")||C(s,""):C(s,R(c,h)),s.length>o?m(s,0,o):s}:"0".split(void 0,0).length?function(t,n){return void 0===t&&0===n?[]:i(e,this,t,n)}:e,[function(e,n){var l=d(this),o=null==e?void 0:I(e,t);return o?i(o,e,l,n):i(c,b(l),e,n)},function(t,l){var i=a(this),o=b(t),r=n(c,i,o,l,c!==e);if(r.done)return r.value;var d=u(i,RegExp),I=i.unicode,m=(i.ignoreCase?"i":"")+(i.multiline?"m":"")+(i.unicode?"u":"")+(y?"g":"y"),p=new d(y?"^(?:"+i.source+")":i,m),g=void 0===l?4294967295:l>>>0;if(0===g)return[];if(0===o.length)return null===h(p,o)?[o]:[];for(var G=0,V=0,W=[];V<o.length;){p.lastIndex=y?0:V;var f,S=h(p,y?R(o,V):o);if(null===S||(f=X(s(p.lastIndex+(y?V:0)),o.length))===G)V=Z(o,V,I);else{if(C(W,R(o,G,V)),W.length===g)return W;for(var v=1;v<=S.length-1;v++)if(C(W,S[v]),W.length===g)return W;V=G=f}}return C(W,R(o,G)),W}]}),!!G((function(){var t=/(?:)/,e=t.exec;t.exec=function(){return e.apply(this,arguments)};var n="ab".split(t);return 2!==n.length||"a"!==n[0]||"b"!==n[1]})),y)},function(t,e,n){"use strict";var l,i=n(0),c=n(3),o=n(31).f,r=n(37),a=n(14),d=n(155),u=n(26),Z=n(156),s=n(24),b=c("".startsWith),I=c("".slice),m=Math.min,h=Z("startsWith");i({target:"String",proto:!0,forced:!!(s||h||(l=o(String.prototype,"startsWith"),!l||l.writable))&&!h},{startsWith:function(t){var e=a(u(this));d(t);var n=r(m(arguments.length>1?arguments[1]:void 0,e.length)),l=a(t);return b?b(e,l,n):I(e,n,n+l.length)===l}})},function(t,e,n){"use strict";var l=n(0),i=n(79).trim;l({target:"String",proto:!0,forced:n(157)("trim")},{trim:function(){return i(this)}})},function(t,e,n){n(397);var l=n(0),i=n(204);l({target:"String",proto:!0,name:"trimEnd",forced:"".trimEnd!==i},{trimEnd:i})},function(t,e,n){var l=n(0),i=n(204);l({target:"String",proto:!0,name:"trimEnd",forced:"".trimRight!==i},{trimRight:i})},function(t,e,n){n(399);var l=n(0),i=n(205);l({target:"String",proto:!0,name:"trimStart",forced:"".trimStart!==i},{trimStart:i})},function(t,e,n){var l=n(0),i=n(205);l({target:"String",proto:!0,name:"trimStart",forced:"".trimLeft!==i},{trimLeft:i})},function(t,e,n){"use strict";var l=n(0),i=n(38);l({target:"String",proto:!0,forced:n(39)("anchor")},{anchor:function(t){return i(this,"a","name",t)}})},function(t,e,n){"use strict";var l=n(0),i=n(38);l({target:"String",proto:!0,forced:n(39)("big")},{big:function(){return i(this,"big","","")}})},function(t,e,n){"use strict";var l=n(0),i=n(38);l({target:"String",proto:!0,forced:n(39)("blink")},{blink:function(){return i(this,"blink","","")}})},function(t,e,n){"use strict";var l=n(0),i=n(38);l({target:"String",proto:!0,forced:n(39)("bold")},{bold:function(){return i(this,"b","","")}})},function(t,e,n){"use strict";var l=n(0),i=n(38);l({target:"String",proto:!0,forced:n(39)("fixed")},{fixed:function(){return i(this,"tt","","")}})},function(t,e,n){"use strict";var l=n(0),i=n(38);l({target:"String",proto:!0,forced:n(39)("fontcolor")},{fontcolor:function(t){return i(this,"font","color",t)}})},function(t,e,n){"use strict";var l=n(0),i=n(38);l({target:"String",proto:!0,forced:n(39)("fontsize")},{fontsize:function(t){return i(this,"font","size",t)}})},function(t,e,n){"use strict";var l=n(0),i=n(38);l({target:"String",proto:!0,forced:n(39)("italics")},{italics:function(){return i(this,"i","","")}})},function(t,e,n){"use strict";var l=n(0),i=n(38);l({target:"String",proto:!0,forced:n(39)("link")},{link:function(t){return i(this,"a","href",t)}})},function(t,e,n){"use strict";var l=n(0),i=n(38);l({target:"String",proto:!0,forced:n(39)("small")},{small:function(){return i(this,"small","","")}})},function(t,e,n){"use strict";var l=n(0),i=n(38);l({target:"String",proto:!0,forced:n(39)("strike")},{strike:function(){return i(this,"strike","","")}})},function(t,e,n){"use strict";var l=n(0),i=n(38);l({target:"String",proto:!0,forced:n(39)("sub")},{sub:function(){return i(this,"sub","","")}})},function(t,e,n){"use strict";var l=n(0),i=n(38);l({target:"String",proto:!0,forced:n(39)("sup")},{sup:function(){return i(this,"sup","","")}})},function(t,e,n){n(53)("Float32",(function(t){return function(e,n,l){return t(this,e,n,l)}}))},function(t,e,n){n(53)("Float64",(function(t){return function(e,n,l){return t(this,e,n,l)}}))},function(t,e,n){n(53)("Int8",(function(t){return function(e,n,l){return t(this,e,n,l)}}))},function(t,e,n){n(53)("Int16",(function(t){return function(e,n,l){return t(this,e,n,l)}}))},function(t,e,n){n(53)("Int32",(function(t){return function(e,n,l){return t(this,e,n,l)}}))},function(t,e,n){n(53)("Uint8",(function(t){return function(e,n,l){return t(this,e,n,l)}}))},function(t,e,n){n(53)("Uint8",(function(t){return function(e,n,l){return t(this,e,n,l)}}),!0)},function(t,e,n){n(53)("Uint16",(function(t){return function(e,n,l){return t(this,e,n,l)}}))},function(t,e,n){n(53)("Uint32",(function(t){return function(e,n,l){return t(this,e,n,l)}}))},function(t,e,n){"use strict";var l=n(3),i=n(17),c=l(n(175)),o=i.aTypedArray;(0,i.exportTypedArrayMethod)("copyWithin",(function(t,e){return c(o(this),t,e,arguments.length>2?arguments[2]:void 0)}))},function(t,e,n){"use strict";var l=n(17),i=n(30).every,c=l.aTypedArray;(0,l.exportTypedArrayMethod)("every",(function(t){return i(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,e,n){"use strict";var l=n(17),i=n(5),c=n(137),o=l.aTypedArray;(0,l.exportTypedArrayMethod)("fill",(function(t){var e=arguments.length;return i(c,o(this),t,e>1?arguments[1]:void 0,e>2?arguments[2]:void 0)}))},function(t,e,n){"use strict";var l=n(17),i=n(30).filter,c=n(426),o=l.aTypedArray;(0,l.exportTypedArrayMethod)("filter",(function(t){var e=i(o(this),t,arguments.length>1?arguments[1]:void 0);return c(this,e)}))},function(t,e,n){var l=n(427),i=n(125);t.exports=function(t,e){return l(i(t),e)}},function(t,e,n){var l=n(21);t.exports=function(t,e){for(var n=0,i=l(e),c=new t(i);i>n;)c[n]=e[n++];return c}},function(t,e,n){"use strict";var l=n(17),i=n(30).find,c=l.aTypedArray;(0,l.exportTypedArrayMethod)("find",(function(t){return i(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,e,n){"use strict";var l=n(17),i=n(30).findIndex,c=l.aTypedArray;(0,l.exportTypedArrayMethod)("findIndex",(function(t){return i(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,e,n){"use strict";var l=n(17),i=n(30).forEach,c=l.aTypedArray;(0,l.exportTypedArrayMethod)("forEach",(function(t){i(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,e,n){"use strict";var l=n(158);(0,n(17).exportTypedArrayStaticMethod)("from",n(207),l)},function(t,e,n){"use strict";var l=n(17),i=n(87).includes,c=l.aTypedArray;(0,l.exportTypedArrayMethod)("includes",(function(t){return i(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,e,n){"use strict";var l=n(17),i=n(87).indexOf,c=l.aTypedArray;(0,l.exportTypedArrayMethod)("indexOf",(function(t){return i(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,e,n){"use strict";var l=n(1),i=n(4),c=n(3),o=n(17),r=n(109),a=n(7)("iterator"),d=l.Uint8Array,u=c(r.values),Z=c(r.keys),s=c(r.entries),b=o.aTypedArray,I=o.exportTypedArrayMethod,m=d&&d.prototype,h=!i((function(){m[a].call([1])})),p=!!m&&m.values&&m[a]===m.values&&"values"===m.values.name,g=function(){return u(b(this))};I("entries",(function(){return s(b(this))}),h),I("keys",(function(){return Z(b(this))}),h),I("values",g,h||!p,{name:"values"}),I(a,g,h||!p,{name:"values"})},function(t,e,n){"use strict";var l=n(17),i=n(3),c=l.aTypedArray,o=l.exportTypedArrayMethod,r=i([].join);o("join",(function(t){return r(c(this),t)}))},function(t,e,n){"use strict";var l=n(17),i=n(18),c=n(180),o=l.aTypedArray;(0,l.exportTypedArrayMethod)("lastIndexOf",(function(t){var e=arguments.length;return i(c,o(this),e>1?[t,arguments[1]]:[t])}))},function(t,e,n){"use strict";var l=n(17),i=n(30).map,c=n(125),o=l.aTypedArray;(0,l.exportTypedArrayMethod)("map",(function(t){return i(o(this),t,arguments.length>1?arguments[1]:void 0,(function(t,e){return new(c(t))(e)}))}))},function(t,e,n){"use strict";var l=n(17),i=n(158),c=l.aTypedArrayConstructor;(0,l.exportTypedArrayStaticMethod)("of",(function(){for(var t=0,e=arguments.length,n=new(c(this))(e);e>t;)n[t]=arguments[t++];return n}),i)},function(t,e,n){"use strict";var l=n(17),i=n(110).left,c=l.aTypedArray;(0,l.exportTypedArrayMethod)("reduce",(function(t){var e=arguments.length;return i(c(this),t,e,e>1?arguments[1]:void 0)}))},function(t,e,n){"use strict";var l=n(17),i=n(110).right,c=l.aTypedArray;(0,l.exportTypedArrayMethod)("reduceRight",(function(t){var e=arguments.length;return i(c(this),t,e,e>1?arguments[1]:void 0)}))},function(t,e,n){"use strict";var l=n(17),i=l.aTypedArray,c=l.exportTypedArrayMethod,o=Math.floor;c("reverse",(function(){for(var t,e=i(this).length,n=o(e/2),l=0;l<n;)t=this[l],this[l++]=this[--e],this[e]=t;return this}))},function(t,e,n){"use strict";var l=n(1),i=n(5),c=n(17),o=n(21),r=n(206),a=n(13),d=n(4),u=l.RangeError,Z=l.Int8Array,s=Z&&Z.prototype,b=s&&s.set,I=c.aTypedArray,m=c.exportTypedArrayMethod,h=!d((function(){var t=new Uint8ClampedArray(2);return i(b,t,{length:1,0:3},1),3!==t[1]})),p=h&&c.NATIVE_ARRAY_BUFFER_VIEWS&&d((function(){var t=new Z(2);return t.set(1),t.set("2",1),0!==t[0]||2!==t[1]}));m("set",(function(t){I(this);var e=r(arguments.length>1?arguments[1]:void 0,1),n=a(t);if(h)return i(b,this,n,e);var l=this.length,c=o(n),d=0;if(c+e>l)throw u("Wrong length");for(;d<c;)this[e+d]=n[d++]}),!h||p)},function(t,e,n){"use strict";var l=n(17),i=n(125),c=n(4),o=n(60),r=l.aTypedArray;(0,l.exportTypedArrayMethod)("slice",(function(t,e){for(var n=o(r(this),t,e),l=i(this),c=0,a=n.length,d=new l(a);a>c;)d[c]=n[c++];return d}),c((function(){new Int8Array(1).slice()})))},function(t,e,n){"use strict";var l=n(17),i=n(30).some,c=l.aTypedArray;(0,l.exportTypedArrayMethod)("some",(function(t){return i(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,e,n){"use strict";var l=n(1),i=n(3),c=n(4),o=n(6),r=n(142),a=n(17),d=n(181),u=n(182),Z=n(56),s=n(143),b=a.aTypedArray,I=a.exportTypedArrayMethod,m=l.Uint16Array,h=m&&i(m.prototype.sort),p=!(!h||c((function(){h(new m(2),null)}))&&c((function(){h(new m(2),{})}))),g=!!h&&!c((function(){if(Z)return Z<74;if(d)return d<67;if(u)return!0;if(s)return s<602;var t,e,n=new m(516),l=Array(516);for(t=0;t<516;t++)e=t%4,n[t]=515-t,l[t]=t-2*e+3;for(h(n,(function(t,e){return(t/4|0)-(e/4|0)})),t=0;t<516;t++)if(n[t]!==l[t])return!0}));I("sort",(function(t){return void 0!==t&&o(t),g?h(this,t):r(b(this),function(t){return function(e,n){return void 0!==t?+t(e,n)||0:n!=n?-1:e!=e?1:0===e&&0===n?1/e>0&&1/n<0?1:-1:e>n}}(t))}),!g||p)},function(t,e,n){"use strict";var l=n(17),i=n(37),c=n(50),o=n(125),r=l.aTypedArray;(0,l.exportTypedArrayMethod)("subarray",(function(t,e){var n=r(this),l=n.length,a=c(t,l);return new(o(n))(n.buffer,n.byteOffset+a*n.BYTES_PER_ELEMENT,i((void 0===e?l:c(e,l))-a))}))},function(t,e,n){"use strict";var l=n(1),i=n(18),c=n(17),o=n(4),r=n(60),a=l.Int8Array,d=c.aTypedArray,u=c.exportTypedArrayMethod,Z=[].toLocaleString,s=!!a&&o((function(){Z.call(new a(1))}));u("toLocaleString",(function(){return i(Z,s?r(d(this)):d(this),r(arguments))}),o((function(){return[1,2].toLocaleString()!=new a([1,2]).toLocaleString()}))||!o((function(){a.prototype.toLocaleString.call([1,2])})))},function(t,e,n){"use strict";var l=n(17).exportTypedArrayMethod,i=n(4),c=n(1),o=n(3),r=c.Uint8Array,a=r&&r.prototype||{},d=[].toString,u=o([].join);i((function(){d.call({})}))&&(d=function(){return u(this)});var Z=a.toString!=d;l("toString",d,Z)},function(t,e,n){"use strict";var l,i=n(1),c=n(3),o=n(46),r=n(67),a=n(113),d=n(208),u=n(12),Z=n(114),s=n(20).enforce,b=n(168),I=!i.ActiveXObject&&"ActiveXObject"in i,m=function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}},h=a("WeakMap",m,d);if(b&&I){l=d.getConstructor(m,"WeakMap",!0),r.enable();var p=h.prototype,g=c(p.delete),G=c(p.has),y=c(p.get),X=c(p.set);o(p,{delete:function(t){if(u(t)&&!Z(t)){var e=s(this);return e.frozen||(e.frozen=new l),g(this,t)||e.frozen.delete(t)}return g(this,t)},has:function(t){if(u(t)&&!Z(t)){var e=s(this);return e.frozen||(e.frozen=new l),G(this,t)||e.frozen.has(t)}return G(this,t)},get:function(t){if(u(t)&&!Z(t)){var e=s(this);return e.frozen||(e.frozen=new l),G(this,t)?y(this,t):e.frozen.get(t)}return y(this,t)},set:function(t,e){if(u(t)&&!Z(t)){var n=s(this);n.frozen||(n.frozen=new l),G(this,t)?X(this,t,e):n.frozen.set(t,e)}else X(this,t,e);return this}})}},function(t,e,n){n(451)},function(t,e,n){"use strict";n(113)("WeakSet",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),n(208))},function(t,e,n){n(453)},function(t,e,n){n(454)},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(36),o=n(32),r=n(52),a=n(132),d=n(29),u=n(28),Z=n(43),s=n(455),b=n(456),I=n(8),m=n(457),h=n(7),p=n(458),g=h("toStringTag"),G=i.Error,y=[].push,X=function(t,e){var n,l=arguments.length>2?arguments[2]:void 0,i=c(V,this);r?n=r(new G,i?o(this):V):(n=i?this:d(V),u(n,g,"Error")),void 0!==e&&u(n,"message",m(e)),p&&u(n,"stack",s(n.stack,1)),b(n,l);var a=[];return I(t,y,{that:a}),u(n,"errors",a),n};r?r(X,G):a(X,G,{name:!0});var V=X.prototype=d(G.prototype,{constructor:Z(1,X),message:Z(1,""),name:Z(1,"AggregateError")});l({global:!0},{AggregateError:X})},function(t,e,n){var l=n(3),i=Error,c=l("".replace),o=String(i("zxcasd").stack),r=/\n\s*at [^:]*:[^\n]*/,a=r.test(o);t.exports=function(t,e){if(a&&"string"==typeof t&&!i.prepareStackTrace)for(;e--;)t=c(t,r,"");return t}},function(t,e,n){var l=n(12),i=n(28);t.exports=function(t,e){l(e)&&"cause"in e&&i(t,"cause",e.cause)}},function(t,e,n){var l=n(14);t.exports=function(t,e){return void 0===t?arguments.length<2?"":e:l(t)}},function(t,e,n){var l=n(4),i=n(43);t.exports=!l((function(){var t=Error("a");return!("stack"in t)||(Object.defineProperty(t,"stack",i(1,7)),7!==t.stack)}))},function(t,e,n){var l=n(0),i=n(59),c=Object.isFrozen,o=function(t,e){if(!c||!i(t)||!c(t))return!1;for(var n,l=0,o=t.length;l<o;)if(!("string"==typeof(n=t[l++])||e&&void 0===n))return!1;return 0!==o};l({target:"Array",stat:!0,sham:!0,forced:!0},{isTemplateObject:function(t){if(!o(t,!0))return!1;var e=t.raw;return e.length===t.length&&o(e,!1)}})},function(t,e,n){"use strict";var l=n(9),i=n(44),c=n(13),o=n(21),r=n(16).f;l&&(r(Array.prototype,"lastIndex",{configurable:!0,get:function(){var t=c(this),e=o(t);return 0==e?0:e-1}}),i("lastIndex"))},function(t,e,n){"use strict";var l=n(9),i=n(44),c=n(13),o=n(21),r=n(16).f;l&&(r(Array.prototype,"lastItem",{configurable:!0,get:function(){var t=c(this),e=o(t);return 0==e?void 0:t[e-1]},set:function(t){var e=c(this),n=o(e);return e[0==n?0:n-1]=t}}),i("lastItem"))},function(t,e,n){"use strict";var l=n(0),i=n(42),c=n(28),o=n(15),r=n(7),a=n(126),d=n(24),u=r("toStringTag"),Z=function(){i(this,a)};Z.prototype=a,o(a,u)||c(a,u,"AsyncIterator"),!d&&o(a,"constructor")&&a.constructor!==Object||c(a,"constructor",Z),l({global:!0,forced:d},{AsyncIterator:Z})},function(t,e,n){"use strict";var l=n(0),i=n(18),c=n(2),o=n(68)((function(t,e){var n=this,l=n.iterator;return t.resolve(c(i(n.next,l,e))).then((function(t){return c(t).done?(n.done=!0,{done:!0,value:void 0}):{done:!1,value:[n.index++,t.value]}}))}));l({target:"AsyncIterator",proto:!0,real:!0,forced:!0},{asIndexedPairs:function(){return new o({iterator:c(this),index:0})}})},function(t,e,n){"use strict";var l=n(0),i=n(18),c=n(2),o=n(98),r=n(68)((function(t,e){var n=this;return new t((function(l,o){var r=function(){try{t.resolve(c(i(n.next,n.iterator,n.remaining?[]:e))).then((function(t){try{c(t).done?(n.done=!0,l({done:!0,value:void 0})):n.remaining?(n.remaining--,r()):l({done:!1,value:t.value})}catch(t){o(t)}}),o)}catch(t){o(t)}};r()}))}));l({target:"AsyncIterator",proto:!0,real:!0,forced:!0},{drop:function(t){return new r({iterator:c(this),remaining:o(t)})}})},function(t,e,n){"use strict";var l=n(0),i=n(99).every;l({target:"AsyncIterator",proto:!0,real:!0,forced:!0},{every:function(t){return i(this,t)}})},function(t,e,n){"use strict";var l=n(0),i=n(18),c=n(6),o=n(2),r=n(68)((function(t,e){var n=this,l=n.filterer;return new t((function(c,r){var a=function(){try{t.resolve(o(i(n.next,n.iterator,e))).then((function(e){try{if(o(e).done)n.done=!0,c({done:!0,value:void 0});else{var i=e.value;t.resolve(l(i)).then((function(t){t?c({done:!1,value:i}):a()}),r)}}catch(t){r(t)}}),r)}catch(t){r(t)}};a()}))}));l({target:"AsyncIterator",proto:!0,real:!0,forced:!0},{filter:function(t){return new r({iterator:o(this),filterer:c(t)})}})},function(t,e,n){"use strict";var l=n(0),i=n(99).find;l({target:"AsyncIterator",proto:!0,real:!0,forced:!0},{find:function(t){return i(this,t)}})},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(6),o=n(2),r=n(68),a=n(209),d=r((function(t){var e,n=this,l=n.mapper;return new t((function(r,d){var u=function(){try{t.resolve(o(i(n.next,n.iterator))).then((function(i){try{o(i).done?(n.done=!0,r({done:!0,value:void 0})):t.resolve(l(i.value)).then((function(t){try{return n.innerIterator=e=a(t),n.innerNext=c(e.next),Z()}catch(t){d(t)}}),d)}catch(t){d(t)}}),d)}catch(t){d(t)}},Z=function(){if(e=n.innerIterator)try{t.resolve(o(i(n.innerNext,e))).then((function(t){try{o(t).done?(n.innerIterator=n.innerNext=null,u()):r({done:!1,value:t.value})}catch(t){d(t)}}),d)}catch(t){d(t)}else u()};Z()}))}));l({target:"AsyncIterator",proto:!0,real:!0,forced:!0},{flatMap:function(t){return new d({iterator:o(this),mapper:c(t),innerIterator:null,innerNext:null})}})},function(t,e,n){"use strict";var l=n(0),i=n(99).forEach;l({target:"AsyncIterator",proto:!0,real:!0,forced:!0},{forEach:function(t){return i(this,t)}})},function(t,e,n){var l=n(0),i=n(18),c=n(2),o=n(13),r=n(36),a=n(126),d=n(68),u=n(209),Z=n(45),s=n(61),b=n(27),I=n(7),m=n(210),h=I("asyncIterator"),p=d((function(t,e){return c(i(this.next,this.iterator,e))}),!0);l({target:"AsyncIterator",stat:!0,forced:!0},{from:function(t){var e,n=o(t),l=b(n,h);return l&&(e=u(n,l),r(a,e))?e:void 0===e&&(l=s(n))?new m(Z(n,l)):new p({iterator:void 0!==e?e:n})}})},function(t,e,n){"use strict";var l=n(0),i=n(18),c=n(6),o=n(2),r=n(68)((function(t,e){var n=this,l=n.mapper;return t.resolve(o(i(n.next,n.iterator,e))).then((function(e){return o(e).done?(n.done=!0,{done:!0,value:void 0}):t.resolve(l(e.value)).then((function(t){return{done:!1,value:t}}))}))}));l({target:"AsyncIterator",proto:!0,real:!0,forced:!0},{map:function(t){return new r({iterator:o(this),mapper:c(t)})}})},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(5),o=n(6),r=n(2),a=n(11)("Promise"),d=i.TypeError;l({target:"AsyncIterator",proto:!0,real:!0,forced:!0},{reduce:function(t){var e=r(this),n=o(e.next),l=arguments.length<2,i=l?void 0:arguments[1];return o(t),new a((function(o,u){var Z=function(){try{a.resolve(r(c(n,e))).then((function(e){try{if(r(e).done)l?u(d("Reduce of empty iterator with no initial value")):o(i);else{var n=e.value;l?(l=!1,i=n,Z()):a.resolve(t(i,n)).then((function(t){i=t,Z()}),u)}}catch(t){u(t)}}),u)}catch(t){u(t)}};Z()}))}})},function(t,e,n){"use strict";var l=n(0),i=n(99).some;l({target:"AsyncIterator",proto:!0,real:!0,forced:!0},{some:function(t){return i(this,t)}})},function(t,e,n){"use strict";var l=n(0),i=n(18),c=n(5),o=n(2),r=n(98),a=n(68)((function(t,e){var n,l,o=this.iterator;return this.remaining--?i(this.next,o,e):(l={done:!0,value:void 0},this.done=!0,void 0!==(n=o.return)?t.resolve(c(n,o)).then((function(){return l})):l)}));l({target:"AsyncIterator",proto:!0,real:!0,forced:!0},{take:function(t){return new a({iterator:o(this),remaining:r(t)})}})},function(t,e,n){"use strict";var l=n(0),i=n(99).toArray;l({target:"AsyncIterator",proto:!0,real:!0,forced:!0},{toArray:function(){return i(this,void 0,[])}})},function(t,e,n){var l=n(0),i=n(1),c=n(18),o=n(211),r=n(11),a=n(29),d=i.Object,u=function(){var t=r("Object","freeze");return t?t(a(null)):a(null)};l({global:!0,forced:!0},{compositeKey:function(){return c(o,d,arguments).get("object",u)}})},function(t,e,n){var l=n(0),i=n(211),c=n(11),o=n(18);l({global:!0,forced:!0},{compositeSymbol:function(){return 1==arguments.length&&"string"==typeof arguments[0]?c("Symbol").for(arguments[0]):o(i,null,arguments).get("symbol",c("Symbol"))}})},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(42),o=n(10),r=n(28),a=n(4),d=n(15),u=n(7),Z=n(92).IteratorPrototype,s=n(24),b=u("toStringTag"),I=i.Iterator,m=s||!o(I)||I.prototype!==Z||!a((function(){I({})})),h=function(){c(this,Z)};d(Z,b)||r(Z,b,"Iterator"),!m&&d(Z,"constructor")&&Z.constructor!==Object||r(Z,"constructor",h),h.prototype=Z,l({global:!0,forced:m},{Iterator:h})},function(t,e,n){"use strict";var l=n(0),i=n(18),c=n(2),o=n(69)((function(t){var e=c(i(this.next,this.iterator,t));if(!(this.done=!!e.done))return[this.index++,e.value]}));l({target:"Iterator",proto:!0,real:!0,forced:!0},{asIndexedPairs:function(){return new o({iterator:c(this),index:0})}})},function(t,e,n){"use strict";var l=n(0),i=n(18),c=n(5),o=n(2),r=n(98),a=n(69)((function(t){for(var e,n=this.iterator,l=this.next;this.remaining;)if(this.remaining--,e=o(c(l,n)),this.done=!!e.done)return;if(e=o(i(l,n,t)),!(this.done=!!e.done))return e.value}));l({target:"Iterator",proto:!0,real:!0,forced:!0},{drop:function(t){return new a({iterator:o(this),remaining:r(t)})}})},function(t,e,n){"use strict";var l=n(0),i=n(8),c=n(6),o=n(2);l({target:"Iterator",proto:!0,real:!0,forced:!0},{every:function(t){return o(this),c(t),!i(this,(function(e,n){if(!t(e))return n()}),{IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,e,n){"use strict";var l=n(0),i=n(18),c=n(6),o=n(2),r=n(69),a=n(138),d=r((function(t){for(var e,n,l=this.iterator,c=this.filterer,r=this.next;;){if(e=o(i(r,l,t)),this.done=!!e.done)return;if(n=e.value,a(l,c,n))return n}}));l({target:"Iterator",proto:!0,real:!0,forced:!0},{filter:function(t){return new d({iterator:o(this),filterer:c(t)})}})},function(t,e,n){"use strict";var l=n(0),i=n(8),c=n(6),o=n(2);l({target:"Iterator",proto:!0,real:!0,forced:!0},{find:function(t){return o(this),c(t),i(this,(function(e,n){if(t(e))return n(e)}),{IS_ITERATOR:!0,INTERRUPTED:!0}).result}})},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(5),o=n(6),r=n(2),a=n(61),d=n(69),u=n(107),Z=i.TypeError,s=d((function(){for(var t,e,n,l,i=this.iterator,d=this.mapper;;)try{if(l=this.innerIterator){if(!(t=r(c(this.innerNext,l))).done)return t.value;this.innerIterator=this.innerNext=null}if(t=r(c(this.next,i)),this.done=!!t.done)return;if(e=d(t.value),!(n=a(e)))throw Z(".flatMap callback should return an iterable object");this.innerIterator=l=r(c(n,e)),this.innerNext=o(l.next)}catch(t){u(i,"throw",t)}}));l({target:"Iterator",proto:!0,real:!0,forced:!0},{flatMap:function(t){return new s({iterator:r(this),mapper:o(t),innerIterator:null,innerNext:null})}})},function(t,e,n){"use strict";var l=n(0),i=n(8),c=n(2);l({target:"Iterator",proto:!0,real:!0,forced:!0},{forEach:function(t){i(c(this),t,{IS_ITERATOR:!0})}})},function(t,e,n){var l=n(0),i=n(18),c=n(2),o=n(13),r=n(36),a=n(92).IteratorPrototype,d=n(69),u=n(45),Z=n(61),s=d((function(t){var e=c(i(this.next,this.iterator,t));if(!(this.done=!!e.done))return e.value}),!0);l({target:"Iterator",stat:!0,forced:!0},{from:function(t){var e,n=o(t),l=Z(n);if(l){if(e=u(n,l),r(a,e))return e}else e=n;return new s({iterator:e})}})},function(t,e,n){"use strict";var l=n(0),i=n(18),c=n(6),o=n(2),r=n(69),a=n(138),d=r((function(t){var e=this.iterator,n=o(i(this.next,e,t));if(!(this.done=!!n.done))return a(e,this.mapper,n.value)}));l({target:"Iterator",proto:!0,real:!0,forced:!0},{map:function(t){return new d({iterator:o(this),mapper:c(t)})}})},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(8),o=n(6),r=n(2),a=i.TypeError;l({target:"Iterator",proto:!0,real:!0,forced:!0},{reduce:function(t){r(this),o(t);var e=arguments.length<2,n=e?void 0:arguments[1];if(c(this,(function(l){e?(e=!1,n=l):n=t(n,l)}),{IS_ITERATOR:!0}),e)throw a("Reduce of empty iterator with no initial value");return n}})},function(t,e,n){"use strict";var l=n(0),i=n(8),c=n(6),o=n(2);l({target:"Iterator",proto:!0,real:!0,forced:!0},{some:function(t){return o(this),c(t),i(this,(function(e,n){if(t(e))return n()}),{IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,e,n){"use strict";var l=n(0),i=n(18),c=n(2),o=n(98),r=n(69),a=n(107),d=r((function(t){var e=this.iterator;if(!this.remaining--)return this.done=!0,a(e,"normal",void 0);var n=c(i(this.next,e,t));return(this.done=!!n.done)?void 0:n.value}));l({target:"Iterator",proto:!0,real:!0,forced:!0},{take:function(t){return new d({iterator:c(this),remaining:o(t)})}})},function(t,e,n){"use strict";var l=n(0),i=n(8),c=n(2),o=[].push;l({target:"Iterator",proto:!0,real:!0,forced:!0},{toArray:function(){var t=[];return i(c(this),o,{that:t,IS_ITERATOR:!0}),t}})},function(t,e,n){"use strict";n(0)({target:"Map",proto:!0,real:!0,forced:!0},{deleteAll:n(127)})},function(t,e,n){"use strict";var l=n(0),i=n(2),c=n(22),o=n(47),r=n(8);l({target:"Map",proto:!0,real:!0,forced:!0},{every:function(t){var e=i(this),n=o(e),l=c(t,arguments.length>1?arguments[1]:void 0);return!r(n,(function(t,n,i){if(!l(n,t,e))return i()}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,e,n){"use strict";var l=n(0),i=n(11),c=n(22),o=n(5),r=n(6),a=n(2),d=n(33),u=n(47),Z=n(8);l({target:"Map",proto:!0,real:!0,forced:!0},{filter:function(t){var e=a(this),n=u(e),l=c(t,arguments.length>1?arguments[1]:void 0),s=new(d(e,i("Map"))),b=r(s.set);return Z(n,(function(t,n){l(n,t,e)&&o(b,s,t,n)}),{AS_ENTRIES:!0,IS_ITERATOR:!0}),s}})},function(t,e,n){"use strict";var l=n(0),i=n(2),c=n(22),o=n(47),r=n(8);l({target:"Map",proto:!0,real:!0,forced:!0},{find:function(t){var e=i(this),n=o(e),l=c(t,arguments.length>1?arguments[1]:void 0);return r(n,(function(t,n,i){if(l(n,t,e))return i(n)}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).result}})},function(t,e,n){"use strict";var l=n(0),i=n(2),c=n(22),o=n(47),r=n(8);l({target:"Map",proto:!0,real:!0,forced:!0},{findKey:function(t){var e=i(this),n=o(e),l=c(t,arguments.length>1?arguments[1]:void 0);return r(n,(function(t,n,i){if(l(n,t,e))return i(t)}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).result}})},function(t,e,n){n(0)({target:"Map",stat:!0,forced:!0},{from:n(128)})},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(3),o=n(6),r=n(45),a=n(8),d=c([].push);l({target:"Map",stat:!0,forced:!0},{groupBy:function(t,e){o(e);var n=r(t),l=new this,c=o(l.has),u=o(l.get),Z=o(l.set);return a(n,(function(t){var n=e(t);i(c,l,n)?d(i(u,l,n),t):i(Z,l,n,[t])}),{IS_ITERATOR:!0}),l}})},function(t,e,n){"use strict";var l=n(0),i=n(2),c=n(47),o=n(500),r=n(8);l({target:"Map",proto:!0,real:!0,forced:!0},{includes:function(t){return r(c(i(this)),(function(e,n,l){if(o(n,t))return l()}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,e){t.exports=function(t,e){return t===e||t!=t&&e!=e}},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(8),o=n(6);l({target:"Map",stat:!0,forced:!0},{keyBy:function(t,e){var n=new this;o(e);var l=o(n.set);return c(t,(function(t){i(l,n,e(t),t)})),n}})},function(t,e,n){"use strict";var l=n(0),i=n(2),c=n(47),o=n(8);l({target:"Map",proto:!0,real:!0,forced:!0},{keyOf:function(t){return o(c(i(this)),(function(e,n,l){if(n===t)return l(e)}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).result}})},function(t,e,n){"use strict";var l=n(0),i=n(11),c=n(22),o=n(5),r=n(6),a=n(2),d=n(33),u=n(47),Z=n(8);l({target:"Map",proto:!0,real:!0,forced:!0},{mapKeys:function(t){var e=a(this),n=u(e),l=c(t,arguments.length>1?arguments[1]:void 0),s=new(d(e,i("Map"))),b=r(s.set);return Z(n,(function(t,n){o(b,s,l(n,t,e),n)}),{AS_ENTRIES:!0,IS_ITERATOR:!0}),s}})},function(t,e,n){"use strict";var l=n(0),i=n(11),c=n(22),o=n(5),r=n(6),a=n(2),d=n(33),u=n(47),Z=n(8);l({target:"Map",proto:!0,real:!0,forced:!0},{mapValues:function(t){var e=a(this),n=u(e),l=c(t,arguments.length>1?arguments[1]:void 0),s=new(d(e,i("Map"))),b=r(s.set);return Z(n,(function(t,n){o(b,s,t,l(n,t,e))}),{AS_ENTRIES:!0,IS_ITERATOR:!0}),s}})},function(t,e,n){"use strict";var l=n(0),i=n(6),c=n(2),o=n(8);l({target:"Map",proto:!0,real:!0,forced:!0},{merge:function(t){for(var e=c(this),n=i(e.set),l=arguments.length,r=0;r<l;)o(arguments[r++],n,{that:e,AS_ENTRIES:!0});return e}})},function(t,e,n){n(0)({target:"Map",stat:!0,forced:!0},{of:n(129)})},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(2),o=n(6),r=n(47),a=n(8),d=i.TypeError;l({target:"Map",proto:!0,real:!0,forced:!0},{reduce:function(t){var e=c(this),n=r(e),l=arguments.length<2,i=l?void 0:arguments[1];if(o(t),a(n,(function(n,c){l?(l=!1,i=c):i=t(i,c,n,e)}),{AS_ENTRIES:!0,IS_ITERATOR:!0}),l)throw d("Reduce of empty map with no initial value");return i}})},function(t,e,n){"use strict";var l=n(0),i=n(2),c=n(22),o=n(47),r=n(8);l({target:"Map",proto:!0,real:!0,forced:!0},{some:function(t){var e=i(this),n=o(e),l=c(t,arguments.length>1?arguments[1]:void 0);return r(n,(function(t,n,i){if(l(n,t,e))return i()}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(5),o=n(2),r=n(6),a=i.TypeError;l({target:"Map",proto:!0,real:!0,forced:!0},{update:function(t,e){var n=o(this),l=r(n.get),i=r(n.has),d=r(n.set),u=arguments.length;r(e);var Z=c(i,n,t);if(!Z&&u<3)throw a("Updating absent value");var s=Z?c(l,n,t):r(u>2?arguments[2]:void 0)(t,n);return c(d,n,t,e(s,t,n)),n}})},function(t,e,n){"use strict";n(0)({target:"Map",proto:!0,real:!0,name:"upsert",forced:!0},{updateOrInsert:n(160)})},function(t,e,n){"use strict";n(0)({target:"Map",proto:!0,real:!0,forced:!0},{upsert:n(160)})},function(t,e,n){var l=n(0),i=Math.min,c=Math.max;l({target:"Math",stat:!0,forced:!0},{clamp:function(t,e,n){return i(n,c(e,t))}})},function(t,e,n){n(0)({target:"Math",stat:!0,forced:!0},{DEG_PER_RAD:Math.PI/180})},function(t,e,n){var l=n(0),i=180/Math.PI;l({target:"Math",stat:!0,forced:!0},{degrees:function(t){return t*i}})},function(t,e,n){var l=n(0),i=n(212),c=n(187);l({target:"Math",stat:!0,forced:!0},{fscale:function(t,e,n,l,o){return c(i(t,e,n,l,o))}})},function(t,e,n){n(0)({target:"Math",stat:!0,forced:!0},{iaddh:function(t,e,n,l){var i=t>>>0,c=n>>>0;return(e>>>0)+(l>>>0)+((i&c|(i|c)&~(i+c>>>0))>>>31)|0}})},function(t,e,n){n(0)({target:"Math",stat:!0,forced:!0},{imulh:function(t,e){var n=+t,l=+e,i=65535&n,c=65535&l,o=n>>16,r=l>>16,a=(o*c>>>0)+(i*c>>>16);return o*r+(a>>16)+((i*r>>>0)+(65535&a)>>16)}})},function(t,e,n){n(0)({target:"Math",stat:!0,forced:!0},{isubh:function(t,e,n,l){var i=t>>>0,c=n>>>0;return(e>>>0)-(l>>>0)-((~i&c|~(i^c)&i-c>>>0)>>>31)|0}})},function(t,e,n){n(0)({target:"Math",stat:!0,forced:!0},{RAD_PER_DEG:180/Math.PI})},function(t,e,n){var l=n(0),i=Math.PI/180;l({target:"Math",stat:!0,forced:!0},{radians:function(t){return t*i}})},function(t,e,n){n(0)({target:"Math",stat:!0,forced:!0},{scale:n(212)})},function(t,e,n){var l=n(0),i=n(1),c=n(2),o=n(188),r=n(77),a=n(20),d=a.set,u=a.getterFor("Seeded Random Generator"),Z=i.TypeError,s=r((function(t){d(this,{type:"Seeded Random Generator",seed:t%2147483647})}),"Seeded Random",(function(){var t=u(this);return{value:(1073741823&(t.seed=(1103515245*t.seed+12345)%2147483647))/1073741823,done:!1}}));l({target:"Math",stat:!0,forced:!0},{seededPRNG:function(t){var e=c(t).seed;if(!o(e))throw Z('Math.seededPRNG() argument should have a "seed" field with a finite value.');return new s(e)}})},function(t,e,n){n(0)({target:"Math",stat:!0,forced:!0},{signbit:function(t){return(t=+t)==t&&0==t?1/t==-1/0:t<0}})},function(t,e,n){n(0)({target:"Math",stat:!0,forced:!0},{umulh:function(t,e){var n=+t,l=+e,i=65535&n,c=65535&l,o=n>>>16,r=l>>>16,a=(o*c>>>0)+(i*c>>>16);return o*r+(a>>>16)+((i*r>>>0)+(65535&a)>>>16)}})},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(3),o=n(35),r=n(152),a=i.RangeError,d=i.SyntaxError,u=i.TypeError,Z=/^[\da-z]+$/,s=c("".charAt),b=c(Z.exec),I=c(1..toString),m=c("".slice);l({target:"Number",stat:!0,forced:!0},{fromString:function(t,e){var n,l,i=1;if("string"!=typeof t)throw u("Invalid number representation");if(!t.length)throw d("Invalid number representation");if("-"==s(t,0)&&(i=-1,!(t=m(t,1)).length))throw d("Invalid number representation");if((n=void 0===e?10:o(e))<2||n>36)throw a("Invalid radix");if(!b(Z,t)||I(l=r(t,n),n)!==t)throw d("Invalid number representation");return i*l}})},function(t,e,n){"use strict";var l=n(0),i=n(161);l({target:"Object",stat:!0,forced:!0},{iterateEntries:function(t){return new i(t,"entries")}})},function(t,e,n){"use strict";var l=n(0),i=n(161);l({target:"Object",stat:!0,forced:!0},{iterateKeys:function(t){return new i(t,"keys")}})},function(t,e,n){"use strict";var l=n(0),i=n(161);l({target:"Object",stat:!0,forced:!0},{iterateValues:function(t){return new i(t,"values")}})},function(t,e,n){n(530),n(531),n(532)},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(9),o=n(66),r=n(6),a=n(10),d=n(2),u=n(12),Z=n(42),s=n(27),b=n(16).f,I=n(19),m=n(46),h=n(195),p=n(7),g=n(20),G=n(162),y=p("observable"),X=g.getterFor,V=g.set,W=X("Observable"),C=X("Subscription"),R=X("SubscriptionObserver"),f=function(t){this.observer=d(t),this.cleanup=void 0,this.subscriptionObserver=void 0};f.prototype={type:"Subscription",clean:function(){var t=this.cleanup;if(t){this.cleanup=void 0;try{t()}catch(t){h(t)}}},close:function(){if(!c){var t=this.facade,e=this.subscriptionObserver;t.closed=!0,e&&(e.closed=!0)}this.observer=void 0},isClosed:function(){return void 0===this.observer}};var S=function(t,e){var n,l=V(this,new f(t));c||(this.closed=!1);try{(n=s(t,"start"))&&i(n,t,this)}catch(t){h(t)}if(!l.isClosed()){var o=l.subscriptionObserver=new v(l);try{var d=e(o),u=d;null!=d&&(l.cleanup=a(d.unsubscribe)?function(){u.unsubscribe()}:r(d))}catch(t){return void o.error(t)}l.isClosed()&&l.clean()}};S.prototype=m({},{unsubscribe:function(){var t=C(this);t.isClosed()||(t.close(),t.clean())}}),c&&b(S.prototype,"closed",{configurable:!0,get:function(){return C(this).isClosed()}});var v=function(t){V(this,{type:"SubscriptionObserver",subscriptionState:t}),c||(this.closed=!1)};v.prototype=m({},{next:function(t){var e=R(this).subscriptionState;if(!e.isClosed()){var n=e.observer;try{var l=s(n,"next");l&&i(l,n,t)}catch(t){h(t)}}},error:function(t){var e=R(this).subscriptionState;if(!e.isClosed()){var n=e.observer;e.close();try{var l=s(n,"error");l?i(l,n,t):h(t)}catch(t){h(t)}e.clean()}},complete:function(){var t=R(this).subscriptionState;if(!t.isClosed()){var e=t.observer;t.close();try{var n=s(e,"complete");n&&i(n,e)}catch(t){h(t)}t.clean()}}}),c&&b(v.prototype,"closed",{configurable:!0,get:function(){return R(this).subscriptionState.isClosed()}});var Y=function(t){Z(this,K),V(this,{type:"Observable",subscriber:r(t)})},K=Y.prototype;m(K,{subscribe:function(t){var e=arguments.length;return new S(a(t)?{next:t,error:e>1?arguments[1]:void 0,complete:e>2?arguments[2]:void 0}:u(t)?t:{},W(this).subscriber)}}),I(K,y,(function(){return this})),l({global:!0,forced:G},{Observable:Y}),o("Observable")},function(t,e,n){"use strict";var l=n(0),i=n(11),c=n(5),o=n(2),r=n(65),a=n(45),d=n(27),u=n(8),Z=n(7),s=n(162),b=Z("observable");l({target:"Observable",stat:!0,forced:s},{from:function(t){var e=r(this)?this:i("Observable"),n=d(o(t),b);if(n){var l=o(c(n,t));return l.constructor===e?l:new e((function(t){return l.subscribe(t)}))}var Z=a(t);return new e((function(t){u(Z,(function(e,n){if(t.next(e),t.closed)return n()}),{IS_ITERATOR:!0,INTERRUPTED:!0}),t.complete()}))}})},function(t,e,n){"use strict";var l=n(0),i=n(11),c=n(65),o=n(162),r=i("Array");l({target:"Observable",stat:!0,forced:o},{of:function(){for(var t=c(this)?this:i("Observable"),e=arguments.length,n=r(e),l=0;l<e;)n[l]=arguments[l++];return new t((function(t){for(var l=0;l<e;l++)if(t.next(n[l]),t.closed)return;t.complete()}))}})},function(t,e,n){n(534)},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(6),o=n(11),r=n(62),a=n(80),d=n(8);l({target:"Promise",stat:!0},{any:function(t){var e=this,n=o("AggregateError"),l=r.f(e),u=l.resolve,Z=l.reject,s=a((function(){var l=c(e.resolve),o=[],r=0,a=1,s=!1;d(t,(function(t){var c=r++,d=!1;a++,i(l,e,t).then((function(t){d||s||(s=!0,u(t))}),(function(t){d||s||(d=!0,o[c]=t,--a||Z(new n(o,"No one promise resolved")))}))})),--a||Z(new n(o,"No one promise resolved"))}));return s.error&&Z(s.value),l.promise}})},function(t,e,n){"use strict";var l=n(0),i=n(62),c=n(80);l({target:"Promise",stat:!0,forced:!0},{try:function(t){var e=i.f(this),n=c(t);return(n.error?e.reject:e.resolve)(n.value),e.promise}})},function(t,e,n){var l=n(0),i=n(54),c=n(2),o=i.toKey,r=i.set;l({target:"Reflect",stat:!0},{defineMetadata:function(t,e,n){var l=arguments.length<4?void 0:o(arguments[3]);r(t,e,c(n),l)}})},function(t,e,n){var l=n(0),i=n(54),c=n(2),o=i.toKey,r=i.getMap,a=i.store;l({target:"Reflect",stat:!0},{deleteMetadata:function(t,e){var n=arguments.length<3?void 0:o(arguments[2]),l=r(c(e),n,!1);if(void 0===l||!l.delete(t))return!1;if(l.size)return!0;var i=a.get(e);return i.delete(n),!!i.size||a.delete(e)}})},function(t,e,n){var l=n(0),i=n(54),c=n(2),o=n(32),r=i.has,a=i.get,d=i.toKey,u=function(t,e,n){if(r(t,e,n))return a(t,e,n);var l=o(e);return null!==l?u(t,l,n):void 0};l({target:"Reflect",stat:!0},{getMetadata:function(t,e){var n=arguments.length<3?void 0:d(arguments[2]);return u(t,c(e),n)}})},function(t,e,n){var l=n(0),i=n(3),c=n(54),o=n(2),r=n(32),a=i(n(540)),d=i([].concat),u=c.keys,Z=c.toKey,s=function(t,e){var n=u(t,e),l=r(t);if(null===l)return n;var i=s(l,e);return i.length?n.length?a(d(n,i)):i:n};l({target:"Reflect",stat:!0},{getMetadataKeys:function(t){var e=arguments.length<2?void 0:Z(arguments[1]);return s(o(t),e)}})},function(t,e,n){"use strict";var l=n(11),i=n(3),c=n(6),o=n(21),r=n(13),a=n(76),d=l("Map"),u=d.prototype,Z=i(u.forEach),s=i(u.has),b=i(u.set),I=i([].push);t.exports=function(t){var e,n,l,i=r(this),u=o(i),m=a(i,0),h=new d,p=null!=t?c(t):function(t){return t};for(e=0;e<u;e++)l=p(n=i[e]),s(h,l)||b(h,l,n);return Z(h,(function(t){I(m,t)})),m}},function(t,e,n){var l=n(0),i=n(54),c=n(2),o=i.get,r=i.toKey;l({target:"Reflect",stat:!0},{getOwnMetadata:function(t,e){var n=arguments.length<3?void 0:r(arguments[2]);return o(t,c(e),n)}})},function(t,e,n){var l=n(0),i=n(54),c=n(2),o=i.keys,r=i.toKey;l({target:"Reflect",stat:!0},{getOwnMetadataKeys:function(t){var e=arguments.length<2?void 0:r(arguments[1]);return o(c(t),e)}})},function(t,e,n){var l=n(0),i=n(54),c=n(2),o=n(32),r=i.has,a=i.toKey,d=function(t,e,n){if(r(t,e,n))return!0;var l=o(e);return null!==l&&d(t,l,n)};l({target:"Reflect",stat:!0},{hasMetadata:function(t,e){var n=arguments.length<3?void 0:a(arguments[2]);return d(t,c(e),n)}})},function(t,e,n){var l=n(0),i=n(54),c=n(2),o=i.has,r=i.toKey;l({target:"Reflect",stat:!0},{hasOwnMetadata:function(t,e){var n=arguments.length<3?void 0:r(arguments[2]);return o(t,c(e),n)}})},function(t,e,n){var l=n(0),i=n(54),c=n(2),o=i.toKey,r=i.set;l({target:"Reflect",stat:!0},{metadata:function(t,e){return function(n,l){r(t,e,c(n),o(l))}}})},function(t,e,n){"use strict";n(0)({target:"Set",proto:!0,real:!0,forced:!0},{addAll:n(213)})},function(t,e,n){"use strict";n(0)({target:"Set",proto:!0,real:!0,forced:!0},{deleteAll:n(127)})},function(t,e,n){"use strict";var l=n(0),i=n(11),c=n(5),o=n(6),r=n(2),a=n(33),d=n(8);l({target:"Set",proto:!0,real:!0,forced:!0},{difference:function(t){var e=r(this),n=new(a(e,i("Set")))(e),l=o(n.delete);return d(t,(function(t){c(l,n,t)})),n}})},function(t,e,n){"use strict";var l=n(0),i=n(2),c=n(22),o=n(70),r=n(8);l({target:"Set",proto:!0,real:!0,forced:!0},{every:function(t){var e=i(this),n=o(e),l=c(t,arguments.length>1?arguments[1]:void 0);return!r(n,(function(t,n){if(!l(t,t,e))return n()}),{IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,e,n){"use strict";var l=n(0),i=n(11),c=n(5),o=n(6),r=n(2),a=n(22),d=n(33),u=n(70),Z=n(8);l({target:"Set",proto:!0,real:!0,forced:!0},{filter:function(t){var e=r(this),n=u(e),l=a(t,arguments.length>1?arguments[1]:void 0),s=new(d(e,i("Set"))),b=o(s.add);return Z(n,(function(t){l(t,t,e)&&c(b,s,t)}),{IS_ITERATOR:!0}),s}})},function(t,e,n){"use strict";var l=n(0),i=n(2),c=n(22),o=n(70),r=n(8);l({target:"Set",proto:!0,real:!0,forced:!0},{find:function(t){var e=i(this),n=o(e),l=c(t,arguments.length>1?arguments[1]:void 0);return r(n,(function(t,n){if(l(t,t,e))return n(t)}),{IS_ITERATOR:!0,INTERRUPTED:!0}).result}})},function(t,e,n){n(0)({target:"Set",stat:!0,forced:!0},{from:n(128)})},function(t,e,n){"use strict";var l=n(0),i=n(11),c=n(5),o=n(6),r=n(2),a=n(33),d=n(8);l({target:"Set",proto:!0,real:!0,forced:!0},{intersection:function(t){var e=r(this),n=new(a(e,i("Set"))),l=o(e.has),u=o(n.add);return d(t,(function(t){c(l,e,t)&&c(u,n,t)})),n}})},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(6),o=n(2),r=n(8);l({target:"Set",proto:!0,real:!0,forced:!0},{isDisjointFrom:function(t){var e=o(this),n=c(e.has);return!r(t,(function(t,l){if(!0===i(n,e,t))return l()}),{INTERRUPTED:!0}).stopped}})},function(t,e,n){"use strict";var l=n(0),i=n(11),c=n(5),o=n(6),r=n(10),a=n(2),d=n(45),u=n(8);l({target:"Set",proto:!0,real:!0,forced:!0},{isSubsetOf:function(t){var e=d(this),n=a(t),l=n.has;return r(l)||(n=new(i("Set"))(t),l=o(n.has)),!u(e,(function(t,e){if(!1===c(l,n,t))return e()}),{IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,e,n){"use strict";var l=n(0),i=n(5),c=n(6),o=n(2),r=n(8);l({target:"Set",proto:!0,real:!0,forced:!0},{isSupersetOf:function(t){var e=o(this),n=c(e.has);return!r(t,(function(t,l){if(!1===i(n,e,t))return l()}),{INTERRUPTED:!0}).stopped}})},function(t,e,n){"use strict";var l=n(0),i=n(3),c=n(2),o=n(14),r=n(70),a=n(8),d=i([].join),u=[].push;l({target:"Set",proto:!0,real:!0,forced:!0},{join:function(t){var e=c(this),n=r(e),l=void 0===t?",":o(t),i=[];return a(n,u,{that:i,IS_ITERATOR:!0}),d(i,l)}})},function(t,e,n){"use strict";var l=n(0),i=n(11),c=n(22),o=n(5),r=n(6),a=n(2),d=n(33),u=n(70),Z=n(8);l({target:"Set",proto:!0,real:!0,forced:!0},{map:function(t){var e=a(this),n=u(e),l=c(t,arguments.length>1?arguments[1]:void 0),s=new(d(e,i("Set"))),b=r(s.add);return Z(n,(function(t){o(b,s,l(t,t,e))}),{IS_ITERATOR:!0}),s}})},function(t,e,n){n(0)({target:"Set",stat:!0,forced:!0},{of:n(129)})},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(6),o=n(2),r=n(70),a=n(8),d=i.TypeError;l({target:"Set",proto:!0,real:!0,forced:!0},{reduce:function(t){var e=o(this),n=r(e),l=arguments.length<2,i=l?void 0:arguments[1];if(c(t),a(n,(function(n){l?(l=!1,i=n):i=t(i,n,n,e)}),{IS_ITERATOR:!0}),l)throw d("Reduce of empty set with no initial value");return i}})},function(t,e,n){"use strict";var l=n(0),i=n(2),c=n(22),o=n(70),r=n(8);l({target:"Set",proto:!0,real:!0,forced:!0},{some:function(t){var e=i(this),n=o(e),l=c(t,arguments.length>1?arguments[1]:void 0);return r(n,(function(t,n){if(l(t,t,e))return n()}),{IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,e,n){"use strict";var l=n(0),i=n(11),c=n(5),o=n(6),r=n(2),a=n(33),d=n(8);l({target:"Set",proto:!0,real:!0,forced:!0},{symmetricDifference:function(t){var e=r(this),n=new(a(e,i("Set")))(e),l=o(n.delete),u=o(n.add);return d(t,(function(t){c(l,n,t)||c(u,n,t)})),n}})},function(t,e,n){"use strict";var l=n(0),i=n(11),c=n(6),o=n(2),r=n(33),a=n(8);l({target:"Set",proto:!0,real:!0,forced:!0},{union:function(t){var e=o(this),n=new(r(e,i("Set")))(e);return a(t,c(n.add),{that:n}),n}})},function(t,e,n){"use strict";var l=n(0),i=n(82).charAt,c=n(26),o=n(35),r=n(14);l({target:"String",proto:!0,forced:!0},{at:function(t){var e=r(c(this)),n=e.length,l=o(t),a=l>=0?l:n+l;return a<0||a>=n?void 0:i(e,a)}})},function(t,e,n){"use strict";var l=n(0),i=n(77),c=n(26),o=n(14),r=n(20),a=n(82),d=a.codeAt,u=a.charAt,Z=r.set,s=r.getterFor("String Iterator"),b=i((function(t){Z(this,{type:"String Iterator",string:t,index:0})}),"String",(function(){var t,e=s(this),n=e.string,l=e.index;return l>=n.length?{value:void 0,done:!0}:(t=u(n,l),e.index+=t.length,{value:{codePoint:d(t,0),position:l},done:!1})}));l({target:"String",proto:!0,forced:!0},{codePoints:function(){return new b(o(c(this)))}})},function(t,e,n){n(567)},function(t,e,n){"use strict";var l=n(0),i=n(1),c=n(5),o=n(3),r=n(26),a=n(10),d=n(96),u=n(14),Z=n(27),s=n(120),b=n(203),I=n(7),m=n(24),h=I("replace"),p=i.TypeError,g=o("".indexOf),G=o("".replace),y=o("".slice),X=Math.max,V=function(t,e,n){return n>t.length?-1:""===e?n:g(t,e,n)};l({target:"String",proto:!0},{replaceAll:function(t,e){var n,l,i,o,I,W,C,R,f,S=r(this),v=0,Y=0,K="";if(null!=t){if((n=d(t))&&(l=u(r(s(t))),!~g(l,"g")))throw p("`.replaceAll` does not allow non-global regexes");if(i=Z(t,h))return c(i,t,S,e);if(m&&n)return G(u(S),t,e)}for(o=u(S),I=u(t),(W=a(e))||(e=u(e)),C=I.length,R=X(1,C),v=V(o,I,0);-1!==v;)f=W?u(e(I,v,o)):b(I,o,v,[],void 0,e),K+=y(o,Y,v)+f,Y=v+C,v=V(o,I,v+R);return Y<o.length&&(K+=y(o,Y)),K}})},function(t,e,n){n(25)("asyncDispose")},function(t,e,n){n(25)("dispose")},function(t,e,n){n(25)("observable")},function(t,e,n){n(25)("patternMatch")},function(t,e,n){n(25)("replaceAll")},function(t,e,n){"use strict";n(0)({target:"WeakMap",proto:!0,real:!0,forced:!0},{deleteAll:n(127)})},function(t,e,n){n(0)({target:"WeakMap",stat:!0,forced:!0},{from:n(128)})},function(t,e,n){n(0)({target:"WeakMap",stat:!0,forced:!0},{of:n(129)})},function(t,e,n){"use strict";n(0)({target:"WeakMap",proto:!0,real:!0,forced:!0},{upsert:n(160)})},function(t,e,n){"use strict";n(0)({target:"WeakSet",proto:!0,real:!0,forced:!0},{addAll:n(213)})},function(t,e,n){"use strict";n(0)({target:"WeakSet",proto:!0,real:!0,forced:!0},{deleteAll:n(127)})},function(t,e,n){n(0)({target:"WeakSet",stat:!0,forced:!0},{from:n(128)})},function(t,e,n){n(0)({target:"WeakSet",stat:!0,forced:!0},{of:n(129)})},function(t,e,n){var l=n(1),i=n(214),c=n(215),o=n(177),r=n(28),a=function(t){if(t&&t.forEach!==o)try{r(t,"forEach",o)}catch(e){t.forEach=o}};for(var d in i)i[d]&&a(l[d]&&l[d].prototype);a(c)},function(t,e,n){var l=n(1),i=n(214),c=n(215),o=n(109),r=n(28),a=n(7),d=a("iterator"),u=a("toStringTag"),Z=o.values,s=function(t,e){if(t){if(t[d]!==Z)try{r(t,d,Z)}catch(e){t[d]=Z}if(t[u]||r(t,u,e),i[e])for(var n in o)if(t[n]!==o[n])try{r(t,n,o[n])}catch(e){t[n]=o[n]}}};for(var b in i)s(l[b]&&l[b].prototype,b);s(c,"DOMTokenList")},function(t,e,n){n(584),n(585)},function(t,e,n){var l=n(0),i=n(1),c=n(119).clear;l({global:!0,bind:!0,enumerable:!0,forced:i.clearImmediate!==c},{clearImmediate:c})},function(t,e,n){var l=n(0),i=n(1),c=n(119).set;l({global:!0,bind:!0,enumerable:!0,forced:i.setImmediate!==c},{setImmediate:c})},function(t,e,n){var l=n(0),i=n(1),c=n(194),o=n(6),r=n(94),a=n(78),d=i.process;l({global:!0,enumerable:!0,noTargetGet:!0},{queueMicrotask:function(t){r(arguments.length,1),o(t);var e=a&&d.domain;c(e?e.bind(t):t)}})},function(t,e,n){n(588),n(589)},function(t,e,n){var l=n(0),i=n(1),c=n(216).setInterval;l({global:!0,bind:!0,forced:i.setInterval!==c},{setInterval:c})},function(t,e,n){var l=n(0),i=n(1),c=n(216).setTimeout;l({global:!0,bind:!0,forced:i.setTimeout!==c},{setTimeout:c})},function(t,e,n){n(591)},function(t,e,n){"use strict";n(201);var l,i=n(0),c=n(9),o=n(217),r=n(1),a=n(22),d=n(3),u=n(106).f,Z=n(19),s=n(42),b=n(15),I=n(190),m=n(178),h=n(89),p=n(82).codeAt,g=n(592),G=n(14),y=n(41),X=n(94),V=n(218),W=n(20),C=W.set,R=W.getterFor("URL"),f=V.URLSearchParams,S=V.getState,v=r.URL,Y=r.TypeError,K=r.parseInt,N=Math.floor,J=Math.pow,H=d("".charAt),U=d(/./.exec),L=d([].join),B=d(1..toString),k=d([].pop),x=d([].push),T=d("".replace),F=d([].shift),A=d("".split),z=d("".slice),w=d("".toLowerCase),P=d([].unshift),Q=/[a-z]/i,j=/[\d+-.a-z]/i,M=/\d/,E=/^0x/i,D=/^[0-7]+$/,O=/^\d+$/,_=/^[\da-f]+$/i,q=/[\0\t\n\r #%/:<>?@[\\\]^|]/,$=/[\0\t\n\r #/:<>?@[\\\]^|]/,tt=/^[\u0000-\u0020]+|[\u0000-\u0020]+$/g,et=/[\t\n\r]/g,nt=function(t){var e,n,l,i;if("number"==typeof t){for(e=[],n=0;n<4;n++)P(e,t%256),t=N(t/256);return L(e,".")}if("object"==typeof t){for(e="",l=function(t){for(var e=null,n=1,l=null,i=0,c=0;c<8;c++)0!==t[c]?(i>n&&(e=l,n=i),l=null,i=0):(null===l&&(l=c),++i);return i>n&&(e=l,n=i),e}(t),n=0;n<8;n++)i&&0===t[n]||(i&&(i=!1),l===n?(e+=n?":":"::",i=!0):(e+=B(t[n],16),n<7&&(e+=":")));return"["+e+"]"}return t},lt={},it=I({},lt,{" ":1,'"':1,"<":1,">":1,"`":1}),ct=I({},it,{"#":1,"?":1,"{":1,"}":1}),ot=I({},ct,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),rt=function(t,e){var n=p(t,0);return n>32&&n<127&&!b(e,t)?t:encodeURIComponent(t)},at={ftp:21,file:null,http:80,https:443,ws:80,wss:443},dt=function(t,e){var n;return 2==t.length&&U(Q,H(t,0))&&(":"==(n=H(t,1))||!e&&"|"==n)},ut=function(t){var e;return t.length>1&&dt(z(t,0,2))&&(2==t.length||"/"===(e=H(t,2))||"\\"===e||"?"===e||"#"===e)},Zt=function(t){return"."===t||"%2e"===w(t)},st={},bt={},It={},mt={},ht={},pt={},gt={},Gt={},yt={},Xt={},Vt={},Wt={},Ct={},Rt={},ft={},St={},vt={},Yt={},Kt={},Nt={},Jt={},Ht=function(t,e,n){var l,i,c,o=G(t);if(e){if(i=this.parse(o))throw Y(i);this.searchParams=null}else{if(void 0!==n&&(l=new Ht(n,!0)),i=this.parse(o,null,l))throw Y(i);(c=S(new f)).bindURL(this),this.searchParams=c}};Ht.prototype={type:"URL",parse:function(t,e,n){var i,c,o,r,a,d=this,u=e||st,Z=0,s="",I=!1,p=!1,g=!1;for(t=G(t),e||(d.scheme="",d.username="",d.password="",d.host=null,d.port=null,d.path=[],d.query=null,d.fragment=null,d.cannotBeABaseURL=!1,t=T(t,tt,"")),t=T(t,et,""),i=m(t);Z<=i.length;){switch(c=i[Z],u){case st:if(!c||!U(Q,c)){if(e)return"Invalid scheme";u=It;continue}s+=w(c),u=bt;break;case bt:if(c&&(U(j,c)||"+"==c||"-"==c||"."==c))s+=w(c);else{if(":"!=c){if(e)return"Invalid scheme";s="",u=It,Z=0;continue}if(e&&(d.isSpecial()!=b(at,s)||"file"==s&&(d.includesCredentials()||null!==d.port)||"file"==d.scheme&&!d.host))return;if(d.scheme=s,e)return void(d.isSpecial()&&at[d.scheme]==d.port&&(d.port=null));s="","file"==d.scheme?u=Rt:d.isSpecial()&&n&&n.scheme==d.scheme?u=mt:d.isSpecial()?u=Gt:"/"==i[Z+1]?(u=ht,Z++):(d.cannotBeABaseURL=!0,x(d.path,""),u=Kt)}break;case It:if(!n||n.cannotBeABaseURL&&"#"!=c)return"Invalid scheme";if(n.cannotBeABaseURL&&"#"==c){d.scheme=n.scheme,d.path=h(n.path),d.query=n.query,d.fragment="",d.cannotBeABaseURL=!0,u=Jt;break}u="file"==n.scheme?Rt:pt;continue;case mt:if("/"!=c||"/"!=i[Z+1]){u=pt;continue}u=yt,Z++;break;case ht:if("/"==c){u=Xt;break}u=Yt;continue;case pt:if(d.scheme=n.scheme,c==l)d.username=n.username,d.password=n.password,d.host=n.host,d.port=n.port,d.path=h(n.path),d.query=n.query;else if("/"==c||"\\"==c&&d.isSpecial())u=gt;else if("?"==c)d.username=n.username,d.password=n.password,d.host=n.host,d.port=n.port,d.path=h(n.path),d.query="",u=Nt;else{if("#"!=c){d.username=n.username,d.password=n.password,d.host=n.host,d.port=n.port,d.path=h(n.path),d.path.length--,u=Yt;continue}d.username=n.username,d.password=n.password,d.host=n.host,d.port=n.port,d.path=h(n.path),d.query=n.query,d.fragment="",u=Jt}break;case gt:if(!d.isSpecial()||"/"!=c&&"\\"!=c){if("/"!=c){d.username=n.username,d.password=n.password,d.host=n.host,d.port=n.port,u=Yt;continue}u=Xt}else u=yt;break;case Gt:if(u=yt,"/"!=c||"/"!=H(s,Z+1))continue;Z++;break;case yt:if("/"!=c&&"\\"!=c){u=Xt;continue}break;case Xt:if("@"==c){I&&(s="%40"+s),I=!0,o=m(s);for(var y=0;y<o.length;y++){var X=o[y];if(":"!=X||g){var V=rt(X,ot);g?d.password+=V:d.username+=V}else g=!0}s=""}else if(c==l||"/"==c||"?"==c||"#"==c||"\\"==c&&d.isSpecial()){if(I&&""==s)return"Invalid authority";Z-=m(s).length+1,s="",u=Vt}else s+=c;break;case Vt:case Wt:if(e&&"file"==d.scheme){u=St;continue}if(":"!=c||p){if(c==l||"/"==c||"?"==c||"#"==c||"\\"==c&&d.isSpecial()){if(d.isSpecial()&&""==s)return"Invalid host";if(e&&""==s&&(d.includesCredentials()||null!==d.port))return;if(r=d.parseHost(s))return r;if(s="",u=vt,e)return;continue}"["==c?p=!0:"]"==c&&(p=!1),s+=c}else{if(""==s)return"Invalid host";if(r=d.parseHost(s))return r;if(s="",u=Ct,e==Wt)return}break;case Ct:if(!U(M,c)){if(c==l||"/"==c||"?"==c||"#"==c||"\\"==c&&d.isSpecial()||e){if(""!=s){var W=K(s,10);if(W>65535)return"Invalid port";d.port=d.isSpecial()&&W===at[d.scheme]?null:W,s=""}if(e)return;u=vt;continue}return"Invalid port"}s+=c;break;case Rt:if(d.scheme="file","/"==c||"\\"==c)u=ft;else{if(!n||"file"!=n.scheme){u=Yt;continue}if(c==l)d.host=n.host,d.path=h(n.path),d.query=n.query;else if("?"==c)d.host=n.host,d.path=h(n.path),d.query="",u=Nt;else{if("#"!=c){ut(L(h(i,Z),""))||(d.host=n.host,d.path=h(n.path),d.shortenPath()),u=Yt;continue}d.host=n.host,d.path=h(n.path),d.query=n.query,d.fragment="",u=Jt}}break;case ft:if("/"==c||"\\"==c){u=St;break}n&&"file"==n.scheme&&!ut(L(h(i,Z),""))&&(dt(n.path[0],!0)?x(d.path,n.path[0]):d.host=n.host),u=Yt;continue;case St:if(c==l||"/"==c||"\\"==c||"?"==c||"#"==c){if(!e&&dt(s))u=Yt;else if(""==s){if(d.host="",e)return;u=vt}else{if(r=d.parseHost(s))return r;if("localhost"==d.host&&(d.host=""),e)return;s="",u=vt}continue}s+=c;break;case vt:if(d.isSpecial()){if(u=Yt,"/"!=c&&"\\"!=c)continue}else if(e||"?"!=c)if(e||"#"!=c){if(c!=l&&(u=Yt,"/"!=c))continue}else d.fragment="",u=Jt;else d.query="",u=Nt;break;case Yt:if(c==l||"/"==c||"\\"==c&&d.isSpecial()||!e&&("?"==c||"#"==c)){if(".."===(a=w(a=s))||"%2e."===a||".%2e"===a||"%2e%2e"===a?(d.shortenPath(),"/"==c||"\\"==c&&d.isSpecial()||x(d.path,"")):Zt(s)?"/"==c||"\\"==c&&d.isSpecial()||x(d.path,""):("file"==d.scheme&&!d.path.length&&dt(s)&&(d.host&&(d.host=""),s=H(s,0)+":"),x(d.path,s)),s="","file"==d.scheme&&(c==l||"?"==c||"#"==c))for(;d.path.length>1&&""===d.path[0];)F(d.path);"?"==c?(d.query="",u=Nt):"#"==c&&(d.fragment="",u=Jt)}else s+=rt(c,ct);break;case Kt:"?"==c?(d.query="",u=Nt):"#"==c?(d.fragment="",u=Jt):c!=l&&(d.path[0]+=rt(c,lt));break;case Nt:e||"#"!=c?c!=l&&("'"==c&&d.isSpecial()?d.query+="%27":d.query+="#"==c?"%23":rt(c,lt)):(d.fragment="",u=Jt);break;case Jt:c!=l&&(d.fragment+=rt(c,it))}Z++}},parseHost:function(t){var e,n,l;if("["==H(t,0)){if("]"!=H(t,t.length-1))return"Invalid host";if(!(e=function(t){var e,n,l,i,c,o,r,a=[0,0,0,0,0,0,0,0],d=0,u=null,Z=0,s=function(){return H(t,Z)};if(":"==s()){if(":"!=H(t,1))return;Z+=2,u=++d}for(;s();){if(8==d)return;if(":"!=s()){for(e=n=0;n<4&&U(_,s());)e=16*e+K(s(),16),Z++,n++;if("."==s()){if(0==n)return;if(Z-=n,d>6)return;for(l=0;s();){if(i=null,l>0){if(!("."==s()&&l<4))return;Z++}if(!U(M,s()))return;for(;U(M,s());){if(c=K(s(),10),null===i)i=c;else{if(0==i)return;i=10*i+c}if(i>255)return;Z++}a[d]=256*a[d]+i,2!=++l&&4!=l||d++}if(4!=l)return;break}if(":"==s()){if(Z++,!s())return}else if(s())return;a[d++]=e}else{if(null!==u)return;Z++,u=++d}}if(null!==u)for(o=d-u,d=7;0!=d&&o>0;)r=a[d],a[d--]=a[u+o-1],a[u+--o]=r;else if(8!=d)return;return a}(z(t,1,-1))))return"Invalid host";this.host=e}else if(this.isSpecial()){if(t=g(t),U(q,t))return"Invalid host";if(null===(e=function(t){var e,n,l,i,c,o,r,a=A(t,".");if(a.length&&""==a[a.length-1]&&a.length--,(e=a.length)>4)return t;for(n=[],l=0;l<e;l++){if(""==(i=a[l]))return t;if(c=10,i.length>1&&"0"==H(i,0)&&(c=U(E,i)?16:8,i=z(i,8==c?1:2)),""===i)o=0;else{if(!U(10==c?O:8==c?D:_,i))return t;o=K(i,c)}x(n,o)}for(l=0;l<e;l++)if(o=n[l],l==e-1){if(o>=J(256,5-e))return null}else if(o>255)return null;for(r=k(n),l=0;l<n.length;l++)r+=n[l]*J(256,3-l);return r}(t)))return"Invalid host";this.host=e}else{if(U($,t))return"Invalid host";for(e="",n=m(t),l=0;l<n.length;l++)e+=rt(n[l],lt);this.host=e}},cannotHaveUsernamePasswordPort:function(){return!this.host||this.cannotBeABaseURL||"file"==this.scheme},includesCredentials:function(){return""!=this.username||""!=this.password},isSpecial:function(){return b(at,this.scheme)},shortenPath:function(){var t=this.path,e=t.length;!e||"file"==this.scheme&&1==e&&dt(t[0],!0)||t.length--},serialize:function(){var t=this,e=t.scheme,n=t.username,l=t.password,i=t.host,c=t.port,o=t.path,r=t.query,a=t.fragment,d=e+":";return null!==i?(d+="//",t.includesCredentials()&&(d+=n+(l?":"+l:"")+"@"),d+=nt(i),null!==c&&(d+=":"+c)):"file"==e&&(d+="//"),d+=t.cannotBeABaseURL?o[0]:o.length?"/"+L(o,"/"):"",null!==r&&(d+="?"+r),null!==a&&(d+="#"+a),d},setHref:function(t){var e=this.parse(t);if(e)throw Y(e);this.searchParams.update()},getOrigin:function(){var t=this.scheme,e=this.port;if("blob"==t)try{return new Ut(t.path[0]).origin}catch(t){return"null"}return"file"!=t&&this.isSpecial()?t+"://"+nt(this.host)+(null!==e?":"+e:""):"null"},getProtocol:function(){return this.scheme+":"},setProtocol:function(t){this.parse(G(t)+":",st)},getUsername:function(){return this.username},setUsername:function(t){var e=m(G(t));if(!this.cannotHaveUsernamePasswordPort()){this.username="";for(var n=0;n<e.length;n++)this.username+=rt(e[n],ot)}},getPassword:function(){return this.password},setPassword:function(t){var e=m(G(t));if(!this.cannotHaveUsernamePasswordPort()){this.password="";for(var n=0;n<e.length;n++)this.password+=rt(e[n],ot)}},getHost:function(){var t=this.host,e=this.port;return null===t?"":null===e?nt(t):nt(t)+":"+e},setHost:function(t){this.cannotBeABaseURL||this.parse(t,Vt)},getHostname:function(){var t=this.host;return null===t?"":nt(t)},setHostname:function(t){this.cannotBeABaseURL||this.parse(t,Wt)},getPort:function(){var t=this.port;return null===t?"":G(t)},setPort:function(t){this.cannotHaveUsernamePasswordPort()||(""==(t=G(t))?this.port=null:this.parse(t,Ct))},getPathname:function(){var t=this.path;return this.cannotBeABaseURL?t[0]:t.length?"/"+L(t,"/"):""},setPathname:function(t){this.cannotBeABaseURL||(this.path=[],this.parse(t,vt))},getSearch:function(){var t=this.query;return t?"?"+t:""},setSearch:function(t){""==(t=G(t))?this.query=null:("?"==H(t,0)&&(t=z(t,1)),this.query="",this.parse(t,Nt)),this.searchParams.update()},getSearchParams:function(){return this.searchParams.facade},getHash:function(){var t=this.fragment;return t?"#"+t:""},setHash:function(t){""!=(t=G(t))?("#"==H(t,0)&&(t=z(t,1)),this.fragment="",this.parse(t,Jt)):this.fragment=null},update:function(){this.query=this.searchParams.serialize()||null}};var Ut=function(t){var e=s(this,Lt),n=X(arguments.length,1)>1?arguments[1]:void 0,l=C(e,new Ht(t,!1,n));c||(e.href=l.serialize(),e.origin=l.getOrigin(),e.protocol=l.getProtocol(),e.username=l.getUsername(),e.password=l.getPassword(),e.host=l.getHost(),e.hostname=l.getHostname(),e.port=l.getPort(),e.pathname=l.getPathname(),e.search=l.getSearch(),e.searchParams=l.getSearchParams(),e.hash=l.getHash())},Lt=Ut.prototype,Bt=function(t,e){return{get:function(){return R(this)[t]()},set:e&&function(t){return R(this)[e](t)},configurable:!0,enumerable:!0}};if(c&&u(Lt,{href:Bt("serialize","setHref"),origin:Bt("getOrigin"),protocol:Bt("getProtocol","setProtocol"),username:Bt("getUsername","setUsername"),password:Bt("getPassword","setPassword"),host:Bt("getHost","setHost"),hostname:Bt("getHostname","setHostname"),port:Bt("getPort","setPort"),pathname:Bt("getPathname","setPathname"),search:Bt("getSearch","setSearch"),searchParams:Bt("getSearchParams"),hash:Bt("getHash","setHash")}),Z(Lt,"toJSON",(function(){return R(this).serialize()}),{enumerable:!0}),Z(Lt,"toString",(function(){return R(this).serialize()}),{enumerable:!0}),v){var kt=v.createObjectURL,xt=v.revokeObjectURL;kt&&Z(Ut,"createObjectURL",a(kt,v)),xt&&Z(Ut,"revokeObjectURL",a(xt,v))}y(Ut,"URL"),i({global:!0,forced:!o,sham:!c},{URL:Ut})},function(t,e,n){"use strict";var l=n(1),i=n(3),c=/[^\0-\u007E]/,o=/[.\u3002\uFF0E\uFF61]/g,r="Overflow: input needs wider integers to process",a=l.RangeError,d=i(o.exec),u=Math.floor,Z=String.fromCharCode,s=i("".charCodeAt),b=i([].join),I=i([].push),m=i("".replace),h=i("".split),p=i("".toLowerCase),g=function(t){return t+22+75*(t<26)},G=function(t,e,n){var l=0;for(t=n?u(t/700):t>>1,t+=u(t/e);t>455;)t=u(t/35),l+=36;return u(l+36*t/(t+38))},y=function(t){var e,n,l=[],i=(t=function(t){for(var e=[],n=0,l=t.length;n<l;){var i=s(t,n++);if(i>=55296&&i<=56319&&n<l){var c=s(t,n++);56320==(64512&c)?I(e,((1023&i)<<10)+(1023&c)+65536):(I(e,i),n--)}else I(e,i)}return e}(t)).length,c=128,o=0,d=72;for(e=0;e<t.length;e++)(n=t[e])<128&&I(l,Z(n));var m=l.length,h=m;for(m&&I(l,"-");h<i;){var p=2147483647;for(e=0;e<t.length;e++)(n=t[e])>=c&&n<p&&(p=n);var y=h+1;if(p-c>u((2147483647-o)/y))throw a(r);for(o+=(p-c)*y,c=p,e=0;e<t.length;e++){if((n=t[e])<c&&++o>2147483647)throw a(r);if(n==c){for(var X=o,V=36;;){var W=V<=d?1:V>=d+26?26:V-d;if(X<W)break;var C=X-W,R=36-W;I(l,Z(g(W+C%R))),X=u(C/R),V+=36}I(l,Z(g(X))),d=G(o,y,h==m),o=0,h++}}o++,c++}return b(l,"")};t.exports=function(t){var e,n,l=[],i=h(m(p(t),o,"."),".");for(e=0;e<i.length;e++)n=i[e],I(l,d(c,n)?"xn--"+y(n):n);return b(l,".")}},function(t,e,n){"use strict";var l=n(0),i=n(5);l({target:"URL",proto:!0,enumerable:!0},{toJSON:function(){return i(URL.prototype.toString,this)}})},function(t,e,n){n(218)},function(t,e,n){var l=function(t){"use strict";var e=Object.prototype,n=e.hasOwnProperty,l="function"==typeof Symbol?Symbol:{},i=l.iterator||"@@iterator",c=l.asyncIterator||"@@asyncIterator",o=l.toStringTag||"@@toStringTag";function r(t,e,n){return Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{r({},"")}catch(t){r=function(t,e,n){return t[e]=n}}function a(t,e,n,l){var i=e&&e.prototype instanceof Z?e:Z,c=Object.create(i.prototype),o=new W(l||[]);return c._invoke=function(t,e,n){var l="suspendedStart";return function(i,c){if("executing"===l)throw new Error("Generator is already running");if("completed"===l){if("throw"===i)throw c;return R()}for(n.method=i,n.arg=c;;){var o=n.delegate;if(o){var r=y(o,n);if(r){if(r===u)continue;return r}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===l)throw l="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);l="executing";var a=d(t,e,n);if("normal"===a.type){if(l=n.done?"completed":"suspendedYield",a.arg===u)continue;return{value:a.arg,done:n.done}}"throw"===a.type&&(l="completed",n.method="throw",n.arg=a.arg)}}}(t,n,o),c}function d(t,e,n){try{return{type:"normal",arg:t.call(e,n)}}catch(t){return{type:"throw",arg:t}}}t.wrap=a;var u={};function Z(){}function s(){}function b(){}var I={};r(I,i,(function(){return this}));var m=Object.getPrototypeOf,h=m&&m(m(C([])));h&&h!==e&&n.call(h,i)&&(I=h);var p=b.prototype=Z.prototype=Object.create(I);function g(t){["next","throw","return"].forEach((function(e){r(t,e,(function(t){return this._invoke(e,t)}))}))}function G(t,e){var l;this._invoke=function(i,c){function o(){return new e((function(l,o){!function l(i,c,o,r){var a=d(t[i],t,c);if("throw"!==a.type){var u=a.arg,Z=u.value;return Z&&"object"==typeof Z&&n.call(Z,"__await")?e.resolve(Z.__await).then((function(t){l("next",t,o,r)}),(function(t){l("throw",t,o,r)})):e.resolve(Z).then((function(t){u.value=t,o(u)}),(function(t){return l("throw",t,o,r)}))}r(a.arg)}(i,c,l,o)}))}return l=l?l.then(o,o):o()}}function y(t,e){var n=t.iterator[e.method];if(void 0===n){if(e.delegate=null,"throw"===e.method){if(t.iterator.return&&(e.method="return",e.arg=void 0,y(t,e),"throw"===e.method))return u;e.method="throw",e.arg=new TypeError("The iterator does not provide a 'throw' method")}return u}var l=d(n,t.iterator,e.arg);if("throw"===l.type)return e.method="throw",e.arg=l.arg,e.delegate=null,u;var i=l.arg;return i?i.done?(e[t.resultName]=i.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=void 0),e.delegate=null,u):i:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,u)}function X(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function V(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function W(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(X,this),this.reset(!0)}function C(t){if(t){var e=t[i];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var l=-1,c=function e(){for(;++l<t.length;)if(n.call(t,l))return e.value=t[l],e.done=!1,e;return e.value=void 0,e.done=!0,e};return c.next=c}}return{next:R}}function R(){return{value:void 0,done:!0}}return s.prototype=b,r(p,"constructor",b),r(b,"constructor",s),s.displayName=r(b,o,"GeneratorFunction"),t.isGeneratorFunction=function(t){var e="function"==typeof t&&t.constructor;return!!e&&(e===s||"GeneratorFunction"===(e.displayName||e.name))},t.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,b):(t.__proto__=b,r(t,o,"GeneratorFunction")),t.prototype=Object.create(p),t},t.awrap=function(t){return{__await:t}},g(G.prototype),r(G.prototype,c,(function(){return this})),t.AsyncIterator=G,t.async=function(e,n,l,i,c){void 0===c&&(c=Promise);var o=new G(a(e,n,l,i),c);return t.isGeneratorFunction(n)?o:o.next().then((function(t){return t.done?t.value:o.next()}))},g(p),r(p,o,"Generator"),r(p,i,(function(){return this})),r(p,"toString",(function(){return"[object Generator]"})),t.keys=function(t){var e=[];for(var n in t)e.push(n);return e.reverse(),function n(){for(;e.length;){var l=e.pop();if(l in t)return n.value=l,n.done=!1,n}return n.done=!0,n}},t.values=C,W.prototype={constructor:W,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(V),!t)for(var e in this)"t"===e.charAt(0)&&n.call(this,e)&&!isNaN(+e.slice(1))&&(this[e]=void 0)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var e=this;function l(n,l){return o.type="throw",o.arg=t,e.next=n,l&&(e.method="next",e.arg=void 0),!!l}for(var i=this.tryEntries.length-1;i>=0;--i){var c=this.tryEntries[i],o=c.completion;if("root"===c.tryLoc)return l("end");if(c.tryLoc<=this.prev){var r=n.call(c,"catchLoc"),a=n.call(c,"finallyLoc");if(r&&a){if(this.prev<c.catchLoc)return l(c.catchLoc,!0);if(this.prev<c.finallyLoc)return l(c.finallyLoc)}else if(r){if(this.prev<c.catchLoc)return l(c.catchLoc,!0)}else{if(!a)throw new Error("try statement without catch or finally");if(this.prev<c.finallyLoc)return l(c.finallyLoc)}}}},abrupt:function(t,e){for(var l=this.tryEntries.length-1;l>=0;--l){var i=this.tryEntries[l];if(i.tryLoc<=this.prev&&n.call(i,"finallyLoc")&&this.prev<i.finallyLoc){var c=i;break}}c&&("break"===t||"continue"===t)&&c.tryLoc<=e&&e<=c.finallyLoc&&(c=null);var o=c?c.completion:{};return o.type=t,o.arg=e,c?(this.method="next",this.next=c.finallyLoc,u):this.complete(o)},complete:function(t,e){if("throw"===t.type)throw t.arg;return"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=this.arg=t.arg,this.method="return",this.next="end"):"normal"===t.type&&e&&(this.next=e),u},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),V(n),u}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var l=n.completion;if("throw"===l.type){var i=l.arg;V(n)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,n){return this.delegate={iterator:C(t),resultName:e,nextLoc:n},"next"===this.method&&(this.arg=void 0),u}},t}(t.exports);try{regeneratorRuntime=l}catch(t){"object"==typeof globalThis?globalThis.regeneratorRuntime=l:Function("r","regeneratorRuntime = r")(l)}},function(t,e,n){"use strict";n.r(e),n.d(e,"AUTHORIZATION_CODE",(function(){return l.a})),n.d(e,"AsgardeoAuthClient",(function(){return l.b})),n.d(e,"AsgardeoAuthException",(function(){return l.c})),n.d(e,"AsgardeoSPAClient",(function(){return l.d})),n.d(e,"AuthenticationUtils",(function(){return l.e})),n.d(e,"CLAIM_VALIDATION_ERROR",(function(){return l.f})),n.d(e,"CLIENT_ID_TAG",(function(){return l.g})),n.d(e,"CLIENT_SECRET_TAG",(function(){return l.h})),n.d(e,"DataLayer",(function(){return l.i})),n.d(e,"Hooks",(function(){return l.j})),n.d(e,"NBF_CLAIM",(function(){return l.k})),n.d(e,"OIDC_SCOPE",(function(){return l.l})),n.d(e,"PKCE_CODE_VERIFIER",(function(){return l.m})),n.d(e,"PKCE_SEPARATOR",(function(){return l.n})),n.d(e,"REFRESH_TOKEN_TIMER",(function(){return l.o})),n.d(e,"ResponseMode",(function(){return l.p})),n.d(e,"SCOPE_TAG",(function(){return l.q})),n.d(e,"SESSION_STATE",(function(){return l.r})),n.d(e,"SIGN_OUT_SUCCESS_PARAM",(function(){return l.s})),n.d(e,"SIGN_OUT_URL",(function(){return l.t})),n.d(e,"SPAUtils",(function(){return l.u})),n.d(e,"STATE",(function(){return l.v})),n.d(e,"SUPPORTED_SIGNATURE_ALGORITHMS",(function(){return l.w})),n.d(e,"Storage",(function(){return l.x})),n.d(e,"Stores",(function(){return l.y})),n.d(e,"TOKEN_TAG",(function(){return l.z})),n.d(e,"USERNAME_TAG",(function(){return l.A})),n.d(e,"WebWorkerClass",(function(){return l.B})),n.d(e,"AuthClient",(function(){return X})),n.d(e,"AuthProvider",(function(){return W})),n.d(e,"useAuthContext",(function(){return C})),n.d(e,"SecureRoute",(function(){return Y})),n.d(e,"AuthenticatedComponent",(function(){return K})),n.d(e,"SecureApp",(function(){return J}));n(220),n(227),n(228),n(229),n(230),n(231),n(232),n(233),n(234),n(235),n(236),n(237),n(238),n(239),n(240),n(241),n(242),n(243),n(244),n(245),n(246),n(247),n(248),n(249),n(250),n(251),n(252),n(253),n(254),n(109),n(255),n(256),n(257),n(258),n(259),n(260),n(261),n(262),n(263),n(264),n(265),n(266),n(267),n(268),n(269),n(271),n(272),n(273),n(275),n(276),n(278),n(279),n(281),n(282),n(283),n(284),n(285),n(174),n(286),n(147),n(288),n(289),n(290),n(291),n(292),n(293),n(294),n(295),n(296),n(297),n(298),n(300),n(301),n(302),n(303),n(304),n(305),n(306),n(307),n(308),n(309),n(310),n(311),n(312),n(313),n(314),n(315),n(316),n(317),n(318),n(319),n(320),n(321),n(322),n(323),n(324),n(325),n(326),n(327),n(328),n(329),n(330),n(331),n(332),n(333),n(334),n(335),n(336),n(337),n(338),n(339),n(340),n(341),n(342),n(344),n(345),n(346),n(347),n(358),n(359),n(360),n(361),n(362),n(363),n(364),n(365),n(366),n(367),n(368),n(369),n(370),n(371),n(372),n(373),n(154),n(375),n(376),n(377),n(378),n(379),n(381),n(382),n(383),n(384),n(201),n(385),n(386),n(387),n(388),n(389),n(390),n(391),n(392),n(393),n(394),n(395),n(396),n(398),n(400),n(401),n(402),n(403),n(404),n(405),n(406),n(407),n(408),n(409),n(410),n(411),n(412),n(413),n(414),n(415),n(416),n(417),n(418),n(419),n(420),n(421),n(422),n(423),n(424),n(425),n(428),n(429),n(430),n(431),n(432),n(433),n(434),n(435),n(436),n(437),n(438),n(439),n(440),n(441),n(442),n(443),n(444),n(445),n(446),n(447),n(448),n(159),n(450),n(452),n(459),n(460),n(461),n(462),n(463),n(464),n(465),n(466),n(467),n(468),n(469),n(470),n(471),n(472),n(473),n(474),n(475),n(476),n(477),n(478),n(479),n(480),n(481),n(482),n(483),n(484),n(485),n(486),n(487),n(488),n(489),n(490),n(491),n(492),n(493),n(494),n(495),n(496),n(497),n(498),n(499),n(501),n(502),n(503),n(504),n(505),n(506),n(507),n(508),n(509),n(510),n(511),n(512),n(513),n(514),n(515),n(516),n(517),n(518),n(519),n(520),n(521),n(522),n(523),n(524),n(525),n(526),n(527),n(528),n(529),n(533),n(535),n(536),n(537),n(538),n(539),n(541),n(542),n(543),n(544),n(545),n(546),n(547),n(548),n(549),n(550),n(551),n(552),n(553),n(554),n(555),n(556),n(557),n(558),n(559),n(560),n(561),n(562),n(563),n(564),n(565),n(566),n(568),n(569),n(570),n(571),n(572),n(573),n(574),n(575),n(576),n(577),n(578),n(579),n(580),n(581),n(582),n(583),n(586),n(587),n(590),n(593),n(594),n(595);var l=n(48),i=n(23),c=n.n(i);function o(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);e&&(l=l.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,l)}return n}function r(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?o(Object(n),!0).forEach((function(e){Z(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function a(t,e,n,l,i,c,o){try{var r=t[c](o),a=r.value}catch(t){return void n(t)}r.done?e(a):Promise.resolve(a).then(l,i)}function d(t){return function(){var e=this,n=arguments;return new Promise((function(l,i){var c=t.apply(e,n);function o(t){a(c,l,i,o,r,"next",t)}function r(t){a(c,l,i,o,r,"throw",t)}o(void 0)}))}}function u(t,e){for(var n=0;n<e.length;n++){var l=e[n];l.enumerable=l.enumerable||!1,l.configurable=!0,"value"in l&&(l.writable=!0),Object.defineProperty(t,l.key,l)}}function Z(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var s=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),Z(this,"_authState",t.DEFAULT_STATE),Z(this,"_client",void 0),this._client=l.d.getInstance(),this.getState=this.getState.bind(this),this.init=this.init.bind(this),this.signIn=this.signIn.bind(this),this.signOut=this.signOut.bind(this),this.updateState=this.updateState.bind(this)}var e,n,i,c,o,a,s,b,I,m,h,p,g,G,y,X,V,W,C;return e=t,(n=[{key:"getState",value:function(){return this._authState}},{key:"init",value:function(t){return this._client.initialize(t)}},{key:"signIn",value:(C=d(regeneratorRuntime.mark((function t(e,n,l,i,c,o,a){var u=this;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.signIn(l,i,c,o).then(function(){var t=d(regeneratorRuntime.mark((function t(l){var i;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(l){t.next=2;break}return t.abrupt("return");case 2:return t.next=4,u._client.isAuthenticated();case 4:if(!t.sent){t.next=9;break}i={allowedScopes:l.allowedScopes,displayName:l.displayName,email:l.email,isAuthenticated:!0,isLoading:!1,isSigningOut:!1,sub:l.sub,username:l.username},u.updateState(i),e(r(r({},n),i)),a&&a(l);case 9:return t.abrupt("return",l);case 10:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}()).catch((function(t){return Promise.reject(t)})));case 1:case"end":return t.stop()}}),t,this)}))),function(t,e,n,l,i,c,o){return C.apply(this,arguments)})},{key:"signOut",value:function(t,e,n){return this._client.signOut().then((function(t){return n&&n(t),t})).catch((function(t){return Promise.reject(t)}))}},{key:"updateState",value:function(t){this._authState=r(r({},this._authState),t)}},{key:"getBasicUserInfo",value:(W=d(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.getBasicUserInfo());case 1:case"end":return t.stop()}}),t,this)}))),function(){return W.apply(this,arguments)})},{key:"httpRequest",value:(V=d(regeneratorRuntime.mark((function t(e){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.httpRequest(e));case 1:case"end":return t.stop()}}),t,this)}))),function(t){return V.apply(this,arguments)})},{key:"httpRequestAll",value:(X=d(regeneratorRuntime.mark((function t(e){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.httpRequestAll(e));case 1:case"end":return t.stop()}}),t,this)}))),function(t){return X.apply(this,arguments)})},{key:"requestCustomGrant",value:function(t,e,n){var l=this;return this._client.requestCustomGrant(t).then((function(i){if(i)return t.returnsSession&&(l.updateState(r(r(r({},l.getState()),i),{},{isAuthenticated:!0,isLoading:!1})),n(r(r({},i),{},{isAuthenticated:!0,isLoading:!1}))),e&&e(i),i})).catch((function(t){return Promise.reject(t)}))}},{key:"revokeAccessToken",value:(y=d(regeneratorRuntime.mark((function e(n){var l=this;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this._client.revokeAccessToken().then((function(){return l.updateState(r(r({},t.DEFAULT_STATE),{},{isLoading:!1})),n(t.DEFAULT_STATE),!0})).catch((function(t){return Promise.reject(t)})));case 1:case"end":return e.stop()}}),e,this)}))),function(t){return y.apply(this,arguments)})},{key:"getOIDCServiceEndpoints",value:(G=d(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.getOIDCServiceEndpoints());case 1:case"end":return t.stop()}}),t,this)}))),function(){return G.apply(this,arguments)})},{key:"getHttpClient",value:(g=d(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.getHttpClient());case 1:case"end":return t.stop()}}),t,this)}))),function(){return g.apply(this,arguments)})},{key:"getDecodedIDToken",value:(p=d(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.getDecodedIDToken());case 1:case"end":return t.stop()}}),t,this)}))),function(){return p.apply(this,arguments)})},{key:"getIDToken",value:(h=d(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.getIDToken());case 1:case"end":return t.stop()}}),t,this)}))),function(){return h.apply(this,arguments)})},{key:"getAccessToken",value:(m=d(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.getAccessToken());case 1:case"end":return t.stop()}}),t,this)}))),function(){return m.apply(this,arguments)})},{key:"refreshAccessToken",value:(I=d(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.refreshAccessToken());case 1:case"end":return t.stop()}}),t,this)}))),function(){return I.apply(this,arguments)})},{key:"isAuthenticated",value:(b=d(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.isAuthenticated());case 1:case"end":return t.stop()}}),t,this)}))),function(){return b.apply(this,arguments)})},{key:"enableHttpHandler",value:(s=d(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.enableHttpHandler());case 1:case"end":return t.stop()}}),t,this)}))),function(){return s.apply(this,arguments)})},{key:"disableHttpHandler",value:(a=d(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.disableHttpHandler());case 1:case"end":return t.stop()}}),t,this)}))),function(){return a.apply(this,arguments)})},{key:"updateConfig",value:(o=d(regeneratorRuntime.mark((function t(e){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.updateConfig(e));case 1:case"end":return t.stop()}}),t,this)}))),function(t){return o.apply(this,arguments)})},{key:"on",value:function(t,e,n){return t===l.j.CustomGrant?this._client.on(t,e,n):this._client.on(t,e)}},{key:"trySignInSilently",value:(c=d(regeneratorRuntime.mark((function t(e,n){var l=this;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.trySignInSilently().then(function(){var t=d(regeneratorRuntime.mark((function t(i){var c,o;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(i){t.next=4;break}return l.updateState(r(r({},l.getState()),{},{isLoading:!1})),n(r(r({},e),{},{isLoading:!1})),t.abrupt("return",!1);case 4:return t.next=6,l._client.isAuthenticated();case 6:if(!t.sent){t.next=11;break}o={allowedScopes:(c=i).allowedScopes,displayName:c.displayName,email:c.email,isAuthenticated:!0,isLoading:!1,isSigningOut:!1,sub:c.sub,username:c.username},l.updateState(o),n(r(r({},e),o));case 11:return t.abrupt("return",i);case 12:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}()).catch((function(t){return Promise.reject(t)})));case 1:case"end":return t.stop()}}),t,this)}))),function(t,e){return c.apply(this,arguments)})}])&&u(e.prototype,n),i&&u(e,i),Object.defineProperty(e,"prototype",{writable:!1}),t}();function b(t,e,n,l,i,c,o){try{var r=t[c](o),a=r.value}catch(t){return void n(t)}r.done?e(a):Promise.resolve(a).then(l,i)}function I(t){return function(){var e=this,n=arguments;return new Promise((function(l,i){var c=t.apply(e,n);function o(t){b(c,l,i,o,r,"next",t)}function r(t){b(c,l,i,o,r,"throw",t)}o(void 0)}))}}function m(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);e&&(l=l.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,l)}return n}function h(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?m(Object(n),!0).forEach((function(e){p(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):m(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function p(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function g(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null==n)return;var l,i,c=[],o=!0,r=!1;try{for(n=n.call(t);!(o=(l=n.next()).done)&&(c.push(l.value),!e||c.length!==e);o=!0);}catch(t){r=!0,i=t}finally{try{o||null==n.return||n.return()}finally{if(r)throw i}}return c}(t,e)||function(t,e){if(!t)return;if("string"==typeof t)return G(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return G(t,e)}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function G(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,l=new Array(e);n<e;n++)l[n]=t[n];return l}Z(s,"DEFAULT_STATE",void 0),s.DEFAULT_STATE={allowedScopes:"",displayName:"",email:"",isAuthenticated:!1,isLoading:!0,sub:"",username:""};var y={disableTrySignInSilently:!0},X=new s,V=Object(i.createContext)(null),W=function(t){var e=g(Object(i.useState)(X.getState()),2),n=e[0],o=e[1],r=g(Object(i.useState)(!1),2),a=r[0],d=r[1],u=t.children,Z=t.config,s=t.fallback,b=t.getAuthParams,m=t.onSignOut,p=Object(i.useMemo)((function(){return h(h({},y),Z)}),[Z]),G=function(){var t=I(regeneratorRuntime.mark((function t(e,l,i,c,r){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,t.next=3,X.signIn(o,n,e,l,i,c,r);case 3:return t.abrupt("return",t.sent);case 6:return t.prev=6,t.t0=t.catch(0),t.abrupt("return",Promise.reject(t.t0));case 9:case"end":return t.stop()}}),t,null,[[0,6]])})));return function(e,n,l,i,c){return t.apply(this,arguments)}}(),W=function(t,e,n){return t===l.j.CustomGrant?X.on(t,e,n):X.on(t,e)},C=function(){return X.trySignInSilently(n,o)},R=g(Object(i.useState)(),2),f=R[0],S=R[1];return Object(i.useEffect)((function(){n.isAuthenticated||I(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.t0=d,t.next=3,X.init(p);case 3:t.t1=t.sent,(0,t.t0)(t.t1);case 5:case"end":return t.stop()}}),t)})))()}),[p]),Object(i.useEffect)((function(){I(regeneratorRuntime.mark((function t(){var e,i,c,r,a,d,u;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e=!1,t.next=3,W(l.j.SignOut,(function(){e=!0,m&&m()}));case 3:if(!n.isAuthenticated){t.next=5;break}return t.abrupt("return");case 5:if(p.skipRedirectCallback){t.next=21;break}if(c=null,!b||"function"!=typeof b){t.next=11;break}return t.next=10,b();case 10:c=t.sent;case 11:if(r=new URL(location.href),!(l.u.hasAuthSearchParamsInURL()&&new URL(r.origin+r.pathname).toString()===new URL(null==p?void 0:p.signInRedirectURL).toString()||null!==(i=c)&&void 0!==i&&i.authorizationCode||r.searchParams.get("error"))){t.next=21;break}return t.prev=13,t.next=16,G({callOnlyOnRedirect:!0},null===(a=c)||void 0===a?void 0:a.authorizationCode,null===(d=c)||void 0===d?void 0:d.sessionState,null===(u=c)||void 0===u?void 0:u.state);case 16:t.next=21;break;case 18:t.prev=18,t.t0=t.catch(13),t.t0 instanceof l.c&&S(t.t0);case 21:if(!X.getState().isAuthenticated){t.next=23;break}return t.abrupt("return");case 23:if(!p.disableTrySignInSilently&&!e){t.next=26;break}return o(h(h({},n),{},{isLoading:!1})),t.abrupt("return");case 26:return t.next=28,C().then((function(){})).catch((function(t){throw t}));case 28:case"end":return t.stop()}}),t,null,[[13,18]])})))()}),[p]),c.a.createElement(V.Provider,{value:{disableHttpHandler:function(){return X.disableHttpHandler()},enableHttpHandler:function(){return X.enableHttpHandler()},getAccessToken:function(){return X.getAccessToken()},getBasicUserInfo:function(){return X.getBasicUserInfo()},getDecodedIDToken:function(){return X.getDecodedIDToken()},getHttpClient:function(){return X.getHttpClient()},getIDToken:function(){return X.getIDToken()},getOIDCServiceEndpoints:function(){return X.getOIDCServiceEndpoints()},httpRequest:function(t){return X.httpRequest(t)},httpRequestAll:function(t){return X.httpRequestAll(t)},isAuthenticated:function(){return X.isAuthenticated()},on:W,refreshAccessToken:function(){return X.refreshAccessToken()},requestCustomGrant:function(t,e){return X.requestCustomGrant(t,e,o)},revokeAccessToken:function(){return X.revokeAccessToken(o)},signIn:G,signOut:function(t){return X.signOut(o,n,t)},state:n,trySignInSilently:C,updateConfig:function(t){return X.updateConfig(t)},error:f}},a?u:null!=s?s:null)},C=function(){return Object(i.useContext)(V)},R=n(219),f=["component","callback"];function S(){return(S=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var l in n)Object.prototype.hasOwnProperty.call(n,l)&&(t[l]=n[l])}return t}).apply(this,arguments)}function v(t,e){if(null==t)return{};var n,l,i=function(t,e){if(null==t)return{};var n,l,i={},c=Object.keys(t);for(l=0;l<c.length;l++)n=c[l],e.indexOf(n)>=0||(i[n]=t[n]);return i}(t,e);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(t);for(l=0;l<c.length;l++)n=c[l],e.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(i[n]=t[n])}return i}var Y=function(t){var e=C().state,n=t.component,l=t.callback,o=v(t,f);return Object(i.useEffect)((function(){e.isAuthenticated||l&&l()}),[e.isAuthenticated]),e.isAuthenticated?c.a.createElement(R.Route,S({},o,{render:function(t){return c.a.createElement(n,t)}})):null},K=function(t){var e=t.fallback,n=t.children,l=C().state.isAuthenticated;return c.a.createElement(c.a.Fragment,null," ",l?n:null!=e?e:null," ")};function N(t,e,n,l,i,c,o){try{var r=t[c](o),a=r.value}catch(t){return void n(t)}r.done?e(a):Promise.resolve(a).then(l,i)}var J=function(t){var e=t.children,n=t.fallback,l=t.onSignIn,o=t.overrideSignIn,r=C(),a=r.state,d=a.isAuthenticated,u=a.isLoading,Z=r.signIn;return Object(i.useEffect)((function(){var t;d||u||(t=regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!o||"function"!=typeof o){t.next=5;break}return t.next=3,o();case 3:t.next=7;break;case 5:return t.next=7,Z();case 7:case"end":return t.stop()}}),t)})),function(){var e=this,n=arguments;return new Promise((function(l,i){var c=t.apply(e,n);function o(t){N(c,l,i,o,r,"next",t)}function r(t){N(c,l,i,o,r,"throw",t)}o(void 0)}))})(),d&&l&&"function"==typeof l&&l()}),[d,u]),c.a.createElement(K,{fallback:n},c.a.createElement(i.Suspense,{fallback:n},e))}}])}));
|
|
897
|
+
*/updateConfig(t){return n(this,void 0,void 0,(function*(){if(yield this._isInitialized(),this._storage===U.WebWorker){const e=this._client;yield e.updateConfig(t)}else{const e=this._client;yield e.updateConfig(t)}}))}}Mn._instances=new Map;class En extends Worker{constructor(){super(...arguments),this.onmessage=()=>null}}const Dn=t=>{const e=self;let l;e.onmessage=({data:e,ports:d})=>n(void 0,void 0,void 0,(function*(){var a,r,u,s;const Z=d[0];if("init"===e.type||l)switch(e.type){case"init":try{const d=Object.assign({},e.data);l=yield((t,e)=>n(void 0,void 0,void 0,(function*(){const l=new we,i=new wn,c=new J(l,i);yield c.initialize(t);const o=new F(c),d=e(c,o),a=c.getDataLayer(),r=xe.getInstance();return(null==r?void 0:r.init)&&(yield r.init(!0,d.attachToken)),{disableHttpHandler:()=>{d.disableHttpHandler(r)},enableHttpHandler:()=>{d.enableHttpHandler(r)},getAccessToken:()=>d.getAccessToken(),getAuthorizationURL:t=>n(void 0,void 0,void 0,(function*(){return c.getAuthorizationURL(t).then(t=>n(void 0,void 0,void 0,(function*(){var e;const l=null!==(e=new URL(t).searchParams.get(y))&&void 0!==e?e:"",n=yield c.getPKCECode(l);return{authorizationURL:t,pkce:n}}))).catch(t=>Promise.reject(t))})),getBasicUserInfo:()=>n(void 0,void 0,void 0,(function*(){return d.getBasicUserInfo()})),getConfigData:()=>n(void 0,void 0,void 0,(function*(){return a.getConfigData()})),getDecodedIDToken:()=>n(void 0,void 0,void 0,(function*(){return d.getDecodedIDToken()})),getIDToken:()=>n(void 0,void 0,void 0,(function*(){return d.getIDToken()})),getOIDCServiceEndpoints:()=>n(void 0,void 0,void 0,(function*(){return d.getOIDCServiceEndpoints()})),getSignOutURL:()=>n(void 0,void 0,void 0,(function*(){return yield c.getSignOutURL()})),httpRequest:t=>n(void 0,void 0,void 0,(function*(){return yield d.httpRequest(r,t)})),httpRequestAll:t=>n(void 0,void 0,void 0,(function*(){return yield d.httpRequestAll(t,r)})),isAuthenticated:()=>d.isAuthenticated(),refreshAccessToken:()=>n(void 0,void 0,void 0,(function*(){try{return yield d.refreshAccessToken()}catch(t){return Promise.reject(t)}})),requestAccessToken:(t,e,l,i)=>n(void 0,void 0,void 0,(function*(){return yield d.requestAccessToken(t,e,void 0,l,i)})),requestCustomGrant:t=>n(void 0,void 0,void 0,(function*(){return yield d.requestCustomGrant(t)})),revokeAccessToken:()=>c.revokeAccessToken().then(()=>(o.clearRefreshTokenTimeout(),Promise.resolve(!0))).catch(t=>Promise.reject(t)),setHttpRequestFinishCallback:t=>{(null==r?void 0:r.setHttpRequestFinishCallback)&&r.setHttpRequestFinishCallback(t)},setHttpRequestStartCallback:t=>{d.setHttpRequestStartCallback(r,t)},setHttpRequestSuccessCallback:t=>{d.setHttpRequestSuccessCallback(r,t)},setSessionState:t=>n(void 0,void 0,void 0,(function*(){yield a.setSessionDataParameter(g,t)})),signOut:()=>n(void 0,void 0,void 0,(function*(){return o.clearRefreshTokenTimeout(),yield c.signOut()})),startAutoRefreshToken:()=>n(void 0,void 0,void 0,(function*(){o.clearRefreshTokenTimeout(),o.refreshAccessTokenAutomatically()})),updateConfig:t=>n(void 0,void 0,void 0,(function*(){yield c.updateConfig(t)}))}})))(d,t),l.setHttpRequestFinishCallback(o),l.setHttpRequestStartCallback(i),l.setHttpRequestSuccessCallback(c),Z.postMessage(A.generateSuccessMessage())}catch(t){Z.postMessage(A.generateFailureMessage(t))}break;case"get_auth_url":l.getAuthorizationURL(null==e?void 0:e.data).then(t=>{Z.postMessage(A.generateSuccessMessage(t))}).catch(t=>{Z.postMessage(A.generateFailureMessage(t))});break;case"request_get_token":l.requestAccessToken(null===(a=null==e?void 0:e.data)||void 0===a?void 0:a.code,null===(r=null==e?void 0:e.data)||void 0===r?void 0:r.sessionState,null===(u=null==e?void 0:e.data)||void 0===u?void 0:u.pkce,null===(s=null==e?void 0:e.data)||void 0===s?void 0:s.state).then(t=>{Z.postMessage(A.generateSuccessMessage(t))}).catch(t=>{Z.postMessage(A.generateFailureMessage(t))});break;case"http-request":l.httpRequest(e.data).then(t=>{Z.postMessage(A.generateSuccessMessage(t))}).catch(t=>{Z.postMessage(A.generateFailureMessage(t))});break;case"http-request-all":l.httpRequestAll(e.data).then(t=>{Z.postMessage(A.generateSuccessMessage(t))}).catch(t=>{Z.postMessage(A.generateFailureMessage(t))});break;case"sign-out":try{Z.postMessage(A.generateSuccessMessage(yield l.signOut()))}catch(t){Z.postMessage(A.generateFailureMessage(t))}break;case"request-custom-grant":l.requestCustomGrant(e.data).then(t=>{Z.postMessage(A.generateSuccessMessage(t))}).catch(t=>{Z.postMessage(A.generateFailureMessage(t))});break;case"revoke-access-token":l.revokeAccessToken().then(t=>{Z.postMessage(A.generateSuccessMessage(t))}).catch(t=>{Z.postMessage(A.generateFailureMessage(t))});break;case"get-oidc-service-endpoints":try{Z.postMessage(A.generateSuccessMessage(yield l.getOIDCServiceEndpoints()))}catch(t){Z.postMessage(A.generateFailureMessage(t))}break;case"get-basic-user-info":try{Z.postMessage(A.generateSuccessMessage(yield l.getBasicUserInfo()))}catch(t){Z.postMessage(A.generateFailureMessage(t))}break;case"get-decoded-id-token":try{Z.postMessage(A.generateSuccessMessage(yield l.getDecodedIDToken()))}catch(t){Z.postMessage(A.generateFailureMessage(t))}break;case"get_id_token":try{Z.postMessage(A.generateSuccessMessage(yield l.getIDToken()))}catch(t){Z.postMessage(A.generateFailureMessage(t))}break;case"enable_http_handler":l.enableHttpHandler(),Z.postMessage(A.generateSuccessMessage());break;case"disable_http_handler":l.disableHttpHandler(),Z.postMessage(A.generateSuccessMessage());break;case"is_authenticated":try{Z.postMessage(A.generateSuccessMessage(yield l.isAuthenticated()))}catch(t){Z.postMessage(A.generateFailureMessage(t))}break;case"get_sign_out_url":try{Z.postMessage(A.generateSuccessMessage(yield l.getSignOutURL()))}catch(t){Z.postMessage(A.generateFailureMessage(t))}break;case"refresh_access-token":try{Z.postMessage(A.generateSuccessMessage(yield l.refreshAccessToken()))}catch(t){Z.postMessage(A.generateFailureMessage(t))}break;case"start_auto_refresh_token":try{Z.postMessage(A.generateSuccessMessage(l.startAutoRefreshToken()))}catch(t){Z.postMessage(A.generateFailureMessage(t))}break;case"set_session_state":try{Z.postMessage(A.generateSuccessMessage(yield l.setSessionState(null==e?void 0:e.data)))}catch(t){Z.postMessage(A.generateFailureMessage(t))}break;case"update_config":try{Z.postMessage(A.generateSuccessMessage(yield l.updateConfig(null==e?void 0:e.data)))}catch(t){Z.postMessage(A.generateFailureMessage(t))}break;case"get_config_data":try{Z.postMessage(A.generateSuccessMessage(yield l.getConfigData()))}catch(t){Z.postMessage(A.generateFailureMessage(t))}break;default:null==Z||Z.postMessage(A.generateFailureMessage(new R("SPA-CLIENT_WORKER-ONMSG-IV02","The message type is invalid.",`The message type provided, ${e.type}, is invalid.`)))}else Z.postMessage(A.generateFailureMessage(new R("SPA-CLIENT_WORKER-ONMSG-NF01","The web worker has not been initialized yet.","The initialize method needs to be called before the specified operation can be carried out.")))}));const i=()=>{e.postMessage({type:"request-start"})},c=t=>{e.postMessage({data:JSON.stringify(null!=t?t:""),type:"request-success"})},o=()=>{e.postMessage({type:"request-finish"})}}}).call(this,l(163))},function(t,e,l){var n=l(130),i=l(71);t.exports=function(t){var e=n(t,"string");return i(e)?e:e+""}},function(t,e,l){var n,i,c=l(1),o=l(48),d=c.process,a=c.Deno,r=d&&d.versions||a&&a.version,u=r&&r.v8;u&&(i=(n=u.split("."))[0]>0&&n[0]<4?1:+(n[0]+n[1])),!i&&o&&(!(n=o.match(/Edge\/(\d+)/))||n[1]>=74)&&(n=o.match(/Chrome\/(\d+)/))&&(i=+n[1]),t.exports=i},function(t,e,l){var n=l(169),i=l(134).concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return n(t,i)}},function(t,e,l){"use strict";var n=l(55),i=l(16),c=l(43);t.exports=function(t,e,l){var o=n(e);o in t?i.f(t,o,c(0,l)):t[o]=l}},function(t,e,l){var n=l(40);t.exports=Array.isArray||function(t){return"Array"==n(t)}},function(t,e,l){var n=l(3);t.exports=n([].slice)},function(t,e,l){var n=l(64),i=l(27),c=l(91),o=l(7)("iterator");t.exports=function(t){if(null!=t)return i(t,o)||i(t,"@@iterator")||c[n(t)]}},function(t,e,l){"use strict";var n=l(6),i=function(t){var e,l;this.promise=new t((function(t,n){if(void 0!==e||void 0!==l)throw TypeError("Bad Promise constructor");e=t,l=n})),this.resolve=n(e),this.reject=n(l)};t.exports.f=function(t){return new i(t)}},function(t,e,l){var n=l(24),i=l(101);(t.exports=function(t,e){return i[t]||(i[t]=void 0!==e?e:{})})("versions",[]).push({version:"3.22.1",mode:n?"pure":"global",copyright:"© 2014-2022 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.22.1/LICENSE",source:"https://github.com/zloirock/core-js"})},function(t,e,l){var n=l(1),i=l(135),c=l(10),o=l(40),d=l(7)("toStringTag"),a=n.Object,r="Arguments"==o(function(){return arguments}());t.exports=i?o:function(t){var e,l,n;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(l=function(t,e){try{return t[e]}catch(t){}}(e=a(t),d))?l:r?o(e):"Object"==(n=o(e))&&c(e.callee)?"Arguments":n}},function(t,e,l){var n=l(3),i=l(4),c=l(10),o=l(64),d=l(11),a=l(103),r=function(){},u=[],s=d("Reflect","construct"),Z=/^\s*(?:class|function)\b/,b=n(Z.exec),h=!Z.exec(r),m=function(t){if(!c(t))return!1;try{return s(r,u,t),!0}catch(t){return!1}},I=function(t){if(!c(t))return!1;switch(o(t)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return h||!!b(Z,a(t))}catch(t){return!0}};I.sham=!0,t.exports=!s||i((function(){var t;return m(m.call)||!m(Object)||!m((function(){t=!0}))||t}))?I:m},function(t,e,l){"use strict";var n=l(11),i=l(16),c=l(7),o=l(9),d=c("species");t.exports=function(t){var e=n(t),l=i.f;o&&e&&!e[d]&&l(e,d,{configurable:!0,get:function(){return this}})}},function(t,e,l){var n=l(0),i=l(3),c=l(86),o=l(12),d=l(15),a=l(16).f,r=l(57),u=l(136),s=l(114),Z=l(85),b=l(93),h=!1,m=Z("meta"),I=0,G=function(t){a(t,m,{value:{objectID:"O"+I++,weakData:{}}})},p=t.exports={enable:function(){p.enable=function(){},h=!0;var t=r.f,e=i([].splice),l={};l[m]=1,t(l).length&&(r.f=function(l){for(var n=t(l),i=0,c=n.length;i<c;i++)if(n[i]===m){e(n,i,1);break}return n},n({target:"Object",stat:!0,forced:!0},{getOwnPropertyNames:u.f}))},fastKey:function(t,e){if(!o(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!d(t,m)){if(!s(t))return"F";if(!e)return"E";G(t)}return t[m].objectID},getWeakData:function(t,e){if(!d(t,m)){if(!s(t))return!0;if(!e)return!1;G(t)}return t[m].weakData},onFreeze:function(t){return b&&h&&s(t)&&!d(t,m)&&G(t),t}};c[m]=!0},function(t,e,l){"use strict";var n=l(5),i=l(6),c=l(2),o=l(29),d=l(28),a=l(46),r=l(7),u=l(20),s=l(11),Z=l(27),b=l(126),h=s("Promise"),m=u.set,I=u.getterFor("AsyncIteratorProxy"),G=r("toStringTag");t.exports=function(t,e){var l=function(t){t.type="AsyncIteratorProxy",t.next=i(t.iterator.next),t.done=!1,t.ignoreArgument=!e,m(this,t)};return l.prototype=a(o(b),{next:function(l){var i=this,o=!!arguments.length;return new h((function(d){var a=I(i),r=o?[a.ignoreArgument?void 0:l]:e?[]:[void 0];a.ignoreArgument=!1,d(a.done?{done:!0,value:void 0}:c(n(t,a,h,r)))}))},return:function(t){var e=this;return new h((function(l,i){var o=I(e),d=o.iterator;o.done=!0;var a=Z(d,"return");if(void 0===a)return l({done:!0,value:t});h.resolve(n(a,d,t)).then((function(e){c(e),l({done:!0,value:t})}),i)}))},throw:function(t){var e=this;return new h((function(l,i){var c=I(e),o=c.iterator;c.done=!0;var d=Z(o,"throw");if(void 0===d)return i(t);l(n(d,o,t))}))}}),e||d(l.prototype,G,"Generator"),l}},function(t,e,l){"use strict";var n=l(5),i=l(6),c=l(2),o=l(29),d=l(28),a=l(46),r=l(7),u=l(20),s=l(27),Z=l(92).IteratorPrototype,b=u.set,h=u.getterFor("IteratorProxy"),m=r("toStringTag");t.exports=function(t,e){var l=function(t){t.type="IteratorProxy",t.next=i(t.iterator.next),t.done=!1,t.ignoreArg=!e,b(this,t)};return l.prototype=a(o(Z),{next:function(l){var i=h(this),c=arguments.length?[i.ignoreArg?void 0:l]:e?[]:[void 0];i.ignoreArg=!1;var o=i.done?void 0:n(t,i,c);return{done:i.done,value:o}},return:function(t){var e=h(this),l=e.iterator;e.done=!0;var i=s(l,"return");return{done:!0,value:i?c(n(i,l,t)).value:t}},throw:function(t){var e=h(this),l=e.iterator;e.done=!0;var i=s(l,"throw");if(i)return n(i,l,t);throw t}}),e||d(l.prototype,m,"Generator"),l}},function(t,e,l){var n=l(5);t.exports=function(t){return n(Set.prototype.values,t)}},function(t,e,l){var n=l(1),i=l(11),c=l(10),o=l(36),d=l(164),a=n.Object;t.exports=d?function(t){return"symbol"==typeof t}:function(t){var e=i("Symbol");return c(e)&&o(e.prototype,a(t))}},function(t,e,l){var n=l(56),i=l(4);t.exports=!!Object.getOwnPropertySymbols&&!i((function(){var t=Symbol();return!String(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&n&&n<41}))},function(t,e,l){var n=l(1).String;t.exports=function(t){try{return n(t)}catch(t){return"Object"}}},function(t,e,l){var n=l(9),i=l(15),c=Function.prototype,o=n&&Object.getOwnPropertyDescriptor,d=i(c,"name"),a=d&&"something"===function(){}.name,r=d&&(!n||n&&o(c,"name").configurable);t.exports={EXISTS:d,PROPER:a,CONFIGURABLE:r}},function(t,e,l){var n=l(169),i=l(134);t.exports=Object.keys||function(t){return n(t,i)}},function(t,e,l){var n=l(223);t.exports=function(t,e){return new(n(t))(0===e?0:e)}},function(t,e,l){"use strict";var n=l(92).IteratorPrototype,i=l(29),c=l(43),o=l(41),d=l(91),a=function(){return this};t.exports=function(t,e,l,r){var u=e+" Iterator";return t.prototype=i(n,{next:c(+!r,l)}),o(t,u,!1,!0),d[u]=a,t}},function(t,e,l){var n=l(40),i=l(1);t.exports="process"==n(i.process)},function(t,e,l){var n=l(3),i=l(26),c=l(14),o=l(117),d=n("".replace),a="["+o+"]",r=RegExp("^"+a+a+"*"),u=RegExp(a+a+"*$"),s=function(t){return function(e){var l=c(i(e));return 1&t&&(l=d(l,r,"")),2&t&&(l=d(l,u,"")),l}};t.exports={start:s(1),end:s(2),trim:s(3)}},function(t,e){t.exports=function(t){try{return{error:!1,value:t()}}catch(t){return{error:!0,value:t}}}},function(t,e,l){var n=l(1);t.exports=n.Promise},function(t,e,l){var n=l(3),i=l(35),c=l(14),o=l(26),d=n("".charAt),a=n("".charCodeAt),r=n("".slice),u=function(t){return function(e,l){var n,u,s=c(o(e)),Z=i(l),b=s.length;return Z<0||Z>=b?t?"":void 0:(n=a(s,Z))<55296||n>56319||Z+1===b||(u=a(s,Z+1))<56320||u>57343?t?d(s,Z):n:t?r(s,Z,Z+2):u-56320+(n-55296<<10)+65536}};t.exports={codeAt:u(!1),charAt:u(!0)}},function(t,e,l){var n=l(4);t.exports=!n((function(){var t=function(){}.bind();return"function"!=typeof t||t.hasOwnProperty("prototype")}))},function(t,e,l){var n=l(1),i=l(3),c=l(4),o=l(40),d=n.Object,a=i("".split);t.exports=c((function(){return!d("z").propertyIsEnumerable(0)}))?function(t){return"String"==o(t)?a(t,""):d(t)}:d},function(t,e,l){var n=l(3),i=0,c=Math.random(),o=n(1..toString);t.exports=function(t){return"Symbol("+(void 0===t?"":t)+")_"+o(++i+c,36)}},function(t,e){t.exports={}},function(t,e,l){var n=l(34),i=l(49),c=l(21),o=function(t){return function(e,l,o){var d,a=n(e),r=c(a),u=i(o,r);if(t&&l!=l){for(;r>u;)if((d=a[u++])!=d)return!0}else for(;r>u;u++)if((t||u in a)&&a[u]===l)return t||u||0;return!t&&-1}};t.exports={includes:o(!0),indexOf:o(!1)}},function(t,e,l){var n=l(4),i=l(10),c=/#|\.prototype\./,o=function(t,e){var l=a[d(t)];return l==u||l!=r&&(i(e)?n(e):!!e)},d=o.normalize=function(t){return String(t).replace(c,".").toLowerCase()},a=o.data={},r=o.NATIVE="N",u=o.POLYFILL="P";t.exports=o},function(t,e,l){var n=l(1),i=l(49),c=l(21),o=l(58),d=n.Array,a=Math.max;t.exports=function(t,e,l){for(var n=c(t),r=i(e,n),u=i(void 0===l?n:l,n),s=d(a(u-r,0)),Z=0;r<u;r++,Z++)o(s,Z,t[r]);return s.length=Z,s}},function(t,e,l){var n=l(4),i=l(7),c=l(56),o=i("species");t.exports=function(t){return c>=51||!n((function(){var e=[];return(e.constructor={})[o]=function(){return{foo:1}},1!==e[t](Boolean).foo}))}},function(t,e){t.exports={}},function(t,e,l){"use strict";var n,i,c,o=l(4),d=l(10),a=l(29),r=l(32),u=l(19),s=l(7),Z=l(24),b=s("iterator"),h=!1;[].keys&&("next"in(c=[].keys())?(i=r(r(c)))!==Object.prototype&&(n=i):h=!0),null==n||o((function(){var t={};return n[b].call(t)!==t}))?n={}:Z&&(n=a(n)),d(n[b])||u(n,b,(function(){return this})),t.exports={IteratorPrototype:n,BUGGY_SAFARI_ITERATORS:h}},function(t,e,l){var n=l(4);t.exports=!n((function(){return Object.isExtensible(Object.preventExtensions({}))}))},function(t,e,l){var n=l(1).TypeError;t.exports=function(t,e){if(t<e)throw n("Not enough arguments");return t}},function(t,e,l){var n=l(1),i=l(81),c=l(10),o=l(88),d=l(103),a=l(7),r=l(352),u=l(24),s=l(56),Z=i&&i.prototype,b=a("species"),h=!1,m=c(n.PromiseRejectionEvent),I=o("Promise",(function(){var t=d(i),e=t!==String(i);if(!e&&66===s)return!0;if(u&&(!Z.catch||!Z.finally))return!0;if(s>=51&&/native code/.test(t))return!1;var l=new i((function(t){t(1)})),n=function(t){t((function(){}),(function(){}))};return(l.constructor={})[b]=n,!(h=l.then((function(){}))instanceof n)||!e&&r&&!m}));t.exports={CONSTRUCTOR:I,REJECTION_EVENT:m,SUBCLASSING:h}},function(t,e,l){var n=l(12),i=l(40),c=l(7)("match");t.exports=function(t){var e;return n(t)&&(void 0!==(e=t[c])?!!e:"RegExp"==i(t))}},function(t,e,l){var n=l(1),i=l(5),c=l(2),o=l(10),d=l(40),a=l(122),r=n.TypeError;t.exports=function(t,e){var l=t.exec;if(o(l)){var n=i(l,t,e);return null!==n&&c(n),n}if("RegExp"===d(t))return i(a,t,e);throw r("RegExp#exec called on incompatible receiver")}},function(t,e,l){var n=l(1),i=l(35),c=n.RangeError;t.exports=function(t){var e=i(t);if(e<0)throw c("The argument can't be less than 0");return e}},function(t,e,l){"use strict";var n=l(1),i=l(5),c=l(6),o=l(2),d=l(11),a=l(27),r=n.TypeError,u=function(t){var e=0==t,l=1==t,n=2==t,u=3==t;return function(t,s,Z){o(t);var b=d("Promise"),h=c(t.next),m=0,I=void 0!==s;return!I&&e||c(s),new b((function(c,d){var G=function(e,l){try{var n=a(t,"return");if(n)return b.resolve(i(n,t)).then((function(){e(l)}),(function(t){d(t)}))}catch(t){return d(t)}e(l)},p=function(t){G(d,t)},g=function(){try{if(e&&m>9007199254740991&&I)throw r("The allowed number of iterations has been exceeded");b.resolve(o(i(h,t))).then((function(t){try{if(o(t).done)e?(Z.length=m,c(Z)):c(!u&&(n||void 0));else{var i=t.value;I?b.resolve(e?s(i,m):s(i)).then((function(t){l?g():n?t?g():G(c,!1):e?(Z[m++]=t,g()):t?G(c,u||i):g()}),p):(Z[m++]=i,g())}}catch(t){p(t)}}),p)}catch(t){p(t)}};g()}))}};t.exports={toArray:u(0),forEach:u(1),every:u(2),some:u(3),find:u(4)}},function(t,e,l){"use strict";var n={}.propertyIsEnumerable,i=Object.getOwnPropertyDescriptor,c=i&&!n.call({1:2},1);e.f=c?function(t){var e=i(this,t);return!!e&&e.enumerable}:n},function(t,e,l){var n=l(1),i=l(131),c=n["__core-js_shared__"]||i("__core-js_shared__",{});t.exports=c},function(t,e,l){var n=l(1),i=l(12),c=n.document,o=i(c)&&i(c.createElement);t.exports=function(t){return o?c.createElement(t):{}}},function(t,e,l){var n=l(3),i=l(10),c=l(101),o=n(Function.toString);i(c.inspectSource)||(c.inspectSource=function(t){return o(t)}),t.exports=c.inspectSource},function(t,e,l){var n=l(63),i=l(85),c=n("keys");t.exports=function(t){return c[t]||(c[t]=i(t))}},function(t,e){e.f=Object.getOwnPropertySymbols},function(t,e,l){var n=l(9),i=l(167),c=l(16),o=l(2),d=l(34),a=l(75);e.f=n&&!i?Object.defineProperties:function(t,e){o(t);for(var l,n=d(e),i=a(e),r=i.length,u=0;r>u;)c.f(t,l=i[u++],n[l]);return t}},function(t,e,l){var n=l(5),i=l(2),c=l(27);t.exports=function(t,e,l){var o,d;i(t);try{if(!(o=c(t,"return"))){if("throw"===e)throw l;return l}o=n(o,t)}catch(t){d=!0,o=t}if("throw"===e)throw l;if(d)throw o;return i(o),l}},function(t,e,l){var n=l(7)("iterator"),i=!1;try{var c=0,o={next:function(){return{done:!!c++}},return:function(){i=!0}};o[n]=function(){return this},Array.from(o,(function(){throw 2}))}catch(t){}t.exports=function(t,e){if(!e&&!i)return!1;var l=!1;try{var c={};c[n]=function(){return{next:function(){return{done:l=!0}}}},t(c)}catch(t){}return l}},function(t,e,l){"use strict";var n=l(34),i=l(44),c=l(91),o=l(20),d=l(16).f,a=l(140),r=l(24),u=l(9),s=o.set,Z=o.getterFor("Array Iterator");t.exports=a(Array,"Array",(function(t,e){s(this,{type:"Array Iterator",target:n(t),index:0,kind:e})}),(function(){var t=Z(this),e=t.target,l=t.kind,n=t.index++;return!e||n>=e.length?(t.target=void 0,{value:void 0,done:!0}):"keys"==l?{value:n,done:!1}:"values"==l?{value:e[n],done:!1}:{value:[n,e[n]],done:!1}}),"values");var b=c.Arguments=c.Array;if(i("keys"),i("values"),i("entries"),!r&&u&&"values"!==b.name)try{d(b,"name",{value:"values"})}catch(t){}},function(t,e,l){var n=l(1),i=l(6),c=l(13),o=l(84),d=l(21),a=n.TypeError,r=function(t){return function(e,l,n,r){i(l);var u=c(e),s=o(u),Z=d(u),b=t?Z-1:0,h=t?-1:1;if(n<2)for(;;){if(b in s){r=s[b],b+=h;break}if(b+=h,t?b<0:Z<=b)throw a("Reduce of empty array with no initial value")}for(;t?b>=0:Z>b;b+=h)b in s&&(r=l(r,s[b],b,u));return r}};t.exports={left:r(!1),right:r(!0)}},function(t,e,l){"use strict";var n=l(1),i=l(3),c=l(9),o=l(144),d=l(74),a=l(28),r=l(46),u=l(4),s=l(42),Z=l(35),b=l(37),h=l(183),m=l(270),I=l(32),G=l(51),p=l(57).f,g=l(16).f,X=l(137),V=l(89),y=l(41),W=l(20),C=d.PROPER,R=d.CONFIGURABLE,f=W.get,Y=W.set,S=n.ArrayBuffer,v=S,K=v&&v.prototype,N=n.DataView,J=N&&N.prototype,H=Object.prototype,U=n.Array,L=n.RangeError,k=i(X),T=i([].reverse),B=m.pack,F=m.unpack,A=function(t){return[255&t]},x=function(t){return[255&t,t>>8&255]},z=function(t){return[255&t,t>>8&255,t>>16&255,t>>24&255]},w=function(t){return t[3]<<24|t[2]<<16|t[1]<<8|t[0]},Q=function(t){return B(t,23,4)},P=function(t){return B(t,52,8)},j=function(t,e){g(t.prototype,e,{get:function(){return f(this)[e]}})},M=function(t,e,l,n){var i=h(l),c=f(t);if(i+e>c.byteLength)throw L("Wrong index");var o=f(c.buffer).bytes,d=i+c.byteOffset,a=V(o,d,d+e);return n?a:T(a)},E=function(t,e,l,n,i,c){var o=h(l),d=f(t);if(o+e>d.byteLength)throw L("Wrong index");for(var a=f(d.buffer).bytes,r=o+d.byteOffset,u=n(+i),s=0;s<e;s++)a[r+s]=u[c?s:e-s-1]};if(o){var D=C&&"ArrayBuffer"!==S.name;if(u((function(){S(1)}))&&u((function(){new S(-1)}))&&!u((function(){return new S,new S(1.5),new S(NaN),D&&!R})))D&&R&&a(S,"name","ArrayBuffer");else{(v=function(t){return s(this,K),new S(h(t))}).prototype=K;for(var O,_=p(S),q=0;_.length>q;)(O=_[q++])in v||a(v,O,S[O]);K.constructor=v}G&&I(J)!==H&&G(J,H);var $=new N(new v(2)),tt=i(J.setInt8);$.setInt8(0,2147483648),$.setInt8(1,2147483649),!$.getInt8(0)&&$.getInt8(1)||r(J,{setInt8:function(t,e){tt(this,t,e<<24>>24)},setUint8:function(t,e){tt(this,t,e<<24>>24)}},{unsafe:!0})}else K=(v=function(t){s(this,K);var e=h(t);Y(this,{bytes:k(U(e),0),byteLength:e}),c||(this.byteLength=e)}).prototype,J=(N=function(t,e,l){s(this,J),s(t,K);var n=f(t).byteLength,i=Z(e);if(i<0||i>n)throw L("Wrong offset");if(i+(l=void 0===l?n-i:b(l))>n)throw L("Wrong length");Y(this,{buffer:t,byteLength:l,byteOffset:i}),c||(this.buffer=t,this.byteLength=l,this.byteOffset=i)}).prototype,c&&(j(v,"byteLength"),j(N,"buffer"),j(N,"byteLength"),j(N,"byteOffset")),r(J,{getInt8:function(t){return M(this,1,t)[0]<<24>>24},getUint8:function(t){return M(this,1,t)[0]},getInt16:function(t){var e=M(this,2,t,arguments.length>1?arguments[1]:void 0);return(e[1]<<8|e[0])<<16>>16},getUint16:function(t){var e=M(this,2,t,arguments.length>1?arguments[1]:void 0);return e[1]<<8|e[0]},getInt32:function(t){return w(M(this,4,t,arguments.length>1?arguments[1]:void 0))},getUint32:function(t){return w(M(this,4,t,arguments.length>1?arguments[1]:void 0))>>>0},getFloat32:function(t){return F(M(this,4,t,arguments.length>1?arguments[1]:void 0),23)},getFloat64:function(t){return F(M(this,8,t,arguments.length>1?arguments[1]:void 0),52)},setInt8:function(t,e){E(this,1,t,A,e)},setUint8:function(t,e){E(this,1,t,A,e)},setInt16:function(t,e){E(this,2,t,x,e,arguments.length>2?arguments[2]:void 0)},setUint16:function(t,e){E(this,2,t,x,e,arguments.length>2?arguments[2]:void 0)},setInt32:function(t,e){E(this,4,t,z,e,arguments.length>2?arguments[2]:void 0)},setUint32:function(t,e){E(this,4,t,z,e,arguments.length>2?arguments[2]:void 0)},setFloat32:function(t,e){E(this,4,t,Q,e,arguments.length>2?arguments[2]:void 0)},setFloat64:function(t,e){E(this,8,t,P,e,arguments.length>2?arguments[2]:void 0)}});y(v,"ArrayBuffer"),y(N,"DataView"),t.exports={ArrayBuffer:v,DataView:N}},function(t,e,l){var n=l(1),i=l(65),c=l(73),o=n.TypeError;t.exports=function(t){if(i(t))return t;throw o(c(t)+" is not a constructor")}},function(t,e,l){"use strict";var n=l(0),i=l(1),c=l(3),o=l(88),d=l(19),a=l(67),r=l(8),u=l(42),s=l(10),Z=l(12),b=l(4),h=l(108),m=l(41),I=l(115);t.exports=function(t,e,l){var G=-1!==t.indexOf("Map"),p=-1!==t.indexOf("Weak"),g=G?"set":"add",X=i[t],V=X&&X.prototype,y=X,W={},C=function(t){var e=c(V[t]);d(V,t,"add"==t?function(t){return e(this,0===t?0:t),this}:"delete"==t?function(t){return!(p&&!Z(t))&&e(this,0===t?0:t)}:"get"==t?function(t){return p&&!Z(t)?void 0:e(this,0===t?0:t)}:"has"==t?function(t){return!(p&&!Z(t))&&e(this,0===t?0:t)}:function(t,l){return e(this,0===t?0:t,l),this})};if(o(t,!s(X)||!(p||V.forEach&&!b((function(){(new X).entries().next()})))))y=l.getConstructor(e,t,G,g),a.enable();else if(o(t,!0)){var R=new y,f=R[g](p?{}:-0,1)!=R,Y=b((function(){R.has(1)})),S=h((function(t){new X(t)})),v=!p&&b((function(){for(var t=new X,e=5;e--;)t[g](e,e);return!t.has(-0)}));S||((y=e((function(t,e){u(t,V);var l=I(new X,t,y);return null!=e&&r(e,l[g],{that:l,AS_ENTRIES:G}),l}))).prototype=V,V.constructor=y),(Y||v)&&(C("delete"),C("has"),G&&C("get")),(v||f)&&C(g),p&&V.clear&&delete V.clear}return W[t]=y,n({global:!0,forced:y!=X},W),m(y,t),p||l.setStrong(y,t,G),y}},function(t,e,l){var n=l(4),i=l(12),c=l(40),o=l(148),d=Object.isExtensible,a=n((function(){d(1)}));t.exports=a||o?function(t){return!!i(t)&&((!o||"ArrayBuffer"!=c(t))&&(!d||d(t)))}:d},function(t,e,l){var n=l(10),i=l(12),c=l(51);t.exports=function(t,e,l){var o,d;return c&&n(o=e.constructor)&&o!==l&&i(d=o.prototype)&&d!==l.prototype&&c(t,d),t}},function(t,e){var l=Math.expm1,n=Math.exp;t.exports=!l||l(10)>22025.465794806718||l(10)<22025.465794806718||-2e-17!=l(-2e-17)?function(t){return 0==(t=+t)?t:t>-1e-6&&t<1e-6?t+t*t/2:n(t)-1}:l},function(t,e){t.exports="\t\n\v\f\r \u2028\u2029\ufeff"},function(t,e,l){"use strict";var n=l(24),i=l(1),c=l(4),o=l(143);t.exports=n||!c((function(){if(!(o&&o<535)){var t=Math.random();__defineSetter__.call(null,t,(function(){})),delete i[t]}}))},function(t,e,l){var n,i,c,o,d=l(1),a=l(18),r=l(22),u=l(10),s=l(15),Z=l(4),b=l(170),h=l(60),m=l(102),I=l(94),G=l(193),p=l(78),g=d.setImmediate,X=d.clearImmediate,V=d.process,y=d.Dispatch,W=d.Function,C=d.MessageChannel,R=d.String,f=0,Y={};try{n=d.location}catch(t){}var S=function(t){if(s(Y,t)){var e=Y[t];delete Y[t],e()}},v=function(t){return function(){S(t)}},K=function(t){S(t.data)},N=function(t){d.postMessage(R(t),n.protocol+"//"+n.host)};g&&X||(g=function(t){I(arguments.length,1);var e=u(t)?t:W(t),l=h(arguments,1);return Y[++f]=function(){a(e,void 0,l)},i(f),f},X=function(t){delete Y[t]},p?i=function(t){V.nextTick(v(t))}:y&&y.now?i=function(t){y.now(v(t))}:C&&!G?(o=(c=new C).port2,c.port1.onmessage=K,i=r(o.postMessage,o)):d.addEventListener&&u(d.postMessage)&&!d.importScripts&&n&&"file:"!==n.protocol&&!Z(N)?(i=N,d.addEventListener("message",K,!1)):i="onreadystatechange"in m("script")?function(t){b.appendChild(m("script")).onreadystatechange=function(){b.removeChild(this),S(t)}}:function(t){setTimeout(v(t),0)}),t.exports={set:g,clear:X}},function(t,e,l){var n=l(5),i=l(15),c=l(36),o=l(153),d=RegExp.prototype;t.exports=function(t){var e=t.flags;return void 0!==e||"flags"in d||i(t,"flags")||!c(d,t)?e:n(o,t)}},function(t,e,l){var n=l(4),i=l(1).RegExp,c=n((function(){var t=i("a","y");return t.lastIndex=2,null!=t.exec("abcd")})),o=c||n((function(){return!i("a","y").sticky})),d=c||n((function(){var t=i("^r","gy");return t.lastIndex=2,null!=t.exec("str")}));t.exports={BROKEN_CARET:d,MISSED_STICKY:o,UNSUPPORTED_Y:c}},function(t,e,l){"use strict";var n,i,c=l(5),o=l(3),d=l(14),a=l(153),r=l(121),u=l(63),s=l(29),Z=l(20).get,b=l(199),h=l(200),m=u("native-string-replace",String.prototype.replace),I=RegExp.prototype.exec,G=I,p=o("".charAt),g=o("".indexOf),X=o("".replace),V=o("".slice),y=(i=/b*/g,c(I,n=/a/,"a"),c(I,i,"a"),0!==n.lastIndex||0!==i.lastIndex),W=r.BROKEN_CARET,C=void 0!==/()??/.exec("")[1];(y||C||W||b||h)&&(G=function(t){var e,l,n,i,o,r,u,b=this,h=Z(b),R=d(t),f=h.raw;if(f)return f.lastIndex=b.lastIndex,e=c(G,f,R),b.lastIndex=f.lastIndex,e;var Y=h.groups,S=W&&b.sticky,v=c(a,b),K=b.source,N=0,J=R;if(S&&(v=X(v,"y",""),-1===g(v,"g")&&(v+="g"),J=V(R,b.lastIndex),b.lastIndex>0&&(!b.multiline||b.multiline&&"\n"!==p(R,b.lastIndex-1))&&(K="(?: "+K+")",J=" "+J,N++),l=new RegExp("^(?:"+K+")",v)),C&&(l=new RegExp("^"+K+"$(?!\\s)",v)),y&&(n=b.lastIndex),i=c(I,S?l:b,J),S?i?(i.input=V(i.input,N),i[0]=V(i[0],N),i.index=b.lastIndex,b.lastIndex+=i[0].length):b.lastIndex=0:y&&i&&(b.lastIndex=b.global?i.index+i[0].length:n),C&&i&&i.length>1&&c(m,i[0],l,(function(){for(o=1;o<arguments.length-2;o++)void 0===arguments[o]&&(i[o]=void 0)})),i&&Y)for(i.groups=r=s(null),o=0;o<Y.length;o++)r[(u=Y[o])[0]]=i[u[1]];return i}),t.exports=G},function(t,e,l){"use strict";l(154);var n=l(3),i=l(19),c=l(122),o=l(4),d=l(7),a=l(28),r=d("species"),u=RegExp.prototype;t.exports=function(t,e,l,s){var Z=d(t),b=!o((function(){var e={};return e[Z]=function(){return 7},7!=""[t](e)})),h=b&&!o((function(){var e=!1,l=/a/;return"split"===t&&((l={}).constructor={},l.constructor[r]=function(){return l},l.flags="",l[Z]=/./[Z]),l.exec=function(){return e=!0,null},l[Z](""),!e}));if(!b||!h||l){var m=n(/./[Z]),I=e(Z,""[t],(function(t,e,l,i,o){var d=n(t),a=e.exec;return a===c||a===u.exec?b&&!o?{done:!0,value:m(e,l,i)}:{done:!0,value:d(l,e,i)}:{done:!1}}));i(String.prototype,t,I[0]),i(u,Z,I[1])}s&&a(u[Z],"sham",!0)}},function(t,e,l){"use strict";var n=l(82).charAt;t.exports=function(t,e,l){return e+(l?n(t,e).length:1)}},function(t,e,l){var n=l(17),i=l(33),c=n.TYPED_ARRAY_CONSTRUCTOR,o=n.aTypedArrayConstructor;t.exports=function(t){return o(i(t,t[c]))}},function(t,e,l){var n,i,c=l(1),o=l(101),d=l(10),a=l(29),r=l(32),u=l(19),s=l(7),Z=l(24),b=s("asyncIterator"),h=c.AsyncIterator,m=o.AsyncIteratorPrototype;if(m)n=m;else if(d(h))n=h.prototype;else if(o.USE_FUNCTION_CONSTRUCTOR||c.USE_FUNCTION_CONSTRUCTOR)try{i=r(r(r(Function("return async function*(){}()")()))),r(i)===Object.prototype&&(n=i)}catch(t){}n?Z&&(n=a(n)):n={},d(n[b])||u(n,b,(function(){return this})),t.exports=n},function(t,e,l){"use strict";var n=l(5),i=l(6),c=l(2);t.exports=function(){for(var t,e=c(this),l=i(e.delete),o=!0,d=0,a=arguments.length;d<a;d++)t=n(l,e,arguments[d]),o=o&&t;return!!o}},function(t,e,l){"use strict";var n=l(22),i=l(5),c=l(6),o=l(112),d=l(8),a=[].push;t.exports=function(t){var e,l,r,u,s=arguments.length,Z=s>1?arguments[1]:void 0;return o(this),(e=void 0!==Z)&&c(Z),null==t?new this:(l=[],e?(r=0,u=n(Z,s>2?arguments[2]:void 0),d(t,(function(t){i(a,l,u(t,r++))}))):d(t,a,{that:l}),new this(l))}},function(t,e,l){"use strict";var n=l(60);t.exports=function(){return new this(n(arguments))}},function(t,e,l){var n=l(1),i=l(5),c=l(12),o=l(71),d=l(27),a=l(165),r=l(7),u=n.TypeError,s=r("toPrimitive");t.exports=function(t,e){if(!c(t)||o(t))return t;var l,n=d(t,s);if(n){if(void 0===e&&(e="default"),l=i(n,t,e),!c(l)||o(l))return l;throw u("Can't convert object to primitive value")}return void 0===e&&(e="number"),a(t,e)}},function(t,e,l){var n=l(1),i=Object.defineProperty;t.exports=function(t,e){try{i(n,t,{value:e,configurable:!0,writable:!0})}catch(l){n[t]=e}return e}},function(t,e,l){var n=l(15),i=l(133),c=l(31),o=l(16);t.exports=function(t,e,l){for(var d=i(e),a=o.f,r=c.f,u=0;u<d.length;u++){var s=d[u];n(t,s)||l&&n(l,s)||a(t,s,r(e,s))}}},function(t,e,l){var n=l(11),i=l(3),c=l(57),o=l(105),d=l(2),a=i([].concat);t.exports=n("Reflect","ownKeys")||function(t){var e=c.f(d(t)),l=o.f;return l?a(e,l(t)):e}},function(t,e){t.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},function(t,e,l){var n={};n[l(7)("toStringTag")]="z",t.exports="[object z]"===String(n)},function(t,e,l){var n=l(40),i=l(34),c=l(57).f,o=l(89),d="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];t.exports.f=function(t){return d&&"Window"==n(t)?function(t){try{return c(t)}catch(t){return o(d)}}(t):c(i(t))}},function(t,e,l){"use strict";var n=l(13),i=l(49),c=l(21);t.exports=function(t){for(var e=n(this),l=c(e),o=arguments.length,d=i(o>1?arguments[1]:void 0,l),a=o>2?arguments[2]:void 0,r=void 0===a?l:i(a,l);r>d;)e[d++]=t;return e}},function(t,e,l){var n=l(2),i=l(107);t.exports=function(t,e,l,c){try{return c?e(n(l)[0],l[1]):e(l)}catch(e){i(t,"throw",e)}}},function(t,e,l){var n=l(7),i=l(91),c=n("iterator"),o=Array.prototype;t.exports=function(t){return void 0!==t&&(i.Array===t||o[c]===t)}},function(t,e,l){"use strict";var n=l(0),i=l(5),c=l(24),o=l(74),d=l(10),a=l(77),r=l(32),u=l(51),s=l(41),Z=l(28),b=l(19),h=l(7),m=l(91),I=l(92),G=o.PROPER,p=o.CONFIGURABLE,g=I.IteratorPrototype,X=I.BUGGY_SAFARI_ITERATORS,V=h("iterator"),y=function(){return this};t.exports=function(t,e,l,o,h,I,W){a(l,e,o);var C,R,f,Y=function(t){if(t===h&&J)return J;if(!X&&t in K)return K[t];switch(t){case"keys":case"values":case"entries":return function(){return new l(this,t)}}return function(){return new l(this)}},S=e+" Iterator",v=!1,K=t.prototype,N=K[V]||K["@@iterator"]||h&&K[h],J=!X&&N||Y(h),H="Array"==e&&K.entries||N;if(H&&(C=r(H.call(new t)))!==Object.prototype&&C.next&&(c||r(C)===g||(u?u(C,g):d(C[V])||b(C,V,y)),s(C,S,!0,!0),c&&(m[S]=y)),G&&"values"==h&&N&&"values"!==N.name&&(!c&&p?Z(K,"name","values"):(v=!0,J=function(){return i(N,this)})),h)if(R={values:Y("values"),keys:I?J:Y("keys"),entries:Y("entries")},W)for(f in R)(X||v||!(f in K))&&b(K,f,R[f]);else n({target:e,proto:!0,forced:X||v},R);return c&&!W||K[V]===J||b(K,V,J,{name:h}),m[e]=J,R}},function(t,e,l){var n=l(4);t.exports=!n((function(){function t(){}return t.prototype.constructor=null,Object.getPrototypeOf(new t)!==t.prototype}))},function(t,e,l){var n=l(89),i=Math.floor,c=function(t,e){var l=t.length,a=i(l/2);return l<8?o(t,e):d(t,c(n(t,0,a),e),c(n(t,a),e),e)},o=function(t,e){for(var l,n,i=t.length,c=1;c<i;){for(n=c,l=t[c];n&&e(t[n-1],l)>0;)t[n]=t[--n];n!==c++&&(t[n]=l)}return t},d=function(t,e,l,n){for(var i=e.length,c=l.length,o=0,d=0;o<i||d<c;)t[o+d]=o<i&&d<c?n(e[o],l[d])<=0?e[o++]:l[d++]:o<i?e[o++]:l[d++];return t};t.exports=c},function(t,e,l){var n=l(48).match(/AppleWebKit\/(\d+)\./);t.exports=!!n&&+n[1]},function(t,e){t.exports="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof DataView},function(t,e,l){var n=l(3),i=l(37),c=l(14),o=l(146),d=l(26),a=n(o),r=n("".slice),u=Math.ceil,s=function(t){return function(e,l,n){var o,s,Z=c(d(e)),b=i(l),h=Z.length,m=void 0===n?" ":c(n);return b<=h||""==m?Z:((s=a(m,u((o=b-h)/m.length))).length>o&&(s=r(s,0,o)),t?Z+s:s+Z)}};t.exports={start:s(!1),end:s(!0)}},function(t,e,l){"use strict";var n=l(1),i=l(35),c=l(14),o=l(26),d=n.RangeError;t.exports=function(t){var e=c(o(this)),l="",n=i(t);if(n<0||n==1/0)throw d("Wrong number of repetitions");for(;n>0;(n>>>=1)&&(e+=e))1&n&&(l+=e);return l}},function(t,e,l){l(287)},function(t,e,l){var n=l(4);t.exports=n((function(){if("function"==typeof ArrayBuffer){var t=new ArrayBuffer(8);Object.isExtensible(t)&&Object.defineProperty(t,"a",{value:8})}}))},function(t,e){t.exports=Math.sign||function(t){return 0==(t=+t)||t!=t?t:t<0?-1:1}},function(t,e,l){var n=l(3);t.exports=n(1..valueOf)},function(t,e,l){var n=l(12),i=Math.floor;t.exports=Number.isInteger||function(t){return!n(t)&&isFinite(t)&&i(t)===t}},function(t,e,l){var n=l(1),i=l(4),c=l(3),o=l(14),d=l(79).trim,a=l(117),r=n.parseInt,u=n.Symbol,s=u&&u.iterator,Z=/^[+-]?0x/i,b=c(Z.exec),h=8!==r(a+"08")||22!==r(a+"0x16")||s&&!i((function(){r(Object(s))}));t.exports=h?function(t,e){var l=d(o(t));return r(l,e>>>0||(b(Z,l)?16:10))}:r},function(t,e,l){"use strict";var n=l(2);t.exports=function(){var t=n(this),e="";return t.hasIndices&&(e+="d"),t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.dotAll&&(e+="s"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e}},function(t,e,l){"use strict";var n=l(0),i=l(122);n({target:"RegExp",proto:!0,forced:/./.exec!==i},{exec:i})},function(t,e,l){var n=l(1),i=l(96),c=n.TypeError;t.exports=function(t){if(i(t))throw c("The method doesn't accept regular expressions");return t}},function(t,e,l){var n=l(7)("match");t.exports=function(t){var e=/./;try{"/./"[t](e)}catch(l){try{return e[n]=!1,"/./"[t](e)}catch(t){}}return!1}},function(t,e,l){var n=l(74).PROPER,i=l(4),c=l(117);t.exports=function(t){return i((function(){return!!c[t]()||"
"!=="
"[t]()||n&&c[t].name!==t}))}},function(t,e,l){var n=l(1),i=l(4),c=l(108),o=l(17).NATIVE_ARRAY_BUFFER_VIEWS,d=n.ArrayBuffer,a=n.Int8Array;t.exports=!o||!i((function(){a(1)}))||!i((function(){new a(-1)}))||!c((function(t){new a,new a(null),new a(1.5),new a(t)}),!0)||i((function(){return 1!==new a(new d(2),1,void 0).length}))},function(t,e,l){l(449)},function(t,e,l){"use strict";var n=l(1),i=l(5),c=l(6),o=l(10),d=l(2),a=n.TypeError;t.exports=function(t,e){var l,n=d(this),r=c(n.get),u=c(n.has),s=c(n.set),Z=arguments.length>2?arguments[2]:void 0;if(!o(e)&&!o(Z))throw a("At least one callback required");return i(u,n,t)?(l=i(r,n,t),o(e)&&(l=e(l),i(s,n,t,l))):o(Z)&&(l=Z(),i(s,n,t,l)),l}},function(t,e,l){"use strict";var n=l(20),i=l(77),c=l(15),o=l(75),d=l(13),a=n.set,r=n.getterFor("Object Iterator");t.exports=i((function(t,e){var l=d(t);a(this,{type:"Object Iterator",mode:e,object:l,keys:o(l),index:0})}),"Object",(function(){for(var t=r(this),e=t.keys;;){if(null===e||t.index>=e.length)return t.object=t.keys=null,{value:void 0,done:!0};var l=e[t.index++],n=t.object;if(c(n,l)){switch(t.mode){case"keys":return{value:l,done:!1};case"values":return{value:n[l],done:!1}}return{value:[l,n[l]],done:!1}}}}))},function(t,e,l){var n=l(1),i=l(10),c=l(7)("observable"),o=n.Observable,d=o&&o.prototype;t.exports=!(i(o)&&i(o.from)&&i(o.of)&&i(d.subscribe)&&i(d[c]))},function(t,e){var l;l=function(){return this}();try{l=l||new Function("return this")()}catch(t){"object"==typeof window&&(l=window)}t.exports=l},function(t,e,l){var n=l(72);t.exports=n&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},function(t,e,l){var n=l(1),i=l(5),c=l(10),o=l(12),d=n.TypeError;t.exports=function(t,e){var l,n;if("string"===e&&c(l=t.toString)&&!o(n=i(l,t)))return n;if(c(l=t.valueOf)&&!o(n=i(l,t)))return n;if("string"!==e&&c(l=t.toString)&&!o(n=i(l,t)))return n;throw d("Can't convert object to primitive value")}},function(t,e,l){var n=l(9),i=l(4),c=l(102);t.exports=!n&&!i((function(){return 7!=Object.defineProperty(c("div"),"a",{get:function(){return 7}}).a}))},function(t,e,l){var n=l(9),i=l(4);t.exports=n&&i((function(){return 42!=Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype}))},function(t,e,l){var n=l(1),i=l(10),c=l(103),o=n.WeakMap;t.exports=i(o)&&/native code/.test(c(o))},function(t,e,l){var n=l(3),i=l(15),c=l(34),o=l(87).indexOf,d=l(86),a=n([].push);t.exports=function(t,e){var l,n=c(t),r=0,u=[];for(l in n)!i(d,l)&&i(n,l)&&a(u,l);for(;e.length>r;)i(n,l=e[r++])&&(~o(u,l)||a(u,l));return u}},function(t,e,l){var n=l(11);t.exports=n("document","documentElement")},function(t,e,l){var n=l(7);e.f=n},function(t,e,l){var n=l(5),i=l(11),c=l(7),o=l(19);t.exports=function(){var t=i("Symbol"),e=t&&t.prototype,l=e&&e.valueOf,d=c("toPrimitive");e&&!e[d]&&o(e,d,(function(t){return n(l,this)}))}},function(t,e,l){var n=l(72);t.exports=n&&!!Symbol.for&&!!Symbol.keyFor},function(t,e,l){var n=l(0),i=l(11),c=l(18),o=l(5),d=l(3),a=l(4),r=l(59),u=l(10),s=l(12),Z=l(71),b=l(60),h=l(72),m=i("JSON","stringify"),I=d(/./.exec),G=d("".charAt),p=d("".charCodeAt),g=d("".replace),X=d(1..toString),V=/[\uD800-\uDFFF]/g,y=/^[\uD800-\uDBFF]$/,W=/^[\uDC00-\uDFFF]$/,C=!h||a((function(){var t=i("Symbol")();return"[null]"!=m([t])||"{}"!=m({a:t})||"{}"!=m(Object(t))})),R=a((function(){return'"\\udf06\\ud834"'!==m("\udf06\ud834")||'"\\udead"'!==m("\udead")})),f=function(t,e){var l=b(arguments),n=e;if((s(e)||void 0!==t)&&!Z(t))return r(e)||(e=function(t,e){if(u(n)&&(e=o(n,this,t,e)),!Z(e))return e}),l[1]=e,c(m,null,l)},Y=function(t,e,l){var n=G(l,e-1),i=G(l,e+1);return I(y,t)&&!I(W,i)||I(W,t)&&!I(y,n)?"\\u"+X(p(t,0),16):t};m&&n({target:"JSON",stat:!0,forced:C||R},{stringify:function(t,e,l){var n=b(arguments),i=c(C?f:m,null,n);return R&&"string"==typeof i?g(i,V,Y):i}})},function(t,e,l){"use strict";var n=l(13),i=l(49),c=l(21),o=Math.min;t.exports=[].copyWithin||function(t,e){var l=n(this),d=c(l),a=i(t,d),r=i(e,d),u=arguments.length>2?arguments[2]:void 0,s=o((void 0===u?d:i(u,d))-r,d-a),Z=1;for(r<a&&a<r+s&&(Z=-1,r+=s-1,a+=s-1);s-- >0;)r in l?l[a]=l[r]:delete l[a],a+=Z,r+=Z;return l}},function(t,e,l){"use strict";var n=l(1),i=l(59),c=l(21),o=l(22),d=n.TypeError,a=function(t,e,l,n,r,u,s,Z){for(var b,h,m=r,I=0,G=!!s&&o(s,Z);I<n;){if(I in l){if(b=G?G(l[I],I,e):l[I],u>0&&i(b))h=c(b),m=a(t,e,b,h,m,u-1)-1;else{if(m>=9007199254740991)throw d("Exceed the acceptable array length");t[m]=b}m++}I++}return m};t.exports=a},function(t,e,l){"use strict";var n=l(30).forEach,i=l(50)("forEach");t.exports=i?[].forEach:function(t){return n(this,t,arguments.length>1?arguments[1]:void 0)}},function(t,e,l){"use strict";var n=l(1),i=l(22),c=l(5),o=l(13),d=l(138),a=l(139),r=l(65),u=l(21),s=l(58),Z=l(45),b=l(61),h=n.Array;t.exports=function(t){var e=o(t),l=r(this),n=arguments.length,m=n>1?arguments[1]:void 0,I=void 0!==m;I&&(m=i(m,n>2?arguments[2]:void 0));var G,p,g,X,V,y,W=b(e),C=0;if(!W||this==h&&a(W))for(G=u(e),p=l?new this(G):h(G);G>C;C++)y=I?m(e[C],C):e[C],s(p,C,y);else for(V=(X=Z(e,W)).next,p=l?new this:[];!(g=c(V,X)).done;C++)y=I?d(X,m,[g.value,C],!0):g.value,s(p,C,y);return p.length=C,p}},function(t,e,l){var n=l(1),i=l(10),c=n.String,o=n.TypeError;t.exports=function(t){if("object"==typeof t||i(t))return t;throw o("Can't set "+c(t)+" as a prototype")}},function(t,e,l){"use strict";var n=l(18),i=l(34),c=l(35),o=l(21),d=l(50),a=Math.min,r=[].lastIndexOf,u=!!r&&1/[1].lastIndexOf(1,-0)<0,s=d("lastIndexOf"),Z=u||!s;t.exports=Z?function(t){if(u)return n(r,this,arguments)||0;var e=i(this),l=o(e),d=l-1;for(arguments.length>1&&(d=a(d,c(arguments[1]))),d<0&&(d=l+d);d>=0;d--)if(d in e&&e[d]===t)return d||0;return-1}:r},function(t,e,l){var n=l(48).match(/firefox\/(\d+)/i);t.exports=!!n&&+n[1]},function(t,e,l){var n=l(48);t.exports=/MSIE|Trident/.test(n)},function(t,e,l){var n=l(1),i=l(35),c=l(37),o=n.RangeError;t.exports=function(t){if(void 0===t)return 0;var e=i(t),l=c(e);if(e!==l)throw o("Wrong length or index");return l}},function(t,e,l){"use strict";var n=l(1),i=l(3),c=l(6),o=l(12),d=l(15),a=l(60),r=l(83),u=n.Function,s=i([].concat),Z=i([].join),b={},h=function(t,e,l){if(!d(b,e)){for(var n=[],i=0;i<e;i++)n[i]="a["+i+"]";b[e]=u("C,a","return new C("+Z(n,",")+")")}return b[e](t,l)};t.exports=r?u.bind:function(t){var e=c(this),l=e.prototype,n=a(arguments,1),i=function(){var l=s(n,a(arguments));return this instanceof i?h(e,l.length,l):e.apply(t,l)};return o(l)&&(i.prototype=l),i}},function(t,e,l){"use strict";var n=l(16).f,i=l(29),c=l(46),o=l(22),d=l(42),a=l(8),r=l(140),u=l(66),s=l(9),Z=l(67).fastKey,b=l(20),h=b.set,m=b.getterFor;t.exports={getConstructor:function(t,e,l,r){var u=t((function(t,n){d(t,b),h(t,{type:e,index:i(null),first:void 0,last:void 0,size:0}),s||(t.size=0),null!=n&&a(n,t[r],{that:t,AS_ENTRIES:l})})),b=u.prototype,I=m(e),G=function(t,e,l){var n,i,c=I(t),o=p(t,e);return o?o.value=l:(c.last=o={index:i=Z(e,!0),key:e,value:l,previous:n=c.last,next:void 0,removed:!1},c.first||(c.first=o),n&&(n.next=o),s?c.size++:t.size++,"F"!==i&&(c.index[i]=o)),t},p=function(t,e){var l,n=I(t),i=Z(e);if("F"!==i)return n.index[i];for(l=n.first;l;l=l.next)if(l.key==e)return l};return c(b,{clear:function(){for(var t=I(this),e=t.index,l=t.first;l;)l.removed=!0,l.previous&&(l.previous=l.previous.next=void 0),delete e[l.index],l=l.next;t.first=t.last=void 0,s?t.size=0:this.size=0},delete:function(t){var e=I(this),l=p(this,t);if(l){var n=l.next,i=l.previous;delete e.index[l.index],l.removed=!0,i&&(i.next=n),n&&(n.previous=i),e.first==l&&(e.first=n),e.last==l&&(e.last=i),s?e.size--:this.size--}return!!l},forEach:function(t){for(var e,l=I(this),n=o(t,arguments.length>1?arguments[1]:void 0);e=e?e.next:l.first;)for(n(e.value,e.key,this);e&&e.removed;)e=e.previous},has:function(t){return!!p(this,t)}}),c(b,l?{get:function(t){var e=p(this,t);return e&&e.value},set:function(t,e){return G(this,0===t?0:t,e)}}:{add:function(t){return G(this,t=0===t?0:t,t)}}),s&&n(b,"size",{get:function(){return I(this).size}}),u},setStrong:function(t,e,l){var n=e+" Iterator",i=m(e),c=m(n);r(t,e,(function(t,e){h(this,{type:n,target:t,state:i(t),kind:e,last:void 0})}),(function(){for(var t=c(this),e=t.kind,l=t.last;l&&l.removed;)l=l.previous;return t.target&&(t.last=l=l?l.next:t.state.first)?"keys"==e?{value:l.key,done:!1}:"values"==e?{value:l.value,done:!1}:{value:[l.key,l.value],done:!1}:(t.target=void 0,{value:void 0,done:!0})}),l?"entries":"values",!l,!0),u(e)}}},function(t,e){var l=Math.log;t.exports=Math.log1p||function(t){return(t=+t)>-1e-8&&t<1e-8?t-t*t/2:l(1+t)}},function(t,e,l){var n=l(149),i=Math.abs,c=Math.pow,o=c(2,-52),d=c(2,-23),a=c(2,127)*(2-d),r=c(2,-126);t.exports=Math.fround||function(t){var e,l,c=i(t),u=n(t);return c<r?u*(c/r/d+1/o-1/o)*r*d:(l=(e=(1+d/o)*c)-(e-c))>a||l!=l?u*(1/0):u*l}},function(t,e,l){var n=l(1).isFinite;t.exports=Number.isFinite||function(t){return"number"==typeof t&&n(t)}},function(t,e,l){var n=l(1),i=l(4),c=l(3),o=l(14),d=l(79).trim,a=l(117),r=c("".charAt),u=n.parseFloat,s=n.Symbol,Z=s&&s.iterator,b=1/u(a+"-0")!=-1/0||Z&&!i((function(){u(Object(Z))}));t.exports=b?function(t){var e=d(o(t)),l=u(e);return 0===l&&"-"==r(e,0)?-0:l}:u},function(t,e,l){"use strict";var n=l(9),i=l(3),c=l(5),o=l(4),d=l(75),a=l(105),r=l(100),u=l(13),s=l(84),Z=Object.assign,b=Object.defineProperty,h=i([].concat);t.exports=!Z||o((function(){if(n&&1!==Z({b:1},Z(b({},"a",{enumerable:!0,get:function(){b(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var t={},e={},l=Symbol();return t[l]=7,"abcdefghijklmnopqrst".split("").forEach((function(t){e[t]=t})),7!=Z({},t)[l]||"abcdefghijklmnopqrst"!=d(Z({},e)).join("")}))?function(t,e){for(var l=u(t),i=arguments.length,o=1,Z=a.f,b=r.f;i>o;)for(var m,I=s(arguments[o++]),G=Z?h(d(I),Z(I)):d(I),p=G.length,g=0;p>g;)m=G[g++],n&&!c(b,I,m)||(l[m]=I[m]);return l}:Z},function(t,e,l){var n=l(9),i=l(3),c=l(75),o=l(34),d=i(l(100).f),a=i([].push),r=function(t){return function(e){for(var l,i=o(e),r=c(i),u=r.length,s=0,Z=[];u>s;)l=r[s++],n&&!d(i,l)||a(Z,t?[l,i[l]]:i[l]);return Z}};t.exports={entries:r(!0),values:r(!1)}},function(t,e){t.exports=Object.is||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}},function(t,e,l){var n=l(48);t.exports=/(?:ipad|iphone|ipod).*applewebkit/i.test(n)},function(t,e,l){var n,i,c,o,d,a,r,u,s=l(1),Z=l(22),b=l(31).f,h=l(119).set,m=l(193),I=l(349),G=l(350),p=l(78),g=s.MutationObserver||s.WebKitMutationObserver,X=s.document,V=s.process,y=s.Promise,W=b(s,"queueMicrotask"),C=W&&W.value;C||(n=function(){var t,e;for(p&&(t=V.domain)&&t.exit();i;){e=i.fn,i=i.next;try{e()}catch(t){throw i?o():c=void 0,t}}c=void 0,t&&t.enter()},m||p||G||!g||!X?!I&&y&&y.resolve?((r=y.resolve(void 0)).constructor=y,u=Z(r.then,r),o=function(){u(n)}):p?o=function(){V.nextTick(n)}:(h=Z(h,s),o=function(){h(n)}):(d=!0,a=X.createTextNode(""),new g(n).observe(a,{characterData:!0}),o=function(){a.data=d=!d})),t.exports=C||function(t){var e={fn:t,next:void 0};c&&(c.next=e),i||(i=e,o()),c=e}},function(t,e,l){var n=l(1);t.exports=function(t,e){var l=n.console;l&&l.error&&(1==arguments.length?l.error(t):l.error(t,e))}},function(t,e,l){var n=l(81),i=l(108),c=l(95).CONSTRUCTOR;t.exports=c||!i((function(t){n.all(t).then(void 0,(function(){}))}))},function(t,e,l){var n=l(2),i=l(12),c=l(62);t.exports=function(t,e){if(n(t),i(e)&&e.constructor===t)return e;var l=c.f(t);return(0,l.resolve)(e),l.promise}},function(t,e,l){var n=l(15);t.exports=function(t){return void 0!==t&&(n(t,"value")||n(t,"writable"))}},function(t,e,l){var n=l(4),i=l(1).RegExp;t.exports=n((function(){var t=i(".","s");return!(t.dotAll&&t.exec("\n")&&"s"===t.flags)}))},function(t,e,l){var n=l(4),i=l(1).RegExp;t.exports=n((function(){var t=i("(?<a>b)","g");return"b"!==t.exec("b").groups.a||"bc"!=="b".replace(t,"$<a>c")}))},function(t,e,l){"use strict";var n=l(82).charAt,i=l(14),c=l(20),o=l(140),d=c.set,a=c.getterFor("String Iterator");o(String,"String",(function(t){d(this,{type:"String Iterator",string:i(t),index:0})}),(function(){var t,e=a(this),l=e.string,i=e.index;return i>=l.length?{value:void 0,done:!0}:(t=n(l,i),e.index+=t.length,{value:t,done:!1})}))},function(t,e,l){var n=l(48);t.exports=/Version\/10(?:\.\d+){1,2}(?: [\w./]+)?(?: Mobile\/\w+)? Safari\//.test(n)},function(t,e,l){var n=l(3),i=l(13),c=Math.floor,o=n("".charAt),d=n("".replace),a=n("".slice),r=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,u=/\$([$&'`]|\d{1,2})/g;t.exports=function(t,e,l,n,s,Z){var b=l+t.length,h=n.length,m=u;return void 0!==s&&(s=i(s),m=r),d(Z,m,(function(i,d){var r;switch(o(d,0)){case"$":return"$";case"&":return t;case"`":return a(e,0,l);case"'":return a(e,b);case"<":r=s[a(d,1,-1)];break;default:var u=+d;if(0===u)return i;if(u>h){var Z=c(u/10);return 0===Z?i:Z<=h?void 0===n[Z-1]?o(d,1):n[Z-1]+o(d,1):i}r=n[u-1]}return void 0===r?"":r}))}},function(t,e,l){"use strict";var n=l(79).end,i=l(157);t.exports=i("trimEnd")?function(){return n(this)}:"".trimEnd},function(t,e,l){"use strict";var n=l(79).start,i=l(157);t.exports=i("trimStart")?function(){return n(this)}:"".trimStart},function(t,e,l){var n=l(1),i=l(98),c=n.RangeError;t.exports=function(t,e){var l=i(t);if(l%e)throw c("Wrong offset");return l}},function(t,e,l){var n=l(22),i=l(5),c=l(112),o=l(13),d=l(21),a=l(45),r=l(61),u=l(139),s=l(17).aTypedArrayConstructor;t.exports=function(t){var e,l,Z,b,h,m,I=c(this),G=o(t),p=arguments.length,g=p>1?arguments[1]:void 0,X=void 0!==g,V=r(G);if(V&&!u(V))for(m=(h=a(G,V)).next,G=[];!(b=i(m,h)).done;)G.push(b.value);for(X&&p>2&&(g=n(g,arguments[2])),l=d(G),Z=new(s(I))(l),e=0;l>e;e++)Z[e]=X?g(G[e],e):G[e];return Z}},function(t,e,l){"use strict";var n=l(3),i=l(46),c=l(67).getWeakData,o=l(2),d=l(12),a=l(42),r=l(8),u=l(30),s=l(15),Z=l(20),b=Z.set,h=Z.getterFor,m=u.find,I=u.findIndex,G=n([].splice),p=0,g=function(t){return t.frozen||(t.frozen=new X)},X=function(){this.entries=[]},V=function(t,e){return m(t.entries,(function(t){return t[0]===e}))};X.prototype={get:function(t){var e=V(this,t);if(e)return e[1]},has:function(t){return!!V(this,t)},set:function(t,e){var l=V(this,t);l?l[1]=e:this.entries.push([t,e])},delete:function(t){var e=I(this.entries,(function(e){return e[0]===t}));return~e&&G(this.entries,e,1),!!~e}},t.exports={getConstructor:function(t,e,l,n){var u=t((function(t,i){a(t,Z),b(t,{type:e,id:p++,frozen:void 0}),null!=i&&r(i,t[n],{that:t,AS_ENTRIES:l})})),Z=u.prototype,m=h(e),I=function(t,e,l){var n=m(t),i=c(o(e),!0);return!0===i?g(n).set(e,l):i[n.id]=l,t};return i(Z,{delete:function(t){var e=m(this);if(!d(t))return!1;var l=c(t);return!0===l?g(e).delete(t):l&&s(l,e.id)&&delete l[e.id]},has:function(t){var e=m(this);if(!d(t))return!1;var l=c(t);return!0===l?g(e).has(t):l&&s(l,e.id)}}),i(Z,l?{get:function(t){var e=m(this);if(d(t)){var l=c(t);return!0===l?g(e).get(t):l?l[e.id]:void 0}},set:function(t,e){return I(this,t,e)}}:{add:function(t){return I(this,t,!0)}}),u}}},function(t,e,l){var n=l(5),i=l(210),c=l(2),o=l(45),d=l(27),a=l(7)("asyncIterator");t.exports=function(t,e){var l=arguments.length<2?d(t,a):e;return l?c(n(l,t)):new i(o(t))}},function(t,e,l){"use strict";var n=l(18),i=l(2),c=l(29),o=l(27),d=l(46),a=l(20),r=l(11),u=l(126),s=r("Promise"),Z=a.set,b=a.getterFor("AsyncFromSyncIterator"),h=function(t,e,l){var n=t.done;s.resolve(t.value).then((function(t){e({done:n,value:t})}),l)},m=function(t){Z(this,{type:"AsyncFromSyncIterator",iterator:i(t),next:t.next})};m.prototype=d(c(u),{next:function(t){var e=b(this),l=!!arguments.length;return new s((function(c,o){var d=i(n(e.next,e.iterator,l?[t]:[]));h(d,c,o)}))},return:function(t){var e=b(this).iterator,l=!!arguments.length;return new s((function(c,d){var a=o(e,"return");if(void 0===a)return c({done:!0,value:t});var r=i(n(a,e,l?[t]:[]));h(r,c,d)}))},throw:function(t){var e=b(this).iterator,l=!!arguments.length;return new s((function(c,d){var a=o(e,"throw");if(void 0===a)return d(t);var r=i(n(a,e,l?[t]:[]));h(r,c,d)}))}}),t.exports=m},function(t,e,l){l(147),l(159);var n=l(1),i=l(11),c=l(29),o=l(12),d=n.Object,a=n.TypeError,r=i("Map"),u=i("WeakMap"),s=function(){this.object=null,this.symbol=null,this.primitives=null,this.objectsByIndex=c(null)};s.prototype.get=function(t,e){return this[t]||(this[t]=e())},s.prototype.next=function(t,e,l){var n=l?this.objectsByIndex[t]||(this.objectsByIndex[t]=new u):this.primitives||(this.primitives=new r),i=n.get(e);return i||n.set(e,i=new s),i};var Z=new s;t.exports=function(){var t,e,l=Z,n=arguments.length;for(t=0;t<n;t++)o(e=arguments[t])&&(l=l.next(t,e,!0));if(this===d&&l===Z)throw a("Composite keys must contain a non-primitive component");for(t=0;t<n;t++)o(e=arguments[t])||(l=l.next(t,e,!1));return l}},function(t,e){t.exports=Math.scale||function(t,e,l,n,i){var c=+t,o=+e,d=+l,a=+n,r=+i;return c!=c||o!=o||d!=d||a!=a||r!=r?NaN:c===1/0||c===-1/0?c:(c-o)*(r-a)/(d-o)+a}},function(t,e,l){"use strict";var n=l(5),i=l(6),c=l(2);t.exports=function(){for(var t=c(this),e=i(t.add),l=0,o=arguments.length;l<o;l++)n(e,t,arguments[l]);return t}},function(t,e){t.exports={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}},function(t,e,l){var n=l(102)("span").classList,i=n&&n.constructor&&n.constructor.prototype;t.exports=i===Object.prototype?void 0:i},function(t,e,l){var n=l(1),i=l(18),c=l(10),o=l(48),d=l(60),a=l(94),r=/MSIE .\./.test(o),u=n.Function,s=function(t){return r?function(e,l){var n=a(arguments.length,1)>2,o=c(e)?e:u(e),r=n?d(arguments,2):void 0;return t(n?function(){i(o,this,r)}:o,l)}:t};t.exports={setTimeout:s(n.setTimeout),setInterval:s(n.setInterval)}},function(t,e,l){var n=l(4),i=l(7),c=l(24),o=i("iterator");t.exports=!n((function(){var t=new URL("b?a=1&b=2&c=3","http://a"),e=t.searchParams,l="";return t.pathname="c%20d",e.forEach((function(t,n){e.delete("b"),l+=n+t})),c&&!t.toJSON||!e.sort||"http://a/c%20d?a=1&c=3"!==t.href||"3"!==e.get("c")||"a=1"!==String(new URLSearchParams("?a=1"))||!e[o]||"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"!==l||"x"!==new URL("http://x",void 0).host}))},function(t,e,l){"use strict";l(109);var n=l(0),i=l(1),c=l(5),o=l(3),d=l(9),a=l(217),r=l(19),u=l(46),s=l(41),Z=l(77),b=l(20),h=l(42),m=l(10),I=l(15),G=l(22),p=l(64),g=l(2),X=l(12),V=l(14),y=l(29),W=l(43),C=l(45),R=l(61),f=l(94),Y=l(7),S=l(142),v=Y("iterator"),K=b.set,N=b.getterFor("URLSearchParams"),J=b.getterFor("URLSearchParamsIterator"),H=Object.getOwnPropertyDescriptor,U=function(t){if(!d)return i(t);var e=H(i,t);return e&&e.value},L=U("fetch"),k=U("Request"),T=U("Headers"),B=k&&k.prototype,F=T&&T.prototype,A=i.RegExp,x=i.TypeError,z=i.decodeURIComponent,w=i.encodeURIComponent,Q=o("".charAt),P=o([].join),j=o([].push),M=o("".replace),E=o([].shift),D=o([].splice),O=o("".split),_=o("".slice),q=/\+/g,$=Array(4),tt=function(t){return $[t-1]||($[t-1]=A("((?:%[\\da-f]{2}){"+t+"})","gi"))},et=function(t){try{return z(t)}catch(e){return t}},lt=function(t){var e=M(t,q," "),l=4;try{return z(e)}catch(t){for(;l;)e=M(e,tt(l--),et);return e}},nt=/[!'()~]|%20/g,it={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"},ct=function(t){return it[t]},ot=function(t){return M(w(t),nt,ct)},dt=Z((function(t,e){K(this,{type:"URLSearchParamsIterator",iterator:C(N(t).entries),kind:e})}),"Iterator",(function(){var t=J(this),e=t.kind,l=t.iterator.next(),n=l.value;return l.done||(l.value="keys"===e?n.key:"values"===e?n.value:[n.key,n.value]),l}),!0),at=function(t){this.entries=[],this.url=null,void 0!==t&&(X(t)?this.parseObject(t):this.parseQuery("string"==typeof t?"?"===Q(t,0)?_(t,1):t:V(t)))};at.prototype={type:"URLSearchParams",bindURL:function(t){this.url=t,this.update()},parseObject:function(t){var e,l,n,i,o,d,a,r=R(t);if(r)for(l=(e=C(t,r)).next;!(n=c(l,e)).done;){if(o=(i=C(g(n.value))).next,(d=c(o,i)).done||(a=c(o,i)).done||!c(o,i).done)throw x("Expected sequence with length 2");j(this.entries,{key:V(d.value),value:V(a.value)})}else for(var u in t)I(t,u)&&j(this.entries,{key:u,value:V(t[u])})},parseQuery:function(t){if(t)for(var e,l,n=O(t,"&"),i=0;i<n.length;)(e=n[i++]).length&&(l=O(e,"="),j(this.entries,{key:lt(E(l)),value:lt(P(l,"="))}))},serialize:function(){for(var t,e=this.entries,l=[],n=0;n<e.length;)t=e[n++],j(l,ot(t.key)+"="+ot(t.value));return P(l,"&")},update:function(){this.entries.length=0,this.parseQuery(this.url.query)},updateURL:function(){this.url&&this.url.update()}};var rt=function(){h(this,ut);var t=arguments.length>0?arguments[0]:void 0;K(this,new at(t))},ut=rt.prototype;if(u(ut,{append:function(t,e){f(arguments.length,2);var l=N(this);j(l.entries,{key:V(t),value:V(e)}),l.updateURL()},delete:function(t){f(arguments.length,1);for(var e=N(this),l=e.entries,n=V(t),i=0;i<l.length;)l[i].key===n?D(l,i,1):i++;e.updateURL()},get:function(t){f(arguments.length,1);for(var e=N(this).entries,l=V(t),n=0;n<e.length;n++)if(e[n].key===l)return e[n].value;return null},getAll:function(t){f(arguments.length,1);for(var e=N(this).entries,l=V(t),n=[],i=0;i<e.length;i++)e[i].key===l&&j(n,e[i].value);return n},has:function(t){f(arguments.length,1);for(var e=N(this).entries,l=V(t),n=0;n<e.length;)if(e[n++].key===l)return!0;return!1},set:function(t,e){f(arguments.length,1);for(var l,n=N(this),i=n.entries,c=!1,o=V(t),d=V(e),a=0;a<i.length;a++)(l=i[a]).key===o&&(c?D(i,a--,1):(c=!0,l.value=d));c||j(i,{key:o,value:d}),n.updateURL()},sort:function(){var t=N(this);S(t.entries,(function(t,e){return t.key>e.key?1:-1})),t.updateURL()},forEach:function(t){for(var e,l=N(this).entries,n=G(t,arguments.length>1?arguments[1]:void 0),i=0;i<l.length;)n((e=l[i++]).value,e.key,this)},keys:function(){return new dt(this,"keys")},values:function(){return new dt(this,"values")},entries:function(){return new dt(this,"entries")}},{enumerable:!0}),r(ut,v,ut.entries,{name:"entries"}),r(ut,"toString",(function(){return N(this).serialize()}),{enumerable:!0}),s(rt,"URLSearchParams"),n({global:!0,forced:!a},{URLSearchParams:rt}),!a&&m(T)){var st=o(F.has),Zt=o(F.set),bt=function(t){if(X(t)){var e,l=t.body;if("URLSearchParams"===p(l))return e=t.headers?new T(t.headers):new T,st(e,"content-type")||Zt(e,"content-type","application/x-www-form-urlencoded;charset=UTF-8"),y(t,{body:W(0,V(l)),headers:W(0,e)})}return t};if(m(L)&&n({global:!0,enumerable:!0,noTargetGet:!0,forced:!0},{fetch:function(t){return L(t,arguments.length>1?bt(arguments[1]):{})}}),m(k)){var ht=function(t){return h(this,B),new k(t,arguments.length>1?bt(arguments[1]):{})};B.constructor=ht,ht.prototype=B,n({global:!0,forced:!0,noTargetGet:!0},{Request:ht})}}t.exports={URLSearchParams:rt,getState:N}},function(t,l){t.exports=e},function(t,e,l){l(221),l(224),l(225),l(174),l(226)},function(t,e,l){"use strict";var n=l(0),i=l(1),c=l(5),o=l(3),d=l(24),a=l(9),r=l(72),u=l(4),s=l(15),Z=l(36),b=l(2),h=l(34),m=l(55),I=l(14),G=l(43),p=l(29),g=l(75),X=l(57),V=l(136),y=l(105),W=l(31),C=l(16),R=l(106),f=l(100),Y=l(19),S=l(63),v=l(104),K=l(86),N=l(85),J=l(7),H=l(171),U=l(25),L=l(172),k=l(41),T=l(20),B=l(30).forEach,F=v("hidden"),A=T.set,x=T.getterFor("Symbol"),z=Object.prototype,w=i.Symbol,Q=w&&w.prototype,P=i.TypeError,j=i.QObject,M=W.f,E=C.f,D=V.f,O=f.f,_=o([].push),q=S("symbols"),$=S("op-symbols"),tt=S("wks"),et=!j||!j.prototype||!j.prototype.findChild,lt=a&&u((function(){return 7!=p(E({},"a",{get:function(){return E(this,"a",{value:7}).a}})).a}))?function(t,e,l){var n=M(z,e);n&&delete z[e],E(t,e,l),n&&t!==z&&E(z,e,n)}:E,nt=function(t,e){var l=q[t]=p(Q);return A(l,{type:"Symbol",tag:t,description:e}),a||(l.description=e),l},it=function(t,e,l){t===z&&it($,e,l),b(t);var n=m(e);return b(l),s(q,n)?(l.enumerable?(s(t,F)&&t[F][n]&&(t[F][n]=!1),l=p(l,{enumerable:G(0,!1)})):(s(t,F)||E(t,F,G(1,{})),t[F][n]=!0),lt(t,n,l)):E(t,n,l)},ct=function(t,e){b(t);var l=h(e),n=g(l).concat(rt(l));return B(n,(function(e){a&&!c(ot,l,e)||it(t,e,l[e])})),t},ot=function(t){var e=m(t),l=c(O,this,e);return!(this===z&&s(q,e)&&!s($,e))&&(!(l||!s(this,e)||!s(q,e)||s(this,F)&&this[F][e])||l)},dt=function(t,e){var l=h(t),n=m(e);if(l!==z||!s(q,n)||s($,n)){var i=M(l,n);return!i||!s(q,n)||s(l,F)&&l[F][n]||(i.enumerable=!0),i}},at=function(t){var e=D(h(t)),l=[];return B(e,(function(t){s(q,t)||s(K,t)||_(l,t)})),l},rt=function(t){var e=t===z,l=D(e?$:h(t)),n=[];return B(l,(function(t){!s(q,t)||e&&!s(z,t)||_(n,q[t])})),n};r||(Y(Q=(w=function(){if(Z(Q,this))throw P("Symbol is not a constructor");var t=arguments.length&&void 0!==arguments[0]?I(arguments[0]):void 0,e=N(t),l=function(t){this===z&&c(l,$,t),s(this,F)&&s(this[F],e)&&(this[F][e]=!1),lt(this,e,G(1,t))};return a&&et&<(z,e,{configurable:!0,set:l}),nt(e,t)}).prototype,"toString",(function(){return x(this).tag})),Y(w,"withoutSetter",(function(t){return nt(N(t),t)})),f.f=ot,C.f=it,R.f=ct,W.f=dt,X.f=V.f=at,y.f=rt,H.f=function(t){return nt(J(t),t)},a&&(E(Q,"description",{configurable:!0,get:function(){return x(this).description}}),d||Y(z,"propertyIsEnumerable",ot,{unsafe:!0}))),n({global:!0,wrap:!0,forced:!r,sham:!r},{Symbol:w}),B(g(tt),(function(t){U(t)})),n({target:"Symbol",stat:!0,forced:!r},{useSetter:function(){et=!0},useSimple:function(){et=!1}}),n({target:"Object",stat:!0,forced:!r,sham:!a},{create:function(t,e){return void 0===e?p(t):ct(p(t),e)},defineProperty:it,defineProperties:ct,getOwnPropertyDescriptor:dt}),n({target:"Object",stat:!0,forced:!r},{getOwnPropertyNames:at}),L(),k(w,"Symbol"),K[F]=!0},function(t,e,l){var n=l(1);t.exports=n},function(t,e,l){var n=l(1),i=l(59),c=l(65),o=l(12),d=l(7)("species"),a=n.Array;t.exports=function(t){var e;return i(t)&&(e=t.constructor,(c(e)&&(e===a||i(e.prototype))||o(e)&&null===(e=e[d]))&&(e=void 0)),void 0===e?a:e}},function(t,e,l){var n=l(0),i=l(11),c=l(15),o=l(14),d=l(63),a=l(173),r=d("string-to-symbol-registry"),u=d("symbol-to-string-registry");n({target:"Symbol",stat:!0,forced:!a},{for:function(t){var e=o(t);if(c(r,e))return r[e];var l=i("Symbol")(e);return r[e]=l,u[l]=e,l}})},function(t,e,l){var n=l(0),i=l(15),c=l(71),o=l(73),d=l(63),a=l(173),r=d("symbol-to-string-registry");n({target:"Symbol",stat:!0,forced:!a},{keyFor:function(t){if(!c(t))throw TypeError(o(t)+" is not a symbol");if(i(r,t))return r[t]}})},function(t,e,l){var n=l(0),i=l(72),c=l(4),o=l(105),d=l(13);n({target:"Object",stat:!0,forced:!i||c((function(){o.f(1)}))},{getOwnPropertySymbols:function(t){var e=o.f;return e?e(d(t)):[]}})},function(t,e,l){"use strict";var n=l(0),i=l(9),c=l(1),o=l(3),d=l(15),a=l(10),r=l(36),u=l(14),s=l(16).f,Z=l(132),b=c.Symbol,h=b&&b.prototype;if(i&&a(b)&&(!("description"in h)||void 0!==b().description)){var m={},I=function(){var t=arguments.length<1||void 0===arguments[0]?void 0:u(arguments[0]),e=r(h,this)?new b(t):void 0===t?b():b(t);return""===t&&(m[e]=!0),e};Z(I,b),I.prototype=h,h.constructor=I;var G="Symbol(test)"==String(b("test")),p=o(h.toString),g=o(h.valueOf),X=/^Symbol\((.*)\)[^)]+$/,V=o("".replace),y=o("".slice);s(h,"description",{configurable:!0,get:function(){var t=g(this),e=p(t);if(d(m,t))return"";var l=G?y(e,7,-1):V(e,X,"$1");return""===l?void 0:l}}),n({global:!0,forced:!0},{Symbol:I})}},function(t,e,l){l(25)("asyncIterator")},function(t,e,l){l(25)("hasInstance")},function(t,e,l){l(25)("isConcatSpreadable")},function(t,e,l){l(25)("iterator")},function(t,e,l){l(25)("match")},function(t,e,l){l(25)("matchAll")},function(t,e,l){l(25)("replace")},function(t,e,l){l(25)("search")},function(t,e,l){l(25)("species")},function(t,e,l){l(25)("split")},function(t,e,l){var n=l(25),i=l(172);n("toPrimitive"),i()},function(t,e,l){var n=l(11),i=l(25),c=l(41);i("toStringTag"),c(n("Symbol"),"Symbol")},function(t,e,l){l(25)("unscopables")},function(t,e,l){"use strict";var n=l(0),i=l(1),c=l(4),o=l(59),d=l(12),a=l(13),r=l(21),u=l(58),s=l(76),Z=l(90),b=l(7),h=l(56),m=b("isConcatSpreadable"),I=i.TypeError,G=h>=51||!c((function(){var t=[];return t[m]=!1,t.concat()[0]!==t})),p=Z("concat"),g=function(t){if(!d(t))return!1;var e=t[m];return void 0!==e?!!e:o(t)};n({target:"Array",proto:!0,forced:!G||!p},{concat:function(t){var e,l,n,i,c,o=a(this),d=s(o,0),Z=0;for(e=-1,n=arguments.length;e<n;e++)if(g(c=-1===e?o:arguments[e])){if(Z+(i=r(c))>9007199254740991)throw I("Maximum allowed index exceeded");for(l=0;l<i;l++,Z++)l in c&&u(d,Z,c[l])}else{if(Z>=9007199254740991)throw I("Maximum allowed index exceeded");u(d,Z++,c)}return d.length=Z,d}})},function(t,e,l){var n=l(0),i=l(175),c=l(44);n({target:"Array",proto:!0},{copyWithin:i}),c("copyWithin")},function(t,e,l){"use strict";var n=l(0),i=l(30).every;n({target:"Array",proto:!0,forced:!l(50)("every")},{every:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,e,l){var n=l(0),i=l(137),c=l(44);n({target:"Array",proto:!0},{fill:i}),c("fill")},function(t,e,l){"use strict";var n=l(0),i=l(30).filter;n({target:"Array",proto:!0,forced:!l(90)("filter")},{filter:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,e,l){"use strict";var n=l(0),i=l(30).find,c=l(44),o=!0;"find"in[]&&Array(1).find((function(){o=!1})),n({target:"Array",proto:!0,forced:o},{find:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),c("find")},function(t,e,l){"use strict";var n=l(0),i=l(30).findIndex,c=l(44),o=!0;"findIndex"in[]&&Array(1).findIndex((function(){o=!1})),n({target:"Array",proto:!0,forced:o},{findIndex:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),c("findIndex")},function(t,e,l){"use strict";var n=l(0),i=l(176),c=l(13),o=l(21),d=l(35),a=l(76);n({target:"Array",proto:!0},{flat:function(){var t=arguments.length?arguments[0]:void 0,e=c(this),l=o(e),n=a(e,0);return n.length=i(n,e,e,l,0,void 0===t?1:d(t)),n}})},function(t,e,l){"use strict";var n=l(0),i=l(176),c=l(6),o=l(13),d=l(21),a=l(76);n({target:"Array",proto:!0},{flatMap:function(t){var e,l=o(this),n=d(l);return c(t),(e=a(l,0)).length=i(e,l,l,n,0,1,t,arguments.length>1?arguments[1]:void 0),e}})},function(t,e,l){"use strict";var n=l(0),i=l(177);n({target:"Array",proto:!0,forced:[].forEach!=i},{forEach:i})},function(t,e,l){var n=l(0),i=l(178);n({target:"Array",stat:!0,forced:!l(108)((function(t){Array.from(t)}))},{from:i})},function(t,e,l){"use strict";var n=l(0),i=l(87).includes,c=l(44);n({target:"Array",proto:!0},{includes:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),c("includes")},function(t,e,l){"use strict";var n=l(0),i=l(3),c=l(87).indexOf,o=l(50),d=i([].indexOf),a=!!d&&1/d([1],1,-0)<0,r=o("indexOf");n({target:"Array",proto:!0,forced:a||!r},{indexOf:function(t){var e=arguments.length>1?arguments[1]:void 0;return a?d(this,t,e)||0:c(this,t,e)}})},function(t,e,l){l(0)({target:"Array",stat:!0},{isArray:l(59)})},function(t,e,l){"use strict";var n=l(0),i=l(3),c=l(84),o=l(34),d=l(50),a=i([].join),r=c!=Object,u=d("join",",");n({target:"Array",proto:!0,forced:r||!u},{join:function(t){return a(o(this),void 0===t?",":t)}})},function(t,e,l){var n=l(0),i=l(180);n({target:"Array",proto:!0,forced:i!==[].lastIndexOf},{lastIndexOf:i})},function(t,e,l){"use strict";var n=l(0),i=l(30).map;n({target:"Array",proto:!0,forced:!l(90)("map")},{map:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,e,l){"use strict";var n=l(0),i=l(1),c=l(4),o=l(65),d=l(58),a=i.Array;n({target:"Array",stat:!0,forced:c((function(){function t(){}return!(a.of.call(t)instanceof t)}))},{of:function(){for(var t=0,e=arguments.length,l=new(o(this)?this:a)(e);e>t;)d(l,t,arguments[t++]);return l.length=e,l}})},function(t,e,l){"use strict";var n=l(0),i=l(110).left,c=l(50),o=l(56),d=l(78);n({target:"Array",proto:!0,forced:!c("reduce")||!d&&o>79&&o<83},{reduce:function(t){var e=arguments.length;return i(this,t,e,e>1?arguments[1]:void 0)}})},function(t,e,l){"use strict";var n=l(0),i=l(110).right,c=l(50),o=l(56),d=l(78);n({target:"Array",proto:!0,forced:!c("reduceRight")||!d&&o>79&&o<83},{reduceRight:function(t){return i(this,t,arguments.length,arguments.length>1?arguments[1]:void 0)}})},function(t,e,l){"use strict";var n=l(0),i=l(3),c=l(59),o=i([].reverse),d=[1,2];n({target:"Array",proto:!0,forced:String(d)===String(d.reverse())},{reverse:function(){return c(this)&&(this.length=this.length),o(this)}})},function(t,e,l){"use strict";var n=l(0),i=l(1),c=l(59),o=l(65),d=l(12),a=l(49),r=l(21),u=l(34),s=l(58),Z=l(7),b=l(90),h=l(60),m=b("slice"),I=Z("species"),G=i.Array,p=Math.max;n({target:"Array",proto:!0,forced:!m},{slice:function(t,e){var l,n,i,Z=u(this),b=r(Z),m=a(t,b),g=a(void 0===e?b:e,b);if(c(Z)&&(l=Z.constructor,(o(l)&&(l===G||c(l.prototype))||d(l)&&null===(l=l[I]))&&(l=void 0),l===G||void 0===l))return h(Z,m,g);for(n=new(void 0===l?G:l)(p(g-m,0)),i=0;m<g;m++,i++)m in Z&&s(n,i,Z[m]);return n.length=i,n}})},function(t,e,l){"use strict";var n=l(0),i=l(30).some;n({target:"Array",proto:!0,forced:!l(50)("some")},{some:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,e,l){"use strict";var n=l(0),i=l(3),c=l(6),o=l(13),d=l(21),a=l(14),r=l(4),u=l(142),s=l(50),Z=l(181),b=l(182),h=l(56),m=l(143),I=[],G=i(I.sort),p=i(I.push),g=r((function(){I.sort(void 0)})),X=r((function(){I.sort(null)})),V=s("sort"),y=!r((function(){if(h)return h<70;if(!(Z&&Z>3)){if(b)return!0;if(m)return m<603;var t,e,l,n,i="";for(t=65;t<76;t++){switch(e=String.fromCharCode(t),t){case 66:case 69:case 70:case 72:l=3;break;case 68:case 71:l=4;break;default:l=2}for(n=0;n<47;n++)I.push({k:e+n,v:l})}for(I.sort((function(t,e){return e.v-t.v})),n=0;n<I.length;n++)e=I[n].k.charAt(0),i.charAt(i.length-1)!==e&&(i+=e);return"DGBEFHACIJK"!==i}}));n({target:"Array",proto:!0,forced:g||!X||!V||!y},{sort:function(t){void 0!==t&&c(t);var e=o(this);if(y)return void 0===t?G(e):G(e,t);var l,n,i=[],r=d(e);for(n=0;n<r;n++)n in e&&p(i,e[n]);for(u(i,function(t){return function(e,l){return void 0===l?-1:void 0===e?1:void 0!==t?+t(e,l)||0:a(e)>a(l)?1:-1}}(t)),l=i.length,n=0;n<l;)e[n]=i[n++];for(;n<r;)delete e[n++];return e}})},function(t,e,l){l(66)("Array")},function(t,e,l){"use strict";var n=l(0),i=l(1),c=l(49),o=l(35),d=l(21),a=l(13),r=l(76),u=l(58),s=l(90)("splice"),Z=i.TypeError,b=Math.max,h=Math.min;n({target:"Array",proto:!0,forced:!s},{splice:function(t,e){var l,n,i,s,m,I,G=a(this),p=d(G),g=c(t,p),X=arguments.length;if(0===X?l=n=0:1===X?(l=0,n=p-g):(l=X-2,n=h(b(o(e),0),p-g)),p+l-n>9007199254740991)throw Z("Maximum allowed length exceeded");for(i=r(G,n),s=0;s<n;s++)(m=g+s)in G&&u(i,s,G[m]);if(i.length=n,l<n){for(s=g;s<p-n;s++)I=s+l,(m=s+n)in G?G[I]=G[m]:delete G[I];for(s=p;s>p-n+l;s--)delete G[s-1]}else if(l>n)for(s=p-n;s>g;s--)I=s+l-1,(m=s+n-1)in G?G[I]=G[m]:delete G[I];for(s=0;s<l;s++)G[s+g]=arguments[s+2];return G.length=p-n+l,i}})},function(t,e,l){l(44)("flat")},function(t,e,l){l(44)("flatMap")},function(t,e,l){"use strict";var n=l(0),i=l(1),c=l(111),o=l(66),d=c.ArrayBuffer;n({global:!0,forced:i.ArrayBuffer!==d},{ArrayBuffer:d}),o("ArrayBuffer")},function(t,e,l){var n=l(1).Array,i=Math.abs,c=Math.pow,o=Math.floor,d=Math.log,a=Math.LN2;t.exports={pack:function(t,e,l){var r,u,s,Z=n(l),b=8*l-e-1,h=(1<<b)-1,m=h>>1,I=23===e?c(2,-24)-c(2,-77):0,G=t<0||0===t&&1/t<0?1:0,p=0;for((t=i(t))!=t||t===1/0?(u=t!=t?1:0,r=h):(r=o(d(t)/a),t*(s=c(2,-r))<1&&(r--,s*=2),(t+=r+m>=1?I/s:I*c(2,1-m))*s>=2&&(r++,s/=2),r+m>=h?(u=0,r=h):r+m>=1?(u=(t*s-1)*c(2,e),r+=m):(u=t*c(2,m-1)*c(2,e),r=0));e>=8;)Z[p++]=255&u,u/=256,e-=8;for(r=r<<e|u,b+=e;b>0;)Z[p++]=255&r,r/=256,b-=8;return Z[--p]|=128*G,Z},unpack:function(t,e){var l,n=t.length,i=8*n-e-1,o=(1<<i)-1,d=o>>1,a=i-7,r=n-1,u=t[r--],s=127&u;for(u>>=7;a>0;)s=256*s+t[r--],a-=8;for(l=s&(1<<-a)-1,s>>=-a,a+=e;a>0;)l=256*l+t[r--],a-=8;if(0===s)s=1-d;else{if(s===o)return l?NaN:u?-1/0:1/0;l+=c(2,e),s-=d}return(u?-1:1)*l*c(2,s-e)}}},function(t,e,l){var n=l(0),i=l(17);n({target:"ArrayBuffer",stat:!0,forced:!i.NATIVE_ARRAY_BUFFER_VIEWS},{isView:i.isView})},function(t,e,l){"use strict";var n=l(0),i=l(3),c=l(4),o=l(111),d=l(2),a=l(49),r=l(37),u=l(33),s=o.ArrayBuffer,Z=o.DataView,b=Z.prototype,h=i(s.prototype.slice),m=i(b.getUint8),I=i(b.setUint8);n({target:"ArrayBuffer",proto:!0,unsafe:!0,forced:c((function(){return!new s(2).slice(1,void 0).byteLength}))},{slice:function(t,e){if(h&&void 0===e)return h(d(this),t);for(var l=d(this).byteLength,n=a(t,l),i=a(void 0===e?l:e,l),c=new(u(this,s))(r(i-n)),o=new Z(this),b=new Z(c),G=0;n<i;)I(b,G++,m(o,n++));return c}})},function(t,e,l){l(274)},function(t,e,l){var n=l(0),i=l(111);n({global:!0,forced:!l(144)},{DataView:i.DataView})},function(t,e,l){var n=l(0),i=l(1),c=l(3),o=i.Date,d=c(o.prototype.getTime);n({target:"Date",stat:!0},{now:function(){return d(new o)}})},function(t,e,l){var n=l(0),i=l(277);n({target:"Date",proto:!0,forced:Date.prototype.toISOString!==i},{toISOString:i})},function(t,e,l){"use strict";var n=l(1),i=l(3),c=l(4),o=l(145).start,d=n.RangeError,a=Math.abs,r=Date.prototype,u=r.toISOString,s=i(r.getTime),Z=i(r.getUTCDate),b=i(r.getUTCFullYear),h=i(r.getUTCHours),m=i(r.getUTCMilliseconds),I=i(r.getUTCMinutes),G=i(r.getUTCMonth),p=i(r.getUTCSeconds);t.exports=c((function(){return"0385-07-25T07:06:39.999Z"!=u.call(new Date(-50000000000001))}))||!c((function(){u.call(new Date(NaN))}))?function(){if(!isFinite(s(this)))throw d("Invalid time value");var t=b(this),e=m(this),l=t<0?"-":t>9999?"+":"";return l+o(a(t),l?6:4,0)+"-"+o(G(this)+1,2,0)+"-"+o(Z(this),2,0)+"T"+o(h(this),2,0)+":"+o(I(this),2,0)+":"+o(p(this),2,0)+"."+o(e,3,0)+"Z"}:u},function(t,e,l){"use strict";var n=l(0),i=l(4),c=l(13),o=l(130);n({target:"Date",proto:!0,forced:i((function(){return null!==new Date(NaN).toJSON()||1!==Date.prototype.toJSON.call({toISOString:function(){return 1}})}))},{toJSON:function(t){var e=c(this),l=o(e,"number");return"number"!=typeof l||isFinite(l)?e.toISOString():null}})},function(t,e,l){var n=l(15),i=l(19),c=l(280),o=l(7)("toPrimitive"),d=Date.prototype;n(d,o)||i(d,o,c)},function(t,e,l){"use strict";var n=l(1),i=l(2),c=l(165),o=n.TypeError;t.exports=function(t){if(i(this),"string"===t||"default"===t)t="string";else if("number"!==t)throw o("Incorrect hint");return c(this,t)}},function(t,e,l){var n=l(3),i=l(19),c=Date.prototype,o=n(c.toString),d=n(c.getTime);"Invalid Date"!=String(new Date(NaN))&&i(c,"toString",(function(){var t=d(this);return t==t?o(this):"Invalid Date"}))},function(t,e,l){var n=l(0),i=l(184);n({target:"Function",proto:!0,forced:Function.bind!==i},{bind:i})},function(t,e,l){"use strict";var n=l(10),i=l(12),c=l(16),o=l(32),d=l(7)("hasInstance"),a=Function.prototype;d in a||c.f(a,d,{value:function(t){if(!n(this)||!i(t))return!1;var e=this.prototype;if(!i(e))return t instanceof this;for(;t=o(t);)if(e===t)return!0;return!1}})},function(t,e,l){var n=l(9),i=l(74).EXISTS,c=l(3),o=l(16).f,d=Function.prototype,a=c(d.toString),r=/function\b(?:\s|\/\*[\S\s]*?\*\/|\/\/[^\n\r]*[\n\r]+)*([^\s(/]*)/,u=c(r.exec);n&&!i&&o(d,"name",{configurable:!0,get:function(){try{return u(r,a(this))[1]}catch(t){return""}}})},function(t,e,l){l(0)({global:!0},{globalThis:l(1)})},function(t,e,l){var n=l(1);l(41)(n.JSON,"JSON",!0)},function(t,e,l){"use strict";l(113)("Map",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),l(185))},function(t,e,l){var n=l(0),i=l(186),c=Math.acosh,o=Math.log,d=Math.sqrt,a=Math.LN2;n({target:"Math",stat:!0,forced:!c||710!=Math.floor(c(Number.MAX_VALUE))||c(1/0)!=1/0},{acosh:function(t){return(t=+t)<1?NaN:t>94906265.62425156?o(t)+a:i(t-1+d(t-1)*d(t+1))}})},function(t,e,l){var n=l(0),i=Math.asinh,c=Math.log,o=Math.sqrt;n({target:"Math",stat:!0,forced:!(i&&1/i(0)>0)},{asinh:function t(e){return isFinite(e=+e)&&0!=e?e<0?-t(-e):c(e+o(e*e+1)):e}})},function(t,e,l){var n=l(0),i=Math.atanh,c=Math.log;n({target:"Math",stat:!0,forced:!(i&&1/i(-0)<0)},{atanh:function(t){return 0==(t=+t)?t:c((1+t)/(1-t))/2}})},function(t,e,l){var n=l(0),i=l(149),c=Math.abs,o=Math.pow;n({target:"Math",stat:!0},{cbrt:function(t){return i(t=+t)*o(c(t),1/3)}})},function(t,e,l){var n=l(0),i=Math.floor,c=Math.log,o=Math.LOG2E;n({target:"Math",stat:!0},{clz32:function(t){return(t>>>=0)?31-i(c(t+.5)*o):32}})},function(t,e,l){var n=l(0),i=l(116),c=Math.cosh,o=Math.abs,d=Math.E;n({target:"Math",stat:!0,forced:!c||c(710)===1/0},{cosh:function(t){var e=i(o(t)-1)+1;return(e+1/(e*d*d))*(d/2)}})},function(t,e,l){var n=l(0),i=l(116);n({target:"Math",stat:!0,forced:i!=Math.expm1},{expm1:i})},function(t,e,l){l(0)({target:"Math",stat:!0},{fround:l(187)})},function(t,e,l){var n=l(0),i=Math.hypot,c=Math.abs,o=Math.sqrt;n({target:"Math",stat:!0,forced:!!i&&i(1/0,NaN)!==1/0},{hypot:function(t,e){for(var l,n,i=0,d=0,a=arguments.length,r=0;d<a;)r<(l=c(arguments[d++]))?(i=i*(n=r/l)*n+1,r=l):i+=l>0?(n=l/r)*n:l;return r===1/0?1/0:r*o(i)}})},function(t,e,l){var n=l(0),i=l(4),c=Math.imul;n({target:"Math",stat:!0,forced:i((function(){return-5!=c(4294967295,5)||2!=c.length}))},{imul:function(t,e){var l=+t,n=+e,i=65535&l,c=65535&n;return 0|i*c+((65535&l>>>16)*c+i*(65535&n>>>16)<<16>>>0)}})},function(t,e,l){l(0)({target:"Math",stat:!0},{log10:l(299)})},function(t,e){var l=Math.log,n=Math.LOG10E;t.exports=Math.log10||function(t){return l(t)*n}},function(t,e,l){l(0)({target:"Math",stat:!0},{log1p:l(186)})},function(t,e,l){var n=l(0),i=Math.log,c=Math.LN2;n({target:"Math",stat:!0},{log2:function(t){return i(t)/c}})},function(t,e,l){l(0)({target:"Math",stat:!0},{sign:l(149)})},function(t,e,l){var n=l(0),i=l(4),c=l(116),o=Math.abs,d=Math.exp,a=Math.E;n({target:"Math",stat:!0,forced:i((function(){return-2e-17!=Math.sinh(-2e-17)}))},{sinh:function(t){return o(t=+t)<1?(c(t)-c(-t))/2:(d(t-1)-d(-t-1))*(a/2)}})},function(t,e,l){var n=l(0),i=l(116),c=Math.exp;n({target:"Math",stat:!0},{tanh:function(t){var e=i(t=+t),l=i(-t);return e==1/0?1:l==1/0?-1:(e-l)/(c(t)+c(-t))}})},function(t,e,l){l(41)(Math,"Math",!0)},function(t,e,l){var n=l(0),i=Math.ceil,c=Math.floor;n({target:"Math",stat:!0},{trunc:function(t){return(t>0?c:i)(t)}})},function(t,e,l){"use strict";var n=l(9),i=l(1),c=l(3),o=l(88),d=l(19),a=l(15),r=l(115),u=l(36),s=l(71),Z=l(130),b=l(4),h=l(57).f,m=l(31).f,I=l(16).f,G=l(150),p=l(79).trim,g=i.Number,X=g.prototype,V=i.TypeError,y=c("".slice),W=c("".charCodeAt),C=function(t){var e=Z(t,"number");return"bigint"==typeof e?e:R(e)},R=function(t){var e,l,n,i,c,o,d,a,r=Z(t,"number");if(s(r))throw V("Cannot convert a Symbol value to a number");if("string"==typeof r&&r.length>2)if(r=p(r),43===(e=W(r,0))||45===e){if(88===(l=W(r,2))||120===l)return NaN}else if(48===e){switch(W(r,1)){case 66:case 98:n=2,i=49;break;case 79:case 111:n=8,i=55;break;default:return+r}for(o=(c=y(r,2)).length,d=0;d<o;d++)if((a=W(c,d))<48||a>i)return NaN;return parseInt(c,n)}return+r};if(o("Number",!g(" 0o1")||!g("0b1")||g("+0x1"))){for(var f,Y=function(t){var e=arguments.length<1?0:g(C(t)),l=this;return u(X,l)&&b((function(){G(l)}))?r(Object(e),l,Y):e},S=n?h(g):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,isFinite,isInteger,isNaN,isSafeInteger,parseFloat,parseInt,fromString,range".split(","),v=0;S.length>v;v++)a(g,f=S[v])&&!a(Y,f)&&I(Y,f,m(g,f));Y.prototype=X,X.constructor=Y,d(i,"Number",Y)}},function(t,e,l){l(0)({target:"Number",stat:!0},{EPSILON:Math.pow(2,-52)})},function(t,e,l){l(0)({target:"Number",stat:!0},{isFinite:l(188)})},function(t,e,l){l(0)({target:"Number",stat:!0},{isInteger:l(151)})},function(t,e,l){l(0)({target:"Number",stat:!0},{isNaN:function(t){return t!=t}})},function(t,e,l){var n=l(0),i=l(151),c=Math.abs;n({target:"Number",stat:!0},{isSafeInteger:function(t){return i(t)&&c(t)<=9007199254740991}})},function(t,e,l){l(0)({target:"Number",stat:!0},{MAX_SAFE_INTEGER:9007199254740991})},function(t,e,l){l(0)({target:"Number",stat:!0},{MIN_SAFE_INTEGER:-9007199254740991})},function(t,e,l){var n=l(0),i=l(189);n({target:"Number",stat:!0,forced:Number.parseFloat!=i},{parseFloat:i})},function(t,e,l){var n=l(0),i=l(152);n({target:"Number",stat:!0,forced:Number.parseInt!=i},{parseInt:i})},function(t,e,l){"use strict";var n=l(0),i=l(1),c=l(3),o=l(35),d=l(150),a=l(146),r=l(4),u=i.RangeError,s=i.String,Z=Math.floor,b=c(a),h=c("".slice),m=c(1..toFixed),I=function(t,e,l){return 0===e?l:e%2==1?I(t,e-1,l*t):I(t*t,e/2,l)},G=function(t,e,l){for(var n=-1,i=l;++n<6;)i+=e*t[n],t[n]=i%1e7,i=Z(i/1e7)},p=function(t,e){for(var l=6,n=0;--l>=0;)n+=t[l],t[l]=Z(n/e),n=n%e*1e7},g=function(t){for(var e=6,l="";--e>=0;)if(""!==l||0===e||0!==t[e]){var n=s(t[e]);l=""===l?n:l+b("0",7-n.length)+n}return l};n({target:"Number",proto:!0,forced:r((function(){return"0.000"!==m(8e-5,3)||"1"!==m(.9,0)||"1.25"!==m(1.255,2)||"1000000000000000128"!==m(0xde0b6b3a7640080,0)}))||!r((function(){m({})}))},{toFixed:function(t){var e,l,n,i,c=d(this),a=o(t),r=[0,0,0,0,0,0],Z="",m="0";if(a<0||a>20)throw u("Incorrect fraction digits");if(c!=c)return"NaN";if(c<=-1e21||c>=1e21)return s(c);if(c<0&&(Z="-",c=-c),c>1e-21)if(l=(e=function(t){for(var e=0,l=t;l>=4096;)e+=12,l/=4096;for(;l>=2;)e+=1,l/=2;return e}(c*I(2,69,1))-69)<0?c*I(2,-e,1):c/I(2,e,1),l*=4503599627370496,(e=52-e)>0){for(G(r,0,l),n=a;n>=7;)G(r,1e7,0),n-=7;for(G(r,I(10,n,1),0),n=e-1;n>=23;)p(r,1<<23),n-=23;p(r,1<<n),G(r,1,1),p(r,2),m=g(r)}else G(r,0,l),G(r,1<<-e,0),m=g(r)+b("0",a);return m=a>0?Z+((i=m.length)<=a?"0."+b("0",a-i)+m:h(m,0,i-a)+"."+h(m,i-a)):Z+m}})},function(t,e,l){"use strict";var n=l(0),i=l(3),c=l(4),o=l(150),d=i(1..toPrecision);n({target:"Number",proto:!0,forced:c((function(){return"1"!==d(1,void 0)}))||!c((function(){d({})}))},{toPrecision:function(t){return void 0===t?d(o(this)):d(o(this),t)}})},function(t,e,l){var n=l(0),i=l(190);n({target:"Object",stat:!0,forced:Object.assign!==i},{assign:i})},function(t,e,l){l(0)({target:"Object",stat:!0,sham:!l(9)},{create:l(29)})},function(t,e,l){"use strict";var n=l(0),i=l(9),c=l(118),o=l(6),d=l(13),a=l(16);i&&n({target:"Object",proto:!0,forced:c},{__defineGetter__:function(t,e){a.f(d(this),t,{get:o(e),enumerable:!0,configurable:!0})}})},function(t,e,l){var n=l(0),i=l(9),c=l(106).f;n({target:"Object",stat:!0,forced:Object.defineProperties!==c,sham:!i},{defineProperties:c})},function(t,e,l){var n=l(0),i=l(9),c=l(16).f;n({target:"Object",stat:!0,forced:Object.defineProperty!==c,sham:!i},{defineProperty:c})},function(t,e,l){"use strict";var n=l(0),i=l(9),c=l(118),o=l(6),d=l(13),a=l(16);i&&n({target:"Object",proto:!0,forced:c},{__defineSetter__:function(t,e){a.f(d(this),t,{set:o(e),enumerable:!0,configurable:!0})}})},function(t,e,l){var n=l(0),i=l(191).entries;n({target:"Object",stat:!0},{entries:function(t){return i(t)}})},function(t,e,l){var n=l(0),i=l(93),c=l(4),o=l(12),d=l(67).onFreeze,a=Object.freeze;n({target:"Object",stat:!0,forced:c((function(){a(1)})),sham:!i},{freeze:function(t){return a&&o(t)?a(d(t)):t}})},function(t,e,l){var n=l(0),i=l(8),c=l(58);n({target:"Object",stat:!0},{fromEntries:function(t){var e={};return i(t,(function(t,l){c(e,t,l)}),{AS_ENTRIES:!0}),e}})},function(t,e,l){var n=l(0),i=l(4),c=l(34),o=l(31).f,d=l(9),a=i((function(){o(1)}));n({target:"Object",stat:!0,forced:!d||a,sham:!d},{getOwnPropertyDescriptor:function(t,e){return o(c(t),e)}})},function(t,e,l){var n=l(0),i=l(9),c=l(133),o=l(34),d=l(31),a=l(58);n({target:"Object",stat:!0,sham:!i},{getOwnPropertyDescriptors:function(t){for(var e,l,n=o(t),i=d.f,r=c(n),u={},s=0;r.length>s;)void 0!==(l=i(n,e=r[s++]))&&a(u,e,l);return u}})},function(t,e,l){var n=l(0),i=l(4),c=l(136).f;n({target:"Object",stat:!0,forced:i((function(){return!Object.getOwnPropertyNames(1)}))},{getOwnPropertyNames:c})},function(t,e,l){var n=l(0),i=l(4),c=l(13),o=l(32),d=l(141);n({target:"Object",stat:!0,forced:i((function(){o(1)})),sham:!d},{getPrototypeOf:function(t){return o(c(t))}})},function(t,e,l){l(0)({target:"Object",stat:!0},{is:l(192)})},function(t,e,l){var n=l(0),i=l(114);n({target:"Object",stat:!0,forced:Object.isExtensible!==i},{isExtensible:i})},function(t,e,l){var n=l(0),i=l(4),c=l(12),o=l(40),d=l(148),a=Object.isFrozen;n({target:"Object",stat:!0,forced:i((function(){a(1)}))||d},{isFrozen:function(t){return!c(t)||(!(!d||"ArrayBuffer"!=o(t))||!!a&&a(t))}})},function(t,e,l){var n=l(0),i=l(4),c=l(12),o=l(40),d=l(148),a=Object.isSealed;n({target:"Object",stat:!0,forced:i((function(){a(1)}))||d},{isSealed:function(t){return!c(t)||(!(!d||"ArrayBuffer"!=o(t))||!!a&&a(t))}})},function(t,e,l){var n=l(0),i=l(13),c=l(75);n({target:"Object",stat:!0,forced:l(4)((function(){c(1)}))},{keys:function(t){return c(i(t))}})},function(t,e,l){"use strict";var n=l(0),i=l(9),c=l(118),o=l(13),d=l(55),a=l(32),r=l(31).f;i&&n({target:"Object",proto:!0,forced:c},{__lookupGetter__:function(t){var e,l=o(this),n=d(t);do{if(e=r(l,n))return e.get}while(l=a(l))}})},function(t,e,l){"use strict";var n=l(0),i=l(9),c=l(118),o=l(13),d=l(55),a=l(32),r=l(31).f;i&&n({target:"Object",proto:!0,forced:c},{__lookupSetter__:function(t){var e,l=o(this),n=d(t);do{if(e=r(l,n))return e.set}while(l=a(l))}})},function(t,e,l){var n=l(0),i=l(12),c=l(67).onFreeze,o=l(93),d=l(4),a=Object.preventExtensions;n({target:"Object",stat:!0,forced:d((function(){a(1)})),sham:!o},{preventExtensions:function(t){return a&&i(t)?a(c(t)):t}})},function(t,e,l){var n=l(0),i=l(12),c=l(67).onFreeze,o=l(93),d=l(4),a=Object.seal;n({target:"Object",stat:!0,forced:d((function(){a(1)})),sham:!o},{seal:function(t){return a&&i(t)?a(c(t)):t}})},function(t,e,l){l(0)({target:"Object",stat:!0},{setPrototypeOf:l(51)})},function(t,e,l){var n=l(135),i=l(19),c=l(343);n||i(Object.prototype,"toString",c,{unsafe:!0})},function(t,e,l){"use strict";var n=l(135),i=l(64);t.exports=n?{}.toString:function(){return"[object "+i(this)+"]"}},function(t,e,l){var n=l(0),i=l(191).values;n({target:"Object",stat:!0},{values:function(t){return i(t)}})},function(t,e,l){var n=l(0),i=l(189);n({global:!0,forced:parseFloat!=i},{parseFloat:i})},function(t,e,l){var n=l(0),i=l(152);n({global:!0,forced:parseInt!=i},{parseInt:i})},function(t,e,l){l(348),l(353),l(354),l(355),l(356),l(357)},function(t,e,l){"use strict";var n,i,c,o=l(0),d=l(24),a=l(78),r=l(1),u=l(5),s=l(19),Z=l(46),b=l(51),h=l(41),m=l(66),I=l(6),G=l(10),p=l(12),g=l(42),X=l(33),V=l(119).set,y=l(194),W=l(195),C=l(80),R=l(351),f=l(20),Y=l(81),S=l(95),v=l(62),K=S.CONSTRUCTOR,N=S.REJECTION_EVENT,J=S.SUBCLASSING,H=f.getterFor("Promise"),U=f.set,L=Y&&Y.prototype,k=Y,T=L,B=r.TypeError,F=r.document,A=r.process,x=v.f,z=x,w=!!(F&&F.createEvent&&r.dispatchEvent),Q=function(t){var e;return!(!p(t)||!G(e=t.then))&&e},P=function(t,e){var l,n,i,c=e.value,o=1==e.state,d=o?t.ok:t.fail,a=t.resolve,r=t.reject,s=t.domain;try{d?(o||(2===e.rejection&&O(e),e.rejection=1),!0===d?l=c:(s&&s.enter(),l=d(c),s&&(s.exit(),i=!0)),l===t.promise?r(B("Promise-chain cycle")):(n=Q(l))?u(n,l,a,r):a(l)):r(c)}catch(t){s&&!i&&s.exit(),r(t)}},j=function(t,e){t.notified||(t.notified=!0,y((function(){for(var l,n=t.reactions;l=n.get();)P(l,t);t.notified=!1,e&&!t.rejection&&E(t)})))},M=function(t,e,l){var n,i;w?((n=F.createEvent("Event")).promise=e,n.reason=l,n.initEvent(t,!1,!0),r.dispatchEvent(n)):n={promise:e,reason:l},!N&&(i=r["on"+t])?i(n):"unhandledrejection"===t&&W("Unhandled promise rejection",l)},E=function(t){u(V,r,(function(){var e,l=t.facade,n=t.value;if(D(t)&&(e=C((function(){a?A.emit("unhandledRejection",n,l):M("unhandledrejection",l,n)})),t.rejection=a||D(t)?2:1,e.error))throw e.value}))},D=function(t){return 1!==t.rejection&&!t.parent},O=function(t){u(V,r,(function(){var e=t.facade;a?A.emit("rejectionHandled",e):M("rejectionhandled",e,t.value)}))},_=function(t,e,l){return function(n){t(e,n,l)}},q=function(t,e,l){t.done||(t.done=!0,l&&(t=l),t.value=e,t.state=2,j(t,!0))},$=function(t,e,l){if(!t.done){t.done=!0,l&&(t=l);try{if(t.facade===e)throw B("Promise can't be resolved itself");var n=Q(e);n?y((function(){var l={done:!1};try{u(n,e,_($,l,t),_(q,l,t))}catch(e){q(l,e,t)}})):(t.value=e,t.state=1,j(t,!1))}catch(e){q({done:!1},e,t)}}};if(K&&(T=(k=function(t){g(this,T),I(t),u(n,this);var e=H(this);try{t(_($,e),_(q,e))}catch(t){q(e,t)}}).prototype,(n=function(t){U(this,{type:"Promise",done:!1,notified:!1,parent:!1,reactions:new R,rejection:!1,state:0,value:void 0})}).prototype=Z(T,{then:function(t,e){var l=H(this),n=x(X(this,k));return l.parent=!0,n.ok=!G(t)||t,n.fail=G(e)&&e,n.domain=a?A.domain:void 0,0==l.state?l.reactions.add(n):y((function(){P(n,l)})),n.promise}}),i=function(){var t=new n,e=H(t);this.promise=t,this.resolve=_($,e),this.reject=_(q,e)},v.f=x=function(t){return t===k||void 0===t?new i(t):z(t)},!d&&G(Y)&&L!==Object.prototype)){c=L.then,J||s(L,"then",(function(t,e){var l=this;return new k((function(t,e){u(c,l,t,e)})).then(t,e)}),{unsafe:!0});try{delete L.constructor}catch(t){}b&&b(L,T)}o({global:!0,wrap:!0,forced:K},{Promise:k}),h(k,"Promise",!1,!0),m("Promise")},function(t,e,l){var n=l(48),i=l(1);t.exports=/ipad|iphone|ipod/i.test(n)&&void 0!==i.Pebble},function(t,e,l){var n=l(48);t.exports=/web0s(?!.*chrome)/i.test(n)},function(t,e){var l=function(){this.head=null,this.tail=null};l.prototype={add:function(t){var e={item:t,next:null};this.head?this.tail.next=e:this.head=e,this.tail=e},get:function(){var t=this.head;if(t)return this.head=t.next,this.tail===t&&(this.tail=null),t.item}},t.exports=l},function(t,e){t.exports="object"==typeof window&&"object"!=typeof Deno},function(t,e,l){"use strict";var n=l(0),i=l(5),c=l(6),o=l(62),d=l(80),a=l(8);n({target:"Promise",stat:!0,forced:l(196)},{all:function(t){var e=this,l=o.f(e),n=l.resolve,r=l.reject,u=d((function(){var l=c(e.resolve),o=[],d=0,u=1;a(t,(function(t){var c=d++,a=!1;u++,i(l,e,t).then((function(t){a||(a=!0,o[c]=t,--u||n(o))}),r)})),--u||n(o)}));return u.error&&r(u.value),l.promise}})},function(t,e,l){"use strict";var n=l(0),i=l(24),c=l(95).CONSTRUCTOR,o=l(81),d=l(11),a=l(10),r=l(19),u=o&&o.prototype;if(n({target:"Promise",proto:!0,forced:c,real:!0},{catch:function(t){return this.then(void 0,t)}}),!i&&a(o)){var s=d("Promise").prototype.catch;u.catch!==s&&r(u,"catch",s,{unsafe:!0})}},function(t,e,l){"use strict";var n=l(0),i=l(5),c=l(6),o=l(62),d=l(80),a=l(8);n({target:"Promise",stat:!0,forced:l(196)},{race:function(t){var e=this,l=o.f(e),n=l.reject,r=d((function(){var o=c(e.resolve);a(t,(function(t){i(o,e,t).then(l.resolve,n)}))}));return r.error&&n(r.value),l.promise}})},function(t,e,l){"use strict";var n=l(0),i=l(5),c=l(62);n({target:"Promise",stat:!0,forced:l(95).CONSTRUCTOR},{reject:function(t){var e=c.f(this);return i(e.reject,void 0,t),e.promise}})},function(t,e,l){"use strict";var n=l(0),i=l(11),c=l(24),o=l(81),d=l(95).CONSTRUCTOR,a=l(197),r=i("Promise"),u=c&&!d;n({target:"Promise",stat:!0,forced:c||d},{resolve:function(t){return a(u&&this===r?o:this,t)}})},function(t,e,l){"use strict";var n=l(0),i=l(5),c=l(6),o=l(62),d=l(80),a=l(8);n({target:"Promise",stat:!0},{allSettled:function(t){var e=this,l=o.f(e),n=l.resolve,r=l.reject,u=d((function(){var l=c(e.resolve),o=[],d=0,r=1;a(t,(function(t){var c=d++,a=!1;r++,i(l,e,t).then((function(t){a||(a=!0,o[c]={status:"fulfilled",value:t},--r||n(o))}),(function(t){a||(a=!0,o[c]={status:"rejected",reason:t},--r||n(o))}))})),--r||n(o)}));return u.error&&r(u.value),l.promise}})},function(t,e,l){"use strict";var n=l(0),i=l(24),c=l(81),o=l(4),d=l(11),a=l(10),r=l(33),u=l(197),s=l(19),Z=c&&c.prototype;if(n({target:"Promise",proto:!0,real:!0,forced:!!c&&o((function(){Z.finally.call({then:function(){}},(function(){}))}))},{finally:function(t){var e=r(this,d("Promise")),l=a(t);return this.then(l?function(l){return u(e,t()).then((function(){return l}))}:t,l?function(l){return u(e,t()).then((function(){throw l}))}:t)}}),!i&&a(c)){var b=d("Promise").prototype.finally;Z.finally!==b&&s(Z,"finally",b,{unsafe:!0})}},function(t,e,l){var n=l(0),i=l(18),c=l(6),o=l(2);n({target:"Reflect",stat:!0,forced:!l(4)((function(){Reflect.apply((function(){}))}))},{apply:function(t,e,l){return i(c(t),e,o(l))}})},function(t,e,l){var n=l(0),i=l(11),c=l(18),o=l(184),d=l(112),a=l(2),r=l(12),u=l(29),s=l(4),Z=i("Reflect","construct"),b=Object.prototype,h=[].push,m=s((function(){function t(){}return!(Z((function(){}),[],t)instanceof t)})),I=!s((function(){Z((function(){}))})),G=m||I;n({target:"Reflect",stat:!0,forced:G,sham:G},{construct:function(t,e){d(t),a(e);var l=arguments.length<3?t:d(arguments[2]);if(I&&!m)return Z(t,e,l);if(t==l){switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3])}var n=[null];return c(h,n,e),new(c(o,t,n))}var i=l.prototype,s=u(r(i)?i:b),G=c(t,s,e);return r(G)?G:s}})},function(t,e,l){var n=l(0),i=l(9),c=l(2),o=l(55),d=l(16);n({target:"Reflect",stat:!0,forced:l(4)((function(){Reflect.defineProperty(d.f({},1,{value:1}),1,{value:2})})),sham:!i},{defineProperty:function(t,e,l){c(t);var n=o(e);c(l);try{return d.f(t,n,l),!0}catch(t){return!1}}})},function(t,e,l){var n=l(0),i=l(2),c=l(31).f;n({target:"Reflect",stat:!0},{deleteProperty:function(t,e){var l=c(i(t),e);return!(l&&!l.configurable)&&delete t[e]}})},function(t,e,l){var n=l(0),i=l(5),c=l(12),o=l(2),d=l(198),a=l(31),r=l(32);n({target:"Reflect",stat:!0},{get:function t(e,l){var n,u,s=arguments.length<3?e:arguments[2];return o(e)===s?e[l]:(n=a.f(e,l))?d(n)?n.value:void 0===n.get?void 0:i(n.get,s):c(u=r(e))?t(u,l,s):void 0}})},function(t,e,l){var n=l(0),i=l(9),c=l(2),o=l(31);n({target:"Reflect",stat:!0,sham:!i},{getOwnPropertyDescriptor:function(t,e){return o.f(c(t),e)}})},function(t,e,l){var n=l(0),i=l(2),c=l(32);n({target:"Reflect",stat:!0,sham:!l(141)},{getPrototypeOf:function(t){return c(i(t))}})},function(t,e,l){l(0)({target:"Reflect",stat:!0},{has:function(t,e){return e in t}})},function(t,e,l){var n=l(0),i=l(2),c=l(114);n({target:"Reflect",stat:!0},{isExtensible:function(t){return i(t),c(t)}})},function(t,e,l){l(0)({target:"Reflect",stat:!0},{ownKeys:l(133)})},function(t,e,l){var n=l(0),i=l(11),c=l(2);n({target:"Reflect",stat:!0,sham:!l(93)},{preventExtensions:function(t){c(t);try{var e=i("Object","preventExtensions");return e&&e(t),!0}catch(t){return!1}}})},function(t,e,l){var n=l(0),i=l(5),c=l(2),o=l(12),d=l(198),a=l(4),r=l(16),u=l(31),s=l(32),Z=l(43);n({target:"Reflect",stat:!0,forced:a((function(){var t=function(){},e=r.f(new t,"a",{configurable:!0});return!1!==Reflect.set(t.prototype,"a",1,e)}))},{set:function t(e,l,n){var a,b,h,m=arguments.length<4?e:arguments[3],I=u.f(c(e),l);if(!I){if(o(b=s(e)))return t(b,l,n,m);I=Z(0)}if(d(I)){if(!1===I.writable||!o(m))return!1;if(a=u.f(m,l)){if(a.get||a.set||!1===a.writable)return!1;a.value=n,r.f(m,l,a)}else r.f(m,l,Z(0,n))}else{if(void 0===(h=I.set))return!1;i(h,m,n)}return!0}})},function(t,e,l){var n=l(0),i=l(2),c=l(179),o=l(51);o&&n({target:"Reflect",stat:!0},{setPrototypeOf:function(t,e){i(t),c(e);try{return o(t,e),!0}catch(t){return!1}}})},function(t,e,l){var n=l(9),i=l(1),c=l(3),o=l(88),d=l(115),a=l(28),r=l(57).f,u=l(36),s=l(96),Z=l(14),b=l(120),h=l(121),m=l(374),I=l(19),G=l(4),p=l(15),g=l(20).enforce,X=l(66),V=l(7),y=l(199),W=l(200),C=V("match"),R=i.RegExp,f=R.prototype,Y=i.SyntaxError,S=c(f.exec),v=c("".charAt),K=c("".replace),N=c("".indexOf),J=c("".slice),H=/^\?<[^\s\d!#%&*+<=>@^][^\s!#%&*+<=>@^]*>/,U=/a/g,L=/a/g,k=new R(U)!==U,T=h.MISSED_STICKY,B=h.UNSUPPORTED_Y,F=n&&(!k||T||y||W||G((function(){return L[C]=!1,R(U)!=U||R(L)==L||"/a/i"!=R(U,"i")})));if(o("RegExp",F)){for(var A=function(t,e){var l,n,i,c,o,r,h=u(f,this),m=s(t),I=void 0===e,G=[],X=t;if(!h&&m&&I&&t.constructor===A)return t;if((m||u(f,t))&&(t=t.source,I&&(e=b(X))),t=void 0===t?"":Z(t),e=void 0===e?"":Z(e),X=t,y&&"dotAll"in U&&(n=!!e&&N(e,"s")>-1)&&(e=K(e,/s/g,"")),l=e,T&&"sticky"in U&&(i=!!e&&N(e,"y")>-1)&&B&&(e=K(e,/y/g,"")),W&&(t=(c=function(t){for(var e,l=t.length,n=0,i="",c=[],o={},d=!1,a=!1,r=0,u="";n<=l;n++){if("\\"===(e=v(t,n)))e+=v(t,++n);else if("]"===e)d=!1;else if(!d)switch(!0){case"["===e:d=!0;break;case"("===e:S(H,J(t,n+1))&&(n+=2,a=!0),i+=e,r++;continue;case">"===e&&a:if(""===u||p(o,u))throw new Y("Invalid capture group name");o[u]=!0,c[c.length]=[u,r],a=!1,u="";continue}a?u+=e:i+=e}return[i,c]}(t))[0],G=c[1]),o=d(R(t,e),h?this:f,A),(n||i||G.length)&&(r=g(o),n&&(r.dotAll=!0,r.raw=A(function(t){for(var e,l=t.length,n=0,i="",c=!1;n<=l;n++)"\\"!==(e=v(t,n))?c||"."!==e?("["===e?c=!0:"]"===e&&(c=!1),i+=e):i+="[\\s\\S]":i+=e+v(t,++n);return i}(t),l)),i&&(r.sticky=!0),G.length&&(r.groups=G)),t!==X)try{a(o,"source",""===X?"(?:)":X)}catch(t){}return o},x=r(R),z=0;x.length>z;)m(A,R,x[z++]);f.constructor=A,A.prototype=f,I(i,"RegExp",A)}X("RegExp")},function(t,e,l){var n=l(16).f;t.exports=function(t,e,l){l in t||n(t,l,{configurable:!0,get:function(){return e[l]},set:function(t){e[l]=t}})}},function(t,e,l){var n=l(9),i=l(16),c=l(153),o=l(4),d=RegExp.prototype;n&&o((function(){return"sy"!==Object.getOwnPropertyDescriptor(d,"flags").get.call({dotAll:!0,sticky:!0})}))&&i.f(d,"flags",{configurable:!0,get:c})},function(t,e,l){var n=l(1),i=l(9),c=l(121).MISSED_STICKY,o=l(40),d=l(16).f,a=l(20).get,r=RegExp.prototype,u=n.TypeError;i&&c&&d(r,"sticky",{configurable:!0,get:function(){if(this!==r){if("RegExp"===o(this))return!!a(this).sticky;throw u("Incompatible receiver, RegExp required")}}})},function(t,e,l){"use strict";l(154);var n,i,c=l(0),o=l(1),d=l(5),a=l(3),r=l(10),u=l(12),s=(n=!1,(i=/[ac]/).exec=function(){return n=!0,/./.exec.apply(this,arguments)},!0===i.test("abc")&&n),Z=o.Error,b=a(/./.test);c({target:"RegExp",proto:!0,forced:!s},{test:function(t){var e=this.exec;if(!r(e))return b(this,t);var l=d(e,this,t);if(null!==l&&!u(l))throw new Z("RegExp exec method returned something other than an Object or null");return!!l}})},function(t,e,l){"use strict";var n=l(74).PROPER,i=l(19),c=l(2),o=l(14),d=l(4),a=l(120),r=RegExp.prototype.toString,u=d((function(){return"/a/b"!=r.call({source:"a",flags:"b"})})),s=n&&"toString"!=r.name;(u||s)&&i(RegExp.prototype,"toString",(function(){var t=c(this);return"/"+o(t.source)+"/"+o(a(t))}),{unsafe:!0})},function(t,e,l){l(380)},function(t,e,l){"use strict";l(113)("Set",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),l(185))},function(t,e,l){"use strict";var n=l(0),i=l(82).codeAt;n({target:"String",proto:!0},{codePointAt:function(t){return i(this,t)}})},function(t,e,l){"use strict";var n,i=l(0),c=l(3),o=l(31).f,d=l(37),a=l(14),r=l(155),u=l(26),s=l(156),Z=l(24),b=c("".endsWith),h=c("".slice),m=Math.min,I=s("endsWith");i({target:"String",proto:!0,forced:!!(Z||I||(n=o(String.prototype,"endsWith"),!n||n.writable))&&!I},{endsWith:function(t){var e=a(u(this));r(t);var l=arguments.length>1?arguments[1]:void 0,n=e.length,i=void 0===l?n:m(d(l),n),c=a(t);return b?b(e,c,i):h(e,i-c.length,i)===c}})},function(t,e,l){var n=l(0),i=l(1),c=l(3),o=l(49),d=i.RangeError,a=String.fromCharCode,r=String.fromCodePoint,u=c([].join);n({target:"String",stat:!0,forced:!!r&&1!=r.length},{fromCodePoint:function(t){for(var e,l=[],n=arguments.length,i=0;n>i;){if(e=+arguments[i++],o(e,1114111)!==e)throw d(e+" is not a valid code point");l[i]=e<65536?a(e):a(55296+((e-=65536)>>10),e%1024+56320)}return u(l,"")}})},function(t,e,l){"use strict";var n=l(0),i=l(3),c=l(155),o=l(26),d=l(14),a=l(156),r=i("".indexOf);n({target:"String",proto:!0,forced:!a("includes")},{includes:function(t){return!!~r(d(o(this)),d(c(t)),arguments.length>1?arguments[1]:void 0)}})},function(t,e,l){"use strict";var n=l(5),i=l(123),c=l(2),o=l(37),d=l(14),a=l(26),r=l(27),u=l(124),s=l(97);i("match",(function(t,e,l){return[function(e){var l=a(this),i=null==e?void 0:r(e,t);return i?n(i,e,l):new RegExp(e)[t](d(l))},function(t){var n=c(this),i=d(t),a=l(e,n,i);if(a.done)return a.value;if(!n.global)return s(n,i);var r=n.unicode;n.lastIndex=0;for(var Z,b=[],h=0;null!==(Z=s(n,i));){var m=d(Z[0]);b[h]=m,""===m&&(n.lastIndex=u(i,o(n.lastIndex),r)),h++}return 0===h?null:b}]}))},function(t,e,l){"use strict";var n=l(0),i=l(1),c=l(5),o=l(3),d=l(77),a=l(26),r=l(37),u=l(14),s=l(2),Z=l(40),b=l(96),h=l(120),m=l(27),I=l(19),G=l(4),p=l(7),g=l(33),X=l(124),V=l(97),y=l(20),W=l(24),C=p("matchAll"),R=y.set,f=y.getterFor("RegExp String Iterator"),Y=RegExp.prototype,S=i.TypeError,v=o("".indexOf),K=o("".matchAll),N=!!K&&!G((function(){K("a",/./)})),J=d((function(t,e,l,n){R(this,{type:"RegExp String Iterator",regexp:t,string:e,global:l,unicode:n,done:!1})}),"RegExp String",(function(){var t=f(this);if(t.done)return{value:void 0,done:!0};var e=t.regexp,l=t.string,n=V(e,l);return null===n?{value:void 0,done:t.done=!0}:t.global?(""===u(n[0])&&(e.lastIndex=X(l,r(e.lastIndex),t.unicode)),{value:n,done:!1}):(t.done=!0,{value:n,done:!1})})),H=function(t){var e,l,n,i=s(this),c=u(t),o=g(i,RegExp),d=u(h(i));return e=new o(o===RegExp?i.source:i,d),l=!!~v(d,"g"),n=!!~v(d,"u"),e.lastIndex=r(i.lastIndex),new J(e,c,l,n)};n({target:"String",proto:!0,forced:N},{matchAll:function(t){var e,l,n,i,o=a(this);if(null!=t){if(b(t)&&(e=u(a(h(t))),!~v(e,"g")))throw S("`.matchAll` does not allow non-global regexes");if(N)return K(o,t);if(void 0===(n=m(t,C))&&W&&"RegExp"==Z(t)&&(n=H),n)return c(n,t,o)}else if(N)return K(o,t);return l=u(o),i=new RegExp(t,"g"),W?c(H,i,l):i[C](l)}}),W||C in Y||I(Y,C,H)},function(t,e,l){"use strict";var n=l(0),i=l(145).end;n({target:"String",proto:!0,forced:l(202)},{padEnd:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,e,l){"use strict";var n=l(0),i=l(145).start;n({target:"String",proto:!0,forced:l(202)},{padStart:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,e,l){var n=l(0),i=l(3),c=l(34),o=l(13),d=l(14),a=l(21),r=i([].push),u=i([].join);n({target:"String",stat:!0},{raw:function(t){for(var e=c(o(t).raw),l=a(e),n=arguments.length,i=[],s=0;l>s;){if(r(i,d(e[s++])),s===l)return u(i,"");s<n&&r(i,d(arguments[s]))}}})},function(t,e,l){l(0)({target:"String",proto:!0},{repeat:l(146)})},function(t,e,l){"use strict";var n=l(18),i=l(5),c=l(3),o=l(123),d=l(4),a=l(2),r=l(10),u=l(35),s=l(37),Z=l(14),b=l(26),h=l(124),m=l(27),I=l(203),G=l(97),p=l(7)("replace"),g=Math.max,X=Math.min,V=c([].concat),y=c([].push),W=c("".indexOf),C=c("".slice),R="$0"==="a".replace(/./,"$0"),f=!!/./[p]&&""===/./[p]("a","$0");o("replace",(function(t,e,l){var c=f?"$":"$0";return[function(t,l){var n=b(this),c=null==t?void 0:m(t,p);return c?i(c,t,n,l):i(e,Z(n),t,l)},function(t,i){var o=a(this),d=Z(t);if("string"==typeof i&&-1===W(i,c)&&-1===W(i,"$<")){var b=l(e,o,d,i);if(b.done)return b.value}var m=r(i);m||(i=Z(i));var p=o.global;if(p){var R=o.unicode;o.lastIndex=0}for(var f=[];;){var Y=G(o,d);if(null===Y)break;if(y(f,Y),!p)break;""===Z(Y[0])&&(o.lastIndex=h(d,s(o.lastIndex),R))}for(var S,v="",K=0,N=0;N<f.length;N++){for(var J=Z((Y=f[N])[0]),H=g(X(u(Y.index),d.length),0),U=[],L=1;L<Y.length;L++)y(U,void 0===(S=Y[L])?S:String(S));var k=Y.groups;if(m){var T=V([J],U,H,d);void 0!==k&&y(T,k);var B=Z(n(i,void 0,T))}else B=I(J,d,H,U,k,i);H>=K&&(v+=C(d,K,H)+B,K=H+J.length)}return v+C(d,K)}]}),!!d((function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:"7"},t},"7"!=="".replace(t,"$<a>")}))||!R||f)},function(t,e,l){"use strict";var n=l(5),i=l(123),c=l(2),o=l(26),d=l(192),a=l(14),r=l(27),u=l(97);i("search",(function(t,e,l){return[function(e){var l=o(this),i=null==e?void 0:r(e,t);return i?n(i,e,l):new RegExp(e)[t](a(l))},function(t){var n=c(this),i=a(t),o=l(e,n,i);if(o.done)return o.value;var r=n.lastIndex;d(r,0)||(n.lastIndex=0);var s=u(n,i);return d(n.lastIndex,r)||(n.lastIndex=r),null===s?-1:s.index}]}))},function(t,e,l){"use strict";var n=l(18),i=l(5),c=l(3),o=l(123),d=l(96),a=l(2),r=l(26),u=l(33),s=l(124),Z=l(37),b=l(14),h=l(27),m=l(89),I=l(97),G=l(122),p=l(121),g=l(4),X=p.UNSUPPORTED_Y,V=Math.min,y=[].push,W=c(/./.exec),C=c(y),R=c("".slice);o("split",(function(t,e,l){var c;return c="c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length?function(t,l){var c=b(r(this)),o=void 0===l?4294967295:l>>>0;if(0===o)return[];if(void 0===t)return[c];if(!d(t))return i(e,c,t,o);for(var a,u,s,Z=[],h=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":""),I=0,p=new RegExp(t.source,h+"g");(a=i(G,p,c))&&!((u=p.lastIndex)>I&&(C(Z,R(c,I,a.index)),a.length>1&&a.index<c.length&&n(y,Z,m(a,1)),s=a[0].length,I=u,Z.length>=o));)p.lastIndex===a.index&&p.lastIndex++;return I===c.length?!s&&W(p,"")||C(Z,""):C(Z,R(c,I)),Z.length>o?m(Z,0,o):Z}:"0".split(void 0,0).length?function(t,l){return void 0===t&&0===l?[]:i(e,this,t,l)}:e,[function(e,l){var n=r(this),o=null==e?void 0:h(e,t);return o?i(o,e,n,l):i(c,b(n),e,l)},function(t,n){var i=a(this),o=b(t),d=l(c,i,o,n,c!==e);if(d.done)return d.value;var r=u(i,RegExp),h=i.unicode,m=(i.ignoreCase?"i":"")+(i.multiline?"m":"")+(i.unicode?"u":"")+(X?"g":"y"),G=new r(X?"^(?:"+i.source+")":i,m),p=void 0===n?4294967295:n>>>0;if(0===p)return[];if(0===o.length)return null===I(G,o)?[o]:[];for(var g=0,y=0,W=[];y<o.length;){G.lastIndex=X?0:y;var f,Y=I(G,X?R(o,y):o);if(null===Y||(f=V(Z(G.lastIndex+(X?y:0)),o.length))===g)y=s(o,y,h);else{if(C(W,R(o,g,y)),W.length===p)return W;for(var S=1;S<=Y.length-1;S++)if(C(W,Y[S]),W.length===p)return W;y=g=f}}return C(W,R(o,g)),W}]}),!!g((function(){var t=/(?:)/,e=t.exec;t.exec=function(){return e.apply(this,arguments)};var l="ab".split(t);return 2!==l.length||"a"!==l[0]||"b"!==l[1]})),X)},function(t,e,l){"use strict";var n,i=l(0),c=l(3),o=l(31).f,d=l(37),a=l(14),r=l(155),u=l(26),s=l(156),Z=l(24),b=c("".startsWith),h=c("".slice),m=Math.min,I=s("startsWith");i({target:"String",proto:!0,forced:!!(Z||I||(n=o(String.prototype,"startsWith"),!n||n.writable))&&!I},{startsWith:function(t){var e=a(u(this));r(t);var l=d(m(arguments.length>1?arguments[1]:void 0,e.length)),n=a(t);return b?b(e,n,l):h(e,l,l+n.length)===n}})},function(t,e,l){"use strict";var n=l(0),i=l(79).trim;n({target:"String",proto:!0,forced:l(157)("trim")},{trim:function(){return i(this)}})},function(t,e,l){l(397);var n=l(0),i=l(204);n({target:"String",proto:!0,name:"trimEnd",forced:"".trimEnd!==i},{trimEnd:i})},function(t,e,l){var n=l(0),i=l(204);n({target:"String",proto:!0,name:"trimEnd",forced:"".trimRight!==i},{trimRight:i})},function(t,e,l){l(399);var n=l(0),i=l(205);n({target:"String",proto:!0,name:"trimStart",forced:"".trimStart!==i},{trimStart:i})},function(t,e,l){var n=l(0),i=l(205);n({target:"String",proto:!0,name:"trimStart",forced:"".trimLeft!==i},{trimLeft:i})},function(t,e,l){"use strict";var n=l(0),i=l(38);n({target:"String",proto:!0,forced:l(39)("anchor")},{anchor:function(t){return i(this,"a","name",t)}})},function(t,e,l){"use strict";var n=l(0),i=l(38);n({target:"String",proto:!0,forced:l(39)("big")},{big:function(){return i(this,"big","","")}})},function(t,e,l){"use strict";var n=l(0),i=l(38);n({target:"String",proto:!0,forced:l(39)("blink")},{blink:function(){return i(this,"blink","","")}})},function(t,e,l){"use strict";var n=l(0),i=l(38);n({target:"String",proto:!0,forced:l(39)("bold")},{bold:function(){return i(this,"b","","")}})},function(t,e,l){"use strict";var n=l(0),i=l(38);n({target:"String",proto:!0,forced:l(39)("fixed")},{fixed:function(){return i(this,"tt","","")}})},function(t,e,l){"use strict";var n=l(0),i=l(38);n({target:"String",proto:!0,forced:l(39)("fontcolor")},{fontcolor:function(t){return i(this,"font","color",t)}})},function(t,e,l){"use strict";var n=l(0),i=l(38);n({target:"String",proto:!0,forced:l(39)("fontsize")},{fontsize:function(t){return i(this,"font","size",t)}})},function(t,e,l){"use strict";var n=l(0),i=l(38);n({target:"String",proto:!0,forced:l(39)("italics")},{italics:function(){return i(this,"i","","")}})},function(t,e,l){"use strict";var n=l(0),i=l(38);n({target:"String",proto:!0,forced:l(39)("link")},{link:function(t){return i(this,"a","href",t)}})},function(t,e,l){"use strict";var n=l(0),i=l(38);n({target:"String",proto:!0,forced:l(39)("small")},{small:function(){return i(this,"small","","")}})},function(t,e,l){"use strict";var n=l(0),i=l(38);n({target:"String",proto:!0,forced:l(39)("strike")},{strike:function(){return i(this,"strike","","")}})},function(t,e,l){"use strict";var n=l(0),i=l(38);n({target:"String",proto:!0,forced:l(39)("sub")},{sub:function(){return i(this,"sub","","")}})},function(t,e,l){"use strict";var n=l(0),i=l(38);n({target:"String",proto:!0,forced:l(39)("sup")},{sup:function(){return i(this,"sup","","")}})},function(t,e,l){l(52)("Float32",(function(t){return function(e,l,n){return t(this,e,l,n)}}))},function(t,e,l){l(52)("Float64",(function(t){return function(e,l,n){return t(this,e,l,n)}}))},function(t,e,l){l(52)("Int8",(function(t){return function(e,l,n){return t(this,e,l,n)}}))},function(t,e,l){l(52)("Int16",(function(t){return function(e,l,n){return t(this,e,l,n)}}))},function(t,e,l){l(52)("Int32",(function(t){return function(e,l,n){return t(this,e,l,n)}}))},function(t,e,l){l(52)("Uint8",(function(t){return function(e,l,n){return t(this,e,l,n)}}))},function(t,e,l){l(52)("Uint8",(function(t){return function(e,l,n){return t(this,e,l,n)}}),!0)},function(t,e,l){l(52)("Uint16",(function(t){return function(e,l,n){return t(this,e,l,n)}}))},function(t,e,l){l(52)("Uint32",(function(t){return function(e,l,n){return t(this,e,l,n)}}))},function(t,e,l){"use strict";var n=l(3),i=l(17),c=n(l(175)),o=i.aTypedArray;(0,i.exportTypedArrayMethod)("copyWithin",(function(t,e){return c(o(this),t,e,arguments.length>2?arguments[2]:void 0)}))},function(t,e,l){"use strict";var n=l(17),i=l(30).every,c=n.aTypedArray;(0,n.exportTypedArrayMethod)("every",(function(t){return i(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,e,l){"use strict";var n=l(17),i=l(5),c=l(137),o=n.aTypedArray;(0,n.exportTypedArrayMethod)("fill",(function(t){var e=arguments.length;return i(c,o(this),t,e>1?arguments[1]:void 0,e>2?arguments[2]:void 0)}))},function(t,e,l){"use strict";var n=l(17),i=l(30).filter,c=l(426),o=n.aTypedArray;(0,n.exportTypedArrayMethod)("filter",(function(t){var e=i(o(this),t,arguments.length>1?arguments[1]:void 0);return c(this,e)}))},function(t,e,l){var n=l(427),i=l(125);t.exports=function(t,e){return n(i(t),e)}},function(t,e,l){var n=l(21);t.exports=function(t,e){for(var l=0,i=n(e),c=new t(i);i>l;)c[l]=e[l++];return c}},function(t,e,l){"use strict";var n=l(17),i=l(30).find,c=n.aTypedArray;(0,n.exportTypedArrayMethod)("find",(function(t){return i(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,e,l){"use strict";var n=l(17),i=l(30).findIndex,c=n.aTypedArray;(0,n.exportTypedArrayMethod)("findIndex",(function(t){return i(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,e,l){"use strict";var n=l(17),i=l(30).forEach,c=n.aTypedArray;(0,n.exportTypedArrayMethod)("forEach",(function(t){i(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,e,l){"use strict";var n=l(158);(0,l(17).exportTypedArrayStaticMethod)("from",l(207),n)},function(t,e,l){"use strict";var n=l(17),i=l(87).includes,c=n.aTypedArray;(0,n.exportTypedArrayMethod)("includes",(function(t){return i(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,e,l){"use strict";var n=l(17),i=l(87).indexOf,c=n.aTypedArray;(0,n.exportTypedArrayMethod)("indexOf",(function(t){return i(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,e,l){"use strict";var n=l(1),i=l(4),c=l(3),o=l(17),d=l(109),a=l(7)("iterator"),r=n.Uint8Array,u=c(d.values),s=c(d.keys),Z=c(d.entries),b=o.aTypedArray,h=o.exportTypedArrayMethod,m=r&&r.prototype,I=!i((function(){m[a].call([1])})),G=!!m&&m.values&&m[a]===m.values&&"values"===m.values.name,p=function(){return u(b(this))};h("entries",(function(){return Z(b(this))}),I),h("keys",(function(){return s(b(this))}),I),h("values",p,I||!G,{name:"values"}),h(a,p,I||!G,{name:"values"})},function(t,e,l){"use strict";var n=l(17),i=l(3),c=n.aTypedArray,o=n.exportTypedArrayMethod,d=i([].join);o("join",(function(t){return d(c(this),t)}))},function(t,e,l){"use strict";var n=l(17),i=l(18),c=l(180),o=n.aTypedArray;(0,n.exportTypedArrayMethod)("lastIndexOf",(function(t){var e=arguments.length;return i(c,o(this),e>1?[t,arguments[1]]:[t])}))},function(t,e,l){"use strict";var n=l(17),i=l(30).map,c=l(125),o=n.aTypedArray;(0,n.exportTypedArrayMethod)("map",(function(t){return i(o(this),t,arguments.length>1?arguments[1]:void 0,(function(t,e){return new(c(t))(e)}))}))},function(t,e,l){"use strict";var n=l(17),i=l(158),c=n.aTypedArrayConstructor;(0,n.exportTypedArrayStaticMethod)("of",(function(){for(var t=0,e=arguments.length,l=new(c(this))(e);e>t;)l[t]=arguments[t++];return l}),i)},function(t,e,l){"use strict";var n=l(17),i=l(110).left,c=n.aTypedArray;(0,n.exportTypedArrayMethod)("reduce",(function(t){var e=arguments.length;return i(c(this),t,e,e>1?arguments[1]:void 0)}))},function(t,e,l){"use strict";var n=l(17),i=l(110).right,c=n.aTypedArray;(0,n.exportTypedArrayMethod)("reduceRight",(function(t){var e=arguments.length;return i(c(this),t,e,e>1?arguments[1]:void 0)}))},function(t,e,l){"use strict";var n=l(17),i=n.aTypedArray,c=n.exportTypedArrayMethod,o=Math.floor;c("reverse",(function(){for(var t,e=i(this).length,l=o(e/2),n=0;n<l;)t=this[n],this[n++]=this[--e],this[e]=t;return this}))},function(t,e,l){"use strict";var n=l(1),i=l(5),c=l(17),o=l(21),d=l(206),a=l(13),r=l(4),u=n.RangeError,s=n.Int8Array,Z=s&&s.prototype,b=Z&&Z.set,h=c.aTypedArray,m=c.exportTypedArrayMethod,I=!r((function(){var t=new Uint8ClampedArray(2);return i(b,t,{length:1,0:3},1),3!==t[1]})),G=I&&c.NATIVE_ARRAY_BUFFER_VIEWS&&r((function(){var t=new s(2);return t.set(1),t.set("2",1),0!==t[0]||2!==t[1]}));m("set",(function(t){h(this);var e=d(arguments.length>1?arguments[1]:void 0,1),l=a(t);if(I)return i(b,this,l,e);var n=this.length,c=o(l),r=0;if(c+e>n)throw u("Wrong length");for(;r<c;)this[e+r]=l[r++]}),!I||G)},function(t,e,l){"use strict";var n=l(17),i=l(125),c=l(4),o=l(60),d=n.aTypedArray;(0,n.exportTypedArrayMethod)("slice",(function(t,e){for(var l=o(d(this),t,e),n=i(this),c=0,a=l.length,r=new n(a);a>c;)r[c]=l[c++];return r}),c((function(){new Int8Array(1).slice()})))},function(t,e,l){"use strict";var n=l(17),i=l(30).some,c=n.aTypedArray;(0,n.exportTypedArrayMethod)("some",(function(t){return i(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,e,l){"use strict";var n=l(1),i=l(3),c=l(4),o=l(6),d=l(142),a=l(17),r=l(181),u=l(182),s=l(56),Z=l(143),b=a.aTypedArray,h=a.exportTypedArrayMethod,m=n.Uint16Array,I=m&&i(m.prototype.sort),G=!(!I||c((function(){I(new m(2),null)}))&&c((function(){I(new m(2),{})}))),p=!!I&&!c((function(){if(s)return s<74;if(r)return r<67;if(u)return!0;if(Z)return Z<602;var t,e,l=new m(516),n=Array(516);for(t=0;t<516;t++)e=t%4,l[t]=515-t,n[t]=t-2*e+3;for(I(l,(function(t,e){return(t/4|0)-(e/4|0)})),t=0;t<516;t++)if(l[t]!==n[t])return!0}));h("sort",(function(t){return void 0!==t&&o(t),p?I(this,t):d(b(this),function(t){return function(e,l){return void 0!==t?+t(e,l)||0:l!=l?-1:e!=e?1:0===e&&0===l?1/e>0&&1/l<0?1:-1:e>l}}(t))}),!p||G)},function(t,e,l){"use strict";var n=l(17),i=l(37),c=l(49),o=l(125),d=n.aTypedArray;(0,n.exportTypedArrayMethod)("subarray",(function(t,e){var l=d(this),n=l.length,a=c(t,n);return new(o(l))(l.buffer,l.byteOffset+a*l.BYTES_PER_ELEMENT,i((void 0===e?n:c(e,n))-a))}))},function(t,e,l){"use strict";var n=l(1),i=l(18),c=l(17),o=l(4),d=l(60),a=n.Int8Array,r=c.aTypedArray,u=c.exportTypedArrayMethod,s=[].toLocaleString,Z=!!a&&o((function(){s.call(new a(1))}));u("toLocaleString",(function(){return i(s,Z?d(r(this)):r(this),d(arguments))}),o((function(){return[1,2].toLocaleString()!=new a([1,2]).toLocaleString()}))||!o((function(){a.prototype.toLocaleString.call([1,2])})))},function(t,e,l){"use strict";var n=l(17).exportTypedArrayMethod,i=l(4),c=l(1),o=l(3),d=c.Uint8Array,a=d&&d.prototype||{},r=[].toString,u=o([].join);i((function(){r.call({})}))&&(r=function(){return u(this)});var s=a.toString!=r;n("toString",r,s)},function(t,e,l){"use strict";var n,i=l(1),c=l(3),o=l(46),d=l(67),a=l(113),r=l(208),u=l(12),s=l(114),Z=l(20).enforce,b=l(168),h=!i.ActiveXObject&&"ActiveXObject"in i,m=function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}},I=a("WeakMap",m,r);if(b&&h){n=r.getConstructor(m,"WeakMap",!0),d.enable();var G=I.prototype,p=c(G.delete),g=c(G.has),X=c(G.get),V=c(G.set);o(G,{delete:function(t){if(u(t)&&!s(t)){var e=Z(this);return e.frozen||(e.frozen=new n),p(this,t)||e.frozen.delete(t)}return p(this,t)},has:function(t){if(u(t)&&!s(t)){var e=Z(this);return e.frozen||(e.frozen=new n),g(this,t)||e.frozen.has(t)}return g(this,t)},get:function(t){if(u(t)&&!s(t)){var e=Z(this);return e.frozen||(e.frozen=new n),g(this,t)?X(this,t):e.frozen.get(t)}return X(this,t)},set:function(t,e){if(u(t)&&!s(t)){var l=Z(this);l.frozen||(l.frozen=new n),g(this,t)?V(this,t,e):l.frozen.set(t,e)}else V(this,t,e);return this}})}},function(t,e,l){l(451)},function(t,e,l){"use strict";l(113)("WeakSet",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),l(208))},function(t,e,l){l(453)},function(t,e,l){l(454)},function(t,e,l){"use strict";var n=l(0),i=l(1),c=l(36),o=l(32),d=l(51),a=l(132),r=l(29),u=l(28),s=l(43),Z=l(455),b=l(456),h=l(8),m=l(457),I=l(7),G=l(458),p=I("toStringTag"),g=i.Error,X=[].push,V=function(t,e){var l,n=arguments.length>2?arguments[2]:void 0,i=c(y,this);d?l=d(new g,i?o(this):y):(l=i?this:r(y),u(l,p,"Error")),void 0!==e&&u(l,"message",m(e)),G&&u(l,"stack",Z(l.stack,1)),b(l,n);var a=[];return h(t,X,{that:a}),u(l,"errors",a),l};d?d(V,g):a(V,g,{name:!0});var y=V.prototype=r(g.prototype,{constructor:s(1,V),message:s(1,""),name:s(1,"AggregateError")});n({global:!0},{AggregateError:V})},function(t,e,l){var n=l(3),i=Error,c=n("".replace),o=String(i("zxcasd").stack),d=/\n\s*at [^:]*:[^\n]*/,a=d.test(o);t.exports=function(t,e){if(a&&"string"==typeof t&&!i.prepareStackTrace)for(;e--;)t=c(t,d,"");return t}},function(t,e,l){var n=l(12),i=l(28);t.exports=function(t,e){n(e)&&"cause"in e&&i(t,"cause",e.cause)}},function(t,e,l){var n=l(14);t.exports=function(t,e){return void 0===t?arguments.length<2?"":e:n(t)}},function(t,e,l){var n=l(4),i=l(43);t.exports=!n((function(){var t=Error("a");return!("stack"in t)||(Object.defineProperty(t,"stack",i(1,7)),7!==t.stack)}))},function(t,e,l){var n=l(0),i=l(59),c=Object.isFrozen,o=function(t,e){if(!c||!i(t)||!c(t))return!1;for(var l,n=0,o=t.length;n<o;)if(!("string"==typeof(l=t[n++])||e&&void 0===l))return!1;return 0!==o};n({target:"Array",stat:!0,sham:!0,forced:!0},{isTemplateObject:function(t){if(!o(t,!0))return!1;var e=t.raw;return e.length===t.length&&o(e,!1)}})},function(t,e,l){"use strict";var n=l(9),i=l(44),c=l(13),o=l(21),d=l(16).f;n&&(d(Array.prototype,"lastIndex",{configurable:!0,get:function(){var t=c(this),e=o(t);return 0==e?0:e-1}}),i("lastIndex"))},function(t,e,l){"use strict";var n=l(9),i=l(44),c=l(13),o=l(21),d=l(16).f;n&&(d(Array.prototype,"lastItem",{configurable:!0,get:function(){var t=c(this),e=o(t);return 0==e?void 0:t[e-1]},set:function(t){var e=c(this),l=o(e);return e[0==l?0:l-1]=t}}),i("lastItem"))},function(t,e,l){"use strict";var n=l(0),i=l(42),c=l(28),o=l(15),d=l(7),a=l(126),r=l(24),u=d("toStringTag"),s=function(){i(this,a)};s.prototype=a,o(a,u)||c(a,u,"AsyncIterator"),!r&&o(a,"constructor")&&a.constructor!==Object||c(a,"constructor",s),n({global:!0,forced:r},{AsyncIterator:s})},function(t,e,l){"use strict";var n=l(0),i=l(18),c=l(2),o=l(68)((function(t,e){var l=this,n=l.iterator;return t.resolve(c(i(l.next,n,e))).then((function(t){return c(t).done?(l.done=!0,{done:!0,value:void 0}):{done:!1,value:[l.index++,t.value]}}))}));n({target:"AsyncIterator",proto:!0,real:!0,forced:!0},{asIndexedPairs:function(){return new o({iterator:c(this),index:0})}})},function(t,e,l){"use strict";var n=l(0),i=l(18),c=l(2),o=l(98),d=l(68)((function(t,e){var l=this;return new t((function(n,o){var d=function(){try{t.resolve(c(i(l.next,l.iterator,l.remaining?[]:e))).then((function(t){try{c(t).done?(l.done=!0,n({done:!0,value:void 0})):l.remaining?(l.remaining--,d()):n({done:!1,value:t.value})}catch(t){o(t)}}),o)}catch(t){o(t)}};d()}))}));n({target:"AsyncIterator",proto:!0,real:!0,forced:!0},{drop:function(t){return new d({iterator:c(this),remaining:o(t)})}})},function(t,e,l){"use strict";var n=l(0),i=l(99).every;n({target:"AsyncIterator",proto:!0,real:!0,forced:!0},{every:function(t){return i(this,t)}})},function(t,e,l){"use strict";var n=l(0),i=l(18),c=l(6),o=l(2),d=l(68)((function(t,e){var l=this,n=l.filterer;return new t((function(c,d){var a=function(){try{t.resolve(o(i(l.next,l.iterator,e))).then((function(e){try{if(o(e).done)l.done=!0,c({done:!0,value:void 0});else{var i=e.value;t.resolve(n(i)).then((function(t){t?c({done:!1,value:i}):a()}),d)}}catch(t){d(t)}}),d)}catch(t){d(t)}};a()}))}));n({target:"AsyncIterator",proto:!0,real:!0,forced:!0},{filter:function(t){return new d({iterator:o(this),filterer:c(t)})}})},function(t,e,l){"use strict";var n=l(0),i=l(99).find;n({target:"AsyncIterator",proto:!0,real:!0,forced:!0},{find:function(t){return i(this,t)}})},function(t,e,l){"use strict";var n=l(0),i=l(5),c=l(6),o=l(2),d=l(68),a=l(209),r=d((function(t){var e,l=this,n=l.mapper;return new t((function(d,r){var u=function(){try{t.resolve(o(i(l.next,l.iterator))).then((function(i){try{o(i).done?(l.done=!0,d({done:!0,value:void 0})):t.resolve(n(i.value)).then((function(t){try{return l.innerIterator=e=a(t),l.innerNext=c(e.next),s()}catch(t){r(t)}}),r)}catch(t){r(t)}}),r)}catch(t){r(t)}},s=function(){if(e=l.innerIterator)try{t.resolve(o(i(l.innerNext,e))).then((function(t){try{o(t).done?(l.innerIterator=l.innerNext=null,u()):d({done:!1,value:t.value})}catch(t){r(t)}}),r)}catch(t){r(t)}else u()};s()}))}));n({target:"AsyncIterator",proto:!0,real:!0,forced:!0},{flatMap:function(t){return new r({iterator:o(this),mapper:c(t),innerIterator:null,innerNext:null})}})},function(t,e,l){"use strict";var n=l(0),i=l(99).forEach;n({target:"AsyncIterator",proto:!0,real:!0,forced:!0},{forEach:function(t){return i(this,t)}})},function(t,e,l){var n=l(0),i=l(18),c=l(2),o=l(13),d=l(36),a=l(126),r=l(68),u=l(209),s=l(45),Z=l(61),b=l(27),h=l(7),m=l(210),I=h("asyncIterator"),G=r((function(t,e){return c(i(this.next,this.iterator,e))}),!0);n({target:"AsyncIterator",stat:!0,forced:!0},{from:function(t){var e,l=o(t),n=b(l,I);return n&&(e=u(l,n),d(a,e))?e:void 0===e&&(n=Z(l))?new m(s(l,n)):new G({iterator:void 0!==e?e:l})}})},function(t,e,l){"use strict";var n=l(0),i=l(18),c=l(6),o=l(2),d=l(68)((function(t,e){var l=this,n=l.mapper;return t.resolve(o(i(l.next,l.iterator,e))).then((function(e){return o(e).done?(l.done=!0,{done:!0,value:void 0}):t.resolve(n(e.value)).then((function(t){return{done:!1,value:t}}))}))}));n({target:"AsyncIterator",proto:!0,real:!0,forced:!0},{map:function(t){return new d({iterator:o(this),mapper:c(t)})}})},function(t,e,l){"use strict";var n=l(0),i=l(1),c=l(5),o=l(6),d=l(2),a=l(11)("Promise"),r=i.TypeError;n({target:"AsyncIterator",proto:!0,real:!0,forced:!0},{reduce:function(t){var e=d(this),l=o(e.next),n=arguments.length<2,i=n?void 0:arguments[1];return o(t),new a((function(o,u){var s=function(){try{a.resolve(d(c(l,e))).then((function(e){try{if(d(e).done)n?u(r("Reduce of empty iterator with no initial value")):o(i);else{var l=e.value;n?(n=!1,i=l,s()):a.resolve(t(i,l)).then((function(t){i=t,s()}),u)}}catch(t){u(t)}}),u)}catch(t){u(t)}};s()}))}})},function(t,e,l){"use strict";var n=l(0),i=l(99).some;n({target:"AsyncIterator",proto:!0,real:!0,forced:!0},{some:function(t){return i(this,t)}})},function(t,e,l){"use strict";var n=l(0),i=l(18),c=l(5),o=l(2),d=l(98),a=l(68)((function(t,e){var l,n,o=this.iterator;return this.remaining--?i(this.next,o,e):(n={done:!0,value:void 0},this.done=!0,void 0!==(l=o.return)?t.resolve(c(l,o)).then((function(){return n})):n)}));n({target:"AsyncIterator",proto:!0,real:!0,forced:!0},{take:function(t){return new a({iterator:o(this),remaining:d(t)})}})},function(t,e,l){"use strict";var n=l(0),i=l(99).toArray;n({target:"AsyncIterator",proto:!0,real:!0,forced:!0},{toArray:function(){return i(this,void 0,[])}})},function(t,e,l){var n=l(0),i=l(1),c=l(18),o=l(211),d=l(11),a=l(29),r=i.Object,u=function(){var t=d("Object","freeze");return t?t(a(null)):a(null)};n({global:!0,forced:!0},{compositeKey:function(){return c(o,r,arguments).get("object",u)}})},function(t,e,l){var n=l(0),i=l(211),c=l(11),o=l(18);n({global:!0,forced:!0},{compositeSymbol:function(){return 1==arguments.length&&"string"==typeof arguments[0]?c("Symbol").for(arguments[0]):o(i,null,arguments).get("symbol",c("Symbol"))}})},function(t,e,l){"use strict";var n=l(0),i=l(1),c=l(42),o=l(10),d=l(28),a=l(4),r=l(15),u=l(7),s=l(92).IteratorPrototype,Z=l(24),b=u("toStringTag"),h=i.Iterator,m=Z||!o(h)||h.prototype!==s||!a((function(){h({})})),I=function(){c(this,s)};r(s,b)||d(s,b,"Iterator"),!m&&r(s,"constructor")&&s.constructor!==Object||d(s,"constructor",I),I.prototype=s,n({global:!0,forced:m},{Iterator:I})},function(t,e,l){"use strict";var n=l(0),i=l(18),c=l(2),o=l(69)((function(t){var e=c(i(this.next,this.iterator,t));if(!(this.done=!!e.done))return[this.index++,e.value]}));n({target:"Iterator",proto:!0,real:!0,forced:!0},{asIndexedPairs:function(){return new o({iterator:c(this),index:0})}})},function(t,e,l){"use strict";var n=l(0),i=l(18),c=l(5),o=l(2),d=l(98),a=l(69)((function(t){for(var e,l=this.iterator,n=this.next;this.remaining;)if(this.remaining--,e=o(c(n,l)),this.done=!!e.done)return;if(e=o(i(n,l,t)),!(this.done=!!e.done))return e.value}));n({target:"Iterator",proto:!0,real:!0,forced:!0},{drop:function(t){return new a({iterator:o(this),remaining:d(t)})}})},function(t,e,l){"use strict";var n=l(0),i=l(8),c=l(6),o=l(2);n({target:"Iterator",proto:!0,real:!0,forced:!0},{every:function(t){return o(this),c(t),!i(this,(function(e,l){if(!t(e))return l()}),{IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,e,l){"use strict";var n=l(0),i=l(18),c=l(6),o=l(2),d=l(69),a=l(138),r=d((function(t){for(var e,l,n=this.iterator,c=this.filterer,d=this.next;;){if(e=o(i(d,n,t)),this.done=!!e.done)return;if(l=e.value,a(n,c,l))return l}}));n({target:"Iterator",proto:!0,real:!0,forced:!0},{filter:function(t){return new r({iterator:o(this),filterer:c(t)})}})},function(t,e,l){"use strict";var n=l(0),i=l(8),c=l(6),o=l(2);n({target:"Iterator",proto:!0,real:!0,forced:!0},{find:function(t){return o(this),c(t),i(this,(function(e,l){if(t(e))return l(e)}),{IS_ITERATOR:!0,INTERRUPTED:!0}).result}})},function(t,e,l){"use strict";var n=l(0),i=l(1),c=l(5),o=l(6),d=l(2),a=l(61),r=l(69),u=l(107),s=i.TypeError,Z=r((function(){for(var t,e,l,n,i=this.iterator,r=this.mapper;;)try{if(n=this.innerIterator){if(!(t=d(c(this.innerNext,n))).done)return t.value;this.innerIterator=this.innerNext=null}if(t=d(c(this.next,i)),this.done=!!t.done)return;if(e=r(t.value),!(l=a(e)))throw s(".flatMap callback should return an iterable object");this.innerIterator=n=d(c(l,e)),this.innerNext=o(n.next)}catch(t){u(i,"throw",t)}}));n({target:"Iterator",proto:!0,real:!0,forced:!0},{flatMap:function(t){return new Z({iterator:d(this),mapper:o(t),innerIterator:null,innerNext:null})}})},function(t,e,l){"use strict";var n=l(0),i=l(8),c=l(2);n({target:"Iterator",proto:!0,real:!0,forced:!0},{forEach:function(t){i(c(this),t,{IS_ITERATOR:!0})}})},function(t,e,l){var n=l(0),i=l(18),c=l(2),o=l(13),d=l(36),a=l(92).IteratorPrototype,r=l(69),u=l(45),s=l(61),Z=r((function(t){var e=c(i(this.next,this.iterator,t));if(!(this.done=!!e.done))return e.value}),!0);n({target:"Iterator",stat:!0,forced:!0},{from:function(t){var e,l=o(t),n=s(l);if(n){if(e=u(l,n),d(a,e))return e}else e=l;return new Z({iterator:e})}})},function(t,e,l){"use strict";var n=l(0),i=l(18),c=l(6),o=l(2),d=l(69),a=l(138),r=d((function(t){var e=this.iterator,l=o(i(this.next,e,t));if(!(this.done=!!l.done))return a(e,this.mapper,l.value)}));n({target:"Iterator",proto:!0,real:!0,forced:!0},{map:function(t){return new r({iterator:o(this),mapper:c(t)})}})},function(t,e,l){"use strict";var n=l(0),i=l(1),c=l(8),o=l(6),d=l(2),a=i.TypeError;n({target:"Iterator",proto:!0,real:!0,forced:!0},{reduce:function(t){d(this),o(t);var e=arguments.length<2,l=e?void 0:arguments[1];if(c(this,(function(n){e?(e=!1,l=n):l=t(l,n)}),{IS_ITERATOR:!0}),e)throw a("Reduce of empty iterator with no initial value");return l}})},function(t,e,l){"use strict";var n=l(0),i=l(8),c=l(6),o=l(2);n({target:"Iterator",proto:!0,real:!0,forced:!0},{some:function(t){return o(this),c(t),i(this,(function(e,l){if(t(e))return l()}),{IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,e,l){"use strict";var n=l(0),i=l(18),c=l(2),o=l(98),d=l(69),a=l(107),r=d((function(t){var e=this.iterator;if(!this.remaining--)return this.done=!0,a(e,"normal",void 0);var l=c(i(this.next,e,t));return(this.done=!!l.done)?void 0:l.value}));n({target:"Iterator",proto:!0,real:!0,forced:!0},{take:function(t){return new r({iterator:c(this),remaining:o(t)})}})},function(t,e,l){"use strict";var n=l(0),i=l(8),c=l(2),o=[].push;n({target:"Iterator",proto:!0,real:!0,forced:!0},{toArray:function(){var t=[];return i(c(this),o,{that:t,IS_ITERATOR:!0}),t}})},function(t,e,l){"use strict";l(0)({target:"Map",proto:!0,real:!0,forced:!0},{deleteAll:l(127)})},function(t,e,l){"use strict";var n=l(0),i=l(2),c=l(22),o=l(47),d=l(8);n({target:"Map",proto:!0,real:!0,forced:!0},{every:function(t){var e=i(this),l=o(e),n=c(t,arguments.length>1?arguments[1]:void 0);return!d(l,(function(t,l,i){if(!n(l,t,e))return i()}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,e,l){"use strict";var n=l(0),i=l(11),c=l(22),o=l(5),d=l(6),a=l(2),r=l(33),u=l(47),s=l(8);n({target:"Map",proto:!0,real:!0,forced:!0},{filter:function(t){var e=a(this),l=u(e),n=c(t,arguments.length>1?arguments[1]:void 0),Z=new(r(e,i("Map"))),b=d(Z.set);return s(l,(function(t,l){n(l,t,e)&&o(b,Z,t,l)}),{AS_ENTRIES:!0,IS_ITERATOR:!0}),Z}})},function(t,e,l){"use strict";var n=l(0),i=l(2),c=l(22),o=l(47),d=l(8);n({target:"Map",proto:!0,real:!0,forced:!0},{find:function(t){var e=i(this),l=o(e),n=c(t,arguments.length>1?arguments[1]:void 0);return d(l,(function(t,l,i){if(n(l,t,e))return i(l)}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).result}})},function(t,e,l){"use strict";var n=l(0),i=l(2),c=l(22),o=l(47),d=l(8);n({target:"Map",proto:!0,real:!0,forced:!0},{findKey:function(t){var e=i(this),l=o(e),n=c(t,arguments.length>1?arguments[1]:void 0);return d(l,(function(t,l,i){if(n(l,t,e))return i(t)}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).result}})},function(t,e,l){l(0)({target:"Map",stat:!0,forced:!0},{from:l(128)})},function(t,e,l){"use strict";var n=l(0),i=l(5),c=l(3),o=l(6),d=l(45),a=l(8),r=c([].push);n({target:"Map",stat:!0,forced:!0},{groupBy:function(t,e){o(e);var l=d(t),n=new this,c=o(n.has),u=o(n.get),s=o(n.set);return a(l,(function(t){var l=e(t);i(c,n,l)?r(i(u,n,l),t):i(s,n,l,[t])}),{IS_ITERATOR:!0}),n}})},function(t,e,l){"use strict";var n=l(0),i=l(2),c=l(47),o=l(500),d=l(8);n({target:"Map",proto:!0,real:!0,forced:!0},{includes:function(t){return d(c(i(this)),(function(e,l,n){if(o(l,t))return n()}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,e){t.exports=function(t,e){return t===e||t!=t&&e!=e}},function(t,e,l){"use strict";var n=l(0),i=l(5),c=l(8),o=l(6);n({target:"Map",stat:!0,forced:!0},{keyBy:function(t,e){var l=new this;o(e);var n=o(l.set);return c(t,(function(t){i(n,l,e(t),t)})),l}})},function(t,e,l){"use strict";var n=l(0),i=l(2),c=l(47),o=l(8);n({target:"Map",proto:!0,real:!0,forced:!0},{keyOf:function(t){return o(c(i(this)),(function(e,l,n){if(l===t)return n(e)}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).result}})},function(t,e,l){"use strict";var n=l(0),i=l(11),c=l(22),o=l(5),d=l(6),a=l(2),r=l(33),u=l(47),s=l(8);n({target:"Map",proto:!0,real:!0,forced:!0},{mapKeys:function(t){var e=a(this),l=u(e),n=c(t,arguments.length>1?arguments[1]:void 0),Z=new(r(e,i("Map"))),b=d(Z.set);return s(l,(function(t,l){o(b,Z,n(l,t,e),l)}),{AS_ENTRIES:!0,IS_ITERATOR:!0}),Z}})},function(t,e,l){"use strict";var n=l(0),i=l(11),c=l(22),o=l(5),d=l(6),a=l(2),r=l(33),u=l(47),s=l(8);n({target:"Map",proto:!0,real:!0,forced:!0},{mapValues:function(t){var e=a(this),l=u(e),n=c(t,arguments.length>1?arguments[1]:void 0),Z=new(r(e,i("Map"))),b=d(Z.set);return s(l,(function(t,l){o(b,Z,t,n(l,t,e))}),{AS_ENTRIES:!0,IS_ITERATOR:!0}),Z}})},function(t,e,l){"use strict";var n=l(0),i=l(6),c=l(2),o=l(8);n({target:"Map",proto:!0,real:!0,forced:!0},{merge:function(t){for(var e=c(this),l=i(e.set),n=arguments.length,d=0;d<n;)o(arguments[d++],l,{that:e,AS_ENTRIES:!0});return e}})},function(t,e,l){l(0)({target:"Map",stat:!0,forced:!0},{of:l(129)})},function(t,e,l){"use strict";var n=l(0),i=l(1),c=l(2),o=l(6),d=l(47),a=l(8),r=i.TypeError;n({target:"Map",proto:!0,real:!0,forced:!0},{reduce:function(t){var e=c(this),l=d(e),n=arguments.length<2,i=n?void 0:arguments[1];if(o(t),a(l,(function(l,c){n?(n=!1,i=c):i=t(i,c,l,e)}),{AS_ENTRIES:!0,IS_ITERATOR:!0}),n)throw r("Reduce of empty map with no initial value");return i}})},function(t,e,l){"use strict";var n=l(0),i=l(2),c=l(22),o=l(47),d=l(8);n({target:"Map",proto:!0,real:!0,forced:!0},{some:function(t){var e=i(this),l=o(e),n=c(t,arguments.length>1?arguments[1]:void 0);return d(l,(function(t,l,i){if(n(l,t,e))return i()}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,e,l){"use strict";var n=l(0),i=l(1),c=l(5),o=l(2),d=l(6),a=i.TypeError;n({target:"Map",proto:!0,real:!0,forced:!0},{update:function(t,e){var l=o(this),n=d(l.get),i=d(l.has),r=d(l.set),u=arguments.length;d(e);var s=c(i,l,t);if(!s&&u<3)throw a("Updating absent value");var Z=s?c(n,l,t):d(u>2?arguments[2]:void 0)(t,l);return c(r,l,t,e(Z,t,l)),l}})},function(t,e,l){"use strict";l(0)({target:"Map",proto:!0,real:!0,name:"upsert",forced:!0},{updateOrInsert:l(160)})},function(t,e,l){"use strict";l(0)({target:"Map",proto:!0,real:!0,forced:!0},{upsert:l(160)})},function(t,e,l){var n=l(0),i=Math.min,c=Math.max;n({target:"Math",stat:!0,forced:!0},{clamp:function(t,e,l){return i(l,c(e,t))}})},function(t,e,l){l(0)({target:"Math",stat:!0,forced:!0},{DEG_PER_RAD:Math.PI/180})},function(t,e,l){var n=l(0),i=180/Math.PI;n({target:"Math",stat:!0,forced:!0},{degrees:function(t){return t*i}})},function(t,e,l){var n=l(0),i=l(212),c=l(187);n({target:"Math",stat:!0,forced:!0},{fscale:function(t,e,l,n,o){return c(i(t,e,l,n,o))}})},function(t,e,l){l(0)({target:"Math",stat:!0,forced:!0},{iaddh:function(t,e,l,n){var i=t>>>0,c=l>>>0;return(e>>>0)+(n>>>0)+((i&c|(i|c)&~(i+c>>>0))>>>31)|0}})},function(t,e,l){l(0)({target:"Math",stat:!0,forced:!0},{imulh:function(t,e){var l=+t,n=+e,i=65535&l,c=65535&n,o=l>>16,d=n>>16,a=(o*c>>>0)+(i*c>>>16);return o*d+(a>>16)+((i*d>>>0)+(65535&a)>>16)}})},function(t,e,l){l(0)({target:"Math",stat:!0,forced:!0},{isubh:function(t,e,l,n){var i=t>>>0,c=l>>>0;return(e>>>0)-(n>>>0)-((~i&c|~(i^c)&i-c>>>0)>>>31)|0}})},function(t,e,l){l(0)({target:"Math",stat:!0,forced:!0},{RAD_PER_DEG:180/Math.PI})},function(t,e,l){var n=l(0),i=Math.PI/180;n({target:"Math",stat:!0,forced:!0},{radians:function(t){return t*i}})},function(t,e,l){l(0)({target:"Math",stat:!0,forced:!0},{scale:l(212)})},function(t,e,l){var n=l(0),i=l(1),c=l(2),o=l(188),d=l(77),a=l(20),r=a.set,u=a.getterFor("Seeded Random Generator"),s=i.TypeError,Z=d((function(t){r(this,{type:"Seeded Random Generator",seed:t%2147483647})}),"Seeded Random",(function(){var t=u(this);return{value:(1073741823&(t.seed=(1103515245*t.seed+12345)%2147483647))/1073741823,done:!1}}));n({target:"Math",stat:!0,forced:!0},{seededPRNG:function(t){var e=c(t).seed;if(!o(e))throw s('Math.seededPRNG() argument should have a "seed" field with a finite value.');return new Z(e)}})},function(t,e,l){l(0)({target:"Math",stat:!0,forced:!0},{signbit:function(t){return(t=+t)==t&&0==t?1/t==-1/0:t<0}})},function(t,e,l){l(0)({target:"Math",stat:!0,forced:!0},{umulh:function(t,e){var l=+t,n=+e,i=65535&l,c=65535&n,o=l>>>16,d=n>>>16,a=(o*c>>>0)+(i*c>>>16);return o*d+(a>>>16)+((i*d>>>0)+(65535&a)>>>16)}})},function(t,e,l){"use strict";var n=l(0),i=l(1),c=l(3),o=l(35),d=l(152),a=i.RangeError,r=i.SyntaxError,u=i.TypeError,s=/^[\da-z]+$/,Z=c("".charAt),b=c(s.exec),h=c(1..toString),m=c("".slice);n({target:"Number",stat:!0,forced:!0},{fromString:function(t,e){var l,n,i=1;if("string"!=typeof t)throw u("Invalid number representation");if(!t.length)throw r("Invalid number representation");if("-"==Z(t,0)&&(i=-1,!(t=m(t,1)).length))throw r("Invalid number representation");if((l=void 0===e?10:o(e))<2||l>36)throw a("Invalid radix");if(!b(s,t)||h(n=d(t,l),l)!==t)throw r("Invalid number representation");return i*n}})},function(t,e,l){"use strict";var n=l(0),i=l(161);n({target:"Object",stat:!0,forced:!0},{iterateEntries:function(t){return new i(t,"entries")}})},function(t,e,l){"use strict";var n=l(0),i=l(161);n({target:"Object",stat:!0,forced:!0},{iterateKeys:function(t){return new i(t,"keys")}})},function(t,e,l){"use strict";var n=l(0),i=l(161);n({target:"Object",stat:!0,forced:!0},{iterateValues:function(t){return new i(t,"values")}})},function(t,e,l){l(530),l(531),l(532)},function(t,e,l){"use strict";var n=l(0),i=l(5),c=l(9),o=l(66),d=l(6),a=l(10),r=l(2),u=l(12),s=l(42),Z=l(27),b=l(16).f,h=l(19),m=l(46),I=l(195),G=l(7),p=l(20),g=l(162),X=G("observable"),V=p.getterFor,y=p.set,W=V("Observable"),C=V("Subscription"),R=V("SubscriptionObserver"),f=function(t){this.observer=r(t),this.cleanup=void 0,this.subscriptionObserver=void 0};f.prototype={type:"Subscription",clean:function(){var t=this.cleanup;if(t){this.cleanup=void 0;try{t()}catch(t){I(t)}}},close:function(){if(!c){var t=this.facade,e=this.subscriptionObserver;t.closed=!0,e&&(e.closed=!0)}this.observer=void 0},isClosed:function(){return void 0===this.observer}};var Y=function(t,e){var l,n=y(this,new f(t));c||(this.closed=!1);try{(l=Z(t,"start"))&&i(l,t,this)}catch(t){I(t)}if(!n.isClosed()){var o=n.subscriptionObserver=new S(n);try{var r=e(o),u=r;null!=r&&(n.cleanup=a(r.unsubscribe)?function(){u.unsubscribe()}:d(r))}catch(t){return void o.error(t)}n.isClosed()&&n.clean()}};Y.prototype=m({},{unsubscribe:function(){var t=C(this);t.isClosed()||(t.close(),t.clean())}}),c&&b(Y.prototype,"closed",{configurable:!0,get:function(){return C(this).isClosed()}});var S=function(t){y(this,{type:"SubscriptionObserver",subscriptionState:t}),c||(this.closed=!1)};S.prototype=m({},{next:function(t){var e=R(this).subscriptionState;if(!e.isClosed()){var l=e.observer;try{var n=Z(l,"next");n&&i(n,l,t)}catch(t){I(t)}}},error:function(t){var e=R(this).subscriptionState;if(!e.isClosed()){var l=e.observer;e.close();try{var n=Z(l,"error");n?i(n,l,t):I(t)}catch(t){I(t)}e.clean()}},complete:function(){var t=R(this).subscriptionState;if(!t.isClosed()){var e=t.observer;t.close();try{var l=Z(e,"complete");l&&i(l,e)}catch(t){I(t)}t.clean()}}}),c&&b(S.prototype,"closed",{configurable:!0,get:function(){return R(this).subscriptionState.isClosed()}});var v=function(t){s(this,K),y(this,{type:"Observable",subscriber:d(t)})},K=v.prototype;m(K,{subscribe:function(t){var e=arguments.length;return new Y(a(t)?{next:t,error:e>1?arguments[1]:void 0,complete:e>2?arguments[2]:void 0}:u(t)?t:{},W(this).subscriber)}}),h(K,X,(function(){return this})),n({global:!0,forced:g},{Observable:v}),o("Observable")},function(t,e,l){"use strict";var n=l(0),i=l(11),c=l(5),o=l(2),d=l(65),a=l(45),r=l(27),u=l(8),s=l(7),Z=l(162),b=s("observable");n({target:"Observable",stat:!0,forced:Z},{from:function(t){var e=d(this)?this:i("Observable"),l=r(o(t),b);if(l){var n=o(c(l,t));return n.constructor===e?n:new e((function(t){return n.subscribe(t)}))}var s=a(t);return new e((function(t){u(s,(function(e,l){if(t.next(e),t.closed)return l()}),{IS_ITERATOR:!0,INTERRUPTED:!0}),t.complete()}))}})},function(t,e,l){"use strict";var n=l(0),i=l(11),c=l(65),o=l(162),d=i("Array");n({target:"Observable",stat:!0,forced:o},{of:function(){for(var t=c(this)?this:i("Observable"),e=arguments.length,l=d(e),n=0;n<e;)l[n]=arguments[n++];return new t((function(t){for(var n=0;n<e;n++)if(t.next(l[n]),t.closed)return;t.complete()}))}})},function(t,e,l){l(534)},function(t,e,l){"use strict";var n=l(0),i=l(5),c=l(6),o=l(11),d=l(62),a=l(80),r=l(8);n({target:"Promise",stat:!0},{any:function(t){var e=this,l=o("AggregateError"),n=d.f(e),u=n.resolve,s=n.reject,Z=a((function(){var n=c(e.resolve),o=[],d=0,a=1,Z=!1;r(t,(function(t){var c=d++,r=!1;a++,i(n,e,t).then((function(t){r||Z||(Z=!0,u(t))}),(function(t){r||Z||(r=!0,o[c]=t,--a||s(new l(o,"No one promise resolved")))}))})),--a||s(new l(o,"No one promise resolved"))}));return Z.error&&s(Z.value),n.promise}})},function(t,e,l){"use strict";var n=l(0),i=l(62),c=l(80);n({target:"Promise",stat:!0,forced:!0},{try:function(t){var e=i.f(this),l=c(t);return(l.error?e.reject:e.resolve)(l.value),e.promise}})},function(t,e,l){var n=l(0),i=l(53),c=l(2),o=i.toKey,d=i.set;n({target:"Reflect",stat:!0},{defineMetadata:function(t,e,l){var n=arguments.length<4?void 0:o(arguments[3]);d(t,e,c(l),n)}})},function(t,e,l){var n=l(0),i=l(53),c=l(2),o=i.toKey,d=i.getMap,a=i.store;n({target:"Reflect",stat:!0},{deleteMetadata:function(t,e){var l=arguments.length<3?void 0:o(arguments[2]),n=d(c(e),l,!1);if(void 0===n||!n.delete(t))return!1;if(n.size)return!0;var i=a.get(e);return i.delete(l),!!i.size||a.delete(e)}})},function(t,e,l){var n=l(0),i=l(53),c=l(2),o=l(32),d=i.has,a=i.get,r=i.toKey,u=function(t,e,l){if(d(t,e,l))return a(t,e,l);var n=o(e);return null!==n?u(t,n,l):void 0};n({target:"Reflect",stat:!0},{getMetadata:function(t,e){var l=arguments.length<3?void 0:r(arguments[2]);return u(t,c(e),l)}})},function(t,e,l){var n=l(0),i=l(3),c=l(53),o=l(2),d=l(32),a=i(l(540)),r=i([].concat),u=c.keys,s=c.toKey,Z=function(t,e){var l=u(t,e),n=d(t);if(null===n)return l;var i=Z(n,e);return i.length?l.length?a(r(l,i)):i:l};n({target:"Reflect",stat:!0},{getMetadataKeys:function(t){var e=arguments.length<2?void 0:s(arguments[1]);return Z(o(t),e)}})},function(t,e,l){"use strict";var n=l(11),i=l(3),c=l(6),o=l(21),d=l(13),a=l(76),r=n("Map"),u=r.prototype,s=i(u.forEach),Z=i(u.has),b=i(u.set),h=i([].push);t.exports=function(t){var e,l,n,i=d(this),u=o(i),m=a(i,0),I=new r,G=null!=t?c(t):function(t){return t};for(e=0;e<u;e++)n=G(l=i[e]),Z(I,n)||b(I,n,l);return s(I,(function(t){h(m,t)})),m}},function(t,e,l){var n=l(0),i=l(53),c=l(2),o=i.get,d=i.toKey;n({target:"Reflect",stat:!0},{getOwnMetadata:function(t,e){var l=arguments.length<3?void 0:d(arguments[2]);return o(t,c(e),l)}})},function(t,e,l){var n=l(0),i=l(53),c=l(2),o=i.keys,d=i.toKey;n({target:"Reflect",stat:!0},{getOwnMetadataKeys:function(t){var e=arguments.length<2?void 0:d(arguments[1]);return o(c(t),e)}})},function(t,e,l){var n=l(0),i=l(53),c=l(2),o=l(32),d=i.has,a=i.toKey,r=function(t,e,l){if(d(t,e,l))return!0;var n=o(e);return null!==n&&r(t,n,l)};n({target:"Reflect",stat:!0},{hasMetadata:function(t,e){var l=arguments.length<3?void 0:a(arguments[2]);return r(t,c(e),l)}})},function(t,e,l){var n=l(0),i=l(53),c=l(2),o=i.has,d=i.toKey;n({target:"Reflect",stat:!0},{hasOwnMetadata:function(t,e){var l=arguments.length<3?void 0:d(arguments[2]);return o(t,c(e),l)}})},function(t,e,l){var n=l(0),i=l(53),c=l(2),o=i.toKey,d=i.set;n({target:"Reflect",stat:!0},{metadata:function(t,e){return function(l,n){d(t,e,c(l),o(n))}}})},function(t,e,l){"use strict";l(0)({target:"Set",proto:!0,real:!0,forced:!0},{addAll:l(213)})},function(t,e,l){"use strict";l(0)({target:"Set",proto:!0,real:!0,forced:!0},{deleteAll:l(127)})},function(t,e,l){"use strict";var n=l(0),i=l(11),c=l(5),o=l(6),d=l(2),a=l(33),r=l(8);n({target:"Set",proto:!0,real:!0,forced:!0},{difference:function(t){var e=d(this),l=new(a(e,i("Set")))(e),n=o(l.delete);return r(t,(function(t){c(n,l,t)})),l}})},function(t,e,l){"use strict";var n=l(0),i=l(2),c=l(22),o=l(70),d=l(8);n({target:"Set",proto:!0,real:!0,forced:!0},{every:function(t){var e=i(this),l=o(e),n=c(t,arguments.length>1?arguments[1]:void 0);return!d(l,(function(t,l){if(!n(t,t,e))return l()}),{IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,e,l){"use strict";var n=l(0),i=l(11),c=l(5),o=l(6),d=l(2),a=l(22),r=l(33),u=l(70),s=l(8);n({target:"Set",proto:!0,real:!0,forced:!0},{filter:function(t){var e=d(this),l=u(e),n=a(t,arguments.length>1?arguments[1]:void 0),Z=new(r(e,i("Set"))),b=o(Z.add);return s(l,(function(t){n(t,t,e)&&c(b,Z,t)}),{IS_ITERATOR:!0}),Z}})},function(t,e,l){"use strict";var n=l(0),i=l(2),c=l(22),o=l(70),d=l(8);n({target:"Set",proto:!0,real:!0,forced:!0},{find:function(t){var e=i(this),l=o(e),n=c(t,arguments.length>1?arguments[1]:void 0);return d(l,(function(t,l){if(n(t,t,e))return l(t)}),{IS_ITERATOR:!0,INTERRUPTED:!0}).result}})},function(t,e,l){l(0)({target:"Set",stat:!0,forced:!0},{from:l(128)})},function(t,e,l){"use strict";var n=l(0),i=l(11),c=l(5),o=l(6),d=l(2),a=l(33),r=l(8);n({target:"Set",proto:!0,real:!0,forced:!0},{intersection:function(t){var e=d(this),l=new(a(e,i("Set"))),n=o(e.has),u=o(l.add);return r(t,(function(t){c(n,e,t)&&c(u,l,t)})),l}})},function(t,e,l){"use strict";var n=l(0),i=l(5),c=l(6),o=l(2),d=l(8);n({target:"Set",proto:!0,real:!0,forced:!0},{isDisjointFrom:function(t){var e=o(this),l=c(e.has);return!d(t,(function(t,n){if(!0===i(l,e,t))return n()}),{INTERRUPTED:!0}).stopped}})},function(t,e,l){"use strict";var n=l(0),i=l(11),c=l(5),o=l(6),d=l(10),a=l(2),r=l(45),u=l(8);n({target:"Set",proto:!0,real:!0,forced:!0},{isSubsetOf:function(t){var e=r(this),l=a(t),n=l.has;return d(n)||(l=new(i("Set"))(t),n=o(l.has)),!u(e,(function(t,e){if(!1===c(n,l,t))return e()}),{IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,e,l){"use strict";var n=l(0),i=l(5),c=l(6),o=l(2),d=l(8);n({target:"Set",proto:!0,real:!0,forced:!0},{isSupersetOf:function(t){var e=o(this),l=c(e.has);return!d(t,(function(t,n){if(!1===i(l,e,t))return n()}),{INTERRUPTED:!0}).stopped}})},function(t,e,l){"use strict";var n=l(0),i=l(3),c=l(2),o=l(14),d=l(70),a=l(8),r=i([].join),u=[].push;n({target:"Set",proto:!0,real:!0,forced:!0},{join:function(t){var e=c(this),l=d(e),n=void 0===t?",":o(t),i=[];return a(l,u,{that:i,IS_ITERATOR:!0}),r(i,n)}})},function(t,e,l){"use strict";var n=l(0),i=l(11),c=l(22),o=l(5),d=l(6),a=l(2),r=l(33),u=l(70),s=l(8);n({target:"Set",proto:!0,real:!0,forced:!0},{map:function(t){var e=a(this),l=u(e),n=c(t,arguments.length>1?arguments[1]:void 0),Z=new(r(e,i("Set"))),b=d(Z.add);return s(l,(function(t){o(b,Z,n(t,t,e))}),{IS_ITERATOR:!0}),Z}})},function(t,e,l){l(0)({target:"Set",stat:!0,forced:!0},{of:l(129)})},function(t,e,l){"use strict";var n=l(0),i=l(1),c=l(6),o=l(2),d=l(70),a=l(8),r=i.TypeError;n({target:"Set",proto:!0,real:!0,forced:!0},{reduce:function(t){var e=o(this),l=d(e),n=arguments.length<2,i=n?void 0:arguments[1];if(c(t),a(l,(function(l){n?(n=!1,i=l):i=t(i,l,l,e)}),{IS_ITERATOR:!0}),n)throw r("Reduce of empty set with no initial value");return i}})},function(t,e,l){"use strict";var n=l(0),i=l(2),c=l(22),o=l(70),d=l(8);n({target:"Set",proto:!0,real:!0,forced:!0},{some:function(t){var e=i(this),l=o(e),n=c(t,arguments.length>1?arguments[1]:void 0);return d(l,(function(t,l){if(n(t,t,e))return l()}),{IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,e,l){"use strict";var n=l(0),i=l(11),c=l(5),o=l(6),d=l(2),a=l(33),r=l(8);n({target:"Set",proto:!0,real:!0,forced:!0},{symmetricDifference:function(t){var e=d(this),l=new(a(e,i("Set")))(e),n=o(l.delete),u=o(l.add);return r(t,(function(t){c(n,l,t)||c(u,l,t)})),l}})},function(t,e,l){"use strict";var n=l(0),i=l(11),c=l(6),o=l(2),d=l(33),a=l(8);n({target:"Set",proto:!0,real:!0,forced:!0},{union:function(t){var e=o(this),l=new(d(e,i("Set")))(e);return a(t,c(l.add),{that:l}),l}})},function(t,e,l){"use strict";var n=l(0),i=l(82).charAt,c=l(26),o=l(35),d=l(14);n({target:"String",proto:!0,forced:!0},{at:function(t){var e=d(c(this)),l=e.length,n=o(t),a=n>=0?n:l+n;return a<0||a>=l?void 0:i(e,a)}})},function(t,e,l){"use strict";var n=l(0),i=l(77),c=l(26),o=l(14),d=l(20),a=l(82),r=a.codeAt,u=a.charAt,s=d.set,Z=d.getterFor("String Iterator"),b=i((function(t){s(this,{type:"String Iterator",string:t,index:0})}),"String",(function(){var t,e=Z(this),l=e.string,n=e.index;return n>=l.length?{value:void 0,done:!0}:(t=u(l,n),e.index+=t.length,{value:{codePoint:r(t,0),position:n},done:!1})}));n({target:"String",proto:!0,forced:!0},{codePoints:function(){return new b(o(c(this)))}})},function(t,e,l){l(567)},function(t,e,l){"use strict";var n=l(0),i=l(1),c=l(5),o=l(3),d=l(26),a=l(10),r=l(96),u=l(14),s=l(27),Z=l(120),b=l(203),h=l(7),m=l(24),I=h("replace"),G=i.TypeError,p=o("".indexOf),g=o("".replace),X=o("".slice),V=Math.max,y=function(t,e,l){return l>t.length?-1:""===e?l:p(t,e,l)};n({target:"String",proto:!0},{replaceAll:function(t,e){var l,n,i,o,h,W,C,R,f,Y=d(this),S=0,v=0,K="";if(null!=t){if((l=r(t))&&(n=u(d(Z(t))),!~p(n,"g")))throw G("`.replaceAll` does not allow non-global regexes");if(i=s(t,I))return c(i,t,Y,e);if(m&&l)return g(u(Y),t,e)}for(o=u(Y),h=u(t),(W=a(e))||(e=u(e)),C=h.length,R=V(1,C),S=y(o,h,0);-1!==S;)f=W?u(e(h,S,o)):b(h,o,S,[],void 0,e),K+=X(o,v,S)+f,v=S+C,S=y(o,h,S+R);return v<o.length&&(K+=X(o,v)),K}})},function(t,e,l){l(25)("asyncDispose")},function(t,e,l){l(25)("dispose")},function(t,e,l){l(25)("observable")},function(t,e,l){l(25)("patternMatch")},function(t,e,l){l(25)("replaceAll")},function(t,e,l){"use strict";l(0)({target:"WeakMap",proto:!0,real:!0,forced:!0},{deleteAll:l(127)})},function(t,e,l){l(0)({target:"WeakMap",stat:!0,forced:!0},{from:l(128)})},function(t,e,l){l(0)({target:"WeakMap",stat:!0,forced:!0},{of:l(129)})},function(t,e,l){"use strict";l(0)({target:"WeakMap",proto:!0,real:!0,forced:!0},{upsert:l(160)})},function(t,e,l){"use strict";l(0)({target:"WeakSet",proto:!0,real:!0,forced:!0},{addAll:l(213)})},function(t,e,l){"use strict";l(0)({target:"WeakSet",proto:!0,real:!0,forced:!0},{deleteAll:l(127)})},function(t,e,l){l(0)({target:"WeakSet",stat:!0,forced:!0},{from:l(128)})},function(t,e,l){l(0)({target:"WeakSet",stat:!0,forced:!0},{of:l(129)})},function(t,e,l){var n=l(1),i=l(214),c=l(215),o=l(177),d=l(28),a=function(t){if(t&&t.forEach!==o)try{d(t,"forEach",o)}catch(e){t.forEach=o}};for(var r in i)i[r]&&a(n[r]&&n[r].prototype);a(c)},function(t,e,l){var n=l(1),i=l(214),c=l(215),o=l(109),d=l(28),a=l(7),r=a("iterator"),u=a("toStringTag"),s=o.values,Z=function(t,e){if(t){if(t[r]!==s)try{d(t,r,s)}catch(e){t[r]=s}if(t[u]||d(t,u,e),i[e])for(var l in o)if(t[l]!==o[l])try{d(t,l,o[l])}catch(e){t[l]=o[l]}}};for(var b in i)Z(n[b]&&n[b].prototype,b);Z(c,"DOMTokenList")},function(t,e,l){l(584),l(585)},function(t,e,l){var n=l(0),i=l(1),c=l(119).clear;n({global:!0,bind:!0,enumerable:!0,forced:i.clearImmediate!==c},{clearImmediate:c})},function(t,e,l){var n=l(0),i=l(1),c=l(119).set;n({global:!0,bind:!0,enumerable:!0,forced:i.setImmediate!==c},{setImmediate:c})},function(t,e,l){var n=l(0),i=l(1),c=l(194),o=l(6),d=l(94),a=l(78),r=i.process;n({global:!0,enumerable:!0,noTargetGet:!0},{queueMicrotask:function(t){d(arguments.length,1),o(t);var e=a&&r.domain;c(e?e.bind(t):t)}})},function(t,e,l){l(588),l(589)},function(t,e,l){var n=l(0),i=l(1),c=l(216).setInterval;n({global:!0,bind:!0,forced:i.setInterval!==c},{setInterval:c})},function(t,e,l){var n=l(0),i=l(1),c=l(216).setTimeout;n({global:!0,bind:!0,forced:i.setTimeout!==c},{setTimeout:c})},function(t,e,l){l(591)},function(t,e,l){"use strict";l(201);var n,i=l(0),c=l(9),o=l(217),d=l(1),a=l(22),r=l(3),u=l(106).f,s=l(19),Z=l(42),b=l(15),h=l(190),m=l(178),I=l(89),G=l(82).codeAt,p=l(592),g=l(14),X=l(41),V=l(94),y=l(218),W=l(20),C=W.set,R=W.getterFor("URL"),f=y.URLSearchParams,Y=y.getState,S=d.URL,v=d.TypeError,K=d.parseInt,N=Math.floor,J=Math.pow,H=r("".charAt),U=r(/./.exec),L=r([].join),k=r(1..toString),T=r([].pop),B=r([].push),F=r("".replace),A=r([].shift),x=r("".split),z=r("".slice),w=r("".toLowerCase),Q=r([].unshift),P=/[a-z]/i,j=/[\d+-.a-z]/i,M=/\d/,E=/^0x/i,D=/^[0-7]+$/,O=/^\d+$/,_=/^[\da-f]+$/i,q=/[\0\t\n\r #%/:<>?@[\\\]^|]/,$=/[\0\t\n\r #/:<>?@[\\\]^|]/,tt=/^[\u0000-\u0020]+|[\u0000-\u0020]+$/g,et=/[\t\n\r]/g,lt=function(t){var e,l,n,i;if("number"==typeof t){for(e=[],l=0;l<4;l++)Q(e,t%256),t=N(t/256);return L(e,".")}if("object"==typeof t){for(e="",n=function(t){for(var e=null,l=1,n=null,i=0,c=0;c<8;c++)0!==t[c]?(i>l&&(e=n,l=i),n=null,i=0):(null===n&&(n=c),++i);return i>l&&(e=n,l=i),e}(t),l=0;l<8;l++)i&&0===t[l]||(i&&(i=!1),n===l?(e+=l?":":"::",i=!0):(e+=k(t[l],16),l<7&&(e+=":")));return"["+e+"]"}return t},nt={},it=h({},nt,{" ":1,'"':1,"<":1,">":1,"`":1}),ct=h({},it,{"#":1,"?":1,"{":1,"}":1}),ot=h({},ct,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),dt=function(t,e){var l=G(t,0);return l>32&&l<127&&!b(e,t)?t:encodeURIComponent(t)},at={ftp:21,file:null,http:80,https:443,ws:80,wss:443},rt=function(t,e){var l;return 2==t.length&&U(P,H(t,0))&&(":"==(l=H(t,1))||!e&&"|"==l)},ut=function(t){var e;return t.length>1&&rt(z(t,0,2))&&(2==t.length||"/"===(e=H(t,2))||"\\"===e||"?"===e||"#"===e)},st=function(t){return"."===t||"%2e"===w(t)},Zt={},bt={},ht={},mt={},It={},Gt={},pt={},gt={},Xt={},Vt={},yt={},Wt={},Ct={},Rt={},ft={},Yt={},St={},vt={},Kt={},Nt={},Jt={},Ht=function(t,e,l){var n,i,c,o=g(t);if(e){if(i=this.parse(o))throw v(i);this.searchParams=null}else{if(void 0!==l&&(n=new Ht(l,!0)),i=this.parse(o,null,n))throw v(i);(c=Y(new f)).bindURL(this),this.searchParams=c}};Ht.prototype={type:"URL",parse:function(t,e,l){var i,c,o,d,a,r=this,u=e||Zt,s=0,Z="",h=!1,G=!1,p=!1;for(t=g(t),e||(r.scheme="",r.username="",r.password="",r.host=null,r.port=null,r.path=[],r.query=null,r.fragment=null,r.cannotBeABaseURL=!1,t=F(t,tt,"")),t=F(t,et,""),i=m(t);s<=i.length;){switch(c=i[s],u){case Zt:if(!c||!U(P,c)){if(e)return"Invalid scheme";u=ht;continue}Z+=w(c),u=bt;break;case bt:if(c&&(U(j,c)||"+"==c||"-"==c||"."==c))Z+=w(c);else{if(":"!=c){if(e)return"Invalid scheme";Z="",u=ht,s=0;continue}if(e&&(r.isSpecial()!=b(at,Z)||"file"==Z&&(r.includesCredentials()||null!==r.port)||"file"==r.scheme&&!r.host))return;if(r.scheme=Z,e)return void(r.isSpecial()&&at[r.scheme]==r.port&&(r.port=null));Z="","file"==r.scheme?u=Rt:r.isSpecial()&&l&&l.scheme==r.scheme?u=mt:r.isSpecial()?u=gt:"/"==i[s+1]?(u=It,s++):(r.cannotBeABaseURL=!0,B(r.path,""),u=Kt)}break;case ht:if(!l||l.cannotBeABaseURL&&"#"!=c)return"Invalid scheme";if(l.cannotBeABaseURL&&"#"==c){r.scheme=l.scheme,r.path=I(l.path),r.query=l.query,r.fragment="",r.cannotBeABaseURL=!0,u=Jt;break}u="file"==l.scheme?Rt:Gt;continue;case mt:if("/"!=c||"/"!=i[s+1]){u=Gt;continue}u=Xt,s++;break;case It:if("/"==c){u=Vt;break}u=vt;continue;case Gt:if(r.scheme=l.scheme,c==n)r.username=l.username,r.password=l.password,r.host=l.host,r.port=l.port,r.path=I(l.path),r.query=l.query;else if("/"==c||"\\"==c&&r.isSpecial())u=pt;else if("?"==c)r.username=l.username,r.password=l.password,r.host=l.host,r.port=l.port,r.path=I(l.path),r.query="",u=Nt;else{if("#"!=c){r.username=l.username,r.password=l.password,r.host=l.host,r.port=l.port,r.path=I(l.path),r.path.length--,u=vt;continue}r.username=l.username,r.password=l.password,r.host=l.host,r.port=l.port,r.path=I(l.path),r.query=l.query,r.fragment="",u=Jt}break;case pt:if(!r.isSpecial()||"/"!=c&&"\\"!=c){if("/"!=c){r.username=l.username,r.password=l.password,r.host=l.host,r.port=l.port,u=vt;continue}u=Vt}else u=Xt;break;case gt:if(u=Xt,"/"!=c||"/"!=H(Z,s+1))continue;s++;break;case Xt:if("/"!=c&&"\\"!=c){u=Vt;continue}break;case Vt:if("@"==c){h&&(Z="%40"+Z),h=!0,o=m(Z);for(var X=0;X<o.length;X++){var V=o[X];if(":"!=V||p){var y=dt(V,ot);p?r.password+=y:r.username+=y}else p=!0}Z=""}else if(c==n||"/"==c||"?"==c||"#"==c||"\\"==c&&r.isSpecial()){if(h&&""==Z)return"Invalid authority";s-=m(Z).length+1,Z="",u=yt}else Z+=c;break;case yt:case Wt:if(e&&"file"==r.scheme){u=Yt;continue}if(":"!=c||G){if(c==n||"/"==c||"?"==c||"#"==c||"\\"==c&&r.isSpecial()){if(r.isSpecial()&&""==Z)return"Invalid host";if(e&&""==Z&&(r.includesCredentials()||null!==r.port))return;if(d=r.parseHost(Z))return d;if(Z="",u=St,e)return;continue}"["==c?G=!0:"]"==c&&(G=!1),Z+=c}else{if(""==Z)return"Invalid host";if(d=r.parseHost(Z))return d;if(Z="",u=Ct,e==Wt)return}break;case Ct:if(!U(M,c)){if(c==n||"/"==c||"?"==c||"#"==c||"\\"==c&&r.isSpecial()||e){if(""!=Z){var W=K(Z,10);if(W>65535)return"Invalid port";r.port=r.isSpecial()&&W===at[r.scheme]?null:W,Z=""}if(e)return;u=St;continue}return"Invalid port"}Z+=c;break;case Rt:if(r.scheme="file","/"==c||"\\"==c)u=ft;else{if(!l||"file"!=l.scheme){u=vt;continue}if(c==n)r.host=l.host,r.path=I(l.path),r.query=l.query;else if("?"==c)r.host=l.host,r.path=I(l.path),r.query="",u=Nt;else{if("#"!=c){ut(L(I(i,s),""))||(r.host=l.host,r.path=I(l.path),r.shortenPath()),u=vt;continue}r.host=l.host,r.path=I(l.path),r.query=l.query,r.fragment="",u=Jt}}break;case ft:if("/"==c||"\\"==c){u=Yt;break}l&&"file"==l.scheme&&!ut(L(I(i,s),""))&&(rt(l.path[0],!0)?B(r.path,l.path[0]):r.host=l.host),u=vt;continue;case Yt:if(c==n||"/"==c||"\\"==c||"?"==c||"#"==c){if(!e&&rt(Z))u=vt;else if(""==Z){if(r.host="",e)return;u=St}else{if(d=r.parseHost(Z))return d;if("localhost"==r.host&&(r.host=""),e)return;Z="",u=St}continue}Z+=c;break;case St:if(r.isSpecial()){if(u=vt,"/"!=c&&"\\"!=c)continue}else if(e||"?"!=c)if(e||"#"!=c){if(c!=n&&(u=vt,"/"!=c))continue}else r.fragment="",u=Jt;else r.query="",u=Nt;break;case vt:if(c==n||"/"==c||"\\"==c&&r.isSpecial()||!e&&("?"==c||"#"==c)){if(".."===(a=w(a=Z))||"%2e."===a||".%2e"===a||"%2e%2e"===a?(r.shortenPath(),"/"==c||"\\"==c&&r.isSpecial()||B(r.path,"")):st(Z)?"/"==c||"\\"==c&&r.isSpecial()||B(r.path,""):("file"==r.scheme&&!r.path.length&&rt(Z)&&(r.host&&(r.host=""),Z=H(Z,0)+":"),B(r.path,Z)),Z="","file"==r.scheme&&(c==n||"?"==c||"#"==c))for(;r.path.length>1&&""===r.path[0];)A(r.path);"?"==c?(r.query="",u=Nt):"#"==c&&(r.fragment="",u=Jt)}else Z+=dt(c,ct);break;case Kt:"?"==c?(r.query="",u=Nt):"#"==c?(r.fragment="",u=Jt):c!=n&&(r.path[0]+=dt(c,nt));break;case Nt:e||"#"!=c?c!=n&&("'"==c&&r.isSpecial()?r.query+="%27":r.query+="#"==c?"%23":dt(c,nt)):(r.fragment="",u=Jt);break;case Jt:c!=n&&(r.fragment+=dt(c,it))}s++}},parseHost:function(t){var e,l,n;if("["==H(t,0)){if("]"!=H(t,t.length-1))return"Invalid host";if(!(e=function(t){var e,l,n,i,c,o,d,a=[0,0,0,0,0,0,0,0],r=0,u=null,s=0,Z=function(){return H(t,s)};if(":"==Z()){if(":"!=H(t,1))return;s+=2,u=++r}for(;Z();){if(8==r)return;if(":"!=Z()){for(e=l=0;l<4&&U(_,Z());)e=16*e+K(Z(),16),s++,l++;if("."==Z()){if(0==l)return;if(s-=l,r>6)return;for(n=0;Z();){if(i=null,n>0){if(!("."==Z()&&n<4))return;s++}if(!U(M,Z()))return;for(;U(M,Z());){if(c=K(Z(),10),null===i)i=c;else{if(0==i)return;i=10*i+c}if(i>255)return;s++}a[r]=256*a[r]+i,2!=++n&&4!=n||r++}if(4!=n)return;break}if(":"==Z()){if(s++,!Z())return}else if(Z())return;a[r++]=e}else{if(null!==u)return;s++,u=++r}}if(null!==u)for(o=r-u,r=7;0!=r&&o>0;)d=a[r],a[r--]=a[u+o-1],a[u+--o]=d;else if(8!=r)return;return a}(z(t,1,-1))))return"Invalid host";this.host=e}else if(this.isSpecial()){if(t=p(t),U(q,t))return"Invalid host";if(null===(e=function(t){var e,l,n,i,c,o,d,a=x(t,".");if(a.length&&""==a[a.length-1]&&a.length--,(e=a.length)>4)return t;for(l=[],n=0;n<e;n++){if(""==(i=a[n]))return t;if(c=10,i.length>1&&"0"==H(i,0)&&(c=U(E,i)?16:8,i=z(i,8==c?1:2)),""===i)o=0;else{if(!U(10==c?O:8==c?D:_,i))return t;o=K(i,c)}B(l,o)}for(n=0;n<e;n++)if(o=l[n],n==e-1){if(o>=J(256,5-e))return null}else if(o>255)return null;for(d=T(l),n=0;n<l.length;n++)d+=l[n]*J(256,3-n);return d}(t)))return"Invalid host";this.host=e}else{if(U($,t))return"Invalid host";for(e="",l=m(t),n=0;n<l.length;n++)e+=dt(l[n],nt);this.host=e}},cannotHaveUsernamePasswordPort:function(){return!this.host||this.cannotBeABaseURL||"file"==this.scheme},includesCredentials:function(){return""!=this.username||""!=this.password},isSpecial:function(){return b(at,this.scheme)},shortenPath:function(){var t=this.path,e=t.length;!e||"file"==this.scheme&&1==e&&rt(t[0],!0)||t.length--},serialize:function(){var t=this,e=t.scheme,l=t.username,n=t.password,i=t.host,c=t.port,o=t.path,d=t.query,a=t.fragment,r=e+":";return null!==i?(r+="//",t.includesCredentials()&&(r+=l+(n?":"+n:"")+"@"),r+=lt(i),null!==c&&(r+=":"+c)):"file"==e&&(r+="//"),r+=t.cannotBeABaseURL?o[0]:o.length?"/"+L(o,"/"):"",null!==d&&(r+="?"+d),null!==a&&(r+="#"+a),r},setHref:function(t){var e=this.parse(t);if(e)throw v(e);this.searchParams.update()},getOrigin:function(){var t=this.scheme,e=this.port;if("blob"==t)try{return new Ut(t.path[0]).origin}catch(t){return"null"}return"file"!=t&&this.isSpecial()?t+"://"+lt(this.host)+(null!==e?":"+e:""):"null"},getProtocol:function(){return this.scheme+":"},setProtocol:function(t){this.parse(g(t)+":",Zt)},getUsername:function(){return this.username},setUsername:function(t){var e=m(g(t));if(!this.cannotHaveUsernamePasswordPort()){this.username="";for(var l=0;l<e.length;l++)this.username+=dt(e[l],ot)}},getPassword:function(){return this.password},setPassword:function(t){var e=m(g(t));if(!this.cannotHaveUsernamePasswordPort()){this.password="";for(var l=0;l<e.length;l++)this.password+=dt(e[l],ot)}},getHost:function(){var t=this.host,e=this.port;return null===t?"":null===e?lt(t):lt(t)+":"+e},setHost:function(t){this.cannotBeABaseURL||this.parse(t,yt)},getHostname:function(){var t=this.host;return null===t?"":lt(t)},setHostname:function(t){this.cannotBeABaseURL||this.parse(t,Wt)},getPort:function(){var t=this.port;return null===t?"":g(t)},setPort:function(t){this.cannotHaveUsernamePasswordPort()||(""==(t=g(t))?this.port=null:this.parse(t,Ct))},getPathname:function(){var t=this.path;return this.cannotBeABaseURL?t[0]:t.length?"/"+L(t,"/"):""},setPathname:function(t){this.cannotBeABaseURL||(this.path=[],this.parse(t,St))},getSearch:function(){var t=this.query;return t?"?"+t:""},setSearch:function(t){""==(t=g(t))?this.query=null:("?"==H(t,0)&&(t=z(t,1)),this.query="",this.parse(t,Nt)),this.searchParams.update()},getSearchParams:function(){return this.searchParams.facade},getHash:function(){var t=this.fragment;return t?"#"+t:""},setHash:function(t){""!=(t=g(t))?("#"==H(t,0)&&(t=z(t,1)),this.fragment="",this.parse(t,Jt)):this.fragment=null},update:function(){this.query=this.searchParams.serialize()||null}};var Ut=function(t){var e=Z(this,Lt),l=V(arguments.length,1)>1?arguments[1]:void 0,n=C(e,new Ht(t,!1,l));c||(e.href=n.serialize(),e.origin=n.getOrigin(),e.protocol=n.getProtocol(),e.username=n.getUsername(),e.password=n.getPassword(),e.host=n.getHost(),e.hostname=n.getHostname(),e.port=n.getPort(),e.pathname=n.getPathname(),e.search=n.getSearch(),e.searchParams=n.getSearchParams(),e.hash=n.getHash())},Lt=Ut.prototype,kt=function(t,e){return{get:function(){return R(this)[t]()},set:e&&function(t){return R(this)[e](t)},configurable:!0,enumerable:!0}};if(c&&u(Lt,{href:kt("serialize","setHref"),origin:kt("getOrigin"),protocol:kt("getProtocol","setProtocol"),username:kt("getUsername","setUsername"),password:kt("getPassword","setPassword"),host:kt("getHost","setHost"),hostname:kt("getHostname","setHostname"),port:kt("getPort","setPort"),pathname:kt("getPathname","setPathname"),search:kt("getSearch","setSearch"),searchParams:kt("getSearchParams"),hash:kt("getHash","setHash")}),s(Lt,"toJSON",(function(){return R(this).serialize()}),{enumerable:!0}),s(Lt,"toString",(function(){return R(this).serialize()}),{enumerable:!0}),S){var Tt=S.createObjectURL,Bt=S.revokeObjectURL;Tt&&s(Ut,"createObjectURL",a(Tt,S)),Bt&&s(Ut,"revokeObjectURL",a(Bt,S))}X(Ut,"URL"),i({global:!0,forced:!o,sham:!c},{URL:Ut})},function(t,e,l){"use strict";var n=l(1),i=l(3),c=/[^\0-\u007E]/,o=/[.\u3002\uFF0E\uFF61]/g,d="Overflow: input needs wider integers to process",a=n.RangeError,r=i(o.exec),u=Math.floor,s=String.fromCharCode,Z=i("".charCodeAt),b=i([].join),h=i([].push),m=i("".replace),I=i("".split),G=i("".toLowerCase),p=function(t){return t+22+75*(t<26)},g=function(t,e,l){var n=0;for(t=l?u(t/700):t>>1,t+=u(t/e);t>455;)t=u(t/35),n+=36;return u(n+36*t/(t+38))},X=function(t){var e,l,n=[],i=(t=function(t){for(var e=[],l=0,n=t.length;l<n;){var i=Z(t,l++);if(i>=55296&&i<=56319&&l<n){var c=Z(t,l++);56320==(64512&c)?h(e,((1023&i)<<10)+(1023&c)+65536):(h(e,i),l--)}else h(e,i)}return e}(t)).length,c=128,o=0,r=72;for(e=0;e<t.length;e++)(l=t[e])<128&&h(n,s(l));var m=n.length,I=m;for(m&&h(n,"-");I<i;){var G=2147483647;for(e=0;e<t.length;e++)(l=t[e])>=c&&l<G&&(G=l);var X=I+1;if(G-c>u((2147483647-o)/X))throw a(d);for(o+=(G-c)*X,c=G,e=0;e<t.length;e++){if((l=t[e])<c&&++o>2147483647)throw a(d);if(l==c){for(var V=o,y=36;;){var W=y<=r?1:y>=r+26?26:y-r;if(V<W)break;var C=V-W,R=36-W;h(n,s(p(W+C%R))),V=u(C/R),y+=36}h(n,s(p(V))),r=g(o,X,I==m),o=0,I++}}o++,c++}return b(n,"")};t.exports=function(t){var e,l,n=[],i=I(m(G(t),o,"."),".");for(e=0;e<i.length;e++)l=i[e],h(n,r(c,l)?"xn--"+X(l):l);return b(n,".")}},function(t,e,l){"use strict";var n=l(0),i=l(5);n({target:"URL",proto:!0,enumerable:!0},{toJSON:function(){return i(URL.prototype.toString,this)}})},function(t,e,l){l(218)},function(t,e,l){var n=function(t){"use strict";var e=Object.prototype,l=e.hasOwnProperty,n="function"==typeof Symbol?Symbol:{},i=n.iterator||"@@iterator",c=n.asyncIterator||"@@asyncIterator",o=n.toStringTag||"@@toStringTag";function d(t,e,l){return Object.defineProperty(t,e,{value:l,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{d({},"")}catch(t){d=function(t,e,l){return t[e]=l}}function a(t,e,l,n){var i=e&&e.prototype instanceof s?e:s,c=Object.create(i.prototype),o=new W(n||[]);return c._invoke=function(t,e,l){var n="suspendedStart";return function(i,c){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===i)throw c;return R()}for(l.method=i,l.arg=c;;){var o=l.delegate;if(o){var d=X(o,l);if(d){if(d===u)continue;return d}}if("next"===l.method)l.sent=l._sent=l.arg;else if("throw"===l.method){if("suspendedStart"===n)throw n="completed",l.arg;l.dispatchException(l.arg)}else"return"===l.method&&l.abrupt("return",l.arg);n="executing";var a=r(t,e,l);if("normal"===a.type){if(n=l.done?"completed":"suspendedYield",a.arg===u)continue;return{value:a.arg,done:l.done}}"throw"===a.type&&(n="completed",l.method="throw",l.arg=a.arg)}}}(t,l,o),c}function r(t,e,l){try{return{type:"normal",arg:t.call(e,l)}}catch(t){return{type:"throw",arg:t}}}t.wrap=a;var u={};function s(){}function Z(){}function b(){}var h={};d(h,i,(function(){return this}));var m=Object.getPrototypeOf,I=m&&m(m(C([])));I&&I!==e&&l.call(I,i)&&(h=I);var G=b.prototype=s.prototype=Object.create(h);function p(t){["next","throw","return"].forEach((function(e){d(t,e,(function(t){return this._invoke(e,t)}))}))}function g(t,e){var n;this._invoke=function(i,c){function o(){return new e((function(n,o){!function n(i,c,o,d){var a=r(t[i],t,c);if("throw"!==a.type){var u=a.arg,s=u.value;return s&&"object"==typeof s&&l.call(s,"__await")?e.resolve(s.__await).then((function(t){n("next",t,o,d)}),(function(t){n("throw",t,o,d)})):e.resolve(s).then((function(t){u.value=t,o(u)}),(function(t){return n("throw",t,o,d)}))}d(a.arg)}(i,c,n,o)}))}return n=n?n.then(o,o):o()}}function X(t,e){var l=t.iterator[e.method];if(void 0===l){if(e.delegate=null,"throw"===e.method){if(t.iterator.return&&(e.method="return",e.arg=void 0,X(t,e),"throw"===e.method))return u;e.method="throw",e.arg=new TypeError("The iterator does not provide a 'throw' method")}return u}var n=r(l,t.iterator,e.arg);if("throw"===n.type)return e.method="throw",e.arg=n.arg,e.delegate=null,u;var i=n.arg;return i?i.done?(e[t.resultName]=i.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=void 0),e.delegate=null,u):i:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,u)}function V(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function y(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function W(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(V,this),this.reset(!0)}function C(t){if(t){var e=t[i];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,c=function e(){for(;++n<t.length;)if(l.call(t,n))return e.value=t[n],e.done=!1,e;return e.value=void 0,e.done=!0,e};return c.next=c}}return{next:R}}function R(){return{value:void 0,done:!0}}return Z.prototype=b,d(G,"constructor",b),d(b,"constructor",Z),Z.displayName=d(b,o,"GeneratorFunction"),t.isGeneratorFunction=function(t){var e="function"==typeof t&&t.constructor;return!!e&&(e===Z||"GeneratorFunction"===(e.displayName||e.name))},t.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,b):(t.__proto__=b,d(t,o,"GeneratorFunction")),t.prototype=Object.create(G),t},t.awrap=function(t){return{__await:t}},p(g.prototype),d(g.prototype,c,(function(){return this})),t.AsyncIterator=g,t.async=function(e,l,n,i,c){void 0===c&&(c=Promise);var o=new g(a(e,l,n,i),c);return t.isGeneratorFunction(l)?o:o.next().then((function(t){return t.done?t.value:o.next()}))},p(G),d(G,o,"Generator"),d(G,i,(function(){return this})),d(G,"toString",(function(){return"[object Generator]"})),t.keys=function(t){var e=[];for(var l in t)e.push(l);return e.reverse(),function l(){for(;e.length;){var n=e.pop();if(n in t)return l.value=n,l.done=!1,l}return l.done=!0,l}},t.values=C,W.prototype={constructor:W,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(y),!t)for(var e in this)"t"===e.charAt(0)&&l.call(this,e)&&!isNaN(+e.slice(1))&&(this[e]=void 0)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var e=this;function n(l,n){return o.type="throw",o.arg=t,e.next=l,n&&(e.method="next",e.arg=void 0),!!n}for(var i=this.tryEntries.length-1;i>=0;--i){var c=this.tryEntries[i],o=c.completion;if("root"===c.tryLoc)return n("end");if(c.tryLoc<=this.prev){var d=l.call(c,"catchLoc"),a=l.call(c,"finallyLoc");if(d&&a){if(this.prev<c.catchLoc)return n(c.catchLoc,!0);if(this.prev<c.finallyLoc)return n(c.finallyLoc)}else if(d){if(this.prev<c.catchLoc)return n(c.catchLoc,!0)}else{if(!a)throw new Error("try statement without catch or finally");if(this.prev<c.finallyLoc)return n(c.finallyLoc)}}}},abrupt:function(t,e){for(var n=this.tryEntries.length-1;n>=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&l.call(i,"finallyLoc")&&this.prev<i.finallyLoc){var c=i;break}}c&&("break"===t||"continue"===t)&&c.tryLoc<=e&&e<=c.finallyLoc&&(c=null);var o=c?c.completion:{};return o.type=t,o.arg=e,c?(this.method="next",this.next=c.finallyLoc,u):this.complete(o)},complete:function(t,e){if("throw"===t.type)throw t.arg;return"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=this.arg=t.arg,this.method="return",this.next="end"):"normal"===t.type&&e&&(this.next=e),u},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var l=this.tryEntries[e];if(l.finallyLoc===t)return this.complete(l.completion,l.afterLoc),y(l),u}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var l=this.tryEntries[e];if(l.tryLoc===t){var n=l.completion;if("throw"===n.type){var i=n.arg;y(l)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,l){return this.delegate={iterator:C(t),resultName:e,nextLoc:l},"next"===this.method&&(this.arg=void 0),u}},t}(t.exports);try{regeneratorRuntime=n}catch(t){"object"==typeof globalThis?globalThis.regeneratorRuntime=n:Function("r","regeneratorRuntime = r")(n)}},function(t,e,l){"use strict";l.r(e),l.d(e,"AUTHORIZATION_CODE",(function(){return n.a})),l.d(e,"AsgardeoAuthClient",(function(){return n.b})),l.d(e,"AsgardeoAuthException",(function(){return n.c})),l.d(e,"AsgardeoSPAClient",(function(){return n.d})),l.d(e,"AuthenticationHelper",(function(){return n.e})),l.d(e,"AuthenticationUtils",(function(){return n.f})),l.d(e,"CLAIM_VALIDATION_ERROR",(function(){return n.g})),l.d(e,"CLIENT_ID_TAG",(function(){return n.h})),l.d(e,"CLIENT_SECRET_TAG",(function(){return n.i})),l.d(e,"DataLayer",(function(){return n.j})),l.d(e,"Hooks",(function(){return n.k})),l.d(e,"NBF_CLAIM",(function(){return n.l})),l.d(e,"OIDC_SCOPE",(function(){return n.m})),l.d(e,"PKCE_CODE_VERIFIER",(function(){return n.n})),l.d(e,"PKCE_SEPARATOR",(function(){return n.o})),l.d(e,"REFRESH_TOKEN_TIMER",(function(){return n.p})),l.d(e,"ResponseMode",(function(){return n.q})),l.d(e,"SCOPE_TAG",(function(){return n.r})),l.d(e,"SESSION_STATE",(function(){return n.s})),l.d(e,"SIGN_OUT_SUCCESS_PARAM",(function(){return n.t})),l.d(e,"SIGN_OUT_URL",(function(){return n.u})),l.d(e,"SPAHelper",(function(){return n.v})),l.d(e,"SPAUtils",(function(){return n.w})),l.d(e,"STATE",(function(){return n.x})),l.d(e,"SUPPORTED_SIGNATURE_ALGORITHMS",(function(){return n.y})),l.d(e,"Storage",(function(){return n.z})),l.d(e,"Stores",(function(){return n.A})),l.d(e,"TOKEN_TAG",(function(){return n.B})),l.d(e,"USERNAME_TAG",(function(){return n.C})),l.d(e,"WebWorkerClass",(function(){return n.D})),l.d(e,"workerReceiver",(function(){return n.E})),l.d(e,"AuthProvider",(function(){return W})),l.d(e,"useAuthContext",(function(){return C})),l.d(e,"SecureRoute",(function(){return v})),l.d(e,"AuthenticatedComponent",(function(){return K})),l.d(e,"SecureApp",(function(){return J}));l(220),l(227),l(228),l(229),l(230),l(231),l(232),l(233),l(234),l(235),l(236),l(237),l(238),l(239),l(240),l(241),l(242),l(243),l(244),l(245),l(246),l(247),l(248),l(249),l(250),l(251),l(252),l(253),l(254),l(109),l(255),l(256),l(257),l(258),l(259),l(260),l(261),l(262),l(263),l(264),l(265),l(266),l(267),l(268),l(269),l(271),l(272),l(273),l(275),l(276),l(278),l(279),l(281),l(282),l(283),l(284),l(285),l(174),l(286),l(147),l(288),l(289),l(290),l(291),l(292),l(293),l(294),l(295),l(296),l(297),l(298),l(300),l(301),l(302),l(303),l(304),l(305),l(306),l(307),l(308),l(309),l(310),l(311),l(312),l(313),l(314),l(315),l(316),l(317),l(318),l(319),l(320),l(321),l(322),l(323),l(324),l(325),l(326),l(327),l(328),l(329),l(330),l(331),l(332),l(333),l(334),l(335),l(336),l(337),l(338),l(339),l(340),l(341),l(342),l(344),l(345),l(346),l(347),l(358),l(359),l(360),l(361),l(362),l(363),l(364),l(365),l(366),l(367),l(368),l(369),l(370),l(371),l(372),l(373),l(154),l(375),l(376),l(377),l(378),l(379),l(381),l(382),l(383),l(384),l(201),l(385),l(386),l(387),l(388),l(389),l(390),l(391),l(392),l(393),l(394),l(395),l(396),l(398),l(400),l(401),l(402),l(403),l(404),l(405),l(406),l(407),l(408),l(409),l(410),l(411),l(412),l(413),l(414),l(415),l(416),l(417),l(418),l(419),l(420),l(421),l(422),l(423),l(424),l(425),l(428),l(429),l(430),l(431),l(432),l(433),l(434),l(435),l(436),l(437),l(438),l(439),l(440),l(441),l(442),l(443),l(444),l(445),l(446),l(447),l(448),l(159),l(450),l(452),l(459),l(460),l(461),l(462),l(463),l(464),l(465),l(466),l(467),l(468),l(469),l(470),l(471),l(472),l(473),l(474),l(475),l(476),l(477),l(478),l(479),l(480),l(481),l(482),l(483),l(484),l(485),l(486),l(487),l(488),l(489),l(490),l(491),l(492),l(493),l(494),l(495),l(496),l(497),l(498),l(499),l(501),l(502),l(503),l(504),l(505),l(506),l(507),l(508),l(509),l(510),l(511),l(512),l(513),l(514),l(515),l(516),l(517),l(518),l(519),l(520),l(521),l(522),l(523),l(524),l(525),l(526),l(527),l(528),l(529),l(533),l(535),l(536),l(537),l(538),l(539),l(541),l(542),l(543),l(544),l(545),l(546),l(547),l(548),l(549),l(550),l(551),l(552),l(553),l(554),l(555),l(556),l(557),l(558),l(559),l(560),l(561),l(562),l(563),l(564),l(565),l(566),l(568),l(569),l(570),l(571),l(572),l(573),l(574),l(575),l(576),l(577),l(578),l(579),l(580),l(581),l(582),l(583),l(586),l(587),l(590),l(593),l(594),l(595);var n=l(54),i=l(23),c=l.n(i);function o(t,e){var l=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),l.push.apply(l,n)}return l}function d(t){for(var e=1;e<arguments.length;e++){var l=null!=arguments[e]?arguments[e]:{};e%2?o(Object(l),!0).forEach((function(e){s(t,e,l[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(l)):o(Object(l)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(l,e))}))}return t}function a(t,e,l,n,i,c,o){try{var d=t[c](o),a=d.value}catch(t){return void l(t)}d.done?e(a):Promise.resolve(a).then(n,i)}function r(t){return function(){var e=this,l=arguments;return new Promise((function(n,i){var c=t.apply(e,l);function o(t){a(c,n,i,o,d,"next",t)}function d(t){a(c,n,i,o,d,"throw",t)}o(void 0)}))}}function u(t,e){for(var l=0;l<e.length;l++){var n=e[l];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}function s(t,e,l){return e in t?Object.defineProperty(t,e,{value:l,enumerable:!0,configurable:!0,writable:!0}):t[e]=l,t}var Z=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),s(this,"_authState",t.DEFAULT_STATE),s(this,"_client",void 0),this._client=null!=e?e:n.d.getInstance(),this.getState=this.getState.bind(this),this.init=this.init.bind(this),this.signIn=this.signIn.bind(this),this.signOut=this.signOut.bind(this),this.updateState=this.updateState.bind(this)}var e,l,i,c,o,a,Z,b,h,m,I,G,p,g,X,V,y,W,C,R;return e=t,(l=[{key:"getState",value:function(){return this._authState}},{key:"init",value:function(t){return this._client.initialize(t)}},{key:"signIn",value:(R=r(regeneratorRuntime.mark((function t(e,l,n,i,c,o,a){var u=this;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.signIn(n,i,c,o).then(function(){var t=r(regeneratorRuntime.mark((function t(n){var i;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(n){t.next=2;break}return t.abrupt("return");case 2:return t.next=4,u._client.isAuthenticated();case 4:if(!t.sent){t.next=9;break}i={allowedScopes:n.allowedScopes,displayName:n.displayName,email:n.email,isAuthenticated:!0,isLoading:!1,isSigningOut:!1,sub:n.sub,username:n.username},u.updateState(i),e(d(d({},l),i)),a&&a(n);case 9:return t.abrupt("return",n);case 10:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}()).catch((function(t){return Promise.reject(t)})));case 1:case"end":return t.stop()}}),t,this)}))),function(t,e,l,n,i,c,o){return R.apply(this,arguments)})},{key:"signOut",value:function(t,e,l){return this._client.signOut().then((function(t){return l&&l(t),t})).catch((function(t){return Promise.reject(t)}))}},{key:"updateState",value:function(t){this._authState=d(d({},this._authState),t)}},{key:"getBasicUserInfo",value:(C=r(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.getBasicUserInfo());case 1:case"end":return t.stop()}}),t,this)}))),function(){return C.apply(this,arguments)})},{key:"httpRequest",value:(W=r(regeneratorRuntime.mark((function t(e){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.httpRequest(e));case 1:case"end":return t.stop()}}),t,this)}))),function(t){return W.apply(this,arguments)})},{key:"httpRequestAll",value:(y=r(regeneratorRuntime.mark((function t(e){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.httpRequestAll(e));case 1:case"end":return t.stop()}}),t,this)}))),function(t){return y.apply(this,arguments)})},{key:"requestCustomGrant",value:function(t,e,l){var n=this;return this._client.requestCustomGrant(t).then((function(i){if(i)return t.returnsSession&&(n.updateState(d(d(d({},n.getState()),i),{},{isAuthenticated:!0,isLoading:!1})),l(d(d({},i),{},{isAuthenticated:!0,isLoading:!1}))),e&&e(i),i})).catch((function(t){return Promise.reject(t)}))}},{key:"revokeAccessToken",value:(V=r(regeneratorRuntime.mark((function e(l){var n=this;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this._client.revokeAccessToken().then((function(){return n.updateState(d(d({},t.DEFAULT_STATE),{},{isLoading:!1})),l(t.DEFAULT_STATE),!0})).catch((function(t){return Promise.reject(t)})));case 1:case"end":return e.stop()}}),e,this)}))),function(t){return V.apply(this,arguments)})},{key:"getOIDCServiceEndpoints",value:(X=r(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.getOIDCServiceEndpoints());case 1:case"end":return t.stop()}}),t,this)}))),function(){return X.apply(this,arguments)})},{key:"getHttpClient",value:(g=r(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.getHttpClient());case 1:case"end":return t.stop()}}),t,this)}))),function(){return g.apply(this,arguments)})},{key:"getDecodedIDToken",value:(p=r(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.getDecodedIDToken());case 1:case"end":return t.stop()}}),t,this)}))),function(){return p.apply(this,arguments)})},{key:"getIDToken",value:(G=r(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.getIDToken());case 1:case"end":return t.stop()}}),t,this)}))),function(){return G.apply(this,arguments)})},{key:"getAccessToken",value:(I=r(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.getAccessToken());case 1:case"end":return t.stop()}}),t,this)}))),function(){return I.apply(this,arguments)})},{key:"getIDPAccessToken",value:(m=r(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.getIDPAccessToken());case 1:case"end":return t.stop()}}),t,this)}))),function(){return m.apply(this,arguments)})},{key:"refreshAccessToken",value:(h=r(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.refreshAccessToken());case 1:case"end":return t.stop()}}),t,this)}))),function(){return h.apply(this,arguments)})},{key:"isAuthenticated",value:(b=r(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.isAuthenticated());case 1:case"end":return t.stop()}}),t,this)}))),function(){return b.apply(this,arguments)})},{key:"enableHttpHandler",value:(Z=r(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.enableHttpHandler());case 1:case"end":return t.stop()}}),t,this)}))),function(){return Z.apply(this,arguments)})},{key:"disableHttpHandler",value:(a=r(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.disableHttpHandler());case 1:case"end":return t.stop()}}),t,this)}))),function(){return a.apply(this,arguments)})},{key:"updateConfig",value:(o=r(regeneratorRuntime.mark((function t(e){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.updateConfig(e));case 1:case"end":return t.stop()}}),t,this)}))),function(t){return o.apply(this,arguments)})},{key:"on",value:function(t,e,l){return t===n.k.CustomGrant?this._client.on(t,e,l):this._client.on(t,e)}},{key:"trySignInSilently",value:(c=r(regeneratorRuntime.mark((function t(e,l){var n=this;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.trySignInSilently().then(function(){var t=r(regeneratorRuntime.mark((function t(i){var c,o;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(i){t.next=4;break}return n.updateState(d(d({},n.getState()),{},{isLoading:!1})),l(d(d({},e),{},{isLoading:!1})),t.abrupt("return",!1);case 4:return t.next=6,n._client.isAuthenticated();case 6:if(!t.sent){t.next=11;break}o={allowedScopes:(c=i).allowedScopes,displayName:c.displayName,email:c.email,isAuthenticated:!0,isLoading:!1,isSigningOut:!1,sub:c.sub,username:c.username},n.updateState(o),l(d(d({},e),o));case 11:return t.abrupt("return",i);case 12:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}()).catch((function(t){return Promise.reject(t)})));case 1:case"end":return t.stop()}}),t,this)}))),function(t,e){return c.apply(this,arguments)})}])&&u(e.prototype,l),i&&u(e,i),Object.defineProperty(e,"prototype",{writable:!1}),t}();s(Z,"DEFAULT_STATE",void 0),Z.DEFAULT_STATE={allowedScopes:"",displayName:"",email:"",isAuthenticated:!1,isLoading:!0,sub:"",username:""};var b=Z;function h(t,e,l,n,i,c,o){try{var d=t[c](o),a=d.value}catch(t){return void l(t)}d.done?e(a):Promise.resolve(a).then(n,i)}function m(t){return function(){var e=this,l=arguments;return new Promise((function(n,i){var c=t.apply(e,l);function o(t){h(c,n,i,o,d,"next",t)}function d(t){h(c,n,i,o,d,"throw",t)}o(void 0)}))}}function I(t,e){var l=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),l.push.apply(l,n)}return l}function G(t){for(var e=1;e<arguments.length;e++){var l=null!=arguments[e]?arguments[e]:{};e%2?I(Object(l),!0).forEach((function(e){p(t,e,l[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(l)):I(Object(l)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(l,e))}))}return t}function p(t,e,l){return e in t?Object.defineProperty(t,e,{value:l,enumerable:!0,configurable:!0,writable:!0}):t[e]=l,t}function g(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var l=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null==l)return;var n,i,c=[],o=!0,d=!1;try{for(l=l.call(t);!(o=(n=l.next()).done)&&(c.push(n.value),!e||c.length!==e);o=!0);}catch(t){d=!0,i=t}finally{try{o||null==l.return||l.return()}finally{if(d)throw i}}return c}(t,e)||function(t,e){if(!t)return;if("string"==typeof t)return X(t,e);var l=Object.prototype.toString.call(t).slice(8,-1);"Object"===l&&t.constructor&&(l=t.constructor.name);if("Map"===l||"Set"===l)return Array.from(t);if("Arguments"===l||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(l))return X(t,e)}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function X(t,e){(null==e||e>t.length)&&(e=t.length);for(var l=0,n=new Array(e);l<e;l++)n[l]=t[l];return n}var V={disableTrySignInSilently:!0},y=Object(i.createContext)(null),W=function(t){var e=t.children,l=t.config,o=t.fallback,d=t.getAuthParams,a=t.onSignOut,r=t.spaclient,u=Object(i.useMemo)((function(){return new b(r)}),[null==t?void 0:t.spaclient]),s=g(Object(i.useState)(u.getState()),2),Z=s[0],h=s[1],I=g(Object(i.useState)(!1),2),p=I[0],X=I[1],W=Object(i.useMemo)((function(){return G(G({},V),l)}),[l]),C=function(){var t=m(regeneratorRuntime.mark((function t(e,l,n,i,c){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,t.next=3,u.signIn(h,Z,e,l,n,i,c);case 3:return t.abrupt("return",t.sent);case 6:return t.prev=6,t.t0=t.catch(0),t.abrupt("return",Promise.reject(t.t0));case 9:case"end":return t.stop()}}),t,null,[[0,6]])})));return function(e,l,n,i,c){return t.apply(this,arguments)}}(),R=function(t,e,l){return t===n.k.CustomGrant?u.on(t,e,l):u.on(t,e)},f=function(){return u.trySignInSilently(Z,h)},Y=g(Object(i.useState)(),2),S=Y[0],v=Y[1];return Object(i.useEffect)((function(){Z.isAuthenticated||m(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.t0=X,t.next=3,u.init(W);case 3:t.t1=t.sent,(0,t.t0)(t.t1);case 5:case"end":return t.stop()}}),t)})))()}),[W]),Object(i.useEffect)((function(){m(regeneratorRuntime.mark((function t(){var e,l,i,c,o,r,s;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e=!1,t.next=3,R(n.k.SignOut,(function(){e=!0,a&&a()}));case 3:if(!Z.isAuthenticated){t.next=5;break}return t.abrupt("return");case 5:if(W.skipRedirectCallback){t.next=21;break}if(i=null,!d||"function"!=typeof d){t.next=11;break}return t.next=10,d();case 10:i=t.sent;case 11:if(c=new URL(location.href),!(n.w.hasAuthSearchParamsInURL()&&new URL(c.origin+c.pathname).toString()===new URL(null==W?void 0:W.signInRedirectURL).toString()||null!==(l=i)&&void 0!==l&&l.authorizationCode||c.searchParams.get("error"))){t.next=21;break}return t.prev=13,t.next=16,C({callOnlyOnRedirect:!0},null===(o=i)||void 0===o?void 0:o.authorizationCode,null===(r=i)||void 0===r?void 0:r.sessionState,null===(s=i)||void 0===s?void 0:s.state);case 16:t.next=21;break;case 18:t.prev=18,t.t0=t.catch(13),t.t0&&Object.prototype.hasOwnProperty.call(t.t0,"code")&&v(t.t0);case 21:if(!u.getState().isAuthenticated){t.next=23;break}return t.abrupt("return");case 23:if(!W.disableTrySignInSilently&&!e){t.next=26;break}return h(G(G({},Z),{},{isLoading:!1})),t.abrupt("return");case 26:return t.next=28,f().then((function(){})).catch((function(t){t&&Object.prototype.hasOwnProperty.call(t,"code")&&v(t)}));case 28:case"end":return t.stop()}}),t,null,[[13,18]])})))()}),[W]),c.a.createElement(y.Provider,{value:{disableHttpHandler:function(){return u.disableHttpHandler()},enableHttpHandler:function(){return u.enableHttpHandler()},getAccessToken:function(){return u.getAccessToken()},getBasicUserInfo:function(){return u.getBasicUserInfo()},getDecodedIDToken:function(){return u.getDecodedIDToken()},getHttpClient:function(){return u.getHttpClient()},getIDToken:function(){return u.getIDToken()},getOIDCServiceEndpoints:function(){return u.getOIDCServiceEndpoints()},httpRequest:function(t){return u.httpRequest(t)},httpRequestAll:function(t){return u.httpRequestAll(t)},isAuthenticated:function(){return u.isAuthenticated()},on:R,refreshAccessToken:function(){return u.refreshAccessToken()},requestCustomGrant:function(t,e){return u.requestCustomGrant(t,e,h)},revokeAccessToken:function(){return u.revokeAccessToken(h)},signIn:C,signOut:function(t){return u.signOut(h,Z,t)},state:Z,trySignInSilently:f,updateConfig:function(t){return u.updateConfig(t)},error:S}},p?e:null!=o?o:null)},C=function(){return Object(i.useContext)(y)},R=l(219),f=["component","callback"];function Y(){return(Y=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var l=arguments[e];for(var n in l)Object.prototype.hasOwnProperty.call(l,n)&&(t[n]=l[n])}return t}).apply(this,arguments)}function S(t,e){if(null==t)return{};var l,n,i=function(t,e){if(null==t)return{};var l,n,i={},c=Object.keys(t);for(n=0;n<c.length;n++)l=c[n],e.indexOf(l)>=0||(i[l]=t[l]);return i}(t,e);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(t);for(n=0;n<c.length;n++)l=c[n],e.indexOf(l)>=0||Object.prototype.propertyIsEnumerable.call(t,l)&&(i[l]=t[l])}return i}var v=function(t){var e=C().state,l=t.component,n=t.callback,o=S(t,f);return Object(i.useEffect)((function(){e.isAuthenticated||n&&n()}),[e.isAuthenticated]),e.isAuthenticated?c.a.createElement(R.Route,Y({},o,{render:function(t){return c.a.createElement(l,t)}})):null},K=function(t){var e=t.fallback,l=t.children,n=C().state.isAuthenticated;return c.a.createElement(c.a.Fragment,null," ",n?l:null!=e?e:null," ")};function N(t,e,l,n,i,c,o){try{var d=t[c](o),a=d.value}catch(t){return void l(t)}d.done?e(a):Promise.resolve(a).then(n,i)}var J=function(t){var e=t.children,l=t.fallback,n=t.onSignIn,o=t.overrideSignIn,d=C(),a=d.state,r=a.isAuthenticated,u=a.isLoading,s=d.signIn;return Object(i.useEffect)((function(){var t;r||u||(t=regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!o||"function"!=typeof o){t.next=5;break}return t.next=3,o();case 3:t.next=7;break;case 5:return t.next=7,s();case 7:case"end":return t.stop()}}),t)})),function(){var e=this,l=arguments;return new Promise((function(n,i){var c=t.apply(e,l);function o(t){N(c,n,i,o,d,"next",t)}function d(t){N(c,n,i,o,d,"throw",t)}o(void 0)}))})(),r&&n&&"function"==typeof n&&n()}),[r,u]),c.a.createElement(K,{fallback:l},c.a.createElement(i.Suspense,{fallback:l},e))}}])}));
|