@kepler.gl/reducers 3.3.0-alpha.17 → 3.3.0-alpha.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/combined-updaters.js +28 -9
- package/dist/cjs/vis-state-updaters.js +357 -248
- package/dist/combined-updaters.d.ts +14 -4
- package/dist/composers.d.ts +13 -2
- package/dist/esm/combined-updaters.js +29 -10
- package/dist/esm/vis-state-updaters.js +358 -249
- package/dist/vis-state-updaters.d.ts +0 -5
- package/package.json +16 -16
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import type { FileCacheItem } from '@kepler.gl/processors';
|
|
1
2
|
import { MapState, UiState, AddDataToMapPayload } from '@kepler.gl/types';
|
|
2
3
|
import { MapStyle } from './map-style-updaters';
|
|
3
4
|
import { ProviderState } from './provider-state-updaters';
|
|
4
|
-
import { loadFilesSuccessUpdaterAction, ConfirmReplaceDatasetUpdaterAction, StageLoadedFilesUpdaterAction, MapStyleChangeUpdaterAction, LayerTypeChangeUpdaterAction, ToggleSplitMapUpdaterAction, ReplaceDataInMapPayload, MapStateActions } from '@kepler.gl/actions';
|
|
5
|
+
import { loadFilesSuccessUpdaterAction, ConfirmReplaceDatasetUpdaterAction, StageLoadedFilesUpdaterAction, loadFilesSuccess, MapStyleChangeUpdaterAction, LayerTypeChangeUpdaterAction, ToggleSplitMapUpdaterAction, ReplaceDataInMapPayload, MapStateActions } from '@kepler.gl/actions';
|
|
5
6
|
import { VisState } from '@kepler.gl/schemas';
|
|
6
7
|
export type KeplerGlState = {
|
|
7
8
|
visState: VisState;
|
|
@@ -10,6 +11,12 @@ export type KeplerGlState = {
|
|
|
10
11
|
uiState: UiState;
|
|
11
12
|
providerState: ProviderState;
|
|
12
13
|
};
|
|
14
|
+
type ProgressiveLoadFilesSuccessAction = loadFilesSuccessUpdaterAction & {
|
|
15
|
+
progressiveSteps?: FileCacheItem[][];
|
|
16
|
+
};
|
|
17
|
+
type ProgressiveLoadContinuation = ReturnType<typeof loadFilesSuccess> & {
|
|
18
|
+
progressiveSteps: FileCacheItem[][];
|
|
19
|
+
};
|
|
13
20
|
export declare const isValidConfig: (config: any) => unknown;
|
|
14
21
|
export declare const defaultAddDataToMapOptions: {
|
|
15
22
|
centerMap: boolean;
|
|
@@ -42,10 +49,11 @@ export declare const defaultAddDataToMapOptions: {
|
|
|
42
49
|
*
|
|
43
50
|
* @public
|
|
44
51
|
*/
|
|
45
|
-
export declare const addDataToMapUpdater: (state: KeplerGlState, { payload }: {
|
|
52
|
+
export declare const addDataToMapUpdater: (state: KeplerGlState, { payload, onFinish }: {
|
|
46
53
|
payload: AddDataToMapPayload;
|
|
54
|
+
onFinish?: ProgressiveLoadContinuation;
|
|
47
55
|
}) => KeplerGlState;
|
|
48
|
-
export declare const loadFilesSuccessUpdater: (state: KeplerGlState, action:
|
|
56
|
+
export declare const loadFilesSuccessUpdater: (state: KeplerGlState, action: ProgressiveLoadFilesSuccessAction) => KeplerGlState;
|
|
49
57
|
/**
|
|
50
58
|
* Finish a deferred file load: keep the parsed cache, clear the loading flag,
|
|
51
59
|
* and leave the Add Data modal open until the user confirms.
|
|
@@ -66,8 +74,9 @@ export declare const appendStagedLoadedFilesUpdater: (state: KeplerGlState, acti
|
|
|
66
74
|
* @public
|
|
67
75
|
*/
|
|
68
76
|
export declare const confirmReplaceDatasetUpdater: (state: KeplerGlState, action: ConfirmReplaceDatasetUpdaterAction) => KeplerGlState;
|
|
69
|
-
export declare const addDataToMapComposed: (state: KeplerGlState, { payload }: {
|
|
77
|
+
export declare const addDataToMapComposed: (state: KeplerGlState, { payload, onFinish }: {
|
|
70
78
|
payload: AddDataToMapPayload;
|
|
79
|
+
onFinish?: ProgressiveLoadContinuation;
|
|
71
80
|
}) => KeplerGlState;
|
|
72
81
|
/**
|
|
73
82
|
* Updater that changes the map style by calling mapStyleChangeUpdater on visState.
|
|
@@ -114,3 +123,4 @@ export declare const setMapSplitModeUpdater: (state: KeplerGlState, action: MapS
|
|
|
114
123
|
export declare const replaceDataInMapUpdater: (state: KeplerGlState, { payload }: {
|
|
115
124
|
payload: ReplaceDataInMapPayload;
|
|
116
125
|
}) => KeplerGlState;
|
|
126
|
+
export {};
|
package/dist/composers.d.ts
CHANGED
|
@@ -1,16 +1,27 @@
|
|
|
1
|
+
import { ActionTypes } from '@kepler.gl/actions';
|
|
1
2
|
import * as combinedUpdaters from './combined-updaters';
|
|
2
3
|
/**
|
|
3
4
|
* Important: Do not rename `actionHandler` or the assignment pattern of property value.
|
|
4
5
|
* It is used to generate documentation
|
|
5
6
|
*/
|
|
6
7
|
declare const actionHandler: {
|
|
7
|
-
"@@kepler.gl/ADD_DATA_TO_MAP": (state: combinedUpdaters.KeplerGlState, { payload }: {
|
|
8
|
+
"@@kepler.gl/ADD_DATA_TO_MAP": (state: combinedUpdaters.KeplerGlState, { payload, onFinish }: {
|
|
8
9
|
payload: import("@kepler.gl/types").AddDataToMapPayload;
|
|
10
|
+
onFinish?: {
|
|
11
|
+
result: import("@kepler.gl/processors").FileCacheItem[];
|
|
12
|
+
options?: import("@kepler.gl/types").AddDataToMapOptions | undefined;
|
|
13
|
+
loadId?: number | undefined;
|
|
14
|
+
type: typeof ActionTypes.LOAD_FILES_SUCCESS;
|
|
15
|
+
} & {
|
|
16
|
+
progressiveSteps: import("@kepler.gl/processors").FileCacheItem[][];
|
|
17
|
+
};
|
|
9
18
|
}) => combinedUpdaters.KeplerGlState;
|
|
10
19
|
"@@kepler.gl/MAP_STYLE_CHANGE": (state: combinedUpdaters.KeplerGlState, action: import("@kepler.gl/actions").MapStyleChangeUpdaterAction) => combinedUpdaters.KeplerGlState;
|
|
11
20
|
"@@kepler.gl/SET_MAP_VIEW_MODE": (state: combinedUpdaters.KeplerGlState, action: import("@kepler.gl/actions").SetMapViewModeUpdaterAction) => combinedUpdaters.KeplerGlState;
|
|
12
21
|
"@@kepler.gl/LAYER_TYPE_CHANGE": (state: combinedUpdaters.KeplerGlState, action: import("@kepler.gl/actions").LayerTypeChangeUpdaterAction) => combinedUpdaters.KeplerGlState;
|
|
13
|
-
"@@kepler.gl/LOAD_FILES_SUCCESS": (state: combinedUpdaters.KeplerGlState, action: import("@kepler.gl/actions").loadFilesSuccessUpdaterAction
|
|
22
|
+
"@@kepler.gl/LOAD_FILES_SUCCESS": (state: combinedUpdaters.KeplerGlState, action: import("@kepler.gl/actions").loadFilesSuccessUpdaterAction & {
|
|
23
|
+
progressiveSteps?: import("@kepler.gl/processors").FileCacheItem[][];
|
|
24
|
+
}) => combinedUpdaters.KeplerGlState;
|
|
14
25
|
"@@kepler.gl/CONFIRM_REPLACE_DATASET": (state: combinedUpdaters.KeplerGlState, action: import("@kepler.gl/actions").ConfirmReplaceDatasetUpdaterAction) => combinedUpdaters.KeplerGlState;
|
|
15
26
|
"@@kepler.gl/STAGE_LOADED_FILES": (state: combinedUpdaters.KeplerGlState, action: import("@kepler.gl/actions").StageLoadedFilesUpdaterAction) => combinedUpdaters.KeplerGlState;
|
|
16
27
|
"@@kepler.gl/APPEND_STAGED_LOADED_FILES": (state: combinedUpdaters.KeplerGlState, action: import("@kepler.gl/actions").StageLoadedFilesUpdaterAction) => combinedUpdaters.KeplerGlState;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
|
|
2
|
-
import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
|
|
3
2
|
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
3
|
+
import _toArray from "@babel/runtime/helpers/esm/toArray";
|
|
4
|
+
import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
|
|
4
5
|
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
5
6
|
var _excluded = ["deleteOriginalDataset"];
|
|
6
7
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
@@ -12,8 +13,9 @@ import { toggleModalUpdater, loadFilesSuccessUpdater as uiStateLoadFilesSuccessU
|
|
|
12
13
|
import { updateVisDataUpdater as visStateUpdateVisDataUpdater, setMapInfoUpdater, layerTypeChangeUpdater, toggleSplitMapUpdater as visStateToggleSplitMapUpdater, prepareStateForDatasetReplace } from './vis-state-updaters';
|
|
13
14
|
import { receiveMapConfigUpdater as stateMapConfigUpdater, toggleSplitMapUpdater as mapStateToggleSplitMapUpdater, setMapSplitModeUpdater as mapStateSetMapSplitModeUpdater, setMapViewModeUpdater } from './map-state-updaters';
|
|
14
15
|
import { mapStyleChangeUpdater, receiveMapConfigUpdater as styleMapConfigUpdater } from './map-style-updaters';
|
|
15
|
-
import { filesToDataPayload } from '@kepler.gl/processors';
|
|
16
|
+
import { fileCacheToProgressiveSteps, filesToDataPayload } from '@kepler.gl/processors';
|
|
16
17
|
import { payload_, apply_, with_, if_, compose_, merge_, pick_ } from './composer-helpers';
|
|
18
|
+
import { loadFilesSuccess } from '@kepler.gl/actions';
|
|
17
19
|
import { isPlainObject, computeSplitMapLayers } from '@kepler.gl/utils';
|
|
18
20
|
import { findMapBounds } from './data-utils';
|
|
19
21
|
import { BASE_MAP_COLOR_MODES, OVERLAY_BLENDINGS, NO_MAP_ID, MapSplitMode, ADD_DATA_ID } from '@kepler.gl/constants';
|
|
@@ -104,7 +106,8 @@ export var defaultAddDataToMapOptions = {
|
|
|
104
106
|
*/
|
|
105
107
|
export var addDataToMapUpdater = function addDataToMapUpdater(state, _ref) {
|
|
106
108
|
var _datasets$, _datasets$2, _datasets$3;
|
|
107
|
-
var payload = _ref.payload
|
|
109
|
+
var payload = _ref.payload,
|
|
110
|
+
onFinish = _ref.onFinish;
|
|
108
111
|
var datasets = payload.datasets,
|
|
109
112
|
config = payload.config,
|
|
110
113
|
info = payload.info;
|
|
@@ -116,7 +119,8 @@ export var addDataToMapUpdater = function addDataToMapUpdater(state, _ref) {
|
|
|
116
119
|
return compose_([pick_('visState')(apply_(visStateUpdateVisDataUpdater, {
|
|
117
120
|
datasets: datasets,
|
|
118
121
|
options: options,
|
|
119
|
-
config: config
|
|
122
|
+
config: config,
|
|
123
|
+
onFinish: onFinish
|
|
120
124
|
}))])(state);
|
|
121
125
|
}
|
|
122
126
|
|
|
@@ -146,7 +150,8 @@ export var addDataToMapUpdater = function addDataToMapUpdater(state, _ref) {
|
|
|
146
150
|
apply_(visStateUpdateVisDataUpdater, {
|
|
147
151
|
datasets: datasets,
|
|
148
152
|
options: options,
|
|
149
|
-
config: parsedConfig
|
|
153
|
+
config: parsedConfig,
|
|
154
|
+
onFinish: onFinish
|
|
150
155
|
})), if_(Boolean(info), pick_('visState')(apply_(setMapInfoUpdater, {
|
|
151
156
|
info: info
|
|
152
157
|
}))),
|
|
@@ -173,16 +178,30 @@ export var loadFilesSuccessUpdater = function loadFilesSuccessUpdater(state, act
|
|
|
173
178
|
if (isStaleFileLoadFinish(state.visState.fileLoading, action.loadId)) {
|
|
174
179
|
return state;
|
|
175
180
|
}
|
|
176
|
-
|
|
177
|
-
var
|
|
181
|
+
var progressiveSteps = Object.prototype.hasOwnProperty.call(action, 'progressiveSteps') ? [action.result].concat(_toConsumableArray(action.progressiveSteps || [])) : fileCacheToProgressiveSteps(action.result);
|
|
182
|
+
var _progressiveSteps = _toArray(progressiveSteps),
|
|
183
|
+
_progressiveSteps$ = _progressiveSteps[0],
|
|
184
|
+
currentStep = _progressiveSteps$ === void 0 ? action.result : _progressiveSteps$,
|
|
185
|
+
remainingSteps = _progressiveSteps.slice(1);
|
|
186
|
+
var payloads = filesToDataPayload(currentStep, action.options);
|
|
187
|
+
// The first progressive snapshot may fit the map to the newly created layer.
|
|
188
|
+
// Later snapshots only replace that layer's data and must not keep moving the viewport.
|
|
189
|
+
var continuationOptions = _objectSpread(_objectSpread({}, action.options), {}, {
|
|
190
|
+
centerMap: false
|
|
191
|
+
});
|
|
192
|
+
var onFinish = remainingSteps.length ? _objectSpread(_objectSpread({}, loadFilesSuccess(remainingSteps[0], continuationOptions)), {}, {
|
|
193
|
+
progressiveSteps: remainingSteps.slice(1)
|
|
194
|
+
}) : undefined;
|
|
178
195
|
var nextState = compose_([pick_('visState')(merge_({
|
|
179
196
|
fileLoading: false,
|
|
180
197
|
fileLoadingProgress: {},
|
|
181
198
|
stagedToAdd: null
|
|
182
199
|
}))])(state);
|
|
183
200
|
// make multiple add data to map calls
|
|
184
|
-
var stateWithData = compose_(payloads.map(function (p) {
|
|
185
|
-
return apply_(addDataToMapUpdater, payload_(p))
|
|
201
|
+
var stateWithData = compose_(payloads.map(function (p, index) {
|
|
202
|
+
return apply_(addDataToMapUpdater, _objectSpread(_objectSpread({}, payload_(p)), onFinish && index === payloads.length - 1 ? {
|
|
203
|
+
onFinish: onFinish
|
|
204
|
+
} : {}));
|
|
186
205
|
}))(nextState);
|
|
187
206
|
return stateWithData;
|
|
188
207
|
};
|
|
@@ -639,4 +658,4 @@ export var replaceDataInMapUpdater = function replaceDataInMapUpdater(state, _re
|
|
|
639
658
|
}));
|
|
640
659
|
return nextState;
|
|
641
660
|
};
|
|
642
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ0b2dnbGVNb2RhbFVwZGF0ZXIiLCJsb2FkRmlsZXNTdWNjZXNzVXBkYXRlciIsInVpU3RhdGVMb2FkRmlsZXNTdWNjZXNzVXBkYXRlciIsInRvZ2dsZU1hcENvbnRyb2xVcGRhdGVyIiwidG9nZ2xlU3BsaXRNYXBVcGRhdGVyIiwidWlTdGF0ZVRvZ2dsZVNwbGl0TWFwVXBkYXRlciIsInJlY2VpdmVNYXBDb25maWdVcGRhdGVyIiwidWlTdGF0ZVJlY2VpdmVNYXBDb25maWdVcGRhdGVyIiwidXBkYXRlVmlzRGF0YVVwZGF0ZXIiLCJ2aXNTdGF0ZVVwZGF0ZVZpc0RhdGFVcGRhdGVyIiwic2V0TWFwSW5mb1VwZGF0ZXIiLCJsYXllclR5cGVDaGFuZ2VVcGRhdGVyIiwidmlzU3RhdGVUb2dnbGVTcGxpdE1hcFVwZGF0ZXIiLCJwcmVwYXJlU3RhdGVGb3JEYXRhc2V0UmVwbGFjZSIsInN0YXRlTWFwQ29uZmlnVXBkYXRlciIsIm1hcFN0YXRlVG9nZ2xlU3BsaXRNYXBVcGRhdGVyIiwic2V0TWFwU3BsaXRNb2RlVXBkYXRlciIsIm1hcFN0YXRlU2V0TWFwU3BsaXRNb2RlVXBkYXRlciIsInNldE1hcFZpZXdNb2RlVXBkYXRlciIsIm1hcFN0eWxlQ2hhbmdlVXBkYXRlciIsInN0eWxlTWFwQ29uZmlnVXBkYXRlciIsImZpbGVzVG9EYXRhUGF5bG9hZCIsInBheWxvYWRfIiwiYXBwbHlfIiwid2l0aF8iLCJpZl8iLCJjb21wb3NlXyIsIm1lcmdlXyIsInBpY2tfIiwiaXNQbGFpbk9iamVjdCIsImNvbXB1dGVTcGxpdE1hcExheWVycyIsImZpbmRNYXBCb3VuZHMiLCJCQVNFX01BUF9DT0xPUl9NT0RFUyIsIk9WRVJMQVlfQkxFTkRJTkdTIiwiTk9fTUFQX0lEIiwiTWFwU3BsaXRNb2RlIiwiQUREX0RBVEFfSUQiLCJnZXRCYXNlbWFwQ29sb3JzRm9yU3R5bGUiLCJERUZBVUxUX0JBU0VNQVBfQ09MT1IiLCJjb21iaW5lZFVwZGF0ZXJzIiwiaXNWYWxpZENvbmZpZyIsImNvbmZpZyIsInZlcnNpb24iLCJkZWZhdWx0QWRkRGF0YVRvTWFwT3B0aW9ucyIsImNlbnRlck1hcCIsImtlZXBFeGlzdGluZ0NvbmZpZyIsImF1dG9DcmVhdGVMYXllcnMiLCJhdXRvQ3JlYXRlVG9vbHRpcHMiLCJhZGREYXRhVG9NYXBVcGRhdGVyIiwic3RhdGUiLCJfcmVmIiwiX2RhdGFzZXRzJCIsIl9kYXRhc2V0cyQyIiwiX2RhdGFzZXRzJDMiLCJwYXlsb2FkIiwiZGF0YXNldHMiLCJpbmZvIiwib3B0aW9ucyIsIl9vYmplY3RTcHJlYWQiLCJpc1Byb2dyZXNzaXZlTG9hZGluZyIsIkFycmF5IiwiaXNBcnJheSIsImZvcm1hdCIsImlkIiwidmlzU3RhdGUiLCJwYXJzZWRDb25maWciLCJzY2hlbWEiLCJwYXJzZVNhdmVkQ29uZmlnIiwib2xkTGF5ZXJzIiwibGF5ZXJzIiwiZmlsdGVyTmV3bHlBZGRlZExheWVycyIsImZpbHRlciIsIm5sIiwiZmluZCIsIm9sIiwiZmluZE1hcEJvdW5kc0lmQ2VudGVyZWQiLCJib3VuZHMiLCJ1bmRlZmluZWQiLCJCb29sZWFuIiwiX3JlZjIiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJyZWFkT25seSIsImFjdGlvbiIsImlzU3RhbGVGaWxlTG9hZEZpbmlzaCIsImZpbGVMb2FkaW5nIiwibG9hZElkIiwicGF5bG9hZHMiLCJyZXN1bHQiLCJuZXh0U3RhdGUiLCJmaWxlTG9hZGluZ1Byb2dyZXNzIiwic3RhZ2VkVG9BZGQiLCJzdGF0ZVdpdGhEYXRhIiwibWFwIiwicCIsImtlcHRMb2FkRXJyb3JzIiwicHJvZ3Jlc3MiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmcm9tRW50cmllcyIsImVudHJpZXMiLCJfcmVmMyIsIl9yZWY0IiwiX3NsaWNlZFRvQXJyYXkiLCJ2YWx1ZSIsImVycm9yIiwic3RhZ2VMb2FkZWRGaWxlc1VwZGF0ZXIiLCJtb2RhbE9wZW4iLCJ1aVN0YXRlIiwiY3VycmVudE1vZGFsIiwicHJldmlvdXMiLCJjb25jYXQiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJzdGFnZWRJdGVtS2V5IiwiaXRlbSIsIl9pdGVtJG1ldGFkYXRhIiwiX2l0ZW0kaW5mbyIsIm1ldGFkYXRhIiwic291cmNlIiwiYXBwZW5kU3RhZ2VkTG9hZGVkRmlsZXNVcGRhdGVyIiwic2VlbiIsIlNldCIsIm5leHQiLCJrZXkiLCJoYXMiLCJhZGQiLCJzcGxpdFJlcGxhY2VtZW50VXBsb2FkIiwibWFwcyIsImZvckVhY2giLCJwdXNoIiwibGlzdCIsImRhdGFzZXQiLCJhcHBseSIsImRhdGFzZXRUb1VzZSIsIm1vcmUiLCJzbGljZSIsInJlbWFpbmRlciIsImNvbmZpcm1SZXBsYWNlRGF0YXNldFVwZGF0ZXIiLCJfZGF0YXNldFRvVXNlJGluZm8iLCJjbGVhcmVkIiwiX3NwbGl0UmVwbGFjZW1lbnRVcGxvIiwiZGF0YXNldFRvUmVwbGFjZUlkIiwicmVwbGFjZWQiLCJyZXBsYWNlRGF0YUluTWFwVXBkYXRlciIsImRlbGV0ZU9yaWdpbmFsRGF0YXNldCIsImFkZERhdGFUb01hcENvbXBvc2VkIiwidXBkYXRlT3ZlcmxheUJsZW5kaW5nIiwib3ZlcmxheUJsZW5kaW5nIiwibm9ybWFsIiwidXBkYXRlRGFya0Jhc2VNYXBMYXllcnMiLCJkYXJrQmFzZU1hcEVuYWJsZWQiLCJsYXllcklkIiwibGF5ZXIiLCJ2aXNDb25maWdTZXR0aW5ncyIsInZpc0NvbmZpZyIsInVwZGF0ZUxheWVyQ29uZmlnIiwiY29tYmluZWRNYXBTdHlsZUNoYW5nZVVwZGF0ZXIiLCJfbWFwU3RhdGUkZ2xvYmUiLCJtYXBTdHlsZSIsImdldENvbG9yTW9kZSIsIl9tYXBTdHlsZSRtYXBTdHlsZXMkayIsIm1hcFN0eWxlcyIsImNvbG9yTW9kZSIsInByZXZDb2xvck1vZGUiLCJzdHlsZVR5cGUiLCJuZXh0Q29sb3JNb2RlIiwibWFwU3RhdGUiLCJEQVJLIiwic2NyZWVuIiwiTElHSFQiLCJkYXJrZW4iLCJnbG9iZSIsImVuYWJsZWQiLCJiYXNlbWFwIiwibGFiZWxzIiwiYWRtaW5MaW5lcyIsIndhdGVyIiwic3luY0dsb2JlQ29uZmlnQ29sb3JzVG9TdHlsZSIsIl9tYXBTdGF0ZSRnbG9iZTIiLCJuZXh0U3R5bGVPYmoiLCJuZXh0R2xvYmVDb25maWciLCJzdXJmYWNlQ29sb3IiLCJiYWNrZ3JvdW5kRmlsbENvbG9yIiwid2F0ZXJDb2xvciIsImJhc2VtYXBXYXRlckZpbGxDb2xvciIsImFkbWluTGluZXNDb2xvciIsImJhc2VtYXBBZG1pbkxpbmVDb2xvciIsImJhc2VtYXBDb2xvcnMiLCJzdHlsZSIsImxheWVyR3JvdXBzIiwiY29tYmluZWRTZXRNYXBWaWV3TW9kZVVwZGF0ZXIiLCJfbWFwU3RhdGUkZ2xvYmUzIiwiY29tYmluZWRMYXllclR5cGVDaGFuZ2VVcGRhdGVyIiwib2xkTGF5ZXJJbmRleCIsImZpbmRJbmRleCIsIm9sZExheWVyIiwibmV3TGF5ZXIiLCJfbmV3U3RhdGUkdWlTdGF0ZSRtYXAiLCJuZXdTdGF0ZSIsImlzU3BsaXQiLCJzcGxpdE1hcHMiLCJpc0xlZ2VuZEFjdGl2ZSIsIm1hcENvbnRyb2xzIiwibWFwTGVnZW5kIiwiYWN0aXZlIiwicGFuZWxJZCIsImluZGV4IiwiX25ld1VpU3RhdGUkbWFwQ29udHJvIiwibWFwU3BsaXRNb2RlIiwicHJldk1vZGUiLCJuZXdNYXBTdGF0ZSIsIm5ld1Zpc1N0YXRlIiwiU0lOR0xFX01BUCIsIkRVQUxfTUFQIiwiU1dJUEVfQ09NUEFSRSIsImR1cGxpY2F0ZSIsIm5ld1VpU3RhdGUiLCJkZWZhdWx0UmVwbGFjZURhdGFUb01hcE9wdGlvbnMiLCJfcmVmNSIsIl9wYXlsb2FkJG9wdGlvbnMiLCJfb3B0aW9ucyRkZWxldGVPcmlnaW4iLCJyZXBsYWNlT3B0aW9ucyIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsIl9leGNsdWRlZCIsImFkZERhdGFUb01hcE9wdGlvbnMiLCJkYXRhSWRUb1VzZSIsInByZXBhcmVkU3RhdGUiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tYmluZWQtdXBkYXRlcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtcbiAgdG9nZ2xlTW9kYWxVcGRhdGVyLFxuICBsb2FkRmlsZXNTdWNjZXNzVXBkYXRlciBhcyB1aVN0YXRlTG9hZEZpbGVzU3VjY2Vzc1VwZGF0ZXIsXG4gIHRvZ2dsZU1hcENvbnRyb2xVcGRhdGVyLFxuICB0b2dnbGVTcGxpdE1hcFVwZGF0ZXIgYXMgdWlTdGF0ZVRvZ2dsZVNwbGl0TWFwVXBkYXRlcixcbiAgcmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIgYXMgdWlTdGF0ZVJlY2VpdmVNYXBDb25maWdVcGRhdGVyXG59IGZyb20gJy4vdWktc3RhdGUtdXBkYXRlcnMnO1xuaW1wb3J0IHtcbiAgdXBkYXRlVmlzRGF0YVVwZGF0ZXIgYXMgdmlzU3RhdGVVcGRhdGVWaXNEYXRhVXBkYXRlcixcbiAgc2V0TWFwSW5mb1VwZGF0ZXIsXG4gIGxheWVyVHlwZUNoYW5nZVVwZGF0ZXIsXG4gIHRvZ2dsZVNwbGl0TWFwVXBkYXRlciBhcyB2aXNTdGF0ZVRvZ2dsZVNwbGl0TWFwVXBkYXRlcixcbiAgcHJlcGFyZVN0YXRlRm9yRGF0YXNldFJlcGxhY2Vcbn0gZnJvbSAnLi92aXMtc3RhdGUtdXBkYXRlcnMnO1xuaW1wb3J0IHtcbiAgcmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIgYXMgc3RhdGVNYXBDb25maWdVcGRhdGVyLFxuICB0b2dnbGVTcGxpdE1hcFVwZGF0ZXIgYXMgbWFwU3RhdGVUb2dnbGVTcGxpdE1hcFVwZGF0ZXIsXG4gIHNldE1hcFNwbGl0TW9kZVVwZGF0ZXIgYXMgbWFwU3RhdGVTZXRNYXBTcGxpdE1vZGVVcGRhdGVyLFxuICBzZXRNYXBWaWV3TW9kZVVwZGF0ZXJcbn0gZnJvbSAnLi9tYXAtc3RhdGUtdXBkYXRlcnMnO1xuaW1wb3J0IHtcbiAgbWFwU3R5bGVDaGFuZ2VVcGRhdGVyLFxuICByZWNlaXZlTWFwQ29uZmlnVXBkYXRlciBhcyBzdHlsZU1hcENvbmZpZ1VwZGF0ZXJcbn0gZnJvbSAnLi9tYXAtc3R5bGUtdXBkYXRlcnMnO1xuaW1wb3J0IHtmaWxlc1RvRGF0YVBheWxvYWR9IGZyb20gJ0BrZXBsZXIuZ2wvcHJvY2Vzc29ycyc7XG5pbXBvcnQge3BheWxvYWRfLCBhcHBseV8sIHdpdGhfLCBpZl8sIGNvbXBvc2VfLCBtZXJnZV8sIHBpY2tffSBmcm9tICcuL2NvbXBvc2VyLWhlbHBlcnMnO1xuaW1wb3J0IHtNYXBTdGF0ZSwgVWlTdGF0ZSwgQWRkRGF0YVRvTWFwUGF5bG9hZCwgUGFyc2VkQ29uZmlnLCBQcm90b0RhdGFzZXR9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtNYXBTdHlsZX0gZnJvbSAnLi9tYXAtc3R5bGUtdXBkYXRlcnMnO1xuaW1wb3J0IHtQcm92aWRlclN0YXRlfSBmcm9tICcuL3Byb3ZpZGVyLXN0YXRlLXVwZGF0ZXJzJztcbmltcG9ydCB7XG4gIGxvYWRGaWxlc1N1Y2Nlc3NVcGRhdGVyQWN0aW9uLFxuICBDb25maXJtUmVwbGFjZURhdGFzZXRVcGRhdGVyQWN0aW9uLFxuICBTdGFnZUxvYWRlZEZpbGVzVXBkYXRlckFjdGlvbixcbiAgTWFwU3R5bGVDaGFuZ2VVcGRhdGVyQWN0aW9uLFxuICBMYXllclR5cGVDaGFuZ2VVcGRhdGVyQWN0aW9uLFxuICBUb2dnbGVTcGxpdE1hcFVwZGF0ZXJBY3Rpb24sXG4gIFJlcGxhY2VEYXRhSW5NYXBQYXlsb2FkLFxuICBNYXBTdGF0ZUFjdGlvbnNcbn0gZnJvbSAnQGtlcGxlci5nbC9hY3Rpb25zJztcbmltcG9ydCB7VmlzU3RhdGV9IGZyb20gJ0BrZXBsZXIuZ2wvc2NoZW1hcyc7XG5pbXBvcnQge0xheWVyfSBmcm9tICdAa2VwbGVyLmdsL2xheWVycyc7XG5pbXBvcnQge2lzUGxhaW5PYmplY3QsIGNvbXB1dGVTcGxpdE1hcExheWVyc30gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQge2ZpbmRNYXBCb3VuZHN9IGZyb20gJy4vZGF0YS11dGlscyc7XG5pbXBvcnQge1xuICBCQVNFX01BUF9DT0xPUl9NT0RFUyxcbiAgT1ZFUkxBWV9CTEVORElOR1MsXG4gIE5PX01BUF9JRCxcbiAgTWFwU3BsaXRNb2RlLFxuICBBRERfREFUQV9JRFxufSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge2dldEJhc2VtYXBDb2xvcnNGb3JTdHlsZSwgREVGQVVMVF9CQVNFTUFQX0NPTE9SfSBmcm9tICdAa2VwbGVyLmdsL2RlY2tnbC1sYXllcnMnO1xuXG5leHBvcnQgdHlwZSBLZXBsZXJHbFN0YXRlID0ge1xuICB2aXNTdGF0ZTogVmlzU3RhdGU7XG4gIG1hcFN0YXRlOiBNYXBTdGF0ZTtcbiAgbWFwU3R5bGU6IE1hcFN0eWxlO1xuICB1aVN0YXRlOiBVaVN0YXRlO1xuICBwcm92aWRlclN0YXRlOiBQcm92aWRlclN0YXRlO1xufTtcblxuLy8gY29tcG9zZSBhY3Rpb24gdG8gYXBwbHkgcmVzdWx0IG11bHRpcGxlIHJlZHVjZXJzLCB3aXRoIHRoZSBvdXRwdXQgb2Ygb25lXG5cbi8qKlxuICogU29tZSBhY3Rpb25zIHdpbGwgYWZmZWN0IHRoZSBlbnRpcmUga2VwbGVyLmxnIGluc3RhbmNlIHN0YXRlLlxuICogVGhlIHVwZGF0ZXJzIGZvciB0aGVzZSBhY3Rpb25zIGlzIGV4cG9ydGVkIGFzIGBjb21iaW5lZFVwZGF0ZXJzYC4gVGhlc2UgdXBkYXRlciB0YWtlIHRoZSBlbnRpcmUgaW5zdGFuY2Ugc3RhdGVcbiAqIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4gUmVhZCBtb3JlIGFib3V0IFtVc2luZyB1cGRhdGVyc10oLi4vYWR2YW5jZWQtdXNhZ2UvdXNpbmctdXBkYXRlcnMubWQpXG4gKiBAcHVibGljXG4gKiBAZXhhbXBsZVxuICpcbiAqIGltcG9ydCBrZXBsZXJHbFJlZHVjZXIsIHtjb21iaW5lZFVwZGF0ZXJzfSBmcm9tICdAa2VwbGVyLmdsL3JlZHVjZXJzJztcbiAqIC8vIFJvb3QgUmVkdWNlclxuICogY29uc3QgcmVkdWNlcnMgPSBjb21iaW5lUmVkdWNlcnMoe1xuICogIGtlcGxlckdsOiBrZXBsZXJHbFJlZHVjZXIsXG4gKiAgYXBwOiBhcHBSZWR1Y2VyXG4gKiB9KTtcbiAqXG4gKiBjb25zdCBjb21wb3NlZFJlZHVjZXIgPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICogIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAqICAgIC8vIGFkZCBkYXRhIHRvIG1hcCBhZnRlciByZWNlaXZpbmcgZGF0YSBmcm9tIHJlbW90ZSBzb3VyY2VzXG4gKiAgICBjYXNlICdMT0FEX1JFTU9URV9SRVNPVVJDRV9TVUNDRVNTJzpcbiAqICAgICAgcmV0dXJuIHtcbiAqICAgICAgICAuLi5zdGF0ZSxcbiAqICAgICAgICBrZXBsZXJHbDoge1xuICogICAgICAgICAgLi4uc3RhdGUua2VwbGVyR2wsXG4gKiAgICAgICAgICAvLyBwYXNzIGluIGtlcGxlci5nbCBpbnN0YW5jZSBzdGF0ZSB0byBjb21iaW5lZFVwZGF0ZXJzXG4gKiAgICAgICAgICBtYXA6ICBjb21iaW5lZFVwZGF0ZXJzLmFkZERhdGFUb01hcFVwZGF0ZXIoXG4gKiAgICAgICAgICAgc3RhdGUua2VwbGVyR2wubWFwLFxuICogICAgICAgICAgIHtcbiAqICAgICAgICAgICAgIHBheWxvYWQ6IHtcbiAqICAgICAgICAgICAgICAgZGF0YXNldHM6IGFjdGlvbi5kYXRhc2V0cyxcbiAqICAgICAgICAgICAgICAgb3B0aW9uczoge3JlYWRPbmx5OiB0cnVlfSxcbiAqICAgICAgICAgICAgICAgY29uZmlnOiBhY3Rpb24uY29uZmlnXG4gKiAgICAgICAgICAgICAgfVxuICogICAgICAgICAgICB9XG4gKiAgICAgICAgICApXG4gKiAgICAgICAgfVxuICogICAgICB9O1xuICogIH1cbiAqICByZXR1cm4gcmVkdWNlcnMoc3RhdGUsIGFjdGlvbik7XG4gKiB9O1xuICpcbiAqIGV4cG9ydCBkZWZhdWx0IGNvbXBvc2VkUmVkdWNlcjtcbiAqL1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cbi8vIEB0cy1pZ25vcmVcbmNvbnN0IGNvbWJpbmVkVXBkYXRlcnMgPSBudWxsO1xuLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cblxuZXhwb3J0IGNvbnN0IGlzVmFsaWRDb25maWcgPSBjb25maWcgPT5cbiAgaXNQbGFpbk9iamVjdChjb25maWcpICYmIGlzUGxhaW5PYmplY3QoY29uZmlnLmNvbmZpZykgJiYgY29uZmlnLnZlcnNpb247XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0QWRkRGF0YVRvTWFwT3B0aW9ucyA9IHtcbiAgY2VudGVyTWFwOiB0cnVlLFxuICBrZWVwRXhpc3RpbmdDb25maWc6IGZhbHNlLFxuICBhdXRvQ3JlYXRlTGF5ZXJzOiB0cnVlLFxuICBhdXRvQ3JlYXRlVG9vbHRpcHM6IHRydWVcbn07XG5cbi8qKlxuICogQ29tYmluZSBkYXRhIGFuZCBmdWxsIGNvbmZpZ3VyYXRpb24gdXBkYXRlIGluIGEgc2luZ2xlIGFjdGlvblxuICpcbiAqIEBtZW1iZXJvZiBjb21iaW5lZFVwZGF0ZXJzXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhdGUga2VwbGVyLmdsIGluc3RhbmNlIHN0YXRlLCBjb250YWluaW5nIGFsbCBzdWJyZWR1Y2VyIHN0YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gYWN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gYWN0aW9uLnBheWxvYWQgYHtkYXRhc2V0cywgb3B0aW9ucywgY29uZmlnfWBcbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZC5kYXRhc2V0cyAtICoqKnJlcXVpcmVkKiogZGF0YXNldHMgY2FuIGJlIGEgZGF0YXNldCBvciBhbiBhcnJheSBvZiBkYXRhc2V0c1xuICogRWFjaCBkYXRhc2V0IG9iamVjdCBuZWVkcyB0byBoYXZlIGBpbmZvYCBhbmQgYGRhdGFgIHByb3BlcnR5LlxuICogQHBhcmFtIFthY3Rpb24ucGF5bG9hZC5vcHRpb25zXSBvcHRpb24gb2JqZWN0IGB7Y2VudGVyTWFwOiB0cnVlLCBwYWRkaW5nOiB7bGVmdDogMzAwfX1gXG4gKiBAcGFyYW0gW2FjdGlvbi5wYXlsb2FkLmNvbmZpZ10gbWFwIGNvbmZpZ1xuICogQHBhcmFtIFthY3Rpb24ucGF5bG9hZC5pbmZvXSBtYXAgaW5mbyBjb250YWlucyB0aXRsZSBhbmQgZGVzY3JpcHRpb25cbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICpcbiAqIEB0eXBlZGVmIHtPYmplY3R9IERhdGFzZXRcbiAqIEBwcm9wZXJ0eSBpbmZvIC1pbmZvIG9mIGEgZGF0YXNldFxuICogQHByb3BlcnR5IGluZm8uaWQgLSBpZCBvZiB0aGlzIGRhdGFzZXQuIElmIGNvbmZpZyBpcyBkZWZpbmVkLCBgaWRgIHNob3VsZCBtYXRjaGVzIHRoZSBgZGF0YUlkYCBpbiBjb25maWcuXG4gKiBAcHJvcGVydHkgaW5mby5sYWJlbCAtIEEgZGlzcGxheSBuYW1lIG9mIHRoaXMgZGF0YXNldFxuICogQHByb3BlcnR5IGRhdGEgLSAqKipyZXF1aXJlZCoqIFRoZSBkYXRhIG9iamVjdCwgaW4gYSB0YWJ1bGFyIGZvcm1hdCB3aXRoIDIgcHJvcGVydGllcyBgZmllbGRzYCBhbmQgYHJvd3NgXG4gKiBAcHJvcGVydHkgZGF0YS5maWVsZHMgLSAqKipyZXF1aXJlZCoqIEFycmF5IG9mIGZpZWxkcyxcbiAqIEBwcm9wZXJ0eSBkYXRhLmZpZWxkcy5uYW1lIC0gKioqcmVxdWlyZWQqKiBOYW1lIG9mIHRoZSBmaWVsZCxcbiAqIEBwcm9wZXJ0eSBkYXRhLnJvd3MgLSAqKipyZXF1aXJlZCoqIEFycmF5IG9mIHJvd3MsIGluIGEgdGFidWxhciBmb3JtYXQgd2l0aCBgZmllbGRzYCBhbmQgYHJvd3NgXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkRGF0YVRvTWFwVXBkYXRlciA9IChcbiAgc3RhdGU6IEtlcGxlckdsU3RhdGUsXG4gIHtwYXlsb2FkfToge3BheWxvYWQ6IEFkZERhdGFUb01hcFBheWxvYWR9XG4pOiBLZXBsZXJHbFN0YXRlID0+IHtcbiAgY29uc3Qge2RhdGFzZXRzLCBjb25maWcsIGluZm99ID0gcGF5bG9hZDtcblxuICBjb25zdCBvcHRpb25zID0ge1xuICAgIC4uLmRlZmF1bHRBZGREYXRhVG9NYXBPcHRpb25zLFxuICAgIC4uLnBheWxvYWQub3B0aW9uc1xuICB9O1xuXG4gIC8vIGNoZWNrIGlmIHByb2dyZXNzaXZlIGxvYWRpbmcgZGF0YXNldCBieSBiYXRjaGVzLCBhbmQgdXBkYXRlIHZpc1N0YXRlIGRpcmVjdGx5XG4gIGNvbnN0IGlzUHJvZ3Jlc3NpdmVMb2FkaW5nID1cbiAgICBBcnJheS5pc0FycmF5KGRhdGFzZXRzKSAmJlxuICAgIGRhdGFzZXRzWzBdPy5pbmZvLmZvcm1hdCA9PT0gJ2Fycm93JyAmJlxuICAgIGRhdGFzZXRzWzBdPy5pbmZvLmlkICYmXG4gICAgZGF0YXNldHNbMF0/LmluZm8uaWQgaW4gc3RhdGUudmlzU3RhdGUuZGF0YXNldHM7XG4gIGlmIChpc1Byb2dyZXNzaXZlTG9hZGluZykge1xuICAgIHJldHVybiBjb21wb3NlXzxLZXBsZXJHbFN0YXRlPihbXG4gICAgICBwaWNrXygndmlzU3RhdGUnKShcbiAgICAgICAgYXBwbHlfPFZpc1N0YXRlLCBhbnk+KHZpc1N0YXRlVXBkYXRlVmlzRGF0YVVwZGF0ZXIsIHtcbiAgICAgICAgICBkYXRhc2V0cyxcbiAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgIGNvbmZpZ1xuICAgICAgICB9KVxuICAgICAgKVxuICAgIF0pKHN0YXRlKTtcbiAgfVxuXG4gIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgbGV0IHBhcnNlZENvbmZpZzogUGFyc2VkQ29uZmlnID0gY29uZmlnO1xuXG4gIGlmIChpc1ZhbGlkQ29uZmlnKGNvbmZpZykpIHtcbiAgICAvLyBpZiBwYXNzZWQgaW4gc2F2ZWQgY29uZmlnXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgIHBhcnNlZENvbmZpZyA9IHN0YXRlLnZpc1N0YXRlLnNjaGVtYS5wYXJzZVNhdmVkQ29uZmlnKGNvbmZpZyk7XG4gIH1cbiAgY29uc3Qgb2xkTGF5ZXJzID0gc3RhdGUudmlzU3RhdGUubGF5ZXJzO1xuICBjb25zdCBmaWx0ZXJOZXdseUFkZGVkTGF5ZXJzID0gKGxheWVyczogTGF5ZXJbXSkgPT5cbiAgICBsYXllcnMuZmlsdGVyKG5sID0+ICFvbGRMYXllcnMuZmluZChvbCA9PiBvbCA9PT0gbmwpKTtcblxuICAvLyBSZXR1cm5zIHVuZGVmaW5lZCBpZiBub3QgZm91bmQsIHRvIG1ha2UgdHlwZXNjcmlwdCBoYXBweVxuICBjb25zdCBmaW5kTWFwQm91bmRzSWZDZW50ZXJlZCA9IChsYXllcnM6IExheWVyW10pID0+IHtcbiAgICBjb25zdCBib3VuZHMgPSBvcHRpb25zLmNlbnRlck1hcCAmJiBmaW5kTWFwQm91bmRzKGxheWVycyk7XG4gICAgcmV0dXJuIGJvdW5kcyA/IGJvdW5kcyA6IHVuZGVmaW5lZDtcbiAgfTtcblxuICByZXR1cm4gY29tcG9zZV88S2VwbGVyR2xTdGF0ZT4oW1xuICAgIHBpY2tfKCd2aXNTdGF0ZScpKFxuICAgICAgLy8gdGhpcyBwYXJ0IGNhbiBiZSBhc3luY1xuICAgICAgYXBwbHlfPFZpc1N0YXRlLCBhbnk+KHZpc1N0YXRlVXBkYXRlVmlzRGF0YVVwZGF0ZXIsIHtcbiAgICAgICAgZGF0YXNldHMsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIGNvbmZpZzogcGFyc2VkQ29uZmlnXG4gICAgICB9KVxuICAgICksXG5cbiAgICBpZl8oQm9vbGVhbihpbmZvKSwgcGlja18oJ3Zpc1N0YXRlJykoYXBwbHlfPFZpc1N0YXRlLCBhbnk+KHNldE1hcEluZm9VcGRhdGVyLCB7aW5mb30pKSksXG4gICAgLy8gTm90ZSB0aGF0IGZpdCBib3VuZHMgaGVyZSB3b24ndCBiZSBjYWxsZWQgaW4gY2FzZSBkYXRhc2V0cyBhcmUgY3JlYXRlZCBpbiBUYXNrcy5cbiAgICAvLyBBIHNlcGFyYXRlIFRhc2sgdG8gdXBkYXRlIGJvdW5kcyBpcyBjcmVhdGVkIG9uY2UgdGhlIGRhdGFzZXRzIGFyZSByZWFkeS5cbiAgICB3aXRoXygoe3Zpc1N0YXRlfSkgPT5cbiAgICAgIHBpY2tfKCdtYXBTdGF0ZScpKFxuICAgICAgICBhcHBseV8oXG4gICAgICAgICAgc3RhdGVNYXBDb25maWdVcGRhdGVyLFxuICAgICAgICAgIHBheWxvYWRfKHtcbiAgICAgICAgICAgIGNvbmZpZzogcGFyc2VkQ29uZmlnLFxuICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgIGJvdW5kczogZmluZE1hcEJvdW5kc0lmQ2VudGVyZWQoZmlsdGVyTmV3bHlBZGRlZExheWVycyh2aXNTdGF0ZS5sYXllcnMpKVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApLFxuICAgIHBpY2tfKCdtYXBTdHlsZScpKGFwcGx5XyhzdHlsZU1hcENvbmZpZ1VwZGF0ZXIsIHBheWxvYWRfKHtjb25maWc6IHBhcnNlZENvbmZpZywgb3B0aW9uc30pKSksXG4gICAgcGlja18oJ3VpU3RhdGUnKShcbiAgICAgIGFwcGx5Xyh1aVN0YXRlUmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIsIHBheWxvYWRfKHtjb25maWc6IHBhcnNlZENvbmZpZywgb3B0aW9uc30pKVxuICAgICksXG4gICAgcGlja18oJ3VpU3RhdGUnKShhcHBseV8odWlTdGF0ZUxvYWRGaWxlc1N1Y2Nlc3NVcGRhdGVyLCBwYXlsb2FkXyhudWxsKSkpLFxuXG4gICAgcGlja18oJ3VpU3RhdGUnKShhcHBseV8odG9nZ2xlTW9kYWxVcGRhdGVyLCBwYXlsb2FkXyhudWxsKSkpLFxuICAgIHBpY2tfKCd1aVN0YXRlJykoXG4gICAgICBtZXJnZV8oXG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLCAncmVhZE9ubHknKVxuICAgICAgICAgID8ge3JlYWRPbmx5OiBvcHRpb25zLnJlYWRPbmx5fVxuICAgICAgICAgIDoge31cbiAgICAgIClcbiAgICApXG4gIF0pKHN0YXRlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBsb2FkRmlsZXNTdWNjZXNzVXBkYXRlciA9IChcbiAgc3RhdGU6IEtlcGxlckdsU3RhdGUsXG4gIGFjdGlvbjogbG9hZEZpbGVzU3VjY2Vzc1VwZGF0ZXJBY3Rpb25cbik6IEtlcGxlckdsU3RhdGUgPT4ge1xuICBpZiAoaXNTdGFsZUZpbGVMb2FkRmluaXNoKHN0YXRlLnZpc1N0YXRlLmZpbGVMb2FkaW5nLCBhY3Rpb24ubG9hZElkKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICAvLyBzdGlsbCBtb3JlIHRvIGxvYWRcbiAgY29uc3QgcGF5bG9hZHMgPSBmaWxlc1RvRGF0YVBheWxvYWQoYWN0aW9uLnJlc3VsdCwgYWN0aW9uLm9wdGlvbnMpO1xuICBjb25zdCBuZXh0U3RhdGUgPSBjb21wb3NlXyhbXG4gICAgcGlja18oJ3Zpc1N0YXRlJykoXG4gICAgICBtZXJnZV8oe1xuICAgICAgICBmaWxlTG9hZGluZzogZmFsc2UsXG4gICAgICAgIGZpbGVMb2FkaW5nUHJvZ3Jlc3M6IHt9LFxuICAgICAgICBzdGFnZWRUb0FkZDogbnVsbFxuICAgICAgfSlcbiAgICApXG4gIF0pKHN0YXRlKTtcbiAgLy8gbWFrZSBtdWx0aXBsZSBhZGQgZGF0YSB0byBtYXAgY2FsbHNcbiAgY29uc3Qgc3RhdGVXaXRoRGF0YSA9IGNvbXBvc2VfKHBheWxvYWRzLm1hcChwID0+IGFwcGx5XyhhZGREYXRhVG9NYXBVcGRhdGVyLCBwYXlsb2FkXyhwKSkpKShcbiAgICBuZXh0U3RhdGVcbiAgKTtcbiAgcmV0dXJuIHN0YXRlV2l0aERhdGEgYXMgS2VwbGVyR2xTdGF0ZTtcbn07XG5cbmZ1bmN0aW9uIGtlcHRMb2FkRXJyb3JzKHByb2dyZXNzOiBSZWNvcmQ8c3RyaW5nLCB7ZXJyb3I/OiB1bmtub3dufT4gPSB7fSkge1xuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKHByb2dyZXNzKS5maWx0ZXIoKFssIHZhbHVlXSkgPT4gdmFsdWU/LmVycm9yKSk7XG59XG5cbi8qKiBBIGZpbmlzaCBmcm9tIHRoZSAyMDBtcyBwYXVzZSBpcyBzdGFsZSBvbmNlIHRoYXQgbG9hZCB3YXMgY2FuY2VsZWQgb3IgcmVwbGFjZWQuICovXG5mdW5jdGlvbiBpc1N0YWxlRmlsZUxvYWRGaW5pc2goZmlsZUxvYWRpbmc6IHtsb2FkSWQ/OiBudW1iZXJ9IHwgZmFsc2UsIGxvYWRJZD86IG51bWJlcik6IGJvb2xlYW4ge1xuICBpZiAobG9hZElkID09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuICFmaWxlTG9hZGluZyB8fCBmaWxlTG9hZGluZy5sb2FkSWQgIT09IGxvYWRJZDtcbn1cblxuLyoqXG4gKiBGaW5pc2ggYSBkZWZlcnJlZCBmaWxlIGxvYWQ6IGtlZXAgdGhlIHBhcnNlZCBjYWNoZSwgY2xlYXIgdGhlIGxvYWRpbmcgZmxhZyxcbiAqIGFuZCBsZWF2ZSB0aGUgQWRkIERhdGEgbW9kYWwgb3BlbiB1bnRpbCB0aGUgdXNlciBjb25maXJtcy5cbiAqIEBtZW1iZXJvZiBjb21iaW5lZFVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzdGFnZUxvYWRlZEZpbGVzVXBkYXRlciA9IChcbiAgc3RhdGU6IEtlcGxlckdsU3RhdGUsXG4gIGFjdGlvbjogU3RhZ2VMb2FkZWRGaWxlc1VwZGF0ZXJBY3Rpb25cbik6IEtlcGxlckdsU3RhdGUgPT4ge1xuICBpZiAoaXNTdGFsZUZpbGVMb2FkRmluaXNoKHN0YXRlLnZpc1N0YXRlLmZpbGVMb2FkaW5nLCBhY3Rpb24ubG9hZElkKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBtb2RhbE9wZW4gPSBzdGF0ZS51aVN0YXRlLmN1cnJlbnRNb2RhbCA9PT0gQUREX0RBVEFfSUQ7XG4gIGNvbnN0IHJlc3VsdCA9IGFjdGlvbi5yZXN1bHQgfHwgW107XG4gIGNvbnN0IHByZXZpb3VzID1cbiAgICBtb2RhbE9wZW4gJiYgQXJyYXkuaXNBcnJheShzdGF0ZS52aXNTdGF0ZS5zdGFnZWRUb0FkZCkgPyBzdGF0ZS52aXNTdGF0ZS5zdGFnZWRUb0FkZCA6IFtdO1xuICBjb25zdCBzdGFnZWRUb0FkZCA9IFsuLi5wcmV2aW91cywgLi4ucmVzdWx0XTtcblxuICByZXR1cm4gY29tcG9zZV88S2VwbGVyR2xTdGF0ZT4oW1xuICAgIHBpY2tfKCd2aXNTdGF0ZScpKFxuICAgICAgbWVyZ2VfKHtcbiAgICAgICAgZmlsZUxvYWRpbmc6IGZhbHNlLFxuICAgICAgICBmaWxlTG9hZGluZ1Byb2dyZXNzOiBtb2RhbE9wZW4gPyBrZXB0TG9hZEVycm9ycyhzdGF0ZS52aXNTdGF0ZS5maWxlTG9hZGluZ1Byb2dyZXNzKSA6IHt9LFxuICAgICAgICBzdGFnZWRUb0FkZDogbW9kYWxPcGVuICYmIHN0YWdlZFRvQWRkLmxlbmd0aCA/IHN0YWdlZFRvQWRkIDogbnVsbFxuICAgICAgfSlcbiAgICApLFxuICAgIHBpY2tfKCd1aVN0YXRlJykoYXBwbHlfKHVpU3RhdGVMb2FkRmlsZXNTdWNjZXNzVXBkYXRlciwgcGF5bG9hZF8obnVsbCkpKVxuICBdKShzdGF0ZSk7XG59O1xuXG5mdW5jdGlvbiBzdGFnZWRJdGVtS2V5KGl0ZW0pOiBzdHJpbmcge1xuICByZXR1cm4gaXRlbT8ubWV0YWRhdGE/LnNvdXJjZSB8fCBpdGVtPy5pbmZvPy5pZCB8fCAnJztcbn1cblxuLyoqXG4gKiBBZGQgZGF0YXNldHMgdG8gdGhlIEFkZCBEYXRhIGxpc3Qgd2l0aG91dCBpbnRlcnJ1cHRpbmcgYSBmaWxlIHRoYXQgaXMgc3RpbGwgcGFyc2luZy5cbiAqIEBtZW1iZXJvZiBjb21iaW5lZFVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhcHBlbmRTdGFnZWRMb2FkZWRGaWxlc1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBLZXBsZXJHbFN0YXRlLFxuICBhY3Rpb246IFN0YWdlTG9hZGVkRmlsZXNVcGRhdGVyQWN0aW9uXG4pOiBLZXBsZXJHbFN0YXRlID0+IHtcbiAgaWYgKHN0YXRlLnVpU3RhdGUuY3VycmVudE1vZGFsICE9PSBBRERfREFUQV9JRCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBwcmV2aW91cyA9IEFycmF5LmlzQXJyYXkoc3RhdGUudmlzU3RhdGUuc3RhZ2VkVG9BZGQpID8gc3RhdGUudmlzU3RhdGUuc3RhZ2VkVG9BZGQgOiBbXTtcbiAgY29uc3Qgc2VlbiA9IG5ldyBTZXQocHJldmlvdXMubWFwKHN0YWdlZEl0ZW1LZXkpLmZpbHRlcihCb29sZWFuKSk7XG4gIGNvbnN0IG5leHQgPSAoYWN0aW9uLnJlc3VsdCB8fCBbXSkuZmlsdGVyKGl0ZW0gPT4ge1xuICAgIGNvbnN0IGtleSA9IHN0YWdlZEl0ZW1LZXkoaXRlbSk7XG4gICAgaWYgKCFrZXkgfHwgc2Vlbi5oYXMoa2V5KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBzZWVuLmFkZChrZXkpO1xuICAgIHJldHVybiB0cnVlO1xuICB9KTtcbiAgaWYgKCFuZXh0Lmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4gY29tcG9zZV88S2VwbGVyR2xTdGF0ZT4oW1xuICAgIHBpY2tfKCd2aXNTdGF0ZScpKG1lcmdlXyh7c3RhZ2VkVG9BZGQ6IFsuLi5wcmV2aW91cywgLi4ubmV4dF19KSlcbiAgXSkoc3RhdGUpO1xufTtcblxuLyoqXG4gKiBUaGUgZmlyc3QgcGxhaW4gZGF0YXNldCBpbiBhIGNvbmZpcm1lZCB1cGxvYWQgcmVwbGFjZXMgdGhlIHNlbGVjdGVkIHRhYmxlLlxuICogQSBrZXBsZXIuZ2wgbWFwIGpzb24gaXMgYWRkZWQgYXMgYSBtYXAuIEZ1cnRoZXIgdGFibGVzIGFyZSBhZGRlZCBhZnRlciB0aGUgcmVwbGFjZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIHNwbGl0UmVwbGFjZW1lbnRVcGxvYWQocGF5bG9hZHM6IEFkZERhdGFUb01hcFBheWxvYWRbXSk6IHtcbiAgZGF0YXNldFRvVXNlOiBQcm90b0RhdGFzZXQgfCBudWxsO1xuICByZW1haW5kZXI6IEFkZERhdGFUb01hcFBheWxvYWRbXTtcbn0ge1xuICBjb25zdCBkYXRhc2V0czogUHJvdG9EYXRhc2V0W10gPSBbXTtcbiAgY29uc3QgbWFwczogQWRkRGF0YVRvTWFwUGF5bG9hZFtdID0gW107XG4gIHBheWxvYWRzLmZvckVhY2gocGF5bG9hZCA9PiB7XG4gICAgaWYgKHBheWxvYWQuY29uZmlnKSB7XG4gICAgICBtYXBzLnB1c2gocGF5bG9hZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGxpc3QgPSAoQXJyYXkuaXNBcnJheShwYXlsb2FkLmRhdGFzZXRzKSA/IHBheWxvYWQuZGF0YXNldHMgOiBbcGF5bG9hZC5kYXRhc2V0c10pLmZpbHRlcihcbiAgICAgIChkYXRhc2V0KTogZGF0YXNldCBpcyBQcm90b0RhdGFzZXQgPT4gQm9vbGVhbihkYXRhc2V0KVxuICAgICk7XG4gICAgZGF0YXNldHMucHVzaCguLi5saXN0KTtcbiAgfSk7XG4gIGNvbnN0IFtkYXRhc2V0VG9Vc2UsIC4uLm1vcmVdID0gZGF0YXNldHM7XG4gIHJldHVybiB7XG4gICAgZGF0YXNldFRvVXNlOiBkYXRhc2V0VG9Vc2UgPz8gbnVsbCxcbiAgICByZW1haW5kZXI6IFtcbiAgICAgIC4uLm1hcHMsXG4gICAgICAuLi4obW9yZS5sZW5ndGhcbiAgICAgICAgPyBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGRhdGFzZXRzOiBtb3JlLFxuICAgICAgICAgICAgICBvcHRpb25zOiB7a2VlcEV4aXN0aW5nQ29uZmlnOiB0cnVlLCBjZW50ZXJNYXA6IGZhbHNlLCBhdXRvQ3JlYXRlTGF5ZXJzOiBmYWxzZX1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIDogW10pXG4gICAgXVxuICB9O1xufVxuXG4vKipcbiAqIFR1cm4gYSBjb25maXJtZWQgQWRkIERhdGEgc2VsZWN0aW9uIGludG8gYSBkYXRhc2V0IHJlcGxhY2VtZW50LlxuICogTGF5ZXJzIGFuZCBmaWx0ZXJzIG1vdmUgb250byB0aGUgbmV3IHRhYmxlLiBUaGUgb3JpZ2luYWwgdGFibGUgaXMgZHJvcHBlZCB1bmxlc3MgYXNrZWQgdG8gc3RheS5cbiAqIEBtZW1iZXJvZiBjb21iaW5lZFVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBjb25maXJtUmVwbGFjZURhdGFzZXRVcGRhdGVyID0gKFxuICBzdGF0ZTogS2VwbGVyR2xTdGF0ZSxcbiAgYWN0aW9uOiBDb25maXJtUmVwbGFjZURhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBLZXBsZXJHbFN0YXRlID0+IHtcbiAgY29uc3QgcGF5bG9hZHMgPSBmaWxlc1RvRGF0YVBheWxvYWQoYWN0aW9uLnJlc3VsdCwge1xuICAgIGtlZXBFeGlzdGluZ0NvbmZpZzogdHJ1ZSxcbiAgICBjZW50ZXJNYXA6IHRydWUsXG4gICAgYXV0b0NyZWF0ZUxheWVyczogZmFsc2VcbiAgfSk7XG4gIGNvbnN0IGNsZWFyZWQgPSBjb21wb3NlXyhbXG4gICAgcGlja18oJ3Zpc1N0YXRlJykoXG4gICAgICBtZXJnZV8oe1xuICAgICAgICBmaWxlTG9hZGluZzogZmFsc2UsXG4gICAgICAgIGZpbGVMb2FkaW5nUHJvZ3Jlc3M6IHt9LFxuICAgICAgICBzdGFnZWRUb0FkZDogbnVsbFxuICAgICAgfSlcbiAgICApXG4gIF0pKHN0YXRlKTtcblxuICBjb25zdCB7ZGF0YXNldFRvVXNlLCByZW1haW5kZXJ9ID0gc3BsaXRSZXBsYWNlbWVudFVwbG9hZChwYXlsb2Fkcyk7XG4gIGlmIChkYXRhc2V0VG9Vc2U/LmluZm8/LmlkICYmIGFjdGlvbi5kYXRhc2V0VG9SZXBsYWNlSWQpIHtcbiAgICBjb25zdCByZXBsYWNlZCA9IHJlcGxhY2VEYXRhSW5NYXBVcGRhdGVyKGNsZWFyZWQsIHtcbiAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgZGF0YXNldFRvUmVwbGFjZUlkOiBhY3Rpb24uZGF0YXNldFRvUmVwbGFjZUlkLFxuICAgICAgICBkYXRhc2V0VG9Vc2UsXG4gICAgICAgIG9wdGlvbnM6IHtkZWxldGVPcmlnaW5hbERhdGFzZXQ6IGFjdGlvbi5kZWxldGVPcmlnaW5hbERhdGFzZXQgIT09IGZhbHNlfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChyZXBsYWNlZCAhPT0gY2xlYXJlZCkge1xuICAgICAgaWYgKCFyZW1haW5kZXIubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiByZXBsYWNlZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb21wb3NlXyhyZW1haW5kZXIubWFwKHAgPT4gYXBwbHlfKGFkZERhdGFUb01hcFVwZGF0ZXIsIHBheWxvYWRfKHApKSkpKFxuICAgICAgICByZXBsYWNlZFxuICAgICAgKSBhcyBLZXBsZXJHbFN0YXRlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb21wb3NlXyhwYXlsb2Fkcy5tYXAocCA9PiBhcHBseV8oYWRkRGF0YVRvTWFwVXBkYXRlciwgcGF5bG9hZF8ocCkpKSkoXG4gICAgY2xlYXJlZFxuICApIGFzIEtlcGxlckdsU3RhdGU7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkRGF0YVRvTWFwQ29tcG9zZWQgPSBhZGREYXRhVG9NYXBVcGRhdGVyO1xuXG4vKipcbiAqIEhlbHBlciB3aGljaCB1cGRhdGVzIG1hcCBvdmVybGF5IGJsZW5kaW5nIG1vZGUgaW4gdmlzU3RhdGUsXG4gKiBidXQgb25seSBpZiBpdCdzIG5vdCBjdXJyZW50bHkgaW4gdGhlIGBub3JtYWxgIG1vZGUuXG4gKi9cbmNvbnN0IHVwZGF0ZU92ZXJsYXlCbGVuZGluZyA9IG92ZXJsYXlCbGVuZGluZyA9PiB2aXNTdGF0ZSA9PiB7XG4gIGlmICh2aXNTdGF0ZS5vdmVybGF5QmxlbmRpbmcgIT09IE9WRVJMQVlfQkxFTkRJTkdTLm5vcm1hbC52YWx1ZSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi52aXNTdGF0ZSxcbiAgICAgIG92ZXJsYXlCbGVuZGluZ1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIHZpc1N0YXRlO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgd2hpY2ggdXBkYXRlcyBgZGFya0Jhc2VNYXBFbmFibGVkYCBpbiBhbGwgdGhlIGxheWVycyBpbiB2aXNTdGF0ZSB3aGljaFxuICogaGF2ZSB0aGlzIGNvbmZpZyBzZXR0aW5nIChvciBpbiBvbmUgc3BlY2lmaWMgbGF5ZXIgaWYgdGhlIGBsYXllcklkYCBwYXJhbSBpcyBwcm92aWRlZCkuXG4gKi9cbmNvbnN0IHVwZGF0ZURhcmtCYXNlTWFwTGF5ZXJzID1cbiAgKGRhcmtCYXNlTWFwRW5hYmxlZDogYm9vbGVhbiwgbGF5ZXJJZDogc3RyaW5nIHwgbnVsbCA9IG51bGwpID0+XG4gIHZpc1N0YXRlID0+ICh7XG4gICAgLi4udmlzU3RhdGUsXG4gICAgbGF5ZXJzOiB2aXNTdGF0ZS5sYXllcnMubWFwKGxheWVyID0+IHtcbiAgICAgIGlmICghbGF5ZXJJZCB8fCBsYXllci5pZCA9PT0gbGF5ZXJJZCkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLCAnZGFya0Jhc2VNYXBFbmFibGVkJykpIHtcbiAgICAgICAgICBjb25zdCB7dmlzQ29uZmlnfSA9IGxheWVyLmNvbmZpZztcbiAgICAgICAgICByZXR1cm4gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICAgICAgdmlzQ29uZmlnOiB7Li4udmlzQ29uZmlnLCBkYXJrQmFzZU1hcEVuYWJsZWR9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBsYXllcjtcbiAgICB9KVxuICB9KTtcblxuLyoqXG4gKiBVcGRhdGVyIHRoYXQgY2hhbmdlcyB0aGUgbWFwIHN0eWxlIGJ5IGNhbGxpbmcgbWFwU3R5bGVDaGFuZ2VVcGRhdGVyIG9uIHZpc1N0YXRlLlxuICogSW4gYWRkaXRpb24gdG8gdGhhdCwgaXQgZG9lcyB0aGUgZm9sbG93aW5nOlxuICpcbiAqICAgMS4gVXBkYXRlIG1hcCBvdmVybGF5IGJsZW5kaW5nIG1vZGUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBjb2xvck1vZGUgb2YgdGhlXG4gKiAgICAgIGJhc2UgbWFwLCBidXQgb25seSBpZiBpdCdzIG5vdCBpbiB0aGUgYG5vcm1hbGAgbW9kZS5cbiAqXG4gKiAgIDIuIFVwZGF0ZSBhbGwgdGhlIGxheWVycyB3aGljaCBoYXZlIHRoZSBgZGFya0Jhc2VNYXBFbmFibGVkYCBjb25maWcgc2V0dGluZ1xuICogICAgICBhZGp1c3RpbmcgaXQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBjb2xvck1vZGUgb2YgdGhlIGJhc2UgbWFwLlxuICpcbiAqL1xuZXhwb3J0IGNvbnN0IGNvbWJpbmVkTWFwU3R5bGVDaGFuZ2VVcGRhdGVyID0gKFxuICBzdGF0ZTogS2VwbGVyR2xTdGF0ZSxcbiAgYWN0aW9uOiBNYXBTdHlsZUNoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IEtlcGxlckdsU3RhdGUgPT4ge1xuICBjb25zdCB7cGF5bG9hZH0gPSBhY3Rpb247XG4gIGNvbnN0IHttYXBTdHlsZX0gPSBzdGF0ZTtcbiAgY29uc3QgZ2V0Q29sb3JNb2RlID0ga2V5ID0+IG1hcFN0eWxlLm1hcFN0eWxlc1trZXldPy5jb2xvck1vZGU7XG4gIGNvbnN0IHByZXZDb2xvck1vZGUgPSBnZXRDb2xvck1vZGUobWFwU3R5bGUuc3R5bGVUeXBlKTtcbiAgY29uc3QgbmV4dENvbG9yTW9kZSA9IGdldENvbG9yTW9kZShwYXlsb2FkLnN0eWxlVHlwZSk7XG4gIGxldCB7dmlzU3RhdGUsIG1hcFN0YXRlfSA9IHN0YXRlO1xuICBpZiAobmV4dENvbG9yTW9kZSAhPT0gcHJldkNvbG9yTW9kZSkge1xuICAgIHN3aXRjaCAobmV4dENvbG9yTW9kZSkge1xuICAgICAgY2FzZSBCQVNFX01BUF9DT0xPUl9NT0RFUy5EQVJLOlxuICAgICAgICB2aXNTdGF0ZSA9IGNvbXBvc2VfKFtcbiAgICAgICAgICB1cGRhdGVPdmVybGF5QmxlbmRpbmcoT1ZFUkxBWV9CTEVORElOR1Muc2NyZWVuLnZhbHVlKSxcbiAgICAgICAgICB1cGRhdGVEYXJrQmFzZU1hcExheWVycyh0cnVlKVxuICAgICAgICBdKSh2aXNTdGF0ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBCQVNFX01BUF9DT0xPUl9NT0RFUy5MSUdIVDpcbiAgICAgICAgdmlzU3RhdGUgPSBjb21wb3NlXyhbXG4gICAgICAgICAgdXBkYXRlT3ZlcmxheUJsZW5kaW5nKE9WRVJMQVlfQkxFTkRJTkdTLmRhcmtlbi52YWx1ZSksXG4gICAgICAgICAgdXBkYXRlRGFya0Jhc2VNYXBMYXllcnMoZmFsc2UpXG4gICAgICAgIF0pKHZpc1N0YXRlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgLy8gZG8gbm90aGluZ1xuICAgIH1cbiAgfVxuXG4gIC8vIFVwZGF0ZSBnbG9iZSBjb25maWcgY29sb3JzIHdoZW4gc3R5bGUgY2hhbmdlcyBhbmQgZ2xvYmUgaXMgZW5hYmxlZFxuICBpZiAobWFwU3RhdGUuZ2xvYmU/LmVuYWJsZWQpIHtcbiAgICAvLyBTd2l0Y2hpbmcgZnJvbSBcIk5vIEJhc2VtYXBcIiB0byBhIGJhc2VtYXAgLSByZXN0b3JlIGJhc2VtYXAgc3ViLXRvZ2dsZXNcbiAgICBpZiAocGF5bG9hZC5zdHlsZVR5cGUgIT09IE5PX01BUF9JRCAmJiBtYXBTdHlsZS5zdHlsZVR5cGUgPT09IE5PX01BUF9JRCkge1xuICAgICAgbWFwU3RhdGUgPSB7XG4gICAgICAgIC4uLm1hcFN0YXRlLFxuICAgICAgICBnbG9iZToge1xuICAgICAgICAgIC4uLm1hcFN0YXRlLmdsb2JlLFxuICAgICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgICAgLi4ubWFwU3RhdGUuZ2xvYmUuY29uZmlnLFxuICAgICAgICAgICAgYmFzZW1hcDogdHJ1ZSxcbiAgICAgICAgICAgIGxhYmVsczogdHJ1ZSxcbiAgICAgICAgICAgIGFkbWluTGluZXM6IHRydWUsXG4gICAgICAgICAgICB3YXRlcjogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gICAgbWFwU3RhdGUgPSBzeW5jR2xvYmVDb25maWdDb2xvcnNUb1N0eWxlKG1hcFN0YXRlLCBtYXBTdHlsZSwgcGF5bG9hZC5zdHlsZVR5cGUpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICB2aXNTdGF0ZSxcbiAgICBtYXBTdGF0ZSxcbiAgICBtYXBTdHlsZTogbWFwU3R5bGVDaGFuZ2VVcGRhdGVyKG1hcFN0eWxlLCB7cGF5bG9hZDogey4uLnBheWxvYWR9fSlcbiAgfTtcbn07XG5cbi8qKlxuICogRGVyaXZlIGdsb2JlIGJhc2VtYXAgY29sb3JzIChzdXJmYWNlIC8gd2F0ZXIgLyBhZG1pbiBsaW5lcykgZnJvbSBhIG1hcCBzdHlsZSBhbmRcbiAqIHJldHVybiBhbiB1cGRhdGVkIG1hcFN0YXRlIHdpdGggdGhvc2UgY29sb3JzIHdyaXR0ZW4gaW50byBgZ2xvYmUuY29uZmlnYC4gVXNlZCBib3RoXG4gKiB3aGVuIHRoZSBiYXNlIG1hcCBzdHlsZSBjaGFuZ2VzIGFuZCB3aGVuIGVudGVyaW5nIGdsb2JlIG1vZGUsIHNvIHRoZSBnbG9iZSBhbHdheXNcbiAqIHJlZmxlY3RzIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgYmFzZW1hcCBpbnN0ZWFkIG9mIHRoZSBzdGF0aWMgREVGQVVMVF9HTE9CRV9DT05GSUcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzeW5jR2xvYmVDb25maWdDb2xvcnNUb1N0eWxlKFxuICBtYXBTdGF0ZTogTWFwU3RhdGUsXG4gIG1hcFN0eWxlOiBNYXBTdHlsZSxcbiAgc3R5bGVUeXBlOiBzdHJpbmdcbik6IE1hcFN0YXRlIHtcbiAgaWYgKCFtYXBTdGF0ZS5nbG9iZT8uZW5hYmxlZCkge1xuICAgIHJldHVybiBtYXBTdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5leHRTdHlsZU9iaiA9IG1hcFN0eWxlLm1hcFN0eWxlc1tzdHlsZVR5cGVdO1xuICBjb25zdCBuZXh0R2xvYmVDb25maWcgPSB7Li4ubWFwU3RhdGUuZ2xvYmUuY29uZmlnfTtcblxuICBpZiAoc3R5bGVUeXBlID09PSBOT19NQVBfSUQpIHtcbiAgICBuZXh0R2xvYmVDb25maWcuYmFzZW1hcCA9IGZhbHNlO1xuICAgIG5leHRHbG9iZUNvbmZpZy5sYWJlbHMgPSBmYWxzZTtcbiAgICBuZXh0R2xvYmVDb25maWcuYWRtaW5MaW5lcyA9IGZhbHNlO1xuICAgIG5leHRHbG9iZUNvbmZpZy53YXRlciA9IGZhbHNlO1xuICAgIG5leHRHbG9iZUNvbmZpZy5zdXJmYWNlQ29sb3IgPSBERUZBVUxUX0JBU0VNQVBfQ09MT1IuYmFja2dyb3VuZEZpbGxDb2xvcjtcbiAgICBuZXh0R2xvYmVDb25maWcud2F0ZXJDb2xvciA9IERFRkFVTFRfQkFTRU1BUF9DT0xPUi5iYXNlbWFwV2F0ZXJGaWxsQ29sb3I7XG4gICAgbmV4dEdsb2JlQ29uZmlnLmFkbWluTGluZXNDb2xvciA9IERFRkFVTFRfQkFTRU1BUF9DT0xPUi5iYXNlbWFwQWRtaW5MaW5lQ29sb3I7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgYmFzZW1hcENvbG9ycyA9IG5leHRTdHlsZU9ialxuICAgICAgPyBnZXRCYXNlbWFwQ29sb3JzRm9yU3R5bGUoc3R5bGVUeXBlLCB7XG4gICAgICAgICAgc3R5bGU6IG5leHRTdHlsZU9iai5zdHlsZSxcbiAgICAgICAgICBsYXllckdyb3VwczogbmV4dFN0eWxlT2JqLmxheWVyR3JvdXBzXG4gICAgICAgIH0pXG4gICAgICA6IC8vIFN0eWxlIG9iamVjdCBub3QgeWV0IGxvYWRlZCAtIHVzZSBrbm93biBwcmVzZXRzIGJ5IHN0eWxlIHR5cGVcbiAgICAgICAgZ2V0QmFzZW1hcENvbG9yc0ZvclN0eWxlKHN0eWxlVHlwZSk7XG4gICAgbmV4dEdsb2JlQ29uZmlnLnN1cmZhY2VDb2xvciA9IGJhc2VtYXBDb2xvcnMuYmFja2dyb3VuZEZpbGxDb2xvcjtcbiAgICBuZXh0R2xvYmVDb25maWcud2F0ZXJDb2xvciA9IGJhc2VtYXBDb2xvcnMuYmFzZW1hcFdhdGVyRmlsbENvbG9yO1xuICAgIG5leHRHbG9iZUNvbmZpZy5hZG1pbkxpbmVzQ29sb3IgPSBiYXNlbWFwQ29sb3JzLmJhc2VtYXBBZG1pbkxpbmVDb2xvcjtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4ubWFwU3RhdGUsXG4gICAgZ2xvYmU6IHtcbiAgICAgIC4uLm1hcFN0YXRlLmdsb2JlLFxuICAgICAgY29uZmlnOiBuZXh0R2xvYmVDb25maWdcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogVXBkYXRlciB0aGF0IHN3aXRjaGVzIHRoZSBtYXAgdmlldyBtb2RlICgyRCAvIDNEIC8gR2xvYmUpLiBSdW5zIHRoZSBiYXNlIG1hcC1zdGF0ZVxuICogdXBkYXRlciBhbmQsIHdoZW4gZW50ZXJpbmcgZ2xvYmUgbW9kZSwgc3luY3MgdGhlIGdsb2JlIGJhc2VtYXAgY29sb3JzIHRvIHRoZVxuICogY3VycmVudGx5IHNlbGVjdGVkIG1hcCBzdHlsZSBzbyB0aGUgZ2xvYmUgZG9lc24ndCBzaG93IHN0YWxlIGRlZmF1bHQgY29sb3JzLlxuICovXG5leHBvcnQgY29uc3QgY29tYmluZWRTZXRNYXBWaWV3TW9kZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBLZXBsZXJHbFN0YXRlLFxuICBhY3Rpb246IE1hcFN0YXRlQWN0aW9ucy5TZXRNYXBWaWV3TW9kZVVwZGF0ZXJBY3Rpb25cbik6IEtlcGxlckdsU3RhdGUgPT4ge1xuICBsZXQgbWFwU3RhdGUgPSBzZXRNYXBWaWV3TW9kZVVwZGF0ZXIoc3RhdGUubWFwU3RhdGUsIGFjdGlvbik7XG5cbiAgaWYgKG1hcFN0YXRlLmdsb2JlPy5lbmFibGVkKSB7XG4gICAgbWFwU3RhdGUgPSBzeW5jR2xvYmVDb25maWdDb2xvcnNUb1N0eWxlKG1hcFN0YXRlLCBzdGF0ZS5tYXBTdHlsZSwgc3RhdGUubWFwU3R5bGUuc3R5bGVUeXBlKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbWFwU3RhdGVcbiAgfTtcbn07XG5cbi8qKlxuICogVXBkYXRlciB0aGF0IGNoYW5nZXMgdGhlIGxheWVyIHR5cGUgYnkgY2FsbGluZyBgbGF5ZXJUeXBlQ2hhbmdlVXBkYXRlcmAgb24gdmlzU3RhdGUuXG4gKiBJbiBhZGRpdGlvbiB0byB0aGF0LCBpZiB0aGUgbmV3IGxheWVyIHR5cGUgaGFzIHRoZSBgZGFya0Jhc2VNYXBFbmFibGVkYCBjb25maWdcbiAqIHNldHRpbmcsIHdlIGFkanVzdCBpdCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIGNvbG9yTW9kZSBvZiB0aGUgYmFzZSBtYXAuc1xuICovXG5leHBvcnQgY29uc3QgY29tYmluZWRMYXllclR5cGVDaGFuZ2VVcGRhdGVyID0gKFxuICBzdGF0ZTogS2VwbGVyR2xTdGF0ZSxcbiAgYWN0aW9uOiBMYXllclR5cGVDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBLZXBsZXJHbFN0YXRlID0+IHtcbiAgbGV0IHt2aXNTdGF0ZX0gPSBzdGF0ZTtcbiAgY29uc3Qgb2xkTGF5ZXJJbmRleCA9IHZpc1N0YXRlLmxheWVycy5maW5kSW5kZXgobGF5ZXIgPT4gbGF5ZXIgPT09IGFjdGlvbi5vbGRMYXllcik7XG4gIHZpc1N0YXRlID0gbGF5ZXJUeXBlQ2hhbmdlVXBkYXRlcih2aXNTdGF0ZSwgYWN0aW9uKTtcbiAgY29uc3QgbmV3TGF5ZXIgPSB2aXNTdGF0ZS5sYXllcnNbb2xkTGF5ZXJJbmRleF07XG4gIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobmV3TGF5ZXI/LnZpc0NvbmZpZ1NldHRpbmdzLCAnZGFya0Jhc2VNYXBFbmFibGVkJykpIHtcbiAgICBjb25zdCB7bWFwU3R5bGV9ID0gc3RhdGU7XG4gICAgY29uc3Qge2NvbG9yTW9kZX0gPSBtYXBTdHlsZS5tYXBTdHlsZXNbbWFwU3R5bGUuc3R5bGVUeXBlXTtcbiAgICBjb25zdCB7ZGFya0Jhc2VNYXBFbmFibGVkfSA9IG5ld0xheWVyLmNvbmZpZy52aXNDb25maWc7XG4gICAgc3dpdGNoIChjb2xvck1vZGUpIHtcbiAgICAgIGNhc2UgQkFTRV9NQVBfQ09MT1JfTU9ERVMuREFSSzpcbiAgICAgICAgaWYgKCFkYXJrQmFzZU1hcEVuYWJsZWQpIHtcbiAgICAgICAgICB2aXNTdGF0ZSA9IHVwZGF0ZURhcmtCYXNlTWFwTGF5ZXJzKHRydWUsIG5ld0xheWVyLmlkKSh2aXNTdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEJBU0VfTUFQX0NPTE9SX01PREVTLkxJR0hUOlxuICAgICAgICBpZiAoZGFya0Jhc2VNYXBFbmFibGVkKSB7XG4gICAgICAgICAgdmlzU3RhdGUgPSB1cGRhdGVEYXJrQmFzZU1hcExheWVycyhmYWxzZSwgbmV3TGF5ZXIuaWQpKHZpc1N0YXRlKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAvLyBkbyBub3RoaW5nXG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgdmlzU3RhdGVcbiAgfTtcbn07XG5cbi8qKlxuICogTWFrZSBtYXBMZWdlbmQgYWN0aXZlIHdoZW4gdG9nZ2xlU3BsaXRNYXAgYWN0aW9uIGlzIGNhbGxlZFxuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlU3BsaXRNYXBVcGRhdGVyID0gKFxuICBzdGF0ZTogS2VwbGVyR2xTdGF0ZSxcbiAgYWN0aW9uOiBUb2dnbGVTcGxpdE1hcFVwZGF0ZXJBY3Rpb25cbik6IEtlcGxlckdsU3RhdGUgPT4ge1xuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICB2aXNTdGF0ZTogdmlzU3RhdGVUb2dnbGVTcGxpdE1hcFVwZGF0ZXIoc3RhdGUudmlzU3RhdGUsIGFjdGlvbiksXG4gICAgdWlTdGF0ZTogdWlTdGF0ZVRvZ2dsZVNwbGl0TWFwVXBkYXRlcihzdGF0ZS51aVN0YXRlKSxcbiAgICBtYXBTdGF0ZTogbWFwU3RhdGVUb2dnbGVTcGxpdE1hcFVwZGF0ZXIoc3RhdGUubWFwU3RhdGUpXG4gIH07XG5cbiAgY29uc3QgaXNTcGxpdCA9IG5ld1N0YXRlLnZpc1N0YXRlLnNwbGl0TWFwcy5sZW5ndGggIT09IDA7XG4gIGNvbnN0IGlzTGVnZW5kQWN0aXZlID0gbmV3U3RhdGUudWlTdGF0ZS5tYXBDb250cm9scz8ubWFwTGVnZW5kPy5hY3RpdmU7XG4gIGlmIChpc1NwbGl0ICYmICFpc0xlZ2VuZEFjdGl2ZSkge1xuICAgIG5ld1N0YXRlLnVpU3RhdGUgPSB0b2dnbGVNYXBDb250cm9sVXBkYXRlcihuZXdTdGF0ZS51aVN0YXRlLCB7XG4gICAgICBwYXlsb2FkOiB7cGFuZWxJZDogJ21hcExlZ2VuZCcsIGluZGV4OiBhY3Rpb24ucGF5bG9hZH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn07XG5cbi8qKlxuICogU2V0IG1hcCBzcGxpdCBtb2RlIHVwZGF0ZXIgLSBjb29yZGluYXRlcyBzdGF0ZSBjaGFuZ2VzIGFjcm9zcyB2aXNTdGF0ZSwgbWFwU3RhdGUsIGFuZCB1aVN0YXRlXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRNYXBTcGxpdE1vZGVVcGRhdGVyID0gKFxuICBzdGF0ZTogS2VwbGVyR2xTdGF0ZSxcbiAgYWN0aW9uOiBNYXBTdGF0ZUFjdGlvbnMuU2V0TWFwU3BsaXRNb2RlVXBkYXRlckFjdGlvblxuKTogS2VwbGVyR2xTdGF0ZSA9PiB7XG4gIGNvbnN0IHttYXBTcGxpdE1vZGV9ID0gYWN0aW9uLnBheWxvYWQ7XG4gIGNvbnN0IHByZXZNb2RlID0gc3RhdGUubWFwU3RhdGUubWFwU3BsaXRNb2RlO1xuXG4gIGlmIChtYXBTcGxpdE1vZGUgPT09IHByZXZNb2RlKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3TWFwU3RhdGUgPSBtYXBTdGF0ZVNldE1hcFNwbGl0TW9kZVVwZGF0ZXIoc3RhdGUubWFwU3RhdGUsIGFjdGlvbik7XG5cbiAgbGV0IG5ld1Zpc1N0YXRlID0gey4uLnN0YXRlLnZpc1N0YXRlfTtcblxuICBzd2l0Y2ggKG1hcFNwbGl0TW9kZSkge1xuICAgIGNhc2UgTWFwU3BsaXRNb2RlLlNJTkdMRV9NQVA6XG4gICAgICBuZXdWaXNTdGF0ZSA9IHtcbiAgICAgICAgLi4ubmV3VmlzU3RhdGUsXG4gICAgICAgIHNwbGl0TWFwczogW11cbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlIE1hcFNwbGl0TW9kZS5EVUFMX01BUDpcbiAgICBjYXNlIE1hcFNwbGl0TW9kZS5TV0lQRV9DT01QQVJFOlxuICAgICAgaWYgKHByZXZNb2RlID09PSBNYXBTcGxpdE1vZGUuU0lOR0xFX01BUCkge1xuICAgICAgICBuZXdWaXNTdGF0ZSA9IHtcbiAgICAgICAgICAuLi5uZXdWaXNTdGF0ZSxcbiAgICAgICAgICBzcGxpdE1hcHM6IGNvbXB1dGVTcGxpdE1hcExheWVycyhuZXdWaXNTdGF0ZS5sYXllcnMsIHtcbiAgICAgICAgICAgIGR1cGxpY2F0ZTogbWFwU3BsaXRNb2RlID09PSBNYXBTcGxpdE1vZGUuU1dJUEVfQ09NUEFSRVxuICAgICAgICAgIH0pXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgYnJlYWs7XG4gIH1cblxuICBsZXQgbmV3VWlTdGF0ZSA9IHVpU3RhdGVUb2dnbGVTcGxpdE1hcFVwZGF0ZXIoc3RhdGUudWlTdGF0ZSk7XG5cbiAgY29uc3QgaXNTcGxpdCA9IG5ld1Zpc1N0YXRlLnNwbGl0TWFwcy5sZW5ndGggIT09IDA7XG4gIGNvbnN0IGlzTGVnZW5kQWN0aXZlID0gbmV3VWlTdGF0ZS5tYXBDb250cm9scz8ubWFwTGVnZW5kPy5hY3RpdmU7XG4gIGlmIChpc1NwbGl0ICYmICFpc0xlZ2VuZEFjdGl2ZSkge1xuICAgIG5ld1VpU3RhdGUgPSB0b2dnbGVNYXBDb250cm9sVXBkYXRlcihuZXdVaVN0YXRlLCB7XG4gICAgICBwYXlsb2FkOiB7cGFuZWxJZDogJ21hcExlZ2VuZCcsIGluZGV4OiAwfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBtYXBTdGF0ZTogbmV3TWFwU3RhdGUsXG4gICAgdmlzU3RhdGU6IG5ld1Zpc1N0YXRlLFxuICAgIHVpU3RhdGU6IG5ld1VpU3RhdGVcbiAgfTtcbn07XG5cbmNvbnN0IGRlZmF1bHRSZXBsYWNlRGF0YVRvTWFwT3B0aW9ucyA9IHtcbiAga2VlcEV4aXN0aW5nQ29uZmlnOiB0cnVlLFxuICBjZW50ZXJNYXA6IHRydWUsXG4gIGF1dG9DcmVhdGVMYXllcnM6IGZhbHNlXG59O1xuXG4vKipcbiAqIFVwZGF0ZXIgcmVwbGFjZSBhIGRhdGFzZXQgaW4gc3RhdGVcbiAqL1xuZXhwb3J0IGNvbnN0IHJlcGxhY2VEYXRhSW5NYXBVcGRhdGVyID0gKFxuICBzdGF0ZTogS2VwbGVyR2xTdGF0ZSxcbiAge3BheWxvYWR9OiB7cGF5bG9hZDogUmVwbGFjZURhdGFJbk1hcFBheWxvYWR9XG4pOiBLZXBsZXJHbFN0YXRlID0+IHtcbiAgY29uc3Qge2RhdGFzZXRUb1JlcGxhY2VJZCwgZGF0YXNldFRvVXNlLCBvcHRpb25zID0ge319ID0gcGF5bG9hZDtcbiAgY29uc3Qge2RlbGV0ZU9yaWdpbmFsRGF0YXNldCA9IHRydWUsIC4uLnJlcGxhY2VPcHRpb25zfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGFkZERhdGFUb01hcE9wdGlvbnMgPSB7Li4uZGVmYXVsdFJlcGxhY2VEYXRhVG9NYXBPcHRpb25zLCAuLi5yZXBsYWNlT3B0aW9uc307XG5cbiAgLy8gY2hlY2sgaWYgZGF0YXNldCBpcyB0aGVyZVxuICBpZiAoIXN0YXRlLnZpc1N0YXRlLmRhdGFzZXRzW2RhdGFzZXRUb1JlcGxhY2VJZF0pIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgLy8gZGF0YXNldFRvVXNlIGlzIFByb3RvRGF0YXNldFxuICBjb25zdCBkYXRhSWRUb1VzZSA9IGRhdGFzZXRUb1VzZS5pbmZvLmlkO1xuICBpZiAoIWRhdGFJZFRvVXNlKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIC8vIHJlbW92ZSBkYXRhc2V0IGFuZCBwdXQgZGVwZW5kZW5jaWVzIGluIHRvQmVNZXJnZWRcbiAgY29uc3QgcHJlcGFyZWRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICB2aXNTdGF0ZTogcHJlcGFyZVN0YXRlRm9yRGF0YXNldFJlcGxhY2Uoc3RhdGUudmlzU3RhdGUsIGRhdGFzZXRUb1JlcGxhY2VJZCwgZGF0YUlkVG9Vc2UsIHtcbiAgICAgIGRlbGV0ZU9yaWdpbmFsRGF0YXNldFxuICAgIH0pXG4gIH07XG5cbiAgY29uc3QgbmV4dFN0YXRlID0gYWRkRGF0YVRvTWFwVXBkYXRlcihcbiAgICBwcmVwYXJlZFN0YXRlLFxuICAgIHBheWxvYWRfKHtcbiAgICAgIGRhdGFzZXRzOiBkYXRhc2V0VG9Vc2UsXG4gICAgICAvLyBzaG91bGQgem9vbSB0byBuZXcgZGF0YXNldFxuICAgICAgb3B0aW9uczogYWRkRGF0YVRvTWFwT3B0aW9uc1xuICAgIH0pXG4gICk7XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQUNBOztBQUVBLFNBQ0VBLGtCQUFrQixFQUNsQkMsdUJBQXVCLElBQUlDLDhCQUE4QixFQUN6REMsdUJBQXVCLEVBQ3ZCQyxxQkFBcUIsSUFBSUMsNEJBQTRCLEVBQ3JEQyx1QkFBdUIsSUFBSUMsOEJBQThCLFFBQ3BELHFCQUFxQjtBQUM1QixTQUNFQyxvQkFBb0IsSUFBSUMsNEJBQTRCLEVBQ3BEQyxpQkFBaUIsRUFDakJDLHNCQUFzQixFQUN0QlAscUJBQXFCLElBQUlRLDZCQUE2QixFQUN0REMsNkJBQTZCLFFBQ3hCLHNCQUFzQjtBQUM3QixTQUNFUCx1QkFBdUIsSUFBSVEscUJBQXFCLEVBQ2hEVixxQkFBcUIsSUFBSVcsNkJBQTZCLEVBQ3REQyxzQkFBc0IsSUFBSUMsOEJBQThCLEVBQ3hEQyxxQkFBcUIsUUFDaEIsc0JBQXNCO0FBQzdCLFNBQ0VDLHFCQUFxQixFQUNyQmIsdUJBQXVCLElBQUljLHFCQUFxQixRQUMzQyxzQkFBc0I7QUFDN0IsU0FBUUMsa0JBQWtCLFFBQU8sdUJBQXVCO0FBQ3hELFNBQVFDLFFBQVEsRUFBRUMsTUFB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
|
|
661
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ0b2dnbGVNb2RhbFVwZGF0ZXIiLCJsb2FkRmlsZXNTdWNjZXNzVXBkYXRlciIsInVpU3RhdGVMb2FkRmlsZXNTdWNjZXNzVXBkYXRlciIsInRvZ2dsZU1hcENvbnRyb2xVcGRhdGVyIiwidG9nZ2xlU3BsaXRNYXBVcGRhdGVyIiwidWlTdGF0ZVRvZ2dsZVNwbGl0TWFwVXBkYXRlciIsInJlY2VpdmVNYXBDb25maWdVcGRhdGVyIiwidWlTdGF0ZVJlY2VpdmVNYXBDb25maWdVcGRhdGVyIiwidXBkYXRlVmlzRGF0YVVwZGF0ZXIiLCJ2aXNTdGF0ZVVwZGF0ZVZpc0RhdGFVcGRhdGVyIiwic2V0TWFwSW5mb1VwZGF0ZXIiLCJsYXllclR5cGVDaGFuZ2VVcGRhdGVyIiwidmlzU3RhdGVUb2dnbGVTcGxpdE1hcFVwZGF0ZXIiLCJwcmVwYXJlU3RhdGVGb3JEYXRhc2V0UmVwbGFjZSIsInN0YXRlTWFwQ29uZmlnVXBkYXRlciIsIm1hcFN0YXRlVG9nZ2xlU3BsaXRNYXBVcGRhdGVyIiwic2V0TWFwU3BsaXRNb2RlVXBkYXRlciIsIm1hcFN0YXRlU2V0TWFwU3BsaXRNb2RlVXBkYXRlciIsInNldE1hcFZpZXdNb2RlVXBkYXRlciIsIm1hcFN0eWxlQ2hhbmdlVXBkYXRlciIsInN0eWxlTWFwQ29uZmlnVXBkYXRlciIsImZpbGVDYWNoZVRvUHJvZ3Jlc3NpdmVTdGVwcyIsImZpbGVzVG9EYXRhUGF5bG9hZCIsInBheWxvYWRfIiwiYXBwbHlfIiwid2l0aF8iLCJpZl8iLCJjb21wb3NlXyIsIm1lcmdlXyIsInBpY2tfIiwibG9hZEZpbGVzU3VjY2VzcyIsImlzUGxhaW5PYmplY3QiLCJjb21wdXRlU3BsaXRNYXBMYXllcnMiLCJmaW5kTWFwQm91bmRzIiwiQkFTRV9NQVBfQ09MT1JfTU9ERVMiLCJPVkVSTEFZX0JMRU5ESU5HUyIsIk5PX01BUF9JRCIsIk1hcFNwbGl0TW9kZSIsIkFERF9EQVRBX0lEIiwiZ2V0QmFzZW1hcENvbG9yc0ZvclN0eWxlIiwiREVGQVVMVF9CQVNFTUFQX0NPTE9SIiwiY29tYmluZWRVcGRhdGVycyIsImlzVmFsaWRDb25maWciLCJjb25maWciLCJ2ZXJzaW9uIiwiZGVmYXVsdEFkZERhdGFUb01hcE9wdGlvbnMiLCJjZW50ZXJNYXAiLCJrZWVwRXhpc3RpbmdDb25maWciLCJhdXRvQ3JlYXRlTGF5ZXJzIiwiYXV0b0NyZWF0ZVRvb2x0aXBzIiwiYWRkRGF0YVRvTWFwVXBkYXRlciIsInN0YXRlIiwiX3JlZiIsIl9kYXRhc2V0cyQiLCJfZGF0YXNldHMkMiIsIl9kYXRhc2V0cyQzIiwicGF5bG9hZCIsIm9uRmluaXNoIiwiZGF0YXNldHMiLCJpbmZvIiwib3B0aW9ucyIsIl9vYmplY3RTcHJlYWQiLCJpc1Byb2dyZXNzaXZlTG9hZGluZyIsIkFycmF5IiwiaXNBcnJheSIsImZvcm1hdCIsImlkIiwidmlzU3RhdGUiLCJwYXJzZWRDb25maWciLCJzY2hlbWEiLCJwYXJzZVNhdmVkQ29uZmlnIiwib2xkTGF5ZXJzIiwibGF5ZXJzIiwiZmlsdGVyTmV3bHlBZGRlZExheWVycyIsImZpbHRlciIsIm5sIiwiZmluZCIsIm9sIiwiZmluZE1hcEJvdW5kc0lmQ2VudGVyZWQiLCJib3VuZHMiLCJ1bmRlZmluZWQiLCJCb29sZWFuIiwiX3JlZjIiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJyZWFkT25seSIsImFjdGlvbiIsImlzU3RhbGVGaWxlTG9hZEZpbmlzaCIsImZpbGVMb2FkaW5nIiwibG9hZElkIiwicHJvZ3Jlc3NpdmVTdGVwcyIsInJlc3VsdCIsImNvbmNhdCIsIl90b0NvbnN1bWFibGVBcnJheSIsIl9wcm9ncmVzc2l2ZVN0ZXBzIiwiX3RvQXJyYXkiLCJfcHJvZ3Jlc3NpdmVTdGVwcyQiLCJjdXJyZW50U3RlcCIsInJlbWFpbmluZ1N0ZXBzIiwic2xpY2UiLCJwYXlsb2FkcyIsImNvbnRpbnVhdGlvbk9wdGlvbnMiLCJsZW5ndGgiLCJuZXh0U3RhdGUiLCJmaWxlTG9hZGluZ1Byb2dyZXNzIiwic3RhZ2VkVG9BZGQiLCJzdGF0ZVdpdGhEYXRhIiwibWFwIiwicCIsImluZGV4Iiwia2VwdExvYWRFcnJvcnMiLCJwcm9ncmVzcyIsImFyZ3VtZW50cyIsImZyb21FbnRyaWVzIiwiZW50cmllcyIsIl9yZWYzIiwiX3JlZjQiLCJfc2xpY2VkVG9BcnJheSIsInZhbHVlIiwiZXJyb3IiLCJzdGFnZUxvYWRlZEZpbGVzVXBkYXRlciIsIm1vZGFsT3BlbiIsInVpU3RhdGUiLCJjdXJyZW50TW9kYWwiLCJwcmV2aW91cyIsInN0YWdlZEl0ZW1LZXkiLCJpdGVtIiwiX2l0ZW0kbWV0YWRhdGEiLCJfaXRlbSRpbmZvIiwibWV0YWRhdGEiLCJzb3VyY2UiLCJhcHBlbmRTdGFnZWRMb2FkZWRGaWxlc1VwZGF0ZXIiLCJzZWVuIiwiU2V0IiwibmV4dCIsImtleSIsImhhcyIsImFkZCIsInNwbGl0UmVwbGFjZW1lbnRVcGxvYWQiLCJtYXBzIiwiZm9yRWFjaCIsInB1c2giLCJsaXN0IiwiZGF0YXNldCIsImFwcGx5IiwiZGF0YXNldFRvVXNlIiwibW9yZSIsInJlbWFpbmRlciIsImNvbmZpcm1SZXBsYWNlRGF0YXNldFVwZGF0ZXIiLCJfZGF0YXNldFRvVXNlJGluZm8iLCJjbGVhcmVkIiwiX3NwbGl0UmVwbGFjZW1lbnRVcGxvIiwiZGF0YXNldFRvUmVwbGFjZUlkIiwicmVwbGFjZWQiLCJyZXBsYWNlRGF0YUluTWFwVXBkYXRlciIsImRlbGV0ZU9yaWdpbmFsRGF0YXNldCIsImFkZERhdGFUb01hcENvbXBvc2VkIiwidXBkYXRlT3ZlcmxheUJsZW5kaW5nIiwib3ZlcmxheUJsZW5kaW5nIiwibm9ybWFsIiwidXBkYXRlRGFya0Jhc2VNYXBMYXllcnMiLCJkYXJrQmFzZU1hcEVuYWJsZWQiLCJsYXllcklkIiwibGF5ZXIiLCJ2aXNDb25maWdTZXR0aW5ncyIsInZpc0NvbmZpZyIsInVwZGF0ZUxheWVyQ29uZmlnIiwiY29tYmluZWRNYXBTdHlsZUNoYW5nZVVwZGF0ZXIiLCJfbWFwU3RhdGUkZ2xvYmUiLCJtYXBTdHlsZSIsImdldENvbG9yTW9kZSIsIl9tYXBTdHlsZSRtYXBTdHlsZXMkayIsIm1hcFN0eWxlcyIsImNvbG9yTW9kZSIsInByZXZDb2xvck1vZGUiLCJzdHlsZVR5cGUiLCJuZXh0Q29sb3JNb2RlIiwibWFwU3RhdGUiLCJEQVJLIiwic2NyZWVuIiwiTElHSFQiLCJkYXJrZW4iLCJnbG9iZSIsImVuYWJsZWQiLCJiYXNlbWFwIiwibGFiZWxzIiwiYWRtaW5MaW5lcyIsIndhdGVyIiwic3luY0dsb2JlQ29uZmlnQ29sb3JzVG9TdHlsZSIsIl9tYXBTdGF0ZSRnbG9iZTIiLCJuZXh0U3R5bGVPYmoiLCJuZXh0R2xvYmVDb25maWciLCJzdXJmYWNlQ29sb3IiLCJiYWNrZ3JvdW5kRmlsbENvbG9yIiwid2F0ZXJDb2xvciIsImJhc2VtYXBXYXRlckZpbGxDb2xvciIsImFkbWluTGluZXNDb2xvciIsImJhc2VtYXBBZG1pbkxpbmVDb2xvciIsImJhc2VtYXBDb2xvcnMiLCJzdHlsZSIsImxheWVyR3JvdXBzIiwiY29tYmluZWRTZXRNYXBWaWV3TW9kZVVwZGF0ZXIiLCJfbWFwU3RhdGUkZ2xvYmUzIiwiY29tYmluZWRMYXllclR5cGVDaGFuZ2VVcGRhdGVyIiwib2xkTGF5ZXJJbmRleCIsImZpbmRJbmRleCIsIm9sZExheWVyIiwibmV3TGF5ZXIiLCJfbmV3U3RhdGUkdWlTdGF0ZSRtYXAiLCJuZXdTdGF0ZSIsImlzU3BsaXQiLCJzcGxpdE1hcHMiLCJpc0xlZ2VuZEFjdGl2ZSIsIm1hcENvbnRyb2xzIiwibWFwTGVnZW5kIiwiYWN0aXZlIiwicGFuZWxJZCIsIl9uZXdVaVN0YXRlJG1hcENvbnRybyIsIm1hcFNwbGl0TW9kZSIsInByZXZNb2RlIiwibmV3TWFwU3RhdGUiLCJuZXdWaXNTdGF0ZSIsIlNJTkdMRV9NQVAiLCJEVUFMX01BUCIsIlNXSVBFX0NPTVBBUkUiLCJkdXBsaWNhdGUiLCJuZXdVaVN0YXRlIiwiZGVmYXVsdFJlcGxhY2VEYXRhVG9NYXBPcHRpb25zIiwiX3JlZjUiLCJfcGF5bG9hZCRvcHRpb25zIiwiX29wdGlvbnMkZGVsZXRlT3JpZ2luIiwicmVwbGFjZU9wdGlvbnMiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJfZXhjbHVkZWQiLCJhZGREYXRhVG9NYXBPcHRpb25zIiwiZGF0YUlkVG9Vc2UiLCJwcmVwYXJlZFN0YXRlIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbWJpbmVkLXVwZGF0ZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7XG4gIHRvZ2dsZU1vZGFsVXBkYXRlcixcbiAgbG9hZEZpbGVzU3VjY2Vzc1VwZGF0ZXIgYXMgdWlTdGF0ZUxvYWRGaWxlc1N1Y2Nlc3NVcGRhdGVyLFxuICB0b2dnbGVNYXBDb250cm9sVXBkYXRlcixcbiAgdG9nZ2xlU3BsaXRNYXBVcGRhdGVyIGFzIHVpU3RhdGVUb2dnbGVTcGxpdE1hcFVwZGF0ZXIsXG4gIHJlY2VpdmVNYXBDb25maWdVcGRhdGVyIGFzIHVpU3RhdGVSZWNlaXZlTWFwQ29uZmlnVXBkYXRlclxufSBmcm9tICcuL3VpLXN0YXRlLXVwZGF0ZXJzJztcbmltcG9ydCB7XG4gIHVwZGF0ZVZpc0RhdGFVcGRhdGVyIGFzIHZpc1N0YXRlVXBkYXRlVmlzRGF0YVVwZGF0ZXIsXG4gIHNldE1hcEluZm9VcGRhdGVyLFxuICBsYXllclR5cGVDaGFuZ2VVcGRhdGVyLFxuICB0b2dnbGVTcGxpdE1hcFVwZGF0ZXIgYXMgdmlzU3RhdGVUb2dnbGVTcGxpdE1hcFVwZGF0ZXIsXG4gIHByZXBhcmVTdGF0ZUZvckRhdGFzZXRSZXBsYWNlXG59IGZyb20gJy4vdmlzLXN0YXRlLXVwZGF0ZXJzJztcbmltcG9ydCB7XG4gIHJlY2VpdmVNYXBDb25maWdVcGRhdGVyIGFzIHN0YXRlTWFwQ29uZmlnVXBkYXRlcixcbiAgdG9nZ2xlU3BsaXRNYXBVcGRhdGVyIGFzIG1hcFN0YXRlVG9nZ2xlU3BsaXRNYXBVcGRhdGVyLFxuICBzZXRNYXBTcGxpdE1vZGVVcGRhdGVyIGFzIG1hcFN0YXRlU2V0TWFwU3BsaXRNb2RlVXBkYXRlcixcbiAgc2V0TWFwVmlld01vZGVVcGRhdGVyXG59IGZyb20gJy4vbWFwLXN0YXRlLXVwZGF0ZXJzJztcbmltcG9ydCB7XG4gIG1hcFN0eWxlQ2hhbmdlVXBkYXRlcixcbiAgcmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIgYXMgc3R5bGVNYXBDb25maWdVcGRhdGVyXG59IGZyb20gJy4vbWFwLXN0eWxlLXVwZGF0ZXJzJztcbmltcG9ydCB7ZmlsZUNhY2hlVG9Qcm9ncmVzc2l2ZVN0ZXBzLCBmaWxlc1RvRGF0YVBheWxvYWR9IGZyb20gJ0BrZXBsZXIuZ2wvcHJvY2Vzc29ycyc7XG5pbXBvcnQgdHlwZSB7RmlsZUNhY2hlSXRlbX0gZnJvbSAnQGtlcGxlci5nbC9wcm9jZXNzb3JzJztcbmltcG9ydCB7cGF5bG9hZF8sIGFwcGx5Xywgd2l0aF8sIGlmXywgY29tcG9zZV8sIG1lcmdlXywgcGlja199IGZyb20gJy4vY29tcG9zZXItaGVscGVycyc7XG5pbXBvcnQge01hcFN0YXRlLCBVaVN0YXRlLCBBZGREYXRhVG9NYXBQYXlsb2FkLCBQYXJzZWRDb25maWcsIFByb3RvRGF0YXNldH0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge01hcFN0eWxlfSBmcm9tICcuL21hcC1zdHlsZS11cGRhdGVycyc7XG5pbXBvcnQge1Byb3ZpZGVyU3RhdGV9IGZyb20gJy4vcHJvdmlkZXItc3RhdGUtdXBkYXRlcnMnO1xuaW1wb3J0IHtcbiAgbG9hZEZpbGVzU3VjY2Vzc1VwZGF0ZXJBY3Rpb24sXG4gIENvbmZpcm1SZXBsYWNlRGF0YXNldFVwZGF0ZXJBY3Rpb24sXG4gIFN0YWdlTG9hZGVkRmlsZXNVcGRhdGVyQWN0aW9uLFxuICBsb2FkRmlsZXNTdWNjZXNzLFxuICBNYXBTdHlsZUNoYW5nZVVwZGF0ZXJBY3Rpb24sXG4gIExheWVyVHlwZUNoYW5nZVVwZGF0ZXJBY3Rpb24sXG4gIFRvZ2dsZVNwbGl0TWFwVXBkYXRlckFjdGlvbixcbiAgUmVwbGFjZURhdGFJbk1hcFBheWxvYWQsXG4gIE1hcFN0YXRlQWN0aW9uc1xufSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuaW1wb3J0IHtWaXNTdGF0ZX0gZnJvbSAnQGtlcGxlci5nbC9zY2hlbWFzJztcbmltcG9ydCB7TGF5ZXJ9IGZyb20gJ0BrZXBsZXIuZ2wvbGF5ZXJzJztcbmltcG9ydCB7aXNQbGFpbk9iamVjdCwgY29tcHV0ZVNwbGl0TWFwTGF5ZXJzfSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7ZmluZE1hcEJvdW5kc30gZnJvbSAnLi9kYXRhLXV0aWxzJztcbmltcG9ydCB7XG4gIEJBU0VfTUFQX0NPTE9SX01PREVTLFxuICBPVkVSTEFZX0JMRU5ESU5HUyxcbiAgTk9fTUFQX0lELFxuICBNYXBTcGxpdE1vZGUsXG4gIEFERF9EQVRBX0lEXG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7Z2V0QmFzZW1hcENvbG9yc0ZvclN0eWxlLCBERUZBVUxUX0JBU0VNQVBfQ09MT1J9IGZyb20gJ0BrZXBsZXIuZ2wvZGVja2dsLWxheWVycyc7XG5cbmV4cG9ydCB0eXBlIEtlcGxlckdsU3RhdGUgPSB7XG4gIHZpc1N0YXRlOiBWaXNTdGF0ZTtcbiAgbWFwU3RhdGU6IE1hcFN0YXRlO1xuICBtYXBTdHlsZTogTWFwU3R5bGU7XG4gIHVpU3RhdGU6IFVpU3RhdGU7XG4gIHByb3ZpZGVyU3RhdGU6IFByb3ZpZGVyU3RhdGU7XG59O1xuXG50eXBlIFByb2dyZXNzaXZlTG9hZEZpbGVzU3VjY2Vzc0FjdGlvbiA9IGxvYWRGaWxlc1N1Y2Nlc3NVcGRhdGVyQWN0aW9uICYge1xuICBwcm9ncmVzc2l2ZVN0ZXBzPzogRmlsZUNhY2hlSXRlbVtdW107XG59O1xuXG50eXBlIFByb2dyZXNzaXZlTG9hZENvbnRpbnVhdGlvbiA9IFJldHVyblR5cGU8dHlwZW9mIGxvYWRGaWxlc1N1Y2Nlc3M+ICYge1xuICBwcm9ncmVzc2l2ZVN0ZXBzOiBGaWxlQ2FjaGVJdGVtW11bXTtcbn07XG5cbi8vIGNvbXBvc2UgYWN0aW9uIHRvIGFwcGx5IHJlc3VsdCBtdWx0aXBsZSByZWR1Y2Vycywgd2l0aCB0aGUgb3V0cHV0IG9mIG9uZVxuXG4vKipcbiAqIFNvbWUgYWN0aW9ucyB3aWxsIGFmZmVjdCB0aGUgZW50aXJlIGtlcGxlci5sZyBpbnN0YW5jZSBzdGF0ZS5cbiAqIFRoZSB1cGRhdGVycyBmb3IgdGhlc2UgYWN0aW9ucyBpcyBleHBvcnRlZCBhcyBgY29tYmluZWRVcGRhdGVyc2AuIFRoZXNlIHVwZGF0ZXIgdGFrZSB0aGUgZW50aXJlIGluc3RhbmNlIHN0YXRlXG4gKiBhcyB0aGUgZmlyc3QgYXJndW1lbnQuIFJlYWQgbW9yZSBhYm91dCBbVXNpbmcgdXBkYXRlcnNdKC4uL2FkdmFuY2VkLXVzYWdlL3VzaW5nLXVwZGF0ZXJzLm1kKVxuICogQHB1YmxpY1xuICogQGV4YW1wbGVcbiAqXG4gKiBpbXBvcnQga2VwbGVyR2xSZWR1Y2VyLCB7Y29tYmluZWRVcGRhdGVyc30gZnJvbSAnQGtlcGxlci5nbC9yZWR1Y2Vycyc7XG4gKiAvLyBSb290IFJlZHVjZXJcbiAqIGNvbnN0IHJlZHVjZXJzID0gY29tYmluZVJlZHVjZXJzKHtcbiAqICBrZXBsZXJHbDoga2VwbGVyR2xSZWR1Y2VyLFxuICogIGFwcDogYXBwUmVkdWNlclxuICogfSk7XG4gKlxuICogY29uc3QgY29tcG9zZWRSZWR1Y2VyID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAqICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gKiAgICAvLyBhZGQgZGF0YSB0byBtYXAgYWZ0ZXIgcmVjZWl2aW5nIGRhdGEgZnJvbSByZW1vdGUgc291cmNlc1xuICogICAgY2FzZSAnTE9BRF9SRU1PVEVfUkVTT1VSQ0VfU1VDQ0VTUyc6XG4gKiAgICAgIHJldHVybiB7XG4gKiAgICAgICAgLi4uc3RhdGUsXG4gKiAgICAgICAga2VwbGVyR2w6IHtcbiAqICAgICAgICAgIC4uLnN0YXRlLmtlcGxlckdsLFxuICogICAgICAgICAgLy8gcGFzcyBpbiBrZXBsZXIuZ2wgaW5zdGFuY2Ugc3RhdGUgdG8gY29tYmluZWRVcGRhdGVyc1xuICogICAgICAgICAgbWFwOiAgY29tYmluZWRVcGRhdGVycy5hZGREYXRhVG9NYXBVcGRhdGVyKFxuICogICAgICAgICAgIHN0YXRlLmtlcGxlckdsLm1hcCxcbiAqICAgICAgICAgICB7XG4gKiAgICAgICAgICAgICBwYXlsb2FkOiB7XG4gKiAgICAgICAgICAgICAgIGRhdGFzZXRzOiBhY3Rpb24uZGF0YXNldHMsXG4gKiAgICAgICAgICAgICAgIG9wdGlvbnM6IHtyZWFkT25seTogdHJ1ZX0sXG4gKiAgICAgICAgICAgICAgIGNvbmZpZzogYWN0aW9uLmNvbmZpZ1xuICogICAgICAgICAgICAgIH1cbiAqICAgICAgICAgICAgfVxuICogICAgICAgICAgKVxuICogICAgICAgIH1cbiAqICAgICAgfTtcbiAqICB9XG4gKiAgcmV0dXJuIHJlZHVjZXJzKHN0YXRlLCBhY3Rpb24pO1xuICogfTtcbiAqXG4gKiBleHBvcnQgZGVmYXVsdCBjb21wb3NlZFJlZHVjZXI7XG4gKi9cblxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG4vLyBAdHMtaWdub3JlXG5jb25zdCBjb21iaW5lZFVwZGF0ZXJzID0gbnVsbDtcbi8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG5cbmV4cG9ydCBjb25zdCBpc1ZhbGlkQ29uZmlnID0gY29uZmlnID0+XG4gIGlzUGxhaW5PYmplY3QoY29uZmlnKSAmJiBpc1BsYWluT2JqZWN0KGNvbmZpZy5jb25maWcpICYmIGNvbmZpZy52ZXJzaW9uO1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdEFkZERhdGFUb01hcE9wdGlvbnMgPSB7XG4gIGNlbnRlck1hcDogdHJ1ZSxcbiAga2VlcEV4aXN0aW5nQ29uZmlnOiBmYWxzZSxcbiAgYXV0b0NyZWF0ZUxheWVyczogdHJ1ZSxcbiAgYXV0b0NyZWF0ZVRvb2x0aXBzOiB0cnVlXG59O1xuXG4vKipcbiAqIENvbWJpbmUgZGF0YSBhbmQgZnVsbCBjb25maWd1cmF0aW9uIHVwZGF0ZSBpbiBhIHNpbmdsZSBhY3Rpb25cbiAqXG4gKiBAbWVtYmVyb2YgY29tYmluZWRVcGRhdGVyc1xuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlIGtlcGxlci5nbCBpbnN0YW5jZSBzdGF0ZSwgY29udGFpbmluZyBhbGwgc3VicmVkdWNlciBzdGF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGFjdGlvblxuICogQHBhcmFtIHtPYmplY3R9IGFjdGlvbi5wYXlsb2FkIGB7ZGF0YXNldHMsIG9wdGlvbnMsIGNvbmZpZ31gXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQuZGF0YXNldHMgLSAqKipyZXF1aXJlZCoqIGRhdGFzZXRzIGNhbiBiZSBhIGRhdGFzZXQgb3IgYW4gYXJyYXkgb2YgZGF0YXNldHNcbiAqIEVhY2ggZGF0YXNldCBvYmplY3QgbmVlZHMgdG8gaGF2ZSBgaW5mb2AgYW5kIGBkYXRhYCBwcm9wZXJ0eS5cbiAqIEBwYXJhbSBbYWN0aW9uLnBheWxvYWQub3B0aW9uc10gb3B0aW9uIG9iamVjdCBge2NlbnRlck1hcDogdHJ1ZSwgcGFkZGluZzoge2xlZnQ6IDMwMH19YFxuICogQHBhcmFtIFthY3Rpb24ucGF5bG9hZC5jb25maWddIG1hcCBjb25maWdcbiAqIEBwYXJhbSBbYWN0aW9uLnBheWxvYWQuaW5mb10gbWFwIGluZm8gY29udGFpbnMgdGl0bGUgYW5kIGRlc2NyaXB0aW9uXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBEYXRhc2V0XG4gKiBAcHJvcGVydHkgaW5mbyAtaW5mbyBvZiBhIGRhdGFzZXRcbiAqIEBwcm9wZXJ0eSBpbmZvLmlkIC0gaWQgb2YgdGhpcyBkYXRhc2V0LiBJZiBjb25maWcgaXMgZGVmaW5lZCwgYGlkYCBzaG91bGQgbWF0Y2hlcyB0aGUgYGRhdGFJZGAgaW4gY29uZmlnLlxuICogQHByb3BlcnR5IGluZm8ubGFiZWwgLSBBIGRpc3BsYXkgbmFtZSBvZiB0aGlzIGRhdGFzZXRcbiAqIEBwcm9wZXJ0eSBkYXRhIC0gKioqcmVxdWlyZWQqKiBUaGUgZGF0YSBvYmplY3QsIGluIGEgdGFidWxhciBmb3JtYXQgd2l0aCAyIHByb3BlcnRpZXMgYGZpZWxkc2AgYW5kIGByb3dzYFxuICogQHByb3BlcnR5IGRhdGEuZmllbGRzIC0gKioqcmVxdWlyZWQqKiBBcnJheSBvZiBmaWVsZHMsXG4gKiBAcHJvcGVydHkgZGF0YS5maWVsZHMubmFtZSAtICoqKnJlcXVpcmVkKiogTmFtZSBvZiB0aGUgZmllbGQsXG4gKiBAcHJvcGVydHkgZGF0YS5yb3dzIC0gKioqcmVxdWlyZWQqKiBBcnJheSBvZiByb3dzLCBpbiBhIHRhYnVsYXIgZm9ybWF0IHdpdGggYGZpZWxkc2AgYW5kIGByb3dzYFxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZERhdGFUb01hcFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBLZXBsZXJHbFN0YXRlLFxuICB7cGF5bG9hZCwgb25GaW5pc2h9OiB7cGF5bG9hZDogQWRkRGF0YVRvTWFwUGF5bG9hZDsgb25GaW5pc2g/OiBQcm9ncmVzc2l2ZUxvYWRDb250aW51YXRpb259XG4pOiBLZXBsZXJHbFN0YXRlID0+IHtcbiAgY29uc3Qge2RhdGFzZXRzLCBjb25maWcsIGluZm99ID0gcGF5bG9hZDtcblxuICBjb25zdCBvcHRpb25zID0ge1xuICAgIC4uLmRlZmF1bHRBZGREYXRhVG9NYXBPcHRpb25zLFxuICAgIC4uLnBheWxvYWQub3B0aW9uc1xuICB9O1xuXG4gIC8vIGNoZWNrIGlmIHByb2dyZXNzaXZlIGxvYWRpbmcgZGF0YXNldCBieSBiYXRjaGVzLCBhbmQgdXBkYXRlIHZpc1N0YXRlIGRpcmVjdGx5XG4gIGNvbnN0IGlzUHJvZ3Jlc3NpdmVMb2FkaW5nID1cbiAgICBBcnJheS5pc0FycmF5KGRhdGFzZXRzKSAmJlxuICAgIGRhdGFzZXRzWzBdPy5pbmZvLmZvcm1hdCA9PT0gJ2Fycm93JyAmJlxuICAgIGRhdGFzZXRzWzBdPy5pbmZvLmlkICYmXG4gICAgZGF0YXNldHNbMF0/LmluZm8uaWQgaW4gc3RhdGUudmlzU3RhdGUuZGF0YXNldHM7XG4gIGlmIChpc1Byb2dyZXNzaXZlTG9hZGluZykge1xuICAgIHJldHVybiBjb21wb3NlXzxLZXBsZXJHbFN0YXRlPihbXG4gICAgICBwaWNrXygndmlzU3RhdGUnKShcbiAgICAgICAgYXBwbHlfPFZpc1N0YXRlLCBhbnk+KHZpc1N0YXRlVXBkYXRlVmlzRGF0YVVwZGF0ZXIsIHtcbiAgICAgICAgICBkYXRhc2V0cyxcbiAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBvbkZpbmlzaFxuICAgICAgICB9KVxuICAgICAgKVxuICAgIF0pKHN0YXRlKTtcbiAgfVxuXG4gIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgbGV0IHBhcnNlZENvbmZpZzogUGFyc2VkQ29uZmlnID0gY29uZmlnO1xuXG4gIGlmIChpc1ZhbGlkQ29uZmlnKGNvbmZpZykpIHtcbiAgICAvLyBpZiBwYXNzZWQgaW4gc2F2ZWQgY29uZmlnXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgIHBhcnNlZENvbmZpZyA9IHN0YXRlLnZpc1N0YXRlLnNjaGVtYS5wYXJzZVNhdmVkQ29uZmlnKGNvbmZpZyk7XG4gIH1cbiAgY29uc3Qgb2xkTGF5ZXJzID0gc3RhdGUudmlzU3RhdGUubGF5ZXJzO1xuICBjb25zdCBmaWx0ZXJOZXdseUFkZGVkTGF5ZXJzID0gKGxheWVyczogTGF5ZXJbXSkgPT5cbiAgICBsYXllcnMuZmlsdGVyKG5sID0+ICFvbGRMYXllcnMuZmluZChvbCA9PiBvbCA9PT0gbmwpKTtcblxuICAvLyBSZXR1cm5zIHVuZGVmaW5lZCBpZiBub3QgZm91bmQsIHRvIG1ha2UgdHlwZXNjcmlwdCBoYXBweVxuICBjb25zdCBmaW5kTWFwQm91bmRzSWZDZW50ZXJlZCA9IChsYXllcnM6IExheWVyW10pID0+IHtcbiAgICBjb25zdCBib3VuZHMgPSBvcHRpb25zLmNlbnRlck1hcCAmJiBmaW5kTWFwQm91bmRzKGxheWVycyk7XG4gICAgcmV0dXJuIGJvdW5kcyA/IGJvdW5kcyA6IHVuZGVmaW5lZDtcbiAgfTtcblxuICByZXR1cm4gY29tcG9zZV88S2VwbGVyR2xTdGF0ZT4oW1xuICAgIHBpY2tfKCd2aXNTdGF0ZScpKFxuICAgICAgLy8gdGhpcyBwYXJ0IGNhbiBiZSBhc3luY1xuICAgICAgYXBwbHlfPFZpc1N0YXRlLCBhbnk+KHZpc1N0YXRlVXBkYXRlVmlzRGF0YVVwZGF0ZXIsIHtcbiAgICAgICAgZGF0YXNldHMsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIGNvbmZpZzogcGFyc2VkQ29uZmlnLFxuICAgICAgICBvbkZpbmlzaFxuICAgICAgfSlcbiAgICApLFxuXG4gICAgaWZfKEJvb2xlYW4oaW5mbyksIHBpY2tfKCd2aXNTdGF0ZScpKGFwcGx5XzxWaXNTdGF0ZSwgYW55PihzZXRNYXBJbmZvVXBkYXRlciwge2luZm99KSkpLFxuICAgIC8vIE5vdGUgdGhhdCBmaXQgYm91bmRzIGhlcmUgd29uJ3QgYmUgY2FsbGVkIGluIGNhc2UgZGF0YXNldHMgYXJlIGNyZWF0ZWQgaW4gVGFza3MuXG4gICAgLy8gQSBzZXBhcmF0ZSBUYXNrIHRvIHVwZGF0ZSBib3VuZHMgaXMgY3JlYXRlZCBvbmNlIHRoZSBkYXRhc2V0cyBhcmUgcmVhZHkuXG4gICAgd2l0aF8oKHt2aXNTdGF0ZX0pID0+XG4gICAgICBwaWNrXygnbWFwU3RhdGUnKShcbiAgICAgICAgYXBwbHlfKFxuICAgICAgICAgIHN0YXRlTWFwQ29uZmlnVXBkYXRlcixcbiAgICAgICAgICBwYXlsb2FkXyh7XG4gICAgICAgICAgICBjb25maWc6IHBhcnNlZENvbmZpZyxcbiAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICBib3VuZHM6IGZpbmRNYXBCb3VuZHNJZkNlbnRlcmVkKGZpbHRlck5ld2x5QWRkZWRMYXllcnModmlzU3RhdGUubGF5ZXJzKSlcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApXG4gICAgKSxcbiAgICBwaWNrXygnbWFwU3R5bGUnKShhcHBseV8oc3R5bGVNYXBDb25maWdVcGRhdGVyLCBwYXlsb2FkXyh7Y29uZmlnOiBwYXJzZWRDb25maWcsIG9wdGlvbnN9KSkpLFxuICAgIHBpY2tfKCd1aVN0YXRlJykoXG4gICAgICBhcHBseV8odWlTdGF0ZVJlY2VpdmVNYXBDb25maWdVcGRhdGVyLCBwYXlsb2FkXyh7Y29uZmlnOiBwYXJzZWRDb25maWcsIG9wdGlvbnN9KSlcbiAgICApLFxuICAgIHBpY2tfKCd1aVN0YXRlJykoYXBwbHlfKHVpU3RhdGVMb2FkRmlsZXNTdWNjZXNzVXBkYXRlciwgcGF5bG9hZF8obnVsbCkpKSxcblxuICAgIHBpY2tfKCd1aVN0YXRlJykoYXBwbHlfKHRvZ2dsZU1vZGFsVXBkYXRlciwgcGF5bG9hZF8obnVsbCkpKSxcbiAgICBwaWNrXygndWlTdGF0ZScpKFxuICAgICAgbWVyZ2VfKFxuICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucywgJ3JlYWRPbmx5JylcbiAgICAgICAgICA/IHtyZWFkT25seTogb3B0aW9ucy5yZWFkT25seX1cbiAgICAgICAgICA6IHt9XG4gICAgICApXG4gICAgKVxuICBdKShzdGF0ZSk7XG59O1xuXG5leHBvcnQgY29uc3QgbG9hZEZpbGVzU3VjY2Vzc1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBLZXBsZXJHbFN0YXRlLFxuICBhY3Rpb246IFByb2dyZXNzaXZlTG9hZEZpbGVzU3VjY2Vzc0FjdGlvblxuKTogS2VwbGVyR2xTdGF0ZSA9PiB7XG4gIGlmIChpc1N0YWxlRmlsZUxvYWRGaW5pc2goc3RhdGUudmlzU3RhdGUuZmlsZUxvYWRpbmcsIGFjdGlvbi5sb2FkSWQpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHByb2dyZXNzaXZlU3RlcHMgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYWN0aW9uLCAncHJvZ3Jlc3NpdmVTdGVwcycpXG4gICAgPyBbYWN0aW9uLnJlc3VsdCwgLi4uKGFjdGlvbi5wcm9ncmVzc2l2ZVN0ZXBzIHx8IFtdKV1cbiAgICA6IGZpbGVDYWNoZVRvUHJvZ3Jlc3NpdmVTdGVwcyhhY3Rpb24ucmVzdWx0KTtcbiAgY29uc3QgW2N1cnJlbnRTdGVwID0gYWN0aW9uLnJlc3VsdCwgLi4ucmVtYWluaW5nU3RlcHNdID0gcHJvZ3Jlc3NpdmVTdGVwcztcbiAgY29uc3QgcGF5bG9hZHMgPSBmaWxlc1RvRGF0YVBheWxvYWQoY3VycmVudFN0ZXAsIGFjdGlvbi5vcHRpb25zKTtcbiAgLy8gVGhlIGZpcnN0IHByb2dyZXNzaXZlIHNuYXBzaG90IG1heSBmaXQgdGhlIG1hcCB0byB0aGUgbmV3bHkgY3JlYXRlZCBsYXllci5cbiAgLy8gTGF0ZXIgc25hcHNob3RzIG9ubHkgcmVwbGFjZSB0aGF0IGxheWVyJ3MgZGF0YSBhbmQgbXVzdCBub3Qga2VlcCBtb3ZpbmcgdGhlIHZpZXdwb3J0LlxuICBjb25zdCBjb250aW51YXRpb25PcHRpb25zID0gey4uLmFjdGlvbi5vcHRpb25zLCBjZW50ZXJNYXA6IGZhbHNlfTtcbiAgY29uc3Qgb25GaW5pc2g6IFByb2dyZXNzaXZlTG9hZENvbnRpbnVhdGlvbiB8IHVuZGVmaW5lZCA9IHJlbWFpbmluZ1N0ZXBzLmxlbmd0aFxuICAgID8ge1xuICAgICAgICAuLi5sb2FkRmlsZXNTdWNjZXNzKHJlbWFpbmluZ1N0ZXBzWzBdLCBjb250aW51YXRpb25PcHRpb25zKSxcbiAgICAgICAgcHJvZ3Jlc3NpdmVTdGVwczogcmVtYWluaW5nU3RlcHMuc2xpY2UoMSlcbiAgICAgIH1cbiAgICA6IHVuZGVmaW5lZDtcbiAgY29uc3QgbmV4dFN0YXRlID0gY29tcG9zZV8oW1xuICAgIHBpY2tfKCd2aXNTdGF0ZScpKFxuICAgICAgbWVyZ2VfKHtcbiAgICAgICAgZmlsZUxvYWRpbmc6IGZhbHNlLFxuICAgICAgICBmaWxlTG9hZGluZ1Byb2dyZXNzOiB7fSxcbiAgICAgICAgc3RhZ2VkVG9BZGQ6IG51bGxcbiAgICAgIH0pXG4gICAgKVxuICBdKShzdGF0ZSk7XG4gIC8vIG1ha2UgbXVsdGlwbGUgYWRkIGRhdGEgdG8gbWFwIGNhbGxzXG4gIGNvbnN0IHN0YXRlV2l0aERhdGEgPSBjb21wb3NlXyhcbiAgICBwYXlsb2Fkcy5tYXAoKHAsIGluZGV4KSA9PlxuICAgICAgYXBwbHlfKGFkZERhdGFUb01hcFVwZGF0ZXIsIHtcbiAgICAgICAgLi4ucGF5bG9hZF8ocCksXG4gICAgICAgIC4uLihvbkZpbmlzaCAmJiBpbmRleCA9PT0gcGF5bG9hZHMubGVuZ3RoIC0gMSA/IHtvbkZpbmlzaH0gOiB7fSlcbiAgICAgIH0pXG4gICAgKVxuICApKG5leHRTdGF0ZSk7XG4gIHJldHVybiBzdGF0ZVdpdGhEYXRhIGFzIEtlcGxlckdsU3RhdGU7XG59O1xuXG5mdW5jdGlvbiBrZXB0TG9hZEVycm9ycyhwcm9ncmVzczogUmVjb3JkPHN0cmluZywge2Vycm9yPzogdW5rbm93bn0+ID0ge30pIHtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhwcm9ncmVzcykuZmlsdGVyKChbLCB2YWx1ZV0pID0+IHZhbHVlPy5lcnJvcikpO1xufVxuXG4vKiogQSBmaW5pc2ggZnJvbSB0aGUgMjAwbXMgcGF1c2UgaXMgc3RhbGUgb25jZSB0aGF0IGxvYWQgd2FzIGNhbmNlbGVkIG9yIHJlcGxhY2VkLiAqL1xuZnVuY3Rpb24gaXNTdGFsZUZpbGVMb2FkRmluaXNoKGZpbGVMb2FkaW5nOiB7bG9hZElkPzogbnVtYmVyfSB8IGZhbHNlLCBsb2FkSWQ/OiBudW1iZXIpOiBib29sZWFuIHtcbiAgaWYgKGxvYWRJZCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiAhZmlsZUxvYWRpbmcgfHwgZmlsZUxvYWRpbmcubG9hZElkICE9PSBsb2FkSWQ7XG59XG5cbi8qKlxuICogRmluaXNoIGEgZGVmZXJyZWQgZmlsZSBsb2FkOiBrZWVwIHRoZSBwYXJzZWQgY2FjaGUsIGNsZWFyIHRoZSBsb2FkaW5nIGZsYWcsXG4gKiBhbmQgbGVhdmUgdGhlIEFkZCBEYXRhIG1vZGFsIG9wZW4gdW50aWwgdGhlIHVzZXIgY29uZmlybXMuXG4gKiBAbWVtYmVyb2YgY29tYmluZWRVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc3RhZ2VMb2FkZWRGaWxlc1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBLZXBsZXJHbFN0YXRlLFxuICBhY3Rpb246IFN0YWdlTG9hZGVkRmlsZXNVcGRhdGVyQWN0aW9uXG4pOiBLZXBsZXJHbFN0YXRlID0+IHtcbiAgaWYgKGlzU3RhbGVGaWxlTG9hZEZpbmlzaChzdGF0ZS52aXNTdGF0ZS5maWxlTG9hZGluZywgYWN0aW9uLmxvYWRJZCkpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgbW9kYWxPcGVuID0gc3RhdGUudWlTdGF0ZS5jdXJyZW50TW9kYWwgPT09IEFERF9EQVRBX0lEO1xuICBjb25zdCByZXN1bHQgPSBhY3Rpb24ucmVzdWx0IHx8IFtdO1xuICBjb25zdCBwcmV2aW91cyA9XG4gICAgbW9kYWxPcGVuICYmIEFycmF5LmlzQXJyYXkoc3RhdGUudmlzU3RhdGUuc3RhZ2VkVG9BZGQpID8gc3RhdGUudmlzU3RhdGUuc3RhZ2VkVG9BZGQgOiBbXTtcbiAgY29uc3Qgc3RhZ2VkVG9BZGQgPSBbLi4ucHJldmlvdXMsIC4uLnJlc3VsdF07XG5cbiAgcmV0dXJuIGNvbXBvc2VfPEtlcGxlckdsU3RhdGU+KFtcbiAgICBwaWNrXygndmlzU3RhdGUnKShcbiAgICAgIG1lcmdlXyh7XG4gICAgICAgIGZpbGVMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgZmlsZUxvYWRpbmdQcm9ncmVzczogbW9kYWxPcGVuID8ga2VwdExvYWRFcnJvcnMoc3RhdGUudmlzU3RhdGUuZmlsZUxvYWRpbmdQcm9ncmVzcykgOiB7fSxcbiAgICAgICAgc3RhZ2VkVG9BZGQ6IG1vZGFsT3BlbiAmJiBzdGFnZWRUb0FkZC5sZW5ndGggPyBzdGFnZWRUb0FkZCA6IG51bGxcbiAgICAgIH0pXG4gICAgKSxcbiAgICBwaWNrXygndWlTdGF0ZScpKGFwcGx5Xyh1aVN0YXRlTG9hZEZpbGVzU3VjY2Vzc1VwZGF0ZXIsIHBheWxvYWRfKG51bGwpKSlcbiAgXSkoc3RhdGUpO1xufTtcblxuZnVuY3Rpb24gc3RhZ2VkSXRlbUtleShpdGVtKTogc3RyaW5nIHtcbiAgcmV0dXJuIGl0ZW0/Lm1ldGFkYXRhPy5zb3VyY2UgfHwgaXRlbT8uaW5mbz8uaWQgfHwgJyc7XG59XG5cbi8qKlxuICogQWRkIGRhdGFzZXRzIHRvIHRoZSBBZGQgRGF0YSBsaXN0IHdpdGhvdXQgaW50ZXJydXB0aW5nIGEgZmlsZSB0aGF0IGlzIHN0aWxsIHBhcnNpbmcuXG4gKiBAbWVtYmVyb2YgY29tYmluZWRVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYXBwZW5kU3RhZ2VkTG9hZGVkRmlsZXNVcGRhdGVyID0gKFxuICBzdGF0ZTogS2VwbGVyR2xTdGF0ZSxcbiAgYWN0aW9uOiBTdGFnZUxvYWRlZEZpbGVzVXBkYXRlckFjdGlvblxuKTogS2VwbGVyR2xTdGF0ZSA9PiB7XG4gIGlmIChzdGF0ZS51aVN0YXRlLmN1cnJlbnRNb2RhbCAhPT0gQUREX0RBVEFfSUQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgcHJldmlvdXMgPSBBcnJheS5pc0FycmF5KHN0YXRlLnZpc1N0YXRlLnN0YWdlZFRvQWRkKSA/IHN0YXRlLnZpc1N0YXRlLnN0YWdlZFRvQWRkIDogW107XG4gIGNvbnN0IHNlZW4gPSBuZXcgU2V0KHByZXZpb3VzLm1hcChzdGFnZWRJdGVtS2V5KS5maWx0ZXIoQm9vbGVhbikpO1xuICBjb25zdCBuZXh0ID0gKGFjdGlvbi5yZXN1bHQgfHwgW10pLmZpbHRlcihpdGVtID0+IHtcbiAgICBjb25zdCBrZXkgPSBzdGFnZWRJdGVtS2V5KGl0ZW0pO1xuICAgIGlmICgha2V5IHx8IHNlZW4uaGFzKGtleSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgc2Vlbi5hZGQoa2V5KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSk7XG4gIGlmICghbmV4dC5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIGNvbXBvc2VfPEtlcGxlckdsU3RhdGU+KFtcbiAgICBwaWNrXygndmlzU3RhdGUnKShtZXJnZV8oe3N0YWdlZFRvQWRkOiBbLi4ucHJldmlvdXMsIC4uLm5leHRdfSkpXG4gIF0pKHN0YXRlKTtcbn07XG5cbi8qKlxuICogVGhlIGZpcnN0IHBsYWluIGRhdGFzZXQgaW4gYSBjb25maXJtZWQgdXBsb2FkIHJlcGxhY2VzIHRoZSBzZWxlY3RlZCB0YWJsZS5cbiAqIEEga2VwbGVyLmdsIG1hcCBqc29uIGlzIGFkZGVkIGFzIGEgbWFwLiBGdXJ0aGVyIHRhYmxlcyBhcmUgYWRkZWQgYWZ0ZXIgdGhlIHJlcGxhY2VtZW50LlxuICovXG5mdW5jdGlvbiBzcGxpdFJlcGxhY2VtZW50VXBsb2FkKHBheWxvYWRzOiBBZGREYXRhVG9NYXBQYXlsb2FkW10pOiB7XG4gIGRhdGFzZXRUb1VzZTogUHJvdG9EYXRhc2V0IHwgbnVsbDtcbiAgcmVtYWluZGVyOiBBZGREYXRhVG9NYXBQYXlsb2FkW107XG59IHtcbiAgY29uc3QgZGF0YXNldHM6IFByb3RvRGF0YXNldFtdID0gW107XG4gIGNvbnN0IG1hcHM6IEFkZERhdGFUb01hcFBheWxvYWRbXSA9IFtdO1xuICBwYXlsb2Fkcy5mb3JFYWNoKHBheWxvYWQgPT4ge1xuICAgIGlmIChwYXlsb2FkLmNvbmZpZykge1xuICAgICAgbWFwcy5wdXNoKHBheWxvYWQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBsaXN0ID0gKEFycmF5LmlzQXJyYXkocGF5bG9hZC5kYXRhc2V0cykgPyBwYXlsb2FkLmRhdGFzZXRzIDogW3BheWxvYWQuZGF0YXNldHNdKS5maWx0ZXIoXG4gICAgICAoZGF0YXNldCk6IGRhdGFzZXQgaXMgUHJvdG9EYXRhc2V0ID0+IEJvb2xlYW4oZGF0YXNldClcbiAgICApO1xuICAgIGRhdGFzZXRzLnB1c2goLi4ubGlzdCk7XG4gIH0pO1xuICBjb25zdCBbZGF0YXNldFRvVXNlLCAuLi5tb3JlXSA9IGRhdGFzZXRzO1xuICByZXR1cm4ge1xuICAgIGRhdGFzZXRUb1VzZTogZGF0YXNldFRvVXNlID8/IG51bGwsXG4gICAgcmVtYWluZGVyOiBbXG4gICAgICAuLi5tYXBzLFxuICAgICAgLi4uKG1vcmUubGVuZ3RoXG4gICAgICAgID8gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBkYXRhc2V0czogbW9yZSxcbiAgICAgICAgICAgICAgb3B0aW9uczoge2tlZXBFeGlzdGluZ0NvbmZpZzogdHJ1ZSwgY2VudGVyTWFwOiBmYWxzZSwgYXV0b0NyZWF0ZUxheWVyczogZmFsc2V9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICA6IFtdKVxuICAgIF1cbiAgfTtcbn1cblxuLyoqXG4gKiBUdXJuIGEgY29uZmlybWVkIEFkZCBEYXRhIHNlbGVjdGlvbiBpbnRvIGEgZGF0YXNldCByZXBsYWNlbWVudC5cbiAqIExheWVycyBhbmQgZmlsdGVycyBtb3ZlIG9udG8gdGhlIG5ldyB0YWJsZS4gVGhlIG9yaWdpbmFsIHRhYmxlIGlzIGRyb3BwZWQgdW5sZXNzIGFza2VkIHRvIHN0YXkuXG4gKiBAbWVtYmVyb2YgY29tYmluZWRVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgY29uZmlybVJlcGxhY2VEYXRhc2V0VXBkYXRlciA9IChcbiAgc3RhdGU6IEtlcGxlckdsU3RhdGUsXG4gIGFjdGlvbjogQ29uZmlybVJlcGxhY2VEYXRhc2V0VXBkYXRlckFjdGlvblxuKTogS2VwbGVyR2xTdGF0ZSA9PiB7XG4gIGNvbnN0IHBheWxvYWRzID0gZmlsZXNUb0RhdGFQYXlsb2FkKGFjdGlvbi5yZXN1bHQsIHtcbiAgICBrZWVwRXhpc3RpbmdDb25maWc6IHRydWUsXG4gICAgY2VudGVyTWFwOiB0cnVlLFxuICAgIGF1dG9DcmVhdGVMYXllcnM6IGZhbHNlXG4gIH0pO1xuICBjb25zdCBjbGVhcmVkID0gY29tcG9zZV8oW1xuICAgIHBpY2tfKCd2aXNTdGF0ZScpKFxuICAgICAgbWVyZ2VfKHtcbiAgICAgICAgZmlsZUxvYWRpbmc6IGZhbHNlLFxuICAgICAgICBmaWxlTG9hZGluZ1Byb2dyZXNzOiB7fSxcbiAgICAgICAgc3RhZ2VkVG9BZGQ6IG51bGxcbiAgICAgIH0pXG4gICAgKVxuICBdKShzdGF0ZSk7XG5cbiAgY29uc3Qge2RhdGFzZXRUb1VzZSwgcmVtYWluZGVyfSA9IHNwbGl0UmVwbGFjZW1lbnRVcGxvYWQocGF5bG9hZHMpO1xuICBpZiAoZGF0YXNldFRvVXNlPy5pbmZvPy5pZCAmJiBhY3Rpb24uZGF0YXNldFRvUmVwbGFjZUlkKSB7XG4gICAgY29uc3QgcmVwbGFjZWQgPSByZXBsYWNlRGF0YUluTWFwVXBkYXRlcihjbGVhcmVkLCB7XG4gICAgICBwYXlsb2FkOiB7XG4gICAgICAgIGRhdGFzZXRUb1JlcGxhY2VJZDogYWN0aW9uLmRhdGFzZXRUb1JlcGxhY2VJZCxcbiAgICAgICAgZGF0YXNldFRvVXNlLFxuICAgICAgICBvcHRpb25zOiB7ZGVsZXRlT3JpZ2luYWxEYXRhc2V0OiBhY3Rpb24uZGVsZXRlT3JpZ2luYWxEYXRhc2V0ICE9PSBmYWxzZX1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAocmVwbGFjZWQgIT09IGNsZWFyZWQpIHtcbiAgICAgIGlmICghcmVtYWluZGVyLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gcmVwbGFjZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29tcG9zZV8ocmVtYWluZGVyLm1hcChwID0+IGFwcGx5XyhhZGREYXRhVG9NYXBVcGRhdGVyLCBwYXlsb2FkXyhwKSkpKShcbiAgICAgICAgcmVwbGFjZWRcbiAgICAgICkgYXMgS2VwbGVyR2xTdGF0ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29tcG9zZV8ocGF5bG9hZHMubWFwKHAgPT4gYXBwbHlfKGFkZERhdGFUb01hcFVwZGF0ZXIsIHBheWxvYWRfKHApKSkpKFxuICAgIGNsZWFyZWRcbiAgKSBhcyBLZXBsZXJHbFN0YXRlO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZERhdGFUb01hcENvbXBvc2VkID0gYWRkRGF0YVRvTWFwVXBkYXRlcjtcblxuLyoqXG4gKiBIZWxwZXIgd2hpY2ggdXBkYXRlcyBtYXAgb3ZlcmxheSBibGVuZGluZyBtb2RlIGluIHZpc1N0YXRlLFxuICogYnV0IG9ubHkgaWYgaXQncyBub3QgY3VycmVudGx5IGluIHRoZSBgbm9ybWFsYCBtb2RlLlxuICovXG5jb25zdCB1cGRhdGVPdmVybGF5QmxlbmRpbmcgPSBvdmVybGF5QmxlbmRpbmcgPT4gdmlzU3RhdGUgPT4ge1xuICBpZiAodmlzU3RhdGUub3ZlcmxheUJsZW5kaW5nICE9PSBPVkVSTEFZX0JMRU5ESU5HUy5ub3JtYWwudmFsdWUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4udmlzU3RhdGUsXG4gICAgICBvdmVybGF5QmxlbmRpbmdcbiAgICB9O1xuICB9XG4gIHJldHVybiB2aXNTdGF0ZTtcbn07XG5cbi8qKlxuICogSGVscGVyIHdoaWNoIHVwZGF0ZXMgYGRhcmtCYXNlTWFwRW5hYmxlZGAgaW4gYWxsIHRoZSBsYXllcnMgaW4gdmlzU3RhdGUgd2hpY2hcbiAqIGhhdmUgdGhpcyBjb25maWcgc2V0dGluZyAob3IgaW4gb25lIHNwZWNpZmljIGxheWVyIGlmIHRoZSBgbGF5ZXJJZGAgcGFyYW0gaXMgcHJvdmlkZWQpLlxuICovXG5jb25zdCB1cGRhdGVEYXJrQmFzZU1hcExheWVycyA9XG4gIChkYXJrQmFzZU1hcEVuYWJsZWQ6IGJvb2xlYW4sIGxheWVySWQ6IHN0cmluZyB8IG51bGwgPSBudWxsKSA9PlxuICB2aXNTdGF0ZSA9PiAoe1xuICAgIC4uLnZpc1N0YXRlLFxuICAgIGxheWVyczogdmlzU3RhdGUubGF5ZXJzLm1hcChsYXllciA9PiB7XG4gICAgICBpZiAoIWxheWVySWQgfHwgbGF5ZXIuaWQgPT09IGxheWVySWQpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChsYXllci52aXNDb25maWdTZXR0aW5ncywgJ2RhcmtCYXNlTWFwRW5hYmxlZCcpKSB7XG4gICAgICAgICAgY29uc3Qge3Zpc0NvbmZpZ30gPSBsYXllci5jb25maWc7XG4gICAgICAgICAgcmV0dXJuIGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgICAgIHZpc0NvbmZpZzogey4uLnZpc0NvbmZpZywgZGFya0Jhc2VNYXBFbmFibGVkfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbGF5ZXI7XG4gICAgfSlcbiAgfSk7XG5cbi8qKlxuICogVXBkYXRlciB0aGF0IGNoYW5nZXMgdGhlIG1hcCBzdHlsZSBieSBjYWxsaW5nIG1hcFN0eWxlQ2hhbmdlVXBkYXRlciBvbiB2aXNTdGF0ZS5cbiAqIEluIGFkZGl0aW9uIHRvIHRoYXQsIGl0IGRvZXMgdGhlIGZvbGxvd2luZzpcbiAqXG4gKiAgIDEuIFVwZGF0ZSBtYXAgb3ZlcmxheSBibGVuZGluZyBtb2RlIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgY29sb3JNb2RlIG9mIHRoZVxuICogICAgICBiYXNlIG1hcCwgYnV0IG9ubHkgaWYgaXQncyBub3QgaW4gdGhlIGBub3JtYWxgIG1vZGUuXG4gKlxuICogICAyLiBVcGRhdGUgYWxsIHRoZSBsYXllcnMgd2hpY2ggaGF2ZSB0aGUgYGRhcmtCYXNlTWFwRW5hYmxlZGAgY29uZmlnIHNldHRpbmdcbiAqICAgICAgYWRqdXN0aW5nIGl0IGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgY29sb3JNb2RlIG9mIHRoZSBiYXNlIG1hcC5cbiAqXG4gKi9cbmV4cG9ydCBjb25zdCBjb21iaW5lZE1hcFN0eWxlQ2hhbmdlVXBkYXRlciA9IChcbiAgc3RhdGU6IEtlcGxlckdsU3RhdGUsXG4gIGFjdGlvbjogTWFwU3R5bGVDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBLZXBsZXJHbFN0YXRlID0+IHtcbiAgY29uc3Qge3BheWxvYWR9ID0gYWN0aW9uO1xuICBjb25zdCB7bWFwU3R5bGV9ID0gc3RhdGU7XG4gIGNvbnN0IGdldENvbG9yTW9kZSA9IGtleSA9PiBtYXBTdHlsZS5tYXBTdHlsZXNba2V5XT8uY29sb3JNb2RlO1xuICBjb25zdCBwcmV2Q29sb3JNb2RlID0gZ2V0Q29sb3JNb2RlKG1hcFN0eWxlLnN0eWxlVHlwZSk7XG4gIGNvbnN0IG5leHRDb2xvck1vZGUgPSBnZXRDb2xvck1vZGUocGF5bG9hZC5zdHlsZVR5cGUpO1xuICBsZXQge3Zpc1N0YXRlLCBtYXBTdGF0ZX0gPSBzdGF0ZTtcbiAgaWYgKG5leHRDb2xvck1vZGUgIT09IHByZXZDb2xvck1vZGUpIHtcbiAgICBzd2l0Y2ggKG5leHRDb2xvck1vZGUpIHtcbiAgICAgIGNhc2UgQkFTRV9NQVBfQ09MT1JfTU9ERVMuREFSSzpcbiAgICAgICAgdmlzU3RhdGUgPSBjb21wb3NlXyhbXG4gICAgICAgICAgdXBkYXRlT3ZlcmxheUJsZW5kaW5nKE9WRVJMQVlfQkxFTkRJTkdTLnNjcmVlbi52YWx1ZSksXG4gICAgICAgICAgdXBkYXRlRGFya0Jhc2VNYXBMYXllcnModHJ1ZSlcbiAgICAgICAgXSkodmlzU3RhdGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQkFTRV9NQVBfQ09MT1JfTU9ERVMuTElHSFQ6XG4gICAgICAgIHZpc1N0YXRlID0gY29tcG9zZV8oW1xuICAgICAgICAgIHVwZGF0ZU92ZXJsYXlCbGVuZGluZyhPVkVSTEFZX0JMRU5ESU5HUy5kYXJrZW4udmFsdWUpLFxuICAgICAgICAgIHVwZGF0ZURhcmtCYXNlTWFwTGF5ZXJzKGZhbHNlKVxuICAgICAgICBdKSh2aXNTdGF0ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICB9XG4gIH1cblxuICAvLyBVcGRhdGUgZ2xvYmUgY29uZmlnIGNvbG9ycyB3aGVuIHN0eWxlIGNoYW5nZXMgYW5kIGdsb2JlIGlzIGVuYWJsZWRcbiAgaWYgKG1hcFN0YXRlLmdsb2JlPy5lbmFibGVkKSB7XG4gICAgLy8gU3dpdGNoaW5nIGZyb20gXCJObyBCYXNlbWFwXCIgdG8gYSBiYXNlbWFwIC0gcmVzdG9yZSBiYXNlbWFwIHN1Yi10b2dnbGVzXG4gICAgaWYgKHBheWxvYWQuc3R5bGVUeXBlICE9PSBOT19NQVBfSUQgJiYgbWFwU3R5bGUuc3R5bGVUeXBlID09PSBOT19NQVBfSUQpIHtcbiAgICAgIG1hcFN0YXRlID0ge1xuICAgICAgICAuLi5tYXBTdGF0ZSxcbiAgICAgICAgZ2xvYmU6IHtcbiAgICAgICAgICAuLi5tYXBTdGF0ZS5nbG9iZSxcbiAgICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICAgIC4uLm1hcFN0YXRlLmdsb2JlLmNvbmZpZyxcbiAgICAgICAgICAgIGJhc2VtYXA6IHRydWUsXG4gICAgICAgICAgICBsYWJlbHM6IHRydWUsXG4gICAgICAgICAgICBhZG1pbkxpbmVzOiB0cnVlLFxuICAgICAgICAgICAgd2F0ZXI6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIG1hcFN0YXRlID0gc3luY0dsb2JlQ29uZmlnQ29sb3JzVG9TdHlsZShtYXBTdGF0ZSwgbWFwU3R5bGUsIHBheWxvYWQuc3R5bGVUeXBlKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgdmlzU3RhdGUsXG4gICAgbWFwU3RhdGUsXG4gICAgbWFwU3R5bGU6IG1hcFN0eWxlQ2hhbmdlVXBkYXRlcihtYXBTdHlsZSwge3BheWxvYWQ6IHsuLi5wYXlsb2FkfX0pXG4gIH07XG59O1xuXG4vKipcbiAqIERlcml2ZSBnbG9iZSBiYXNlbWFwIGNvbG9ycyAoc3VyZmFjZSAvIHdhdGVyIC8gYWRtaW4gbGluZXMpIGZyb20gYSBtYXAgc3R5bGUgYW5kXG4gKiByZXR1cm4gYW4gdXBkYXRlZCBtYXBTdGF0ZSB3aXRoIHRob3NlIGNvbG9ycyB3cml0dGVuIGludG8gYGdsb2JlLmNvbmZpZ2AuIFVzZWQgYm90aFxuICogd2hlbiB0aGUgYmFzZSBtYXAgc3R5bGUgY2hhbmdlcyBhbmQgd2hlbiBlbnRlcmluZyBnbG9iZSBtb2RlLCBzbyB0aGUgZ2xvYmUgYWx3YXlzXG4gKiByZWZsZWN0cyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGJhc2VtYXAgaW5zdGVhZCBvZiB0aGUgc3RhdGljIERFRkFVTFRfR0xPQkVfQ09ORklHLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3luY0dsb2JlQ29uZmlnQ29sb3JzVG9TdHlsZShcbiAgbWFwU3RhdGU6IE1hcFN0YXRlLFxuICBtYXBTdHlsZTogTWFwU3R5bGUsXG4gIHN0eWxlVHlwZTogc3RyaW5nXG4pOiBNYXBTdGF0ZSB7XG4gIGlmICghbWFwU3RhdGUuZ2xvYmU/LmVuYWJsZWQpIHtcbiAgICByZXR1cm4gbWFwU3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXh0U3R5bGVPYmogPSBtYXBTdHlsZS5tYXBTdHlsZXNbc3R5bGVUeXBlXTtcbiAgY29uc3QgbmV4dEdsb2JlQ29uZmlnID0gey4uLm1hcFN0YXRlLmdsb2JlLmNvbmZpZ307XG5cbiAgaWYgKHN0eWxlVHlwZSA9PT0gTk9fTUFQX0lEKSB7XG4gICAgbmV4dEdsb2JlQ29uZmlnLmJhc2VtYXAgPSBmYWxzZTtcbiAgICBuZXh0R2xvYmVDb25maWcubGFiZWxzID0gZmFsc2U7XG4gICAgbmV4dEdsb2JlQ29uZmlnLmFkbWluTGluZXMgPSBmYWxzZTtcbiAgICBuZXh0R2xvYmVDb25maWcud2F0ZXIgPSBmYWxzZTtcbiAgICBuZXh0R2xvYmVDb25maWcuc3VyZmFjZUNvbG9yID0gREVGQVVMVF9CQVNFTUFQX0NPTE9SLmJhY2tncm91bmRGaWxsQ29sb3I7XG4gICAgbmV4dEdsb2JlQ29uZmlnLndhdGVyQ29sb3IgPSBERUZBVUxUX0JBU0VNQVBfQ09MT1IuYmFzZW1hcFdhdGVyRmlsbENvbG9yO1xuICAgIG5leHRHbG9iZUNvbmZpZy5hZG1pbkxpbmVzQ29sb3IgPSBERUZBVUxUX0JBU0VNQVBfQ09MT1IuYmFzZW1hcEFkbWluTGluZUNvbG9yO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGJhc2VtYXBDb2xvcnMgPSBuZXh0U3R5bGVPYmpcbiAgICAgID8gZ2V0QmFzZW1hcENvbG9yc0ZvclN0eWxlKHN0eWxlVHlwZSwge1xuICAgICAgICAgIHN0eWxlOiBuZXh0U3R5bGVPYmouc3R5bGUsXG4gICAgICAgICAgbGF5ZXJHcm91cHM6IG5leHRTdHlsZU9iai5sYXllckdyb3Vwc1xuICAgICAgICB9KVxuICAgICAgOiAvLyBTdHlsZSBvYmplY3Qgbm90IHlldCBsb2FkZWQgLSB1c2Uga25vd24gcHJlc2V0cyBieSBzdHlsZSB0eXBlXG4gICAgICAgIGdldEJhc2VtYXBDb2xvcnNGb3JTdHlsZShzdHlsZVR5cGUpO1xuICAgIG5leHRHbG9iZUNvbmZpZy5zdXJmYWNlQ29sb3IgPSBiYXNlbWFwQ29sb3JzLmJhY2tncm91bmRGaWxsQ29sb3I7XG4gICAgbmV4dEdsb2JlQ29uZmlnLndhdGVyQ29sb3IgPSBiYXNlbWFwQ29sb3JzLmJhc2VtYXBXYXRlckZpbGxDb2xvcjtcbiAgICBuZXh0R2xvYmVDb25maWcuYWRtaW5MaW5lc0NvbG9yID0gYmFzZW1hcENvbG9ycy5iYXNlbWFwQWRtaW5MaW5lQ29sb3I7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLm1hcFN0YXRlLFxuICAgIGdsb2JlOiB7XG4gICAgICAuLi5tYXBTdGF0ZS5nbG9iZSxcbiAgICAgIGNvbmZpZzogbmV4dEdsb2JlQ29uZmlnXG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIFVwZGF0ZXIgdGhhdCBzd2l0Y2hlcyB0aGUgbWFwIHZpZXcgbW9kZSAoMkQgLyAzRCAvIEdsb2JlKS4gUnVucyB0aGUgYmFzZSBtYXAtc3RhdGVcbiAqIHVwZGF0ZXIgYW5kLCB3aGVuIGVudGVyaW5nIGdsb2JlIG1vZGUsIHN5bmNzIHRoZSBnbG9iZSBiYXNlbWFwIGNvbG9ycyB0byB0aGVcbiAqIGN1cnJlbnRseSBzZWxlY3RlZCBtYXAgc3R5bGUgc28gdGhlIGdsb2JlIGRvZXNuJ3Qgc2hvdyBzdGFsZSBkZWZhdWx0IGNvbG9ycy5cbiAqL1xuZXhwb3J0IGNvbnN0IGNvbWJpbmVkU2V0TWFwVmlld01vZGVVcGRhdGVyID0gKFxuICBzdGF0ZTogS2VwbGVyR2xTdGF0ZSxcbiAgYWN0aW9uOiBNYXBTdGF0ZUFjdGlvbnMuU2V0TWFwVmlld01vZGVVcGRhdGVyQWN0aW9uXG4pOiBLZXBsZXJHbFN0YXRlID0+IHtcbiAgbGV0IG1hcFN0YXRlID0gc2V0TWFwVmlld01vZGVVcGRhdGVyKHN0YXRlLm1hcFN0YXRlLCBhY3Rpb24pO1xuXG4gIGlmIChtYXBTdGF0ZS5nbG9iZT8uZW5hYmxlZCkge1xuICAgIG1hcFN0YXRlID0gc3luY0dsb2JlQ29uZmlnQ29sb3JzVG9TdHlsZShtYXBTdGF0ZSwgc3RhdGUubWFwU3R5bGUsIHN0YXRlLm1hcFN0eWxlLnN0eWxlVHlwZSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIG1hcFN0YXRlXG4gIH07XG59O1xuXG4vKipcbiAqIFVwZGF0ZXIgdGhhdCBjaGFuZ2VzIHRoZSBsYXllciB0eXBlIGJ5IGNhbGxpbmcgYGxheWVyVHlwZUNoYW5nZVVwZGF0ZXJgIG9uIHZpc1N0YXRlLlxuICogSW4gYWRkaXRpb24gdG8gdGhhdCwgaWYgdGhlIG5ldyBsYXllciB0eXBlIGhhcyB0aGUgYGRhcmtCYXNlTWFwRW5hYmxlZGAgY29uZmlnXG4gKiBzZXR0aW5nLCB3ZSBhZGp1c3QgaXQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBjb2xvck1vZGUgb2YgdGhlIGJhc2UgbWFwLnNcbiAqL1xuZXhwb3J0IGNvbnN0IGNvbWJpbmVkTGF5ZXJUeXBlQ2hhbmdlVXBkYXRlciA9IChcbiAgc3RhdGU6IEtlcGxlckdsU3RhdGUsXG4gIGFjdGlvbjogTGF5ZXJUeXBlQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogS2VwbGVyR2xTdGF0ZSA9PiB7XG4gIGxldCB7dmlzU3RhdGV9ID0gc3RhdGU7XG4gIGNvbnN0IG9sZExheWVySW5kZXggPSB2aXNTdGF0ZS5sYXllcnMuZmluZEluZGV4KGxheWVyID0+IGxheWVyID09PSBhY3Rpb24ub2xkTGF5ZXIpO1xuICB2aXNTdGF0ZSA9IGxheWVyVHlwZUNoYW5nZVVwZGF0ZXIodmlzU3RhdGUsIGFjdGlvbik7XG4gIGNvbnN0IG5ld0xheWVyID0gdmlzU3RhdGUubGF5ZXJzW29sZExheWVySW5kZXhdO1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5ld0xheWVyPy52aXNDb25maWdTZXR0aW5ncywgJ2RhcmtCYXNlTWFwRW5hYmxlZCcpKSB7XG4gICAgY29uc3Qge21hcFN0eWxlfSA9IHN0YXRlO1xuICAgIGNvbnN0IHtjb2xvck1vZGV9ID0gbWFwU3R5bGUubWFwU3R5bGVzW21hcFN0eWxlLnN0eWxlVHlwZV07XG4gICAgY29uc3Qge2RhcmtCYXNlTWFwRW5hYmxlZH0gPSBuZXdMYXllci5jb25maWcudmlzQ29uZmlnO1xuICAgIHN3aXRjaCAoY29sb3JNb2RlKSB7XG4gICAgICBjYXNlIEJBU0VfTUFQX0NPTE9SX01PREVTLkRBUks6XG4gICAgICAgIGlmICghZGFya0Jhc2VNYXBFbmFibGVkKSB7XG4gICAgICAgICAgdmlzU3RhdGUgPSB1cGRhdGVEYXJrQmFzZU1hcExheWVycyh0cnVlLCBuZXdMYXllci5pZCkodmlzU3RhdGUpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBCQVNFX01BUF9DT0xPUl9NT0RFUy5MSUdIVDpcbiAgICAgICAgaWYgKGRhcmtCYXNlTWFwRW5hYmxlZCkge1xuICAgICAgICAgIHZpc1N0YXRlID0gdXBkYXRlRGFya0Jhc2VNYXBMYXllcnMoZmFsc2UsIG5ld0xheWVyLmlkKSh2aXNTdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgLy8gZG8gbm90aGluZ1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHZpc1N0YXRlXG4gIH07XG59O1xuXG4vKipcbiAqIE1ha2UgbWFwTGVnZW5kIGFjdGl2ZSB3aGVuIHRvZ2dsZVNwbGl0TWFwIGFjdGlvbiBpcyBjYWxsZWRcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZVNwbGl0TWFwVXBkYXRlciA9IChcbiAgc3RhdGU6IEtlcGxlckdsU3RhdGUsXG4gIGFjdGlvbjogVG9nZ2xlU3BsaXRNYXBVcGRhdGVyQWN0aW9uXG4pOiBLZXBsZXJHbFN0YXRlID0+IHtcbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgdmlzU3RhdGU6IHZpc1N0YXRlVG9nZ2xlU3BsaXRNYXBVcGRhdGVyKHN0YXRlLnZpc1N0YXRlLCBhY3Rpb24pLFxuICAgIHVpU3RhdGU6IHVpU3RhdGVUb2dnbGVTcGxpdE1hcFVwZGF0ZXIoc3RhdGUudWlTdGF0ZSksXG4gICAgbWFwU3RhdGU6IG1hcFN0YXRlVG9nZ2xlU3BsaXRNYXBVcGRhdGVyKHN0YXRlLm1hcFN0YXRlKVxuICB9O1xuXG4gIGNvbnN0IGlzU3BsaXQgPSBuZXdTdGF0ZS52aXNTdGF0ZS5zcGxpdE1hcHMubGVuZ3RoICE9PSAwO1xuICBjb25zdCBpc0xlZ2VuZEFjdGl2ZSA9IG5ld1N0YXRlLnVpU3RhdGUubWFwQ29udHJvbHM/Lm1hcExlZ2VuZD8uYWN0aXZlO1xuICBpZiAoaXNTcGxpdCAmJiAhaXNMZWdlbmRBY3RpdmUpIHtcbiAgICBuZXdTdGF0ZS51aVN0YXRlID0gdG9nZ2xlTWFwQ29udHJvbFVwZGF0ZXIobmV3U3RhdGUudWlTdGF0ZSwge1xuICAgICAgcGF5bG9hZDoge3BhbmVsSWQ6ICdtYXBMZWdlbmQnLCBpbmRleDogYWN0aW9uLnBheWxvYWR9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59O1xuXG4vKipcbiAqIFNldCBtYXAgc3BsaXQgbW9kZSB1cGRhdGVyIC0gY29vcmRpbmF0ZXMgc3RhdGUgY2hhbmdlcyBhY3Jvc3MgdmlzU3RhdGUsIG1hcFN0YXRlLCBhbmQgdWlTdGF0ZVxuICovXG5leHBvcnQgY29uc3Qgc2V0TWFwU3BsaXRNb2RlVXBkYXRlciA9IChcbiAgc3RhdGU6IEtlcGxlckdsU3RhdGUsXG4gIGFjdGlvbjogTWFwU3RhdGVBY3Rpb25zLlNldE1hcFNwbGl0TW9kZVVwZGF0ZXJBY3Rpb25cbik6IEtlcGxlckdsU3RhdGUgPT4ge1xuICBjb25zdCB7bWFwU3BsaXRNb2RlfSA9IGFjdGlvbi5wYXlsb2FkO1xuICBjb25zdCBwcmV2TW9kZSA9IHN0YXRlLm1hcFN0YXRlLm1hcFNwbGl0TW9kZTtcblxuICBpZiAobWFwU3BsaXRNb2RlID09PSBwcmV2TW9kZSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld01hcFN0YXRlID0gbWFwU3RhdGVTZXRNYXBTcGxpdE1vZGVVcGRhdGVyKHN0YXRlLm1hcFN0YXRlLCBhY3Rpb24pO1xuXG4gIGxldCBuZXdWaXNTdGF0ZSA9IHsuLi5zdGF0ZS52aXNTdGF0ZX07XG5cbiAgc3dpdGNoIChtYXBTcGxpdE1vZGUpIHtcbiAgICBjYXNlIE1hcFNwbGl0TW9kZS5TSU5HTEVfTUFQOlxuICAgICAgbmV3VmlzU3RhdGUgPSB7XG4gICAgICAgIC4uLm5ld1Zpc1N0YXRlLFxuICAgICAgICBzcGxpdE1hcHM6IFtdXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBNYXBTcGxpdE1vZGUuRFVBTF9NQVA6XG4gICAgY2FzZSBNYXBTcGxpdE1vZGUuU1dJUEVfQ09NUEFSRTpcbiAgICAgIGlmIChwcmV2TW9kZSA9PT0gTWFwU3BsaXRNb2RlLlNJTkdMRV9NQVApIHtcbiAgICAgICAgbmV3VmlzU3RhdGUgPSB7XG4gICAgICAgICAgLi4ubmV3VmlzU3RhdGUsXG4gICAgICAgICAgc3BsaXRNYXBzOiBjb21wdXRlU3BsaXRNYXBMYXllcnMobmV3VmlzU3RhdGUubGF5ZXJzLCB7XG4gICAgICAgICAgICBkdXBsaWNhdGU6IG1hcFNwbGl0TW9kZSA9PT0gTWFwU3BsaXRNb2RlLlNXSVBFX0NPTVBBUkVcbiAgICAgICAgICB9KVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgbGV0IG5ld1VpU3RhdGUgPSB1aVN0YXRlVG9nZ2xlU3BsaXRNYXBVcGRhdGVyKHN0YXRlLnVpU3RhdGUpO1xuXG4gIGNvbnN0IGlzU3BsaXQgPSBuZXdWaXNTdGF0ZS5zcGxpdE1hcHMubGVuZ3RoICE9PSAwO1xuICBjb25zdCBpc0xlZ2VuZEFjdGl2ZSA9IG5ld1VpU3RhdGUubWFwQ29udHJvbHM/Lm1hcExlZ2VuZD8uYWN0aXZlO1xuICBpZiAoaXNTcGxpdCAmJiAhaXNMZWdlbmRBY3RpdmUpIHtcbiAgICBuZXdVaVN0YXRlID0gdG9nZ2xlTWFwQ29udHJvbFVwZGF0ZXIobmV3VWlTdGF0ZSwge1xuICAgICAgcGF5bG9hZDoge3BhbmVsSWQ6ICdtYXBMZWdlbmQnLCBpbmRleDogMH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbWFwU3RhdGU6IG5ld01hcFN0YXRlLFxuICAgIHZpc1N0YXRlOiBuZXdWaXNTdGF0ZSxcbiAgICB1aVN0YXRlOiBuZXdVaVN0YXRlXG4gIH07XG59O1xuXG5jb25zdCBkZWZhdWx0UmVwbGFjZURhdGFUb01hcE9wdGlvbnMgPSB7XG4gIGtlZXBFeGlzdGluZ0NvbmZpZzogdHJ1ZSxcbiAgY2VudGVyTWFwOiB0cnVlLFxuICBhdXRvQ3JlYXRlTGF5ZXJzOiBmYWxzZVxufTtcblxuLyoqXG4gKiBVcGRhdGVyIHJlcGxhY2UgYSBkYXRhc2V0IGluIHN0YXRlXG4gKi9cbmV4cG9ydCBjb25zdCByZXBsYWNlRGF0YUluTWFwVXBkYXRlciA9IChcbiAgc3RhdGU6IEtlcGxlckdsU3RhdGUsXG4gIHtwYXlsb2FkfToge3BheWxvYWQ6IFJlcGxhY2VEYXRhSW5NYXBQYXlsb2FkfVxuKTogS2VwbGVyR2xTdGF0ZSA9PiB7XG4gIGNvbnN0IHtkYXRhc2V0VG9SZXBsYWNlSWQsIGRhdGFzZXRUb1VzZSwgb3B0aW9ucyA9IHt9fSA9IHBheWxvYWQ7XG4gIGNvbnN0IHtkZWxldGVPcmlnaW5hbERhdGFzZXQgPSB0cnVlLCAuLi5yZXBsYWNlT3B0aW9uc30gPSBvcHRpb25zO1xuICBjb25zdCBhZGREYXRhVG9NYXBPcHRpb25zID0gey4uLmRlZmF1bHRSZXBsYWNlRGF0YVRvTWFwT3B0aW9ucywgLi4ucmVwbGFjZU9wdGlvbnN9O1xuXG4gIC8vIGNoZWNrIGlmIGRhdGFzZXQgaXMgdGhlcmVcbiAgaWYgKCFzdGF0ZS52aXNTdGF0ZS5kYXRhc2V0c1tkYXRhc2V0VG9SZXBsYWNlSWRdKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIC8vIGRhdGFzZXRUb1VzZSBpcyBQcm90b0RhdGFzZXRcbiAgY29uc3QgZGF0YUlkVG9Vc2UgPSBkYXRhc2V0VG9Vc2UuaW5mby5pZDtcbiAgaWYgKCFkYXRhSWRUb1VzZSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICAvLyByZW1vdmUgZGF0YXNldCBhbmQgcHV0IGRlcGVuZGVuY2llcyBpbiB0b0JlTWVyZ2VkXG4gIGNvbnN0IHByZXBhcmVkU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgdmlzU3RhdGU6IHByZXBhcmVTdGF0ZUZvckRhdGFzZXRSZXBsYWNlKHN0YXRlLnZpc1N0YXRlLCBkYXRhc2V0VG9SZXBsYWNlSWQsIGRhdGFJZFRvVXNlLCB7XG4gICAgICBkZWxldGVPcmlnaW5hbERhdGFzZXRcbiAgICB9KVxuICB9O1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IGFkZERhdGFUb01hcFVwZGF0ZXIoXG4gICAgcHJlcGFyZWRTdGF0ZSxcbiAgICBwYXlsb2FkXyh7XG4gICAgICBkYXRhc2V0czogZGF0YXNldFRvVXNlLFxuICAgICAgLy8gc2hvdWxkIHpvb20gdG8gbmV3IGRhdGFzZXRcbiAgICAgIG9wdGlvbnM6IGFkZERhdGFUb01hcE9wdGlvbnNcbiAgICB9KVxuICApO1xuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7O0FBRUEsU0FDRUEsa0JBQWtCLEVBQ2xCQyx1QkFBdUIsSUFBSUMsOEJBQThCLEVBQ3pEQyx1QkFBdUIsRUFDdkJDLHFCQUFxQixJQUFJQyw0QkFBNEIsRUFDckRDLHVCQUF1QixJQUFJQyw4QkFBOEIsUUFDcEQscUJBQXFCO0FBQzVCLFNBQ0VDLG9CQUFvQixJQUFJQyw0QkFBNEIsRUFDcERDLGlCQUFpQixFQUNqQkMsc0JBQXNCLEVBQ3RCUCxxQkFBcUIsSUFBSVEsNkJBQTZCLEVBQ3REQyw2QkFBNkIsUUFDeEIsc0JBQXNCO0FBQzdCLFNBQ0VQLHVCQUF1QixJQUFJUSxxQkFBcUIsRUFDaERWLHFCQUFxQixJQUFJVyw2QkFBNkIsRUFDdERDLHNCQUFzQixJQUFJQyw4QkFBOEIsRUFDeERDLHFCQUFxQixRQUNoQixzQkFBc0I7QUFDN0IsU0FDRUMscUJBQXFCLEVBQ3JCYix1QkFBdUIsSUFBSWMscUJBQXFCLFFBQzNDLHNCQUFzQjtBQUM3QixTQUFRQywyQkFBMkIsRUFBRUMsa0JBQWtCLFFBQU8sdUJBQXVCO0FBRXJGLFNBQVFDLFFBQVEsRUFBRUMsTUFBTSxFQUFFQyxLQUFLLEVBQUVDLEdBQUcsRUFBRUMsUUFBUSxFQUFFQyxNQUFNLEVBQUVDLEtBQUssUUFBTyxvQkFBb0I7QUFJeEYsU0FJRUMsZ0JBQWdCLFFBTVgsb0JBQW9CO0FBRzNCLFNBQVFDLGFBQWEsRUFBRUMscUJBQXFCLFFBQU8sa0JBQWtCO0FBQ3JFLFNBQVFDLGFBQWEsUUFBTyxjQUFjO0FBQzFDLFNBQ0VDLG9CQUFvQixFQUNwQkMsaUJBQWlCLEVBQ2pCQyxTQUFTLEVBQ1RDLFlBQVksRUFDWkMsV0FBVyxRQUNOLHNCQUFzQjtBQUM3QixTQUFRQyx3QkFBd0IsRUFBRUMscUJBQXFCLFFBQU8sMEJBQTBCO0FBa0J4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
|