-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy path4341.9f80fb92.iframe.bundle.js
2 lines (2 loc) · 291 KB
/
4341.9f80fb92.iframe.bundle.js
1
2
"use strict";(self.webpackChunkblockly_mooc=self.webpackChunkblockly_mooc||[]).push([[4341],{"./node_modules/@reduxjs/toolkit/dist/redux-toolkit.esm.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{function n(n){for(var r=arguments.length,t=Array(r>1?r-1:0),e=1;e<r;e++)t[e-1]=arguments[e];throw Error("[Immer] minified error nr: "+n+(t.length?" "+t.map((function(n){return"'"+n+"'"})).join(","):"")+". Find the full error at: https://bit.ly/3cXEKWf")}function r(n){return!!n&&!!n[Q]}function t(n){var r;return!!n&&(function(n){if(!n||"object"!=typeof n)return!1;var r=Object.getPrototypeOf(n);if(null===r)return!0;var t=Object.hasOwnProperty.call(r,"constructor")&&r.constructor;return t===Object||"function"==typeof t&&Function.toString.call(t)===Z}(n)||Array.isArray(n)||!!n[L]||!!(null===(r=n.constructor)||void 0===r?void 0:r[L])||s(n)||v(n))}function e(t){return r(t)||n(23,t),t[Q].t}function i(n,r,t){void 0===t&&(t=!1),0===o(n)?(t?Object.keys:nn)(n).forEach((function(e){t&&"symbol"==typeof e||r(e,n[e],n)})):n.forEach((function(t,e){return r(e,t,n)}))}function o(n){var r=n[Q];return r?r.i>3?r.i-4:r.i:Array.isArray(n)?1:s(n)?2:v(n)?3:0}function u(n,r){return 2===o(n)?n.has(r):Object.prototype.hasOwnProperty.call(n,r)}function a(n,r){return 2===o(n)?n.get(r):n[r]}function f(n,r,t){var e=o(n);2===e?n.set(r,t):3===e?n.add(t):n[r]=t}function c(n,r){return n===r?0!==n||1/n==1/r:n!=n&&r!=r}function s(n){return X&&n instanceof Map}function v(n){return q&&n instanceof Set}function p(n){return n.o||n.t}function l(n){if(Array.isArray(n))return Array.prototype.slice.call(n);var r=rn(n);delete r[Q];for(var t=nn(r),e=0;e<t.length;e++){var i=t[e],o=r[i];!1===o.writable&&(o.writable=!0,o.configurable=!0),(o.get||o.set)&&(r[i]={configurable:!0,writable:!0,enumerable:o.enumerable,value:n[i]})}return Object.create(Object.getPrototypeOf(n),r)}function d(n,e){return void 0===e&&(e=!1),y(n)||r(n)||!t(n)||(o(n)>1&&(n.set=n.add=n.clear=n.delete=h),Object.freeze(n),e&&i(n,(function(n,r){return d(r,!0)}),!0)),n}function h(){n(2)}function y(n){return null==n||"object"!=typeof n||Object.isFrozen(n)}function b(r){var t=tn[r];return t||n(18,r),t}function m(n,r){tn[n]||(tn[n]=r)}function _(){return U}function j(n,r){r&&(b("Patches"),n.u=[],n.s=[],n.v=r)}function O(n){g(n),n.p.forEach(S),n.p=null}function g(n){n===U&&(U=n.l)}function w(n){return U={p:[],l:U,h:n,m:!0,_:0}}function S(n){var r=n[Q];0===r.i||1===r.i?r.j():r.O=!0}function P(r,e){e._=e.p.length;var i=e.p[0],o=void 0!==r&&r!==i;return e.h.g||b("ES5").S(e,r,o),o?(i[Q].P&&(O(e),n(4)),t(r)&&(r=M(e,r),e.l||x(e,r)),e.u&&b("Patches").M(i[Q].t,r,e.u,e.s)):r=M(e,i,[]),O(e),e.u&&e.v(e.u,e.s),r!==H?r:void 0}function M(n,r,t){if(y(r))return r;var e=r[Q];if(!e)return i(r,(function(i,o){return A(n,e,r,i,o,t)}),!0),r;if(e.A!==n)return r;if(!e.P)return x(n,e.t,!0),e.t;if(!e.I){e.I=!0,e.A._--;var o=4===e.i||5===e.i?e.o=l(e.k):e.o,u=o,a=!1;3===e.i&&(u=new Set(o),o.clear(),a=!0),i(u,(function(r,i){return A(n,e,o,r,i,t,a)})),x(n,o,!1),t&&n.u&&b("Patches").N(e,t,n.u,n.s)}return e.o}function A(e,i,o,a,c,s,v){if(r(c)){var p=M(e,c,s&&i&&3!==i.i&&!u(i.R,a)?s.concat(a):void 0);if(f(o,a,p),!r(p))return;e.m=!1}else v&&o.add(c);if(t(c)&&!y(c)){if(!e.h.D&&e._<1)return;M(e,c),i&&i.A.l||x(e,c)}}function x(n,r,t){void 0===t&&(t=!1),!n.l&&n.h.D&&n.m&&d(r,t)}function z(n,r){var t=n[Q];return(t?p(t):n)[r]}function I(n,r){if(r in n)for(var t=Object.getPrototypeOf(n);t;){var e=Object.getOwnPropertyDescriptor(t,r);if(e)return e;t=Object.getPrototypeOf(t)}}function k(n){n.P||(n.P=!0,n.l&&k(n.l))}function E(n){n.o||(n.o=l(n.t))}function N(n,r,t){var e=s(r)?b("MapSet").F(r,t):v(r)?b("MapSet").T(r,t):n.g?function(n,r){var t=Array.isArray(n),e={i:t?1:0,A:r?r.A:_(),P:!1,I:!1,R:{},l:r,t:n,k:null,o:null,j:null,C:!1},i=e,o=en;t&&(i=[e],o=on);var u=Proxy.revocable(i,o),a=u.revoke,f=u.proxy;return e.k=f,e.j=a,f}(r,t):b("ES5").J(r,t);return(t?t.A:_()).p.push(e),e}function R(e){return r(e)||n(22,e),function n(r){if(!t(r))return r;var e,u=r[Q],c=o(r);if(u){if(!u.P&&(u.i<4||!b("ES5").K(u)))return u.t;u.I=!0,e=D(r,c),u.I=!1}else e=D(r,c);return i(e,(function(r,t){u&&a(u.t,r)===t||f(e,r,n(t))})),3===c?new Set(e):e}(e)}function D(n,r){switch(r){case 2:return new Map(n);case 3:return Array.from(n)}return l(n)}function F(){function t(n,r){var t=s[n];return t?t.enumerable=r:s[n]=t={configurable:!0,enumerable:r,get:function(){var r=this[Q];return en.get(r,n)},set:function(r){var t=this[Q];en.set(t,n,r)}},t}function e(n){for(var r=n.length-1;r>=0;r--){var t=n[r][Q];if(!t.P)switch(t.i){case 5:a(t)&&k(t);break;case 4:o(t)&&k(t)}}}function o(n){for(var r=n.t,t=n.k,e=nn(t),i=e.length-1;i>=0;i--){var o=e[i];if(o!==Q){var a=r[o];if(void 0===a&&!u(r,o))return!0;var f=t[o],s=f&&f[Q];if(s?s.t!==a:!c(f,a))return!0}}var v=!!r[Q];return e.length!==nn(r).length+(v?0:1)}function a(n){var r=n.k;if(r.length!==n.t.length)return!0;var t=Object.getOwnPropertyDescriptor(r,r.length-1);if(t&&!t.get)return!0;for(var e=0;e<r.length;e++)if(!r.hasOwnProperty(e))return!0;return!1}var s={};m("ES5",{J:function(n,r){var e=Array.isArray(n),i=function(n,r){if(n){for(var e=Array(r.length),i=0;i<r.length;i++)Object.defineProperty(e,""+i,t(i,!0));return e}var o=rn(r);delete o[Q];for(var u=nn(o),a=0;a<u.length;a++){var f=u[a];o[f]=t(f,n||!!o[f].enumerable)}return Object.create(Object.getPrototypeOf(r),o)}(e,n),o={i:e?5:4,A:r?r.A:_(),P:!1,I:!1,R:{},l:r,t:n,k:i,o:null,O:!1,C:!1};return Object.defineProperty(i,Q,{value:o,writable:!0}),i},S:function(n,t,o){o?r(t)&&t[Q].A===n&&e(n.p):(n.u&&function n(r){if(r&&"object"==typeof r){var t=r[Q];if(t){var e=t.t,o=t.k,f=t.R,c=t.i;if(4===c)i(o,(function(r){r!==Q&&(void 0!==e[r]||u(e,r)?f[r]||n(o[r]):(f[r]=!0,k(t)))})),i(e,(function(n){void 0!==o[n]||u(o,n)||(f[n]=!1,k(t))}));else if(5===c){if(a(t)&&(k(t),f.length=!0),o.length<e.length)for(var s=o.length;s<e.length;s++)f[s]=!1;else for(var v=e.length;v<o.length;v++)f[v]=!0;for(var p=Math.min(o.length,e.length),l=0;l<p;l++)o.hasOwnProperty(l)||(f[l]=!0),void 0===f[l]&&n(o[l])}}}}(n.p[0]),e(n.p))},K:function(n){return 4===n.i?o(n):a(n)}})}__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{MiddlewareArray:()=>MiddlewareArray,SHOULD_AUTOBATCH:()=>SHOULD_AUTOBATCH,TaskAbortError:()=>TaskAbortError,__DO_NOT_USE__ActionTypes:()=>redux.__DO_NOT_USE__ActionTypes,addListener:()=>addListener,applyMiddleware:()=>redux.applyMiddleware,autoBatchEnhancer:()=>autoBatchEnhancer,bindActionCreators:()=>redux.bindActionCreators,clearAllListeners:()=>clearAllListeners,combineReducers:()=>redux.combineReducers,compose:()=>redux.compose,configureStore:()=>configureStore,createAction:()=>createAction,createAsyncThunk:()=>createAsyncThunk,createDraftSafeSelector:()=>createDraftSafeSelector,createEntityAdapter:()=>createEntityAdapter,createImmutableStateInvariantMiddleware:()=>createImmutableStateInvariantMiddleware,createListenerMiddleware:()=>createListenerMiddleware,createNextState:()=>immer_esm,createReducer:()=>createReducer,createSelector:()=>createSelector,createSerializableStateInvariantMiddleware:()=>createSerializableStateInvariantMiddleware,createSlice:()=>createSlice,createStore:()=>redux.createStore,current:()=>R,findNonSerializableValue:()=>findNonSerializableValue,freeze:()=>d,getDefaultMiddleware:()=>getDefaultMiddleware,getType:()=>getType,isAllOf:()=>isAllOf,isAnyOf:()=>isAnyOf,isAsyncThunkAction:()=>isAsyncThunkAction,isDraft:()=>r,isFulfilled:()=>isFulfilled,isImmutableDefault:()=>isImmutableDefault,isPending:()=>isPending,isPlain:()=>isPlain,isPlainObject:()=>isPlainObject,isRejected:()=>isRejected,isRejectedWithValue:()=>isRejectedWithValue,legacy_createStore:()=>redux.legacy_createStore,miniSerializeError:()=>miniSerializeError,nanoid:()=>nanoid,original:()=>e,prepareAutoBatched:()=>prepareAutoBatched,removeListener:()=>removeListener,unwrapResult:()=>unwrapResult});var G,U,W="undefined"!=typeof Symbol&&"symbol"==typeof Symbol("x"),X="undefined"!=typeof Map,q="undefined"!=typeof Set,B="undefined"!=typeof Proxy&&void 0!==Proxy.revocable&&"undefined"!=typeof Reflect,H=W?Symbol.for("immer-nothing"):((G={})["immer-nothing"]=!0,G),L=W?Symbol.for("immer-draftable"):"__$immer_draftable",Q=W?Symbol.for("immer-state"):"__$immer_state",Z=("undefined"!=typeof Symbol&&Symbol.iterator,""+Object.prototype.constructor),nn="undefined"!=typeof Reflect&&Reflect.ownKeys?Reflect.ownKeys:void 0!==Object.getOwnPropertySymbols?function(n){return Object.getOwnPropertyNames(n).concat(Object.getOwnPropertySymbols(n))}:Object.getOwnPropertyNames,rn=Object.getOwnPropertyDescriptors||function(n){var r={};return nn(n).forEach((function(t){r[t]=Object.getOwnPropertyDescriptor(n,t)})),r},tn={},en={get:function(n,r){if(r===Q)return n;var e=p(n);if(!u(e,r))return function(n,r,t){var e,i=I(r,t);return i?"value"in i?i.value:null===(e=i.get)||void 0===e?void 0:e.call(n.k):void 0}(n,e,r);var i=e[r];return n.I||!t(i)?i:i===z(n.t,r)?(E(n),n.o[r]=N(n.A.h,i,n)):i},has:function(n,r){return r in p(n)},ownKeys:function(n){return Reflect.ownKeys(p(n))},set:function(n,r,t){var e=I(p(n),r);if(null==e?void 0:e.set)return e.set.call(n.k,t),!0;if(!n.P){var i=z(p(n),r),o=null==i?void 0:i[Q];if(o&&o.t===t)return n.o[r]=t,n.R[r]=!1,!0;if(c(t,i)&&(void 0!==t||u(n.t,r)))return!0;E(n),k(n)}return n.o[r]===t&&(void 0!==t||r in n.o)||Number.isNaN(t)&&Number.isNaN(n.o[r])||(n.o[r]=t,n.R[r]=!0),!0},deleteProperty:function(n,r){return void 0!==z(n.t,r)||r in n.t?(n.R[r]=!1,E(n),k(n)):delete n.R[r],n.o&&delete n.o[r],!0},getOwnPropertyDescriptor:function(n,r){var t=p(n),e=Reflect.getOwnPropertyDescriptor(t,r);return e?{writable:!0,configurable:1!==n.i||"length"!==r,enumerable:e.enumerable,value:t[r]}:e},defineProperty:function(){n(11)},getPrototypeOf:function(n){return Object.getPrototypeOf(n.t)},setPrototypeOf:function(){n(12)}},on={};i(en,(function(n,r){on[n]=function(){return arguments[0]=arguments[0][0],r.apply(this,arguments)}})),on.deleteProperty=function(r,t){return on.set.call(this,r,t,void 0)},on.set=function(r,t,e){return en.set.call(this,r[0],t,e,r[0])};var un=function(){function e(r){var e=this;this.g=B,this.D=!0,this.produce=function(r,i,o){if("function"==typeof r&&"function"!=typeof i){var u=i;i=r;var a=e;return function(n){var r=this;void 0===n&&(n=u);for(var t=arguments.length,e=Array(t>1?t-1:0),o=1;o<t;o++)e[o-1]=arguments[o];return a.produce(n,(function(n){var t;return(t=i).call.apply(t,[r,n].concat(e))}))}}var f;if("function"!=typeof i&&n(6),void 0!==o&&"function"!=typeof o&&n(7),t(r)){var c=w(e),s=N(e,r,void 0),v=!0;try{f=i(s),v=!1}finally{v?O(c):g(c)}return"undefined"!=typeof Promise&&f instanceof Promise?f.then((function(n){return j(c,o),P(n,c)}),(function(n){throw O(c),n})):(j(c,o),P(f,c))}if(!r||"object"!=typeof r){if(void 0===(f=i(r))&&(f=r),f===H&&(f=void 0),e.D&&d(f,!0),o){var p=[],l=[];b("Patches").M(r,f,p,l),o(p,l)}return f}n(21,r)},this.produceWithPatches=function(n,r){if("function"==typeof n)return function(r){for(var t=arguments.length,i=Array(t>1?t-1:0),o=1;o<t;o++)i[o-1]=arguments[o];return e.produceWithPatches(r,(function(r){return n.apply(void 0,[r].concat(i))}))};var t,i,o=e.produce(n,r,(function(n,r){t=n,i=r}));return"undefined"!=typeof Promise&&o instanceof Promise?o.then((function(n){return[n,t,i]})):[o,t,i]},"boolean"==typeof(null==r?void 0:r.useProxies)&&this.setUseProxies(r.useProxies),"boolean"==typeof(null==r?void 0:r.autoFreeze)&&this.setAutoFreeze(r.autoFreeze)}var i=e.prototype;return i.createDraft=function(e){t(e)||n(8),r(e)&&(e=R(e));var i=w(this),o=N(this,e,void 0);return o[Q].C=!0,g(i),o},i.finishDraft=function(r,t){var i=(r&&r[Q]).A;return j(i,t),P(void 0,i)},i.setAutoFreeze=function(n){this.D=n},i.setUseProxies=function(r){r&&!B&&n(20),this.g=r},i.applyPatches=function(n,t){var e;for(e=t.length-1;e>=0;e--){var i=t[e];if(0===i.path.length&&"replace"===i.op){n=i.value;break}}e>-1&&(t=t.slice(e+1));var o=b("Patches").$;return r(n)?o(n,t):this.produce(n,(function(n){return o(n,t)}))},e}(),an=new un,fn=an.produce;an.produceWithPatches.bind(an),an.setAutoFreeze.bind(an),an.setUseProxies.bind(an),an.applyPatches.bind(an),an.createDraft.bind(an),an.finishDraft.bind(an);const immer_esm=fn;var redux=__webpack_require__("./node_modules/redux/es/redux.js"),NOT_FOUND="NOT_FOUND";var defaultEqualityCheck=function defaultEqualityCheck(a,b){return a===b};function defaultMemoize(func,equalityCheckOrOptions){var providedOptions="object"==typeof equalityCheckOrOptions?equalityCheckOrOptions:{equalityCheck:equalityCheckOrOptions},_providedOptions$equa=providedOptions.equalityCheck,equalityCheck=void 0===_providedOptions$equa?defaultEqualityCheck:_providedOptions$equa,_providedOptions$maxS=providedOptions.maxSize,maxSize=void 0===_providedOptions$maxS?1:_providedOptions$maxS,resultEqualityCheck=providedOptions.resultEqualityCheck,comparator=function createCacheKeyComparator(equalityCheck){return function areArgumentsShallowlyEqual(prev,next){if(null===prev||null===next||prev.length!==next.length)return!1;for(var length=prev.length,i=0;i<length;i++)if(!equalityCheck(prev[i],next[i]))return!1;return!0}}(equalityCheck),cache=1===maxSize?function createSingletonCache(equals){var entry;return{get:function get(key){return entry&&equals(entry.key,key)?entry.value:NOT_FOUND},put:function put(key,value){entry={key,value}},getEntries:function getEntries(){return entry?[entry]:[]},clear:function clear(){entry=void 0}}}(comparator):function createLruCache(maxSize,equals){var entries=[];function get(key){var cacheIndex=entries.findIndex((function(entry){return equals(key,entry.key)}));if(cacheIndex>-1){var entry=entries[cacheIndex];return cacheIndex>0&&(entries.splice(cacheIndex,1),entries.unshift(entry)),entry.value}return NOT_FOUND}return{get,put:function put(key,value){get(key)===NOT_FOUND&&(entries.unshift({key,value}),entries.length>maxSize&&entries.pop())},getEntries:function getEntries(){return entries},clear:function clear(){entries=[]}}}(maxSize,comparator);function memoized(){var value=cache.get(arguments);if(value===NOT_FOUND){if(value=func.apply(null,arguments),resultEqualityCheck){var matchingEntry=cache.getEntries().find((function(entry){return resultEqualityCheck(entry.value,value)}));matchingEntry&&(value=matchingEntry.value)}cache.put(arguments,value)}return value}return memoized.clearCache=function(){return cache.clear()},memoized}function createSelectorCreator(memoize){for(var _len=arguments.length,memoizeOptionsFromArgs=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++)memoizeOptionsFromArgs[_key-1]=arguments[_key];return function createSelector(){for(var _len2=arguments.length,funcs=new Array(_len2),_key2=0;_key2<_len2;_key2++)funcs[_key2]=arguments[_key2];var _lastResult,_recomputations=0,directlyPassedOptions={memoizeOptions:void 0},resultFunc=funcs.pop();if("object"==typeof resultFunc&&(directlyPassedOptions=resultFunc,resultFunc=funcs.pop()),"function"!=typeof resultFunc)throw new Error("createSelector expects an output function after the inputs, but received: ["+typeof resultFunc+"]");var _directlyPassedOption2=directlyPassedOptions.memoizeOptions,memoizeOptions=void 0===_directlyPassedOption2?memoizeOptionsFromArgs:_directlyPassedOption2,finalMemoizeOptions=Array.isArray(memoizeOptions)?memoizeOptions:[memoizeOptions],dependencies=function getDependencies(funcs){var dependencies=Array.isArray(funcs[0])?funcs[0]:funcs;if(!dependencies.every((function(dep){return"function"==typeof dep}))){var dependencyTypes=dependencies.map((function(dep){return"function"==typeof dep?"function "+(dep.name||"unnamed")+"()":typeof dep})).join(", ");throw new Error("createSelector expects all input-selectors to be functions, but received the following types: ["+dependencyTypes+"]")}return dependencies}(funcs),memoizedResultFunc=memoize.apply(void 0,[function recomputationWrapper(){return _recomputations++,resultFunc.apply(null,arguments)}].concat(finalMemoizeOptions)),selector=memoize((function dependenciesChecker(){for(var params=[],length=dependencies.length,i=0;i<length;i++)params.push(dependencies[i].apply(null,arguments));return _lastResult=memoizedResultFunc.apply(null,params)}));return Object.assign(selector,{resultFunc,memoizedResultFunc,dependencies,lastResult:function lastResult(){return _lastResult},recomputations:function recomputations(){return _recomputations},resetRecomputations:function resetRecomputations(){return _recomputations=0}}),selector}}var createSelector=createSelectorCreator(defaultMemoize);function createThunkMiddleware(extraArgument){return function middleware(_ref){var dispatch=_ref.dispatch,getState=_ref.getState;return function(next){return function(action){return"function"==typeof action?action(dispatch,getState,extraArgument):next(action)}}}}var thunk=createThunkMiddleware();thunk.withExtraArgument=createThunkMiddleware;const es=thunk;__webpack_require__("./node_modules/process/browser.js");var extendStatics,__extends=(extendStatics=function(d,b){return extendStatics=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(d,b){d.__proto__=b}||function(d,b){for(var p in b)Object.prototype.hasOwnProperty.call(b,p)&&(d[p]=b[p])},extendStatics(d,b)},function(d,b){if("function"!=typeof b&&null!==b)throw new TypeError("Class extends value "+String(b)+" is not a constructor or null");function __(){this.constructor=d}extendStatics(d,b),d.prototype=null===b?Object.create(b):(__.prototype=b.prototype,new __)}),__generator=function(thisArg,body){var f,y,t,g,_={label:0,sent:function(){if(1&t[0])throw t[1];return t[1]},trys:[],ops:[]};return g={next:verb(0),throw:verb(1),return:verb(2)},"function"==typeof Symbol&&(g[Symbol.iterator]=function(){return this}),g;function verb(n){return function(v){return function step(op){if(f)throw new TypeError("Generator is already executing.");for(;_;)try{if(f=1,y&&(t=2&op[0]?y.return:op[0]?y.throw||((t=y.return)&&t.call(y),0):y.next)&&!(t=t.call(y,op[1])).done)return t;switch(y=0,t&&(op=[2&op[0],t.value]),op[0]){case 0:case 1:t=op;break;case 4:return _.label++,{value:op[1],done:!1};case 5:_.label++,y=op[1],op=[0];continue;case 7:op=_.ops.pop(),_.trys.pop();continue;default:if(!(t=_.trys,(t=t.length>0&&t[t.length-1])||6!==op[0]&&2!==op[0])){_=0;continue}if(3===op[0]&&(!t||op[1]>t[0]&&op[1]<t[3])){_.label=op[1];break}if(6===op[0]&&_.label<t[1]){_.label=t[1],t=op;break}if(t&&_.label<t[2]){_.label=t[2],_.ops.push(op);break}t[2]&&_.ops.pop(),_.trys.pop();continue}op=body.call(thisArg,_)}catch(e){op=[6,e],y=0}finally{f=t=0}if(5&op[0])throw op[1];return{value:op[0]?op[1]:void 0,done:!0}}([n,v])}}},__spreadArray=function(to,from){for(var i=0,il=from.length,j=to.length;i<il;i++,j++)to[j]=from[i];return to},__defProp=Object.defineProperty,__defProps=Object.defineProperties,__getOwnPropDescs=Object.getOwnPropertyDescriptors,__getOwnPropSymbols=Object.getOwnPropertySymbols,__hasOwnProp=Object.prototype.hasOwnProperty,__propIsEnum=Object.prototype.propertyIsEnumerable,__defNormalProp=function(obj,key,value){return key in obj?__defProp(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value},__spreadValues=function(a,b){for(var prop in b||(b={}))__hasOwnProp.call(b,prop)&&__defNormalProp(a,prop,b[prop]);if(__getOwnPropSymbols)for(var _i=0,_c=__getOwnPropSymbols(b);_i<_c.length;_i++){prop=_c[_i];__propIsEnum.call(b,prop)&&__defNormalProp(a,prop,b[prop])}return a},__spreadProps=function(a,b){return __defProps(a,__getOwnPropDescs(b))},__async=function(__this,__arguments,generator){return new Promise((function(resolve,reject){var fulfilled=function(value){try{step(generator.next(value))}catch(e){reject(e)}},rejected=function(value){try{step(generator.throw(value))}catch(e){reject(e)}},step=function(x){return x.done?resolve(x.value):Promise.resolve(x.value).then(fulfilled,rejected)};step((generator=generator.apply(__this,__arguments)).next())}))},createDraftSafeSelector=function(){for(var args=[],_i=0;_i<arguments.length;_i++)args[_i]=arguments[_i];var selector=createSelector.apply(void 0,args);return function(value){for(var rest=[],_i=1;_i<arguments.length;_i++)rest[_i-1]=arguments[_i];return selector.apply(void 0,__spreadArray([r(value)?R(value):value],rest))}},composeWithDevTools="undefined"!=typeof window&&window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__?window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__:function(){if(0!==arguments.length)return"object"==typeof arguments[0]?redux.compose:redux.compose.apply(null,arguments)};"undefined"!=typeof window&&window.__REDUX_DEVTOOLS_EXTENSION__&&window.__REDUX_DEVTOOLS_EXTENSION__;function isPlainObject(value){if("object"!=typeof value||null===value)return!1;var proto=Object.getPrototypeOf(value);if(null===proto)return!0;for(var baseProto=proto;null!==Object.getPrototypeOf(baseProto);)baseProto=Object.getPrototypeOf(baseProto);return proto===baseProto}var MiddlewareArray=function(_super){function MiddlewareArray(){for(var args=[],_i=0;_i<arguments.length;_i++)args[_i]=arguments[_i];var _this=_super.apply(this,args)||this;return Object.setPrototypeOf(_this,MiddlewareArray.prototype),_this}return __extends(MiddlewareArray,_super),Object.defineProperty(MiddlewareArray,Symbol.species,{get:function(){return MiddlewareArray},enumerable:!1,configurable:!0}),MiddlewareArray.prototype.concat=function(){for(var arr=[],_i=0;_i<arguments.length;_i++)arr[_i]=arguments[_i];return _super.prototype.concat.apply(this,arr)},MiddlewareArray.prototype.prepend=function(){for(var arr=[],_i=0;_i<arguments.length;_i++)arr[_i]=arguments[_i];return 1===arr.length&&Array.isArray(arr[0])?new(MiddlewareArray.bind.apply(MiddlewareArray,__spreadArray([void 0],arr[0].concat(this)))):new(MiddlewareArray.bind.apply(MiddlewareArray,__spreadArray([void 0],arr.concat(this))))},MiddlewareArray}(Array);function freezeDraftable(val){return t(val)?immer_esm(val,(function(){})):val}function isImmutableDefault(value){return"object"!=typeof value||null==value||Object.isFrozen(value)}function createImmutableStateInvariantMiddleware(options){return void 0===options&&(options={}),function(){return function(next){return function(action){return next(action)}}}}function isPlain(val){var type=typeof val;return null==val||"string"===type||"boolean"===type||"number"===type||Array.isArray(val)||isPlainObject(val)}function findNonSerializableValue(value,path,isSerializable,getEntries,ignoredPaths,cache){var foundNestedSerializable;if(void 0===path&&(path=""),void 0===isSerializable&&(isSerializable=isPlain),void 0===ignoredPaths&&(ignoredPaths=[]),!isSerializable(value))return{keyPath:path||"<root>",value};if("object"!=typeof value||null===value)return!1;if(null==cache?void 0:cache.has(value))return!1;for(var entries=null!=getEntries?getEntries(value):Object.entries(value),hasIgnoredPaths=ignoredPaths.length>0,_loop_2=function(key,nestedValue){var nestedPath=path?path+"."+key:key;if(hasIgnoredPaths&&ignoredPaths.some((function(ignored){return ignored instanceof RegExp?ignored.test(nestedPath):nestedPath===ignored})))return"continue";return isSerializable(nestedValue)?"object"==typeof nestedValue&&(foundNestedSerializable=findNonSerializableValue(nestedValue,nestedPath,isSerializable,getEntries,ignoredPaths,cache))?{value:foundNestedSerializable}:void 0:{value:{keyPath:nestedPath,value:nestedValue}}},_i=0,entries_1=entries;_i<entries_1.length;_i++){var _c=entries_1[_i],state_2=_loop_2(_c[0],_c[1]);if("object"==typeof state_2)return state_2.value}return cache&&isNestedFrozen(value)&&cache.add(value),!1}function isNestedFrozen(value){if(!Object.isFrozen(value))return!1;for(var _i=0,_c=Object.values(value);_i<_c.length;_i++){var nestedValue=_c[_i];if("object"==typeof nestedValue&&null!==nestedValue&&!isNestedFrozen(nestedValue))return!1}return!0}function createSerializableStateInvariantMiddleware(options){return void 0===options&&(options={}),function(){return function(next){return function(action){return next(action)}}}}function getDefaultMiddleware(options){void 0===options&&(options={});var _c=options.thunk,thunk=void 0===_c||_c,middlewareArray=(options.immutableCheck,options.serializableCheck,new MiddlewareArray);return thunk&&(!function isBoolean(x){return"boolean"==typeof x}(thunk)?middlewareArray.push(es.withExtraArgument(thunk.extraArgument)):middlewareArray.push(es)),middlewareArray}var IS_PRODUCTION=!0;function configureStore(options){var rootReducer,curriedGetDefaultMiddleware=function curryGetDefaultMiddleware(){return function curriedGetDefaultMiddleware(options){return getDefaultMiddleware(options)}}(),_c=options||{},_d=_c.reducer,reducer=void 0===_d?void 0:_d,_e=_c.middleware,middleware=void 0===_e?curriedGetDefaultMiddleware():_e,_f=_c.devTools,devTools=void 0===_f||_f,_g=_c.preloadedState,preloadedState=void 0===_g?void 0:_g,_h=_c.enhancers,enhancers=void 0===_h?void 0:_h;if("function"==typeof reducer)rootReducer=reducer;else{if(!isPlainObject(reducer))throw new Error('"reducer" is a required argument, and must be a function or an object of functions that can be passed to combineReducers');rootReducer=(0,redux.combineReducers)(reducer)}var finalMiddleware=middleware;if("function"==typeof finalMiddleware&&(finalMiddleware=finalMiddleware(curriedGetDefaultMiddleware),!IS_PRODUCTION&&!Array.isArray(finalMiddleware)))throw new Error("when using a middleware builder function, an array of middleware must be returned");if(!IS_PRODUCTION&&finalMiddleware.some((function(item){return"function"!=typeof item})))throw new Error("each middleware provided to configureStore must be a function");var middlewareEnhancer=redux.applyMiddleware.apply(void 0,finalMiddleware),finalCompose=redux.compose;devTools&&(finalCompose=composeWithDevTools(__spreadValues({trace:!IS_PRODUCTION},"object"==typeof devTools&&devTools)));var storeEnhancers=[middlewareEnhancer];Array.isArray(enhancers)?storeEnhancers=__spreadArray([middlewareEnhancer],enhancers):"function"==typeof enhancers&&(storeEnhancers=enhancers(storeEnhancers));var composedEnhancer=finalCompose.apply(void 0,storeEnhancers);return(0,redux.createStore)(rootReducer,preloadedState,composedEnhancer)}function createAction(type,prepareAction){function actionCreator(){for(var args=[],_i=0;_i<arguments.length;_i++)args[_i]=arguments[_i];if(prepareAction){var prepared=prepareAction.apply(void 0,args);if(!prepared)throw new Error("prepareAction did not return an object");return __spreadValues(__spreadValues({type,payload:prepared.payload},"meta"in prepared&&{meta:prepared.meta}),"error"in prepared&&{error:prepared.error})}return{type,payload:args[0]}}return actionCreator.toString=function(){return""+type},actionCreator.type=type,actionCreator.match=function(action){return action.type===type},actionCreator}function isValidKey(key){return["type","payload","error","meta"].indexOf(key)>-1}function getType(actionCreator){return""+actionCreator}function executeReducerBuilderCallback(builderCallback){var defaultCaseReducer,actionsMap={},actionMatchers=[],builder={addCase:function(typeOrActionCreator,reducer){var type="string"==typeof typeOrActionCreator?typeOrActionCreator:typeOrActionCreator.type;if(type in actionsMap)throw new Error("addCase cannot be called with two reducers for the same action type");return actionsMap[type]=reducer,builder},addMatcher:function(matcher,reducer){return actionMatchers.push({matcher,reducer}),builder},addDefaultCase:function(reducer){return defaultCaseReducer=reducer,builder}};return builderCallback(builder),[actionsMap,actionMatchers,defaultCaseReducer]}function createReducer(initialState,mapOrBuilderCallback,actionMatchers,defaultCaseReducer){void 0===actionMatchers&&(actionMatchers=[]);var getInitialState,_c="function"==typeof mapOrBuilderCallback?executeReducerBuilderCallback(mapOrBuilderCallback):[mapOrBuilderCallback,actionMatchers,defaultCaseReducer],actionsMap=_c[0],finalActionMatchers=_c[1],finalDefaultCaseReducer=_c[2];if(function isStateFunction(x){return"function"==typeof x}(initialState))getInitialState=function(){return freezeDraftable(initialState())};else{var frozenInitialState_1=freezeDraftable(initialState);getInitialState=function(){return frozenInitialState_1}}function reducer(state,action){void 0===state&&(state=getInitialState());var caseReducers=__spreadArray([actionsMap[action.type]],finalActionMatchers.filter((function(_c){return(0,_c.matcher)(action)})).map((function(_c){return _c.reducer})));return 0===caseReducers.filter((function(cr){return!!cr})).length&&(caseReducers=[finalDefaultCaseReducer]),caseReducers.reduce((function(previousState,caseReducer){if(caseReducer){var result;if(r(previousState))return void 0===(result=caseReducer(previousState,action))?previousState:result;if(t(previousState))return immer_esm(previousState,(function(draft){return caseReducer(draft,action)}));if(void 0===(result=caseReducer(previousState,action))){if(null===previousState)return previousState;throw Error("A case reducer on a non-draftable value must not return undefined")}return result}return previousState}),state)}return reducer.getInitialState=getInitialState,reducer}function createSlice(options){var name=options.name;if(!name)throw new Error("`name` is a required option for createSlice");var _reducer,initialState="function"==typeof options.initialState?options.initialState:freezeDraftable(options.initialState),reducers=options.reducers||{},reducerNames=Object.keys(reducers),sliceCaseReducersByName={},sliceCaseReducersByType={},actionCreators={};function buildReducer(){var _c="function"==typeof options.extraReducers?executeReducerBuilderCallback(options.extraReducers):[options.extraReducers],_d=_c[0],extraReducers=void 0===_d?{}:_d,_e=_c[1],actionMatchers=void 0===_e?[]:_e,_f=_c[2],defaultCaseReducer=void 0===_f?void 0:_f,finalCaseReducers=__spreadValues(__spreadValues({},extraReducers),sliceCaseReducersByType);return createReducer(initialState,(function(builder){for(var key in finalCaseReducers)builder.addCase(key,finalCaseReducers[key]);for(var _i=0,actionMatchers_1=actionMatchers;_i<actionMatchers_1.length;_i++){var m=actionMatchers_1[_i];builder.addMatcher(m.matcher,m.reducer)}defaultCaseReducer&&builder.addDefaultCase(defaultCaseReducer)}))}return reducerNames.forEach((function(reducerName){var caseReducer,prepareCallback,maybeReducerWithPrepare=reducers[reducerName],type=function getType2(slice,actionKey){return slice+"/"+actionKey}(name,reducerName);"reducer"in maybeReducerWithPrepare?(caseReducer=maybeReducerWithPrepare.reducer,prepareCallback=maybeReducerWithPrepare.prepare):caseReducer=maybeReducerWithPrepare,sliceCaseReducersByName[reducerName]=caseReducer,sliceCaseReducersByType[type]=caseReducer,actionCreators[reducerName]=prepareCallback?createAction(type,prepareCallback):createAction(type)})),{name,reducer:function(state,action){return _reducer||(_reducer=buildReducer()),_reducer(state,action)},actions:actionCreators,caseReducers:sliceCaseReducersByName,getInitialState:function(){return _reducer||(_reducer=buildReducer()),_reducer.getInitialState()}}}function createStateOperator(mutator){return function operation(state,arg){function isPayloadActionArgument(arg2){return function isFSA(action){return isPlainObject(action)&&"string"==typeof action.type&&Object.keys(action).every(isValidKey)}(arg2)}var runMutator=function(draft){isPayloadActionArgument(arg)?mutator(arg.payload,draft):mutator(arg,draft)};return r(state)?(runMutator(state),state):immer_esm(state,runMutator)}}function selectIdValue(entity,selectId){return selectId(entity)}function ensureEntitiesArray(entities){return Array.isArray(entities)||(entities=Object.values(entities)),entities}function splitAddedUpdatedEntities(newEntities,selectId,state){for(var added=[],updated=[],_i=0,newEntities_1=newEntities=ensureEntitiesArray(newEntities);_i<newEntities_1.length;_i++){var entity=newEntities_1[_i],id=selectIdValue(entity,selectId);id in state.entities?updated.push({id,changes:entity}):added.push(entity)}return[added,updated]}function createUnsortedStateAdapter(selectId){function addOneMutably(entity,state){var key=selectIdValue(entity,selectId);key in state.entities||(state.ids.push(key),state.entities[key]=entity)}function addManyMutably(newEntities,state){for(var _i=0,newEntities_2=newEntities=ensureEntitiesArray(newEntities);_i<newEntities_2.length;_i++){addOneMutably(newEntities_2[_i],state)}}function setOneMutably(entity,state){var key=selectIdValue(entity,selectId);key in state.entities||state.ids.push(key),state.entities[key]=entity}function removeManyMutably(keys,state){var didMutate=!1;keys.forEach((function(key){key in state.entities&&(delete state.entities[key],didMutate=!0)})),didMutate&&(state.ids=state.ids.filter((function(id){return id in state.entities})))}function updateManyMutably(updates,state){var newKeys={},updatesPerEntity={};if(updates.forEach((function(update){update.id in state.entities&&(updatesPerEntity[update.id]={id:update.id,changes:__spreadValues(__spreadValues({},updatesPerEntity[update.id]?updatesPerEntity[update.id].changes:null),update.changes)})})),(updates=Object.values(updatesPerEntity)).length>0){var didMutateIds=updates.filter((function(update){return function takeNewKey(keys,update,state){var original2=state.entities[update.id],updated=Object.assign({},original2,update.changes),newKey=selectIdValue(updated,selectId),hasNewKey=newKey!==update.id;return hasNewKey&&(keys[update.id]=newKey,delete state.entities[update.id]),state.entities[newKey]=updated,hasNewKey}(newKeys,update,state)})).length>0;didMutateIds&&(state.ids=Object.keys(state.entities))}}function upsertManyMutably(newEntities,state){var _c=splitAddedUpdatedEntities(newEntities,selectId,state),added=_c[0];updateManyMutably(_c[1],state),addManyMutably(added,state)}return{removeAll:(mutator=function removeAllMutably(state){Object.assign(state,{ids:[],entities:{}})},operator=createStateOperator((function(_,state){return mutator(state)})),function operation(state){return operator(state,void 0)}),addOne:createStateOperator(addOneMutably),addMany:createStateOperator(addManyMutably),setOne:createStateOperator(setOneMutably),setMany:createStateOperator((function setManyMutably(newEntities,state){for(var _i=0,newEntities_3=newEntities=ensureEntitiesArray(newEntities);_i<newEntities_3.length;_i++){setOneMutably(newEntities_3[_i],state)}})),setAll:createStateOperator((function setAllMutably(newEntities,state){newEntities=ensureEntitiesArray(newEntities),state.ids=[],state.entities={},addManyMutably(newEntities,state)})),updateOne:createStateOperator((function updateOneMutably(update,state){return updateManyMutably([update],state)})),updateMany:createStateOperator(updateManyMutably),upsertOne:createStateOperator((function upsertOneMutably(entity,state){return upsertManyMutably([entity],state)})),upsertMany:createStateOperator(upsertManyMutably),removeOne:createStateOperator((function removeOneMutably(key,state){return removeManyMutably([key],state)})),removeMany:createStateOperator(removeManyMutably)};var mutator,operator}function createEntityAdapter(options){void 0===options&&(options={});var _c=__spreadValues({sortComparer:!1,selectId:function(instance){return instance.id}},options),selectId=_c.selectId,sortComparer=_c.sortComparer,stateFactory=function createInitialStateFactory(){return{getInitialState:function getInitialState(additionalState){return void 0===additionalState&&(additionalState={}),Object.assign({ids:[],entities:{}},additionalState)}}}(),selectorsFactory=function createSelectorsFactory(){return{getSelectors:function getSelectors(selectState){var selectIds=function(state){return state.ids},selectEntities=function(state){return state.entities},selectAll=createDraftSafeSelector(selectIds,selectEntities,(function(ids,entities){return ids.map((function(id){return entities[id]}))})),selectId=function(_,id){return id},selectById=function(entities,id){return entities[id]},selectTotal=createDraftSafeSelector(selectIds,(function(ids){return ids.length}));if(!selectState)return{selectIds,selectEntities,selectAll,selectTotal,selectById:createDraftSafeSelector(selectEntities,selectId,selectById)};var selectGlobalizedEntities=createDraftSafeSelector(selectState,selectEntities);return{selectIds:createDraftSafeSelector(selectState,selectIds),selectEntities:selectGlobalizedEntities,selectAll:createDraftSafeSelector(selectState,selectAll),selectTotal:createDraftSafeSelector(selectState,selectTotal),selectById:createDraftSafeSelector(selectGlobalizedEntities,selectId,selectById)}}}}(),stateAdapter=sortComparer?function createSortedStateAdapter(selectId,sort){var _c=createUnsortedStateAdapter(selectId);function addManyMutably(newEntities,state){var models=(newEntities=ensureEntitiesArray(newEntities)).filter((function(model){return!(selectIdValue(model,selectId)in state.entities)}));0!==models.length&&merge(models,state)}function setManyMutably(newEntities,state){0!==(newEntities=ensureEntitiesArray(newEntities)).length&&merge(newEntities,state)}function updateManyMutably(updates,state){for(var appliedUpdates=!1,_i=0,updates_1=updates;_i<updates_1.length;_i++){var update=updates_1[_i],entity=state.entities[update.id];if(entity){appliedUpdates=!0,Object.assign(entity,update.changes);var newId=selectId(entity);update.id!==newId&&(delete state.entities[update.id],state.entities[newId]=entity)}}appliedUpdates&&resortEntities(state)}function upsertManyMutably(newEntities,state){var _c=splitAddedUpdatedEntities(newEntities,selectId,state),added=_c[0];updateManyMutably(_c[1],state),addManyMutably(added,state)}function merge(models,state){models.forEach((function(model){state.entities[selectId(model)]=model})),resortEntities(state)}function resortEntities(state){var allEntities=Object.values(state.entities);allEntities.sort(sort);var newSortedIds=allEntities.map(selectId);(function areArraysEqual(a,b){if(a.length!==b.length)return!1;for(var i=0;i<a.length&&i<b.length;i++)if(a[i]!==b[i])return!1;return!0})(state.ids,newSortedIds)||(state.ids=newSortedIds)}return{removeOne:_c.removeOne,removeMany:_c.removeMany,removeAll:_c.removeAll,addOne:createStateOperator((function addOneMutably(entity,state){return addManyMutably([entity],state)})),updateOne:createStateOperator((function updateOneMutably(update,state){return updateManyMutably([update],state)})),upsertOne:createStateOperator((function upsertOneMutably(entity,state){return upsertManyMutably([entity],state)})),setOne:createStateOperator((function setOneMutably(entity,state){return setManyMutably([entity],state)})),setMany:createStateOperator(setManyMutably),setAll:createStateOperator((function setAllMutably(newEntities,state){newEntities=ensureEntitiesArray(newEntities),state.entities={},state.ids=[],addManyMutably(newEntities,state)})),addMany:createStateOperator(addManyMutably),updateMany:createStateOperator(updateManyMutably),upsertMany:createStateOperator(upsertManyMutably)}}(selectId,sortComparer):createUnsortedStateAdapter(selectId);return __spreadValues(__spreadValues(__spreadValues({selectId,sortComparer},stateFactory),selectorsFactory),stateAdapter)}var nanoid=function(size){void 0===size&&(size=21);for(var id="",i=size;i--;)id+="ModuleSymbhasOwnPr-0123456789ABCDEFGHNRVfgctiUvz_KqYTJkLxpZXIjQW"[64*Math.random()|0];return id},commonProperties=["name","message","stack","code"],RejectWithValue=function RejectWithValue(payload,meta){this.payload=payload,this.meta=meta},FulfillWithMeta=function FulfillWithMeta(payload,meta){this.payload=payload,this.meta=meta},miniSerializeError=function(value){if("object"==typeof value&&null!==value){for(var simpleError={},_i=0,commonProperties_1=commonProperties;_i<commonProperties_1.length;_i++){var property=commonProperties_1[_i];"string"==typeof value[property]&&(simpleError[property]=value[property])}return simpleError}return{message:String(value)}},createAsyncThunk=function(){function createAsyncThunk2(typePrefix,payloadCreator,options){var fulfilled=createAction(typePrefix+"/fulfilled",(function(payload,requestId,arg,meta){return{payload,meta:__spreadProps(__spreadValues({},meta||{}),{arg,requestId,requestStatus:"fulfilled"})}})),pending=createAction(typePrefix+"/pending",(function(requestId,arg,meta){return{payload:void 0,meta:__spreadProps(__spreadValues({},meta||{}),{arg,requestId,requestStatus:"pending"})}})),rejected=createAction(typePrefix+"/rejected",(function(error,requestId,arg,payload,meta){return{payload,error:(options&&options.serializeError||miniSerializeError)(error||"Rejected"),meta:__spreadProps(__spreadValues({},meta||{}),{arg,requestId,rejectedWithValue:!!payload,requestStatus:"rejected",aborted:"AbortError"===(null==error?void 0:error.name),condition:"ConditionError"===(null==error?void 0:error.name)})}})),AC="undefined"!=typeof AbortController?AbortController:function(){function class_1(){this.signal={aborted:!1,addEventListener:function(){},dispatchEvent:function(){return!1},onabort:function(){},removeEventListener:function(){},reason:void 0,throwIfAborted:function(){}}}return class_1.prototype.abort=function(){0},class_1}();return Object.assign((function actionCreator(arg){return function(dispatch,getState,extra){var abortReason,requestId=(null==options?void 0:options.idGenerator)?options.idGenerator(arg):nanoid(),abortController=new AC;function abort(reason){abortReason=reason,abortController.abort()}var promise2=function(){return __async(this,null,(function(){var _a,_b,finalAction,conditionResult,abortedPromise,err_1;return __generator(this,(function(_c){switch(_c.label){case 0:return _c.trys.push([0,4,,5]),function isThenable(value){return null!==value&&"object"==typeof value&&"function"==typeof value.then}(conditionResult=null==(_a=null==options?void 0:options.condition)?void 0:_a.call(options,arg,{getState,extra}))?[4,conditionResult]:[3,2];case 1:conditionResult=_c.sent(),_c.label=2;case 2:if(!1===conditionResult||abortController.signal.aborted)throw{name:"ConditionError",message:"Aborted due to condition callback returning false."};return!0,abortedPromise=new Promise((function(_,reject){return abortController.signal.addEventListener("abort",(function(){return reject({name:"AbortError",message:abortReason||"Aborted"})}))})),dispatch(pending(requestId,arg,null==(_b=null==options?void 0:options.getPendingMeta)?void 0:_b.call(options,{requestId,arg},{getState,extra}))),[4,Promise.race([abortedPromise,Promise.resolve(payloadCreator(arg,{dispatch,getState,extra,requestId,signal:abortController.signal,abort,rejectWithValue:function(value,meta){return new RejectWithValue(value,meta)},fulfillWithValue:function(value,meta){return new FulfillWithMeta(value,meta)}})).then((function(result){if(result instanceof RejectWithValue)throw result;return result instanceof FulfillWithMeta?fulfilled(result.payload,requestId,arg,result.meta):fulfilled(result,requestId,arg)}))])];case 3:return finalAction=_c.sent(),[3,5];case 4:return err_1=_c.sent(),finalAction=err_1 instanceof RejectWithValue?rejected(null,requestId,arg,err_1.payload,err_1.meta):rejected(err_1,requestId,arg),[3,5];case 5:return options&&!options.dispatchConditionRejection&&rejected.match(finalAction)&&finalAction.meta.condition||dispatch(finalAction),[2,finalAction]}}))}))}();return Object.assign(promise2,{abort,requestId,arg,unwrap:function(){return promise2.then(unwrapResult)}})}}),{pending,rejected,fulfilled,typePrefix})}return createAsyncThunk2.withTypes=function(){return createAsyncThunk2},createAsyncThunk2}();function unwrapResult(action){if(action.meta&&action.meta.rejectedWithValue)throw action.payload;if(action.error)throw action.error;return action.payload}var matches=function(matcher,action){return function(v){return v&&"function"==typeof v.match}(matcher)?matcher.match(action):matcher(action)};function isAnyOf(){for(var matchers=[],_i=0;_i<arguments.length;_i++)matchers[_i]=arguments[_i];return function(action){return matchers.some((function(matcher){return matches(matcher,action)}))}}function isAllOf(){for(var matchers=[],_i=0;_i<arguments.length;_i++)matchers[_i]=arguments[_i];return function(action){return matchers.every((function(matcher){return matches(matcher,action)}))}}function hasExpectedRequestMetadata(action,validStatus){if(!action||!action.meta)return!1;var hasValidRequestId="string"==typeof action.meta.requestId,hasValidRequestStatus=validStatus.indexOf(action.meta.requestStatus)>-1;return hasValidRequestId&&hasValidRequestStatus}function isAsyncThunkArray(a){return"function"==typeof a[0]&&"pending"in a[0]&&"fulfilled"in a[0]&&"rejected"in a[0]}function isPending(){for(var asyncThunks=[],_i=0;_i<arguments.length;_i++)asyncThunks[_i]=arguments[_i];return 0===asyncThunks.length?function(action){return hasExpectedRequestMetadata(action,["pending"])}:isAsyncThunkArray(asyncThunks)?function(action){var matchers=asyncThunks.map((function(asyncThunk){return asyncThunk.pending}));return isAnyOf.apply(void 0,matchers)(action)}:isPending()(asyncThunks[0])}function isRejected(){for(var asyncThunks=[],_i=0;_i<arguments.length;_i++)asyncThunks[_i]=arguments[_i];return 0===asyncThunks.length?function(action){return hasExpectedRequestMetadata(action,["rejected"])}:isAsyncThunkArray(asyncThunks)?function(action){var matchers=asyncThunks.map((function(asyncThunk){return asyncThunk.rejected}));return isAnyOf.apply(void 0,matchers)(action)}:isRejected()(asyncThunks[0])}function isRejectedWithValue(){for(var asyncThunks=[],_i=0;_i<arguments.length;_i++)asyncThunks[_i]=arguments[_i];var hasFlag=function(action){return action&&action.meta&&action.meta.rejectedWithValue};return 0===asyncThunks.length||isAsyncThunkArray(asyncThunks)?function(action){return isAllOf(isRejected.apply(void 0,asyncThunks),hasFlag)(action)}:isRejectedWithValue()(asyncThunks[0])}function isFulfilled(){for(var asyncThunks=[],_i=0;_i<arguments.length;_i++)asyncThunks[_i]=arguments[_i];return 0===asyncThunks.length?function(action){return hasExpectedRequestMetadata(action,["fulfilled"])}:isAsyncThunkArray(asyncThunks)?function(action){var matchers=asyncThunks.map((function(asyncThunk){return asyncThunk.fulfilled}));return isAnyOf.apply(void 0,matchers)(action)}:isFulfilled()(asyncThunks[0])}function isAsyncThunkAction(){for(var asyncThunks=[],_i=0;_i<arguments.length;_i++)asyncThunks[_i]=arguments[_i];return 0===asyncThunks.length?function(action){return hasExpectedRequestMetadata(action,["pending","fulfilled","rejected"])}:isAsyncThunkArray(asyncThunks)?function(action){for(var matchers=[],_i=0,asyncThunks_1=asyncThunks;_i<asyncThunks_1.length;_i++){var asyncThunk=asyncThunks_1[_i];matchers.push(asyncThunk.pending,asyncThunk.rejected,asyncThunk.fulfilled)}return isAnyOf.apply(void 0,matchers)(action)}:isAsyncThunkAction()(asyncThunks[0])}var assertFunction=function(func,expected){if("function"!=typeof func)throw new TypeError(expected+" is not a function")},noop=function(){},catchRejection=function(promise2,onError){return void 0===onError&&(onError=noop),promise2.catch(onError),promise2},addAbortSignalListener=function(abortSignal,callback){return abortSignal.addEventListener("abort",callback,{once:!0}),function(){return abortSignal.removeEventListener("abort",callback)}},abortControllerWithReason=function(abortController,reason){var signal=abortController.signal;signal.aborted||("reason"in signal||Object.defineProperty(signal,"reason",{enumerable:!0,value:reason,configurable:!0,writable:!0}),abortController.abort(reason))},listenerCancelled="listener-cancelled",listenerCompleted="listener-completed",TaskAbortError=function TaskAbortError(code){this.code=code,this.name="TaskAbortError",this.message="task cancelled (reason: "+code+")"},validateActive=function(signal){if(signal.aborted)throw new TaskAbortError(signal.reason)};function raceWithSignal(signal,promise2){var cleanup=noop;return new Promise((function(resolve,reject){var notifyRejection=function(){return reject(new TaskAbortError(signal.reason))};signal.aborted?notifyRejection():(cleanup=addAbortSignalListener(signal,notifyRejection),promise2.finally((function(){return cleanup()})).then(resolve,reject))})).finally((function(){cleanup=noop}))}var createPause=function(signal){return function(promise2){return catchRejection(raceWithSignal(signal,promise2).then((function(output){return validateActive(signal),output})))}},createDelay=function(signal){var pause=createPause(signal);return function(timeoutMs){return pause(new Promise((function(resolve){return setTimeout(resolve,timeoutMs)})))}},redux_toolkit_esm_assign=Object.assign,INTERNAL_NIL_TOKEN={},alm="listenerMiddleware",createFork=function(parentAbortSignal){return function(taskExecutor){assertFunction(taskExecutor,"taskExecutor");var controller,childAbortController=new AbortController;controller=childAbortController,addAbortSignalListener(parentAbortSignal,(function(){return abortControllerWithReason(controller,parentAbortSignal.reason)}));var task2,cleanUp,result=(task2=function(){return __async(void 0,null,(function(){var result2;return __generator(this,(function(_c){switch(_c.label){case 0:return validateActive(parentAbortSignal),validateActive(childAbortController.signal),[4,taskExecutor({pause:createPause(childAbortController.signal),delay:createDelay(childAbortController.signal),signal:childAbortController.signal})];case 1:return result2=_c.sent(),validateActive(childAbortController.signal),[2,result2]}}))}))},cleanUp=function(){return abortControllerWithReason(childAbortController,"task-completed")},__async(void 0,null,(function(){var error_1;return __generator(this,(function(_c){switch(_c.label){case 0:return _c.trys.push([0,3,4,5]),[4,Promise.resolve()];case 1:return _c.sent(),[4,task2()];case 2:return[2,{status:"ok",value:_c.sent()}];case 3:return[2,{status:(error_1=_c.sent())instanceof TaskAbortError?"cancelled":"rejected",error:error_1}];case 4:return null==cleanUp||cleanUp(),[7];case 5:return[2]}}))})));return{result:createPause(parentAbortSignal)(result),cancel:function(){abortControllerWithReason(childAbortController,"task-cancelled")}}}},createTakePattern=function(startListening,signal){return function(predicate,timeout){return catchRejection(function(predicate,timeout){return __async(void 0,null,(function(){var unsubscribe,tuplePromise,promises,output;return __generator(this,(function(_c){switch(_c.label){case 0:validateActive(signal),unsubscribe=function(){},tuplePromise=new Promise((function(resolve,reject){var stopListening=startListening({predicate,effect:function(action,listenerApi){listenerApi.unsubscribe(),resolve([action,listenerApi.getState(),listenerApi.getOriginalState()])}});unsubscribe=function(){stopListening(),reject()}})),promises=[tuplePromise],null!=timeout&&promises.push(new Promise((function(resolve){return setTimeout(resolve,timeout,null)}))),_c.label=1;case 1:return _c.trys.push([1,,3,4]),[4,raceWithSignal(signal,Promise.race(promises))];case 2:return output=_c.sent(),validateActive(signal),[2,output];case 3:return unsubscribe(),[7];case 4:return[2]}}))}))}(predicate,timeout))}},getListenerEntryPropsFrom=function(options){var type=options.type,actionCreator=options.actionCreator,matcher=options.matcher,predicate=options.predicate,effect=options.effect;if(type)predicate=createAction(type).match;else if(actionCreator)type=actionCreator.type,predicate=actionCreator.match;else if(matcher)predicate=matcher;else if(!predicate)throw new Error("Creating or removing a listener requires one of the known fields for matching an action");return assertFunction(effect,"options.listener"),{predicate,type,effect}},createListenerEntry=function(options){var _c=getListenerEntryPropsFrom(options),type=_c.type,predicate=_c.predicate,effect=_c.effect;return{id:nanoid(),effect,type,predicate,pending:new Set,unsubscribe:function(){throw new Error("Unsubscribe not initialized")}}},cancelActiveListeners=function(entry){entry.pending.forEach((function(controller){abortControllerWithReason(controller,listenerCancelled)}))},createClearListenerMiddleware=function(listenerMap){return function(){listenerMap.forEach(cancelActiveListeners),listenerMap.clear()}},safelyNotifyError=function(errorHandler,errorToNotify,errorInfo){try{errorHandler(errorToNotify,errorInfo)}catch(errorHandlerError){setTimeout((function(){throw errorHandlerError}),0)}},addListener=createAction(alm+"/add"),clearAllListeners=createAction(alm+"/removeAll"),removeListener=createAction(alm+"/remove"),defaultErrorHandler=function(){for(var args=[],_i=0;_i<arguments.length;_i++)args[_i]=arguments[_i];console.error.apply(console,__spreadArray([alm+"/error"],args))};function createListenerMiddleware(middlewareOptions){var _this=this;void 0===middlewareOptions&&(middlewareOptions={});var listenerMap=new Map,extra=middlewareOptions.extra,_c=middlewareOptions.onError,onError=void 0===_c?defaultErrorHandler:_c;assertFunction(onError,"onError");var findListenerEntry=function(comparator){for(var _i=0,_c=Array.from(listenerMap.values());_i<_c.length;_i++){var entry=_c[_i];if(comparator(entry))return entry}},startListening=function(options){var entry=findListenerEntry((function(existingEntry){return existingEntry.effect===options.effect}));return entry||(entry=createListenerEntry(options)),function(entry){return entry.unsubscribe=function(){return listenerMap.delete(entry.id)},listenerMap.set(entry.id,entry),function(cancelOptions){entry.unsubscribe(),(null==cancelOptions?void 0:cancelOptions.cancelActive)&&cancelActiveListeners(entry)}}(entry)},stopListening=function(options){var _c=getListenerEntryPropsFrom(options),type=_c.type,effect=_c.effect,predicate=_c.predicate,entry=findListenerEntry((function(entry2){return("string"==typeof type?entry2.type===type:entry2.predicate===predicate)&&entry2.effect===effect}));return entry&&(entry.unsubscribe(),options.cancelActive&&cancelActiveListeners(entry)),!!entry},notifyListener=function(entry,action,api,getOriginalState){return __async(_this,null,(function(){var internalTaskController,take,listenerError_1;return __generator(this,(function(_c){switch(_c.label){case 0:internalTaskController=new AbortController,take=createTakePattern(startListening,internalTaskController.signal),_c.label=1;case 1:return _c.trys.push([1,3,4,5]),entry.pending.add(internalTaskController),[4,Promise.resolve(entry.effect(action,redux_toolkit_esm_assign({},api,{getOriginalState,condition:function(predicate,timeout){return take(predicate,timeout).then(Boolean)},take,delay:createDelay(internalTaskController.signal),pause:createPause(internalTaskController.signal),extra,signal:internalTaskController.signal,fork:createFork(internalTaskController.signal),unsubscribe:entry.unsubscribe,subscribe:function(){listenerMap.set(entry.id,entry)},cancelActiveListeners:function(){entry.pending.forEach((function(controller,_,set){controller!==internalTaskController&&(abortControllerWithReason(controller,listenerCancelled),set.delete(controller))}))}})))];case 2:return _c.sent(),[3,5];case 3:return(listenerError_1=_c.sent())instanceof TaskAbortError||safelyNotifyError(onError,listenerError_1,{raisedBy:"effect"}),[3,5];case 4:return abortControllerWithReason(internalTaskController,listenerCompleted),entry.pending.delete(internalTaskController),[7];case 5:return[2]}}))}))},clearListenerMiddleware=createClearListenerMiddleware(listenerMap);return{middleware:function(api){return function(next){return function(action){if(addListener.match(action))return startListening(action.payload);if(!clearAllListeners.match(action)){if(removeListener.match(action))return stopListening(action.payload);var result,originalState=api.getState(),getOriginalState=function(){if(originalState===INTERNAL_NIL_TOKEN)throw new Error(alm+": getOriginalState can only be called synchronously");return originalState};try{if(result=next(action),listenerMap.size>0)for(var currentState=api.getState(),listenerEntries=Array.from(listenerMap.values()),_i=0,listenerEntries_1=listenerEntries;_i<listenerEntries_1.length;_i++){var entry=listenerEntries_1[_i],runListener=!1;try{runListener=entry.predicate(action,currentState,originalState)}catch(predicateError){runListener=!1,safelyNotifyError(onError,predicateError,{raisedBy:"predicate"})}runListener&¬ifyListener(entry,action,api,getOriginalState)}}finally{originalState=INTERNAL_NIL_TOKEN}return result}clearListenerMiddleware()}}},startListening,stopListening,clearListeners:clearListenerMiddleware}}var promise,SHOULD_AUTOBATCH="RTK_autoBatch",prepareAutoBatched=function(){return function(payload){var _c;return{payload,meta:(_c={},_c[SHOULD_AUTOBATCH]=!0,_c)}}},queueMicrotaskShim="function"==typeof queueMicrotask?queueMicrotask.bind("undefined"!=typeof window?window:void 0!==__webpack_require__.g?__webpack_require__.g:globalThis):function(cb){return(promise||(promise=Promise.resolve())).then(cb).catch((function(err){return setTimeout((function(){throw err}),0)}))},createQueueWithTimer=function(timeout){return function(notify){setTimeout(notify,timeout)}},rAF="undefined"!=typeof window&&window.requestAnimationFrame?window.requestAnimationFrame:createQueueWithTimer(10),autoBatchEnhancer=function(options){return void 0===options&&(options={type:"raf"}),function(next){return function(){for(var args=[],_i=0;_i<arguments.length;_i++)args[_i]=arguments[_i];var store=next.apply(void 0,args),notifying=!0,shouldNotifyAtEndOfTick=!1,notificationQueued=!1,listeners=new Set,queueCallback="tick"===options.type?queueMicrotaskShim:"raf"===options.type?rAF:"callback"===options.type?options.queueNotification:createQueueWithTimer(options.timeout),notifyListeners=function(){notificationQueued=!1,shouldNotifyAtEndOfTick&&(shouldNotifyAtEndOfTick=!1,listeners.forEach((function(l){return l()})))};return Object.assign({},store,{subscribe:function(listener2){var unsubscribe=store.subscribe((function(){return notifying&&listener2()}));return listeners.add(listener2),function(){unsubscribe(),listeners.delete(listener2)}},dispatch:function(action){var _a;try{return notifying=!(null==(_a=null==action?void 0:action.meta)?void 0:_a[SHOULD_AUTOBATCH]),(shouldNotifyAtEndOfTick=!notifying)&&(notificationQueued||(notificationQueued=!0,queueCallback(notifyListeners))),store.dispatch(action)}finally{notifying=!0}}})}}};F()}}]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDM0MS5lMDUxZjZiOS5pZnJhbWUuYnVuZGxlLmpzIiwibWFwcGluZ3MiOiI2TkFBQSxTQUFTQSxFQUFFQSxHQUFHLElBQUksSUFBSUMsRUFBRUMsVUFBVUMsT0FBT0MsRUFBRUMsTUFBTUosRUFBRSxFQUFFQSxFQUFFLEVBQUUsR0FBR0ssRUFBRSxFQUFFQSxFQUFFTCxFQUFFSyxJQUFJRixFQUFFRSxFQUFFLEdBQUdKLFVBQVVJLEdBQWtKLE1BQU1DLE1BQU0sOEJBQThCUCxHQUFHSSxFQUFFRCxPQUFPLElBQUlDLEVBQUVJLEtBQUksU0FBVVIsR0FBRyxNQUFNLElBQUlBLEVBQUUsR0FBSSxJQUFHUyxLQUFLLEtBQUssSUFBSSxtREFBbUQsQ0FBQyxTQUFTUixFQUFFRCxHQUFHLFFBQVFBLEtBQUtBLEVBQUVVLEVBQUUsQ0FBQyxTQUFTTixFQUFFSixHQUFHLElBQUlDLEVBQUUsUUFBUUQsSUFBSSxTQUFTQSxHQUFHLElBQUlBLEdBQUcsaUJBQWlCQSxFQUFFLE9BQU0sRUFBRyxJQUFJQyxFQUFFVSxPQUFPQyxlQUFlWixHQUFHLEdBQUcsT0FBT0MsRUFBRSxPQUFNLEVBQUcsSUFBSUcsRUFBRU8sT0FBT0UsZUFBZUMsS0FBS2IsRUFBRSxnQkFBZ0JBLEVBQUVjLFlBQVksT0FBT1gsSUFBSU8sUUFBUSxtQkFBbUJQLEdBQUdZLFNBQVNDLFNBQVNILEtBQUtWLEtBQUtjLENBQUMsQ0FBMU8sQ0FBNE9sQixJQUFJSyxNQUFNYyxRQUFRbkIsTUFBTUEsRUFBRW9CLE9BQU8sUUFBUW5CLEVBQUVELEVBQUVlLG1CQUFjLElBQVNkLE9BQUUsRUFBT0EsRUFBRW1CLEtBQUtDLEVBQUVyQixJQUFJc0IsRUFBRXRCLEdBQUcsQ0FBQyxTQUFTTSxFQUFFRixHQUFHLE9BQU9ILEVBQUVHLElBQUlKLEVBQUUsR0FBR0ksR0FBR0EsRUFBRU0sR0FBR04sQ0FBQyxDQUFDLFNBQVNtQixFQUFFdkIsRUFBRUMsRUFBRUcsUUFBRyxJQUFTQSxJQUFJQSxHQUFFLEdBQUksSUFBSW9CLEVBQUV4QixJQUFJSSxFQUFFTyxPQUFPYyxLQUFLQyxJQUFJMUIsR0FBRzJCLFNBQVEsU0FBVXJCLEdBQUdGLEdBQUcsaUJBQWlCRSxHQUFHTCxFQUFFSyxFQUFFTixFQUFFTSxHQUFHTixFQUFHLElBQUdBLEVBQUUyQixTQUFRLFNBQVV2QixFQUFFRSxHQUFHLE9BQU9MLEVBQUVLLEVBQUVGLEVBQUVKLEVBQUcsR0FBRSxDQUFDLFNBQVN3QixFQUFFeEIsR0FBRyxJQUFJQyxFQUFFRCxFQUFFVSxHQUFHLE9BQU9ULEVBQUVBLEVBQUVzQixFQUFFLEVBQUV0QixFQUFFc0IsRUFBRSxFQUFFdEIsRUFBRXNCLEVBQUVsQixNQUFNYyxRQUFRbkIsR0FBRyxFQUFFcUIsRUFBRXJCLEdBQUcsRUFBRXNCLEVBQUV0QixHQUFHLEVBQUUsQ0FBQyxDQUFDLFNBQVM0QixFQUFFNUIsRUFBRUMsR0FBRyxPQUFPLElBQUl1QixFQUFFeEIsR0FBR0EsRUFBRTZCLElBQUk1QixHQUFHVSxPQUFPbUIsVUFBVWpCLGVBQWVDLEtBQUtkLEVBQUVDLEVBQUUsQ0FBQyxTQUFTOEIsRUFBRS9CLEVBQUVDLEdBQUcsT0FBTyxJQUFJdUIsRUFBRXhCLEdBQUdBLEVBQUVnQyxJQUFJL0IsR0FBR0QsRUFBRUMsRUFBRSxDQUFDLFNBQVNnQyxFQUFFakMsRUFBRUMsRUFBRUcsR0FBRyxJQUFJRSxFQUFFa0IsRUFBRXhCLEdBQUcsSUFBSU0sRUFBRU4sRUFBRWtDLElBQUlqQyxFQUFFRyxHQUFHLElBQUlFLEVBQUVOLEVBQUVtQyxJQUFJL0IsR0FBR0osRUFBRUMsR0FBR0csQ0FBQyxDQUFDLFNBQVNnQyxFQUFFcEMsRUFBRUMsR0FBRyxPQUFPRCxJQUFJQyxFQUFFLElBQUlELEdBQUcsRUFBRUEsR0FBRyxFQUFFQyxFQUFFRCxHQUFHQSxHQUFHQyxHQUFHQSxDQUFDLENBQUMsU0FBU29CLEVBQUVyQixHQUFHLE9BQU9xQyxHQUFHckMsYUFBYXNDLEdBQUcsQ0FBQyxTQUFTaEIsRUFBRXRCLEdBQUcsT0FBT3VDLEdBQUd2QyxhQUFhd0MsR0FBRyxDQUFDLFNBQVNDLEVBQUV6QyxHQUFHLE9BQU9BLEVBQUV3QixHQUFHeEIsRUFBRUksQ0FBQyxDQUFDLFNBQVNzQyxFQUFFMUMsR0FBRyxHQUFHSyxNQUFNYyxRQUFRbkIsR0FBRyxPQUFPSyxNQUFNeUIsVUFBVWEsTUFBTTdCLEtBQUtkLEdBQUcsSUFBSUMsRUFBRTJDLEdBQUc1QyxVQUFVQyxFQUFFUyxHQUFHLElBQUksSUFBSU4sRUFBRXNCLEdBQUd6QixHQUFHSyxFQUFFLEVBQUVBLEVBQUVGLEVBQUVELE9BQU9HLElBQUksQ0FBQyxJQUFJaUIsRUFBRW5CLEVBQUVFLEdBQUdrQixFQUFFdkIsRUFBRXNCLElBQUcsSUFBS0MsRUFBRXFCLFdBQVdyQixFQUFFcUIsVUFBUyxFQUFHckIsRUFBRXNCLGNBQWEsSUFBS3RCLEVBQUVRLEtBQUtSLEVBQUVVLE9BQU9qQyxFQUFFc0IsR0FBRyxDQUFDdUIsY0FBYSxFQUFHRCxVQUFTLEVBQUdFLFdBQVd2QixFQUFFdUIsV0FBV0MsTUFBTWhELEVBQUV1QixJQUFJLENBQUMsT0FBT1osT0FBT3NDLE9BQU90QyxPQUFPQyxlQUFlWixHQUFHQyxFQUFFLENBQUMsU0FBU2lELEVBQUVsRCxFQUFFTSxHQUFHLFlBQU8sSUFBU0EsSUFBSUEsR0FBRSxHQUFJNkMsRUFBRW5ELElBQUlDLEVBQUVELEtBQUtJLEVBQUVKLEtBQUt3QixFQUFFeEIsR0FBRyxJQUFJQSxFQUFFa0MsSUFBSWxDLEVBQUVtQyxJQUFJbkMsRUFBRW9ELE1BQU1wRCxFQUFFcUQsT0FBT0MsR0FBRzNDLE9BQU80QyxPQUFPdkQsR0FBR00sR0FBR2lCLEVBQUV2QixHQUFFLFNBQVVBLEVBQUVDLEdBQUcsT0FBT2lELEVBQUVqRCxHQUFFLEVBQUksSUFBRSxJQUFLRCxDQUFDLENBQUMsU0FBU3NELElBQUl0RCxFQUFFLEVBQUUsQ0FBQyxTQUFTbUQsRUFBRW5ELEdBQUcsT0FBTyxNQUFNQSxHQUFHLGlCQUFpQkEsR0FBR1csT0FBTzZDLFNBQVN4RCxFQUFFLENBQUMsU0FBU3lELEVBQUV4RCxHQUFHLElBQUlHLEVBQUVzRCxHQUFHekQsR0FBRyxPQUFPRyxHQUFHSixFQUFFLEdBQUdDLEdBQUdHLENBQUMsQ0FBQyxTQUFTdUQsRUFBRTNELEVBQUVDLEdBQUd5RCxHQUFHMUQsS0FBSzBELEdBQUcxRCxHQUFHQyxFQUFFLENBQUMsU0FBUzJELElBQUksT0FBbURDLENBQUMsQ0FBQyxTQUFTQyxFQUFFOUQsRUFBRUMsR0FBR0EsSUFBSXdELEVBQUUsV0FBV3pELEVBQUU0QixFQUFFLEdBQUc1QixFQUFFcUIsRUFBRSxHQUFHckIsRUFBRXNCLEVBQUVyQixFQUFFLENBQUMsU0FBUzhELEVBQUUvRCxHQUFHZ0UsRUFBRWhFLEdBQUdBLEVBQUV5QyxFQUFFZCxRQUFRc0MsR0FBR2pFLEVBQUV5QyxFQUFFLElBQUksQ0FBQyxTQUFTdUIsRUFBRWhFLEdBQUdBLElBQUk2RCxJQUFJQSxFQUFFN0QsRUFBRTBDLEVBQUUsQ0FBQyxTQUFTd0IsRUFBRWxFLEdBQUcsT0FBTzZELEVBQUUsQ0FBQ3BCLEVBQUUsR0FBR0MsRUFBRW1CLEVBQUVQLEVBQUV0RCxFQUFFMkQsR0FBRSxFQUFHQyxFQUFFLEVBQUUsQ0FBQyxTQUFTSyxFQUFFakUsR0FBRyxJQUFJQyxFQUFFRCxFQUFFVSxHQUFHLElBQUlULEVBQUVzQixHQUFHLElBQUl0QixFQUFFc0IsRUFBRXRCLEVBQUU2RCxJQUFJN0QsRUFBRThELEdBQUUsQ0FBRSxDQUFDLFNBQVNJLEVBQUVsRSxFQUFFSyxHQUFHQSxFQUFFc0QsRUFBRXRELEVBQUVtQyxFQUFFdEMsT0FBTyxJQUFJb0IsRUFBRWpCLEVBQUVtQyxFQUFFLEdBQUdqQixPQUFFLElBQVN2QixHQUFHQSxJQUFJc0IsRUFBRSxPQUFPakIsRUFBRWdELEVBQUVVLEdBQUdQLEVBQUUsT0FBT1EsRUFBRTNELEVBQUVMLEVBQUV1QixHQUFHQSxHQUFHRCxFQUFFYixHQUFHeUQsSUFBSUosRUFBRXpELEdBQUdOLEVBQUUsSUFBSUksRUFBRUgsS0FBS0EsRUFBRW1FLEVBQUU5RCxFQUFFTCxHQUFHSyxFQUFFb0MsR0FBRzJCLEVBQUUvRCxFQUFFTCxJQUFJSyxFQUFFc0IsR0FBRzZCLEVBQUUsV0FBV1csRUFBRTdDLEVBQUViLEdBQUdOLEVBQUVILEVBQUVLLEVBQUVzQixFQUFFdEIsRUFBRWUsSUFBSXBCLEVBQUVtRSxFQUFFOUQsRUFBRWlCLEVBQUUsSUFBSXdDLEVBQUV6RCxHQUFHQSxFQUFFc0IsR0FBR3RCLEVBQUVnQixFQUFFaEIsRUFBRXNCLEVBQUV0QixFQUFFZSxHQUFHcEIsSUFBSXFFLEVBQUVyRSxPQUFFLENBQU0sQ0FBQyxTQUFTbUUsRUFBRXBFLEVBQUVDLEVBQUVHLEdBQUcsR0FBRytDLEVBQUVsRCxHQUFHLE9BQU9BLEVBQUUsSUFBSUssRUFBRUwsRUFBRVMsR0FBRyxJQUFJSixFQUFFLE9BQU9pQixFQUFFdEIsR0FBRSxTQUFVc0IsRUFBRUMsR0FBRyxPQUFPK0MsRUFBRXZFLEVBQUVNLEVBQUVMLEVBQUVzQixFQUFFQyxFQUFFcEIsRUFBRyxJQUFFLEdBQUlILEVBQUUsR0FBR0ssRUFBRWlFLElBQUl2RSxFQUFFLE9BQU9DLEVBQUUsSUFBSUssRUFBRTZELEVBQUUsT0FBT0UsRUFBRXJFLEVBQUVNLEVBQUVGLEdBQUUsR0FBSUUsRUFBRUYsRUFBRSxJQUFJRSxFQUFFa0UsRUFBRSxDQUFDbEUsRUFBRWtFLEdBQUUsRUFBR2xFLEVBQUVpRSxFQUFFWCxJQUFJLElBQUlwQyxFQUFFLElBQUlsQixFQUFFaUIsR0FBRyxJQUFJakIsRUFBRWlCLEVBQUVqQixFQUFFa0IsRUFBRWtCLEVBQUVwQyxFQUFFbUUsR0FBR25FLEVBQUVrQixFQUFFSSxFQUFFSixFQUFFTyxHQUFFLEVBQUcsSUFBSXpCLEVBQUVpQixJQUFJSyxFQUFFLElBQUlZLElBQUloQixHQUFHQSxFQUFFNEIsUUFBUXJCLEdBQUUsR0FBSVIsRUFBRUssR0FBRSxTQUFVM0IsRUFBRXNCLEdBQUcsT0FBT2dELEVBQUV2RSxFQUFFTSxFQUFFa0IsRUFBRXZCLEVBQUVzQixFQUFFbkIsRUFBRTJCLEVBQUcsSUFBR3NDLEVBQUVyRSxFQUFFd0IsR0FBRSxHQUFJcEIsR0FBR0osRUFBRTRCLEdBQUc2QixFQUFFLFdBQVdpQixFQUFFcEUsRUFBRUYsRUFBRUosRUFBRTRCLEVBQUU1QixFQUFFcUIsRUFBRSxDQUFDLE9BQU9mLEVBQUVrQixDQUFDLENBQUMsU0FBUytDLEVBQUVqRSxFQUFFaUIsRUFBRUMsRUFBRU8sRUFBRUssRUFBRWYsRUFBRUMsR0FBRyxHQUFvRHJCLEVBQUVtQyxHQUFHLENBQUMsSUFBSUssRUFBRTJCLEVBQUU5RCxFQUFFOEIsRUFBRWYsR0FBR0UsR0FBRyxJQUFJQSxFQUFFQSxJQUFJSyxFQUFFTCxFQUFFb0QsRUFBRTVDLEdBQUdWLEVBQUV1RCxPQUFPN0MsUUFBRyxHQUFRLEdBQUdFLEVBQUVULEVBQUVPLEVBQUVVLElBQUl4QyxFQUFFd0MsR0FBRyxPQUFPbkMsRUFBRXFELEdBQUUsQ0FBRSxNQUFNckMsR0FBR0UsRUFBRVcsSUFBSUMsR0FBRyxHQUFHaEMsRUFBRWdDLEtBQUtlLEVBQUVmLEdBQUcsQ0FBQyxJQUFJOUIsRUFBRWdELEVBQUV1QixHQUFHdkUsRUFBRXNELEVBQUUsRUFBRSxPQUFPUSxFQUFFOUQsRUFBRThCLEdBQUdiLEdBQUdBLEVBQUVnRCxFQUFFN0IsR0FBRzJCLEVBQUUvRCxFQUFFOEIsRUFBRSxDQUFDLENBQUMsU0FBU2lDLEVBQUVyRSxFQUFFQyxFQUFFRyxRQUFHLElBQVNBLElBQUlBLEdBQUUsSUFBS0osRUFBRTBDLEdBQUcxQyxFQUFFc0QsRUFBRXVCLEdBQUc3RSxFQUFFMkQsR0FBR1QsRUFBRWpELEVBQUVHLEVBQUUsQ0FBQyxTQUFTMEUsRUFBRTlFLEVBQUVDLEdBQUcsSUFBSUcsRUFBRUosRUFBRVUsR0FBRyxPQUFPTixFQUFFcUMsRUFBRXJDLEdBQUdKLEdBQUdDLEVBQUUsQ0FBQyxTQUFTdUUsRUFBRXhFLEVBQUVDLEdBQUcsR0FBR0EsS0FBS0QsRUFBRSxJQUFJLElBQUlJLEVBQUVPLE9BQU9DLGVBQWVaLEdBQUdJLEdBQUcsQ0FBQyxJQUFJRSxFQUFFSyxPQUFPb0UseUJBQXlCM0UsRUFBRUgsR0FBRyxHQUFHSyxFQUFFLE9BQU9BLEVBQUVGLEVBQUVPLE9BQU9DLGVBQWVSLEVBQUUsQ0FBQyxDQUFDLFNBQVNxRSxFQUFFekUsR0FBR0EsRUFBRW1FLElBQUluRSxFQUFFbUUsR0FBRSxFQUFHbkUsRUFBRTBDLEdBQUcrQixFQUFFekUsRUFBRTBDLEdBQUcsQ0FBQyxTQUFTc0MsRUFBRWhGLEdBQUdBLEVBQUV3QixJQUFJeEIsRUFBRXdCLEVBQUVrQixFQUFFMUMsRUFBRUksR0FBRyxDQUFDLFNBQVNzRSxFQUFFMUUsRUFBRUMsRUFBRUcsR0FBRyxJQUFJRSxFQUFFZSxFQUFFcEIsR0FBR3dELEVBQUUsVUFBVXdCLEVBQUVoRixFQUFFRyxHQUFHa0IsRUFBRXJCLEdBQUd3RCxFQUFFLFVBQVV5QixFQUFFakYsRUFBRUcsR0FBR0osRUFBRWdFLEVBQUUsU0FBU2hFLEVBQUVDLEdBQUcsSUFBSUcsRUFBRUMsTUFBTWMsUUFBUW5CLEdBQUdNLEVBQUUsQ0FBQ2lCLEVBQUVuQixFQUFFLEVBQUUsRUFBRW1FLEVBQUV0RSxFQUFFQSxFQUFFc0UsRUFBRVgsSUFBSU8sR0FBRSxFQUFHSyxHQUFFLEVBQUdHLEVBQUUsQ0FBQyxFQUFFakMsRUFBRXpDLEVBQUVHLEVBQUVKLEVBQUV5RSxFQUFFLEtBQUtqRCxFQUFFLEtBQUtzQyxFQUFFLEtBQUtxQixHQUFFLEdBQUk1RCxFQUFFakIsRUFBRWtCLEVBQUU0RCxHQUFHaEYsSUFBSW1CLEVBQUUsQ0FBQ2pCLEdBQUdrQixFQUFFNkQsSUFBSSxJQUFJekQsRUFBRTBELE1BQU1DLFVBQVVoRSxFQUFFQyxHQUFHTyxFQUFFSCxFQUFFNEQsT0FBT3ZELEVBQUVMLEVBQUU2RCxNQUFNLE9BQU9uRixFQUFFbUUsRUFBRXhDLEVBQUUzQixFQUFFd0QsRUFBRS9CLEVBQUVFLENBQUMsQ0FBM00sQ0FBNk1oQyxFQUFFRyxHQUFHcUQsRUFBRSxPQUFPaUMsRUFBRXpGLEVBQUVHLEdBQUcsT0FBT0EsRUFBRUEsRUFBRW1FLEVBQUVYLEtBQUtuQixFQUFFa0QsS0FBS3JGLEdBQUdBLENBQUMsQ0FBQyxTQUFTcUUsRUFBRXJFLEdBQUcsT0FBT0wsRUFBRUssSUFBSU4sRUFBRSxHQUFHTSxHQUFHLFNBQVNOLEVBQUVDLEdBQUcsSUFBSUcsRUFBRUgsR0FBRyxPQUFPQSxFQUFFLElBQUlLLEVBQUVzQixFQUFFM0IsRUFBRVMsR0FBRzBCLEVBQUVaLEVBQUV2QixHQUFHLEdBQUcyQixFQUFFLENBQUMsSUFBSUEsRUFBRXVDLElBQUl2QyxFQUFFTCxFQUFFLElBQUlrQyxFQUFFLE9BQU9tQyxFQUFFaEUsSUFBSSxPQUFPQSxFQUFFeEIsRUFBRXdCLEVBQUU0QyxHQUFFLEVBQUdsRSxFQUFFdUUsRUFBRTVFLEVBQUVtQyxHQUFHUixFQUFFNEMsR0FBRSxDQUFFLE1BQU1sRSxFQUFFdUUsRUFBRTVFLEVBQUVtQyxHQUFHLE9BQU9iLEVBQUVqQixHQUFFLFNBQVVMLEVBQUVHLEdBQUd3QixHQUFHRyxFQUFFSCxFQUFFeEIsRUFBRUgsS0FBS0csR0FBRzZCLEVBQUUzQixFQUFFTCxFQUFFRCxFQUFFSSxHQUFJLElBQUcsSUFBSWdDLEVBQUUsSUFBSUksSUFBSWxDLEdBQUdBLENBQUMsQ0FBdk4sQ0FBeU5BLEVBQUUsQ0FBQyxTQUFTdUUsRUFBRTdFLEVBQUVDLEdBQUcsT0FBT0EsR0FBRyxLQUFLLEVBQUUsT0FBTyxJQUFJcUMsSUFBSXRDLEdBQUcsS0FBSyxFQUFFLE9BQU9LLE1BQU13RixLQUFLN0YsR0FBRyxPQUFPMEMsRUFBRTFDLEVBQUUsQ0FBQyxTQUFTaUYsSUFBSSxTQUFTN0UsRUFBRUosRUFBRUMsR0FBRyxJQUFJRyxFQUFFaUIsRUFBRXJCLEdBQUcsT0FBT0ksRUFBRUEsRUFBRTJDLFdBQVc5QyxFQUFFb0IsRUFBRXJCLEdBQUdJLEVBQUUsQ0FBQzBDLGNBQWEsRUFBR0MsV0FBVzlDLEVBQUUrQixJQUFJLFdBQVcsSUFBSS9CLEVBQUU2RixLQUFLcEYsR0FBRyxPQUFnRDBFLEdBQUdwRCxJQUFJL0IsRUFBRUQsRUFBRSxFQUFFa0MsSUFBSSxTQUFTakMsR0FBRyxJQUFJRyxFQUFFMEYsS0FBS3BGLEdBQTZDMEUsR0FBR2xELElBQUk5QixFQUFFSixFQUFFQyxFQUFFLEdBQUdHLENBQUMsQ0FBQyxTQUFTRSxFQUFFTixHQUFHLElBQUksSUFBSUMsRUFBRUQsRUFBRUcsT0FBTyxFQUFFRixHQUFHLEVBQUVBLElBQUksQ0FBQyxJQUFJRyxFQUFFSixFQUFFQyxHQUFHUyxHQUFHLElBQUlOLEVBQUUrRCxFQUFFLE9BQU8vRCxFQUFFbUIsR0FBRyxLQUFLLEVBQUVRLEVBQUUzQixJQUFJcUUsRUFBRXJFLEdBQUcsTUFBTSxLQUFLLEVBQUVvQixFQUFFcEIsSUFBSXFFLEVBQUVyRSxHQUFHLENBQUMsQ0FBQyxTQUFTb0IsRUFBRXhCLEdBQUcsSUFBSSxJQUFJQyxFQUFFRCxFQUFFSSxFQUFFQSxFQUFFSixFQUFFeUUsRUFBRW5FLEVBQUVvQixHQUFHdEIsR0FBR21CLEVBQUVqQixFQUFFSCxPQUFPLEVBQUVvQixHQUFHLEVBQUVBLElBQUksQ0FBQyxJQUFJQyxFQUFFbEIsRUFBRWlCLEdBQUcsR0FBR0MsSUFBSWQsRUFBRSxDQUFDLElBQUlxQixFQUFFOUIsRUFBRXVCLEdBQUcsUUFBRyxJQUFTTyxJQUFJSCxFQUFFM0IsRUFBRXVCLEdBQUcsT0FBTSxFQUFHLElBQUlTLEVBQUU3QixFQUFFb0IsR0FBR0gsRUFBRVksR0FBR0EsRUFBRXZCLEdBQUcsR0FBR1csRUFBRUEsRUFBRWpCLElBQUkyQixHQUFHSyxFQUFFSCxFQUFFRixHQUFHLE9BQU0sQ0FBRSxDQUFDLENBQUMsSUFBSVQsSUFBSXJCLEVBQUVTLEdBQUcsT0FBT0osRUFBRUgsU0FBU3VCLEdBQUd6QixHQUFHRSxRQUFRbUIsRUFBRSxFQUFFLEVBQUUsQ0FBQyxTQUFTUyxFQUFFL0IsR0FBRyxJQUFJQyxFQUFFRCxFQUFFeUUsRUFBRSxHQUFHeEUsRUFBRUUsU0FBU0gsRUFBRUksRUFBRUQsT0FBTyxPQUFNLEVBQUcsSUFBSUMsRUFBRU8sT0FBT29FLHlCQUF5QjlFLEVBQUVBLEVBQUVFLE9BQU8sR0FBRyxHQUFHQyxJQUFJQSxFQUFFNEIsSUFBSSxPQUFNLEVBQUcsSUFBSSxJQUFJMUIsRUFBRSxFQUFFQSxFQUFFTCxFQUFFRSxPQUFPRyxJQUFJLElBQUlMLEVBQUVZLGVBQWVQLEdBQUcsT0FBTSxFQUFHLE9BQU0sQ0FBRSxDQUE4QyxJQUFJZSxFQUFFLENBQUMsRUFBRXNDLEVBQUUsTUFBTSxDQUFDK0IsRUFBRSxTQUFTMUYsRUFBRUMsR0FBRyxJQUFJSyxFQUFFRCxNQUFNYyxRQUFRbkIsR0FBR3VCLEVBQUUsU0FBU3ZCLEVBQUVDLEdBQUcsR0FBR0QsRUFBRSxDQUFDLElBQUksSUFBSU0sRUFBRUQsTUFBTUosRUFBRUUsUUFBUW9CLEVBQUUsRUFBRUEsRUFBRXRCLEVBQUVFLE9BQU9vQixJQUFJWixPQUFPb0YsZUFBZXpGLEVBQUUsR0FBR2lCLEVBQUVuQixFQUFFbUIsR0FBRSxJQUFLLE9BQU9qQixDQUFDLENBQUMsSUFBSWtCLEVBQUVvQixHQUFHM0MsVUFBVXVCLEVBQUVkLEdBQUcsSUFBSSxJQUFJa0IsRUFBRUYsR0FBR0YsR0FBR08sRUFBRSxFQUFFQSxFQUFFSCxFQUFFekIsT0FBTzRCLElBQUksQ0FBQyxJQUFJRSxFQUFFTCxFQUFFRyxHQUFHUCxFQUFFUyxHQUFHN0IsRUFBRTZCLEVBQUVqQyxLQUFLd0IsRUFBRVMsR0FBR2MsV0FBVyxDQUFDLE9BQU9wQyxPQUFPc0MsT0FBT3RDLE9BQU9DLGVBQWVYLEdBQUd1QixFQUFFLENBQXRRLENBQXdRbEIsRUFBRU4sR0FBR3dCLEVBQUUsQ0FBQ0QsRUFBRWpCLEVBQUUsRUFBRSxFQUFFaUUsRUFBRXRFLEVBQUVBLEVBQUVzRSxFQUFFWCxJQUFJTyxHQUFFLEVBQUdLLEdBQUUsRUFBR0csRUFBRSxDQUFDLEVBQUVqQyxFQUFFekMsRUFBRUcsRUFBRUosRUFBRXlFLEVBQUVsRCxFQUFFQyxFQUFFLEtBQUt1QyxHQUFFLEVBQUdvQixHQUFFLEdBQUksT0FBT3hFLE9BQU9vRixlQUFleEUsRUFBRWIsRUFBRSxDQUFDc0MsTUFBTXhCLEVBQUVxQixVQUFTLElBQUt0QixDQUFDLEVBQUUwQyxFQUFFLFNBQVNqRSxFQUFFSSxFQUFFb0IsR0FBR0EsRUFBRXZCLEVBQUVHLElBQUlBLEVBQUVNLEdBQUc2RCxJQUFJdkUsR0FBR00sRUFBRU4sRUFBRXlDLElBQUl6QyxFQUFFNEIsR0FBRyxTQUFTNUIsRUFBRUMsR0FBRyxHQUFHQSxHQUFHLGlCQUFpQkEsRUFBRSxDQUFDLElBQUlHLEVBQUVILEVBQUVTLEdBQUcsR0FBR04sRUFBRSxDQUFDLElBQUlFLEVBQUVGLEVBQUVBLEVBQUVvQixFQUFFcEIsRUFBRXFFLEVBQUV4QyxFQUFFN0IsRUFBRXVFLEVBQUV2QyxFQUFFaEMsRUFBRW1CLEVBQUUsR0FBRyxJQUFJYSxFQUFFYixFQUFFQyxHQUFFLFNBQVV2QixHQUFHQSxJQUFJUyxTQUFJLElBQVNKLEVBQUVMLElBQUkyQixFQUFFdEIsRUFBRUwsR0FBR2dDLEVBQUVoQyxJQUFJRCxFQUFFd0IsRUFBRXZCLEtBQUtnQyxFQUFFaEMsSUFBRyxFQUFHd0UsRUFBRXJFLElBQUssSUFBR21CLEVBQUVqQixHQUFFLFNBQVVOLFFBQUcsSUFBU3dCLEVBQUV4QixJQUFJNEIsRUFBRUosRUFBRXhCLEtBQUtpQyxFQUFFakMsSUFBRyxFQUFHeUUsRUFBRXJFLEdBQUksU0FBUSxHQUFHLElBQUlnQyxFQUFFLENBQUMsR0FBR0wsRUFBRTNCLEtBQUtxRSxFQUFFckUsR0FBRzZCLEVBQUU5QixRQUFPLEdBQUlxQixFQUFFckIsT0FBT0csRUFBRUgsT0FBTyxJQUFJLElBQUlrQixFQUFFRyxFQUFFckIsT0FBT2tCLEVBQUVmLEVBQUVILE9BQU9rQixJQUFJWSxFQUFFWixJQUFHLE9BQVEsSUFBSSxJQUFJQyxFQUFFaEIsRUFBRUgsT0FBT21CLEVBQUVFLEVBQUVyQixPQUFPbUIsSUFBSVcsRUFBRVgsSUFBRyxFQUFHLElBQUksSUFBSW1CLEVBQUV1RCxLQUFLQyxJQUFJekUsRUFBRXJCLE9BQU9HLEVBQUVILFFBQVF1QyxFQUFFLEVBQUVBLEVBQUVELEVBQUVDLElBQUlsQixFQUFFWCxlQUFlNkIsS0FBS1QsRUFBRVMsSUFBRyxRQUFJLElBQVNULEVBQUVTLElBQUkxQyxFQUFFd0IsRUFBRWtCLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBeGUsQ0FBMGUxQyxFQUFFeUMsRUFBRSxJQUFJbkMsRUFBRU4sRUFBRXlDLEdBQUcsRUFBRW1ELEVBQUUsU0FBUzVGLEdBQUcsT0FBTyxJQUFJQSxFQUFFdUIsRUFBRUMsRUFBRXhCLEdBQUcrQixFQUFFL0IsRUFBRSxHQUFHLEMsb3dEQUE0eEssSUFBSWtHLEVBQUVyQyxFQUFFc0MsRUFBRSxvQkFBb0JDLFFBQVEsaUJBQWlCQSxPQUFPLEtBQUsvRCxFQUFFLG9CQUFvQkMsSUFBSUMsRUFBRSxvQkFBb0JDLElBQUk2RCxFQUFFLG9CQUFvQmYsWUFBTyxJQUFTQSxNQUFNQyxXQUFXLG9CQUFvQmUsUUFBUWhDLEVBQUU2QixFQUFFQyxPQUFPRyxJQUFJLG1CQUFtQkwsRUFBRSxDQUFDLEdBQUcsa0JBQWlCLEVBQUdBLEdBQUc5RSxFQUFFK0UsRUFBRUMsT0FBT0csSUFBSSxtQkFBbUIscUJBQXFCN0YsRUFBRXlGLEVBQUVDLE9BQU9HLElBQUksZUFBZSxpQkFBeTJEckYsR0FBdDFELG9CQUFvQmtGLFFBQVFBLE9BQU9JLFNBQXF6RCxHQUFHN0YsT0FBT21CLFVBQVVmLGFBQVlXLEdBQUcsb0JBQW9CNEUsU0FBU0EsUUFBUUcsUUFBUUgsUUFBUUcsYUFBUSxJQUFTOUYsT0FBTytGLHNCQUFzQixTQUFTMUcsR0FBRyxPQUFPVyxPQUFPZ0csb0JBQW9CM0csR0FBRzRFLE9BQU9qRSxPQUFPK0Ysc0JBQXNCMUcsR0FBRyxFQUFFVyxPQUFPZ0csb0JBQW9CL0QsR0FBR2pDLE9BQU9pRywyQkFBMkIsU0FBUzVHLEdBQUcsSUFBSUMsRUFBRSxDQUFDLEVBQUUsT0FBT3lCLEdBQUcxQixHQUFHMkIsU0FBUSxTQUFVdkIsR0FBR0gsRUFBRUcsR0FBR08sT0FBT29FLHlCQUF5Qi9FLEVBQUVJLEVBQUcsSUFBR0gsQ0FBQyxFQUFFeUQsR0FBRyxDQUFDLEVBQUUwQixHQUFHLENBQUNwRCxJQUFJLFNBQVNoQyxFQUFFQyxHQUFHLEdBQUdBLElBQUlTLEVBQUUsT0FBT1YsRUFBRSxJQUFJTSxFQUFFbUMsRUFBRXpDLEdBQUcsSUFBSTRCLEVBQUV0QixFQUFFTCxHQUFHLE9BQU8sU0FBU0QsRUFBRUMsRUFBRUcsR0FBRyxJQUFJRSxFQUFFaUIsRUFBRWlELEVBQUV2RSxFQUFFRyxHQUFHLE9BQU9tQixFQUFFLFVBQVVBLEVBQUVBLEVBQUV5QixNQUFNLFFBQVExQyxFQUFFaUIsRUFBRVMsV0FBTSxJQUFTMUIsT0FBRSxFQUFPQSxFQUFFUSxLQUFLZCxFQUFFeUUsUUFBRyxDQUFNLENBQWxILENBQW9IekUsRUFBRU0sRUFBRUwsR0FBRyxJQUFJc0IsRUFBRWpCLEVBQUVMLEdBQUcsT0FBT0QsRUFBRXdFLElBQUlwRSxFQUFFbUIsR0FBR0EsRUFBRUEsSUFBSXVELEVBQUU5RSxFQUFFSSxFQUFFSCxJQUFJK0UsRUFBRWhGLEdBQUdBLEVBQUV3QixFQUFFdkIsR0FBR3lFLEVBQUUxRSxFQUFFdUUsRUFBRWpCLEVBQUUvQixFQUFFdkIsSUFBSXVCLENBQUMsRUFBRU0sSUFBSSxTQUFTN0IsRUFBRUMsR0FBRyxPQUFPQSxLQUFLd0MsRUFBRXpDLEVBQUUsRUFBRXlHLFFBQVEsU0FBU3pHLEdBQUcsT0FBT3NHLFFBQVFHLFFBQVFoRSxFQUFFekMsR0FBRyxFQUFFa0MsSUFBSSxTQUFTbEMsRUFBRUMsRUFBRUcsR0FBRyxJQUFJRSxFQUFFa0UsRUFBRS9CLEVBQUV6QyxHQUFHQyxHQUFHLEdBQUcsTUFBTUssT0FBRSxFQUFPQSxFQUFFNEIsSUFBSSxPQUFPNUIsRUFBRTRCLElBQUlwQixLQUFLZCxFQUFFeUUsRUFBRXJFLElBQUcsRUFBRyxJQUFJSixFQUFFbUUsRUFBRSxDQUFDLElBQUk1QyxFQUFFdUQsRUFBRXJDLEVBQUV6QyxHQUFHQyxHQUFHdUIsRUFBRSxNQUFNRCxPQUFFLEVBQU9BLEVBQUViLEdBQUcsR0FBR2MsR0FBR0EsRUFBRXBCLElBQUlBLEVBQUUsT0FBT0osRUFBRXdCLEVBQUV2QixHQUFHRyxFQUFFSixFQUFFMkUsRUFBRTFFLElBQUcsR0FBRyxFQUFHLEdBQUdtQyxFQUFFaEMsRUFBRW1CLFVBQUssSUFBU25CLEdBQUd3QixFQUFFNUIsRUFBRUksRUFBRUgsSUFBSSxPQUFNLEVBQUcrRSxFQUFFaEYsR0FBR3lFLEVBQUV6RSxFQUFFLENBQUMsT0FBT0EsRUFBRXdCLEVBQUV2QixLQUFLRyxTQUFJLElBQVNBLEdBQUdILEtBQUtELEVBQUV3QixJQUFJcUYsT0FBT0MsTUFBTTFHLElBQUl5RyxPQUFPQyxNQUFNOUcsRUFBRXdCLEVBQUV2QixNQUFNRCxFQUFFd0IsRUFBRXZCLEdBQUdHLEVBQUVKLEVBQUUyRSxFQUFFMUUsSUFBRyxJQUFJLENBQUUsRUFBRThHLGVBQWUsU0FBUy9HLEVBQUVDLEdBQUcsWUFBTyxJQUFTNkUsRUFBRTlFLEVBQUVJLEVBQUVILElBQUlBLEtBQUtELEVBQUVJLEdBQUdKLEVBQUUyRSxFQUFFMUUsSUFBRyxFQUFHK0UsRUFBRWhGLEdBQUd5RSxFQUFFekUsV0FBV0EsRUFBRTJFLEVBQUUxRSxHQUFHRCxFQUFFd0IsVUFBVXhCLEVBQUV3QixFQUFFdkIsSUFBRyxDQUFFLEVBQUU4RSx5QkFBeUIsU0FBUy9FLEVBQUVDLEdBQUcsSUFBSUcsRUFBRXFDLEVBQUV6QyxHQUFHTSxFQUFFZ0csUUFBUXZCLHlCQUF5QjNFLEVBQUVILEdBQUcsT0FBT0ssRUFBRSxDQUFDdUMsVUFBUyxFQUFHQyxhQUFhLElBQUk5QyxFQUFFdUIsR0FBRyxXQUFXdEIsRUFBRThDLFdBQVd6QyxFQUFFeUMsV0FBV0MsTUFBTTVDLEVBQUVILElBQUlLLENBQUMsRUFBRXlGLGVBQWUsV0FBVy9GLEVBQUUsR0FBRyxFQUFFWSxlQUFlLFNBQVNaLEdBQUcsT0FBT1csT0FBT0MsZUFBZVosRUFBRUksRUFBRSxFQUFFNEcsZUFBZSxXQUFXaEgsRUFBRSxHQUFHLEdBQUdxRixHQUFHLENBQUMsRUFBRTlELEVBQUU2RCxJQUFHLFNBQVVwRixFQUFFQyxHQUFHb0YsR0FBR3JGLEdBQUcsV0FBVyxPQUFPRSxVQUFVLEdBQUdBLFVBQVUsR0FBRyxHQUFHRCxFQUFFZ0gsTUFBTW5CLEtBQUs1RixVQUFVLENBQUUsSUFBR21GLEdBQUcwQixlQUFlLFNBQVM5RyxFQUFFRyxHQUFHLE9BQXFFaUYsR0FBR25ELElBQUlwQixLQUFLZ0YsS0FBSzdGLEVBQUVHLE9BQUUsRUFBTyxFQUFFaUYsR0FBR25ELElBQUksU0FBU2pDLEVBQUVHLEVBQUVFLEdBQUcsT0FBbUY4RSxHQUFHbEQsSUFBSXBCLEtBQUtnRixLQUFLN0YsRUFBRSxHQUFHRyxFQUFFRSxFQUFFTCxFQUFFLEdBQUcsRUFBRSxJQUFJaUgsR0FBRyxXQUFXLFNBQVM1RyxFQUFFTCxHQUFHLElBQUlLLEVBQUV3RixLQUFLQSxLQUFLOUIsRUFBRXFDLEVBQUVQLEtBQUtqQixHQUFFLEVBQUdpQixLQUFLcUIsUUFBUSxTQUFTbEgsRUFBRXNCLEVBQUVDLEdBQUcsR0FBRyxtQkFBbUJ2QixHQUFHLG1CQUFtQnNCLEVBQUUsQ0FBQyxJQUFJSyxFQUFFTCxFQUFFQSxFQUFFdEIsRUFBRSxJQUFJOEIsRUFBRXpCLEVBQUUsT0FBTyxTQUFTTixHQUFHLElBQUlDLEVBQUU2RixVQUFLLElBQVM5RixJQUFJQSxFQUFFNEIsR0FBRyxJQUFJLElBQUl4QixFQUFFRixVQUFVQyxPQUFPRyxFQUFFRCxNQUFNRCxFQUFFLEVBQUVBLEVBQUUsRUFBRSxHQUFHb0IsRUFBRSxFQUFFQSxFQUFFcEIsRUFBRW9CLElBQUlsQixFQUFFa0IsRUFBRSxHQUFHdEIsVUFBVXNCLEdBQUcsT0FBT08sRUFBRW9GLFFBQVFuSCxHQUFFLFNBQVVBLEdBQUcsSUFBSUksRUFBRSxPQUFPQSxFQUFFbUIsR0FBR1QsS0FBS21HLE1BQU03RyxFQUFFLENBQUNILEVBQUVELEdBQUc0RSxPQUFPdEUsR0FBSSxHQUFFLENBQUMsQ0FBQyxJQUFJMkIsRUFBRSxHQUFHLG1CQUFtQlYsR0FBR3ZCLEVBQUUsUUFBRyxJQUFTd0IsR0FBRyxtQkFBbUJBLEdBQUd4QixFQUFFLEdBQUdJLEVBQUVILEdBQUcsQ0FBQyxJQUFJbUMsRUFBRThCLEVBQUU1RCxHQUFHZSxFQUFFcUQsRUFBRXBFLEVBQUVMLE9BQUUsR0FBUXFCLEdBQUUsRUFBRyxJQUFJVyxFQUFFVixFQUFFRixHQUFHQyxHQUFFLENBQUUsQ0FBQyxRQUFRQSxFQUFFeUMsRUFBRTNCLEdBQUc0QixFQUFFNUIsRUFBRSxDQUFDLE1BQU0sb0JBQW9CZ0YsU0FBU25GLGFBQWFtRixRQUFRbkYsRUFBRW9GLE1BQUssU0FBVXJILEdBQUcsT0FBTzhELEVBQUUxQixFQUFFWixHQUFHMkMsRUFBRW5FLEVBQUVvQyxFQUFHLElBQUUsU0FBVXBDLEdBQUcsTUFBTStELEVBQUUzQixHQUFHcEMsQ0FBRSxLQUFJOEQsRUFBRTFCLEVBQUVaLEdBQUcyQyxFQUFFbEMsRUFBRUcsR0FBRyxDQUFDLElBQUluQyxHQUFHLGlCQUFpQkEsRUFBRSxDQUFDLFFBQUcsS0FBVWdDLEVBQUVWLEVBQUV0QixNQUFNZ0MsRUFBRWhDLEdBQUdnQyxJQUFJcUMsSUFBSXJDLE9BQUUsR0FBUTNCLEVBQUV1RSxHQUFHM0IsRUFBRWpCLEdBQUUsR0FBSVQsRUFBRSxDQUFDLElBQUlpQixFQUFFLEdBQUdDLEVBQUUsR0FBR2UsRUFBRSxXQUFXVyxFQUFFbkUsRUFBRWdDLEVBQUVRLEVBQUVDLEdBQUdsQixFQUFFaUIsRUFBRUMsRUFBRSxDQUFDLE9BQU9ULENBQUMsQ0FBQ2pDLEVBQUUsR0FBR0MsRUFBRSxFQUFFNkYsS0FBS3dCLG1CQUFtQixTQUFTdEgsRUFBRUMsR0FBRyxHQUFHLG1CQUFtQkQsRUFBRSxPQUFPLFNBQVNDLEdBQUcsSUFBSSxJQUFJRyxFQUFFRixVQUFVQyxPQUFPb0IsRUFBRWxCLE1BQU1ELEVBQUUsRUFBRUEsRUFBRSxFQUFFLEdBQUdvQixFQUFFLEVBQUVBLEVBQUVwQixFQUFFb0IsSUFBSUQsRUFBRUMsRUFBRSxHQUFHdEIsVUFBVXNCLEdBQUcsT0FBT2xCLEVBQUVnSCxtQkFBbUJySCxHQUFFLFNBQVVBLEdBQUcsT0FBT0QsRUFBRWlILFdBQU0sRUFBTyxDQUFDaEgsR0FBRzJFLE9BQU9yRCxHQUFJLEdBQUUsRUFBRSxJQUFJbkIsRUFBRW1CLEVBQUVDLEVBQUVsQixFQUFFNkcsUUFBUW5ILEVBQUVDLEdBQUUsU0FBVUQsRUFBRUMsR0FBR0csRUFBRUosRUFBRXVCLEVBQUV0QixDQUFFLElBQUcsTUFBTSxvQkFBb0JtSCxTQUFTNUYsYUFBYTRGLFFBQVE1RixFQUFFNkYsTUFBSyxTQUFVckgsR0FBRyxNQUFNLENBQUNBLEVBQUVJLEVBQUVtQixFQUFHLElBQUcsQ0FBQ0MsRUFBRXBCLEVBQUVtQixFQUFFLEVBQUUsa0JBQWtCLE1BQU10QixPQUFFLEVBQU9BLEVBQUVzSCxhQUFhekIsS0FBSzBCLGNBQWN2SCxFQUFFc0gsWUFBWSxrQkFBa0IsTUFBTXRILE9BQUUsRUFBT0EsRUFBRXdILGFBQWEzQixLQUFLNEIsY0FBY3pILEVBQUV3SCxXQUFXLENBQUMsSUFBSWxHLEVBQUVqQixFQUFFd0IsVUFBVSxPQUFPUCxFQUFFb0csWUFBWSxTQUFTckgsR0FBR0YsRUFBRUUsSUFBSU4sRUFBRSxHQUFHQyxFQUFFSyxLQUFLQSxFQUFFcUUsRUFBRXJFLElBQUksSUFBSWlCLEVBQUUyQyxFQUFFNEIsTUFBTXRFLEVBQUVrRCxFQUFFb0IsS0FBS3hGLE9BQUUsR0FBUSxPQUFPa0IsRUFBRWQsR0FBR3lFLEdBQUUsRUFBR25CLEVBQUV6QyxHQUFHQyxDQUFDLEVBQUVELEVBQUVxRyxZQUFZLFNBQVMzSCxFQUFFRyxHQUFHLElBQWlGbUIsR0FBM0V0QixHQUFHQSxFQUFFUyxJQUEwRTZELEVBQUUsT0FBT1QsRUFBRXZDLEVBQUVuQixHQUFHK0QsT0FBRSxFQUFPNUMsRUFBRSxFQUFFQSxFQUFFbUcsY0FBYyxTQUFTMUgsR0FBRzhGLEtBQUtqQixFQUFFN0UsQ0FBQyxFQUFFdUIsRUFBRWlHLGNBQWMsU0FBU3ZILEdBQUdBLElBQUlvRyxHQUFHckcsRUFBRSxJQUFJOEYsS0FBSzlCLEVBQUUvRCxDQUFDLEVBQUVzQixFQUFFc0csYUFBYSxTQUFTN0gsRUFBRUksR0FBRyxJQUFJRSxFQUFFLElBQUlBLEVBQUVGLEVBQUVELE9BQU8sRUFBRUcsR0FBRyxFQUFFQSxJQUFJLENBQUMsSUFBSWlCLEVBQUVuQixFQUFFRSxHQUFHLEdBQUcsSUFBSWlCLEVBQUV1RyxLQUFLM0gsUUFBUSxZQUFZb0IsRUFBRXdHLEdBQUcsQ0FBQy9ILEVBQUV1QixFQUFFeUIsTUFBTSxLQUFLLENBQUMsQ0FBQzFDLEdBQUcsSUFBSUYsRUFBRUEsRUFBRXVDLE1BQU1yQyxFQUFFLElBQUksSUFBSWtCLEVBQUVpQyxFQUFFLFdBQVd1RSxFQUFFLE9BQU8vSCxFQUFFRCxHQUFHd0IsRUFBRXhCLEVBQUVJLEdBQUcwRixLQUFLcUIsUUFBUW5ILEdBQUUsU0FBVUEsR0FBRyxPQUFPd0IsRUFBRXhCLEVBQUVJLEVBQUcsR0FBRSxFQUFFRSxDQUFDLENBQWo3RCxHQUFxN0QySCxHQUFHLElBQUlmLEdBQUdnQixHQUFHRCxHQUFHZCxRQUFXYyxHQUFHWCxtQkFBbUJhLEtBQUtGLElBQU9BLEdBQUdQLGNBQWNTLEtBQUtGLElBQU9BLEdBQUdULGNBQWNXLEtBQUtGLElBQU9BLEdBQUdKLGFBQWFNLEtBQUtGLElBQU9BLEdBQUdOLFlBQVlRLEtBQUtGLElBQU9BLEdBQUdMLFlBQVlPLEtBQUtGLElBQUksbUIsa0VDRXRpakJHLFVBQVksWUFnRlQsSUFBSUMscUJBQXVCLFNBQVNBLHFCQUFxQnRHLEVBQUcwQixHQUNqRSxPQUFPMUIsSUFBTTBCLENBQ2YsRUFxQk8sU0FBUzZFLGVBQWVDLEtBQU1DLHdCQUNuQyxJQUFJQyxnQkFBb0QsaUJBQTNCRCx1QkFBc0NBLHVCQUF5QixDQUMxRkUsY0FBZUYsd0JBRWJHLHNCQUF3QkYsZ0JBQWdCQyxjQUN4Q0EsbUJBQTBDLElBQTFCQyxzQkFBbUNOLHFCQUF1Qk0sc0JBQzFFQyxzQkFBd0JILGdCQUFnQkksUUFDeENBLGFBQW9DLElBQTFCRCxzQkFBbUMsRUFBSUEsc0JBQ2pERSxvQkFBc0JMLGdCQUFnQkssb0JBQ3RDQyxXQTdCQyxTQUFTQyx5QkFBeUJOLGVBQ3ZDLE9BQU8sU0FBU08sMkJBQTJCQyxLQUFNQyxNQUMvQyxHQUFhLE9BQVRELE1BQTBCLE9BQVRDLE1BQWlCRCxLQUFLL0ksU0FBV2dKLEtBQUtoSixPQUN6RCxPQUFPLEVBTVQsSUFGQSxJQUFJQSxPQUFTK0ksS0FBSy9JLE9BRVRvQixFQUFJLEVBQUdBLEVBQUlwQixPQUFRb0IsSUFDMUIsSUFBS21ILGNBQWNRLEtBQUszSCxHQUFJNEgsS0FBSzVILElBQy9CLE9BQU8sRUFJWCxPQUFPLENBQ1QsQ0FDRixDQVltQnlILENBQXlCTixlQUN0Q1UsTUFBb0IsSUFBWlAsUUEvR2QsU0FBU1EscUJBQXFCQyxRQUM1QixJQUFJQyxNQUNKLE1BQU8sQ0FDTHZILElBQUssU0FBU0EsSUFBSXdILEtBQ2hCLE9BQUlELE9BQVNELE9BQU9DLE1BQU1DLElBQUtBLEtBQ3RCRCxNQUFNdkcsTUFHUm9GLFNBQ1QsRUFDQXFCLElBQUssU0FBU0EsSUFBSUQsSUFBS3hHLE9BQ3JCdUcsTUFBUSxDQUNOQyxJQUNBeEcsTUFFSixFQUNBMEcsV0FBWSxTQUFTQSxhQUNuQixPQUFPSCxNQUFRLENBQUNBLE9BQVMsRUFDM0IsRUFDQW5HLE1BQU8sU0FBU0EsUUFDZG1HLFdBQVFJLENBQ1YsRUFFSixDQXdGOEJOLENBQXFCTixZQXRGbkQsU0FBU2EsZUFBZWYsUUFBU1MsUUFDL0IsSUFBSU8sUUFBVSxHQUVkLFNBQVM3SCxJQUFJd0gsS0FDWCxJQUFJTSxXQUFhRCxRQUFRRSxXQUFVLFNBQVVSLE9BQzNDLE9BQU9ELE9BQU9FLElBQUtELE1BQU1DLElBQzNCLElBRUEsR0FBSU0sWUFBYyxFQUFHLENBQ25CLElBQUlQLE1BQVFNLFFBQVFDLFlBT3BCLE9BTElBLFdBQWEsSUFDZkQsUUFBUUcsT0FBT0YsV0FBWSxHQUMzQkQsUUFBUUksUUFBUVYsUUFHWEEsTUFBTXZHLEtBQ2YsQ0FHQSxPQUFPb0YsU0FDVCxDQXdCQSxNQUFPLENBQ0xwRyxJQUNBeUgsSUF4QkYsU0FBU0EsSUFBSUQsSUFBS3hHLE9BQ1poQixJQUFJd0gsT0FBU3BCLFlBRWZ5QixRQUFRSSxRQUFRLENBQ2RULElBQ0F4RyxRQUdFNkcsUUFBUTFKLE9BQVMwSSxTQUNuQmdCLFFBQVFLLE1BR2QsRUFhRVIsV0FYRixTQUFTQSxhQUNQLE9BQU9HLE9BQ1QsRUFVRXpHLE1BUkYsU0FBU0EsUUFDUHlHLFFBQVUsRUFDWixFQVFGLENBbUNpRUQsQ0FBZWYsUUFBU0UsWUFFdkYsU0FBU29CLFdBQ1AsSUFBSW5ILE1BQVFvRyxNQUFNcEgsSUFBSTlCLFdBRXRCLEdBQUk4QyxRQUFVb0YsVUFBVyxDQUl2QixHQUZBcEYsTUFBUXVGLEtBQUt0QixNQUFNLEtBQU0vRyxXQUVyQjRJLG9CQUFxQixDQUN2QixJQUNJc0IsY0FEVWhCLE1BQU1NLGFBQ1FXLE1BQUssU0FBVWQsT0FDekMsT0FBT1Qsb0JBQW9CUyxNQUFNdkcsTUFBT0EsTUFDMUMsSUFFSW9ILGdCQUNGcEgsTUFBUW9ILGNBQWNwSCxNQUUxQixDQUVBb0csTUFBTUssSUFBSXZKLFVBQVc4QyxNQUN2QixDQUVBLE9BQU9BLEtBQ1QsQ0FNQSxPQUpBbUgsU0FBU0csV0FBYSxXQUNwQixPQUFPbEIsTUFBTWhHLE9BQ2YsRUFFTytHLFFBQ1QsQ0NoSU8sU0FBU0ksc0JBQXNCQyxTQUNwQyxJQUFLLElBQUlDLEtBQU92SyxVQUFVQyxPQUFRdUssdUJBQXlCLElBQUlySyxNQUFNb0ssS0FBTyxFQUFJQSxLQUFPLEVBQUksR0FBSUUsS0FBTyxFQUFHQSxLQUFPRixLQUFNRSxPQUNwSEQsdUJBQXVCQyxLQUFPLEdBQUt6SyxVQUFVeUssTUFpRi9DLE9BOUVxQixTQUFTQyxpQkFDNUIsSUFBSyxJQUFJQyxNQUFRM0ssVUFBVUMsT0FBUTJLLE1BQVEsSUFBSXpLLE1BQU13SyxPQUFRRSxNQUFRLEVBQUdBLE1BQVFGLE1BQU9FLFFBQ3JGRCxNQUFNQyxPQUFTN0ssVUFBVTZLLE9BRzNCLElBRUlDLFlBRkFDLGdCQUFrQixFQU9sQkMsc0JBQXdCLENBQzFCQyxvQkFBZ0J4QixHQUdkeUIsV0FBYU4sTUFBTVosTUFRdkIsR0FOMEIsaUJBQWZrQixhQUNURixzQkFBd0JFLFdBRXhCQSxXQUFhTixNQUFNWixPQUdLLG1CQUFma0IsV0FDVCxNQUFNLElBQUk3SyxNQUFNLHFGQUF1RjZLLFdBQWEsS0FLdEgsSUFDSUMsdUJBRHdCSCxzQkFDdUJDLGVBQy9DQSxvQkFBNEMsSUFBM0JFLHVCQUFvQ1gsdUJBQXlCVyx1QkFNOUVDLG9CQUFzQmpMLE1BQU1jLFFBQVFnSyxnQkFBa0JBLGVBQWlCLENBQUNBLGdCQUN4RUksYUEzRFIsU0FBU0MsZ0JBQWdCVixPQUN2QixJQUFJUyxhQUFlbEwsTUFBTWMsUUFBUTJKLE1BQU0sSUFBTUEsTUFBTSxHQUFLQSxNQUV4RCxJQUFLUyxhQUFhRSxPQUFNLFNBQVVDLEtBQ2hDLE1BQXNCLG1CQUFSQSxHQUNoQixJQUFJLENBQ0YsSUFBSUMsZ0JBQWtCSixhQUFhL0ssS0FBSSxTQUFVa0wsS0FDL0MsTUFBc0IsbUJBQVJBLElBQXFCLGFBQWVBLElBQUlFLE1BQVEsV0FBYSxZQUFjRixHQUMzRixJQUFHakwsS0FBSyxNQUNSLE1BQU0sSUFBSUYsTUFBTSxrR0FBb0dvTCxnQkFBa0IsSUFDeEksQ0FFQSxPQUFPSixZQUNULENBOEN1QkMsQ0FBZ0JWLE9BQy9CZSxtQkFBcUJyQixRQUFRdkQsV0FBTSxFQUFRLENBQUMsU0FBUzZFLHVCQUd2RCxPQUZBYixrQkFFT0csV0FBV25FLE1BQU0sS0FBTS9HLFVBQ2hDLEdBQUcwRSxPQUFPMEcsc0JBRU5TLFNBQVd2QixTQUFRLFNBQVN3QixzQkFJOUIsSUFIQSxJQUFJQyxPQUFTLEdBQ1Q5TCxPQUFTb0wsYUFBYXBMLE9BRWpCb0IsRUFBSSxFQUFHQSxFQUFJcEIsT0FBUW9CLElBRzFCMEssT0FBT3RHLEtBQUs0RixhQUFhaEssR0FBRzBGLE1BQU0sS0FBTS9HLFlBSzFDLE9BREE4SyxZQUFjYSxtQkFBbUI1RSxNQUFNLEtBQU1nRixPQUUvQyxJQWVBLE9BZEF0TCxPQUFPdUwsT0FBT0gsU0FBVSxDQUN0QlgsV0FDQVMsbUJBQ0FOLGFBQ0FZLFdBQVksU0FBU0EsYUFDbkIsT0FBT25CLFdBQ1QsRUFDQW9CLGVBQWdCLFNBQVNBLGlCQUN2QixPQUFPbkIsZUFDVCxFQUNBb0Isb0JBQXFCLFNBQVNBLHNCQUM1QixPQUFPcEIsZ0JBQWtCLENBQzNCLElBRUtjLFFBQ1QsQ0FJRixDQUNPLElBQUluQixlQUFnQ0wsc0JBQXNCakMsZ0JDcEdqRSxTQUFTZ0Usc0JBQXNCQyxlQXFCN0IsT0FsQmlCLFNBQVNDLFdBQVdDLE1BQ25DLElBQUlDLFNBQVdELEtBQUtDLFNBQ2hCQyxTQUFXRixLQUFLRSxTQUNwQixPQUFPLFNBQVV4RCxNQUNmLE9BQU8sU0FBVXlELFFBR2YsTUFBc0IsbUJBQVhBLE9BRUZBLE9BQU9GLFNBQVVDLFNBQVVKLGVBSTdCcEQsS0FBS3lELE9BQ2QsQ0FDRixDQUNGLENBR0YsQ0FFQSxJQUFJQyxNQUFRUCx3QkFHWk8sTUFBTUMsa0JBQW9CUixzQkFDMUIsZSw2REM5QlFTLGNBREpDLFdBQ0lELGNBQWdCLFNBQVU3SixFQUFHTyxHQUk3QixPQUhBc0osY0FBZ0JwTSxPQUFPcUcsZ0JBQ2xCLENBQUVpRyxVQUFXLGNBQWdCNU0sT0FBUyxTQUFVNkMsRUFBR08sR0FBS1AsRUFBRStKLFVBQVl4SixDQUFHLEdBQzFFLFNBQVVQLEVBQUdPLEdBQUssSUFBSyxJQUFJaEIsS0FBS2dCLEVBQU85QyxPQUFPbUIsVUFBVWpCLGVBQWVDLEtBQUsyQyxFQUFHaEIsS0FBSVMsRUFBRVQsR0FBS2dCLEVBQUVoQixHQUFJLEVBQzdGc0ssY0FBYzdKLEVBQUdPLEVBQzVCLEVBQ08sU0FBVVAsRUFBR08sR0FDaEIsR0FBaUIsbUJBQU5BLEdBQTBCLE9BQU5BLEVBQzNCLE1BQU0sSUFBSXlKLFVBQVUsdUJBQXlCQyxPQUFPMUosR0FBSyxpQ0FFN0QsU0FBUzJKLEtBQU90SCxLQUFLL0UsWUFBY21DLENBQUcsQ0FEdEM2SixjQUFjN0osRUFBR08sR0FFakJQLEVBQUVwQixVQUFrQixPQUFOMkIsRUFBYTlDLE9BQU9zQyxPQUFPUSxJQUFNMkosR0FBR3RMLFVBQVkyQixFQUFFM0IsVUFBVyxJQUFJc0wsR0FDbkYsR0FFQUMsWUFBNEMsU0FBVUMsUUFBU0MsTUFDL0QsSUFBc0d0TCxFQUFHa0IsRUFBRy9DLEVBQUc0RCxFQUEzR0osRUFBSSxDQUFFNEosTUFBTyxFQUFHQyxLQUFNLFdBQWEsR0FBVyxFQUFQck4sRUFBRSxHQUFRLE1BQU1BLEVBQUUsR0FBSSxPQUFPQSxFQUFFLEVBQUksRUFBR3NOLEtBQU0sR0FBSUMsSUFBSyxJQUNoRyxPQUFPM0osRUFBSSxDQUFFbUYsS0FBTXlFLEtBQUssR0FBSSxNQUFTQSxLQUFLLEdBQUksT0FBVUEsS0FBSyxJQUF3QixtQkFBWHhILFNBQTBCcEMsRUFBRW9DLE9BQU9JLFVBQVksV0FBYSxPQUFPVixJQUFNLEdBQUk5QixFQUN2SixTQUFTNEosS0FBSzVOLEdBQUssT0FBTyxTQUFVc0IsR0FBSyxPQUN6QyxTQUFTdU0sS0FBSzlGLElBQ1YsR0FBSTlGLEVBQUcsTUFBTSxJQUFJaUwsVUFBVSxtQ0FDM0IsS0FBT3RKLE9BQ0gsR0FBSTNCLEVBQUksRUFBR2tCLElBQU0vQyxFQUFZLEVBQVIySCxHQUFHLEdBQVM1RSxFQUFVLE9BQUk0RSxHQUFHLEdBQUs1RSxFQUFTLFNBQU8vQyxFQUFJK0MsRUFBVSxTQUFNL0MsRUFBRVUsS0FBS3FDLEdBQUksR0FBS0EsRUFBRWdHLFNBQVcvSSxFQUFJQSxFQUFFVSxLQUFLcUMsRUFBRzRFLEdBQUcsS0FBSytGLEtBQU0sT0FBTzFOLEVBRTNKLE9BREkrQyxFQUFJLEVBQUcvQyxJQUFHMkgsR0FBSyxDQUFTLEVBQVJBLEdBQUcsR0FBUTNILEVBQUU0QyxRQUN6QitFLEdBQUcsSUFDUCxLQUFLLEVBQUcsS0FBSyxFQUFHM0gsRUFBSTJILEdBQUksTUFDeEIsS0FBSyxFQUFjLE9BQVhuRSxFQUFFNEosUUFBZ0IsQ0FBRXhLLE1BQU8rRSxHQUFHLEdBQUkrRixNQUFNLEdBQ2hELEtBQUssRUFBR2xLLEVBQUU0SixRQUFTckssRUFBSTRFLEdBQUcsR0FBSUEsR0FBSyxDQUFDLEdBQUksU0FDeEMsS0FBSyxFQUFHQSxHQUFLbkUsRUFBRStKLElBQUl6RCxNQUFPdEcsRUFBRThKLEtBQUt4RCxNQUFPLFNBQ3hDLFFBQ0ksS0FBTTlKLEVBQUl3RCxFQUFFOEosTUFBTXROLEVBQUlBLEVBQUVELE9BQVMsR0FBS0MsRUFBRUEsRUFBRUQsT0FBUyxLQUFrQixJQUFWNEgsR0FBRyxJQUFzQixJQUFWQSxHQUFHLElBQVcsQ0FBRW5FLEVBQUksRUFBRyxRQUFVLENBQzNHLEdBQWMsSUFBVm1FLEdBQUcsTUFBYzNILEdBQU0ySCxHQUFHLEdBQUszSCxFQUFFLElBQU0ySCxHQUFHLEdBQUszSCxFQUFFLElBQU0sQ0FBRXdELEVBQUU0SixNQUFRekYsR0FBRyxHQUFJLEtBQU8sQ0FDckYsR0FBYyxJQUFWQSxHQUFHLElBQVluRSxFQUFFNEosTUFBUXBOLEVBQUUsR0FBSSxDQUFFd0QsRUFBRTRKLE1BQVFwTixFQUFFLEdBQUlBLEVBQUkySCxHQUFJLEtBQU8sQ0FDcEUsR0FBSTNILEdBQUt3RCxFQUFFNEosTUFBUXBOLEVBQUUsR0FBSSxDQUFFd0QsRUFBRTRKLE1BQVFwTixFQUFFLEdBQUl3RCxFQUFFK0osSUFBSWhJLEtBQUtvQyxJQUFLLEtBQU8sQ0FDOUQzSCxFQUFFLElBQUl3RCxFQUFFK0osSUFBSXpELE1BQ2hCdEcsRUFBRThKLEtBQUt4RCxNQUFPLFNBRXRCbkMsR0FBS3dGLEtBQUt6TSxLQUFLd00sUUFBUzFKLEVBQzVCLENBQUUsTUFBT3RELEdBQUt5SCxHQUFLLENBQUMsRUFBR3pILEdBQUk2QyxFQUFJLENBQUcsQ0FBRSxRQUFVbEIsRUFBSTdCLEVBQUksQ0FBRyxDQUN6RCxHQUFZLEVBQVIySCxHQUFHLEdBQVEsTUFBTUEsR0FBRyxHQUFJLE1BQU8sQ0FBRS9FLE1BQU8rRSxHQUFHLEdBQUtBLEdBQUcsUUFBSyxFQUFRK0YsTUFBTSxFQUM5RSxDQXRCZ0RELENBQUssQ0FBQzdOLEVBQUdzQixHQUFLLENBQUcsQ0F1QnJFLEVBQ0l5TSxjQUFnRCxTQUFVQyxHQUFJbkksTUFDOUQsSUFBSyxJQUFJdEUsRUFBSSxFQUFHME0sR0FBS3BJLEtBQUsxRixPQUFRMkQsRUFBSWtLLEdBQUc3TixPQUFRb0IsRUFBSTBNLEdBQUkxTSxJQUFLdUMsSUFDMURrSyxHQUFHbEssR0FBSytCLEtBQUt0RSxHQUNqQixPQUFPeU0sRUFDWCxFQUNJRSxVQUFZdk4sT0FBT29GLGVBQ25Cb0ksV0FBYXhOLE9BQU95TixpQkFDcEJDLGtCQUFvQjFOLE9BQU9pRywwQkFDM0IwSCxvQkFBc0IzTixPQUFPK0Ysc0JBQzdCNkgsYUFBZTVOLE9BQU9tQixVQUFVakIsZUFDaEMyTixhQUFlN04sT0FBT21CLFVBQVUyTSxxQkFDaENDLGdCQUFrQixTQUFVQyxJQUFLbkYsSUFBS3hHLE9BQVMsT0FBT3dHLE9BQU9tRixJQUFNVCxVQUFVUyxJQUFLbkYsSUFBSyxDQUFFekcsWUFBWSxFQUFNRCxjQUFjLEVBQU1ELFVBQVUsRUFBTUcsUUFBa0IyTCxJQUFJbkYsS0FBT3hHLEtBQU8sRUFDbkw0TCxlQUFpQixTQUFVN00sRUFBRzBCLEdBQzlCLElBQUssSUFBSW9MLFFBQVFwTCxJQUFNQSxFQUFJLENBQUMsR0FDcEI4SyxhQUFhek4sS0FBSzJDLEVBQUdvTCxPQUNyQkgsZ0JBQWdCM00sRUFBRzhNLEtBQU1wTCxFQUFFb0wsT0FDbkMsR0FBSVAsb0JBQ0EsSUFBSyxJQUFJUSxHQUFLLEVBQUdDLEdBQUtULG9CQUFvQjdLLEdBQUlxTCxHQUFLQyxHQUFHNU8sT0FBUTJPLEtBQU0sQ0FDNURELEtBQU9FLEdBQUdELElBQ1ZOLGFBQWExTixLQUFLMkMsRUFBR29MLE9BQ3JCSCxnQkFBZ0IzTSxFQUFHOE0sS0FBTXBMLEVBQUVvTCxNQUNuQyxDQUNKLE9BQU85TSxDQUNYLEVBQ0lpTixjQUFnQixTQUFVak4sRUFBRzBCLEdBQUssT0FBTzBLLFdBQVdwTSxFQUFHc00sa0JBQWtCNUssR0FBSyxFQUM5RXdMLFFBQVUsU0FBVUMsT0FBUUMsWUFBYUMsV0FDekMsT0FBTyxJQUFJaEksU0FBUSxTQUFVaUksUUFBU0MsUUFDbEMsSUFBSUMsVUFBWSxTQUFVdk0sT0FDdEIsSUFDSTZLLEtBQUt1QixVQUFVakcsS0FBS25HLE9BQ3hCLENBQ0EsTUFBTzFDLEdBQ0hnUCxPQUFPaFAsRUFDWCxDQUNKLEVBQ0lrUCxTQUFXLFNBQVV4TSxPQUNyQixJQUNJNkssS0FBS3VCLFVBQVVLLE1BQU16TSxPQUN6QixDQUNBLE1BQU8xQyxHQUNIZ1AsT0FBT2hQLEVBQ1gsQ0FDSixFQUNJdU4sS0FBTyxTQUFVeEosR0FBSyxPQUFPQSxFQUFFeUosS0FBT3VCLFFBQVFoTCxFQUFFckIsT0FBU29FLFFBQVFpSSxRQUFRaEwsRUFBRXJCLE9BQU9xRSxLQUFLa0ksVUFBV0MsU0FBVyxFQUNqSDNCLE1BQU11QixVQUFZQSxVQUFVbkksTUFBTWlJLE9BQVFDLGNBQWNoRyxPQUM1RCxHQUNKLEVBU0l1Ryx3QkFBMEIsV0FFMUIsSUFEQSxJQUFJQyxLQUFPLEdBQ0ZiLEdBQUssRUFBR0EsR0FBSzVPLFVBQVVDLE9BQVEyTyxLQUNwQ2EsS0FBS2IsSUFBTTVPLFVBQVU0TyxJQUV6QixJQUFJL0MsU0FBV25CLGVBQWUzRCxXQUFNLEVBQVEwSSxNQVE1QyxPQVBzQixTQUFVM00sT0FFNUIsSUFEQSxJQUFJNE0sS0FBTyxHQUNGZCxHQUFLLEVBQUdBLEdBQUs1TyxVQUFVQyxPQUFRMk8sS0FDcENjLEtBQUtkLEdBQUssR0FBSzVPLFVBQVU0TyxJQUU3QixPQUFPL0MsU0FBUzlFLFdBQU0sRUFBUThHLGNBQWMsQ0FBQyxFQUFRL0ssT0FBUyxFQUFRQSxPQUFTQSxPQUFRNE0sTUFDM0YsQ0FFSixFQUtJQyxvQkFBd0Msb0JBQVhDLFFBQTBCQSxPQUFPQyxxQ0FBdUNELE9BQU9DLHFDQUF1QyxXQUNuSixHQUF5QixJQUFyQjdQLFVBQVVDLE9BRWQsTUFBNEIsaUJBQWpCRCxVQUFVLEdBQ1YsTUFBQThQLFFBQ0osTUFBQUEsUUFBUS9JLE1BQU0sS0FBTS9HLFVBQy9CLEVBQ3lDLG9CQUFYNFAsUUFBMEJBLE9BQU9HLDhCQUErQkgsT0FBT0csNkJBTXJHLFNBQVNDLGNBQWNsTixPQUNuQixHQUFxQixpQkFBVkEsT0FBZ0MsT0FBVkEsTUFDN0IsT0FBTyxFQUNYLElBQUltTixNQUFReFAsT0FBT0MsZUFBZW9DLE9BQ2xDLEdBQWMsT0FBVm1OLE1BQ0EsT0FBTyxFQUVYLElBREEsSUFBSUMsVUFBWUQsTUFDNEIsT0FBckN4UCxPQUFPQyxlQUFld1AsWUFDekJBLFVBQVl6UCxPQUFPQyxlQUFld1AsV0FFdEMsT0FBT0QsUUFBVUMsU0FDckIsQ0F5QkEsSUFBSUMsZ0JBQWlDLFNBQVVDLFFBRTNDLFNBQVNELGtCQUVMLElBREEsSUFBSVYsS0FBTyxHQUNGYixHQUFLLEVBQUdBLEdBQUs1TyxVQUFVQyxPQUFRMk8sS0FDcENhLEtBQUtiLElBQU01TyxVQUFVNE8sSUFFekIsSUFBSXlCLE1BQVFELE9BQU9ySixNQUFNbkIsS0FBTTZKLE9BQVM3SixLQUV4QyxPQURBbkYsT0FBT3FHLGVBQWV1SixNQUFPRixnQkFBZ0J2TyxXQUN0Q3lPLEtBQ1gsQ0F5QkEsT0FsQ0F2RCxVQUFVcUQsZ0JBQWlCQyxRQVUzQjNQLE9BQU9vRixlQUFlc0ssZ0JBQWlCakssT0FBT29LLFFBQVMsQ0FDbkR4TyxJQUFLLFdBQ0QsT0FBT3FPLGVBQ1gsRUFDQXROLFlBQVksRUFDWkQsY0FBYyxJQUVsQnVOLGdCQUFnQnZPLFVBQVU4QyxPQUFTLFdBRS9CLElBREEsSUFBSTZMLElBQU0sR0FDRDNCLEdBQUssRUFBR0EsR0FBSzVPLFVBQVVDLE9BQVEyTyxLQUNwQzJCLElBQUkzQixJQUFNNU8sVUFBVTRPLElBRXhCLE9BQU93QixPQUFPeE8sVUFBVThDLE9BQU9xQyxNQUFNbkIsS0FBTTJLLElBQy9DLEVBQ0FKLGdCQUFnQnZPLFVBQVU0TyxRQUFVLFdBRWhDLElBREEsSUFBSUQsSUFBTSxHQUNEM0IsR0FBSyxFQUFHQSxHQUFLNU8sVUFBVUMsT0FBUTJPLEtBQ3BDMkIsSUFBSTNCLElBQU01TyxVQUFVNE8sSUFFeEIsT0FBbUIsSUFBZjJCLElBQUl0USxRQUFnQkUsTUFBTWMsUUFBUXNQLElBQUksSUFDL0IsSUFBS0osZ0JBQWdCbEksS0FBS2xCLE1BQU1vSixnQkFBaUJ0QyxjQUFjLE1BQUMsR0FBUzBDLElBQUksR0FBRzdMLE9BQU9rQixTQUUzRixJQUFLdUssZ0JBQWdCbEksS0FBS2xCLE1BQU1vSixnQkFBaUJ0QyxjQUFjLE1BQUMsR0FBUzBDLElBQUk3TCxPQUFPa0IsUUFDL0YsRUFDT3VLLGVBQ1gsQ0FwQ29DLENBb0NsQ2hRLE9BQ0YsU0FBU3NRLGdCQUFnQkMsS0FDckIsT0FBTyxFQUFZQSxLQUFPLFVBQWdCQSxLQUFLLFdBQy9DLElBQUtBLEdBQ1QsQ0FxQ0EsU0FBU0MsbUJBQW1CN04sT0FDeEIsTUFBd0IsaUJBQVZBLE9BQStCLE1BQVRBLE9BQWlCckMsT0FBTzZDLFNBQVNSLE1BQ3pFLENBc0VBLFNBQVM4Tix3Q0FBd0NDLFNBR3pDLFlBRlksSUFBWkEsVUFBc0JBLFFBQVUsQ0FBQyxHQUUxQixXQUFjLE9BQU8sU0FBVTVILE1BQVEsT0FBTyxTQUFVeUQsUUFBVSxPQUFPekQsS0FBS3lELE9BQVMsQ0FBRyxDQUFHLENBNkI1RyxDQUVBLFNBQVNvRSxRQUFRSixLQUNiLElBQUlLLFlBQWNMLElBQ2xCLE9BQWMsTUFBUEEsS0FBd0IsV0FBVEssTUFBOEIsWUFBVEEsTUFBK0IsV0FBVEEsTUFBcUI1USxNQUFNYyxRQUFReVAsTUFBUVYsY0FBY1UsSUFDOUgsQ0FDQSxTQUFTTSx5QkFBeUJsTyxNQUFPOEUsS0FBTXFKLGVBQWdCekgsV0FBWTBILGFBQWNoSSxPQUlyRixJQUFJaUksd0JBQ0osUUFKYSxJQUFUdkosT0FBbUJBLEtBQU8sU0FDUCxJQUFuQnFKLGlCQUE2QkEsZUFBaUJILGNBQzdCLElBQWpCSSxlQUEyQkEsYUFBZSxLQUV6Q0QsZUFBZW5PLE9BQ2hCLE1BQU8sQ0FDSHNPLFFBQVN4SixNQUFRLFNBQ2pCOUUsT0FHUixHQUFxQixpQkFBVkEsT0FBZ0MsT0FBVkEsTUFDN0IsT0FBTyxFQUVYLEdBQWEsTUFBVG9HLFdBQWdCLEVBQVNBLE1BQU12SCxJQUFJbUIsT0FDbkMsT0FBTyxFQTZCWCxJQTVCQSxJQUFJNkcsUUFBd0IsTUFBZEgsV0FBcUJBLFdBQVcxRyxPQUFTckMsT0FBT2tKLFFBQVE3RyxPQUNsRXVPLGdCQUFrQkgsYUFBYWpSLE9BQVMsRUFDeENxUixRQUFVLFNBQVVoSSxJQUFLaUksYUFDekIsSUFBSUMsV0FBYTVKLEtBQU9BLEtBQU8sSUFBTTBCLElBQU1BLElBQzNDLEdBQUkrSCxpQkFDaUJILGFBQWFPLE1BQUssU0FBVUMsU0FDekMsT0FBSUEsbUJBQW1CQyxPQUNaRCxRQUFRRSxLQUFLSixZQUVqQkEsYUFBZUUsT0FDMUIsSUFFSSxNQUFPLFdBR2YsT0FBS1QsZUFBZU0sYUFNTyxpQkFBaEJBLGNBQ1BKLHdCQUEwQkgseUJBQXlCTyxZQUFhQyxXQUFZUCxlQUFnQnpILFdBQVkwSCxhQUFjaEksUUFFM0csQ0FBRXBHLE1BQU9xTyw4QkFIeEIsRUFMVyxDQUFFck8sTUFBTyxDQUNSc08sUUFBU0ksV0FDVDFPLE1BQU95TyxhQVN2QixFQUNTM0MsR0FBSyxFQUFHaUQsVUFBWWxJLFFBQVNpRixHQUFLaUQsVUFBVTVSLE9BQVEyTyxLQUFNLENBQy9ELElBQUlDLEdBQUtnRCxVQUFVakQsSUFDZmtELFFBQVVSLFFBRGdCekMsR0FBRyxHQUFrQkEsR0FBRyxJQUV0RCxHQUF1QixpQkFBWmlELFFBQ1AsT0FBT0EsUUFBUWhQLEtBQ3ZCLENBR0EsT0FGSW9HLE9BQVM2SSxlQUFlalAsUUFDeEJvRyxNQUFNakgsSUFBSWEsUUFDUCxDQUNYLENBQ0EsU0FBU2lQLGVBQWVqUCxPQUNwQixJQUFLckMsT0FBTzZDLFNBQVNSLE9BQ2pCLE9BQU8sRUFDWCxJQUFLLElBQUk4TCxHQUFLLEVBQUdDLEdBQUtwTyxPQUFPdVIsT0FBT2xQLE9BQVE4TCxHQUFLQyxHQUFHNU8sT0FBUTJPLEtBQU0sQ0FDOUQsSUFBSTJDLFlBQWMxQyxHQUFHRCxJQUNyQixHQUEyQixpQkFBaEIyQyxhQUE0QyxPQUFoQkEsY0FFbENRLGVBQWVSLGFBQ2hCLE9BQU8sQ0FDZixDQUNBLE9BQU8sQ0FDWCxDQUNBLFNBQVNVLDJDQUEyQ3BCLFNBRzVDLFlBRlksSUFBWkEsVUFBc0JBLFFBQVUsQ0FBQyxHQUUxQixXQUFjLE9BQU8sU0FBVTVILE1BQVEsT0FBTyxTQUFVeUQsUUFBVSxPQUFPekQsS0FBS3lELE9BQVMsQ0FBRyxDQUFHLENBNkI1RyxDQVVBLFNBQVN3RixxQkFBcUJyQixjQUNWLElBQVpBLFVBQXNCQSxRQUFVLENBQUMsR0FDckMsSUFBSWhDLEdBQUtnQyxRQUFRbEUsTUFBT0EsV0FBZSxJQUFQa0MsSUFBdUJBLEdBQ25Ec0QsaUJBRDREdEIsUUFBUXVCLGVBQWlFdkIsUUFBUXdCLGtCQUMzSCxJQUFJbEMsaUJBeUIxQixPQXhCSXhELFNBWlIsU0FBUzJGLFVBQVVuTyxHQUNmLE1BQW9CLGtCQUFOQSxDQUNsQixDQVdZbU8sQ0FBVTNGLE9BSVZ3RixnQkFBZ0IxTSxLQUFLLEdBQWdCbUgsa0JBQWtCRCxNQUFNTixnQkFIN0Q4RixnQkFBZ0IxTSxLQUFLLEtBc0J0QjBNLGVBQ1gsQ0FFQSxJQUFJSSxlQUFnQixFQUNwQixTQUFTQyxlQUFlM0IsU0FDcEIsSUFFSTRCLFlBRkFDLDRCQXRDUixTQUFTQyw0QkFDTCxPQUFPLFNBQVNELDRCQUE0QjdCLFNBQ3hDLE9BQU9xQixxQkFBcUJyQixRQUNoQyxDQUNKLENBa0NzQzhCLEdBQzlCOUQsR0FBS2dDLFNBQVcsQ0FBQyxFQUFHK0IsR0FBSy9ELEdBQUdnRSxRQUFTQSxhQUFpQixJQUFQRCxRQUFnQixFQUFTQSxHQUFJRSxHQUFLakUsR0FBR3ZDLFdBQVlBLGdCQUFvQixJQUFQd0csR0FBZ0JKLDhCQUFnQ0ksR0FBSUMsR0FBS2xFLEdBQUdtRSxTQUFVQSxjQUFrQixJQUFQRCxJQUF1QkEsR0FBSUUsR0FBS3BFLEdBQUdxRSxlQUFnQkEsb0JBQXdCLElBQVBELFFBQWdCLEVBQVNBLEdBQUlFLEdBQUt0RSxHQUFHdUUsVUFBV0EsZUFBbUIsSUFBUEQsUUFBZ0IsRUFBU0EsR0FFM1YsR0FBdUIsbUJBQVpOLFFBQ1BKLFlBQWNJLFlBRWIsS0FBSTdDLGNBQWM2QyxTQUluQixNQUFNLElBQUl4UyxNQUFNLDRIQUhoQm9TLGFBQWMsUUFBQVksaUJBQWdCUixRQUlsQyxDQUNBLElBQUlTLGdCQUFrQmhILFdBQ3RCLEdBQStCLG1CQUFwQmdILGtCQUNQQSxnQkFBa0JBLGdCQUFnQlosOEJBQzdCSCxnQkFBa0JwUyxNQUFNYyxRQUFRcVMsa0JBQ2pDLE1BQU0sSUFBSWpULE1BQU0scUZBR3hCLElBQUtrUyxlQUFpQmUsZ0JBQWdCN0IsTUFBSyxTQUFVOEIsTUFBUSxNQUF1QixtQkFBVEEsSUFBcUIsSUFDNUYsTUFBTSxJQUFJbFQsTUFBTSxpRUFFcEIsSUFBSW1ULG1CQUFxQixNQUFBQyxnQkFBZ0IxTSxXQUFNLEVBQVF1TSxpQkFDbkRJLGFBQWUsTUFBQTVELFFBQ2ZrRCxXQUNBVSxhQUFlL0Qsb0JBQW9CakIsZUFBZSxDQUM5Q2lGLE9BQVFwQixlQUNXLGlCQUFiUyxVQUF5QkEsWUFFdkMsSUFBSVksZUFBaUIsQ0FBQ0osb0JBQ2xCclQsTUFBTWMsUUFBUW1TLFdBQ2RRLGVBQWlCL0YsY0FBYyxDQUFDMkYsb0JBQXFCSixXQUUzQixtQkFBZEEsWUFDWlEsZUFBaUJSLFVBQVVRLGlCQUUvQixJQUFJQyxpQkFBbUJILGFBQWEzTSxXQUFNLEVBQVE2TSxnQkFDbEQsT0FBTyxRQUFBRSxhQUFZckIsWUFBYVMsZUFBZ0JXLGlCQUNwRCxDQUVBLFNBQVNFLGFBQWFoRCxLQUFNaUQsZUFDeEIsU0FBU0MsZ0JBRUwsSUFEQSxJQUFJeEUsS0FBTyxHQUNGYixHQUFLLEVBQUdBLEdBQUs1TyxVQUFVQyxPQUFRMk8sS0FDcENhLEtBQUtiLElBQU01TyxVQUFVNE8sSUFFekIsR0FBSW9GLGNBQWUsQ0FDZixJQUFJRSxTQUFXRixjQUFjak4sV0FBTSxFQUFRMEksTUFDM0MsSUFBS3lFLFNBQ0QsTUFBTSxJQUFJN1QsTUFBTSwwQ0FFcEIsT0FBT3FPLGVBQWVBLGVBQWUsQ0FDakNxQyxLQUNBb0QsUUFBU0QsU0FBU0MsU0FDbkIsU0FBVUQsVUFBWSxDQUFFRSxLQUFNRixTQUFTRSxPQUFTLFVBQVdGLFVBQVksQ0FBRUcsTUFBT0gsU0FBU0csT0FDaEcsQ0FDQSxNQUFPLENBQUV0RCxLQUFZb0QsUUFBUzFFLEtBQUssR0FDdkMsQ0FJQSxPQUhBd0UsY0FBY2xULFNBQVcsV0FBYyxNQUFPLEdBQUtnUSxJQUFNLEVBQ3pEa0QsY0FBY2xELEtBQU9BLEtBQ3JCa0QsY0FBY0ssTUFBUSxTQUFVNUgsUUFBVSxPQUFPQSxPQUFPcUUsT0FBU0EsSUFBTSxFQUNoRWtELGFBQ1gsQ0FJQSxTQUFTTSxXQUFXakwsS0FDaEIsTUFBTyxDQUFDLE9BQVEsVUFBVyxRQUFTLFFBQVFrTCxRQUFRbEwsTUFBUSxDQUNoRSxDQUNBLFNBQVNtTCxRQUFRUixlQUNiLE1BQU8sR0FBS0EsYUFDaEIsQ0FJQSxTQUFTUyw4QkFBOEJDLGlCQUNuQyxJQUVJQyxtQkFGQUMsV0FBYSxDQUFDLEVBQ2RDLGVBQWlCLEdBRWpCQyxRQUFVLENBQ1ZDLFFBQVMsU0FBVUMsb0JBQXFCcEMsU0FTcEMsSUFBSTlCLEtBQXNDLGlCQUF4QmtFLG9CQUFtQ0Esb0JBQXNCQSxvQkFBb0JsRSxLQUMvRixHQUFJQSxRQUFROEQsV0FDUixNQUFNLElBQUl4VSxNQUFNLHVFQUdwQixPQURBd1UsV0FBVzlELE1BQVE4QixRQUNaa0MsT0FDWCxFQUNBRyxXQUFZLFNBQVVDLFFBQVN0QyxTQU8zQixPQURBaUMsZUFBZXJQLEtBQUssQ0FBRTBQLFFBQWtCdEMsVUFDakNrQyxPQUNYLEVBQ0FLLGVBQWdCLFNBQVV2QyxTQU90QixPQURBK0IsbUJBQXFCL0IsUUFDZGtDLE9BQ1gsR0FHSixPQURBSixnQkFBZ0JJLFNBQ1QsQ0FBQ0YsV0FBWUMsZUFBZ0JGLG1CQUN4QyxDQU1BLFNBQVNTLGNBQWNDLGFBQWNDLHFCQUFzQlQsZUFBZ0JGLHlCQUNoRCxJQUFuQkUsaUJBQTZCQSxlQUFpQixJQVNsRCxJQUNJVSxnQkFEQTNHLEdBQXFDLG1CQUF6QjBHLHFCQUFzQ2IsOEJBQThCYSxzQkFBd0IsQ0FBQ0EscUJBQXNCVCxlQUFnQkYsb0JBQXFCQyxXQUFhaEcsR0FBRyxHQUFJNEcsb0JBQXNCNUcsR0FBRyxHQUFJNkcsd0JBQTBCN0csR0FBRyxHQUV0UCxHQWhCSixTQUFTOEcsZ0JBQWdCeFIsR0FDckIsTUFBb0IsbUJBQU5BLENBQ2xCLENBY1F3UixDQUFnQkwsY0FDaEJFLGdCQUFrQixXQUFjLE9BQU8vRSxnQkFBZ0I2RSxlQUFpQixNQUV2RSxDQUNELElBQUlNLHFCQUF1Qm5GLGdCQUFnQjZFLGNBQzNDRSxnQkFBa0IsV0FBYyxPQUFPSSxvQkFBc0IsQ0FDakUsQ0FDQSxTQUFTL0MsUUFBUWdELE1BQU9uSixhQUNOLElBQVZtSixRQUFvQkEsTUFBUUwsbUJBQ2hDLElBQUlNLGFBQWVqSSxjQUFjLENBQzdCZ0gsV0FBV25JLE9BQU9xRSxPQUNuQjBFLG9CQUFvQk0sUUFBTyxTQUFVbEgsSUFFcEMsT0FBT3NHLEVBRE90RyxHQUFHc0csU0FDRnpJLE9BQ25CLElBQUdwTSxLQUFJLFNBQVV1TyxJQUViLE9BRGVBLEdBQUdnRSxPQUV0QixLQUlBLE9BSG1FLElBQS9EaUQsYUFBYUMsUUFBTyxTQUFVQyxJQUFNLFFBQVNBLEVBQUksSUFBRy9WLFNBQ3BENlYsYUFBZSxDQUFDSiwwQkFFYkksYUFBYUcsUUFBTyxTQUFVQyxjQUFlQyxhQUNoRCxHQUFJQSxZQUFhLENBRVQsSUFRSUMsT0FUUixHQUFJLEVBQVNGLGVBR1QsWUFBZSxLQURYRSxPQUFTRCxZQURERCxjQUNvQnhKLFNBRXJCd0osY0FFSkUsT0FFTixHQUFLLEVBQWFGLGVBV25CLE9BQU8sVUFBaUJBLGVBQWUsU0FBVUcsT0FDN0MsT0FBT0YsWUFBWUUsTUFBTzNKLE9BQzlCLElBWEEsUUFBZSxLQURYMEosT0FBU0QsWUFBWUQsY0FBZXhKLFNBQ2pCLENBQ25CLEdBQXNCLE9BQWxCd0osY0FDQSxPQUFPQSxjQUVYLE1BQU03VixNQUFNLG9FQUNoQixDQUNBLE9BQU8rVixNQU9mLENBQ0EsT0FBT0YsYUFDWCxHQUFHTCxNQUNQLENBRUEsT0FEQWhELFFBQVEyQyxnQkFBa0JBLGdCQUNuQjNDLE9BQ1gsQ0FNQSxTQUFTeUQsWUFBWXpGLFNBQ2pCLElBQUluRixLQUFPbUYsUUFBUW5GLEtBQ25CLElBQUtBLEtBQ0QsTUFBTSxJQUFJckwsTUFBTSwrQ0FPcEIsSUE4Q0lrVyxTQTlDQWpCLGFBQThDLG1CQUF4QnpFLFFBQVF5RSxhQUE2QnpFLFFBQVF5RSxhQUFlN0UsZ0JBQWdCSSxRQUFReUUsY0FDMUdrQixTQUFXM0YsUUFBUTJGLFVBQVksQ0FBQyxFQUNoQ0MsYUFBZWhXLE9BQU9jLEtBQUtpVixVQUMzQkUsd0JBQTBCLENBQUMsRUFDM0JDLHdCQUEwQixDQUFDLEVBQzNCQyxlQUFpQixDQUFDLEVBaUJ0QixTQUFTQyxlQVNMLElBQUloSSxHQUFzQyxtQkFBMUJnQyxRQUFRaUcsY0FBK0JwQyw4QkFBOEI3RCxRQUFRaUcsZUFBaUIsQ0FBQ2pHLFFBQVFpRyxlQUFnQmxFLEdBQUsvRCxHQUFHLEdBQUlpSSxtQkFBdUIsSUFBUGxFLEdBQWdCLENBQUMsRUFBSUEsR0FBSUUsR0FBS2pFLEdBQUcsR0FBSWlHLG9CQUF3QixJQUFQaEMsR0FBZ0IsR0FBS0EsR0FBSUMsR0FBS2xFLEdBQUcsR0FBSStGLHdCQUE0QixJQUFQN0IsUUFBZ0IsRUFBU0EsR0FDeFNnRSxrQkFBb0JySSxlQUFlQSxlQUFlLENBQUMsRUFBR29JLGVBQWdCSCx5QkFDMUUsT0FBT3RCLGNBQWNDLGNBQWMsU0FBVVAsU0FDekMsSUFBSyxJQUFJekwsT0FBT3lOLGtCQUNaaEMsUUFBUUMsUUFBUTFMLElBQUt5TixrQkFBa0J6TixNQUUzQyxJQUFLLElBQUlzRixHQUFLLEVBQUdvSSxpQkFBbUJsQyxlQUFnQmxHLEdBQUtvSSxpQkFBaUIvVyxPQUFRMk8sS0FBTSxDQUNwRixJQUFJbkwsRUFBSXVULGlCQUFpQnBJLElBQ3pCbUcsUUFBUUcsV0FBV3pSLEVBQUUwUixRQUFTMVIsRUFBRW9QLFFBQ3BDLENBQ0krQixvQkFDQUcsUUFBUUssZUFBZVIsbUJBRS9CLEdBQ0osQ0FFQSxPQXpDQTZCLGFBQWFoVixTQUFRLFNBQVV3VixhQUMzQixJQUVJZCxZQUNBZSxnQkFIQUMsd0JBQTBCWCxTQUFTUyxhQUNuQ2xHLEtBckJaLFNBQVNxRyxTQUFTM1UsTUFBTzRVLFdBQ3JCLE9BQU81VSxNQUFRLElBQU00VSxTQUN6QixDQW1CbUJELENBQVMxTCxLQUFNdUwsYUFHdEIsWUFBYUUseUJBQ2JoQixZQUFjZ0Isd0JBQXdCdEUsUUFDdENxRSxnQkFBa0JDLHdCQUF3QkcsU0FHMUNuQixZQUFjZ0Isd0JBRWxCVCx3QkFBd0JPLGFBQWVkLFlBQ3ZDUSx3QkFBd0I1RixNQUFRb0YsWUFDaENTLGVBQWVLLGFBQWVDLGdCQUFrQm5ELGFBQWFoRCxLQUFNbUcsaUJBQW1CbkQsYUFBYWhELEtBQ3ZHLElBMEJPLENBQ0hyRixLQUNBbUgsUUFBUyxTQUFVZ0QsTUFBT25KLFFBR3RCLE9BRks2SixXQUNEQSxTQUFXTSxnQkFDUk4sU0FBU1YsTUFBT25KLE9BQzNCLEVBQ0E2SyxRQUFTWCxlQUNUZCxhQUFjWSx3QkFDZGxCLGdCQUFpQixXQUdiLE9BRktlLFdBQ0RBLFNBQVdNLGdCQUNSTixTQUFTZixpQkFDcEIsRUFFUixDQW9EQSxTQUFTZ0Msb0JBQW9CQyxTQUN6QixPQUFPLFNBQVNDLFVBQVU3QixNQUFPOEIsS0FDN0IsU0FBU0Msd0JBQXdCQyxNQUM3QixPQWpRWixTQUFTQyxNQUFNcEwsUUFDWCxPQUFPc0QsY0FBY3RELFNBQWtDLGlCQUFoQkEsT0FBT3FFLE1BQXFCdFEsT0FBT2MsS0FBS21MLFFBQVFuQixNQUFNZ0osV0FDakcsQ0ErUG1CdUQsQ0FBTUQsS0FDakIsQ0FDQSxJQUFJRSxXQUFhLFNBQVUxQixPQUNuQnVCLHdCQUF3QkQsS0FDeEJGLFFBQVFFLElBQUl4RCxRQUFTa0MsT0FHckJvQixRQUFRRSxJQUFLdEIsTUFFckIsRUFDQSxPQUFJLEVBQVNSLFFBQ1RrQyxXQUFXbEMsT0FDSkEsT0FHQSxVQUFpQkEsTUFBT2tDLFdBRXZDLENBQ0osQ0FFQSxTQUFTQyxjQUFjQyxPQUFRQyxVQUszQixPQUpVQSxTQUFTRCxPQUt2QixDQUNBLFNBQVNFLG9CQUFvQkMsVUFJekIsT0FIS2pZLE1BQU1jLFFBQVFtWCxZQUNmQSxTQUFXM1gsT0FBT3VSLE9BQU9vRyxXQUV0QkEsUUFDWCxDQUNBLFNBQVNDLDBCQUEwQkMsWUFBYUosU0FBVXJDLE9BSXRELElBRkEsSUFBSTBDLE1BQVEsR0FDUkMsUUFBVSxHQUNMNUosR0FBSyxFQUFHNkosY0FIakJILFlBQWNILG9CQUFvQkcsYUFHWTFKLEdBQUs2SixjQUFjeFksT0FBUTJPLEtBQU0sQ0FDM0UsSUFBSXFKLE9BQVNRLGNBQWM3SixJQUN2QjhKLEdBQUtWLGNBQWNDLE9BQVFDLFVBQzNCUSxNQUFNN0MsTUFBTXVDLFNBQ1pJLFFBQVEvUyxLQUFLLENBQUVpVCxHQUFRQyxRQUFTVixTQUdoQ00sTUFBTTlTLEtBQUt3UyxPQUVuQixDQUNBLE1BQU8sQ0FBQ00sTUFBT0MsUUFDbkIsQ0FFQSxTQUFTSSwyQkFBMkJWLFVBQ2hDLFNBQVNXLGNBQWNaLE9BQVFwQyxPQUMzQixJQUFJdk0sSUFBTTBPLGNBQWNDLE9BQVFDLFVBQzVCNU8sT0FBT3VNLE1BQU11QyxXQUdqQnZDLE1BQU1pRCxJQUFJclQsS0FBSzZELEtBQ2Z1TSxNQUFNdUMsU0FBUzlPLEtBQU8yTyxPQUMxQixDQUNBLFNBQVNjLGVBQWVULFlBQWF6QyxPQUVqQyxJQUFLLElBQUlqSCxHQUFLLEVBQUdvSyxjQURqQlYsWUFBY0gsb0JBQW9CRyxhQUNZMUosR0FBS29LLGNBQWMvWSxPQUFRMk8sS0FBTSxDQUUzRWlLLGNBRGFHLGNBQWNwSyxJQUNMaUgsTUFDMUIsQ0FDSixDQUNBLFNBQVNvRCxjQUFjaEIsT0FBUXBDLE9BQzNCLElBQUl2TSxJQUFNME8sY0FBY0MsT0FBUUMsVUFDMUI1TyxPQUFPdU0sTUFBTXVDLFVBQ2Z2QyxNQUFNaUQsSUFBSXJULEtBQUs2RCxLQUVuQnVNLE1BQU11QyxTQUFTOU8sS0FBTzJPLE1BQzFCLENBaUJBLFNBQVNpQixrQkFBa0IzWCxLQUFNc1UsT0FDN0IsSUFBSXNELFdBQVksRUFDaEI1WCxLQUFLRSxTQUFRLFNBQVU2SCxLQUNmQSxPQUFPdU0sTUFBTXVDLGtCQUNOdkMsTUFBTXVDLFNBQVM5TyxLQUN0QjZQLFdBQVksRUFFcEIsSUFDSUEsWUFDQXRELE1BQU1pRCxJQUFNakQsTUFBTWlELElBQUkvQyxRQUFPLFNBQVUyQyxJQUFNLE9BQU9BLE1BQU03QyxNQUFNdUMsUUFBVSxJQUVsRixDQXNCQSxTQUFTZ0Isa0JBQWtCQyxRQUFTeEQsT0FDaEMsSUFBSXlELFFBQVUsQ0FBQyxFQUNYQyxpQkFBbUIsQ0FBQyxFQVd4QixHQVZBRixRQUFRNVgsU0FBUSxTQUFVK1gsUUFDbEJBLE9BQU9kLE1BQU03QyxNQUFNdUMsV0FDbkJtQixpQkFBaUJDLE9BQU9kLElBQU0sQ0FDMUJBLEdBQUljLE9BQU9kLEdBQ1hDLFFBQVNqSyxlQUFlQSxlQUFlLENBQUMsRUFBRzZLLGlCQUFpQkMsT0FBT2QsSUFBTWEsaUJBQWlCQyxPQUFPZCxJQUFJQyxRQUFVLE1BQU9hLE9BQU9iLFVBR3pJLEtBQ0FVLFFBQVU1WSxPQUFPdVIsT0FBT3VILG1CQUNRdFosT0FBUyxFQUNsQixDQUNuQixJQUFJd1osYUFBZUosUUFBUXRELFFBQU8sU0FBVXlELFFBQVUsT0E3QjlELFNBQVNFLFdBQVduWSxLQUFNaVksT0FBUTNELE9BQzlCLElBQUk4RCxVQUFZOUQsTUFBTXVDLFNBQVNvQixPQUFPZCxJQUNsQ0YsUUFBVS9YLE9BQU91TCxPQUFPLENBQUMsRUFBRzJOLFVBQVdILE9BQU9iLFNBQzlDaUIsT0FBUzVCLGNBQWNRLFFBQVNOLFVBQ2hDMkIsVUFBWUQsU0FBV0osT0FBT2QsR0FNbEMsT0FMSW1CLFlBQ0F0WSxLQUFLaVksT0FBT2QsSUFBTWtCLGNBQ1gvRCxNQUFNdUMsU0FBU29CLE9BQU9kLEtBRWpDN0MsTUFBTXVDLFNBQVN3QixRQUFVcEIsUUFDbEJxQixTQUNYLENBa0JxRUgsQ0FBV0osUUFBU0UsT0FBUTNELE1BQVEsSUFBRzVWLE9BQVMsRUFDekd3WixlQUNBNUQsTUFBTWlELElBQU1yWSxPQUFPYyxLQUFLc1UsTUFBTXVDLFVBRXRDLENBQ0osQ0FJQSxTQUFTMEIsa0JBQWtCeEIsWUFBYXpDLE9BQ3BDLElBQUloSCxHQUFLd0osMEJBQTBCQyxZQUFhSixTQUFVckMsT0FBUTBDLE1BQVExSixHQUFHLEdBQzdFdUssa0JBRDJGdkssR0FBRyxHQUNuRWdILE9BQzNCa0QsZUFBZVIsTUFBTzFDLE1BQzFCLENBQ0EsTUFBTyxDQUNIa0UsV0FoS21DdEMsUUE4R3ZDLFNBQVN1QyxpQkFBaUJuRSxPQUN0QnBWLE9BQU91TCxPQUFPNkosTUFBTyxDQUNqQmlELElBQUssR0FDTFYsU0FBVSxDQUFDLEdBRW5CLEVBbEhJNkIsU0FBV3pDLHFCQUFvQixTQUFVOVQsRUFBR21TLE9BQVMsT0FBTzRCLFFBQVE1QixNQUFRLElBQ3pFLFNBQVM2QixVQUFVN0IsT0FDdEIsT0FBT29FLFNBQVNwRSxXQUFPLEVBQzNCLEdBNkpJcUUsT0FBUTFDLG9CQUFvQnFCLGVBQzVCc0IsUUFBUzNDLG9CQUFvQnVCLGdCQUM3QnFCLE9BQVE1QyxvQkFBb0J5QixlQUM1Qm9CLFFBQVM3QyxxQkFsRmIsU0FBUzhDLGVBQWVoQyxZQUFhekMsT0FFakMsSUFBSyxJQUFJakgsR0FBSyxFQUFHMkwsY0FEakJqQyxZQUFjSCxvQkFBb0JHLGFBQ1kxSixHQUFLMkwsY0FBY3RhLE9BQVEyTyxLQUFNLENBRTNFcUssY0FEYXNCLGNBQWMzTCxJQUNMaUgsTUFDMUIsQ0FDSixJQTZFSTJFLE9BQVFoRCxxQkE1RVosU0FBU2lELGNBQWNuQyxZQUFhekMsT0FDaEN5QyxZQUFjSCxvQkFBb0JHLGFBQ2xDekMsTUFBTWlELElBQU0sR0FDWmpELE1BQU11QyxTQUFXLENBQUMsRUFDbEJXLGVBQWVULFlBQWF6QyxNQUNoQyxJQXdFSTZFLFVBQVdsRCxxQkF0Q2YsU0FBU21ELGlCQUFpQm5CLE9BQVEzRCxPQUM5QixPQUFPdUQsa0JBQWtCLENBQUNJLFFBQVMzRCxNQUN2QyxJQXFDSStFLFdBQVlwRCxvQkFBb0I0QixtQkFDaEN5QixVQUFXckQscUJBakJmLFNBQVNzRCxpQkFBaUI3QyxPQUFRcEMsT0FDOUIsT0FBT2lFLGtCQUFrQixDQUFDN0IsUUFBU3BDLE1BQ3ZDLElBZ0JJa0YsV0FBWXZELG9CQUFvQnNDLG1CQUNoQ2tCLFVBQVd4RCxxQkEzRWYsU0FBU3lELGlCQUFpQjNSLElBQUt1TSxPQUMzQixPQUFPcUQsa0JBQWtCLENBQUM1UCxLQUFNdU0sTUFDcEMsSUEwRUlxRixXQUFZMUQsb0JBQW9CMEIsb0JBM0t4QyxJQUEyQ3pCLFFBQ25Dd0MsUUE0S1IsQ0F1R0EsU0FBU2tCLG9CQUFvQnRLLGNBQ1QsSUFBWkEsVUFBc0JBLFFBQVUsQ0FBQyxHQUNyQyxJQUFJaEMsR0FBS0gsZUFBZSxDQUNwQjBNLGNBQWMsRUFDZGxELFNBQVUsU0FBVW1ELFVBQVksT0FBT0EsU0FBUzNDLEVBQUksR0FDckQ3SCxTQUFVcUgsU0FBV3JKLEdBQUdxSixTQUFVa0QsYUFBZXZNLEdBQUd1TSxhQUNuREUsYUFoVVIsU0FBU0MsNEJBS0wsTUFBTyxDQUFFL0YsZ0JBSlQsU0FBU0EsZ0JBQWdCZ0csaUJBRXJCLFlBRHdCLElBQXBCQSxrQkFBOEJBLGdCQUFrQixDQUFDLEdBQzlDL2EsT0FBT3VMLE9BUlgsQ0FDSDhNLElBQUssR0FDTFYsU0FBVSxDQUFDLEdBTW1Db0QsZ0JBQ2xELEVBRUosQ0EwVHVCRCxHQUNmRSxpQkF6VFIsU0FBU0MseUJBMEJMLE1BQU8sQ0FBRUMsYUF6QlQsU0FBU0EsYUFBYUMsYUFDbEIsSUFBSUMsVUFBWSxTQUFVaEcsT0FBUyxPQUFPQSxNQUFNaUQsR0FBSyxFQUNqRGdELGVBQWlCLFNBQVVqRyxPQUFTLE9BQU9BLE1BQU11QyxRQUFVLEVBQzNEMkQsVUFBWXZNLHdCQUF3QnFNLFVBQVdDLGdCQUFnQixTQUFVaEQsSUFBS1YsVUFBWSxPQUFPVSxJQUFJeFksS0FBSSxTQUFVb1ksSUFBTSxPQUFPTixTQUFTTSxHQUFLLEdBQUksSUFDbEpSLFNBQVcsU0FBVXhVLEVBQUdnVixJQUFNLE9BQU9BLEVBQUksRUFDekNzRCxXQUFhLFNBQVU1RCxTQUFVTSxJQUFNLE9BQU9OLFNBQVNNLEdBQUssRUFDNUR1RCxZQUFjek0sd0JBQXdCcU0sV0FBVyxTQUFVL0MsS0FBTyxPQUFPQSxJQUFJN1ksTUFBUSxJQUN6RixJQUFLMmIsWUFDRCxNQUFPLENBQ0hDLFVBQ0FDLGVBQ0FDLFVBQ0FFLFlBQ0FELFdBQVl4TSx3QkFBd0JzTSxlQUFnQjVELFNBQVU4RCxhQUd0RSxJQUFJRSx5QkFBMkIxTSx3QkFBd0JvTSxZQUFhRSxnQkFDcEUsTUFBTyxDQUNIRCxVQUFXck0sd0JBQXdCb00sWUFBYUMsV0FDaERDLGVBQWdCSSx5QkFDaEJILFVBQVd2TSx3QkFBd0JvTSxZQUFhRyxXQUNoREUsWUFBYXpNLHdCQUF3Qm9NLFlBQWFLLGFBQ2xERCxXQUFZeE0sd0JBQXdCME0seUJBQTBCaEUsU0FBVThELFlBRWhGLEVBRUosQ0E4UjJCTixHQUNuQlMsYUFBZWYsYUE3R3ZCLFNBQVNnQix5QkFBeUJsRSxTQUFVbUUsTUFDeEMsSUFBSXhOLEdBQUsrSiwyQkFBMkJWLFVBSXBDLFNBQVNhLGVBQWVULFlBQWF6QyxPQUVqQyxJQUFJeUcsUUFESmhFLFlBQWNILG9CQUFvQkcsY0FDVHZDLFFBQU8sU0FBVXdHLE9BQVMsUUFBU3ZFLGNBQWN1RSxNQUFPckUsWUFBYXJDLE1BQU11QyxTQUFXLElBQ3pGLElBQWxCa0UsT0FBT3JjLFFBQ1B1YyxNQUFNRixPQUFRekcsTUFFdEIsQ0FJQSxTQUFTeUUsZUFBZWhDLFlBQWF6QyxPQUVOLEtBRDNCeUMsWUFBY0gsb0JBQW9CRyxjQUNsQnJZLFFBQ1p1YyxNQUFNbEUsWUFBYXpDLE1BRTNCLENBVUEsU0FBU3VELGtCQUFrQkMsUUFBU3hELE9BRWhDLElBREEsSUFBSTRHLGdCQUFpQixFQUNaN04sR0FBSyxFQUFHOE4sVUFBWXJELFFBQVN6SyxHQUFLOE4sVUFBVXpjLE9BQVEyTyxLQUFNLENBQy9ELElBQUk0SyxPQUFTa0QsVUFBVTlOLElBQ25CcUosT0FBU3BDLE1BQU11QyxTQUFTb0IsT0FBT2QsSUFDbkMsR0FBS1QsT0FBTCxDQUdBd0UsZ0JBQWlCLEVBQ2pCaGMsT0FBT3VMLE9BQU9pTSxPQUFRdUIsT0FBT2IsU0FDN0IsSUFBSWdFLE1BQVF6RSxTQUFTRCxRQUNqQnVCLE9BQU9kLEtBQU9pRSxlQUNQOUcsTUFBTXVDLFNBQVNvQixPQUFPZCxJQUM3QjdDLE1BQU11QyxTQUFTdUUsT0FBUzFFLE9BTjVCLENBUUosQ0FDSXdFLGdCQUNBRyxlQUFlL0csTUFFdkIsQ0FJQSxTQUFTaUUsa0JBQWtCeEIsWUFBYXpDLE9BQ3BDLElBQUloSCxHQUFLd0osMEJBQTBCQyxZQUFhSixTQUFVckMsT0FBUTBDLE1BQVExSixHQUFHLEdBQzdFdUssa0JBRDJGdkssR0FBRyxHQUNuRWdILE9BQzNCa0QsZUFBZVIsTUFBTzFDLE1BQzFCLENBYUEsU0FBUzJHLE1BQU1GLE9BQVF6RyxPQUNuQnlHLE9BQU83YSxTQUFRLFNBQVU4YSxPQUNyQjFHLE1BQU11QyxTQUFTRixTQUFTcUUsUUFBVUEsS0FDdEMsSUFDQUssZUFBZS9HLE1BQ25CLENBQ0EsU0FBUytHLGVBQWUvRyxPQUNwQixJQUFJZ0gsWUFBY3BjLE9BQU91UixPQUFPNkQsTUFBTXVDLFVBQ3RDeUUsWUFBWVIsS0FBS0EsTUFDakIsSUFBSVMsYUFBZUQsWUFBWXZjLElBQUk0WCxXQXJCdkMsU0FBUzZFLGVBQWVsYixFQUFHMEIsR0FDdkIsR0FBSTFCLEVBQUU1QixTQUFXc0QsRUFBRXRELE9BQ2YsT0FBTyxFQUVYLElBQUssSUFBSW9CLEVBQUksRUFBR0EsRUFBSVEsRUFBRTVCLFFBQVVvQixFQUFJa0MsRUFBRXRELE9BQVFvQixJQUMxQyxHQUFJUSxFQUFFUixLQUFPa0MsRUFBRWxDLEdBR2YsT0FBTyxFQUVYLE9BQU8sQ0FDWCxFQVlTMGIsQ0FES2xILE1BQU1pRCxJQUNTZ0UsZ0JBQ3JCakgsTUFBTWlELElBQU1nRSxhQUVwQixDQUNBLE1BQU8sQ0FDSDlCLFVBckZ1RG5NLEdBQUdtTSxVQXNGMURFLFdBdEZrRnJNLEdBQUdxTSxXQXVGckZuQixVQXZGNkdsTCxHQUFHa0wsVUF3RmhIRyxPQUFRMUMscUJBdkZaLFNBQVNxQixjQUFjWixPQUFRcEMsT0FDM0IsT0FBT2tELGVBQWUsQ0FBQ2QsUUFBU3BDLE1BQ3BDLElBc0ZJNkUsVUFBV2xELHFCQS9EZixTQUFTbUQsaUJBQWlCbkIsT0FBUTNELE9BQzlCLE9BQU91RCxrQkFBa0IsQ0FBQ0ksUUFBUzNELE1BQ3ZDLElBOERJZ0YsVUFBV3JELHFCQXpDZixTQUFTc0QsaUJBQWlCN0MsT0FBUXBDLE9BQzlCLE9BQU9pRSxrQkFBa0IsQ0FBQzdCLFFBQVNwQyxNQUN2QyxJQXdDSXVFLE9BQVE1QyxxQkFoRlosU0FBU3lCLGNBQWNoQixPQUFRcEMsT0FDM0IsT0FBT3lFLGVBQWUsQ0FBQ3JDLFFBQVNwQyxNQUNwQyxJQStFSXdFLFFBQVM3QyxvQkFBb0I4QyxnQkFDN0JFLE9BQVFoRCxxQkF6RVosU0FBU2lELGNBQWNuQyxZQUFhekMsT0FDaEN5QyxZQUFjSCxvQkFBb0JHLGFBQ2xDekMsTUFBTXVDLFNBQVcsQ0FBQyxFQUNsQnZDLE1BQU1pRCxJQUFNLEdBQ1pDLGVBQWVULFlBQWF6QyxNQUNoQyxJQXFFSXNFLFFBQVMzQyxvQkFBb0J1QixnQkFDN0I2QixXQUFZcEQsb0JBQW9CNEIsbUJBQ2hDMkIsV0FBWXZELG9CQUFvQnNDLG1CQUV4QyxDQVVzQ3NDLENBQXlCbEUsU0FBVWtELGNBQWdCeEMsMkJBQTJCVixVQUNoSCxPQUFPeEosZUFBZUEsZUFBZUEsZUFBZSxDQUNoRHdKLFNBQ0FrRCxjQUNERSxjQUFlRyxrQkFBbUJVLGFBQ3pDLENBRUEsSUFDSWEsT0FBUyxTQUFVQyxXQUNOLElBQVRBLE9BQW1CQSxLQUFPLElBRzlCLElBRkEsSUFBSXZFLEdBQUssR0FDTHJYLEVBQUk0YixLQUNENWIsS0FDSHFYLElBTlUsbUVBTXdCLEdBQWhCNVMsS0FBS29YLFNBQWdCLEdBRTNDLE9BQU94RSxFQUNYLEVBRUl5RSxpQkFBbUIsQ0FDbkIsT0FDQSxVQUNBLFFBQ0EsUUFFQUMsZ0JBQ0EsU0FBU0EsZ0JBQWdCakosUUFBU0MsTUFDOUJ4TyxLQUFLdU8sUUFBVUEsUUFDZnZPLEtBQUt3TyxLQUFPQSxJQUNoQixFQUdBaUosZ0JBQ0EsU0FBU0EsZ0JBQWdCbEosUUFBU0MsTUFDOUJ4TyxLQUFLdU8sUUFBVUEsUUFDZnZPLEtBQUt3TyxLQUFPQSxJQUNoQixFQUdBa0osbUJBQXFCLFNBQVV4YSxPQUMvQixHQUFxQixpQkFBVkEsT0FBZ0MsT0FBVkEsTUFBZ0IsQ0FFN0MsSUFEQSxJQUFJeWEsWUFBYyxDQUFDLEVBQ1YzTyxHQUFLLEVBQUc0TyxtQkFBcUJMLGlCQUFrQnZPLEdBQUs0TyxtQkFBbUJ2ZCxPQUFRMk8sS0FBTSxDQUMxRixJQUFJNk8sU0FBV0QsbUJBQW1CNU8sSUFDSCxpQkFBcEI5TCxNQUFNMmEsWUFDYkYsWUFBWUUsVUFBWTNhLE1BQU0yYSxVQUV0QyxDQUNBLE9BQU9GLFdBQ1gsQ0FDQSxNQUFPLENBQUVHLFFBQVN6USxPQUFPbkssT0FDN0IsRUFDSTZhLGlCQUFtQixXQUNuQixTQUFTQyxrQkFBa0JDLFdBQVlDLGVBQWdCak4sU0FDbkQsSUFBSXhCLFVBQVkwRSxhQUFhOEosV0FBYSxjQUFjLFNBQVUxSixRQUFTNEosVUFBV3BHLElBQUt2RCxNQUFRLE1BQU8sQ0FDdEdELFFBQ0FDLEtBQU10RixjQUFjSixlQUFlLENBQUMsRUFBRzBGLE1BQVEsQ0FBQyxHQUFJLENBQ2hEdUQsSUFDQW9HLFVBQ0FDLGNBQWUsY0FFbkIsSUFDQUMsUUFBVWxLLGFBQWE4SixXQUFhLFlBQVksU0FBVUUsVUFBV3BHLElBQUt2RCxNQUFRLE1BQU8sQ0FDekZELGFBQVMsRUFDVEMsS0FBTXRGLGNBQWNKLGVBQWUsQ0FBQyxFQUFHMEYsTUFBUSxDQUFDLEdBQUksQ0FDaER1RCxJQUNBb0csVUFDQUMsY0FBZSxZQUVuQixJQUNBMU8sU0FBV3lFLGFBQWE4SixXQUFhLGFBQWEsU0FBVXhKLE1BQU8wSixVQUFXcEcsSUFBS3hELFFBQVNDLE1BQVEsTUFBTyxDQUMzR0QsUUFDQUUsT0FBUXhELFNBQVdBLFFBQVFxTixnQkFBa0JaLG9CQUFvQmpKLE9BQVMsWUFDMUVELEtBQU10RixjQUFjSixlQUFlLENBQUMsRUFBRzBGLE1BQVEsQ0FBQyxHQUFJLENBQ2hEdUQsSUFDQW9HLFVBQ0FJLG9CQUFxQmhLLFFBQ3JCNkosY0FBZSxXQUNmSSxRQUFtRCxnQkFBaEMsTUFBVC9KLFdBQWdCLEVBQVNBLE1BQU0zSSxNQUN6QzJTLFVBQXFELG9CQUFoQyxNQUFUaEssV0FBZ0IsRUFBU0EsTUFBTTNJLFFBRS9DLElBRUE0UyxHQUFnQyxvQkFBcEJDLGdCQUFrQ0EsZ0JBQWlDLFdBQy9FLFNBQVNDLFVBQ0w1WSxLQUFLNlksT0FBUyxDQUNWTCxTQUFTLEVBQ1RNLGlCQUFrQixXQUNsQixFQUNBQyxjQUFlLFdBQ1gsT0FBTyxDQUNYLEVBQ0FDLFFBQVMsV0FDVCxFQUNBQyxvQkFBcUIsV0FDckIsRUFDQUMsWUFBUSxFQUNSQyxlQUFnQixXQUNoQixFQUVSLENBU0EsT0FSQVAsUUFBUTVjLFVBQVVvZCxNQUFRLFdBQ2xCLENBTVIsRUFDT1IsT0FDWCxDQTNCa0YsR0FvSGxGLE9BQU8vZCxPQUFPdUwsUUF4RmQsU0FBU2lJLGNBQWMwRCxLQUNuQixPQUFPLFNBQVVuTCxTQUFVQyxTQUFVd1MsT0FDakMsSUFFSUMsWUFGQW5CLFdBQXdCLE1BQVhsTixhQUFrQixFQUFTQSxRQUFRc08sYUFBZXRPLFFBQVFzTyxZQUFZeEgsS0FBT3FGLFNBQzFGb0MsZ0JBQWtCLElBQUlkLEdBRzFCLFNBQVNVLE1BQU1GLFFBQ1hJLFlBQWNKLE9BQ2RNLGdCQUFnQkosT0FDcEIsQ0FDQSxJQUFJSyxTQUFXLFdBQ1gsT0FBT3RRLFFBQVFuSixLQUFNLE1BQU0sV0FDdkIsSUFBSTBaLEdBQUlDLEdBQUlDLFlBQWFDLGdCQUFpQkMsZUFBZ0JDLE1BQzFELE9BQU94UyxZQUFZdkgsTUFBTSxTQUFVaUosSUFDL0IsT0FBUUEsR0FBR3ZCLE9BQ1AsS0FBSyxFQUdELE9BRkF1QixHQUFHckIsS0FBSy9ILEtBQUssQ0FBQyxFQUFHLEVBQUcsQ0FBRSxJQTJGMUQsU0FBU21hLFdBQVc5YyxPQUNoQixPQUFpQixPQUFWQSxPQUFtQyxpQkFBVkEsT0FBNEMsbUJBQWZBLE1BQU1xRSxJQUN2RSxDQTNGeUN5WSxDQURMSCxnQkFBeUUsT0FBdERILEdBQWdCLE1BQVh6TyxhQUFrQixFQUFTQSxRQUFRd04sZ0JBQXFCLEVBQVNpQixHQUFHMWUsS0FBS2lRLFFBQVM4RyxJQUFLLENBQUVsTCxTQUFvQndTLFNBRTlILENBQUMsRUFBYVEsaUJBRG9CLENBQUMsRUFBYSxHQUUzRCxLQUFLLEVBQ0RBLGdCQUFrQjVRLEdBQUd0QixPQUNyQnNCLEdBQUd2QixNQUFRLEVBQ2YsS0FBSyxFQUNELElBQXdCLElBQXBCbVMsaUJBQTZCTCxnQkFBZ0JYLE9BQU9MLFFBQ3BELEtBQU0sQ0FDRjFTLEtBQU0saUJBQ05nUyxRQUFTLHNEQVNqQixPQU5VLEVBQ1ZnQyxlQUFpQixJQUFJeFksU0FBUSxTQUFVeEQsRUFBRzBMLFFBQVUsT0FBT2dRLGdCQUFnQlgsT0FBT0MsaUJBQWlCLFNBQVMsV0FBYyxPQUFPdFAsT0FBTyxDQUNwSTFELEtBQU0sYUFDTmdTLFFBQVN3QixhQUFlLFdBQ3hCLEdBQUksSUFDUjFTLFNBQVN5UixRQUFRRixVQUFXcEcsSUFBaUUsT0FBM0Q0SCxHQUFnQixNQUFYMU8sYUFBa0IsRUFBU0EsUUFBUWdQLHFCQUEwQixFQUFTTixHQUFHM2UsS0FBS2lRLFFBQVMsQ0FBRWtOLFVBQXNCcEcsS0FBWSxDQUFFbEwsU0FBb0J3UyxVQUNqTCxDQUFDLEVBQWEvWCxRQUFRNFksS0FBSyxDQUMxQkosZUFDQXhZLFFBQVFpSSxRQUFRMk8sZUFBZW5HLElBQUssQ0FDaENuTCxTQUNBQyxTQUNBd1MsTUFDQWxCLFVBQ0FVLE9BQVFXLGdCQUFnQlgsT0FDeEJPLE1BQ0FlLGdCQUFpQixTQUFVamQsTUFBT3NSLE1BQzlCLE9BQU8sSUFBSWdKLGdCQUFnQnRhLE1BQU9zUixLQUN0QyxFQUNBNEwsaUJBQWtCLFNBQVVsZCxNQUFPc1IsTUFDL0IsT0FBTyxJQUFJaUosZ0JBQWdCdmEsTUFBT3NSLEtBQ3RDLEtBQ0FqTixNQUFLLFNBQVVpUCxRQUNmLEdBQUlBLGtCQUFrQmdILGdCQUNsQixNQUFNaEgsT0FFVixPQUFJQSxrQkFBa0JpSCxnQkFDWGhPLFVBQVUrRyxPQUFPakMsUUFBUzRKLFVBQVdwRyxJQUFLdkIsT0FBT2hDLE1BRXJEL0UsVUFBVStHLE9BQVEySCxVQUFXcEcsSUFDeEMsT0FFWixLQUFLLEVBRUQsT0FEQTZILFlBQWMzUSxHQUFHdEIsT0FDVixDQUFDLEVBQWEsR0FDekIsS0FBSyxFQUdELE9BRkFvUyxNQUFROVEsR0FBR3RCLE9BQ1hpUyxZQUFjRyxpQkFBaUJ2QyxnQkFBa0I5TixTQUFTLEtBQU15TyxVQUFXcEcsSUFBS2dJLE1BQU14TCxRQUFTd0wsTUFBTXZMLE1BQVE5RSxTQUFTcVEsTUFBTzVCLFVBQVdwRyxLQUNqSSxDQUFDLEVBQWEsR0FDekIsS0FBSyxFQUtELE9BSmU5RyxVQUFZQSxRQUFRb1AsNEJBQThCM1EsU0FBU2dGLE1BQU1rTCxjQUFnQkEsWUFBWXBMLEtBQUtpSyxXQUU3RzdSLFNBQVNnVCxhQUVOLENBQUMsRUFBY0EsYUFFbEMsR0FDSixHQUNKLENBbkVlLEdBb0VmLE9BQU8vZSxPQUFPdUwsT0FBT3FULFNBQVUsQ0FDM0JMLE1BQ0FqQixVQUNBcEcsSUFDQXVJLE9BQVEsV0FDSixPQUFPYixTQUFTbFksS0FBS2daLGFBQ3pCLEdBRVIsQ0FDSixHQUNvQyxDQUNoQ2xDLFFBQ0EzTyxTQUNBRCxVQUNBd08sWUFFUixDQUVBLE9BREFELGtCQUFrQndDLFVBQVksV0FBYyxPQUFPeEMsaUJBQW1CLEVBQy9EQSxpQkFDVixDQTVKc0IsR0E2SnZCLFNBQVN1QyxhQUFhelQsUUFDbEIsR0FBSUEsT0FBTzBILE1BQVExSCxPQUFPMEgsS0FBSytKLGtCQUMzQixNQUFNelIsT0FBT3lILFFBRWpCLEdBQUl6SCxPQUFPMkgsTUFDUCxNQUFNM0gsT0FBTzJILE1BRWpCLE9BQU8zSCxPQUFPeUgsT0FDbEIsQ0FLQSxJQUlJa00sUUFBVSxTQUFVbEwsUUFBU3pJLFFBQzdCLE9BTG1CLFNBQVV0TCxHQUM3QixPQUFPQSxHQUF3QixtQkFBWkEsRUFBRWtULEtBQ3pCLENBR1FnTSxDQUFpQm5MLFNBQ1ZBLFFBQVFiLE1BQU01SCxRQUdkeUksUUFBUXpJLE9BRXZCLEVBQ0EsU0FBUzZULFVBRUwsSUFEQSxJQUFJQyxTQUFXLEdBQ041UixHQUFLLEVBQUdBLEdBQUs1TyxVQUFVQyxPQUFRMk8sS0FDcEM0UixTQUFTNVIsSUFBTTVPLFVBQVU0TyxJQUU3QixPQUFPLFNBQVVsQyxRQUNiLE9BQU84VCxTQUFTL08sTUFBSyxTQUFVMEQsU0FBVyxPQUFPa0wsUUFBUWxMLFFBQVN6SSxPQUFTLEdBQy9FLENBQ0osQ0FDQSxTQUFTK1QsVUFFTCxJQURBLElBQUlELFNBQVcsR0FDTjVSLEdBQUssRUFBR0EsR0FBSzVPLFVBQVVDLE9BQVEyTyxLQUNwQzRSLFNBQVM1UixJQUFNNU8sVUFBVTRPLElBRTdCLE9BQU8sU0FBVWxDLFFBQ2IsT0FBTzhULFNBQVNqVixPQUFNLFNBQVU0SixTQUFXLE9BQU9rTCxRQUFRbEwsUUFBU3pJLE9BQVMsR0FDaEYsQ0FDSixDQUNBLFNBQVNnVSwyQkFBMkJoVSxPQUFRaVUsYUFDeEMsSUFBS2pVLFNBQVdBLE9BQU8wSCxLQUNuQixPQUFPLEVBQ1gsSUFBSXdNLGtCQUFxRCxpQkFBMUJsVSxPQUFPMEgsS0FBSzJKLFVBQ3ZDOEMsc0JBQXdCRixZQUFZbk0sUUFBUTlILE9BQU8wSCxLQUFLNEosZ0JBQWtCLEVBQzlFLE9BQU80QyxtQkFBcUJDLHFCQUNoQyxDQUNBLFNBQVNDLGtCQUFrQmpmLEdBQ3ZCLE1BQXVCLG1CQUFUQSxFQUFFLElBQXFCLFlBQWFBLEVBQUUsSUFBTSxjQUFlQSxFQUFFLElBQU0sYUFBY0EsRUFBRSxFQUNyRyxDQUNBLFNBQVNrZixZQUVMLElBREEsSUFBSUMsWUFBYyxHQUNUcFMsR0FBSyxFQUFHQSxHQUFLNU8sVUFBVUMsT0FBUTJPLEtBQ3BDb1MsWUFBWXBTLElBQU01TyxVQUFVNE8sSUFFaEMsT0FBMkIsSUFBdkJvUyxZQUFZL2dCLE9BQ0wsU0FBVXlNLFFBQVUsT0FBT2dVLDJCQUEyQmhVLE9BQVEsQ0FBQyxXQUFhLEVBRWxGb1Usa0JBQWtCRSxhQUdoQixTQUFVdFUsUUFDYixJQUFJOFQsU0FBV1EsWUFBWTFnQixLQUFJLFNBQVUyZ0IsWUFBYyxPQUFPQSxXQUFXaEQsT0FBUyxJQUVsRixPQURzQnNDLFFBQVF4WixXQUFNLEVBQVF5WixTQUNyQ1UsQ0FBZ0J4VSxPQUMzQixFQU5XcVUsWUFBWUMsWUFBWSxHQU92QyxDQUNBLFNBQVNHLGFBRUwsSUFEQSxJQUFJSCxZQUFjLEdBQ1RwUyxHQUFLLEVBQUdBLEdBQUs1TyxVQUFVQyxPQUFRMk8sS0FDcENvUyxZQUFZcFMsSUFBTTVPLFVBQVU0TyxJQUVoQyxPQUEyQixJQUF2Qm9TLFlBQVkvZ0IsT0FDTCxTQUFVeU0sUUFBVSxPQUFPZ1UsMkJBQTJCaFUsT0FBUSxDQUFDLFlBQWMsRUFFbkZvVSxrQkFBa0JFLGFBR2hCLFNBQVV0VSxRQUNiLElBQUk4VCxTQUFXUSxZQUFZMWdCLEtBQUksU0FBVTJnQixZQUFjLE9BQU9BLFdBQVczUixRQUFVLElBRW5GLE9BRHNCaVIsUUFBUXhaLFdBQU0sRUFBUXlaLFNBQ3JDVSxDQUFnQnhVLE9BQzNCLEVBTld5VSxhQUFhSCxZQUFZLEdBT3hDLENBQ0EsU0FBU0ksc0JBRUwsSUFEQSxJQUFJSixZQUFjLEdBQ1RwUyxHQUFLLEVBQUdBLEdBQUs1TyxVQUFVQyxPQUFRMk8sS0FDcENvUyxZQUFZcFMsSUFBTTVPLFVBQVU0TyxJQUVoQyxJQUFJeVMsUUFBVSxTQUFVM1UsUUFDcEIsT0FBT0EsUUFBVUEsT0FBTzBILE1BQVExSCxPQUFPMEgsS0FBSytKLGlCQUNoRCxFQUNBLE9BQTJCLElBQXZCNkMsWUFBWS9nQixRQU1YNmdCLGtCQUFrQkUsYUFMWixTQUFVdFUsUUFFYixPQURzQitULFFBQVFVLFdBQVdwYSxXQUFNLEVBQVFpYSxhQUFjSyxRQUM5REgsQ0FBZ0J4VSxPQUMzQixFQUdPMFUsc0JBQXNCSixZQUFZLEdBTWpELENBQ0EsU0FBU00sY0FFTCxJQURBLElBQUlOLFlBQWMsR0FDVHBTLEdBQUssRUFBR0EsR0FBSzVPLFVBQVVDLE9BQVEyTyxLQUNwQ29TLFlBQVlwUyxJQUFNNU8sVUFBVTRPLElBRWhDLE9BQTJCLElBQXZCb1MsWUFBWS9nQixPQUNMLFNBQVV5TSxRQUFVLE9BQU9nVSwyQkFBMkJoVSxPQUFRLENBQUMsYUFBZSxFQUVwRm9VLGtCQUFrQkUsYUFHaEIsU0FBVXRVLFFBQ2IsSUFBSThULFNBQVdRLFlBQVkxZ0IsS0FBSSxTQUFVMmdCLFlBQWMsT0FBT0EsV0FBVzVSLFNBQVcsSUFFcEYsT0FEc0JrUixRQUFReFosV0FBTSxFQUFReVosU0FDckNVLENBQWdCeFUsT0FDM0IsRUFOVzRVLGNBQWNOLFlBQVksR0FPekMsQ0FDQSxTQUFTTyxxQkFFTCxJQURBLElBQUlQLFlBQWMsR0FDVHBTLEdBQUssRUFBR0EsR0FBSzVPLFVBQVVDLE9BQVEyTyxLQUNwQ29TLFlBQVlwUyxJQUFNNU8sVUFBVTRPLElBRWhDLE9BQTJCLElBQXZCb1MsWUFBWS9nQixPQUNMLFNBQVV5TSxRQUFVLE9BQU9nVSwyQkFBMkJoVSxPQUFRLENBQUMsVUFBVyxZQUFhLFlBQWMsRUFFM0dvVSxrQkFBa0JFLGFBR2hCLFNBQVV0VSxRQUViLElBREEsSUFBSThULFNBQVcsR0FDTjVSLEdBQUssRUFBRzRTLGNBQWdCUixZQUFhcFMsR0FBSzRTLGNBQWN2aEIsT0FBUTJPLEtBQU0sQ0FDM0UsSUFBSXFTLFdBQWFPLGNBQWM1UyxJQUMvQjRSLFNBQVMvYSxLQUFLd2IsV0FBV2hELFFBQVNnRCxXQUFXM1IsU0FBVTJSLFdBQVc1UixVQUN0RSxDQUVBLE9BRHNCa1IsUUFBUXhaLFdBQU0sRUFBUXlaLFNBQ3JDVSxDQUFnQnhVLE9BQzNCLEVBVlc2VSxxQkFBcUJQLFlBQVksR0FXaEQsQ0FFQSxJQUFJUyxlQUFpQixTQUFVcFosS0FBTXFaLFVBQ2pDLEdBQW9CLG1CQUFUclosS0FDUCxNQUFNLElBQUkyRSxVQUFVMFUsU0FBVyxxQkFFdkMsRUFDSUMsS0FBTyxXQUNYLEVBQ0lDLGVBQWlCLFNBQVV2QyxTQUFVd0MsU0FHckMsWUFGZ0IsSUFBWkEsVUFBc0JBLFFBQVVGLE1BQ3BDdEMsU0FBU3lDLE1BQU1ELFNBQ1J4QyxRQUNYLEVBQ0kwQyx1QkFBeUIsU0FBVUMsWUFBYUMsVUFFaEQsT0FEQUQsWUFBWXRELGlCQUFpQixRQUFTdUQsU0FBVSxDQUFFQyxNQUFNLElBQ2pELFdBQWMsT0FBT0YsWUFBWW5ELG9CQUFvQixRQUFTb0QsU0FBVyxDQUNwRixFQUNJRSwwQkFBNEIsU0FBVS9DLGdCQUFpQk4sUUFDdkQsSUFBSUwsT0FBU1csZ0JBQWdCWCxPQUN6QkEsT0FBT0wsVUFHTCxXQUFZSyxRQUNkaGUsT0FBT29GLGVBQWU0WSxPQUFRLFNBQVUsQ0FDcEM1YixZQUFZLEVBQ1pDLE1BQU9nYyxPQUNQbGMsY0FBYyxFQUNkRCxVQUFVLElBSWxCeWMsZ0JBQWdCSixNQUFNRixRQUMxQixFQVFJc0Qsa0JBQW9CQyxxQkFDcEJDLGtCQUFvQkQscUJBQ3BCRSxlQUNBLFNBQVNBLGVBQWVDLE1BQ3BCNWMsS0FBSzRjLEtBQU9BLEtBQ1o1YyxLQUFLOEYsS0FBTyxpQkFDWjlGLEtBQUs4WCxRQUFVK0UsMkJBQXdDRCxLQUFPLEdBQ2xFLEVBSUFFLGVBQWlCLFNBQVVqRSxRQUMzQixHQUFJQSxPQUFPTCxRQUNQLE1BQU0sSUFBSW1FLGVBQWU5RCxPQUFPSyxPQUV4QyxFQUNBLFNBQVM2RCxlQUFlbEUsT0FBUVksVUFDNUIsSUFBSXVELFFBQVVqQixLQUNkLE9BQU8sSUFBSXphLFNBQVEsU0FBVWlJLFFBQVNDLFFBQ2xDLElBQUl5VCxnQkFBa0IsV0FBYyxPQUFPelQsT0FBTyxJQUFJbVQsZUFBZTlELE9BQU9LLFFBQVUsRUFDbEZMLE9BQU9MLFFBQ1B5RSxtQkFHSkQsUUFBVWIsdUJBQXVCdEQsT0FBUW9FLGlCQUN6Q3hELFNBQVN5RCxTQUFRLFdBQWMsT0FBT0YsU0FBVyxJQUFHemIsS0FBS2dJLFFBQVNDLFFBQ3RFLElBQUcwVCxTQUFRLFdBQ1BGLFFBQVVqQixJQUNkLEdBQ0osQ0FDQSxJQTZCSW9CLFlBQWMsU0FBVXRFLFFBQ3hCLE9BQU8sU0FBVVksVUFDYixPQUFPdUMsZUFBZWUsZUFBZWxFLE9BQVFZLFVBQVVsWSxNQUFLLFNBQVU2YixRQUVsRSxPQURBTixlQUFlakUsUUFDUnVFLE1BQ1gsSUFDSixDQUNKLEVBQ0lDLFlBQWMsU0FBVXhFLFFBQ3hCLElBQUl5RSxNQUFRSCxZQUFZdEUsUUFDeEIsT0FBTyxTQUFVMEUsV0FDYixPQUFPRCxNQUFNLElBQUloYyxTQUFRLFNBQVVpSSxTQUFXLE9BQU9pVSxXQUFXalUsUUFBU2dVLFVBQVksSUFDekYsQ0FDSixFQUVJLHlCQUFTMWlCLE9BQU91TCxPQUNoQnFYLG1CQUFxQixDQUFDLEVBQ3RCQyxJQUFNLHFCQUNOQyxXQUFhLFNBQVVDLG1CQUV2QixPQUFPLFNBQVVDLGNBQ2JoQyxlQUFlZ0MsYUFBYyxnQkFDN0IsSUFINEJDLFdBR3hCQyxxQkFBdUIsSUFBSXBGLGdCQUhIbUYsV0FJWkMscUJBSmlDNUIsdUJBQXVCeUIsbUJBQW1CLFdBQWMsT0FBT3JCLDBCQUEwQnVCLFdBQVlGLGtCQUFrQjFFLE9BQVMsSUFLakwsSUFyRGdCOEUsTUFBT0MsUUFxRG5Cek4sUUFyRFl3TixNQXFESyxXQUFjLE9BQU83VSxhQUFRLEVBQVEsTUFBTSxXQUM1RCxJQUFJK1UsUUFDSixPQUFPM1csWUFBWXZILE1BQU0sU0FBVWlKLElBQy9CLE9BQVFBLEdBQUd2QixPQUNQLEtBQUssRUFHRCxPQUZBb1YsZUFBZWMsbUJBQ2ZkLGVBQWVpQixxQkFBcUJsRixRQUM3QixDQUFDLEVBQWFnRixhQUFhLENBQzFCUCxNQUFPSCxZQUFZWSxxQkFBcUJsRixRQUN4Q3NGLE1BQU9kLFlBQVlVLHFCQUFxQmxGLFFBQ3hDQSxPQUFRa0YscUJBQXFCbEYsVUFFekMsS0FBSyxFQUdELE9BRkFxRixRQUFValYsR0FBR3RCLE9BQ2JtVixlQUFlaUIscUJBQXFCbEYsUUFDN0IsQ0FBQyxFQUFjcUYsU0FFbEMsR0FDSixHQUFJLEVBdkVtQkQsUUF1RWhCLFdBQWMsT0FBTzFCLDBCQUEwQndCLHFCQXRHMUMsaUJBc0dnRixFQXZFbkQ1VSxhQUFRLEVBQVEsTUFBTSxXQUNuRSxJQUFXaVYsUUFDWCxPQUFPN1csWUFBWXZILE1BQU0sU0FBVWlKLElBQy9CLE9BQVFBLEdBQUd2QixPQUNQLEtBQUssRUFFRCxPQURBdUIsR0FBR3JCLEtBQUsvSCxLQUFLLENBQUMsRUFBRyxFQUFHLEVBQUcsSUFDaEIsQ0FBQyxFQUFheUIsUUFBUWlJLFdBQ2pDLEtBQUssRUFFRCxPQURBTixHQUFHdEIsT0FDSSxDQUFDLEVBQWFxVyxTQUN6QixLQUFLLEVBRUQsTUFBTyxDQUFDLEVBQWMsQ0FDZEssT0FBUSxLQUNSbmhCLE1BSEErTCxHQUFHdEIsU0FLZixLQUFLLEVBRUQsTUFBTyxDQUFDLEVBQWMsQ0FDZDBXLFFBRlJELFFBQVVuVixHQUFHdEIsa0JBRXNCZ1YsZUFBaUIsWUFBYyxXQUMxRGxPLE1BQU8yUCxVQUVuQixLQUFLLEVBRUQsT0FEVyxNQUFYSCxTQUEyQkEsVUFDcEIsQ0FBQyxHQUNaLEtBQUssRUFBRyxNQUFPLENBQUMsR0FFeEIsR0FDSixLQTRDUSxNQUFPLENBQ0h6TixPQUFRMk0sWUFBWVMsa0JBQVpULENBQStCM00sUUFDdkM4TixPQUFRLFdBQ0ovQiwwQkFBMEJ3QixxQkEzR3RCLGlCQTRHUixFQUVSLENBQ0osRUFDSVEsa0JBQW9CLFNBQVVDLGVBQWdCM0YsUUErQzlDLE9BQU8sU0FBVTRGLFVBQVdDLFNBQVcsT0FBTzFDLGVBOUNuQyxTQUFVeUMsVUFBV0MsU0FBVyxPQUFPdlYsYUFBUSxFQUFRLE1BQU0sV0FDcEUsSUFBSXdWLFlBQWFDLGFBQWNDLFNBQVV6QixPQUN6QyxPQUFPN1YsWUFBWXZILE1BQU0sU0FBVWlKLElBQy9CLE9BQVFBLEdBQUd2QixPQUNQLEtBQUssRUFDRG9WLGVBQWVqRSxRQUNmOEYsWUFBYyxXQUNkLEVBQ0FDLGFBQWUsSUFBSXRkLFNBQVEsU0FBVWlJLFFBQVNDLFFBQzFDLElBQUlzVixjQUFnQk4sZUFBZSxDQUMvQkMsVUFDQU0sT0FBUSxTQUFValksT0FBUWtZLGFBQ3RCQSxZQUFZTCxjQUNacFYsUUFBUSxDQUNKekMsT0FDQWtZLFlBQVluWSxXQUNabVksWUFBWUMsb0JBRXBCLElBRUpOLFlBQWMsV0FDVkcsZ0JBQ0F0VixRQUNKLENBQ0osSUFDQXFWLFNBQVcsQ0FDUEQsY0FFVyxNQUFYRixTQUNBRyxTQUFTaGYsS0FBSyxJQUFJeUIsU0FBUSxTQUFVaUksU0FBVyxPQUFPaVUsV0FBV2pVLFFBQVNtVixRQUFTLEtBQU8sS0FFOUZ6VixHQUFHdkIsTUFBUSxFQUNmLEtBQUssRUFFRCxPQURBdUIsR0FBR3JCLEtBQUsvSCxLQUFLLENBQUMsRUFBRyxDQUFFLEVBQUcsSUFDZixDQUFDLEVBQWFrZCxlQUFlbEUsT0FBUXZYLFFBQVE0WSxLQUFLMkUsWUFDN0QsS0FBSyxFQUdELE9BRkF6QixPQUFTblUsR0FBR3RCLE9BQ1ptVixlQUFlakUsUUFDUixDQUFDLEVBQWN1RSxRQUMxQixLQUFLLEVBRUQsT0FEQXVCLGNBQ08sQ0FBQyxHQUNaLEtBQUssRUFBRyxNQUFPLENBQUMsR0FFeEIsR0FDSixHQUFJLENBQ3lETyxDQUFLVCxVQUFXQyxTQUFXLENBQzVGLEVBQ0lTLDBCQUE0QixTQUFVbFUsU0FDdEMsSUFBSUUsS0FBT0YsUUFBUUUsS0FBTWtELGNBQWdCcEQsUUFBUW9ELGNBQWVrQixRQUFVdEUsUUFBUXNFLFFBQVNrUCxVQUFZeFQsUUFBUXdULFVBQVdNLE9BQVM5VCxRQUFROFQsT0FDM0ksR0FBSTVULEtBQ0FzVCxVQUFZdFEsYUFBYWhELE1BQU11RCxXQUU5QixHQUFJTCxjQUNMbEQsS0FBT2tELGNBQWNsRCxLQUNyQnNULFVBQVlwUSxjQUFjSyxXQUV6QixHQUFJYSxRQUNMa1AsVUFBWWxQLGFBRVgsSUFBSWtQLFVBR0wsTUFBTSxJQUFJaGtCLE1BQU0sMkZBR3BCLE9BREFvaEIsZUFBZWtELE9BQVEsb0JBQ2hCLENBQUVOLFVBQXNCdFQsS0FBWTRULE9BQy9DLEVBQ0lLLG9CQUFzQixTQUFVblUsU0FDaEMsSUFBSWhDLEdBQUtrVywwQkFBMEJsVSxTQUFVRSxLQUFPbEMsR0FBR2tDLEtBQU1zVCxVQUFZeFYsR0FBR3dWLFVBQVdNLE9BQVM5VixHQUFHOFYsT0FZbkcsTUFWWSxDQUNSak0sR0FGS3NFLFNBR0wySCxPQUNBNVQsS0FDQXNULFVBQ0FwRyxRQUFTLElBQUkzYixJQUNiaWlCLFlBQWEsV0FDVCxNQUFNLElBQUlsa0IsTUFBTSw4QkFDcEIsRUFHUixFQUNJNGtCLHNCQUF3QixTQUFVNWIsT0FDbENBLE1BQU00VSxRQUFReGMsU0FBUSxTQUFVaWlCLFlBQzVCdkIsMEJBQTBCdUIsV0FBWXRCLGtCQUMxQyxHQUNKLEVBQ0k4Qyw4QkFBZ0MsU0FBVUMsYUFDMUMsT0FBTyxXQUNIQSxZQUFZMWpCLFFBQVF3akIsdUJBQ3BCRSxZQUFZamlCLE9BQ2hCLENBQ0osRUFDSWtpQixrQkFBb0IsU0FBVUMsYUFBY0MsY0FBZUMsV0FDM0QsSUFDSUYsYUFBYUMsY0FBZUMsVUFDaEMsQ0FDQSxNQUFPQyxtQkFDSHBDLFlBQVcsV0FDUCxNQUFNb0MsaUJBQ1YsR0FBRyxFQUNQLENBQ0osRUFDSUMsWUFBYzFSLGFBQWF1UCxJQUFNLFFBQ2pDb0Msa0JBQW9CM1IsYUFBYXVQLElBQU0sY0FDdkNxQyxlQUFpQjVSLGFBQWF1UCxJQUFNLFdBQ3BDc0Msb0JBQXNCLFdBRXRCLElBREEsSUFBSW5XLEtBQU8sR0FDRmIsR0FBSyxFQUFHQSxHQUFLNU8sVUFBVUMsT0FBUTJPLEtBQ3BDYSxLQUFLYixJQUFNNU8sVUFBVTRPLElBRXpCaVgsUUFBUXhSLE1BQU10TixNQUFNOGUsUUFBU2hZLGNBQWMsQ0FBQ3lWLElBQU0sVUFBVzdULE1BQ2pFLEVBQ0EsU0FBU3FXLHlCQUF5QkMsbUJBQzlCLElBQUkxVixNQUFRekssVUFDYyxJQUF0Qm1nQixvQkFBZ0NBLGtCQUFvQixDQUFDLEdBQ3pELElBQUlaLFlBQWMsSUFBSS9pQixJQUNsQjZjLE1BQVE4RyxrQkFBa0I5RyxNQUFPcFEsR0FBS2tYLGtCQUFrQmxFLFFBQVNBLGFBQWlCLElBQVBoVCxHQUFnQitXLG9CQUFzQi9XLEdBQ3JINFMsZUFBZUksUUFBUyxXQUN4QixJQVVJbUUsa0JBQW9CLFNBQVVuZCxZQUM5QixJQUFLLElBQUkrRixHQUFLLEVBQUdDLEdBQUsxTyxNQUFNd0YsS0FBS3dmLFlBQVluVCxVQUFXcEQsR0FBS0MsR0FBRzVPLE9BQVEyTyxLQUFNLENBQzFFLElBQUl2RixNQUFRd0YsR0FBR0QsSUFDZixHQUFJL0YsV0FBV1EsT0FDWCxPQUFPQSxLQUVmLENBRUosRUFDSSthLGVBQWlCLFNBQVV2VCxTQUMzQixJQUFJeEgsTUFBUTJjLG1CQUFrQixTQUFVQyxlQUFpQixPQUFPQSxjQUFjdEIsU0FBVzlULFFBQVE4VCxNQUFRLElBSXpHLE9BSEt0YixRQUNEQSxNQUFRMmIsb0JBQW9CblUsVUF0QmxCLFNBQVV4SCxPQUd4QixPQUZBQSxNQUFNa2IsWUFBYyxXQUFjLE9BQU9ZLFlBQVloaUIsT0FBT2tHLE1BQU1xUCxHQUFLLEVBQ3ZFeU0sWUFBWW5qQixJQUFJcUgsTUFBTXFQLEdBQUlyUCxPQUNuQixTQUFVNmMsZUFDYjdjLE1BQU1rYixlQUNlLE1BQWpCMkIsbUJBQXdCLEVBQVNBLGNBQWNDLGVBQy9DbEIsc0JBQXNCNWIsTUFFOUIsQ0FDSixDQWVXK2MsQ0FBWS9jLE1BQ3ZCLEVBQ0lxYixjQUFnQixTQUFVN1QsU0FDMUIsSUFBSWhDLEdBQUtrVywwQkFBMEJsVSxTQUFVRSxLQUFPbEMsR0FBR2tDLEtBQU00VCxPQUFTOVYsR0FBRzhWLE9BQVFOLFVBQVl4VixHQUFHd1YsVUFDNUZoYixNQUFRMmMsbUJBQWtCLFNBQVVLLFFBRXBDLE9BRDJDLGlCQUFUdFYsS0FBb0JzVixPQUFPdFYsT0FBU0EsS0FBT3NWLE9BQU9oQyxZQUFjQSxZQUNuRWdDLE9BQU8xQixTQUFXQSxNQUNyRCxJQU9BLE9BTkl0YixRQUNBQSxNQUFNa2IsY0FDRjFULFFBQVFzVixjQUNSbEIsc0JBQXNCNWIsVUFHckJBLEtBQ2IsRUFDSWlkLGVBQWlCLFNBQVVqZCxNQUFPcUQsT0FBUTZaLElBQUsxQixrQkFBb0IsT0FBTzlWLFFBQVFzQixNQUFPLE1BQU0sV0FDL0YsSUFBSW1XLHVCQUF3QjFCLEtBQU0yQixnQkFDbEMsT0FBT3RaLFlBQVl2SCxNQUFNLFNBQVVpSixJQUMvQixPQUFRQSxHQUFHdkIsT0FDUCxLQUFLLEVBQ0RrWix1QkFBeUIsSUFBSWpJLGdCQUM3QnVHLEtBQU9YLGtCQUFrQkMsZUFBZ0JvQyx1QkFBdUIvSCxRQUNoRTVQLEdBQUd2QixNQUFRLEVBQ2YsS0FBSyxFQUdELE9BRkF1QixHQUFHckIsS0FBSy9ILEtBQUssQ0FBQyxFQUFHLEVBQUcsRUFBRyxJQUN2QjRELE1BQU00VSxRQUFRaGMsSUFBSXVrQix3QkFDWCxDQUFDLEVBQWF0ZixRQUFRaUksUUFBUTlGLE1BQU1zYixPQUFPalksT0FBUSx5QkFBTyxDQUFDLEVBQUc2WixJQUFLLENBQ2xFMUIsaUJBQ0F4RyxVQUFXLFNBQVVnRyxVQUFXQyxTQUFXLE9BQU9RLEtBQUtULFVBQVdDLFNBQVNuZCxLQUFLdWYsUUFBVSxFQUMxRjVCLEtBQ0FmLE1BQU9kLFlBQVl1RCx1QkFBdUIvSCxRQUMxQ3lFLE1BQU9ILFlBQVl5RCx1QkFBdUIvSCxRQUMxQ1EsTUFDQVIsT0FBUStILHVCQUF1Qi9ILE9BQy9Ca0ksS0FBTXBELFdBQVdpRCx1QkFBdUIvSCxRQUN4QzhGLFlBQWFsYixNQUFNa2IsWUFDbkJxQyxVQUFXLFdBQ1B6QixZQUFZbmpCLElBQUlxSCxNQUFNcVAsR0FBSXJQLE1BQzlCLEVBQ0E0YixzQkFBdUIsV0FDbkI1YixNQUFNNFUsUUFBUXhjLFNBQVEsU0FBVWlpQixXQUFZaGdCLEVBQUcxQixLQUN2QzBoQixhQUFlOEMseUJBQ2ZyRSwwQkFBMEJ1QixXQUFZdEIsbUJBQ3RDcGdCLElBQUltQixPQUFPdWdCLFlBRW5CLEdBQ0osT0FFWixLQUFLLEVBRUQsT0FEQTdVLEdBQUd0QixPQUNJLENBQUMsRUFBYSxHQUN6QixLQUFLLEVBT0QsT0FOQWtaLGdCQUFrQjVYLEdBQUd0QixrQkFDWWdWLGdCQUM3QjZDLGtCQUFrQnZELFFBQVM0RSxnQkFBaUIsQ0FDeENJLFNBQVUsV0FHWCxDQUFDLEVBQWEsR0FDekIsS0FBSyxFQUdELE9BRkExRSwwQkFBMEJxRSx1QkFBd0JsRSxtQkFDbERqWixNQUFNNFUsUUFBUTlhLE9BQU9xakIsd0JBQ2QsQ0FBQyxHQUNaLEtBQUssRUFBRyxNQUFPLENBQUMsR0FFeEIsR0FDSixHQUFJLEVBQ0FNLHdCQUEwQjVCLDhCQUE4QkMsYUFpRDVELE1BQU8sQ0FDSDdZLFdBakRhLFNBQVVpYSxLQUFPLE9BQU8sU0FBVXRkLE1BQVEsT0FBTyxTQUFVeUQsUUFDeEUsR0FBSStZLFlBQVluUixNQUFNNUgsUUFDbEIsT0FBTzBYLGVBQWUxWCxPQUFPeUgsU0FFakMsSUFBSXVSLGtCQUFrQnBSLE1BQU01SCxRQUE1QixDQUlBLEdBQUlpWixlQUFlclIsTUFBTTVILFFBQ3JCLE9BQU9nWSxjQUFjaFksT0FBT3lILFNBRWhDLElBT0lpQyxPQVBBMlEsY0FBZ0JSLElBQUk5WixXQUNwQm9ZLGlCQUFtQixXQUNuQixHQUFJa0MsZ0JBQWtCMUQsbUJBQ2xCLE1BQU0sSUFBSWhqQixNQUFNaWpCLElBQU0sdURBRTFCLE9BQU95RCxhQUNYLEVBRUEsSUFFSSxHQURBM1EsT0FBU25OLEtBQUt5RCxRQUNWeVksWUFBWWxJLEtBQU8sRUFHbkIsSUFGQSxJQUFJK0osYUFBZVQsSUFBSTlaLFdBQ25Cd2EsZ0JBQWtCOW1CLE1BQU13RixLQUFLd2YsWUFBWW5ULFVBQ3BDcEQsR0FBSyxFQUFHc1ksa0JBQW9CRCxnQkFBaUJyWSxHQUFLc1ksa0JBQWtCam5CLE9BQVEyTyxLQUFNLENBQ3ZGLElBQUl2RixNQUFRNmQsa0JBQWtCdFksSUFDMUJ1WSxhQUFjLEVBQ2xCLElBQ0lBLFlBQWM5ZCxNQUFNZ2IsVUFBVTNYLE9BQVFzYSxhQUFjRCxjQUN4RCxDQUNBLE1BQU9LLGdCQUNIRCxhQUFjLEVBQ2QvQixrQkFBa0J2RCxRQUFTdUYsZUFBZ0IsQ0FDdkNQLFNBQVUsYUFFbEIsQ0FDS00sYUFHTGIsZUFBZWpkLE1BQU9xRCxPQUFRNlosSUFBSzFCLGlCQUN2QyxDQUVSLENBQ0EsUUFDSWtDLGNBQWdCMUQsa0JBQ3BCLENBQ0EsT0FBT2pOLE1BdkNQLENBRkkwUSx5QkEwQ1IsQ0FBRyxDQUFHLEVBR0YxQyxlQUNBTSxjQUNBMkMsZUFBZ0JQLHdCQUV4QixDQUVBLElBUUlRLFFBUkFDLGlCQUFtQixnQkFDbkJDLG1CQUFxQixXQUFjLE9BQU8sU0FBVXJULFNBQ3BELElBQUl0RixHQUNKLE1BQU8sQ0FDSHNGLFFBQ0FDLE1BQU92RixHQUFLLENBQUMsRUFBR0EsR0FBRzBZLG1CQUFvQixFQUFNMVksSUFFckQsQ0FBRyxFQUVDNFksbUJBQStDLG1CQUFuQkMsZUFBZ0NBLGVBQWV6ZixLQUF1QixvQkFBWDJILE9BQXlCQSxZQUEyQixJQUFYLG9CQUFBOUwsRUFBeUIsb0JBQUFBLEVBQVM2akIsWUFBYyxTQUFVQyxJQUFNLE9BQVFOLFVBQVlBLFFBQVVwZ0IsUUFBUWlJLFlBQVloSSxLQUFLeWdCLElBQUk5RixPQUFNLFNBQVUrRixLQUFPLE9BQU96RSxZQUFXLFdBQ3BTLE1BQU15RSxHQUNWLEdBQUcsRUFBSSxHQUFJLEVBQ1BDLHFCQUF1QixTQUFVeEQsU0FDakMsT0FBTyxTQUFVeUQsUUFDYjNFLFdBQVcyRSxPQUFRekQsUUFDdkIsQ0FDSixFQUNJMEQsSUFBd0Isb0JBQVhwWSxRQUEwQkEsT0FBT3FZLHNCQUF3QnJZLE9BQU9xWSxzQkFBd0JILHFCQUFxQixJQUMxSEksa0JBQW9CLFNBQVVyWCxTQUU5QixZQURnQixJQUFaQSxVQUFzQkEsUUFBVSxDQUFFRSxLQUFNLFFBQ3JDLFNBQVU5SCxNQUFRLE9BQU8sV0FFNUIsSUFEQSxJQUFJd0csS0FBTyxHQUNGYixHQUFLLEVBQUdBLEdBQUs1TyxVQUFVQyxPQUFRMk8sS0FDcENhLEtBQUtiLElBQU01TyxVQUFVNE8sSUFFekIsSUFBSXVaLE1BQVFsZixLQUFLbEMsV0FBTSxFQUFRMEksTUFDM0IyWSxXQUFZLEVBQ1pDLHlCQUEwQixFQUMxQkMsb0JBQXFCLEVBQ3JCQyxVQUFZLElBQUlqbUIsSUFDaEJrbUIsY0FBaUMsU0FBakIzWCxRQUFRRSxLQUFrQjBXLG1CQUFzQyxRQUFqQjVXLFFBQVFFLEtBQWlCaVgsSUFBdUIsYUFBakJuWCxRQUFRRSxLQUFzQkYsUUFBUTRYLGtCQUFvQlgscUJBQXFCalgsUUFBUXlULFNBQ3JMb0UsZ0JBQWtCLFdBQ2xCSixvQkFBcUIsRUFDakJELDBCQUNBQSx5QkFBMEIsRUFDMUJFLFVBQVU5bUIsU0FBUSxTQUFVZSxHQUFLLE9BQU9BLEdBQUssSUFFckQsRUFDQSxPQUFPL0IsT0FBT3VMLE9BQU8sQ0FBQyxFQUFHbWMsTUFBTyxDQUM1QnZCLFVBQVcsU0FBVStCLFdBQ2pCLElBQ0lwRSxZQUFjNEQsTUFBTXZCLFdBREYsV0FBYyxPQUFPd0IsV0FBYU8sV0FBYSxJQUdyRSxPQURBSixVQUFVdG1CLElBQUkwbUIsV0FDUCxXQUNIcEUsY0FDQWdFLFVBQVVwbEIsT0FBT3dsQixVQUNyQixDQUNKLEVBQ0FuYyxTQUFVLFNBQVVFLFFBQ2hCLElBQUk0UyxHQUNKLElBU0ksT0FSQThJLFlBQThELE9BQS9DOUksR0FBZSxNQUFWNVMsWUFBaUIsRUFBU0EsT0FBTzBILFdBQWdCLEVBQVNrTCxHQUFHaUksb0JBQ2pGYyx5QkFBMkJELGFBRWxCRSxxQkFDREEsb0JBQXFCLEVBQ3JCRSxjQUFjRSxtQkFHZlAsTUFBTTNiLFNBQVNFLE9BQzFCLENBQ0EsUUFDSTBiLFdBQVksQ0FDaEIsQ0FDSixHQUVSLENBQUcsQ0FDUCxFQUVBLEciLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9ub2RlX21vZHVsZXMvaW1tZXIvZGlzdC9pbW1lci5lc20ubWpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L25vZGVfbW9kdWxlcy9yZXNlbGVjdC9lcy9kZWZhdWx0TWVtb2l6ZS5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9ub2RlX21vZHVsZXMvcmVzZWxlY3QvZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvbm9kZV9tb2R1bGVzL3JlZHV4LXRodW5rL2VzL2luZGV4LmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L2Rpc3QvcmVkdXgtdG9vbGtpdC5lc20uanMiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gbihuKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aCx0PUFycmF5KHI+MT9yLTE6MCksZT0xO2U8cjtlKyspdFtlLTFdPWFyZ3VtZW50c1tlXTtpZihcInByb2R1Y3Rpb25cIiE9PXByb2Nlc3MuZW52Lk5PREVfRU5WKXt2YXIgaT1ZW25dLG89aT9cImZ1bmN0aW9uXCI9PXR5cGVvZiBpP2kuYXBwbHkobnVsbCx0KTppOlwidW5rbm93biBlcnJvciBucjogXCIrbjt0aHJvdyBFcnJvcihcIltJbW1lcl0gXCIrbyl9dGhyb3cgRXJyb3IoXCJbSW1tZXJdIG1pbmlmaWVkIGVycm9yIG5yOiBcIituKyh0Lmxlbmd0aD9cIiBcIit0Lm1hcCgoZnVuY3Rpb24obil7cmV0dXJuXCInXCIrbitcIidcIn0pKS5qb2luKFwiLFwiKTpcIlwiKStcIi4gRmluZCB0aGUgZnVsbCBlcnJvciBhdDogaHR0cHM6Ly9iaXQubHkvM2NYRUtXZlwiKX1mdW5jdGlvbiByKG4pe3JldHVybiEhbiYmISFuW1FdfWZ1bmN0aW9uIHQobil7dmFyIHI7cmV0dXJuISFuJiYoZnVuY3Rpb24obil7aWYoIW58fFwib2JqZWN0XCIhPXR5cGVvZiBuKXJldHVybiExO3ZhciByPU9iamVjdC5nZXRQcm90b3R5cGVPZihuKTtpZihudWxsPT09cilyZXR1cm4hMDt2YXIgdD1PYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChyLFwiY29uc3RydWN0b3JcIikmJnIuY29uc3RydWN0b3I7cmV0dXJuIHQ9PT1PYmplY3R8fFwiZnVuY3Rpb25cIj09dHlwZW9mIHQmJkZ1bmN0aW9uLnRvU3RyaW5nLmNhbGwodCk9PT1afShuKXx8QXJyYXkuaXNBcnJheShuKXx8ISFuW0xdfHwhIShudWxsPT09KHI9bi5jb25zdHJ1Y3Rvcil8fHZvaWQgMD09PXI/dm9pZCAwOnJbTF0pfHxzKG4pfHx2KG4pKX1mdW5jdGlvbiBlKHQpe3JldHVybiByKHQpfHxuKDIzLHQpLHRbUV0udH1mdW5jdGlvbiBpKG4scix0KXt2b2lkIDA9PT10JiYodD0hMSksMD09PW8obik/KHQ/T2JqZWN0LmtleXM6bm4pKG4pLmZvckVhY2goKGZ1bmN0aW9uKGUpe3QmJlwic3ltYm9sXCI9PXR5cGVvZiBlfHxyKGUsbltlXSxuKX0pKTpuLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIoZSx0LG4pfSkpfWZ1bmN0aW9uIG8obil7dmFyIHI9bltRXTtyZXR1cm4gcj9yLmk+Mz9yLmktNDpyLmk6QXJyYXkuaXNBcnJheShuKT8xOnMobik/Mjp2KG4pPzM6MH1mdW5jdGlvbiB1KG4scil7cmV0dXJuIDI9PT1vKG4pP24uaGFzKHIpOk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpfWZ1bmN0aW9uIGEobixyKXtyZXR1cm4gMj09PW8obik/bi5nZXQocik6bltyXX1mdW5jdGlvbiBmKG4scix0KXt2YXIgZT1vKG4pOzI9PT1lP24uc2V0KHIsdCk6Mz09PWU/bi5hZGQodCk6bltyXT10fWZ1bmN0aW9uIGMobixyKXtyZXR1cm4gbj09PXI/MCE9PW58fDEvbj09MS9yOm4hPW4mJnIhPXJ9ZnVuY3Rpb24gcyhuKXtyZXR1cm4gWCYmbiBpbnN0YW5jZW9mIE1hcH1mdW5jdGlvbiB2KG4pe3JldHVybiBxJiZuIGluc3RhbmNlb2YgU2V0fWZ1bmN0aW9uIHAobil7cmV0dXJuIG4ub3x8bi50fWZ1bmN0aW9uIGwobil7aWYoQXJyYXkuaXNBcnJheShuKSlyZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobik7dmFyIHI9cm4obik7ZGVsZXRlIHJbUV07Zm9yKHZhciB0PW5uKHIpLGU9MDtlPHQubGVuZ3RoO2UrKyl7dmFyIGk9dFtlXSxvPXJbaV07ITE9PT1vLndyaXRhYmxlJiYoby53cml0YWJsZT0hMCxvLmNvbmZpZ3VyYWJsZT0hMCksKG8uZ2V0fHxvLnNldCkmJihyW2ldPXtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsZW51bWVyYWJsZTpvLmVudW1lcmFibGUsdmFsdWU6bltpXX0pfXJldHVybiBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihuKSxyKX1mdW5jdGlvbiBkKG4sZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPSExKSx5KG4pfHxyKG4pfHwhdChuKXx8KG8obik+MSYmKG4uc2V0PW4uYWRkPW4uY2xlYXI9bi5kZWxldGU9aCksT2JqZWN0LmZyZWV6ZShuKSxlJiZpKG4sKGZ1bmN0aW9uKG4scil7cmV0dXJuIGQociwhMCl9KSwhMCkpLG59ZnVuY3Rpb24gaCgpe24oMil9ZnVuY3Rpb24geShuKXtyZXR1cm4gbnVsbD09bnx8XCJvYmplY3RcIiE9dHlwZW9mIG58fE9iamVjdC5pc0Zyb3plbihuKX1mdW5jdGlvbiBiKHIpe3ZhciB0PXRuW3JdO3JldHVybiB0fHxuKDE4LHIpLHR9ZnVuY3Rpb24gbShuLHIpe3RuW25dfHwodG5bbl09cil9ZnVuY3Rpb24gXygpe3JldHVyblwicHJvZHVjdGlvblwiPT09cHJvY2Vzcy5lbnYuTk9ERV9FTlZ8fFV8fG4oMCksVX1mdW5jdGlvbiBqKG4scil7ciYmKGIoXCJQYXRjaGVzXCIpLG4udT1bXSxuLnM9W10sbi52PXIpfWZ1bmN0aW9uIE8obil7ZyhuKSxuLnAuZm9yRWFjaChTKSxuLnA9bnVsbH1mdW5jdGlvbiBnKG4pe249PT1VJiYoVT1uLmwpfWZ1bmN0aW9uIHcobil7cmV0dXJuIFU9e3A6W10sbDpVLGg6bixtOiEwLF86MH19ZnVuY3Rpb24gUyhuKXt2YXIgcj1uW1FdOzA9PT1yLml8fDE9PT1yLmk/ci5qKCk6ci5PPSEwfWZ1bmN0aW9uIFAocixlKXtlLl89ZS5wLmxlbmd0aDt2YXIgaT1lLnBbMF0sbz12b2lkIDAhPT1yJiZyIT09aTtyZXR1cm4gZS5oLmd8fGIoXCJFUzVcIikuUyhlLHIsbyksbz8oaVtRXS5QJiYoTyhlKSxuKDQpKSx0KHIpJiYocj1NKGUsciksZS5sfHx4KGUscikpLGUudSYmYihcIlBhdGNoZXNcIikuTShpW1FdLnQscixlLnUsZS5zKSk6cj1NKGUsaSxbXSksTyhlKSxlLnUmJmUudihlLnUsZS5zKSxyIT09SD9yOnZvaWQgMH1mdW5jdGlvbiBNKG4scix0KXtpZih5KHIpKXJldHVybiByO3ZhciBlPXJbUV07aWYoIWUpcmV0dXJuIGkociwoZnVuY3Rpb24oaSxvKXtyZXR1cm4gQShuLGUscixpLG8sdCl9KSwhMCkscjtpZihlLkEhPT1uKXJldHVybiByO2lmKCFlLlApcmV0dXJuIHgobixlLnQsITApLGUudDtpZighZS5JKXtlLkk9ITAsZS5BLl8tLTt2YXIgbz00PT09ZS5pfHw1PT09ZS5pP2Uubz1sKGUuayk6ZS5vLHU9byxhPSExOzM9PT1lLmkmJih1PW5ldyBTZXQobyksby5jbGVhcigpLGE9ITApLGkodSwoZnVuY3Rpb24ocixpKXtyZXR1cm4gQShuLGUsbyxyLGksdCxhKX0pKSx4KG4sbywhMSksdCYmbi51JiZiKFwiUGF0Y2hlc1wiKS5OKGUsdCxuLnUsbi5zKX1yZXR1cm4gZS5vfWZ1bmN0aW9uIEEoZSxpLG8sYSxjLHMsdil7aWYoXCJwcm9kdWN0aW9uXCIhPT1wcm9jZXNzLmVudi5OT0RFX0VOViYmYz09PW8mJm4oNSkscihjKSl7dmFyIHA9TShlLGMscyYmaSYmMyE9PWkuaSYmIXUoaS5SLGEpP3MuY29uY2F0KGEpOnZvaWQgMCk7aWYoZihvLGEscCksIXIocCkpcmV0dXJuO2UubT0hMX1lbHNlIHYmJm8uYWRkKGMpO2lmKHQoYykmJiF5KGMpKXtpZighZS5oLkQmJmUuXzwxKXJldHVybjtNKGUsYyksaSYmaS5BLmx8fHgoZSxjKX19ZnVuY3Rpb24geChuLHIsdCl7dm9pZCAwPT09dCYmKHQ9ITEpLCFuLmwmJm4uaC5EJiZuLm0mJmQocix0KX1mdW5jdGlvbiB6KG4scil7dmFyIHQ9bltRXTtyZXR1cm4odD9wKHQpOm4pW3JdfWZ1bmN0aW9uIEkobixyKXtpZihyIGluIG4pZm9yKHZhciB0PU9iamVjdC5nZXRQcm90b3R5cGVPZihuKTt0Oyl7dmFyIGU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LHIpO2lmKGUpcmV0dXJuIGU7dD1PYmplY3QuZ2V0UHJvdG90eXBlT2YodCl9fWZ1bmN0aW9uIGsobil7bi5QfHwobi5QPSEwLG4ubCYmayhuLmwpKX1mdW5jdGlvbiBFKG4pe24ub3x8KG4ubz1sKG4udCkpfWZ1bmN0aW9uIE4obixyLHQpe3ZhciBlPXMocik/YihcIk1hcFNldFwiKS5GKHIsdCk6dihyKT9iKFwiTWFwU2V0XCIpLlQocix0KTpuLmc/ZnVuY3Rpb24obixyKXt2YXIgdD1BcnJheS5pc0FycmF5KG4pLGU9e2k6dD8xOjAsQTpyP3IuQTpfKCksUDohMSxJOiExLFI6e30sbDpyLHQ6bixrOm51bGwsbzpudWxsLGo6bnVsbCxDOiExfSxpPWUsbz1lbjt0JiYoaT1bZV0sbz1vbik7dmFyIHU9UHJveHkucmV2b2NhYmxlKGksbyksYT11LnJldm9rZSxmPXUucHJveHk7cmV0dXJuIGUuaz1mLGUuaj1hLGZ9KHIsdCk6YihcIkVTNVwiKS5KKHIsdCk7cmV0dXJuKHQ/dC5BOl8oKSkucC5wdXNoKGUpLGV9ZnVuY3Rpb24gUihlKXtyZXR1cm4gcihlKXx8bigyMixlKSxmdW5jdGlvbiBuKHIpe2lmKCF0KHIpKXJldHVybiByO3ZhciBlLHU9cltRXSxjPW8ocik7aWYodSl7aWYoIXUuUCYmKHUuaTw0fHwhYihcIkVTNVwiKS5LKHUpKSlyZXR1cm4gdS50O3UuST0hMCxlPUQocixjKSx1Lkk9ITF9ZWxzZSBlPUQocixjKTtyZXR1cm4gaShlLChmdW5jdGlvbihyLHQpe3UmJmEodS50LHIpPT09dHx8ZihlLHIsbih0KSl9KSksMz09PWM/bmV3IFNldChlKTplfShlKX1mdW5jdGlvbiBEKG4scil7c3dpdGNoKHIpe2Nhc2UgMjpyZXR1cm4gbmV3IE1hcChuKTtjYXNlIDM6cmV0dXJuIEFycmF5LmZyb20obil9cmV0dXJuIGwobil9ZnVuY3Rpb24gRigpe2Z1bmN0aW9uIHQobixyKXt2YXIgdD1zW25dO3JldHVybiB0P3QuZW51bWVyYWJsZT1yOnNbbl09dD17Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6cixnZXQ6ZnVuY3Rpb24oKXt2YXIgcj10aGlzW1FdO3JldHVyblwicHJvZHVjdGlvblwiIT09cHJvY2Vzcy5lbnYuTk9ERV9FTlYmJmYociksZW4uZ2V0KHIsbil9LHNldDpmdW5jdGlvbihyKXt2YXIgdD10aGlzW1FdO1wicHJvZHVjdGlvblwiIT09cHJvY2Vzcy5lbnYuTk9ERV9FTlYmJmYodCksZW4uc2V0KHQsbixyKX19LHR9ZnVuY3Rpb24gZShuKXtmb3IodmFyIHI9bi5sZW5ndGgtMTtyPj0wO3ItLSl7dmFyIHQ9bltyXVtRXTtpZighdC5QKXN3aXRjaCh0Lmkpe2Nhc2UgNTphKHQpJiZrKHQpO2JyZWFrO2Nhc2UgNDpvKHQpJiZrKHQpfX19ZnVuY3Rpb24gbyhuKXtmb3IodmFyIHI9bi50LHQ9bi5rLGU9bm4odCksaT1lLmxlbmd0aC0xO2k+PTA7aS0tKXt2YXIgbz1lW2ldO2lmKG8hPT1RKXt2YXIgYT1yW29dO2lmKHZvaWQgMD09PWEmJiF1KHIsbykpcmV0dXJuITA7dmFyIGY9dFtvXSxzPWYmJmZbUV07aWYocz9zLnQhPT1hOiFjKGYsYSkpcmV0dXJuITB9fXZhciB2PSEhcltRXTtyZXR1cm4gZS5sZW5ndGghPT1ubihyKS5sZW5ndGgrKHY/MDoxKX1mdW5jdGlvbiBhKG4pe3ZhciByPW4uaztpZihyLmxlbmd0aCE9PW4udC5sZW5ndGgpcmV0dXJuITA7dmFyIHQ9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLHIubGVuZ3RoLTEpO2lmKHQmJiF0LmdldClyZXR1cm4hMDtmb3IodmFyIGU9MDtlPHIubGVuZ3RoO2UrKylpZighci5oYXNPd25Qcm9wZXJ0eShlKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBmKHIpe3IuTyYmbigzLEpTT04uc3RyaW5naWZ5KHAocikpKX12YXIgcz17fTttKFwiRVM1XCIse0o6ZnVuY3Rpb24obixyKXt2YXIgZT1BcnJheS5pc0FycmF5KG4pLGk9ZnVuY3Rpb24obixyKXtpZihuKXtmb3IodmFyIGU9QXJyYXkoci5sZW5ndGgpLGk9MDtpPHIubGVuZ3RoO2krKylPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcIlwiK2ksdChpLCEwKSk7cmV0dXJuIGV9dmFyIG89cm4ocik7ZGVsZXRlIG9bUV07Zm9yKHZhciB1PW5uKG8pLGE9MDthPHUubGVuZ3RoO2ErKyl7dmFyIGY9dVthXTtvW2ZdPXQoZixufHwhIW9bZl0uZW51bWVyYWJsZSl9cmV0dXJuIE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKHIpLG8pfShlLG4pLG89e2k6ZT81OjQsQTpyP3IuQTpfKCksUDohMSxJOiExLFI6e30sbDpyLHQ6bixrOmksbzpudWxsLE86ITEsQzohMX07cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLFEse3ZhbHVlOm8sd3JpdGFibGU6ITB9KSxpfSxTOmZ1bmN0aW9uKG4sdCxvKXtvP3IodCkmJnRbUV0uQT09PW4mJmUobi5wKToobi51JiZmdW5jdGlvbiBuKHIpe2lmKHImJlwib2JqZWN0XCI9PXR5cGVvZiByKXt2YXIgdD1yW1FdO2lmKHQpe3ZhciBlPXQudCxvPXQuayxmPXQuUixjPXQuaTtpZig0PT09YylpKG8sKGZ1bmN0aW9uKHIpe3IhPT1RJiYodm9pZCAwIT09ZVtyXXx8dShlLHIpP2Zbcl18fG4ob1tyXSk6KGZbcl09ITAsayh0KSkpfSkpLGkoZSwoZnVuY3Rpb24obil7dm9pZCAwIT09b1tuXXx8dShvLG4pfHwoZltuXT0hMSxrKHQpKX0pKTtlbHNlIGlmKDU9PT1jKXtpZihhKHQpJiYoayh0KSxmLmxlbmd0aD0hMCksby5sZW5ndGg8ZS5sZW5ndGgpZm9yKHZhciBzPW8ubGVuZ3RoO3M8ZS5sZW5ndGg7cysrKWZbc109ITE7ZWxzZSBmb3IodmFyIHY9ZS5sZW5ndGg7djxvLmxlbmd0aDt2KyspZlt2XT0hMDtmb3IodmFyIHA9TWF0aC5taW4oby5sZW5ndGgsZS5sZW5ndGgpLGw9MDtsPHA7bCsrKW8uaGFzT3duUHJvcGVydHkobCl8fChmW2xdPSEwKSx2b2lkIDA9PT1mW2xdJiZuKG9bbF0pfX19fShuLnBbMF0pLGUobi5wKSl9LEs6ZnVuY3Rpb24obil7cmV0dXJuIDQ9PT1uLmk/byhuKTphKG4pfX0pfWZ1bmN0aW9uIFQoKXtmdW5jdGlvbiBlKG4pe2lmKCF0KG4pKXJldHVybiBuO2lmKEFycmF5LmlzQXJyYXkobikpcmV0dXJuIG4ubWFwKGUpO2lmKHMobikpcmV0dXJuIG5ldyBNYXAoQXJyYXkuZnJvbShuLmVudHJpZXMoKSkubWFwKChmdW5jdGlvbihuKXtyZXR1cm5bblswXSxlKG5bMV0pXX0pKSk7aWYodihuKSlyZXR1cm4gbmV3IFNldChBcnJheS5mcm9tKG4pLm1hcChlKSk7dmFyIHI9T2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YobikpO2Zvcih2YXIgaSBpbiBuKXJbaV09ZShuW2ldKTtyZXR1cm4gdShuLEwpJiYocltMXT1uW0xdKSxyfWZ1bmN0aW9uIGYobil7cmV0dXJuIHIobik/ZShuKTpufXZhciBjPVwiYWRkXCI7bShcIlBhdGNoZXNcIix7JDpmdW5jdGlvbihyLHQpe3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe2Zvcih2YXIgaT10LnBhdGgsdT10Lm9wLGY9cixzPTA7czxpLmxlbmd0aC0xO3MrKyl7dmFyIHY9byhmKSxwPVwiXCIraVtzXTswIT09diYmMSE9PXZ8fFwiX19wcm90b19fXCIhPT1wJiZcImNvbnN0cnVjdG9yXCIhPT1wfHxuKDI0KSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBmJiZcInByb3RvdHlwZVwiPT09cCYmbigyNCksXCJvYmplY3RcIiE9dHlwZW9mKGY9YShmLHApKSYmbigxNSxpLmpvaW4oXCIvXCIpKX12YXIgbD1vKGYpLGQ9ZSh0LnZhbHVlKSxoPWlbaS5sZW5ndGgtMV07c3dpdGNoKHUpe2Nhc2VcInJlcGxhY2VcIjpzd2l0Y2gobCl7Y2FzZSAyOnJldHVybiBmLnNldChoLGQpO2Nhc2UgMzpuKDE2KTtkZWZhdWx0OnJldHVybiBmW2hdPWR9Y2FzZSBjOnN3aXRjaChsKXtjYXNlIDE6cmV0dXJuXCItXCI9PT1oP2YucHVzaChkKTpmLnNwbGljZShoLDAsZCk7Y2FzZSAyOnJldHVybiBmLnNldChoLGQpO2Nhc2UgMzpyZXR1cm4gZi5hZGQoZCk7ZGVmYXVsdDpyZXR1cm4gZltoXT1kfWNhc2VcInJlbW92ZVwiOnN3aXRjaChsKXtjYXNlIDE6cmV0dXJuIGYuc3BsaWNlKGgsMSk7Y2FzZSAyOnJldHVybiBmLmRlbGV0ZShoKTtjYXNlIDM6cmV0dXJuIGYuZGVsZXRlKHQudmFsdWUpO2RlZmF1bHQ6cmV0dXJuIGRlbGV0ZSBmW2hdfWRlZmF1bHQ6bigxNyx1KX19KSkscn0sTjpmdW5jdGlvbihuLHIsdCxlKXtzd2l0Y2gobi5pKXtjYXNlIDA6Y2FzZSA0OmNhc2UgMjpyZXR1cm4gZnVuY3Rpb24obixyLHQsZSl7dmFyIG89bi50LHM9bi5vO2kobi5SLChmdW5jdGlvbihuLGkpe3ZhciB2PWEobyxuKSxwPWEocyxuKSxsPWk/dShvLG4pP1wicmVwbGFjZVwiOmM6XCJyZW1vdmVcIjtpZih2IT09cHx8XCJyZXBsYWNlXCIhPT1sKXt2YXIgZD1yLmNvbmNhdChuKTt0LnB1c2goXCJyZW1vdmVcIj09PWw/e29wOmwscGF0aDpkfTp7b3A6bCxwYXRoOmQsdmFsdWU6cH0pLGUucHVzaChsPT09Yz97b3A6XCJyZW1vdmVcIixwYXRoOmR9OlwicmVtb3ZlXCI9PT1sP3tvcDpjLHBhdGg6ZCx2YWx1ZTpmKHYpfTp7b3A6XCJyZXBsYWNlXCIscGF0aDpkLHZhbHVlOmYodil9KX19KSl9KG4scix0LGUpO2Nhc2UgNTpjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKG4scix0LGUpe3ZhciBpPW4udCxvPW4uUix1PW4ubztpZih1Lmxlbmd0aDxpLmxlbmd0aCl7dmFyIGE9W3UsaV07aT1hWzBdLHU9YVsxXTt2YXIgcz1bZSx0XTt0PXNbMF0sZT1zWzFdfWZvcih2YXIgdj0wO3Y8aS5sZW5ndGg7disrKWlmKG9bdl0mJnVbdl0hPT1pW3ZdKXt2YXIgcD1yLmNvbmNhdChbdl0pO3QucHVzaCh7b3A6XCJyZXBsYWNlXCIscGF0aDpwLHZhbHVlOmYodVt2XSl9KSxlLnB1c2goe29wOlwicmVwbGFjZVwiLHBhdGg6cCx2YWx1ZTpmKGlbdl0pfSl9Zm9yKHZhciBsPWkubGVuZ3RoO2w8dS5sZW5ndGg7bCsrKXt2YXIgZD1yLmNvbmNhdChbbF0pO3QucHVzaCh7b3A6YyxwYXRoOmQsdmFsdWU6Zih1W2xdKX0pfWkubGVuZ3RoPHUubGVuZ3RoJiZlLnB1c2goe29wOlwicmVwbGFjZVwiLHBhdGg6ci5jb25jYXQoW1wibGVuZ3RoXCJdKSx2YWx1ZTppLmxlbmd0aH0pfShuLHIsdCxlKTtjYXNlIDM6cmV0dXJuIGZ1bmN0aW9uKG4scix0LGUpe3ZhciBpPW4udCxvPW4ubyx1PTA7aS5mb3JFYWNoKChmdW5jdGlvbihuKXtpZighby5oYXMobikpe3ZhciBpPXIuY29uY2F0KFt1XSk7dC5wdXNoKHtvcDpcInJlbW92ZVwiLHBhdGg6aSx2YWx1ZTpufSksZS51bnNoaWZ0KHtvcDpjLHBhdGg6aSx2YWx1ZTpufSl9dSsrfSkpLHU9MCxvLmZvckVhY2goKGZ1bmN0aW9uKG4pe2lmKCFpLmhhcyhuKSl7dmFyIG89ci5jb25jYXQoW3VdKTt0LnB1c2goe29wOmMscGF0aDpvLHZhbHVlOm59KSxlLnVuc2hpZnQoe29wOlwicmVtb3ZlXCIscGF0aDpvLHZhbHVlOm59KX11Kyt9KSl9KG4scix0LGUpfX0sTTpmdW5jdGlvbihuLHIsdCxlKXt0LnB1c2goe29wOlwicmVwbGFjZVwiLHBhdGg6W10sdmFsdWU6cj09PUg/dm9pZCAwOnJ9KSxlLnB1c2goe29wOlwicmVwbGFjZVwiLHBhdGg6W10sdmFsdWU6bn0pfX0pfWZ1bmN0aW9uIEMoKXtmdW5jdGlvbiByKG4scil7ZnVuY3Rpb24gdCgpe3RoaXMuY29uc3RydWN0b3I9bn1hKG4sciksbi5wcm90b3R5cGU9KHQucHJvdG90eXBlPXIucHJvdG90eXBlLG5ldyB0KX1mdW5jdGlvbiBlKG4pe24ub3x8KG4uUj1uZXcgTWFwLG4ubz1uZXcgTWFwKG4udCkpfWZ1bmN0aW9uIG8obil7bi5vfHwobi5vPW5ldyBTZXQsbi50LmZvckVhY2goKGZ1bmN0aW9uKHIpe2lmKHQocikpe3ZhciBlPU4obi5BLmgscixuKTtuLnAuc2V0KHIsZSksbi5vLmFkZChlKX1lbHNlIG4uby5hZGQocil9KSkpfWZ1bmN0aW9uIHUocil7ci5PJiZuKDMsSlNPTi5zdHJpbmdpZnkocChyKSkpfXZhciBhPWZ1bmN0aW9uKG4scil7cmV0dXJuKGE9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKG4scil7bi5fX3Byb3RvX189cn18fGZ1bmN0aW9uKG4scil7Zm9yKHZhciB0IGluIHIpci5oYXNPd25Qcm9wZXJ0eSh0KSYmKG5bdF09clt0XSl9KShuLHIpfSxmPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuLHIpe3JldHVybiB0aGlzW1FdPXtpOjIsbDpyLEE6cj9yLkE6XygpLFA6ITEsSTohMSxvOnZvaWQgMCxSOnZvaWQgMCx0Om4sazp0aGlzLEM6ITEsTzohMX0sdGhpc31yKG4sTWFwKTt2YXIgbz1uLnByb3RvdHlwZTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sXCJzaXplXCIse2dldDpmdW5jdGlvbigpe3JldHVybiBwKHRoaXNbUV0pLnNpemV9fSksby5oYXM9ZnVuY3Rpb24obil7cmV0dXJuIHAodGhpc1tRXSkuaGFzKG4pfSxvLnNldD1mdW5jdGlvbihuLHIpe3ZhciB0PXRoaXNbUV07cmV0dXJuIHUodCkscCh0KS5oYXMobikmJnAodCkuZ2V0KG4pPT09cnx8KGUodCksayh0KSx0LlIuc2V0KG4sITApLHQuby5zZXQobixyKSx0LlIuc2V0KG4sITApKSx0aGlzfSxvLmRlbGV0ZT1mdW5jdGlvbihuKXtpZighdGhpcy5oYXMobikpcmV0dXJuITE7dmFyIHI9dGhpc1tRXTtyZXR1cm4gdShyKSxlKHIpLGsociksci50LmhhcyhuKT9yLlIuc2V0KG4sITEpOnIuUi5kZWxldGUobiksci5vLmRlbGV0ZShuKSwhMH0sby5jbGVhcj1mdW5jdGlvbigpe3ZhciBuPXRoaXNbUV07dShuKSxwKG4pLnNpemUmJihlKG4pLGsobiksbi5SPW5ldyBNYXAsaShuLnQsKGZ1bmN0aW9uKHIpe24uUi5zZXQociwhMSl9KSksbi5vLmNsZWFyKCkpfSxvLmZvckVhY2g9ZnVuY3Rpb24obixyKXt2YXIgdD10aGlzO3AodGhpc1tRXSkuZm9yRWFjaCgoZnVuY3Rpb24oZSxpKXtuLmNhbGwocix0LmdldChpKSxpLHQpfSkpfSxvLmdldD1mdW5jdGlvbihuKXt2YXIgcj10aGlzW1FdO3Uocik7dmFyIGk9cChyKS5nZXQobik7aWYoci5JfHwhdChpKSlyZXR1cm4gaTtpZihpIT09ci50LmdldChuKSlyZXR1cm4gaTt2YXIgbz1OKHIuQS5oLGkscik7cmV0dXJuIGUociksci5vLnNldChuLG8pLG99LG8ua2V5cz1mdW5jdGlvbigpe3JldHVybiBwKHRoaXNbUV0pLmtleXMoKX0sby52YWx1ZXM9ZnVuY3Rpb24oKXt2YXIgbixyPXRoaXMsdD10aGlzLmtleXMoKTtyZXR1cm4obj17fSlbVl09ZnVuY3Rpb24oKXtyZXR1cm4gci52YWx1ZXMoKX0sbi5uZXh0PWZ1bmN0aW9uKCl7dmFyIG49dC5uZXh0KCk7cmV0dXJuIG4uZG9uZT9uOntkb25lOiExLHZhbHVlOnIuZ2V0KG4udmFsdWUpfX0sbn0sby5lbnRyaWVzPWZ1bmN0aW9uKCl7dmFyIG4scj10aGlzLHQ9dGhpcy5rZXlzKCk7cmV0dXJuKG49e30pW1ZdPWZ1bmN0aW9uKCl7cmV0dXJuIHIuZW50cmllcygpfSxuLm5leHQ9ZnVuY3Rpb24oKXt2YXIgbj10Lm5leHQoKTtpZihuLmRvbmUpcmV0dXJuIG47dmFyIGU9ci5nZXQobi52YWx1ZSk7cmV0dXJue2RvbmU6ITEsdmFsdWU6W24udmFsdWUsZV19fSxufSxvW1ZdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW50cmllcygpfSxufSgpLGM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKG4scil7cmV0dXJuIHRoaXNbUV09e2k6MyxsOnIsQTpyP3IuQTpfKCksUDohMSxJOiExLG86dm9pZCAwLHQ6bixrOnRoaXMscDpuZXcgTWFwLE86ITEsQzohMX0sdGhpc31yKG4sU2V0KTt2YXIgdD1uLnByb3RvdHlwZTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJzaXplXCIse2dldDpmdW5jdGlvbigpe3JldHVybiBwKHRoaXNbUV0pLnNpemV9fSksdC5oYXM9ZnVuY3Rpb24obil7dmFyIHI9dGhpc1tRXTtyZXR1cm4gdShyKSxyLm8/ISFyLm8uaGFzKG4pfHwhKCFyLnAuaGFzKG4pfHwhci5vLmhhcyhyLnAuZ2V0KG4pKSk6ci50LmhhcyhuKX0sdC5hZGQ9ZnVuY3Rpb24obil7dmFyIHI9dGhpc1tRXTtyZXR1cm4gdShyKSx0aGlzLmhhcyhuKXx8KG8ociksayhyKSxyLm8uYWRkKG4pKSx0aGlzfSx0LmRlbGV0ZT1mdW5jdGlvbihuKXtpZighdGhpcy5oYXMobikpcmV0dXJuITE7dmFyIHI9dGhpc1tRXTtyZXR1cm4gdShyKSxvKHIpLGsociksci5vLmRlbGV0ZShuKXx8ISFyLnAuaGFzKG4pJiZyLm8uZGVsZXRlKHIucC5nZXQobikpfSx0LmNsZWFyPWZ1bmN0aW9uKCl7dmFyIG49dGhpc1tRXTt1KG4pLHAobikuc2l6ZSYmKG8obiksayhuKSxuLm8uY2xlYXIoKSl9LHQudmFsdWVzPWZ1bmN0aW9uKCl7dmFyIG49dGhpc1tRXTtyZXR1cm4gdShuKSxvKG4pLG4uby52YWx1ZXMoKX0sdC5lbnRyaWVzPWZ1bmN0aW9uKCl7dmFyIG49dGhpc1tRXTtyZXR1cm4gdShuKSxvKG4pLG4uby5lbnRyaWVzKCl9LHQua2V5cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlcygpfSx0W1ZdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmFsdWVzKCl9LHQuZm9yRWFjaD1mdW5jdGlvbihuLHIpe2Zvcih2YXIgdD10aGlzLnZhbHVlcygpLGU9dC5uZXh0KCk7IWUuZG9uZTspbi5jYWxsKHIsZS52YWx1ZSxlLnZhbHVlLHRoaXMpLGU9dC5uZXh0KCl9LG59KCk7bShcIk1hcFNldFwiLHtGOmZ1bmN0aW9uKG4scil7cmV0dXJuIG5ldyBmKG4scil9LFQ6ZnVuY3Rpb24obixyKXtyZXR1cm4gbmV3IGMobixyKX19KX1mdW5jdGlvbiBKKCl7RigpLEMoKSxUKCl9ZnVuY3Rpb24gSyhuKXtyZXR1cm4gbn1mdW5jdGlvbiAkKG4pe3JldHVybiBufXZhciBHLFUsVz1cInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sKFwieFwiKSxYPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBNYXAscT1cInVuZGVmaW5lZFwiIT10eXBlb2YgU2V0LEI9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFByb3h5JiZ2b2lkIDAhPT1Qcm94eS5yZXZvY2FibGUmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBSZWZsZWN0LEg9Vz9TeW1ib2wuZm9yKFwiaW1tZXItbm90aGluZ1wiKTooKEc9e30pW1wiaW1tZXItbm90aGluZ1wiXT0hMCxHKSxMPVc/U3ltYm9sLmZvcihcImltbWVyLWRyYWZ0YWJsZVwiKTpcIl9fJGltbWVyX2RyYWZ0YWJsZVwiLFE9Vz9TeW1ib2wuZm9yKFwiaW1tZXItc3RhdGVcIik6XCJfXyRpbW1lcl9zdGF0ZVwiLFY9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yfHxcIkBAaXRlcmF0b3JcIixZPXswOlwiSWxsZWdhbCBzdGF0ZVwiLDE6XCJJbW1lciBkcmFmdHMgY2Fubm90IGhhdmUgY29tcHV0ZWQgcHJvcGVydGllc1wiLDI6XCJUaGlzIG9iamVjdCBoYXMgYmVlbiBmcm96ZW4gYW5kIHNob3VsZCBub3QgYmUgbXV0YXRlZFwiLDM6ZnVuY3Rpb24obil7cmV0dXJuXCJDYW5ub3QgdXNlIGEgcHJveHkgdGhhdCBoYXMgYmVlbiByZXZva2VkLiBEaWQgeW91IHBhc3MgYW4gb2JqZWN0IGZyb20gaW5zaWRlIGFuIGltbWVyIGZ1bmN0aW9uIHRvIGFuIGFzeW5jIHByb2Nlc3M/IFwiK259LDQ6XCJBbiBpbW1lciBwcm9kdWNlciByZXR1cm5lZCBhIG5ldyB2YWx1ZSAqYW5kKiBtb2RpZmllZCBpdHMgZHJhZnQuIEVpdGhlciByZXR1cm4gYSBuZXcgdmFsdWUgKm9yKiBtb2RpZnkgdGhlIGRyYWZ0LlwiLDU6XCJJbW1lciBmb3JiaWRzIGNpcmN1bGFyIHJlZmVyZW5jZXNcIiw2OlwiVGhlIGZpcnN0IG9yIHNlY29uZCBhcmd1bWVudCB0byBgcHJvZHVjZWAgbXVzdCBiZSBhIGZ1bmN0aW9uXCIsNzpcIlRoZSB0aGlyZCBhcmd1bWVudCB0byBgcHJvZHVjZWAgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIHVuZGVmaW5lZFwiLDg6XCJGaXJzdCBhcmd1bWVudCB0byBgY3JlYXRlRHJhZnRgIG11c3QgYmUgYSBwbGFpbiBvYmplY3QsIGFuIGFycmF5LCBvciBhbiBpbW1lcmFibGUgb2JqZWN0XCIsOTpcIkZpcnN0IGFyZ3VtZW50IHRvIGBmaW5pc2hEcmFmdGAgbXVzdCBiZSBhIGRyYWZ0IHJldHVybmVkIGJ5IGBjcmVhdGVEcmFmdGBcIiwxMDpcIlRoZSBnaXZlbiBkcmFmdCBpcyBhbHJlYWR5IGZpbmFsaXplZFwiLDExOlwiT2JqZWN0LmRlZmluZVByb3BlcnR5KCkgY2Fubm90IGJlIHVzZWQgb24gYW4gSW1tZXIgZHJhZnRcIiwxMjpcIk9iamVjdC5zZXRQcm90b3R5cGVPZigpIGNhbm5vdCBiZSB1c2VkIG9uIGFuIEltbWVyIGRyYWZ0XCIsMTM6XCJJbW1lciBvbmx5IHN1cHBvcnRzIGRlbGV0aW5nIGFycmF5IGluZGljZXNcIiwxNDpcIkltbWVyIG9ubHkgc3VwcG9ydHMgc2V0dGluZyBhcnJheSBpbmRpY2VzIGFuZCB0aGUgJ2xlbmd0aCcgcHJvcGVydHlcIiwxNTpmdW5jdGlvbihuKXtyZXR1cm5cIkNhbm5vdCBhcHBseSBwYXRjaCwgcGF0aCBkb2Vzbid0IHJlc29sdmU6IFwiK259LDE2OidTZXRzIGNhbm5vdCBoYXZlIFwicmVwbGFjZVwiIHBhdGNoZXMuJywxNzpmdW5jdGlvbihuKXtyZXR1cm5cIlVuc3VwcG9ydGVkIHBhdGNoIG9wZXJhdGlvbjogXCIrbn0sMTg6ZnVuY3Rpb24obil7cmV0dXJuXCJUaGUgcGx1Z2luIGZvciAnXCIrbitcIicgaGFzIG5vdCBiZWVuIGxvYWRlZCBpbnRvIEltbWVyLiBUbyBlbmFibGUgdGhlIHBsdWdpbiwgaW1wb3J0IGFuZCBjYWxsIGBlbmFibGVcIituK1wiKClgIHdoZW4gaW5pdGlhbGl6aW5nIHlvdXIgYXBwbGljYXRpb24uXCJ9LDIwOlwiQ2Fubm90IHVzZSBwcm94aWVzIGlmIFByb3h5LCBQcm94eS5yZXZvY2FibGUgb3IgUmVmbGVjdCBhcmUgbm90IGF2YWlsYWJsZVwiLDIxOmZ1bmN0aW9uKG4pe3JldHVyblwicHJvZHVjZSBjYW4gb25seSBiZSBjYWxsZWQgb24gdGhpbmdzIHRoYXQgYXJlIGRyYWZ0YWJsZTogcGxhaW4gb2JqZWN0cywgYXJyYXlzLCBNYXAsIFNldCBvciBjbGFzc2VzIHRoYXQgYXJlIG1hcmtlZCB3aXRoICdbaW1tZXJhYmxlXTogdHJ1ZScuIEdvdCAnXCIrbitcIidcIn0sMjI6ZnVuY3Rpb24obil7cmV0dXJuXCInY3VycmVudCcgZXhwZWN0cyBhIGRyYWZ0LCBnb3Q6IFwiK259LDIzOmZ1bmN0aW9uKG4pe3JldHVyblwiJ29yaWdpbmFsJyBleHBlY3RzIGEgZHJhZnQsIGdvdDogXCIrbn0sMjQ6XCJQYXRjaGluZyByZXNlcnZlZCBhdHRyaWJ1dGVzIGxpa2UgX19wcm90b19fLCBwcm90b3R5cGUgYW5kIGNvbnN0cnVjdG9yIGlzIG5vdCBhbGxvd2VkXCJ9LFo9XCJcIitPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yLG5uPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBSZWZsZWN0JiZSZWZsZWN0Lm93bktleXM/UmVmbGVjdC5vd25LZXlzOnZvaWQgMCE9PU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM/ZnVuY3Rpb24obil7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG4pLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG4pKX06T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMscm49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnN8fGZ1bmN0aW9uKG4pe3ZhciByPXt9O3JldHVybiBubihuKS5mb3JFYWNoKChmdW5jdGlvbih0KXtyW3RdPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KX0pKSxyfSx0bj17fSxlbj17Z2V0OmZ1bmN0aW9uKG4scil7aWYocj09PVEpcmV0dXJuIG47dmFyIGU9cChuKTtpZighdShlLHIpKXJldHVybiBmdW5jdGlvbihuLHIsdCl7dmFyIGUsaT1JKHIsdCk7cmV0dXJuIGk/XCJ2YWx1ZVwiaW4gaT9pLnZhbHVlOm51bGw9PT0oZT1pLmdldCl8fHZvaWQgMD09PWU/dm9pZCAwOmUuY2FsbChuLmspOnZvaWQgMH0obixlLHIpO3ZhciBpPWVbcl07cmV0dXJuIG4uSXx8IXQoaSk/aTppPT09eihuLnQscik/KEUobiksbi5vW3JdPU4obi5BLmgsaSxuKSk6aX0saGFzOmZ1bmN0aW9uKG4scil7cmV0dXJuIHIgaW4gcChuKX0sb3duS2V5czpmdW5jdGlvbihuKXtyZXR1cm4gUmVmbGVjdC5vd25LZXlzKHAobikpfSxzZXQ6ZnVuY3Rpb24obixyLHQpe3ZhciBlPUkocChuKSxyKTtpZihudWxsPT1lP3ZvaWQgMDplLnNldClyZXR1cm4gZS5zZXQuY2FsbChuLmssdCksITA7aWYoIW4uUCl7dmFyIGk9eihwKG4pLHIpLG89bnVsbD09aT92b2lkIDA6aVtRXTtpZihvJiZvLnQ9PT10KXJldHVybiBuLm9bcl09dCxuLlJbcl09ITEsITA7aWYoYyh0LGkpJiYodm9pZCAwIT09dHx8dShuLnQscikpKXJldHVybiEwO0UobiksayhuKX1yZXR1cm4gbi5vW3JdPT09dCYmKHZvaWQgMCE9PXR8fHIgaW4gbi5vKXx8TnVtYmVyLmlzTmFOKHQpJiZOdW1iZXIuaXNOYU4obi5vW3JdKXx8KG4ub1tyXT10LG4uUltyXT0hMCksITB9LGRlbGV0ZVByb3BlcnR5OmZ1bmN0aW9uKG4scil7cmV0dXJuIHZvaWQgMCE9PXoobi50LHIpfHxyIGluIG4udD8obi5SW3JdPSExLEUobiksayhuKSk6ZGVsZXRlIG4uUltyXSxuLm8mJmRlbGV0ZSBuLm9bcl0sITB9LGdldE93blByb3BlcnR5RGVzY3JpcHRvcjpmdW5jdGlvbihuLHIpe3ZhciB0PXAobiksZT1SZWZsZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LHIpO3JldHVybiBlP3t3cml0YWJsZTohMCxjb25maWd1cmFibGU6MSE9PW4uaXx8XCJsZW5ndGhcIiE9PXIsZW51bWVyYWJsZTplLmVudW1lcmFibGUsdmFsdWU6dFtyXX06ZX0sZGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24oKXtuKDExKX0sZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24obil7cmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihuLnQpfSxzZXRQcm90b3R5cGVPZjpmdW5jdGlvbigpe24oMTIpfX0sb249e307aShlbiwoZnVuY3Rpb24obixyKXtvbltuXT1mdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHNbMF09YXJndW1lbnRzWzBdWzBdLHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0pKSxvbi5kZWxldGVQcm9wZXJ0eT1mdW5jdGlvbihyLHQpe3JldHVyblwicHJvZHVjdGlvblwiIT09cHJvY2Vzcy5lbnYuTk9ERV9FTlYmJmlzTmFOKHBhcnNlSW50KHQpKSYmbigxMyksb24uc2V0LmNhbGwodGhpcyxyLHQsdm9pZCAwKX0sb24uc2V0PWZ1bmN0aW9uKHIsdCxlKXtyZXR1cm5cInByb2R1Y3Rpb25cIiE9PXByb2Nlc3MuZW52Lk5PREVfRU5WJiZcImxlbmd0aFwiIT09dCYmaXNOYU4ocGFyc2VJbnQodCkpJiZuKDE0KSxlbi5zZXQuY2FsbCh0aGlzLHJbMF0sdCxlLHJbMF0pfTt2YXIgdW49ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHIpe3ZhciBlPXRoaXM7dGhpcy5nPUIsdGhpcy5EPSEwLHRoaXMucHJvZHVjZT1mdW5jdGlvbihyLGksbyl7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgciYmXCJmdW5jdGlvblwiIT10eXBlb2YgaSl7dmFyIHU9aTtpPXI7dmFyIGE9ZTtyZXR1cm4gZnVuY3Rpb24obil7dmFyIHI9dGhpczt2b2lkIDA9PT1uJiYobj11KTtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxlPUFycmF5KHQ+MT90LTE6MCksbz0xO288dDtvKyspZVtvLTFdPWFyZ3VtZW50c1tvXTtyZXR1cm4gYS5wcm9kdWNlKG4sKGZ1bmN0aW9uKG4pe3ZhciB0O3JldHVybih0PWkpLmNhbGwuYXBwbHkodCxbcixuXS5jb25jYXQoZSkpfSkpfX12YXIgZjtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBpJiZuKDYpLHZvaWQgMCE9PW8mJlwiZnVuY3Rpb25cIiE9dHlwZW9mIG8mJm4oNyksdChyKSl7dmFyIGM9dyhlKSxzPU4oZSxyLHZvaWQgMCksdj0hMDt0cnl7Zj1pKHMpLHY9ITF9ZmluYWxseXt2P08oYyk6ZyhjKX1yZXR1cm5cInVuZGVmaW5lZFwiIT10eXBlb2YgUHJvbWlzZSYmZiBpbnN0YW5jZW9mIFByb21pc2U/Zi50aGVuKChmdW5jdGlvbihuKXtyZXR1cm4gaihjLG8pLFAobixjKX0pLChmdW5jdGlvbihuKXt0aHJvdyBPKGMpLG59KSk6KGooYyxvKSxQKGYsYykpfWlmKCFyfHxcIm9iamVjdFwiIT10eXBlb2Ygcil7aWYodm9pZCAwPT09KGY9aShyKSkmJihmPXIpLGY9PT1IJiYoZj12b2lkIDApLGUuRCYmZChmLCEwKSxvKXt2YXIgcD1bXSxsPVtdO2IoXCJQYXRjaGVzXCIpLk0ocixmLHAsbCksbyhwLGwpfXJldHVybiBmfW4oMjEscil9LHRoaXMucHJvZHVjZVdpdGhQYXRjaGVzPWZ1bmN0aW9uKG4scil7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgbilyZXR1cm4gZnVuY3Rpb24ocil7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsaT1BcnJheSh0PjE/dC0xOjApLG89MTtvPHQ7bysrKWlbby0xXT1hcmd1bWVudHNbb107cmV0dXJuIGUucHJvZHVjZVdpdGhQYXRjaGVzKHIsKGZ1bmN0aW9uKHIpe3JldHVybiBuLmFwcGx5KHZvaWQgMCxbcl0uY29uY2F0KGkpKX0pKX07dmFyIHQsaSxvPWUucHJvZHVjZShuLHIsKGZ1bmN0aW9uKG4scil7dD1uLGk9cn0pKTtyZXR1cm5cInVuZGVmaW5lZFwiIT10eXBlb2YgUHJvbWlzZSYmbyBpbnN0YW5jZW9mIFByb21pc2U/by50aGVuKChmdW5jdGlvbihuKXtyZXR1cm5bbix0LGldfSkpOltvLHQsaV19LFwiYm9vbGVhblwiPT10eXBlb2YobnVsbD09cj92b2lkIDA6ci51c2VQcm94aWVzKSYmdGhpcy5zZXRVc2VQcm94aWVzKHIudXNlUHJveGllcyksXCJib29sZWFuXCI9PXR5cGVvZihudWxsPT1yP3ZvaWQgMDpyLmF1dG9GcmVlemUpJiZ0aGlzLnNldEF1dG9GcmVlemUoci5hdXRvRnJlZXplKX12YXIgaT1lLnByb3RvdHlwZTtyZXR1cm4gaS5jcmVhdGVEcmFmdD1mdW5jdGlvbihlKXt0KGUpfHxuKDgpLHIoZSkmJihlPVIoZSkpO3ZhciBpPXcodGhpcyksbz1OKHRoaXMsZSx2b2lkIDApO3JldHVybiBvW1FdLkM9ITAsZyhpKSxvfSxpLmZpbmlzaERyYWZ0PWZ1bmN0aW9uKHIsdCl7dmFyIGU9ciYmcltRXTtcInByb2R1Y3Rpb25cIiE9PXByb2Nlc3MuZW52Lk5PREVfRU5WJiYoZSYmZS5DfHxuKDkpLGUuSSYmbigxMCkpO3ZhciBpPWUuQTtyZXR1cm4gaihpLHQpLFAodm9pZCAwLGkpfSxpLnNldEF1dG9GcmVlemU9ZnVuY3Rpb24obil7dGhpcy5EPW59LGkuc2V0VXNlUHJveGllcz1mdW5jdGlvbihyKXtyJiYhQiYmbigyMCksdGhpcy5nPXJ9LGkuYXBwbHlQYXRjaGVzPWZ1bmN0aW9uKG4sdCl7dmFyIGU7Zm9yKGU9dC5sZW5ndGgtMTtlPj0wO2UtLSl7dmFyIGk9dFtlXTtpZigwPT09aS5wYXRoLmxlbmd0aCYmXCJyZXBsYWNlXCI9PT1pLm9wKXtuPWkudmFsdWU7YnJlYWt9fWU+LTEmJih0PXQuc2xpY2UoZSsxKSk7dmFyIG89YihcIlBhdGNoZXNcIikuJDtyZXR1cm4gcihuKT9vKG4sdCk6dGhpcy5wcm9kdWNlKG4sKGZ1bmN0aW9uKG4pe3JldHVybiBvKG4sdCl9KSl9LGV9KCksYW49bmV3IHVuLGZuPWFuLnByb2R1Y2UsY249YW4ucHJvZHVjZVdpdGhQYXRjaGVzLmJpbmQoYW4pLHNuPWFuLnNldEF1dG9GcmVlemUuYmluZChhbiksdm49YW4uc2V0VXNlUHJveGllcy5iaW5kKGFuKSxwbj1hbi5hcHBseVBhdGNoZXMuYmluZChhbiksbG49YW4uY3JlYXRlRHJhZnQuYmluZChhbiksZG49YW4uZmluaXNoRHJhZnQuYmluZChhbik7ZXhwb3J0IGRlZmF1bHQgZm47ZXhwb3J0e3VuIGFzIEltbWVyLHBuIGFzIGFwcGx5UGF0Y2hlcyxLIGFzIGNhc3REcmFmdCwkIGFzIGNhc3RJbW11dGFibGUsbG4gYXMgY3JlYXRlRHJhZnQsUiBhcyBjdXJyZW50LEogYXMgZW5hYmxlQWxsUGx1Z2lucyxGIGFzIGVuYWJsZUVTNSxDIGFzIGVuYWJsZU1hcFNldCxUIGFzIGVuYWJsZVBhdGNoZXMsZG4gYXMgZmluaXNoRHJhZnQsZCBhcyBmcmVlemUsTCBhcyBpbW1lcmFibGUsciBhcyBpc0RyYWZ0LHQgYXMgaXNEcmFmdGFibGUsSCBhcyBub3RoaW5nLGUgYXMgb3JpZ2luYWwsZm4gYXMgcHJvZHVjZSxjbiBhcyBwcm9kdWNlV2l0aFBhdGNoZXMsc24gYXMgc2V0QXV0b0ZyZWV6ZSx2biBhcyBzZXRVc2VQcm94aWVzfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWltbWVyLmVzbS5qcy5tYXBcbiIsIi8vIENhY2hlIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIEVyaWsgUmFzbXVzc2VuJ3MgYGxydS1tZW1vaXplYDpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9lcmlrcmFzL2xydS1tZW1vaXplXG52YXIgTk9UX0ZPVU5EID0gJ05PVF9GT1VORCc7XG5cbmZ1bmN0aW9uIGNyZWF0ZVNpbmdsZXRvbkNhY2hlKGVxdWFscykge1xuICB2YXIgZW50cnk7XG4gIHJldHVybiB7XG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgICBpZiAoZW50cnkgJiYgZXF1YWxzKGVudHJ5LmtleSwga2V5KSkge1xuICAgICAgICByZXR1cm4gZW50cnkudmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBOT1RfRk9VTkQ7XG4gICAgfSxcbiAgICBwdXQ6IGZ1bmN0aW9uIHB1dChrZXksIHZhbHVlKSB7XG4gICAgICBlbnRyeSA9IHtcbiAgICAgICAga2V5OiBrZXksXG4gICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgfTtcbiAgICB9LFxuICAgIGdldEVudHJpZXM6IGZ1bmN0aW9uIGdldEVudHJpZXMoKSB7XG4gICAgICByZXR1cm4gZW50cnkgPyBbZW50cnldIDogW107XG4gICAgfSxcbiAgICBjbGVhcjogZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgICBlbnRyeSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUxydUNhY2hlKG1heFNpemUsIGVxdWFscykge1xuICB2YXIgZW50cmllcyA9IFtdO1xuXG4gIGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICB2YXIgY2FjaGVJbmRleCA9IGVudHJpZXMuZmluZEluZGV4KGZ1bmN0aW9uIChlbnRyeSkge1xuICAgICAgcmV0dXJuIGVxdWFscyhrZXksIGVudHJ5LmtleSk7XG4gICAgfSk7IC8vIFdlIGZvdW5kIGEgY2FjaGVkIGVudHJ5XG5cbiAgICBpZiAoY2FjaGVJbmRleCA+IC0xKSB7XG4gICAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2NhY2hlSW5kZXhdOyAvLyBDYWNoZWQgZW50cnkgbm90IGF0IHRvcCBvZiBjYWNoZSwgbW92ZSBpdCB0byB0aGUgdG9wXG5cbiAgICAgIGlmIChjYWNoZUluZGV4ID4gMCkge1xuICAgICAgICBlbnRyaWVzLnNwbGljZShjYWNoZUluZGV4LCAxKTtcbiAgICAgICAgZW50cmllcy51bnNoaWZ0KGVudHJ5KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGVudHJ5LnZhbHVlO1xuICAgIH0gLy8gTm8gZW50cnkgZm91bmQgaW4gY2FjaGUsIHJldHVybiBzZW50aW5lbFxuXG5cbiAgICByZXR1cm4gTk9UX0ZPVU5EO1xuICB9XG5cbiAgZnVuY3Rpb24gcHV0KGtleSwgdmFsdWUpIHtcbiAgICBpZiAoZ2V0KGtleSkgPT09IE5PVF9GT1VORCkge1xuICAgICAgLy8gVE9ETyBJcyB1bnNoaWZ0IHNsb3c/XG4gICAgICBlbnRyaWVzLnVuc2hpZnQoe1xuICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgICB9KTtcblxuICAgICAgaWYgKGVudHJpZXMubGVuZ3RoID4gbWF4U2l6ZSkge1xuICAgICAgICBlbnRyaWVzLnBvcCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEVudHJpZXMoKSB7XG4gICAgcmV0dXJuIGVudHJpZXM7XG4gIH1cblxuICBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICBlbnRyaWVzID0gW107XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGdldDogZ2V0LFxuICAgIHB1dDogcHV0LFxuICAgIGdldEVudHJpZXM6IGdldEVudHJpZXMsXG4gICAgY2xlYXI6IGNsZWFyXG4gIH07XG59XG5cbmV4cG9ydCB2YXIgZGVmYXVsdEVxdWFsaXR5Q2hlY2sgPSBmdW5jdGlvbiBkZWZhdWx0RXF1YWxpdHlDaGVjayhhLCBiKSB7XG4gIHJldHVybiBhID09PSBiO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDYWNoZUtleUNvbXBhcmF0b3IoZXF1YWxpdHlDaGVjaykge1xuICByZXR1cm4gZnVuY3Rpb24gYXJlQXJndW1lbnRzU2hhbGxvd2x5RXF1YWwocHJldiwgbmV4dCkge1xuICAgIGlmIChwcmV2ID09PSBudWxsIHx8IG5leHQgPT09IG51bGwgfHwgcHJldi5sZW5ndGggIT09IG5leHQubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSAvLyBEbyB0aGlzIGluIGEgZm9yIGxvb3AgKGFuZCBub3QgYSBgZm9yRWFjaGAgb3IgYW4gYGV2ZXJ5YCkgc28gd2UgY2FuIGRldGVybWluZSBlcXVhbGl0eSBhcyBmYXN0IGFzIHBvc3NpYmxlLlxuXG5cbiAgICB2YXIgbGVuZ3RoID0gcHJldi5sZW5ndGg7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIWVxdWFsaXR5Q2hlY2socHJldltpXSwgbmV4dFtpXSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9O1xufVxuLy8gZGVmYXVsdE1lbW9pemUgbm93IHN1cHBvcnRzIGEgY29uZmlndXJhYmxlIGNhY2hlIHNpemUgd2l0aCBMUlUgYmVoYXZpb3IsXG4vLyBhbmQgb3B0aW9uYWwgY29tcGFyaXNvbiBvZiB0aGUgcmVzdWx0IHZhbHVlIHdpdGggZXhpc3RpbmcgdmFsdWVzXG5leHBvcnQgZnVuY3Rpb24gZGVmYXVsdE1lbW9pemUoZnVuYywgZXF1YWxpdHlDaGVja09yT3B0aW9ucykge1xuICB2YXIgcHJvdmlkZWRPcHRpb25zID0gdHlwZW9mIGVxdWFsaXR5Q2hlY2tPck9wdGlvbnMgPT09ICdvYmplY3QnID8gZXF1YWxpdHlDaGVja09yT3B0aW9ucyA6IHtcbiAgICBlcXVhbGl0eUNoZWNrOiBlcXVhbGl0eUNoZWNrT3JPcHRpb25zXG4gIH07XG4gIHZhciBfcHJvdmlkZWRPcHRpb25zJGVxdWEgPSBwcm92aWRlZE9wdGlvbnMuZXF1YWxpdHlDaGVjayxcbiAgICAgIGVxdWFsaXR5Q2hlY2sgPSBfcHJvdmlkZWRPcHRpb25zJGVxdWEgPT09IHZvaWQgMCA/IGRlZmF1bHRFcXVhbGl0eUNoZWNrIDogX3Byb3ZpZGVkT3B0aW9ucyRlcXVhLFxuICAgICAgX3Byb3ZpZGVkT3B0aW9ucyRtYXhTID0gcHJvdmlkZWRPcHRpb25zLm1heFNpemUsXG4gICAgICBtYXhTaXplID0gX3Byb3ZpZGVkT3B0aW9ucyRtYXhTID09PSB2b2lkIDAgPyAxIDogX3Byb3ZpZGVkT3B0aW9ucyRtYXhTLFxuICAgICAgcmVzdWx0RXF1YWxpdHlDaGVjayA9IHByb3ZpZGVkT3B0aW9ucy5yZXN1bHRFcXVhbGl0eUNoZWNrO1xuICB2YXIgY29tcGFyYXRvciA9IGNyZWF0ZUNhY2hlS2V5Q29tcGFyYXRvcihlcXVhbGl0eUNoZWNrKTtcbiAgdmFyIGNhY2hlID0gbWF4U2l6ZSA9PT0gMSA/IGNyZWF0ZVNpbmdsZXRvbkNhY2hlKGNvbXBhcmF0b3IpIDogY3JlYXRlTHJ1Q2FjaGUobWF4U2l6ZSwgY29tcGFyYXRvcik7IC8vIHdlIHJlZmVyZW5jZSBhcmd1bWVudHMgaW5zdGVhZCBvZiBzcHJlYWRpbmcgdGhlbSBmb3IgcGVyZm9ybWFuY2UgcmVhc29uc1xuXG4gIGZ1bmN0aW9uIG1lbW9pemVkKCkge1xuICAgIHZhciB2YWx1ZSA9IGNhY2hlLmdldChhcmd1bWVudHMpO1xuXG4gICAgaWYgKHZhbHVlID09PSBOT1RfRk9VTkQpIHtcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHZhbHVlID0gZnVuYy5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuXG4gICAgICBpZiAocmVzdWx0RXF1YWxpdHlDaGVjaykge1xuICAgICAgICB2YXIgZW50cmllcyA9IGNhY2hlLmdldEVudHJpZXMoKTtcbiAgICAgICAgdmFyIG1hdGNoaW5nRW50cnkgPSBlbnRyaWVzLmZpbmQoZnVuY3Rpb24gKGVudHJ5KSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdEVxdWFsaXR5Q2hlY2soZW50cnkudmFsdWUsIHZhbHVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKG1hdGNoaW5nRW50cnkpIHtcbiAgICAgICAgICB2YWx1ZSA9IG1hdGNoaW5nRW50cnkudmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY2FjaGUucHV0KGFyZ3VtZW50cywgdmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIG1lbW9pemVkLmNsZWFyQ2FjaGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGNhY2hlLmNsZWFyKCk7XG4gIH07XG5cbiAgcmV0dXJuIG1lbW9pemVkO1xufSIsImltcG9ydCB7IGRlZmF1bHRNZW1vaXplLCBkZWZhdWx0RXF1YWxpdHlDaGVjayB9IGZyb20gJy4vZGVmYXVsdE1lbW9pemUnO1xuZXhwb3J0IHsgZGVmYXVsdE1lbW9pemUsIGRlZmF1bHRFcXVhbGl0eUNoZWNrIH07XG5cbmZ1bmN0aW9uIGdldERlcGVuZGVuY2llcyhmdW5jcykge1xuICB2YXIgZGVwZW5kZW5jaWVzID0gQXJyYXkuaXNBcnJheShmdW5jc1swXSkgPyBmdW5jc1swXSA6IGZ1bmNzO1xuXG4gIGlmICghZGVwZW5kZW5jaWVzLmV2ZXJ5KGZ1bmN0aW9uIChkZXApIHtcbiAgICByZXR1cm4gdHlwZW9mIGRlcCA9PT0gJ2Z1bmN0aW9uJztcbiAgfSkpIHtcbiAgICB2YXIgZGVwZW5kZW5jeVR5cGVzID0gZGVwZW5kZW5jaWVzLm1hcChmdW5jdGlvbiAoZGVwKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIGRlcCA9PT0gJ2Z1bmN0aW9uJyA/IFwiZnVuY3Rpb24gXCIgKyAoZGVwLm5hbWUgfHwgJ3VubmFtZWQnKSArIFwiKClcIiA6IHR5cGVvZiBkZXA7XG4gICAgfSkuam9pbignLCAnKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJjcmVhdGVTZWxlY3RvciBleHBlY3RzIGFsbCBpbnB1dC1zZWxlY3RvcnMgdG8gYmUgZnVuY3Rpb25zLCBidXQgcmVjZWl2ZWQgdGhlIGZvbGxvd2luZyB0eXBlczogW1wiICsgZGVwZW5kZW5jeVR5cGVzICsgXCJdXCIpO1xuICB9XG5cbiAgcmV0dXJuIGRlcGVuZGVuY2llcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNlbGVjdG9yQ3JlYXRvcihtZW1vaXplKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBtZW1vaXplT3B0aW9uc0Zyb21BcmdzID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBtZW1vaXplT3B0aW9uc0Zyb21BcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIHZhciBjcmVhdGVTZWxlY3RvciA9IGZ1bmN0aW9uIGNyZWF0ZVNlbGVjdG9yKCkge1xuICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgZnVuY3MgPSBuZXcgQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgIGZ1bmNzW19rZXkyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgfVxuXG4gICAgdmFyIF9yZWNvbXB1dGF0aW9ucyA9IDA7XG5cbiAgICB2YXIgX2xhc3RSZXN1bHQ7IC8vIER1ZSB0byB0aGUgaW50cmljYWNpZXMgb2YgcmVzdCBwYXJhbXMsIHdlIGNhbid0IGRvIGFuIG9wdGlvbmFsIGFyZyBhZnRlciBgLi4uZnVuY3NgLlxuICAgIC8vIFNvLCBzdGFydCBieSBkZWNsYXJpbmcgdGhlIGRlZmF1bHQgdmFsdWUgaGVyZS5cbiAgICAvLyAoQW5kIHllcywgdGhlIHdvcmRzICdtZW1vaXplJyBhbmQgJ29wdGlvbnMnIGFwcGVhciB0b28gbWFueSB0aW1lcyBpbiB0aGlzIG5leHQgc2VxdWVuY2UuKVxuXG5cbiAgICB2YXIgZGlyZWN0bHlQYXNzZWRPcHRpb25zID0ge1xuICAgICAgbWVtb2l6ZU9wdGlvbnM6IHVuZGVmaW5lZFxuICAgIH07IC8vIE5vcm1hbGx5LCB0aGUgcmVzdWx0IGZ1bmMgb3IgXCJvdXRwdXQgc2VsZWN0b3JcIiBpcyB0aGUgbGFzdCBhcmdcblxuICAgIHZhciByZXN1bHRGdW5jID0gZnVuY3MucG9wKCk7IC8vIElmIHRoZSByZXN1bHQgZnVuYyBpcyBhY3R1YWxseSBhbiBfb2JqZWN0XywgYXNzdW1lIGl0J3Mgb3VyIG9wdGlvbnMgb2JqZWN0XG5cbiAgICBpZiAodHlwZW9mIHJlc3VsdEZ1bmMgPT09ICdvYmplY3QnKSB7XG4gICAgICBkaXJlY3RseVBhc3NlZE9wdGlvbnMgPSByZXN1bHRGdW5jOyAvLyBhbmQgcG9wIHRoZSByZWFsIHJlc3VsdCBmdW5jIG9mZlxuXG4gICAgICByZXN1bHRGdW5jID0gZnVuY3MucG9wKCk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiByZXN1bHRGdW5jICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJjcmVhdGVTZWxlY3RvciBleHBlY3RzIGFuIG91dHB1dCBmdW5jdGlvbiBhZnRlciB0aGUgaW5wdXRzLCBidXQgcmVjZWl2ZWQ6IFtcIiArIHR5cGVvZiByZXN1bHRGdW5jICsgXCJdXCIpO1xuICAgIH0gLy8gRGV0ZXJtaW5lIHdoaWNoIHNldCBvZiBvcHRpb25zIHdlJ3JlIHVzaW5nLiBQcmVmZXIgb3B0aW9ucyBwYXNzZWQgZGlyZWN0bHksXG4gICAgLy8gYnV0IGZhbGwgYmFjayB0byBvcHRpb25zIGdpdmVuIHRvIGNyZWF0ZVNlbGVjdG9yQ3JlYXRvci5cblxuXG4gICAgdmFyIF9kaXJlY3RseVBhc3NlZE9wdGlvbiA9IGRpcmVjdGx5UGFzc2VkT3B0aW9ucyxcbiAgICAgICAgX2RpcmVjdGx5UGFzc2VkT3B0aW9uMiA9IF9kaXJlY3RseVBhc3NlZE9wdGlvbi5tZW1vaXplT3B0aW9ucyxcbiAgICAgICAgbWVtb2l6ZU9wdGlvbnMgPSBfZGlyZWN0bHlQYXNzZWRPcHRpb24yID09PSB2b2lkIDAgPyBtZW1vaXplT3B0aW9uc0Zyb21BcmdzIDogX2RpcmVjdGx5UGFzc2VkT3B0aW9uMjsgLy8gU2ltcGxpZnlpbmcgYXNzdW1wdGlvbjogaXQncyB1bmxpa2VseSB0aGF0IHRoZSBmaXJzdCBvcHRpb25zIGFyZyBvZiB0aGUgcHJvdmlkZWQgbWVtb2l6ZXJcbiAgICAvLyBpcyBhbiBhcnJheS4gSW4gbW9zdCBsaWJzIEkndmUgbG9va2VkIGF0LCBpdCdzIGFuIGVxdWFsaXR5IGZ1bmN0aW9uIG9yIG9wdGlvbnMgb2JqZWN0LlxuICAgIC8vIEJhc2VkIG9uIHRoYXQsIGlmIGBtZW1vaXplT3B0aW9uc2AgX2lzXyBhbiBhcnJheSwgd2UgYXNzdW1lIGl0J3MgYSBmdWxsXG4gICAgLy8gdXNlci1wcm92aWRlZCBhcnJheSBvZiBvcHRpb25zLiBPdGhlcndpc2UsIGl0IG11c3QgYmUganVzdCB0aGUgX2ZpcnN0XyBhcmcsIGFuZCBzb1xuICAgIC8vIHdlIHdyYXAgaXQgaW4gYW4gYXJyYXkgc28gd2UgY2FuIGFwcGx5IGl0LlxuXG4gICAgdmFyIGZpbmFsTWVtb2l6ZU9wdGlvbnMgPSBBcnJheS5pc0FycmF5KG1lbW9pemVPcHRpb25zKSA/IG1lbW9pemVPcHRpb25zIDogW21lbW9pemVPcHRpb25zXTtcbiAgICB2YXIgZGVwZW5kZW5jaWVzID0gZ2V0RGVwZW5kZW5jaWVzKGZ1bmNzKTtcbiAgICB2YXIgbWVtb2l6ZWRSZXN1bHRGdW5jID0gbWVtb2l6ZS5hcHBseSh2b2lkIDAsIFtmdW5jdGlvbiByZWNvbXB1dGF0aW9uV3JhcHBlcigpIHtcbiAgICAgIF9yZWNvbXB1dGF0aW9ucysrOyAvLyBhcHBseSBhcmd1bWVudHMgaW5zdGVhZCBvZiBzcHJlYWRpbmcgZm9yIHBlcmZvcm1hbmNlLlxuXG4gICAgICByZXR1cm4gcmVzdWx0RnVuYy5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIH1dLmNvbmNhdChmaW5hbE1lbW9pemVPcHRpb25zKSk7IC8vIElmIGEgc2VsZWN0b3IgaXMgY2FsbGVkIHdpdGggdGhlIGV4YWN0IHNhbWUgYXJndW1lbnRzIHdlIGRvbid0IG5lZWQgdG8gdHJhdmVyc2Ugb3VyIGRlcGVuZGVuY2llcyBhZ2Fpbi5cblxuICAgIHZhciBzZWxlY3RvciA9IG1lbW9pemUoZnVuY3Rpb24gZGVwZW5kZW5jaWVzQ2hlY2tlcigpIHtcbiAgICAgIHZhciBwYXJhbXMgPSBbXTtcbiAgICAgIHZhciBsZW5ndGggPSBkZXBlbmRlbmNpZXMubGVuZ3RoO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIC8vIGFwcGx5IGFyZ3VtZW50cyBpbnN0ZWFkIG9mIHNwcmVhZGluZyBhbmQgbXV0YXRlIGEgbG9jYWwgbGlzdCBvZiBwYXJhbXMgZm9yIHBlcmZvcm1hbmNlLlxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHBhcmFtcy5wdXNoKGRlcGVuZGVuY2llc1tpXS5hcHBseShudWxsLCBhcmd1bWVudHMpKTtcbiAgICAgIH0gLy8gYXBwbHkgYXJndW1lbnRzIGluc3RlYWQgb2Ygc3ByZWFkaW5nIGZvciBwZXJmb3JtYW5jZS5cblxuXG4gICAgICBfbGFzdFJlc3VsdCA9IG1lbW9pemVkUmVzdWx0RnVuYy5hcHBseShudWxsLCBwYXJhbXMpO1xuICAgICAgcmV0dXJuIF9sYXN0UmVzdWx0O1xuICAgIH0pO1xuICAgIE9iamVjdC5hc3NpZ24oc2VsZWN0b3IsIHtcbiAgICAgIHJlc3VsdEZ1bmM6IHJlc3VsdEZ1bmMsXG4gICAgICBtZW1vaXplZFJlc3VsdEZ1bmM6IG1lbW9pemVkUmVzdWx0RnVuYyxcbiAgICAgIGRlcGVuZGVuY2llczogZGVwZW5kZW5jaWVzLFxuICAgICAgbGFzdFJlc3VsdDogZnVuY3Rpb24gbGFzdFJlc3VsdCgpIHtcbiAgICAgICAgcmV0dXJuIF9sYXN0UmVzdWx0O1xuICAgICAgfSxcbiAgICAgIHJlY29tcHV0YXRpb25zOiBmdW5jdGlvbiByZWNvbXB1dGF0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIF9yZWNvbXB1dGF0aW9ucztcbiAgICAgIH0sXG4gICAgICByZXNldFJlY29tcHV0YXRpb25zOiBmdW5jdGlvbiByZXNldFJlY29tcHV0YXRpb25zKCkge1xuICAgICAgICByZXR1cm4gX3JlY29tcHV0YXRpb25zID0gMDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gc2VsZWN0b3I7XG4gIH07IC8vIEB0cy1pZ25vcmVcblxuXG4gIHJldHVybiBjcmVhdGVTZWxlY3Rvcjtcbn1cbmV4cG9ydCB2YXIgY3JlYXRlU2VsZWN0b3IgPSAvKiAjX19QVVJFX18gKi9jcmVhdGVTZWxlY3RvckNyZWF0b3IoZGVmYXVsdE1lbW9pemUpO1xuLy8gTWFudWFsIGRlZmluaXRpb24gb2Ygc3RhdGUgYW5kIG91dHB1dCBhcmd1bWVudHNcbmV4cG9ydCB2YXIgY3JlYXRlU3RydWN0dXJlZFNlbGVjdG9yID0gZnVuY3Rpb24gY3JlYXRlU3RydWN0dXJlZFNlbGVjdG9yKHNlbGVjdG9ycywgc2VsZWN0b3JDcmVhdG9yKSB7XG4gIGlmIChzZWxlY3RvckNyZWF0b3IgPT09IHZvaWQgMCkge1xuICAgIHNlbGVjdG9yQ3JlYXRvciA9IGNyZWF0ZVNlbGVjdG9yO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBzZWxlY3RvcnMgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjcmVhdGVTdHJ1Y3R1cmVkU2VsZWN0b3IgZXhwZWN0cyBmaXJzdCBhcmd1bWVudCB0byBiZSBhbiBvYmplY3QgJyArIChcIndoZXJlIGVhY2ggcHJvcGVydHkgaXMgYSBzZWxlY3RvciwgaW5zdGVhZCByZWNlaXZlZCBhIFwiICsgdHlwZW9mIHNlbGVjdG9ycykpO1xuICB9XG5cbiAgdmFyIG9iamVjdEtleXMgPSBPYmplY3Qua2V5cyhzZWxlY3RvcnMpO1xuICB2YXIgcmVzdWx0U2VsZWN0b3IgPSBzZWxlY3RvckNyZWF0b3IoIC8vIEB0cy1pZ25vcmVcbiAgb2JqZWN0S2V5cy5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiBzZWxlY3RvcnNba2V5XTtcbiAgfSksIGZ1bmN0aW9uICgpIHtcbiAgICBmb3IgKHZhciBfbGVuMyA9IGFyZ3VtZW50cy5sZW5ndGgsIHZhbHVlcyA9IG5ldyBBcnJheShfbGVuMyksIF9rZXkzID0gMDsgX2tleTMgPCBfbGVuMzsgX2tleTMrKykge1xuICAgICAgdmFsdWVzW19rZXkzXSA9IGFyZ3VtZW50c1tfa2V5M107XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlcy5yZWR1Y2UoZnVuY3Rpb24gKGNvbXBvc2l0aW9uLCB2YWx1ZSwgaW5kZXgpIHtcbiAgICAgIGNvbXBvc2l0aW9uW29iamVjdEtleXNbaW5kZXhdXSA9IHZhbHVlO1xuICAgICAgcmV0dXJuIGNvbXBvc2l0aW9uO1xuICAgIH0sIHt9KTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHRTZWxlY3Rvcjtcbn07IiwiLyoqIEEgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIGEgcG90ZW50aWFsIFwiZXh0cmEgYXJndW1lbnRcIiB2YWx1ZSB0byBiZSBpbmplY3RlZCBsYXRlcixcclxuICogYW5kIHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIHRodW5rIG1pZGRsZXdhcmUgdGhhdCB1c2VzIHRoYXQgdmFsdWVcclxuICovXG5mdW5jdGlvbiBjcmVhdGVUaHVua01pZGRsZXdhcmUoZXh0cmFBcmd1bWVudCkge1xuICAvLyBTdGFuZGFyZCBSZWR1eCBtaWRkbGV3YXJlIGRlZmluaXRpb24gcGF0dGVybjpcbiAgLy8gU2VlOiBodHRwczovL3JlZHV4LmpzLm9yZy90dXRvcmlhbHMvZnVuZGFtZW50YWxzL3BhcnQtNC1zdG9yZSN3cml0aW5nLWN1c3RvbS1taWRkbGV3YXJlXG4gIHZhciBtaWRkbGV3YXJlID0gZnVuY3Rpb24gbWlkZGxld2FyZShfcmVmKSB7XG4gICAgdmFyIGRpc3BhdGNoID0gX3JlZi5kaXNwYXRjaCxcbiAgICAgICAgZ2V0U3RhdGUgPSBfcmVmLmdldFN0YXRlO1xuICAgIHJldHVybiBmdW5jdGlvbiAobmV4dCkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChhY3Rpb24pIHtcbiAgICAgICAgLy8gVGhlIHRodW5rIG1pZGRsZXdhcmUgbG9va3MgZm9yIGFueSBmdW5jdGlvbnMgdGhhdCB3ZXJlIHBhc3NlZCB0byBgc3RvcmUuZGlzcGF0Y2hgLlxuICAgICAgICAvLyBJZiB0aGlzIFwiYWN0aW9uXCIgaXMgcmVhbGx5IGEgZnVuY3Rpb24sIGNhbGwgaXQgYW5kIHJldHVybiB0aGUgcmVzdWx0LlxuICAgICAgICBpZiAodHlwZW9mIGFjdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIC8vIEluamVjdCB0aGUgc3RvcmUncyBgZGlzcGF0Y2hgIGFuZCBgZ2V0U3RhdGVgIG1ldGhvZHMsIGFzIHdlbGwgYXMgYW55IFwiZXh0cmEgYXJnXCJcbiAgICAgICAgICByZXR1cm4gYWN0aW9uKGRpc3BhdGNoLCBnZXRTdGF0ZSwgZXh0cmFBcmd1bWVudCk7XG4gICAgICAgIH0gLy8gT3RoZXJ3aXNlLCBwYXNzIHRoZSBhY3Rpb24gZG93biB0aGUgbWlkZGxld2FyZSBjaGFpbiBhcyB1c3VhbFxuXG5cbiAgICAgICAgcmV0dXJuIG5leHQoYWN0aW9uKTtcbiAgICAgIH07XG4gICAgfTtcbiAgfTtcblxuICByZXR1cm4gbWlkZGxld2FyZTtcbn1cblxudmFyIHRodW5rID0gY3JlYXRlVGh1bmtNaWRkbGV3YXJlKCk7IC8vIEF0dGFjaCB0aGUgZmFjdG9yeSBmdW5jdGlvbiBzbyB1c2VycyBjYW4gY3JlYXRlIGEgY3VzdG9taXplZCB2ZXJzaW9uXG4vLyB3aXRoIHdoYXRldmVyIFwiZXh0cmEgYXJnXCIgdGhleSB3YW50IHRvIGluamVjdCBpbnRvIHRoZWlyIHRodW5rc1xuXG50aHVuay53aXRoRXh0cmFBcmd1bWVudCA9IGNyZWF0ZVRodW5rTWlkZGxld2FyZTtcbmV4cG9ydCBkZWZhdWx0IHRodW5rOyIsInZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcclxuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XHJcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcclxuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XHJcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XHJcbiAgICB9O1xyXG59KSgpO1xyXG52YXIgX19nZW5lcmF0b3IgPSAodGhpcyAmJiB0aGlzLl9fZ2VuZXJhdG9yKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgYm9keSkge1xyXG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcclxuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XHJcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xyXG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xyXG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XHJcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcclxuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xyXG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XHJcbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XHJcbiAgICB9XHJcbn07XHJcbnZhciBfX3NwcmVhZEFycmF5ID0gKHRoaXMgJiYgdGhpcy5fX3NwcmVhZEFycmF5KSB8fCBmdW5jdGlvbiAodG8sIGZyb20pIHtcclxuICAgIGZvciAodmFyIGkgPSAwLCBpbCA9IGZyb20ubGVuZ3RoLCBqID0gdG8ubGVuZ3RoOyBpIDwgaWw7IGkrKywgaisrKVxyXG4gICAgICAgIHRvW2pdID0gZnJvbVtpXTtcclxuICAgIHJldHVybiB0bztcclxufTtcclxudmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcclxudmFyIF9fZGVmUHJvcHMgPSBPYmplY3QuZGVmaW5lUHJvcGVydGllcztcclxudmFyIF9fZ2V0T3duUHJvcERlc2NzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM7XHJcbnZhciBfX2dldE93blByb3BTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcclxudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XHJcbnZhciBfX3Byb3BJc0VudW0gPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xyXG52YXIgX19kZWZOb3JtYWxQcm9wID0gZnVuY3Rpb24gKG9iaiwga2V5LCB2YWx1ZSkgeyByZXR1cm4ga2V5IGluIG9iaiA/IF9fZGVmUHJvcChvYmosIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSkgOiBvYmpba2V5XSA9IHZhbHVlOyB9O1xyXG52YXIgX19zcHJlYWRWYWx1ZXMgPSBmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgZm9yICh2YXIgcHJvcCBpbiBiIHx8IChiID0ge30pKVxyXG4gICAgICAgIGlmIChfX2hhc093blByb3AuY2FsbChiLCBwcm9wKSlcclxuICAgICAgICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xyXG4gICAgaWYgKF9fZ2V0T3duUHJvcFN5bWJvbHMpXHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYyA9IF9fZ2V0T3duUHJvcFN5bWJvbHMoYik7IF9pIDwgX2MubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBwcm9wID0gX2NbX2ldO1xyXG4gICAgICAgICAgICBpZiAoX19wcm9wSXNFbnVtLmNhbGwoYiwgcHJvcCkpXHJcbiAgICAgICAgICAgICAgICBfX2RlZk5vcm1hbFByb3AoYSwgcHJvcCwgYltwcm9wXSk7XHJcbiAgICAgICAgfVxyXG4gICAgcmV0dXJuIGE7XHJcbn07XHJcbnZhciBfX3NwcmVhZFByb3BzID0gZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIF9fZGVmUHJvcHMoYSwgX19nZXRPd25Qcm9wRGVzY3MoYikpOyB9O1xyXG52YXIgX19hc3luYyA9IGZ1bmN0aW9uIChfX3RoaXMsIF9fYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgdmFyIGZ1bGZpbGxlZCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICByZWplY3QoZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHZhciByZWplY3RlZCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgc3RlcChnZW5lcmF0b3IudGhyb3codmFsdWUpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICB2YXIgc3RlcCA9IGZ1bmN0aW9uICh4KSB7IHJldHVybiB4LmRvbmUgPyByZXNvbHZlKHgudmFsdWUpIDogUHJvbWlzZS5yZXNvbHZlKHgudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH07XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KF9fdGhpcywgX19hcmd1bWVudHMpKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn07XHJcbi8vIHNyYy9pbmRleC50c1xyXG5pbXBvcnQgeyBlbmFibGVFUzUgfSBmcm9tIFwiaW1tZXJcIjtcclxuZXhwb3J0ICogZnJvbSBcInJlZHV4XCI7XHJcbmltcG9ydCB7IGRlZmF1bHQgYXMgZGVmYXVsdDIsIGN1cnJlbnQgYXMgY3VycmVudDIsIGZyZWV6ZSwgb3JpZ2luYWwsIGlzRHJhZnQgYXMgaXNEcmFmdDQgfSBmcm9tIFwiaW1tZXJcIjtcclxuaW1wb3J0IHsgY3JlYXRlU2VsZWN0b3IgYXMgY3JlYXRlU2VsZWN0b3IyIH0gZnJvbSBcInJlc2VsZWN0XCI7XHJcbi8vIHNyYy9jcmVhdGVEcmFmdFNhZmVTZWxlY3Rvci50c1xyXG5pbXBvcnQgeyBjdXJyZW50LCBpc0RyYWZ0IH0gZnJvbSBcImltbWVyXCI7XHJcbmltcG9ydCB7IGNyZWF0ZVNlbGVjdG9yIH0gZnJvbSBcInJlc2VsZWN0XCI7XHJcbnZhciBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvciA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBhcmdzID0gW107XHJcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcclxuICAgIH1cclxuICAgIHZhciBzZWxlY3RvciA9IGNyZWF0ZVNlbGVjdG9yLmFwcGx5KHZvaWQgMCwgYXJncyk7XHJcbiAgICB2YXIgd3JhcHBlZFNlbGVjdG9yID0gZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgdmFyIHJlc3QgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBfaSA9IDE7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICByZXN0W19pIC0gMV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc2VsZWN0b3IuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtpc0RyYWZ0KHZhbHVlKSA/IGN1cnJlbnQodmFsdWUpIDogdmFsdWVdLCByZXN0KSk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIHdyYXBwZWRTZWxlY3RvcjtcclxufTtcclxuLy8gc3JjL2NvbmZpZ3VyZVN0b3JlLnRzXHJcbmltcG9ydCB7IGNyZWF0ZVN0b3JlLCBjb21wb3NlIGFzIGNvbXBvc2UyLCBhcHBseU1pZGRsZXdhcmUsIGNvbWJpbmVSZWR1Y2VycyB9IGZyb20gXCJyZWR1eFwiO1xyXG4vLyBzcmMvZGV2dG9vbHNFeHRlbnNpb24udHNcclxuaW1wb3J0IHsgY29tcG9zZSB9IGZyb20gXCJyZWR1eFwiO1xyXG52YXIgY29tcG9zZVdpdGhEZXZUb29scyA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgd2luZG93Ll9fUkVEVVhfREVWVE9PTFNfRVhURU5TSU9OX0NPTVBPU0VfXyA/IHdpbmRvdy5fX1JFRFVYX0RFVlRPT0xTX0VYVEVOU0lPTl9DT01QT1NFX18gOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMClcclxuICAgICAgICByZXR1cm4gdm9pZCAwO1xyXG4gICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbMF0gPT09IFwib2JqZWN0XCIpXHJcbiAgICAgICAgcmV0dXJuIGNvbXBvc2U7XHJcbiAgICByZXR1cm4gY29tcG9zZS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xyXG59O1xyXG52YXIgZGV2VG9vbHNFbmhhbmNlciA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgd2luZG93Ll9fUkVEVVhfREVWVE9PTFNfRVhURU5TSU9OX18gPyB3aW5kb3cuX19SRURVWF9ERVZUT09MU19FWFRFTlNJT05fXyA6IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAobm9vcDIpIHtcclxuICAgICAgICByZXR1cm4gbm9vcDI7XHJcbiAgICB9O1xyXG59O1xyXG4vLyBzcmMvaXNQbGFpbk9iamVjdC50c1xyXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IHZhbHVlID09PSBudWxsKVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIHZhciBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSk7XHJcbiAgICBpZiAocHJvdG8gPT09IG51bGwpXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB2YXIgYmFzZVByb3RvID0gcHJvdG87XHJcbiAgICB3aGlsZSAoT2JqZWN0LmdldFByb3RvdHlwZU9mKGJhc2VQcm90bykgIT09IG51bGwpIHtcclxuICAgICAgICBiYXNlUHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYmFzZVByb3RvKTtcclxuICAgIH1cclxuICAgIHJldHVybiBwcm90byA9PT0gYmFzZVByb3RvO1xyXG59XHJcbi8vIHNyYy9nZXREZWZhdWx0TWlkZGxld2FyZS50c1xyXG5pbXBvcnQgdGh1bmtNaWRkbGV3YXJlIGZyb20gXCJyZWR1eC10aHVua1wiO1xyXG4vLyBzcmMvdXRpbHMudHNcclxuaW1wb3J0IGNyZWF0ZU5leHRTdGF0ZSwgeyBpc0RyYWZ0YWJsZSB9IGZyb20gXCJpbW1lclwiO1xyXG5mdW5jdGlvbiBnZXRUaW1lTWVhc3VyZVV0aWxzKG1heERlbGF5LCBmbk5hbWUpIHtcclxuICAgIHZhciBlbGFwc2VkID0gMDtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbWVhc3VyZVRpbWU6IGZ1bmN0aW9uIChmbikge1xyXG4gICAgICAgICAgICB2YXIgc3RhcnRlZCA9IERhdGUubm93KCk7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZm4oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgICAgIHZhciBmaW5pc2hlZCA9IERhdGUubm93KCk7XHJcbiAgICAgICAgICAgICAgICBlbGFwc2VkICs9IGZpbmlzaGVkIC0gc3RhcnRlZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgd2FybklmRXhjZWVkZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKGVsYXBzZWQgPiBtYXhEZWxheSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGZuTmFtZSArIFwiIHRvb2sgXCIgKyBlbGFwc2VkICsgXCJtcywgd2hpY2ggaXMgbW9yZSB0aGFuIHRoZSB3YXJuaW5nIHRocmVzaG9sZCBvZiBcIiArIG1heERlbGF5ICsgXCJtcy4gXFxuSWYgeW91ciBzdGF0ZSBvciBhY3Rpb25zIGFyZSB2ZXJ5IGxhcmdlLCB5b3UgbWF5IHdhbnQgdG8gZGlzYWJsZSB0aGUgbWlkZGxld2FyZSBhcyBpdCBtaWdodCBjYXVzZSB0b28gbXVjaCBvZiBhIHNsb3dkb3duIGluIGRldmVsb3BtZW50IG1vZGUuIFNlZSBodHRwczovL3JlZHV4LXRvb2xraXQuanMub3JnL2FwaS9nZXREZWZhdWx0TWlkZGxld2FyZSBmb3IgaW5zdHJ1Y3Rpb25zLlxcbkl0IGlzIGRpc2FibGVkIGluIHByb2R1Y3Rpb24gYnVpbGRzLCBzbyB5b3UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCB0aGF0LlwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxudmFyIE1pZGRsZXdhcmVBcnJheSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcclxuICAgIF9fZXh0ZW5kcyhNaWRkbGV3YXJlQXJyYXksIF9zdXBlcik7XHJcbiAgICBmdW5jdGlvbiBNaWRkbGV3YXJlQXJyYXkoKSB7XHJcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5hcHBseSh0aGlzLCBhcmdzKSB8fCB0aGlzO1xyXG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihfdGhpcywgTWlkZGxld2FyZUFycmF5LnByb3RvdHlwZSk7XHJcbiAgICAgICAgcmV0dXJuIF90aGlzO1xyXG4gICAgfVxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1pZGRsZXdhcmVBcnJheSwgU3ltYm9sLnNwZWNpZXMsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIE1pZGRsZXdhcmVBcnJheTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgICBNaWRkbGV3YXJlQXJyYXkucHJvdG90eXBlLmNvbmNhdCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgYXJyID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgYXJyW19pXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLmNvbmNhdC5hcHBseSh0aGlzLCBhcnIpO1xyXG4gICAgfTtcclxuICAgIE1pZGRsZXdhcmVBcnJheS5wcm90b3R5cGUucHJlcGVuZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgYXJyID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgYXJyW19pXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChhcnIubGVuZ3RoID09PSAxICYmIEFycmF5LmlzQXJyYXkoYXJyWzBdKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IChNaWRkbGV3YXJlQXJyYXkuYmluZC5hcHBseShNaWRkbGV3YXJlQXJyYXksIF9fc3ByZWFkQXJyYXkoW3ZvaWQgMF0sIGFyclswXS5jb25jYXQodGhpcykpKSkoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ldyAoTWlkZGxld2FyZUFycmF5LmJpbmQuYXBwbHkoTWlkZGxld2FyZUFycmF5LCBfX3NwcmVhZEFycmF5KFt2b2lkIDBdLCBhcnIuY29uY2F0KHRoaXMpKSkpKCk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIE1pZGRsZXdhcmVBcnJheTtcclxufShBcnJheSkpO1xyXG5mdW5jdGlvbiBmcmVlemVEcmFmdGFibGUodmFsKSB7XHJcbiAgICByZXR1cm4gaXNEcmFmdGFibGUodmFsKSA/IGNyZWF0ZU5leHRTdGF0ZSh2YWwsIGZ1bmN0aW9uICgpIHtcclxuICAgIH0pIDogdmFsO1xyXG59XHJcbi8vIHNyYy9pbW11dGFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUudHNcclxudmFyIGlzUHJvZHVjdGlvbiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIjtcclxudmFyIHByZWZpeCA9IFwiSW52YXJpYW50IGZhaWxlZFwiO1xyXG5mdW5jdGlvbiBpbnZhcmlhbnQoY29uZGl0aW9uLCBtZXNzYWdlKSB7XHJcbiAgICBpZiAoY29uZGl0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKGlzUHJvZHVjdGlvbikge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihwcmVmaXgpO1xyXG4gICAgfVxyXG4gICAgdGhyb3cgbmV3IEVycm9yKHByZWZpeCArIFwiOiBcIiArIChtZXNzYWdlIHx8IFwiXCIpKTtcclxufVxyXG5mdW5jdGlvbiBzdHJpbmdpZnkob2JqLCBzZXJpYWxpemVyLCBpbmRlbnQsIGRlY3ljbGVyKSB7XHJcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqLCBnZXRTZXJpYWxpemUoc2VyaWFsaXplciwgZGVjeWNsZXIpLCBpbmRlbnQpO1xyXG59XHJcbmZ1bmN0aW9uIGdldFNlcmlhbGl6ZShzZXJpYWxpemVyLCBkZWN5Y2xlcikge1xyXG4gICAgdmFyIHN0YWNrID0gW10sIGtleXMgPSBbXTtcclxuICAgIGlmICghZGVjeWNsZXIpXHJcbiAgICAgICAgZGVjeWNsZXIgPSBmdW5jdGlvbiAoXywgdmFsdWUpIHtcclxuICAgICAgICAgICAgaWYgKHN0YWNrWzBdID09PSB2YWx1ZSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBcIltDaXJjdWxhciB+XVwiO1xyXG4gICAgICAgICAgICByZXR1cm4gXCJbQ2lyY3VsYXIgfi5cIiArIGtleXMuc2xpY2UoMCwgc3RhY2suaW5kZXhPZih2YWx1ZSkpLmpvaW4oXCIuXCIpICsgXCJdXCI7XHJcbiAgICAgICAgfTtcclxuICAgIHJldHVybiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xyXG4gICAgICAgIGlmIChzdGFjay5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHZhciB0aGlzUG9zID0gc3RhY2suaW5kZXhPZih0aGlzKTtcclxuICAgICAgICAgICAgfnRoaXNQb3MgPyBzdGFjay5zcGxpY2UodGhpc1BvcyArIDEpIDogc3RhY2sucHVzaCh0aGlzKTtcclxuICAgICAgICAgICAgfnRoaXNQb3MgPyBrZXlzLnNwbGljZSh0aGlzUG9zLCBJbmZpbml0eSwga2V5KSA6IGtleXMucHVzaChrZXkpO1xyXG4gICAgICAgICAgICBpZiAofnN0YWNrLmluZGV4T2YodmFsdWUpKVxyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBkZWN5Y2xlci5jYWxsKHRoaXMsIGtleSwgdmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHN0YWNrLnB1c2godmFsdWUpO1xyXG4gICAgICAgIHJldHVybiBzZXJpYWxpemVyID09IG51bGwgPyB2YWx1ZSA6IHNlcmlhbGl6ZXIuY2FsbCh0aGlzLCBrZXksIHZhbHVlKTtcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gaXNJbW11dGFibGVEZWZhdWx0KHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IHZhbHVlID09IG51bGwgfHwgT2JqZWN0LmlzRnJvemVuKHZhbHVlKTtcclxufVxyXG5mdW5jdGlvbiB0cmFja0Zvck11dGF0aW9ucyhpc0ltbXV0YWJsZSwgaWdub3JlUGF0aHMsIG9iaikge1xyXG4gICAgdmFyIHRyYWNrZWRQcm9wZXJ0aWVzID0gdHJhY2tQcm9wZXJ0aWVzKGlzSW1tdXRhYmxlLCBpZ25vcmVQYXRocywgb2JqKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgZGV0ZWN0TXV0YXRpb25zOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBkZXRlY3RNdXRhdGlvbnMoaXNJbW11dGFibGUsIGlnbm9yZVBhdGhzLCB0cmFja2VkUHJvcGVydGllcywgb2JqKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIHRyYWNrUHJvcGVydGllcyhpc0ltbXV0YWJsZSwgaWdub3JlUGF0aHMsIG9iaiwgcGF0aCkge1xyXG4gICAgaWYgKGlnbm9yZVBhdGhzID09PSB2b2lkIDApIHsgaWdub3JlUGF0aHMgPSBbXTsgfVxyXG4gICAgaWYgKHBhdGggPT09IHZvaWQgMCkgeyBwYXRoID0gXCJcIjsgfVxyXG4gICAgdmFyIHRyYWNrZWQgPSB7IHZhbHVlOiBvYmogfTtcclxuICAgIGlmICghaXNJbW11dGFibGUob2JqKSkge1xyXG4gICAgICAgIHRyYWNrZWQuY2hpbGRyZW4gPSB7fTtcclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XHJcbiAgICAgICAgICAgIHZhciBjaGlsZFBhdGggPSBwYXRoID8gcGF0aCArIFwiLlwiICsga2V5IDoga2V5O1xyXG4gICAgICAgICAgICBpZiAoaWdub3JlUGF0aHMubGVuZ3RoICYmIGlnbm9yZVBhdGhzLmluZGV4T2YoY2hpbGRQYXRoKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRyYWNrZWQuY2hpbGRyZW5ba2V5XSA9IHRyYWNrUHJvcGVydGllcyhpc0ltbXV0YWJsZSwgaWdub3JlUGF0aHMsIG9ialtrZXldLCBjaGlsZFBhdGgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0cmFja2VkO1xyXG59XHJcbmZ1bmN0aW9uIGRldGVjdE11dGF0aW9ucyhpc0ltbXV0YWJsZSwgaWdub3JlZFBhdGhzLCB0cmFja2VkUHJvcGVydHksIG9iaiwgc2FtZVBhcmVudFJlZiwgcGF0aCkge1xyXG4gICAgaWYgKGlnbm9yZWRQYXRocyA9PT0gdm9pZCAwKSB7IGlnbm9yZWRQYXRocyA9IFtdOyB9XHJcbiAgICBpZiAoc2FtZVBhcmVudFJlZiA9PT0gdm9pZCAwKSB7IHNhbWVQYXJlbnRSZWYgPSBmYWxzZTsgfVxyXG4gICAgaWYgKHBhdGggPT09IHZvaWQgMCkgeyBwYXRoID0gXCJcIjsgfVxyXG4gICAgdmFyIHByZXZPYmogPSB0cmFja2VkUHJvcGVydHkgPyB0cmFja2VkUHJvcGVydHkudmFsdWUgOiB2b2lkIDA7XHJcbiAgICB2YXIgc2FtZVJlZiA9IHByZXZPYmogPT09IG9iajtcclxuICAgIGlmIChzYW1lUGFyZW50UmVmICYmICFzYW1lUmVmICYmICFOdW1iZXIuaXNOYU4ob2JqKSkge1xyXG4gICAgICAgIHJldHVybiB7IHdhc011dGF0ZWQ6IHRydWUsIHBhdGg6IHBhdGggfTtcclxuICAgIH1cclxuICAgIGlmIChpc0ltbXV0YWJsZShwcmV2T2JqKSB8fCBpc0ltbXV0YWJsZShvYmopKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgd2FzTXV0YXRlZDogZmFsc2UgfTtcclxuICAgIH1cclxuICAgIHZhciBrZXlzVG9EZXRlY3QgPSB7fTtcclxuICAgIGZvciAodmFyIGtleSBpbiB0cmFja2VkUHJvcGVydHkuY2hpbGRyZW4pIHtcclxuICAgICAgICBrZXlzVG9EZXRlY3Rba2V5XSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XHJcbiAgICAgICAga2V5c1RvRGV0ZWN0W2tleV0gPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgdmFyIGhhc0lnbm9yZWRQYXRocyA9IGlnbm9yZWRQYXRocy5sZW5ndGggPiAwO1xyXG4gICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgdmFyIG5lc3RlZFBhdGggPSBwYXRoID8gcGF0aCArIFwiLlwiICsga2V5IDoga2V5O1xyXG4gICAgICAgIGlmIChoYXNJZ25vcmVkUGF0aHMpIHtcclxuICAgICAgICAgICAgdmFyIGhhc01hdGNoZXMgPSBpZ25vcmVkUGF0aHMuc29tZShmdW5jdGlvbiAoaWdub3JlZCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlnbm9yZWQgaW5zdGFuY2VvZiBSZWdFeHApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWdub3JlZC50ZXN0KG5lc3RlZFBhdGgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5lc3RlZFBhdGggPT09IGlnbm9yZWQ7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZiAoaGFzTWF0Y2hlcykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiY29udGludWVcIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcmVzdWx0ID0gZGV0ZWN0TXV0YXRpb25zKGlzSW1tdXRhYmxlLCBpZ25vcmVkUGF0aHMsIHRyYWNrZWRQcm9wZXJ0eS5jaGlsZHJlbltrZXldLCBvYmpba2V5XSwgc2FtZVJlZiwgbmVzdGVkUGF0aCk7XHJcbiAgICAgICAgaWYgKHJlc3VsdC53YXNNdXRhdGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiByZXN1bHQgfTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgZm9yICh2YXIga2V5IGluIGtleXNUb0RldGVjdCkge1xyXG4gICAgICAgIHZhciBzdGF0ZV8xID0gX2xvb3BfMShrZXkpO1xyXG4gICAgICAgIGlmICh0eXBlb2Ygc3RhdGVfMSA9PT0gXCJvYmplY3RcIilcclxuICAgICAgICAgICAgcmV0dXJuIHN0YXRlXzEudmFsdWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyB3YXNNdXRhdGVkOiBmYWxzZSB9O1xyXG59XHJcbmZ1bmN0aW9uIGNyZWF0ZUltbXV0YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZShvcHRpb25zKSB7XHJcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxyXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIikge1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBmdW5jdGlvbiAobmV4dCkgeyByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikgeyByZXR1cm4gbmV4dChhY3Rpb24pOyB9OyB9OyB9O1xyXG4gICAgfVxyXG4gICAgdmFyIF9jID0gb3B0aW9ucy5pc0ltbXV0YWJsZSwgaXNJbW11dGFibGUgPSBfYyA9PT0gdm9pZCAwID8gaXNJbW11dGFibGVEZWZhdWx0IDogX2MsIGlnbm9yZWRQYXRocyA9IG9wdGlvbnMuaWdub3JlZFBhdGhzLCBfZCA9IG9wdGlvbnMud2FybkFmdGVyLCB3YXJuQWZ0ZXIgPSBfZCA9PT0gdm9pZCAwID8gMzIgOiBfZCwgaWdub3JlID0gb3B0aW9ucy5pZ25vcmU7XHJcbiAgICBpZ25vcmVkUGF0aHMgPSBpZ25vcmVkUGF0aHMgfHwgaWdub3JlO1xyXG4gICAgdmFyIHRyYWNrID0gdHJhY2tGb3JNdXRhdGlvbnMuYmluZChudWxsLCBpc0ltbXV0YWJsZSwgaWdub3JlZFBhdGhzKTtcclxuICAgIHJldHVybiBmdW5jdGlvbiAoX2MpIHtcclxuICAgICAgICB2YXIgZ2V0U3RhdGUgPSBfYy5nZXRTdGF0ZTtcclxuICAgICAgICB2YXIgc3RhdGUgPSBnZXRTdGF0ZSgpO1xyXG4gICAgICAgIHZhciB0cmFja2VyID0gdHJhY2soc3RhdGUpO1xyXG4gICAgICAgIHZhciByZXN1bHQ7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChuZXh0KSB7IHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHZhciBtZWFzdXJlVXRpbHMgPSBnZXRUaW1lTWVhc3VyZVV0aWxzKHdhcm5BZnRlciwgXCJJbW11dGFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmVcIik7XHJcbiAgICAgICAgICAgIG1lYXN1cmVVdGlscy5tZWFzdXJlVGltZShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBzdGF0ZSA9IGdldFN0YXRlKCk7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB0cmFja2VyLmRldGVjdE11dGF0aW9ucygpO1xyXG4gICAgICAgICAgICAgICAgdHJhY2tlciA9IHRyYWNrKHN0YXRlKTtcclxuICAgICAgICAgICAgICAgIGludmFyaWFudCghcmVzdWx0Lndhc011dGF0ZWQsIFwiQSBzdGF0ZSBtdXRhdGlvbiB3YXMgZGV0ZWN0ZWQgYmV0d2VlbiBkaXNwYXRjaGVzLCBpbiB0aGUgcGF0aCAnXCIgKyAocmVzdWx0LnBhdGggfHwgXCJcIikgKyBcIicuICBUaGlzIG1heSBjYXVzZSBpbmNvcnJlY3QgYmVoYXZpb3IuIChodHRwczovL3JlZHV4LmpzLm9yZy9zdHlsZS1ndWlkZS9zdHlsZS1ndWlkZSNkby1ub3QtbXV0YXRlLXN0YXRlKVwiKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHZhciBkaXNwYXRjaGVkQWN0aW9uID0gbmV4dChhY3Rpb24pO1xyXG4gICAgICAgICAgICBtZWFzdXJlVXRpbHMubWVhc3VyZVRpbWUoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgc3RhdGUgPSBnZXRTdGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJhY2tlci5kZXRlY3RNdXRhdGlvbnMoKTtcclxuICAgICAgICAgICAgICAgIHRyYWNrZXIgPSB0cmFjayhzdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQud2FzTXV0YXRlZCAmJiBpbnZhcmlhbnQoIXJlc3VsdC53YXNNdXRhdGVkLCBcIkEgc3RhdGUgbXV0YXRpb24gd2FzIGRldGVjdGVkIGluc2lkZSBhIGRpc3BhdGNoLCBpbiB0aGUgcGF0aDogXCIgKyAocmVzdWx0LnBhdGggfHwgXCJcIikgKyBcIi4gVGFrZSBhIGxvb2sgYXQgdGhlIHJlZHVjZXIocykgaGFuZGxpbmcgdGhlIGFjdGlvbiBcIiArIHN0cmluZ2lmeShhY3Rpb24pICsgXCIuIChodHRwczovL3JlZHV4LmpzLm9yZy9zdHlsZS1ndWlkZS9zdHlsZS1ndWlkZSNkby1ub3QtbXV0YXRlLXN0YXRlKVwiKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIG1lYXN1cmVVdGlscy53YXJuSWZFeGNlZWRlZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gZGlzcGF0Y2hlZEFjdGlvbjtcclxuICAgICAgICB9OyB9O1xyXG4gICAgfTtcclxufVxyXG4vLyBzcmMvc2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlLnRzXHJcbmZ1bmN0aW9uIGlzUGxhaW4odmFsKSB7XHJcbiAgICB2YXIgdHlwZSA9IHR5cGVvZiB2YWw7XHJcbiAgICByZXR1cm4gdmFsID09IG51bGwgfHwgdHlwZSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlID09PSBcImJvb2xlYW5cIiB8fCB0eXBlID09PSBcIm51bWJlclwiIHx8IEFycmF5LmlzQXJyYXkodmFsKSB8fCBpc1BsYWluT2JqZWN0KHZhbCk7XHJcbn1cclxuZnVuY3Rpb24gZmluZE5vblNlcmlhbGl6YWJsZVZhbHVlKHZhbHVlLCBwYXRoLCBpc1NlcmlhbGl6YWJsZSwgZ2V0RW50cmllcywgaWdub3JlZFBhdGhzLCBjYWNoZSkge1xyXG4gICAgaWYgKHBhdGggPT09IHZvaWQgMCkgeyBwYXRoID0gXCJcIjsgfVxyXG4gICAgaWYgKGlzU2VyaWFsaXphYmxlID09PSB2b2lkIDApIHsgaXNTZXJpYWxpemFibGUgPSBpc1BsYWluOyB9XHJcbiAgICBpZiAoaWdub3JlZFBhdGhzID09PSB2b2lkIDApIHsgaWdub3JlZFBhdGhzID0gW107IH1cclxuICAgIHZhciBmb3VuZE5lc3RlZFNlcmlhbGl6YWJsZTtcclxuICAgIGlmICghaXNTZXJpYWxpemFibGUodmFsdWUpKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAga2V5UGF0aDogcGF0aCB8fCBcIjxyb290PlwiLFxyXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWVcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCB2YWx1ZSA9PT0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmIChjYWNoZSA9PSBudWxsID8gdm9pZCAwIDogY2FjaGUuaGFzKHZhbHVlKSlcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB2YXIgZW50cmllcyA9IGdldEVudHJpZXMgIT0gbnVsbCA/IGdldEVudHJpZXModmFsdWUpIDogT2JqZWN0LmVudHJpZXModmFsdWUpO1xyXG4gICAgdmFyIGhhc0lnbm9yZWRQYXRocyA9IGlnbm9yZWRQYXRocy5sZW5ndGggPiAwO1xyXG4gICAgdmFyIF9sb29wXzIgPSBmdW5jdGlvbiAoa2V5LCBuZXN0ZWRWYWx1ZSkge1xyXG4gICAgICAgIHZhciBuZXN0ZWRQYXRoID0gcGF0aCA/IHBhdGggKyBcIi5cIiArIGtleSA6IGtleTtcclxuICAgICAgICBpZiAoaGFzSWdub3JlZFBhdGhzKSB7XHJcbiAgICAgICAgICAgIHZhciBoYXNNYXRjaGVzID0gaWdub3JlZFBhdGhzLnNvbWUoZnVuY3Rpb24gKGlnbm9yZWQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpZ25vcmVkIGluc3RhbmNlb2YgUmVnRXhwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlnbm9yZWQudGVzdChuZXN0ZWRQYXRoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXN0ZWRQYXRoID09PSBpZ25vcmVkO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaWYgKGhhc01hdGNoZXMpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBcImNvbnRpbnVlXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFpc1NlcmlhbGl6YWJsZShuZXN0ZWRWYWx1ZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IHtcclxuICAgICAgICAgICAgICAgICAgICBrZXlQYXRoOiBuZXN0ZWRQYXRoLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBuZXN0ZWRWYWx1ZVxyXG4gICAgICAgICAgICAgICAgfSB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZW9mIG5lc3RlZFZhbHVlID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgICAgIGZvdW5kTmVzdGVkU2VyaWFsaXphYmxlID0gZmluZE5vblNlcmlhbGl6YWJsZVZhbHVlKG5lc3RlZFZhbHVlLCBuZXN0ZWRQYXRoLCBpc1NlcmlhbGl6YWJsZSwgZ2V0RW50cmllcywgaWdub3JlZFBhdGhzLCBjYWNoZSk7XHJcbiAgICAgICAgICAgIGlmIChmb3VuZE5lc3RlZFNlcmlhbGl6YWJsZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IGZvdW5kTmVzdGVkU2VyaWFsaXphYmxlIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgZm9yICh2YXIgX2kgPSAwLCBlbnRyaWVzXzEgPSBlbnRyaWVzOyBfaSA8IGVudHJpZXNfMS5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICB2YXIgX2MgPSBlbnRyaWVzXzFbX2ldLCBrZXkgPSBfY1swXSwgbmVzdGVkVmFsdWUgPSBfY1sxXTtcclxuICAgICAgICB2YXIgc3RhdGVfMiA9IF9sb29wXzIoa2V5LCBuZXN0ZWRWYWx1ZSk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBzdGF0ZV8yID09PSBcIm9iamVjdFwiKVxyXG4gICAgICAgICAgICByZXR1cm4gc3RhdGVfMi52YWx1ZTtcclxuICAgIH1cclxuICAgIGlmIChjYWNoZSAmJiBpc05lc3RlZEZyb3plbih2YWx1ZSkpXHJcbiAgICAgICAgY2FjaGUuYWRkKHZhbHVlKTtcclxuICAgIHJldHVybiBmYWxzZTtcclxufVxyXG5mdW5jdGlvbiBpc05lc3RlZEZyb3plbih2YWx1ZSkge1xyXG4gICAgaWYgKCFPYmplY3QuaXNGcm96ZW4odmFsdWUpKVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIGZvciAodmFyIF9pID0gMCwgX2MgPSBPYmplY3QudmFsdWVzKHZhbHVlKTsgX2kgPCBfYy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICB2YXIgbmVzdGVkVmFsdWUgPSBfY1tfaV07XHJcbiAgICAgICAgaWYgKHR5cGVvZiBuZXN0ZWRWYWx1ZSAhPT0gXCJvYmplY3RcIiB8fCBuZXN0ZWRWYWx1ZSA9PT0gbnVsbClcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgaWYgKCFpc05lc3RlZEZyb3plbihuZXN0ZWRWYWx1ZSkpXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcbmZ1bmN0aW9uIGNyZWF0ZVNlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZShvcHRpb25zKSB7XHJcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxyXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIikge1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBmdW5jdGlvbiAobmV4dCkgeyByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikgeyByZXR1cm4gbmV4dChhY3Rpb24pOyB9OyB9OyB9O1xyXG4gICAgfVxyXG4gICAgdmFyIF9jID0gb3B0aW9ucy5pc1NlcmlhbGl6YWJsZSwgaXNTZXJpYWxpemFibGUgPSBfYyA9PT0gdm9pZCAwID8gaXNQbGFpbiA6IF9jLCBnZXRFbnRyaWVzID0gb3B0aW9ucy5nZXRFbnRyaWVzLCBfZCA9IG9wdGlvbnMuaWdub3JlZEFjdGlvbnMsIGlnbm9yZWRBY3Rpb25zID0gX2QgPT09IHZvaWQgMCA/IFtdIDogX2QsIF9lID0gb3B0aW9ucy5pZ25vcmVkQWN0aW9uUGF0aHMsIGlnbm9yZWRBY3Rpb25QYXRocyA9IF9lID09PSB2b2lkIDAgPyBbXCJtZXRhLmFyZ1wiLCBcIm1ldGEuYmFzZVF1ZXJ5TWV0YVwiXSA6IF9lLCBfZiA9IG9wdGlvbnMuaWdub3JlZFBhdGhzLCBpZ25vcmVkUGF0aHMgPSBfZiA9PT0gdm9pZCAwID8gW10gOiBfZiwgX2cgPSBvcHRpb25zLndhcm5BZnRlciwgd2FybkFmdGVyID0gX2cgPT09IHZvaWQgMCA/IDMyIDogX2csIF9oID0gb3B0aW9ucy5pZ25vcmVTdGF0ZSwgaWdub3JlU3RhdGUgPSBfaCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfaCwgX2ogPSBvcHRpb25zLmlnbm9yZUFjdGlvbnMsIGlnbm9yZUFjdGlvbnMgPSBfaiA9PT0gdm9pZCAwID8gZmFsc2UgOiBfaiwgX2sgPSBvcHRpb25zLmRpc2FibGVDYWNoZSwgZGlzYWJsZUNhY2hlID0gX2sgPT09IHZvaWQgMCA/IGZhbHNlIDogX2s7XHJcbiAgICB2YXIgY2FjaGUgPSAhZGlzYWJsZUNhY2hlICYmIFdlYWtTZXQgPyBuZXcgV2Vha1NldCgpIDogdm9pZCAwO1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdG9yZUFQSSkgeyByZXR1cm4gZnVuY3Rpb24gKG5leHQpIHsgcmV0dXJuIGZ1bmN0aW9uIChhY3Rpb24pIHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gbmV4dChhY3Rpb24pO1xyXG4gICAgICAgIHZhciBtZWFzdXJlVXRpbHMgPSBnZXRUaW1lTWVhc3VyZVV0aWxzKHdhcm5BZnRlciwgXCJTZXJpYWxpemFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmVcIik7XHJcbiAgICAgICAgaWYgKCFpZ25vcmVBY3Rpb25zICYmICEoaWdub3JlZEFjdGlvbnMubGVuZ3RoICYmIGlnbm9yZWRBY3Rpb25zLmluZGV4T2YoYWN0aW9uLnR5cGUpICE9PSAtMSkpIHtcclxuICAgICAgICAgICAgbWVhc3VyZVV0aWxzLm1lYXN1cmVUaW1lKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHZhciBmb3VuZEFjdGlvbk5vblNlcmlhbGl6YWJsZVZhbHVlID0gZmluZE5vblNlcmlhbGl6YWJsZVZhbHVlKGFjdGlvbiwgXCJcIiwgaXNTZXJpYWxpemFibGUsIGdldEVudHJpZXMsIGlnbm9yZWRBY3Rpb25QYXRocywgY2FjaGUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZvdW5kQWN0aW9uTm9uU2VyaWFsaXphYmxlVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIga2V5UGF0aCA9IGZvdW5kQWN0aW9uTm9uU2VyaWFsaXphYmxlVmFsdWUua2V5UGF0aCwgdmFsdWUgPSBmb3VuZEFjdGlvbk5vblNlcmlhbGl6YWJsZVZhbHVlLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJBIG5vbi1zZXJpYWxpemFibGUgdmFsdWUgd2FzIGRldGVjdGVkIGluIGFuIGFjdGlvbiwgaW4gdGhlIHBhdGg6IGBcIiArIGtleVBhdGggKyBcImAuIFZhbHVlOlwiLCB2YWx1ZSwgXCJcXG5UYWtlIGEgbG9vayBhdCB0aGUgbG9naWMgdGhhdCBkaXNwYXRjaGVkIHRoaXMgYWN0aW9uOiBcIiwgYWN0aW9uLCBcIlxcbihTZWUgaHR0cHM6Ly9yZWR1eC5qcy5vcmcvZmFxL2FjdGlvbnMjd2h5LXNob3VsZC10eXBlLWJlLWEtc3RyaW5nLW9yLWF0LWxlYXN0LXNlcmlhbGl6YWJsZS13aHktc2hvdWxkLW15LWFjdGlvbi10eXBlcy1iZS1jb25zdGFudHMpXCIsIFwiXFxuKFRvIGFsbG93IG5vbi1zZXJpYWxpemFibGUgdmFsdWVzIHNlZTogaHR0cHM6Ly9yZWR1eC10b29sa2l0LmpzLm9yZy91c2FnZS91c2FnZS1ndWlkZSN3b3JraW5nLXdpdGgtbm9uLXNlcmlhbGl6YWJsZS1kYXRhKVwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghaWdub3JlU3RhdGUpIHtcclxuICAgICAgICAgICAgbWVhc3VyZVV0aWxzLm1lYXN1cmVUaW1lKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IHN0b3JlQVBJLmdldFN0YXRlKCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgZm91bmRTdGF0ZU5vblNlcmlhbGl6YWJsZVZhbHVlID0gZmluZE5vblNlcmlhbGl6YWJsZVZhbHVlKHN0YXRlLCBcIlwiLCBpc1NlcmlhbGl6YWJsZSwgZ2V0RW50cmllcywgaWdub3JlZFBhdGhzLCBjYWNoZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZm91bmRTdGF0ZU5vblNlcmlhbGl6YWJsZVZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGtleVBhdGggPSBmb3VuZFN0YXRlTm9uU2VyaWFsaXphYmxlVmFsdWUua2V5UGF0aCwgdmFsdWUgPSBmb3VuZFN0YXRlTm9uU2VyaWFsaXphYmxlVmFsdWUudmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkEgbm9uLXNlcmlhbGl6YWJsZSB2YWx1ZSB3YXMgZGV0ZWN0ZWQgaW4gdGhlIHN0YXRlLCBpbiB0aGUgcGF0aDogYFwiICsga2V5UGF0aCArIFwiYC4gVmFsdWU6XCIsIHZhbHVlLCBcIlxcblRha2UgYSBsb29rIGF0IHRoZSByZWR1Y2VyKHMpIGhhbmRsaW5nIHRoaXMgYWN0aW9uIHR5cGU6IFwiICsgYWN0aW9uLnR5cGUgKyBcIi5cXG4oU2VlIGh0dHBzOi8vcmVkdXguanMub3JnL2ZhcS9vcmdhbml6aW5nLXN0YXRlI2Nhbi1pLXB1dC1mdW5jdGlvbnMtcHJvbWlzZXMtb3Itb3RoZXItbm9uLXNlcmlhbGl6YWJsZS1pdGVtcy1pbi1teS1zdG9yZS1zdGF0ZSlcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBtZWFzdXJlVXRpbHMud2FybklmRXhjZWVkZWQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH07IH07IH07XHJcbn1cclxuLy8gc3JjL2dldERlZmF1bHRNaWRkbGV3YXJlLnRzXHJcbmZ1bmN0aW9uIGlzQm9vbGVhbih4KSB7XHJcbiAgICByZXR1cm4gdHlwZW9mIHggPT09IFwiYm9vbGVhblwiO1xyXG59XHJcbmZ1bmN0aW9uIGN1cnJ5R2V0RGVmYXVsdE1pZGRsZXdhcmUoKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gY3VycmllZEdldERlZmF1bHRNaWRkbGV3YXJlKG9wdGlvbnMpIHtcclxuICAgICAgICByZXR1cm4gZ2V0RGVmYXVsdE1pZGRsZXdhcmUob3B0aW9ucyk7XHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGdldERlZmF1bHRNaWRkbGV3YXJlKG9wdGlvbnMpIHtcclxuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XHJcbiAgICB2YXIgX2MgPSBvcHRpb25zLnRodW5rLCB0aHVuayA9IF9jID09PSB2b2lkIDAgPyB0cnVlIDogX2MsIF9kID0gb3B0aW9ucy5pbW11dGFibGVDaGVjaywgaW1tdXRhYmxlQ2hlY2sgPSBfZCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9kLCBfZSA9IG9wdGlvbnMuc2VyaWFsaXphYmxlQ2hlY2ssIHNlcmlhbGl6YWJsZUNoZWNrID0gX2UgPT09IHZvaWQgMCA/IHRydWUgOiBfZTtcclxuICAgIHZhciBtaWRkbGV3YXJlQXJyYXkgPSBuZXcgTWlkZGxld2FyZUFycmF5KCk7XHJcbiAgICBpZiAodGh1bmspIHtcclxuICAgICAgICBpZiAoaXNCb29sZWFuKHRodW5rKSkge1xyXG4gICAgICAgICAgICBtaWRkbGV3YXJlQXJyYXkucHVzaCh0aHVua01pZGRsZXdhcmUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbWlkZGxld2FyZUFycmF5LnB1c2godGh1bmtNaWRkbGV3YXJlLndpdGhFeHRyYUFyZ3VtZW50KHRodW5rLmV4dHJhQXJndW1lbnQpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XHJcbiAgICAgICAgaWYgKGltbXV0YWJsZUNoZWNrKSB7XHJcbiAgICAgICAgICAgIHZhciBpbW11dGFibGVPcHRpb25zID0ge307XHJcbiAgICAgICAgICAgIGlmICghaXNCb29sZWFuKGltbXV0YWJsZUNoZWNrKSkge1xyXG4gICAgICAgICAgICAgICAgaW1tdXRhYmxlT3B0aW9ucyA9IGltbXV0YWJsZUNoZWNrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG1pZGRsZXdhcmVBcnJheS51bnNoaWZ0KGNyZWF0ZUltbXV0YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZShpbW11dGFibGVPcHRpb25zKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZXJpYWxpemFibGVDaGVjaykge1xyXG4gICAgICAgICAgICB2YXIgc2VyaWFsaXphYmxlT3B0aW9ucyA9IHt9O1xyXG4gICAgICAgICAgICBpZiAoIWlzQm9vbGVhbihzZXJpYWxpemFibGVDaGVjaykpIHtcclxuICAgICAgICAgICAgICAgIHNlcmlhbGl6YWJsZU9wdGlvbnMgPSBzZXJpYWxpemFibGVDaGVjaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBtaWRkbGV3YXJlQXJyYXkucHVzaChjcmVhdGVTZXJpYWxpemFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUoc2VyaWFsaXphYmxlT3B0aW9ucykpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBtaWRkbGV3YXJlQXJyYXk7XHJcbn1cclxuLy8gc3JjL2NvbmZpZ3VyZVN0b3JlLnRzXHJcbnZhciBJU19QUk9EVUNUSU9OID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiO1xyXG5mdW5jdGlvbiBjb25maWd1cmVTdG9yZShvcHRpb25zKSB7XHJcbiAgICB2YXIgY3VycmllZEdldERlZmF1bHRNaWRkbGV3YXJlID0gY3VycnlHZXREZWZhdWx0TWlkZGxld2FyZSgpO1xyXG4gICAgdmFyIF9jID0gb3B0aW9ucyB8fCB7fSwgX2QgPSBfYy5yZWR1Y2VyLCByZWR1Y2VyID0gX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLCBfZSA9IF9jLm1pZGRsZXdhcmUsIG1pZGRsZXdhcmUgPSBfZSA9PT0gdm9pZCAwID8gY3VycmllZEdldERlZmF1bHRNaWRkbGV3YXJlKCkgOiBfZSwgX2YgPSBfYy5kZXZUb29scywgZGV2VG9vbHMgPSBfZiA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9mLCBfZyA9IF9jLnByZWxvYWRlZFN0YXRlLCBwcmVsb2FkZWRTdGF0ZSA9IF9nID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZywgX2ggPSBfYy5lbmhhbmNlcnMsIGVuaGFuY2VycyA9IF9oID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfaDtcclxuICAgIHZhciByb290UmVkdWNlcjtcclxuICAgIGlmICh0eXBlb2YgcmVkdWNlciA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgcm9vdFJlZHVjZXIgPSByZWR1Y2VyO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaXNQbGFpbk9iamVjdChyZWR1Y2VyKSkge1xyXG4gICAgICAgIHJvb3RSZWR1Y2VyID0gY29tYmluZVJlZHVjZXJzKHJlZHVjZXIpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdcInJlZHVjZXJcIiBpcyBhIHJlcXVpcmVkIGFyZ3VtZW50LCBhbmQgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGFuIG9iamVjdCBvZiBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIGNvbWJpbmVSZWR1Y2VycycpO1xyXG4gICAgfVxyXG4gICAgdmFyIGZpbmFsTWlkZGxld2FyZSA9IG1pZGRsZXdhcmU7XHJcbiAgICBpZiAodHlwZW9mIGZpbmFsTWlkZGxld2FyZSA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgZmluYWxNaWRkbGV3YXJlID0gZmluYWxNaWRkbGV3YXJlKGN1cnJpZWRHZXREZWZhdWx0TWlkZGxld2FyZSk7XHJcbiAgICAgICAgaWYgKCFJU19QUk9EVUNUSU9OICYmICFBcnJheS5pc0FycmF5KGZpbmFsTWlkZGxld2FyZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwid2hlbiB1c2luZyBhIG1pZGRsZXdhcmUgYnVpbGRlciBmdW5jdGlvbiwgYW4gYXJyYXkgb2YgbWlkZGxld2FyZSBtdXN0IGJlIHJldHVybmVkXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICghSVNfUFJPRFVDVElPTiAmJiBmaW5hbE1pZGRsZXdhcmUuc29tZShmdW5jdGlvbiAoaXRlbSkgeyByZXR1cm4gdHlwZW9mIGl0ZW0gIT09IFwiZnVuY3Rpb25cIjsgfSkpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJlYWNoIG1pZGRsZXdhcmUgcHJvdmlkZWQgdG8gY29uZmlndXJlU3RvcmUgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xyXG4gICAgfVxyXG4gICAgdmFyIG1pZGRsZXdhcmVFbmhhbmNlciA9IGFwcGx5TWlkZGxld2FyZS5hcHBseSh2b2lkIDAsIGZpbmFsTWlkZGxld2FyZSk7XHJcbiAgICB2YXIgZmluYWxDb21wb3NlID0gY29tcG9zZTI7XHJcbiAgICBpZiAoZGV2VG9vbHMpIHtcclxuICAgICAgICBmaW5hbENvbXBvc2UgPSBjb21wb3NlV2l0aERldlRvb2xzKF9fc3ByZWFkVmFsdWVzKHtcclxuICAgICAgICAgICAgdHJhY2U6ICFJU19QUk9EVUNUSU9OXHJcbiAgICAgICAgfSwgdHlwZW9mIGRldlRvb2xzID09PSBcIm9iamVjdFwiICYmIGRldlRvb2xzKSk7XHJcbiAgICB9XHJcbiAgICB2YXIgc3RvcmVFbmhhbmNlcnMgPSBbbWlkZGxld2FyZUVuaGFuY2VyXTtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGVuaGFuY2VycykpIHtcclxuICAgICAgICBzdG9yZUVuaGFuY2VycyA9IF9fc3ByZWFkQXJyYXkoW21pZGRsZXdhcmVFbmhhbmNlcl0sIGVuaGFuY2Vycyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0eXBlb2YgZW5oYW5jZXJzID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICBzdG9yZUVuaGFuY2VycyA9IGVuaGFuY2VycyhzdG9yZUVuaGFuY2Vycyk7XHJcbiAgICB9XHJcbiAgICB2YXIgY29tcG9zZWRFbmhhbmNlciA9IGZpbmFsQ29tcG9zZS5hcHBseSh2b2lkIDAsIHN0b3JlRW5oYW5jZXJzKTtcclxuICAgIHJldHVybiBjcmVhdGVTdG9yZShyb290UmVkdWNlciwgcHJlbG9hZGVkU3RhdGUsIGNvbXBvc2VkRW5oYW5jZXIpO1xyXG59XHJcbi8vIHNyYy9jcmVhdGVBY3Rpb24udHNcclxuZnVuY3Rpb24gY3JlYXRlQWN0aW9uKHR5cGUsIHByZXBhcmVBY3Rpb24pIHtcclxuICAgIGZ1bmN0aW9uIGFjdGlvbkNyZWF0b3IoKSB7XHJcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwcmVwYXJlQWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHZhciBwcmVwYXJlZCA9IHByZXBhcmVBY3Rpb24uYXBwbHkodm9pZCAwLCBhcmdzKTtcclxuICAgICAgICAgICAgaWYgKCFwcmVwYXJlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwicHJlcGFyZUFjdGlvbiBkaWQgbm90IHJldHVybiBhbiBvYmplY3RcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIF9fc3ByZWFkVmFsdWVzKF9fc3ByZWFkVmFsdWVzKHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUsXHJcbiAgICAgICAgICAgICAgICBwYXlsb2FkOiBwcmVwYXJlZC5wYXlsb2FkXHJcbiAgICAgICAgICAgIH0sIFwibWV0YVwiIGluIHByZXBhcmVkICYmIHsgbWV0YTogcHJlcGFyZWQubWV0YSB9KSwgXCJlcnJvclwiIGluIHByZXBhcmVkICYmIHsgZXJyb3I6IHByZXBhcmVkLmVycm9yIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0eXBlOiB0eXBlLCBwYXlsb2FkOiBhcmdzWzBdIH07XHJcbiAgICB9XHJcbiAgICBhY3Rpb25DcmVhdG9yLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gXCJcIiArIHR5cGU7IH07XHJcbiAgICBhY3Rpb25DcmVhdG9yLnR5cGUgPSB0eXBlO1xyXG4gICAgYWN0aW9uQ3JlYXRvci5tYXRjaCA9IGZ1bmN0aW9uIChhY3Rpb24pIHsgcmV0dXJuIGFjdGlvbi50eXBlID09PSB0eXBlOyB9O1xyXG4gICAgcmV0dXJuIGFjdGlvbkNyZWF0b3I7XHJcbn1cclxuZnVuY3Rpb24gaXNGU0EoYWN0aW9uKSB7XHJcbiAgICByZXR1cm4gaXNQbGFpbk9iamVjdChhY3Rpb24pICYmIHR5cGVvZiBhY3Rpb24udHlwZSA9PT0gXCJzdHJpbmdcIiAmJiBPYmplY3Qua2V5cyhhY3Rpb24pLmV2ZXJ5KGlzVmFsaWRLZXkpO1xyXG59XHJcbmZ1bmN0aW9uIGlzVmFsaWRLZXkoa2V5KSB7XHJcbiAgICByZXR1cm4gW1widHlwZVwiLCBcInBheWxvYWRcIiwgXCJlcnJvclwiLCBcIm1ldGFcIl0uaW5kZXhPZihrZXkpID4gLTE7XHJcbn1cclxuZnVuY3Rpb24gZ2V0VHlwZShhY3Rpb25DcmVhdG9yKSB7XHJcbiAgICByZXR1cm4gXCJcIiArIGFjdGlvbkNyZWF0b3I7XHJcbn1cclxuLy8gc3JjL2NyZWF0ZVJlZHVjZXIudHNcclxuaW1wb3J0IGNyZWF0ZU5leHRTdGF0ZTIsIHsgaXNEcmFmdCBhcyBpc0RyYWZ0MiwgaXNEcmFmdGFibGUgYXMgaXNEcmFmdGFibGUyIH0gZnJvbSBcImltbWVyXCI7XHJcbi8vIHNyYy9tYXBCdWlsZGVycy50c1xyXG5mdW5jdGlvbiBleGVjdXRlUmVkdWNlckJ1aWxkZXJDYWxsYmFjayhidWlsZGVyQ2FsbGJhY2spIHtcclxuICAgIHZhciBhY3Rpb25zTWFwID0ge307XHJcbiAgICB2YXIgYWN0aW9uTWF0Y2hlcnMgPSBbXTtcclxuICAgIHZhciBkZWZhdWx0Q2FzZVJlZHVjZXI7XHJcbiAgICB2YXIgYnVpbGRlciA9IHtcclxuICAgICAgICBhZGRDYXNlOiBmdW5jdGlvbiAodHlwZU9yQWN0aW9uQ3JlYXRvciwgcmVkdWNlcikge1xyXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYWN0aW9uTWF0Y2hlcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImBidWlsZGVyLmFkZENhc2VgIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBiZWZvcmUgY2FsbGluZyBgYnVpbGRlci5hZGRNYXRjaGVyYFwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChkZWZhdWx0Q2FzZVJlZHVjZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJgYnVpbGRlci5hZGRDYXNlYCBzaG91bGQgb25seSBiZSBjYWxsZWQgYmVmb3JlIGNhbGxpbmcgYGJ1aWxkZXIuYWRkRGVmYXVsdENhc2VgXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciB0eXBlID0gdHlwZW9mIHR5cGVPckFjdGlvbkNyZWF0b3IgPT09IFwic3RyaW5nXCIgPyB0eXBlT3JBY3Rpb25DcmVhdG9yIDogdHlwZU9yQWN0aW9uQ3JlYXRvci50eXBlO1xyXG4gICAgICAgICAgICBpZiAodHlwZSBpbiBhY3Rpb25zTWFwKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhZGRDYXNlIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCB0d28gcmVkdWNlcnMgZm9yIHRoZSBzYW1lIGFjdGlvbiB0eXBlXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGFjdGlvbnNNYXBbdHlwZV0gPSByZWR1Y2VyO1xyXG4gICAgICAgICAgICByZXR1cm4gYnVpbGRlcjtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGFkZE1hdGNoZXI6IGZ1bmN0aW9uIChtYXRjaGVyLCByZWR1Y2VyKSB7XHJcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChkZWZhdWx0Q2FzZVJlZHVjZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJgYnVpbGRlci5hZGRNYXRjaGVyYCBzaG91bGQgb25seSBiZSBjYWxsZWQgYmVmb3JlIGNhbGxpbmcgYGJ1aWxkZXIuYWRkRGVmYXVsdENhc2VgXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGFjdGlvbk1hdGNoZXJzLnB1c2goeyBtYXRjaGVyOiBtYXRjaGVyLCByZWR1Y2VyOiByZWR1Y2VyIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4gYnVpbGRlcjtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGFkZERlZmF1bHRDYXNlOiBmdW5jdGlvbiAocmVkdWNlcikge1xyXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGVmYXVsdENhc2VSZWR1Y2VyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYGJ1aWxkZXIuYWRkRGVmYXVsdENhc2VgIGNhbiBvbmx5IGJlIGNhbGxlZCBvbmNlXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRlZmF1bHRDYXNlUmVkdWNlciA9IHJlZHVjZXI7XHJcbiAgICAgICAgICAgIHJldHVybiBidWlsZGVyO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBidWlsZGVyQ2FsbGJhY2soYnVpbGRlcik7XHJcbiAgICByZXR1cm4gW2FjdGlvbnNNYXAsIGFjdGlvbk1hdGNoZXJzLCBkZWZhdWx0Q2FzZVJlZHVjZXJdO1xyXG59XHJcbi8vIHNyYy9jcmVhdGVSZWR1Y2VyLnRzXHJcbmZ1bmN0aW9uIGlzU3RhdGVGdW5jdGlvbih4KSB7XHJcbiAgICByZXR1cm4gdHlwZW9mIHggPT09IFwiZnVuY3Rpb25cIjtcclxufVxyXG52YXIgaGFzV2FybmVkQWJvdXRPYmplY3ROb3RhdGlvbiA9IGZhbHNlO1xyXG5mdW5jdGlvbiBjcmVhdGVSZWR1Y2VyKGluaXRpYWxTdGF0ZSwgbWFwT3JCdWlsZGVyQ2FsbGJhY2ssIGFjdGlvbk1hdGNoZXJzLCBkZWZhdWx0Q2FzZVJlZHVjZXIpIHtcclxuICAgIGlmIChhY3Rpb25NYXRjaGVycyA9PT0gdm9pZCAwKSB7IGFjdGlvbk1hdGNoZXJzID0gW107IH1cclxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcclxuICAgICAgICBpZiAodHlwZW9mIG1hcE9yQnVpbGRlckNhbGxiYWNrID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgICAgIGlmICghaGFzV2FybmVkQWJvdXRPYmplY3ROb3RhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgaGFzV2FybmVkQWJvdXRPYmplY3ROb3RhdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXCJUaGUgb2JqZWN0IG5vdGF0aW9uIGZvciBgY3JlYXRlUmVkdWNlcmAgaXMgZGVwcmVjYXRlZCwgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBSVEsgMi4wLiBQbGVhc2UgdXNlIHRoZSAnYnVpbGRlciBjYWxsYmFjaycgbm90YXRpb24gaW5zdGVhZDogaHR0cHM6Ly9yZWR1eC10b29sa2l0LmpzLm9yZy9hcGkvY3JlYXRlUmVkdWNlclwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHZhciBfYyA9IHR5cGVvZiBtYXBPckJ1aWxkZXJDYWxsYmFjayA9PT0gXCJmdW5jdGlvblwiID8gZXhlY3V0ZVJlZHVjZXJCdWlsZGVyQ2FsbGJhY2sobWFwT3JCdWlsZGVyQ2FsbGJhY2spIDogW21hcE9yQnVpbGRlckNhbGxiYWNrLCBhY3Rpb25NYXRjaGVycywgZGVmYXVsdENhc2VSZWR1Y2VyXSwgYWN0aW9uc01hcCA9IF9jWzBdLCBmaW5hbEFjdGlvbk1hdGNoZXJzID0gX2NbMV0sIGZpbmFsRGVmYXVsdENhc2VSZWR1Y2VyID0gX2NbMl07XHJcbiAgICB2YXIgZ2V0SW5pdGlhbFN0YXRlO1xyXG4gICAgaWYgKGlzU3RhdGVGdW5jdGlvbihpbml0aWFsU3RhdGUpKSB7XHJcbiAgICAgICAgZ2V0SW5pdGlhbFN0YXRlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gZnJlZXplRHJhZnRhYmxlKGluaXRpYWxTdGF0ZSgpKTsgfTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHZhciBmcm96ZW5Jbml0aWFsU3RhdGVfMSA9IGZyZWV6ZURyYWZ0YWJsZShpbml0aWFsU3RhdGUpO1xyXG4gICAgICAgIGdldEluaXRpYWxTdGF0ZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZyb3plbkluaXRpYWxTdGF0ZV8xOyB9O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gcmVkdWNlcihzdGF0ZSwgYWN0aW9uKSB7XHJcbiAgICAgICAgaWYgKHN0YXRlID09PSB2b2lkIDApIHsgc3RhdGUgPSBnZXRJbml0aWFsU3RhdGUoKTsgfVxyXG4gICAgICAgIHZhciBjYXNlUmVkdWNlcnMgPSBfX3NwcmVhZEFycmF5KFtcclxuICAgICAgICAgICAgYWN0aW9uc01hcFthY3Rpb24udHlwZV1cclxuICAgICAgICBdLCBmaW5hbEFjdGlvbk1hdGNoZXJzLmZpbHRlcihmdW5jdGlvbiAoX2MpIHtcclxuICAgICAgICAgICAgdmFyIG1hdGNoZXIgPSBfYy5tYXRjaGVyO1xyXG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hlcihhY3Rpb24pO1xyXG4gICAgICAgIH0pLm1hcChmdW5jdGlvbiAoX2MpIHtcclxuICAgICAgICAgICAgdmFyIHJlZHVjZXIyID0gX2MucmVkdWNlcjtcclxuICAgICAgICAgICAgcmV0dXJuIHJlZHVjZXIyO1xyXG4gICAgICAgIH0pKTtcclxuICAgICAgICBpZiAoY2FzZVJlZHVjZXJzLmZpbHRlcihmdW5jdGlvbiAoY3IpIHsgcmV0dXJuICEhY3I7IH0pLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICBjYXNlUmVkdWNlcnMgPSBbZmluYWxEZWZhdWx0Q2FzZVJlZHVjZXJdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY2FzZVJlZHVjZXJzLnJlZHVjZShmdW5jdGlvbiAocHJldmlvdXNTdGF0ZSwgY2FzZVJlZHVjZXIpIHtcclxuICAgICAgICAgICAgaWYgKGNhc2VSZWR1Y2VyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNEcmFmdDIocHJldmlvdXNTdGF0ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZHJhZnQgPSBwcmV2aW91c1N0YXRlO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBjYXNlUmVkdWNlcihkcmFmdCwgYWN0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzU3RhdGU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICghaXNEcmFmdGFibGUyKHByZXZpb3VzU3RhdGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGNhc2VSZWR1Y2VyKHByZXZpb3VzU3RhdGUsIGFjdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c1N0YXRlID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJldmlvdXNTdGF0ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIkEgY2FzZSByZWR1Y2VyIG9uIGEgbm9uLWRyYWZ0YWJsZSB2YWx1ZSBtdXN0IG5vdCByZXR1cm4gdW5kZWZpbmVkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZU5leHRTdGF0ZTIocHJldmlvdXNTdGF0ZSwgZnVuY3Rpb24gKGRyYWZ0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYXNlUmVkdWNlcihkcmFmdCwgYWN0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcHJldmlvdXNTdGF0ZTtcclxuICAgICAgICB9LCBzdGF0ZSk7XHJcbiAgICB9XHJcbiAgICByZWR1Y2VyLmdldEluaXRpYWxTdGF0ZSA9IGdldEluaXRpYWxTdGF0ZTtcclxuICAgIHJldHVybiByZWR1Y2VyO1xyXG59XHJcbi8vIHNyYy9jcmVhdGVTbGljZS50c1xyXG52YXIgaGFzV2FybmVkQWJvdXRPYmplY3ROb3RhdGlvbjIgPSBmYWxzZTtcclxuZnVuY3Rpb24gZ2V0VHlwZTIoc2xpY2UsIGFjdGlvbktleSkge1xyXG4gICAgcmV0dXJuIHNsaWNlICsgXCIvXCIgKyBhY3Rpb25LZXk7XHJcbn1cclxuZnVuY3Rpb24gY3JlYXRlU2xpY2Uob3B0aW9ucykge1xyXG4gICAgdmFyIG5hbWUgPSBvcHRpb25zLm5hbWU7XHJcbiAgICBpZiAoIW5hbWUpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJgbmFtZWAgaXMgYSByZXF1aXJlZCBvcHRpb24gZm9yIGNyZWF0ZVNsaWNlXCIpO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzICE9PSBcInVuZGVmaW5lZFwiICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcImRldmVsb3BtZW50XCIpIHtcclxuICAgICAgICBpZiAob3B0aW9ucy5pbml0aWFsU3RhdGUgPT09IHZvaWQgMCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiWW91IG11c3QgcHJvdmlkZSBhbiBgaW5pdGlhbFN0YXRlYCB2YWx1ZSB0aGF0IGlzIG5vdCBgdW5kZWZpbmVkYC4gWW91IG1heSBoYXZlIG1pc3NwZWxsZWQgYGluaXRpYWxTdGF0ZWBcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdmFyIGluaXRpYWxTdGF0ZSA9IHR5cGVvZiBvcHRpb25zLmluaXRpYWxTdGF0ZSA9PSBcImZ1bmN0aW9uXCIgPyBvcHRpb25zLmluaXRpYWxTdGF0ZSA6IGZyZWV6ZURyYWZ0YWJsZShvcHRpb25zLmluaXRpYWxTdGF0ZSk7XHJcbiAgICB2YXIgcmVkdWNlcnMgPSBvcHRpb25zLnJlZHVjZXJzIHx8IHt9O1xyXG4gICAgdmFyIHJlZHVjZXJOYW1lcyA9IE9iamVjdC5rZXlzKHJlZHVjZXJzKTtcclxuICAgIHZhciBzbGljZUNhc2VSZWR1Y2Vyc0J5TmFtZSA9IHt9O1xyXG4gICAgdmFyIHNsaWNlQ2FzZVJlZHVjZXJzQnlUeXBlID0ge307XHJcbiAgICB2YXIgYWN0aW9uQ3JlYXRvcnMgPSB7fTtcclxuICAgIHJlZHVjZXJOYW1lcy5mb3JFYWNoKGZ1bmN0aW9uIChyZWR1Y2VyTmFtZSkge1xyXG4gICAgICAgIHZhciBtYXliZVJlZHVjZXJXaXRoUHJlcGFyZSA9IHJlZHVjZXJzW3JlZHVjZXJOYW1lXTtcclxuICAgICAgICB2YXIgdHlwZSA9IGdldFR5cGUyKG5hbWUsIHJlZHVjZXJOYW1lKTtcclxuICAgICAgICB2YXIgY2FzZVJlZHVjZXI7XHJcbiAgICAgICAgdmFyIHByZXBhcmVDYWxsYmFjaztcclxuICAgICAgICBpZiAoXCJyZWR1Y2VyXCIgaW4gbWF5YmVSZWR1Y2VyV2l0aFByZXBhcmUpIHtcclxuICAgICAgICAgICAgY2FzZVJlZHVjZXIgPSBtYXliZVJlZHVjZXJXaXRoUHJlcGFyZS5yZWR1Y2VyO1xyXG4gICAgICAgICAgICBwcmVwYXJlQ2FsbGJhY2sgPSBtYXliZVJlZHVjZXJXaXRoUHJlcGFyZS5wcmVwYXJlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY2FzZVJlZHVjZXIgPSBtYXliZVJlZHVjZXJXaXRoUHJlcGFyZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2xpY2VDYXNlUmVkdWNlcnNCeU5hbWVbcmVkdWNlck5hbWVdID0gY2FzZVJlZHVjZXI7XHJcbiAgICAgICAgc2xpY2VDYXNlUmVkdWNlcnNCeVR5cGVbdHlwZV0gPSBjYXNlUmVkdWNlcjtcclxuICAgICAgICBhY3Rpb25DcmVhdG9yc1tyZWR1Y2VyTmFtZV0gPSBwcmVwYXJlQ2FsbGJhY2sgPyBjcmVhdGVBY3Rpb24odHlwZSwgcHJlcGFyZUNhbGxiYWNrKSA6IGNyZWF0ZUFjdGlvbih0eXBlKTtcclxuICAgIH0pO1xyXG4gICAgZnVuY3Rpb24gYnVpbGRSZWR1Y2VyKCkge1xyXG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmV4dHJhUmVkdWNlcnMgPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgICAgIGlmICghaGFzV2FybmVkQWJvdXRPYmplY3ROb3RhdGlvbjIpIHtcclxuICAgICAgICAgICAgICAgICAgICBoYXNXYXJuZWRBYm91dE9iamVjdE5vdGF0aW9uMiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFwiVGhlIG9iamVjdCBub3RhdGlvbiBmb3IgYGNyZWF0ZVNsaWNlLmV4dHJhUmVkdWNlcnNgIGlzIGRlcHJlY2F0ZWQsIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gUlRLIDIuMC4gUGxlYXNlIHVzZSB0aGUgJ2J1aWxkZXIgY2FsbGJhY2snIG5vdGF0aW9uIGluc3RlYWQ6IGh0dHBzOi8vcmVkdXgtdG9vbGtpdC5qcy5vcmcvYXBpL2NyZWF0ZVNsaWNlXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBfYyA9IHR5cGVvZiBvcHRpb25zLmV4dHJhUmVkdWNlcnMgPT09IFwiZnVuY3Rpb25cIiA/IGV4ZWN1dGVSZWR1Y2VyQnVpbGRlckNhbGxiYWNrKG9wdGlvbnMuZXh0cmFSZWR1Y2VycykgOiBbb3B0aW9ucy5leHRyYVJlZHVjZXJzXSwgX2QgPSBfY1swXSwgZXh0cmFSZWR1Y2VycyA9IF9kID09PSB2b2lkIDAgPyB7fSA6IF9kLCBfZSA9IF9jWzFdLCBhY3Rpb25NYXRjaGVycyA9IF9lID09PSB2b2lkIDAgPyBbXSA6IF9lLCBfZiA9IF9jWzJdLCBkZWZhdWx0Q2FzZVJlZHVjZXIgPSBfZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Y7XHJcbiAgICAgICAgdmFyIGZpbmFsQ2FzZVJlZHVjZXJzID0gX19zcHJlYWRWYWx1ZXMoX19zcHJlYWRWYWx1ZXMoe30sIGV4dHJhUmVkdWNlcnMpLCBzbGljZUNhc2VSZWR1Y2Vyc0J5VHlwZSk7XHJcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVJlZHVjZXIoaW5pdGlhbFN0YXRlLCBmdW5jdGlvbiAoYnVpbGRlcikge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gZmluYWxDYXNlUmVkdWNlcnMpIHtcclxuICAgICAgICAgICAgICAgIGJ1aWxkZXIuYWRkQ2FzZShrZXksIGZpbmFsQ2FzZVJlZHVjZXJzW2tleV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvciAodmFyIF9pID0gMCwgYWN0aW9uTWF0Y2hlcnNfMSA9IGFjdGlvbk1hdGNoZXJzOyBfaSA8IGFjdGlvbk1hdGNoZXJzXzEubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbSA9IGFjdGlvbk1hdGNoZXJzXzFbX2ldO1xyXG4gICAgICAgICAgICAgICAgYnVpbGRlci5hZGRNYXRjaGVyKG0ubWF0Y2hlciwgbS5yZWR1Y2VyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZGVmYXVsdENhc2VSZWR1Y2VyKSB7XHJcbiAgICAgICAgICAgICAgICBidWlsZGVyLmFkZERlZmF1bHRDYXNlKGRlZmF1bHRDYXNlUmVkdWNlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHZhciBfcmVkdWNlcjtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbmFtZTogbmFtZSxcclxuICAgICAgICByZWR1Y2VyOiBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbikge1xyXG4gICAgICAgICAgICBpZiAoIV9yZWR1Y2VyKVxyXG4gICAgICAgICAgICAgICAgX3JlZHVjZXIgPSBidWlsZFJlZHVjZXIoKTtcclxuICAgICAgICAgICAgcmV0dXJuIF9yZWR1Y2VyKHN0YXRlLCBhY3Rpb24pO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgYWN0aW9uczogYWN0aW9uQ3JlYXRvcnMsXHJcbiAgICAgICAgY2FzZVJlZHVjZXJzOiBzbGljZUNhc2VSZWR1Y2Vyc0J5TmFtZSxcclxuICAgICAgICBnZXRJbml0aWFsU3RhdGU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKCFfcmVkdWNlcilcclxuICAgICAgICAgICAgICAgIF9yZWR1Y2VyID0gYnVpbGRSZWR1Y2VyKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBfcmVkdWNlci5nZXRJbml0aWFsU3RhdGUoKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcbi8vIHNyYy9lbnRpdGllcy9lbnRpdHlfc3RhdGUudHNcclxuZnVuY3Rpb24gZ2V0SW5pdGlhbEVudGl0eVN0YXRlKCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBpZHM6IFtdLFxyXG4gICAgICAgIGVudGl0aWVzOiB7fVxyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBjcmVhdGVJbml0aWFsU3RhdGVGYWN0b3J5KCkge1xyXG4gICAgZnVuY3Rpb24gZ2V0SW5pdGlhbFN0YXRlKGFkZGl0aW9uYWxTdGF0ZSkge1xyXG4gICAgICAgIGlmIChhZGRpdGlvbmFsU3RhdGUgPT09IHZvaWQgMCkgeyBhZGRpdGlvbmFsU3RhdGUgPSB7fTsgfVxyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGdldEluaXRpYWxFbnRpdHlTdGF0ZSgpLCBhZGRpdGlvbmFsU3RhdGUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgZ2V0SW5pdGlhbFN0YXRlOiBnZXRJbml0aWFsU3RhdGUgfTtcclxufVxyXG4vLyBzcmMvZW50aXRpZXMvc3RhdGVfc2VsZWN0b3JzLnRzXHJcbmZ1bmN0aW9uIGNyZWF0ZVNlbGVjdG9yc0ZhY3RvcnkoKSB7XHJcbiAgICBmdW5jdGlvbiBnZXRTZWxlY3RvcnMoc2VsZWN0U3RhdGUpIHtcclxuICAgICAgICB2YXIgc2VsZWN0SWRzID0gZnVuY3Rpb24gKHN0YXRlKSB7IHJldHVybiBzdGF0ZS5pZHM7IH07XHJcbiAgICAgICAgdmFyIHNlbGVjdEVudGl0aWVzID0gZnVuY3Rpb24gKHN0YXRlKSB7IHJldHVybiBzdGF0ZS5lbnRpdGllczsgfTtcclxuICAgICAgICB2YXIgc2VsZWN0QWxsID0gY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3Ioc2VsZWN0SWRzLCBzZWxlY3RFbnRpdGllcywgZnVuY3Rpb24gKGlkcywgZW50aXRpZXMpIHsgcmV0dXJuIGlkcy5tYXAoZnVuY3Rpb24gKGlkKSB7IHJldHVybiBlbnRpdGllc1tpZF07IH0pOyB9KTtcclxuICAgICAgICB2YXIgc2VsZWN0SWQgPSBmdW5jdGlvbiAoXywgaWQpIHsgcmV0dXJuIGlkOyB9O1xyXG4gICAgICAgIHZhciBzZWxlY3RCeUlkID0gZnVuY3Rpb24gKGVudGl0aWVzLCBpZCkgeyByZXR1cm4gZW50aXRpZXNbaWRdOyB9O1xyXG4gICAgICAgIHZhciBzZWxlY3RUb3RhbCA9IGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yKHNlbGVjdElkcywgZnVuY3Rpb24gKGlkcykgeyByZXR1cm4gaWRzLmxlbmd0aDsgfSk7XHJcbiAgICAgICAgaWYgKCFzZWxlY3RTdGF0ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgc2VsZWN0SWRzOiBzZWxlY3RJZHMsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RFbnRpdGllczogc2VsZWN0RW50aXRpZXMsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RBbGw6IHNlbGVjdEFsbCxcclxuICAgICAgICAgICAgICAgIHNlbGVjdFRvdGFsOiBzZWxlY3RUb3RhbCxcclxuICAgICAgICAgICAgICAgIHNlbGVjdEJ5SWQ6IGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yKHNlbGVjdEVudGl0aWVzLCBzZWxlY3RJZCwgc2VsZWN0QnlJZClcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHNlbGVjdEdsb2JhbGl6ZWRFbnRpdGllcyA9IGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yKHNlbGVjdFN0YXRlLCBzZWxlY3RFbnRpdGllcyk7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgc2VsZWN0SWRzOiBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvcihzZWxlY3RTdGF0ZSwgc2VsZWN0SWRzKSxcclxuICAgICAgICAgICAgc2VsZWN0RW50aXRpZXM6IHNlbGVjdEdsb2JhbGl6ZWRFbnRpdGllcyxcclxuICAgICAgICAgICAgc2VsZWN0QWxsOiBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvcihzZWxlY3RTdGF0ZSwgc2VsZWN0QWxsKSxcclxuICAgICAgICAgICAgc2VsZWN0VG90YWw6IGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yKHNlbGVjdFN0YXRlLCBzZWxlY3RUb3RhbCksXHJcbiAgICAgICAgICAgIHNlbGVjdEJ5SWQ6IGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yKHNlbGVjdEdsb2JhbGl6ZWRFbnRpdGllcywgc2VsZWN0SWQsIHNlbGVjdEJ5SWQpXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIHJldHVybiB7IGdldFNlbGVjdG9yczogZ2V0U2VsZWN0b3JzIH07XHJcbn1cclxuLy8gc3JjL2VudGl0aWVzL3N0YXRlX2FkYXB0ZXIudHNcclxuaW1wb3J0IGNyZWF0ZU5leHRTdGF0ZTMsIHsgaXNEcmFmdCBhcyBpc0RyYWZ0MyB9IGZyb20gXCJpbW1lclwiO1xyXG5mdW5jdGlvbiBjcmVhdGVTaW5nbGVBcmd1bWVudFN0YXRlT3BlcmF0b3IobXV0YXRvcikge1xyXG4gICAgdmFyIG9wZXJhdG9yID0gY3JlYXRlU3RhdGVPcGVyYXRvcihmdW5jdGlvbiAoXywgc3RhdGUpIHsgcmV0dXJuIG11dGF0b3Ioc3RhdGUpOyB9KTtcclxuICAgIHJldHVybiBmdW5jdGlvbiBvcGVyYXRpb24oc3RhdGUpIHtcclxuICAgICAgICByZXR1cm4gb3BlcmF0b3Ioc3RhdGUsIHZvaWQgMCk7XHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGNyZWF0ZVN0YXRlT3BlcmF0b3IobXV0YXRvcikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIG9wZXJhdGlvbihzdGF0ZSwgYXJnKSB7XHJcbiAgICAgICAgZnVuY3Rpb24gaXNQYXlsb2FkQWN0aW9uQXJndW1lbnQoYXJnMikge1xyXG4gICAgICAgICAgICByZXR1cm4gaXNGU0EoYXJnMik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBydW5NdXRhdG9yID0gZnVuY3Rpb24gKGRyYWZ0KSB7XHJcbiAgICAgICAgICAgIGlmIChpc1BheWxvYWRBY3Rpb25Bcmd1bWVudChhcmcpKSB7XHJcbiAgICAgICAgICAgICAgICBtdXRhdG9yKGFyZy5wYXlsb2FkLCBkcmFmdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBtdXRhdG9yKGFyZywgZHJhZnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAoaXNEcmFmdDMoc3RhdGUpKSB7XHJcbiAgICAgICAgICAgIHJ1bk11dGF0b3Ioc3RhdGUpO1xyXG4gICAgICAgICAgICByZXR1cm4gc3RhdGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlTmV4dFN0YXRlMyhzdGF0ZSwgcnVuTXV0YXRvcik7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG4vLyBzcmMvZW50aXRpZXMvdXRpbHMudHNcclxuZnVuY3Rpb24gc2VsZWN0SWRWYWx1ZShlbnRpdHksIHNlbGVjdElkKSB7XHJcbiAgICB2YXIga2V5ID0gc2VsZWN0SWQoZW50aXR5KTtcclxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgJiYga2V5ID09PSB2b2lkIDApIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oXCJUaGUgZW50aXR5IHBhc3NlZCB0byB0aGUgYHNlbGVjdElkYCBpbXBsZW1lbnRhdGlvbiByZXR1cm5lZCB1bmRlZmluZWQuXCIsIFwiWW91IHNob3VsZCBwcm9iYWJseSBwcm92aWRlIHlvdXIgb3duIGBzZWxlY3RJZGAgaW1wbGVtZW50YXRpb24uXCIsIFwiVGhlIGVudGl0eSB0aGF0IHdhcyBwYXNzZWQ6XCIsIGVudGl0eSwgXCJUaGUgYHNlbGVjdElkYCBpbXBsZW1lbnRhdGlvbjpcIiwgc2VsZWN0SWQudG9TdHJpbmcoKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ga2V5O1xyXG59XHJcbmZ1bmN0aW9uIGVuc3VyZUVudGl0aWVzQXJyYXkoZW50aXRpZXMpIHtcclxuICAgIGlmICghQXJyYXkuaXNBcnJheShlbnRpdGllcykpIHtcclxuICAgICAgICBlbnRpdGllcyA9IE9iamVjdC52YWx1ZXMoZW50aXRpZXMpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGVudGl0aWVzO1xyXG59XHJcbmZ1bmN0aW9uIHNwbGl0QWRkZWRVcGRhdGVkRW50aXRpZXMobmV3RW50aXRpZXMsIHNlbGVjdElkLCBzdGF0ZSkge1xyXG4gICAgbmV3RW50aXRpZXMgPSBlbnN1cmVFbnRpdGllc0FycmF5KG5ld0VudGl0aWVzKTtcclxuICAgIHZhciBhZGRlZCA9IFtdO1xyXG4gICAgdmFyIHVwZGF0ZWQgPSBbXTtcclxuICAgIGZvciAodmFyIF9pID0gMCwgbmV3RW50aXRpZXNfMSA9IG5ld0VudGl0aWVzOyBfaSA8IG5ld0VudGl0aWVzXzEubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgdmFyIGVudGl0eSA9IG5ld0VudGl0aWVzXzFbX2ldO1xyXG4gICAgICAgIHZhciBpZCA9IHNlbGVjdElkVmFsdWUoZW50aXR5LCBzZWxlY3RJZCk7XHJcbiAgICAgICAgaWYgKGlkIGluIHN0YXRlLmVudGl0aWVzKSB7XHJcbiAgICAgICAgICAgIHVwZGF0ZWQucHVzaCh7IGlkOiBpZCwgY2hhbmdlczogZW50aXR5IH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgYWRkZWQucHVzaChlbnRpdHkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBbYWRkZWQsIHVwZGF0ZWRdO1xyXG59XHJcbi8vIHNyYy9lbnRpdGllcy91bnNvcnRlZF9zdGF0ZV9hZGFwdGVyLnRzXHJcbmZ1bmN0aW9uIGNyZWF0ZVVuc29ydGVkU3RhdGVBZGFwdGVyKHNlbGVjdElkKSB7XHJcbiAgICBmdW5jdGlvbiBhZGRPbmVNdXRhYmx5KGVudGl0eSwgc3RhdGUpIHtcclxuICAgICAgICB2YXIga2V5ID0gc2VsZWN0SWRWYWx1ZShlbnRpdHksIHNlbGVjdElkKTtcclxuICAgICAgICBpZiAoa2V5IGluIHN0YXRlLmVudGl0aWVzKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgc3RhdGUuaWRzLnB1c2goa2V5KTtcclxuICAgICAgICBzdGF0ZS5lbnRpdGllc1trZXldID0gZW50aXR5O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkTWFueU11dGFibHkobmV3RW50aXRpZXMsIHN0YXRlKSB7XHJcbiAgICAgICAgbmV3RW50aXRpZXMgPSBlbnN1cmVFbnRpdGllc0FycmF5KG5ld0VudGl0aWVzKTtcclxuICAgICAgICBmb3IgKHZhciBfaSA9IDAsIG5ld0VudGl0aWVzXzIgPSBuZXdFbnRpdGllczsgX2kgPCBuZXdFbnRpdGllc18yLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICB2YXIgZW50aXR5ID0gbmV3RW50aXRpZXNfMltfaV07XHJcbiAgICAgICAgICAgIGFkZE9uZU11dGFibHkoZW50aXR5LCBzdGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gc2V0T25lTXV0YWJseShlbnRpdHksIHN0YXRlKSB7XHJcbiAgICAgICAgdmFyIGtleSA9IHNlbGVjdElkVmFsdWUoZW50aXR5LCBzZWxlY3RJZCk7XHJcbiAgICAgICAgaWYgKCEoa2V5IGluIHN0YXRlLmVudGl0aWVzKSkge1xyXG4gICAgICAgICAgICBzdGF0ZS5pZHMucHVzaChrZXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzdGF0ZS5lbnRpdGllc1trZXldID0gZW50aXR5O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gc2V0TWFueU11dGFibHkobmV3RW50aXRpZXMsIHN0YXRlKSB7XHJcbiAgICAgICAgbmV3RW50aXRpZXMgPSBlbnN1cmVFbnRpdGllc0FycmF5KG5ld0VudGl0aWVzKTtcclxuICAgICAgICBmb3IgKHZhciBfaSA9IDAsIG5ld0VudGl0aWVzXzMgPSBuZXdFbnRpdGllczsgX2kgPCBuZXdFbnRpdGllc18zLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICB2YXIgZW50aXR5ID0gbmV3RW50aXRpZXNfM1tfaV07XHJcbiAgICAgICAgICAgIHNldE9uZU11dGFibHkoZW50aXR5LCBzdGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gc2V0QWxsTXV0YWJseShuZXdFbnRpdGllcywgc3RhdGUpIHtcclxuICAgICAgICBuZXdFbnRpdGllcyA9IGVuc3VyZUVudGl0aWVzQXJyYXkobmV3RW50aXRpZXMpO1xyXG4gICAgICAgIHN0YXRlLmlkcyA9IFtdO1xyXG4gICAgICAgIHN0YXRlLmVudGl0aWVzID0ge307XHJcbiAgICAgICAgYWRkTWFueU11dGFibHkobmV3RW50aXRpZXMsIHN0YXRlKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHJlbW92ZU9uZU11dGFibHkoa2V5LCBzdGF0ZSkge1xyXG4gICAgICAgIHJldHVybiByZW1vdmVNYW55TXV0YWJseShba2V5XSwgc3RhdGUpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gcmVtb3ZlTWFueU11dGFibHkoa2V5cywgc3RhdGUpIHtcclxuICAgICAgICB2YXIgZGlkTXV0YXRlID0gZmFsc2U7XHJcbiAgICAgICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICAgICAgaWYgKGtleSBpbiBzdGF0ZS5lbnRpdGllcykge1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIHN0YXRlLmVudGl0aWVzW2tleV07XHJcbiAgICAgICAgICAgICAgICBkaWRNdXRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKGRpZE11dGF0ZSkge1xyXG4gICAgICAgICAgICBzdGF0ZS5pZHMgPSBzdGF0ZS5pZHMuZmlsdGVyKGZ1bmN0aW9uIChpZCkgeyByZXR1cm4gaWQgaW4gc3RhdGUuZW50aXRpZXM7IH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHJlbW92ZUFsbE11dGFibHkoc3RhdGUpIHtcclxuICAgICAgICBPYmplY3QuYXNzaWduKHN0YXRlLCB7XHJcbiAgICAgICAgICAgIGlkczogW10sXHJcbiAgICAgICAgICAgIGVudGl0aWVzOiB7fVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gdGFrZU5ld0tleShrZXlzLCB1cGRhdGUsIHN0YXRlKSB7XHJcbiAgICAgICAgdmFyIG9yaWdpbmFsMiA9IHN0YXRlLmVudGl0aWVzW3VwZGF0ZS5pZF07XHJcbiAgICAgICAgdmFyIHVwZGF0ZWQgPSBPYmplY3QuYXNzaWduKHt9LCBvcmlnaW5hbDIsIHVwZGF0ZS5jaGFuZ2VzKTtcclxuICAgICAgICB2YXIgbmV3S2V5ID0gc2VsZWN0SWRWYWx1ZSh1cGRhdGVkLCBzZWxlY3RJZCk7XHJcbiAgICAgICAgdmFyIGhhc05ld0tleSA9IG5ld0tleSAhPT0gdXBkYXRlLmlkO1xyXG4gICAgICAgIGlmIChoYXNOZXdLZXkpIHtcclxuICAgICAgICAgICAga2V5c1t1cGRhdGUuaWRdID0gbmV3S2V5O1xyXG4gICAgICAgICAgICBkZWxldGUgc3RhdGUuZW50aXRpZXNbdXBkYXRlLmlkXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc3RhdGUuZW50aXRpZXNbbmV3S2V5XSA9IHVwZGF0ZWQ7XHJcbiAgICAgICAgcmV0dXJuIGhhc05ld0tleTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHVwZGF0ZU9uZU11dGFibHkodXBkYXRlLCBzdGF0ZSkge1xyXG4gICAgICAgIHJldHVybiB1cGRhdGVNYW55TXV0YWJseShbdXBkYXRlXSwgc3RhdGUpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gdXBkYXRlTWFueU11dGFibHkodXBkYXRlcywgc3RhdGUpIHtcclxuICAgICAgICB2YXIgbmV3S2V5cyA9IHt9O1xyXG4gICAgICAgIHZhciB1cGRhdGVzUGVyRW50aXR5ID0ge307XHJcbiAgICAgICAgdXBkYXRlcy5mb3JFYWNoKGZ1bmN0aW9uICh1cGRhdGUpIHtcclxuICAgICAgICAgICAgaWYgKHVwZGF0ZS5pZCBpbiBzdGF0ZS5lbnRpdGllcykge1xyXG4gICAgICAgICAgICAgICAgdXBkYXRlc1BlckVudGl0eVt1cGRhdGUuaWRdID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlkOiB1cGRhdGUuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlczogX19zcHJlYWRWYWx1ZXMoX19zcHJlYWRWYWx1ZXMoe30sIHVwZGF0ZXNQZXJFbnRpdHlbdXBkYXRlLmlkXSA/IHVwZGF0ZXNQZXJFbnRpdHlbdXBkYXRlLmlkXS5jaGFuZ2VzIDogbnVsbCksIHVwZGF0ZS5jaGFuZ2VzKVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHVwZGF0ZXMgPSBPYmplY3QudmFsdWVzKHVwZGF0ZXNQZXJFbnRpdHkpO1xyXG4gICAgICAgIHZhciBkaWRNdXRhdGVFbnRpdGllcyA9IHVwZGF0ZXMubGVuZ3RoID4gMDtcclxuICAgICAgICBpZiAoZGlkTXV0YXRlRW50aXRpZXMpIHtcclxuICAgICAgICAgICAgdmFyIGRpZE11dGF0ZUlkcyA9IHVwZGF0ZXMuZmlsdGVyKGZ1bmN0aW9uICh1cGRhdGUpIHsgcmV0dXJuIHRha2VOZXdLZXkobmV3S2V5cywgdXBkYXRlLCBzdGF0ZSk7IH0pLmxlbmd0aCA+IDA7XHJcbiAgICAgICAgICAgIGlmIChkaWRNdXRhdGVJZHMpIHtcclxuICAgICAgICAgICAgICAgIHN0YXRlLmlkcyA9IE9iamVjdC5rZXlzKHN0YXRlLmVudGl0aWVzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHVwc2VydE9uZU11dGFibHkoZW50aXR5LCBzdGF0ZSkge1xyXG4gICAgICAgIHJldHVybiB1cHNlcnRNYW55TXV0YWJseShbZW50aXR5XSwgc3RhdGUpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gdXBzZXJ0TWFueU11dGFibHkobmV3RW50aXRpZXMsIHN0YXRlKSB7XHJcbiAgICAgICAgdmFyIF9jID0gc3BsaXRBZGRlZFVwZGF0ZWRFbnRpdGllcyhuZXdFbnRpdGllcywgc2VsZWN0SWQsIHN0YXRlKSwgYWRkZWQgPSBfY1swXSwgdXBkYXRlZCA9IF9jWzFdO1xyXG4gICAgICAgIHVwZGF0ZU1hbnlNdXRhYmx5KHVwZGF0ZWQsIHN0YXRlKTtcclxuICAgICAgICBhZGRNYW55TXV0YWJseShhZGRlZCwgc3RhdGUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICByZW1vdmVBbGw6IGNyZWF0ZVNpbmdsZUFyZ3VtZW50U3RhdGVPcGVyYXRvcihyZW1vdmVBbGxNdXRhYmx5KSxcclxuICAgICAgICBhZGRPbmU6IGNyZWF0ZVN0YXRlT3BlcmF0b3IoYWRkT25lTXV0YWJseSksXHJcbiAgICAgICAgYWRkTWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcihhZGRNYW55TXV0YWJseSksXHJcbiAgICAgICAgc2V0T25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHNldE9uZU11dGFibHkpLFxyXG4gICAgICAgIHNldE1hbnk6IGNyZWF0ZVN0YXRlT3BlcmF0b3Ioc2V0TWFueU11dGFibHkpLFxyXG4gICAgICAgIHNldEFsbDogY3JlYXRlU3RhdGVPcGVyYXRvcihzZXRBbGxNdXRhYmx5KSxcclxuICAgICAgICB1cGRhdGVPbmU6IGNyZWF0ZVN0YXRlT3BlcmF0b3IodXBkYXRlT25lTXV0YWJseSksXHJcbiAgICAgICAgdXBkYXRlTWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcih1cGRhdGVNYW55TXV0YWJseSksXHJcbiAgICAgICAgdXBzZXJ0T25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHVwc2VydE9uZU11dGFibHkpLFxyXG4gICAgICAgIHVwc2VydE1hbnk6IGNyZWF0ZVN0YXRlT3BlcmF0b3IodXBzZXJ0TWFueU11dGFibHkpLFxyXG4gICAgICAgIHJlbW92ZU9uZTogY3JlYXRlU3RhdGVPcGVyYXRvcihyZW1vdmVPbmVNdXRhYmx5KSxcclxuICAgICAgICByZW1vdmVNYW55OiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHJlbW92ZU1hbnlNdXRhYmx5KVxyXG4gICAgfTtcclxufVxyXG4vLyBzcmMvZW50aXRpZXMvc29ydGVkX3N0YXRlX2FkYXB0ZXIudHNcclxuZnVuY3Rpb24gY3JlYXRlU29ydGVkU3RhdGVBZGFwdGVyKHNlbGVjdElkLCBzb3J0KSB7XHJcbiAgICB2YXIgX2MgPSBjcmVhdGVVbnNvcnRlZFN0YXRlQWRhcHRlcihzZWxlY3RJZCksIHJlbW92ZU9uZSA9IF9jLnJlbW92ZU9uZSwgcmVtb3ZlTWFueSA9IF9jLnJlbW92ZU1hbnksIHJlbW92ZUFsbCA9IF9jLnJlbW92ZUFsbDtcclxuICAgIGZ1bmN0aW9uIGFkZE9uZU11dGFibHkoZW50aXR5LCBzdGF0ZSkge1xyXG4gICAgICAgIHJldHVybiBhZGRNYW55TXV0YWJseShbZW50aXR5XSwgc3RhdGUpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkTWFueU11dGFibHkobmV3RW50aXRpZXMsIHN0YXRlKSB7XHJcbiAgICAgICAgbmV3RW50aXRpZXMgPSBlbnN1cmVFbnRpdGllc0FycmF5KG5ld0VudGl0aWVzKTtcclxuICAgICAgICB2YXIgbW9kZWxzID0gbmV3RW50aXRpZXMuZmlsdGVyKGZ1bmN0aW9uIChtb2RlbCkgeyByZXR1cm4gIShzZWxlY3RJZFZhbHVlKG1vZGVsLCBzZWxlY3RJZCkgaW4gc3RhdGUuZW50aXRpZXMpOyB9KTtcclxuICAgICAgICBpZiAobW9kZWxzLmxlbmd0aCAhPT0gMCkge1xyXG4gICAgICAgICAgICBtZXJnZShtb2RlbHMsIHN0YXRlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBzZXRPbmVNdXRhYmx5KGVudGl0eSwgc3RhdGUpIHtcclxuICAgICAgICByZXR1cm4gc2V0TWFueU11dGFibHkoW2VudGl0eV0sIHN0YXRlKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHNldE1hbnlNdXRhYmx5KG5ld0VudGl0aWVzLCBzdGF0ZSkge1xyXG4gICAgICAgIG5ld0VudGl0aWVzID0gZW5zdXJlRW50aXRpZXNBcnJheShuZXdFbnRpdGllcyk7XHJcbiAgICAgICAgaWYgKG5ld0VudGl0aWVzLmxlbmd0aCAhPT0gMCkge1xyXG4gICAgICAgICAgICBtZXJnZShuZXdFbnRpdGllcywgc3RhdGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHNldEFsbE11dGFibHkobmV3RW50aXRpZXMsIHN0YXRlKSB7XHJcbiAgICAgICAgbmV3RW50aXRpZXMgPSBlbnN1cmVFbnRpdGllc0FycmF5KG5ld0VudGl0aWVzKTtcclxuICAgICAgICBzdGF0ZS5lbnRpdGllcyA9IHt9O1xyXG4gICAgICAgIHN0YXRlLmlkcyA9IFtdO1xyXG4gICAgICAgIGFkZE1hbnlNdXRhYmx5KG5ld0VudGl0aWVzLCBzdGF0ZSk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiB1cGRhdGVPbmVNdXRhYmx5KHVwZGF0ZSwgc3RhdGUpIHtcclxuICAgICAgICByZXR1cm4gdXBkYXRlTWFueU11dGFibHkoW3VwZGF0ZV0sIHN0YXRlKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHVwZGF0ZU1hbnlNdXRhYmx5KHVwZGF0ZXMsIHN0YXRlKSB7XHJcbiAgICAgICAgdmFyIGFwcGxpZWRVcGRhdGVzID0gZmFsc2U7XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwLCB1cGRhdGVzXzEgPSB1cGRhdGVzOyBfaSA8IHVwZGF0ZXNfMS5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgdmFyIHVwZGF0ZSA9IHVwZGF0ZXNfMVtfaV07XHJcbiAgICAgICAgICAgIHZhciBlbnRpdHkgPSBzdGF0ZS5lbnRpdGllc1t1cGRhdGUuaWRdO1xyXG4gICAgICAgICAgICBpZiAoIWVudGl0eSkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYXBwbGllZFVwZGF0ZXMgPSB0cnVlO1xyXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGVudGl0eSwgdXBkYXRlLmNoYW5nZXMpO1xyXG4gICAgICAgICAgICB2YXIgbmV3SWQgPSBzZWxlY3RJZChlbnRpdHkpO1xyXG4gICAgICAgICAgICBpZiAodXBkYXRlLmlkICE9PSBuZXdJZCkge1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIHN0YXRlLmVudGl0aWVzW3VwZGF0ZS5pZF07XHJcbiAgICAgICAgICAgICAgICBzdGF0ZS5lbnRpdGllc1tuZXdJZF0gPSBlbnRpdHk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGFwcGxpZWRVcGRhdGVzKSB7XHJcbiAgICAgICAgICAgIHJlc29ydEVudGl0aWVzKHN0YXRlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiB1cHNlcnRPbmVNdXRhYmx5KGVudGl0eSwgc3RhdGUpIHtcclxuICAgICAgICByZXR1cm4gdXBzZXJ0TWFueU11dGFibHkoW2VudGl0eV0sIHN0YXRlKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHVwc2VydE1hbnlNdXRhYmx5KG5ld0VudGl0aWVzLCBzdGF0ZSkge1xyXG4gICAgICAgIHZhciBfYyA9IHNwbGl0QWRkZWRVcGRhdGVkRW50aXRpZXMobmV3RW50aXRpZXMsIHNlbGVjdElkLCBzdGF0ZSksIGFkZGVkID0gX2NbMF0sIHVwZGF0ZWQgPSBfY1sxXTtcclxuICAgICAgICB1cGRhdGVNYW55TXV0YWJseSh1cGRhdGVkLCBzdGF0ZSk7XHJcbiAgICAgICAgYWRkTWFueU11dGFibHkoYWRkZWQsIHN0YXRlKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFyZUFycmF5c0VxdWFsKGEsIGIpIHtcclxuICAgICAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhLmxlbmd0aCAmJiBpIDwgYi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoYVtpXSA9PT0gYltpXSkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIG1lcmdlKG1vZGVscywgc3RhdGUpIHtcclxuICAgICAgICBtb2RlbHMuZm9yRWFjaChmdW5jdGlvbiAobW9kZWwpIHtcclxuICAgICAgICAgICAgc3RhdGUuZW50aXRpZXNbc2VsZWN0SWQobW9kZWwpXSA9IG1vZGVsO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJlc29ydEVudGl0aWVzKHN0YXRlKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHJlc29ydEVudGl0aWVzKHN0YXRlKSB7XHJcbiAgICAgICAgdmFyIGFsbEVudGl0aWVzID0gT2JqZWN0LnZhbHVlcyhzdGF0ZS5lbnRpdGllcyk7XHJcbiAgICAgICAgYWxsRW50aXRpZXMuc29ydChzb3J0KTtcclxuICAgICAgICB2YXIgbmV3U29ydGVkSWRzID0gYWxsRW50aXRpZXMubWFwKHNlbGVjdElkKTtcclxuICAgICAgICB2YXIgaWRzID0gc3RhdGUuaWRzO1xyXG4gICAgICAgIGlmICghYXJlQXJyYXlzRXF1YWwoaWRzLCBuZXdTb3J0ZWRJZHMpKSB7XHJcbiAgICAgICAgICAgIHN0YXRlLmlkcyA9IG5ld1NvcnRlZElkcztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHJlbW92ZU9uZTogcmVtb3ZlT25lLFxyXG4gICAgICAgIHJlbW92ZU1hbnk6IHJlbW92ZU1hbnksXHJcbiAgICAgICAgcmVtb3ZlQWxsOiByZW1vdmVBbGwsXHJcbiAgICAgICAgYWRkT25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKGFkZE9uZU11dGFibHkpLFxyXG4gICAgICAgIHVwZGF0ZU9uZTogY3JlYXRlU3RhdGVPcGVyYXRvcih1cGRhdGVPbmVNdXRhYmx5KSxcclxuICAgICAgICB1cHNlcnRPbmU6IGNyZWF0ZVN0YXRlT3BlcmF0b3IodXBzZXJ0T25lTXV0YWJseSksXHJcbiAgICAgICAgc2V0T25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHNldE9uZU11dGFibHkpLFxyXG4gICAgICAgIHNldE1hbnk6IGNyZWF0ZVN0YXRlT3BlcmF0b3Ioc2V0TWFueU11dGFibHkpLFxyXG4gICAgICAgIHNldEFsbDogY3JlYXRlU3RhdGVPcGVyYXRvcihzZXRBbGxNdXRhYmx5KSxcclxuICAgICAgICBhZGRNYW55OiBjcmVhdGVTdGF0ZU9wZXJhdG9yKGFkZE1hbnlNdXRhYmx5KSxcclxuICAgICAgICB1cGRhdGVNYW55OiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHVwZGF0ZU1hbnlNdXRhYmx5KSxcclxuICAgICAgICB1cHNlcnRNYW55OiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHVwc2VydE1hbnlNdXRhYmx5KVxyXG4gICAgfTtcclxufVxyXG4vLyBzcmMvZW50aXRpZXMvY3JlYXRlX2FkYXB0ZXIudHNcclxuZnVuY3Rpb24gY3JlYXRlRW50aXR5QWRhcHRlcihvcHRpb25zKSB7XHJcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxyXG4gICAgdmFyIF9jID0gX19zcHJlYWRWYWx1ZXMoe1xyXG4gICAgICAgIHNvcnRDb21wYXJlcjogZmFsc2UsXHJcbiAgICAgICAgc2VsZWN0SWQ6IGZ1bmN0aW9uIChpbnN0YW5jZSkgeyByZXR1cm4gaW5zdGFuY2UuaWQ7IH1cclxuICAgIH0sIG9wdGlvbnMpLCBzZWxlY3RJZCA9IF9jLnNlbGVjdElkLCBzb3J0Q29tcGFyZXIgPSBfYy5zb3J0Q29tcGFyZXI7XHJcbiAgICB2YXIgc3RhdGVGYWN0b3J5ID0gY3JlYXRlSW5pdGlhbFN0YXRlRmFjdG9yeSgpO1xyXG4gICAgdmFyIHNlbGVjdG9yc0ZhY3RvcnkgPSBjcmVhdGVTZWxlY3RvcnNGYWN0b3J5KCk7XHJcbiAgICB2YXIgc3RhdGVBZGFwdGVyID0gc29ydENvbXBhcmVyID8gY3JlYXRlU29ydGVkU3RhdGVBZGFwdGVyKHNlbGVjdElkLCBzb3J0Q29tcGFyZXIpIDogY3JlYXRlVW5zb3J0ZWRTdGF0ZUFkYXB0ZXIoc2VsZWN0SWQpO1xyXG4gICAgcmV0dXJuIF9fc3ByZWFkVmFsdWVzKF9fc3ByZWFkVmFsdWVzKF9fc3ByZWFkVmFsdWVzKHtcclxuICAgICAgICBzZWxlY3RJZDogc2VsZWN0SWQsXHJcbiAgICAgICAgc29ydENvbXBhcmVyOiBzb3J0Q29tcGFyZXJcclxuICAgIH0sIHN0YXRlRmFjdG9yeSksIHNlbGVjdG9yc0ZhY3RvcnkpLCBzdGF0ZUFkYXB0ZXIpO1xyXG59XHJcbi8vIHNyYy9uYW5vaWQudHNcclxudmFyIHVybEFscGhhYmV0ID0gXCJNb2R1bGVTeW1iaGFzT3duUHItMDEyMzQ1Njc4OUFCQ0RFRkdITlJWZmdjdGlVdnpfS3FZVEprTHhwWlhJalFXXCI7XHJcbnZhciBuYW5vaWQgPSBmdW5jdGlvbiAoc2l6ZSkge1xyXG4gICAgaWYgKHNpemUgPT09IHZvaWQgMCkgeyBzaXplID0gMjE7IH1cclxuICAgIHZhciBpZCA9IFwiXCI7XHJcbiAgICB2YXIgaSA9IHNpemU7XHJcbiAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgICAgaWQgKz0gdXJsQWxwaGFiZXRbTWF0aC5yYW5kb20oKSAqIDY0IHwgMF07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaWQ7XHJcbn07XHJcbi8vIHNyYy9jcmVhdGVBc3luY1RodW5rLnRzXHJcbnZhciBjb21tb25Qcm9wZXJ0aWVzID0gW1xyXG4gICAgXCJuYW1lXCIsXHJcbiAgICBcIm1lc3NhZ2VcIixcclxuICAgIFwic3RhY2tcIixcclxuICAgIFwiY29kZVwiXHJcbl07XHJcbnZhciBSZWplY3RXaXRoVmFsdWUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBSZWplY3RXaXRoVmFsdWUocGF5bG9hZCwgbWV0YSkge1xyXG4gICAgICAgIHRoaXMucGF5bG9hZCA9IHBheWxvYWQ7XHJcbiAgICAgICAgdGhpcy5tZXRhID0gbWV0YTtcclxuICAgIH1cclxuICAgIHJldHVybiBSZWplY3RXaXRoVmFsdWU7XHJcbn0oKSk7XHJcbnZhciBGdWxmaWxsV2l0aE1ldGEgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBGdWxmaWxsV2l0aE1ldGEocGF5bG9hZCwgbWV0YSkge1xyXG4gICAgICAgIHRoaXMucGF5bG9hZCA9IHBheWxvYWQ7XHJcbiAgICAgICAgdGhpcy5tZXRhID0gbWV0YTtcclxuICAgIH1cclxuICAgIHJldHVybiBGdWxmaWxsV2l0aE1ldGE7XHJcbn0oKSk7XHJcbnZhciBtaW5pU2VyaWFsaXplRXJyb3IgPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT09IG51bGwpIHtcclxuICAgICAgICB2YXIgc2ltcGxlRXJyb3IgPSB7fTtcclxuICAgICAgICBmb3IgKHZhciBfaSA9IDAsIGNvbW1vblByb3BlcnRpZXNfMSA9IGNvbW1vblByb3BlcnRpZXM7IF9pIDwgY29tbW9uUHJvcGVydGllc18xLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICB2YXIgcHJvcGVydHkgPSBjb21tb25Qcm9wZXJ0aWVzXzFbX2ldO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlW3Byb3BlcnR5XSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICAgICAgc2ltcGxlRXJyb3JbcHJvcGVydHldID0gdmFsdWVbcHJvcGVydHldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzaW1wbGVFcnJvcjtcclxuICAgIH1cclxuICAgIHJldHVybiB7IG1lc3NhZ2U6IFN0cmluZyh2YWx1ZSkgfTtcclxufTtcclxudmFyIGNyZWF0ZUFzeW5jVGh1bmsgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gY3JlYXRlQXN5bmNUaHVuazIodHlwZVByZWZpeCwgcGF5bG9hZENyZWF0b3IsIG9wdGlvbnMpIHtcclxuICAgICAgICB2YXIgZnVsZmlsbGVkID0gY3JlYXRlQWN0aW9uKHR5cGVQcmVmaXggKyBcIi9mdWxmaWxsZWRcIiwgZnVuY3Rpb24gKHBheWxvYWQsIHJlcXVlc3RJZCwgYXJnLCBtZXRhKSB7IHJldHVybiAoe1xyXG4gICAgICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLFxyXG4gICAgICAgICAgICBtZXRhOiBfX3NwcmVhZFByb3BzKF9fc3ByZWFkVmFsdWVzKHt9LCBtZXRhIHx8IHt9KSwge1xyXG4gICAgICAgICAgICAgICAgYXJnOiBhcmcsXHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0SWQ6IHJlcXVlc3RJZCxcclxuICAgICAgICAgICAgICAgIHJlcXVlc3RTdGF0dXM6IFwiZnVsZmlsbGVkXCJcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9KTsgfSk7XHJcbiAgICAgICAgdmFyIHBlbmRpbmcgPSBjcmVhdGVBY3Rpb24odHlwZVByZWZpeCArIFwiL3BlbmRpbmdcIiwgZnVuY3Rpb24gKHJlcXVlc3RJZCwgYXJnLCBtZXRhKSB7IHJldHVybiAoe1xyXG4gICAgICAgICAgICBwYXlsb2FkOiB2b2lkIDAsXHJcbiAgICAgICAgICAgIG1ldGE6IF9fc3ByZWFkUHJvcHMoX19zcHJlYWRWYWx1ZXMoe30sIG1ldGEgfHwge30pLCB7XHJcbiAgICAgICAgICAgICAgICBhcmc6IGFyZyxcclxuICAgICAgICAgICAgICAgIHJlcXVlc3RJZDogcmVxdWVzdElkLFxyXG4gICAgICAgICAgICAgICAgcmVxdWVzdFN0YXR1czogXCJwZW5kaW5nXCJcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9KTsgfSk7XHJcbiAgICAgICAgdmFyIHJlamVjdGVkID0gY3JlYXRlQWN0aW9uKHR5cGVQcmVmaXggKyBcIi9yZWplY3RlZFwiLCBmdW5jdGlvbiAoZXJyb3IsIHJlcXVlc3RJZCwgYXJnLCBwYXlsb2FkLCBtZXRhKSB7IHJldHVybiAoe1xyXG4gICAgICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLFxyXG4gICAgICAgICAgICBlcnJvcjogKG9wdGlvbnMgJiYgb3B0aW9ucy5zZXJpYWxpemVFcnJvciB8fCBtaW5pU2VyaWFsaXplRXJyb3IpKGVycm9yIHx8IFwiUmVqZWN0ZWRcIiksXHJcbiAgICAgICAgICAgIG1ldGE6IF9fc3ByZWFkUHJvcHMoX19zcHJlYWRWYWx1ZXMoe30sIG1ldGEgfHwge30pLCB7XHJcbiAgICAgICAgICAgICAgICBhcmc6IGFyZyxcclxuICAgICAgICAgICAgICAgIHJlcXVlc3RJZDogcmVxdWVzdElkLFxyXG4gICAgICAgICAgICAgICAgcmVqZWN0ZWRXaXRoVmFsdWU6ICEhcGF5bG9hZCxcclxuICAgICAgICAgICAgICAgIHJlcXVlc3RTdGF0dXM6IFwicmVqZWN0ZWRcIixcclxuICAgICAgICAgICAgICAgIGFib3J0ZWQ6IChlcnJvciA9PSBudWxsID8gdm9pZCAwIDogZXJyb3IubmFtZSkgPT09IFwiQWJvcnRFcnJvclwiLFxyXG4gICAgICAgICAgICAgICAgY29uZGl0aW9uOiAoZXJyb3IgPT0gbnVsbCA/IHZvaWQgMCA6IGVycm9yLm5hbWUpID09PSBcIkNvbmRpdGlvbkVycm9yXCJcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9KTsgfSk7XHJcbiAgICAgICAgdmFyIGRpc3BsYXllZFdhcm5pbmcgPSBmYWxzZTtcclxuICAgICAgICB2YXIgQUMgPSB0eXBlb2YgQWJvcnRDb250cm9sbGVyICE9PSBcInVuZGVmaW5lZFwiID8gQWJvcnRDb250cm9sbGVyIDogLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBmdW5jdGlvbiBjbGFzc18xKCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaWduYWwgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWJvcnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgYWRkRXZlbnRMaXN0ZW5lcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hFdmVudDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBvbmFib3J0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICByZW1vdmVFdmVudExpc3RlbmVyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICByZWFzb246IHZvaWQgMCxcclxuICAgICAgICAgICAgICAgICAgICB0aHJvd0lmQWJvcnRlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2xhc3NfMS5wcm90b3R5cGUuYWJvcnQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkaXNwbGF5ZWRXYXJuaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXllZFdhcm5pbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmluZm8oXCJUaGlzIHBsYXRmb3JtIGRvZXMgbm90IGltcGxlbWVudCBBYm9ydENvbnRyb2xsZXIuIFxcbklmIHlvdSB3YW50IHRvIHVzZSB0aGUgQWJvcnRDb250cm9sbGVyIHRvIHJlYWN0IHRvIGBhYm9ydGAgZXZlbnRzLCBwbGVhc2UgY29uc2lkZXIgaW1wb3J0aW5nIGEgcG9seWZpbGwgbGlrZSAnYWJvcnRjb250cm9sbGVyLXBvbHlmaWxsL2Rpc3QvYWJvcnRjb250cm9sbGVyLXBvbHlmaWxsLW9ubHknLlwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHJldHVybiBjbGFzc18xO1xyXG4gICAgICAgIH0oKSk7XHJcbiAgICAgICAgZnVuY3Rpb24gYWN0aW9uQ3JlYXRvcihhcmcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChkaXNwYXRjaCwgZ2V0U3RhdGUsIGV4dHJhKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVxdWVzdElkID0gKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuaWRHZW5lcmF0b3IpID8gb3B0aW9ucy5pZEdlbmVyYXRvcihhcmcpIDogbmFub2lkKCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgYWJvcnRDb250cm9sbGVyID0gbmV3IEFDKCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgYWJvcnRSZWFzb247XHJcbiAgICAgICAgICAgICAgICB2YXIgc3RhcnRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gYWJvcnQocmVhc29uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWJvcnRSZWFzb24gPSByZWFzb247XHJcbiAgICAgICAgICAgICAgICAgICAgYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB2YXIgcHJvbWlzZTIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9fYXN5bmModGhpcywgbnVsbCwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2EsIF9iLCBmaW5hbEFjdGlvbiwgY29uZGl0aW9uUmVzdWx0LCBhYm9ydGVkUHJvbWlzZSwgZXJyXzEsIHNraXBEaXNwYXRjaDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfYy5sYWJlbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MudHJ5cy5wdXNoKFswLCA0LCAsIDVdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uUmVzdWx0ID0gKF9hID0gb3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5jb25kaXRpb24pID09IG51bGwgPyB2b2lkIDAgOiBfYS5jYWxsKG9wdGlvbnMsIGFyZywgeyBnZXRTdGF0ZTogZ2V0U3RhdGUsIGV4dHJhOiBleHRyYSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1RoZW5hYmxlKGNvbmRpdGlvblJlc3VsdCkpIHJldHVybiBbMyAvKmJyZWFrKi8sIDJdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBjb25kaXRpb25SZXN1bHRdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uUmVzdWx0ID0gX2Muc2VudCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYy5sYWJlbCA9IDI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uZGl0aW9uUmVzdWx0ID09PSBmYWxzZSB8fCBhYm9ydENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbmRpdGlvbkVycm9yXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogXCJBYm9ydGVkIGR1ZSB0byBjb25kaXRpb24gY2FsbGJhY2sgcmV0dXJuaW5nIGZhbHNlLlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYm9ydGVkUHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChfLCByZWplY3QpIHsgcmV0dXJuIGFib3J0Q29udHJvbGxlci5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlamVjdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkFib3J0RXJyb3JcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGFib3J0UmVhc29uIHx8IFwiQWJvcnRlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOyB9KTsgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKHBlbmRpbmcocmVxdWVzdElkLCBhcmcsIChfYiA9IG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuZ2V0UGVuZGluZ01ldGEpID09IG51bGwgPyB2b2lkIDAgOiBfYi5jYWxsKG9wdGlvbnMsIHsgcmVxdWVzdElkOiByZXF1ZXN0SWQsIGFyZzogYXJnIH0sIHsgZ2V0U3RhdGU6IGdldFN0YXRlLCBleHRyYTogZXh0cmEgfSkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgUHJvbWlzZS5yYWNlKFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYm9ydGVkUHJvbWlzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9taXNlLnJlc29sdmUocGF5bG9hZENyZWF0b3IoYXJnLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoOiBkaXNwYXRjaCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0U3RhdGU6IGdldFN0YXRlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYTogZXh0cmEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RJZDogcmVxdWVzdElkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYWw6IGFib3J0Q29udHJvbGxlci5zaWduYWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0OiBhYm9ydCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0V2l0aFZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIG1ldGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUmVqZWN0V2l0aFZhbHVlKHZhbHVlLCBtZXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsZmlsbFdpdGhWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBtZXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEZ1bGZpbGxXaXRoTWV0YSh2YWx1ZSwgbWV0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBSZWplY3RXaXRoVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgRnVsZmlsbFdpdGhNZXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVsZmlsbGVkKHJlc3VsdC5wYXlsb2FkLCByZXF1ZXN0SWQsIGFyZywgcmVzdWx0Lm1ldGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdWxmaWxsZWQocmVzdWx0LCByZXF1ZXN0SWQsIGFyZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsQWN0aW9uID0gX2Muc2VudCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCA1XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycl8xID0gX2Muc2VudCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbEFjdGlvbiA9IGVycl8xIGluc3RhbmNlb2YgUmVqZWN0V2l0aFZhbHVlID8gcmVqZWN0ZWQobnVsbCwgcmVxdWVzdElkLCBhcmcsIGVycl8xLnBheWxvYWQsIGVycl8xLm1ldGEpIDogcmVqZWN0ZWQoZXJyXzEsIHJlcXVlc3RJZCwgYXJnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszIC8qYnJlYWsqLywgNV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwRGlzcGF0Y2ggPSBvcHRpb25zICYmICFvcHRpb25zLmRpc3BhdGNoQ29uZGl0aW9uUmVqZWN0aW9uICYmIHJlamVjdGVkLm1hdGNoKGZpbmFsQWN0aW9uKSAmJiBmaW5hbEFjdGlvbi5tZXRhLmNvbmRpdGlvbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFza2lwRGlzcGF0Y2gpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKGZpbmFsQWN0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgZmluYWxBY3Rpb25dO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0oKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHByb21pc2UyLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWJvcnQ6IGFib3J0LFxyXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RJZDogcmVxdWVzdElkLFxyXG4gICAgICAgICAgICAgICAgICAgIGFyZzogYXJnLFxyXG4gICAgICAgICAgICAgICAgICAgIHVud3JhcDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvbWlzZTIudGhlbih1bndyYXBSZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihhY3Rpb25DcmVhdG9yLCB7XHJcbiAgICAgICAgICAgIHBlbmRpbmc6IHBlbmRpbmcsXHJcbiAgICAgICAgICAgIHJlamVjdGVkOiByZWplY3RlZCxcclxuICAgICAgICAgICAgZnVsZmlsbGVkOiBmdWxmaWxsZWQsXHJcbiAgICAgICAgICAgIHR5cGVQcmVmaXg6IHR5cGVQcmVmaXhcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGNyZWF0ZUFzeW5jVGh1bmsyLndpdGhUeXBlcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNyZWF0ZUFzeW5jVGh1bmsyOyB9O1xyXG4gICAgcmV0dXJuIGNyZWF0ZUFzeW5jVGh1bmsyO1xyXG59KSgpO1xyXG5mdW5jdGlvbiB1bndyYXBSZXN1bHQoYWN0aW9uKSB7XHJcbiAgICBpZiAoYWN0aW9uLm1ldGEgJiYgYWN0aW9uLm1ldGEucmVqZWN0ZWRXaXRoVmFsdWUpIHtcclxuICAgICAgICB0aHJvdyBhY3Rpb24ucGF5bG9hZDtcclxuICAgIH1cclxuICAgIGlmIChhY3Rpb24uZXJyb3IpIHtcclxuICAgICAgICB0aHJvdyBhY3Rpb24uZXJyb3I7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYWN0aW9uLnBheWxvYWQ7XHJcbn1cclxuZnVuY3Rpb24gaXNUaGVuYWJsZSh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgdmFsdWUudGhlbiA9PT0gXCJmdW5jdGlvblwiO1xyXG59XHJcbi8vIHNyYy90c0hlbHBlcnMudHNcclxudmFyIGhhc01hdGNoRnVuY3Rpb24gPSBmdW5jdGlvbiAodikge1xyXG4gICAgcmV0dXJuIHYgJiYgdHlwZW9mIHYubWF0Y2ggPT09IFwiZnVuY3Rpb25cIjtcclxufTtcclxuLy8gc3JjL21hdGNoZXJzLnRzXHJcbnZhciBtYXRjaGVzID0gZnVuY3Rpb24gKG1hdGNoZXIsIGFjdGlvbikge1xyXG4gICAgaWYgKGhhc01hdGNoRnVuY3Rpb24obWF0Y2hlcikpIHtcclxuICAgICAgICByZXR1cm4gbWF0Y2hlci5tYXRjaChhY3Rpb24pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIG1hdGNoZXIoYWN0aW9uKTtcclxuICAgIH1cclxufTtcclxuZnVuY3Rpb24gaXNBbnlPZigpIHtcclxuICAgIHZhciBtYXRjaGVycyA9IFtdO1xyXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICBtYXRjaGVyc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChhY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gbWF0Y2hlcnMuc29tZShmdW5jdGlvbiAobWF0Y2hlcikgeyByZXR1cm4gbWF0Y2hlcyhtYXRjaGVyLCBhY3Rpb24pOyB9KTtcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gaXNBbGxPZigpIHtcclxuICAgIHZhciBtYXRjaGVycyA9IFtdO1xyXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICBtYXRjaGVyc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChhY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gbWF0Y2hlcnMuZXZlcnkoZnVuY3Rpb24gKG1hdGNoZXIpIHsgcmV0dXJuIG1hdGNoZXMobWF0Y2hlciwgYWN0aW9uKTsgfSk7XHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGhhc0V4cGVjdGVkUmVxdWVzdE1ldGFkYXRhKGFjdGlvbiwgdmFsaWRTdGF0dXMpIHtcclxuICAgIGlmICghYWN0aW9uIHx8ICFhY3Rpb24ubWV0YSlcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB2YXIgaGFzVmFsaWRSZXF1ZXN0SWQgPSB0eXBlb2YgYWN0aW9uLm1ldGEucmVxdWVzdElkID09PSBcInN0cmluZ1wiO1xyXG4gICAgdmFyIGhhc1ZhbGlkUmVxdWVzdFN0YXR1cyA9IHZhbGlkU3RhdHVzLmluZGV4T2YoYWN0aW9uLm1ldGEucmVxdWVzdFN0YXR1cykgPiAtMTtcclxuICAgIHJldHVybiBoYXNWYWxpZFJlcXVlc3RJZCAmJiBoYXNWYWxpZFJlcXVlc3RTdGF0dXM7XHJcbn1cclxuZnVuY3Rpb24gaXNBc3luY1RodW5rQXJyYXkoYSkge1xyXG4gICAgcmV0dXJuIHR5cGVvZiBhWzBdID09PSBcImZ1bmN0aW9uXCIgJiYgXCJwZW5kaW5nXCIgaW4gYVswXSAmJiBcImZ1bGZpbGxlZFwiIGluIGFbMF0gJiYgXCJyZWplY3RlZFwiIGluIGFbMF07XHJcbn1cclxuZnVuY3Rpb24gaXNQZW5kaW5nKCkge1xyXG4gICAgdmFyIGFzeW5jVGh1bmtzID0gW107XHJcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgIGFzeW5jVGh1bmtzW19pXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICB9XHJcbiAgICBpZiAoYXN5bmNUaHVua3MubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChhY3Rpb24pIHsgcmV0dXJuIGhhc0V4cGVjdGVkUmVxdWVzdE1ldGFkYXRhKGFjdGlvbiwgW1wicGVuZGluZ1wiXSk7IH07XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzQXN5bmNUaHVua0FycmF5KGFzeW5jVGh1bmtzKSkge1xyXG4gICAgICAgIHJldHVybiBpc1BlbmRpbmcoKShhc3luY1RodW5rc1swXSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikge1xyXG4gICAgICAgIHZhciBtYXRjaGVycyA9IGFzeW5jVGh1bmtzLm1hcChmdW5jdGlvbiAoYXN5bmNUaHVuaykgeyByZXR1cm4gYXN5bmNUaHVuay5wZW5kaW5nOyB9KTtcclxuICAgICAgICB2YXIgY29tYmluZWRNYXRjaGVyID0gaXNBbnlPZi5hcHBseSh2b2lkIDAsIG1hdGNoZXJzKTtcclxuICAgICAgICByZXR1cm4gY29tYmluZWRNYXRjaGVyKGFjdGlvbik7XHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGlzUmVqZWN0ZWQoKSB7XHJcbiAgICB2YXIgYXN5bmNUaHVua3MgPSBbXTtcclxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgYXN5bmNUaHVua3NbX2ldID0gYXJndW1lbnRzW19pXTtcclxuICAgIH1cclxuICAgIGlmIChhc3luY1RodW5rcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikgeyByZXR1cm4gaGFzRXhwZWN0ZWRSZXF1ZXN0TWV0YWRhdGEoYWN0aW9uLCBbXCJyZWplY3RlZFwiXSk7IH07XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzQXN5bmNUaHVua0FycmF5KGFzeW5jVGh1bmtzKSkge1xyXG4gICAgICAgIHJldHVybiBpc1JlamVjdGVkKCkoYXN5bmNUaHVua3NbMF0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChhY3Rpb24pIHtcclxuICAgICAgICB2YXIgbWF0Y2hlcnMgPSBhc3luY1RodW5rcy5tYXAoZnVuY3Rpb24gKGFzeW5jVGh1bmspIHsgcmV0dXJuIGFzeW5jVGh1bmsucmVqZWN0ZWQ7IH0pO1xyXG4gICAgICAgIHZhciBjb21iaW5lZE1hdGNoZXIgPSBpc0FueU9mLmFwcGx5KHZvaWQgMCwgbWF0Y2hlcnMpO1xyXG4gICAgICAgIHJldHVybiBjb21iaW5lZE1hdGNoZXIoYWN0aW9uKTtcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gaXNSZWplY3RlZFdpdGhWYWx1ZSgpIHtcclxuICAgIHZhciBhc3luY1RodW5rcyA9IFtdO1xyXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICBhc3luY1RodW5rc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgfVxyXG4gICAgdmFyIGhhc0ZsYWcgPSBmdW5jdGlvbiAoYWN0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIGFjdGlvbiAmJiBhY3Rpb24ubWV0YSAmJiBhY3Rpb24ubWV0YS5yZWplY3RlZFdpdGhWYWx1ZTtcclxuICAgIH07XHJcbiAgICBpZiAoYXN5bmNUaHVua3MubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChhY3Rpb24pIHtcclxuICAgICAgICAgICAgdmFyIGNvbWJpbmVkTWF0Y2hlciA9IGlzQWxsT2YoaXNSZWplY3RlZC5hcHBseSh2b2lkIDAsIGFzeW5jVGh1bmtzKSwgaGFzRmxhZyk7XHJcbiAgICAgICAgICAgIHJldHVybiBjb21iaW5lZE1hdGNoZXIoYWN0aW9uKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKCFpc0FzeW5jVGh1bmtBcnJheShhc3luY1RodW5rcykpIHtcclxuICAgICAgICByZXR1cm4gaXNSZWplY3RlZFdpdGhWYWx1ZSgpKGFzeW5jVGh1bmtzWzBdKTtcclxuICAgIH1cclxuICAgIHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7XHJcbiAgICAgICAgdmFyIGNvbWJpbmVkTWF0Y2hlciA9IGlzQWxsT2YoaXNSZWplY3RlZC5hcHBseSh2b2lkIDAsIGFzeW5jVGh1bmtzKSwgaGFzRmxhZyk7XHJcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVkTWF0Y2hlcihhY3Rpb24pO1xyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBpc0Z1bGZpbGxlZCgpIHtcclxuICAgIHZhciBhc3luY1RodW5rcyA9IFtdO1xyXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICBhc3luY1RodW5rc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgfVxyXG4gICAgaWYgKGFzeW5jVGh1bmtzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7IHJldHVybiBoYXNFeHBlY3RlZFJlcXVlc3RNZXRhZGF0YShhY3Rpb24sIFtcImZ1bGZpbGxlZFwiXSk7IH07XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzQXN5bmNUaHVua0FycmF5KGFzeW5jVGh1bmtzKSkge1xyXG4gICAgICAgIHJldHVybiBpc0Z1bGZpbGxlZCgpKGFzeW5jVGh1bmtzWzBdKTtcclxuICAgIH1cclxuICAgIHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7XHJcbiAgICAgICAgdmFyIG1hdGNoZXJzID0gYXN5bmNUaHVua3MubWFwKGZ1bmN0aW9uIChhc3luY1RodW5rKSB7IHJldHVybiBhc3luY1RodW5rLmZ1bGZpbGxlZDsgfSk7XHJcbiAgICAgICAgdmFyIGNvbWJpbmVkTWF0Y2hlciA9IGlzQW55T2YuYXBwbHkodm9pZCAwLCBtYXRjaGVycyk7XHJcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVkTWF0Y2hlcihhY3Rpb24pO1xyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBpc0FzeW5jVGh1bmtBY3Rpb24oKSB7XHJcbiAgICB2YXIgYXN5bmNUaHVua3MgPSBbXTtcclxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgYXN5bmNUaHVua3NbX2ldID0gYXJndW1lbnRzW19pXTtcclxuICAgIH1cclxuICAgIGlmIChhc3luY1RodW5rcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikgeyByZXR1cm4gaGFzRXhwZWN0ZWRSZXF1ZXN0TWV0YWRhdGEoYWN0aW9uLCBbXCJwZW5kaW5nXCIsIFwiZnVsZmlsbGVkXCIsIFwicmVqZWN0ZWRcIl0pOyB9O1xyXG4gICAgfVxyXG4gICAgaWYgKCFpc0FzeW5jVGh1bmtBcnJheShhc3luY1RodW5rcykpIHtcclxuICAgICAgICByZXR1cm4gaXNBc3luY1RodW5rQWN0aW9uKCkoYXN5bmNUaHVua3NbMF0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChhY3Rpb24pIHtcclxuICAgICAgICB2YXIgbWF0Y2hlcnMgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBfaSA9IDAsIGFzeW5jVGh1bmtzXzEgPSBhc3luY1RodW5rczsgX2kgPCBhc3luY1RodW5rc18xLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICB2YXIgYXN5bmNUaHVuayA9IGFzeW5jVGh1bmtzXzFbX2ldO1xyXG4gICAgICAgICAgICBtYXRjaGVycy5wdXNoKGFzeW5jVGh1bmsucGVuZGluZywgYXN5bmNUaHVuay5yZWplY3RlZCwgYXN5bmNUaHVuay5mdWxmaWxsZWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgY29tYmluZWRNYXRjaGVyID0gaXNBbnlPZi5hcHBseSh2b2lkIDAsIG1hdGNoZXJzKTtcclxuICAgICAgICByZXR1cm4gY29tYmluZWRNYXRjaGVyKGFjdGlvbik7XHJcbiAgICB9O1xyXG59XHJcbi8vIHNyYy9saXN0ZW5lck1pZGRsZXdhcmUvdXRpbHMudHNcclxudmFyIGFzc2VydEZ1bmN0aW9uID0gZnVuY3Rpb24gKGZ1bmMsIGV4cGVjdGVkKSB7XHJcbiAgICBpZiAodHlwZW9mIGZ1bmMgIT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZXhwZWN0ZWQgKyBcIiBpcyBub3QgYSBmdW5jdGlvblwiKTtcclxuICAgIH1cclxufTtcclxudmFyIG5vb3AgPSBmdW5jdGlvbiAoKSB7XHJcbn07XHJcbnZhciBjYXRjaFJlamVjdGlvbiA9IGZ1bmN0aW9uIChwcm9taXNlMiwgb25FcnJvcikge1xyXG4gICAgaWYgKG9uRXJyb3IgPT09IHZvaWQgMCkgeyBvbkVycm9yID0gbm9vcDsgfVxyXG4gICAgcHJvbWlzZTIuY2F0Y2gob25FcnJvcik7XHJcbiAgICByZXR1cm4gcHJvbWlzZTI7XHJcbn07XHJcbnZhciBhZGRBYm9ydFNpZ25hbExpc3RlbmVyID0gZnVuY3Rpb24gKGFib3J0U2lnbmFsLCBjYWxsYmFjaykge1xyXG4gICAgYWJvcnRTaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIGNhbGxiYWNrLCB7IG9uY2U6IHRydWUgfSk7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gYWJvcnRTaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIGNhbGxiYWNrKTsgfTtcclxufTtcclxudmFyIGFib3J0Q29udHJvbGxlcldpdGhSZWFzb24gPSBmdW5jdGlvbiAoYWJvcnRDb250cm9sbGVyLCByZWFzb24pIHtcclxuICAgIHZhciBzaWduYWwgPSBhYm9ydENvbnRyb2xsZXIuc2lnbmFsO1xyXG4gICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKCEoXCJyZWFzb25cIiBpbiBzaWduYWwpKSB7XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNpZ25hbCwgXCJyZWFzb25cIiwge1xyXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICB2YWx1ZTogcmVhc29uLFxyXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXHJcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICA7XHJcbiAgICBhYm9ydENvbnRyb2xsZXIuYWJvcnQocmVhc29uKTtcclxufTtcclxuLy8gc3JjL2xpc3RlbmVyTWlkZGxld2FyZS9leGNlcHRpb25zLnRzXHJcbnZhciB0YXNrID0gXCJ0YXNrXCI7XHJcbnZhciBsaXN0ZW5lciA9IFwibGlzdGVuZXJcIjtcclxudmFyIGNvbXBsZXRlZCA9IFwiY29tcGxldGVkXCI7XHJcbnZhciBjYW5jZWxsZWQgPSBcImNhbmNlbGxlZFwiO1xyXG52YXIgdGFza0NhbmNlbGxlZCA9IFwidGFzay1cIiArIGNhbmNlbGxlZDtcclxudmFyIHRhc2tDb21wbGV0ZWQgPSBcInRhc2stXCIgKyBjb21wbGV0ZWQ7XHJcbnZhciBsaXN0ZW5lckNhbmNlbGxlZCA9IGxpc3RlbmVyICsgXCItXCIgKyBjYW5jZWxsZWQ7XHJcbnZhciBsaXN0ZW5lckNvbXBsZXRlZCA9IGxpc3RlbmVyICsgXCItXCIgKyBjb21wbGV0ZWQ7XHJcbnZhciBUYXNrQWJvcnRFcnJvciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIFRhc2tBYm9ydEVycm9yKGNvZGUpIHtcclxuICAgICAgICB0aGlzLmNvZGUgPSBjb2RlO1xyXG4gICAgICAgIHRoaXMubmFtZSA9IFwiVGFza0Fib3J0RXJyb3JcIjtcclxuICAgICAgICB0aGlzLm1lc3NhZ2UgPSB0YXNrICsgXCIgXCIgKyBjYW5jZWxsZWQgKyBcIiAocmVhc29uOiBcIiArIGNvZGUgKyBcIilcIjtcclxuICAgIH1cclxuICAgIHJldHVybiBUYXNrQWJvcnRFcnJvcjtcclxufSgpKTtcclxuLy8gc3JjL2xpc3RlbmVyTWlkZGxld2FyZS90YXNrLnRzXHJcbnZhciB2YWxpZGF0ZUFjdGl2ZSA9IGZ1bmN0aW9uIChzaWduYWwpIHtcclxuICAgIGlmIChzaWduYWwuYWJvcnRlZCkge1xyXG4gICAgICAgIHRocm93IG5ldyBUYXNrQWJvcnRFcnJvcihzaWduYWwucmVhc29uKTtcclxuICAgIH1cclxufTtcclxuZnVuY3Rpb24gcmFjZVdpdGhTaWduYWwoc2lnbmFsLCBwcm9taXNlMikge1xyXG4gICAgdmFyIGNsZWFudXAgPSBub29wO1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICB2YXIgbm90aWZ5UmVqZWN0aW9uID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVqZWN0KG5ldyBUYXNrQWJvcnRFcnJvcihzaWduYWwucmVhc29uKSk7IH07XHJcbiAgICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XHJcbiAgICAgICAgICAgIG5vdGlmeVJlamVjdGlvbigpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNsZWFudXAgPSBhZGRBYm9ydFNpZ25hbExpc3RlbmVyKHNpZ25hbCwgbm90aWZ5UmVqZWN0aW9uKTtcclxuICAgICAgICBwcm9taXNlMi5maW5hbGx5KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNsZWFudXAoKTsgfSkudGhlbihyZXNvbHZlLCByZWplY3QpO1xyXG4gICAgfSkuZmluYWxseShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgY2xlYW51cCA9IG5vb3A7XHJcbiAgICB9KTtcclxufVxyXG52YXIgcnVuVGFzayA9IGZ1bmN0aW9uICh0YXNrMiwgY2xlYW5VcCkgeyByZXR1cm4gX19hc3luYyh2b2lkIDAsIG51bGwsIGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciB2YWx1ZSwgZXJyb3JfMTtcclxuICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2MpIHtcclxuICAgICAgICBzd2l0Y2ggKF9jLmxhYmVsKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgICAgIF9jLnRyeXMucHVzaChbMCwgMywgNCwgNV0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgUHJvbWlzZS5yZXNvbHZlKCldO1xyXG4gICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICBfYy5zZW50KCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCB0YXNrMigpXTtcclxuICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBfYy5zZW50KCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IFwib2tcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgfV07XHJcbiAgICAgICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgICAgIGVycm9yXzEgPSBfYy5zZW50KCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IGVycm9yXzEgaW5zdGFuY2VvZiBUYXNrQWJvcnRFcnJvciA/IFwiY2FuY2VsbGVkXCIgOiBcInJlamVjdGVkXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvcl8xXHJcbiAgICAgICAgICAgICAgICAgICAgfV07XHJcbiAgICAgICAgICAgIGNhc2UgNDpcclxuICAgICAgICAgICAgICAgIGNsZWFuVXAgPT0gbnVsbCA/IHZvaWQgMCA6IGNsZWFuVXAoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbNyAvKmVuZGZpbmFsbHkqL107XHJcbiAgICAgICAgICAgIGNhc2UgNTogcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59KTsgfTtcclxudmFyIGNyZWF0ZVBhdXNlID0gZnVuY3Rpb24gKHNpZ25hbCkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChwcm9taXNlMikge1xyXG4gICAgICAgIHJldHVybiBjYXRjaFJlamVjdGlvbihyYWNlV2l0aFNpZ25hbChzaWduYWwsIHByb21pc2UyKS50aGVuKGZ1bmN0aW9uIChvdXRwdXQpIHtcclxuICAgICAgICAgICAgdmFsaWRhdGVBY3RpdmUoc2lnbmFsKTtcclxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcclxuICAgICAgICB9KSk7XHJcbiAgICB9O1xyXG59O1xyXG52YXIgY3JlYXRlRGVsYXkgPSBmdW5jdGlvbiAoc2lnbmFsKSB7XHJcbiAgICB2YXIgcGF1c2UgPSBjcmVhdGVQYXVzZShzaWduYWwpO1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0aW1lb3V0TXMpIHtcclxuICAgICAgICByZXR1cm4gcGF1c2UobmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmV0dXJuIHNldFRpbWVvdXQocmVzb2x2ZSwgdGltZW91dE1zKTsgfSkpO1xyXG4gICAgfTtcclxufTtcclxuLy8gc3JjL2xpc3RlbmVyTWlkZGxld2FyZS9pbmRleC50c1xyXG52YXIgYXNzaWduID0gT2JqZWN0LmFzc2lnbjtcclxudmFyIElOVEVSTkFMX05JTF9UT0tFTiA9IHt9O1xyXG52YXIgYWxtID0gXCJsaXN0ZW5lck1pZGRsZXdhcmVcIjtcclxudmFyIGNyZWF0ZUZvcmsgPSBmdW5jdGlvbiAocGFyZW50QWJvcnRTaWduYWwpIHtcclxuICAgIHZhciBsaW5rQ29udHJvbGxlcnMgPSBmdW5jdGlvbiAoY29udHJvbGxlcikgeyByZXR1cm4gYWRkQWJvcnRTaWduYWxMaXN0ZW5lcihwYXJlbnRBYm9ydFNpZ25hbCwgZnVuY3Rpb24gKCkgeyByZXR1cm4gYWJvcnRDb250cm9sbGVyV2l0aFJlYXNvbihjb250cm9sbGVyLCBwYXJlbnRBYm9ydFNpZ25hbC5yZWFzb24pOyB9KTsgfTtcclxuICAgIHJldHVybiBmdW5jdGlvbiAodGFza0V4ZWN1dG9yKSB7XHJcbiAgICAgICAgYXNzZXJ0RnVuY3Rpb24odGFza0V4ZWN1dG9yLCBcInRhc2tFeGVjdXRvclwiKTtcclxuICAgICAgICB2YXIgY2hpbGRBYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XHJcbiAgICAgICAgbGlua0NvbnRyb2xsZXJzKGNoaWxkQWJvcnRDb250cm9sbGVyKTtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gcnVuVGFzayhmdW5jdGlvbiAoKSB7IHJldHVybiBfX2FzeW5jKHZvaWQgMCwgbnVsbCwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0MjtcclxuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYykge1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYy5sYWJlbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVBY3RpdmUocGFyZW50QWJvcnRTaWduYWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZUFjdGl2ZShjaGlsZEFib3J0Q29udHJvbGxlci5zaWduYWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCB0YXNrRXhlY3V0b3Ioe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdXNlOiBjcmVhdGVQYXVzZShjaGlsZEFib3J0Q29udHJvbGxlci5zaWduYWwpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5OiBjcmVhdGVEZWxheShjaGlsZEFib3J0Q29udHJvbGxlci5zaWduYWwpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hbDogY2hpbGRBYm9ydENvbnRyb2xsZXIuc2lnbmFsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KV07XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQyID0gX2Muc2VudCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZUFjdGl2ZShjaGlsZEFib3J0Q29udHJvbGxlci5zaWduYWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgcmVzdWx0Ml07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pOyB9LCBmdW5jdGlvbiAoKSB7IHJldHVybiBhYm9ydENvbnRyb2xsZXJXaXRoUmVhc29uKGNoaWxkQWJvcnRDb250cm9sbGVyLCB0YXNrQ29tcGxldGVkKTsgfSk7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgcmVzdWx0OiBjcmVhdGVQYXVzZShwYXJlbnRBYm9ydFNpZ25hbCkocmVzdWx0KSxcclxuICAgICAgICAgICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBhYm9ydENvbnRyb2xsZXJXaXRoUmVhc29uKGNoaWxkQWJvcnRDb250cm9sbGVyLCB0YXNrQ2FuY2VsbGVkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9O1xyXG59O1xyXG52YXIgY3JlYXRlVGFrZVBhdHRlcm4gPSBmdW5jdGlvbiAoc3RhcnRMaXN0ZW5pbmcsIHNpZ25hbCkge1xyXG4gICAgdmFyIHRha2UgPSBmdW5jdGlvbiAocHJlZGljYXRlLCB0aW1lb3V0KSB7IHJldHVybiBfX2FzeW5jKHZvaWQgMCwgbnVsbCwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB1bnN1YnNjcmliZSwgdHVwbGVQcm9taXNlLCBwcm9taXNlcywgb3V0cHV0O1xyXG4gICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2MpIHtcclxuICAgICAgICAgICAgc3dpdGNoIChfYy5sYWJlbCkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlQWN0aXZlKHNpZ25hbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB0dXBsZVByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdG9wTGlzdGVuaW5nID0gc3RhcnRMaXN0ZW5pbmcoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZGljYXRlOiBwcmVkaWNhdGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZmZlY3Q6IGZ1bmN0aW9uIChhY3Rpb24sIGxpc3RlbmVyQXBpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJBcGkudW5zdWJzY3JpYmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lckFwaS5nZXRTdGF0ZSgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lckFwaS5nZXRPcmlnaW5hbFN0YXRlKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcExpc3RlbmluZygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbWlzZXMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR1cGxlUHJvbWlzZVxyXG4gICAgICAgICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRpbWVvdXQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJldHVybiBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWVvdXQsIG51bGwpOyB9KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIF9jLmxhYmVsID0gMTtcclxuICAgICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgICAgICBfYy50cnlzLnB1c2goWzEsICwgMywgNF0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHJhY2VXaXRoU2lnbmFsKHNpZ25hbCwgUHJvbWlzZS5yYWNlKHByb21pc2VzKSldO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IF9jLnNlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZUFjdGl2ZShzaWduYWwpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBvdXRwdXRdO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAgICAgICAgIHVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs3IC8qZW5kZmluYWxseSovXTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTsgfTtcclxuICAgIHJldHVybiBmdW5jdGlvbiAocHJlZGljYXRlLCB0aW1lb3V0KSB7IHJldHVybiBjYXRjaFJlamVjdGlvbih0YWtlKHByZWRpY2F0ZSwgdGltZW91dCkpOyB9O1xyXG59O1xyXG52YXIgZ2V0TGlzdGVuZXJFbnRyeVByb3BzRnJvbSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcbiAgICB2YXIgdHlwZSA9IG9wdGlvbnMudHlwZSwgYWN0aW9uQ3JlYXRvciA9IG9wdGlvbnMuYWN0aW9uQ3JlYXRvciwgbWF0Y2hlciA9IG9wdGlvbnMubWF0Y2hlciwgcHJlZGljYXRlID0gb3B0aW9ucy5wcmVkaWNhdGUsIGVmZmVjdCA9IG9wdGlvbnMuZWZmZWN0O1xyXG4gICAgaWYgKHR5cGUpIHtcclxuICAgICAgICBwcmVkaWNhdGUgPSBjcmVhdGVBY3Rpb24odHlwZSkubWF0Y2g7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChhY3Rpb25DcmVhdG9yKSB7XHJcbiAgICAgICAgdHlwZSA9IGFjdGlvbkNyZWF0b3IudHlwZTtcclxuICAgICAgICBwcmVkaWNhdGUgPSBhY3Rpb25DcmVhdG9yLm1hdGNoO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAobWF0Y2hlcikge1xyXG4gICAgICAgIHByZWRpY2F0ZSA9IG1hdGNoZXI7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChwcmVkaWNhdGUpIHtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNyZWF0aW5nIG9yIHJlbW92aW5nIGEgbGlzdGVuZXIgcmVxdWlyZXMgb25lIG9mIHRoZSBrbm93biBmaWVsZHMgZm9yIG1hdGNoaW5nIGFuIGFjdGlvblwiKTtcclxuICAgIH1cclxuICAgIGFzc2VydEZ1bmN0aW9uKGVmZmVjdCwgXCJvcHRpb25zLmxpc3RlbmVyXCIpO1xyXG4gICAgcmV0dXJuIHsgcHJlZGljYXRlOiBwcmVkaWNhdGUsIHR5cGU6IHR5cGUsIGVmZmVjdDogZWZmZWN0IH07XHJcbn07XHJcbnZhciBjcmVhdGVMaXN0ZW5lckVudHJ5ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICAgIHZhciBfYyA9IGdldExpc3RlbmVyRW50cnlQcm9wc0Zyb20ob3B0aW9ucyksIHR5cGUgPSBfYy50eXBlLCBwcmVkaWNhdGUgPSBfYy5wcmVkaWNhdGUsIGVmZmVjdCA9IF9jLmVmZmVjdDtcclxuICAgIHZhciBpZCA9IG5hbm9pZCgpO1xyXG4gICAgdmFyIGVudHJ5ID0ge1xyXG4gICAgICAgIGlkOiBpZCxcclxuICAgICAgICBlZmZlY3Q6IGVmZmVjdCxcclxuICAgICAgICB0eXBlOiB0eXBlLFxyXG4gICAgICAgIHByZWRpY2F0ZTogcHJlZGljYXRlLFxyXG4gICAgICAgIHBlbmRpbmc6IG5ldyBTZXQoKSxcclxuICAgICAgICB1bnN1YnNjcmliZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnN1YnNjcmliZSBub3QgaW5pdGlhbGl6ZWRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHJldHVybiBlbnRyeTtcclxufTtcclxudmFyIGNhbmNlbEFjdGl2ZUxpc3RlbmVycyA9IGZ1bmN0aW9uIChlbnRyeSkge1xyXG4gICAgZW50cnkucGVuZGluZy5mb3JFYWNoKGZ1bmN0aW9uIChjb250cm9sbGVyKSB7XHJcbiAgICAgICAgYWJvcnRDb250cm9sbGVyV2l0aFJlYXNvbihjb250cm9sbGVyLCBsaXN0ZW5lckNhbmNlbGxlZCk7XHJcbiAgICB9KTtcclxufTtcclxudmFyIGNyZWF0ZUNsZWFyTGlzdGVuZXJNaWRkbGV3YXJlID0gZnVuY3Rpb24gKGxpc3RlbmVyTWFwKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGxpc3RlbmVyTWFwLmZvckVhY2goY2FuY2VsQWN0aXZlTGlzdGVuZXJzKTtcclxuICAgICAgICBsaXN0ZW5lck1hcC5jbGVhcigpO1xyXG4gICAgfTtcclxufTtcclxudmFyIHNhZmVseU5vdGlmeUVycm9yID0gZnVuY3Rpb24gKGVycm9ySGFuZGxlciwgZXJyb3JUb05vdGlmeSwgZXJyb3JJbmZvKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIGVycm9ySGFuZGxlcihlcnJvclRvTm90aWZ5LCBlcnJvckluZm8pO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycm9ySGFuZGxlckVycm9yKSB7XHJcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRocm93IGVycm9ySGFuZGxlckVycm9yO1xyXG4gICAgICAgIH0sIDApO1xyXG4gICAgfVxyXG59O1xyXG52YXIgYWRkTGlzdGVuZXIgPSBjcmVhdGVBY3Rpb24oYWxtICsgXCIvYWRkXCIpO1xyXG52YXIgY2xlYXJBbGxMaXN0ZW5lcnMgPSBjcmVhdGVBY3Rpb24oYWxtICsgXCIvcmVtb3ZlQWxsXCIpO1xyXG52YXIgcmVtb3ZlTGlzdGVuZXIgPSBjcmVhdGVBY3Rpb24oYWxtICsgXCIvcmVtb3ZlXCIpO1xyXG52YXIgZGVmYXVsdEVycm9ySGFuZGxlciA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBhcmdzID0gW107XHJcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcclxuICAgIH1cclxuICAgIGNvbnNvbGUuZXJyb3IuYXBwbHkoY29uc29sZSwgX19zcHJlYWRBcnJheShbYWxtICsgXCIvZXJyb3JcIl0sIGFyZ3MpKTtcclxufTtcclxuZnVuY3Rpb24gY3JlYXRlTGlzdGVuZXJNaWRkbGV3YXJlKG1pZGRsZXdhcmVPcHRpb25zKSB7XHJcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgaWYgKG1pZGRsZXdhcmVPcHRpb25zID09PSB2b2lkIDApIHsgbWlkZGxld2FyZU9wdGlvbnMgPSB7fTsgfVxyXG4gICAgdmFyIGxpc3RlbmVyTWFwID0gbmV3IE1hcCgpO1xyXG4gICAgdmFyIGV4dHJhID0gbWlkZGxld2FyZU9wdGlvbnMuZXh0cmEsIF9jID0gbWlkZGxld2FyZU9wdGlvbnMub25FcnJvciwgb25FcnJvciA9IF9jID09PSB2b2lkIDAgPyBkZWZhdWx0RXJyb3JIYW5kbGVyIDogX2M7XHJcbiAgICBhc3NlcnRGdW5jdGlvbihvbkVycm9yLCBcIm9uRXJyb3JcIik7XHJcbiAgICB2YXIgaW5zZXJ0RW50cnkgPSBmdW5jdGlvbiAoZW50cnkpIHtcclxuICAgICAgICBlbnRyeS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGxpc3RlbmVyTWFwLmRlbGV0ZShlbnRyeS5pZCk7IH07XHJcbiAgICAgICAgbGlzdGVuZXJNYXAuc2V0KGVudHJ5LmlkLCBlbnRyeSk7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjYW5jZWxPcHRpb25zKSB7XHJcbiAgICAgICAgICAgIGVudHJ5LnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICAgIGlmIChjYW5jZWxPcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBjYW5jZWxPcHRpb25zLmNhbmNlbEFjdGl2ZSkge1xyXG4gICAgICAgICAgICAgICAgY2FuY2VsQWN0aXZlTGlzdGVuZXJzKGVudHJ5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9O1xyXG4gICAgdmFyIGZpbmRMaXN0ZW5lckVudHJ5ID0gZnVuY3Rpb24gKGNvbXBhcmF0b3IpIHtcclxuICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9jID0gQXJyYXkuZnJvbShsaXN0ZW5lck1hcC52YWx1ZXMoKSk7IF9pIDwgX2MubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBlbnRyeSA9IF9jW19pXTtcclxuICAgICAgICAgICAgaWYgKGNvbXBhcmF0b3IoZW50cnkpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZW50cnk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHZvaWQgMDtcclxuICAgIH07XHJcbiAgICB2YXIgc3RhcnRMaXN0ZW5pbmcgPSBmdW5jdGlvbiAob3B0aW9ucykge1xyXG4gICAgICAgIHZhciBlbnRyeSA9IGZpbmRMaXN0ZW5lckVudHJ5KGZ1bmN0aW9uIChleGlzdGluZ0VudHJ5KSB7IHJldHVybiBleGlzdGluZ0VudHJ5LmVmZmVjdCA9PT0gb3B0aW9ucy5lZmZlY3Q7IH0pO1xyXG4gICAgICAgIGlmICghZW50cnkpIHtcclxuICAgICAgICAgICAgZW50cnkgPSBjcmVhdGVMaXN0ZW5lckVudHJ5KG9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaW5zZXJ0RW50cnkoZW50cnkpO1xyXG4gICAgfTtcclxuICAgIHZhciBzdG9wTGlzdGVuaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICAgICAgICB2YXIgX2MgPSBnZXRMaXN0ZW5lckVudHJ5UHJvcHNGcm9tKG9wdGlvbnMpLCB0eXBlID0gX2MudHlwZSwgZWZmZWN0ID0gX2MuZWZmZWN0LCBwcmVkaWNhdGUgPSBfYy5wcmVkaWNhdGU7XHJcbiAgICAgICAgdmFyIGVudHJ5ID0gZmluZExpc3RlbmVyRW50cnkoZnVuY3Rpb24gKGVudHJ5Mikge1xyXG4gICAgICAgICAgICB2YXIgbWF0Y2hQcmVkaWNhdGVPclR5cGUgPSB0eXBlb2YgdHlwZSA9PT0gXCJzdHJpbmdcIiA/IGVudHJ5Mi50eXBlID09PSB0eXBlIDogZW50cnkyLnByZWRpY2F0ZSA9PT0gcHJlZGljYXRlO1xyXG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hQcmVkaWNhdGVPclR5cGUgJiYgZW50cnkyLmVmZmVjdCA9PT0gZWZmZWN0O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChlbnRyeSkge1xyXG4gICAgICAgICAgICBlbnRyeS51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5jYW5jZWxBY3RpdmUpIHtcclxuICAgICAgICAgICAgICAgIGNhbmNlbEFjdGl2ZUxpc3RlbmVycyhlbnRyeSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICEhZW50cnk7XHJcbiAgICB9O1xyXG4gICAgdmFyIG5vdGlmeUxpc3RlbmVyID0gZnVuY3Rpb24gKGVudHJ5LCBhY3Rpb24sIGFwaSwgZ2V0T3JpZ2luYWxTdGF0ZSkgeyByZXR1cm4gX19hc3luYyhfdGhpcywgbnVsbCwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBpbnRlcm5hbFRhc2tDb250cm9sbGVyLCB0YWtlLCBsaXN0ZW5lckVycm9yXzE7XHJcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYykge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKF9jLmxhYmVsKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxUYXNrQ29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcclxuICAgICAgICAgICAgICAgICAgICB0YWtlID0gY3JlYXRlVGFrZVBhdHRlcm4oc3RhcnRMaXN0ZW5pbmcsIGludGVybmFsVGFza0NvbnRyb2xsZXIuc2lnbmFsKTtcclxuICAgICAgICAgICAgICAgICAgICBfYy5sYWJlbCA9IDE7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICAgICAgX2MudHJ5cy5wdXNoKFsxLCAzLCA0LCA1XSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZW50cnkucGVuZGluZy5hZGQoaW50ZXJuYWxUYXNrQ29udHJvbGxlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgUHJvbWlzZS5yZXNvbHZlKGVudHJ5LmVmZmVjdChhY3Rpb24sIGFzc2lnbih7fSwgYXBpLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRPcmlnaW5hbFN0YXRlOiBnZXRPcmlnaW5hbFN0YXRlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uOiBmdW5jdGlvbiAocHJlZGljYXRlLCB0aW1lb3V0KSB7IHJldHVybiB0YWtlKHByZWRpY2F0ZSwgdGltZW91dCkudGhlbihCb29sZWFuKTsgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRha2U6IHRha2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxheTogY3JlYXRlRGVsYXkoaW50ZXJuYWxUYXNrQ29udHJvbGxlci5zaWduYWwpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF1c2U6IGNyZWF0ZVBhdXNlKGludGVybmFsVGFza0NvbnRyb2xsZXIuc2lnbmFsKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiBleHRyYSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hbDogaW50ZXJuYWxUYXNrQ29udHJvbGxlci5zaWduYWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JrOiBjcmVhdGVGb3JrKGludGVybmFsVGFza0NvbnRyb2xsZXIuc2lnbmFsKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc3Vic2NyaWJlOiBlbnRyeS51bnN1YnNjcmliZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyTWFwLnNldChlbnRyeS5pZCwgZW50cnkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbEFjdGl2ZUxpc3RlbmVyczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LnBlbmRpbmcuZm9yRWFjaChmdW5jdGlvbiAoY29udHJvbGxlciwgXywgc2V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sbGVyICE9PSBpbnRlcm5hbFRhc2tDb250cm9sbGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYm9ydENvbnRyb2xsZXJXaXRoUmVhc29uKGNvbnRyb2xsZXIsIGxpc3RlbmVyQ2FuY2VsbGVkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldC5kZWxldGUoY29udHJvbGxlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpKV07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICAgICAgX2Muc2VudCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDVdO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyRXJyb3JfMSA9IF9jLnNlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIShsaXN0ZW5lckVycm9yXzEgaW5zdGFuY2VvZiBUYXNrQWJvcnRFcnJvcikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2FmZWx5Tm90aWZ5RXJyb3Iob25FcnJvciwgbGlzdGVuZXJFcnJvcl8xLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZWRCeTogXCJlZmZlY3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszIC8qYnJlYWsqLywgNV07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgICAgICAgICAgYWJvcnRDb250cm9sbGVyV2l0aFJlYXNvbihpbnRlcm5hbFRhc2tDb250cm9sbGVyLCBsaXN0ZW5lckNvbXBsZXRlZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZW50cnkucGVuZGluZy5kZWxldGUoaW50ZXJuYWxUYXNrQ29udHJvbGxlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs3IC8qZW5kZmluYWxseSovXTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNTogcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTsgfTtcclxuICAgIHZhciBjbGVhckxpc3RlbmVyTWlkZGxld2FyZSA9IGNyZWF0ZUNsZWFyTGlzdGVuZXJNaWRkbGV3YXJlKGxpc3RlbmVyTWFwKTtcclxuICAgIHZhciBtaWRkbGV3YXJlID0gZnVuY3Rpb24gKGFwaSkgeyByZXR1cm4gZnVuY3Rpb24gKG5leHQpIHsgcmV0dXJuIGZ1bmN0aW9uIChhY3Rpb24pIHtcclxuICAgICAgICBpZiAoYWRkTGlzdGVuZXIubWF0Y2goYWN0aW9uKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gc3RhcnRMaXN0ZW5pbmcoYWN0aW9uLnBheWxvYWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2xlYXJBbGxMaXN0ZW5lcnMubWF0Y2goYWN0aW9uKSkge1xyXG4gICAgICAgICAgICBjbGVhckxpc3RlbmVyTWlkZGxld2FyZSgpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZW1vdmVMaXN0ZW5lci5tYXRjaChhY3Rpb24pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzdG9wTGlzdGVuaW5nKGFjdGlvbi5wYXlsb2FkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG9yaWdpbmFsU3RhdGUgPSBhcGkuZ2V0U3RhdGUoKTtcclxuICAgICAgICB2YXIgZ2V0T3JpZ2luYWxTdGF0ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG9yaWdpbmFsU3RhdGUgPT09IElOVEVSTkFMX05JTF9UT0tFTikge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGFsbSArIFwiOiBnZXRPcmlnaW5hbFN0YXRlIGNhbiBvbmx5IGJlIGNhbGxlZCBzeW5jaHJvbm91c2x5XCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbFN0YXRlO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdmFyIHJlc3VsdDtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICByZXN1bHQgPSBuZXh0KGFjdGlvbik7XHJcbiAgICAgICAgICAgIGlmIChsaXN0ZW5lck1hcC5zaXplID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRTdGF0ZSA9IGFwaS5nZXRTdGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGxpc3RlbmVyRW50cmllcyA9IEFycmF5LmZyb20obGlzdGVuZXJNYXAudmFsdWVzKCkpO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBsaXN0ZW5lckVudHJpZXNfMSA9IGxpc3RlbmVyRW50cmllczsgX2kgPCBsaXN0ZW5lckVudHJpZXNfMS5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSBsaXN0ZW5lckVudHJpZXNfMVtfaV07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJ1bkxpc3RlbmVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcnVuTGlzdGVuZXIgPSBlbnRyeS5wcmVkaWNhdGUoYWN0aW9uLCBjdXJyZW50U3RhdGUsIG9yaWdpbmFsU3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAocHJlZGljYXRlRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcnVuTGlzdGVuZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2FmZWx5Tm90aWZ5RXJyb3Iob25FcnJvciwgcHJlZGljYXRlRXJyb3IsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlZEJ5OiBcInByZWRpY2F0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXJ1bkxpc3RlbmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBub3RpZnlMaXN0ZW5lcihlbnRyeSwgYWN0aW9uLCBhcGksIGdldE9yaWdpbmFsU3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkge1xyXG4gICAgICAgICAgICBvcmlnaW5hbFN0YXRlID0gSU5URVJOQUxfTklMX1RPS0VOO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfTsgfTsgfTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbWlkZGxld2FyZTogbWlkZGxld2FyZSxcclxuICAgICAgICBzdGFydExpc3RlbmluZzogc3RhcnRMaXN0ZW5pbmcsXHJcbiAgICAgICAgc3RvcExpc3RlbmluZzogc3RvcExpc3RlbmluZyxcclxuICAgICAgICBjbGVhckxpc3RlbmVyczogY2xlYXJMaXN0ZW5lck1pZGRsZXdhcmVcclxuICAgIH07XHJcbn1cclxuLy8gc3JjL2F1dG9CYXRjaEVuaGFuY2VyLnRzXHJcbnZhciBTSE9VTERfQVVUT0JBVENIID0gXCJSVEtfYXV0b0JhdGNoXCI7XHJcbnZhciBwcmVwYXJlQXV0b0JhdGNoZWQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBmdW5jdGlvbiAocGF5bG9hZCkge1xyXG4gICAgdmFyIF9jO1xyXG4gICAgcmV0dXJuICh7XHJcbiAgICAgICAgcGF5bG9hZDogcGF5bG9hZCxcclxuICAgICAgICBtZXRhOiAoX2MgPSB7fSwgX2NbU0hPVUxEX0FVVE9CQVRDSF0gPSB0cnVlLCBfYylcclxuICAgIH0pO1xyXG59OyB9O1xyXG52YXIgcHJvbWlzZTtcclxudmFyIHF1ZXVlTWljcm90YXNrU2hpbSA9IHR5cGVvZiBxdWV1ZU1pY3JvdGFzayA9PT0gXCJmdW5jdGlvblwiID8gcXVldWVNaWNyb3Rhc2suYmluZCh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDogdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbCA6IGdsb2JhbFRoaXMpIDogZnVuY3Rpb24gKGNiKSB7IHJldHVybiAocHJvbWlzZSB8fCAocHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgpKSkudGhlbihjYikuY2F0Y2goZnVuY3Rpb24gKGVycikgeyByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICB0aHJvdyBlcnI7XHJcbn0sIDApOyB9KTsgfTtcclxudmFyIGNyZWF0ZVF1ZXVlV2l0aFRpbWVyID0gZnVuY3Rpb24gKHRpbWVvdXQpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAobm90aWZ5KSB7XHJcbiAgICAgICAgc2V0VGltZW91dChub3RpZnksIHRpbWVvdXQpO1xyXG4gICAgfTtcclxufTtcclxudmFyIHJBRiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSA/IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgOiBjcmVhdGVRdWV1ZVdpdGhUaW1lcigxMCk7XHJcbnZhciBhdXRvQmF0Y2hFbmhhbmNlciA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7IHR5cGU6IFwicmFmXCIgfTsgfVxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChuZXh0KSB7IHJldHVybiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBzdG9yZSA9IG5leHQuYXBwbHkodm9pZCAwLCBhcmdzKTtcclxuICAgICAgICB2YXIgbm90aWZ5aW5nID0gdHJ1ZTtcclxuICAgICAgICB2YXIgc2hvdWxkTm90aWZ5QXRFbmRPZlRpY2sgPSBmYWxzZTtcclxuICAgICAgICB2YXIgbm90aWZpY2F0aW9uUXVldWVkID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIGxpc3RlbmVycyA9IG5ldyBTZXQoKTtcclxuICAgICAgICB2YXIgcXVldWVDYWxsYmFjayA9IG9wdGlvbnMudHlwZSA9PT0gXCJ0aWNrXCIgPyBxdWV1ZU1pY3JvdGFza1NoaW0gOiBvcHRpb25zLnR5cGUgPT09IFwicmFmXCIgPyByQUYgOiBvcHRpb25zLnR5cGUgPT09IFwiY2FsbGJhY2tcIiA/IG9wdGlvbnMucXVldWVOb3RpZmljYXRpb24gOiBjcmVhdGVRdWV1ZVdpdGhUaW1lcihvcHRpb25zLnRpbWVvdXQpO1xyXG4gICAgICAgIHZhciBub3RpZnlMaXN0ZW5lcnMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIG5vdGlmaWNhdGlvblF1ZXVlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAoc2hvdWxkTm90aWZ5QXRFbmRPZlRpY2spIHtcclxuICAgICAgICAgICAgICAgIHNob3VsZE5vdGlmeUF0RW5kT2ZUaWNrID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBsaXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAobCkgeyByZXR1cm4gbCgpOyB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0b3JlLCB7XHJcbiAgICAgICAgICAgIHN1YnNjcmliZTogZnVuY3Rpb24gKGxpc3RlbmVyMikge1xyXG4gICAgICAgICAgICAgICAgdmFyIHdyYXBwZWRMaXN0ZW5lciA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5vdGlmeWluZyAmJiBsaXN0ZW5lcjIoKTsgfTtcclxuICAgICAgICAgICAgICAgIHZhciB1bnN1YnNjcmliZSA9IHN0b3JlLnN1YnNjcmliZSh3cmFwcGVkTGlzdGVuZXIpO1xyXG4gICAgICAgICAgICAgICAgbGlzdGVuZXJzLmFkZChsaXN0ZW5lcjIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICB1bnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycy5kZWxldGUobGlzdGVuZXIyKTtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGRpc3BhdGNoOiBmdW5jdGlvbiAoYWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX2E7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vdGlmeWluZyA9ICEoKF9hID0gYWN0aW9uID09IG51bGwgPyB2b2lkIDAgOiBhY3Rpb24ubWV0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hW1NIT1VMRF9BVVRPQkFUQ0hdKTtcclxuICAgICAgICAgICAgICAgICAgICBzaG91bGROb3RpZnlBdEVuZE9mVGljayA9ICFub3RpZnlpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZE5vdGlmeUF0RW5kT2ZUaWNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbm90aWZpY2F0aW9uUXVldWVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZmljYXRpb25RdWV1ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVldWVDYWxsYmFjayhub3RpZnlMaXN0ZW5lcnMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdG9yZS5kaXNwYXRjaChhY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm90aWZ5aW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfTsgfTtcclxufTtcclxuLy8gc3JjL2luZGV4LnRzXHJcbmVuYWJsZUVTNSgpO1xyXG5leHBvcnQgeyBNaWRkbGV3YXJlQXJyYXksIFNIT1VMRF9BVVRPQkFUQ0gsIFRhc2tBYm9ydEVycm9yLCBhZGRMaXN0ZW5lciwgYXV0b0JhdGNoRW5oYW5jZXIsIGNsZWFyQWxsTGlzdGVuZXJzLCBjb25maWd1cmVTdG9yZSwgY3JlYXRlQWN0aW9uLCBjcmVhdGVBc3luY1RodW5rLCBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvciwgY3JlYXRlRW50aXR5QWRhcHRlciwgY3JlYXRlSW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlLCBjcmVhdGVMaXN0ZW5lck1pZGRsZXdhcmUsIGRlZmF1bHQyIGFzIGNyZWF0ZU5leHRTdGF0ZSwgY3JlYXRlUmVkdWNlciwgY3JlYXRlU2VsZWN0b3IyIGFzIGNyZWF0ZVNlbGVjdG9yLCBjcmVhdGVTZXJpYWxpemFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUsIGNyZWF0ZVNsaWNlLCBjdXJyZW50MiBhcyBjdXJyZW50LCBmaW5kTm9uU2VyaWFsaXphYmxlVmFsdWUsIGZyZWV6ZSwgZ2V0RGVmYXVsdE1pZGRsZXdhcmUsIGdldFR5cGUsIGlzQWxsT2YsIGlzQW55T2YsIGlzQXN5bmNUaHVua0FjdGlvbiwgaXNEcmFmdDQgYXMgaXNEcmFmdCwgaXNGdWxmaWxsZWQsIGlzSW1tdXRhYmxlRGVmYXVsdCwgaXNQZW5kaW5nLCBpc1BsYWluLCBpc1BsYWluT2JqZWN0LCBpc1JlamVjdGVkLCBpc1JlamVjdGVkV2l0aFZhbHVlLCBtaW5pU2VyaWFsaXplRXJyb3IsIG5hbm9pZCwgb3JpZ2luYWwsIHByZXBhcmVBdXRvQmF0Y2hlZCwgcmVtb3ZlTGlzdGVuZXIsIHVud3JhcFJlc3VsdCB9O1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWR1eC10b29sa2l0LmVzbS5qcy5tYXAiXSwibmFtZXMiOlsibiIsInIiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ0IiwiQXJyYXkiLCJlIiwiRXJyb3IiLCJtYXAiLCJqb2luIiwiUSIsIk9iamVjdCIsImdldFByb3RvdHlwZU9mIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiY29uc3RydWN0b3IiLCJGdW5jdGlvbiIsInRvU3RyaW5nIiwiWiIsImlzQXJyYXkiLCJMIiwicyIsInYiLCJpIiwibyIsImtleXMiLCJubiIsImZvckVhY2giLCJ1IiwiaGFzIiwicHJvdG90eXBlIiwiYSIsImdldCIsImYiLCJzZXQiLCJhZGQiLCJjIiwiWCIsIk1hcCIsInEiLCJTZXQiLCJwIiwibCIsInNsaWNlIiwicm4iLCJ3cml0YWJsZSIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ2YWx1ZSIsImNyZWF0ZSIsImQiLCJ5IiwiY2xlYXIiLCJkZWxldGUiLCJoIiwiZnJlZXplIiwiaXNGcm96ZW4iLCJiIiwidG4iLCJtIiwiXyIsIlUiLCJqIiwiTyIsImciLCJTIiwidyIsIlAiLCJNIiwieCIsIkgiLCJBIiwiSSIsImsiLCJOIiwiUiIsImNvbmNhdCIsIkQiLCJ6IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiRSIsIkYiLCJUIiwiQyIsImVuIiwib24iLCJQcm94eSIsInJldm9jYWJsZSIsInJldm9rZSIsInByb3h5IiwiSiIsInB1c2giLCJLIiwiZnJvbSIsInRoaXMiLCJkZWZpbmVQcm9wZXJ0eSIsIk1hdGgiLCJtaW4iLCJHIiwiVyIsIlN5bWJvbCIsIkIiLCJSZWZsZWN0IiwiZm9yIiwiaXRlcmF0b3IiLCJvd25LZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJOdW1iZXIiLCJpc05hTiIsImRlbGV0ZVByb3BlcnR5Iiwic2V0UHJvdG90eXBlT2YiLCJhcHBseSIsInVuIiwicHJvZHVjZSIsIlByb21pc2UiLCJ0aGVuIiwicHJvZHVjZVdpdGhQYXRjaGVzIiwidXNlUHJveGllcyIsInNldFVzZVByb3hpZXMiLCJhdXRvRnJlZXplIiwic2V0QXV0b0ZyZWV6ZSIsImNyZWF0ZURyYWZ0IiwiZmluaXNoRHJhZnQiLCJhcHBseVBhdGNoZXMiLCJwYXRoIiwib3AiLCIkIiwiYW4iLCJmbiIsImJpbmQiLCJOT1RfRk9VTkQiLCJkZWZhdWx0RXF1YWxpdHlDaGVjayIsImRlZmF1bHRNZW1vaXplIiwiZnVuYyIsImVxdWFsaXR5Q2hlY2tPck9wdGlvbnMiLCJwcm92aWRlZE9wdGlvbnMiLCJlcXVhbGl0eUNoZWNrIiwiX3Byb3ZpZGVkT3B0aW9ucyRlcXVhIiwiX3Byb3ZpZGVkT3B0aW9ucyRtYXhTIiwibWF4U2l6ZSIsInJlc3VsdEVxdWFsaXR5Q2hlY2siLCJjb21wYXJhdG9yIiwiY3JlYXRlQ2FjaGVLZXlDb21wYXJhdG9yIiwiYXJlQXJndW1lbnRzU2hhbGxvd2x5RXF1YWwiLCJwcmV2IiwibmV4dCIsImNhY2hlIiwiY3JlYXRlU2luZ2xldG9uQ2FjaGUiLCJlcXVhbHMiLCJlbnRyeSIsImtleSIsInB1dCIsImdldEVudHJpZXMiLCJ1bmRlZmluZWQiLCJjcmVhdGVMcnVDYWNoZSIsImVudHJpZXMiLCJjYWNoZUluZGV4IiwiZmluZEluZGV4Iiwic3BsaWNlIiwidW5zaGlmdCIsInBvcCIsIm1lbW9pemVkIiwibWF0Y2hpbmdFbnRyeSIsImZpbmQiLCJjbGVhckNhY2hlIiwiY3JlYXRlU2VsZWN0b3JDcmVhdG9yIiwibWVtb2l6ZSIsIl9sZW4iLCJtZW1vaXplT3B0aW9uc0Zyb21BcmdzIiwiX2tleSIsImNyZWF0ZVNlbGVjdG9yIiwiX2xlbjIiLCJmdW5jcyIsIl9rZXkyIiwiX2xhc3RSZXN1bHQiLCJfcmVjb21wdXRhdGlvbnMiLCJkaXJlY3RseVBhc3NlZE9wdGlvbnMiLCJtZW1vaXplT3B0aW9ucyIsInJlc3VsdEZ1bmMiLCJfZGlyZWN0bHlQYXNzZWRPcHRpb24yIiwiZmluYWxNZW1vaXplT3B0aW9ucyIsImRlcGVuZGVuY2llcyIsImdldERlcGVuZGVuY2llcyIsImV2ZXJ5IiwiZGVwIiwiZGVwZW5kZW5jeVR5cGVzIiwibmFtZSIsIm1lbW9pemVkUmVzdWx0RnVuYyIsInJlY29tcHV0YXRpb25XcmFwcGVyIiwic2VsZWN0b3IiLCJkZXBlbmRlbmNpZXNDaGVja2VyIiwicGFyYW1zIiwiYXNzaWduIiwibGFzdFJlc3VsdCIsInJlY29tcHV0YXRpb25zIiwicmVzZXRSZWNvbXB1dGF0aW9ucyIsImNyZWF0ZVRodW5rTWlkZGxld2FyZSIsImV4dHJhQXJndW1lbnQiLCJtaWRkbGV3YXJlIiwiX3JlZiIsImRpc3BhdGNoIiwiZ2V0U3RhdGUiLCJhY3Rpb24iLCJ0aHVuayIsIndpdGhFeHRyYUFyZ3VtZW50IiwiZXh0ZW5kU3RhdGljcyIsIl9fZXh0ZW5kcyIsIl9fcHJvdG9fXyIsIlR5cGVFcnJvciIsIlN0cmluZyIsIl9fIiwiX19nZW5lcmF0b3IiLCJ0aGlzQXJnIiwiYm9keSIsImxhYmVsIiwic2VudCIsInRyeXMiLCJvcHMiLCJ2ZXJiIiwic3RlcCIsImRvbmUiLCJfX3NwcmVhZEFycmF5IiwidG8iLCJpbCIsIl9fZGVmUHJvcCIsIl9fZGVmUHJvcHMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiX19nZXRPd25Qcm9wRGVzY3MiLCJfX2dldE93blByb3BTeW1ib2xzIiwiX19oYXNPd25Qcm9wIiwiX19wcm9wSXNFbnVtIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJfX2RlZk5vcm1hbFByb3AiLCJvYmoiLCJfX3NwcmVhZFZhbHVlcyIsInByb3AiLCJfaSIsIl9jIiwiX19zcHJlYWRQcm9wcyIsIl9fYXN5bmMiLCJfX3RoaXMiLCJfX2FyZ3VtZW50cyIsImdlbmVyYXRvciIsInJlc29sdmUiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJyZWplY3RlZCIsInRocm93IiwiY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3IiLCJhcmdzIiwicmVzdCIsImNvbXBvc2VXaXRoRGV2VG9vbHMiLCJ3aW5kb3ciLCJfX1JFRFVYX0RFVlRPT0xTX0VYVEVOU0lPTl9DT01QT1NFX18iLCJjb21wb3NlIiwiX19SRURVWF9ERVZUT09MU19FWFRFTlNJT05fXyIsImlzUGxhaW5PYmplY3QiLCJwcm90byIsImJhc2VQcm90byIsIk1pZGRsZXdhcmVBcnJheSIsIl9zdXBlciIsIl90aGlzIiwic3BlY2llcyIsImFyciIsInByZXBlbmQiLCJmcmVlemVEcmFmdGFibGUiLCJ2YWwiLCJpc0ltbXV0YWJsZURlZmF1bHQiLCJjcmVhdGVJbW11dGFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUiLCJvcHRpb25zIiwiaXNQbGFpbiIsInR5cGUiLCJmaW5kTm9uU2VyaWFsaXphYmxlVmFsdWUiLCJpc1NlcmlhbGl6YWJsZSIsImlnbm9yZWRQYXRocyIsImZvdW5kTmVzdGVkU2VyaWFsaXphYmxlIiwia2V5UGF0aCIsImhhc0lnbm9yZWRQYXRocyIsIl9sb29wXzIiLCJuZXN0ZWRWYWx1ZSIsIm5lc3RlZFBhdGgiLCJzb21lIiwiaWdub3JlZCIsIlJlZ0V4cCIsInRlc3QiLCJlbnRyaWVzXzEiLCJzdGF0ZV8yIiwiaXNOZXN0ZWRGcm96ZW4iLCJ2YWx1ZXMiLCJjcmVhdGVTZXJpYWxpemFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUiLCJnZXREZWZhdWx0TWlkZGxld2FyZSIsIm1pZGRsZXdhcmVBcnJheSIsImltbXV0YWJsZUNoZWNrIiwic2VyaWFsaXphYmxlQ2hlY2siLCJpc0Jvb2xlYW4iLCJJU19QUk9EVUNUSU9OIiwiY29uZmlndXJlU3RvcmUiLCJyb290UmVkdWNlciIsImN1cnJpZWRHZXREZWZhdWx0TWlkZGxld2FyZSIsImN1cnJ5R2V0RGVmYXVsdE1pZGRsZXdhcmUiLCJfZCIsInJlZHVjZXIiLCJfZSIsIl9mIiwiZGV2VG9vbHMiLCJfZyIsInByZWxvYWRlZFN0YXRlIiwiX2giLCJlbmhhbmNlcnMiLCJjb21iaW5lUmVkdWNlcnMiLCJmaW5hbE1pZGRsZXdhcmUiLCJpdGVtIiwibWlkZGxld2FyZUVuaGFuY2VyIiwiYXBwbHlNaWRkbGV3YXJlIiwiZmluYWxDb21wb3NlIiwidHJhY2UiLCJzdG9yZUVuaGFuY2VycyIsImNvbXBvc2VkRW5oYW5jZXIiLCJjcmVhdGVTdG9yZSIsImNyZWF0ZUFjdGlvbiIsInByZXBhcmVBY3Rpb24iLCJhY3Rpb25DcmVhdG9yIiwicHJlcGFyZWQiLCJwYXlsb2FkIiwibWV0YSIsImVycm9yIiwibWF0Y2giLCJpc1ZhbGlkS2V5IiwiaW5kZXhPZiIsImdldFR5cGUiLCJleGVjdXRlUmVkdWNlckJ1aWxkZXJDYWxsYmFjayIsImJ1aWxkZXJDYWxsYmFjayIsImRlZmF1bHRDYXNlUmVkdWNlciIsImFjdGlvbnNNYXAiLCJhY3Rpb25NYXRjaGVycyIsImJ1aWxkZXIiLCJhZGRDYXNlIiwidHlwZU9yQWN0aW9uQ3JlYXRvciIsImFkZE1hdGNoZXIiLCJtYXRjaGVyIiwiYWRkRGVmYXVsdENhc2UiLCJjcmVhdGVSZWR1Y2VyIiwiaW5pdGlhbFN0YXRlIiwibWFwT3JCdWlsZGVyQ2FsbGJhY2siLCJnZXRJbml0aWFsU3RhdGUiLCJmaW5hbEFjdGlvbk1hdGNoZXJzIiwiZmluYWxEZWZhdWx0Q2FzZVJlZHVjZXIiLCJpc1N0YXRlRnVuY3Rpb24iLCJmcm96ZW5Jbml0aWFsU3RhdGVfMSIsInN0YXRlIiwiY2FzZVJlZHVjZXJzIiwiZmlsdGVyIiwiY3IiLCJyZWR1Y2UiLCJwcmV2aW91c1N0YXRlIiwiY2FzZVJlZHVjZXIiLCJyZXN1bHQiLCJkcmFmdCIsImNyZWF0ZVNsaWNlIiwiX3JlZHVjZXIiLCJyZWR1Y2VycyIsInJlZHVjZXJOYW1lcyIsInNsaWNlQ2FzZVJlZHVjZXJzQnlOYW1lIiwic2xpY2VDYXNlUmVkdWNlcnNCeVR5cGUiLCJhY3Rpb25DcmVhdG9ycyIsImJ1aWxkUmVkdWNlciIsImV4dHJhUmVkdWNlcnMiLCJmaW5hbENhc2VSZWR1Y2VycyIsImFjdGlvbk1hdGNoZXJzXzEiLCJyZWR1Y2VyTmFtZSIsInByZXBhcmVDYWxsYmFjayIsIm1heWJlUmVkdWNlcldpdGhQcmVwYXJlIiwiZ2V0VHlwZTIiLCJhY3Rpb25LZXkiLCJwcmVwYXJlIiwiYWN0aW9ucyIsImNyZWF0ZVN0YXRlT3BlcmF0b3IiLCJtdXRhdG9yIiwib3BlcmF0aW9uIiwiYXJnIiwiaXNQYXlsb2FkQWN0aW9uQXJndW1lbnQiLCJhcmcyIiwiaXNGU0EiLCJydW5NdXRhdG9yIiwic2VsZWN0SWRWYWx1ZSIsImVudGl0eSIsInNlbGVjdElkIiwiZW5zdXJlRW50aXRpZXNBcnJheSIsImVudGl0aWVzIiwic3BsaXRBZGRlZFVwZGF0ZWRFbnRpdGllcyIsIm5ld0VudGl0aWVzIiwiYWRkZWQiLCJ1cGRhdGVkIiwibmV3RW50aXRpZXNfMSIsImlkIiwiY2hhbmdlcyIsImNyZWF0ZVVuc29ydGVkU3RhdGVBZGFwdGVyIiwiYWRkT25lTXV0YWJseSIsImlkcyIsImFkZE1hbnlNdXRhYmx5IiwibmV3RW50aXRpZXNfMiIsInNldE9uZU11dGFibHkiLCJyZW1vdmVNYW55TXV0YWJseSIsImRpZE11dGF0ZSIsInVwZGF0ZU1hbnlNdXRhYmx5IiwidXBkYXRlcyIsIm5ld0tleXMiLCJ1cGRhdGVzUGVyRW50aXR5IiwidXBkYXRlIiwiZGlkTXV0YXRlSWRzIiwidGFrZU5ld0tleSIsIm9yaWdpbmFsMiIsIm5ld0tleSIsImhhc05ld0tleSIsInVwc2VydE1hbnlNdXRhYmx5IiwicmVtb3ZlQWxsIiwicmVtb3ZlQWxsTXV0YWJseSIsIm9wZXJhdG9yIiwiYWRkT25lIiwiYWRkTWFueSIsInNldE9uZSIsInNldE1hbnkiLCJzZXRNYW55TXV0YWJseSIsIm5ld0VudGl0aWVzXzMiLCJzZXRBbGwiLCJzZXRBbGxNdXRhYmx5IiwidXBkYXRlT25lIiwidXBkYXRlT25lTXV0YWJseSIsInVwZGF0ZU1hbnkiLCJ1cHNlcnRPbmUiLCJ1cHNlcnRPbmVNdXRhYmx5IiwidXBzZXJ0TWFueSIsInJlbW92ZU9uZSIsInJlbW92ZU9uZU11dGFibHkiLCJyZW1vdmVNYW55IiwiY3JlYXRlRW50aXR5QWRhcHRlciIsInNvcnRDb21wYXJlciIsImluc3RhbmNlIiwic3RhdGVGYWN0b3J5IiwiY3JlYXRlSW5pdGlhbFN0YXRlRmFjdG9yeSIsImFkZGl0aW9uYWxTdGF0ZSIsInNlbGVjdG9yc0ZhY3RvcnkiLCJjcmVhdGVTZWxlY3RvcnNGYWN0b3J5IiwiZ2V0U2VsZWN0b3JzIiwic2VsZWN0U3RhdGUiLCJzZWxlY3RJZHMiLCJzZWxlY3RFbnRpdGllcyIsInNlbGVjdEFsbCIsInNlbGVjdEJ5SWQiLCJzZWxlY3RUb3RhbCIsInNlbGVjdEdsb2JhbGl6ZWRFbnRpdGllcyIsInN0YXRlQWRhcHRlciIsImNyZWF0ZVNvcnRlZFN0YXRlQWRhcHRlciIsInNvcnQiLCJtb2RlbHMiLCJtb2RlbCIsIm1lcmdlIiwiYXBwbGllZFVwZGF0ZXMiLCJ1cGRhdGVzXzEiLCJuZXdJZCIsInJlc29ydEVudGl0aWVzIiwiYWxsRW50aXRpZXMiLCJuZXdTb3J0ZWRJZHMiLCJhcmVBcnJheXNFcXVhbCIsIm5hbm9pZCIsInNpemUiLCJyYW5kb20iLCJjb21tb25Qcm9wZXJ0aWVzIiwiUmVqZWN0V2l0aFZhbHVlIiwiRnVsZmlsbFdpdGhNZXRhIiwibWluaVNlcmlhbGl6ZUVycm9yIiwic2ltcGxlRXJyb3IiLCJjb21tb25Qcm9wZXJ0aWVzXzEiLCJwcm9wZXJ0eSIsIm1lc3NhZ2UiLCJjcmVhdGVBc3luY1RodW5rIiwiY3JlYXRlQXN5bmNUaHVuazIiLCJ0eXBlUHJlZml4IiwicGF5bG9hZENyZWF0b3IiLCJyZXF1ZXN0SWQiLCJyZXF1ZXN0U3RhdHVzIiwicGVuZGluZyIsInNlcmlhbGl6ZUVycm9yIiwicmVqZWN0ZWRXaXRoVmFsdWUiLCJhYm9ydGVkIiwiY29uZGl0aW9uIiwiQUMiLCJBYm9ydENvbnRyb2xsZXIiLCJjbGFzc18xIiwic2lnbmFsIiwiYWRkRXZlbnRMaXN0ZW5lciIsImRpc3BhdGNoRXZlbnQiLCJvbmFib3J0IiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInJlYXNvbiIsInRocm93SWZBYm9ydGVkIiwiYWJvcnQiLCJleHRyYSIsImFib3J0UmVhc29uIiwiaWRHZW5lcmF0b3IiLCJhYm9ydENvbnRyb2xsZXIiLCJwcm9taXNlMiIsIl9hIiwiX2IiLCJmaW5hbEFjdGlvbiIsImNvbmRpdGlvblJlc3VsdCIsImFib3J0ZWRQcm9taXNlIiwiZXJyXzEiLCJpc1RoZW5hYmxlIiwiZ2V0UGVuZGluZ01ldGEiLCJyYWNlIiwicmVqZWN0V2l0aFZhbHVlIiwiZnVsZmlsbFdpdGhWYWx1ZSIsImRpc3BhdGNoQ29uZGl0aW9uUmVqZWN0aW9uIiwidW53cmFwIiwidW53cmFwUmVzdWx0Iiwid2l0aFR5cGVzIiwibWF0Y2hlcyIsImhhc01hdGNoRnVuY3Rpb24iLCJpc0FueU9mIiwibWF0Y2hlcnMiLCJpc0FsbE9mIiwiaGFzRXhwZWN0ZWRSZXF1ZXN0TWV0YWRhdGEiLCJ2YWxpZFN0YXR1cyIsImhhc1ZhbGlkUmVxdWVzdElkIiwiaGFzVmFsaWRSZXF1ZXN0U3RhdHVzIiwiaXNBc3luY1RodW5rQXJyYXkiLCJpc1BlbmRpbmciLCJhc3luY1RodW5rcyIsImFzeW5jVGh1bmsiLCJjb21iaW5lZE1hdGNoZXIiLCJpc1JlamVjdGVkIiwiaXNSZWplY3RlZFdpdGhWYWx1ZSIsImhhc0ZsYWciLCJpc0Z1bGZpbGxlZCIsImlzQXN5bmNUaHVua0FjdGlvbiIsImFzeW5jVGh1bmtzXzEiLCJhc3NlcnRGdW5jdGlvbiIsImV4cGVjdGVkIiwibm9vcCIsImNhdGNoUmVqZWN0aW9uIiwib25FcnJvciIsImNhdGNoIiwiYWRkQWJvcnRTaWduYWxMaXN0ZW5lciIsImFib3J0U2lnbmFsIiwiY2FsbGJhY2siLCJvbmNlIiwiYWJvcnRDb250cm9sbGVyV2l0aFJlYXNvbiIsImxpc3RlbmVyQ2FuY2VsbGVkIiwibGlzdGVuZXIiLCJsaXN0ZW5lckNvbXBsZXRlZCIsIlRhc2tBYm9ydEVycm9yIiwiY29kZSIsInRhc2siLCJ2YWxpZGF0ZUFjdGl2ZSIsInJhY2VXaXRoU2lnbmFsIiwiY2xlYW51cCIsIm5vdGlmeVJlamVjdGlvbiIsImZpbmFsbHkiLCJjcmVhdGVQYXVzZSIsIm91dHB1dCIsImNyZWF0ZURlbGF5IiwicGF1c2UiLCJ0aW1lb3V0TXMiLCJzZXRUaW1lb3V0IiwiSU5URVJOQUxfTklMX1RPS0VOIiwiYWxtIiwiY3JlYXRlRm9yayIsInBhcmVudEFib3J0U2lnbmFsIiwidGFza0V4ZWN1dG9yIiwiY29udHJvbGxlciIsImNoaWxkQWJvcnRDb250cm9sbGVyIiwidGFzazIiLCJjbGVhblVwIiwicmVzdWx0MiIsImRlbGF5IiwiZXJyb3JfMSIsInN0YXR1cyIsImNhbmNlbCIsImNyZWF0ZVRha2VQYXR0ZXJuIiwic3RhcnRMaXN0ZW5pbmciLCJwcmVkaWNhdGUiLCJ0aW1lb3V0IiwidW5zdWJzY3JpYmUiLCJ0dXBsZVByb21pc2UiLCJwcm9taXNlcyIsInN0b3BMaXN0ZW5pbmciLCJlZmZlY3QiLCJsaXN0ZW5lckFwaSIsImdldE9yaWdpbmFsU3RhdGUiLCJ0YWtlIiwiZ2V0TGlzdGVuZXJFbnRyeVByb3BzRnJvbSIsImNyZWF0ZUxpc3RlbmVyRW50cnkiLCJjYW5jZWxBY3RpdmVMaXN0ZW5lcnMiLCJjcmVhdGVDbGVhckxpc3RlbmVyTWlkZGxld2FyZSIsImxpc3RlbmVyTWFwIiwic2FmZWx5Tm90aWZ5RXJyb3IiLCJlcnJvckhhbmRsZXIiLCJlcnJvclRvTm90aWZ5IiwiZXJyb3JJbmZvIiwiZXJyb3JIYW5kbGVyRXJyb3IiLCJhZGRMaXN0ZW5lciIsImNsZWFyQWxsTGlzdGVuZXJzIiwicmVtb3ZlTGlzdGVuZXIiLCJkZWZhdWx0RXJyb3JIYW5kbGVyIiwiY29uc29sZSIsImNyZWF0ZUxpc3RlbmVyTWlkZGxld2FyZSIsIm1pZGRsZXdhcmVPcHRpb25zIiwiZmluZExpc3RlbmVyRW50cnkiLCJleGlzdGluZ0VudHJ5IiwiY2FuY2VsT3B0aW9ucyIsImNhbmNlbEFjdGl2ZSIsImluc2VydEVudHJ5IiwiZW50cnkyIiwibm90aWZ5TGlzdGVuZXIiLCJhcGkiLCJpbnRlcm5hbFRhc2tDb250cm9sbGVyIiwibGlzdGVuZXJFcnJvcl8xIiwiQm9vbGVhbiIsImZvcmsiLCJzdWJzY3JpYmUiLCJyYWlzZWRCeSIsImNsZWFyTGlzdGVuZXJNaWRkbGV3YXJlIiwib3JpZ2luYWxTdGF0ZSIsImN1cnJlbnRTdGF0ZSIsImxpc3RlbmVyRW50cmllcyIsImxpc3RlbmVyRW50cmllc18xIiwicnVuTGlzdGVuZXIiLCJwcmVkaWNhdGVFcnJvciIsImNsZWFyTGlzdGVuZXJzIiwicHJvbWlzZSIsIlNIT1VMRF9BVVRPQkFUQ0giLCJwcmVwYXJlQXV0b0JhdGNoZWQiLCJxdWV1ZU1pY3JvdGFza1NoaW0iLCJxdWV1ZU1pY3JvdGFzayIsImdsb2JhbFRoaXMiLCJjYiIsImVyciIsImNyZWF0ZVF1ZXVlV2l0aFRpbWVyIiwibm90aWZ5IiwickFGIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiYXV0b0JhdGNoRW5oYW5jZXIiLCJzdG9yZSIsIm5vdGlmeWluZyIsInNob3VsZE5vdGlmeUF0RW5kT2ZUaWNrIiwibm90aWZpY2F0aW9uUXVldWVkIiwibGlzdGVuZXJzIiwicXVldWVDYWxsYmFjayIsInF1ZXVlTm90aWZpY2F0aW9uIiwibm90aWZ5TGlzdGVuZXJzIiwibGlzdGVuZXIyIl0sInNvdXJjZVJvb3QiOiIifQ==