@getopenpay/openpay-js 0.1.4 → 0.1.6-alpha.720e7c5

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/index.umd.js CHANGED
@@ -1,81 +1,18 @@
1
- (function(ve,i){typeof exports=="object"&&typeof module<"u"?i(exports,require("zod"),require("uuid"),require("penpal")):typeof define=="function"&&define.amd?define(["exports","zod","uuid","penpal"],i):(ve=typeof globalThis<"u"?globalThis:ve||self,i(ve.OpenPay={},ve.zod,ve.uuid,ve.penpal))})(this,function(ve,i,mn,hn){"use strict";var Hr={exports:{}},Dt={exports:{}},M={};/**
2
- * @license React
3
- * react.production.min.js
4
- *
5
- * Copyright (c) Facebook, Inc. and its affiliates.
6
- *
7
- * This source code is licensed under the MIT license found in the
8
- * LICENSE file in the root directory of this source tree.
9
- */var Wr;function vn(){if(Wr)return M;Wr=1;var c=Symbol.for("react.element"),a=Symbol.for("react.portal"),f=Symbol.for("react.fragment"),y=Symbol.for("react.strict_mode"),g=Symbol.for("react.profiler"),b=Symbol.for("react.provider"),I=Symbol.for("react.context"),P=Symbol.for("react.forward_ref"),$=Symbol.for("react.suspense"),q=Symbol.for("react.memo"),z=Symbol.for("react.lazy"),U=Symbol.iterator;function J(r){return r===null||typeof r!="object"?null:(r=U&&r[U]||r["@@iterator"],typeof r=="function"?r:null)}var Y={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},Z=Object.assign,ge={};function B(r,s,h){this.props=r,this.context=s,this.refs=ge,this.updater=h||Y}B.prototype.isReactComponent={},B.prototype.setState=function(r,s){if(typeof r!="object"&&typeof r!="function"&&r!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,r,s,"setState")},B.prototype.forceUpdate=function(r){this.updater.enqueueForceUpdate(this,r,"forceUpdate")};function _e(){}_e.prototype=B.prototype;function ae(r,s,h){this.props=r,this.context=s,this.refs=ge,this.updater=h||Y}var ie=ae.prototype=new _e;ie.constructor=ae,Z(ie,B.prototype),ie.isPureReactComponent=!0;var K=Array.isArray,F=Object.prototype.hasOwnProperty,V={current:null},Q={key:!0,ref:!0,__self:!0,__source:!0};function re(r,s,h){var _,E={},j=null,k=null;if(s!=null)for(_ in s.ref!==void 0&&(k=s.ref),s.key!==void 0&&(j=""+s.key),s)F.call(s,_)&&!Q.hasOwnProperty(_)&&(E[_]=s[_]);var O=arguments.length-2;if(O===1)E.children=h;else if(1<O){for(var C=Array(O),L=0;L<O;L++)C[L]=arguments[L+2];E.children=C}if(r&&r.defaultProps)for(_ in O=r.defaultProps,O)E[_]===void 0&&(E[_]=O[_]);return{$$typeof:c,type:r,key:j,ref:k,props:E,_owner:V.current}}function be(r,s){return{$$typeof:c,type:r.type,key:s,ref:r.ref,props:r.props,_owner:r._owner}}function pe(r){return typeof r=="object"&&r!==null&&r.$$typeof===c}function De(r){var s={"=":"=0",":":"=2"};return"$"+r.replace(/[=:]/g,function(h){return s[h]})}var Ee=/\/+/g;function de(r,s){return typeof r=="object"&&r!==null&&r.key!=null?De(""+r.key):s.toString(36)}function se(r,s,h,_,E){var j=typeof r;(j==="undefined"||j==="boolean")&&(r=null);var k=!1;if(r===null)k=!0;else switch(j){case"string":case"number":k=!0;break;case"object":switch(r.$$typeof){case c:case a:k=!0}}if(k)return k=r,E=E(k),r=_===""?"."+de(k,0):_,K(E)?(h="",r!=null&&(h=r.replace(Ee,"$&/")+"/"),se(E,s,h,"",function(L){return L})):E!=null&&(pe(E)&&(E=be(E,h+(!E.key||k&&k.key===E.key?"":(""+E.key).replace(Ee,"$&/")+"/")+r)),s.push(E)),1;if(k=0,_=_===""?".":_+":",K(r))for(var O=0;O<r.length;O++){j=r[O];var C=_+de(j,O);k+=se(j,s,h,C,E)}else if(C=J(r),typeof C=="function")for(r=C.call(r),O=0;!(j=r.next()).done;)j=j.value,C=_+de(j,O++),k+=se(j,s,h,C,E);else if(j==="object")throw s=String(r),Error("Objects are not valid as a React child (found: "+(s==="[object Object]"?"object with keys {"+Object.keys(r).join(", ")+"}":s)+"). If you meant to render a collection of children, use an array instead.");return k}function H(r,s,h){if(r==null)return r;var _=[],E=0;return se(r,_,"","",function(j){return s.call(h,j,E++)}),_}function X(r){if(r._status===-1){var s=r._result;s=s(),s.then(function(h){(r._status===0||r._status===-1)&&(r._status=1,r._result=h)},function(h){(r._status===0||r._status===-1)&&(r._status=2,r._result=h)}),r._status===-1&&(r._status=0,r._result=s)}if(r._status===1)return r._result.default;throw r._result}var p={current:null},ne={transition:null},we={ReactCurrentDispatcher:p,ReactCurrentBatchConfig:ne,ReactCurrentOwner:V};function ue(){throw Error("act(...) is not supported in production builds of React.")}return M.Children={map:H,forEach:function(r,s,h){H(r,function(){s.apply(this,arguments)},h)},count:function(r){var s=0;return H(r,function(){s++}),s},toArray:function(r){return H(r,function(s){return s})||[]},only:function(r){if(!pe(r))throw Error("React.Children.only expected to receive a single React element child.");return r}},M.Component=B,M.Fragment=f,M.Profiler=g,M.PureComponent=ae,M.StrictMode=y,M.Suspense=$,M.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=we,M.act=ue,M.cloneElement=function(r,s,h){if(r==null)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+r+".");var _=Z({},r.props),E=r.key,j=r.ref,k=r._owner;if(s!=null){if(s.ref!==void 0&&(j=s.ref,k=V.current),s.key!==void 0&&(E=""+s.key),r.type&&r.type.defaultProps)var O=r.type.defaultProps;for(C in s)F.call(s,C)&&!Q.hasOwnProperty(C)&&(_[C]=s[C]===void 0&&O!==void 0?O[C]:s[C])}var C=arguments.length-2;if(C===1)_.children=h;else if(1<C){O=Array(C);for(var L=0;L<C;L++)O[L]=arguments[L+2];_.children=O}return{$$typeof:c,type:r.type,key:E,ref:j,props:_,_owner:k}},M.createContext=function(r){return r={$$typeof:I,_currentValue:r,_currentValue2:r,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null},r.Provider={$$typeof:b,_context:r},r.Consumer=r},M.createElement=re,M.createFactory=function(r){var s=re.bind(null,r);return s.type=r,s},M.createRef=function(){return{current:null}},M.forwardRef=function(r){return{$$typeof:P,render:r}},M.isValidElement=pe,M.lazy=function(r){return{$$typeof:z,_payload:{_status:-1,_result:r},_init:X}},M.memo=function(r,s){return{$$typeof:q,type:r,compare:s===void 0?null:s}},M.startTransition=function(r){var s=ne.transition;ne.transition={};try{r()}finally{ne.transition=s}},M.unstable_act=ue,M.useCallback=function(r,s){return p.current.useCallback(r,s)},M.useContext=function(r){return p.current.useContext(r)},M.useDebugValue=function(){},M.useDeferredValue=function(r){return p.current.useDeferredValue(r)},M.useEffect=function(r,s){return p.current.useEffect(r,s)},M.useId=function(){return p.current.useId()},M.useImperativeHandle=function(r,s,h){return p.current.useImperativeHandle(r,s,h)},M.useInsertionEffect=function(r,s){return p.current.useInsertionEffect(r,s)},M.useLayoutEffect=function(r,s){return p.current.useLayoutEffect(r,s)},M.useMemo=function(r,s){return p.current.useMemo(r,s)},M.useReducer=function(r,s,h){return p.current.useReducer(r,s,h)},M.useRef=function(r){return p.current.useRef(r)},M.useState=function(r){return p.current.useState(r)},M.useSyncExternalStore=function(r,s,h){return p.current.useSyncExternalStore(r,s,h)},M.useTransition=function(){return p.current.useTransition()},M.version="18.3.1",M}var Ke={exports:{}};/**
10
- * @license React
11
- * react.development.js
12
- *
13
- * Copyright (c) Facebook, Inc. and its affiliates.
14
- *
15
- * This source code is licensed under the MIT license found in the
16
- * LICENSE file in the root directory of this source tree.
17
- */Ke.exports;var Br;function gn(){return Br||(Br=1,function(c,a){process.env.NODE_ENV!=="production"&&function(){typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart=="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error);var f="18.3.1",y=Symbol.for("react.element"),g=Symbol.for("react.portal"),b=Symbol.for("react.fragment"),I=Symbol.for("react.strict_mode"),P=Symbol.for("react.profiler"),$=Symbol.for("react.provider"),q=Symbol.for("react.context"),z=Symbol.for("react.forward_ref"),U=Symbol.for("react.suspense"),J=Symbol.for("react.suspense_list"),Y=Symbol.for("react.memo"),Z=Symbol.for("react.lazy"),ge=Symbol.for("react.offscreen"),B=Symbol.iterator,_e="@@iterator";function ae(e){if(e===null||typeof e!="object")return null;var t=B&&e[B]||e[_e];return typeof t=="function"?t:null}var ie={current:null},K={transition:null},F={current:null,isBatchingLegacy:!1,didScheduleLegacyUpdate:!1},V={current:null},Q={},re=null;function be(e){re=e}Q.setExtraStackFrame=function(e){re=e},Q.getCurrentStack=null,Q.getStackAddendum=function(){var e="";re&&(e+=re);var t=Q.getCurrentStack;return t&&(e+=t()||""),e};var pe=!1,De=!1,Ee=!1,de=!1,se=!1,H={ReactCurrentDispatcher:ie,ReactCurrentBatchConfig:K,ReactCurrentOwner:V};H.ReactDebugCurrentFrame=Q,H.ReactCurrentActQueue=F;function X(e){{for(var t=arguments.length,n=new Array(t>1?t-1:0),o=1;o<t;o++)n[o-1]=arguments[o];ne("warn",e,n)}}function p(e){{for(var t=arguments.length,n=new Array(t>1?t-1:0),o=1;o<t;o++)n[o-1]=arguments[o];ne("error",e,n)}}function ne(e,t,n){{var o=H.ReactDebugCurrentFrame,u=o.getStackAddendum();u!==""&&(t+="%s",n=n.concat([u]));var d=n.map(function(l){return String(l)});d.unshift("Warning: "+t),Function.prototype.apply.call(console[e],console,d)}}var we={};function ue(e,t){{var n=e.constructor,o=n&&(n.displayName||n.name)||"ReactClass",u=o+"."+t;if(we[u])return;p("Can't call %s on a component that is not yet mounted. This is a no-op, but it might indicate a bug in your application. Instead, assign to `this.state` directly or define a `state = {};` class property with the desired state in the %s component.",t,o),we[u]=!0}}var r={isMounted:function(e){return!1},enqueueForceUpdate:function(e,t,n){ue(e,"forceUpdate")},enqueueReplaceState:function(e,t,n,o){ue(e,"replaceState")},enqueueSetState:function(e,t,n,o){ue(e,"setState")}},s=Object.assign,h={};Object.freeze(h);function _(e,t,n){this.props=e,this.context=t,this.refs=h,this.updater=n||r}_.prototype.isReactComponent={},_.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw new Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")},_.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};{var E={isMounted:["isMounted","Instead, make sure to clean up subscriptions and pending requests in componentWillUnmount to prevent memory leaks."],replaceState:["replaceState","Refactor your code to use setState instead (see https://github.com/facebook/react/issues/3236)."]},j=function(e,t){Object.defineProperty(_.prototype,e,{get:function(){X("%s(...) is deprecated in plain JavaScript React classes. %s",t[0],t[1])}})};for(var k in E)E.hasOwnProperty(k)&&j(k,E[k])}function O(){}O.prototype=_.prototype;function C(e,t,n){this.props=e,this.context=t,this.refs=h,this.updater=n||r}var L=C.prototype=new O;L.constructor=C,s(L,_.prototype),L.isPureReactComponent=!0;function Nt(){var e={current:null};return Object.seal(e),e}var Ut=Array.isArray;function Ce(e){return Ut(e)}function zt(e){{var t=typeof Symbol=="function"&&Symbol.toStringTag,n=t&&e[Symbol.toStringTag]||e.constructor.name||"Object";return n}}function Vt(e){try{return Ge(e),!1}catch{return!0}}function Ge(e){return""+e}function Se(e){if(Vt(e))return p("The provided key is an unsupported type %s. This value must be coerced to a string before before using it here.",zt(e)),Ge(e)}function qt(e,t,n){var o=e.displayName;if(o)return o;var u=t.displayName||t.name||"";return u!==""?n+"("+u+")":n}function Je(e){return e.displayName||"Context"}function ee(e){if(e==null)return null;if(typeof e.tag=="number"&&p("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case b:return"Fragment";case g:return"Portal";case P:return"Profiler";case I:return"StrictMode";case U:return"Suspense";case J:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case q:var t=e;return Je(t)+".Consumer";case $:var n=e;return Je(n._context)+".Provider";case z:return qt(e,e.render,"ForwardRef");case Y:var o=e.displayName||null;return o!==null?o:ee(e.type)||"Memo";case Z:{var u=e,d=u._payload,l=u._init;try{return ee(l(d))}catch{return null}}}return null}var ye=Object.prototype.hasOwnProperty,Ze={key:!0,ref:!0,__self:!0,__source:!0},Qe,Xe,Fe;Fe={};function et(e){if(ye.call(e,"ref")){var t=Object.getOwnPropertyDescriptor(e,"ref").get;if(t&&t.isReactWarning)return!1}return e.ref!==void 0}function tt(e){if(ye.call(e,"key")){var t=Object.getOwnPropertyDescriptor(e,"key").get;if(t&&t.isReactWarning)return!1}return e.key!==void 0}function Yt(e,t){var n=function(){Qe||(Qe=!0,p("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://reactjs.org/link/special-props)",t))};n.isReactWarning=!0,Object.defineProperty(e,"key",{get:n,configurable:!0})}function Ht(e,t){var n=function(){Xe||(Xe=!0,p("%s: `ref` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://reactjs.org/link/special-props)",t))};n.isReactWarning=!0,Object.defineProperty(e,"ref",{get:n,configurable:!0})}function Wt(e){if(typeof e.ref=="string"&&V.current&&e.__self&&V.current.stateNode!==e.__self){var t=ee(V.current.type);Fe[t]||(p('Component "%s" contains the string ref "%s". Support for string refs will be removed in a future major release. This case cannot be automatically converted to an arrow function. We ask you to manually fix this case by using useRef() or createRef() instead. Learn more about using refs safely here: https://reactjs.org/link/strict-mode-string-ref',t,e.ref),Fe[t]=!0)}}var $e=function(e,t,n,o,u,d,l){var m={$$typeof:y,type:e,key:t,ref:n,props:l,_owner:d};return m._store={},Object.defineProperty(m._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:!1}),Object.defineProperty(m,"_self",{configurable:!1,enumerable:!1,writable:!1,value:o}),Object.defineProperty(m,"_source",{configurable:!1,enumerable:!1,writable:!1,value:u}),Object.freeze&&(Object.freeze(m.props),Object.freeze(m)),m};function Bt(e,t,n){var o,u={},d=null,l=null,m=null,v=null;if(t!=null){et(t)&&(l=t.ref,Wt(t)),tt(t)&&(Se(t.key),d=""+t.key),m=t.__self===void 0?null:t.__self,v=t.__source===void 0?null:t.__source;for(o in t)ye.call(t,o)&&!Ze.hasOwnProperty(o)&&(u[o]=t[o])}var w=arguments.length-2;if(w===1)u.children=n;else if(w>1){for(var S=Array(w),R=0;R<w;R++)S[R]=arguments[R+2];Object.freeze&&Object.freeze(S),u.children=S}if(e&&e.defaultProps){var T=e.defaultProps;for(o in T)u[o]===void 0&&(u[o]=T[o])}if(d||l){var A=typeof e=="function"?e.displayName||e.name||"Unknown":e;d&&Yt(u,A),l&&Ht(u,A)}return $e(e,d,l,m,v,V.current,u)}function Kt(e,t){var n=$e(e.type,t,e.ref,e._self,e._source,e._owner,e.props);return n}function Gt(e,t,n){if(e==null)throw new Error("React.cloneElement(...): The argument must be a React element, but you passed "+e+".");var o,u=s({},e.props),d=e.key,l=e.ref,m=e._self,v=e._source,w=e._owner;if(t!=null){et(t)&&(l=t.ref,w=V.current),tt(t)&&(Se(t.key),d=""+t.key);var S;e.type&&e.type.defaultProps&&(S=e.type.defaultProps);for(o in t)ye.call(t,o)&&!Ze.hasOwnProperty(o)&&(t[o]===void 0&&S!==void 0?u[o]=S[o]:u[o]=t[o])}var R=arguments.length-2;if(R===1)u.children=n;else if(R>1){for(var T=Array(R),A=0;A<R;A++)T[A]=arguments[A+2];u.children=T}return $e(e.type,d,l,m,v,w,u)}function ce(e){return typeof e=="object"&&e!==null&&e.$$typeof===y}var rt=".",Jt=":";function Zt(e){var t=/[=:]/g,n={"=":"=0",":":"=2"},o=e.replace(t,function(u){return n[u]});return"$"+o}var nt=!1,Qt=/\/+/g;function ot(e){return e.replace(Qt,"$&/")}function xe(e,t){return typeof e=="object"&&e!==null&&e.key!=null?(Se(e.key),Zt(""+e.key)):t.toString(36)}function Re(e,t,n,o,u){var d=typeof e;(d==="undefined"||d==="boolean")&&(e=null);var l=!1;if(e===null)l=!0;else switch(d){case"string":case"number":l=!0;break;case"object":switch(e.$$typeof){case y:case g:l=!0}}if(l){var m=e,v=u(m),w=o===""?rt+xe(m,0):o;if(Ce(v)){var S="";w!=null&&(S=ot(w)+"/"),Re(v,t,S,"",function(Yr){return Yr})}else v!=null&&(ce(v)&&(v.key&&(!m||m.key!==v.key)&&Se(v.key),v=Kt(v,n+(v.key&&(!m||m.key!==v.key)?ot(""+v.key)+"/":"")+w)),t.push(v));return 1}var R,T,A=0,x=o===""?rt:o+Jt;if(Ce(e))for(var Me=0;Me<e.length;Me++)R=e[Me],T=x+xe(R,Me),A+=Re(R,t,n,T,u);else{var We=ae(e);if(typeof We=="function"){var Pt=e;We===Pt.entries&&(nt||X("Using Maps as children is not supported. Use an array of keyed ReactElements instead."),nt=!0);for(var Vr=We.call(Pt),It,qr=0;!(It=Vr.next()).done;)R=It.value,T=x+xe(R,qr++),A+=Re(R,t,n,T,u)}else if(d==="object"){var jt=String(e);throw new Error("Objects are not valid as a React child (found: "+(jt==="[object Object]"?"object with keys {"+Object.keys(e).join(", ")+"}":jt)+"). If you meant to render a collection of children, use an array instead.")}}return A}function ke(e,t,n){if(e==null)return e;var o=[],u=0;return Re(e,o,"","",function(d){return t.call(n,d,u++)}),o}function Xt(e){var t=0;return ke(e,function(){t++}),t}function er(e,t,n){ke(e,function(){t.apply(this,arguments)},n)}function tr(e){return ke(e,function(t){return t})||[]}function rr(e){if(!ce(e))throw new Error("React.Children.only expected to receive a single React element child.");return e}function nr(e){var t={$$typeof:q,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null};t.Provider={$$typeof:$,_context:t};var n=!1,o=!1,u=!1;{var d={$$typeof:q,_context:t};Object.defineProperties(d,{Provider:{get:function(){return o||(o=!0,p("Rendering <Context.Consumer.Provider> is not supported and will be removed in a future major release. Did you mean to render <Context.Provider> instead?")),t.Provider},set:function(l){t.Provider=l}},_currentValue:{get:function(){return t._currentValue},set:function(l){t._currentValue=l}},_currentValue2:{get:function(){return t._currentValue2},set:function(l){t._currentValue2=l}},_threadCount:{get:function(){return t._threadCount},set:function(l){t._threadCount=l}},Consumer:{get:function(){return n||(n=!0,p("Rendering <Context.Consumer.Consumer> is not supported and will be removed in a future major release. Did you mean to render <Context.Consumer> instead?")),t.Consumer}},displayName:{get:function(){return t.displayName},set:function(l){u||(X("Setting `displayName` on Context.Consumer has no effect. You should set it directly on the context with Context.displayName = '%s'.",l),u=!0)}}}),t.Consumer=d}return t._currentRenderer=null,t._currentRenderer2=null,t}var me=-1,Le=0,at=1,or=2;function ar(e){if(e._status===me){var t=e._result,n=t();if(n.then(function(d){if(e._status===Le||e._status===me){var l=e;l._status=at,l._result=d}},function(d){if(e._status===Le||e._status===me){var l=e;l._status=or,l._result=d}}),e._status===me){var o=e;o._status=Le,o._result=n}}if(e._status===at){var u=e._result;return u===void 0&&p(`lazy: Expected the result of a dynamic import() call. Instead received: %s
18
-
19
- Your code should look like:
20
- const MyComponent = lazy(() => import('./MyComponent'))
21
-
22
- Did you accidentally put curly braces around the import?`,u),"default"in u||p(`lazy: Expected the result of a dynamic import() call. Instead received: %s
23
-
24
- Your code should look like:
25
- const MyComponent = lazy(() => import('./MyComponent'))`,u),u.default}else throw e._result}function ir(e){var t={_status:me,_result:e},n={$$typeof:Z,_payload:t,_init:ar};{var o,u;Object.defineProperties(n,{defaultProps:{configurable:!0,get:function(){return o},set:function(d){p("React.lazy(...): It is not supported to assign `defaultProps` to a lazy component import. Either specify them where the component is defined, or create a wrapping component around it."),o=d,Object.defineProperty(n,"defaultProps",{enumerable:!0})}},propTypes:{configurable:!0,get:function(){return u},set:function(d){p("React.lazy(...): It is not supported to assign `propTypes` to a lazy component import. Either specify them where the component is defined, or create a wrapping component around it."),u=d,Object.defineProperty(n,"propTypes",{enumerable:!0})}}})}return n}function sr(e){e!=null&&e.$$typeof===Y?p("forwardRef requires a render function but received a `memo` component. Instead of forwardRef(memo(...)), use memo(forwardRef(...))."):typeof e!="function"?p("forwardRef requires a render function but was given %s.",e===null?"null":typeof e):e.length!==0&&e.length!==2&&p("forwardRef render functions accept exactly two parameters: props and ref. %s",e.length===1?"Did you forget to use the ref parameter?":"Any additional parameter will be undefined."),e!=null&&(e.defaultProps!=null||e.propTypes!=null)&&p("forwardRef render functions do not support propTypes or defaultProps. Did you accidentally pass a React component?");var t={$$typeof:z,render:e};{var n;Object.defineProperty(t,"displayName",{enumerable:!1,configurable:!0,get:function(){return n},set:function(o){n=o,!e.name&&!e.displayName&&(e.displayName=o)}})}return t}var it;it=Symbol.for("react.module.reference");function st(e){return!!(typeof e=="string"||typeof e=="function"||e===b||e===P||se||e===I||e===U||e===J||de||e===ge||pe||De||Ee||typeof e=="object"&&e!==null&&(e.$$typeof===Z||e.$$typeof===Y||e.$$typeof===$||e.$$typeof===q||e.$$typeof===z||e.$$typeof===it||e.getModuleId!==void 0))}function ur(e,t){st(e)||p("memo: The first argument must be a component. Instead received: %s",e===null?"null":typeof e);var n={$$typeof:Y,type:e,compare:t===void 0?null:t};{var o;Object.defineProperty(n,"displayName",{enumerable:!1,configurable:!0,get:function(){return o},set:function(u){o=u,!e.name&&!e.displayName&&(e.displayName=u)}})}return n}function N(){var e=ie.current;return e===null&&p(`Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:
26
- 1. You might have mismatching versions of React and the renderer (such as React DOM)
27
- 2. You might be breaking the Rules of Hooks
28
- 3. You might have more than one copy of React in the same app
29
- See https://reactjs.org/link/invalid-hook-call for tips about how to debug and fix this problem.`),e}function cr(e){var t=N();if(e._context!==void 0){var n=e._context;n.Consumer===e?p("Calling useContext(Context.Consumer) is not supported, may cause bugs, and will be removed in a future major release. Did you mean to call useContext(Context) instead?"):n.Provider===e&&p("Calling useContext(Context.Provider) is not supported. Did you mean to call useContext(Context) instead?")}return t.useContext(e)}function lr(e){var t=N();return t.useState(e)}function fr(e,t,n){var o=N();return o.useReducer(e,t,n)}function pr(e){var t=N();return t.useRef(e)}function dr(e,t){var n=N();return n.useEffect(e,t)}function yr(e,t){var n=N();return n.useInsertionEffect(e,t)}function mr(e,t){var n=N();return n.useLayoutEffect(e,t)}function hr(e,t){var n=N();return n.useCallback(e,t)}function vr(e,t){var n=N();return n.useMemo(e,t)}function gr(e,t,n){var o=N();return o.useImperativeHandle(e,t,n)}function _r(e,t){{var n=N();return n.useDebugValue(e,t)}}function br(){var e=N();return e.useTransition()}function Er(e){var t=N();return t.useDeferredValue(e)}function wr(){var e=N();return e.useId()}function Cr(e,t,n){var o=N();return o.useSyncExternalStore(e,t,n)}var he=0,ut,ct,lt,ft,pt,dt,yt;function mt(){}mt.__reactDisabledLog=!0;function Sr(){{if(he===0){ut=console.log,ct=console.info,lt=console.warn,ft=console.error,pt=console.group,dt=console.groupCollapsed,yt=console.groupEnd;var e={configurable:!0,enumerable:!0,value:mt,writable:!0};Object.defineProperties(console,{info:e,log:e,warn:e,error:e,group:e,groupCollapsed:e,groupEnd:e})}he++}}function Rr(){{if(he--,he===0){var e={configurable:!0,enumerable:!0,writable:!0};Object.defineProperties(console,{log:s({},e,{value:ut}),info:s({},e,{value:ct}),warn:s({},e,{value:lt}),error:s({},e,{value:ft}),group:s({},e,{value:pt}),groupCollapsed:s({},e,{value:dt}),groupEnd:s({},e,{value:yt})})}he<0&&p("disabledDepth fell below zero. This is a bug in React. Please file an issue.")}}var Ne=H.ReactCurrentDispatcher,Ue;function Oe(e,t,n){{if(Ue===void 0)try{throw Error()}catch(u){var o=u.stack.trim().match(/\n( *(at )?)/);Ue=o&&o[1]||""}return`
30
- `+Ue+e}}var ze=!1,Te;{var kr=typeof WeakMap=="function"?WeakMap:Map;Te=new kr}function ht(e,t){if(!e||ze)return"";{var n=Te.get(e);if(n!==void 0)return n}var o;ze=!0;var u=Error.prepareStackTrace;Error.prepareStackTrace=void 0;var d;d=Ne.current,Ne.current=null,Sr();try{if(t){var l=function(){throw Error()};if(Object.defineProperty(l.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(l,[])}catch(x){o=x}Reflect.construct(e,[],l)}else{try{l.call()}catch(x){o=x}e.call(l.prototype)}}else{try{throw Error()}catch(x){o=x}e()}}catch(x){if(x&&o&&typeof x.stack=="string"){for(var m=x.stack.split(`
31
- `),v=o.stack.split(`
32
- `),w=m.length-1,S=v.length-1;w>=1&&S>=0&&m[w]!==v[S];)S--;for(;w>=1&&S>=0;w--,S--)if(m[w]!==v[S]){if(w!==1||S!==1)do if(w--,S--,S<0||m[w]!==v[S]){var R=`
33
- `+m[w].replace(" at new "," at ");return e.displayName&&R.includes("<anonymous>")&&(R=R.replace("<anonymous>",e.displayName)),typeof e=="function"&&Te.set(e,R),R}while(w>=1&&S>=0);break}}}finally{ze=!1,Ne.current=d,Rr(),Error.prepareStackTrace=u}var T=e?e.displayName||e.name:"",A=T?Oe(T):"";return typeof e=="function"&&Te.set(e,A),A}function Or(e,t,n){return ht(e,!1)}function Tr(e){var t=e.prototype;return!!(t&&t.isReactComponent)}function Pe(e,t,n){if(e==null)return"";if(typeof e=="function")return ht(e,Tr(e));if(typeof e=="string")return Oe(e);switch(e){case U:return Oe("Suspense");case J:return Oe("SuspenseList")}if(typeof e=="object")switch(e.$$typeof){case z:return Or(e.render);case Y:return Pe(e.type,t,n);case Z:{var o=e,u=o._payload,d=o._init;try{return Pe(d(u),t,n)}catch{}}}return""}var vt={},gt=H.ReactDebugCurrentFrame;function Ie(e){if(e){var t=e._owner,n=Pe(e.type,e._source,t?t.type:null);gt.setExtraStackFrame(n)}else gt.setExtraStackFrame(null)}function Pr(e,t,n,o,u){{var d=Function.call.bind(ye);for(var l in e)if(d(e,l)){var m=void 0;try{if(typeof e[l]!="function"){var v=Error((o||"React class")+": "+n+" type `"+l+"` is invalid; it must be a function, usually from the `prop-types` package, but received `"+typeof e[l]+"`.This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.");throw v.name="Invariant Violation",v}m=e[l](t,l,o,n,null,"SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED")}catch(w){m=w}m&&!(m instanceof Error)&&(Ie(u),p("%s: type specification of %s `%s` is invalid; the type checker function must return `null` or an `Error` but returned a %s. You may have forgotten to pass an argument to the type checker creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and shape all require an argument).",o||"React class",n,l,typeof m),Ie(null)),m instanceof Error&&!(m.message in vt)&&(vt[m.message]=!0,Ie(u),p("Failed %s type: %s",n,m.message),Ie(null))}}}function le(e){if(e){var t=e._owner,n=Pe(e.type,e._source,t?t.type:null);be(n)}else be(null)}var Ve;Ve=!1;function _t(){if(V.current){var e=ee(V.current.type);if(e)return`
34
-
35
- Check the render method of \``+e+"`."}return""}function Ir(e){if(e!==void 0){var t=e.fileName.replace(/^.*[\\\/]/,""),n=e.lineNumber;return`
36
-
37
- Check your code at `+t+":"+n+"."}return""}function jr(e){return e!=null?Ir(e.__source):""}var bt={};function Ar(e){var t=_t();if(!t){var n=typeof e=="string"?e:e.displayName||e.name;n&&(t=`
38
-
39
- Check the top-level render call using <`+n+">.")}return t}function Et(e,t){if(!(!e._store||e._store.validated||e.key!=null)){e._store.validated=!0;var n=Ar(t);if(!bt[n]){bt[n]=!0;var o="";e&&e._owner&&e._owner!==V.current&&(o=" It was passed a child from "+ee(e._owner.type)+"."),le(e),p('Each child in a list should have a unique "key" prop.%s%s See https://reactjs.org/link/warning-keys for more information.',n,o),le(null)}}}function wt(e,t){if(typeof e=="object"){if(Ce(e))for(var n=0;n<e.length;n++){var o=e[n];ce(o)&&Et(o,t)}else if(ce(e))e._store&&(e._store.validated=!0);else if(e){var u=ae(e);if(typeof u=="function"&&u!==e.entries)for(var d=u.call(e),l;!(l=d.next()).done;)ce(l.value)&&Et(l.value,t)}}}function Ct(e){{var t=e.type;if(t==null||typeof t=="string")return;var n;if(typeof t=="function")n=t.propTypes;else if(typeof t=="object"&&(t.$$typeof===z||t.$$typeof===Y))n=t.propTypes;else return;if(n){var o=ee(t);Pr(n,e.props,"prop",o,e)}else if(t.PropTypes!==void 0&&!Ve){Ve=!0;var u=ee(t);p("Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?",u||"Unknown")}typeof t.getDefaultProps=="function"&&!t.getDefaultProps.isReactClassApproved&&p("getDefaultProps is only used on classic React.createClass definitions. Use a static property named `defaultProps` instead.")}}function Mr(e){{for(var t=Object.keys(e.props),n=0;n<t.length;n++){var o=t[n];if(o!=="children"&&o!=="key"){le(e),p("Invalid prop `%s` supplied to `React.Fragment`. React.Fragment can only have `key` and `children` props.",o),le(null);break}}e.ref!==null&&(le(e),p("Invalid attribute `ref` supplied to `React.Fragment`."),le(null))}}function St(e,t,n){var o=st(e);if(!o){var u="";(e===void 0||typeof e=="object"&&e!==null&&Object.keys(e).length===0)&&(u+=" You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.");var d=jr(t);d?u+=d:u+=_t();var l;e===null?l="null":Ce(e)?l="array":e!==void 0&&e.$$typeof===y?(l="<"+(ee(e.type)||"Unknown")+" />",u=" Did you accidentally export a JSX literal instead of a component?"):l=typeof e,p("React.createElement: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s",l,u)}var m=Bt.apply(this,arguments);if(m==null)return m;if(o)for(var v=2;v<arguments.length;v++)wt(arguments[v],e);return e===b?Mr(m):Ct(m),m}var Rt=!1;function Dr(e){var t=St.bind(null,e);return t.type=e,Rt||(Rt=!0,X("React.createFactory() is deprecated and will be removed in a future major release. Consider using JSX or use React.createElement() directly instead.")),Object.defineProperty(t,"type",{enumerable:!1,get:function(){return X("Factory.type is deprecated. Access the class directly before passing it to createFactory."),Object.defineProperty(this,"type",{value:e}),e}}),t}function Fr(e,t,n){for(var o=Gt.apply(this,arguments),u=2;u<arguments.length;u++)wt(arguments[u],o.type);return Ct(o),o}function $r(e,t){var n=K.transition;K.transition={};var o=K.transition;K.transition._updatedFibers=new Set;try{e()}finally{if(K.transition=n,n===null&&o._updatedFibers){var u=o._updatedFibers.size;u>10&&X("Detected a large number of updates inside startTransition. If this is due to a subscription please re-write it to use React provided hooks. Otherwise concurrent mode guarantees are off the table."),o._updatedFibers.clear()}}}var kt=!1,je=null;function xr(e){if(je===null)try{var t=("require"+Math.random()).slice(0,7),n=c&&c[t];je=n.call(c,"timers").setImmediate}catch{je=function(u){kt===!1&&(kt=!0,typeof MessageChannel>"u"&&p("This browser does not have a MessageChannel implementation, so enqueuing tasks via await act(async () => ...) will fail. Please file an issue at https://github.com/facebook/react/issues if you encounter this warning."));var d=new MessageChannel;d.port1.onmessage=u,d.port2.postMessage(void 0)}}return je(e)}var fe=0,Ot=!1;function Tt(e){{var t=fe;fe++,F.current===null&&(F.current=[]);var n=F.isBatchingLegacy,o;try{if(F.isBatchingLegacy=!0,o=e(),!n&&F.didScheduleLegacyUpdate){var u=F.current;u!==null&&(F.didScheduleLegacyUpdate=!1,He(u))}}catch(T){throw Ae(t),T}finally{F.isBatchingLegacy=n}if(o!==null&&typeof o=="object"&&typeof o.then=="function"){var d=o,l=!1,m={then:function(T,A){l=!0,d.then(function(x){Ae(t),fe===0?qe(x,T,A):T(x)},function(x){Ae(t),A(x)})}};return!Ot&&typeof Promise<"u"&&Promise.resolve().then(function(){}).then(function(){l||(Ot=!0,p("You called act(async () => ...) without await. This could lead to unexpected testing behaviour, interleaving multiple act calls and mixing their scopes. You should - await act(async () => ...);"))}),m}else{var v=o;if(Ae(t),fe===0){var w=F.current;w!==null&&(He(w),F.current=null);var S={then:function(T,A){F.current===null?(F.current=[],qe(v,T,A)):T(v)}};return S}else{var R={then:function(T,A){T(v)}};return R}}}}function Ae(e){e!==fe-1&&p("You seem to have overlapping act() calls, this is not supported. Be sure to await previous act() calls before making a new one. "),fe=e}function qe(e,t,n){{var o=F.current;if(o!==null)try{He(o),xr(function(){o.length===0?(F.current=null,t(e)):qe(e,t,n)})}catch(u){n(u)}else t(e)}}var Ye=!1;function He(e){if(!Ye){Ye=!0;var t=0;try{for(;t<e.length;t++){var n=e[t];do n=n(!0);while(n!==null)}e.length=0}catch(o){throw e=e.slice(t+1),o}finally{Ye=!1}}}var Lr=St,Nr=Fr,Ur=Dr,zr={map:ke,forEach:er,count:Xt,toArray:tr,only:rr};a.Children=zr,a.Component=_,a.Fragment=b,a.Profiler=P,a.PureComponent=C,a.StrictMode=I,a.Suspense=U,a.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=H,a.act=Tt,a.cloneElement=Nr,a.createContext=nr,a.createElement=Lr,a.createFactory=Ur,a.createRef=Nt,a.forwardRef=sr,a.isValidElement=ce,a.lazy=ir,a.memo=ur,a.startTransition=$r,a.unstable_act=Tt,a.useCallback=hr,a.useContext=cr,a.useDebugValue=_r,a.useDeferredValue=Er,a.useEffect=dr,a.useId=wr,a.useImperativeHandle=gr,a.useInsertionEffect=yr,a.useLayoutEffect=mr,a.useMemo=vr,a.useReducer=fr,a.useRef=pr,a.useState=lr,a.useSyncExternalStore=Cr,a.useTransition=br,a.version=f,typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop=="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error)}()}(Ke,Ke.exports)),Ke.exports}process.env.NODE_ENV==="production"?Dt.exports=vn():Dt.exports=gn();var _n=Dt.exports,bn=_n;function Kr(c,a,f){var y=typeof a=="function";bn.useEffect(function(){var g,b=!0,I=c(function(){return b});return Promise.resolve(I).then(function(P){g=P}),function(){b=!1,y&&a(g)}},y?f:a)}Hr.exports=Kr,Hr.exports.useAsyncEffect=Kr;const En=i.z.object({type:i.z.string(),loc:i.z.array(i.z.string()),msg:i.z.string(),url:i.z.string()}),wn=i.z.array(En),Cn=i.z.object({code:i.z.string(),message:i.z.string(),path:i.z.array(i.z.string())}),Sn=i.z.array(Cn),Rn={"failed to fetch":"Connection error: please double check if you are connected to the internet, then try again"},Ft=c=>{const a=c.toLowerCase().trim();return Rn[a]??c},kn=c=>{try{return typeof JSON.parse(c)=="object"}catch{return!1}},On=c=>c.length===1?Ft(c[0].msg):`Please fix the following errors:
40
- ${c.map(a=>`• ${Ft(a.msg)}`).join(`
41
- `)}`,Tn=c=>`Encountered the following errors:
42
- ${c.map(a=>`- ${a.path.join("/")}: ${a.message}`).join(`
43
- `)}`,Gr=c=>{if(c instanceof Error)if(kn(c.message)){const a=JSON.parse(c.message);return wn.safeParse(a).success?On(a):Sn.safeParse(a).success?Tn(a):c.message}else return Ft(c.message);if(typeof c=="object")try{return JSON.stringify(c)}catch(a){return a+""}else return c+""},oe=i.z.string().trim().min(1,{message:"Cannot be blank"}),te=i.z.string().trim().optional(),$t=c=>i.z.nullable(c.optional());var Be=(c=>(c.FIRST_NAME="firstName",c.LAST_NAME="lastName",c.EMAIL="email",c.ZIP_CODE="zipCode",c.CITY="city",c.STATE="state",c.COUNTRY="country",c.ADDRESS="address",c.PHONE="phone",c.PROMOTION_CODE="promotionCode",c))(Be||{});const Jr=i.z.nativeEnum(Be);var Zr=(c=>(c.CARD_NUMBER="cardNumber",c.CARD_EXPIRY="cardExpiry",c.CARD_CVC="cardCvc",c))(Zr||{});const Qr=i.z.nativeEnum(Zr),Pn=i.z.union([Jr,Qr]),Xr=i.z.object({provider:i.z.string(),processor_name:$t(i.z.string()),metadata:$t(i.z.record(i.z.string(),i.z.any()))}),In=i.z.object({id:i.z.string()});i.z.object({cardNumber:te,expiry:te,cvc:te}),i.z.object({backgroundColor:te,color:te,fontFamily:te,fontSize:te,fontWeight:te,margin:te,padding:te,letterSpacing:te,lineHeight:te});const G=i.z.enum(["LAYOUT","LOADED","BLUR","FOCUS","CHANGE","TOKENIZE_STARTED","CHECKOUT_STARTED","PAYMENT_FLOW_STARTED","TOKENIZE_SUCCESS","CHECKOUT_SUCCESS","LOAD_ERROR","VALIDATION_ERROR","TOKENIZE_ERROR","CHECKOUT_ERROR","SETUP_PAYMENT_METHOD_SUCCESS","TOKENIZE","CHECKOUT","START_PAYMENT_FLOW"]),jn=G.extract(["TOKENIZE_STARTED","CHECKOUT_STARTED"]),An=i.z.object({type:jn}),Mn=G.extract(["BLUR","FOCUS","CHANGE"]),Dn=i.z.object({type:Mn,elementType:Qr,errors:i.z.array(i.z.string()).optional()}),Fn=G.extract(["LOAD_ERROR","TOKENIZE_ERROR","CHECKOUT_ERROR"]),$n=i.z.object({type:Fn,message:oe}),xn=G.extract(["VALIDATION_ERROR"]),Ln=i.z.object({type:xn,elementType:Pn,errors:i.z.array(i.z.string())}),Nn=i.z.object({type:i.z.literal(G.enum.LAYOUT),height:oe}),Un=i.z.object({type:i.z.literal(G.enum.LOADED),sessionId:oe,totalAmountAtoms:i.z.number(),currency:te,checkoutPaymentMethods:i.z.array(Xr)}),zn=i.z.object({type:i.z.literal(G.enum.PAYMENT_FLOW_STARTED),nextActionMetadata:i.z.record(i.z.string(),i.z.any()),paymentFlowMetadata:i.z.any().optional(),startPFMetadata:i.z.optional(i.z.record(i.z.string(),i.z.any()))}),Vn=i.z.object({type:i.z.literal(G.enum.SETUP_PAYMENT_METHOD_SUCCESS),paymentMethodId:i.z.string()}),qn=i.z.object({firstName:oe,lastName:oe,email:oe,zipCode:oe,country:oe,promotionCode:te}),Yn=G.extract(["TOKENIZE","CHECKOUT","START_PAYMENT_FLOW"]),en=i.z.object({type:Yn,sessionId:oe,checkoutPaymentMethod:Xr,paymentFlowMetadata:i.z.any().optional(),doNotUseLegacyCCFlow:i.z.boolean().optional(),existingCCPMId:te}).extend(qn.shape),Hn=i.z.object({type:i.z.literal(G.enum.TOKENIZE_SUCCESS),isReadyForCheckout:i.z.boolean()}),Wn=i.z.object({type:i.z.literal(G.enum.CHECKOUT_SUCCESS),invoiceUrls:i.z.array(i.z.string()),subscriptionIds:i.z.array(i.z.string()),customerId:i.z.string()}),Bn=i.z.discriminatedUnion("type",[An,Dn,$n,Ln,Nn,Un,en,Hn,Wn,zn,Vn]),Kn=i.z.object({payload:Bn,nonce:oe,formId:oe,elementId:oe});i.z.object({amountAtom:i.z.number(),currency:oe}),i.z.object({secure_token:i.z.string(),promotion_code:i.z.string().optional()}),i.z.object({secure_token:i.z.string(),existing_cc_pm_id:$t(i.z.string())});const Gn=i.z.object({payment_methods:i.z.array(In)}),Jn=c=>{const a={};return Object.entries(c).forEach(([f,y])=>{try{const g=Jr.parse(f);Array.isArray(y)?a[g]=y:Array.isArray(y._errors)&&(a[g]=y._errors)}catch{return}}),a},Zn={usd:"usd",brl:"brl"},xt=async c=>{for(let a=0;a<10;a++)rn()||await Qn(500);if(!rn())throw new Error("Stripe JS not found.");return new Stripe(c)},tn=async(c,a,f,y)=>{const g=await xt(c),b=Zn[f.toLowerCase().trim()];return g.paymentRequest({country:"US",currency:b,total:{label:"Total",amount:a,pending:y},requestPayerName:!0,requestPayerEmail:!0})},Qn=c=>new Promise(a=>{setTimeout(a,c)}),rn=()=>"Stripe"in window,Xn=async c=>new Promise((a,f)=>{try{c.on("paymentmethod",async y=>{a(y)}),c.on("cancel",()=>{f(new Error("Payment cancelled, please click Submit again to pay"))})}catch(y){f(y)}}),eo=c=>{const a=c==null?void 0:c.stripe_pk;if(typeof a!="string")throw new Error("Invalid: stripe_pk not passed in checkout payment method");return a},to=async(c,a)=>{const f=c.nextActionMetadata;if(!c.paymentFlowMetadata||!c.paymentFlowMetadata.stripePmId)throw new Error(`Invalid payment flow metadata format: ${JSON.stringify(c.paymentFlowMetadata)}`);if(!f.stripe_pk||!f.client_secret)throw new Error(`Invalid next action metadata format: ${JSON.stringify(f)}`);if(a.paymentMethod.id!==c.paymentFlowMetadata.stripePmId)throw new Error(`PM ID mismatch: ${a.paymentMethod.id} != ${c.paymentFlowMetadata.stripePmId}`);const y=await(await xt(f.stripe_pk)).confirmCardSetup(f.client_secret,{payment_method:c.paymentFlowMetadata.stripePmId});if(y.error)throw a.complete("fail"),new Error(`Payment failed: ${y.error.message??"unknown"}`);a.complete("success")},ro=async c=>{var a,f,y,g;const b=c.nextActionMetadata,I=await(await xt(b.stripe_pk)).confirmCardSetup(b.client_secret,{payment_method:b.stripe_pm_id}),P=(a=I.setupIntent)==null?void 0:a.status;if(P!=="succeeded")throw P==="canceled"?new Error("Payment cancelled, please click Submit again to pay"):new Error(`${((f=I.error)==null?void 0:f.message)??((g=(y=I.setupIntent)==null?void 0:y.last_setup_error)==null?void 0:g.message)??"Payment failed, please click submit again to pay."}`)},no=c=>JSON.stringify(c),nn=(c,a)=>Array.from(c.querySelectorAll("[data-opid]")??[]).reduce((f,y)=>{const g=y.getAttribute("data-opid");return g?{...f,[g]:y.value}:f},a),At=(c,a,f,y,g,b,I)=>{const P=nn(f,{type:c,sessionId:a,checkoutPaymentMethod:g,paymentFlowMetadata:I,doNotUseLegacyCCFlow:b});(g.provider==="apple_pay"||g.provider==="google_pay"||g.provider==="stripe_link")&&(P[Be.ZIP_CODE]||(P[Be.ZIP_CODE]="00000"));const $=en.safeParse(P);if($.success)return $.data;{const q=$.error.format(),z=Jn(q);for(const[U,J]of Object.entries(z))y(U,J,U);return null}},oo=c=>{try{return Kn.parse(c)}catch(a){throw a}},on=(c,a,f,y,g)=>{const b={payload:y,nonce:mn.v4(),formId:a,elementId:f};c.postMessage(JSON.stringify(b),g)};var D={};/**
44
- * @license React
45
- * react.production.min.js
46
- *
47
- * Copyright (c) Facebook, Inc. and its affiliates.
48
- *
49
- * This source code is licensed under the MIT license found in the
50
- * LICENSE file in the root directory of this source tree.
51
- */var an;function ao(){if(an)return D;an=1;var c=Symbol.for("react.element"),a=Symbol.for("react.portal"),f=Symbol.for("react.fragment"),y=Symbol.for("react.strict_mode"),g=Symbol.for("react.profiler"),b=Symbol.for("react.provider"),I=Symbol.for("react.context"),P=Symbol.for("react.forward_ref"),$=Symbol.for("react.suspense"),q=Symbol.for("react.memo"),z=Symbol.for("react.lazy"),U=Symbol.iterator;function J(r){return r===null||typeof r!="object"?null:(r=U&&r[U]||r["@@iterator"],typeof r=="function"?r:null)}var Y={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},Z=Object.assign,ge={};function B(r,s,h){this.props=r,this.context=s,this.refs=ge,this.updater=h||Y}B.prototype.isReactComponent={},B.prototype.setState=function(r,s){if(typeof r!="object"&&typeof r!="function"&&r!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,r,s,"setState")},B.prototype.forceUpdate=function(r){this.updater.enqueueForceUpdate(this,r,"forceUpdate")};function _e(){}_e.prototype=B.prototype;function ae(r,s,h){this.props=r,this.context=s,this.refs=ge,this.updater=h||Y}var ie=ae.prototype=new _e;ie.constructor=ae,Z(ie,B.prototype),ie.isPureReactComponent=!0;var K=Array.isArray,F=Object.prototype.hasOwnProperty,V={current:null},Q={key:!0,ref:!0,__self:!0,__source:!0};function re(r,s,h){var _,E={},j=null,k=null;if(s!=null)for(_ in s.ref!==void 0&&(k=s.ref),s.key!==void 0&&(j=""+s.key),s)F.call(s,_)&&!Q.hasOwnProperty(_)&&(E[_]=s[_]);var O=arguments.length-2;if(O===1)E.children=h;else if(1<O){for(var C=Array(O),L=0;L<O;L++)C[L]=arguments[L+2];E.children=C}if(r&&r.defaultProps)for(_ in O=r.defaultProps,O)E[_]===void 0&&(E[_]=O[_]);return{$$typeof:c,type:r,key:j,ref:k,props:E,_owner:V.current}}function be(r,s){return{$$typeof:c,type:r.type,key:s,ref:r.ref,props:r.props,_owner:r._owner}}function pe(r){return typeof r=="object"&&r!==null&&r.$$typeof===c}function De(r){var s={"=":"=0",":":"=2"};return"$"+r.replace(/[=:]/g,function(h){return s[h]})}var Ee=/\/+/g;function de(r,s){return typeof r=="object"&&r!==null&&r.key!=null?De(""+r.key):s.toString(36)}function se(r,s,h,_,E){var j=typeof r;(j==="undefined"||j==="boolean")&&(r=null);var k=!1;if(r===null)k=!0;else switch(j){case"string":case"number":k=!0;break;case"object":switch(r.$$typeof){case c:case a:k=!0}}if(k)return k=r,E=E(k),r=_===""?"."+de(k,0):_,K(E)?(h="",r!=null&&(h=r.replace(Ee,"$&/")+"/"),se(E,s,h,"",function(L){return L})):E!=null&&(pe(E)&&(E=be(E,h+(!E.key||k&&k.key===E.key?"":(""+E.key).replace(Ee,"$&/")+"/")+r)),s.push(E)),1;if(k=0,_=_===""?".":_+":",K(r))for(var O=0;O<r.length;O++){j=r[O];var C=_+de(j,O);k+=se(j,s,h,C,E)}else if(C=J(r),typeof C=="function")for(r=C.call(r),O=0;!(j=r.next()).done;)j=j.value,C=_+de(j,O++),k+=se(j,s,h,C,E);else if(j==="object")throw s=String(r),Error("Objects are not valid as a React child (found: "+(s==="[object Object]"?"object with keys {"+Object.keys(r).join(", ")+"}":s)+"). If you meant to render a collection of children, use an array instead.");return k}function H(r,s,h){if(r==null)return r;var _=[],E=0;return se(r,_,"","",function(j){return s.call(h,j,E++)}),_}function X(r){if(r._status===-1){var s=r._result;s=s(),s.then(function(h){(r._status===0||r._status===-1)&&(r._status=1,r._result=h)},function(h){(r._status===0||r._status===-1)&&(r._status=2,r._result=h)}),r._status===-1&&(r._status=0,r._result=s)}if(r._status===1)return r._result.default;throw r._result}var p={current:null},ne={transition:null},we={ReactCurrentDispatcher:p,ReactCurrentBatchConfig:ne,ReactCurrentOwner:V};function ue(){throw Error("act(...) is not supported in production builds of React.")}return D.Children={map:H,forEach:function(r,s,h){H(r,function(){s.apply(this,arguments)},h)},count:function(r){var s=0;return H(r,function(){s++}),s},toArray:function(r){return H(r,function(s){return s})||[]},only:function(r){if(!pe(r))throw Error("React.Children.only expected to receive a single React element child.");return r}},D.Component=B,D.Fragment=f,D.Profiler=g,D.PureComponent=ae,D.StrictMode=y,D.Suspense=$,D.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=we,D.act=ue,D.cloneElement=function(r,s,h){if(r==null)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+r+".");var _=Z({},r.props),E=r.key,j=r.ref,k=r._owner;if(s!=null){if(s.ref!==void 0&&(j=s.ref,k=V.current),s.key!==void 0&&(E=""+s.key),r.type&&r.type.defaultProps)var O=r.type.defaultProps;for(C in s)F.call(s,C)&&!Q.hasOwnProperty(C)&&(_[C]=s[C]===void 0&&O!==void 0?O[C]:s[C])}var C=arguments.length-2;if(C===1)_.children=h;else if(1<C){O=Array(C);for(var L=0;L<C;L++)O[L]=arguments[L+2];_.children=O}return{$$typeof:c,type:r.type,key:E,ref:j,props:_,_owner:k}},D.createContext=function(r){return r={$$typeof:I,_currentValue:r,_currentValue2:r,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null},r.Provider={$$typeof:b,_context:r},r.Consumer=r},D.createElement=re,D.createFactory=function(r){var s=re.bind(null,r);return s.type=r,s},D.createRef=function(){return{current:null}},D.forwardRef=function(r){return{$$typeof:P,render:r}},D.isValidElement=pe,D.lazy=function(r){return{$$typeof:z,_payload:{_status:-1,_result:r},_init:X}},D.memo=function(r,s){return{$$typeof:q,type:r,compare:s===void 0?null:s}},D.startTransition=function(r){var s=ne.transition;ne.transition={};try{r()}finally{ne.transition=s}},D.unstable_act=ue,D.useCallback=function(r,s){return p.current.useCallback(r,s)},D.useContext=function(r){return p.current.useContext(r)},D.useDebugValue=function(){},D.useDeferredValue=function(r){return p.current.useDeferredValue(r)},D.useEffect=function(r,s){return p.current.useEffect(r,s)},D.useId=function(){return p.current.useId()},D.useImperativeHandle=function(r,s,h){return p.current.useImperativeHandle(r,s,h)},D.useInsertionEffect=function(r,s){return p.current.useInsertionEffect(r,s)},D.useLayoutEffect=function(r,s){return p.current.useLayoutEffect(r,s)},D.useMemo=function(r,s){return p.current.useMemo(r,s)},D.useReducer=function(r,s,h){return p.current.useReducer(r,s,h)},D.useRef=function(r){return p.current.useRef(r)},D.useState=function(r){return p.current.useState(r)},D.useSyncExternalStore=function(r,s,h){return p.current.useSyncExternalStore(r,s,h)},D.useTransition=function(){return p.current.useTransition()},D.version="18.3.1",D}var Mt={exports:{}};/**
52
- * @license React
53
- * react.development.js
54
- *
55
- * Copyright (c) Facebook, Inc. and its affiliates.
56
- *
57
- * This source code is licensed under the MIT license found in the
58
- * LICENSE file in the root directory of this source tree.
59
- */Mt.exports;var sn;function io(){return sn||(sn=1,function(c,a){process.env.NODE_ENV!=="production"&&function(){typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart=="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error);var f="18.3.1",y=Symbol.for("react.element"),g=Symbol.for("react.portal"),b=Symbol.for("react.fragment"),I=Symbol.for("react.strict_mode"),P=Symbol.for("react.profiler"),$=Symbol.for("react.provider"),q=Symbol.for("react.context"),z=Symbol.for("react.forward_ref"),U=Symbol.for("react.suspense"),J=Symbol.for("react.suspense_list"),Y=Symbol.for("react.memo"),Z=Symbol.for("react.lazy"),ge=Symbol.for("react.offscreen"),B=Symbol.iterator,_e="@@iterator";function ae(e){if(e===null||typeof e!="object")return null;var t=B&&e[B]||e[_e];return typeof t=="function"?t:null}var ie={current:null},K={transition:null},F={current:null,isBatchingLegacy:!1,didScheduleLegacyUpdate:!1},V={current:null},Q={},re=null;function be(e){re=e}Q.setExtraStackFrame=function(e){re=e},Q.getCurrentStack=null,Q.getStackAddendum=function(){var e="";re&&(e+=re);var t=Q.getCurrentStack;return t&&(e+=t()||""),e};var pe=!1,De=!1,Ee=!1,de=!1,se=!1,H={ReactCurrentDispatcher:ie,ReactCurrentBatchConfig:K,ReactCurrentOwner:V};H.ReactDebugCurrentFrame=Q,H.ReactCurrentActQueue=F;function X(e){{for(var t=arguments.length,n=new Array(t>1?t-1:0),o=1;o<t;o++)n[o-1]=arguments[o];ne("warn",e,n)}}function p(e){{for(var t=arguments.length,n=new Array(t>1?t-1:0),o=1;o<t;o++)n[o-1]=arguments[o];ne("error",e,n)}}function ne(e,t,n){{var o=H.ReactDebugCurrentFrame,u=o.getStackAddendum();u!==""&&(t+="%s",n=n.concat([u]));var d=n.map(function(l){return String(l)});d.unshift("Warning: "+t),Function.prototype.apply.call(console[e],console,d)}}var we={};function ue(e,t){{var n=e.constructor,o=n&&(n.displayName||n.name)||"ReactClass",u=o+"."+t;if(we[u])return;p("Can't call %s on a component that is not yet mounted. This is a no-op, but it might indicate a bug in your application. Instead, assign to `this.state` directly or define a `state = {};` class property with the desired state in the %s component.",t,o),we[u]=!0}}var r={isMounted:function(e){return!1},enqueueForceUpdate:function(e,t,n){ue(e,"forceUpdate")},enqueueReplaceState:function(e,t,n,o){ue(e,"replaceState")},enqueueSetState:function(e,t,n,o){ue(e,"setState")}},s=Object.assign,h={};Object.freeze(h);function _(e,t,n){this.props=e,this.context=t,this.refs=h,this.updater=n||r}_.prototype.isReactComponent={},_.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw new Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")},_.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};{var E={isMounted:["isMounted","Instead, make sure to clean up subscriptions and pending requests in componentWillUnmount to prevent memory leaks."],replaceState:["replaceState","Refactor your code to use setState instead (see https://github.com/facebook/react/issues/3236)."]},j=function(e,t){Object.defineProperty(_.prototype,e,{get:function(){X("%s(...) is deprecated in plain JavaScript React classes. %s",t[0],t[1])}})};for(var k in E)E.hasOwnProperty(k)&&j(k,E[k])}function O(){}O.prototype=_.prototype;function C(e,t,n){this.props=e,this.context=t,this.refs=h,this.updater=n||r}var L=C.prototype=new O;L.constructor=C,s(L,_.prototype),L.isPureReactComponent=!0;function Nt(){var e={current:null};return Object.seal(e),e}var Ut=Array.isArray;function Ce(e){return Ut(e)}function zt(e){{var t=typeof Symbol=="function"&&Symbol.toStringTag,n=t&&e[Symbol.toStringTag]||e.constructor.name||"Object";return n}}function Vt(e){try{return Ge(e),!1}catch{return!0}}function Ge(e){return""+e}function Se(e){if(Vt(e))return p("The provided key is an unsupported type %s. This value must be coerced to a string before before using it here.",zt(e)),Ge(e)}function qt(e,t,n){var o=e.displayName;if(o)return o;var u=t.displayName||t.name||"";return u!==""?n+"("+u+")":n}function Je(e){return e.displayName||"Context"}function ee(e){if(e==null)return null;if(typeof e.tag=="number"&&p("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case b:return"Fragment";case g:return"Portal";case P:return"Profiler";case I:return"StrictMode";case U:return"Suspense";case J:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case q:var t=e;return Je(t)+".Consumer";case $:var n=e;return Je(n._context)+".Provider";case z:return qt(e,e.render,"ForwardRef");case Y:var o=e.displayName||null;return o!==null?o:ee(e.type)||"Memo";case Z:{var u=e,d=u._payload,l=u._init;try{return ee(l(d))}catch{return null}}}return null}var ye=Object.prototype.hasOwnProperty,Ze={key:!0,ref:!0,__self:!0,__source:!0},Qe,Xe,Fe;Fe={};function et(e){if(ye.call(e,"ref")){var t=Object.getOwnPropertyDescriptor(e,"ref").get;if(t&&t.isReactWarning)return!1}return e.ref!==void 0}function tt(e){if(ye.call(e,"key")){var t=Object.getOwnPropertyDescriptor(e,"key").get;if(t&&t.isReactWarning)return!1}return e.key!==void 0}function Yt(e,t){var n=function(){Qe||(Qe=!0,p("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://reactjs.org/link/special-props)",t))};n.isReactWarning=!0,Object.defineProperty(e,"key",{get:n,configurable:!0})}function Ht(e,t){var n=function(){Xe||(Xe=!0,p("%s: `ref` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://reactjs.org/link/special-props)",t))};n.isReactWarning=!0,Object.defineProperty(e,"ref",{get:n,configurable:!0})}function Wt(e){if(typeof e.ref=="string"&&V.current&&e.__self&&V.current.stateNode!==e.__self){var t=ee(V.current.type);Fe[t]||(p('Component "%s" contains the string ref "%s". Support for string refs will be removed in a future major release. This case cannot be automatically converted to an arrow function. We ask you to manually fix this case by using useRef() or createRef() instead. Learn more about using refs safely here: https://reactjs.org/link/strict-mode-string-ref',t,e.ref),Fe[t]=!0)}}var $e=function(e,t,n,o,u,d,l){var m={$$typeof:y,type:e,key:t,ref:n,props:l,_owner:d};return m._store={},Object.defineProperty(m._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:!1}),Object.defineProperty(m,"_self",{configurable:!1,enumerable:!1,writable:!1,value:o}),Object.defineProperty(m,"_source",{configurable:!1,enumerable:!1,writable:!1,value:u}),Object.freeze&&(Object.freeze(m.props),Object.freeze(m)),m};function Bt(e,t,n){var o,u={},d=null,l=null,m=null,v=null;if(t!=null){et(t)&&(l=t.ref,Wt(t)),tt(t)&&(Se(t.key),d=""+t.key),m=t.__self===void 0?null:t.__self,v=t.__source===void 0?null:t.__source;for(o in t)ye.call(t,o)&&!Ze.hasOwnProperty(o)&&(u[o]=t[o])}var w=arguments.length-2;if(w===1)u.children=n;else if(w>1){for(var S=Array(w),R=0;R<w;R++)S[R]=arguments[R+2];Object.freeze&&Object.freeze(S),u.children=S}if(e&&e.defaultProps){var T=e.defaultProps;for(o in T)u[o]===void 0&&(u[o]=T[o])}if(d||l){var A=typeof e=="function"?e.displayName||e.name||"Unknown":e;d&&Yt(u,A),l&&Ht(u,A)}return $e(e,d,l,m,v,V.current,u)}function Kt(e,t){var n=$e(e.type,t,e.ref,e._self,e._source,e._owner,e.props);return n}function Gt(e,t,n){if(e==null)throw new Error("React.cloneElement(...): The argument must be a React element, but you passed "+e+".");var o,u=s({},e.props),d=e.key,l=e.ref,m=e._self,v=e._source,w=e._owner;if(t!=null){et(t)&&(l=t.ref,w=V.current),tt(t)&&(Se(t.key),d=""+t.key);var S;e.type&&e.type.defaultProps&&(S=e.type.defaultProps);for(o in t)ye.call(t,o)&&!Ze.hasOwnProperty(o)&&(t[o]===void 0&&S!==void 0?u[o]=S[o]:u[o]=t[o])}var R=arguments.length-2;if(R===1)u.children=n;else if(R>1){for(var T=Array(R),A=0;A<R;A++)T[A]=arguments[A+2];u.children=T}return $e(e.type,d,l,m,v,w,u)}function ce(e){return typeof e=="object"&&e!==null&&e.$$typeof===y}var rt=".",Jt=":";function Zt(e){var t=/[=:]/g,n={"=":"=0",":":"=2"},o=e.replace(t,function(u){return n[u]});return"$"+o}var nt=!1,Qt=/\/+/g;function ot(e){return e.replace(Qt,"$&/")}function xe(e,t){return typeof e=="object"&&e!==null&&e.key!=null?(Se(e.key),Zt(""+e.key)):t.toString(36)}function Re(e,t,n,o,u){var d=typeof e;(d==="undefined"||d==="boolean")&&(e=null);var l=!1;if(e===null)l=!0;else switch(d){case"string":case"number":l=!0;break;case"object":switch(e.$$typeof){case y:case g:l=!0}}if(l){var m=e,v=u(m),w=o===""?rt+xe(m,0):o;if(Ce(v)){var S="";w!=null&&(S=ot(w)+"/"),Re(v,t,S,"",function(Yr){return Yr})}else v!=null&&(ce(v)&&(v.key&&(!m||m.key!==v.key)&&Se(v.key),v=Kt(v,n+(v.key&&(!m||m.key!==v.key)?ot(""+v.key)+"/":"")+w)),t.push(v));return 1}var R,T,A=0,x=o===""?rt:o+Jt;if(Ce(e))for(var Me=0;Me<e.length;Me++)R=e[Me],T=x+xe(R,Me),A+=Re(R,t,n,T,u);else{var We=ae(e);if(typeof We=="function"){var Pt=e;We===Pt.entries&&(nt||X("Using Maps as children is not supported. Use an array of keyed ReactElements instead."),nt=!0);for(var Vr=We.call(Pt),It,qr=0;!(It=Vr.next()).done;)R=It.value,T=x+xe(R,qr++),A+=Re(R,t,n,T,u)}else if(d==="object"){var jt=String(e);throw new Error("Objects are not valid as a React child (found: "+(jt==="[object Object]"?"object with keys {"+Object.keys(e).join(", ")+"}":jt)+"). If you meant to render a collection of children, use an array instead.")}}return A}function ke(e,t,n){if(e==null)return e;var o=[],u=0;return Re(e,o,"","",function(d){return t.call(n,d,u++)}),o}function Xt(e){var t=0;return ke(e,function(){t++}),t}function er(e,t,n){ke(e,function(){t.apply(this,arguments)},n)}function tr(e){return ke(e,function(t){return t})||[]}function rr(e){if(!ce(e))throw new Error("React.Children.only expected to receive a single React element child.");return e}function nr(e){var t={$$typeof:q,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null};t.Provider={$$typeof:$,_context:t};var n=!1,o=!1,u=!1;{var d={$$typeof:q,_context:t};Object.defineProperties(d,{Provider:{get:function(){return o||(o=!0,p("Rendering <Context.Consumer.Provider> is not supported and will be removed in a future major release. Did you mean to render <Context.Provider> instead?")),t.Provider},set:function(l){t.Provider=l}},_currentValue:{get:function(){return t._currentValue},set:function(l){t._currentValue=l}},_currentValue2:{get:function(){return t._currentValue2},set:function(l){t._currentValue2=l}},_threadCount:{get:function(){return t._threadCount},set:function(l){t._threadCount=l}},Consumer:{get:function(){return n||(n=!0,p("Rendering <Context.Consumer.Consumer> is not supported and will be removed in a future major release. Did you mean to render <Context.Consumer> instead?")),t.Consumer}},displayName:{get:function(){return t.displayName},set:function(l){u||(X("Setting `displayName` on Context.Consumer has no effect. You should set it directly on the context with Context.displayName = '%s'.",l),u=!0)}}}),t.Consumer=d}return t._currentRenderer=null,t._currentRenderer2=null,t}var me=-1,Le=0,at=1,or=2;function ar(e){if(e._status===me){var t=e._result,n=t();if(n.then(function(d){if(e._status===Le||e._status===me){var l=e;l._status=at,l._result=d}},function(d){if(e._status===Le||e._status===me){var l=e;l._status=or,l._result=d}}),e._status===me){var o=e;o._status=Le,o._result=n}}if(e._status===at){var u=e._result;return u===void 0&&p(`lazy: Expected the result of a dynamic import() call. Instead received: %s
60
-
61
- Your code should look like:
62
- const MyComponent = lazy(() => import('./MyComponent'))
63
-
64
- Did you accidentally put curly braces around the import?`,u),"default"in u||p(`lazy: Expected the result of a dynamic import() call. Instead received: %s
65
-
66
- Your code should look like:
67
- const MyComponent = lazy(() => import('./MyComponent'))`,u),u.default}else throw e._result}function ir(e){var t={_status:me,_result:e},n={$$typeof:Z,_payload:t,_init:ar};{var o,u;Object.defineProperties(n,{defaultProps:{configurable:!0,get:function(){return o},set:function(d){p("React.lazy(...): It is not supported to assign `defaultProps` to a lazy component import. Either specify them where the component is defined, or create a wrapping component around it."),o=d,Object.defineProperty(n,"defaultProps",{enumerable:!0})}},propTypes:{configurable:!0,get:function(){return u},set:function(d){p("React.lazy(...): It is not supported to assign `propTypes` to a lazy component import. Either specify them where the component is defined, or create a wrapping component around it."),u=d,Object.defineProperty(n,"propTypes",{enumerable:!0})}}})}return n}function sr(e){e!=null&&e.$$typeof===Y?p("forwardRef requires a render function but received a `memo` component. Instead of forwardRef(memo(...)), use memo(forwardRef(...))."):typeof e!="function"?p("forwardRef requires a render function but was given %s.",e===null?"null":typeof e):e.length!==0&&e.length!==2&&p("forwardRef render functions accept exactly two parameters: props and ref. %s",e.length===1?"Did you forget to use the ref parameter?":"Any additional parameter will be undefined."),e!=null&&(e.defaultProps!=null||e.propTypes!=null)&&p("forwardRef render functions do not support propTypes or defaultProps. Did you accidentally pass a React component?");var t={$$typeof:z,render:e};{var n;Object.defineProperty(t,"displayName",{enumerable:!1,configurable:!0,get:function(){return n},set:function(o){n=o,!e.name&&!e.displayName&&(e.displayName=o)}})}return t}var it;it=Symbol.for("react.module.reference");function st(e){return!!(typeof e=="string"||typeof e=="function"||e===b||e===P||se||e===I||e===U||e===J||de||e===ge||pe||De||Ee||typeof e=="object"&&e!==null&&(e.$$typeof===Z||e.$$typeof===Y||e.$$typeof===$||e.$$typeof===q||e.$$typeof===z||e.$$typeof===it||e.getModuleId!==void 0))}function ur(e,t){st(e)||p("memo: The first argument must be a component. Instead received: %s",e===null?"null":typeof e);var n={$$typeof:Y,type:e,compare:t===void 0?null:t};{var o;Object.defineProperty(n,"displayName",{enumerable:!1,configurable:!0,get:function(){return o},set:function(u){o=u,!e.name&&!e.displayName&&(e.displayName=u)}})}return n}function N(){var e=ie.current;return e===null&&p(`Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:
68
- 1. You might have mismatching versions of React and the renderer (such as React DOM)
69
- 2. You might be breaking the Rules of Hooks
70
- 3. You might have more than one copy of React in the same app
71
- See https://reactjs.org/link/invalid-hook-call for tips about how to debug and fix this problem.`),e}function cr(e){var t=N();if(e._context!==void 0){var n=e._context;n.Consumer===e?p("Calling useContext(Context.Consumer) is not supported, may cause bugs, and will be removed in a future major release. Did you mean to call useContext(Context) instead?"):n.Provider===e&&p("Calling useContext(Context.Provider) is not supported. Did you mean to call useContext(Context) instead?")}return t.useContext(e)}function lr(e){var t=N();return t.useState(e)}function fr(e,t,n){var o=N();return o.useReducer(e,t,n)}function pr(e){var t=N();return t.useRef(e)}function dr(e,t){var n=N();return n.useEffect(e,t)}function yr(e,t){var n=N();return n.useInsertionEffect(e,t)}function mr(e,t){var n=N();return n.useLayoutEffect(e,t)}function hr(e,t){var n=N();return n.useCallback(e,t)}function vr(e,t){var n=N();return n.useMemo(e,t)}function gr(e,t,n){var o=N();return o.useImperativeHandle(e,t,n)}function _r(e,t){{var n=N();return n.useDebugValue(e,t)}}function br(){var e=N();return e.useTransition()}function Er(e){var t=N();return t.useDeferredValue(e)}function wr(){var e=N();return e.useId()}function Cr(e,t,n){var o=N();return o.useSyncExternalStore(e,t,n)}var he=0,ut,ct,lt,ft,pt,dt,yt;function mt(){}mt.__reactDisabledLog=!0;function Sr(){{if(he===0){ut=console.log,ct=console.info,lt=console.warn,ft=console.error,pt=console.group,dt=console.groupCollapsed,yt=console.groupEnd;var e={configurable:!0,enumerable:!0,value:mt,writable:!0};Object.defineProperties(console,{info:e,log:e,warn:e,error:e,group:e,groupCollapsed:e,groupEnd:e})}he++}}function Rr(){{if(he--,he===0){var e={configurable:!0,enumerable:!0,writable:!0};Object.defineProperties(console,{log:s({},e,{value:ut}),info:s({},e,{value:ct}),warn:s({},e,{value:lt}),error:s({},e,{value:ft}),group:s({},e,{value:pt}),groupCollapsed:s({},e,{value:dt}),groupEnd:s({},e,{value:yt})})}he<0&&p("disabledDepth fell below zero. This is a bug in React. Please file an issue.")}}var Ne=H.ReactCurrentDispatcher,Ue;function Oe(e,t,n){{if(Ue===void 0)try{throw Error()}catch(u){var o=u.stack.trim().match(/\n( *(at )?)/);Ue=o&&o[1]||""}return`
72
- `+Ue+e}}var ze=!1,Te;{var kr=typeof WeakMap=="function"?WeakMap:Map;Te=new kr}function ht(e,t){if(!e||ze)return"";{var n=Te.get(e);if(n!==void 0)return n}var o;ze=!0;var u=Error.prepareStackTrace;Error.prepareStackTrace=void 0;var d;d=Ne.current,Ne.current=null,Sr();try{if(t){var l=function(){throw Error()};if(Object.defineProperty(l.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(l,[])}catch(x){o=x}Reflect.construct(e,[],l)}else{try{l.call()}catch(x){o=x}e.call(l.prototype)}}else{try{throw Error()}catch(x){o=x}e()}}catch(x){if(x&&o&&typeof x.stack=="string"){for(var m=x.stack.split(`
73
- `),v=o.stack.split(`
74
- `),w=m.length-1,S=v.length-1;w>=1&&S>=0&&m[w]!==v[S];)S--;for(;w>=1&&S>=0;w--,S--)if(m[w]!==v[S]){if(w!==1||S!==1)do if(w--,S--,S<0||m[w]!==v[S]){var R=`
75
- `+m[w].replace(" at new "," at ");return e.displayName&&R.includes("<anonymous>")&&(R=R.replace("<anonymous>",e.displayName)),typeof e=="function"&&Te.set(e,R),R}while(w>=1&&S>=0);break}}}finally{ze=!1,Ne.current=d,Rr(),Error.prepareStackTrace=u}var T=e?e.displayName||e.name:"",A=T?Oe(T):"";return typeof e=="function"&&Te.set(e,A),A}function Or(e,t,n){return ht(e,!1)}function Tr(e){var t=e.prototype;return!!(t&&t.isReactComponent)}function Pe(e,t,n){if(e==null)return"";if(typeof e=="function")return ht(e,Tr(e));if(typeof e=="string")return Oe(e);switch(e){case U:return Oe("Suspense");case J:return Oe("SuspenseList")}if(typeof e=="object")switch(e.$$typeof){case z:return Or(e.render);case Y:return Pe(e.type,t,n);case Z:{var o=e,u=o._payload,d=o._init;try{return Pe(d(u),t,n)}catch{}}}return""}var vt={},gt=H.ReactDebugCurrentFrame;function Ie(e){if(e){var t=e._owner,n=Pe(e.type,e._source,t?t.type:null);gt.setExtraStackFrame(n)}else gt.setExtraStackFrame(null)}function Pr(e,t,n,o,u){{var d=Function.call.bind(ye);for(var l in e)if(d(e,l)){var m=void 0;try{if(typeof e[l]!="function"){var v=Error((o||"React class")+": "+n+" type `"+l+"` is invalid; it must be a function, usually from the `prop-types` package, but received `"+typeof e[l]+"`.This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.");throw v.name="Invariant Violation",v}m=e[l](t,l,o,n,null,"SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED")}catch(w){m=w}m&&!(m instanceof Error)&&(Ie(u),p("%s: type specification of %s `%s` is invalid; the type checker function must return `null` or an `Error` but returned a %s. You may have forgotten to pass an argument to the type checker creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and shape all require an argument).",o||"React class",n,l,typeof m),Ie(null)),m instanceof Error&&!(m.message in vt)&&(vt[m.message]=!0,Ie(u),p("Failed %s type: %s",n,m.message),Ie(null))}}}function le(e){if(e){var t=e._owner,n=Pe(e.type,e._source,t?t.type:null);be(n)}else be(null)}var Ve;Ve=!1;function _t(){if(V.current){var e=ee(V.current.type);if(e)return`
76
-
77
- Check the render method of \``+e+"`."}return""}function Ir(e){if(e!==void 0){var t=e.fileName.replace(/^.*[\\\/]/,""),n=e.lineNumber;return`
78
-
79
- Check your code at `+t+":"+n+"."}return""}function jr(e){return e!=null?Ir(e.__source):""}var bt={};function Ar(e){var t=_t();if(!t){var n=typeof e=="string"?e:e.displayName||e.name;n&&(t=`
80
-
81
- Check the top-level render call using <`+n+">.")}return t}function Et(e,t){if(!(!e._store||e._store.validated||e.key!=null)){e._store.validated=!0;var n=Ar(t);if(!bt[n]){bt[n]=!0;var o="";e&&e._owner&&e._owner!==V.current&&(o=" It was passed a child from "+ee(e._owner.type)+"."),le(e),p('Each child in a list should have a unique "key" prop.%s%s See https://reactjs.org/link/warning-keys for more information.',n,o),le(null)}}}function wt(e,t){if(typeof e=="object"){if(Ce(e))for(var n=0;n<e.length;n++){var o=e[n];ce(o)&&Et(o,t)}else if(ce(e))e._store&&(e._store.validated=!0);else if(e){var u=ae(e);if(typeof u=="function"&&u!==e.entries)for(var d=u.call(e),l;!(l=d.next()).done;)ce(l.value)&&Et(l.value,t)}}}function Ct(e){{var t=e.type;if(t==null||typeof t=="string")return;var n;if(typeof t=="function")n=t.propTypes;else if(typeof t=="object"&&(t.$$typeof===z||t.$$typeof===Y))n=t.propTypes;else return;if(n){var o=ee(t);Pr(n,e.props,"prop",o,e)}else if(t.PropTypes!==void 0&&!Ve){Ve=!0;var u=ee(t);p("Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?",u||"Unknown")}typeof t.getDefaultProps=="function"&&!t.getDefaultProps.isReactClassApproved&&p("getDefaultProps is only used on classic React.createClass definitions. Use a static property named `defaultProps` instead.")}}function Mr(e){{for(var t=Object.keys(e.props),n=0;n<t.length;n++){var o=t[n];if(o!=="children"&&o!=="key"){le(e),p("Invalid prop `%s` supplied to `React.Fragment`. React.Fragment can only have `key` and `children` props.",o),le(null);break}}e.ref!==null&&(le(e),p("Invalid attribute `ref` supplied to `React.Fragment`."),le(null))}}function St(e,t,n){var o=st(e);if(!o){var u="";(e===void 0||typeof e=="object"&&e!==null&&Object.keys(e).length===0)&&(u+=" You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.");var d=jr(t);d?u+=d:u+=_t();var l;e===null?l="null":Ce(e)?l="array":e!==void 0&&e.$$typeof===y?(l="<"+(ee(e.type)||"Unknown")+" />",u=" Did you accidentally export a JSX literal instead of a component?"):l=typeof e,p("React.createElement: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s",l,u)}var m=Bt.apply(this,arguments);if(m==null)return m;if(o)for(var v=2;v<arguments.length;v++)wt(arguments[v],e);return e===b?Mr(m):Ct(m),m}var Rt=!1;function Dr(e){var t=St.bind(null,e);return t.type=e,Rt||(Rt=!0,X("React.createFactory() is deprecated and will be removed in a future major release. Consider using JSX or use React.createElement() directly instead.")),Object.defineProperty(t,"type",{enumerable:!1,get:function(){return X("Factory.type is deprecated. Access the class directly before passing it to createFactory."),Object.defineProperty(this,"type",{value:e}),e}}),t}function Fr(e,t,n){for(var o=Gt.apply(this,arguments),u=2;u<arguments.length;u++)wt(arguments[u],o.type);return Ct(o),o}function $r(e,t){var n=K.transition;K.transition={};var o=K.transition;K.transition._updatedFibers=new Set;try{e()}finally{if(K.transition=n,n===null&&o._updatedFibers){var u=o._updatedFibers.size;u>10&&X("Detected a large number of updates inside startTransition. If this is due to a subscription please re-write it to use React provided hooks. Otherwise concurrent mode guarantees are off the table."),o._updatedFibers.clear()}}}var kt=!1,je=null;function xr(e){if(je===null)try{var t=("require"+Math.random()).slice(0,7),n=c&&c[t];je=n.call(c,"timers").setImmediate}catch{je=function(o){kt===!1&&(kt=!0,typeof MessageChannel>"u"&&p("This browser does not have a MessageChannel implementation, so enqueuing tasks via await act(async () => ...) will fail. Please file an issue at https://github.com/facebook/react/issues if you encounter this warning."));var u=new MessageChannel;u.port1.onmessage=o,u.port2.postMessage(void 0)}}return je(e)}var fe=0,Ot=!1;function Tt(e){{var t=fe;fe++,F.current===null&&(F.current=[]);var n=F.isBatchingLegacy,o;try{if(F.isBatchingLegacy=!0,o=e(),!n&&F.didScheduleLegacyUpdate){var u=F.current;u!==null&&(F.didScheduleLegacyUpdate=!1,He(u))}}catch(T){throw Ae(t),T}finally{F.isBatchingLegacy=n}if(o!==null&&typeof o=="object"&&typeof o.then=="function"){var d=o,l=!1,m={then:function(T,A){l=!0,d.then(function(x){Ae(t),fe===0?qe(x,T,A):T(x)},function(x){Ae(t),A(x)})}};return!Ot&&typeof Promise<"u"&&Promise.resolve().then(function(){}).then(function(){l||(Ot=!0,p("You called act(async () => ...) without await. This could lead to unexpected testing behaviour, interleaving multiple act calls and mixing their scopes. You should - await act(async () => ...);"))}),m}else{var v=o;if(Ae(t),fe===0){var w=F.current;w!==null&&(He(w),F.current=null);var S={then:function(T,A){F.current===null?(F.current=[],qe(v,T,A)):T(v)}};return S}else{var R={then:function(T,A){T(v)}};return R}}}}function Ae(e){e!==fe-1&&p("You seem to have overlapping act() calls, this is not supported. Be sure to await previous act() calls before making a new one. "),fe=e}function qe(e,t,n){{var o=F.current;if(o!==null)try{He(o),xr(function(){o.length===0?(F.current=null,t(e)):qe(e,t,n)})}catch(u){n(u)}else t(e)}}var Ye=!1;function He(e){if(!Ye){Ye=!0;var t=0;try{for(;t<e.length;t++){var n=e[t];do n=n(!0);while(n!==null)}e.length=0}catch(o){throw e=e.slice(t+1),o}finally{Ye=!1}}}var Lr=St,Nr=Fr,Ur=Dr,zr={map:ke,forEach:er,count:Xt,toArray:tr,only:rr};a.Children=zr,a.Component=_,a.Fragment=b,a.Profiler=P,a.PureComponent=C,a.StrictMode=I,a.Suspense=U,a.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=H,a.act=Tt,a.cloneElement=Nr,a.createContext=nr,a.createElement=Lr,a.createFactory=Ur,a.createRef=Nt,a.forwardRef=sr,a.isValidElement=ce,a.lazy=ir,a.memo=ur,a.startTransition=$r,a.unstable_act=Tt,a.useCallback=hr,a.useContext=cr,a.useDebugValue=_r,a.useDeferredValue=Er,a.useEffect=dr,a.useId=wr,a.useImperativeHandle=gr,a.useInsertionEffect=yr,a.useLayoutEffect=mr,a.useMemo=vr,a.useReducer=fr,a.useRef=pr,a.useState=lr,a.useSyncExternalStore=Cr,a.useTransition=br,a.version=f,typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop=="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error)}()}(Mt,Mt.exports)),Mt.exports}process.env.NODE_ENV==="production"?ao():io();const so=async c=>{if(typeof c!="object"||!c)return!1;try{const a={type:"ping"},f=await c.send(a);if(f!==!0)throw new Error(`Expected 'true' after ping, got ${JSON.stringify(f)}`);return!0}catch{return!1}},uo=(c,a)=>!!c&&a,W=c=>i.z.nullable(c.optional());i.z.string().trim().min(1,{message:"Cannot be blank"});const co=i.z.object({cde_response_type:i.z.literal("error"),message:i.z.string()}),lo=i.z.enum(["usd","brl"]),un=i.z.object({name:i.z.string(),amount_atom_off:W(i.z.number()),percent_off:W(i.z.number()),currency:W(i.z.string()),duration:i.z.string(),duration_in_months:W(i.z.number())}),fo=i.z.object({amount_subtotal_atom:i.z.number().int(),amount_total_atom:i.z.number().int(),currency:i.z.string(),description:W(i.z.string()),price_id:i.z.string(),billing_interval:W(i.z.string()),billing_interval_count:W(i.z.number().int()),quantity:i.z.number().int()}),po=i.z.record(i.z.string(),i.z.any()),yo=i.z.object({name:i.z.string(),settings:W(po)}),mo=i.z.object({provider:i.z.string(),processor_name:W(i.z.string()),metadata:W(i.z.record(i.z.string(),i.z.any()))}),ho=i.z.object({quantity:i.z.number()}),vo=i.z.object({id:W(i.z.string()),billing_interval:W(i.z.string()),billing_interval_count:W(i.z.number().int()),subscription_items:i.z.array(ho),trial_start:W(i.z.string()),trial_end:W(i.z.string())}),cn=i.z.object({amount_atom:i.z.number()}),go=i.z.object({amount_atom:i.z.number(),amount_atom_considering_discount_applied:i.z.number(),currency:i.z.string(),discount_amount_atoms:i.z.array(cn),subscription_item_id:i.z.string()}),_o=i.z.object({coupon:un}),bo=i.z.object({currency:i.z.string(),discounts:i.z.array(_o),hosted_invoice_url:W(i.z.string()),lines:i.z.array(go),remaining_amount_atom:i.z.number(),tax_amount_atom:i.z.number(),total_amount_atom:i.z.number(),total_discount_amount_atoms:i.z.array(cn)}),ln=i.z.object({created:i.z.array(vo),invoices:i.z.array(bo)}),fn=i.z.object({preview:ln,preview_post_trial:W(ln),coupons:i.z.array(un)}),pn=i.z.object({status:i.z.literal("open"),token:i.z.string(),email:W(i.z.string()),line_items:i.z.array(fo),amount_subtotal_atom:i.z.number().int(),amount_total_atom:i.z.number().int(),brand:yo,subs_preview:W(fn),methods_available:i.z.array(mo)}),dn=i.z.discriminatedUnion("mode",[i.z.object({mode:i.z.literal("setup"),currency:i.z.nullable(i.z.undefined())}).extend(pn.shape),i.z.object({mode:i.z.enum(["payment","subscription"]),currency:lo}).extend(pn.shape)]),Eo=i.z.object({status:i.z.literal("complete")}),wo=i.z.object({status:i.z.literal("expired")});i.z.union([dn,Eo,wo]),i.z.object({logo:i.z.string(),icon:i.z.string(),primary_color:i.z.string(),secondary_color:i.z.string()}),i.z.object({invoice_urls:i.z.array(i.z.string()),subscription_ids:i.z.array(i.z.string()),customer_id:i.z.string()}),i.z.object({payment_method_id:i.z.string()}),i.z.object({id:i.z.string(),return_url:i.z.string()});const Co=i.z.object({type:i.z.string(),loc:i.z.array(i.z.string()),msg:i.z.string(),url:i.z.string()});i.z.array(Co),i.z.object({required_user_actions:i.z.array(i.z.record(i.z.string(),i.z.any()))}),i.z.object({required_user_actions:i.z.array(i.z.record(i.z.string(),i.z.any())),cc_pm_id:i.z.string()});const Lt=async(c,a,f)=>{const y=await c.send(a);if(Ro(y))throw new Error(`[cde-client] Error querying CDE: ${y.message}`);if(!So(y,f)){const g=f.safeParse(y);throw g.success?new Error("Invalid state"):g.error}return y},So=(c,a)=>a.safeParse(c).success,Ro=c=>co.safeParse(c).success,ko=async(c,a)=>await Lt(c,{type:"get_checkout_preview",payload:a},fn),yn=async c=>await Lt(c,{type:"get_prefill",payload:{}},dn),Oo=async(c,a)=>await Lt(c,{type:"confirm_payment_flow",payload:a},Gn);class To{constructor(a){this.formInstance=a,this.config=a.config,this.formId=a.formId,this.eventTargets={},this.nonces=new Set,this.tokenizedData=null,this.tokenized=0,this.connectionManager=a.getConnectionManager()}setTokenizedData(a){this.tokenizedData=a}handleMessage(a){var P;if(!a.source)throw new Error("No source found");if(a.origin!==((P=this.formInstance.config._frameUrl)==null?void 0:P.origin))return;const f=oo(JSON.parse(a.data));if(!this.validateEvent(f))return;const{elementId:g,payload:b}=f;switch(b.type){case"LAYOUT":this.handleLayoutEvent(b);break;case"FOCUS":this.handleFocusEvent(g,b.elementType);break;case"BLUR":this.handleBlurEvent(g,b.elementType);break;case"CHANGE":this.handleChangeEvent(g,b.elementType,b.errors);break;case"LOADED":this.handleLoadedEvent(a.source,g,b);break;case"TOKENIZE_STARTED":break;case"CHECKOUT_STARTED":this.handleCheckoutStartedEvent();break;case"PAYMENT_FLOW_STARTED":this.handlePaymentFlowStartedEvent(b,a.source,g);break;case"TOKENIZE_SUCCESS":this.handleTokenizeSuccessEvent(a.source,g,b);break;case"CHECKOUT_SUCCESS":this.handleCheckoutSuccessEvent(b);break;case"SETUP_PAYMENT_METHOD_SUCCESS":this.handleSetupPaymentMethodSuccessEvent(b);break;case"LOAD_ERROR":this.handleLoadErrorEvent(b);break;case"VALIDATION_ERROR":this.handleValidationErrorEvent(b,g);break;case"TOKENIZE_ERROR":case"CHECKOUT_ERROR":this.handleErrorEvent(b);break}}validateEvent(a){return a.formId!==this.formInstance.formId||!a.elementId||this.nonces.has(a.nonce)?!1:(this.nonces.add(a.nonce),!0)}handleLayoutEvent(a){const f=a.height?`${a.height}px`:"100%";this.formInstance.setFormHeight(f)}handleFocusEvent(a,f){this.config.onFocus&&this.config.onFocus(a,f)}handleBlurEvent(a,f){this.config.onBlur&&this.config.onBlur(a,f)}handleChangeEvent(a,f,y){this.config.onChange&&this.config.onChange(a,f,y)}handleLoadedEvent(a,f,y){this.eventTargets[f]=a,this.formInstance.sessionId||(this.formInstance.sessionId=y.sessionId),this.config.onLoad&&this.config.onLoad(y.totalAmountAtoms,y.currency),this.formInstance.checkoutPaymentMethods=y.checkoutPaymentMethods}handleTokenizeStartedEvent(){this.formInstance.config.onCheckoutStarted&&this.formInstance.config.onCheckoutStarted()}handleCheckoutStartedEvent(){this.formInstance.config.onCheckoutStarted&&this.formInstance.config.onCheckoutStarted()}async handlePaymentFlowStartedEvent(a,f,y){var I;if(!this.tokenizedData)throw new Error("tokenizedData not populated");const g=this.connectionManager.getConnection(),b=async()=>{var q;const P=a.nextActionMetadata.type;if(P!==void 0)if(P==="stripe_3ds")await ro(a);else if(P==="stripe_payment_request"){if(!this.formInstance.getStripePm())throw new Error("Stripe PM not set");await to(a,this.formInstance.getStripePm())}else throw new Error(`Unknown next action type: ${P}`);const $=await yn(g);if($.mode==="setup"){const{payment_methods:z}=await Oo(g,{secure_token:$.token,existing_cc_pm_id:(q=this.tokenizedData)==null?void 0:q.existingCCPMId});if(z.length!==1)throw new Error(`Expected exactly one payment method, got ${z.length}`);return this.tokenized=0,this.formInstance.checkoutFired=!1,this.formInstance.config.onSetupPaymentMethodSuccess&&this.formInstance.config.onSetupPaymentMethodSuccess(z[0].id),{proceedToCheckout:!1}}else return{proceedToCheckout:!0}};try{const{proceedToCheckout:P}=await b();if(!P)return;let $;if(this.tokenizedData.checkoutPaymentMethod.provider==="credit_card"&&($=(I=a.startPFMetadata)==null?void 0:I.cc_pm_id,!$))throw new Error("CC PM ID not found");on(f,this.formInstance.formId,y,{...this.tokenizedData,type:"CHECKOUT",doNotUseLegacyCCFlow:!0,existingCCPMId:$},this.formInstance.config.baseUrl),this.formInstance.checkoutFired=!0,this.tokenizedData=null,this.formInstance.config.onCheckoutStarted&&this.formInstance.config.onCheckoutStarted()}catch(P){const $=Gr(P);this.formInstance.checkoutFired=!1,this.formInstance.config.onCheckoutError&&this.formInstance.config.onCheckoutError($)}}handleTokenizeSuccessEvent(a,f,y){if(!this.tokenizedData)throw new Error("Tokenized data not found");const g=this.tokenized+1,b=g===Object.keys(this.eventTargets).length;!this.formInstance.checkoutFired&&(b||y.isReadyForCheckout)?(this.tokenizedData.type=this.tokenizedData.type===G.enum.TOKENIZE?G.enum.CHECKOUT:G.enum.START_PAYMENT_FLOW,this.postEventToFrame(a,f,this.tokenizedData),this.tokenizedData=null):this.tokenized=g}handleCheckoutSuccessEvent(a){this.formInstance.config.onCheckoutSuccess&&this.formInstance.config.onCheckoutSuccess(a.invoiceUrls,a.subscriptionIds,a.customerId)}handleSetupPaymentMethodSuccessEvent(a){this.formInstance.config.onSetupPaymentMethodSuccess&&this.formInstance.config.onSetupPaymentMethodSuccess(a.paymentMethodId)}handleLoadErrorEvent(a){this.formInstance.config.onLoadError&&this.formInstance.config.onLoadError(a.message)}handleValidationErrorEvent(a,f){this.formInstance.config.onValidationError&&this.formInstance.config.onValidationError(a.elementType,a.errors,f)}handleErrorEvent(a){var f;if(a.message==="3DS_REQUIRED"){const y=(f=this.formInstance.checkoutPaymentMethods)==null?void 0:f.find(g=>g.provider==="credit_card");if(!this.formInstance.sessionId||!this.formInstance.formTarget||!this.config.onValidationError||!y)return;for(const[g,b]of Object.entries(this.eventTargets)){if(!b)continue;const I=At(G.enum.START_PAYMENT_FLOW,this.formInstance.sessionId,document.querySelector(this.formInstance.formTarget)??document.body,this.config.onValidationError,{...y,processor_name:"stripe"},!1);if(I){this.formInstance.checkoutFired=!0,this.tokenizedData=I,this.postEventToFrame(b,g,I);break}}}else this.formInstance.checkoutFired=!1,this.formInstance.config.onCheckoutError&&this.formInstance.config.onCheckoutError(a.message)}handleFormSubmit(){var y;if(!this.formInstance.sessionId||!((y=this.formInstance.checkoutPaymentMethods)!=null&&y.length)||!this.config.onValidationError)return;const a=this.formInstance.checkoutPaymentMethods.find(g=>g.provider==="credit_card");if(!a)throw new Error("Card not available as a payment method in checkout");const f=At(G.enum.TOKENIZE,this.formInstance.sessionId,document.querySelector(this.formInstance.formTarget)??document.body,this.config.onValidationError,a,!1);if(!f)throw new Error("Error constructing tokenize data");for(const[g,b]of Object.entries(this.eventTargets))b&&this.postEventToFrame(b,g,f);this.tokenizedData=f}postEventToFrame(a,f,y){on(a,this.formId,f,y,this.config.baseUrl)}}async function Po(c){const f=await hn.connectToChild({iframe:c,debug:!0}).promise,y=await so(f);if(!uo(f,y))throw new Error("Got invalid CDE connection object");return f}class Io{constructor(){this.connections=new Map}addConnection(a,f){this.connections.set(a,f)}getConnection(){const a=this.connections.values().next().value;if(!a)throw new Error("Connection not found");return a}}async function jo(c,a,f,y,g,b){const I={apple_pay:{isLoading:!0,isAvailable:!1,startFlow:async()=>{}},google_pay:{isLoading:!0,isAvailable:!1,startFlow:async()=>{}}};for(const P of["apple_pay","google_pay"])try{const $=a.find(U=>U.provider===P&&U.processor_name==="stripe");if(!$)throw new Error(`${P} is not available as a checkout method`);const q=eo($.metadata),z=await Ao(q,P);I[P]={isLoading:!1,isAvailable:z,startFlow:U=>Mo(f,c.checkoutSecureToken,document.querySelector(c.formTarget),$,q,y,g,b,U)}}catch{I[P]={isLoading:!1,isAvailable:!1,startFlow:async()=>{}}}return I}async function Ao(c,a){const y=await tn(c,1e3,"usd"),g=await y.canMakePayment();if(y.abort(),!g)throw new Error(`Cannot make payment with ${a} for this session`);return g[a==="apple_pay"?"applePay":"googlePay"]}async function Mo(c,a,f,y,g,b,I,P,$){try{const q=nn(f,{});if(!Do(f,I,y))return;const U=(await yn(c)).mode==="setup",J=await Fo(U,$,q,c,a),Y=await tn(g,J.amountAtom,J.currency,U);await Y.canMakePayment(),Y.show();const Z=await Xn(Y);b(Z,y)}catch(q){P(Gr(q))}}function Do(c,a,f){return!!At(G.enum.START_PAYMENT_FLOW,"dummy",c,a??(()=>{}),f,!1)}async function Fo(c,a,f,y,g){var z;if(c)return((z=a==null?void 0:a.overridePaymentRequest)==null?void 0:z.amount)??{amountAtom:0,currency:"usd"};a!=null&&a.overridePaymentRequest;const b=te.safeParse(f[Be.PROMOTION_CODE]);if(!b.success)throw new Error(`Unknown promo code type: ${b.error.message}`);const I=await ko(y,{secure_token:g,promotion_code:b.data}),P=new Set(I.preview.invoices.map(U=>U.currency));if(P.size!==1)throw new Error(`Expected exactly one currency, got ${P.size}`);const $=P.values().next().value;return{amountAtom:I.preview.invoices.reduce((U,J)=>U+J.remaining_amount_atom,0),currency:$}}class $o{constructor(a){this.config={...a,baseUrl:a.baseUrl??"https://cde.getopenpay.com"},this.elements=null,this.formId=`opjs-form-${window.crypto.randomUUID()}`,this.referer=window.location.origin,this.formTarget=a.formTarget??"body",this.formProperties={height:"1px"},this.sessionId=null,this.checkoutPaymentMethods=[],this.checkoutFired=!1,this.stripePm=void 0,this.paymentRequests=this.initPaymentRequests(),this.connectionManager=new Io,this.eventHandler=new To(this);const f={version:"0.1.3"};window.ojs_version=f,window.addEventListener("message",this.eventHandler.handleMessage.bind(this.eventHandler))}getStripePm(){return this.stripePm}getConnectionManager(){return this.connectionManager}setFormHeight(a){this.formProperties.height=a,this.elements&&Object.values(this.elements).forEach(f=>{f.node.style.height=a})}initPaymentRequests(){return{apple_pay:{isLoading:!0,isAvailable:!1,startFlow:async()=>{}},google_pay:{isLoading:!0,isAvailable:!1,startFlow:async()=>{}}}}createElement(a,f={}){if(!this.config)throw new Error("OpenPay form not initialized");const y=document.createElement("iframe"),g=this.buildQueryString(f);y.name=`${a}-element`;const b=new URL(`/app/v1/${y.name}`,this.config.baseUrl);b.search=g.toString(),y.src=b.href,this.config._frameUrl=b,y.style.border="none",y.style.width="100%";const I={type:a,node:y,mount:P=>{var $;return($=document.querySelector(P))==null?void 0:$.appendChild(y)}};return this.elements?this.elements[a]=I:(this.elements={[a]:I},this.connectToElement(I)),I}buildQueryString(a){const f=new URLSearchParams;return f.append("referer",this.referer),f.append("formId",this.formId),a.styles&&f.append("styles",no(a.styles)),f.append("secureToken",this.config.checkoutSecureToken),f}connectToElement(a){Po(a.node).then(f=>{this.connectionManager.addConnection(a.type,f),this.initializePaymentRequests()}).catch(f=>{})}submit(){this.eventHandler.handleFormSubmit()}async onUserCompletePaymentRequestUI(a,f){if(!(!this.config.onValidationError||!this.sessionId||!this.checkoutPaymentMethods))for(const[y,g]of Object.entries(this.eventHandler.eventTargets??{})){const b={stripePmId:a.paymentMethod.id},I=At(G.enum.START_PAYMENT_FLOW,this.sessionId,document.querySelector(this.formTarget)??document.body,this.config.onValidationError,f,!1,b);if(I){this.stripePm=a,this.checkoutFired=!0,this.eventHandler.setTokenizedData(I),this.eventHandler.postEventToFrame(g,y,I);break}}}onPaymentRequestError(a){this.checkoutFired=!1,this.config.onCheckoutError&&this.config.onCheckoutError(a)}async initializePaymentRequests(){if(!this.config.checkoutSecureToken||!this.checkoutPaymentMethods||!this.formTarget)return;const a=this.connectionManager.getConnection();a&&(this.paymentRequests=await jo(this.config,this.checkoutPaymentMethods,a,this.onUserCompletePaymentRequestUI.bind(this),this.config.onValidationError,this.onPaymentRequestError.bind(this)),this.config.onPaymentRequestLoad&&this.config.onPaymentRequestLoad(this.paymentRequests))}destroy(){for(const a of Object.values(this.elements??{}))a.node.remove();window.removeEventListener("message",this.eventHandler.handleMessage.bind(this.eventHandler))}}ve.FieldName=Be,ve.OpenPayForm=$o,Object.defineProperty(ve,Symbol.toStringTag,{value:"Module"})});
1
+ (function(_,t){typeof exports=="object"&&typeof module<"u"?t(exports,require("zod"),require("uuid"),require("penpal"),require("chalk")):typeof define=="function"&&define.amd?define(["exports","zod","uuid","penpal","chalk"],t):(_=typeof globalThis<"u"?globalThis:_||self,t(_.OpenPay={},_.zod,_.uuid,_.penpal,_.chalk))})(this,function(_,t,je,W,I){"use strict";const Ie="https://cde.getopenpay.com",Ae=t.z.object({type:t.z.string(),loc:t.z.array(t.z.string()),msg:t.z.string(),url:t.z.string()}),Fe=t.z.array(Ae),Me=t.z.object({code:t.z.string(),message:t.z.string(),path:t.z.array(t.z.string())}),De=t.z.array(Me),Le={"failed to fetch":"Connection error: please double check if you are connected to the internet, then try again"},z=n=>{const e=n.toLowerCase().trim();return Le[e]??n},xe=n=>{try{return typeof JSON.parse(n)=="object"}catch{return!1}},Ne=n=>n.length===1?z(n[0].msg):`Please fix the following errors:
2
+ ${n.map(r=>`• ${z(r.msg)}`).join(`
3
+ `)}`,Ue=n=>`Encountered the following errors:
4
+ ${n.map(r=>`- ${r.path.join("/")}: ${r.message}`).join(`
5
+ `)}`,Q=n=>{if(n instanceof Error)if(xe(n.message)){const e=JSON.parse(n.message);return Fe.safeParse(e).success?Ne(e):De.safeParse(e).success?Ue(e):n.message}else return z(n.message);if(typeof n=="object")try{return JSON.stringify(n)}catch(e){return e+""}else return n+""},O=(n,e)=>(...r)=>{try{return e(...r)}catch{return}},d=t.z.string().trim().min(1,{message:"Cannot be blank"}),h=t.z.string().trim().optional(),A=n=>t.z.nullable(n.optional());var S=(n=>(n.FIRST_NAME="firstName",n.LAST_NAME="lastName",n.EMAIL="email",n.ZIP_CODE="zipCode",n.CITY="city",n.STATE="state",n.COUNTRY="country",n.ADDRESS="address",n.PHONE="phone",n.PROMOTION_CODE="promotionCode",n))(S||{});const X=t.z.nativeEnum(S);var ee=(n=>(n.CARD_NUMBER="cardNumber",n.CARD_EXPIRY="cardExpiry",n.CARD_CVC="cardCvc",n))(ee||{});const te=t.z.nativeEnum(ee),ne=t.z.union([X,te]);var re=(n=>(n.CARD="card",n.CARD_NUMBER="card-number",n.CARD_EXPIRY="card-expiry",n.CARD_CVC="card-cvc",n))(re||{});const $e=t.z.nativeEnum(re),F=t.z.object({provider:t.z.string(),processor_name:A(t.z.string()),metadata:A(t.z.record(t.z.string(),t.z.any()))}),qe=t.z.object({id:t.z.string()});t.z.object({cardNumber:h,expiry:h,cvc:h}),t.z.object({backgroundColor:h,color:h,fontFamily:h,fontSize:h,fontWeight:h,margin:h,padding:h,letterSpacing:h,lineHeight:h});const w=t.z.enum(["LAYOUT","LOADED","BLUR","FOCUS","CHANGE","TOKENIZE_STARTED","CHECKOUT_STARTED","PAYMENT_FLOW_STARTED","TOKENIZE_SUCCESS","CHECKOUT_SUCCESS","LOAD_ERROR","VALIDATION_ERROR","TOKENIZE_ERROR","CHECKOUT_ERROR","SETUP_PAYMENT_METHOD_SUCCESS","TOKENIZE","CHECKOUT","START_PAYMENT_FLOW"]),ze=w.extract(["TOKENIZE_STARTED","CHECKOUT_STARTED"]),Ve=t.z.object({type:ze}),He=w.extract(["BLUR","FOCUS","CHANGE"]),Be=t.z.object({type:He,elementType:te,errors:t.z.array(t.z.string()).optional()}),Ke=w.extract(["LOAD_ERROR","TOKENIZE_ERROR","CHECKOUT_ERROR"]),Ze=t.z.object({type:Ke,message:d,headers:t.z.record(t.z.string(),t.z.string()).optional()}),Ye=w.extract(["VALIDATION_ERROR"]),Ge=t.z.object({type:Ye,elementType:ne,errors:t.z.array(t.z.string())}),Je=t.z.object({type:t.z.literal(w.enum.LAYOUT),height:d}),We=t.z.object({type:t.z.literal(w.enum.LOADED),sessionId:d,totalAmountAtoms:t.z.number(),currency:h,checkoutPaymentMethods:t.z.array(F)}),Qe=t.z.object({type:t.z.literal(w.enum.PAYMENT_FLOW_STARTED),nextActionMetadata:t.z.record(t.z.string(),t.z.any()),paymentFlowMetadata:t.z.any().optional(),startPFMetadata:t.z.optional(t.z.record(t.z.string(),t.z.any()))}),Xe=t.z.object({type:t.z.literal(w.enum.SETUP_PAYMENT_METHOD_SUCCESS),paymentMethodId:t.z.string()}),R=t.z.object({firstName:d,lastName:d,email:d,zipCode:d,country:d,promotionCode:h}),et=t.z.object({email:d,zipCode:d,country:d,promotionCode:h}),tt=w.extract(["TOKENIZE","CHECKOUT","START_PAYMENT_FLOW"]),nt=t.z.object({type:tt,sessionId:d,checkoutPaymentMethod:F,paymentFlowMetadata:t.z.any().optional(),doNotUseLegacyCCFlow:t.z.boolean().optional(),existingCCPMId:h}).extend(R.shape),rt=t.z.object({type:t.z.literal(w.enum.TOKENIZE_SUCCESS),isReadyForCheckout:t.z.boolean()}),ot=t.z.object({type:t.z.literal(w.enum.CHECKOUT_SUCCESS),invoiceUrls:t.z.array(t.z.string()),subscriptionIds:t.z.array(t.z.string()),customerId:t.z.string()}),st=t.z.discriminatedUnion("type",[Ve,Be,Ze,Ge,Je,We,nt,rt,ot,Qe,Xe]),it=t.z.object({payload:st,nonce:d,formId:d,elementId:d});t.z.object({amountAtom:t.z.number(),currency:d}),t.z.object({secure_token:t.z.string(),promotion_code:t.z.string().optional()}),t.z.object({secure_token:t.z.string(),existing_cc_pm_id:A(t.z.string())});const at=t.z.object({payment_methods:t.z.array(qe)}),ct=t.z.object({elementType:t.z.string(),errors:t.z.array(t.z.string())});t.z.object({session_id:t.z.string()});const lt=t.z.object({success:t.z.literal(!1),error_type:t.z.literal("validation_error"),errors:t.z.array(ct)}),ut=t.z.discriminatedUnion("success",[t.z.object({success:t.z.literal(!0)}),lt]);t.z.object({session_id:t.z.string(),checkout_payment_method:F,non_cde_form_fields:R,do_not_use_legacy_cc_flow:t.z.boolean().optional(),existing_cc_pm_id:A(t.z.string())}),t.z.object({session_id:t.z.string(),checkout_payment_method:F,non_cde_form_fields:R});var M=(n=>(n.SUCCESS="success",n.FAILURE="failure",n.CANCELLED="cancelled",n))(M||{});const mt=t.z.object({status:t.z.enum(["success","failure","cancelled"])}),ft=t.z.object({type:t.z.string(),redirect_url:t.z.string(),initial_intent_id:t.z.string(),consent_id:t.z.string()}),pt=n=>{const e={};return Object.entries(n).forEach(([r,o])=>{try{const s=X.parse(r);Array.isArray(o)?e[s]=o:Array.isArray(o._errors)&&(e[s]=o._errors)}catch{return}}),e},dt=t.z.object({stripe_pk:t.z.string(),client_secret:t.z.string(),stripe_pm_id:t.z.string()}),ht=t.z.object({type:t.z.string(),client_secret:t.z.string(),stripe_pk:t.z.string()}),yt={usd:"usd",brl:"brl"},V=async n=>{for(let r=0;r<10;r++)oe()||await _t(500);if(!oe())throw new Error("Stripe JS not found.");return new Stripe(n)},gt=async(n,e,r,o,s)=>{const i=await V(n),a=yt[r.toLowerCase().trim()];return i.paymentRequest({country:"US",currency:a,total:{label:"Total",amount:e,pending:o},requestPayerName:!0,requestPayerEmail:!0,disableWallets:[]})},_t=n=>new Promise(e=>{setTimeout(e,n)}),oe=()=>"Stripe"in window,wt=async n=>new Promise((e,r)=>{try{n.on("paymentmethod",async o=>{e(o)}),n.on("cancel",()=>{r(new Error("Payment cancelled, please click Submit again to pay"))})}catch(o){r(o)}}),Et=async(n,e)=>{if(!n.stripe_pk||!n.client_secret)throw new Error(`Invalid next action metadata format: ${JSON.stringify(n)}`);const o=await(await V(n.stripe_pk)).confirmCardSetup(n.client_secret,{payment_method:e.paymentMethod.id});if(o.error)throw e.complete("fail"),new Error(`Payment failed: ${o.error.message??"unknown"}`);e.complete("success")},bt=async n=>{var s,i,a,c;const r=await(await V(n.stripe_pk)).confirmCardSetup(n.client_secret,{payment_method:n.stripe_pm_id}),o=(s=r.setupIntent)==null?void 0:s.status;if(o!=="succeeded")throw o==="canceled"?new Error("Payment cancelled, please click Submit again to pay"):new Error(`${((i=r.error)==null?void 0:i.message)??((c=(a=r.setupIntent)==null?void 0:a.last_setup_error)==null?void 0:c.message)??"Payment failed, please click submit again to pay."}`)},Ct=n=>JSON.stringify(n),St=(n,e)=>Array.from(n.querySelectorAll("[data-opid]")??[]).reduce((s,i)=>{const a=i.getAttribute("data-opid");return a?{...s,[a]:i.value}:s},{}),Pt=n=>{try{return it.parse(n)}catch(e){throw e}},vt=(n,e,r,o,s)=>{const i={payload:o,nonce:je.v4(),formId:e,elementId:r};n.postMessage(JSON.stringify(i),s)},kt=async n=>{if(typeof n!="object"||!n)return!1;try{const e={type:"ping"},r=await n.send(e);if(r!==!0)throw new Error(`Expected 'true' after ping, got ${JSON.stringify(r)}`);return!0}catch{return!1}},Ot=(n,e)=>!!n&&e,m=n=>t.z.nullable(n.optional());t.z.string().trim().min(1,{message:"Cannot be blank"});const Rt=t.z.object({cde_response_type:t.z.literal("error"),message:t.z.string(),headers:t.z.record(t.z.string(),t.z.string()).optional()});t.z.enum(["usd","brl"]);const se=t.z.object({name:t.z.string(),amount_atom_off:m(t.z.number()),percent_off:m(t.z.number()),currency:m(t.z.string()),duration:t.z.string(),duration_in_months:m(t.z.number())}),ie=t.z.object({amount_subtotal_atom:t.z.number().int(),amount_total_atom:t.z.number().int(),currency:t.z.string(),description:m(t.z.string()),price_id:t.z.string(),billing_interval:m(t.z.string()),billing_interval_count:m(t.z.number().int()),quantity:t.z.number().int()}),Tt=t.z.record(t.z.string(),t.z.any()),jt=t.z.object({name:t.z.string(),settings:m(Tt)}),D=t.z.object({provider:t.z.string(),processor_name:m(t.z.string()),metadata:m(t.z.record(t.z.string(),t.z.any()))}),It=t.z.object({quantity:t.z.number()}),At=t.z.object({id:m(t.z.string()),billing_interval:m(t.z.string()),billing_interval_count:m(t.z.number().int()),subscription_items:t.z.array(It),trial_start:m(t.z.string()),trial_end:m(t.z.string())}),ae=t.z.object({amount_atom:t.z.number()}),Ft=t.z.object({amount_atom:t.z.number(),amount_atom_considering_discount_applied:t.z.number(),currency:t.z.string(),discount_amount_atoms:t.z.array(ae),subscription_item_id:t.z.string()}),Mt=t.z.object({coupon:se}),Dt=t.z.object({currency:t.z.string(),discounts:t.z.array(Mt),hosted_invoice_url:m(t.z.string()),lines:t.z.array(Ft),remaining_amount_atom:t.z.number(),tax_amount_atom:t.z.number(),total_amount_atom:t.z.number(),total_discount_amount_atoms:t.z.array(ae)}),ce=t.z.object({created:t.z.array(At),invoices:t.z.array(Dt)}),le=t.z.object({preview:ce,preview_post_trial:m(ce),coupons:t.z.array(se)}),ue=t.z.object({status:t.z.literal("open"),token:t.z.string(),email:m(t.z.string()),line_items:t.z.array(ie),amount_subtotal_atom:t.z.number().int(),amount_total_atom:t.z.number().int(),brand:jt,subs_preview:m(le),methods_available:t.z.array(D)}),me=t.z.discriminatedUnion("mode",[t.z.object({mode:t.z.literal("setup"),currency:t.z.nullable(t.z.undefined())}).extend(ue.shape),t.z.object({mode:t.z.enum(["payment","subscription"]),currency:t.z.string()}).extend(ue.shape)]),Lt=t.z.object({status:t.z.literal("complete")}),xt=t.z.object({status:t.z.literal("expired")});t.z.union([me,Lt,xt]),t.z.object({logo:t.z.string(),icon:t.z.string(),primary_color:t.z.string(),secondary_color:t.z.string()});const fe=t.z.object({invoice_urls:t.z.array(t.z.string()),subscription_ids:t.z.array(t.z.string()),customer_id:t.z.string()});t.z.object({secure_token:t.z.string(),payment_input:t.z.any(),customer_email:t.z.string(),customer_zip_code:t.z.string(),customer_country:t.z.string(),line_items:t.z.array(ie),total_amount_atom:t.z.number().int(),cancel_at_end:t.z.boolean(),checkout_payment_method:D,promotion_code:t.z.string().optional(),do_not_use_legacy_cc_flow:t.z.boolean().optional()});const Nt=t.z.object({payment_method_id:t.z.string()});t.z.object({id:t.z.string(),return_url:t.z.string()});const Ut=t.z.object({type:t.z.string(),loc:t.z.array(t.z.string()),msg:t.z.string(),url:t.z.string()});t.z.array(Ut);const $t=t.z.object({required_user_actions:t.z.array(t.z.record(t.z.string(),t.z.any()))});t.z.object({fields:et,checkoutPaymentMethod:D}),t.z.object({session_id:t.z.string(),non_cde_form_fields:R,checkout_payment_method:D});const qt=t.z.object({required_user_actions:t.z.array(t.z.record(t.z.string(),t.z.any())),cc_pm_id:t.z.string()});t.z.record(t.z.any());const zt=n=>n.reduce((e,r)=>e+r,0);function Vt(n,e){var r=Object.setPrototypeOf;r?r(n,e):n.__proto__=e}function Ht(n,e){e===void 0&&(e=n.constructor);var r=Error.captureStackTrace;r&&r(n,e)}var Bt=function(){var n=function(r,o){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(s,i){s.__proto__=i}||function(s,i){for(var a in i)Object.prototype.hasOwnProperty.call(i,a)&&(s[a]=i[a])},n(r,o)};return function(e,r){if(typeof r!="function"&&r!==null)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");n(e,r);function o(){this.constructor=e}e.prototype=r===null?Object.create(r):(o.prototype=r.prototype,new o)}}(),Kt=function(n){Bt(e,n);function e(r,o){var s=this.constructor,i=n.call(this,r,o)||this;return Object.defineProperty(i,"name",{value:s.name,enumerable:!1,configurable:!0}),Vt(i,s.prototype),Ht(i),i}return e}(Error);class pe extends Kt{constructor(e){const r=`[cde-client] Error querying CDE: ${e.message}`;super(r),this.response=e}get originalErrorMessage(){return this.response.message}}const E=async(n,e,r)=>{const o=await n.send(e);if(Yt(o))throw new pe(o);if(!Zt(o,r)){const s=r.safeParse(o);throw s.success?new Error("Invalid state"):s.error}return o},Zt=(n,e)=>e.safeParse(n).success,Yt=n=>Rt.safeParse(n).success,Gt=async(n,e)=>await E(n,{type:"get_checkout_preview",payload:e},le),H=async n=>await E(n,{type:"get_prefill",payload:{}},me),Jt=async(n,e)=>await E(n,{type:"start_payment_flow_for_cc",payload:e},qt),Wt=async(n,e)=>await E(n,{type:"start_payment_flow_for_pr",payload:e},$t),de=async(n,e)=>await E(n,{type:"confirm_payment_flow",payload:e},at),Qt=async(n,e,r)=>{const o=await Gt(n,{secure_token:e,promotion_code:r}),s=new Set(o.preview.invoices.map(c=>c.currency));if(s.size!==1)throw new Error(`Expected exactly one currency, got ${s.size}`);const i=s.values().next().value??"usd",a=zt(o.preview.invoices.map(c=>c.remaining_amount_atom));return{currency:i,amountAtom:a}},Xt=async(n,e,r,o)=>{if(r)return{amountAtom:0,currency:"usd"};{o=o||void 0;const s=await Qt(n,e,o);return{amountAtom:s.amountAtom,currency:s.currency}}},en=async(n,e)=>{if(n.size===0)throw new Error("No CDE connections found");return await Promise.all(Array.from(n.values()).map(o=>E(o,{type:"tokenize_card",payload:e},ut)))},he=async(n,e)=>{try{return await E(n,{type:"checkout_card_elements",payload:e},fe)}catch(r){throw r}},tn=async(n,e)=>await E(n,{type:"setup_payment_method",payload:e},Nt),nn=async(n,e)=>await E(n,{type:"checkout",payload:e},fe),ye=1e3,rn=async(n,e)=>{const o=await W.connectToChild({iframe:n,debug:!0,timeout:ye,childOrigin:"*"}).promise;return(await E(o,{type:"ping-3ds-status"},mt)).status},on="@keyframes fadeIn{0%{opacity:0;transform:scale(.9)}to{opacity:1;transform:scale(1)}}.overlay{position:fixed;top:0;left:0;width:100%;height:100%;z-index:2147483648!important;display:flex;justify-content:center;align-items:center;background-color:#00000080}.container{max-width:500px;max-height:600px;width:100%;height:100%;background-color:#fff;position:relative;animation:fadeIn .3s ease-out}.frame{max-width:500px;max-height:600px;width:100%;height:100%;border:none}.cancel-button{position:absolute;background:transparent;border:none;font-size:1rem;color:#fff;cursor:pointer;top:-1.5rem;padding:0;right:0}",sn=n=>{const e=document.createElement("template");e.innerHTML=`
6
+ <style>
7
+ ${on}
8
+ </style>
9
+ <div class="overlay">
10
+ <div class="container">
11
+ <button class="cancel-button">Cancel</button>
12
+ <iframe src="${n}" class="frame" id="three-ds-iframe" title="3D Secure verification" allow="payment"></iframe>
13
+ </div>
14
+ </div>
15
+ `;const r=document.createElement("div"),o=r.attachShadow({mode:"open"});o.appendChild(e.content.cloneNode(!0));const s=o.querySelector("#three-ds-iframe"),i=o.querySelector(".cancel-button");return document.body.appendChild(r),{host:r,iframe:s,cancelButton:i}};function an(n,e,r){const o=async()=>{try{const i=await rn(n,r);i&&(clearInterval(s),e(i))}catch{}};o();const s=setInterval(o,ye);return s}function cn({elements:n,pollingInterval:e,resolve:r}){const o=()=>{clearInterval(e),n.host.remove(),r(M.CANCELLED)};return n.cancelButton.addEventListener("click",o),()=>{n.cancelButton.removeEventListener("click",o)}}async function ln({url:n,baseUrl:e}){const r=sn(n);return new Promise(o=>{const s=c=>{setTimeout(()=>{r.host.remove()},1e3),o(c),a==null||a()},i=an(r.iframe,s,new URL(e).origin),a=cn({elements:r,pollingInterval:i,resolve:o})})}const ge=n=>async e=>{try{e.flowCallbacks.onCheckoutStarted();const r=await n(e);if(r.mode==="setup")e.flowCallbacks.onSetupPaymentMethodSuccess(r.result.payment_method_id);else if(r.mode==="checkout")e.flowCallbacks.onCheckoutSuccess(r.result.invoice_urls,r.result.subscription_ids,r.result.customer_id);else throw new Error(`Unhandled mode: ${r}`)}catch(r){throw e.flowCallbacks.onCheckoutError(Q(r)),r}},un=n=>async e=>{try{return await n(e)}catch(r){const{err__:o}=v("init-error-catcher");return o(r),{isAvailable:!1,reason:Q(r)}}},v=n=>{const e=(...o)=>{window.console.log(`${I.green.bold("ojs/")}${I.bold.gray(`${n}`)} `,...o)},r=(...o)=>{window.console.error(`${I.red.bold("ojs/")}${I.bold.gray(`${n}`)} `,...o)};return{log:e,err:r,log__:e,err__:r}},{log__:mn,err__:_e}=v("common-cc"),we=(n,e)=>{const r=R.safeParse(n);if(!r.success){const o=r.error.format(),s=pt(o);for(const[i,a]of Object.entries(s))e(i,a,i);throw _e("Got validation errors in non-CDE form fields",s),new Error("Got validation errors in non-CDE form fields")}return r.data},fn=(n,e)=>{for(const r of n)if(r.success===!1)throw r.errors.forEach(o=>{const s=ne.safeParse(o.elementType);if(!s.success)_e(`Unknown field name in onValidationError: ${o.elementType}`);else{const i=s.data;e(i,o.errors)}}),mn(`Error tokenizing card: got validation errors: ${JSON.stringify(r.errors)}`),new Error("Got validation errors while tokenizing card")},{err__:B}=v("commmon"),Ee=n=>{if(n.payment_methods.length!==1)throw new Error(`Expected exactly one payment method, got ${n.payment_methods.length}`);return{payment_method_id:n.payment_methods[0].id}},pn=(n,e)=>{const r=n.find(o=>e.safeParse(o).success);if(!r)throw B(`No CPMs found for model ${e}`),B(n),B("zodModel"),new Error(`No CPMs found for model ${e}`);return e.parse(r)},{log__:f,err__:be}=v("common-cc"),{log__:Ce}=v("stripe-cc"),dn=ge(async({context:n,checkoutPaymentMethod:e,nonCdeFormInputs:r,flowCallbacks:o})=>{var l;f("├ Running common CC flow...",{checkoutPaymentMethod:e});const s=Array.from(n.cdeConnections.values())[0],i=await H(s);f(`├ Validating non-CDE form fields [Mode: ${i.mode}]`);const a=we(r,o.onValidationError);f(`├ Tokenizing card info in CDE [Session: ${n.elementsSessionId}]`);const c=await en(n.cdeConnections,{session_id:n.elementsSessionId});fn(c,o.onValidationError);const u={session_id:n.elementsSessionId,checkout_payment_method:e,non_cde_form_fields:a};try{if(i.mode==="setup"){f(`├ Setting up payment method in CDE [Token: ${i.token}]`);const p=await tn(s,u);return f(`╰ Setup completed successfully [PM ID: ${p.payment_method_id}]`),{mode:"setup",result:p}}else{f(`├ Initial checkout flow. Checking out card info in CDE [Session: ${n.elementsSessionId}]`);const p=await he(s,u);return f("╰ Checkout completed successfully."),{mode:"checkout",result:p}}}catch(p){if(p instanceof pe&&p.originalErrorMessage==="3DS_REQUIRED"){f("├ Card requires 3DS, starting non-legacy payment flow");const P=((l=p.response.headers)==null?void 0:l["op-should-use-new-flow"])==="true",g=await Jt(s,u);if(f(`├ op-should-use-new-flow: ${P}`),f("├ Payment flow result:",g),P?await gn(g,n.baseUrl):await _n(g),i.mode==="setup"){f(`├ Confirming payment flow [cc_pm_id: ${g.cc_pm_id}]`);const b=await de(s,{secure_token:i.token,existing_cc_pm_id:g.cc_pm_id});f("├ Confirm payment flow result received Result:",b);const C=Ee(b);return f(`╰ Setup completed successfully [PM ID: ${C.payment_method_id}]`),{mode:"setup",result:C}}else{f(`├ Checking out after 3DS flow [Flow: ${P?"new":"legacy"}]`);const b=await he(s,{...u,existing_cc_pm_id:g.cc_pm_id,do_not_use_legacy_cc_flow:!P});return f("╰ Checkout completed successfully."),{mode:"checkout",result:b}}}throw be("╰ Error checking out card info in CDE"),be(p),p}}),hn=n=>{const e=n.required_user_actions.find(r=>r.type==="stripe_3ds");if(!e)throw new Error("No stripe 3DS action found");return dt.parse(e)},yn=n=>{const e=n.required_user_actions.find(r=>r.type==="airwallex_payment_consent");if(!e)throw new Error("No common 3DS action found");return ft.parse(e)},gn=async(n,e)=>{const r=yn(n);f(`├ Using common 3DS flow [URL: ${r.redirect_url}]`);const o=await ln({url:r.redirect_url,baseUrl:e});if(f(`╰ 3DS verification completed [Status: ${o}]`),o===M.CANCELLED)throw new Error("3DS verification cancelled");if(o===M.FAILURE)throw new Error("3DS verification failed")},_n=async n=>{const e=hn(n);Ce(`├ Using stripe 3DS flow [Client Secret: ${e.client_secret.substring(0,8)}...]`),await bt(e),Ce("╰ Stripe 3DS flow completed successfully")},{log__:y,err__:wn}=v("stripe-pr"),En=t.z.object({provider:t.z.union([t.z.literal("apple_pay"),t.z.literal("google_pay")]),processor_name:t.z.literal("stripe"),metadata:t.z.object({stripe_pk:t.z.string()})}),bn=un(async({context:n})=>{y("Checking if there are any CPMs for Stripe PR...");const e=pn(n.checkoutPaymentMethods,En);y("Initializing Stripe PR flow...");const r=Array.from(n.cdeConnections.values())[0],o=await H(r),s=o.mode==="setup";y("Getting initial preview amount");const i=await Xt(r,o.token,s,void 0),a=await gt(e.metadata.stripe_pk,i.amountAtom,i.currency,s);y("Checking if can make payment");const c=await a.canMakePayment();return c===null?(wn("canMakePayment returned null"),{isAvailable:!1,reason:"canMakePayment returned null"}):(y("Stripe PR flow initialized successfully. Can make payment",c),{isAvailable:!0,pr:a,availableProviders:{applePay:c.applePay,googlePay:c.googlePay}})}),Cn=ge(async({context:n,checkoutPaymentMethod:e,nonCdeFormInputs:r,flowCallbacks:o,customParams:s,initResult:i})=>{if(y("Running Stripe PR flow..."),s.provider!==e.provider)throw new Error(`Provider mismatch. Expected ${s.provider}, got ${e.provider}`);const a=Array.from(n.cdeConnections.values())[0],c=i.pr;y("Validating non-CDE form fields");const u=Sn(r),l=we(u,o.onValidationError);if(s!=null&&s.overridePaymentRequest){const C=s.overridePaymentRequest;y("Overriding PR amount with",C),Pn(c,C.amount,C.pending)}y("Showing PR dialog..."),c.show();const p=await wt(c);y("PR dialog finished. Starting payment flow...");const P=await Wt(a,{fields:l,checkoutPaymentMethod:e}),g=vn(P);y("Confirming PR with Stripe..."),await Et(g,p);const b=await H(a);if(b.mode==="setup"){y("Confirming payment flow for setup...");const C=await de(a,{secure_token:b.token});return{mode:"setup",result:Ee(C)}}else{y("Performing checkout...");const C={secure_token:b.token,payment_input:{provider_type:e.provider},customer_email:l[S.EMAIL],customer_zip_code:l[S.ZIP_CODE],customer_country:l[S.COUNTRY],promotion_code:l[S.PROMOTION_CODE],line_items:b.line_items,total_amount_atom:b.amount_total_atom,cancel_at_end:!1,checkout_payment_method:e};return{mode:"checkout",result:await nn(a,C)}}}),Sn=n=>{const e={...n};return e[S.ZIP_CODE]||(y("Overriding empty zip code (only for google pay and apple pay)"),e[S.ZIP_CODE]="00000"),e},Pn=(n,e,r)=>{n.update({total:{amount:e.amountAtom,label:"Total",pending:r},currency:e.currency})},vn=n=>{if(n.required_user_actions.length!==1)throw new Error(`Error occurred.
16
+ Details: got ${n.required_user_actions.length} required user actions`);return ht.parse(n.required_user_actions[0])},Se=(n,e,r)=>{const o=n.filter(s=>s.provider===e);if(o.length===0)throw new Error(`No CPMs found with provider '${e}' and processor '${r}'`);if(o.length!==1)throw new Error(`More than one CPM found with provider '${e}' and processor '${r}'`);return o[0]},L={commonCC:{run:dn},stripePR:{init:bn,run:Cn}};function kn(n){return n&&n.__esModule&&Object.prototype.hasOwnProperty.call(n,"default")?n.default:n}var x={};Object.defineProperty(x,"__esModule",{value:!0}),x.Observable=void 0;const Pe=n=>!!Symbol[n],K=n=>Pe(n)?Symbol[n]:"@@"+n,On=K("iterator"),Z=K("observable"),ve=K("species");function N(n,e){let r=n[e];if(r!=null){if(typeof r!="function")throw new TypeError(r+" is not a function");return r}}function T(n){let e=n.constructor;return e!==void 0&&(e=e[ve],e===null&&(e=void 0)),e!==void 0?e:$}function Rn(n){return n instanceof $}function k(n){k.log?k.log(n):setTimeout(()=>{throw n})}function U(n){Promise.resolve().then(()=>{try{n()}catch(e){k(e)}})}function ke(n){let e=n._cleanup;if(e!==void 0&&(n._cleanup=void 0,!!e))try{if(typeof e=="function")e();else{let r=N(e,"unsubscribe");r&&r.call(e)}}catch(r){k(r)}}function Y(n){n._observer=void 0,n._queue=void 0,n._state="closed"}function Tn(n){let e=n._queue;if(e){n._queue=void 0,n._state="ready";for(let r=0;r<e.length&&(Oe(n,e[r].type,e[r].value),n._state!=="closed");++r);}}function Oe(n,e,r){n._state="running";let o=n._observer;try{let s=N(o,e);switch(e){case"next":s&&s.call(o,r);break;case"error":if(Y(n),s)s.call(o,r);else throw r;break;case"complete":Y(n),s&&s.call(o);break}}catch(s){k(s)}n._state==="closed"?ke(n):n._state==="running"&&(n._state="ready")}function G(n,e,r){if(n._state!=="closed"){if(n._state==="buffering"){n._queue.push({type:e,value:r});return}if(n._state!=="ready"){n._state="buffering",n._queue=[{type:e,value:r}],U(()=>Tn(n));return}Oe(n,e,r)}}class jn{constructor(e,r){this._cleanup=void 0,this._observer=e,this._queue=void 0,this._state="initializing";let o=this,s={get closed(){return o._state==="closed"},next(i){G(o,"next",i)},error(i){G(o,"error",i)},complete(){G(o,"complete")}};try{this._cleanup=r.call(void 0,s)}catch(i){s.error(i)}this._state==="initializing"&&(this._state="ready")}get closed(){return this._state==="closed"}unsubscribe(){this._state!=="closed"&&(Y(this),ke(this))}}let $=class q{constructor(e){if(!(this instanceof q))throw new TypeError("Observable cannot be called as a function");if(typeof e!="function")throw new TypeError("Observable initializer must be a function");this._subscriber=e}subscribe(e){return(typeof e!="object"||e===null)&&(e={next:e,error:arguments[1],complete:arguments[2]}),new jn(e,this._subscriber)}forEach(e){return new Promise((r,o)=>{if(typeof e!="function"){o(new TypeError(e+" is not a function"));return}function s(){i.unsubscribe(),r()}let i=this.subscribe({next(a){try{e(a,s)}catch(c){o(c),i.unsubscribe()}},error:o,complete:r})})}map(e){if(typeof e!="function")throw new TypeError(e+" is not a function");let r=T(this);return new r(o=>this.subscribe({next(s){try{s=e(s)}catch(i){return o.error(i)}o.next(s)},error(s){o.error(s)},complete(){o.complete()}}))}filter(e){if(typeof e!="function")throw new TypeError(e+" is not a function");let r=T(this);return new r(o=>this.subscribe({next(s){try{if(!e(s))return}catch(i){return o.error(i)}o.next(s)},error(s){o.error(s)},complete(){o.complete()}}))}reduce(e){if(typeof e!="function")throw new TypeError(e+" is not a function");let r=T(this),o=arguments.length>1,s=!1,a=arguments[1];return new r(c=>this.subscribe({next(u){let l=!s;if(s=!0,!l||o)try{a=e(a,u)}catch(p){return c.error(p)}else a=u},error(u){c.error(u)},complete(){if(!s&&!o)return c.error(new TypeError("Cannot reduce an empty sequence"));c.next(a),c.complete()}}))}async all(){let e=[];return await this.forEach(r=>e.push(r)),e}concat(...e){let r=T(this);return new r(o=>{let s,i=0;function a(c){s=c.subscribe({next(u){o.next(u)},error(u){o.error(u)},complete(){i===e.length?(s=void 0,o.complete()):a(r.from(e[i++]))}})}return a(this),()=>{s&&(s.unsubscribe(),s=void 0)}})}flatMap(e){if(typeof e!="function")throw new TypeError(e+" is not a function");let r=T(this);return new r(o=>{let s=[],i=this.subscribe({next(c){if(e)try{c=e(c)}catch(l){return o.error(l)}let u=r.from(c).subscribe({next(l){o.next(l)},error(l){o.error(l)},complete(){let l=s.indexOf(u);l>=0&&s.splice(l,1),a()}});s.push(u)},error(c){o.error(c)},complete(){a()}});function a(){i.closed&&s.length===0&&o.complete()}return()=>{s.forEach(c=>c.unsubscribe()),i.unsubscribe()}})}[Z](){return this}static from(e){let r=typeof this=="function"?this:q;if(e==null)throw new TypeError(e+" is not an object");let o=N(e,Z);if(o){let s=o.call(e);if(Object(s)!==s)throw new TypeError(s+" is not an object");return Rn(s)&&s.constructor===r?s:new r(i=>s.subscribe(i))}if(Pe("iterator")&&(o=N(e,On),o))return new r(s=>{U(()=>{if(!s.closed){for(let i of o.call(e))if(s.next(i),s.closed)return;s.complete()}})});if(Array.isArray(e))return new r(s=>{U(()=>{if(!s.closed){for(let i=0;i<e.length;++i)if(s.next(e[i]),s.closed)return;s.complete()}})});throw new TypeError(e+" is not observable")}static of(...e){let r=typeof this=="function"?this:q;return new r(o=>{U(()=>{if(!o.closed){for(let s=0;s<e.length;++s)if(o.next(e[s]),o.closed)return;o.complete()}})})}static get[ve](){return this}};x.Observable=$,Object.defineProperty($,Symbol("extensions"),{value:{symbol:Z,hostReportError:k},configurable:!0});var In=x.Observable;const An=kn(In),{log__:Fn,err__:Mn}=v("init-flows"),Dn=n=>({stripePR:Ln("stripePR",L.stripePR.init({context:n}))}),Ln=(n,e)=>{const r=new An(o=>{o.next({status:"loading"}),e.then(s=>{o.next({status:"loaded",result:s})}).catch(s=>{o.next({status:"error",message:s.message})})});return r.subscribe({next:o=>{Fn(`${n} flow result`,o)},error:o=>{throw Mn(`${n} flow initialization error:
17
+ ${JSON.stringify(o)}`),o}}),r},Re={isLoading:!0,isAvailable:!1,startFlow:async()=>{}},Te={isLoading:!1,isAvailable:!1,startFlow:async()=>{}};class xn{constructor(e){this.formInstance=e,this.config=e.config,this.formId=e.formId,this.eventTargets={},this.nonces=new Set}handleMessage(e){var c;if(!e.source)throw new Error("No source found");if(e.origin!==((c=this.formInstance.config._frameUrl)==null?void 0:c.origin)||typeof e.data=="object"&&e.data.penpal)return;const r=Pt(JSON.parse(e.data));if(!this.validateEvent(r))return;const{elementId:s,payload:i}=r;switch(i.type){case"LAYOUT":this.handleLayoutEvent(i);break;case"FOCUS":this.handleFocusEvent(s,i.elementType);break;case"BLUR":this.handleBlurEvent(s,i.elementType);break;case"CHANGE":this.handleChangeEvent(s,i.elementType,i.errors);break;case"LOADED":this.handleLoadedEvent(e.source,s,i);break;case"LOAD_ERROR":this.handleLoadErrorEvent(i);break;case"VALIDATION_ERROR":this.handleValidationErrorEvent(i,s);break}}validateEvent(e){return e.formId!==this.formInstance.formId||!e.elementId||this.nonces.has(e.nonce)?!1:(this.nonces.add(e.nonce),!0)}handleLayoutEvent(e){const r=e.height?`${e.height}px`:"100%";this.formInstance.setFormHeight(r)}handleFocusEvent(e,r){this.config.onFocus&&this.config.onFocus(e,r)}handleBlurEvent(e,r){this.config.onBlur&&this.config.onBlur(e,r)}handleChangeEvent(e,r,o){this.config.onChange&&this.config.onChange(e,r,o)}async handleLoadedEvent(e,r,o){this.eventTargets[r]=e,this.formInstance.onCdeLoaded(o),this.config.onLoad&&this.config.onLoad(o.totalAmountAtoms,o.currency)}handleLoadErrorEvent(e){this.formInstance.config.onLoadError&&this.formInstance.config.onLoadError(e.message)}handleValidationErrorEvent(e,r){this.formInstance.config.onValidationError&&this.formInstance.config.onValidationError(e.elementType,e.errors,r)}postEventToFrame(e,r,o){vt(e,this.formId,r,o,this.config.baseUrl)}}async function Nn(n,e){const o=await W.connectToChild({iframe:n,debug:!0,childOrigin:e}).promise,s=await kt(o);if(!Ot(o,s))throw new Error("Got invalid CDE connection object");return o}class Un{constructor(){this.connections=new Map}addConnection(e,r){this.connections.set(e,r)}getConnection(){const e=this.connections.values().next().value;if(!e)throw new Error("Connection not found");return e}getAllConnections(){return this.connections}}const j=class j{constructor(e){this.tryInitOjsFlows=()=>{this.ojsFlowsInitialization===null&&this.cdeLoadedPayload&&this.connectionManager.getAllConnections().size!==0&&(this.ojsFlowsInitialization=Dn(this.createOjsFlowContext()),this.ojsFlowsInitialization.stripePR.subscribe(r=>this.onStripePRStatusChange(r)))},this.onCdeLoaded=r=>{this.cdeLoadedPayload||(this.cdeLoadedPayload=r,this.tryInitOjsFlows())},this.onStripePRStatusChange=r=>{var o,s,i,a,c,u;if(r.status==="loading")(s=(o=this.config).onPaymentRequestLoad)==null||s.call(o,{apple_pay:Re,google_pay:Re});else if(r.status==="error")(a=(i=this.config).onPaymentRequestLoad)==null||a.call(i,{apple_pay:Te,google_pay:Te});else if(r.status==="loaded"){const l=r.result,p=l.isAvailable&&l.availableProviders.applePay,P=l.isAvailable&&l.availableProviders.googlePay;(u=(c=this.config).onPaymentRequestLoad)==null||u.call(c,{apple_pay:{isLoading:!1,isAvailable:p,startFlow:async g=>p?this.submitPaymentRequest("apple_pay",l,g):void 0},google_pay:{isLoading:!1,isAvailable:P,startFlow:async g=>P?this.submitPaymentRequest("google_pay",l,g):void 0}})}},this.submitPaymentRequest=(r,o,s)=>{const i=this.createOjsFlowContext();return L.stripePR.run({context:i,checkoutPaymentMethod:Se(i.checkoutPaymentMethods,r),nonCdeFormInputs:this.getNonCdeFormInputs(),flowCallbacks:this.createOjsFlowCallbacks(),customParams:{provider:r,overridePaymentRequest:s==null?void 0:s.overridePaymentRequest},initResult:o})},j.assignAsSingleton(this),this.config={...e,baseUrl:e.baseUrl??"https://cde.getopenpay.com"},this.elements=null,this.formId=`opjs-form-${window.crypto.randomUUID()}`,this.referer=window.location.origin,this.formTarget=e.formTarget??"body",this.formProperties={height:"1px"},this.cdeLoadedPayload=null,this.ojsFlowsInitialization=null,this.checkoutFired=!1,this.connectionManager=new Un,this.eventHandler=new xn(this),this.ojsVersion="0.1.6",window.addEventListener("message",this.eventHandler.handleMessage.bind(this.eventHandler))}static assignAsSingleton(e){if(j.getInstance())throw new Error("OpenPay instance already exists. Only one instance is allowed.");window.ojs=e}static getInstance(){return window.ojs??null}getConnectionManager(){return this.connectionManager}setFormHeight(e){this.formProperties.height=e,this.elements&&Object.values(this.elements).forEach(r=>{r.node.style.height=e})}createElement(e,r={}){if(!this.config)throw new Error("OpenPay form not initialized");const o=$e.parse(e),s=document.createElement("iframe"),i=this.buildQueryString(r);s.name=`${o}-element`;const a=new URL(`/app/v1/${s.name}`,this.config.baseUrl);a.search=i.toString(),s.src=a.href,this.config._frameUrl=a,s.style.border="none",s.style.width="100%";const c={type:o,node:s,mount:u=>{var l;return(l=document.querySelector(u))==null?void 0:l.appendChild(s)}};return this.connectToElement(c),this.elements?this.elements[o]=c:this.elements={[o]:c},c}buildQueryString(e){const r=new URLSearchParams;return r.append("referer",this.referer),r.append("formId",this.formId),e.styles&&r.append("styles",Ct(e.styles)),r.append("secureToken",this.config.checkoutSecureToken),r}connectToElement(e){Nn(e.node).then(r=>{this.connectionManager.addConnection(e.type,r),this.tryInitOjsFlows()}).catch(r=>{})}getFormDiv(){return document.querySelector(this.formTarget)??document.body}createOjsFlowContext(){const e=this.connectionManager.getAllConnections();if(!this.cdeLoadedPayload)throw new Error("Requested context while CDE not yet loaded");if(e.size===0)throw new Error("No CDE connections found");return{baseUrl:new URL(this.config.baseUrl??Ie).origin,formDiv:this.getFormDiv(),elementsSessionId:this.cdeLoadedPayload.sessionId,checkoutPaymentMethods:this.cdeLoadedPayload.checkoutPaymentMethods,cdeConnections:e}}getNonCdeFormInputs(){return St(this.getFormDiv())}createOjsFlowCallbacks(){const e=()=>{};return{onCheckoutError:O("onCheckoutError",this.config.onCheckoutError??e),onCheckoutStarted:O("onCheckoutStarted",this.config.onCheckoutStarted??e),onCheckoutSuccess:O("onCheckoutSuccess",this.config.onCheckoutSuccess??e),onSetupPaymentMethodSuccess:O("onSetupPaymentMethodSuccess",this.config.onSetupPaymentMethodSuccess??e),onValidationError:O("onValidationError",this.config.onValidationError??e)}}submit(){const e=this.createOjsFlowContext();L.commonCC.run({context:e,checkoutPaymentMethod:Se(e.checkoutPaymentMethods,"credit_card"),nonCdeFormInputs:this.getNonCdeFormInputs(),flowCallbacks:this.createOjsFlowCallbacks(),customParams:void 0,initResult:void 0})}onPaymentRequestError(e){this.checkoutFired=!1,this.config.onCheckoutError&&this.config.onCheckoutError(e)}destroy(){for(const e of Object.values(this.elements??{}))e.node.remove();window.removeEventListener("message",this.eventHandler.handleMessage.bind(this.eventHandler))}};j.ojsFlows=L;let J=j;_.FieldName=S,_.OpenPayForm=J,Object.defineProperty(_,Symbol.toStringTag,{value:"Module"})});
18
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXgudW1kLmpzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBmYWN0b3J5KGV4cG9ydHMsIHJlcXVpcmUoJ3pvZCcpLCByZXF1aXJlKCd1dWlkJyksIHJlcXVpcmUoJ3BlbnBhbCcpLCByZXF1aXJlKCdjaGFsaycpKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJ2V4cG9ydHMnLCAnem9kJywgJ3V1aWQnLCAncGVucGFsJywgJ2NoYWxrJ10sIGZhY3RvcnkpIDpcbiAgKGdsb2JhbCA9IHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbFRoaXMgOiBnbG9iYWwgfHwgc2VsZiwgZmFjdG9yeShnbG9iYWwuT3BlblBheSA9IHt9LCBnbG9iYWwuem9kLCBnbG9iYWwudXVpZCwgZ2xvYmFsLnBlbnBhbCwgZ2xvYmFsLmNoYWxrKSk7XG59KSh0aGlzLCAoZnVuY3Rpb24gKGV4cG9ydHMsIHpvZCwgdXVpZCwgcGVucGFsLCBjaGFsaykgeyAndXNlIHN0cmljdCc7XG5cbiAgY29uc3QgRlJBTUVfQkFTRV9VUkwgPSBcImh0dHBzOi8vY2RlLmdldG9wZW5wYXkuY29tXCI7XG5cbiAgY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IkMSA9IHpvZC56Lm9iamVjdCh7XG4gICAgdHlwZTogem9kLnouc3RyaW5nKCksXG4gICAgbG9jOiB6b2Quei5hcnJheSh6b2Quei5zdHJpbmcoKSksXG4gICAgbXNnOiB6b2Quei5zdHJpbmcoKSxcbiAgICB1cmw6IHpvZC56LnN0cmluZygpXG4gIH0pO1xuICBjb25zdCBQeWRhbnRpY1ZhbGlkYXRpb25FcnJvclJlc3BvbnNlID0gem9kLnouYXJyYXkoUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IkMSk7XG4gIGNvbnN0IFpvZEZpZWxkRXJyb3IgPSB6b2Quei5vYmplY3Qoe1xuICAgIGNvZGU6IHpvZC56LnN0cmluZygpLFxuICAgIG1lc3NhZ2U6IHpvZC56LnN0cmluZygpLFxuICAgIHBhdGg6IHpvZC56LmFycmF5KHpvZC56LnN0cmluZygpKVxuICB9KTtcbiAgY29uc3QgWm9kRmllbGRFcnJvcnMgPSB6b2Quei5hcnJheShab2RGaWVsZEVycm9yKTtcbiAgY29uc3QgTUFQX1RPX0hVTUFOX0ZSSUVORExZX0xPV0VSQ0FTRSA9IHtcbiAgICBcImZhaWxlZCB0byBmZXRjaFwiOiBgQ29ubmVjdGlvbiBlcnJvcjogcGxlYXNlIGRvdWJsZSBjaGVjayBpZiB5b3UgYXJlIGNvbm5lY3RlZCB0byB0aGUgaW50ZXJuZXQsIHRoZW4gdHJ5IGFnYWluYFxuICB9O1xuICBjb25zdCBnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZSA9IChvZ0Vycm9yTWVzc2FnZSkgPT4ge1xuICAgIGNvbnN0IGtleSA9IG9nRXJyb3JNZXNzYWdlLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgIHJldHVybiBNQVBfVE9fSFVNQU5fRlJJRU5ETFlfTE9XRVJDQVNFW2tleV0gPz8gb2dFcnJvck1lc3NhZ2U7XG4gIH07XG4gIGNvbnN0IGlzU3RyaW5naWZpZWRKc29uT2JqZWN0ID0gKHN0cikgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHN0cik7XG4gICAgICByZXR1cm4gdHlwZW9mIHBhcnNlZCA9PT0gXCJvYmplY3RcIjtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9O1xuICBjb25zdCBjcmVhdGVNZXNzYWdlRnJvbVB5ZGFudGljVmFsaWRhdGlvbkVycm9yID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgaWYgKHJlc3BvbnNlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIGdldEh1bWFuRnJpZW5kbHlNZXNzYWdlKHJlc3BvbnNlWzBdLm1zZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGJ1bGxldGVkID0gcmVzcG9uc2UubWFwKChlcnIpID0+IGDigKIgJHtnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShlcnIubXNnKX1gKS5qb2luKFwiXFxuXCIpO1xuICAgICAgcmV0dXJuIGAke2BQbGVhc2UgZml4IHRoZSBmb2xsb3dpbmcgZXJyb3JzOmB9XG4ke2J1bGxldGVkfWA7XG4gICAgfVxuICB9O1xuICBjb25zdCBjcmVhdGVNZXNzYWdlRnJvbVpvZEZpZWxkRXJyb3JzID0gKGVycm9ycykgPT4ge1xuICAgIGNvbnN0IGxpc3RPZkVycm9ycyA9IGVycm9ycy5tYXAoKGVycikgPT4gYC0gJHtlcnIucGF0aC5qb2luKFwiL1wiKX06ICR7ZXJyLm1lc3NhZ2V9YCkuam9pbihcIlxcblwiKTtcbiAgICByZXR1cm4gYEVuY291bnRlcmVkIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuJHtsaXN0T2ZFcnJvcnN9YDtcbiAgfTtcbiAgY29uc3QgZ2V0RXJyb3JNZXNzYWdlID0gKGUpID0+IHtcbiAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICBpZiAoaXNTdHJpbmdpZmllZEpzb25PYmplY3QoZS5tZXNzYWdlKSkge1xuICAgICAgICBjb25zdCBvYmogPSBKU09OLnBhcnNlKGUubWVzc2FnZSk7XG4gICAgICAgIGlmIChQeWRhbnRpY1ZhbGlkYXRpb25FcnJvclJlc3BvbnNlLnNhZmVQYXJzZShvYmopLnN1Y2Nlc3MpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlTWVzc2FnZUZyb21QeWRhbnRpY1ZhbGlkYXRpb25FcnJvcihvYmopO1xuICAgICAgICB9IGVsc2UgaWYgKFpvZEZpZWxkRXJyb3JzLnNhZmVQYXJzZShvYmopLnN1Y2Nlc3MpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlTWVzc2FnZUZyb21ab2RGaWVsZEVycm9ycyhvYmopO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBlLm1lc3NhZ2U7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShlLm1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodHlwZW9mIGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShlKTtcbiAgICAgIH0gY2F0Y2ggKGUyKSB7XG4gICAgICAgIHJldHVybiBlMiArIFwiXCI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBlICsgXCJcIjtcbiAgICB9XG4gIH07XG4gIGNvbnN0IG1ha2VDYWxsYmFja1NhZmUgPSAoY2FsbGJhY2tOYW1lLCBmbikgPT4ge1xuICAgIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGZuKC4uLmFyZ3MpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICAgIH1cbiAgICB9O1xuICB9O1xuXG4gIGNvbnN0IFJlcXVpcmVkU3RyaW5nID0gem9kLnouc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IGBDYW5ub3QgYmUgYmxhbmtgIH0pO1xuICBjb25zdCBPcHRpb25hbFN0cmluZyA9IHpvZC56LnN0cmluZygpLnRyaW0oKS5vcHRpb25hbCgpO1xuICBjb25zdCBudWxsT3JVbmRlZk9yJDEgPSAoelR5cGUpID0+IHpvZC56Lm51bGxhYmxlKHpUeXBlLm9wdGlvbmFsKCkpO1xuICB2YXIgRmllbGROYW1lID0gLyogQF9fUFVSRV9fICovICgoRmllbGROYW1lMikgPT4ge1xuICAgIEZpZWxkTmFtZTJbXCJGSVJTVF9OQU1FXCJdID0gXCJmaXJzdE5hbWVcIjtcbiAgICBGaWVsZE5hbWUyW1wiTEFTVF9OQU1FXCJdID0gXCJsYXN0TmFtZVwiO1xuICAgIEZpZWxkTmFtZTJbXCJFTUFJTFwiXSA9IFwiZW1haWxcIjtcbiAgICBGaWVsZE5hbWUyW1wiWklQX0NPREVcIl0gPSBcInppcENvZGVcIjtcbiAgICBGaWVsZE5hbWUyW1wiQ0lUWVwiXSA9IFwiY2l0eVwiO1xuICAgIEZpZWxkTmFtZTJbXCJTVEFURVwiXSA9IFwic3RhdGVcIjtcbiAgICBGaWVsZE5hbWUyW1wiQ09VTlRSWVwiXSA9IFwiY291bnRyeVwiO1xuICAgIEZpZWxkTmFtZTJbXCJBRERSRVNTXCJdID0gXCJhZGRyZXNzXCI7XG4gICAgRmllbGROYW1lMltcIlBIT05FXCJdID0gXCJwaG9uZVwiO1xuICAgIEZpZWxkTmFtZTJbXCJQUk9NT1RJT05fQ09ERVwiXSA9IFwicHJvbW90aW9uQ29kZVwiO1xuICAgIHJldHVybiBGaWVsZE5hbWUyO1xuICB9KShGaWVsZE5hbWUgfHwge30pO1xuICBjb25zdCBGaWVsZE5hbWVFbnVtID0gem9kLnoubmF0aXZlRW51bShGaWVsZE5hbWUpO1xuICB2YXIgUHJpdmF0ZUZpZWxkTmFtZSA9IC8qIEBfX1BVUkVfXyAqLyAoKFByaXZhdGVGaWVsZE5hbWUyKSA9PiB7XG4gICAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX05VTUJFUlwiXSA9IFwiY2FyZE51bWJlclwiO1xuICAgIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9FWFBJUllcIl0gPSBcImNhcmRFeHBpcnlcIjtcbiAgICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfQ1ZDXCJdID0gXCJjYXJkQ3ZjXCI7XG4gICAgcmV0dXJuIFByaXZhdGVGaWVsZE5hbWUyO1xuICB9KShQcml2YXRlRmllbGROYW1lIHx8IHt9KTtcbiAgY29uc3QgUHJpdmF0ZUZpZWxkTmFtZUVudW0gPSB6b2Quei5uYXRpdmVFbnVtKFByaXZhdGVGaWVsZE5hbWUpO1xuICBjb25zdCBBbGxGaWVsZE5hbWVzID0gem9kLnoudW5pb24oW0ZpZWxkTmFtZUVudW0sIFByaXZhdGVGaWVsZE5hbWVFbnVtXSk7XG4gIHZhciBFbGVtZW50VHlwZUVudW0gPSAvKiBAX19QVVJFX18gKi8gKChFbGVtZW50VHlwZUVudW0yKSA9PiB7XG4gICAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRcIl0gPSBcImNhcmRcIjtcbiAgICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9OVU1CRVJcIl0gPSBcImNhcmQtbnVtYmVyXCI7XG4gICAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfRVhQSVJZXCJdID0gXCJjYXJkLWV4cGlyeVwiO1xuICAgIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX0NWQ1wiXSA9IFwiY2FyZC1jdmNcIjtcbiAgICByZXR1cm4gRWxlbWVudFR5cGVFbnVtMjtcbiAgfSkoRWxlbWVudFR5cGVFbnVtIHx8IHt9KTtcbiAgY29uc3QgRWxlbWVudFR5cGUgPSB6b2Quei5uYXRpdmVFbnVtKEVsZW1lbnRUeXBlRW51bSk7XG4gIGNvbnN0IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxID0gem9kLnoub2JqZWN0KHtcbiAgICBwcm92aWRlcjogem9kLnouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX25hbWU6IG51bGxPclVuZGVmT3IkMSh6b2Quei5zdHJpbmcoKSksXG4gICAgbWV0YWRhdGE6IG51bGxPclVuZGVmT3IkMSh6b2Quei5yZWNvcmQoem9kLnouc3RyaW5nKCksIHpvZC56LmFueSgpKSlcbiAgfSk7XG4gIGNvbnN0IFBheW1lbnRNZXRob2RNaW5pbWFsID0gem9kLnoub2JqZWN0KHtcbiAgICBpZDogem9kLnouc3RyaW5nKClcbiAgfSk7XG4gIHpvZC56Lm9iamVjdCh7XG4gICAgY2FyZE51bWJlcjogT3B0aW9uYWxTdHJpbmcsXG4gICAgZXhwaXJ5OiBPcHRpb25hbFN0cmluZyxcbiAgICBjdmM6IE9wdGlvbmFsU3RyaW5nXG4gIH0pO1xuICB6b2Quei5vYmplY3Qoe1xuICAgIGJhY2tncm91bmRDb2xvcjogT3B0aW9uYWxTdHJpbmcsXG4gICAgY29sb3I6IE9wdGlvbmFsU3RyaW5nLFxuICAgIGZvbnRGYW1pbHk6IE9wdGlvbmFsU3RyaW5nLFxuICAgIGZvbnRTaXplOiBPcHRpb25hbFN0cmluZyxcbiAgICBmb250V2VpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgICBtYXJnaW46IE9wdGlvbmFsU3RyaW5nLFxuICAgIHBhZGRpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICAgIGxldHRlclNwYWNpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICAgIGxpbmVIZWlnaHQ6IE9wdGlvbmFsU3RyaW5nXG4gIH0pO1xuICBjb25zdCBFdmVudFR5cGUgPSB6b2Quei5lbnVtKFtcbiAgICAvLyBFbGVtZW50IC0+IEZvcm1cbiAgICBcIkxBWU9VVFwiLFxuICAgIFwiTE9BREVEXCIsXG4gICAgXCJCTFVSXCIsXG4gICAgXCJGT0NVU1wiLFxuICAgIFwiQ0hBTkdFXCIsXG4gICAgXCJUT0tFTklaRV9TVEFSVEVEXCIsXG4gICAgXCJDSEVDS09VVF9TVEFSVEVEXCIsXG4gICAgXCJQQVlNRU5UX0ZMT1dfU1RBUlRFRFwiLFxuICAgIFwiVE9LRU5JWkVfU1VDQ0VTU1wiLFxuICAgIFwiQ0hFQ0tPVVRfU1VDQ0VTU1wiLFxuICAgIFwiTE9BRF9FUlJPUlwiLFxuICAgIFwiVkFMSURBVElPTl9FUlJPUlwiLFxuICAgIFwiVE9LRU5JWkVfRVJST1JcIixcbiAgICBcIkNIRUNLT1VUX0VSUk9SXCIsXG4gICAgXCJTRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTXCIsXG4gICAgLy8gRm9ybSAtPiBFbGVtZW50XG4gICAgXCJUT0tFTklaRVwiLFxuICAgIFwiQ0hFQ0tPVVRcIixcbiAgICBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXG4gIF0pO1xuICBjb25zdCBHZW5lcmljRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVE9LRU5JWkVfU1RBUlRFRFwiLCBcIkNIRUNLT1VUX1NUQVJURURcIl0pO1xuICBjb25zdCBHZW5lcmljRXZlbnRQYXlsb2FkID0gem9kLnoub2JqZWN0KHsgdHlwZTogR2VuZXJpY0V2ZW50VHlwZSB9KTtcbiAgY29uc3QgSW5wdXRFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJCTFVSXCIsIFwiRk9DVVNcIiwgXCJDSEFOR0VcIl0pO1xuICBjb25zdCBJbnB1dEV2ZW50UGF5bG9hZCA9IHpvZC56Lm9iamVjdCh7XG4gICAgdHlwZTogSW5wdXRFdmVudFR5cGUsXG4gICAgZWxlbWVudFR5cGU6IFByaXZhdGVGaWVsZE5hbWVFbnVtLFxuICAgIGVycm9yczogem9kLnouYXJyYXkoem9kLnouc3RyaW5nKCkpLm9wdGlvbmFsKClcbiAgfSk7XG4gIGNvbnN0IEVycm9yRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiTE9BRF9FUlJPUlwiLCBcIlRPS0VOSVpFX0VSUk9SXCIsIFwiQ0hFQ0tPVVRfRVJST1JcIl0pO1xuICBjb25zdCBFcnJvckV2ZW50UGF5bG9hZCA9IHpvZC56Lm9iamVjdCh7XG4gICAgdHlwZTogRXJyb3JFdmVudFR5cGUsXG4gICAgbWVzc2FnZTogUmVxdWlyZWRTdHJpbmcsXG4gICAgaGVhZGVyczogem9kLnoucmVjb3JkKHpvZC56LnN0cmluZygpLCB6b2Quei5zdHJpbmcoKSkub3B0aW9uYWwoKVxuICB9KTtcbiAgY29uc3QgVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVkFMSURBVElPTl9FUlJPUlwiXSk7XG4gIGNvbnN0IFZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCA9IHpvZC56Lm9iamVjdCh7XG4gICAgdHlwZTogVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlLFxuICAgIGVsZW1lbnRUeXBlOiBBbGxGaWVsZE5hbWVzLFxuICAgIGVycm9yczogem9kLnouYXJyYXkoem9kLnouc3RyaW5nKCkpXG4gIH0pO1xuICBjb25zdCBMYXlvdXRFdmVudFBheWxvYWQgPSB6b2Quei5vYmplY3Qoe1xuICAgIHR5cGU6IHpvZC56LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uTEFZT1VUKSxcbiAgICBoZWlnaHQ6IFJlcXVpcmVkU3RyaW5nXG4gIH0pO1xuICBjb25zdCBMb2FkZWRFdmVudFBheWxvYWQgPSB6b2Quei5vYmplY3Qoe1xuICAgIHR5cGU6IHpvZC56LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uTE9BREVEKSxcbiAgICBzZXNzaW9uSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICAgIHRvdGFsQW1vdW50QXRvbXM6IHpvZC56Lm51bWJlcigpLFxuICAgIGN1cnJlbmN5OiBPcHRpb25hbFN0cmluZyxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2RzOiB6b2Quei5hcnJheShDaGVja291dFBheW1lbnRNZXRob2QkMSlcbiAgfSk7XG4gIGNvbnN0IFBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCA9IHpvZC56Lm9iamVjdCh7XG4gICAgdHlwZTogem9kLnoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5QQVlNRU5UX0ZMT1dfU1RBUlRFRCksXG4gICAgbmV4dEFjdGlvbk1ldGFkYXRhOiB6b2Quei5yZWNvcmQoem9kLnouc3RyaW5nKCksIHpvZC56LmFueSgpKSxcbiAgICBwYXltZW50Rmxvd01ldGFkYXRhOiB6b2Quei5hbnkoKS5vcHRpb25hbCgpLFxuICAgIHN0YXJ0UEZNZXRhZGF0YTogem9kLnoub3B0aW9uYWwoem9kLnoucmVjb3JkKHpvZC56LnN0cmluZygpLCB6b2Quei5hbnkoKSkpXG4gIH0pO1xuICBjb25zdCBTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHpvZC56Lm9iamVjdCh7XG4gICAgdHlwZTogem9kLnoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5TRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTKSxcbiAgICBwYXltZW50TWV0aG9kSWQ6IHpvZC56LnN0cmluZygpXG4gIH0pO1xuICBjb25zdCBSZXF1aXJlZEZvcm1GaWVsZHMgPSB6b2Quei5vYmplY3Qoe1xuICAgIFtcImZpcnN0TmFtZVwiIC8qIEZJUlNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgICBbXCJsYXN0TmFtZVwiIC8qIExBU1RfTkFNRSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICAgIFtcImVtYWlsXCIgLyogRU1BSUwgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgICBbXCJ6aXBDb2RlXCIgLyogWklQX0NPREUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgICBbXCJjb3VudHJ5XCIgLyogQ09VTlRSWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICAgIFtcInByb21vdGlvbkNvZGVcIiAvKiBQUk9NT1RJT05fQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nXG4gIH0pO1xuICBjb25zdCBQUkZvcm1GaWVsZHMgPSB6b2Quei5vYmplY3Qoe1xuICAgIFtcImVtYWlsXCIgLyogRU1BSUwgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgICBbXCJ6aXBDb2RlXCIgLyogWklQX0NPREUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgICBbXCJjb3VudHJ5XCIgLyogQ09VTlRSWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICAgIFtcInByb21vdGlvbkNvZGVcIiAvKiBQUk9NT1RJT05fQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nXG4gIH0pO1xuICBjb25zdCBTdWJtaXRFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJUT0tFTklaRVwiLCBcIkNIRUNLT1VUXCIsIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJdKTtcbiAgY29uc3QgU3VibWl0RXZlbnRQYXlsb2FkID0gem9kLnoub2JqZWN0KHtcbiAgICB0eXBlOiBTdWJtaXRFdmVudFR5cGUsXG4gICAgc2Vzc2lvbklkOiBSZXF1aXJlZFN0cmluZyxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICAgIHBheW1lbnRGbG93TWV0YWRhdGE6IHpvZC56LmFueSgpLm9wdGlvbmFsKCksXG4gICAgZG9Ob3RVc2VMZWdhY3lDQ0Zsb3c6IHpvZC56LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICAgIGV4aXN0aW5nQ0NQTUlkOiBPcHRpb25hbFN0cmluZ1xuICB9KS5leHRlbmQoUmVxdWlyZWRGb3JtRmllbGRzLnNoYXBlKTtcbiAgY29uc3QgVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkID0gem9kLnoub2JqZWN0KHtcbiAgICB0eXBlOiB6b2Quei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlRPS0VOSVpFX1NVQ0NFU1MpLFxuICAgIGlzUmVhZHlGb3JDaGVja291dDogem9kLnouYm9vbGVhbigpXG4gIH0pO1xuICBjb25zdCBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQgPSB6b2Quei5vYmplY3Qoe1xuICAgIHR5cGU6IHpvZC56LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uQ0hFQ0tPVVRfU1VDQ0VTUyksXG4gICAgaW52b2ljZVVybHM6IHpvZC56LmFycmF5KHpvZC56LnN0cmluZygpKSxcbiAgICBzdWJzY3JpcHRpb25JZHM6IHpvZC56LmFycmF5KHpvZC56LnN0cmluZygpKSxcbiAgICBjdXN0b21lcklkOiB6b2Quei5zdHJpbmcoKVxuICB9KTtcbiAgY29uc3QgRXZlbnRQYXlsb2FkID0gem9kLnouZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gICAgR2VuZXJpY0V2ZW50UGF5bG9hZCxcbiAgICBJbnB1dEV2ZW50UGF5bG9hZCxcbiAgICBFcnJvckV2ZW50UGF5bG9hZCxcbiAgICBWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQsXG4gICAgTGF5b3V0RXZlbnRQYXlsb2FkLFxuICAgIExvYWRlZEV2ZW50UGF5bG9hZCxcbiAgICBTdWJtaXRFdmVudFBheWxvYWQsXG4gICAgVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkLFxuICAgIENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCxcbiAgICBQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQsXG4gICAgU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWRcbiAgXSk7XG4gIGNvbnN0IEVsZW1lbnRFdmVudCA9IHpvZC56Lm9iamVjdCh7XG4gICAgcGF5bG9hZDogRXZlbnRQYXlsb2FkLFxuICAgIG5vbmNlOiBSZXF1aXJlZFN0cmluZyxcbiAgICBmb3JtSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICAgIGVsZW1lbnRJZDogUmVxdWlyZWRTdHJpbmdcbiAgfSk7XG4gIHpvZC56Lm9iamVjdCh7XG4gICAgYW1vdW50QXRvbTogem9kLnoubnVtYmVyKCksXG4gICAgY3VycmVuY3k6IFJlcXVpcmVkU3RyaW5nXG4gIH0pO1xuICB6b2Quei5vYmplY3Qoe1xuICAgIHNlY3VyZV90b2tlbjogem9kLnouc3RyaW5nKCksXG4gICAgcHJvbW90aW9uX2NvZGU6IHpvZC56LnN0cmluZygpLm9wdGlvbmFsKClcbiAgfSk7XG4gIHpvZC56Lm9iamVjdCh7XG4gICAgc2VjdXJlX3Rva2VuOiB6b2Quei5zdHJpbmcoKSxcbiAgICBleGlzdGluZ19jY19wbV9pZDogbnVsbE9yVW5kZWZPciQxKHpvZC56LnN0cmluZygpKVxuICB9KTtcbiAgY29uc3QgQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UgPSB6b2Quei5vYmplY3Qoe1xuICAgIHBheW1lbnRfbWV0aG9kczogem9kLnouYXJyYXkoUGF5bWVudE1ldGhvZE1pbmltYWwpXG4gIH0pO1xuICBjb25zdCBGaWVsZFZhbGlkYXRpb25FcnJvciA9IHpvZC56Lm9iamVjdCh7XG4gICAgZWxlbWVudFR5cGU6IHpvZC56LnN0cmluZygpLFxuICAgIGVycm9yczogem9kLnouYXJyYXkoem9kLnouc3RyaW5nKCkpXG4gIH0pO1xuICB6b2Quei5vYmplY3Qoe1xuICAgIHNlc3Npb25faWQ6IHpvZC56LnN0cmluZygpXG4gIH0pO1xuICBjb25zdCBUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlID0gem9kLnoub2JqZWN0KHtcbiAgICBzdWNjZXNzOiB6b2Quei5saXRlcmFsKGZhbHNlKSxcbiAgICBlcnJvcl90eXBlOiB6b2Quei5saXRlcmFsKFwidmFsaWRhdGlvbl9lcnJvclwiKSxcbiAgICBlcnJvcnM6IHpvZC56LmFycmF5KEZpZWxkVmFsaWRhdGlvbkVycm9yKVxuICB9KTtcbiAgY29uc3QgVG9rZW5pemVDYXJkUmVzcG9uc2UgPSB6b2Quei5kaXNjcmltaW5hdGVkVW5pb24oXCJzdWNjZXNzXCIsIFtcbiAgICB6b2Quei5vYmplY3QoeyBzdWNjZXNzOiB6b2Quei5saXRlcmFsKHRydWUpIH0pLFxuICAgIFRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2VcbiAgXSk7XG4gIHpvZC56Lm9iamVjdCh7XG4gICAgc2Vzc2lvbl9pZDogem9kLnouc3RyaW5nKCksXG4gICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICAgIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6b2Quei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgICBleGlzdGluZ19jY19wbV9pZDogbnVsbE9yVW5kZWZPciQxKHpvZC56LnN0cmluZygpKVxuICB9KTtcbiAgem9kLnoub2JqZWN0KHtcbiAgICBzZXNzaW9uX2lkOiB6b2Quei5zdHJpbmcoKSxcbiAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gICAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzXG4gIH0pO1xuICB2YXIgVGhyZWVEU1N0YXR1cyA9IC8qIEBfX1BVUkVfXyAqLyAoKFRocmVlRFNTdGF0dXMyKSA9PiB7XG4gICAgVGhyZWVEU1N0YXR1czJbXCJTVUNDRVNTXCJdID0gXCJzdWNjZXNzXCI7XG4gICAgVGhyZWVEU1N0YXR1czJbXCJGQUlMVVJFXCJdID0gXCJmYWlsdXJlXCI7XG4gICAgVGhyZWVEU1N0YXR1czJbXCJDQU5DRUxMRURcIl0gPSBcImNhbmNlbGxlZFwiO1xuICAgIHJldHVybiBUaHJlZURTU3RhdHVzMjtcbiAgfSkoVGhyZWVEU1N0YXR1cyB8fCB7fSk7XG4gIGNvbnN0IFBpbmczRFNTdGF0dXNSZXNwb25zZSA9IHpvZC56Lm9iamVjdCh7XG4gICAgc3RhdHVzOiB6b2Quei5lbnVtKFtcInN1Y2Nlc3NcIiAvKiBTVUNDRVNTICovLCBcImZhaWx1cmVcIiAvKiBGQUlMVVJFICovLCBcImNhbmNlbGxlZFwiIC8qIENBTkNFTExFRCAqL10pXG4gIH0pO1xuICBjb25zdCBDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEgPSB6b2Quei5vYmplY3Qoe1xuICAgIHR5cGU6IHpvZC56LnN0cmluZygpLFxuICAgIHJlZGlyZWN0X3VybDogem9kLnouc3RyaW5nKCksXG4gICAgaW5pdGlhbF9pbnRlbnRfaWQ6IHpvZC56LnN0cmluZygpLFxuICAgIGNvbnNlbnRfaWQ6IHpvZC56LnN0cmluZygpXG4gIH0pO1xuXG4gIGNvbnN0IGV4dHJhY3RJc3N1ZXNQZXJGaWVsZCA9IChlcnJvcikgPT4ge1xuICAgIGNvbnN0IGlzc3Vlc1BlckZpZWxkID0ge307XG4gICAgT2JqZWN0LmVudHJpZXMoZXJyb3IpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZmllbGROYW1lID0gRmllbGROYW1lRW51bS5wYXJzZShrZXkpO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICBpc3N1ZXNQZXJGaWVsZFtmaWVsZE5hbWVdID0gdmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZS5fZXJyb3JzKSkge1xuICAgICAgICAgIGlzc3Vlc1BlckZpZWxkW2ZpZWxkTmFtZV0gPSB2YWx1ZS5fZXJyb3JzO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBpc3N1ZXNQZXJGaWVsZDtcbiAgfTtcblxuICBjb25zdCBTdHJpcGUzRFNOZXh0QWN0aW9uTWV0YWRhdGEgPSB6b2Quei5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogem9kLnouc3RyaW5nKCksXG4gICAgY2xpZW50X3NlY3JldDogem9kLnouc3RyaW5nKCksXG4gICAgc3RyaXBlX3BtX2lkOiB6b2Quei5zdHJpbmcoKVxuICB9KTtcbiAgY29uc3QgUGF5bWVudFJlcXVlc3ROZXh0QWN0aW9uTWV0YWRhdGEgPSB6b2Quei5vYmplY3Qoe1xuICAgIHR5cGU6IHpvZC56LnN0cmluZygpLFxuICAgIGNsaWVudF9zZWNyZXQ6IHpvZC56LnN0cmluZygpLFxuICAgIHN0cmlwZV9wazogem9kLnouc3RyaW5nKClcbiAgfSk7XG4gIGNvbnN0IG91ckN1cnJlbmN5VG9UaGVpcnMgPSB7XG4gICAgdXNkOiBcInVzZFwiLFxuICAgIGJybDogXCJicmxcIlxuICB9O1xuICBjb25zdCBnZXRMb2FkZWRTdHJpcGUgPSBhc3luYyAocHVibGlzaGFibGVLZXkpID0+IHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwOyBpKyspIHtcbiAgICAgIGlmICghaXNTdHJpcGVKc1ByZXNlbnQoKSkge1xuICAgICAgICBhd2FpdCBzbGVlcCg1MDApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWlzU3RyaXBlSnNQcmVzZW50KCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgU3RyaXBlIEpTIG5vdCBmb3VuZC5gKTtcbiAgICB9XG4gICAgY29uc3Qgc3RyaXBlID0gbmV3IFN0cmlwZShwdWJsaXNoYWJsZUtleSk7XG4gICAgcmV0dXJuIHN0cmlwZTtcbiAgfTtcbiAgY29uc3QgY3JlYXRlU3RyaXBlUGF5bWVudFJlcXVlc3QgPSBhc3luYyAoc3RyaXBlUHViS2V5LCB0b3RhbEFtb3VudEF0b20sIGN1cnJlbmN5LCBpc0Ftb3VudFBlbmRpbmcsIGlzTGlua09ubHkpID0+IHtcbiAgICBjb25zdCBzdHJpcGUgPSBhd2FpdCBnZXRMb2FkZWRTdHJpcGUoc3RyaXBlUHViS2V5KTtcbiAgICBjb25zdCBzdHJpcGVDdXJyZW5jeSA9IG91ckN1cnJlbmN5VG9UaGVpcnNbY3VycmVuY3kudG9Mb3dlckNhc2UoKS50cmltKCldO1xuICAgIGNvbnN0IHBheW1lbnRSZXF1ZXN0ID0gc3RyaXBlLnBheW1lbnRSZXF1ZXN0KHtcbiAgICAgIC8vIFRPRE86IHJlcGxhY2UgdGhpcyB3aXRoIHN0cmlwZSBhY2NvdW50IGNvdW50cnkgYXMgc29vbiBhcyB3ZSBzdXBwb3J0IGl0XG4gICAgICBjb3VudHJ5OiBcIlVTXCIsXG4gICAgICBjdXJyZW5jeTogc3RyaXBlQ3VycmVuY3ksXG4gICAgICB0b3RhbDoge1xuICAgICAgICBsYWJlbDogXCJUb3RhbFwiLFxuICAgICAgICBhbW91bnQ6IHRvdGFsQW1vdW50QXRvbSxcbiAgICAgICAgcGVuZGluZzogaXNBbW91bnRQZW5kaW5nXG4gICAgICB9LFxuICAgICAgcmVxdWVzdFBheWVyTmFtZTogdHJ1ZSxcbiAgICAgIHJlcXVlc3RQYXllckVtYWlsOiB0cnVlLFxuICAgICAgZGlzYWJsZVdhbGxldHM6IFtdIFxuICAgIH0pO1xuICAgIHJldHVybiBwYXltZW50UmVxdWVzdDtcbiAgfTtcbiAgY29uc3Qgc2xlZXAgPSAodGltZW91dE1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWVvdXRNcyk7XG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IGlzU3RyaXBlSnNQcmVzZW50ID0gKCkgPT4ge1xuICAgIHJldHVybiBcIlN0cmlwZVwiIGluIHdpbmRvdztcbiAgfTtcbiAgY29uc3Qgd2FpdEZvclVzZXJUb0FkZFBheW1lbnRNZXRob2QgPSBhc3luYyAocGF5bWVudFJlcXVlc3QpID0+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcGF5bWVudFJlcXVlc3Qub24oXCJwYXltZW50bWV0aG9kXCIsIGFzeW5jIChldnQpID0+IHtcbiAgICAgICAgICByZXNvbHZlKGV2dCk7XG4gICAgICAgIH0pO1xuICAgICAgICBwYXltZW50UmVxdWVzdC5vbihcImNhbmNlbFwiLCAoKSA9PiB7XG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgUGF5bWVudCBjYW5jZWxsZWQsIHBsZWFzZSBjbGljayBTdWJtaXQgYWdhaW4gdG8gcGF5YCkpO1xuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICBjb25zdCBjb25maXJtU3RyaXBlUHJQTSA9IGFzeW5jIChuZXh0QWN0aW9uTWV0YWRhdGEsIHN0cmlwZVBtKSA9PiB7XG4gICAgaWYgKCFuZXh0QWN0aW9uTWV0YWRhdGEuc3RyaXBlX3BrIHx8ICFuZXh0QWN0aW9uTWV0YWRhdGEuY2xpZW50X3NlY3JldCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG5leHQgYWN0aW9uIG1ldGFkYXRhIGZvcm1hdDogJHtKU09OLnN0cmluZ2lmeShuZXh0QWN0aW9uTWV0YWRhdGEpfWApO1xuICAgIH1cbiAgICBjb25zdCBzdHJpcGUgPSBhd2FpdCBnZXRMb2FkZWRTdHJpcGUobmV4dEFjdGlvbk1ldGFkYXRhLnN0cmlwZV9wayk7XG4gICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IHN0cmlwZS5jb25maXJtQ2FyZFNldHVwKG5leHRBY3Rpb25NZXRhZGF0YS5jbGllbnRfc2VjcmV0LCB7XG4gICAgICBwYXltZW50X21ldGhvZDogc3RyaXBlUG0ucGF5bWVudE1ldGhvZC5pZFxuICAgIH0pO1xuICAgIGlmIChjb25maXJtUmVzdWx0LmVycm9yKSB7XG4gICAgICBzdHJpcGVQbS5jb21wbGV0ZShcImZhaWxcIik7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFBheW1lbnQgZmFpbGVkOiAke2NvbmZpcm1SZXN1bHQuZXJyb3IubWVzc2FnZSA/PyBgdW5rbm93bmB9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0cmlwZVBtLmNvbXBsZXRlKFwic3VjY2Vzc1wiKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGxhdW5jaFN0cmlwZTNEU0RpYWxvZ0Zsb3cgPSBhc3luYyAobmV4dEFjdGlvbk1ldGFkYXRhKSA9PiB7XG4gICAgY29uc3Qgc3RyaXBlID0gYXdhaXQgZ2V0TG9hZGVkU3RyaXBlKG5leHRBY3Rpb25NZXRhZGF0YS5zdHJpcGVfcGspO1xuICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBzdHJpcGUuY29uZmlybUNhcmRTZXR1cChuZXh0QWN0aW9uTWV0YWRhdGEuY2xpZW50X3NlY3JldCwge1xuICAgICAgcGF5bWVudF9tZXRob2Q6IG5leHRBY3Rpb25NZXRhZGF0YS5zdHJpcGVfcG1faWRcbiAgICB9KTtcbiAgICBjb25zdCByZXN1bHRTdGF0dXMgPSBjb25maXJtUmVzdWx0LnNldHVwSW50ZW50Py5zdGF0dXM7XG4gICAgaWYgKHJlc3VsdFN0YXR1cyA9PT0gXCJzdWNjZWVkZWRcIikgOyBlbHNlIGlmIChyZXN1bHRTdGF0dXMgPT09IFwiY2FuY2VsZWRcIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQYXltZW50IGNhbmNlbGxlZCwgcGxlYXNlIGNsaWNrIFN1Ym1pdCBhZ2FpbiB0byBwYXlgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgJHtjb25maXJtUmVzdWx0LmVycm9yPy5tZXNzYWdlID8/IGNvbmZpcm1SZXN1bHQuc2V0dXBJbnRlbnQ/Lmxhc3Rfc2V0dXBfZXJyb3I/Lm1lc3NhZ2UgPz8gXCJQYXltZW50IGZhaWxlZCwgcGxlYXNlIGNsaWNrIHN1Ym1pdCBhZ2FpbiB0byBwYXkuXCJ9YFxuICAgICAgKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmcgPSAoc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qgc2VyaWFsaXplZFN0eWxlcyA9IEpTT04uc3RyaW5naWZ5KHN0eWxlcyk7XG4gICAgcmV0dXJuIHNlcmlhbGl6ZWRTdHlsZXM7XG4gIH07XG5cbiAgY29uc3QgY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtID0gKGZvcm1EaXYsIGluaXRpYWxEaWN0KSA9PiB7XG4gICAgY29uc3QgaW5jbHVkZWRJbnB1dHMgPSBBcnJheS5mcm9tKGZvcm1EaXYucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLW9waWRdXCIpID8/IFtdKTtcbiAgICBjb25zdCBleHRyYURhdGEgPSBpbmNsdWRlZElucHV0cy5yZWR1Y2UoKGFjYywgaW5wdXQpID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IGlucHV0LmdldEF0dHJpYnV0ZShcImRhdGEtb3BpZFwiKTtcbiAgICAgIGlmICgha2V5KSByZXR1cm4gYWNjO1xuICAgICAgcmV0dXJuIHsgLi4uYWNjLCBba2V5XTogaW5wdXQudmFsdWUgfTtcbiAgICB9LCB7fSk7XG4gICAgcmV0dXJuIGV4dHJhRGF0YTtcbiAgfTtcbiAgY29uc3QgcGFyc2VFdmVudFBheWxvYWQgPSAoZXZlbnREYXRhKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBFbGVtZW50RXZlbnQucGFyc2UoZXZlbnREYXRhKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9O1xuICBjb25zdCBlbWl0RXZlbnQgPSAodGFyZ2V0LCBmb3JtSWQsIGVsZW1lbnRJZCwgcGF5bG9hZCwgYmFzZVVybCkgPT4ge1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgcGF5bG9hZCxcbiAgICAgIG5vbmNlOiB1dWlkLnY0KCksXG4gICAgICBmb3JtSWQsXG4gICAgICBlbGVtZW50SWRcbiAgICB9O1xuICAgIHRhcmdldC5wb3N0TWVzc2FnZShKU09OLnN0cmluZ2lmeShldmVudCksIGJhc2VVcmwpO1xuICB9O1xuXG4gIGNvbnN0IGNoZWNrSWZWYWxpZENkZUNvbm5lY3Rpb25PYmplY3QgPSBhc3luYyAob2JqKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBvYmogIT09IFwib2JqZWN0XCIgfHwgIW9iaikgcmV0dXJuIGZhbHNlO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwaW5nID0geyB0eXBlOiBcInBpbmdcIiB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb2JqLnNlbmQocGluZyk7XG4gICAgICBpZiAocmVzdWx0ICE9PSB0cnVlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJ3RydWUnIGFmdGVyIHBpbmcsIGdvdCAke0pTT04uc3RyaW5naWZ5KHJlc3VsdCl9YCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9O1xuICBjb25zdCBpc1Jlc3VsdFZhbGlkID0gKG9iaiwgaXNWYWxpZCkgPT4ge1xuICAgIHJldHVybiAhIW9iaiAmJiBpc1ZhbGlkO1xuICB9O1xuXG4gIGNvbnN0IG51bGxPclVuZGVmT3IgPSAoelR5cGUpID0+IHpvZC56Lm51bGxhYmxlKHpUeXBlLm9wdGlvbmFsKCkpO1xuICB6b2Quei5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogYENhbm5vdCBiZSBibGFua2AgfSk7XG4gIGNvbnN0IENERVJlc3BvbnNlRXJyb3IgPSB6b2Quei5vYmplY3Qoe1xuICAgIGNkZV9yZXNwb25zZV90eXBlOiB6b2Quei5saXRlcmFsKFwiZXJyb3JcIiksXG4gICAgbWVzc2FnZTogem9kLnouc3RyaW5nKCksXG4gICAgaGVhZGVyczogem9kLnoucmVjb3JkKHpvZC56LnN0cmluZygpLCB6b2Quei5zdHJpbmcoKSkub3B0aW9uYWwoKVxuICB9KTtcbiAgem9kLnouZW51bShbXCJ1c2RcIiwgXCJicmxcIl0pO1xuICBjb25zdCBDb3Vwb25NaW5pbWFsID0gem9kLnoub2JqZWN0KHtcbiAgICBuYW1lOiB6b2Quei5zdHJpbmcoKSxcbiAgICBhbW91bnRfYXRvbV9vZmY6IG51bGxPclVuZGVmT3Ioem9kLnoubnVtYmVyKCkpLFxuICAgIHBlcmNlbnRfb2ZmOiBudWxsT3JVbmRlZk9yKHpvZC56Lm51bWJlcigpKSxcbiAgICBjdXJyZW5jeTogbnVsbE9yVW5kZWZPcih6b2Quei5zdHJpbmcoKSksXG4gICAgZHVyYXRpb246IHpvZC56LnN0cmluZygpLFxuICAgIGR1cmF0aW9uX2luX21vbnRoczogbnVsbE9yVW5kZWZPcih6b2Quei5udW1iZXIoKSlcbiAgfSk7XG4gIGNvbnN0IExpbmVJdGVtID0gem9kLnoub2JqZWN0KHtcbiAgICBhbW91bnRfc3VidG90YWxfYXRvbTogem9kLnoubnVtYmVyKCkuaW50KCksXG4gICAgYW1vdW50X3RvdGFsX2F0b206IHpvZC56Lm51bWJlcigpLmludCgpLFxuICAgIGN1cnJlbmN5OiB6b2Quei5zdHJpbmcoKSxcbiAgICBkZXNjcmlwdGlvbjogbnVsbE9yVW5kZWZPcih6b2Quei5zdHJpbmcoKSksXG4gICAgcHJpY2VfaWQ6IHpvZC56LnN0cmluZygpLFxuICAgIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3Ioem9kLnouc3RyaW5nKCkpLFxuICAgIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IG51bGxPclVuZGVmT3Ioem9kLnoubnVtYmVyKCkuaW50KCkpLFxuICAgIHF1YW50aXR5OiB6b2Quei5udW1iZXIoKS5pbnQoKVxuICB9KTtcbiAgY29uc3QgQnJhbmRTZXR0aW5ncyA9IHpvZC56LnJlY29yZCh6b2Quei5zdHJpbmcoKSwgem9kLnouYW55KCkpO1xuICBjb25zdCBCcmFuZCA9IHpvZC56Lm9iamVjdCh7XG4gICAgbmFtZTogem9kLnouc3RyaW5nKCksXG4gICAgc2V0dGluZ3M6IG51bGxPclVuZGVmT3IoQnJhbmRTZXR0aW5ncylcbiAgfSk7XG4gIGNvbnN0IENoZWNrb3V0UGF5bWVudE1ldGhvZCA9IHpvZC56Lm9iamVjdCh7XG4gICAgcHJvdmlkZXI6IHpvZC56LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9uYW1lOiBudWxsT3JVbmRlZk9yKHpvZC56LnN0cmluZygpKSxcbiAgICBtZXRhZGF0YTogbnVsbE9yVW5kZWZPcih6b2Quei5yZWNvcmQoem9kLnouc3RyaW5nKCksIHpvZC56LmFueSgpKSlcbiAgfSk7XG4gIGNvbnN0IFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsID0gem9kLnoub2JqZWN0KHtcbiAgICBxdWFudGl0eTogem9kLnoubnVtYmVyKClcbiAgfSk7XG4gIGNvbnN0IFN1YnNjcmlwdGlvbk1pbmltYWwgPSB6b2Quei5vYmplY3Qoe1xuICAgIGlkOiBudWxsT3JVbmRlZk9yKHpvZC56LnN0cmluZygpKSxcbiAgICBiaWxsaW5nX2ludGVydmFsOiBudWxsT3JVbmRlZk9yKHpvZC56LnN0cmluZygpKSxcbiAgICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBudWxsT3JVbmRlZk9yKHpvZC56Lm51bWJlcigpLmludCgpKSxcbiAgICBzdWJzY3JpcHRpb25faXRlbXM6IHpvZC56LmFycmF5KFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsKSxcbiAgICB0cmlhbF9zdGFydDogbnVsbE9yVW5kZWZPcih6b2Quei5zdHJpbmcoKSksXG4gICAgdHJpYWxfZW5kOiBudWxsT3JVbmRlZk9yKHpvZC56LnN0cmluZygpKVxuICB9KTtcbiAgY29uc3QgSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsID0gem9kLnoub2JqZWN0KHtcbiAgICBhbW91bnRfYXRvbTogem9kLnoubnVtYmVyKClcbiAgfSk7XG4gIGNvbnN0IEludm9pY2VMaW5lSXRlbU1pbmltYWwgPSB6b2Quei5vYmplY3Qoe1xuICAgIGFtb3VudF9hdG9tOiB6b2Quei5udW1iZXIoKSxcbiAgICBhbW91bnRfYXRvbV9jb25zaWRlcmluZ19kaXNjb3VudF9hcHBsaWVkOiB6b2Quei5udW1iZXIoKSxcbiAgICBjdXJyZW5jeTogem9kLnouc3RyaW5nKCksXG4gICAgZGlzY291bnRfYW1vdW50X2F0b21zOiB6b2Quei5hcnJheShJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwpLFxuICAgIHN1YnNjcmlwdGlvbl9pdGVtX2lkOiB6b2Quei5zdHJpbmcoKVxuICB9KTtcbiAgY29uc3QgRGlzY291bnRNaW5pbWFsID0gem9kLnoub2JqZWN0KHtcbiAgICBjb3Vwb246IENvdXBvbk1pbmltYWxcbiAgfSk7XG4gIGNvbnN0IEludm9pY2VNaW5pbWFsID0gem9kLnoub2JqZWN0KHtcbiAgICBjdXJyZW5jeTogem9kLnouc3RyaW5nKCksXG4gICAgZGlzY291bnRzOiB6b2Quei5hcnJheShEaXNjb3VudE1pbmltYWwpLFxuICAgIGhvc3RlZF9pbnZvaWNlX3VybDogbnVsbE9yVW5kZWZPcih6b2Quei5zdHJpbmcoKSksXG4gICAgbGluZXM6IHpvZC56LmFycmF5KEludm9pY2VMaW5lSXRlbU1pbmltYWwpLFxuICAgIHJlbWFpbmluZ19hbW91bnRfYXRvbTogem9kLnoubnVtYmVyKCksXG4gICAgdGF4X2Ftb3VudF9hdG9tOiB6b2Quei5udW1iZXIoKSxcbiAgICB0b3RhbF9hbW91bnRfYXRvbTogem9kLnoubnVtYmVyKCksXG4gICAgdG90YWxfZGlzY291bnRfYW1vdW50X2F0b21zOiB6b2Quei5hcnJheShJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwpXG4gIH0pO1xuICBjb25zdCBDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwgPSB6b2Quei5vYmplY3Qoe1xuICAgIGNyZWF0ZWQ6IHpvZC56LmFycmF5KFN1YnNjcmlwdGlvbk1pbmltYWwpLFxuICAgIGludm9pY2VzOiB6b2Quei5hcnJheShJbnZvaWNlTWluaW1hbClcbiAgfSk7XG4gIGNvbnN0IFByZXZpZXdDaGVja291dFJlc3BvbnNlID0gem9kLnoub2JqZWN0KHtcbiAgICBwcmV2aWV3OiBDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwsXG4gICAgcHJldmlld19wb3N0X3RyaWFsOiBudWxsT3JVbmRlZk9yKENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCksXG4gICAgY291cG9uczogem9kLnouYXJyYXkoQ291cG9uTWluaW1hbClcbiAgfSk7XG4gIGNvbnN0IF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24gPSB6b2Quei5vYmplY3Qoe1xuICAgIHN0YXR1czogem9kLnoubGl0ZXJhbChcIm9wZW5cIiksXG4gICAgdG9rZW46IHpvZC56LnN0cmluZygpLFxuICAgIGVtYWlsOiBudWxsT3JVbmRlZk9yKHpvZC56LnN0cmluZygpKSxcbiAgICBsaW5lX2l0ZW1zOiB6b2Quei5hcnJheShMaW5lSXRlbSksXG4gICAgYW1vdW50X3N1YnRvdGFsX2F0b206IHpvZC56Lm51bWJlcigpLmludCgpLFxuICAgIGFtb3VudF90b3RhbF9hdG9tOiB6b2Quei5udW1iZXIoKS5pbnQoKSxcbiAgICBicmFuZDogQnJhbmQsXG4gICAgc3Vic19wcmV2aWV3OiBudWxsT3JVbmRlZk9yKFByZXZpZXdDaGVja291dFJlc3BvbnNlKSxcbiAgICAvLyBOdWxsIGluIHNldHVwIG1vZGVcbiAgICBtZXRob2RzX2F2YWlsYWJsZTogem9kLnouYXJyYXkoQ2hlY2tvdXRQYXltZW50TWV0aG9kKVxuICB9KTtcbiAgY29uc3QgUGF5bWVudEZvcm1QcmVmaWxsID0gem9kLnouZGlzY3JpbWluYXRlZFVuaW9uKFwibW9kZVwiLCBbXG4gICAgem9kLnoub2JqZWN0KHtcbiAgICAgIG1vZGU6IHpvZC56LmxpdGVyYWwoXCJzZXR1cFwiKSxcbiAgICAgIGN1cnJlbmN5OiB6b2Quei5udWxsYWJsZSh6b2Quei51bmRlZmluZWQoKSlcbiAgICB9KS5leHRlbmQoX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbi5zaGFwZSksXG4gICAgem9kLnoub2JqZWN0KHtcbiAgICAgIG1vZGU6IHpvZC56LmVudW0oW1wicGF5bWVudFwiLCBcInN1YnNjcmlwdGlvblwiXSksXG4gICAgICBjdXJyZW5jeTogem9kLnouc3RyaW5nKClcbiAgICB9KS5leHRlbmQoX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbi5zaGFwZSlcbiAgXSk7XG4gIGNvbnN0IENvbXBsZXRlZEZvcm1QcmVmaWxsID0gem9kLnoub2JqZWN0KHtcbiAgICBzdGF0dXM6IHpvZC56LmxpdGVyYWwoXCJjb21wbGV0ZVwiKVxuICB9KTtcbiAgY29uc3QgRXhwaXJlZEZvcm1QcmVmaWxsID0gem9kLnoub2JqZWN0KHtcbiAgICBzdGF0dXM6IHpvZC56LmxpdGVyYWwoXCJleHBpcmVkXCIpXG4gIH0pO1xuICB6b2Quei51bmlvbihbUGF5bWVudEZvcm1QcmVmaWxsLCBDb21wbGV0ZWRGb3JtUHJlZmlsbCwgRXhwaXJlZEZvcm1QcmVmaWxsXSk7XG4gIHpvZC56Lm9iamVjdCh7XG4gICAgbG9nbzogem9kLnouc3RyaW5nKCksXG4gICAgaWNvbjogem9kLnouc3RyaW5nKCksXG4gICAgcHJpbWFyeV9jb2xvcjogem9kLnouc3RyaW5nKCksXG4gICAgc2Vjb25kYXJ5X2NvbG9yOiB6b2Quei5zdHJpbmcoKVxuICB9KTtcbiAgY29uc3QgQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UgPSB6b2Quei5vYmplY3Qoe1xuICAgIGludm9pY2VfdXJsczogem9kLnouYXJyYXkoem9kLnouc3RyaW5nKCkpLFxuICAgIHN1YnNjcmlwdGlvbl9pZHM6IHpvZC56LmFycmF5KHpvZC56LnN0cmluZygpKSxcbiAgICBjdXN0b21lcl9pZDogem9kLnouc3RyaW5nKClcbiAgfSk7XG4gIHpvZC56Lm9iamVjdCh7XG4gICAgc2VjdXJlX3Rva2VuOiB6b2Quei5zdHJpbmcoKSxcbiAgICBwYXltZW50X2lucHV0OiB6b2Quei5hbnkoKSxcbiAgICAvLyBTaG91bGQgZm9sbG93IEFueVBheW1lbnRJbnB1dCBmcm9tIENERVxuICAgIGN1c3RvbWVyX2VtYWlsOiB6b2Quei5zdHJpbmcoKSxcbiAgICBjdXN0b21lcl96aXBfY29kZTogem9kLnouc3RyaW5nKCksXG4gICAgY3VzdG9tZXJfY291bnRyeTogem9kLnouc3RyaW5nKCksXG4gICAgbGluZV9pdGVtczogem9kLnouYXJyYXkoTGluZUl0ZW0pLFxuICAgIHRvdGFsX2Ftb3VudF9hdG9tOiB6b2Quei5udW1iZXIoKS5pbnQoKSxcbiAgICBjYW5jZWxfYXRfZW5kOiB6b2Quei5ib29sZWFuKCksXG4gICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBwcm9tb3Rpb25fY29kZTogem9kLnouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6b2Quei5ib29sZWFuKCkub3B0aW9uYWwoKVxuICB9KTtcbiAgY29uc3QgU2V0dXBDaGVja291dFJlc3BvbnNlID0gem9kLnoub2JqZWN0KHtcbiAgICBwYXltZW50X21ldGhvZF9pZDogem9kLnouc3RyaW5nKClcbiAgfSk7XG4gIHpvZC56Lm9iamVjdCh7XG4gICAgaWQ6IHpvZC56LnN0cmluZygpLFxuICAgIHJldHVybl91cmw6IHpvZC56LnN0cmluZygpXG4gIH0pO1xuICBjb25zdCBQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciA9IHpvZC56Lm9iamVjdCh7XG4gICAgdHlwZTogem9kLnouc3RyaW5nKCksXG4gICAgbG9jOiB6b2Quei5hcnJheSh6b2Quei5zdHJpbmcoKSksXG4gICAgbXNnOiB6b2Quei5zdHJpbmcoKSxcbiAgICB1cmw6IHpvZC56LnN0cmluZygpXG4gIH0pO1xuICB6b2Quei5hcnJheShQeWRhbnRpY1ZhbGlkYXRpb25FcnJvcik7XG4gIGNvbnN0IFN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IHpvZC56Lm9iamVjdCh7XG4gICAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6b2Quei5hcnJheSh6b2Quei5yZWNvcmQoem9kLnouc3RyaW5nKCksIHpvZC56LmFueSgpKSlcbiAgfSk7XG4gIHpvZC56Lm9iamVjdCh7XG4gICAgZmllbGRzOiBQUkZvcm1GaWVsZHMsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2RcbiAgfSk7XG4gIHpvZC56Lm9iamVjdCh7XG4gICAgc2Vzc2lvbl9pZDogem9kLnouc3RyaW5nKCksXG4gICAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2RcbiAgfSk7XG4gIGNvbnN0IFN0YXJ0UGF5bWVudEZsb3dGb3JDQ1Jlc3BvbnNlID0gem9kLnoub2JqZWN0KHtcbiAgICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHpvZC56LmFycmF5KHpvZC56LnJlY29yZCh6b2Quei5zdHJpbmcoKSwgem9kLnouYW55KCkpKSxcbiAgICBjY19wbV9pZDogem9kLnouc3RyaW5nKClcbiAgfSk7XG4gIHpvZC56LnJlY29yZCh6b2Quei5hbnkoKSk7XG5cbiAgY29uc3Qgc3VtID0gKGFycikgPT4ge1xuICAgIHJldHVybiBhcnIucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCk7XG4gIH07XG5cbiAgZnVuY3Rpb24gZml4UHJvdG8odGFyZ2V0LCBwcm90b3R5cGUpIHtcbiAgICB2YXIgc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2Y7XG4gICAgc2V0UHJvdG90eXBlT2YgPyBzZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvdHlwZSkgOiB0YXJnZXQuX19wcm90b19fID0gcHJvdG90eXBlO1xuICB9XG4gIGZ1bmN0aW9uIGZpeFN0YWNrKHRhcmdldCwgZm4pIHtcbiAgICBpZiAoZm4gPT09IHZvaWQgMCkge1xuICAgICAgZm4gPSB0YXJnZXQuY29uc3RydWN0b3I7XG4gICAgfVxuXG4gICAgdmFyIGNhcHR1cmVTdGFja1RyYWNlID0gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7XG4gICAgY2FwdHVyZVN0YWNrVHJhY2UgJiYgY2FwdHVyZVN0YWNrVHJhY2UodGFyZ2V0LCBmbik7XG4gIH1cblxuICB2YXIgX19leHRlbmRzID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBfZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIGV4dGVuZFN0YXRpY3MoZCwgYikge1xuICAgICAgX2V4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwge1xuICAgICAgICBfX3Byb3RvX186IFtdXG4gICAgICB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZC5fX3Byb3RvX18gPSBiO1xuICAgICAgfSB8fCBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBmb3IgKHZhciBwIGluIGIpIHtcbiAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcblxuICAgICAgX2V4dGVuZFN0YXRpY3MoZCwgYik7XG5cbiAgICAgIGZ1bmN0aW9uIF9fKCkge1xuICAgICAgICB0aGlzLmNvbnN0cnVjdG9yID0gZDtcbiAgICAgIH1cblxuICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG4gIH0oKTtcblxuICB2YXIgQ3VzdG9tRXJyb3IgPSBmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEN1c3RvbUVycm9yLCBfc3VwZXIpO1xuXG4gICAgZnVuY3Rpb24gQ3VzdG9tRXJyb3IobWVzc2FnZSwgb3B0aW9ucykge1xuICAgICAgdmFyIF9uZXdUYXJnZXQgPSB0aGlzLmNvbnN0cnVjdG9yO1xuXG4gICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBtZXNzYWdlLCBvcHRpb25zKSB8fCB0aGlzO1xuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX3RoaXMsICduYW1lJywge1xuICAgICAgICB2YWx1ZTogX25ld1RhcmdldC5uYW1lLFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICB9KTtcbiAgICAgIGZpeFByb3RvKF90aGlzLCBfbmV3VGFyZ2V0LnByb3RvdHlwZSk7XG4gICAgICBmaXhTdGFjayhfdGhpcyk7XG4gICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIEN1c3RvbUVycm9yO1xuICB9KEVycm9yKTtcblxuICBjbGFzcyBDZGVFcnJvciBleHRlbmRzIEN1c3RvbUVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihyZXNwb25zZSkge1xuICAgICAgY29uc3QgZnJpZW5kbHlNZXNzYWdlID0gYFtjZGUtY2xpZW50XSBFcnJvciBxdWVyeWluZyBDREU6ICR7cmVzcG9uc2UubWVzc2FnZX1gO1xuICAgICAgc3VwZXIoZnJpZW5kbHlNZXNzYWdlKTtcbiAgICAgIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZTtcbiAgICB9XG4gICAgZ2V0IG9yaWdpbmFsRXJyb3JNZXNzYWdlKCkge1xuICAgICAgcmV0dXJuIHRoaXMucmVzcG9uc2UubWVzc2FnZTtcbiAgICB9XG4gIH1cbiAgY29uc3QgcXVlcnlDREUgPSBhc3luYyAoY2RlQ29ubiwgZGF0YSwgcmVzcG9uc2VTY2hlbWEpID0+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNkZUNvbm4uc2VuZChkYXRhKTtcbiAgICBpZiAoaXNDREVSZXNwb25zZUVycm9yKHJlc3BvbnNlKSkge1xuICAgICAgdGhyb3cgbmV3IENkZUVycm9yKHJlc3BvbnNlKTtcbiAgICB9XG4gICAgaWYgKCFjaGVja0lmQ29uZm9ybXNUb1NjaGVtYShyZXNwb25zZSwgcmVzcG9uc2VTY2hlbWEpKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSByZXNwb25zZVNjaGVtYS5zYWZlUGFyc2UocmVzcG9uc2UpO1xuICAgICAgaWYgKHJlc3VsdC5zdWNjZXNzKSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlXCIpO1xuICAgICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICAgIH1cbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH07XG4gIGNvbnN0IGNoZWNrSWZDb25mb3Jtc1RvU2NoZW1hID0gKHZhbHVlLCBzY2hlbWEpID0+IHtcbiAgICByZXR1cm4gc2NoZW1hLnNhZmVQYXJzZSh2YWx1ZSkuc3VjY2VzcztcbiAgfTtcbiAgY29uc3QgaXNDREVSZXNwb25zZUVycm9yID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgcmV0dXJuIENERVJlc3BvbnNlRXJyb3Iuc2FmZVBhcnNlKHJlc3BvbnNlKS5zdWNjZXNzO1xuICB9O1xuICBjb25zdCBnZXRDaGVja291dFByZXZpZXcgPSBhc3luYyAoY2RlQ29ubiwgcmVxdWVzdCkgPT4ge1xuICAgIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwiZ2V0X2NoZWNrb3V0X3ByZXZpZXdcIiwgcGF5bG9hZDogcmVxdWVzdCB9LCBQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSk7XG4gIH07XG4gIGNvbnN0IGdldFByZWZpbGwgPSBhc3luYyAoY2RlQ29ubikgPT4ge1xuICAgIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwiZ2V0X3ByZWZpbGxcIiwgcGF5bG9hZDoge30gfSwgUGF5bWVudEZvcm1QcmVmaWxsKTtcbiAgfTtcbiAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd0ZvckNDID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgICByZXR1cm4gYXdhaXQgcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfY2NcIiwgcGF5bG9hZCB9LCBTdGFydFBheW1lbnRGbG93Rm9yQ0NSZXNwb25zZSk7XG4gIH07XG4gIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dGb3JQUiA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gICAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX3ByXCIsIHBheWxvYWQgfSwgU3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgfTtcbiAgY29uc3QgY29uZmlybVBheW1lbnRGbG93ID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgICByZXR1cm4gYXdhaXQgcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcImNvbmZpcm1fcGF5bWVudF9mbG93XCIsIHBheWxvYWQgfSwgQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UpO1xuICB9O1xuICBjb25zdCBnZXRDaGVja291dFZhbHVlID0gYXN5bmMgKGNkZUNvbm4sIHNlY3VyZVRva2VuLCBwcm9tb0NvZGUpID0+IHtcbiAgICBjb25zdCBjaGVja291dFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXcoY2RlQ29ubiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBzZWN1cmVUb2tlbixcbiAgICAgIHByb21vdGlvbl9jb2RlOiBwcm9tb0NvZGVcbiAgICB9KTtcbiAgICBjb25zdCBjdXJyZW5jaWVzID0gbmV3IFNldChjaGVja291dFByZXZpZXcucHJldmlldy5pbnZvaWNlcy5tYXAoKGludikgPT4gaW52LmN1cnJlbmN5KSk7XG4gICAgaWYgKGN1cnJlbmNpZXMuc2l6ZSAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBleGFjdGx5IG9uZSBjdXJyZW5jeSwgZ290ICR7Y3VycmVuY2llcy5zaXplfWApO1xuICAgIH1cbiAgICBjb25zdCBjdXJyZW5jeSA9IGN1cnJlbmNpZXMudmFsdWVzKCkubmV4dCgpLnZhbHVlID8/IFwidXNkXCI7XG4gICAgY29uc3QgYW1vdW50QXRvbSA9IHN1bShjaGVja291dFByZXZpZXcucHJldmlldy5pbnZvaWNlcy5tYXAoKGludikgPT4gaW52LnJlbWFpbmluZ19hbW91bnRfYXRvbSkpO1xuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW5jeSxcbiAgICAgIGFtb3VudEF0b21cbiAgICB9O1xuICB9O1xuICBjb25zdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQgPSBhc3luYyAoY2RlQ29ubiwgc2VjdXJlVG9rZW4sIGlzU2V0dXBNb2RlLCBwcm9tb0NvZGUpID0+IHtcbiAgICBpZiAoaXNTZXR1cE1vZGUpIHtcbiAgICAgIHJldHVybiB7IGFtb3VudEF0b206IDAsIGN1cnJlbmN5OiBcInVzZFwiIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb21vQ29kZSA9ICFwcm9tb0NvZGUgPyB2b2lkIDAgOiBwcm9tb0NvZGU7XG4gICAgICBjb25zdCBjaGVja291dFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFZhbHVlKGNkZUNvbm4sIHNlY3VyZVRva2VuLCBwcm9tb0NvZGUpO1xuICAgICAgcmV0dXJuIHsgYW1vdW50QXRvbTogY2hlY2tvdXRQcmV2aWV3LmFtb3VudEF0b20sIGN1cnJlbmN5OiBjaGVja291dFByZXZpZXcuY3VycmVuY3kgfTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IHRva2VuaXplQ2FyZE9uQWxsQ29ubmVjdGlvbnMgPSBhc3luYyAoYWxsQ2RlQ29ubmVjdGlvbnMsIHBheWxvYWQpID0+IHtcbiAgICBpZiAoYWxsQ2RlQ29ubmVjdGlvbnMuc2l6ZSA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gQ0RFIGNvbm5lY3Rpb25zIGZvdW5kXCIpO1xuICAgIH1cbiAgICBjb25zdCByZXNwb25zZXMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIEFycmF5LmZyb20oYWxsQ2RlQ29ubmVjdGlvbnMudmFsdWVzKCkpLm1hcChcbiAgICAgICAgKGNkZUNvbm4pID0+IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJ0b2tlbml6ZV9jYXJkXCIsIHBheWxvYWQgfSwgVG9rZW5pemVDYXJkUmVzcG9uc2UpXG4gICAgICApXG4gICAgKTtcbiAgICByZXR1cm4gcmVzcG9uc2VzO1xuICB9O1xuICBjb25zdCBjaGVja291dENhcmRFbGVtZW50cyA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwiY2hlY2tvdXRfY2FyZF9lbGVtZW50c1wiLCBwYXlsb2FkIH0sIENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9O1xuICBjb25zdCBzZXR1cENoZWNrb3V0ID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgICByZXR1cm4gYXdhaXQgcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcInNldHVwX3BheW1lbnRfbWV0aG9kXCIsIHBheWxvYWQgfSwgU2V0dXBDaGVja291dFJlc3BvbnNlKTtcbiAgfTtcbiAgY29uc3QgcGVyZm9ybUNoZWNrb3V0ID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgICByZXR1cm4gYXdhaXQgcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcImNoZWNrb3V0XCIsIHBheWxvYWQgfSwgQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UpO1xuICB9O1xuICBjb25zdCBDREVfUE9MTElOR19JTlRFUlZBTCA9IDFlMztcbiAgY29uc3QgcGluZ0NkZUZvcjNkc1N0YXR1cyA9IGFzeW5jIChpZnJhbWUsIGNoaWxkT3JpZ2luKSA9PiB7XG4gICAgY29uc3QgY29ubmVjdGlvbiA9IHBlbnBhbC5jb25uZWN0VG9DaGlsZCh7XG4gICAgICBpZnJhbWUsXG4gICAgICBkZWJ1ZzogdHJ1ZSxcbiAgICAgIHRpbWVvdXQ6IENERV9QT0xMSU5HX0lOVEVSVkFMLFxuICAgICAgY2hpbGRPcmlnaW46IFwiKlwiXG4gICAgICAvLyBUT0RPOiB1c2Ugd2l0aCBwcm9wZXIgY2hpbGRPcmlnaW5cbiAgICB9KTtcbiAgICBjb25zdCBjb25uZWN0aW9uT2JqID0gYXdhaXQgY29ubmVjdGlvbi5wcm9taXNlO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHF1ZXJ5Q0RFKGNvbm5lY3Rpb25PYmosIHsgdHlwZTogXCJwaW5nLTNkcy1zdGF0dXNcIiB9LCBQaW5nM0RTU3RhdHVzUmVzcG9uc2UpO1xuICAgIHJldHVybiByZXN1bHQuc3RhdHVzO1xuICB9O1xuXG4gIGNvbnN0IHN0eWxlcyA9IFwiQGtleWZyYW1lcyBmYWRlSW57MCV7b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZSguOSl9dG97b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZSgxKX19Lm92ZXJsYXl7cG9zaXRpb246Zml4ZWQ7dG9wOjA7bGVmdDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ei1pbmRleDoyMTQ3NDgzNjQ4IWltcG9ydGFudDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjojMDAwMDAwODB9LmNvbnRhaW5lcnttYXgtd2lkdGg6NTAwcHg7bWF4LWhlaWdodDo2MDBweDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JhY2tncm91bmQtY29sb3I6I2ZmZjtwb3NpdGlvbjpyZWxhdGl2ZTthbmltYXRpb246ZmFkZUluIC4zcyBlYXNlLW91dH0uZnJhbWV7bWF4LXdpZHRoOjUwMHB4O21heC1oZWlnaHQ6NjAwcHg7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtib3JkZXI6bm9uZX0uY2FuY2VsLWJ1dHRvbntwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjpub25lO2ZvbnQtc2l6ZToxcmVtO2NvbG9yOiNmZmY7Y3Vyc29yOnBvaW50ZXI7dG9wOi0xLjVyZW07cGFkZGluZzowO3JpZ2h0OjB9XCI7XG5cbiAgY29uc3QgY3JlYXRlQW5kT3BlbkZyYW1lID0gKHVybCkgPT4ge1xuICAgIGNvbnN0IHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xuICAgIHRlbXBsYXRlLmlubmVySFRNTCA9IGBcbiAgICA8c3R5bGU+XG4gICAgICAke3N0eWxlc31cbiAgICA8L3N0eWxlPlxuICAgIDxkaXYgY2xhc3M9XCJvdmVybGF5XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJjYW5jZWwtYnV0dG9uXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgIDxpZnJhbWUgc3JjPVwiJHt1cmx9XCIgY2xhc3M9XCJmcmFtZVwiIGlkPVwidGhyZWUtZHMtaWZyYW1lXCIgdGl0bGU9XCIzRCBTZWN1cmUgdmVyaWZpY2F0aW9uXCIgYWxsb3c9XCJwYXltZW50XCI+PC9pZnJhbWU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYDtcbiAgICBjb25zdCBob3N0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBjb25zdCBzaGFkb3dSb290ID0gaG9zdC5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KTtcbiAgICBzaGFkb3dSb290LmFwcGVuZENoaWxkKHRlbXBsYXRlLmNvbnRlbnQuY2xvbmVOb2RlKHRydWUpKTtcbiAgICBjb25zdCBpZnJhbWUgPSBzaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXCIjdGhyZWUtZHMtaWZyYW1lXCIpO1xuICAgIGNvbnN0IGNhbmNlbEJ1dHRvbiA9IHNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihcIi5jYW5jZWwtYnV0dG9uXCIpO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaG9zdCk7XG4gICAgcmV0dXJuIHsgaG9zdCwgaWZyYW1lLCBjYW5jZWxCdXR0b24gfTtcbiAgfTtcblxuICBmdW5jdGlvbiBzdGFydFBvbGxpbmcoaWZyYW1lLCBvblN1Y2Nlc3MsIGNoaWxkT3JpZ2luKSB7XG4gICAgY29uc3QgaGFuZGxlUG9sbGluZyA9IGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IGF3YWl0IHBpbmdDZGVGb3IzZHNTdGF0dXMoaWZyYW1lLCBjaGlsZE9yaWdpbik7XG4gICAgICAgIGlmIChzdGF0dXMpIHtcbiAgICAgICAgICBjbGVhckludGVydmFsKHBvbGxpbmdJbnRlcnZhbCk7XG4gICAgICAgICAgb25TdWNjZXNzKHN0YXR1cyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB9XG4gICAgfTtcbiAgICBoYW5kbGVQb2xsaW5nKCk7XG4gICAgY29uc3QgcG9sbGluZ0ludGVydmFsID0gc2V0SW50ZXJ2YWwoaGFuZGxlUG9sbGluZywgQ0RFX1BPTExJTkdfSU5URVJWQUwpO1xuICAgIHJldHVybiBwb2xsaW5nSW50ZXJ2YWw7XG4gIH1cbiAgZnVuY3Rpb24gaGFuZGxlRXZlbnRzKHtcbiAgICBlbGVtZW50cyxcbiAgICBwb2xsaW5nSW50ZXJ2YWwsXG4gICAgcmVzb2x2ZVxuICB9KSB7XG4gICAgY29uc3QgaGFuZGxlQ2FuY2VsID0gKCkgPT4ge1xuICAgICAgY2xlYXJJbnRlcnZhbChwb2xsaW5nSW50ZXJ2YWwpO1xuICAgICAgZWxlbWVudHMuaG9zdC5yZW1vdmUoKTtcbiAgICAgIHJlc29sdmUoVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQpO1xuICAgIH07XG4gICAgZWxlbWVudHMuY2FuY2VsQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBoYW5kbGVDYW5jZWwpO1xuICAgIGNvbnN0IGNsZWFudXBFdmVudExpc3RlbmVycyA9ICgpID0+IHtcbiAgICAgIGVsZW1lbnRzLmNhbmNlbEJ1dHRvbi5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgaGFuZGxlQ2FuY2VsKTtcbiAgICB9O1xuICAgIHJldHVybiBjbGVhbnVwRXZlbnRMaXN0ZW5lcnM7XG4gIH1cbiAgYXN5bmMgZnVuY3Rpb24gc3RhcnQzZHNWZXJpZmljYXRpb24oe1xuICAgIHVybCxcbiAgICBiYXNlVXJsXG4gIH0pIHtcbiAgICBjb25zdCBlbGVtZW50cyA9IGNyZWF0ZUFuZE9wZW5GcmFtZSh1cmwpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgY29uc3Qgb25TdWNjZXNzID0gKHN0YXR1cykgPT4ge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBlbGVtZW50cy5ob3N0LnJlbW92ZSgpO1xuICAgICAgICB9LCAxZTMpO1xuICAgICAgICByZXNvbHZlKHN0YXR1cyk7XG4gICAgICAgIGNsZWFudXBFdmVudExpc3RlbmVycz8uKCk7XG4gICAgICB9O1xuICAgICAgY29uc3QgcG9sbGluZ0ludGVydmFsID0gc3RhcnRQb2xsaW5nKGVsZW1lbnRzLmlmcmFtZSwgb25TdWNjZXNzLCBuZXcgVVJMKGJhc2VVcmwpLm9yaWdpbik7XG4gICAgICBjb25zdCBjbGVhbnVwRXZlbnRMaXN0ZW5lcnMgPSBoYW5kbGVFdmVudHMoe1xuICAgICAgICBlbGVtZW50cyxcbiAgICAgICAgcG9sbGluZ0ludGVydmFsLFxuICAgICAgICByZXNvbHZlXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzID0gKHNpbXBsZU9qc0Zsb3cpID0+IHtcbiAgICByZXR1cm4gYXN5bmMgKHBhcmFtcykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcGFyYW1zLmZsb3dDYWxsYmFja3Mub25DaGVja291dFN0YXJ0ZWQoKTtcbiAgICAgICAgY29uc3QgZmxvd1Jlc3VsdCA9IGF3YWl0IHNpbXBsZU9qc0Zsb3cocGFyYW1zKTtcbiAgICAgICAgaWYgKGZsb3dSZXN1bHQubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgICAgcGFyYW1zLmZsb3dDYWxsYmFja3Mub25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzKGZsb3dSZXN1bHQucmVzdWx0LnBheW1lbnRfbWV0aG9kX2lkKTtcbiAgICAgICAgfSBlbHNlIGlmIChmbG93UmVzdWx0Lm1vZGUgPT09IFwiY2hlY2tvdXRcIikge1xuICAgICAgICAgIHBhcmFtcy5mbG93Q2FsbGJhY2tzLm9uQ2hlY2tvdXRTdWNjZXNzKFxuICAgICAgICAgICAgZmxvd1Jlc3VsdC5yZXN1bHQuaW52b2ljZV91cmxzLFxuICAgICAgICAgICAgZmxvd1Jlc3VsdC5yZXN1bHQuc3Vic2NyaXB0aW9uX2lkcyxcbiAgICAgICAgICAgIGZsb3dSZXN1bHQucmVzdWx0LmN1c3RvbWVyX2lkXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCBtb2RlOiAke2Zsb3dSZXN1bHR9YCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHBhcmFtcy5mbG93Q2FsbGJhY2tzLm9uQ2hlY2tvdXRFcnJvcihnZXRFcnJvck1lc3NhZ2UoZXJyb3IpKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfTtcbiAgfTtcbiAgY29uc3QgYWRkRXJyb3JDYXRjaGVyRm9ySW5pdCA9IChpbml0KSA9PiB7XG4gICAgcmV0dXJuIGFzeW5jIChwYXJhbXMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBpbml0KHBhcmFtcyk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCB7IGVycl9fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImluaXQtZXJyb3ItY2F0Y2hlclwiKTtcbiAgICAgICAgZXJyX18oZXJyb3IpO1xuICAgICAgICByZXR1cm4geyBpc0F2YWlsYWJsZTogZmFsc2UsIHJlYXNvbjogZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSB9O1xuICAgICAgfVxuICAgIH07XG4gIH07XG4gIGNvbnN0IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzID0gKHByZWZpeCkgPT4ge1xuICAgIGNvbnN0IGxvZyA9ICguLi5hcmdzKSA9PiB7XG4gICAgICB3aW5kb3dbXCJjb25zb2xlXCJdLmxvZyhgJHtjaGFsay5ncmVlbi5ib2xkKFwib2pzL1wiKX0ke2NoYWxrLmJvbGQuZ3JheShgJHtwcmVmaXh9YCl9XHRgLCAuLi5hcmdzKTtcbiAgICB9O1xuICAgIGNvbnN0IGVyciA9ICguLi5hcmdzKSA9PiB7XG4gICAgICB3aW5kb3dbXCJjb25zb2xlXCJdLmVycm9yKGAke2NoYWxrLnJlZC5ib2xkKFwib2pzL1wiKX0ke2NoYWxrLmJvbGQuZ3JheShgJHtwcmVmaXh9YCl9XHRgLCAuLi5hcmdzKTtcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBsb2csXG4gICAgICBlcnIsXG4gICAgICBsb2dfXzogbG9nLFxuICAgICAgZXJyX186IGVyclxuICAgIH07XG4gIH07XG5cbiAgY29uc3QgeyBsb2dfXzogbG9nX18kMywgZXJyX186IGVycl9fJDQgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiY29tbW9uLWNjXCIpO1xuICBjb25zdCB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyA9IChub25DZGVGb3JtSW5wdXRzLCBvblZhbGlkYXRpb25FcnJvcikgPT4ge1xuICAgIGNvbnN0IHBheWxvYWQgPSBSZXF1aXJlZEZvcm1GaWVsZHMuc2FmZVBhcnNlKG5vbkNkZUZvcm1JbnB1dHMpO1xuICAgIGlmICghcGF5bG9hZC5zdWNjZXNzKSB7XG4gICAgICBjb25zdCBmb3JtYXR0ZWQgPSBwYXlsb2FkLmVycm9yLmZvcm1hdCgpO1xuICAgICAgY29uc3QgaXNzdWVzID0gZXh0cmFjdElzc3Vlc1BlckZpZWxkKGZvcm1hdHRlZCk7XG4gICAgICBmb3IgKGNvbnN0IFtmaWVsZE5hbWUsIGVycm9yc10gb2YgT2JqZWN0LmVudHJpZXMoaXNzdWVzKSkge1xuICAgICAgICBvblZhbGlkYXRpb25FcnJvcihmaWVsZE5hbWUsIGVycm9ycywgZmllbGROYW1lKTtcbiAgICAgIH1cbiAgICAgIGVycl9fJDQoYEdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzYCwgaXNzdWVzKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzXCIpO1xuICAgIH1cbiAgICByZXR1cm4gcGF5bG9hZC5kYXRhO1xuICB9O1xuICBjb25zdCB2YWxpZGF0ZVRva2VuaXplQ2FyZFJlc3VsdHMgPSAodG9rZW5pemVSZXN1bHRzLCBvblZhbGlkYXRpb25FcnJvcikgPT4ge1xuICAgIGZvciAoY29uc3QgdG9rZW5pemVSZXN1bHQgb2YgdG9rZW5pemVSZXN1bHRzKSB7XG4gICAgICBpZiAodG9rZW5pemVSZXN1bHQuc3VjY2VzcyA9PT0gZmFsc2UpIHtcbiAgICAgICAgdG9rZW5pemVSZXN1bHQuZXJyb3JzLmZvckVhY2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc3QgcGFyc2VkID0gQWxsRmllbGROYW1lcy5zYWZlUGFyc2UoZXJyb3IuZWxlbWVudFR5cGUpO1xuICAgICAgICAgIGlmICghcGFyc2VkLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIGVycl9fJDQoYFVua25vd24gZmllbGQgbmFtZSBpbiBvblZhbGlkYXRpb25FcnJvcjogJHtlcnJvci5lbGVtZW50VHlwZX1gKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZmllbGROYW1lID0gcGFyc2VkLmRhdGE7XG4gICAgICAgICAgICBvblZhbGlkYXRpb25FcnJvcihmaWVsZE5hbWUsIGVycm9yLmVycm9ycyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbG9nX18kMyhgRXJyb3IgdG9rZW5pemluZyBjYXJkOiBnb3QgdmFsaWRhdGlvbiBlcnJvcnM6ICR7SlNPTi5zdHJpbmdpZnkodG9rZW5pemVSZXN1bHQuZXJyb3JzKX1gKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIHdoaWxlIHRva2VuaXppbmcgY2FyZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgeyBlcnJfXzogZXJyX18kMyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJjb21tbW9uXCIpO1xuICBjb25zdCBwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgaWYgKHJlc3BvbnNlLnBheW1lbnRfbWV0aG9kcy5sZW5ndGggIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZXhhY3RseSBvbmUgcGF5bWVudCBtZXRob2QsIGdvdCAke3Jlc3BvbnNlLnBheW1lbnRfbWV0aG9kcy5sZW5ndGh9YCk7XG4gICAgfVxuICAgIHJldHVybiB7IHBheW1lbnRfbWV0aG9kX2lkOiByZXNwb25zZS5wYXltZW50X21ldGhvZHNbMF0uaWQgfTtcbiAgfTtcbiAgY29uc3QgZmluZENwbU1hdGNoaW5nVHlwZSA9IChhbGxDUE1zLCB6b2RNb2RlbCkgPT4ge1xuICAgIGNvbnN0IGNwbSA9IGFsbENQTXMuZmluZCgoY3BtMikgPT4gem9kTW9kZWwuc2FmZVBhcnNlKGNwbTIpLnN1Y2Nlc3MpO1xuICAgIGlmICghY3BtKSB7XG4gICAgICBlcnJfXyQzKGBObyBDUE1zIGZvdW5kIGZvciBtb2RlbCAke3pvZE1vZGVsfWApO1xuICAgICAgZXJyX18kMyhhbGxDUE1zKTtcbiAgICAgIGVycl9fJDMoYHpvZE1vZGVsYCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIENQTXMgZm91bmQgZm9yIG1vZGVsICR7em9kTW9kZWx9YCk7XG4gICAgfVxuICAgIHJldHVybiB6b2RNb2RlbC5wYXJzZShjcG0pO1xuICB9O1xuXG4gIGNvbnN0IHsgbG9nX186IGxvZ19fJDIsIGVycl9fOiBlcnJfXyQyIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImNvbW1vbi1jY1wiKTtcbiAgY29uc3QgeyBsb2dfXzogc3RyaXBlTG9nX18gfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwic3RyaXBlLWNjXCIpO1xuICBjb25zdCBydW5Db21tb25DY0Zsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgICBhc3luYyAoeyBjb250ZXh0LCBjaGVja291dFBheW1lbnRNZXRob2QsIG5vbkNkZUZvcm1JbnB1dHMsIGZsb3dDYWxsYmFja3MgfSkgPT4ge1xuICAgICAgbG9nX18kMihg4pScIFJ1bm5pbmcgY29tbW9uIENDIGZsb3cuLi5gLCB7IGNoZWNrb3V0UGF5bWVudE1ldGhvZCB9KTtcbiAgICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBBcnJheS5mcm9tKGNvbnRleHQuY2RlQ29ubmVjdGlvbnMudmFsdWVzKCkpWzBdO1xuICAgICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgICBsb2dfXyQyKGDilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzIFtNb2RlOiAke3ByZWZpbGwubW9kZX1dYCk7XG4gICAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0Mobm9uQ2RlRm9ybUlucHV0cywgZmxvd0NhbGxiYWNrcy5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgICBsb2dfXyQyKGDilJwgVG9rZW5pemluZyBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke2NvbnRleHQuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgICAgY29uc3QgdG9rZW5pemVDYXJkUmVzdWx0cyA9IGF3YWl0IHRva2VuaXplQ2FyZE9uQWxsQ29ubmVjdGlvbnMoY29udGV4dC5jZGVDb25uZWN0aW9ucywge1xuICAgICAgICBzZXNzaW9uX2lkOiBjb250ZXh0LmVsZW1lbnRzU2Vzc2lvbklkXG4gICAgICB9KTtcbiAgICAgIHZhbGlkYXRlVG9rZW5pemVDYXJkUmVzdWx0cyh0b2tlbml6ZUNhcmRSZXN1bHRzLCBmbG93Q2FsbGJhY2tzLm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICAgIGNvbnN0IGNvbW1vbkNoZWNrb3V0UGFyYW1zID0ge1xuICAgICAgICBzZXNzaW9uX2lkOiBjb250ZXh0LmVsZW1lbnRzU2Vzc2lvbklkLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICBub25fY2RlX2Zvcm1fZmllbGRzOiBub25DZGVGb3JtRmllbGRzXG4gICAgICB9O1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgICAgbG9nX18kMihg4pScIFNldHRpbmcgdXAgcGF5bWVudCBtZXRob2QgaW4gQ0RFIFtUb2tlbjogJHtwcmVmaWxsLnRva2VufV1gKTtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzZXR1cENoZWNrb3V0KGFueUNkZUNvbm5lY3Rpb24sIGNvbW1vbkNoZWNrb3V0UGFyYW1zKTtcbiAgICAgICAgICBsb2dfXyQyKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7cmVzdWx0LnBheW1lbnRfbWV0aG9kX2lkfV1gKTtcbiAgICAgICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdCB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZ19fJDIoYOKUnCBJbml0aWFsIGNoZWNrb3V0IGZsb3cuIENoZWNraW5nIG91dCBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke2NvbnRleHQuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNoZWNrb3V0Q2FyZEVsZW1lbnRzKGFueUNkZUNvbm5lY3Rpb24sIGNvbW1vbkNoZWNrb3V0UGFyYW1zKTtcbiAgICAgICAgICBsb2dfXyQyKGDilbAgQ2hlY2tvdXQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5gKTtcbiAgICAgICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdCB9O1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBDZGVFcnJvcikge1xuICAgICAgICAgIGlmIChlcnJvci5vcmlnaW5hbEVycm9yTWVzc2FnZSA9PT0gXCIzRFNfUkVRVUlSRURcIikge1xuICAgICAgICAgICAgbG9nX18kMihg4pScIENhcmQgcmVxdWlyZXMgM0RTLCBzdGFydGluZyBub24tbGVnYWN5IHBheW1lbnQgZmxvd2ApO1xuICAgICAgICAgICAgY29uc3Qgc2hvdWxkVXNlTmV3RmxvdyA9IGVycm9yLnJlc3BvbnNlLmhlYWRlcnM/LltcIm9wLXNob3VsZC11c2UtbmV3LWZsb3dcIl0gPT09IFwidHJ1ZVwiO1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRQZlJlc3VsdCA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3dGb3JDQyhhbnlDZGVDb25uZWN0aW9uLCBjb21tb25DaGVja291dFBhcmFtcyk7XG4gICAgICAgICAgICBsb2dfXyQyKGDilJwgb3Atc2hvdWxkLXVzZS1uZXctZmxvdzogJHtzaG91bGRVc2VOZXdGbG93fWApO1xuICAgICAgICAgICAgbG9nX18kMihg4pScIFBheW1lbnQgZmxvdyByZXN1bHQ6YCwgc3RhcnRQZlJlc3VsdCk7XG4gICAgICAgICAgICBpZiAoc2hvdWxkVXNlTmV3Rmxvdykge1xuICAgICAgICAgICAgICBhd2FpdCBjb21tb25DQzNEU0Zsb3coc3RhcnRQZlJlc3VsdCwgY29udGV4dC5iYXNlVXJsKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGF3YWl0IHN0cmlwZUNDM0RTRmxvdyhzdGFydFBmUmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICAgICAgICBsb2dfXyQyKGDilJwgQ29uZmlybWluZyBwYXltZW50IGZsb3cgW2NjX3BtX2lkOiAke3N0YXJ0UGZSZXN1bHQuY2NfcG1faWR9XWApO1xuICAgICAgICAgICAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgICAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IHN0YXJ0UGZSZXN1bHQuY2NfcG1faWRcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGxvZ19fJDIoYOKUnCBDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHQgcmVjZWl2ZWQgUmVzdWx0OmAsIGNvbmZpcm1SZXN1bHQpO1xuICAgICAgICAgICAgICBjb25zdCBjcmVhdGVkUGF5bWVudE1ldGhvZCA9IHBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UoY29uZmlybVJlc3VsdCk7XG4gICAgICAgICAgICAgIGxvZ19fJDIoYOKVsCBTZXR1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IFtQTSBJRDogJHtjcmVhdGVkUGF5bWVudE1ldGhvZC5wYXltZW50X21ldGhvZF9pZH1dYCk7XG4gICAgICAgICAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBjcmVhdGVkUGF5bWVudE1ldGhvZCB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbG9nX18kMihg4pScIENoZWNraW5nIG91dCBhZnRlciAzRFMgZmxvdyBbRmxvdzogJHtzaG91bGRVc2VOZXdGbG93ID8gXCJuZXdcIiA6IFwibGVnYWN5XCJ9XWApO1xuICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjaGVja291dENhcmRFbGVtZW50cyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgICAgICAgICAgLi4uY29tbW9uQ2hlY2tvdXRQYXJhbXMsXG4gICAgICAgICAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IHN0YXJ0UGZSZXN1bHQuY2NfcG1faWQsXG4gICAgICAgICAgICAgICAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogIXNob3VsZFVzZU5ld0Zsb3dcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGxvZ19fJDIoYOKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LmApO1xuICAgICAgICAgICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdCB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlcnJfXyQyKGDilbAgRXJyb3IgY2hlY2tpbmcgb3V0IGNhcmQgaW5mbyBpbiBDREVgKTtcbiAgICAgICAgZXJyX18kMihlcnJvcik7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgKTtcbiAgY29uc3QgcGFyc2VTdHJpcGUzRFNOZXh0QWN0aW9uTWV0YWRhdGEgPSAocmVzcG9uc2UpID0+IHtcbiAgICBjb25zdCBzdHJpcGVBY3Rpb24gPSByZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gXCJzdHJpcGVfM2RzXCIpO1xuICAgIGlmICghc3RyaXBlQWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzdHJpcGUgM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIFN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YS5wYXJzZShzdHJpcGVBY3Rpb24pO1xuICB9O1xuICBjb25zdCBwYXJzZUNvbW1vbjNEU05leHRBY3Rpb25NZXRhZGF0YSA9IChyZXNwb25zZSkgPT4ge1xuICAgIGNvbnN0IGNvbW1vbkFjdGlvbiA9IHJlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKChhY3Rpb24pID0+IGFjdGlvbi50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIik7XG4gICAgaWYgKCFjb21tb25BY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbW1vbiAzRFMgYWN0aW9uIGZvdW5kXCIpO1xuICAgIH1cbiAgICByZXR1cm4gQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhLnBhcnNlKGNvbW1vbkFjdGlvbik7XG4gIH07XG4gIGNvbnN0IGNvbW1vbkNDM0RTRmxvdyA9IGFzeW5jIChzdGFydFBmUmVzdWx0LCBiYXNlVXJsKSA9PiB7XG4gICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gcGFyc2VDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEoc3RhcnRQZlJlc3VsdCk7XG4gICAgbG9nX18kMihg4pScIFVzaW5nIGNvbW1vbiAzRFMgZmxvdyBbVVJMOiAke25leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmx9XWApO1xuICAgIGNvbnN0IHN0YXR1cyA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHsgdXJsOiBuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsLCBiYXNlVXJsIH0pO1xuICAgIGxvZ19fJDIoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3N0YXR1c31dYCk7XG4gICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5DQU5DRUxMRUQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICAgIH1cbiAgICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkZBSUxVUkUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgIH1cbiAgfTtcbiAgY29uc3Qgc3RyaXBlQ0MzRFNGbG93ID0gYXN5bmMgKHN0YXJ0UGZSZXN1bHQpID0+IHtcbiAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBwYXJzZVN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YShzdGFydFBmUmVzdWx0KTtcbiAgICBzdHJpcGVMb2dfXyhg4pScIFVzaW5nIHN0cmlwZSAzRFMgZmxvdyBbQ2xpZW50IFNlY3JldDogJHtuZXh0QWN0aW9uTWV0YWRhdGEuY2xpZW50X3NlY3JldC5zdWJzdHJpbmcoMCwgOCl9Li4uXWApO1xuICAgIGF3YWl0IGxhdW5jaFN0cmlwZTNEU0RpYWxvZ0Zsb3cobmV4dEFjdGlvbk1ldGFkYXRhKTtcbiAgICBzdHJpcGVMb2dfXyhcIuKVsCBTdHJpcGUgM0RTIGZsb3cgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVwiKTtcbiAgfTtcblxuICBjb25zdCB7IGxvZ19fOiBsb2dfXyQxLCBlcnJfXzogZXJyX18kMSB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJzdHJpcGUtcHJcIik7XG4gIGNvbnN0IFN0cmlwZVByQ3BtID0gem9kLnoub2JqZWN0KHtcbiAgICBwcm92aWRlcjogem9kLnoudW5pb24oW3pvZC56LmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksIHpvZC56LmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpXSksXG4gICAgcHJvY2Vzc29yX25hbWU6IHpvZC56LmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gICAgbWV0YWRhdGE6IHpvZC56Lm9iamVjdCh7XG4gICAgICBzdHJpcGVfcGs6IHpvZC56LnN0cmluZygpXG4gICAgfSlcbiAgfSk7XG4gIGNvbnN0IGluaXRTdHJpcGVQckZsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICAgIGFzeW5jICh7IGNvbnRleHQgfSkgPT4ge1xuICAgICAgbG9nX18kMShgQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgUFIuLi5gKTtcbiAgICAgIGNvbnN0IGNoZWNrb3V0UGF5bWVudE1ldGhvZCA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBTdHJpcGVQckNwbSk7XG4gICAgICBsb2dfXyQxKGBJbml0aWFsaXppbmcgU3RyaXBlIFBSIGZsb3cuLi5gKTtcbiAgICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBBcnJheS5mcm9tKGNvbnRleHQuY2RlQ29ubmVjdGlvbnMudmFsdWVzKCkpWzBdO1xuICAgICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgICAgbG9nX18kMShgR2V0dGluZyBpbml0aWFsIHByZXZpZXcgYW1vdW50YCk7XG4gICAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICAgIGNvbnN0IHByID0gYXdhaXQgY3JlYXRlU3RyaXBlUGF5bWVudFJlcXVlc3QoXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZC5tZXRhZGF0YS5zdHJpcGVfcGssXG4gICAgICAgIGluaXRpYWxQcmV2aWV3LmFtb3VudEF0b20sXG4gICAgICAgIGluaXRpYWxQcmV2aWV3LmN1cnJlbmN5LFxuICAgICAgICBpc1NldHVwTW9kZVxuICAgICAgKTtcbiAgICAgIGxvZ19fJDEoYENoZWNraW5nIGlmIGNhbiBtYWtlIHBheW1lbnRgKTtcbiAgICAgIGNvbnN0IGNhbk1ha2VQYXltZW50ID0gYXdhaXQgcHIuY2FuTWFrZVBheW1lbnQoKTtcbiAgICAgIGlmIChjYW5NYWtlUGF5bWVudCA9PT0gbnVsbCkge1xuICAgICAgICBlcnJfXyQxKGBjYW5NYWtlUGF5bWVudCByZXR1cm5lZCBudWxsYCk7XG4gICAgICAgIHJldHVybiB7IGlzQXZhaWxhYmxlOiBmYWxzZSwgcmVhc29uOiBcImNhbk1ha2VQYXltZW50IHJldHVybmVkIG51bGxcIiB9O1xuICAgICAgfVxuICAgICAgbG9nX18kMShgU3RyaXBlIFBSIGZsb3cgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5LiBDYW4gbWFrZSBwYXltZW50YCwgY2FuTWFrZVBheW1lbnQpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICAgIHByLFxuICAgICAgICBhdmFpbGFibGVQcm92aWRlcnM6IHtcbiAgICAgICAgICBhcHBsZVBheTogY2FuTWFrZVBheW1lbnQuYXBwbGVQYXksXG4gICAgICAgICAgZ29vZ2xlUGF5OiBjYW5NYWtlUGF5bWVudC5nb29nbGVQYXlcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gICk7XG4gIGNvbnN0IHJ1blN0cmlwZVByRmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICAgIGFzeW5jICh7XG4gICAgICBjb250ZXh0LFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICAgIGZsb3dDYWxsYmFja3MsXG4gICAgICBjdXN0b21QYXJhbXMsXG4gICAgICBpbml0UmVzdWx0XG4gICAgfSkgPT4ge1xuICAgICAgbG9nX18kMShgUnVubmluZyBTdHJpcGUgUFIgZmxvdy4uLmApO1xuICAgICAgaWYgKGN1c3RvbVBhcmFtcy5wcm92aWRlciAhPT0gY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvdmlkZXIgbWlzbWF0Y2guIEV4cGVjdGVkICR7Y3VzdG9tUGFyYW1zLnByb3ZpZGVyfSwgZ290ICR7Y2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyfWApO1xuICAgICAgfVxuICAgICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IEFycmF5LmZyb20oY29udGV4dC5jZGVDb25uZWN0aW9ucy52YWx1ZXMoKSlbMF07XG4gICAgICBjb25zdCBwciA9IGluaXRSZXN1bHQucHI7XG4gICAgICBsb2dfXyQxKGBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHNgKTtcbiAgICAgIGNvbnN0IGNsZWFuZWRGb3JtSW5wdXRzID0gb3ZlcnJpZGVFbXB0eVppcENvZGUobm9uQ2RlRm9ybUlucHV0cyk7XG4gICAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MoY2xlYW5lZEZvcm1JbnB1dHMsIGZsb3dDYWxsYmFja3Mub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgICAgaWYgKGN1c3RvbVBhcmFtcz8ub3ZlcnJpZGVQYXltZW50UmVxdWVzdCkge1xuICAgICAgICBjb25zdCBvdmVycmlkZSA9IGN1c3RvbVBhcmFtcy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0O1xuICAgICAgICBsb2dfXyQxKGBPdmVycmlkaW5nIFBSIGFtb3VudCB3aXRoYCwgb3ZlcnJpZGUpO1xuICAgICAgICB1cGRhdGVQcldpdGhBbW91bnQocHIsIG92ZXJyaWRlLmFtb3VudCwgb3ZlcnJpZGUucGVuZGluZyk7XG4gICAgICB9XG4gICAgICBsb2dfXyQxKGBTaG93aW5nIFBSIGRpYWxvZy4uLmApO1xuICAgICAgcHIuc2hvdygpO1xuICAgICAgY29uc3Qgc3RyaXBlUG1BZGRlZEV2ZW50ID0gYXdhaXQgd2FpdEZvclVzZXJUb0FkZFBheW1lbnRNZXRob2QocHIpO1xuICAgICAgbG9nX18kMShgUFIgZGlhbG9nIGZpbmlzaGVkLiBTdGFydGluZyBwYXltZW50IGZsb3cuLi5gKTtcbiAgICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3dGb3JQUihhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgIGZpZWxkczogbm9uQ2RlRm9ybUZpZWxkcyxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IHBhcnNlUFJOZXh0QWN0aW9uTWV0YWRhdGEoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICAgIGxvZ19fJDEoYENvbmZpcm1pbmcgUFIgd2l0aCBTdHJpcGUuLi5gKTtcbiAgICAgIGF3YWl0IGNvbmZpcm1TdHJpcGVQclBNKG5leHRBY3Rpb25NZXRhZGF0YSwgc3RyaXBlUG1BZGRlZEV2ZW50KTtcbiAgICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgIGxvZ19fJDEoYENvbmZpcm1pbmcgcGF5bWVudCBmbG93IGZvciBzZXR1cC4uLmApO1xuICAgICAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW5cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGNyZWF0ZWRQYXltZW50TWV0aG9kID0gcGFyc2VDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZShjb25maXJtUmVzdWx0KTtcbiAgICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGNyZWF0ZWRQYXltZW50TWV0aG9kIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dfXyQxKGBQZXJmb3JtaW5nIGNoZWNrb3V0Li4uYCk7XG4gICAgICAgIGNvbnN0IGNoZWNrb3V0UmVxdWVzdCA9IHtcbiAgICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgICAgcGF5bWVudF9pbnB1dDoge1xuICAgICAgICAgICAgcHJvdmlkZXJfdHlwZTogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjdXN0b21lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgICAgIGN1c3RvbWVyX3ppcF9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0sXG4gICAgICAgICAgY3VzdG9tZXJfY291bnRyeTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuQ09VTlRSWV0sXG4gICAgICAgICAgcHJvbW90aW9uX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlBST01PVElPTl9DT0RFXSxcbiAgICAgICAgICBsaW5lX2l0ZW1zOiBwcmVmaWxsLmxpbmVfaXRlbXMsXG4gICAgICAgICAgdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICAgICAgY2FuY2VsX2F0X2VuZDogZmFsc2UsXG4gICAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwZXJmb3JtQ2hlY2tvdXQoYW55Q2RlQ29ubmVjdGlvbiwgY2hlY2tvdXRSZXF1ZXN0KTtcbiAgICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQgfTtcbiAgICAgIH1cbiAgICB9XG4gICk7XG4gIGNvbnN0IG92ZXJyaWRlRW1wdHlaaXBDb2RlID0gKGZvcm1JbnB1dHMpID0+IHtcbiAgICBjb25zdCBuZXdGb3JtSW5wdXRzID0geyAuLi5mb3JtSW5wdXRzIH07XG4gICAgaWYgKCFuZXdGb3JtSW5wdXRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0pIHtcbiAgICAgIGxvZ19fJDEoYE92ZXJyaWRpbmcgZW1wdHkgemlwIGNvZGUgKG9ubHkgZm9yIGdvb2dsZSBwYXkgYW5kIGFwcGxlIHBheSlgKTtcbiAgICAgIG5ld0Zvcm1JbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSA9IFwiMDAwMDBcIjtcbiAgICB9XG4gICAgcmV0dXJuIG5ld0Zvcm1JbnB1dHM7XG4gIH07XG4gIGNvbnN0IHVwZGF0ZVByV2l0aEFtb3VudCA9IChwciwgYW1vdW50LCBpc1BlbmRpbmcpID0+IHtcbiAgICBwci51cGRhdGUoe1xuICAgICAgdG90YWw6IHtcbiAgICAgICAgYW1vdW50OiBhbW91bnQuYW1vdW50QXRvbSxcbiAgICAgICAgbGFiZWw6IFwiVG90YWxcIixcbiAgICAgICAgcGVuZGluZzogaXNQZW5kaW5nXG4gICAgICB9LFxuICAgICAgY3VycmVuY3k6IGFtb3VudC5jdXJyZW5jeVxuICAgIH0pO1xuICB9O1xuICBjb25zdCBwYXJzZVBSTmV4dEFjdGlvbk1ldGFkYXRhID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgaWYgKHJlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGggIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3Igb2NjdXJyZWQuXG5EZXRhaWxzOiBnb3QgJHtyZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RofSByZXF1aXJlZCB1c2VyIGFjdGlvbnNgKTtcbiAgICB9XG4gICAgcmV0dXJuIFBheW1lbnRSZXF1ZXN0TmV4dEFjdGlvbk1ldGFkYXRhLnBhcnNlKHJlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9uc1swXSk7XG4gIH07XG5cbiAgY29uc3QgZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdCA9IChjcG1zLCB3aXRoUHJvdmlkZXIsIHdpdGhQcm9jZXNzb3IpID0+IHtcbiAgICBjb25zdCBtYXRjaGVzID0gY3Btcy5maWx0ZXIoKGNwbSkgPT4ge1xuICAgICAgY29uc3QgbWF0Y2hlc1Byb2Nlc3NvciA9IHRydWUgO1xuICAgICAgY29uc3QgbWF0Y2hlc1Byb3ZpZGVyID0gY3BtLnByb3ZpZGVyID09PSB3aXRoUHJvdmlkZXI7XG4gICAgICByZXR1cm4gbWF0Y2hlc1Byb2Nlc3NvciAmJiBtYXRjaGVzUHJvdmlkZXI7XG4gICAgfSk7XG4gICAgaWYgKG1hdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIENQTXMgZm91bmQgd2l0aCBwcm92aWRlciAnJHt3aXRoUHJvdmlkZXJ9JyBhbmQgcHJvY2Vzc29yICcke3dpdGhQcm9jZXNzb3J9J2ApO1xuICAgIH1cbiAgICBpZiAobWF0Y2hlcy5sZW5ndGggIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTW9yZSB0aGFuIG9uZSBDUE0gZm91bmQgd2l0aCBwcm92aWRlciAnJHt3aXRoUHJvdmlkZXJ9JyBhbmQgcHJvY2Vzc29yICcke3dpdGhQcm9jZXNzb3J9J2ApO1xuICAgIH1cbiAgICByZXR1cm4gbWF0Y2hlc1swXTtcbiAgfTtcbiAgY29uc3QgT2pzRmxvd3MgPSB7XG4gICAgLy8g4pyLIE5vdGU6IEZvciBmbG93cyB0aGF0IHJlcXVpcmUgaW5pdGlhbGl6YXRpb24sIHBsZWFzZSBhZGQgdGhlbSB0byBgaW5pdC1mbG93cy50c2BcbiAgICAvLyBTdHJpcGVcbiAgICBjb21tb25DQzoge1xuICAgICAgcnVuOiBydW5Db21tb25DY0Zsb3dcbiAgICB9LFxuICAgIHN0cmlwZVBSOiB7XG4gICAgICBpbml0OiBpbml0U3RyaXBlUHJGbG93LFxuICAgICAgcnVuOiBydW5TdHJpcGVQckZsb3dcbiAgICB9XG4gICAgLy8g8J+RiSBBZGQgbW9yZSBmbG93cyBoZXJlXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgfTtcblxuICBmdW5jdGlvbiBnZXREZWZhdWx0RXhwb3J0RnJvbUNqcyAoeCkge1xuICBcdHJldHVybiB4ICYmIHguX19lc01vZHVsZSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeCwgJ2RlZmF1bHQnKSA/IHhbJ2RlZmF1bHQnXSA6IHg7XG4gIH1cblxuICB2YXIgT2JzZXJ2YWJsZSQyID0ge307XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE9ic2VydmFibGUkMiwgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxuICB9KTtcbiAgT2JzZXJ2YWJsZSQyLk9ic2VydmFibGUgPSB2b2lkIDA7XG5cbiAgLy8gPT09IFN5bWJvbCBTdXBwb3J0ID09PVxuICBjb25zdCBoYXNTeW1ib2wgPSBuYW1lID0+IEJvb2xlYW4oU3ltYm9sW25hbWVdKTtcblxuICBjb25zdCBnZXRTeW1ib2wgPSBuYW1lID0+IGhhc1N5bWJvbChuYW1lKSA/IFN5bWJvbFtuYW1lXSA6ICdAQCcgKyBuYW1lO1xuXG4gIGNvbnN0IFN5bWJvbEl0ZXJhdG9yID0gZ2V0U3ltYm9sKCdpdGVyYXRvcicpO1xuICBjb25zdCBTeW1ib2xPYnNlcnZhYmxlID0gZ2V0U3ltYm9sKCdvYnNlcnZhYmxlJyk7XG4gIGNvbnN0IFN5bWJvbFNwZWNpZXMgPSBnZXRTeW1ib2woJ3NwZWNpZXMnKTsgLy8gPT09IEFic3RyYWN0IE9wZXJhdGlvbnMgPT09XG5cbiAgZnVuY3Rpb24gZ2V0TWV0aG9kKG9iaiwga2V5KSB7XG4gICAgbGV0IHZhbHVlID0gb2JqW2tleV07XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgbmV3IFR5cGVFcnJvcih2YWx1ZSArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRTcGVjaWVzKG9iaikge1xuICAgIGxldCBjdG9yID0gb2JqLmNvbnN0cnVjdG9yO1xuXG4gICAgaWYgKGN0b3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY3RvciA9IGN0b3JbU3ltYm9sU3BlY2llc107XG5cbiAgICAgIGlmIChjdG9yID09PSBudWxsKSB7XG4gICAgICAgIGN0b3IgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGN0b3IgIT09IHVuZGVmaW5lZCA/IGN0b3IgOiBPYnNlcnZhYmxlJDE7XG4gIH1cblxuICBmdW5jdGlvbiBpc09ic2VydmFibGUoeCkge1xuICAgIHJldHVybiB4IGluc3RhbmNlb2YgT2JzZXJ2YWJsZSQxOyAvLyBTUEVDOiBCcmFuZCBjaGVja1xuICB9XG5cbiAgZnVuY3Rpb24gaG9zdFJlcG9ydEVycm9yKGUpIHtcbiAgICBpZiAoaG9zdFJlcG9ydEVycm9yLmxvZykge1xuICAgICAgaG9zdFJlcG9ydEVycm9yLmxvZyhlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBlbnF1ZXVlKGZuKSB7XG4gICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBmbigpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBob3N0UmVwb3J0RXJyb3IoZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbikge1xuICAgIGxldCBjbGVhbnVwID0gc3Vic2NyaXB0aW9uLl9jbGVhbnVwO1xuICAgIGlmIChjbGVhbnVwID09PSB1bmRlZmluZWQpIHJldHVybjtcbiAgICBzdWJzY3JpcHRpb24uX2NsZWFudXAgPSB1bmRlZmluZWQ7XG5cbiAgICBpZiAoIWNsZWFudXApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGVvZiBjbGVhbnVwID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNsZWFudXAoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCB1bnN1YnNjcmliZSA9IGdldE1ldGhvZChjbGVhbnVwLCAndW5zdWJzY3JpYmUnKTtcblxuICAgICAgICBpZiAodW5zdWJzY3JpYmUpIHtcbiAgICAgICAgICB1bnN1YnNjcmliZS5jYWxsKGNsZWFudXApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaG9zdFJlcG9ydEVycm9yKGUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNsb3NlU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbikge1xuICAgIHN1YnNjcmlwdGlvbi5fb2JzZXJ2ZXIgPSB1bmRlZmluZWQ7XG4gICAgc3Vic2NyaXB0aW9uLl9xdWV1ZSA9IHVuZGVmaW5lZDtcbiAgICBzdWJzY3JpcHRpb24uX3N0YXRlID0gJ2Nsb3NlZCc7XG4gIH1cblxuICBmdW5jdGlvbiBmbHVzaFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pIHtcbiAgICBsZXQgcXVldWUgPSBzdWJzY3JpcHRpb24uX3F1ZXVlO1xuXG4gICAgaWYgKCFxdWV1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN1YnNjcmlwdGlvbi5fcXVldWUgPSB1bmRlZmluZWQ7XG4gICAgc3Vic2NyaXB0aW9uLl9zdGF0ZSA9ICdyZWFkeSc7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHF1ZXVlLmxlbmd0aDsgKytpKSB7XG4gICAgICBub3RpZnlTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uLCBxdWV1ZVtpXS50eXBlLCBxdWV1ZVtpXS52YWx1ZSk7XG4gICAgICBpZiAoc3Vic2NyaXB0aW9uLl9zdGF0ZSA9PT0gJ2Nsb3NlZCcpIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG5vdGlmeVN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24sIHR5cGUsIHZhbHVlKSB7XG4gICAgc3Vic2NyaXB0aW9uLl9zdGF0ZSA9ICdydW5uaW5nJztcbiAgICBsZXQgb2JzZXJ2ZXIgPSBzdWJzY3JpcHRpb24uX29ic2VydmVyO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCBtID0gZ2V0TWV0aG9kKG9ic2VydmVyLCB0eXBlKTtcblxuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgJ25leHQnOlxuICAgICAgICAgIGlmIChtKSBtLmNhbGwob2JzZXJ2ZXIsIHZhbHVlKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdlcnJvcic6XG4gICAgICAgICAgY2xvc2VTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgICBpZiAobSkgbS5jYWxsKG9ic2VydmVyLCB2YWx1ZSk7ZWxzZSB0aHJvdyB2YWx1ZTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdjb21wbGV0ZSc6XG4gICAgICAgICAgY2xvc2VTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgICBpZiAobSkgbS5jYWxsKG9ic2VydmVyKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBob3N0UmVwb3J0RXJyb3IoZSk7XG4gICAgfVxuXG4gICAgaWYgKHN1YnNjcmlwdGlvbi5fc3RhdGUgPT09ICdjbG9zZWQnKSBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7ZWxzZSBpZiAoc3Vic2NyaXB0aW9uLl9zdGF0ZSA9PT0gJ3J1bm5pbmcnKSBzdWJzY3JpcHRpb24uX3N0YXRlID0gJ3JlYWR5JztcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uTm90aWZ5KHN1YnNjcmlwdGlvbiwgdHlwZSwgdmFsdWUpIHtcbiAgICBpZiAoc3Vic2NyaXB0aW9uLl9zdGF0ZSA9PT0gJ2Nsb3NlZCcpIHJldHVybjtcblxuICAgIGlmIChzdWJzY3JpcHRpb24uX3N0YXRlID09PSAnYnVmZmVyaW5nJykge1xuICAgICAgc3Vic2NyaXB0aW9uLl9xdWV1ZS5wdXNoKHtcbiAgICAgICAgdHlwZSxcbiAgICAgICAgdmFsdWVcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHN1YnNjcmlwdGlvbi5fc3RhdGUgIT09ICdyZWFkeScpIHtcbiAgICAgIHN1YnNjcmlwdGlvbi5fc3RhdGUgPSAnYnVmZmVyaW5nJztcbiAgICAgIHN1YnNjcmlwdGlvbi5fcXVldWUgPSBbe1xuICAgICAgICB0eXBlLFxuICAgICAgICB2YWx1ZVxuICAgICAgfV07XG4gICAgICBlbnF1ZXVlKCgpID0+IGZsdXNoU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbikpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG5vdGlmeVN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24sIHR5cGUsIHZhbHVlKTtcbiAgfVxuXG4gIGNsYXNzIFN1YnNjcmlwdGlvbiB7XG4gICAgY29uc3RydWN0b3Iob2JzZXJ2ZXIsIHN1YnNjcmliZXIpIHtcbiAgICAgIC8vIEFTU0VSVDogb2JzZXJ2ZXIgaXMgYW4gb2JqZWN0XG4gICAgICAvLyBBU1NFUlQ6IHN1YnNjcmliZXIgaXMgY2FsbGFibGVcbiAgICAgIHRoaXMuX2NsZWFudXAgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9vYnNlcnZlciA9IG9ic2VydmVyO1xuICAgICAgdGhpcy5fcXVldWUgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9zdGF0ZSA9ICdpbml0aWFsaXppbmcnO1xuICAgICAgbGV0IHNlbGYgPSB0aGlzO1xuICAgICAgbGV0IHN1YnNjcmlwdGlvbk9ic2VydmVyID0ge1xuICAgICAgICBnZXQgY2xvc2VkKCkge1xuICAgICAgICAgIHJldHVybiBzZWxmLl9zdGF0ZSA9PT0gJ2Nsb3NlZCc7XG4gICAgICAgIH0sXG5cbiAgICAgICAgbmV4dCh2YWx1ZSkge1xuICAgICAgICAgIG9uTm90aWZ5KHNlbGYsICduZXh0JywgdmFsdWUpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGVycm9yKHZhbHVlKSB7XG4gICAgICAgICAgb25Ob3RpZnkoc2VsZiwgJ2Vycm9yJywgdmFsdWUpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGNvbXBsZXRlKCkge1xuICAgICAgICAgIG9uTm90aWZ5KHNlbGYsICdjb21wbGV0ZScpO1xuICAgICAgICB9XG5cbiAgICAgIH07XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuX2NsZWFudXAgPSBzdWJzY3JpYmVyLmNhbGwodW5kZWZpbmVkLCBzdWJzY3JpcHRpb25PYnNlcnZlcik7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHN1YnNjcmlwdGlvbk9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fc3RhdGUgPT09ICdpbml0aWFsaXppbmcnKSB0aGlzLl9zdGF0ZSA9ICdyZWFkeSc7XG4gICAgfVxuXG4gICAgZ2V0IGNsb3NlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zdGF0ZSA9PT0gJ2Nsb3NlZCc7XG4gICAgfVxuXG4gICAgdW5zdWJzY3JpYmUoKSB7XG4gICAgICBpZiAodGhpcy5fc3RhdGUgIT09ICdjbG9zZWQnKSB7XG4gICAgICAgIGNsb3NlU3Vic2NyaXB0aW9uKHRoaXMpO1xuICAgICAgICBjbGVhbnVwU3Vic2NyaXB0aW9uKHRoaXMpO1xuICAgICAgfVxuICAgIH1cblxuICB9XG5cbiAgbGV0IE9ic2VydmFibGUkMSA9IGNsYXNzIE9ic2VydmFibGUge1xuICAgIGNvbnN0cnVjdG9yKHN1YnNjcmliZXIpIHtcbiAgICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignT2JzZXJ2YWJsZSBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24nKTtcbiAgICAgIGlmICh0eXBlb2Ygc3Vic2NyaWJlciAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgbmV3IFR5cGVFcnJvcignT2JzZXJ2YWJsZSBpbml0aWFsaXplciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgICAgIHRoaXMuX3N1YnNjcmliZXIgPSBzdWJzY3JpYmVyO1xuICAgIH1cblxuICAgIHN1YnNjcmliZShvYnNlcnZlcikge1xuICAgICAgaWYgKHR5cGVvZiBvYnNlcnZlciAhPT0gJ29iamVjdCcgfHwgb2JzZXJ2ZXIgPT09IG51bGwpIHtcbiAgICAgICAgb2JzZXJ2ZXIgPSB7XG4gICAgICAgICAgbmV4dDogb2JzZXJ2ZXIsXG4gICAgICAgICAgZXJyb3I6IGFyZ3VtZW50c1sxXSxcbiAgICAgICAgICBjb21wbGV0ZTogYXJndW1lbnRzWzJdXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKG9ic2VydmVyLCB0aGlzLl9zdWJzY3JpYmVyKTtcbiAgICB9XG5cbiAgICBmb3JFYWNoKGZuKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoZm4gKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJykpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHN1YnNjcmlwdGlvbiA9IHRoaXMuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0KHZhbHVlKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBmbih2YWx1ZSwgZG9uZSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcblxuICAgICAgICAgIGVycm9yOiByZWplY3QsXG4gICAgICAgICAgY29tcGxldGU6IHJlc29sdmVcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBtYXAoZm4pIHtcbiAgICAgIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHRocm93IG5ldyBUeXBlRXJyb3IoZm4gKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgICBsZXQgQyA9IGdldFNwZWNpZXModGhpcyk7XG4gICAgICByZXR1cm4gbmV3IEMob2JzZXJ2ZXIgPT4gdGhpcy5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0KHZhbHVlKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhbHVlID0gZm4odmFsdWUpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBvYnNlcnZlci5lcnJvcihlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBvYnNlcnZlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgfSxcblxuICAgICAgICBlcnJvcihlKSB7XG4gICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgY29tcGxldGUoKSB7XG4gICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgZmlsdGVyKGZuKSB7XG4gICAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgVHlwZUVycm9yKGZuICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xuICAgICAgbGV0IEMgPSBnZXRTcGVjaWVzKHRoaXMpO1xuICAgICAgcmV0dXJuIG5ldyBDKG9ic2VydmVyID0+IHRoaXMuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dCh2YWx1ZSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoIWZuKHZhbHVlKSkgcmV0dXJuO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBvYnNlcnZlci5lcnJvcihlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBvYnNlcnZlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgfSxcblxuICAgICAgICBlcnJvcihlKSB7XG4gICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgY29tcGxldGUoKSB7XG4gICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgcmVkdWNlKGZuKSB7XG4gICAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgVHlwZUVycm9yKGZuICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xuICAgICAgbGV0IEMgPSBnZXRTcGVjaWVzKHRoaXMpO1xuICAgICAgbGV0IGhhc1NlZWQgPSBhcmd1bWVudHMubGVuZ3RoID4gMTtcbiAgICAgIGxldCBoYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgbGV0IHNlZWQgPSBhcmd1bWVudHNbMV07XG4gICAgICBsZXQgYWNjID0gc2VlZDtcbiAgICAgIHJldHVybiBuZXcgQyhvYnNlcnZlciA9PiB0aGlzLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQodmFsdWUpIHtcbiAgICAgICAgICBsZXQgZmlyc3QgPSAhaGFzVmFsdWU7XG4gICAgICAgICAgaGFzVmFsdWUgPSB0cnVlO1xuXG4gICAgICAgICAgaWYgKCFmaXJzdCB8fCBoYXNTZWVkKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBhY2MgPSBmbihhY2MsIHZhbHVlKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhY2MgPSB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgZXJyb3IoZSkge1xuICAgICAgICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGNvbXBsZXRlKCkge1xuICAgICAgICAgIGlmICghaGFzVmFsdWUgJiYgIWhhc1NlZWQpIHJldHVybiBvYnNlcnZlci5lcnJvcihuZXcgVHlwZUVycm9yKCdDYW5ub3QgcmVkdWNlIGFuIGVtcHR5IHNlcXVlbmNlJykpO1xuICAgICAgICAgIG9ic2VydmVyLm5leHQoYWNjKTtcbiAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBhc3luYyBhbGwoKSB7XG4gICAgICBsZXQgdmFsdWVzID0gW107XG4gICAgICBhd2FpdCB0aGlzLmZvckVhY2godmFsdWUgPT4gdmFsdWVzLnB1c2godmFsdWUpKTtcbiAgICAgIHJldHVybiB2YWx1ZXM7XG4gICAgfVxuXG4gICAgY29uY2F0KC4uLnNvdXJjZXMpIHtcbiAgICAgIGxldCBDID0gZ2V0U3BlY2llcyh0aGlzKTtcbiAgICAgIHJldHVybiBuZXcgQyhvYnNlcnZlciA9PiB7XG4gICAgICAgIGxldCBzdWJzY3JpcHRpb247XG4gICAgICAgIGxldCBpbmRleCA9IDA7XG5cbiAgICAgICAgZnVuY3Rpb24gc3RhcnROZXh0KG5leHQpIHtcbiAgICAgICAgICBzdWJzY3JpcHRpb24gPSBuZXh0LnN1YnNjcmliZSh7XG4gICAgICAgICAgICBuZXh0KHYpIHtcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCh2KTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGVycm9yKGUpIHtcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZSk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBjb21wbGV0ZSgpIHtcbiAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSBzb3VyY2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0YXJ0TmV4dChDLmZyb20oc291cmNlc1tpbmRleCsrXSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXJ0TmV4dCh0aGlzKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICBpZiAoc3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmbGF0TWFwKGZuKSB7XG4gICAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgVHlwZUVycm9yKGZuICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xuICAgICAgbGV0IEMgPSBnZXRTcGVjaWVzKHRoaXMpO1xuICAgICAgcmV0dXJuIG5ldyBDKG9ic2VydmVyID0+IHtcbiAgICAgICAgbGV0IHN1YnNjcmlwdGlvbnMgPSBbXTtcbiAgICAgICAgbGV0IG91dGVyID0gdGhpcy5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQodmFsdWUpIHtcbiAgICAgICAgICAgIGlmIChmbikge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gZm4odmFsdWUpO1xuICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBpbm5lciA9IEMuZnJvbSh2YWx1ZSkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgbmV4dCh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgIGVycm9yKGUpIHtcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcihlKTtcbiAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICBjb21wbGV0ZSgpIHtcbiAgICAgICAgICAgICAgICBsZXQgaSA9IHN1YnNjcmlwdGlvbnMuaW5kZXhPZihpbm5lcik7XG4gICAgICAgICAgICAgICAgaWYgKGkgPj0gMCkgc3Vic2NyaXB0aW9ucy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgY29tcGxldGVJZkRvbmUoKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbnMucHVzaChpbm5lcik7XG4gICAgICAgICAgfSxcblxuICAgICAgICAgIGVycm9yKGUpIHtcbiAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBjb21wbGV0ZSgpIHtcbiAgICAgICAgICAgIGNvbXBsZXRlSWZEb25lKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZ1bmN0aW9uIGNvbXBsZXRlSWZEb25lKCkge1xuICAgICAgICAgIGlmIChvdXRlci5jbG9zZWQgJiYgc3Vic2NyaXB0aW9ucy5sZW5ndGggPT09IDApIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgIHN1YnNjcmlwdGlvbnMuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gICAgICAgICAgb3V0ZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIFtTeW1ib2xPYnNlcnZhYmxlXSgpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tKHgpIHtcbiAgICAgIGxldCBDID0gdHlwZW9mIHRoaXMgPT09ICdmdW5jdGlvbicgPyB0aGlzIDogT2JzZXJ2YWJsZTtcbiAgICAgIGlmICh4ID09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoeCArICcgaXMgbm90IGFuIG9iamVjdCcpO1xuICAgICAgbGV0IG1ldGhvZCA9IGdldE1ldGhvZCh4LCBTeW1ib2xPYnNlcnZhYmxlKTtcblxuICAgICAgaWYgKG1ldGhvZCkge1xuICAgICAgICBsZXQgb2JzZXJ2YWJsZSA9IG1ldGhvZC5jYWxsKHgpO1xuICAgICAgICBpZiAoT2JqZWN0KG9ic2VydmFibGUpICE9PSBvYnNlcnZhYmxlKSB0aHJvdyBuZXcgVHlwZUVycm9yKG9ic2VydmFibGUgKyAnIGlzIG5vdCBhbiBvYmplY3QnKTtcbiAgICAgICAgaWYgKGlzT2JzZXJ2YWJsZShvYnNlcnZhYmxlKSAmJiBvYnNlcnZhYmxlLmNvbnN0cnVjdG9yID09PSBDKSByZXR1cm4gb2JzZXJ2YWJsZTtcbiAgICAgICAgcmV0dXJuIG5ldyBDKG9ic2VydmVyID0+IG9ic2VydmFibGUuc3Vic2NyaWJlKG9ic2VydmVyKSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChoYXNTeW1ib2woJ2l0ZXJhdG9yJykpIHtcbiAgICAgICAgbWV0aG9kID0gZ2V0TWV0aG9kKHgsIFN5bWJvbEl0ZXJhdG9yKTtcblxuICAgICAgICBpZiAobWV0aG9kKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBDKG9ic2VydmVyID0+IHtcbiAgICAgICAgICAgIGVucXVldWUoKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAob2JzZXJ2ZXIuY2xvc2VkKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiBtZXRob2QuY2FsbCh4KSkge1xuICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoaXRlbSk7XG4gICAgICAgICAgICAgICAgaWYgKG9ic2VydmVyLmNsb3NlZCkgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHgpKSB7XG4gICAgICAgIHJldHVybiBuZXcgQyhvYnNlcnZlciA9PiB7XG4gICAgICAgICAgZW5xdWV1ZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAob2JzZXJ2ZXIuY2xvc2VkKSByZXR1cm47XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeC5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHhbaV0pO1xuICAgICAgICAgICAgICBpZiAob2JzZXJ2ZXIuY2xvc2VkKSByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHggKyAnIGlzIG5vdCBvYnNlcnZhYmxlJyk7XG4gICAgfVxuXG4gICAgc3RhdGljIG9mKC4uLml0ZW1zKSB7XG4gICAgICBsZXQgQyA9IHR5cGVvZiB0aGlzID09PSAnZnVuY3Rpb24nID8gdGhpcyA6IE9ic2VydmFibGU7XG4gICAgICByZXR1cm4gbmV3IEMob2JzZXJ2ZXIgPT4ge1xuICAgICAgICBlbnF1ZXVlKCgpID0+IHtcbiAgICAgICAgICBpZiAob2JzZXJ2ZXIuY2xvc2VkKSByZXR1cm47XG5cbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBvYnNlcnZlci5uZXh0KGl0ZW1zW2ldKTtcbiAgICAgICAgICAgIGlmIChvYnNlcnZlci5jbG9zZWQpIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXQgW1N5bWJvbFNwZWNpZXNdKCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gIH07XG5cbiAgT2JzZXJ2YWJsZSQyLk9ic2VydmFibGUgPSBPYnNlcnZhYmxlJDE7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPYnNlcnZhYmxlJDEsIFN5bWJvbCgnZXh0ZW5zaW9ucycpLCB7XG4gICAgdmFsdWU6IHtcbiAgICAgIHN5bWJvbDogU3ltYm9sT2JzZXJ2YWJsZSxcbiAgICAgIGhvc3RSZXBvcnRFcnJvclxuICAgIH0sXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pO1xuXG4gIHZhciB6ZW5PYnNlcnZhYmxlID0gT2JzZXJ2YWJsZSQyLk9ic2VydmFibGU7XG5cbiAgY29uc3QgT2JzZXJ2YWJsZSA9IC8qQF9fUFVSRV9fKi9nZXREZWZhdWx0RXhwb3J0RnJvbUNqcyh6ZW5PYnNlcnZhYmxlKTtcblxuICBjb25zdCB7IGxvZ19fLCBlcnJfXyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJpbml0LWZsb3dzXCIpO1xuICBjb25zdCBpbml0aWFsaXplT2pzRmxvd3MgPSAoY29udGV4dCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICAvLyBTdHJpcGUgUFJcbiAgICAgIHN0cmlwZVBSOiBydW5Jbml0Rmxvd0FzT2JzZXJ2YWJsZShcInN0cmlwZVBSXCIsIE9qc0Zsb3dzLnN0cmlwZVBSLmluaXQoeyBjb250ZXh0IH0pKVxuICAgICAgLy8g8J+RiSBBZGQgaW5pdGlhbGl6YXRpb24gZmxvd3MgaGVyZVxuICAgIH07XG4gIH07XG4gIGNvbnN0IHJ1bkluaXRGbG93QXNPYnNlcnZhYmxlID0gKGZsb3dOYW1lLCBpbml0RmxvdykgPT4ge1xuICAgIGNvbnN0IG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXIpID0+IHtcbiAgICAgIG9ic2VydmVyLm5leHQoeyBzdGF0dXM6IFwibG9hZGluZ1wiIH0pO1xuICAgICAgaW5pdEZsb3cudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgIG9ic2VydmVyLm5leHQoeyBzdGF0dXM6IFwibG9hZGVkXCIsIHJlc3VsdCB9KTtcbiAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICBvYnNlcnZlci5uZXh0KHsgc3RhdHVzOiBcImVycm9yXCIsIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBvYnNlcnZhYmxlLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzdWx0KSA9PiB7XG4gICAgICAgIGxvZ19fKGAke2Zsb3dOYW1lfSBmbG93IHJlc3VsdGAsIHJlc3VsdCk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICBlcnJfXyhgJHtmbG93TmFtZX0gZmxvdyBpbml0aWFsaXphdGlvbiBlcnJvcjpcbiR7SlNPTi5zdHJpbmdpZnkoZXJyb3IpfWApO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gb2JzZXJ2YWJsZTtcbiAgfTtcblxuICBjb25zdCBQUl9MT0FESU5HID0ge1xuICAgIGlzTG9hZGluZzogdHJ1ZSxcbiAgICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgfVxuICB9O1xuICBjb25zdCBQUl9FUlJPUiA9IHtcbiAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICB9XG4gIH07XG5cbiAgY2xhc3MgT3BlblBheUZvcm1FdmVudEhhbmRsZXIge1xuICAgIGNvbnN0cnVjdG9yKGZvcm1JbnN0YW5jZSkge1xuICAgICAgdGhpcy5mb3JtSW5zdGFuY2UgPSBmb3JtSW5zdGFuY2U7XG4gICAgICB0aGlzLmNvbmZpZyA9IGZvcm1JbnN0YW5jZS5jb25maWc7XG4gICAgICB0aGlzLmZvcm1JZCA9IGZvcm1JbnN0YW5jZS5mb3JtSWQ7XG4gICAgICB0aGlzLmV2ZW50VGFyZ2V0cyA9IHt9O1xuICAgICAgdGhpcy5ub25jZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuICAgIH1cbiAgICBoYW5kbGVNZXNzYWdlKGV2ZW50KSB7XG4gICAgICBpZiAoIWV2ZW50LnNvdXJjZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHNvdXJjZSBmb3VuZGApO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50Lm9yaWdpbiAhPT0gdGhpcy5mb3JtSW5zdGFuY2UuY29uZmlnLl9mcmFtZVVybD8ub3JpZ2luKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgZXZlbnQuZGF0YSA9PT0gXCJvYmplY3RcIiAmJiBldmVudC5kYXRhW1wicGVucGFsXCJdKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGV2ZW50RGF0YSA9IHBhcnNlRXZlbnRQYXlsb2FkKEpTT04ucGFyc2UoZXZlbnQuZGF0YSkpO1xuICAgICAgY29uc3QgaXNWYWxpZCA9IHRoaXMudmFsaWRhdGVFdmVudChldmVudERhdGEpO1xuICAgICAgaWYgKCFpc1ZhbGlkKSByZXR1cm47XG4gICAgICBjb25zdCB7IGVsZW1lbnRJZCwgcGF5bG9hZCB9ID0gZXZlbnREYXRhO1xuICAgICAgY29uc3QgZXZlbnRUeXBlID0gcGF5bG9hZC50eXBlO1xuICAgICAgc3dpdGNoIChldmVudFR5cGUpIHtcbiAgICAgICAgY2FzZSBcIkxBWU9VVFwiOlxuICAgICAgICAgIHRoaXMuaGFuZGxlTGF5b3V0RXZlbnQocGF5bG9hZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJGT0NVU1wiOlxuICAgICAgICAgIHRoaXMuaGFuZGxlRm9jdXNFdmVudChlbGVtZW50SWQsIHBheWxvYWQuZWxlbWVudFR5cGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiQkxVUlwiOlxuICAgICAgICAgIHRoaXMuaGFuZGxlQmx1ckV2ZW50KGVsZW1lbnRJZCwgcGF5bG9hZC5lbGVtZW50VHlwZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJDSEFOR0VcIjpcbiAgICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZUV2ZW50KGVsZW1lbnRJZCwgcGF5bG9hZC5lbGVtZW50VHlwZSwgcGF5bG9hZC5lcnJvcnMpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTE9BREVEXCI6XG4gICAgICAgICAgdGhpcy5oYW5kbGVMb2FkZWRFdmVudChldmVudC5zb3VyY2UsIGVsZW1lbnRJZCwgcGF5bG9hZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJMT0FEX0VSUk9SXCI6XG4gICAgICAgICAgdGhpcy5oYW5kbGVMb2FkRXJyb3JFdmVudChwYXlsb2FkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlZBTElEQVRJT05fRVJST1JcIjpcbiAgICAgICAgICB0aGlzLmhhbmRsZVZhbGlkYXRpb25FcnJvckV2ZW50KHBheWxvYWQsIGVsZW1lbnRJZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHZhbGlkYXRlRXZlbnQoZXZlbnREYXRhKSB7XG4gICAgICBpZiAoZXZlbnREYXRhLmZvcm1JZCAhPT0gdGhpcy5mb3JtSW5zdGFuY2UuZm9ybUlkIHx8ICFldmVudERhdGEuZWxlbWVudElkKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm5vbmNlcy5oYXMoZXZlbnREYXRhLm5vbmNlKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB0aGlzLm5vbmNlcy5hZGQoZXZlbnREYXRhLm5vbmNlKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBoYW5kbGVMYXlvdXRFdmVudChwYXlsb2FkKSB7XG4gICAgICBjb25zdCBoZWlnaHQgPSBwYXlsb2FkLmhlaWdodCA/IGAke3BheWxvYWQuaGVpZ2h0fXB4YCA6IFwiMTAwJVwiO1xuICAgICAgdGhpcy5mb3JtSW5zdGFuY2Uuc2V0Rm9ybUhlaWdodChoZWlnaHQpO1xuICAgIH1cbiAgICBoYW5kbGVGb2N1c0V2ZW50KGVsZW1lbnRJZCwgZmllbGQpIHtcbiAgICAgIGlmICh0aGlzLmNvbmZpZy5vbkZvY3VzKSB0aGlzLmNvbmZpZy5vbkZvY3VzKGVsZW1lbnRJZCwgZmllbGQpO1xuICAgIH1cbiAgICBoYW5kbGVCbHVyRXZlbnQoZWxlbWVudElkLCBmaWVsZCkge1xuICAgICAgaWYgKHRoaXMuY29uZmlnLm9uQmx1cikgdGhpcy5jb25maWcub25CbHVyKGVsZW1lbnRJZCwgZmllbGQpO1xuICAgIH1cbiAgICBoYW5kbGVDaGFuZ2VFdmVudChlbGVtZW50SWQsIGZpZWxkLCBlcnJvcnMpIHtcbiAgICAgIGlmICh0aGlzLmNvbmZpZy5vbkNoYW5nZSkgdGhpcy5jb25maWcub25DaGFuZ2UoZWxlbWVudElkLCBmaWVsZCwgZXJyb3JzKTtcbiAgICB9XG4gICAgYXN5bmMgaGFuZGxlTG9hZGVkRXZlbnQoc291cmNlLCBlbGVtZW50SWQsIHBheWxvYWQpIHtcbiAgICAgIHRoaXMuZXZlbnRUYXJnZXRzW2VsZW1lbnRJZF0gPSBzb3VyY2U7XG4gICAgICB0aGlzLmZvcm1JbnN0YW5jZS5vbkNkZUxvYWRlZChwYXlsb2FkKTtcbiAgICAgIGlmICh0aGlzLmNvbmZpZy5vbkxvYWQpIHtcbiAgICAgICAgdGhpcy5jb25maWcub25Mb2FkKHBheWxvYWQudG90YWxBbW91bnRBdG9tcywgcGF5bG9hZC5jdXJyZW5jeSk7XG4gICAgICB9XG4gICAgfVxuICAgIGhhbmRsZUxvYWRFcnJvckV2ZW50KHBheWxvYWQpIHtcbiAgICAgIGlmICh0aGlzLmZvcm1JbnN0YW5jZS5jb25maWcub25Mb2FkRXJyb3IpIHRoaXMuZm9ybUluc3RhbmNlLmNvbmZpZy5vbkxvYWRFcnJvcihwYXlsb2FkLm1lc3NhZ2UpO1xuICAgIH1cbiAgICBoYW5kbGVWYWxpZGF0aW9uRXJyb3JFdmVudChwYXlsb2FkLCBlbGVtZW50SWQpIHtcbiAgICAgIGlmICh0aGlzLmZvcm1JbnN0YW5jZS5jb25maWcub25WYWxpZGF0aW9uRXJyb3IpIHtcbiAgICAgICAgdGhpcy5mb3JtSW5zdGFuY2UuY29uZmlnLm9uVmFsaWRhdGlvbkVycm9yKHBheWxvYWQuZWxlbWVudFR5cGUsIHBheWxvYWQuZXJyb3JzLCBlbGVtZW50SWQpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBhc3luYyBoYW5kbGVFcnJvckV2ZW50KHBheWxvYWQ6IEVycm9yRXZlbnRQYXlsb2FkKSB7XG4gICAgLy8gICBpZiAocGF5bG9hZC5tZXNzYWdlID09PSAnM0RTX1JFUVVJUkVEJykge1xuICAgIC8vICAgICBjb25zdCB0aHJlZURTVXJsID0gcGF5bG9hZC5oZWFkZXJzPy5bJ3gtM2RzLWF1dGgtdXJsJ10gPz8gU0lNVUxBVEVfM0RTX1VSTDtcbiAgICAvLyAgICAgLy8gVGhpcyB3aWxsIG9wZW4gYSBwb3B1cCBhbmQgcHJvY2VzcyB0aGUgM0RTIGZsb3dcbiAgICAvLyAgICAgLy8gd2lsbCByZXR1cm4gYSBzdGF0dXMgYHN1Y2Nlc3NgIHwgYGZhaWx1cmVgIHwgYGNhbmNlbGxlZGAgd2hpY2ggd2UgY2FuIGNvbnRpbnVlIHdpdGhcbiAgICAvLyAgICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24oeyB1cmw6IHRocmVlRFNVcmwsIGJhc2VVcmw6IHRoaXMuY29uZmlnLmJhc2VVcmwhIH0pO1xuICAgIC8vICAgICBjb25zb2xlLmxvZygn8J+UkCAzRFMgc3RhdHVzOicsIHN0YXR1cyk7XG4gICAgLy8gICAgIC8vIFRPRE86IGNvbnRpbnVlIHdpdGggc3RhdHVzXG4gICAgLy8gICAgIGNvbnN0IGNhcmRDcG0gPSB0aGlzLmZvcm1JbnN0YW5jZS5jaGVja291dFBheW1lbnRNZXRob2RzPy5maW5kKChjcG0pID0+IGNwbS5wcm92aWRlciA9PT0gJ2NyZWRpdF9jYXJkJyk7XG4gICAgLy8gICAgIGlmICghdGhpcy5mb3JtSW5zdGFuY2Uuc2Vzc2lvbklkIHx8ICF0aGlzLmZvcm1JbnN0YW5jZS5mb3JtVGFyZ2V0IHx8ICF0aGlzLmNvbmZpZy5vblZhbGlkYXRpb25FcnJvciB8fCAhY2FyZENwbSlcbiAgICAvLyAgICAgICByZXR1cm47XG4gICAgLy8gICAgIGZvciAoY29uc3QgW2VsZW1lbnRJZCwgdGFyZ2V0XSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmV2ZW50VGFyZ2V0cykpIHtcbiAgICAvLyAgICAgICBpZiAoIXRhcmdldCkgY29udGludWU7XG4gICAgLy8gICAgICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd0V2ZW50ID0gY29uc3RydWN0U3VibWl0RXZlbnRQYXlsb2FkKFxuICAgIC8vICAgICAgICAgRXZlbnRUeXBlLmVudW0uU1RBUlRfUEFZTUVOVF9GTE9XLFxuICAgIC8vICAgICAgICAgdGhpcy5mb3JtSW5zdGFuY2Uuc2Vzc2lvbklkLFxuICAgIC8vICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmZvcm1JbnN0YW5jZS5mb3JtVGFyZ2V0KSA/PyBkb2N1bWVudC5ib2R5LFxuICAgIC8vICAgICAgICAgdGhpcy5jb25maWcub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgLy8gICAgICAgICB7IC4uLmNhcmRDcG0sIHByb2Nlc3Nvcl9uYW1lOiAnc3RyaXBlJyB9LFxuICAgIC8vICAgICAgICAgZmFsc2VcbiAgICAvLyAgICAgICApO1xuICAgIC8vICAgICAgIGlmICghc3RhcnRQYXltZW50Rmxvd0V2ZW50KSBjb250aW51ZTtcbiAgICAvLyAgICAgICB0aGlzLmZvcm1JbnN0YW5jZS5jaGVja291dEZpcmVkID0gdHJ1ZTtcbiAgICAvLyAgICAgICB0aGlzLnRva2VuaXplZERhdGEgPSBzdGFydFBheW1lbnRGbG93RXZlbnQ7XG4gICAgLy8gICAgICAgdGhpcy5wb3N0RXZlbnRUb0ZyYW1lKHRhcmdldCwgZWxlbWVudElkLCBzdGFydFBheW1lbnRGbG93RXZlbnQpO1xuICAgIC8vICAgICAgIGJyZWFrO1xuICAgIC8vICAgICB9XG4gICAgLy8gICB9IGVsc2Uge1xuICAgIC8vICAgICB0aGlzLmZvcm1JbnN0YW5jZS5jaGVja291dEZpcmVkID0gZmFsc2U7XG4gICAgLy8gICAgIGlmICh0aGlzLmZvcm1JbnN0YW5jZS5jb25maWcub25DaGVja291dEVycm9yKSB0aGlzLmZvcm1JbnN0YW5jZS5jb25maWcub25DaGVja291dEVycm9yKHBheWxvYWQubWVzc2FnZSk7XG4gICAgLy8gICB9XG4gICAgLy8gfVxuICAgIC8vIGhhbmRsZUZvcm1TdWJtaXQoKSB7XG4gICAgLy8gICBpZiAoXG4gICAgLy8gICAgICF0aGlzLmZvcm1JbnN0YW5jZS5zZXNzaW9uSWQgfHxcbiAgICAvLyAgICAgIXRoaXMuZm9ybUluc3RhbmNlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHM/Lmxlbmd0aCB8fFxuICAgIC8vICAgICAhdGhpcy5jb25maWcub25WYWxpZGF0aW9uRXJyb3JcbiAgICAvLyAgICkge1xuICAgIC8vICAgICByZXR1cm47XG4gICAgLy8gICB9XG4gICAgLy8gICBjb25zdCBjYXJkQ3BtID0gdGhpcy5mb3JtSW5zdGFuY2UuY2hlY2tvdXRQYXltZW50TWV0aG9kcy5maW5kKChjcG0pID0+IGNwbS5wcm92aWRlciA9PT0gJ2NyZWRpdF9jYXJkJyk7XG4gICAgLy8gICBpZiAoIWNhcmRDcG0pIHtcbiAgICAvLyAgICAgdGhyb3cgbmV3IEVycm9yKCdDYXJkIG5vdCBhdmFpbGFibGUgYXMgYSBwYXltZW50IG1ldGhvZCBpbiBjaGVja291dCcpO1xuICAgIC8vICAgfVxuICAgIC8vICAgY29uc3QgdG9rZW5pemVEYXRhID0gY29uc3RydWN0U3VibWl0RXZlbnRQYXlsb2FkKFxuICAgIC8vICAgICBFdmVudFR5cGUuZW51bS5UT0tFTklaRSxcbiAgICAvLyAgICAgdGhpcy5mb3JtSW5zdGFuY2Uuc2Vzc2lvbklkISxcbiAgICAvLyAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmZvcm1JbnN0YW5jZS5mb3JtVGFyZ2V0KSA/PyBkb2N1bWVudC5ib2R5LFxuICAgIC8vICAgICB0aGlzLmNvbmZpZy5vblZhbGlkYXRpb25FcnJvcixcbiAgICAvLyAgICAgY2FyZENwbSxcbiAgICAvLyAgICAgZmFsc2VcbiAgICAvLyAgICk7XG4gICAgLy8gICBpZiAoIXRva2VuaXplRGF0YSkge1xuICAgIC8vICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yIGNvbnN0cnVjdGluZyB0b2tlbml6ZSBkYXRhJyk7XG4gICAgLy8gICB9XG4gICAgLy8gICBmb3IgKGNvbnN0IFtlbGVtZW50SWQsIHRhcmdldF0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5ldmVudFRhcmdldHMpKSB7XG4gICAgLy8gICAgIGlmICghdGFyZ2V0KSBjb250aW51ZTtcbiAgICAvLyAgICAgdGhpcy5wb3N0RXZlbnRUb0ZyYW1lKHRhcmdldCwgZWxlbWVudElkLCB0b2tlbml6ZURhdGEpO1xuICAgIC8vICAgfVxuICAgIC8vICAgdGhpcy50b2tlbml6ZWREYXRhID0gdG9rZW5pemVEYXRhO1xuICAgIC8vIH1cbiAgICAvLyBhc3luYyBvblVzZXJDb21wbGV0ZVBheW1lbnRSZXF1ZXN0VUkoXG4gICAgLy8gICBzdHJpcGVQbTogUGF5bWVudFJlcXVlc3RQYXltZW50TWV0aG9kRXZlbnQsXG4gICAgLy8gICBjaGVja291dFBheW1lbnRNZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZFxuICAgIC8vICk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vICAgaWYgKCF0aGlzLmNvbmZpZy5vblZhbGlkYXRpb25FcnJvciB8fCAhdGhpcy5mb3JtSW5zdGFuY2Uuc2Vzc2lvbklkIHx8ICF0aGlzLmZvcm1JbnN0YW5jZS5jaGVja291dFBheW1lbnRNZXRob2RzKVxuICAgIC8vICAgICByZXR1cm47XG4gICAgLy8gICBmb3IgKGNvbnN0IFtlbGVtZW50SWQsIGVsZW1lbnRdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuZXZlbnRUYXJnZXRzID8/IHt9KSkge1xuICAgIC8vICAgICBjb25zdCBwYXltZW50Rmxvd01ldGFkYXRhID0geyBzdHJpcGVQbUlkOiBzdHJpcGVQbS5wYXltZW50TWV0aG9kLmlkIH07XG4gICAgLy8gICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dFdmVudCA9IGNvbnN0cnVjdFN1Ym1pdEV2ZW50UGF5bG9hZChcbiAgICAvLyAgICAgICBFdmVudFR5cGUuZW51bS5TVEFSVF9QQVlNRU5UX0ZMT1csXG4gICAgLy8gICAgICAgdGhpcy5mb3JtSW5zdGFuY2Uuc2Vzc2lvbklkLFxuICAgIC8vICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5mb3JtSW5zdGFuY2UuZm9ybVRhcmdldCkgPz8gZG9jdW1lbnQuYm9keSxcbiAgICAvLyAgICAgICB0aGlzLmNvbmZpZy5vblZhbGlkYXRpb25FcnJvcixcbiAgICAvLyAgICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgLy8gICAgICAgZmFsc2UsXG4gICAgLy8gICAgICAgcGF5bWVudEZsb3dNZXRhZGF0YVxuICAgIC8vICAgICApO1xuICAgIC8vICAgICBpZiAoIXN0YXJ0UGF5bWVudEZsb3dFdmVudCkgY29udGludWU7XG4gICAgLy8gICAgIHRoaXMuc3RyaXBlUG0gPSBzdHJpcGVQbTtcbiAgICAvLyAgICAgdGhpcy5mb3JtSW5zdGFuY2UuY2hlY2tvdXRGaXJlZCA9IHRydWU7XG4gICAgLy8gICAgIHRoaXMuc2V0VG9rZW5pemVkRGF0YShzdGFydFBheW1lbnRGbG93RXZlbnQpO1xuICAgIC8vICAgICB0aGlzLnBvc3RFdmVudFRvRnJhbWUoZWxlbWVudCwgZWxlbWVudElkLCBzdGFydFBheW1lbnRGbG93RXZlbnQpO1xuICAgIC8vICAgICAvLyBlbWl0RXZlbnQoZWxlbWVudC5ub2RlLmNvbnRlbnRXaW5kb3chLCB0aGlzLmZvcm1JZCwgZWxlbWVudElkLCBzdGFydFBheW1lbnRGbG93RXZlbnQsIHRoaXMuY29uZmlnLmJhc2VVcmwhKTtcbiAgICAvLyAgICAgYnJlYWs7XG4gICAgLy8gICB9XG4gICAgLy8gfVxuICAgIHBvc3RFdmVudFRvRnJhbWUoc291cmNlLCBlbGVtZW50SWQsIGRhdGEpIHtcbiAgICAgIGVtaXRFdmVudChzb3VyY2UsIHRoaXMuZm9ybUlkLCBlbGVtZW50SWQsIGRhdGEsIHRoaXMuY29uZmlnLmJhc2VVcmwpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUNvbm5lY3Rpb24oaWZyYW1lLCBjaGlsZE9yaWdpbikge1xuICAgIGNvbnN0IGNvbm5lY3Rpb24gPSBwZW5wYWwuY29ubmVjdFRvQ2hpbGQoe1xuICAgICAgaWZyYW1lLFxuICAgICAgZGVidWc6IHRydWUsXG4gICAgICBjaGlsZE9yaWdpblxuICAgIH0pO1xuICAgIGNvbnN0IGNvbm5lY3Rpb25PYmogPSBhd2FpdCBjb25uZWN0aW9uLnByb21pc2U7XG4gICAgY29uc3QgaXNWYWxpZE9iamVjdCA9IGF3YWl0IGNoZWNrSWZWYWxpZENkZUNvbm5lY3Rpb25PYmplY3QoY29ubmVjdGlvbk9iaik7XG4gICAgaWYgKCFpc1Jlc3VsdFZhbGlkKGNvbm5lY3Rpb25PYmosIGlzVmFsaWRPYmplY3QpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEdvdCBpbnZhbGlkIENERSBjb25uZWN0aW9uIG9iamVjdGApO1xuICAgIH1cbiAgICByZXR1cm4gY29ubmVjdGlvbk9iajtcbiAgfVxuICBjbGFzcyBDb25uZWN0aW9uTWFuYWdlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICB0aGlzLmNvbm5lY3Rpb25zID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgICB9XG4gICAgYWRkQ29ubmVjdGlvbihpZCwgY29ubmVjdGlvbikge1xuICAgICAgdGhpcy5jb25uZWN0aW9ucy5zZXQoaWQsIGNvbm5lY3Rpb24pO1xuICAgIH1cbiAgICBnZXRDb25uZWN0aW9uKCkge1xuICAgICAgY29uc3QgY29ubmVjdGlvbiA9IHRoaXMuY29ubmVjdGlvbnMudmFsdWVzKCkubmV4dCgpLnZhbHVlO1xuICAgICAgaWYgKCFjb25uZWN0aW9uKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbm5lY3Rpb24gbm90IGZvdW5kXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbm5lY3Rpb247XG4gICAgfVxuICAgIGdldEFsbENvbm5lY3Rpb25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvbnM7XG4gICAgfVxuICB9XG5cbiAgY2xhc3MgT3BlblBheUZvcm0ge1xuICAgIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgICAgdGhpcy50cnlJbml0T2pzRmxvd3MgPSAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLm9qc0Zsb3dzSW5pdGlhbGl6YXRpb24gIT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmNkZUxvYWRlZFBheWxvYWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuZ2V0QWxsQ29ubmVjdGlvbnMoKS5zaXplID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub2pzRmxvd3NJbml0aWFsaXphdGlvbiA9IGluaXRpYWxpemVPanNGbG93cyh0aGlzLmNyZWF0ZU9qc0Zsb3dDb250ZXh0KCkpO1xuICAgICAgICB0aGlzLm9qc0Zsb3dzSW5pdGlhbGl6YXRpb24uc3RyaXBlUFIuc3Vic2NyaWJlKChzdGF0dXMpID0+IHRoaXMub25TdHJpcGVQUlN0YXR1c0NoYW5nZShzdGF0dXMpKTtcbiAgICAgIH07XG4gICAgICB0aGlzLm9uQ2RlTG9hZGVkID0gKHBheWxvYWQpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuY2RlTG9hZGVkUGF5bG9hZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNkZUxvYWRlZFBheWxvYWQgPSBwYXlsb2FkO1xuICAgICAgICB0aGlzLnRyeUluaXRPanNGbG93cygpO1xuICAgICAgfTtcbiAgICAgIHRoaXMub25TdHJpcGVQUlN0YXR1c0NoYW5nZSA9IChpbml0U3RhdHVzKSA9PiB7XG4gICAgICAgIGlmIChpbml0U3RhdHVzLnN0YXR1cyA9PT0gXCJsb2FkaW5nXCIpIHtcbiAgICAgICAgICB0aGlzLmNvbmZpZy5vblBheW1lbnRSZXF1ZXN0TG9hZD8uKHsgYXBwbGVfcGF5OiBQUl9MT0FESU5HLCBnb29nbGVfcGF5OiBQUl9MT0FESU5HIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGluaXRTdGF0dXMuc3RhdHVzID09PSBcImVycm9yXCIpIHtcbiAgICAgICAgICB0aGlzLmNvbmZpZy5vblBheW1lbnRSZXF1ZXN0TG9hZD8uKHsgYXBwbGVfcGF5OiBQUl9FUlJPUiwgZ29vZ2xlX3BheTogUFJfRVJST1IgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaW5pdFN0YXR1cy5zdGF0dXMgPT09IFwibG9hZGVkXCIpIHtcbiAgICAgICAgICBjb25zdCBpbml0UmVzdWx0ID0gaW5pdFN0YXR1cy5yZXN1bHQ7XG4gICAgICAgICAgY29uc3QgY2FuQXBwbGVQYXkgPSBpbml0UmVzdWx0LmlzQXZhaWxhYmxlICYmIGluaXRSZXN1bHQuYXZhaWxhYmxlUHJvdmlkZXJzLmFwcGxlUGF5O1xuICAgICAgICAgIGNvbnN0IGNhbkdvb2dsZVBheSA9IGluaXRSZXN1bHQuaXNBdmFpbGFibGUgJiYgaW5pdFJlc3VsdC5hdmFpbGFibGVQcm92aWRlcnMuZ29vZ2xlUGF5O1xuICAgICAgICAgIHRoaXMuY29uZmlnLm9uUGF5bWVudFJlcXVlc3RMb2FkPy4oe1xuICAgICAgICAgICAgYXBwbGVfcGF5OiB7XG4gICAgICAgICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBjYW5BcHBsZVBheSxcbiAgICAgICAgICAgICAgc3RhcnRGbG93OiBhc3luYyAodXNlclBhcmFtcykgPT4gY2FuQXBwbGVQYXkgPyB0aGlzLnN1Ym1pdFBheW1lbnRSZXF1ZXN0KFwiYXBwbGVfcGF5XCIsIGluaXRSZXN1bHQsIHVzZXJQYXJhbXMpIDogdm9pZCAwXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ29vZ2xlX3BheToge1xuICAgICAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgICBpc0F2YWlsYWJsZTogY2FuR29vZ2xlUGF5LFxuICAgICAgICAgICAgICBzdGFydEZsb3c6IGFzeW5jICh1c2VyUGFyYW1zKSA9PiBjYW5Hb29nbGVQYXkgPyB0aGlzLnN1Ym1pdFBheW1lbnRSZXF1ZXN0KFwiZ29vZ2xlX3BheVwiLCBpbml0UmVzdWx0LCB1c2VyUGFyYW1zKSA6IHZvaWQgMFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgdGhpcy5zdWJtaXRQYXltZW50UmVxdWVzdCA9IChwcm92aWRlciwgaW5pdFJlc3VsdCwgcGFyYW1zKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmNyZWF0ZU9qc0Zsb3dDb250ZXh0KCk7XG4gICAgICAgIHJldHVybiBPanNGbG93cy5zdHJpcGVQUi5ydW4oe1xuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0KGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgcHJvdmlkZXIpLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IHRoaXMuZ2V0Tm9uQ2RlRm9ybUlucHV0cygpLFxuICAgICAgICAgIGZsb3dDYWxsYmFja3M6IHRoaXMuY3JlYXRlT2pzRmxvd0NhbGxiYWNrcygpLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczogeyBwcm92aWRlciwgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcGFyYW1zPy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0sXG4gICAgICAgICAgaW5pdFJlc3VsdFxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBPcGVuUGF5Rm9ybS5hc3NpZ25Bc1NpbmdsZXRvbih0aGlzKTtcbiAgICAgIHRoaXMuY29uZmlnID0geyAuLi5jb25maWcsIGJhc2VVcmw6IGNvbmZpZy5iYXNlVXJsID8/IFwiaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb21cIiB9O1xuICAgICAgdGhpcy5lbGVtZW50cyA9IG51bGw7XG4gICAgICB0aGlzLmZvcm1JZCA9IGBvcGpzLWZvcm0tJHt3aW5kb3cuY3J5cHRvLnJhbmRvbVVVSUQoKX1gO1xuICAgICAgdGhpcy5yZWZlcmVyID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbjtcbiAgICAgIHRoaXMuZm9ybVRhcmdldCA9IGNvbmZpZy5mb3JtVGFyZ2V0ID8/IFwiYm9keVwiO1xuICAgICAgdGhpcy5mb3JtUHJvcGVydGllcyA9IHsgaGVpZ2h0OiBcIjFweFwiIH07XG4gICAgICB0aGlzLmNkZUxvYWRlZFBheWxvYWQgPSBudWxsO1xuICAgICAgdGhpcy5vanNGbG93c0luaXRpYWxpemF0aW9uID0gbnVsbDtcbiAgICAgIHRoaXMuY2hlY2tvdXRGaXJlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5jb25uZWN0aW9uTWFuYWdlciA9IG5ldyBDb25uZWN0aW9uTWFuYWdlcigpO1xuICAgICAgdGhpcy5ldmVudEhhbmRsZXIgPSBuZXcgT3BlblBheUZvcm1FdmVudEhhbmRsZXIodGhpcyk7XG4gICAgICB0aGlzLm9qc1ZlcnNpb24gPSBcIjAuMS42XCI7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5ldmVudEhhbmRsZXIuaGFuZGxlTWVzc2FnZS5iaW5kKHRoaXMuZXZlbnRIYW5kbGVyKSk7XG4gICAgfVxuICAgIHN0YXRpYyB7XG4gICAgICB0aGlzLm9qc0Zsb3dzID0gT2pzRmxvd3M7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFzc2lnbiB0aGUgaW5zdGFuY2UgdG8gdGhlIHdpbmRvdyBhcyBhIHNpbmdsZXRvblxuICAgICAqIEBwYXJhbSBmb3JtIC0gVGhlIE9wZW5QYXlGb3JtIGluc3RhbmNlXG4gICAgICovXG4gICAgc3RhdGljIGFzc2lnbkFzU2luZ2xldG9uKGZvcm0pIHtcbiAgICAgIGlmIChPcGVuUGF5Rm9ybS5nZXRJbnN0YW5jZSgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgaW5zdGFuY2UgYWxyZWFkeSBleGlzdHMuIE9ubHkgb25lIGluc3RhbmNlIGlzIGFsbG93ZWQuXCIpO1xuICAgICAgfVxuICAgICAgd2luZG93W1wib2pzXCJdID0gZm9ybTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgT3BlblBheUZvcm1cbiAgICAgKiBAcmV0dXJucyBUaGUgT3BlblBheUZvcm0gaW5zdGFuY2VcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0SW5zdGFuY2UoKSB7XG4gICAgICByZXR1cm4gd2luZG93W1wib2pzXCJdID8/IG51bGw7XG4gICAgfVxuICAgIGdldENvbm5lY3Rpb25NYW5hZ2VyKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvbk1hbmFnZXI7XG4gICAgfVxuICAgIHNldEZvcm1IZWlnaHQoaGVpZ2h0KSB7XG4gICAgICB0aGlzLmZvcm1Qcm9wZXJ0aWVzLmhlaWdodCA9IGhlaWdodDtcbiAgICAgIGlmICh0aGlzLmVsZW1lbnRzKSB7XG4gICAgICAgIE9iamVjdC52YWx1ZXModGhpcy5lbGVtZW50cykuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICAgIGVsZW1lbnQubm9kZS5zdHlsZS5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBjcmVhdGVFbGVtZW50KGVsZW1lbnRWYWx1ZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICBpZiAoIXRoaXMuY29uZmlnKSB0aHJvdyBuZXcgRXJyb3IoXCJPcGVuUGF5IGZvcm0gbm90IGluaXRpYWxpemVkXCIpO1xuICAgICAgY29uc3QgdHlwZSA9IEVsZW1lbnRUeXBlLnBhcnNlKGVsZW1lbnRWYWx1ZSk7XG4gICAgICBjb25zdCBmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIik7XG4gICAgICBjb25zdCBxdWVyeVN0cmluZyA9IHRoaXMuYnVpbGRRdWVyeVN0cmluZyhvcHRpb25zKTtcbiAgICAgIGZyYW1lLm5hbWUgPSBgJHt0eXBlfS1lbGVtZW50YDtcbiAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwoYC9hcHAvdjEvJHtmcmFtZS5uYW1lfWAsIHRoaXMuY29uZmlnLmJhc2VVcmwpO1xuICAgICAgdXJsLnNlYXJjaCA9IHF1ZXJ5U3RyaW5nLnRvU3RyaW5nKCk7XG4gICAgICBmcmFtZS5zcmMgPSB1cmwuaHJlZjtcbiAgICAgIHRoaXMuY29uZmlnLl9mcmFtZVVybCA9IHVybDtcbiAgICAgIGZyYW1lLnN0eWxlLmJvcmRlciA9IFwibm9uZVwiO1xuICAgICAgZnJhbWUuc3R5bGUud2lkdGggPSBcIjEwMCVcIjtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB7XG4gICAgICAgIHR5cGUsXG4gICAgICAgIG5vZGU6IGZyYW1lLFxuICAgICAgICBtb3VudDogKHNlbGVjdG9yKSA9PiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKT8uYXBwZW5kQ2hpbGQoZnJhbWUpXG4gICAgICB9O1xuICAgICAgdGhpcy5jb25uZWN0VG9FbGVtZW50KGVsZW1lbnQpO1xuICAgICAgaWYgKHRoaXMuZWxlbWVudHMpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50c1t0eXBlXSA9IGVsZW1lbnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVsZW1lbnRzID0geyBbdHlwZV06IGVsZW1lbnQgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cbiAgICBidWlsZFF1ZXJ5U3RyaW5nKG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgICAgcXVlcnlTdHJpbmcuYXBwZW5kKFwicmVmZXJlclwiLCB0aGlzLnJlZmVyZXIpO1xuICAgICAgcXVlcnlTdHJpbmcuYXBwZW5kKFwiZm9ybUlkXCIsIHRoaXMuZm9ybUlkKTtcbiAgICAgIGlmIChvcHRpb25zLnN0eWxlcykge1xuICAgICAgICBxdWVyeVN0cmluZy5hcHBlbmQoXCJzdHlsZXNcIiwgY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmcob3B0aW9ucy5zdHlsZXMpKTtcbiAgICAgIH1cbiAgICAgIHF1ZXJ5U3RyaW5nLmFwcGVuZChcInNlY3VyZVRva2VuXCIsIHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4pO1xuICAgICAgcmV0dXJuIHF1ZXJ5U3RyaW5nO1xuICAgIH1cbiAgICBjb25uZWN0VG9FbGVtZW50KGVsZW1lbnQpIHtcbiAgICAgIGNyZWF0ZUNvbm5lY3Rpb24oZWxlbWVudC5ub2RlKS50aGVuKChjb25uKSA9PiB7XG4gICAgICAgIHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuYWRkQ29ubmVjdGlvbihlbGVtZW50LnR5cGUsIGNvbm4pO1xuICAgICAgICB0aGlzLnRyeUluaXRPanNGbG93cygpO1xuICAgICAgfSkuY2F0Y2goKGVycikgPT4gdm9pZCAwKTtcbiAgICB9XG4gICAgZ2V0Rm9ybURpdigpIHtcbiAgICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuZm9ybVRhcmdldCkgPz8gZG9jdW1lbnQuYm9keTtcbiAgICB9XG4gICAgY3JlYXRlT2pzRmxvd0NvbnRleHQoKSB7XG4gICAgICBjb25zdCBjZGVDb25uZWN0aW9ucyA9IHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuZ2V0QWxsQ29ubmVjdGlvbnMoKTtcbiAgICAgIGlmICghdGhpcy5jZGVMb2FkZWRQYXlsb2FkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlJlcXVlc3RlZCBjb250ZXh0IHdoaWxlIENERSBub3QgeWV0IGxvYWRlZFwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChjZGVDb25uZWN0aW9ucy5zaXplID09PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIENERSBjb25uZWN0aW9ucyBmb3VuZFwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJhc2VVcmw6IG5ldyBVUkwodGhpcy5jb25maWcuYmFzZVVybCA/PyBGUkFNRV9CQVNFX1VSTCkub3JpZ2luLFxuICAgICAgICBmb3JtRGl2OiB0aGlzLmdldEZvcm1EaXYoKSxcbiAgICAgICAgZWxlbWVudHNTZXNzaW9uSWQ6IHRoaXMuY2RlTG9hZGVkUGF5bG9hZC5zZXNzaW9uSWQsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IHRoaXMuY2RlTG9hZGVkUGF5bG9hZC5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICBjZGVDb25uZWN0aW9uc1xuICAgICAgfTtcbiAgICB9XG4gICAgZ2V0Tm9uQ2RlRm9ybUlucHV0cygpIHtcbiAgICAgIHJldHVybiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0odGhpcy5nZXRGb3JtRGl2KCkpO1xuICAgIH1cbiAgICBjcmVhdGVPanNGbG93Q2FsbGJhY2tzKCkge1xuICAgICAgY29uc3Qgbm9PcCA9ICgpID0+IHtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvbkNoZWNrb3V0RXJyb3I6IG1ha2VDYWxsYmFja1NhZmUoXCJvbkNoZWNrb3V0RXJyb3JcIiwgdGhpcy5jb25maWcub25DaGVja291dEVycm9yID8/IG5vT3ApLFxuICAgICAgICBvbkNoZWNrb3V0U3RhcnRlZDogbWFrZUNhbGxiYWNrU2FmZShcIm9uQ2hlY2tvdXRTdGFydGVkXCIsIHRoaXMuY29uZmlnLm9uQ2hlY2tvdXRTdGFydGVkID8/IG5vT3ApLFxuICAgICAgICBvbkNoZWNrb3V0U3VjY2VzczogbWFrZUNhbGxiYWNrU2FmZShcIm9uQ2hlY2tvdXRTdWNjZXNzXCIsIHRoaXMuY29uZmlnLm9uQ2hlY2tvdXRTdWNjZXNzID8/IG5vT3ApLFxuICAgICAgICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IG1ha2VDYWxsYmFja1NhZmUoXG4gICAgICAgICAgXCJvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3NcIixcbiAgICAgICAgICB0aGlzLmNvbmZpZy5vblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3MgPz8gbm9PcFxuICAgICAgICApLFxuICAgICAgICBvblZhbGlkYXRpb25FcnJvcjogbWFrZUNhbGxiYWNrU2FmZShcIm9uVmFsaWRhdGlvbkVycm9yXCIsIHRoaXMuY29uZmlnLm9uVmFsaWRhdGlvbkVycm9yID8/IG5vT3ApXG4gICAgICB9O1xuICAgIH1cbiAgICBzdWJtaXQoKSB7XG4gICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5jcmVhdGVPanNGbG93Q29udGV4dCgpO1xuICAgICAgT2pzRmxvd3MuY29tbW9uQ0MucnVuKHtcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0KGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgXCJjcmVkaXRfY2FyZFwiKSxcbiAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogdGhpcy5nZXROb25DZGVGb3JtSW5wdXRzKCksXG4gICAgICAgIGZsb3dDYWxsYmFja3M6IHRoaXMuY3JlYXRlT2pzRmxvd0NhbGxiYWNrcygpLFxuICAgICAgICBjdXN0b21QYXJhbXM6IHZvaWQgMCxcbiAgICAgICAgLy8gVGhpcyBmbG93IHJlcXVpcmVzIG5vIGN1c3RvbSBwYXJhbXNcbiAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgIC8vIFRoaXMgZmxvdyByZXF1aXJlcyBubyBpbml0aWFsaXphdGlvblxuICAgICAgfSk7XG4gICAgfVxuICAgIG9uUGF5bWVudFJlcXVlc3RFcnJvcihlcnJNc2cpIHtcbiAgICAgIHRoaXMuY2hlY2tvdXRGaXJlZCA9IGZhbHNlO1xuICAgICAgaWYgKHRoaXMuY29uZmlnLm9uQ2hlY2tvdXRFcnJvcikgdGhpcy5jb25maWcub25DaGVja291dEVycm9yKGVyck1zZyk7XG4gICAgfVxuICAgIGRlc3Ryb3koKSB7XG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLmVsZW1lbnRzID8/IHt9KSkge1xuICAgICAgICBlbGVtZW50Lm5vZGUucmVtb3ZlKCk7XG4gICAgICB9XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5ldmVudEhhbmRsZXIuaGFuZGxlTWVzc2FnZS5iaW5kKHRoaXMuZXZlbnRIYW5kbGVyKSk7XG4gICAgfVxuICB9XG5cbiAgZXhwb3J0cy5GaWVsZE5hbWUgPSBGaWVsZE5hbWU7XG4gIGV4cG9ydHMuT3BlblBheUZvcm0gPSBPcGVuUGF5Rm9ybTtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblxufSkpOyJdLAogICJtYXBwaW5ncyI6ICJDQUFDLFNBQVVBLEVBQVFDLEVBQVMsQ0FDMUIsT0FBTyxTQUFZLFVBQVksT0FBTyxPQUFXLElBQWNBLEVBQVEsUUFBUyxRQUFRLEtBQUssRUFBRyxRQUFRLE1BQU0sRUFBRyxRQUFRLFFBQVEsRUFBRyxRQUFRLE9BQU8sQ0FBQyxFQUNwSixPQUFPLFFBQVcsWUFBYyxPQUFPLElBQU0sT0FBTyxDQUFDLFVBQVcsTUFBTyxPQUFRLFNBQVUsT0FBTyxFQUFHQSxDQUFPLEdBQ3pHRCxFQUFTLE9BQU8sV0FBZSxJQUFjLFdBQWFBLEdBQVUsS0FBTUMsRUFBUUQsRUFBTyxRQUFVLENBQUMsRUFBR0EsRUFBTyxJQUFLQSxFQUFPLEtBQU1BLEVBQU8sT0FBUUEsRUFBTyxLQUFLLEVBQzlKLEdBQUcsS0FBTyxTQUFVRSxFQUFTQyxFQUFLQyxHQUFNQyxFQUFRQyxFQUFPLENBQUUsYUFFdkQsTUFBTUMsR0FBaUIsNkJBRWpCQyxHQUE0QkwsRUFBSSxFQUFFLE9BQU8sQ0FDN0MsS0FBTUEsRUFBSSxFQUFFLE9BQU8sRUFDbkIsSUFBS0EsRUFBSSxFQUFFLE1BQU1BLEVBQUksRUFBRSxPQUFPLENBQUMsRUFDL0IsSUFBS0EsRUFBSSxFQUFFLE9BQU8sRUFDbEIsSUFBS0EsRUFBSSxFQUFFLE9BQU8sQ0FDcEIsQ0FBQyxFQUNLTSxHQUFrQ04sRUFBSSxFQUFFLE1BQU1LLEVBQXlCLEVBQ3ZFRSxHQUFnQlAsRUFBSSxFQUFFLE9BQU8sQ0FDakMsS0FBTUEsRUFBSSxFQUFFLE9BQU8sRUFDbkIsUUFBU0EsRUFBSSxFQUFFLE9BQU8sRUFDdEIsS0FBTUEsRUFBSSxFQUFFLE1BQU1BLEVBQUksRUFBRSxPQUFPLENBQUMsQ0FDbEMsQ0FBQyxFQUNLUSxHQUFpQlIsRUFBSSxFQUFFLE1BQU1PLEVBQWEsRUFDMUNFLEdBQWtDLENBQ3RDLGtCQUFtQiw0RkFDckIsRUFDTUMsRUFBMkJDLEdBQW1CLENBQ2xELE1BQU1DLEVBQU1ELEVBQWUsWUFBWSxFQUFFLEtBQUssRUFDOUMsT0FBT0YsR0FBZ0NHLENBQUcsR0FBS0QsQ0FDakQsRUFDTUUsR0FBMkJDLEdBQVEsQ0FDdkMsR0FBSSxDQUVGLE9BQU8sT0FEUSxLQUFLLE1BQU1BLENBQUcsR0FDSixRQUMzQixNQUFZLENBQ1YsTUFBTyxFQUNULENBQ0YsRUFDTUMsR0FBNENDLEdBQzVDQSxFQUFTLFNBQVcsRUFDZk4sRUFBd0JNLEVBQVMsQ0FBQyxFQUFFLEdBQUcsRUFHdkM7QUFBQSxFQURVQSxFQUFTLElBQUtDLEdBQVEsS0FBS1AsRUFBd0JPLEVBQUksR0FBRyxDQUFDLEVBQUUsRUFBRSxLQUFLO0FBQUEsQ0FBSSxDQUVyRixHQUdGQyxHQUFtQ0MsR0FFaEM7QUFBQSxFQURjQSxFQUFPLElBQUtGLEdBQVEsS0FBS0EsRUFBSSxLQUFLLEtBQUssR0FBRyxDQUFDLEtBQUtBLEVBQUksT0FBTyxFQUFFLEVBQUUsS0FBSztBQUFBLENBQUksQ0FFbkYsR0FFTkcsRUFBbUJDLEdBQU0sQ0FDN0IsR0FBSUEsYUFBYSxNQUNmLEdBQUlSLEdBQXdCUSxFQUFFLE9BQU8sRUFBRyxDQUN0QyxNQUFNQyxFQUFNLEtBQUssTUFBTUQsRUFBRSxPQUFPLEVBQ2hDLE9BQUlmLEdBQWdDLFVBQVVnQixDQUFHLEVBQUUsUUFDMUNQLEdBQXlDTyxDQUFHLEVBQzFDZCxHQUFlLFVBQVVjLENBQUcsRUFBRSxRQUNoQ0osR0FBZ0NJLENBQUcsRUFFbkNELEVBQUUsT0FFYixLQUNFLFFBQU9YLEVBQXdCVyxFQUFFLE9BQU8sRUFHNUMsR0FBSSxPQUFPQSxHQUFNLFNBQ2YsR0FBSSxDQUNGLE9BQU8sS0FBSyxVQUFVQSxDQUFDLENBQ3pCLE9BQVNFLEVBQUksQ0FDWCxPQUFPQSxFQUFLLEVBQ2QsS0FFQSxRQUFPRixFQUFJLEVBRWYsRUFDTUcsRUFBbUIsQ0FBQ0MsRUFBY0MsSUFDL0IsSUFBSUMsSUFBUyxDQUNsQixHQUFJLENBQ0YsT0FBT0QsRUFBRyxHQUFHQyxDQUFJLENBQ25CLE1BQWdCLENBQ2QsTUFDRixDQUNGLEVBR0lDLEVBQWlCNUIsRUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFHLENBQUUsUUFBUyxpQkFBa0IsQ0FBQyxFQUM1RTZCLEVBQWlCN0IsRUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUNoRDhCLEVBQW1CQyxHQUFVL0IsRUFBSSxFQUFFLFNBQVMrQixFQUFNLFNBQVMsQ0FBQyxFQUNsRSxJQUFJQyxHQUE4QkMsSUFDaENBLEVBQVcsV0FBZ0IsWUFDM0JBLEVBQVcsVUFBZSxXQUMxQkEsRUFBVyxNQUFXLFFBQ3RCQSxFQUFXLFNBQWMsVUFDekJBLEVBQVcsS0FBVSxPQUNyQkEsRUFBVyxNQUFXLFFBQ3RCQSxFQUFXLFFBQWEsVUFDeEJBLEVBQVcsUUFBYSxVQUN4QkEsRUFBVyxNQUFXLFFBQ3RCQSxFQUFXLGVBQW9CLGdCQUN4QkEsSUFDTkQsR0FBYSxDQUFDLENBQUMsRUFDbEIsTUFBTUUsRUFBZ0JsQyxFQUFJLEVBQUUsV0FBV2dDLENBQVMsRUFDaEQsSUFBSUcsSUFBcUNDLElBQ3ZDQSxFQUFrQixZQUFpQixhQUNuQ0EsRUFBa0IsWUFBaUIsYUFDbkNBLEVBQWtCLFNBQWMsVUFDekJBLElBQ05ELElBQW9CLENBQUMsQ0FBQyxFQUN6QixNQUFNRSxHQUF1QnJDLEVBQUksRUFBRSxXQUFXbUMsRUFBZ0IsRUFDeERHLEdBQWdCdEMsRUFBSSxFQUFFLE1BQU0sQ0FBQ2tDLEVBQWVHLEVBQW9CLENBQUMsRUFDdkUsSUFBSUUsSUFBb0NDLElBQ3RDQSxFQUFpQixLQUFVLE9BQzNCQSxFQUFpQixZQUFpQixjQUNsQ0EsRUFBaUIsWUFBaUIsY0FDbENBLEVBQWlCLFNBQWMsV0FDeEJBLElBQ05ELElBQW1CLENBQUMsQ0FBQyxFQUN4QixNQUFNRSxHQUFjekMsRUFBSSxFQUFFLFdBQVd1QyxFQUFlLEVBQzlDRyxFQUEwQjFDLEVBQUksRUFBRSxPQUFPLENBQzNDLFNBQVVBLEVBQUksRUFBRSxPQUFPLEVBQ3ZCLGVBQWdCOEIsRUFBZ0I5QixFQUFJLEVBQUUsT0FBTyxDQUFDLEVBQzlDLFNBQVU4QixFQUFnQjlCLEVBQUksRUFBRSxPQUFPQSxFQUFJLEVBQUUsT0FBTyxFQUFHQSxFQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FDckUsQ0FBQyxFQUNLMkMsR0FBdUIzQyxFQUFJLEVBQUUsT0FBTyxDQUN4QyxHQUFJQSxFQUFJLEVBQUUsT0FBTyxDQUNuQixDQUFDLEVBQ0RBLEVBQUksRUFBRSxPQUFPLENBQ1gsV0FBWTZCLEVBQ1osT0FBUUEsRUFDUixJQUFLQSxDQUNQLENBQUMsRUFDRDdCLEVBQUksRUFBRSxPQUFPLENBQ1gsZ0JBQWlCNkIsRUFDakIsTUFBT0EsRUFDUCxXQUFZQSxFQUNaLFNBQVVBLEVBQ1YsV0FBWUEsRUFDWixPQUFRQSxFQUNSLFFBQVNBLEVBQ1QsY0FBZUEsRUFDZixXQUFZQSxDQUNkLENBQUMsRUFDRCxNQUFNZSxFQUFZNUMsRUFBSSxFQUFFLEtBQUssQ0FFM0IsU0FDQSxTQUNBLE9BQ0EsUUFDQSxTQUNBLG1CQUNBLG1CQUNBLHVCQUNBLG1CQUNBLG1CQUNBLGFBQ0EsbUJBQ0EsaUJBQ0EsaUJBQ0EsK0JBRUEsV0FDQSxXQUNBLG9CQUNGLENBQUMsRUFDSzZDLEdBQW1CRCxFQUFVLFFBQVEsQ0FBQyxtQkFBb0Isa0JBQWtCLENBQUMsRUFDN0VFLEdBQXNCOUMsRUFBSSxFQUFFLE9BQU8sQ0FBRSxLQUFNNkMsRUFBaUIsQ0FBQyxFQUM3REUsR0FBaUJILEVBQVUsUUFBUSxDQUFDLE9BQVEsUUFBUyxRQUFRLENBQUMsRUFDOURJLEdBQW9CaEQsRUFBSSxFQUFFLE9BQU8sQ0FDckMsS0FBTStDLEdBQ04sWUFBYVYsR0FDYixPQUFRckMsRUFBSSxFQUFFLE1BQU1BLEVBQUksRUFBRSxPQUFPLENBQUMsRUFBRSxTQUFTLENBQy9DLENBQUMsRUFDS2lELEdBQWlCTCxFQUFVLFFBQVEsQ0FBQyxhQUFjLGlCQUFrQixnQkFBZ0IsQ0FBQyxFQUNyRk0sR0FBb0JsRCxFQUFJLEVBQUUsT0FBTyxDQUNyQyxLQUFNaUQsR0FDTixRQUFTckIsRUFDVCxRQUFTNUIsRUFBSSxFQUFFLE9BQU9BLEVBQUksRUFBRSxPQUFPLEVBQUdBLEVBQUksRUFBRSxPQUFPLENBQUMsRUFBRSxTQUFTLENBQ2pFLENBQUMsRUFDS21ELEdBQTJCUCxFQUFVLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxFQUNqRVEsR0FBOEJwRCxFQUFJLEVBQUUsT0FBTyxDQUMvQyxLQUFNbUQsR0FDTixZQUFhYixHQUNiLE9BQVF0QyxFQUFJLEVBQUUsTUFBTUEsRUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUNwQyxDQUFDLEVBQ0txRCxHQUFxQnJELEVBQUksRUFBRSxPQUFPLENBQ3RDLEtBQU1BLEVBQUksRUFBRSxRQUFRNEMsRUFBVSxLQUFLLE1BQU0sRUFDekMsT0FBUWhCLENBQ1YsQ0FBQyxFQUNLMEIsR0FBcUJ0RCxFQUFJLEVBQUUsT0FBTyxDQUN0QyxLQUFNQSxFQUFJLEVBQUUsUUFBUTRDLEVBQVUsS0FBSyxNQUFNLEVBQ3pDLFVBQVdoQixFQUNYLGlCQUFrQjVCLEVBQUksRUFBRSxPQUFPLEVBQy9CLFNBQVU2QixFQUNWLHVCQUF3QjdCLEVBQUksRUFBRSxNQUFNMEMsQ0FBdUIsQ0FDN0QsQ0FBQyxFQUNLYSxHQUFpQ3ZELEVBQUksRUFBRSxPQUFPLENBQ2xELEtBQU1BLEVBQUksRUFBRSxRQUFRNEMsRUFBVSxLQUFLLG9CQUFvQixFQUN2RCxtQkFBb0I1QyxFQUFJLEVBQUUsT0FBT0EsRUFBSSxFQUFFLE9BQU8sRUFBR0EsRUFBSSxFQUFFLElBQUksQ0FBQyxFQUM1RCxvQkFBcUJBLEVBQUksRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUMxQyxnQkFBaUJBLEVBQUksRUFBRSxTQUFTQSxFQUFJLEVBQUUsT0FBT0EsRUFBSSxFQUFFLE9BQU8sRUFBR0EsRUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQzNFLENBQUMsRUFDS3dELEdBQW1DeEQsRUFBSSxFQUFFLE9BQU8sQ0FDcEQsS0FBTUEsRUFBSSxFQUFFLFFBQVE0QyxFQUFVLEtBQUssNEJBQTRCLEVBQy9ELGdCQUFpQjVDLEVBQUksRUFBRSxPQUFPLENBQ2hDLENBQUMsRUFDS3lELEVBQXFCekQsRUFBSSxFQUFFLE9BQU8sQ0FDckMsVUFBK0I0QixFQUMvQixTQUE2QkEsRUFDN0IsTUFBc0JBLEVBQ3RCLFFBQTJCQSxFQUMzQixRQUEwQkEsRUFDMUIsY0FBdUNDLENBQzFDLENBQUMsRUFDSzZCLEdBQWUxRCxFQUFJLEVBQUUsT0FBTyxDQUMvQixNQUFzQjRCLEVBQ3RCLFFBQTJCQSxFQUMzQixRQUEwQkEsRUFDMUIsY0FBdUNDLENBQzFDLENBQUMsRUFDSzhCLEdBQWtCZixFQUFVLFFBQVEsQ0FBQyxXQUFZLFdBQVksb0JBQW9CLENBQUMsRUFDbEZnQixHQUFxQjVELEVBQUksRUFBRSxPQUFPLENBQ3RDLEtBQU0yRCxHQUNOLFVBQVcvQixFQUNYLHNCQUF1QmMsRUFDdkIsb0JBQXFCMUMsRUFBSSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQzFDLHFCQUFzQkEsRUFBSSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQy9DLGVBQWdCNkIsQ0FDbEIsQ0FBQyxFQUFFLE9BQU80QixFQUFtQixLQUFLLEVBQzVCSSxHQUE4QjdELEVBQUksRUFBRSxPQUFPLENBQy9DLEtBQU1BLEVBQUksRUFBRSxRQUFRNEMsRUFBVSxLQUFLLGdCQUFnQixFQUNuRCxtQkFBb0I1QyxFQUFJLEVBQUUsUUFBUSxDQUNwQyxDQUFDLEVBQ0s4RCxHQUE4QjlELEVBQUksRUFBRSxPQUFPLENBQy9DLEtBQU1BLEVBQUksRUFBRSxRQUFRNEMsRUFBVSxLQUFLLGdCQUFnQixFQUNuRCxZQUFhNUMsRUFBSSxFQUFFLE1BQU1BLEVBQUksRUFBRSxPQUFPLENBQUMsRUFDdkMsZ0JBQWlCQSxFQUFJLEVBQUUsTUFBTUEsRUFBSSxFQUFFLE9BQU8sQ0FBQyxFQUMzQyxXQUFZQSxFQUFJLEVBQUUsT0FBTyxDQUMzQixDQUFDLEVBQ0srRCxHQUFlL0QsRUFBSSxFQUFFLG1CQUFtQixPQUFRLENBQ3BEOEMsR0FDQUUsR0FDQUUsR0FDQUUsR0FDQUMsR0FDQUMsR0FDQU0sR0FDQUMsR0FDQUMsR0FDQVAsR0FDQUMsRUFDRixDQUFDLEVBQ0tRLEdBQWVoRSxFQUFJLEVBQUUsT0FBTyxDQUNoQyxRQUFTK0QsR0FDVCxNQUFPbkMsRUFDUCxPQUFRQSxFQUNSLFVBQVdBLENBQ2IsQ0FBQyxFQUNENUIsRUFBSSxFQUFFLE9BQU8sQ0FDWCxXQUFZQSxFQUFJLEVBQUUsT0FBTyxFQUN6QixTQUFVNEIsQ0FDWixDQUFDLEVBQ0Q1QixFQUFJLEVBQUUsT0FBTyxDQUNYLGFBQWNBLEVBQUksRUFBRSxPQUFPLEVBQzNCLGVBQWdCQSxFQUFJLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FDMUMsQ0FBQyxFQUNEQSxFQUFJLEVBQUUsT0FBTyxDQUNYLGFBQWNBLEVBQUksRUFBRSxPQUFPLEVBQzNCLGtCQUFtQjhCLEVBQWdCOUIsRUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUNuRCxDQUFDLEVBQ0QsTUFBTWlFLEdBQTZCakUsRUFBSSxFQUFFLE9BQU8sQ0FDOUMsZ0JBQWlCQSxFQUFJLEVBQUUsTUFBTTJDLEVBQW9CLENBQ25ELENBQUMsRUFDS3VCLEdBQXVCbEUsRUFBSSxFQUFFLE9BQU8sQ0FDeEMsWUFBYUEsRUFBSSxFQUFFLE9BQU8sRUFDMUIsT0FBUUEsRUFBSSxFQUFFLE1BQU1BLEVBQUksRUFBRSxPQUFPLENBQUMsQ0FDcEMsQ0FBQyxFQUNEQSxFQUFJLEVBQUUsT0FBTyxDQUNYLFdBQVlBLEVBQUksRUFBRSxPQUFPLENBQzNCLENBQUMsRUFDRCxNQUFNbUUsR0FBNEJuRSxFQUFJLEVBQUUsT0FBTyxDQUM3QyxRQUFTQSxFQUFJLEVBQUUsUUFBUSxFQUFLLEVBQzVCLFdBQVlBLEVBQUksRUFBRSxRQUFRLGtCQUFrQixFQUM1QyxPQUFRQSxFQUFJLEVBQUUsTUFBTWtFLEVBQW9CLENBQzFDLENBQUMsRUFDS0UsR0FBdUJwRSxFQUFJLEVBQUUsbUJBQW1CLFVBQVcsQ0FDL0RBLEVBQUksRUFBRSxPQUFPLENBQUUsUUFBU0EsRUFBSSxFQUFFLFFBQVEsRUFBSSxDQUFFLENBQUMsRUFDN0NtRSxFQUNGLENBQUMsRUFDRG5FLEVBQUksRUFBRSxPQUFPLENBQ1gsV0FBWUEsRUFBSSxFQUFFLE9BQU8sRUFDekIsd0JBQXlCMEMsRUFDekIsb0JBQXFCZSxFQUNyQiwwQkFBMkJ6RCxFQUFJLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFDcEQsa0JBQW1COEIsRUFBZ0I5QixFQUFJLEVBQUUsT0FBTyxDQUFDLENBQ25ELENBQUMsRUFDREEsRUFBSSxFQUFFLE9BQU8sQ0FDWCxXQUFZQSxFQUFJLEVBQUUsT0FBTyxFQUN6Qix3QkFBeUIwQyxFQUN6QixvQkFBcUJlLENBQ3ZCLENBQUMsRUFDRCxJQUFJWSxHQUFrQ0MsSUFDcENBLEVBQWUsUUFBYSxVQUM1QkEsRUFBZSxRQUFhLFVBQzVCQSxFQUFlLFVBQWUsWUFDdkJBLElBQ05ELEdBQWlCLENBQUMsQ0FBQyxFQUN0QixNQUFNRSxHQUF3QnZFLEVBQUksRUFBRSxPQUFPLENBQ3pDLE9BQVFBLEVBQUksRUFBRSxLQUFLLENBQUMsVUFBeUIsVUFBeUIsV0FBMkIsQ0FBQyxDQUNwRyxDQUFDLEVBQ0t3RSxHQUE4QnhFLEVBQUksRUFBRSxPQUFPLENBQy9DLEtBQU1BLEVBQUksRUFBRSxPQUFPLEVBQ25CLGFBQWNBLEVBQUksRUFBRSxPQUFPLEVBQzNCLGtCQUFtQkEsRUFBSSxFQUFFLE9BQU8sRUFDaEMsV0FBWUEsRUFBSSxFQUFFLE9BQU8sQ0FDM0IsQ0FBQyxFQUVLeUUsR0FBeUJDLEdBQVUsQ0FDdkMsTUFBTUMsRUFBaUIsQ0FBQyxFQUN4QixjQUFPLFFBQVFELENBQUssRUFBRSxRQUFRLENBQUMsQ0FBQzlELEVBQUtnRSxDQUFLLElBQU0sQ0FDOUMsR0FBSSxDQUNGLE1BQU1DLEVBQVkzQyxFQUFjLE1BQU10QixDQUFHLEVBQ3JDLE1BQU0sUUFBUWdFLENBQUssRUFDckJELEVBQWVFLENBQVMsRUFBSUQsRUFDbkIsTUFBTSxRQUFRQSxFQUFNLE9BQU8sSUFDcENELEVBQWVFLENBQVMsRUFBSUQsRUFBTSxRQUV0QyxNQUFRLENBQ04sTUFDRixDQUNGLENBQUMsRUFDTUQsQ0FDVCxFQUVNRyxHQUE4QjlFLEVBQUksRUFBRSxPQUFPLENBQy9DLFVBQVdBLEVBQUksRUFBRSxPQUFPLEVBQ3hCLGNBQWVBLEVBQUksRUFBRSxPQUFPLEVBQzVCLGFBQWNBLEVBQUksRUFBRSxPQUFPLENBQzdCLENBQUMsRUFDSytFLEdBQW1DL0UsRUFBSSxFQUFFLE9BQU8sQ0FDcEQsS0FBTUEsRUFBSSxFQUFFLE9BQU8sRUFDbkIsY0FBZUEsRUFBSSxFQUFFLE9BQU8sRUFDNUIsVUFBV0EsRUFBSSxFQUFFLE9BQU8sQ0FDMUIsQ0FBQyxFQUNLZ0YsR0FBc0IsQ0FDMUIsSUFBSyxNQUNMLElBQUssS0FDUCxFQUNNQyxFQUFrQixNQUFPQyxHQUFtQixDQUNoRCxRQUFTQyxFQUFJLEVBQUdBLEVBQUksR0FBSUEsSUFDakJDLEdBQWtCLEdBQ3JCLE1BQU1DLEdBQU0sR0FBRyxFQUduQixHQUFJLENBQUNELEdBQWtCLEVBQ3JCLE1BQU0sSUFBSSxNQUFNLHNCQUFzQixFQUd4QyxPQURlLElBQUksT0FBT0YsQ0FBYyxDQUUxQyxFQUNNSSxHQUE2QixNQUFPQyxFQUFjQyxFQUFpQkMsRUFBVUMsRUFBaUJDLElBQWUsQ0FDakgsTUFBTUMsRUFBUyxNQUFNWCxFQUFnQk0sQ0FBWSxFQUMzQ00sRUFBaUJiLEdBQW9CUyxFQUFTLFlBQVksRUFBRSxLQUFLLENBQUMsRUFjeEUsT0FidUJHLEVBQU8sZUFBZSxDQUUzQyxRQUFTLEtBQ1QsU0FBVUMsRUFDVixNQUFPLENBQ0wsTUFBTyxRQUNQLE9BQVFMLEVBQ1IsUUFBU0UsQ0FDWCxFQUNBLGlCQUFrQixHQUNsQixrQkFBbUIsR0FDbkIsZUFBZ0IsQ0FBQyxDQUNuQixDQUFDLENBRUgsRUFDTUwsR0FBU1MsR0FDTixJQUFJLFFBQVNDLEdBQVksQ0FDOUIsV0FBV0EsRUFBU0QsQ0FBUyxDQUMvQixDQUFDLEVBRUdWLEdBQW9CLElBQ2pCLFdBQVksT0FFZlksR0FBZ0MsTUFBT0MsR0FDcEMsSUFBSSxRQUFRLENBQUNGLEVBQVNHLElBQVcsQ0FDdEMsR0FBSSxDQUNGRCxFQUFlLEdBQUcsZ0JBQWlCLE1BQU9FLEdBQVEsQ0FDaERKLEVBQVFJLENBQUcsQ0FDYixDQUFDLEVBQ0RGLEVBQWUsR0FBRyxTQUFVLElBQU0sQ0FDaENDLEVBQU8sSUFBSSxNQUFNLHFEQUFxRCxDQUFDLENBQ3pFLENBQUMsQ0FDSCxPQUFTN0UsRUFBRyxDQUNWNkUsRUFBTzdFLENBQUMsQ0FDVixDQUNGLENBQUMsRUFFRytFLEdBQW9CLE1BQU9DLEVBQW9CQyxJQUFhLENBQ2hFLEdBQUksQ0FBQ0QsRUFBbUIsV0FBYSxDQUFDQSxFQUFtQixjQUN2RCxNQUFNLElBQUksTUFBTSx3Q0FBd0MsS0FBSyxVQUFVQSxDQUFrQixDQUFDLEVBQUUsRUFHOUYsTUFBTUUsRUFBZ0IsTUFEUCxNQUFNdEIsRUFBZ0JvQixFQUFtQixTQUFTLEdBQzlCLGlCQUFpQkEsRUFBbUIsY0FBZSxDQUNwRixlQUFnQkMsRUFBUyxjQUFjLEVBQ3pDLENBQUMsRUFDRCxHQUFJQyxFQUFjLE1BQ2hCLE1BQUFELEVBQVMsU0FBUyxNQUFNLEVBQ2xCLElBQUksTUFBTSxtQkFBbUJDLEVBQWMsTUFBTSxTQUFXLFNBQVMsRUFBRSxFQUU3RUQsRUFBUyxTQUFTLFNBQVMsQ0FFL0IsRUFDTUUsR0FBNEIsTUFBT0gsR0FBdUIsQ0E5WmxFLElBQUFJLEVBQUFDLEVBQUFDLEVBQUFDLEVBZ2FJLE1BQU1MLEVBQWdCLE1BRFAsTUFBTXRCLEVBQWdCb0IsRUFBbUIsU0FBUyxHQUM5QixpQkFBaUJBLEVBQW1CLGNBQWUsQ0FDcEYsZUFBZ0JBLEVBQW1CLFlBQ3JDLENBQUMsRUFDS1EsR0FBZUosRUFBQUYsRUFBYyxjQUFkLFlBQUFFLEVBQTJCLE9BQ2hELEdBQUlJLElBQWlCLFlBQW9CLE1BQUlBLElBQWlCLFdBQ3RELElBQUksTUFBTSxxREFBcUQsRUFFL0QsSUFBSSxNQUNSLEtBQUdILEVBQUFILEVBQWMsUUFBZCxZQUFBRyxFQUFxQixZQUFXRSxHQUFBRCxFQUFBSixFQUFjLGNBQWQsWUFBQUksRUFBMkIsbUJBQTNCLFlBQUFDLEVBQTZDLFVBQVcsbURBQW1ELEVBQ2hKLENBRUosRUFFTUUsR0FBOEJDLEdBQ1QsS0FBSyxVQUFVQSxDQUFNLEVBSTFDQyxHQUEyQixDQUFDQyxFQUFTQyxJQUNsQixNQUFNLEtBQUtELEVBQVEsaUJBQWlCLGFBQWEsR0FBSyxDQUFDLENBQUMsRUFDOUMsT0FBTyxDQUFDRSxFQUFLQyxJQUFVLENBQ3RELE1BQU14RyxFQUFNd0csRUFBTSxhQUFhLFdBQVcsRUFDMUMsT0FBS3hHLEVBQ0UsQ0FBRSxHQUFHdUcsRUFBSyxDQUFDdkcsQ0FBRyxFQUFHd0csRUFBTSxLQUFNLEVBRG5CRCxDQUVuQixFQUFHLENBQUMsQ0FBQyxFQUdERSxHQUFxQkMsR0FBYyxDQUN2QyxHQUFJLENBQ0YsT0FBT3RELEdBQWEsTUFBTXNELENBQVMsQ0FDckMsT0FBUzVDLEVBQU8sQ0FDZCxNQUFNQSxDQUNSLENBQ0YsRUFDTTZDLEdBQVksQ0FBQ0MsRUFBUUMsRUFBUUMsRUFBV0MsRUFBU0MsSUFBWSxDQUNqRSxNQUFNQyxFQUFRLENBQ1osUUFBQUYsRUFDQSxNQUFPMUgsR0FBSyxHQUFHLEVBQ2YsT0FBQXdILEVBQ0EsVUFBQUMsQ0FDRixFQUNBRixFQUFPLFlBQVksS0FBSyxVQUFVSyxDQUFLLEVBQUdELENBQU8sQ0FDbkQsRUFFTUUsR0FBa0MsTUFBT3hHLEdBQVEsQ0FDckQsR0FBSSxPQUFPQSxHQUFRLFVBQVksQ0FBQ0EsRUFBSyxNQUFPLEdBQzVDLEdBQUksQ0FDRixNQUFNeUcsRUFBTyxDQUFFLEtBQU0sTUFBTyxFQUN0QkMsRUFBUyxNQUFNMUcsRUFBSSxLQUFLeUcsQ0FBSSxFQUNsQyxHQUFJQyxJQUFXLEdBQ2IsTUFBTSxJQUFJLE1BQU0sbUNBQW1DLEtBQUssVUFBVUEsQ0FBTSxDQUFDLEVBQUUsRUFFN0UsTUFBTyxFQUNULE1BQVksQ0FDVixNQUFPLEVBQ1QsQ0FDRixFQUNNQyxHQUFnQixDQUFDM0csRUFBSzRHLElBQ25CLENBQUMsQ0FBQzVHLEdBQU80RyxFQUdaQyxFQUFpQnBHLEdBQVUvQixFQUFJLEVBQUUsU0FBUytCLEVBQU0sU0FBUyxDQUFDLEVBQ2hFL0IsRUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFHLENBQUUsUUFBUyxpQkFBa0IsQ0FBQyxFQUMzRCxNQUFNb0ksR0FBbUJwSSxFQUFJLEVBQUUsT0FBTyxDQUNwQyxrQkFBbUJBLEVBQUksRUFBRSxRQUFRLE9BQU8sRUFDeEMsUUFBU0EsRUFBSSxFQUFFLE9BQU8sRUFDdEIsUUFBU0EsRUFBSSxFQUFFLE9BQU9BLEVBQUksRUFBRSxPQUFPLEVBQUdBLEVBQUksRUFBRSxPQUFPLENBQUMsRUFBRSxTQUFTLENBQ2pFLENBQUMsRUFDREEsRUFBSSxFQUFFLEtBQUssQ0FBQyxNQUFPLEtBQUssQ0FBQyxFQUN6QixNQUFNcUksR0FBZ0JySSxFQUFJLEVBQUUsT0FBTyxDQUNqQyxLQUFNQSxFQUFJLEVBQUUsT0FBTyxFQUNuQixnQkFBaUJtSSxFQUFjbkksRUFBSSxFQUFFLE9BQU8sQ0FBQyxFQUM3QyxZQUFhbUksRUFBY25JLEVBQUksRUFBRSxPQUFPLENBQUMsRUFDekMsU0FBVW1JLEVBQWNuSSxFQUFJLEVBQUUsT0FBTyxDQUFDLEVBQ3RDLFNBQVVBLEVBQUksRUFBRSxPQUFPLEVBQ3ZCLG1CQUFvQm1JLEVBQWNuSSxFQUFJLEVBQUUsT0FBTyxDQUFDLENBQ2xELENBQUMsRUFDS3NJLEdBQVd0SSxFQUFJLEVBQUUsT0FBTyxDQUM1QixxQkFBc0JBLEVBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUN6QyxrQkFBbUJBLEVBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUN0QyxTQUFVQSxFQUFJLEVBQUUsT0FBTyxFQUN2QixZQUFhbUksRUFBY25JLEVBQUksRUFBRSxPQUFPLENBQUMsRUFDekMsU0FBVUEsRUFBSSxFQUFFLE9BQU8sRUFDdkIsaUJBQWtCbUksRUFBY25JLEVBQUksRUFBRSxPQUFPLENBQUMsRUFDOUMsdUJBQXdCbUksRUFBY25JLEVBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQzFELFNBQVVBLEVBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUMvQixDQUFDLEVBQ0t1SSxHQUFnQnZJLEVBQUksRUFBRSxPQUFPQSxFQUFJLEVBQUUsT0FBTyxFQUFHQSxFQUFJLEVBQUUsSUFBSSxDQUFDLEVBQ3hEd0ksR0FBUXhJLEVBQUksRUFBRSxPQUFPLENBQ3pCLEtBQU1BLEVBQUksRUFBRSxPQUFPLEVBQ25CLFNBQVVtSSxFQUFjSSxFQUFhLENBQ3ZDLENBQUMsRUFDS0UsRUFBd0J6SSxFQUFJLEVBQUUsT0FBTyxDQUN6QyxTQUFVQSxFQUFJLEVBQUUsT0FBTyxFQUN2QixlQUFnQm1JLEVBQWNuSSxFQUFJLEVBQUUsT0FBTyxDQUFDLEVBQzVDLFNBQVVtSSxFQUFjbkksRUFBSSxFQUFFLE9BQU9BLEVBQUksRUFBRSxPQUFPLEVBQUdBLEVBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUNuRSxDQUFDLEVBQ0swSSxHQUEwQjFJLEVBQUksRUFBRSxPQUFPLENBQzNDLFNBQVVBLEVBQUksRUFBRSxPQUFPLENBQ3pCLENBQUMsRUFDSzJJLEdBQXNCM0ksRUFBSSxFQUFFLE9BQU8sQ0FDdkMsR0FBSW1JLEVBQWNuSSxFQUFJLEVBQUUsT0FBTyxDQUFDLEVBQ2hDLGlCQUFrQm1JLEVBQWNuSSxFQUFJLEVBQUUsT0FBTyxDQUFDLEVBQzlDLHVCQUF3Qm1JLEVBQWNuSSxFQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUMxRCxtQkFBb0JBLEVBQUksRUFBRSxNQUFNMEksRUFBdUIsRUFDdkQsWUFBYVAsRUFBY25JLEVBQUksRUFBRSxPQUFPLENBQUMsRUFDekMsVUFBV21JLEVBQWNuSSxFQUFJLEVBQUUsT0FBTyxDQUFDLENBQ3pDLENBQUMsRUFDSzRJLEdBQW9DNUksRUFBSSxFQUFFLE9BQU8sQ0FDckQsWUFBYUEsRUFBSSxFQUFFLE9BQU8sQ0FDNUIsQ0FBQyxFQUNLNkksR0FBeUI3SSxFQUFJLEVBQUUsT0FBTyxDQUMxQyxZQUFhQSxFQUFJLEVBQUUsT0FBTyxFQUMxQix5Q0FBMENBLEVBQUksRUFBRSxPQUFPLEVBQ3ZELFNBQVVBLEVBQUksRUFBRSxPQUFPLEVBQ3ZCLHNCQUF1QkEsRUFBSSxFQUFFLE1BQU00SSxFQUFpQyxFQUNwRSxxQkFBc0I1SSxFQUFJLEVBQUUsT0FBTyxDQUNyQyxDQUFDLEVBQ0s4SSxHQUFrQjlJLEVBQUksRUFBRSxPQUFPLENBQ25DLE9BQVFxSSxFQUNWLENBQUMsRUFDS1UsR0FBaUIvSSxFQUFJLEVBQUUsT0FBTyxDQUNsQyxTQUFVQSxFQUFJLEVBQUUsT0FBTyxFQUN2QixVQUFXQSxFQUFJLEVBQUUsTUFBTThJLEVBQWUsRUFDdEMsbUJBQW9CWCxFQUFjbkksRUFBSSxFQUFFLE9BQU8sQ0FBQyxFQUNoRCxNQUFPQSxFQUFJLEVBQUUsTUFBTTZJLEVBQXNCLEVBQ3pDLHNCQUF1QjdJLEVBQUksRUFBRSxPQUFPLEVBQ3BDLGdCQUFpQkEsRUFBSSxFQUFFLE9BQU8sRUFDOUIsa0JBQW1CQSxFQUFJLEVBQUUsT0FBTyxFQUNoQyw0QkFBNkJBLEVBQUksRUFBRSxNQUFNNEksRUFBaUMsQ0FDNUUsQ0FBQyxFQUNLSSxHQUFvQ2hKLEVBQUksRUFBRSxPQUFPLENBQ3JELFFBQVNBLEVBQUksRUFBRSxNQUFNMkksRUFBbUIsRUFDeEMsU0FBVTNJLEVBQUksRUFBRSxNQUFNK0ksRUFBYyxDQUN0QyxDQUFDLEVBQ0tFLEdBQTBCakosRUFBSSxFQUFFLE9BQU8sQ0FDM0MsUUFBU2dKLEdBQ1QsbUJBQW9CYixFQUFjYSxFQUFpQyxFQUNuRSxRQUFTaEosRUFBSSxFQUFFLE1BQU1xSSxFQUFhLENBQ3BDLENBQUMsRUFDS2EsR0FBNEJsSixFQUFJLEVBQUUsT0FBTyxDQUM3QyxPQUFRQSxFQUFJLEVBQUUsUUFBUSxNQUFNLEVBQzVCLE1BQU9BLEVBQUksRUFBRSxPQUFPLEVBQ3BCLE1BQU9tSSxFQUFjbkksRUFBSSxFQUFFLE9BQU8sQ0FBQyxFQUNuQyxXQUFZQSxFQUFJLEVBQUUsTUFBTXNJLEVBQVEsRUFDaEMscUJBQXNCdEksRUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQ3pDLGtCQUFtQkEsRUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQ3RDLE1BQU93SSxHQUNQLGFBQWNMLEVBQWNjLEVBQXVCLEVBRW5ELGtCQUFtQmpKLEVBQUksRUFBRSxNQUFNeUksQ0FBcUIsQ0FDdEQsQ0FBQyxFQUNLVSxHQUFxQm5KLEVBQUksRUFBRSxtQkFBbUIsT0FBUSxDQUMxREEsRUFBSSxFQUFFLE9BQU8sQ0FDWCxLQUFNQSxFQUFJLEVBQUUsUUFBUSxPQUFPLEVBQzNCLFNBQVVBLEVBQUksRUFBRSxTQUFTQSxFQUFJLEVBQUUsVUFBVSxDQUFDLENBQzVDLENBQUMsRUFBRSxPQUFPa0osR0FBMEIsS0FBSyxFQUN6Q2xKLEVBQUksRUFBRSxPQUFPLENBQ1gsS0FBTUEsRUFBSSxFQUFFLEtBQUssQ0FBQyxVQUFXLGNBQWMsQ0FBQyxFQUM1QyxTQUFVQSxFQUFJLEVBQUUsT0FBTyxDQUN6QixDQUFDLEVBQUUsT0FBT2tKLEdBQTBCLEtBQUssQ0FDM0MsQ0FBQyxFQUNLRSxHQUF1QnBKLEVBQUksRUFBRSxPQUFPLENBQ3hDLE9BQVFBLEVBQUksRUFBRSxRQUFRLFVBQVUsQ0FDbEMsQ0FBQyxFQUNLcUosR0FBcUJySixFQUFJLEVBQUUsT0FBTyxDQUN0QyxPQUFRQSxFQUFJLEVBQUUsUUFBUSxTQUFTLENBQ2pDLENBQUMsRUFDREEsRUFBSSxFQUFFLE1BQU0sQ0FBQ21KLEdBQW9CQyxHQUFzQkMsRUFBa0IsQ0FBQyxFQUMxRXJKLEVBQUksRUFBRSxPQUFPLENBQ1gsS0FBTUEsRUFBSSxFQUFFLE9BQU8sRUFDbkIsS0FBTUEsRUFBSSxFQUFFLE9BQU8sRUFDbkIsY0FBZUEsRUFBSSxFQUFFLE9BQU8sRUFDNUIsZ0JBQWlCQSxFQUFJLEVBQUUsT0FBTyxDQUNoQyxDQUFDLEVBQ0QsTUFBTXNKLEdBQTBCdEosRUFBSSxFQUFFLE9BQU8sQ0FDM0MsYUFBY0EsRUFBSSxFQUFFLE1BQU1BLEVBQUksRUFBRSxPQUFPLENBQUMsRUFDeEMsaUJBQWtCQSxFQUFJLEVBQUUsTUFBTUEsRUFBSSxFQUFFLE9BQU8sQ0FBQyxFQUM1QyxZQUFhQSxFQUFJLEVBQUUsT0FBTyxDQUM1QixDQUFDLEVBQ0RBLEVBQUksRUFBRSxPQUFPLENBQ1gsYUFBY0EsRUFBSSxFQUFFLE9BQU8sRUFDM0IsY0FBZUEsRUFBSSxFQUFFLElBQUksRUFFekIsZUFBZ0JBLEVBQUksRUFBRSxPQUFPLEVBQzdCLGtCQUFtQkEsRUFBSSxFQUFFLE9BQU8sRUFDaEMsaUJBQWtCQSxFQUFJLEVBQUUsT0FBTyxFQUMvQixXQUFZQSxFQUFJLEVBQUUsTUFBTXNJLEVBQVEsRUFDaEMsa0JBQW1CdEksRUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQ3RDLGNBQWVBLEVBQUksRUFBRSxRQUFRLEVBQzdCLHdCQUF5QnlJLEVBQ3pCLGVBQWdCekksRUFBSSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQ3hDLDBCQUEyQkEsRUFBSSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQ3RELENBQUMsRUFDRCxNQUFNdUosR0FBd0J2SixFQUFJLEVBQUUsT0FBTyxDQUN6QyxrQkFBbUJBLEVBQUksRUFBRSxPQUFPLENBQ2xDLENBQUMsRUFDREEsRUFBSSxFQUFFLE9BQU8sQ0FDWCxHQUFJQSxFQUFJLEVBQUUsT0FBTyxFQUNqQixXQUFZQSxFQUFJLEVBQUUsT0FBTyxDQUMzQixDQUFDLEVBQ0QsTUFBTXdKLEdBQTBCeEosRUFBSSxFQUFFLE9BQU8sQ0FDM0MsS0FBTUEsRUFBSSxFQUFFLE9BQU8sRUFDbkIsSUFBS0EsRUFBSSxFQUFFLE1BQU1BLEVBQUksRUFBRSxPQUFPLENBQUMsRUFDL0IsSUFBS0EsRUFBSSxFQUFFLE9BQU8sRUFDbEIsSUFBS0EsRUFBSSxFQUFFLE9BQU8sQ0FDcEIsQ0FBQyxFQUNEQSxFQUFJLEVBQUUsTUFBTXdKLEVBQXVCLEVBQ25DLE1BQU1DLEdBQTJCekosRUFBSSxFQUFFLE9BQU8sQ0FDNUMsc0JBQXVCQSxFQUFJLEVBQUUsTUFBTUEsRUFBSSxFQUFFLE9BQU9BLEVBQUksRUFBRSxPQUFPLEVBQUdBLEVBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUM5RSxDQUFDLEVBQ0RBLEVBQUksRUFBRSxPQUFPLENBQ1gsT0FBUTBELEdBQ1Isc0JBQXVCK0UsQ0FDekIsQ0FBQyxFQUNEekksRUFBSSxFQUFFLE9BQU8sQ0FDWCxXQUFZQSxFQUFJLEVBQUUsT0FBTyxFQUN6QixvQkFBcUJ5RCxFQUNyQix3QkFBeUJnRixDQUMzQixDQUFDLEVBQ0QsTUFBTWlCLEdBQWdDMUosRUFBSSxFQUFFLE9BQU8sQ0FDakQsc0JBQXVCQSxFQUFJLEVBQUUsTUFBTUEsRUFBSSxFQUFFLE9BQU9BLEVBQUksRUFBRSxPQUFPLEVBQUdBLEVBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUM1RSxTQUFVQSxFQUFJLEVBQUUsT0FBTyxDQUN6QixDQUFDLEVBQ0RBLEVBQUksRUFBRSxPQUFPQSxFQUFJLEVBQUUsSUFBSSxDQUFDLEVBRXhCLE1BQU0ySixHQUFPQyxHQUNKQSxFQUFJLE9BQU8sQ0FBQ0MsRUFBR0MsSUFBTUQsRUFBSUMsRUFBRyxDQUFDLEVBR3RDLFNBQVNDLEdBQVN2QyxFQUFRd0MsRUFBVyxDQUNuQyxJQUFJQyxFQUFpQixPQUFPLGVBQzVCQSxFQUFpQkEsRUFBZXpDLEVBQVF3QyxDQUFTLEVBQUl4QyxFQUFPLFVBQVl3QyxDQUMxRSxDQUNBLFNBQVNFLEdBQVMxQyxFQUFROUYsRUFBSSxDQUN4QkEsSUFBTyxTQUNUQSxFQUFLOEYsRUFBTyxhQUdkLElBQUkyQyxFQUFvQixNQUFNLGtCQUM5QkEsR0FBcUJBLEVBQWtCM0MsRUFBUTlGLENBQUUsQ0FDbkQsQ0FFQSxJQUFJMEksR0FBWSxVQUFZLENBQzFCLElBQUlDLEVBQWlCLFNBQXVCQyxFQUFHUixFQUFHLENBQ2hELE9BQUFPLEVBQWlCLE9BQU8sZ0JBQWtCLENBQ3hDLFVBQVcsQ0FBQyxDQUNkLFlBQWEsT0FBUyxTQUFVQyxFQUFHUixFQUFHLENBQ3BDUSxFQUFFLFVBQVlSLENBQ2hCLEdBQUssU0FBVVEsRUFBR1IsRUFBRyxDQUNuQixRQUFTUyxLQUFLVCxFQUNSLE9BQU8sVUFBVSxlQUFlLEtBQUtBLEVBQUdTLENBQUMsSUFBR0QsRUFBRUMsQ0FBQyxFQUFJVCxFQUFFUyxDQUFDLEVBRTlELEVBRU9GLEVBQWVDLEVBQUdSLENBQUMsQ0FDNUIsRUFFQSxPQUFPLFNBQVVRLEVBQUdSLEVBQUcsQ0FDckIsR0FBSSxPQUFPQSxHQUFNLFlBQWNBLElBQU0sS0FBTSxNQUFNLElBQUksVUFBVSx1QkFBeUIsT0FBT0EsQ0FBQyxFQUFJLCtCQUErQixFQUVuSU8sRUFBZUMsRUFBR1IsQ0FBQyxFQUVuQixTQUFTVSxHQUFLLENBQ1osS0FBSyxZQUFjRixDQUNyQixDQUVBQSxFQUFFLFVBQVlSLElBQU0sS0FBTyxPQUFPLE9BQU9BLENBQUMsR0FBS1UsRUFBRyxVQUFZVixFQUFFLFVBQVcsSUFBSVUsRUFDakYsQ0FDRixFQUFFLEVBRUVDLEdBQWMsU0FBVUMsRUFBUSxDQUNsQ04sR0FBVUssRUFBYUMsQ0FBTSxFQUU3QixTQUFTRCxFQUFZRSxFQUFTQyxFQUFTLENBQ3JDLElBQUlDLEVBQWEsS0FBSyxZQUVsQkMsRUFBUUosRUFBTyxLQUFLLEtBQU1DLEVBQVNDLENBQU8sR0FBSyxLQUVuRCxjQUFPLGVBQWVFLEVBQU8sT0FBUSxDQUNuQyxNQUFPRCxFQUFXLEtBQ2xCLFdBQVksR0FDWixhQUFjLEVBQ2hCLENBQUMsRUFDRGQsR0FBU2UsRUFBT0QsRUFBVyxTQUFTLEVBQ3BDWCxHQUFTWSxDQUFLLEVBQ1BBLENBQ1QsQ0FFQSxPQUFPTCxDQUNULEVBQUUsS0FBSyxFQUVQLE1BQU1NLFdBQWlCTixFQUFZLENBQ2pDLFlBQVl6SixFQUFVLENBQ3BCLE1BQU1nSyxFQUFrQixvQ0FBb0NoSyxFQUFTLE9BQU8sR0FDNUUsTUFBTWdLLENBQWUsRUFDckIsS0FBSyxTQUFXaEssQ0FDbEIsQ0FDQSxJQUFJLHNCQUF1QixDQUN6QixPQUFPLEtBQUssU0FBUyxPQUN2QixDQUNGLENBQ0EsTUFBTWlLLEVBQVcsTUFBT0MsRUFBU0MsRUFBTUMsSUFBbUIsQ0FDeEQsTUFBTXBLLEVBQVcsTUFBTWtLLEVBQVEsS0FBS0MsQ0FBSSxFQUN4QyxHQUFJRSxHQUFtQnJLLENBQVEsRUFDN0IsTUFBTSxJQUFJK0osR0FBUy9KLENBQVEsRUFFN0IsR0FBSSxDQUFDc0ssR0FBd0J0SyxFQUFVb0ssQ0FBYyxFQUFHLENBQ3RELE1BQU1wRCxFQUFTb0QsRUFBZSxVQUFVcEssQ0FBUSxFQUNoRCxNQUFJZ0gsRUFBTyxRQUFlLElBQUksTUFBTSxlQUFlLEVBQzdDQSxFQUFPLEtBQ2YsQ0FDQSxPQUFPaEgsQ0FDVCxFQUNNc0ssR0FBMEIsQ0FBQzFHLEVBQU8yRyxJQUMvQkEsRUFBTyxVQUFVM0csQ0FBSyxFQUFFLFFBRTNCeUcsR0FBc0JySyxHQUNuQm9ILEdBQWlCLFVBQVVwSCxDQUFRLEVBQUUsUUFFeEN3SyxHQUFxQixNQUFPTixFQUFTTyxJQUNsQyxNQUFNUixFQUFTQyxFQUFTLENBQUUsS0FBTSx1QkFBd0IsUUFBU08sQ0FBUSxFQUFHeEMsRUFBdUIsRUFFdEd5QyxFQUFhLE1BQU9SLEdBQ2pCLE1BQU1ELEVBQVNDLEVBQVMsQ0FBRSxLQUFNLGNBQWUsUUFBUyxDQUFDLENBQUUsRUFBRy9CLEVBQWtCLEVBRW5Gd0MsR0FBd0IsTUFBT1QsRUFBU3ZELElBQ3JDLE1BQU1zRCxFQUFTQyxFQUFTLENBQUUsS0FBTSw0QkFBNkIsUUFBQXZELENBQVEsRUFBRytCLEVBQTZCLEVBRXhHa0MsR0FBd0IsTUFBT1YsRUFBU3ZELElBQ3JDLE1BQU1zRCxFQUFTQyxFQUFTLENBQUUsS0FBTSw0QkFBNkIsUUFBQXZELENBQVEsRUFBRzhCLEVBQXdCLEVBRW5Hb0MsR0FBcUIsTUFBT1gsRUFBU3ZELElBQ2xDLE1BQU1zRCxFQUFTQyxFQUFTLENBQUUsS0FBTSx1QkFBd0IsUUFBQXZELENBQVEsRUFBRzFELEVBQTBCLEVBRWhHNkgsR0FBbUIsTUFBT1osRUFBU2EsRUFBYUMsSUFBYyxDQUNsRSxNQUFNQyxFQUFrQixNQUFNVCxHQUFtQk4sRUFBUyxDQUN4RCxhQUFjYSxFQUNkLGVBQWdCQyxDQUNsQixDQUFDLEVBQ0tFLEVBQWEsSUFBSSxJQUFJRCxFQUFnQixRQUFRLFNBQVMsSUFBS0UsR0FBUUEsRUFBSSxRQUFRLENBQUMsRUFDdEYsR0FBSUQsRUFBVyxPQUFTLEVBQ3RCLE1BQU0sSUFBSSxNQUFNLHNDQUFzQ0EsRUFBVyxJQUFJLEVBQUUsRUFFekUsTUFBTXpHLEVBQVd5RyxFQUFXLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBUyxNQUMvQ0UsRUFBYXpDLEdBQUlzQyxFQUFnQixRQUFRLFNBQVMsSUFBS0UsR0FBUUEsRUFBSSxxQkFBcUIsQ0FBQyxFQUMvRixNQUFPLENBQ0wsU0FBQTFHLEVBQ0EsV0FBQTJHLENBQ0YsQ0FDRixFQUNNQyxHQUEyQixNQUFPbkIsRUFBU2EsRUFBYU8sRUFBYU4sSUFBYyxDQUN2RixHQUFJTSxFQUNGLE1BQU8sQ0FBRSxXQUFZLEVBQUcsU0FBVSxLQUFNLEVBQ25DLENBQ0xOLEVBQWFBLEdBQVksT0FDekIsTUFBTUMsRUFBa0IsTUFBTUgsR0FBaUJaLEVBQVNhLEVBQWFDLENBQVMsRUFDOUUsTUFBTyxDQUFFLFdBQVlDLEVBQWdCLFdBQVksU0FBVUEsRUFBZ0IsUUFBUyxDQUN0RixDQUNGLEVBQ01NLEdBQStCLE1BQU9DLEVBQW1CN0UsSUFBWSxDQUN6RSxHQUFJNkUsRUFBa0IsT0FBUyxFQUM3QixNQUFNLElBQUksTUFBTSwwQkFBMEIsRUFPNUMsT0FMa0IsTUFBTSxRQUFRLElBQzlCLE1BQU0sS0FBS0EsRUFBa0IsT0FBTyxDQUFDLEVBQUUsSUFDcEN0QixHQUFZRCxFQUFTQyxFQUFTLENBQUUsS0FBTSxnQkFBaUIsUUFBQXZELENBQVEsRUFBR3ZELEVBQW9CLENBQ3pGLENBQ0YsQ0FFRixFQUNNcUksR0FBdUIsTUFBT3ZCLEVBQVN2RCxJQUFZLENBQ3ZELEdBQUksQ0FDRixPQUFPLE1BQU1zRCxFQUFTQyxFQUFTLENBQUUsS0FBTSx5QkFBMEIsUUFBQXZELENBQVEsRUFBRzJCLEVBQXVCLENBQ3JHLE9BQVM1RSxFQUFPLENBQ2QsTUFBTUEsQ0FDUixDQUNGLEVBQ01nSSxHQUFnQixNQUFPeEIsRUFBU3ZELElBQzdCLE1BQU1zRCxFQUFTQyxFQUFTLENBQUUsS0FBTSx1QkFBd0IsUUFBQXZELENBQVEsRUFBRzRCLEVBQXFCLEVBRTNGb0QsR0FBa0IsTUFBT3pCLEVBQVN2RCxJQUMvQixNQUFNc0QsRUFBU0MsRUFBUyxDQUFFLEtBQU0sV0FBWSxRQUFBdkQsQ0FBUSxFQUFHMkIsRUFBdUIsRUFFakZzRCxHQUF1QixJQUN2QkMsR0FBc0IsTUFBT0MsRUFBUUMsSUFBZ0IsQ0FRekQsTUFBTUMsRUFBZ0IsTUFQSDlNLEVBQU8sZUFBZSxDQUN2QyxPQUFBNE0sRUFDQSxNQUFPLEdBQ1AsUUFBU0YsR0FDVCxZQUFhLEdBRWYsQ0FBQyxFQUNzQyxRQUV2QyxPQURlLE1BQU0zQixFQUFTK0IsRUFBZSxDQUFFLEtBQU0saUJBQWtCLEVBQUd6SSxFQUFxQixHQUNqRixNQUNoQixFQUVNd0MsR0FBUyxpbUJBRVRrRyxHQUFzQkMsR0FBUSxDQUNsQyxNQUFNQyxFQUFXLFNBQVMsY0FBYyxVQUFVLEVBQ2xEQSxFQUFTLFVBQVk7QUFBQTtBQUFBLFFBRWpCcEcsRUFBTTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsdUJBS1NtRyxDQUFHO0FBQUE7QUFBQTtBQUFBLElBSXRCLE1BQU1FLEVBQU8sU0FBUyxjQUFjLEtBQUssRUFDbkNDLEVBQWFELEVBQUssYUFBYSxDQUFFLEtBQU0sTUFBTyxDQUFDLEVBQ3JEQyxFQUFXLFlBQVlGLEVBQVMsUUFBUSxVQUFVLEVBQUksQ0FBQyxFQUN2RCxNQUFNTCxFQUFTTyxFQUFXLGNBQWMsa0JBQWtCLEVBQ3BEQyxFQUFlRCxFQUFXLGNBQWMsZ0JBQWdCLEVBQzlELGdCQUFTLEtBQUssWUFBWUQsQ0FBSSxFQUN2QixDQUFFLEtBQUFBLEVBQU0sT0FBQU4sRUFBUSxhQUFBUSxDQUFhLENBQ3RDLEVBRUEsU0FBU0MsR0FBYVQsRUFBUVUsRUFBV1QsRUFBYSxDQUNwRCxNQUFNVSxFQUFnQixTQUFZLENBQ2hDLEdBQUksQ0FDRixNQUFNQyxFQUFTLE1BQU1iLEdBQW9CQyxFQUFRQyxDQUFXLEVBQ3hEVyxJQUNGLGNBQWNDLENBQWUsRUFDN0JILEVBQVVFLENBQU0sRUFFcEIsTUFBZ0IsQ0FDaEIsQ0FDRixFQUNBRCxFQUFjLEVBQ2QsTUFBTUUsRUFBa0IsWUFBWUYsRUFBZWIsRUFBb0IsRUFDdkUsT0FBT2UsQ0FDVCxDQUNBLFNBQVNDLEdBQWEsQ0FDcEIsU0FBQUMsRUFDQSxnQkFBQUYsRUFDQSxRQUFBNUgsQ0FDRixFQUFHLENBQ0QsTUFBTStILEVBQWUsSUFBTSxDQUN6QixjQUFjSCxDQUFlLEVBQzdCRSxFQUFTLEtBQUssT0FBTyxFQUNyQjlILEVBQVExQixFQUFjLFNBQVMsQ0FDakMsRUFDQSxPQUFBd0osRUFBUyxhQUFhLGlCQUFpQixRQUFTQyxDQUFZLEVBQzlCLElBQU0sQ0FDbENELEVBQVMsYUFBYSxvQkFBb0IsUUFBU0MsQ0FBWSxDQUNqRSxDQUVGLENBQ0EsZUFBZUMsR0FBcUIsQ0FDbEMsSUFBQWIsRUFDQSxRQUFBdEYsQ0FDRixFQUFHLENBQ0QsTUFBTWlHLEVBQVdaLEdBQW1CQyxDQUFHLEVBQ3ZDLE9BQU8sSUFBSSxRQUFTbkgsR0FBWSxDQUM5QixNQUFNeUgsRUFBYUUsR0FBVyxDQUM1QixXQUFXLElBQU0sQ0FDZkcsRUFBUyxLQUFLLE9BQU8sQ0FDdkIsRUFBRyxHQUFHLEVBQ045SCxFQUFRMkgsQ0FBTSxFQUNkTSxHQUFBLE1BQUFBLEdBQ0YsRUFDTUwsRUFBa0JKLEdBQWFNLEVBQVMsT0FBUUwsRUFBVyxJQUFJLElBQUk1RixDQUFPLEVBQUUsTUFBTSxFQUNsRm9HLEVBQXdCSixHQUFhLENBQ3pDLFNBQUFDLEVBQ0EsZ0JBQUFGLEVBQ0EsUUFBQTVILENBQ0YsQ0FBQyxDQUNILENBQUMsQ0FDSCxDQUVBLE1BQU1rSSxHQUFvQ0MsR0FDakMsTUFBT0MsR0FBVyxDQUN2QixHQUFJLENBQ0ZBLEVBQU8sY0FBYyxrQkFBa0IsRUFDdkMsTUFBTUMsRUFBYSxNQUFNRixFQUFjQyxDQUFNLEVBQzdDLEdBQUlDLEVBQVcsT0FBUyxRQUN0QkQsRUFBTyxjQUFjLDRCQUE0QkMsRUFBVyxPQUFPLGlCQUFpQixVQUMzRUEsRUFBVyxPQUFTLFdBQzdCRCxFQUFPLGNBQWMsa0JBQ25CQyxFQUFXLE9BQU8sYUFDbEJBLEVBQVcsT0FBTyxpQkFDbEJBLEVBQVcsT0FBTyxXQUNwQixNQUVBLE9BQU0sSUFBSSxNQUFNLG1CQUFtQkEsQ0FBVSxFQUFFLENBRW5ELE9BQVMxSixFQUFPLENBQ2QsTUFBQXlKLEVBQU8sY0FBYyxnQkFBZ0IvTSxFQUFnQnNELENBQUssQ0FBQyxFQUNyREEsQ0FDUixDQUNGLEVBRUkySixHQUEwQkMsR0FDdkIsTUFBT0gsR0FBVyxDQUN2QixHQUFJLENBQ0YsT0FBTyxNQUFNRyxFQUFLSCxDQUFNLENBQzFCLE9BQVN6SixFQUFPLENBQ2QsS0FBTSxDQUFFLE1BQUE2SixDQUFNLEVBQUlDLEVBQXFCLG9CQUFvQixFQUMzRCxPQUFBRCxFQUFNN0osQ0FBSyxFQUNKLENBQUUsWUFBYSxHQUFPLE9BQVF0RCxFQUFnQnNELENBQUssQ0FBRSxDQUM5RCxDQUNGLEVBRUk4SixFQUF3QkMsR0FBVyxDQUN2QyxNQUFNQyxFQUFNLElBQUkvTSxJQUFTLENBQ3ZCLE9BQU8sUUFBVyxJQUFJLEdBQUd4QixFQUFNLE1BQU0sS0FBSyxNQUFNLENBQUMsR0FBR0EsRUFBTSxLQUFLLEtBQUssR0FBR3NPLENBQU0sRUFBRSxDQUFDLElBQUssR0FBRzlNLENBQUksQ0FDOUYsRUFDTVYsRUFBTSxJQUFJVSxJQUFTLENBQ3ZCLE9BQU8sUUFBVyxNQUFNLEdBQUd4QixFQUFNLElBQUksS0FBSyxNQUFNLENBQUMsR0FBR0EsRUFBTSxLQUFLLEtBQUssR0FBR3NPLENBQU0sRUFBRSxDQUFDLElBQUssR0FBRzlNLENBQUksQ0FDOUYsRUFDQSxNQUFPLENBQ0wsSUFBQStNLEVBQ0EsSUFBQXpOLEVBQ0EsTUFBT3lOLEVBQ1AsTUFBT3pOLENBQ1QsQ0FDRixFQUVNLENBQUUsTUFBTzBOLEdBQVMsTUFBT0MsRUFBUSxFQUFJSixFQUFxQixXQUFXLEVBQ3JFSyxHQUFnQyxDQUFDQyxFQUFrQkMsSUFBc0IsQ0FDN0UsTUFBTXBILEVBQVVsRSxFQUFtQixVQUFVcUwsQ0FBZ0IsRUFDN0QsR0FBSSxDQUFDbkgsRUFBUSxRQUFTLENBQ3BCLE1BQU1xSCxFQUFZckgsRUFBUSxNQUFNLE9BQU8sRUFDakNzSCxFQUFTeEssR0FBc0J1SyxDQUFTLEVBQzlDLFNBQVcsQ0FBQ25LLEVBQVcxRCxDQUFNLElBQUssT0FBTyxRQUFROE4sQ0FBTSxFQUNyREYsRUFBa0JsSyxFQUFXMUQsRUFBUTBELENBQVMsRUFFaEQsTUFBQStKLEdBQVEsK0NBQWdESyxDQUFNLEVBQ3hELElBQUksTUFBTSw4Q0FBOEMsQ0FDaEUsQ0FDQSxPQUFPdEgsRUFBUSxJQUNqQixFQUNNdUgsR0FBOEIsQ0FBQ0MsRUFBaUJKLElBQXNCLENBQzFFLFVBQVdLLEtBQWtCRCxFQUMzQixHQUFJQyxFQUFlLFVBQVksR0FDN0IsTUFBQUEsRUFBZSxPQUFPLFFBQVMxSyxHQUFVLENBQ3ZDLE1BQU0ySyxFQUFTL00sR0FBYyxVQUFVb0MsRUFBTSxXQUFXLEVBQ3hELEdBQUksQ0FBQzJLLEVBQU8sUUFDVlQsR0FBUSw0Q0FBNENsSyxFQUFNLFdBQVcsRUFBRSxNQUNsRSxDQUNMLE1BQU1HLEVBQVl3SyxFQUFPLEtBQ3pCTixFQUFrQmxLLEVBQVdILEVBQU0sTUFBTSxDQUMzQyxDQUNGLENBQUMsRUFDRGlLLEdBQVEsaURBQWlELEtBQUssVUFBVVMsRUFBZSxNQUFNLENBQUMsRUFBRSxFQUMxRixJQUFJLE1BQU0sNkNBQTZDLENBR25FLEVBRU0sQ0FBRSxNQUFPRSxDQUFRLEVBQUlkLEVBQXFCLFNBQVMsRUFDbkRlLEdBQW1Ddk8sR0FBYSxDQUNwRCxHQUFJQSxFQUFTLGdCQUFnQixTQUFXLEVBQ3RDLE1BQU0sSUFBSSxNQUFNLDRDQUE0Q0EsRUFBUyxnQkFBZ0IsTUFBTSxFQUFFLEVBRS9GLE1BQU8sQ0FBRSxrQkFBbUJBLEVBQVMsZ0JBQWdCLENBQUMsRUFBRSxFQUFHLENBQzdELEVBQ013TyxHQUFzQixDQUFDQyxFQUFTQyxJQUFhLENBQ2pELE1BQU1DLEVBQU1GLEVBQVEsS0FBTUcsR0FBU0YsRUFBUyxVQUFVRSxDQUFJLEVBQUUsT0FBTyxFQUNuRSxHQUFJLENBQUNELEVBQ0gsTUFBQUwsRUFBUSwyQkFBMkJJLENBQVEsRUFBRSxFQUM3Q0osRUFBUUcsQ0FBTyxFQUNmSCxFQUFRLFVBQVUsRUFDWixJQUFJLE1BQU0sMkJBQTJCSSxDQUFRLEVBQUUsRUFFdkQsT0FBT0EsRUFBUyxNQUFNQyxDQUFHLENBQzNCLEVBRU0sQ0FBRSxNQUFPRSxFQUFTLE1BQU9DLEVBQVEsRUFBSXRCLEVBQXFCLFdBQVcsRUFDckUsQ0FBRSxNQUFPdUIsRUFBWSxFQUFJdkIsRUFBcUIsV0FBVyxFQUN6RHdCLEdBQWtCL0IsR0FDdEIsTUFBTyxDQUFFLFFBQUFnQyxFQUFTLHNCQUFBQyxFQUF1QixpQkFBQXBCLEVBQWtCLGNBQUFxQixDQUFjLElBQU0sQ0FoK0JuRixJQUFBMUosRUFpK0JNb0osRUFBUSw4QkFBK0IsQ0FBRSxzQkFBQUssQ0FBc0IsQ0FBQyxFQUNoRSxNQUFNRSxFQUFtQixNQUFNLEtBQUtILEVBQVEsZUFBZSxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQ2hFSSxFQUFVLE1BQU0zRSxFQUFXMEUsQ0FBZ0IsRUFDakRQLEVBQVEsMkNBQTJDUSxFQUFRLElBQUksR0FBRyxFQUNsRSxNQUFNQyxFQUFtQnpCLEdBQThCQyxFQUFrQnFCLEVBQWMsaUJBQWlCLEVBQ3hHTixFQUFRLDJDQUEyQ0ksRUFBUSxpQkFBaUIsR0FBRyxFQUMvRSxNQUFNTSxFQUFzQixNQUFNaEUsR0FBNkIwRCxFQUFRLGVBQWdCLENBQ3JGLFdBQVlBLEVBQVEsaUJBQ3RCLENBQUMsRUFDRGYsR0FBNEJxQixFQUFxQkosRUFBYyxpQkFBaUIsRUFDaEYsTUFBTUssRUFBdUIsQ0FDM0IsV0FBWVAsRUFBUSxrQkFDcEIsd0JBQXlCQyxFQUN6QixvQkFBcUJJLENBQ3ZCLEVBQ0EsR0FBSSxDQUNGLEdBQUlELEVBQVEsT0FBUyxRQUFTLENBQzVCUixFQUFRLDhDQUE4Q1EsRUFBUSxLQUFLLEdBQUcsRUFDdEUsTUFBTXJJLEVBQVMsTUFBTTBFLEdBQWMwRCxFQUFrQkksQ0FBb0IsRUFDekUsT0FBQVgsRUFBUSwwQ0FBMEM3SCxFQUFPLGlCQUFpQixHQUFHLEVBQ3RFLENBQUUsS0FBTSxRQUFTLE9BQUFBLENBQU8sQ0FDakMsS0FBTyxDQUNMNkgsRUFBUSxvRUFBb0VJLEVBQVEsaUJBQWlCLEdBQUcsRUFDeEcsTUFBTWpJLEVBQVMsTUFBTXlFLEdBQXFCMkQsRUFBa0JJLENBQW9CLEVBQ2hGLE9BQUFYLEVBQVEsb0NBQW9DLEVBQ3JDLENBQUUsS0FBTSxXQUFZLE9BQUE3SCxDQUFPLENBQ3BDLENBQ0YsT0FBU3RELEVBQU8sQ0FDZCxHQUFJQSxhQUFpQnFHLElBQ2ZyRyxFQUFNLHVCQUF5QixlQUFnQixDQUNqRG1MLEVBQVEsdURBQXVELEVBQy9ELE1BQU1ZLElBQW1CaEssRUFBQS9CLEVBQU0sU0FBUyxVQUFmLFlBQUErQixFQUF5Qiw2QkFBOEIsT0FDMUVpSyxFQUFnQixNQUFNL0UsR0FBc0J5RSxFQUFrQkksQ0FBb0IsRUFReEYsR0FQQVgsRUFBUSw2QkFBNkJZLENBQWdCLEVBQUUsRUFDdkRaLEVBQVEseUJBQTBCYSxDQUFhLEVBQzNDRCxFQUNGLE1BQU1FLEdBQWdCRCxFQUFlVCxFQUFRLE9BQU8sRUFFcEQsTUFBTVcsR0FBZ0JGLENBQWEsRUFFakNMLEVBQVEsT0FBUyxRQUFTLENBQzVCUixFQUFRLHdDQUF3Q2EsRUFBYyxRQUFRLEdBQUcsRUFDekUsTUFBTW5LLEVBQWdCLE1BQU1zRixHQUFtQnVFLEVBQWtCLENBQy9ELGFBQWNDLEVBQVEsTUFDdEIsa0JBQW1CSyxFQUFjLFFBQ25DLENBQUMsRUFDRGIsRUFBUSxpREFBa0R0SixDQUFhLEVBQ3ZFLE1BQU1zSyxFQUF1QnRCLEdBQWdDaEosQ0FBYSxFQUMxRSxPQUFBc0osRUFBUSwwQ0FBMENnQixFQUFxQixpQkFBaUIsR0FBRyxFQUNwRixDQUFFLEtBQU0sUUFBUyxPQUFRQSxDQUFxQixDQUN2RCxLQUFPLENBQ0xoQixFQUFRLHdDQUF3Q1ksRUFBbUIsTUFBUSxRQUFRLEdBQUcsRUFDdEYsTUFBTXpJLEVBQVMsTUFBTXlFLEdBQXFCMkQsRUFBa0IsQ0FDMUQsR0FBR0ksRUFDSCxrQkFBbUJFLEVBQWMsU0FDakMsMEJBQTJCLENBQUNELENBQzlCLENBQUMsRUFDRCxPQUFBWixFQUFRLG9DQUFvQyxFQUNyQyxDQUFFLEtBQU0sV0FBWSxPQUFBN0gsQ0FBTyxDQUNwQyxDQUNGLENBRUYsTUFBQThILEdBQVEsdUNBQXVDLEVBQy9DQSxHQUFRcEwsQ0FBSyxFQUNQQSxDQUNSLENBQ0YsQ0FDRixFQUNNb00sR0FBb0M5UCxHQUFhLENBQ3JELE1BQU0rUCxFQUFlL1AsRUFBUyxzQkFBc0IsS0FBTWdRLEdBQVdBLEVBQU8sT0FBUyxZQUFZLEVBQ2pHLEdBQUksQ0FBQ0QsRUFDSCxNQUFNLElBQUksTUFBTSw0QkFBNEIsRUFFOUMsT0FBT2pNLEdBQTRCLE1BQU1pTSxDQUFZLENBQ3ZELEVBQ01FLEdBQW9DalEsR0FBYSxDQUNyRCxNQUFNa1EsRUFBZWxRLEVBQVMsc0JBQXNCLEtBQU1nUSxHQUFXQSxFQUFPLE9BQVMsMkJBQTJCLEVBQ2hILEdBQUksQ0FBQ0UsRUFDSCxNQUFNLElBQUksTUFBTSw0QkFBNEIsRUFFOUMsT0FBTzFNLEdBQTRCLE1BQU0wTSxDQUFZLENBQ3ZELEVBQ01QLEdBQWtCLE1BQU9ELEVBQWU5SSxJQUFZLENBQ3hELE1BQU12QixFQUFxQjRLLEdBQWlDUCxDQUFhLEVBQ3pFYixFQUFRLGlDQUFpQ3hKLEVBQW1CLFlBQVksR0FBRyxFQUMzRSxNQUFNcUgsRUFBUyxNQUFNSyxHQUFxQixDQUFFLElBQUsxSCxFQUFtQixhQUFjLFFBQUF1QixDQUFRLENBQUMsRUFFM0YsR0FEQWlJLEVBQVEseUNBQXlDbkMsQ0FBTSxHQUFHLEVBQ3REQSxJQUFXckosRUFBYyxVQUMzQixNQUFNLElBQUksTUFBTSw0QkFBNEIsRUFFOUMsR0FBSXFKLElBQVdySixFQUFjLFFBQzNCLE1BQU0sSUFBSSxNQUFNLHlCQUF5QixDQUU3QyxFQUNNdU0sR0FBa0IsTUFBT0YsR0FBa0IsQ0FDL0MsTUFBTXJLLEVBQXFCeUssR0FBaUNKLENBQWEsRUFDekVYLEdBQVksMkNBQTJDMUosRUFBbUIsY0FBYyxVQUFVLEVBQUcsQ0FBQyxDQUFDLE1BQU0sRUFDN0csTUFBTUcsR0FBMEJILENBQWtCLEVBQ2xEMEosR0FBWSwwQ0FBMEMsQ0FDeEQsRUFFTSxDQUFFLE1BQU9vQixFQUFTLE1BQU9DLEVBQVEsRUFBSTVDLEVBQXFCLFdBQVcsRUFDckU2QyxHQUFjclIsRUFBSSxFQUFFLE9BQU8sQ0FDL0IsU0FBVUEsRUFBSSxFQUFFLE1BQU0sQ0FBQ0EsRUFBSSxFQUFFLFFBQVEsV0FBVyxFQUFHQSxFQUFJLEVBQUUsUUFBUSxZQUFZLENBQUMsQ0FBQyxFQUMvRSxlQUFnQkEsRUFBSSxFQUFFLFFBQVEsUUFBUSxFQUN0QyxTQUFVQSxFQUFJLEVBQUUsT0FBTyxDQUNyQixVQUFXQSxFQUFJLEVBQUUsT0FBTyxDQUMxQixDQUFDLENBQ0gsQ0FBQyxFQUNLc1IsR0FBbUJqRCxHQUN2QixNQUFPLENBQUUsUUFBQTRCLENBQVEsSUFBTSxDQUNyQmtCLEVBQVEsaURBQWlELEVBQ3pELE1BQU1qQixFQUF3QlYsR0FBb0JTLEVBQVEsdUJBQXdCb0IsRUFBVyxFQUM3RkYsRUFBUSxnQ0FBZ0MsRUFDeEMsTUFBTWYsRUFBbUIsTUFBTSxLQUFLSCxFQUFRLGVBQWUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUNoRUksRUFBVSxNQUFNM0UsRUFBVzBFLENBQWdCLEVBQzNDOUQsRUFBYytELEVBQVEsT0FBUyxRQUNyQ2MsRUFBUSxnQ0FBZ0MsRUFDeEMsTUFBTUksRUFBaUIsTUFBTWxGLEdBQXlCK0QsRUFBa0JDLEVBQVEsTUFBTy9ELEVBQWEsTUFBTSxFQUNwR2tGLEVBQUssTUFBTWxNLEdBQ2Y0SyxFQUFzQixTQUFTLFVBQy9CcUIsRUFBZSxXQUNmQSxFQUFlLFNBQ2ZqRixDQUNGLEVBQ0E2RSxFQUFRLDhCQUE4QixFQUN0QyxNQUFNTSxFQUFpQixNQUFNRCxFQUFHLGVBQWUsRUFDL0MsT0FBSUMsSUFBbUIsTUFDckJMLEdBQVEsOEJBQThCLEVBQy9CLENBQUUsWUFBYSxHQUFPLE9BQVEsOEJBQStCLElBRXRFRCxFQUFRLDREQUE2RE0sQ0FBYyxFQUM1RSxDQUNMLFlBQWEsR0FDYixHQUFBRCxFQUNBLG1CQUFvQixDQUNsQixTQUFVQyxFQUFlLFNBQ3pCLFVBQVdBLEVBQWUsU0FDNUIsQ0FDRixFQUNGLENBQ0YsRUFDTUMsR0FBa0J6RCxHQUN0QixNQUFPLENBQ0wsUUFBQWdDLEVBQ0Esc0JBQUFDLEVBQ0EsaUJBQUFwQixFQUNBLGNBQUFxQixFQUNBLGFBQUF3QixFQUNBLFdBQUFDLENBQ0YsSUFBTSxDQUVKLEdBREFULEVBQVEsMkJBQTJCLEVBQy9CUSxFQUFhLFdBQWF6QixFQUFzQixTQUNsRCxNQUFNLElBQUksTUFBTSwrQkFBK0J5QixFQUFhLFFBQVEsU0FBU3pCLEVBQXNCLFFBQVEsRUFBRSxFQUUvRyxNQUFNRSxFQUFtQixNQUFNLEtBQUtILEVBQVEsZUFBZSxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQ2hFdUIsRUFBS0ksRUFBVyxHQUN0QlQsRUFBUSxnQ0FBZ0MsRUFDeEMsTUFBTVUsRUFBb0JDLEdBQXFCaEQsQ0FBZ0IsRUFDekR3QixFQUFtQnpCLEdBQThCZ0QsRUFBbUIxQixFQUFjLGlCQUFpQixFQUN6RyxHQUFJd0IsR0FBQSxNQUFBQSxFQUFjLHVCQUF3QixDQUN4QyxNQUFNSSxFQUFXSixFQUFhLHVCQUM5QlIsRUFBUSw0QkFBNkJZLENBQVEsRUFDN0NDLEdBQW1CUixFQUFJTyxFQUFTLE9BQVFBLEVBQVMsT0FBTyxDQUMxRCxDQUNBWixFQUFRLHNCQUFzQixFQUM5QkssRUFBRyxLQUFLLEVBQ1IsTUFBTVMsRUFBcUIsTUFBTWpNLEdBQThCd0wsQ0FBRSxFQUNqRUwsRUFBUSw4Q0FBOEMsRUFDdEQsTUFBTWUsRUFBMkIsTUFBTXRHLEdBQXNCd0UsRUFBa0IsQ0FDN0UsT0FBUUUsRUFDUixzQkFBQUosQ0FDRixDQUFDLEVBQ0s3SixFQUFxQjhMLEdBQTBCRCxDQUF3QixFQUM3RWYsRUFBUSw4QkFBOEIsRUFDdEMsTUFBTS9LLEdBQWtCQyxFQUFvQjRMLENBQWtCLEVBQzlELE1BQU01QixFQUFVLE1BQU0zRSxFQUFXMEUsQ0FBZ0IsRUFDakQsR0FBSUMsRUFBUSxPQUFTLFFBQVMsQ0FDNUJjLEVBQVEsc0NBQXNDLEVBQzlDLE1BQU01SyxFQUFnQixNQUFNc0YsR0FBbUJ1RSxFQUFrQixDQUMvRCxhQUFjQyxFQUFRLEtBQ3hCLENBQUMsRUFFRCxNQUFPLENBQUUsS0FBTSxRQUFTLE9BREtkLEdBQWdDaEosQ0FBYSxDQUNyQixDQUN2RCxLQUFPLENBQ0w0SyxFQUFRLHdCQUF3QixFQUNoQyxNQUFNaUIsRUFBa0IsQ0FDdEIsYUFBYy9CLEVBQVEsTUFDdEIsY0FBZSxDQUNiLGNBQWVILEVBQXNCLFFBQ3ZDLEVBQ0EsZUFBZ0JJLEVBQWlCdE8sRUFBVSxLQUFLLEVBQ2hELGtCQUFtQnNPLEVBQWlCdE8sRUFBVSxRQUFRLEVBQ3RELGlCQUFrQnNPLEVBQWlCdE8sRUFBVSxPQUFPLEVBQ3BELGVBQWdCc08sRUFBaUJ0TyxFQUFVLGNBQWMsRUFDekQsV0FBWXFPLEVBQVEsV0FDcEIsa0JBQW1CQSxFQUFRLGtCQUMzQixjQUFlLEdBQ2Ysd0JBQXlCSCxDQUMzQixFQUVBLE1BQU8sQ0FBRSxLQUFNLFdBQVksT0FEWixNQUFNdkQsR0FBZ0J5RCxFQUFrQmdDLENBQWUsQ0FDcEMsQ0FDcEMsQ0FDRixDQUNGLEVBQ01OLEdBQXdCTyxHQUFlLENBQzNDLE1BQU1DLEVBQWdCLENBQUUsR0FBR0QsQ0FBVyxFQUN0QyxPQUFLQyxFQUFjdFEsRUFBVSxRQUFRLElBQ25DbVAsRUFBUSwrREFBK0QsRUFDdkVtQixFQUFjdFEsRUFBVSxRQUFRLEVBQUksU0FFL0JzUSxDQUNULEVBQ01OLEdBQXFCLENBQUNSLEVBQUllLEVBQVFDLElBQWMsQ0FDcERoQixFQUFHLE9BQU8sQ0FDUixNQUFPLENBQ0wsT0FBUWUsRUFBTyxXQUNmLE1BQU8sUUFDUCxRQUFTQyxDQUNYLEVBQ0EsU0FBVUQsRUFBTyxRQUNuQixDQUFDLENBQ0gsRUFDTUosR0FBNkJuUixHQUFhLENBQzlDLEdBQUlBLEVBQVMsc0JBQXNCLFNBQVcsRUFDNUMsTUFBTSxJQUFJLE1BQU07QUFBQSxlQUNQQSxFQUFTLHNCQUFzQixNQUFNLHdCQUF3QixFQUV4RSxPQUFPK0QsR0FBaUMsTUFBTS9ELEVBQVMsc0JBQXNCLENBQUMsQ0FBQyxDQUNqRixFQUVNeVIsR0FBa0MsQ0FBQ0MsRUFBTUMsRUFBY0MsSUFBa0IsQ0FDN0UsTUFBTUMsRUFBVUgsRUFBSyxPQUFRL0MsR0FFSEEsRUFBSSxXQUFhZ0QsQ0FFMUMsRUFDRCxHQUFJRSxFQUFRLFNBQVcsRUFDckIsTUFBTSxJQUFJLE1BQU0sZ0NBQWdDRixDQUFZLG9CQUFvQkMsQ0FBYSxHQUFHLEVBRWxHLEdBQUlDLEVBQVEsU0FBVyxFQUNyQixNQUFNLElBQUksTUFBTSwwQ0FBMENGLENBQVksb0JBQW9CQyxDQUFhLEdBQUcsRUFFNUcsT0FBT0MsRUFBUSxDQUFDLENBQ2xCLEVBQ01DLEVBQVcsQ0FHZixTQUFVLENBQ1IsSUFBSzlDLEVBQ1AsRUFDQSxTQUFVLENBQ1IsS0FBTXNCLEdBQ04sSUFBS0ksRUFDUCxDQUdGLEVBRUEsU0FBU3FCLEdBQXlCQyxFQUFHLENBQ3BDLE9BQU9BLEdBQUtBLEVBQUUsWUFBYyxPQUFPLFVBQVUsZUFBZSxLQUFLQSxFQUFHLFNBQVMsRUFBSUEsRUFBRSxRQUFhQSxDQUNqRyxDQUVBLElBQUlDLEVBQWUsQ0FBQyxFQUVwQixPQUFPLGVBQWVBLEVBQWMsYUFBYyxDQUNoRCxNQUFPLEVBQ1QsQ0FBQyxFQUNEQSxFQUFhLFdBQWEsT0FHMUIsTUFBTUMsR0FBWUMsR0FBUSxFQUFRLE9BQU9BLENBQUksRUFFdkNDLEVBQVlELEdBQVFELEdBQVVDLENBQUksRUFBSSxPQUFPQSxDQUFJLEVBQUksS0FBT0EsRUFFNURFLEdBQWlCRCxFQUFVLFVBQVUsRUFDckNFLEVBQW1CRixFQUFVLFlBQVksRUFDekNHLEdBQWdCSCxFQUFVLFNBQVMsRUFFekMsU0FBU0ksRUFBVWxTLEVBQUtWLEVBQUssQ0FDM0IsSUFBSWdFLEVBQVF0RCxFQUFJVixDQUFHLEVBQ25CLEdBQUlnRSxHQUFTLEtBQ2IsSUFBSSxPQUFPQSxHQUFVLFdBQVksTUFBTSxJQUFJLFVBQVVBLEVBQVEsb0JBQW9CLEVBQ2pGLE9BQU9BLEVBQ1QsQ0FFQSxTQUFTNk8sRUFBV25TLEVBQUssQ0FDdkIsSUFBSW9TLEVBQU9wUyxFQUFJLFlBRWYsT0FBSW9TLElBQVMsU0FDWEEsRUFBT0EsRUFBS0gsRUFBYSxFQUVyQkcsSUFBUyxPQUNYQSxFQUFPLFNBSUpBLElBQVMsT0FBWUEsRUFBT0MsQ0FDckMsQ0FFQSxTQUFTQyxHQUFhWixFQUFHLENBQ3ZCLE9BQU9BLGFBQWFXLENBQ3RCLENBRUEsU0FBU0UsRUFBZ0J4UyxFQUFHLENBQ3RCd1MsRUFBZ0IsSUFDbEJBLEVBQWdCLElBQUl4UyxDQUFDLEVBRXJCLFdBQVcsSUFBTSxDQUNmLE1BQU1BLENBQ1IsQ0FBQyxDQUVMLENBRUEsU0FBU3lTLEVBQVFwUyxFQUFJLENBQ25CLFFBQVEsUUFBUSxFQUFFLEtBQUssSUFBTSxDQUMzQixHQUFJLENBQ0ZBLEVBQUcsQ0FDTCxPQUFTLEVBQUcsQ0FDVm1TLEVBQWdCLENBQUMsQ0FDbkIsQ0FDRixDQUFDLENBQ0gsQ0FFQSxTQUFTRSxHQUFvQkMsRUFBYyxDQUN6QyxJQUFJQyxFQUFVRCxFQUFhLFNBQzNCLEdBQUlDLElBQVksU0FDaEJELEVBQWEsU0FBVyxPQUVwQixFQUFDQyxHQUlMLEdBQUksQ0FDRixHQUFJLE9BQU9BLEdBQVksV0FDckJBLEVBQVEsTUFDSCxDQUNMLElBQUlDLEVBQWNWLEVBQVVTLEVBQVMsYUFBYSxFQUU5Q0MsR0FDRkEsRUFBWSxLQUFLRCxDQUFPLENBRTVCLENBQ0YsT0FBUzVTLEVBQUcsQ0FDVndTLEVBQWdCeFMsQ0FBQyxDQUNuQixDQUNGLENBRUEsU0FBUzhTLEVBQWtCSCxFQUFjLENBQ3ZDQSxFQUFhLFVBQVksT0FDekJBLEVBQWEsT0FBUyxPQUN0QkEsRUFBYSxPQUFTLFFBQ3hCLENBRUEsU0FBU0ksR0FBa0JKLEVBQWMsQ0FDdkMsSUFBSUssRUFBUUwsRUFBYSxPQUV6QixHQUFLSyxFQUlMLENBQUFMLEVBQWEsT0FBUyxPQUN0QkEsRUFBYSxPQUFTLFFBRXRCLFFBQVM3TyxFQUFJLEVBQUdBLEVBQUlrUCxFQUFNLFNBQ3hCQyxHQUFtQk4sRUFBY0ssRUFBTWxQLENBQUMsRUFBRSxLQUFNa1AsRUFBTWxQLENBQUMsRUFBRSxLQUFLLEVBQzFENk8sRUFBYSxTQUFXLFVBRkksRUFBRTdPLEVBRWxDLEVBRUosQ0FFQSxTQUFTbVAsR0FBbUJOLEVBQWNPLEVBQU0zUCxFQUFPLENBQ3JEb1AsRUFBYSxPQUFTLFVBQ3RCLElBQUlRLEVBQVdSLEVBQWEsVUFFNUIsR0FBSSxDQUNGLElBQUlTLEVBQUlqQixFQUFVZ0IsRUFBVUQsQ0FBSSxFQUVoQyxPQUFRQSxFQUFNLENBQ1osSUFBSyxPQUNDRSxHQUFHQSxFQUFFLEtBQUtELEVBQVU1UCxDQUFLLEVBQzdCLE1BRUYsSUFBSyxRQUVILEdBREF1UCxFQUFrQkgsQ0FBWSxFQUMxQlMsRUFBR0EsRUFBRSxLQUFLRCxFQUFVNVAsQ0FBSyxNQUFPLE9BQU1BLEVBQzFDLE1BRUYsSUFBSyxXQUNIdVAsRUFBa0JILENBQVksRUFDMUJTLEdBQUdBLEVBQUUsS0FBS0QsQ0FBUSxFQUN0QixLQUNKLENBQ0YsT0FBU25ULEVBQUcsQ0FDVndTLEVBQWdCeFMsQ0FBQyxDQUNuQixDQUVJMlMsRUFBYSxTQUFXLFNBQVVELEdBQW9CQyxDQUFZLEVBQVdBLEVBQWEsU0FBVyxZQUFXQSxFQUFhLE9BQVMsUUFDNUksQ0FFQSxTQUFTVSxFQUFTVixFQUFjTyxFQUFNM1AsRUFBTyxDQUMzQyxHQUFJb1AsRUFBYSxTQUFXLFNBRTVCLElBQUlBLEVBQWEsU0FBVyxZQUFhLENBQ3ZDQSxFQUFhLE9BQU8sS0FBSyxDQUN2QixLQUFBTyxFQUNBLE1BQUEzUCxDQUNGLENBQUMsRUFFRCxNQUNGLENBRUEsR0FBSW9QLEVBQWEsU0FBVyxRQUFTLENBQ25DQSxFQUFhLE9BQVMsWUFDdEJBLEVBQWEsT0FBUyxDQUFDLENBQ3JCLEtBQUFPLEVBQ0EsTUFBQTNQLENBQ0YsQ0FBQyxFQUNEa1AsRUFBUSxJQUFNTSxHQUFrQkosQ0FBWSxDQUFDLEVBQzdDLE1BQ0YsQ0FFQU0sR0FBbUJOLEVBQWNPLEVBQU0zUCxDQUFLLEVBQzlDLENBRUEsTUFBTStQLEVBQWEsQ0FDakIsWUFBWUgsRUFBVUksRUFBWSxDQUdoQyxLQUFLLFNBQVcsT0FDaEIsS0FBSyxVQUFZSixFQUNqQixLQUFLLE9BQVMsT0FDZCxLQUFLLE9BQVMsZUFDZCxJQUFJSyxFQUFPLEtBQ1BDLEVBQXVCLENBQ3pCLElBQUksUUFBUyxDQUNYLE9BQU9ELEVBQUssU0FBVyxRQUN6QixFQUVBLEtBQUtqUSxFQUFPLENBQ1Y4UCxFQUFTRyxFQUFNLE9BQVFqUSxDQUFLLENBQzlCLEVBRUEsTUFBTUEsRUFBTyxDQUNYOFAsRUFBU0csRUFBTSxRQUFTalEsQ0FBSyxDQUMvQixFQUVBLFVBQVcsQ0FDVDhQLEVBQVNHLEVBQU0sVUFBVSxDQUMzQixDQUVGLEVBRUEsR0FBSSxDQUNGLEtBQUssU0FBV0QsRUFBVyxLQUFLLE9BQVdFLENBQW9CLENBQ2pFLE9BQVN6VCxFQUFHLENBQ1Z5VCxFQUFxQixNQUFNelQsQ0FBQyxDQUM5QixDQUVJLEtBQUssU0FBVyxpQkFBZ0IsS0FBSyxPQUFTLFFBQ3BELENBRUEsSUFBSSxRQUFTLENBQ1gsT0FBTyxLQUFLLFNBQVcsUUFDekIsQ0FFQSxhQUFjLENBQ1IsS0FBSyxTQUFXLFdBQ2xCOFMsRUFBa0IsSUFBSSxFQUN0QkosR0FBb0IsSUFBSSxFQUU1QixDQUVGLENBRUEsSUFBSUosRUFBZSxNQUFNb0IsQ0FBVyxDQUNsQyxZQUFZSCxFQUFZLENBQ3RCLEdBQUksRUFBRSxnQkFBZ0JHLEdBQWEsTUFBTSxJQUFJLFVBQVUsMkNBQTJDLEVBQ2xHLEdBQUksT0FBT0gsR0FBZSxXQUFZLE1BQU0sSUFBSSxVQUFVLDJDQUEyQyxFQUNyRyxLQUFLLFlBQWNBLENBQ3JCLENBRUEsVUFBVUosRUFBVSxDQUNsQixPQUFJLE9BQU9BLEdBQWEsVUFBWUEsSUFBYSxRQUMvQ0EsRUFBVyxDQUNULEtBQU1BLEVBQ04sTUFBTyxVQUFVLENBQUMsRUFDbEIsU0FBVSxVQUFVLENBQUMsQ0FDdkIsR0FHSyxJQUFJRyxHQUFhSCxFQUFVLEtBQUssV0FBVyxDQUNwRCxDQUVBLFFBQVE5UyxFQUFJLENBQ1YsT0FBTyxJQUFJLFFBQVEsQ0FBQ3FFLEVBQVNHLElBQVcsQ0FDdEMsR0FBSSxPQUFPeEUsR0FBTyxXQUFZLENBQzVCd0UsRUFBTyxJQUFJLFVBQVV4RSxFQUFLLG9CQUFvQixDQUFDLEVBQy9DLE1BQ0YsQ0FFQSxTQUFTc1QsR0FBTyxDQUNkaEIsRUFBYSxZQUFZLEVBQ3pCak8sRUFBUSxDQUNWLENBRUEsSUFBSWlPLEVBQWUsS0FBSyxVQUFVLENBQ2hDLEtBQUtwUCxFQUFPLENBQ1YsR0FBSSxDQUNGbEQsRUFBR2tELEVBQU9vUSxDQUFJLENBQ2hCLE9BQVMzVCxFQUFHLENBQ1Y2RSxFQUFPN0UsQ0FBQyxFQUNSMlMsRUFBYSxZQUFZLENBQzNCLENBQ0YsRUFFQSxNQUFPOU4sRUFDUCxTQUFVSCxDQUNaLENBQUMsQ0FDSCxDQUFDLENBQ0gsQ0FFQSxJQUFJckUsRUFBSSxDQUNOLEdBQUksT0FBT0EsR0FBTyxXQUFZLE1BQU0sSUFBSSxVQUFVQSxFQUFLLG9CQUFvQixFQUMzRSxJQUFJdVQsRUFBSXhCLEVBQVcsSUFBSSxFQUN2QixPQUFPLElBQUl3QixFQUFFVCxHQUFZLEtBQUssVUFBVSxDQUN0QyxLQUFLNVAsRUFBTyxDQUNWLEdBQUksQ0FDRkEsRUFBUWxELEVBQUdrRCxDQUFLLENBQ2xCLE9BQVN2RCxFQUFHLENBQ1YsT0FBT21ULEVBQVMsTUFBTW5ULENBQUMsQ0FDekIsQ0FFQW1ULEVBQVMsS0FBSzVQLENBQUssQ0FDckIsRUFFQSxNQUFNdkQsRUFBRyxDQUNQbVQsRUFBUyxNQUFNblQsQ0FBQyxDQUNsQixFQUVBLFVBQVcsQ0FDVG1ULEVBQVMsU0FBUyxDQUNwQixDQUVGLENBQUMsQ0FBQyxDQUNKLENBRUEsT0FBTzlTLEVBQUksQ0FDVCxHQUFJLE9BQU9BLEdBQU8sV0FBWSxNQUFNLElBQUksVUFBVUEsRUFBSyxvQkFBb0IsRUFDM0UsSUFBSXVULEVBQUl4QixFQUFXLElBQUksRUFDdkIsT0FBTyxJQUFJd0IsRUFBRVQsR0FBWSxLQUFLLFVBQVUsQ0FDdEMsS0FBSzVQLEVBQU8sQ0FDVixHQUFJLENBQ0YsR0FBSSxDQUFDbEQsRUFBR2tELENBQUssRUFBRyxNQUNsQixPQUFTdkQsRUFBRyxDQUNWLE9BQU9tVCxFQUFTLE1BQU1uVCxDQUFDLENBQ3pCLENBRUFtVCxFQUFTLEtBQUs1UCxDQUFLLENBQ3JCLEVBRUEsTUFBTXZELEVBQUcsQ0FDUG1ULEVBQVMsTUFBTW5ULENBQUMsQ0FDbEIsRUFFQSxVQUFXLENBQ1RtVCxFQUFTLFNBQVMsQ0FDcEIsQ0FFRixDQUFDLENBQUMsQ0FDSixDQUVBLE9BQU85UyxFQUFJLENBQ1QsR0FBSSxPQUFPQSxHQUFPLFdBQVksTUFBTSxJQUFJLFVBQVVBLEVBQUssb0JBQW9CLEVBQzNFLElBQUl1VCxFQUFJeEIsRUFBVyxJQUFJLEVBQ25CeUIsRUFBVSxVQUFVLE9BQVMsRUFDN0JDLEVBQVcsR0FFWGhPLEVBRE8sVUFBVSxDQUFDLEVBRXRCLE9BQU8sSUFBSThOLEVBQUVULEdBQVksS0FBSyxVQUFVLENBQ3RDLEtBQUs1UCxFQUFPLENBQ1YsSUFBSXdRLEVBQVEsQ0FBQ0QsRUFHYixHQUZBQSxFQUFXLEdBRVAsQ0FBQ0MsR0FBU0YsRUFDWixHQUFJLENBQ0YvTixFQUFNekYsRUFBR3lGLEVBQUt2QyxDQUFLLENBQ3JCLE9BQVN2RCxFQUFHLENBQ1YsT0FBT21ULEVBQVMsTUFBTW5ULENBQUMsQ0FDekIsTUFFQThGLEVBQU12QyxDQUVWLEVBRUEsTUFBTXZELEVBQUcsQ0FDUG1ULEVBQVMsTUFBTW5ULENBQUMsQ0FDbEIsRUFFQSxVQUFXLENBQ1QsR0FBSSxDQUFDOFQsR0FBWSxDQUFDRCxFQUFTLE9BQU9WLEVBQVMsTUFBTSxJQUFJLFVBQVUsaUNBQWlDLENBQUMsRUFDakdBLEVBQVMsS0FBS3JOLENBQUcsRUFDakJxTixFQUFTLFNBQVMsQ0FDcEIsQ0FFRixDQUFDLENBQUMsQ0FDSixDQUVBLE1BQU0sS0FBTSxDQUNWLElBQUlhLEVBQVMsQ0FBQyxFQUNkLGFBQU0sS0FBSyxRQUFRelEsR0FBU3lRLEVBQU8sS0FBS3pRLENBQUssQ0FBQyxFQUN2Q3lRLENBQ1QsQ0FFQSxVQUFVQyxFQUFTLENBQ2pCLElBQUlMLEVBQUl4QixFQUFXLElBQUksRUFDdkIsT0FBTyxJQUFJd0IsRUFBRVQsR0FBWSxDQUN2QixJQUFJUixFQUNBdUIsRUFBUSxFQUVaLFNBQVNDLEVBQVVDLEVBQU0sQ0FDdkJ6QixFQUFleUIsRUFBSyxVQUFVLENBQzVCLEtBQUtDLEVBQUcsQ0FDTmxCLEVBQVMsS0FBS2tCLENBQUMsQ0FDakIsRUFFQSxNQUFNclUsRUFBRyxDQUNQbVQsRUFBUyxNQUFNblQsQ0FBQyxDQUNsQixFQUVBLFVBQVcsQ0FDTGtVLElBQVVELEVBQVEsUUFDcEJ0QixFQUFlLE9BQ2ZRLEVBQVMsU0FBUyxHQUVsQmdCLEVBQVVQLEVBQUUsS0FBS0ssRUFBUUMsR0FBTyxDQUFDLENBQUMsQ0FFdEMsQ0FFRixDQUFDLENBQ0gsQ0FFQSxPQUFBQyxFQUFVLElBQUksRUFDUCxJQUFNLENBQ1B4QixJQUNGQSxFQUFhLFlBQVksRUFDekJBLEVBQWUsT0FFbkIsQ0FDRixDQUFDLENBQ0gsQ0FFQSxRQUFRdFMsRUFBSSxDQUNWLEdBQUksT0FBT0EsR0FBTyxXQUFZLE1BQU0sSUFBSSxVQUFVQSxFQUFLLG9CQUFvQixFQUMzRSxJQUFJdVQsRUFBSXhCLEVBQVcsSUFBSSxFQUN2QixPQUFPLElBQUl3QixFQUFFVCxHQUFZLENBQ3ZCLElBQUltQixFQUFnQixDQUFDLEVBQ2pCQyxFQUFRLEtBQUssVUFBVSxDQUN6QixLQUFLaFIsRUFBTyxDQUNWLEdBQUlsRCxFQUNGLEdBQUksQ0FDRmtELEVBQVFsRCxFQUFHa0QsQ0FBSyxDQUNsQixPQUFTdkQsRUFBRyxDQUNWLE9BQU9tVCxFQUFTLE1BQU1uVCxDQUFDLENBQ3pCLENBR0YsSUFBSXdVLEVBQVFaLEVBQUUsS0FBS3JRLENBQUssRUFBRSxVQUFVLENBQ2xDLEtBQUtBLEVBQU8sQ0FDVjRQLEVBQVMsS0FBSzVQLENBQUssQ0FDckIsRUFFQSxNQUFNdkQsRUFBRyxDQUNQbVQsRUFBUyxNQUFNblQsQ0FBQyxDQUNsQixFQUVBLFVBQVcsQ0FDVCxJQUFJOEQsRUFBSXdRLEVBQWMsUUFBUUUsQ0FBSyxFQUMvQjFRLEdBQUssR0FBR3dRLEVBQWMsT0FBT3hRLEVBQUcsQ0FBQyxFQUNyQzJRLEVBQWUsQ0FDakIsQ0FFRixDQUFDLEVBQ0RILEVBQWMsS0FBS0UsQ0FBSyxDQUMxQixFQUVBLE1BQU14VSxFQUFHLENBQ1BtVCxFQUFTLE1BQU1uVCxDQUFDLENBQ2xCLEVBRUEsVUFBVyxDQUNUeVUsRUFBZSxDQUNqQixDQUVGLENBQUMsRUFFRCxTQUFTQSxHQUFpQixDQUNwQkYsRUFBTSxRQUFVRCxFQUFjLFNBQVcsR0FBR25CLEVBQVMsU0FBUyxDQUNwRSxDQUVBLE1BQU8sSUFBTSxDQUNYbUIsRUFBYyxRQUFRSSxHQUFLQSxFQUFFLFlBQVksQ0FBQyxFQUMxQ0gsRUFBTSxZQUFZLENBQ3BCLENBQ0YsQ0FBQyxDQUNILENBRUEsQ0FBQ3RDLENBQWdCLEdBQUksQ0FDbkIsT0FBTyxJQUNULENBRUEsT0FBTyxLQUFLTixFQUFHLENBQ2IsSUFBSWlDLEVBQUksT0FBTyxNQUFTLFdBQWEsS0FBT0YsRUFDNUMsR0FBSS9CLEdBQUssS0FBTSxNQUFNLElBQUksVUFBVUEsRUFBSSxtQkFBbUIsRUFDMUQsSUFBSWdELEVBQVN4QyxFQUFVUixFQUFHTSxDQUFnQixFQUUxQyxHQUFJMEMsRUFBUSxDQUNWLElBQUlDLEVBQWFELEVBQU8sS0FBS2hELENBQUMsRUFDOUIsR0FBSSxPQUFPaUQsQ0FBVSxJQUFNQSxFQUFZLE1BQU0sSUFBSSxVQUFVQSxFQUFhLG1CQUFtQixFQUMzRixPQUFJckMsR0FBYXFDLENBQVUsR0FBS0EsRUFBVyxjQUFnQmhCLEVBQVVnQixFQUM5RCxJQUFJaEIsRUFBRVQsR0FBWXlCLEVBQVcsVUFBVXpCLENBQVEsQ0FBQyxDQUN6RCxDQUVBLEdBQUl0QixHQUFVLFVBQVUsSUFDdEI4QyxFQUFTeEMsRUFBVVIsRUFBR0ssRUFBYyxFQUVoQzJDLEdBQ0YsT0FBTyxJQUFJZixFQUFFVCxHQUFZLENBQ3ZCVixFQUFRLElBQU0sQ0FDWixHQUFJLENBQUFVLEVBQVMsT0FFYixTQUFTMEIsS0FBUUYsRUFBTyxLQUFLaEQsQ0FBQyxFQUU1QixHQURBd0IsRUFBUyxLQUFLMEIsQ0FBSSxFQUNkMUIsRUFBUyxPQUFRLE9BR3ZCQSxFQUFTLFNBQVMsRUFDcEIsQ0FBQyxDQUNILENBQUMsRUFJTCxHQUFJLE1BQU0sUUFBUXhCLENBQUMsRUFDakIsT0FBTyxJQUFJaUMsRUFBRVQsR0FBWSxDQUN2QlYsRUFBUSxJQUFNLENBQ1osR0FBSSxDQUFBVSxFQUFTLE9BRWIsU0FBUyxFQUFJLEVBQUcsRUFBSXhCLEVBQUUsT0FBUSxFQUFFLEVBRTlCLEdBREF3QixFQUFTLEtBQUt4QixFQUFFLENBQUMsQ0FBQyxFQUNkd0IsRUFBUyxPQUFRLE9BR3ZCQSxFQUFTLFNBQVMsRUFDcEIsQ0FBQyxDQUNILENBQUMsRUFHSCxNQUFNLElBQUksVUFBVXhCLEVBQUksb0JBQW9CLENBQzlDLENBRUEsT0FBTyxNQUFNbUQsRUFBTyxDQUNsQixJQUFJbEIsRUFBSSxPQUFPLE1BQVMsV0FBYSxLQUFPRixFQUM1QyxPQUFPLElBQUlFLEVBQUVULEdBQVksQ0FDdkJWLEVBQVEsSUFBTSxDQUNaLEdBQUksQ0FBQVUsRUFBUyxPQUViLFNBQVNyUCxFQUFJLEVBQUdBLEVBQUlnUixFQUFNLE9BQVEsRUFBRWhSLEVBRWxDLEdBREFxUCxFQUFTLEtBQUsyQixFQUFNaFIsQ0FBQyxDQUFDLEVBQ2xCcVAsRUFBUyxPQUFRLE9BR3ZCQSxFQUFTLFNBQVMsRUFDcEIsQ0FBQyxDQUNILENBQUMsQ0FDSCxDQUVBLFdBQVlqQixFQUFhLEdBQUksQ0FDM0IsT0FBTyxJQUNULENBRUYsRUFFQU4sRUFBYSxXQUFhVSxFQUMxQixPQUFPLGVBQWVBLEVBQWMsT0FBTyxZQUFZLEVBQUcsQ0FDeEQsTUFBTyxDQUNMLE9BQVFMLEVBQ1IsZ0JBQUFPLENBQ0YsRUFDQSxhQUFjLEVBQ2hCLENBQUMsRUFFRCxJQUFJdUMsR0FBZ0JuRCxFQUFhLFdBRWpDLE1BQU04QixHQUEwQmhDLEdBQXdCcUQsRUFBYSxFQUUvRCxDQUFFLE1BQUFDLEdBQU8sTUFBQTlILEVBQU0sRUFBSUMsRUFBcUIsWUFBWSxFQUNwRDhILEdBQXNCckcsSUFDbkIsQ0FFTCxTQUFVc0csR0FBd0IsV0FBWXpELEVBQVMsU0FBUyxLQUFLLENBQUUsUUFBQTdDLENBQVEsQ0FBQyxDQUFDLENBRW5GLEdBRUlzRyxHQUEwQixDQUFDQyxFQUFVQyxJQUFhLENBQ3RELE1BQU1SLEVBQWEsSUFBSWxCLEdBQVlQLEdBQWEsQ0FDOUNBLEVBQVMsS0FBSyxDQUFFLE9BQVEsU0FBVSxDQUFDLEVBQ25DaUMsRUFBUyxLQUFNek8sR0FBVyxDQUN4QndNLEVBQVMsS0FBSyxDQUFFLE9BQVEsU0FBVSxPQUFBeE0sQ0FBTyxDQUFDLENBQzVDLENBQUMsRUFBRSxNQUFPdEQsR0FBVSxDQUNsQjhQLEVBQVMsS0FBSyxDQUFFLE9BQVEsUUFBUyxRQUFTOVAsRUFBTSxPQUFRLENBQUMsQ0FDM0QsQ0FBQyxDQUNILENBQUMsRUFDRCxPQUFBdVIsRUFBVyxVQUFVLENBQ25CLEtBQU9qTyxHQUFXLENBQ2hCcU8sR0FBTSxHQUFHRyxDQUFRLGVBQWdCeE8sQ0FBTSxDQUN6QyxFQUNBLE1BQVF0RCxHQUFVLENBQ2hCLE1BQUE2SixHQUFNLEdBQUdpSSxDQUFRO0FBQUEsRUFDdkIsS0FBSyxVQUFVOVIsQ0FBSyxDQUFDLEVBQUUsRUFDWEEsQ0FDUixDQUNGLENBQUMsRUFDTXVSLENBQ1QsRUFFTVMsR0FBYSxDQUNqQixVQUFXLEdBQ1gsWUFBYSxHQUNiLFVBQVcsU0FBWSxDQUN2QixDQUNGLEVBQ01DLEdBQVcsQ0FDZixVQUFXLEdBQ1gsWUFBYSxHQUNiLFVBQVcsU0FBWSxDQUN2QixDQUNGLEVBRUEsTUFBTUMsRUFBd0IsQ0FDNUIsWUFBWUMsRUFBYyxDQUN4QixLQUFLLGFBQWVBLEVBQ3BCLEtBQUssT0FBU0EsRUFBYSxPQUMzQixLQUFLLE9BQVNBLEVBQWEsT0FDM0IsS0FBSyxhQUFlLENBQUMsRUFDckIsS0FBSyxPQUF5QixJQUFJLEdBQ3BDLENBQ0EsY0FBY2hQLEVBQU8sQ0E5eUR6QixJQUFBcEIsRUEreURNLEdBQUksQ0FBQ29CLEVBQU0sT0FDVCxNQUFNLElBQUksTUFBTSxpQkFBaUIsRUFLbkMsR0FISUEsRUFBTSxXQUFXcEIsRUFBQSxLQUFLLGFBQWEsT0FBTyxZQUF6QixZQUFBQSxFQUFvQyxTQUdyRCxPQUFPb0IsRUFBTSxNQUFTLFVBQVlBLEVBQU0sS0FBSyxPQUMvQyxPQUVGLE1BQU1QLEVBQVlELEdBQWtCLEtBQUssTUFBTVEsRUFBTSxJQUFJLENBQUMsRUFFMUQsR0FBSSxDQURZLEtBQUssY0FBY1AsQ0FBUyxFQUM5QixPQUNkLEtBQU0sQ0FBRSxVQUFBSSxFQUFXLFFBQUFDLENBQVEsRUFBSUwsRUFFL0IsT0FEa0JLLEVBQVEsS0FDUCxDQUNqQixJQUFLLFNBQ0gsS0FBSyxrQkFBa0JBLENBQU8sRUFDOUIsTUFDRixJQUFLLFFBQ0gsS0FBSyxpQkFBaUJELEVBQVdDLEVBQVEsV0FBVyxFQUNwRCxNQUNGLElBQUssT0FDSCxLQUFLLGdCQUFnQkQsRUFBV0MsRUFBUSxXQUFXLEVBQ25ELE1BQ0YsSUFBSyxTQUNILEtBQUssa0JBQWtCRCxFQUFXQyxFQUFRLFlBQWFBLEVBQVEsTUFBTSxFQUNyRSxNQUNGLElBQUssU0FDSCxLQUFLLGtCQUFrQkUsRUFBTSxPQUFRSCxFQUFXQyxDQUFPLEVBQ3ZELE1BQ0YsSUFBSyxhQUNILEtBQUsscUJBQXFCQSxDQUFPLEVBQ2pDLE1BQ0YsSUFBSyxtQkFDSCxLQUFLLDJCQUEyQkEsRUFBU0QsQ0FBUyxFQUNsRCxLQUNKLENBQ0YsQ0FDQSxjQUFjSixFQUFXLENBSXZCLE9BSElBLEVBQVUsU0FBVyxLQUFLLGFBQWEsUUFBVSxDQUFDQSxFQUFVLFdBRzVELEtBQUssT0FBTyxJQUFJQSxFQUFVLEtBQUssRUFDMUIsSUFFVCxLQUFLLE9BQU8sSUFBSUEsRUFBVSxLQUFLLEVBQ3hCLEdBQ1QsQ0FDQSxrQkFBa0JLLEVBQVMsQ0FDekIsTUFBTW1QLEVBQVNuUCxFQUFRLE9BQVMsR0FBR0EsRUFBUSxNQUFNLEtBQU8sT0FDeEQsS0FBSyxhQUFhLGNBQWNtUCxDQUFNLENBQ3hDLENBQ0EsaUJBQWlCcFAsRUFBV3FQLEVBQU8sQ0FDN0IsS0FBSyxPQUFPLFNBQVMsS0FBSyxPQUFPLFFBQVFyUCxFQUFXcVAsQ0FBSyxDQUMvRCxDQUNBLGdCQUFnQnJQLEVBQVdxUCxFQUFPLENBQzVCLEtBQUssT0FBTyxRQUFRLEtBQUssT0FBTyxPQUFPclAsRUFBV3FQLENBQUssQ0FDN0QsQ0FDQSxrQkFBa0JyUCxFQUFXcVAsRUFBTzVWLEVBQVEsQ0FDdEMsS0FBSyxPQUFPLFVBQVUsS0FBSyxPQUFPLFNBQVN1RyxFQUFXcVAsRUFBTzVWLENBQU0sQ0FDekUsQ0FDQSxNQUFNLGtCQUFrQjZWLEVBQVF0UCxFQUFXQyxFQUFTLENBQ2xELEtBQUssYUFBYUQsQ0FBUyxFQUFJc1AsRUFDL0IsS0FBSyxhQUFhLFlBQVlyUCxDQUFPLEVBQ2pDLEtBQUssT0FBTyxRQUNkLEtBQUssT0FBTyxPQUFPQSxFQUFRLGlCQUFrQkEsRUFBUSxRQUFRLENBRWpFLENBQ0EscUJBQXFCQSxFQUFTLENBQ3hCLEtBQUssYUFBYSxPQUFPLGFBQWEsS0FBSyxhQUFhLE9BQU8sWUFBWUEsRUFBUSxPQUFPLENBQ2hHLENBQ0EsMkJBQTJCQSxFQUFTRCxFQUFXLENBQ3pDLEtBQUssYUFBYSxPQUFPLG1CQUMzQixLQUFLLGFBQWEsT0FBTyxrQkFBa0JDLEVBQVEsWUFBYUEsRUFBUSxPQUFRRCxDQUFTLENBRTdGLENBd0ZBLGlCQUFpQnNQLEVBQVF0UCxFQUFXeUQsRUFBTSxDQUN4QzVELEdBQVV5UCxFQUFRLEtBQUssT0FBUXRQLEVBQVd5RCxFQUFNLEtBQUssT0FBTyxPQUFPLENBQ3JFLENBQ0YsQ0FFQSxlQUFlOEwsR0FBaUJuSyxFQUFRQyxFQUFhLENBTW5ELE1BQU1DLEVBQWdCLE1BTEg5TSxFQUFPLGVBQWUsQ0FDdkMsT0FBQTRNLEVBQ0EsTUFBTyxHQUNQLFlBQUFDLENBQ0YsQ0FBQyxFQUNzQyxRQUNqQ21LLEVBQWdCLE1BQU1wUCxHQUFnQ2tGLENBQWEsRUFDekUsR0FBSSxDQUFDL0UsR0FBYytFLEVBQWVrSyxDQUFhLEVBQzdDLE1BQU0sSUFBSSxNQUFNLG1DQUFtQyxFQUVyRCxPQUFPbEssQ0FDVCxDQUNBLE1BQU1tSyxFQUFrQixDQUN0QixhQUFjLENBQ1osS0FBSyxZQUE4QixJQUFJLEdBQ3pDLENBQ0EsY0FBY0MsRUFBSUMsRUFBWSxDQUM1QixLQUFLLFlBQVksSUFBSUQsRUFBSUMsQ0FBVSxDQUNyQyxDQUNBLGVBQWdCLENBQ2QsTUFBTUEsRUFBYSxLQUFLLFlBQVksT0FBTyxFQUFFLEtBQUssRUFBRSxNQUNwRCxHQUFJLENBQUNBLEVBQ0gsTUFBTSxJQUFJLE1BQU0sc0JBQXNCLEVBRXhDLE9BQU9BLENBQ1QsQ0FDQSxtQkFBb0IsQ0FDbEIsT0FBTyxLQUFLLFdBQ2QsQ0FDRixDQUVBLE1BQU1DLEVBQU4sTUFBTUEsQ0FBWSxDQUNoQixZQUFZQyxFQUFRLENBQ2xCLEtBQUssZ0JBQWtCLElBQU0sQ0FDdkIsS0FBSyx5QkFBMkIsTUFHL0IsS0FBSyxrQkFHTixLQUFLLGtCQUFrQixrQkFBa0IsRUFBRSxPQUFTLElBR3hELEtBQUssdUJBQXlCakIsR0FBbUIsS0FBSyxxQkFBcUIsQ0FBQyxFQUM1RSxLQUFLLHVCQUF1QixTQUFTLFVBQVc1SSxHQUFXLEtBQUssdUJBQXVCQSxDQUFNLENBQUMsRUFDaEcsRUFDQSxLQUFLLFlBQWUvRixHQUFZLENBQzFCLEtBQUssbUJBR1QsS0FBSyxpQkFBbUJBLEVBQ3hCLEtBQUssZ0JBQWdCLEVBQ3ZCLEVBQ0EsS0FBSyx1QkFBMEI2UCxHQUFlLENBN2dFcEQsSUFBQS9RLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUE2USxFQUFBQyxFQThnRVEsR0FBSUYsRUFBVyxTQUFXLFdBQ3hCOVEsR0FBQUQsRUFBQSxLQUFLLFFBQU8sdUJBQVosTUFBQUMsRUFBQSxLQUFBRCxFQUFtQyxDQUFFLFVBQVdpUSxHQUFZLFdBQVlBLEVBQVcsV0FDMUVjLEVBQVcsU0FBVyxTQUMvQjVRLEdBQUFELEVBQUEsS0FBSyxRQUFPLHVCQUFaLE1BQUFDLEVBQUEsS0FBQUQsRUFBbUMsQ0FBRSxVQUFXZ1EsR0FBVSxXQUFZQSxFQUFTLFdBQ3RFYSxFQUFXLFNBQVcsU0FBVSxDQUN6QyxNQUFNNUYsRUFBYTRGLEVBQVcsT0FDeEJHLEVBQWMvRixFQUFXLGFBQWVBLEVBQVcsbUJBQW1CLFNBQ3RFZ0csRUFBZWhHLEVBQVcsYUFBZUEsRUFBVyxtQkFBbUIsV0FDN0U4RixHQUFBRCxFQUFBLEtBQUssUUFBTyx1QkFBWixNQUFBQyxFQUFBLEtBQUFELEVBQW1DLENBQ2pDLFVBQVcsQ0FDVCxVQUFXLEdBQ1gsWUFBYUUsRUFDYixVQUFXLE1BQU9FLEdBQWVGLEVBQWMsS0FBSyxxQkFBcUIsWUFBYS9GLEVBQVlpRyxDQUFVLEVBQUksTUFDbEgsRUFDQSxXQUFZLENBQ1YsVUFBVyxHQUNYLFlBQWFELEVBQ2IsVUFBVyxNQUFPQyxHQUFlRCxFQUFlLEtBQUsscUJBQXFCLGFBQWNoRyxFQUFZaUcsQ0FBVSxFQUFJLE1BQ3BILENBQ0YsRUFDRixDQUNGLEVBQ0EsS0FBSyxxQkFBdUIsQ0FBQ0MsRUFBVWxHLEVBQVl6RCxJQUFXLENBQzVELE1BQU04QixFQUFVLEtBQUsscUJBQXFCLEVBQzFDLE9BQU82QyxFQUFTLFNBQVMsSUFBSSxDQUMzQixRQUFBN0MsRUFDQSxzQkFBdUJ3QyxHQUFnQ3hDLEVBQVEsdUJBQXdCNkgsQ0FBUSxFQUMvRixpQkFBa0IsS0FBSyxvQkFBb0IsRUFDM0MsY0FBZSxLQUFLLHVCQUF1QixFQUMzQyxhQUFjLENBQUUsU0FBQUEsRUFBVSx1QkFBd0IzSixHQUFBLFlBQUFBLEVBQVEsc0JBQXVCLEVBQ2pGLFdBQUF5RCxDQUNGLENBQUMsQ0FDSCxFQUNBMEYsRUFBWSxrQkFBa0IsSUFBSSxFQUNsQyxLQUFLLE9BQVMsQ0FBRSxHQUFHQyxFQUFRLFFBQVNBLEVBQU8sU0FBVyw0QkFBNkIsRUFDbkYsS0FBSyxTQUFXLEtBQ2hCLEtBQUssT0FBUyxhQUFhLE9BQU8sT0FBTyxXQUFXLENBQUMsR0FDckQsS0FBSyxRQUFVLE9BQU8sU0FBUyxPQUMvQixLQUFLLFdBQWFBLEVBQU8sWUFBYyxPQUN2QyxLQUFLLGVBQWlCLENBQUUsT0FBUSxLQUFNLEVBQ3RDLEtBQUssaUJBQW1CLEtBQ3hCLEtBQUssdUJBQXlCLEtBQzlCLEtBQUssY0FBZ0IsR0FDckIsS0FBSyxrQkFBb0IsSUFBSUosR0FDN0IsS0FBSyxhQUFlLElBQUlQLEdBQXdCLElBQUksRUFDcEQsS0FBSyxXQUFhLFFBQ2xCLE9BQU8saUJBQWlCLFVBQVcsS0FBSyxhQUFhLGNBQWMsS0FBSyxLQUFLLFlBQVksQ0FBQyxDQUM1RixDQVFBLE9BQU8sa0JBQWtCbUIsRUFBTSxDQUM3QixHQUFJVCxFQUFZLFlBQVksRUFDMUIsTUFBTSxJQUFJLE1BQU0sZ0VBQWdFLEVBRWxGLE9BQU8sSUFBU1MsQ0FDbEIsQ0FLQSxPQUFPLGFBQWMsQ0FDbkIsT0FBTyxPQUFPLEtBQVUsSUFDMUIsQ0FDQSxzQkFBdUIsQ0FDckIsT0FBTyxLQUFLLGlCQUNkLENBQ0EsY0FBY2pCLEVBQVEsQ0FDcEIsS0FBSyxlQUFlLE9BQVNBLEVBQ3pCLEtBQUssVUFDUCxPQUFPLE9BQU8sS0FBSyxRQUFRLEVBQUUsUUFBU2tCLEdBQVksQ0FDaERBLEVBQVEsS0FBSyxNQUFNLE9BQVNsQixDQUM5QixDQUFDLENBRUwsQ0FDQSxjQUFjbUIsRUFBY3JOLEVBQVUsQ0FBQyxFQUFHLENBQ3hDLEdBQUksQ0FBQyxLQUFLLE9BQVEsTUFBTSxJQUFJLE1BQU0sOEJBQThCLEVBQ2hFLE1BQU0ySixFQUFPOVIsR0FBWSxNQUFNd1YsQ0FBWSxFQUNyQ0MsRUFBUSxTQUFTLGNBQWMsUUFBUSxFQUN2Q0MsRUFBYyxLQUFLLGlCQUFpQnZOLENBQU8sRUFDakRzTixFQUFNLEtBQU8sR0FBRzNELENBQUksV0FDcEIsTUFBTXJILEVBQU0sSUFBSSxJQUFJLFdBQVdnTCxFQUFNLElBQUksR0FBSSxLQUFLLE9BQU8sT0FBTyxFQUNoRWhMLEVBQUksT0FBU2lMLEVBQVksU0FBUyxFQUNsQ0QsRUFBTSxJQUFNaEwsRUFBSSxLQUNoQixLQUFLLE9BQU8sVUFBWUEsRUFDeEJnTCxFQUFNLE1BQU0sT0FBUyxPQUNyQkEsRUFBTSxNQUFNLE1BQVEsT0FDcEIsTUFBTUYsRUFBVSxDQUNkLEtBQUF6RCxFQUNBLEtBQU0yRCxFQUNOLE1BQVFFLEdBQVUsQ0E1bUUxQixJQUFBM1IsRUE0bUU2QixPQUFBQSxFQUFBLFNBQVMsY0FBYzJSLENBQVEsSUFBL0IsWUFBQTNSLEVBQWtDLFlBQVl5UixHQUNyRSxFQUNBLFlBQUssaUJBQWlCRixDQUFPLEVBQ3pCLEtBQUssU0FDUCxLQUFLLFNBQVN6RCxDQUFJLEVBQUl5RCxFQUV0QixLQUFLLFNBQVcsQ0FBRSxDQUFDekQsQ0FBSSxFQUFHeUQsQ0FBUSxFQUU3QkEsQ0FDVCxDQUNBLGlCQUFpQnBOLEVBQVMsQ0FDeEIsTUFBTXVOLEVBQWMsSUFBSSxnQkFDeEIsT0FBQUEsRUFBWSxPQUFPLFVBQVcsS0FBSyxPQUFPLEVBQzFDQSxFQUFZLE9BQU8sU0FBVSxLQUFLLE1BQU0sRUFDcEN2TixFQUFRLFFBQ1Z1TixFQUFZLE9BQU8sU0FBVXJSLEdBQTJCOEQsRUFBUSxNQUFNLENBQUMsRUFFekV1TixFQUFZLE9BQU8sY0FBZSxLQUFLLE9BQU8sbUJBQW1CLEVBQzFEQSxDQUNULENBQ0EsaUJBQWlCSCxFQUFTLENBQ3hCZixHQUFpQmUsRUFBUSxJQUFJLEVBQUUsS0FBTUssR0FBUyxDQUM1QyxLQUFLLGtCQUFrQixjQUFjTCxFQUFRLEtBQU1LLENBQUksRUFDdkQsS0FBSyxnQkFBZ0IsQ0FDdkIsQ0FBQyxFQUFFLE1BQU9wWCxHQUFLLEVBQVMsQ0FDMUIsQ0FDQSxZQUFhLENBQ1gsT0FBTyxTQUFTLGNBQWMsS0FBSyxVQUFVLEdBQUssU0FBUyxJQUM3RCxDQUNBLHNCQUF1QixDQUNyQixNQUFNcVgsRUFBaUIsS0FBSyxrQkFBa0Isa0JBQWtCLEVBQ2hFLEdBQUksQ0FBQyxLQUFLLGlCQUNSLE1BQU0sSUFBSSxNQUFNLDRDQUE0QyxFQUU5RCxHQUFJQSxFQUFlLE9BQVMsRUFDMUIsTUFBTSxJQUFJLE1BQU0sMEJBQTBCLEVBRTVDLE1BQU8sQ0FDTCxRQUFTLElBQUksSUFBSSxLQUFLLE9BQU8sU0FBV2xZLEVBQWMsRUFBRSxPQUN4RCxRQUFTLEtBQUssV0FBVyxFQUN6QixrQkFBbUIsS0FBSyxpQkFBaUIsVUFDekMsdUJBQXdCLEtBQUssaUJBQWlCLHVCQUM5QyxlQUFBa1ksQ0FDRixDQUNGLENBQ0EscUJBQXNCLENBQ3BCLE9BQU90UixHQUF5QixLQUFLLFdBQVcsQ0FBQyxDQUNuRCxDQUNBLHdCQUF5QixDQUN2QixNQUFNdVIsRUFBTyxJQUFNLENBQ25CLEVBQ0EsTUFBTyxDQUNMLGdCQUFpQi9XLEVBQWlCLGtCQUFtQixLQUFLLE9BQU8saUJBQW1CK1csQ0FBSSxFQUN4RixrQkFBbUIvVyxFQUFpQixvQkFBcUIsS0FBSyxPQUFPLG1CQUFxQitXLENBQUksRUFDOUYsa0JBQW1CL1csRUFBaUIsb0JBQXFCLEtBQUssT0FBTyxtQkFBcUIrVyxDQUFJLEVBQzlGLDRCQUE2Qi9XLEVBQzNCLDhCQUNBLEtBQUssT0FBTyw2QkFBK0IrVyxDQUM3QyxFQUNBLGtCQUFtQi9XLEVBQWlCLG9CQUFxQixLQUFLLE9BQU8sbUJBQXFCK1csQ0FBSSxDQUNoRyxDQUNGLENBQ0EsUUFBUyxDQUNQLE1BQU10SSxFQUFVLEtBQUsscUJBQXFCLEVBQzFDNkMsRUFBUyxTQUFTLElBQUksQ0FDcEIsUUFBQTdDLEVBQ0Esc0JBQXVCd0MsR0FBZ0N4QyxFQUFRLHVCQUF3QixhQUFhLEVBQ3BHLGlCQUFrQixLQUFLLG9CQUFvQixFQUMzQyxjQUFlLEtBQUssdUJBQXVCLEVBQzNDLGFBQWMsT0FFZCxXQUFZLE1BRWQsQ0FBQyxDQUNILENBQ0Esc0JBQXNCdUksRUFBUSxDQUM1QixLQUFLLGNBQWdCLEdBQ2pCLEtBQUssT0FBTyxpQkFBaUIsS0FBSyxPQUFPLGdCQUFnQkEsQ0FBTSxDQUNyRSxDQUNBLFNBQVUsQ0FDUixVQUFXUixLQUFXLE9BQU8sT0FBTyxLQUFLLFVBQVksQ0FBQyxDQUFDLEVBQ3JEQSxFQUFRLEtBQUssT0FBTyxFQUV0QixPQUFPLG9CQUFvQixVQUFXLEtBQUssYUFBYSxjQUFjLEtBQUssS0FBSyxZQUFZLENBQUMsQ0FDL0YsQ0FDRixFQWxJSVYsRUFBSyxTQUFXeEUsRUF4RXBCLElBQU0yRixFQUFObkIsRUE0TUF2WCxFQUFRLFVBQVlpQyxFQUNwQmpDLEVBQVEsWUFBYzBZLEVBRXRCLE9BQU8sZUFBZTFZLEVBQVMsT0FBTyxZQUFhLENBQUUsTUFBTyxRQUFTLENBQUMsQ0FFeEUsQ0FBRSIsCiAgIm5hbWVzIjogWyJnbG9iYWwiLCAiZmFjdG9yeSIsICJleHBvcnRzIiwgInpvZCIsICJ1dWlkIiwgInBlbnBhbCIsICJjaGFsayIsICJGUkFNRV9CQVNFX1VSTCIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxIiwgIlB5ZGFudGljVmFsaWRhdGlvbkVycm9yUmVzcG9uc2UiLCAiWm9kRmllbGRFcnJvciIsICJab2RGaWVsZEVycm9ycyIsICJNQVBfVE9fSFVNQU5fRlJJRU5ETFlfTE9XRVJDQVNFIiwgImdldEh1bWFuRnJpZW5kbHlNZXNzYWdlIiwgIm9nRXJyb3JNZXNzYWdlIiwgImtleSIsICJpc1N0cmluZ2lmaWVkSnNvbk9iamVjdCIsICJzdHIiLCAiY3JlYXRlTWVzc2FnZUZyb21QeWRhbnRpY1ZhbGlkYXRpb25FcnJvciIsICJyZXNwb25zZSIsICJlcnIiLCAiY3JlYXRlTWVzc2FnZUZyb21ab2RGaWVsZEVycm9ycyIsICJlcnJvcnMiLCAiZ2V0RXJyb3JNZXNzYWdlIiwgImUiLCAib2JqIiwgImUyIiwgIm1ha2VDYWxsYmFja1NhZmUiLCAiY2FsbGJhY2tOYW1lIiwgImZuIiwgImFyZ3MiLCAiUmVxdWlyZWRTdHJpbmciLCAiT3B0aW9uYWxTdHJpbmciLCAibnVsbE9yVW5kZWZPciQxIiwgInpUeXBlIiwgIkZpZWxkTmFtZSIsICJGaWVsZE5hbWUyIiwgIkZpZWxkTmFtZUVudW0iLCAiUHJpdmF0ZUZpZWxkTmFtZSIsICJQcml2YXRlRmllbGROYW1lMiIsICJQcml2YXRlRmllbGROYW1lRW51bSIsICJBbGxGaWVsZE5hbWVzIiwgIkVsZW1lbnRUeXBlRW51bSIsICJFbGVtZW50VHlwZUVudW0yIiwgIkVsZW1lbnRUeXBlIiwgIkNoZWNrb3V0UGF5bWVudE1ldGhvZCQxIiwgIlBheW1lbnRNZXRob2RNaW5pbWFsIiwgIkV2ZW50VHlwZSIsICJHZW5lcmljRXZlbnRUeXBlIiwgIkdlbmVyaWNFdmVudFBheWxvYWQiLCAiSW5wdXRFdmVudFR5cGUiLCAiSW5wdXRFdmVudFBheWxvYWQiLCAiRXJyb3JFdmVudFR5cGUiLCAiRXJyb3JFdmVudFBheWxvYWQiLCAiVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlIiwgIlZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCIsICJMYXlvdXRFdmVudFBheWxvYWQiLCAiTG9hZGVkRXZlbnRQYXlsb2FkIiwgIlBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCIsICJTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJSZXF1aXJlZEZvcm1GaWVsZHMiLCAiUFJGb3JtRmllbGRzIiwgIlN1Ym1pdEV2ZW50VHlwZSIsICJTdWJtaXRFdmVudFBheWxvYWQiLCAiVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIkNoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJFdmVudFBheWxvYWQiLCAiRWxlbWVudEV2ZW50IiwgIkNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlIiwgIkZpZWxkVmFsaWRhdGlvbkVycm9yIiwgIlRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2UiLCAiVG9rZW5pemVDYXJkUmVzcG9uc2UiLCAiVGhyZWVEU1N0YXR1cyIsICJUaHJlZURTU3RhdHVzMiIsICJQaW5nM0RTU3RhdHVzUmVzcG9uc2UiLCAiQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhIiwgImV4dHJhY3RJc3N1ZXNQZXJGaWVsZCIsICJlcnJvciIsICJpc3N1ZXNQZXJGaWVsZCIsICJ2YWx1ZSIsICJmaWVsZE5hbWUiLCAiU3RyaXBlM0RTTmV4dEFjdGlvbk1ldGFkYXRhIiwgIlBheW1lbnRSZXF1ZXN0TmV4dEFjdGlvbk1ldGFkYXRhIiwgIm91ckN1cnJlbmN5VG9UaGVpcnMiLCAiZ2V0TG9hZGVkU3RyaXBlIiwgInB1Ymxpc2hhYmxlS2V5IiwgImkiLCAiaXNTdHJpcGVKc1ByZXNlbnQiLCAic2xlZXAiLCAiY3JlYXRlU3RyaXBlUGF5bWVudFJlcXVlc3QiLCAic3RyaXBlUHViS2V5IiwgInRvdGFsQW1vdW50QXRvbSIsICJjdXJyZW5jeSIsICJpc0Ftb3VudFBlbmRpbmciLCAiaXNMaW5rT25seSIsICJzdHJpcGUiLCAic3RyaXBlQ3VycmVuY3kiLCAidGltZW91dE1zIiwgInJlc29sdmUiLCAid2FpdEZvclVzZXJUb0FkZFBheW1lbnRNZXRob2QiLCAicGF5bWVudFJlcXVlc3QiLCAicmVqZWN0IiwgImV2dCIsICJjb25maXJtU3RyaXBlUHJQTSIsICJuZXh0QWN0aW9uTWV0YWRhdGEiLCAic3RyaXBlUG0iLCAiY29uZmlybVJlc3VsdCIsICJsYXVuY2hTdHJpcGUzRFNEaWFsb2dGbG93IiwgIl9hIiwgIl9iIiwgIl9jIiwgIl9kIiwgInJlc3VsdFN0YXR1cyIsICJjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyIsICJzdHlsZXMiLCAiY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtIiwgImZvcm1EaXYiLCAiaW5pdGlhbERpY3QiLCAiYWNjIiwgImlucHV0IiwgInBhcnNlRXZlbnRQYXlsb2FkIiwgImV2ZW50RGF0YSIsICJlbWl0RXZlbnQiLCAidGFyZ2V0IiwgImZvcm1JZCIsICJlbGVtZW50SWQiLCAicGF5bG9hZCIsICJiYXNlVXJsIiwgImV2ZW50IiwgImNoZWNrSWZWYWxpZENkZUNvbm5lY3Rpb25PYmplY3QiLCAicGluZyIsICJyZXN1bHQiLCAiaXNSZXN1bHRWYWxpZCIsICJpc1ZhbGlkIiwgIm51bGxPclVuZGVmT3IiLCAiQ0RFUmVzcG9uc2VFcnJvciIsICJDb3Vwb25NaW5pbWFsIiwgIkxpbmVJdGVtIiwgIkJyYW5kU2V0dGluZ3MiLCAiQnJhbmQiLCAiQ2hlY2tvdXRQYXltZW50TWV0aG9kIiwgIlN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsIiwgIlN1YnNjcmlwdGlvbk1pbmltYWwiLCAiSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsIiwgIkludm9pY2VMaW5lSXRlbU1pbmltYWwiLCAiRGlzY291bnRNaW5pbWFsIiwgIkludm9pY2VNaW5pbWFsIiwgIkNyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCIsICJQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSIsICJfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uIiwgIlBheW1lbnRGb3JtUHJlZmlsbCIsICJDb21wbGV0ZWRGb3JtUHJlZmlsbCIsICJFeHBpcmVkRm9ybVByZWZpbGwiLCAiQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UiLCAiU2V0dXBDaGVja291dFJlc3BvbnNlIiwgIlB5ZGFudGljVmFsaWRhdGlvbkVycm9yIiwgIlN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSIsICJTdGFydFBheW1lbnRGbG93Rm9yQ0NSZXNwb25zZSIsICJzdW0iLCAiYXJyIiwgImEiLCAiYiIsICJmaXhQcm90byIsICJwcm90b3R5cGUiLCAic2V0UHJvdG90eXBlT2YiLCAiZml4U3RhY2siLCAiY2FwdHVyZVN0YWNrVHJhY2UiLCAiX19leHRlbmRzIiwgIl9leHRlbmRTdGF0aWNzIiwgImQiLCAicCIsICJfXyIsICJDdXN0b21FcnJvciIsICJfc3VwZXIiLCAibWVzc2FnZSIsICJvcHRpb25zIiwgIl9uZXdUYXJnZXQiLCAiX3RoaXMiLCAiQ2RlRXJyb3IiLCAiZnJpZW5kbHlNZXNzYWdlIiwgInF1ZXJ5Q0RFIiwgImNkZUNvbm4iLCAiZGF0YSIsICJyZXNwb25zZVNjaGVtYSIsICJpc0NERVJlc3BvbnNlRXJyb3IiLCAiY2hlY2tJZkNvbmZvcm1zVG9TY2hlbWEiLCAic2NoZW1hIiwgImdldENoZWNrb3V0UHJldmlldyIsICJyZXF1ZXN0IiwgImdldFByZWZpbGwiLCAic3RhcnRQYXltZW50Rmxvd0ZvckNDIiwgInN0YXJ0UGF5bWVudEZsb3dGb3JQUiIsICJjb25maXJtUGF5bWVudEZsb3ciLCAiZ2V0Q2hlY2tvdXRWYWx1ZSIsICJzZWN1cmVUb2tlbiIsICJwcm9tb0NvZGUiLCAiY2hlY2tvdXRQcmV2aWV3IiwgImN1cnJlbmNpZXMiLCAiaW52IiwgImFtb3VudEF0b20iLCAiZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50IiwgImlzU2V0dXBNb2RlIiwgInRva2VuaXplQ2FyZE9uQWxsQ29ubmVjdGlvbnMiLCAiYWxsQ2RlQ29ubmVjdGlvbnMiLCAiY2hlY2tvdXRDYXJkRWxlbWVudHMiLCAic2V0dXBDaGVja291dCIsICJwZXJmb3JtQ2hlY2tvdXQiLCAiQ0RFX1BPTExJTkdfSU5URVJWQUwiLCAicGluZ0NkZUZvcjNkc1N0YXR1cyIsICJpZnJhbWUiLCAiY2hpbGRPcmlnaW4iLCAiY29ubmVjdGlvbk9iaiIsICJjcmVhdGVBbmRPcGVuRnJhbWUiLCAidXJsIiwgInRlbXBsYXRlIiwgImhvc3QiLCAic2hhZG93Um9vdCIsICJjYW5jZWxCdXR0b24iLCAic3RhcnRQb2xsaW5nIiwgIm9uU3VjY2VzcyIsICJoYW5kbGVQb2xsaW5nIiwgInN0YXR1cyIsICJwb2xsaW5nSW50ZXJ2YWwiLCAiaGFuZGxlRXZlbnRzIiwgImVsZW1lbnRzIiwgImhhbmRsZUNhbmNlbCIsICJzdGFydDNkc1ZlcmlmaWNhdGlvbiIsICJjbGVhbnVwRXZlbnRMaXN0ZW5lcnMiLCAiYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMiLCAic2ltcGxlT2pzRmxvdyIsICJwYXJhbXMiLCAiZmxvd1Jlc3VsdCIsICJhZGRFcnJvckNhdGNoZXJGb3JJbml0IiwgImluaXQiLCAiZXJyX18iLCAiY3JlYXRlT2pzRmxvd0xvZ2dlcnMiLCAicHJlZml4IiwgImxvZyIsICJsb2dfXyQzIiwgImVycl9fJDQiLCAidmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MiLCAibm9uQ2RlRm9ybUlucHV0cyIsICJvblZhbGlkYXRpb25FcnJvciIsICJmb3JtYXR0ZWQiLCAiaXNzdWVzIiwgInZhbGlkYXRlVG9rZW5pemVDYXJkUmVzdWx0cyIsICJ0b2tlbml6ZVJlc3VsdHMiLCAidG9rZW5pemVSZXN1bHQiLCAicGFyc2VkIiwgImVycl9fJDMiLCAicGFyc2VDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZSIsICJmaW5kQ3BtTWF0Y2hpbmdUeXBlIiwgImFsbENQTXMiLCAiem9kTW9kZWwiLCAiY3BtIiwgImNwbTIiLCAibG9nX18kMiIsICJlcnJfXyQyIiwgInN0cmlwZUxvZ19fIiwgInJ1bkNvbW1vbkNjRmxvdyIsICJjb250ZXh0IiwgImNoZWNrb3V0UGF5bWVudE1ldGhvZCIsICJmbG93Q2FsbGJhY2tzIiwgImFueUNkZUNvbm5lY3Rpb24iLCAicHJlZmlsbCIsICJub25DZGVGb3JtRmllbGRzIiwgInRva2VuaXplQ2FyZFJlc3VsdHMiLCAiY29tbW9uQ2hlY2tvdXRQYXJhbXMiLCAic2hvdWxkVXNlTmV3RmxvdyIsICJzdGFydFBmUmVzdWx0IiwgImNvbW1vbkNDM0RTRmxvdyIsICJzdHJpcGVDQzNEU0Zsb3ciLCAiY3JlYXRlZFBheW1lbnRNZXRob2QiLCAicGFyc2VTdHJpcGUzRFNOZXh0QWN0aW9uTWV0YWRhdGEiLCAic3RyaXBlQWN0aW9uIiwgImFjdGlvbiIsICJwYXJzZUNvbW1vbjNEU05leHRBY3Rpb25NZXRhZGF0YSIsICJjb21tb25BY3Rpb24iLCAibG9nX18kMSIsICJlcnJfXyQxIiwgIlN0cmlwZVByQ3BtIiwgImluaXRTdHJpcGVQckZsb3ciLCAiaW5pdGlhbFByZXZpZXciLCAicHIiLCAiY2FuTWFrZVBheW1lbnQiLCAicnVuU3RyaXBlUHJGbG93IiwgImN1c3RvbVBhcmFtcyIsICJpbml0UmVzdWx0IiwgImNsZWFuZWRGb3JtSW5wdXRzIiwgIm92ZXJyaWRlRW1wdHlaaXBDb2RlIiwgIm92ZXJyaWRlIiwgInVwZGF0ZVByV2l0aEFtb3VudCIsICJzdHJpcGVQbUFkZGVkRXZlbnQiLCAic3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlIiwgInBhcnNlUFJOZXh0QWN0aW9uTWV0YWRhdGEiLCAiY2hlY2tvdXRSZXF1ZXN0IiwgImZvcm1JbnB1dHMiLCAibmV3Rm9ybUlucHV0cyIsICJhbW91bnQiLCAiaXNQZW5kaW5nIiwgImZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QiLCAiY3BtcyIsICJ3aXRoUHJvdmlkZXIiLCAid2l0aFByb2Nlc3NvciIsICJtYXRjaGVzIiwgIk9qc0Zsb3dzIiwgImdldERlZmF1bHRFeHBvcnRGcm9tQ2pzIiwgIngiLCAiT2JzZXJ2YWJsZSQyIiwgImhhc1N5bWJvbCIsICJuYW1lIiwgImdldFN5bWJvbCIsICJTeW1ib2xJdGVyYXRvciIsICJTeW1ib2xPYnNlcnZhYmxlIiwgIlN5bWJvbFNwZWNpZXMiLCAiZ2V0TWV0aG9kIiwgImdldFNwZWNpZXMiLCAiY3RvciIsICJPYnNlcnZhYmxlJDEiLCAiaXNPYnNlcnZhYmxlIiwgImhvc3RSZXBvcnRFcnJvciIsICJlbnF1ZXVlIiwgImNsZWFudXBTdWJzY3JpcHRpb24iLCAic3Vic2NyaXB0aW9uIiwgImNsZWFudXAiLCAidW5zdWJzY3JpYmUiLCAiY2xvc2VTdWJzY3JpcHRpb24iLCAiZmx1c2hTdWJzY3JpcHRpb24iLCAicXVldWUiLCAibm90aWZ5U3Vic2NyaXB0aW9uIiwgInR5cGUiLCAib2JzZXJ2ZXIiLCAibSIsICJvbk5vdGlmeSIsICJTdWJzY3JpcHRpb24iLCAic3Vic2NyaWJlciIsICJzZWxmIiwgInN1YnNjcmlwdGlvbk9ic2VydmVyIiwgIk9ic2VydmFibGUiLCAiZG9uZSIsICJDIiwgImhhc1NlZWQiLCAiaGFzVmFsdWUiLCAiZmlyc3QiLCAidmFsdWVzIiwgInNvdXJjZXMiLCAiaW5kZXgiLCAic3RhcnROZXh0IiwgIm5leHQiLCAidiIsICJzdWJzY3JpcHRpb25zIiwgIm91dGVyIiwgImlubmVyIiwgImNvbXBsZXRlSWZEb25lIiwgInMiLCAibWV0aG9kIiwgIm9ic2VydmFibGUiLCAiaXRlbSIsICJpdGVtcyIsICJ6ZW5PYnNlcnZhYmxlIiwgImxvZ19fIiwgImluaXRpYWxpemVPanNGbG93cyIsICJydW5Jbml0Rmxvd0FzT2JzZXJ2YWJsZSIsICJmbG93TmFtZSIsICJpbml0RmxvdyIsICJQUl9MT0FESU5HIiwgIlBSX0VSUk9SIiwgIk9wZW5QYXlGb3JtRXZlbnRIYW5kbGVyIiwgImZvcm1JbnN0YW5jZSIsICJoZWlnaHQiLCAiZmllbGQiLCAic291cmNlIiwgImNyZWF0ZUNvbm5lY3Rpb24iLCAiaXNWYWxpZE9iamVjdCIsICJDb25uZWN0aW9uTWFuYWdlciIsICJpZCIsICJjb25uZWN0aW9uIiwgIl9PcGVuUGF5Rm9ybSIsICJjb25maWciLCAiaW5pdFN0YXR1cyIsICJfZSIsICJfZiIsICJjYW5BcHBsZVBheSIsICJjYW5Hb29nbGVQYXkiLCAidXNlclBhcmFtcyIsICJwcm92aWRlciIsICJmb3JtIiwgImVsZW1lbnQiLCAiZWxlbWVudFZhbHVlIiwgImZyYW1lIiwgInF1ZXJ5U3RyaW5nIiwgInNlbGVjdG9yIiwgImNvbm4iLCAiY2RlQ29ubmVjdGlvbnMiLCAibm9PcCIsICJlcnJNc2ciLCAiT3BlblBheUZvcm0iXQp9Cg==