@kepler.gl/reducers 3.3.0-alpha.13 → 3.3.0-alpha.15
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/map-state-updaters.js +54 -4
- package/dist/cjs/map-state.js +2 -2
- package/dist/cjs/ui-state-updaters.js +73 -29
- package/dist/cjs/ui-state.js +2 -2
- package/dist/cjs/vis-state-merger.js +74 -3
- package/dist/cjs/vis-state-updaters.js +487 -195
- package/dist/cjs/vis-state.js +2 -2
- package/dist/esm/map-state-updaters.js +53 -3
- package/dist/esm/map-state.js +2 -2
- package/dist/esm/ui-state-updaters.js +73 -29
- package/dist/esm/ui-state.js +2 -2
- package/dist/esm/vis-state-merger.js +72 -3
- package/dist/esm/vis-state-updaters.js +480 -192
- package/dist/esm/vis-state.js +2 -2
- package/dist/map-state-updaters.d.ts +1 -0
- package/dist/ui-state-updaters.d.ts +15 -1
- package/dist/vis-state-merger.d.ts +6 -2
- package/dist/vis-state-updaters.d.ts +42 -1
- package/dist/vis-state.d.ts +12 -0
- package/package.json +16 -16
|
@@ -32,7 +32,7 @@ import Task, { disableStackCapturing, withTask } from '@kepler.gl/tasks';
|
|
|
32
32
|
// Tasks
|
|
33
33
|
import { DELAY_TASK, ACTION_TASK, LOAD_FILE_TASK, PROCESS_FILE_DATA, UNWRAP_TASK } from '@kepler.gl/tasks';
|
|
34
34
|
// Actions
|
|
35
|
-
import { addNotification, applyLayerConfig, createNewDatasetSuccess, layerConfigChange, layerTypeChange, layerVisConfigChange, layerVisualChannelConfigChange, loadFileStepSuccess, loadFilesErr, loadFilesSuccess, loadNextFile, nextFileBatch, setFilter, processFileContent, fitBounds as fitMapBounds, toggleLayerForMap, applyFilterConfig, loadColumnStatsSuccess, loadColumnStatsError, refreshDatasetSuccess, refreshDatasetError, refreshDatasetProgress } from '@kepler.gl/actions';
|
|
35
|
+
import { addNotification, applyLayerConfig, createNewDatasetSuccess, layerConfigChange, layerTypeChange, layerVisConfigChange, layerVisualChannelConfigChange, loadFileStepSuccess, loadFilesErr, loadFilesSuccess, loadNextFile, nextFileBatch, setFilter, processFileContent, fitBounds as fitMapBounds, toggleLayerForMap, applyFilterConfig, loadColumnStatsSuccess, loadColumnStatsError, refreshDatasetSuccess, refreshDatasetError, refreshDatasetProgress, setLoadingProgress } from '@kepler.gl/actions';
|
|
36
36
|
|
|
37
37
|
// Utils
|
|
38
38
|
import { FILTER_UPDATER_PROPS, addNewLayersToSplitMap, snapToMarks, applyFilterFieldName, applyTimeFilterEndFieldName, applyFiltersToDatasets, arrayInsert, combineSplitMapsByIndex, computeSplitMapLayers, adjustValueToFilterDomain, errorNotification, editorFeaturesToFeatureCollection, extractRowsInsideFeature, isVectorTileExtractLayer, mergeUserFeatureProperties, toSketchFeature, featureToFilterValue, filterDatasetCPU, generatePolygonFilter, getDefaultFilter, getFilterIdInFeature, getTimeWidgetTitleFormatter, isInRange, isObject, isPlainObject, isRgbColor, parseFieldValue, removeLayerFromSplitMaps, set, updateFilterPlot, removeFilterPlot, isLayerAnimatable, isSideFilter, getApplicationConfig, validateFiltersUpdateDatasets } from '@kepler.gl/utils';
|
|
@@ -42,7 +42,7 @@ import { ANIMATION_WINDOW, BASE_SPEED, COMPARE_TYPES, DEFAULT_TEXT_LABEL, EDITOR
|
|
|
42
42
|
import { LAYER_ID_LENGTH, Layer, LayerClasses } from '@kepler.gl/layers';
|
|
43
43
|
import { apply_, compose_, filterOutById, merge_, payload_, pick_, removeElementAtIndex, swap_ } from './composer-helpers';
|
|
44
44
|
import { isValidMerger, mergeStateFromMergers } from './merger-handler';
|
|
45
|
-
import { VIS_STATE_MERGERS, createLayerFromConfig, parseLayerConfig, serializeFilter, serializeLayer, serializeVisState, validateLayerWithData } from './vis-state-merger';
|
|
45
|
+
import { VIS_STATE_MERGERS, createLayerFromConfig, isSavedLayerConfigV1, parseLayerConfig, serializeFilter, serializeLayer, serializeVisState, validateLayerWithData } from './vis-state-merger';
|
|
46
46
|
import KeplerGLSchema from '@kepler.gl/schemas';
|
|
47
47
|
import { getFilesToParse, loadExternallyHostedDataset, processGeojson } from '@kepler.gl/processors';
|
|
48
48
|
import { assignGpuChannel, copyTableAndUpdate, createNewDataEntry, pinTableColumns, setFilterGpuMode, sortDatasetByColumn } from '@kepler.gl/table';
|
|
@@ -180,6 +180,9 @@ export var INITIAL_VIS_STATE = {
|
|
|
180
180
|
// effects
|
|
181
181
|
effects: [],
|
|
182
182
|
effectOrder: [],
|
|
183
|
+
// charts (enabled by default; gated by enableChartsPanel)
|
|
184
|
+
charts: [],
|
|
185
|
+
chartsToBeMerged: [],
|
|
183
186
|
// annotations
|
|
184
187
|
annotations: [],
|
|
185
188
|
annotationsToBeMerged: [],
|
|
@@ -215,6 +218,7 @@ export var INITIAL_VIS_STATE = {
|
|
|
215
218
|
fileLoadingProgress: {},
|
|
216
219
|
// for loading datasets
|
|
217
220
|
loadingIndicatorValue: 0,
|
|
221
|
+
loadingProgress: {},
|
|
218
222
|
loaders: [],
|
|
219
223
|
loadOptions: {},
|
|
220
224
|
// visStateMergers
|
|
@@ -288,9 +292,9 @@ export function applyLayerConfigUpdater(state, action) {
|
|
|
288
292
|
var oldLayerId = action.oldLayerId,
|
|
289
293
|
newLayerConfig = action.newLayerConfig,
|
|
290
294
|
layerIndex = action.layerIndex;
|
|
291
|
-
|
|
292
|
-
//
|
|
293
|
-
parseLayerConfig(state.schema, newLayerConfig);
|
|
295
|
+
// Saved configs have a visualChannels sibling; parsed/editor JSON folds those
|
|
296
|
+
// fields into config. Re-parsing the latter drops colorField and resets the scale.
|
|
297
|
+
var newParsedLayer = isSavedLayerConfigV1(newLayerConfig) ? parseLayerConfig(state.schema, newLayerConfig) : newLayerConfig;
|
|
294
298
|
var oldLayer = state.layers.find(function (l) {
|
|
295
299
|
return l.id === oldLayerId;
|
|
296
300
|
});
|
|
@@ -1697,7 +1701,9 @@ export function removeLayerUpdater(state, _ref9) {
|
|
|
1697
1701
|
splitMaps: removeLayerFromSplitMaps(state.splitMaps, layerToRemove)
|
|
1698
1702
|
// TODO: update filters, create helper to remove layer form filter (remove layerid and dataid) if mapped
|
|
1699
1703
|
});
|
|
1700
|
-
return updateAnimationDomain(newState)
|
|
1704
|
+
return updateAnimationDomain(removeChartsAndFilters(newState, function (chart) {
|
|
1705
|
+
return isLayerChartConfig(chart) && chart.layerId === layerToRemove.id;
|
|
1706
|
+
}));
|
|
1701
1707
|
}
|
|
1702
1708
|
|
|
1703
1709
|
/**
|
|
@@ -2148,16 +2154,169 @@ export var updateEffectUpdater = function updateEffectUpdater(state, _ref12) {
|
|
|
2148
2154
|
effectOrder: effectOrder
|
|
2149
2155
|
});
|
|
2150
2156
|
};
|
|
2157
|
+
function isLayerChartConfig(chart) {
|
|
2158
|
+
return chart.type === 'layerChart';
|
|
2159
|
+
}
|
|
2160
|
+
function mergeChartConfig(chart, props) {
|
|
2161
|
+
return _objectSpread(_objectSpread(_objectSpread({}, chart), props), {}, {
|
|
2162
|
+
display: _objectSpread(_objectSpread({}, chart.display), props.display || {}),
|
|
2163
|
+
chartDisplay: _objectSpread(_objectSpread({}, chart.chartDisplay), props.chartDisplay || {})
|
|
2164
|
+
});
|
|
2165
|
+
}
|
|
2166
|
+
function axisFieldIfPresent(axis, fieldNames) {
|
|
2167
|
+
var _axis$field;
|
|
2168
|
+
if (!(axis !== null && axis !== void 0 && (_axis$field = axis.field) !== null && _axis$field !== void 0 && _axis$field.name) || fieldNames.has(axis.field.name)) {
|
|
2169
|
+
return axis;
|
|
2170
|
+
}
|
|
2171
|
+
return _objectSpread(_objectSpread({}, axis), {}, {
|
|
2172
|
+
field: null,
|
|
2173
|
+
title: null
|
|
2174
|
+
});
|
|
2175
|
+
}
|
|
2176
|
+
function dropMissingChartFields(chart, dataset) {
|
|
2177
|
+
var fieldNames = new Set(((dataset === null || dataset === void 0 ? void 0 : dataset.fields) || []).map(function (field) {
|
|
2178
|
+
return field.name;
|
|
2179
|
+
}));
|
|
2180
|
+
var next = chart;
|
|
2181
|
+
return mergeChartConfig(chart, {
|
|
2182
|
+
xAxis: axisFieldIfPresent(next.xAxis, fieldNames),
|
|
2183
|
+
yAxis: axisFieldIfPresent(next.yAxis, fieldNames),
|
|
2184
|
+
axis: axisFieldIfPresent(next.axis, fieldNames),
|
|
2185
|
+
groupBy: axisFieldIfPresent(next.groupBy, fieldNames),
|
|
2186
|
+
value: axisFieldIfPresent(next.value, fieldNames)
|
|
2187
|
+
});
|
|
2188
|
+
}
|
|
2189
|
+
function removeChartsAndFilters(state, shouldRemove) {
|
|
2190
|
+
var charts = state.charts || [];
|
|
2191
|
+
var removed = charts.filter(shouldRemove);
|
|
2192
|
+
if (!removed.length) {
|
|
2193
|
+
return state;
|
|
2194
|
+
}
|
|
2195
|
+
var removedIds = new Set(removed.map(function (chart) {
|
|
2196
|
+
return chart.id;
|
|
2197
|
+
}));
|
|
2198
|
+
var filterIds = new Set(removed.flatMap(function (chart) {
|
|
2199
|
+
var _chart$crossFilter;
|
|
2200
|
+
var id = (_chart$crossFilter = chart.crossFilter) === null || _chart$crossFilter === void 0 ? void 0 : _chart$crossFilter.filterId;
|
|
2201
|
+
return id ? [id, "".concat(id, "-x"), "".concat(id, "-y")] : [];
|
|
2202
|
+
}));
|
|
2203
|
+
var nextState = _objectSpread(_objectSpread({}, state), {}, {
|
|
2204
|
+
charts: charts.filter(function (chart) {
|
|
2205
|
+
return !removedIds.has(chart.id);
|
|
2206
|
+
})
|
|
2207
|
+
});
|
|
2208
|
+
if (filterIds.size) {
|
|
2209
|
+
nextState = nextState.filters.reduceRight(function (accu, filter, idx) {
|
|
2210
|
+
return filterIds.has(filter.id) ? removeFilterUpdater(accu, {
|
|
2211
|
+
idx: idx
|
|
2212
|
+
}) : accu;
|
|
2213
|
+
}, nextState);
|
|
2214
|
+
}
|
|
2215
|
+
return nextState;
|
|
2216
|
+
}
|
|
2217
|
+
|
|
2218
|
+
/**
|
|
2219
|
+
* Add a chart
|
|
2220
|
+
* @memberof visStateUpdaters
|
|
2221
|
+
* @public
|
|
2222
|
+
*/
|
|
2223
|
+
export var addChartUpdater = function addChartUpdater(state, _ref13) {
|
|
2224
|
+
var _chart$display$isConf, _chart$display;
|
|
2225
|
+
var chart = _ref13.chart;
|
|
2226
|
+
if (!(chart !== null && chart !== void 0 && chart.id)) {
|
|
2227
|
+
return state;
|
|
2228
|
+
}
|
|
2229
|
+
if ((state.charts || []).some(function (existing) {
|
|
2230
|
+
return existing.id === chart.id;
|
|
2231
|
+
})) {
|
|
2232
|
+
return state;
|
|
2233
|
+
}
|
|
2234
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
2235
|
+
charts: [].concat(_toConsumableArray((state.charts || []).map(function (existing) {
|
|
2236
|
+
return _objectSpread(_objectSpread({}, existing), {}, {
|
|
2237
|
+
display: _objectSpread(_objectSpread({}, existing.display), {}, {
|
|
2238
|
+
isConfigActive: false
|
|
2239
|
+
})
|
|
2240
|
+
});
|
|
2241
|
+
})), [_objectSpread(_objectSpread({}, chart), {}, {
|
|
2242
|
+
display: _objectSpread(_objectSpread({}, chart.display), {}, {
|
|
2243
|
+
isConfigActive: (_chart$display$isConf = (_chart$display = chart.display) === null || _chart$display === void 0 ? void 0 : _chart$display.isConfigActive) !== null && _chart$display$isConf !== void 0 ? _chart$display$isConf : false
|
|
2244
|
+
})
|
|
2245
|
+
})])
|
|
2246
|
+
});
|
|
2247
|
+
};
|
|
2248
|
+
|
|
2249
|
+
/**
|
|
2250
|
+
* Update a chart
|
|
2251
|
+
* @memberof visStateUpdaters
|
|
2252
|
+
* @public
|
|
2253
|
+
*/
|
|
2254
|
+
export var updateChartUpdater = function updateChartUpdater(state, _ref14) {
|
|
2255
|
+
var _next$crossFilter2, _prev$crossFilter, _prev$crossFilter2, _next$crossFilter3;
|
|
2256
|
+
var id = _ref14.id,
|
|
2257
|
+
props = _ref14.props;
|
|
2258
|
+
var idx = (state.charts || []).findIndex(function (chart) {
|
|
2259
|
+
return chart.id === id;
|
|
2260
|
+
});
|
|
2261
|
+
if (idx < 0) {
|
|
2262
|
+
return state;
|
|
2263
|
+
}
|
|
2264
|
+
var prev = state.charts[idx];
|
|
2265
|
+
var dataIdChanged = typeof props.dataId === 'string' && props.dataId !== prev.dataId;
|
|
2266
|
+
var layerIdChanged = isLayerChartConfig(prev) && typeof props.layerId === 'string' && props.layerId !== prev.layerId;
|
|
2267
|
+
var next = mergeChartConfig(prev, props);
|
|
2268
|
+
if (dataIdChanged || layerIdChanged) {
|
|
2269
|
+
var _next$crossFilter;
|
|
2270
|
+
var dataId = next.dataId || undefined;
|
|
2271
|
+
next = dropMissingChartFields(next, dataId ? state.datasets[dataId] : undefined);
|
|
2272
|
+
if ((_next$crossFilter = next.crossFilter) !== null && _next$crossFilter !== void 0 && _next$crossFilter.enabled) {
|
|
2273
|
+
next = mergeChartConfig(next, {
|
|
2274
|
+
crossFilter: _objectSpread(_objectSpread({}, next.crossFilter), {}, {
|
|
2275
|
+
enabled: false,
|
|
2276
|
+
value: {},
|
|
2277
|
+
fieldNames: {}
|
|
2278
|
+
})
|
|
2279
|
+
});
|
|
2280
|
+
}
|
|
2281
|
+
}
|
|
2282
|
+
var charts = _toConsumableArray(state.charts);
|
|
2283
|
+
charts[idx] = next;
|
|
2284
|
+
var nextState = _objectSpread(_objectSpread({}, state), {}, {
|
|
2285
|
+
charts: charts
|
|
2286
|
+
});
|
|
2287
|
+
var filterId = ((_next$crossFilter2 = next.crossFilter) === null || _next$crossFilter2 === void 0 ? void 0 : _next$crossFilter2.filterId) || ((_prev$crossFilter = prev.crossFilter) === null || _prev$crossFilter === void 0 ? void 0 : _prev$crossFilter.filterId);
|
|
2288
|
+
if ((_prev$crossFilter2 = prev.crossFilter) !== null && _prev$crossFilter2 !== void 0 && _prev$crossFilter2.enabled && !((_next$crossFilter3 = next.crossFilter) !== null && _next$crossFilter3 !== void 0 && _next$crossFilter3.enabled) && filterId) {
|
|
2289
|
+
var ownedFilterIds = new Set([filterId, "".concat(filterId, "-x"), "".concat(filterId, "-y")]);
|
|
2290
|
+
nextState = nextState.filters.reduceRight(function (accu, filter, idx) {
|
|
2291
|
+
return ownedFilterIds.has(filter.id) ? removeFilterUpdater(accu, {
|
|
2292
|
+
idx: idx
|
|
2293
|
+
}) : accu;
|
|
2294
|
+
}, nextState);
|
|
2295
|
+
}
|
|
2296
|
+
return nextState;
|
|
2297
|
+
};
|
|
2298
|
+
|
|
2299
|
+
/**
|
|
2300
|
+
* Remove a chart and any cross-filter it owns
|
|
2301
|
+
* @memberof visStateUpdaters
|
|
2302
|
+
* @public
|
|
2303
|
+
*/
|
|
2304
|
+
export var removeChartUpdater = function removeChartUpdater(state, _ref15) {
|
|
2305
|
+
var id = _ref15.id;
|
|
2306
|
+
return removeChartsAndFilters(state, function (chart) {
|
|
2307
|
+
return chart.id === id;
|
|
2308
|
+
});
|
|
2309
|
+
};
|
|
2151
2310
|
|
|
2152
2311
|
// ANNOTATION UPDATERS
|
|
2153
2312
|
|
|
2154
2313
|
function makeNewAnnotation(config) {
|
|
2155
|
-
var _config$kind,
|
|
2314
|
+
var _config$kind, _ref16, _config$textSide, _ref17, _config$textVerticalP, _config$id, _config$isVisible, _config$autoSize, _config$autoSizeY, _config$anchorPoint, _config$label, _config$lineColor, _config$lineWidth, _config$textWidth, _config$textHeight, _config$textVerticalA, _armLength, _armLength2, _armLength3, _radiusInMeters;
|
|
2156
2315
|
var kind = (_config$kind = config === null || config === void 0 ? void 0 : config.kind) !== null && _config$kind !== void 0 ? _config$kind : INITIAL_ANNOTATION_KIND;
|
|
2157
2316
|
var providedAngle = Number.isFinite(config === null || config === void 0 ? void 0 : config.angle) ? config.angle : undefined;
|
|
2158
2317
|
var derivedFromAngle = providedAngle != null ? textPlacementFromAngle(providedAngle) : undefined;
|
|
2159
|
-
var textSide = (
|
|
2160
|
-
var textVerticalPosition = (
|
|
2318
|
+
var textSide = (_ref16 = (_config$textSide = config === null || config === void 0 ? void 0 : config.textSide) !== null && _config$textSide !== void 0 ? _config$textSide : derivedFromAngle === null || derivedFromAngle === void 0 ? void 0 : derivedFromAngle.side) !== null && _ref16 !== void 0 ? _ref16 : kind === AnnotationKind.TEXT ? undefined : INITIAL_ANNOTATION_TEXT_SIDE;
|
|
2319
|
+
var textVerticalPosition = (_ref17 = (_config$textVerticalP = config === null || config === void 0 ? void 0 : config.textVerticalPosition) !== null && _config$textVerticalP !== void 0 ? _config$textVerticalP : derivedFromAngle === null || derivedFromAngle === void 0 ? void 0 : derivedFromAngle.vertical) !== null && _ref17 !== void 0 ? _ref17 : kind === AnnotationKind.TEXT ? undefined : INITIAL_ANNOTATION_TEXT_VERTICAL_POSITION;
|
|
2161
2320
|
var base = _objectSpread(_objectSpread(_objectSpread({
|
|
2162
2321
|
id: (_config$id = config === null || config === void 0 ? void 0 : config.id) !== null && _config$id !== void 0 ? _config$id : generateHashId(6),
|
|
2163
2322
|
kind: kind,
|
|
@@ -2226,8 +2385,8 @@ export var addAnnotationUpdater = function addAnnotationUpdater(state, action) {
|
|
|
2226
2385
|
* @memberof visStateUpdaters
|
|
2227
2386
|
* @public
|
|
2228
2387
|
*/
|
|
2229
|
-
export var removeAnnotationUpdater = function removeAnnotationUpdater(state,
|
|
2230
|
-
var id =
|
|
2388
|
+
export var removeAnnotationUpdater = function removeAnnotationUpdater(state, _ref18) {
|
|
2389
|
+
var id = _ref18.id;
|
|
2231
2390
|
return _objectSpread(_objectSpread({}, state), {}, {
|
|
2232
2391
|
annotations: state.annotations.filter(function (a) {
|
|
2233
2392
|
return a.id !== id;
|
|
@@ -2242,9 +2401,9 @@ export var removeAnnotationUpdater = function removeAnnotationUpdater(state, _re
|
|
|
2242
2401
|
* @memberof visStateUpdaters
|
|
2243
2402
|
* @public
|
|
2244
2403
|
*/
|
|
2245
|
-
export var updateAnnotationUpdater = function updateAnnotationUpdater(state,
|
|
2246
|
-
var id =
|
|
2247
|
-
config =
|
|
2404
|
+
export var updateAnnotationUpdater = function updateAnnotationUpdater(state, _ref19) {
|
|
2405
|
+
var id = _ref19.id,
|
|
2406
|
+
config = _ref19.config;
|
|
2248
2407
|
var idx = state.annotations.findIndex(function (a) {
|
|
2249
2408
|
return a.id === id;
|
|
2250
2409
|
});
|
|
@@ -2271,8 +2430,8 @@ export var updateAnnotationUpdater = function updateAnnotationUpdater(state, _re
|
|
|
2271
2430
|
* @memberof visStateUpdaters
|
|
2272
2431
|
* @public
|
|
2273
2432
|
*/
|
|
2274
|
-
export var duplicateAnnotationUpdater = function duplicateAnnotationUpdater(state,
|
|
2275
|
-
var id =
|
|
2433
|
+
export var duplicateAnnotationUpdater = function duplicateAnnotationUpdater(state, _ref20) {
|
|
2434
|
+
var id = _ref20.id;
|
|
2276
2435
|
var original = state.annotations.find(function (a) {
|
|
2277
2436
|
return a.id === id;
|
|
2278
2437
|
});
|
|
@@ -2296,9 +2455,9 @@ export var duplicateAnnotationUpdater = function duplicateAnnotationUpdater(stat
|
|
|
2296
2455
|
* @memberof visStateUpdaters
|
|
2297
2456
|
* @public
|
|
2298
2457
|
*/
|
|
2299
|
-
export var setSelectedAnnotationUpdater = function setSelectedAnnotationUpdater(state,
|
|
2300
|
-
var id =
|
|
2301
|
-
isEditingText =
|
|
2458
|
+
export var setSelectedAnnotationUpdater = function setSelectedAnnotationUpdater(state, _ref21) {
|
|
2459
|
+
var id = _ref21.id,
|
|
2460
|
+
isEditingText = _ref21.isEditingText;
|
|
2302
2461
|
if (id === state.selectedAnnotationId && (isEditingText !== null && isEditingText !== void 0 ? isEditingText : false) === state.isEditingAnnotationText) {
|
|
2303
2462
|
return state;
|
|
2304
2463
|
}
|
|
@@ -2365,12 +2524,20 @@ export function removeDatasetUpdater(state, action) {
|
|
|
2365
2524
|
newState = _objectSpread(_objectSpread({}, newState), {}, {
|
|
2366
2525
|
filters: filters
|
|
2367
2526
|
});
|
|
2368
|
-
return removeDatasetFromInteractionConfig(newState, {
|
|
2527
|
+
return removeChartsAndFilters(removeDatasetFromInteractionConfig(newState, {
|
|
2369
2528
|
dataId: datasetKey
|
|
2529
|
+
}), function (chart) {
|
|
2530
|
+
if (chart.dataId === datasetKey) {
|
|
2531
|
+
return true;
|
|
2532
|
+
}
|
|
2533
|
+
if (isLayerChartConfig(chart)) {
|
|
2534
|
+
return layersToRemove.includes(chart.layerId);
|
|
2535
|
+
}
|
|
2536
|
+
return false;
|
|
2370
2537
|
});
|
|
2371
2538
|
}
|
|
2372
|
-
function removeDatasetFromInteractionConfig(state,
|
|
2373
|
-
var dataId =
|
|
2539
|
+
function removeDatasetFromInteractionConfig(state, _ref22) {
|
|
2540
|
+
var dataId = _ref22.dataId;
|
|
2374
2541
|
var interactionConfig = state.interactionConfig;
|
|
2375
2542
|
var _interactionConfig = interactionConfig,
|
|
2376
2543
|
tooltip = _interactionConfig.tooltip;
|
|
@@ -2455,12 +2622,12 @@ export var resetMapConfigUpdater = function resetMapConfigUpdater(state) {
|
|
|
2455
2622
|
* @memberof visStateUpdaters
|
|
2456
2623
|
* @public
|
|
2457
2624
|
*/
|
|
2458
|
-
export var receiveMapConfigUpdater = function receiveMapConfigUpdater(state,
|
|
2459
|
-
var
|
|
2460
|
-
|
|
2461
|
-
config =
|
|
2462
|
-
|
|
2463
|
-
options =
|
|
2625
|
+
export var receiveMapConfigUpdater = function receiveMapConfigUpdater(state, _ref23) {
|
|
2626
|
+
var _ref23$payload = _ref23.payload,
|
|
2627
|
+
_ref23$payload$config = _ref23$payload.config,
|
|
2628
|
+
config = _ref23$payload$config === void 0 ? {} : _ref23$payload$config,
|
|
2629
|
+
_ref23$payload$option = _ref23$payload.options,
|
|
2630
|
+
options = _ref23$payload$option === void 0 ? {} : _ref23$payload$option;
|
|
2464
2631
|
if (!config.visState) {
|
|
2465
2632
|
return state;
|
|
2466
2633
|
}
|
|
@@ -2565,8 +2732,8 @@ export var mapClickUpdater = function mapClickUpdater(state, action) {
|
|
|
2565
2732
|
* @memberof visStateUpdaters
|
|
2566
2733
|
* @public
|
|
2567
2734
|
*/
|
|
2568
|
-
export var mouseMoveUpdater = function mouseMoveUpdater(state,
|
|
2569
|
-
var evt =
|
|
2735
|
+
export var mouseMoveUpdater = function mouseMoveUpdater(state, _ref24) {
|
|
2736
|
+
var evt = _ref24.evt;
|
|
2570
2737
|
if (Object.values(state.interactionConfig).some(function (config) {
|
|
2571
2738
|
return config.enabled;
|
|
2572
2739
|
})) {
|
|
@@ -2600,9 +2767,9 @@ export var toggleSplitMapUpdater = function toggleSplitMapUpdater(state, action)
|
|
|
2600
2767
|
* @memberof visStateUpdaters
|
|
2601
2768
|
* @public
|
|
2602
2769
|
*/
|
|
2603
|
-
export var toggleLayerForMapUpdater = function toggleLayerForMapUpdater(state,
|
|
2604
|
-
var mapIndex =
|
|
2605
|
-
layerId =
|
|
2770
|
+
export var toggleLayerForMapUpdater = function toggleLayerForMapUpdater(state, _ref25) {
|
|
2771
|
+
var mapIndex = _ref25.mapIndex,
|
|
2772
|
+
layerId = _ref25.layerId;
|
|
2606
2773
|
var splitMaps = state.splitMaps;
|
|
2607
2774
|
return _objectSpread(_objectSpread({}, state), {}, {
|
|
2608
2775
|
splitMaps: splitMaps.map(function (sm, i) {
|
|
@@ -2624,33 +2791,35 @@ function hydrateExternallyHostedProtoDataset(_x) {
|
|
|
2624
2791
|
return _hydrateExternallyHostedProtoDataset.apply(this, arguments);
|
|
2625
2792
|
}
|
|
2626
2793
|
function _hydrateExternallyHostedProtoDataset() {
|
|
2627
|
-
_hydrateExternallyHostedProtoDataset = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(
|
|
2628
|
-
var _dataset$
|
|
2629
|
-
var loaded, _dataset$
|
|
2794
|
+
_hydrateExternallyHostedProtoDataset = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(_ref26) {
|
|
2795
|
+
var _dataset$metadata7, _dataset$metadata8;
|
|
2796
|
+
var dataset, onProgress, loaded, _dataset$metadata9;
|
|
2630
2797
|
return _regeneratorRuntime.wrap(function _callee2$(_context2) {
|
|
2631
2798
|
while (1) switch (_context2.prev = _context2.next) {
|
|
2632
2799
|
case 0:
|
|
2800
|
+
dataset = _ref26.arg, onProgress = _ref26.onProgress;
|
|
2633
2801
|
if (needsExternallyHostedHydrate(dataset)) {
|
|
2634
|
-
_context2.next =
|
|
2802
|
+
_context2.next = 3;
|
|
2635
2803
|
break;
|
|
2636
2804
|
}
|
|
2637
2805
|
return _context2.abrupt("return", dataset);
|
|
2638
|
-
case
|
|
2639
|
-
_context2.next =
|
|
2806
|
+
case 3:
|
|
2807
|
+
_context2.next = 5;
|
|
2640
2808
|
return loadExternallyHostedDataset({
|
|
2641
|
-
source: (_dataset$
|
|
2809
|
+
source: (_dataset$metadata7 = dataset.metadata) === null || _dataset$metadata7 === void 0 ? void 0 : _dataset$metadata7.source,
|
|
2642
2810
|
format: getRemoteSourceFormat(dataset.metadata),
|
|
2643
|
-
size: typeof ((_dataset$
|
|
2644
|
-
bypassCache: getDatasetRefreshIntervalMs(dataset.metadata) > 0
|
|
2811
|
+
size: typeof ((_dataset$metadata8 = dataset.metadata) === null || _dataset$metadata8 === void 0 ? void 0 : _dataset$metadata8.size) === 'number' ? dataset.metadata.size : undefined,
|
|
2812
|
+
bypassCache: getDatasetRefreshIntervalMs(dataset.metadata) > 0,
|
|
2813
|
+
onProgress: onProgress
|
|
2645
2814
|
});
|
|
2646
|
-
case
|
|
2815
|
+
case 5:
|
|
2647
2816
|
loaded = _context2.sent;
|
|
2648
2817
|
if (loaded.data) {
|
|
2649
|
-
_context2.next =
|
|
2818
|
+
_context2.next = 8;
|
|
2650
2819
|
break;
|
|
2651
2820
|
}
|
|
2652
|
-
throw new Error("No data loaded from ".concat((_dataset$
|
|
2653
|
-
case
|
|
2821
|
+
throw new Error("No data loaded from ".concat((_dataset$metadata9 = dataset.metadata) === null || _dataset$metadata9 === void 0 ? void 0 : _dataset$metadata9.source));
|
|
2822
|
+
case 8:
|
|
2654
2823
|
return _context2.abrupt("return", _objectSpread(_objectSpread({}, dataset), {}, {
|
|
2655
2824
|
data: loaded.data,
|
|
2656
2825
|
metadata: _objectSpread(_objectSpread(_objectSpread({}, dataset.metadata), {}, {
|
|
@@ -2663,7 +2832,7 @@ function _hydrateExternallyHostedProtoDataset() {
|
|
|
2663
2832
|
refreshStatus: 'idle'
|
|
2664
2833
|
})
|
|
2665
2834
|
}));
|
|
2666
|
-
case
|
|
2835
|
+
case 9:
|
|
2667
2836
|
case "end":
|
|
2668
2837
|
return _context2.stop();
|
|
2669
2838
|
}
|
|
@@ -2671,9 +2840,9 @@ function _hydrateExternallyHostedProtoDataset() {
|
|
|
2671
2840
|
}));
|
|
2672
2841
|
return _hydrateExternallyHostedProtoDataset.apply(this, arguments);
|
|
2673
2842
|
}
|
|
2674
|
-
var HYDRATE_EXTERNALLY_HOSTED_DATASET_TASK = Task.
|
|
2843
|
+
var HYDRATE_EXTERNALLY_HOSTED_DATASET_TASK = Task.fromPromiseWithProgress(hydrateExternallyHostedProtoDataset, 'HYDRATE_EXTERNALLY_HOSTED_DATASET_TASK');
|
|
2675
2844
|
var FAIL_CREATE_DATASET_TASK = Task.fromPromise(/*#__PURE__*/function () {
|
|
2676
|
-
var
|
|
2845
|
+
var _ref27 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(message) {
|
|
2677
2846
|
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
2678
2847
|
while (1) switch (_context.prev = _context.next) {
|
|
2679
2848
|
case 0:
|
|
@@ -2685,18 +2854,57 @@ var FAIL_CREATE_DATASET_TASK = Task.fromPromise(/*#__PURE__*/function () {
|
|
|
2685
2854
|
}, _callee);
|
|
2686
2855
|
}));
|
|
2687
2856
|
return function (_x2) {
|
|
2688
|
-
return
|
|
2857
|
+
return _ref27.apply(this, arguments);
|
|
2689
2858
|
};
|
|
2690
2859
|
}(), 'FAIL_CREATE_DATASET_TASK');
|
|
2860
|
+
function getDatasetProgressId(dataset) {
|
|
2861
|
+
var _dataset$info2, _dataset$metadata2;
|
|
2862
|
+
var index = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
|
2863
|
+
if (typeof ((_dataset$info2 = dataset.info) === null || _dataset$info2 === void 0 ? void 0 : _dataset$info2.id) === 'string' && dataset.info.id) {
|
|
2864
|
+
return dataset.info.id;
|
|
2865
|
+
}
|
|
2866
|
+
if (typeof ((_dataset$metadata2 = dataset.metadata) === null || _dataset$metadata2 === void 0 ? void 0 : _dataset$metadata2.source) === 'string' && dataset.metadata.source) {
|
|
2867
|
+
return dataset.metadata.source;
|
|
2868
|
+
}
|
|
2869
|
+
return "dataset-".concat(index);
|
|
2870
|
+
}
|
|
2691
2871
|
function createNewDataEntryTask(dataset, datasets) {
|
|
2692
2872
|
if (!needsExternallyHostedHydrate(dataset)) {
|
|
2693
2873
|
return createNewDataEntry(dataset, datasets);
|
|
2694
2874
|
}
|
|
2695
|
-
|
|
2875
|
+
var progressId = getDatasetProgressId(dataset);
|
|
2876
|
+
return HYDRATE_EXTERNALLY_HOSTED_DATASET_TASK({
|
|
2877
|
+
arg: dataset,
|
|
2878
|
+
onProgress: function onProgress(progress) {
|
|
2879
|
+
var _progress$percent;
|
|
2880
|
+
return setLoadingProgress(progressId, Math.round(((_progress$percent = progress === null || progress === void 0 ? void 0 : progress.percent) !== null && _progress$percent !== void 0 ? _progress$percent : 0) * 100));
|
|
2881
|
+
}
|
|
2882
|
+
}).chain(function (hydrated) {
|
|
2696
2883
|
var task = createNewDataEntry(hydrated, datasets);
|
|
2697
2884
|
return task || FAIL_CREATE_DATASET_TASK('Failed to create a new dataset due to data verification errors');
|
|
2698
2885
|
});
|
|
2699
2886
|
}
|
|
2887
|
+
function clearLoadingProgress(state, ids) {
|
|
2888
|
+
var current = state.loadingProgress || {};
|
|
2889
|
+
if (!Object.keys(current).length) {
|
|
2890
|
+
return state;
|
|
2891
|
+
}
|
|
2892
|
+
if ((state.loadingIndicatorValue || 0) <= 0) {
|
|
2893
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
2894
|
+
loadingProgress: {}
|
|
2895
|
+
});
|
|
2896
|
+
}
|
|
2897
|
+
if (!(ids !== null && ids !== void 0 && ids.length)) {
|
|
2898
|
+
return state;
|
|
2899
|
+
}
|
|
2900
|
+
var next = _objectSpread({}, current);
|
|
2901
|
+
ids.forEach(function (id) {
|
|
2902
|
+
delete next[id];
|
|
2903
|
+
});
|
|
2904
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
2905
|
+
loadingProgress: next
|
|
2906
|
+
});
|
|
2907
|
+
}
|
|
2700
2908
|
function patchDatasetMetadata(dataset, patch) {
|
|
2701
2909
|
return copyTableAndUpdate(dataset, {
|
|
2702
2910
|
metadata: _objectSpread(_objectSpread({}, dataset.metadata), patch)
|
|
@@ -2706,12 +2914,12 @@ function refreshExternallyHostedTable(_x3) {
|
|
|
2706
2914
|
return _refreshExternallyHostedTable.apply(this, arguments);
|
|
2707
2915
|
}
|
|
2708
2916
|
function _refreshExternallyHostedTable() {
|
|
2709
|
-
_refreshExternallyHostedTable = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(
|
|
2917
|
+
_refreshExternallyHostedTable = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(_ref28) {
|
|
2710
2918
|
var metadata, onProgress;
|
|
2711
2919
|
return _regeneratorRuntime.wrap(function _callee3$(_context3) {
|
|
2712
2920
|
while (1) switch (_context3.prev = _context3.next) {
|
|
2713
2921
|
case 0:
|
|
2714
|
-
metadata =
|
|
2922
|
+
metadata = _ref28.arg, onProgress = _ref28.onProgress;
|
|
2715
2923
|
return _context3.abrupt("return", loadExternallyHostedDataset(_objectSpread(_objectSpread({}, metadata), {}, {
|
|
2716
2924
|
onProgress: onProgress,
|
|
2717
2925
|
bypassCache: true
|
|
@@ -2732,14 +2940,14 @@ var REFRESH_EXTERNALLY_HOSTED_DATASET_TASK = Task.fromPromiseWithProgress(refres
|
|
|
2732
2940
|
* @memberof visStateUpdaters
|
|
2733
2941
|
* @public
|
|
2734
2942
|
*/
|
|
2735
|
-
export function refreshDatasetUpdater(state,
|
|
2736
|
-
var _dataset$
|
|
2737
|
-
var dataId =
|
|
2943
|
+
export function refreshDatasetUpdater(state, _ref29) {
|
|
2944
|
+
var _dataset$metadata3, _dataset$metadata4;
|
|
2945
|
+
var dataId = _ref29.dataId;
|
|
2738
2946
|
var dataset = state.datasets[dataId];
|
|
2739
|
-
if (!dataset || dataset.type !== DatasetType.EXTERNALLY_HOSTED || typeof ((_dataset$
|
|
2947
|
+
if (!dataset || dataset.type !== DatasetType.EXTERNALLY_HOSTED || typeof ((_dataset$metadata3 = dataset.metadata) === null || _dataset$metadata3 === void 0 ? void 0 : _dataset$metadata3.source) !== 'string') {
|
|
2740
2948
|
return state;
|
|
2741
2949
|
}
|
|
2742
|
-
if (((_dataset$
|
|
2950
|
+
if (((_dataset$metadata4 = dataset.metadata) === null || _dataset$metadata4 === void 0 ? void 0 : _dataset$metadata4.refreshStatus) === 'loading') {
|
|
2743
2951
|
return state;
|
|
2744
2952
|
}
|
|
2745
2953
|
var nextDataset = patchDatasetMetadata(dataset, {
|
|
@@ -2758,8 +2966,8 @@ export function refreshDatasetUpdater(state, _ref25) {
|
|
|
2758
2966
|
lastModified: typeof nextDataset.metadata.lastModified === 'string' ? nextDataset.metadata.lastModified : undefined
|
|
2759
2967
|
},
|
|
2760
2968
|
onProgress: function onProgress(progress) {
|
|
2761
|
-
var _progress$
|
|
2762
|
-
return refreshDatasetProgress(dataId, Math.round(((_progress$
|
|
2969
|
+
var _progress$percent2;
|
|
2970
|
+
return refreshDatasetProgress(dataId, Math.round(((_progress$percent2 = progress === null || progress === void 0 ? void 0 : progress.percent) !== null && _progress$percent2 !== void 0 ? _progress$percent2 : 0) * 100));
|
|
2763
2971
|
}
|
|
2764
2972
|
}).bimap(function (result) {
|
|
2765
2973
|
return refreshDatasetSuccess(dataId, result);
|
|
@@ -2773,16 +2981,16 @@ export function refreshDatasetUpdater(state, _ref25) {
|
|
|
2773
2981
|
* @memberof visStateUpdaters
|
|
2774
2982
|
* @public
|
|
2775
2983
|
*/
|
|
2776
|
-
export function refreshDatasetProgressUpdater(state,
|
|
2777
|
-
var _dataset$
|
|
2778
|
-
var dataId =
|
|
2779
|
-
percent =
|
|
2984
|
+
export function refreshDatasetProgressUpdater(state, _ref30) {
|
|
2985
|
+
var _dataset$metadata5, _dataset$metadata6;
|
|
2986
|
+
var dataId = _ref30.dataId,
|
|
2987
|
+
percent = _ref30.percent;
|
|
2780
2988
|
var dataset = state.datasets[dataId];
|
|
2781
|
-
if (!dataset || ((_dataset$
|
|
2989
|
+
if (!dataset || ((_dataset$metadata5 = dataset.metadata) === null || _dataset$metadata5 === void 0 ? void 0 : _dataset$metadata5.refreshStatus) !== 'loading') {
|
|
2782
2990
|
return state;
|
|
2783
2991
|
}
|
|
2784
2992
|
var nextPercent = Number.isFinite(percent) ? Math.max(0, Math.min(100, Math.round(percent))) : 0;
|
|
2785
|
-
if (((_dataset$
|
|
2993
|
+
if (((_dataset$metadata6 = dataset.metadata) === null || _dataset$metadata6 === void 0 ? void 0 : _dataset$metadata6.refreshProgress) === nextPercent) {
|
|
2786
2994
|
return state;
|
|
2787
2995
|
}
|
|
2788
2996
|
return _objectSpread(_objectSpread({}, state), {}, {
|
|
@@ -2866,10 +3074,10 @@ function rebindLayersAndFiltersAfterSchemaChange(state, dataId, datasets) {
|
|
|
2866
3074
|
* @memberof visStateUpdaters
|
|
2867
3075
|
* @public
|
|
2868
3076
|
*/
|
|
2869
|
-
export function refreshDatasetSuccessUpdater(state,
|
|
3077
|
+
export function refreshDatasetSuccessUpdater(state, _ref31) {
|
|
2870
3078
|
var _result$data;
|
|
2871
|
-
var dataId =
|
|
2872
|
-
result =
|
|
3079
|
+
var dataId = _ref31.dataId,
|
|
3080
|
+
result = _ref31.result;
|
|
2873
3081
|
var dataset = state.datasets[dataId];
|
|
2874
3082
|
if (!dataset) {
|
|
2875
3083
|
return state;
|
|
@@ -2963,10 +3171,10 @@ function normalizeDatasetRows(rows, fields) {
|
|
|
2963
3171
|
* @memberof visStateUpdaters
|
|
2964
3172
|
* @public
|
|
2965
3173
|
*/
|
|
2966
|
-
export function addToDatasetUpdater(state,
|
|
2967
|
-
var dataId =
|
|
2968
|
-
rows =
|
|
2969
|
-
options =
|
|
3174
|
+
export function addToDatasetUpdater(state, _ref32) {
|
|
3175
|
+
var dataId = _ref32.dataId,
|
|
3176
|
+
rows = _ref32.rows,
|
|
3177
|
+
options = _ref32.options;
|
|
2970
3178
|
var dataset = state.datasets[dataId];
|
|
2971
3179
|
if (!dataset) {
|
|
2972
3180
|
return state;
|
|
@@ -2991,10 +3199,10 @@ export function addToDatasetUpdater(state, _ref28) {
|
|
|
2991
3199
|
* @memberof visStateUpdaters
|
|
2992
3200
|
* @public
|
|
2993
3201
|
*/
|
|
2994
|
-
export function removeFromDatasetUpdater(state,
|
|
2995
|
-
var dataId =
|
|
2996
|
-
rowIndexes =
|
|
2997
|
-
byField =
|
|
3202
|
+
export function removeFromDatasetUpdater(state, _ref33) {
|
|
3203
|
+
var dataId = _ref33.dataId,
|
|
3204
|
+
rowIndexes = _ref33.rowIndexes,
|
|
3205
|
+
byField = _ref33.byField;
|
|
2998
3206
|
var dataset = state.datasets[dataId];
|
|
2999
3207
|
if (!dataset) {
|
|
3000
3208
|
return state;
|
|
@@ -3017,9 +3225,9 @@ export function removeFromDatasetUpdater(state, _ref29) {
|
|
|
3017
3225
|
* @memberof visStateUpdaters
|
|
3018
3226
|
* @public
|
|
3019
3227
|
*/
|
|
3020
|
-
export function refreshDatasetErrorUpdater(state,
|
|
3021
|
-
var dataId =
|
|
3022
|
-
error =
|
|
3228
|
+
export function refreshDatasetErrorUpdater(state, _ref34) {
|
|
3229
|
+
var dataId = _ref34.dataId,
|
|
3230
|
+
error = _ref34.error;
|
|
3023
3231
|
var dataset = state.datasets[dataId];
|
|
3024
3232
|
if (!dataset) {
|
|
3025
3233
|
return state;
|
|
@@ -3059,13 +3267,18 @@ export var updateVisDataUpdater = function updateVisDataUpdater(state, action) {
|
|
|
3059
3267
|
}
|
|
3060
3268
|
var createDatasetTasks = [];
|
|
3061
3269
|
var notificationTasks = [];
|
|
3062
|
-
|
|
3063
|
-
|
|
3064
|
-
|
|
3065
|
-
|
|
3066
|
-
|
|
3270
|
+
var hydrateProgress = {};
|
|
3271
|
+
datasets.forEach(function (_ref35, datasetIndex) {
|
|
3272
|
+
var _ref35$info = _ref35.info,
|
|
3273
|
+
info = _ref35$info === void 0 ? {} : _ref35$info,
|
|
3274
|
+
rest = _objectWithoutProperties(_ref35, _excluded2);
|
|
3275
|
+
var proto = _objectSpread({
|
|
3067
3276
|
info: info
|
|
3068
|
-
}, rest)
|
|
3277
|
+
}, rest);
|
|
3278
|
+
if (needsExternallyHostedHydrate(proto)) {
|
|
3279
|
+
hydrateProgress[getDatasetProgressId(proto, datasetIndex)] = 0;
|
|
3280
|
+
}
|
|
3281
|
+
var task = createNewDataEntryTask(proto, state.datasets);
|
|
3069
3282
|
if (task) {
|
|
3070
3283
|
createDatasetTasks.push(task);
|
|
3071
3284
|
} else {
|
|
@@ -3077,10 +3290,12 @@ export var updateVisDataUpdater = function updateVisDataUpdater(state, action) {
|
|
|
3077
3290
|
}));
|
|
3078
3291
|
}
|
|
3079
3292
|
});
|
|
3293
|
+
var progressIds = Object.keys(hydrateProgress);
|
|
3080
3294
|
var datasetsAllSettledTask = createDatasetTasks.length ? Task.allSettled(createDatasetTasks).map(function (results) {
|
|
3081
3295
|
return createNewDatasetSuccess({
|
|
3082
3296
|
results: results,
|
|
3083
|
-
addToMapOptions: options
|
|
3297
|
+
addToMapOptions: options,
|
|
3298
|
+
progressIds: progressIds
|
|
3084
3299
|
});
|
|
3085
3300
|
}) : null;
|
|
3086
3301
|
if (datasetsAllSettledTask) {
|
|
@@ -3088,13 +3303,19 @@ export var updateVisDataUpdater = function updateVisDataUpdater(state, action) {
|
|
|
3088
3303
|
change: 1,
|
|
3089
3304
|
type: ''
|
|
3090
3305
|
}));
|
|
3306
|
+
if (progressIds.length) {
|
|
3307
|
+
updatedState = _objectSpread(_objectSpread({}, updatedState), {}, {
|
|
3308
|
+
loadingProgress: _objectSpread(_objectSpread({}, updatedState.loadingProgress), hydrateProgress)
|
|
3309
|
+
});
|
|
3310
|
+
}
|
|
3091
3311
|
}
|
|
3092
3312
|
return withTask(updatedState, [].concat(_toConsumableArray(datasetsAllSettledTask ? [datasetsAllSettledTask] : []), notificationTasks));
|
|
3093
3313
|
};
|
|
3094
3314
|
export var createNewDatasetSuccessUpdater = function createNewDatasetSuccessUpdater(state, action) {
|
|
3095
3315
|
var _action$payload = action.payload,
|
|
3096
3316
|
results = _action$payload.results,
|
|
3097
|
-
addToMapOptions = _action$payload.addToMapOptions
|
|
3317
|
+
addToMapOptions = _action$payload.addToMapOptions,
|
|
3318
|
+
progressIds = _action$payload.progressIds;
|
|
3098
3319
|
var notificationTasks = [];
|
|
3099
3320
|
var newDataEntries = results.reduce(function (accu, result, idx) {
|
|
3100
3321
|
if (result.status === 'fulfilled') {
|
|
@@ -3133,9 +3354,9 @@ export var createNewDatasetSuccessUpdater = function createNewDatasetSuccessUpda
|
|
|
3133
3354
|
mergers: datasetMergers,
|
|
3134
3355
|
postMergerPayload: postMergerPayload
|
|
3135
3356
|
});
|
|
3136
|
-
return withTask(setLoadingIndicatorUpdater(updatedState, payload_({
|
|
3357
|
+
return withTask(clearLoadingProgress(setLoadingIndicatorUpdater(updatedState, payload_({
|
|
3137
3358
|
change: -1
|
|
3138
|
-
})), notificationTasks);
|
|
3359
|
+
})), progressIds), notificationTasks);
|
|
3139
3360
|
};
|
|
3140
3361
|
|
|
3141
3362
|
/**
|
|
@@ -3366,10 +3587,10 @@ function reconcileLayerWithNewSchema(layer, renames, newTable, state) {
|
|
|
3366
3587
|
// follow renamed columns
|
|
3367
3588
|
var columnsPatch = {};
|
|
3368
3589
|
var columnsChanged = false;
|
|
3369
|
-
Object.entries(layer.config.columns || {}).forEach(function (
|
|
3370
|
-
var
|
|
3371
|
-
ckey =
|
|
3372
|
-
col =
|
|
3590
|
+
Object.entries(layer.config.columns || {}).forEach(function (_ref36) {
|
|
3591
|
+
var _ref37 = _slicedToArray(_ref36, 2),
|
|
3592
|
+
ckey = _ref37[0],
|
|
3593
|
+
col = _ref37[1];
|
|
3373
3594
|
if (col !== null && col !== void 0 && col.value && renames[col.value]) {
|
|
3374
3595
|
columnsPatch[ckey] = _objectSpread(_objectSpread({}, col), {}, {
|
|
3375
3596
|
value: renames[col.value]
|
|
@@ -3382,8 +3603,8 @@ function reconcileLayerWithNewSchema(layer, renames, newTable, state) {
|
|
|
3382
3603
|
}
|
|
3383
3604
|
|
|
3384
3605
|
// follow renamed visual-channel fields (colorField, sizeField, ...)
|
|
3385
|
-
Object.values(layer.visualChannels).forEach(function (
|
|
3386
|
-
var field =
|
|
3606
|
+
Object.values(layer.visualChannels).forEach(function (_ref38) {
|
|
3607
|
+
var field = _ref38.field;
|
|
3387
3608
|
var fieldConfig = layer.config[field];
|
|
3388
3609
|
if (fieldConfig !== null && fieldConfig !== void 0 && fieldConfig.name && renames[fieldConfig.name]) {
|
|
3389
3610
|
configPatch[field] = _objectSpread(_objectSpread({}, fieldConfig), {}, {
|
|
@@ -3773,14 +3994,14 @@ export function parseProgress() {
|
|
|
3773
3994
|
* @memberof visStateUpdaters
|
|
3774
3995
|
* @public
|
|
3775
3996
|
*/
|
|
3776
|
-
export var nextFileBatchUpdater = function nextFileBatchUpdater(state,
|
|
3997
|
+
export var nextFileBatchUpdater = function nextFileBatchUpdater(state, _ref39) {
|
|
3777
3998
|
var _accumulated$data;
|
|
3778
|
-
var
|
|
3779
|
-
gen =
|
|
3780
|
-
fileName =
|
|
3781
|
-
progress =
|
|
3782
|
-
accumulated =
|
|
3783
|
-
onFinish =
|
|
3999
|
+
var _ref39$payload = _ref39.payload,
|
|
4000
|
+
gen = _ref39$payload.gen,
|
|
4001
|
+
fileName = _ref39$payload.fileName,
|
|
4002
|
+
progress = _ref39$payload.progress,
|
|
4003
|
+
accumulated = _ref39$payload.accumulated,
|
|
4004
|
+
onFinish = _ref39$payload.onFinish;
|
|
3784
4005
|
var stateWithProgress = updateFileLoadingProgressUpdater(state, {
|
|
3785
4006
|
fileName: fileName,
|
|
3786
4007
|
progress: parseProgress(state.fileLoadingProgress[fileName], progress)
|
|
@@ -3797,9 +4018,9 @@ export var nextFileBatchUpdater = function nextFileBatchUpdater(state, _ref35) {
|
|
|
3797
4018
|
return loadFilesSuccess(result);
|
|
3798
4019
|
}, function (err) {
|
|
3799
4020
|
return loadFilesErr(fileName, err);
|
|
3800
|
-
})] : []), [UNWRAP_TASK(gen.next()).bimap(function (
|
|
3801
|
-
var value =
|
|
3802
|
-
done =
|
|
4021
|
+
})] : []), [UNWRAP_TASK(gen.next()).bimap(function (_ref40) {
|
|
4022
|
+
var value = _ref40.value,
|
|
4023
|
+
done = _ref40.done;
|
|
3803
4024
|
return done ? onFinish(accumulated) : nextFileBatch({
|
|
3804
4025
|
gen: gen,
|
|
3805
4026
|
fileName: fileName,
|
|
@@ -3817,9 +4038,9 @@ export var nextFileBatchUpdater = function nextFileBatchUpdater(state, _ref35) {
|
|
|
3817
4038
|
* @memberof visStateUpdaters
|
|
3818
4039
|
* @public
|
|
3819
4040
|
*/
|
|
3820
|
-
export var loadFilesErrUpdater = function loadFilesErrUpdater(state,
|
|
3821
|
-
var error =
|
|
3822
|
-
fileName =
|
|
4041
|
+
export var loadFilesErrUpdater = function loadFilesErrUpdater(state, _ref41) {
|
|
4042
|
+
var error = _ref41.error,
|
|
4043
|
+
fileName = _ref41.fileName;
|
|
3823
4044
|
// update ui with error message
|
|
3824
4045
|
Console.warn(error);
|
|
3825
4046
|
if (!state.fileLoading) {
|
|
@@ -3847,8 +4068,8 @@ export var loadFilesErrUpdater = function loadFilesErrUpdater(state, _ref37) {
|
|
|
3847
4068
|
* @memberof visStateUpdaters
|
|
3848
4069
|
* @public
|
|
3849
4070
|
*/
|
|
3850
|
-
export var applyCPUFilterUpdater = function applyCPUFilterUpdater(state,
|
|
3851
|
-
var dataId =
|
|
4071
|
+
export var applyCPUFilterUpdater = function applyCPUFilterUpdater(state, _ref42) {
|
|
4072
|
+
var dataId = _ref42.dataId;
|
|
3852
4073
|
// apply cpuFilter
|
|
3853
4074
|
var dataIds = toArray(dataId);
|
|
3854
4075
|
return dataIds.reduce(function (accu, id) {
|
|
@@ -3907,9 +4128,9 @@ export function initialFileLoadingProgress(file, index) {
|
|
|
3907
4128
|
error: null
|
|
3908
4129
|
});
|
|
3909
4130
|
}
|
|
3910
|
-
export function updateFileLoadingProgressUpdater(state,
|
|
3911
|
-
var fileName =
|
|
3912
|
-
progress =
|
|
4131
|
+
export function updateFileLoadingProgressUpdater(state, _ref44) {
|
|
4132
|
+
var fileName = _ref44.fileName,
|
|
4133
|
+
progress = _ref44.progress;
|
|
3913
4134
|
// @ts-expect-error
|
|
3914
4135
|
return pick_('fileLoadingProgress')(pick_(fileName)(merge_(progress)))(state);
|
|
3915
4136
|
}
|
|
@@ -4001,8 +4222,8 @@ export function updateAnimationDomain(state) {
|
|
|
4001
4222
|
* Update the status of the editor
|
|
4002
4223
|
* @memberof visStateUpdaters
|
|
4003
4224
|
*/
|
|
4004
|
-
export var setEditorModeUpdater = function setEditorModeUpdater(state,
|
|
4005
|
-
var mode =
|
|
4225
|
+
export var setEditorModeUpdater = function setEditorModeUpdater(state, _ref45) {
|
|
4226
|
+
var mode = _ref45.mode;
|
|
4006
4227
|
var sketchesEnabled = getApplicationConfig().enableDrawOnMapSketches;
|
|
4007
4228
|
if (!sketchesEnabled && (mode === EDITOR_MODES.DRAW_POINT || mode === EDITOR_MODES.DRAW_LINESTRING)) {
|
|
4008
4229
|
return state;
|
|
@@ -4020,10 +4241,10 @@ export var setEditorModeUpdater = function setEditorModeUpdater(state, _ref41) {
|
|
|
4020
4241
|
* Update editor features
|
|
4021
4242
|
* @memberof visStateUpdaters
|
|
4022
4243
|
*/
|
|
4023
|
-
export function setFeaturesUpdater(state,
|
|
4244
|
+
export function setFeaturesUpdater(state, _ref46) {
|
|
4024
4245
|
var _lastFeature$properti, _lastFeature$properti2;
|
|
4025
|
-
var
|
|
4026
|
-
features =
|
|
4246
|
+
var _ref46$features = _ref46.features,
|
|
4247
|
+
features = _ref46$features === void 0 ? [] : _ref46$features;
|
|
4027
4248
|
var lastFeature = features.length && features[features.length - 1];
|
|
4028
4249
|
var newState = _objectSpread(_objectSpread({}, state), {}, {
|
|
4029
4250
|
editor: _objectSpread(_objectSpread({}, state.editor), {}, {
|
|
@@ -4096,10 +4317,10 @@ function findEditorFeature(state, feature) {
|
|
|
4096
4317
|
* Set user-facing GeoJSON properties on a sketch or polygon-filter feature.
|
|
4097
4318
|
* @memberof visStateUpdaters
|
|
4098
4319
|
*/
|
|
4099
|
-
export function setEditorFeaturePropertiesUpdater(state,
|
|
4320
|
+
export function setEditorFeaturePropertiesUpdater(state, _ref47) {
|
|
4100
4321
|
var _state$editor$selecte2;
|
|
4101
|
-
var feature =
|
|
4102
|
-
properties =
|
|
4322
|
+
var feature = _ref47.feature,
|
|
4323
|
+
properties = _ref47.properties;
|
|
4103
4324
|
if (!getApplicationConfig().enableDrawOnMapSketches) {
|
|
4104
4325
|
return state;
|
|
4105
4326
|
}
|
|
@@ -4138,9 +4359,9 @@ export function setEditorFeaturePropertiesUpdater(state, _ref43) {
|
|
|
4138
4359
|
* Set the current selected feature
|
|
4139
4360
|
* @memberof uiStateUpdaters
|
|
4140
4361
|
*/
|
|
4141
|
-
export var setSelectedFeatureUpdater = function setSelectedFeatureUpdater(state,
|
|
4142
|
-
var feature =
|
|
4143
|
-
selectionContext =
|
|
4362
|
+
export var setSelectedFeatureUpdater = function setSelectedFeatureUpdater(state, _ref48) {
|
|
4363
|
+
var feature = _ref48.feature,
|
|
4364
|
+
selectionContext = _ref48.selectionContext;
|
|
4144
4365
|
// add bbox for polygon filter to speed up filtering
|
|
4145
4366
|
var selectedFeature = feature;
|
|
4146
4367
|
if (feature !== null && feature !== void 0 && feature.properties) {
|
|
@@ -4162,8 +4383,8 @@ export var setSelectedFeatureUpdater = function setSelectedFeatureUpdater(state,
|
|
|
4162
4383
|
* Delete existing feature from filters
|
|
4163
4384
|
* @memberof visStateUpdaters
|
|
4164
4385
|
*/
|
|
4165
|
-
export function deleteFeatureUpdater(state,
|
|
4166
|
-
var feature =
|
|
4386
|
+
export function deleteFeatureUpdater(state, _ref49) {
|
|
4387
|
+
var feature = _ref49.feature;
|
|
4167
4388
|
if (!feature) {
|
|
4168
4389
|
return state;
|
|
4169
4390
|
}
|
|
@@ -4308,10 +4529,10 @@ export function setPolygonFilterAllLayersUpdater(state, payload) {
|
|
|
4308
4529
|
* @memberof visStateUpdaters
|
|
4309
4530
|
* @public
|
|
4310
4531
|
*/
|
|
4311
|
-
export function sortTableColumnUpdater(state,
|
|
4312
|
-
var dataId =
|
|
4313
|
-
column =
|
|
4314
|
-
mode =
|
|
4532
|
+
export function sortTableColumnUpdater(state, _ref50) {
|
|
4533
|
+
var dataId = _ref50.dataId,
|
|
4534
|
+
column = _ref50.column,
|
|
4535
|
+
mode = _ref50.mode;
|
|
4315
4536
|
var dataset = state.datasets[dataId];
|
|
4316
4537
|
if (!dataset) {
|
|
4317
4538
|
return state;
|
|
@@ -4332,9 +4553,9 @@ export function sortTableColumnUpdater(state, _ref46) {
|
|
|
4332
4553
|
* @memberof visStateUpdaters
|
|
4333
4554
|
* @public
|
|
4334
4555
|
*/
|
|
4335
|
-
export function pinTableColumnUpdater(state,
|
|
4336
|
-
var dataId =
|
|
4337
|
-
column =
|
|
4556
|
+
export function pinTableColumnUpdater(state, _ref51) {
|
|
4557
|
+
var dataId = _ref51.dataId,
|
|
4558
|
+
column = _ref51.column;
|
|
4338
4559
|
var dataset = state.datasets[dataId];
|
|
4339
4560
|
if (!dataset) {
|
|
4340
4561
|
return state;
|
|
@@ -4348,9 +4569,9 @@ export function pinTableColumnUpdater(state, _ref47) {
|
|
|
4348
4569
|
* @memberof visStateUpdaters
|
|
4349
4570
|
* @public
|
|
4350
4571
|
*/
|
|
4351
|
-
export function copyTableColumnUpdater(state,
|
|
4352
|
-
var dataId =
|
|
4353
|
-
column =
|
|
4572
|
+
export function copyTableColumnUpdater(state, _ref52) {
|
|
4573
|
+
var dataId = _ref52.dataId,
|
|
4574
|
+
column = _ref52.column;
|
|
4354
4575
|
var dataset = state.datasets[dataId];
|
|
4355
4576
|
if (!dataset) {
|
|
4356
4577
|
return state;
|
|
@@ -4374,9 +4595,9 @@ export function copyTableColumnUpdater(state, _ref48) {
|
|
|
4374
4595
|
* @memberof visStateUpdaters
|
|
4375
4596
|
* @public
|
|
4376
4597
|
*/
|
|
4377
|
-
export function setColumnDisplayFormatUpdater(state,
|
|
4378
|
-
var dataId =
|
|
4379
|
-
formats =
|
|
4598
|
+
export function setColumnDisplayFormatUpdater(state, _ref53) {
|
|
4599
|
+
var dataId = _ref53.dataId,
|
|
4600
|
+
formats = _ref53.formats;
|
|
4380
4601
|
var dataset = state.datasets[dataId];
|
|
4381
4602
|
if (!dataset) {
|
|
4382
4603
|
return state;
|
|
@@ -4427,12 +4648,12 @@ function requestDatasetColumnStatistics(_x4) {
|
|
|
4427
4648
|
return _requestDatasetColumnStatistics.apply(this, arguments);
|
|
4428
4649
|
}
|
|
4429
4650
|
function _requestDatasetColumnStatistics() {
|
|
4430
|
-
_requestDatasetColumnStatistics = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4(
|
|
4651
|
+
_requestDatasetColumnStatistics = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4(_ref54) {
|
|
4431
4652
|
var dataset, field, filterProps, mappedValue, values, result;
|
|
4432
4653
|
return _regeneratorRuntime.wrap(function _callee4$(_context4) {
|
|
4433
4654
|
while (1) switch (_context4.prev = _context4.next) {
|
|
4434
4655
|
case 0:
|
|
4435
|
-
dataset =
|
|
4656
|
+
dataset = _ref54.dataset, field = _ref54.field;
|
|
4436
4657
|
_context4.next = 3;
|
|
4437
4658
|
return yieldForPaint();
|
|
4438
4659
|
case 3:
|
|
@@ -4465,9 +4686,9 @@ var LOAD_COLUMN_STATS_TASK = Task.fromPromise(requestDatasetColumnStatistics, 'L
|
|
|
4465
4686
|
* @memberof visStateUpdaters
|
|
4466
4687
|
* @public
|
|
4467
4688
|
*/
|
|
4468
|
-
export function loadColumnStatsUpdater(state,
|
|
4469
|
-
var dataId =
|
|
4470
|
-
fieldName =
|
|
4689
|
+
export function loadColumnStatsUpdater(state, _ref55) {
|
|
4690
|
+
var dataId = _ref55.dataId,
|
|
4691
|
+
fieldName = _ref55.fieldName;
|
|
4471
4692
|
var fieldNamesToLoad = toArray(fieldName);
|
|
4472
4693
|
var dataset = state.datasets[dataId];
|
|
4473
4694
|
var fieldsToLoad = dataset === null || dataset === void 0 ? void 0 : dataset.fields.filter(function (f) {
|
|
@@ -4488,9 +4709,9 @@ export function loadColumnStatsUpdater(state, _ref51) {
|
|
|
4488
4709
|
return LOAD_COLUMN_STATS_TASK({
|
|
4489
4710
|
dataset: newDataset,
|
|
4490
4711
|
field: f
|
|
4491
|
-
}).bimap(function (
|
|
4492
|
-
var result =
|
|
4493
|
-
filterProps =
|
|
4712
|
+
}).bimap(function (_ref56) {
|
|
4713
|
+
var result = _ref56.result,
|
|
4714
|
+
filterProps = _ref56.filterProps;
|
|
4494
4715
|
return loadColumnStatsSuccess(newDataset.id, f.name, result, filterProps);
|
|
4495
4716
|
}, function (error) {
|
|
4496
4717
|
return loadColumnStatsError(newDataset.id, f.name, error);
|
|
@@ -4505,11 +4726,11 @@ export function loadColumnStatsUpdater(state, _ref51) {
|
|
|
4505
4726
|
* @memberof visStateUpdaters
|
|
4506
4727
|
* @public
|
|
4507
4728
|
*/
|
|
4508
|
-
export function loadColumnStatsSuccessUpdater(state,
|
|
4509
|
-
var result =
|
|
4510
|
-
filterProps =
|
|
4511
|
-
dataId =
|
|
4512
|
-
fieldName =
|
|
4729
|
+
export function loadColumnStatsSuccessUpdater(state, _ref57) {
|
|
4730
|
+
var result = _ref57.result,
|
|
4731
|
+
filterProps = _ref57.filterProps,
|
|
4732
|
+
dataId = _ref57.dataId,
|
|
4733
|
+
fieldName = _ref57.fieldName;
|
|
4513
4734
|
var dataset = state.datasets[dataId];
|
|
4514
4735
|
var field = ((dataset === null || dataset === void 0 ? void 0 : dataset.fields) || []).find(function (f) {
|
|
4515
4736
|
return f.name === fieldName;
|
|
@@ -4537,10 +4758,10 @@ export function loadColumnStatsSuccessUpdater(state, _ref53) {
|
|
|
4537
4758
|
* @memberof visStateUpdaters
|
|
4538
4759
|
* @public
|
|
4539
4760
|
*/
|
|
4540
|
-
export function loadColumnStatsErrorUpdater(state,
|
|
4541
|
-
var error =
|
|
4542
|
-
dataId =
|
|
4543
|
-
fieldName =
|
|
4761
|
+
export function loadColumnStatsErrorUpdater(state, _ref58) {
|
|
4762
|
+
var error = _ref58.error,
|
|
4763
|
+
dataId = _ref58.dataId,
|
|
4764
|
+
fieldName = _ref58.fieldName;
|
|
4544
4765
|
Console.error(error);
|
|
4545
4766
|
var dataset = state.datasets[dataId];
|
|
4546
4767
|
var field = ((dataset === null || dataset === void 0 ? void 0 : dataset.fields) || []).find(function (f) {
|
|
@@ -4626,8 +4847,8 @@ _action) {
|
|
|
4626
4847
|
* Copy in-memory rows (or loaded vector-tile features) inside the selected
|
|
4627
4848
|
* Draw on Map polygon into a new dataset.
|
|
4628
4849
|
*/
|
|
4629
|
-
export function extractDataFromFeatureUpdater(state,
|
|
4630
|
-
var layerId =
|
|
4850
|
+
export function extractDataFromFeatureUpdater(state, _ref59) {
|
|
4851
|
+
var layerId = _ref59.layerId;
|
|
4631
4852
|
var feature = state.editor.selectedFeature;
|
|
4632
4853
|
var layer = state.layers.find(function (l) {
|
|
4633
4854
|
return l.id === layerId;
|
|
@@ -4707,9 +4928,9 @@ export function extractDataFromFeatureUpdater(state, _ref55) {
|
|
|
4707
4928
|
}
|
|
4708
4929
|
});
|
|
4709
4930
|
}
|
|
4710
|
-
export function setFilterAnimationTimeConfigUpdater(state,
|
|
4711
|
-
var idx =
|
|
4712
|
-
config =
|
|
4931
|
+
export function setFilterAnimationTimeConfigUpdater(state, _ref60) {
|
|
4932
|
+
var idx = _ref60.idx,
|
|
4933
|
+
config = _ref60.config;
|
|
4713
4934
|
var oldFilter = state.filters[idx];
|
|
4714
4935
|
if (!oldFilter) {
|
|
4715
4936
|
Console.error("filters.".concat(idx, " is undefined"));
|
|
@@ -4739,8 +4960,8 @@ function checkTimeConfigArgs(config) {
|
|
|
4739
4960
|
/**
|
|
4740
4961
|
* Update editor
|
|
4741
4962
|
*/
|
|
4742
|
-
export function setLayerAnimationTimeConfigUpdater(state,
|
|
4743
|
-
var config =
|
|
4963
|
+
export function setLayerAnimationTimeConfigUpdater(state, _ref61) {
|
|
4964
|
+
var config = _ref61.config;
|
|
4744
4965
|
if (!config) {
|
|
4745
4966
|
return state;
|
|
4746
4967
|
}
|
|
@@ -4938,16 +5159,40 @@ export function setTimeFilterTimelineModeUpdater(state, action) {
|
|
|
4938
5159
|
* @returns nextState
|
|
4939
5160
|
* @public
|
|
4940
5161
|
*/
|
|
4941
|
-
export var setLoadingIndicatorUpdater = function setLoadingIndicatorUpdater(state,
|
|
4942
|
-
var change =
|
|
5162
|
+
export var setLoadingIndicatorUpdater = function setLoadingIndicatorUpdater(state, _ref62) {
|
|
5163
|
+
var change = _ref62.payload.change;
|
|
4943
5164
|
var loadingIndicatorValue = state.loadingIndicatorValue;
|
|
4944
5165
|
if (!loadingIndicatorValue) {
|
|
4945
5166
|
loadingIndicatorValue = 0;
|
|
4946
5167
|
}
|
|
5168
|
+
var nextValue = Math.max(loadingIndicatorValue + change, 0);
|
|
4947
5169
|
return _objectSpread(_objectSpread({}, state), {}, {
|
|
4948
|
-
loadingIndicatorValue:
|
|
4949
|
-
})
|
|
5170
|
+
loadingIndicatorValue: nextValue
|
|
5171
|
+
}, nextValue === 0 && Object.keys(state.loadingProgress || {}).length ? {
|
|
5172
|
+
loadingProgress: {}
|
|
5173
|
+
} : {});
|
|
4950
5174
|
};
|
|
5175
|
+
|
|
5176
|
+
/**
|
|
5177
|
+
* Record download progress for an in-flight remote dataset hydrate.
|
|
5178
|
+
* @memberof visStateUpdaters
|
|
5179
|
+
* @public
|
|
5180
|
+
*/
|
|
5181
|
+
export function setLoadingProgressUpdater(state, _ref63) {
|
|
5182
|
+
var _state$loadingProgres;
|
|
5183
|
+
var id = _ref63.id,
|
|
5184
|
+
percent = _ref63.percent;
|
|
5185
|
+
if ((state.loadingIndicatorValue || 0) <= 0) {
|
|
5186
|
+
return state;
|
|
5187
|
+
}
|
|
5188
|
+
var nextPercent = Number.isFinite(percent) ? Math.max(0, Math.min(100, Math.round(percent))) : 0;
|
|
5189
|
+
if (((_state$loadingProgres = state.loadingProgress) === null || _state$loadingProgres === void 0 ? void 0 : _state$loadingProgres[id]) === nextPercent) {
|
|
5190
|
+
return state;
|
|
5191
|
+
}
|
|
5192
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
5193
|
+
loadingProgress: _objectSpread(_objectSpread({}, state.loadingProgress), {}, _defineProperty({}, id, nextPercent))
|
|
5194
|
+
});
|
|
5195
|
+
}
|
|
4951
5196
|
function adjustAnimationConfigWithFilter(state, filterIdx) {
|
|
4952
5197
|
var filter = state.filters[filterIdx];
|
|
4953
5198
|
if (filter.syncedWithLayerTimeline) {
|
|
@@ -5008,6 +5253,9 @@ function adjustTimeFilterInterval(state, filter) {
|
|
|
5008
5253
|
// replace it with another dataId
|
|
5009
5254
|
function defaultReplaceParentDatasetIds(value, dataId, dataIdToReplace) {
|
|
5010
5255
|
var _value$config, _value$config2;
|
|
5256
|
+
if (value == null) {
|
|
5257
|
+
return null;
|
|
5258
|
+
}
|
|
5011
5259
|
if (Array.isArray(value)) {
|
|
5012
5260
|
// for layers, filters, call defaultReplaceParentDatasetIds on each item in array
|
|
5013
5261
|
var replaced = value.map(function (v) {
|
|
@@ -5059,10 +5307,10 @@ function findChildDatasetIds(value) {
|
|
|
5059
5307
|
}
|
|
5060
5308
|
|
|
5061
5309
|
// moved unmerged layers, filters, interactions
|
|
5062
|
-
function moveValueToBeMerged(state, propValues,
|
|
5063
|
-
var prop =
|
|
5064
|
-
toMergeProp =
|
|
5065
|
-
saveUnmerged =
|
|
5310
|
+
function moveValueToBeMerged(state, propValues, _ref65) {
|
|
5311
|
+
var prop = _ref65.prop,
|
|
5312
|
+
toMergeProp = _ref65.toMergeProp,
|
|
5313
|
+
saveUnmerged = _ref65.saveUnmerged;
|
|
5066
5314
|
// remove prop value from state
|
|
5067
5315
|
// TODO: should we add remove updater to merger as well?
|
|
5068
5316
|
if (!propValues) {
|
|
@@ -5121,17 +5369,50 @@ export function prepareStateForDatasetReplace(state, dataId, dataIdToUse) {
|
|
|
5121
5369
|
}
|
|
5122
5370
|
return nextState;
|
|
5123
5371
|
}
|
|
5124
|
-
|
|
5125
|
-
|
|
5126
|
-
|
|
5372
|
+
|
|
5373
|
+
/**
|
|
5374
|
+
* The order to preserve for the items that will be merged back.
|
|
5375
|
+
*
|
|
5376
|
+
* `ids` comes from the serialized state, so it lists everything but the items
|
|
5377
|
+
* another dataset's replacement parked a moment ago: an app refreshing several
|
|
5378
|
+
* datasets in a row prepares the second replacement before the first one's
|
|
5379
|
+
* items have merged back. Writing `ids` as it is would drop those, and
|
|
5380
|
+
* `insertItemBasedOnPreservedOrder` puts an item it cannot place at the front —
|
|
5381
|
+
* so they would come back reversed. Where they belong is what the order written
|
|
5382
|
+
* when they were parked already says, so that order is kept for them.
|
|
5383
|
+
*/
|
|
5384
|
+
export function preservedOrderWithParked() {
|
|
5385
|
+
var previousOrder = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
5386
|
+
var ids = arguments.length > 1 ? arguments[1] : undefined;
|
|
5387
|
+
var parked = arguments.length > 2 ? arguments[2] : undefined;
|
|
5388
|
+
var parkedIds = parked.map(function (item) {
|
|
5389
|
+
return item === null || item === void 0 ? void 0 : item.id;
|
|
5390
|
+
}).filter(function (id) {
|
|
5391
|
+
return Boolean(id) && !ids.includes(id);
|
|
5392
|
+
});
|
|
5393
|
+
if (!parkedIds.length) {
|
|
5394
|
+
return ids;
|
|
5395
|
+
}
|
|
5396
|
+
var known = new Set([].concat(_toConsumableArray(ids), _toConsumableArray(parkedIds)));
|
|
5397
|
+
var ordered = (previousOrder || []).filter(function (id) {
|
|
5398
|
+
return known.has(id);
|
|
5399
|
+
});
|
|
5400
|
+
var rest = [].concat(_toConsumableArray(ids), _toConsumableArray(parkedIds)).filter(function (id) {
|
|
5401
|
+
return !ordered.includes(id);
|
|
5402
|
+
});
|
|
5403
|
+
return [].concat(_toConsumableArray(ordered), _toConsumableArray(rest));
|
|
5404
|
+
}
|
|
5405
|
+
export function replaceDatasetDepsInState(state, _ref66) {
|
|
5406
|
+
var dataId = _ref66.dataId,
|
|
5407
|
+
dataIdToUse = _ref66.dataIdToUse;
|
|
5127
5408
|
var serializedState = serializeVisState(state, state.schema);
|
|
5128
|
-
var nextState = state.mergers.reduce(function (accuState,
|
|
5129
|
-
var prop =
|
|
5130
|
-
toMergeProp =
|
|
5131
|
-
replaceParentDatasetIds =
|
|
5132
|
-
getChildDatasetIds =
|
|
5133
|
-
saveUnmerged =
|
|
5134
|
-
preserveOrder =
|
|
5409
|
+
var nextState = state.mergers.reduce(function (accuState, _ref67) {
|
|
5410
|
+
var prop = _ref67.prop,
|
|
5411
|
+
toMergeProp = _ref67.toMergeProp,
|
|
5412
|
+
replaceParentDatasetIds = _ref67.replaceParentDatasetIds,
|
|
5413
|
+
getChildDatasetIds = _ref67.getChildDatasetIds,
|
|
5414
|
+
saveUnmerged = _ref67.saveUnmerged,
|
|
5415
|
+
preserveOrder = _ref67.preserveOrder;
|
|
5135
5416
|
// get dataset ids that are depends on this dataset
|
|
5136
5417
|
var props = toArray(prop);
|
|
5137
5418
|
var toMergeProps = toArray(toMergeProp);
|
|
@@ -5140,13 +5421,20 @@ export function replaceDatasetDepsInState(state, _ref61) {
|
|
|
5140
5421
|
}) : [];
|
|
5141
5422
|
var replacedState = accuState;
|
|
5142
5423
|
savedProps.forEach(function (propValue, i) {
|
|
5143
|
-
var _replacedState$merger;
|
|
5424
|
+
var _replacedState$merger, _replacedState$merger2;
|
|
5425
|
+
if (propValue == null) {
|
|
5426
|
+
return;
|
|
5427
|
+
}
|
|
5144
5428
|
var mergerOptions = {
|
|
5145
5429
|
prop: props[i],
|
|
5146
5430
|
toMergeProp: toMergeProps[i],
|
|
5147
5431
|
getChildDatasetIds: getChildDatasetIds,
|
|
5148
5432
|
saveUnmerged: saveUnmerged
|
|
5149
5433
|
};
|
|
5434
|
+
|
|
5435
|
+
// What another dataset's replacement parked a moment ago and has not
|
|
5436
|
+
// merged back yet, read before this one parks anything of its own.
|
|
5437
|
+
var parkedElsewhere = mergerOptions.toMergeProp !== undefined ? toArray((_replacedState$merger = replacedState[mergerOptions.toMergeProp]) !== null && _replacedState$merger !== void 0 ? _replacedState$merger : []) : [];
|
|
5150
5438
|
var replacedItem = (replaceParentDatasetIds === null || replaceParentDatasetIds === void 0 ? void 0 : replaceParentDatasetIds(propValue, dataId, dataIdToUse)) || defaultReplaceParentDatasetIds(propValue, dataId, dataIdToUse);
|
|
5151
5439
|
replacedState = replacedItem ? replacePropValueInState(replacedState, replacedItem, mergerOptions) : replacedState;
|
|
5152
5440
|
|
|
@@ -5154,21 +5442,21 @@ export function replaceDatasetDepsInState(state, _ref61) {
|
|
|
5154
5442
|
// can still hold another dataset's items, replaced a moment earlier and
|
|
5155
5443
|
// not merged back yet; overwriting the order they were parked with would
|
|
5156
5444
|
// merge them back in reverse.
|
|
5157
|
-
if (replacedItem && mergerOptions.toMergeProp !== undefined && (_replacedState$
|
|
5158
|
-
replacedState[preserveOrder] = propValue.map(function (item) {
|
|
5445
|
+
if (replacedItem && mergerOptions.toMergeProp !== undefined && (_replacedState$merger2 = replacedState[mergerOptions.toMergeProp]) !== null && _replacedState$merger2 !== void 0 && _replacedState$merger2.length && preserveOrder) {
|
|
5446
|
+
replacedState[preserveOrder] = preservedOrderWithParked(replacedState[preserveOrder], propValue.map(function (item) {
|
|
5159
5447
|
return item.id;
|
|
5160
|
-
});
|
|
5448
|
+
}), parkedElsewhere);
|
|
5161
5449
|
}
|
|
5162
5450
|
});
|
|
5163
5451
|
return replacedState;
|
|
5164
5452
|
}, state);
|
|
5165
5453
|
return nextState;
|
|
5166
5454
|
}
|
|
5167
|
-
function replacePropValueInState(state, replacedItem,
|
|
5168
|
-
var prop =
|
|
5169
|
-
toMergeProp =
|
|
5170
|
-
getChildDatasetIds =
|
|
5171
|
-
saveUnmerged =
|
|
5455
|
+
function replacePropValueInState(state, replacedItem, _ref68) {
|
|
5456
|
+
var prop = _ref68.prop,
|
|
5457
|
+
toMergeProp = _ref68.toMergeProp,
|
|
5458
|
+
getChildDatasetIds = _ref68.getChildDatasetIds,
|
|
5459
|
+
saveUnmerged = _ref68.saveUnmerged;
|
|
5172
5460
|
// prop is depends on the dataset to be replaced
|
|
5173
5461
|
// remove prop from state, and move it to toBeMerged
|
|
5174
5462
|
var nextState = moveValueToBeMerged(state, replacedItem, {
|
|
@@ -5186,4 +5474,4 @@ function replacePropValueInState(state, replacedItem, _ref63) {
|
|
|
5186
5474
|
}
|
|
5187
5475
|
return nextState;
|
|
5188
5476
|
}
|
|
5189
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJiYm94IiwiY29weSIsImRlZXBtZXJnZSIsImNvbnNvbGUiLCJDb25zb2xlIiwiY2xvbmVEZWVwIiwiZ2V0IiwiaXNFcXVhbCIsInBpY2siLCJ1bmlxIiwieG9yIiwiVGFzayIsImRpc2FibGVTdGFja0NhcHR1cmluZyIsIndpdGhUYXNrIiwiREVMQVlfVEFTSyIsIkFDVElPTl9UQVNLIiwiTE9BRF9GSUxFX1RBU0siLCJQUk9DRVNTX0ZJTEVfREFUQSIsIlVOV1JBUF9UQVNLIiwiYWRkTm90aWZpY2F0aW9uIiwiYXBwbHlMYXllckNvbmZpZyIsImNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzIiwibGF5ZXJDb25maWdDaGFuZ2UiLCJsYXllclR5cGVDaGFuZ2UiLCJsYXllclZpc0NvbmZpZ0NoYW5nZSIsImxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSIsImxvYWRGaWxlU3RlcFN1Y2Nlc3MiLCJsb2FkRmlsZXNFcnIiLCJsb2FkRmlsZXNTdWNjZXNzIiwibG9hZE5leHRGaWxlIiwibmV4dEZpbGVCYXRjaCIsInNldEZpbHRlciIsInByb2Nlc3NGaWxlQ29udGVudCIsImZpdEJvdW5kcyIsImZpdE1hcEJvdW5kcyIsInRvZ2dsZUxheWVyRm9yTWFwIiwiYXBwbHlGaWx0ZXJDb25maWciLCJsb2FkQ29sdW1uU3RhdHNTdWNjZXNzIiwibG9hZENvbHVtblN0YXRzRXJyb3IiLCJyZWZyZXNoRGF0YXNldFN1Y2Nlc3MiLCJyZWZyZXNoRGF0YXNldEVycm9yIiwicmVmcmVzaERhdGFzZXRQcm9ncmVzcyIsIkZJTFRFUl9VUERBVEVSX1BST1BTIiwiYWRkTmV3TGF5ZXJzVG9TcGxpdE1hcCIsInNuYXBUb01hcmtzIiwiYXBwbHlGaWx0ZXJGaWVsZE5hbWUiLCJhcHBseVRpbWVGaWx0ZXJFbmRGaWVsZE5hbWUiLCJhcHBseUZpbHRlcnNUb0RhdGFzZXRzIiwiYXJyYXlJbnNlcnQiLCJjb21iaW5lU3BsaXRNYXBzQnlJbmRleCIsImNvbXB1dGVTcGxpdE1hcExheWVycyIsImFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4iLCJlcnJvck5vdGlmaWNhdGlvbiIsImVkaXRvckZlYXR1cmVzVG9GZWF0dXJlQ29sbGVjdGlvbiIsImV4dHJhY3RSb3dzSW5zaWRlRmVhdHVyZSIsImlzVmVjdG9yVGlsZUV4dHJhY3RMYXllciIsIm1lcmdlVXNlckZlYXR1cmVQcm9wZXJ0aWVzIiwidG9Ta2V0Y2hGZWF0dXJlIiwiZmVhdHVyZVRvRmlsdGVyVmFsdWUiLCJmaWx0ZXJEYXRhc2V0Q1BVIiwiZ2VuZXJhdGVQb2x5Z29uRmlsdGVyIiwiZ2V0RGVmYXVsdEZpbHRlciIsImdldEZpbHRlcklkSW5GZWF0dXJlIiwiZ2V0VGltZVdpZGdldFRpdGxlRm9ybWF0dGVyIiwiaXNJblJhbmdlIiwiaXNPYmplY3QiLCJpc1BsYWluT2JqZWN0IiwiaXNSZ2JDb2xvciIsInBhcnNlRmllbGRWYWx1ZSIsInJlbW92ZUxheWVyRnJvbVNwbGl0TWFwcyIsInNldCIsInVwZGF0ZUZpbHRlclBsb3QiLCJyZW1vdmVGaWx0ZXJQbG90IiwiaXNMYXllckFuaW1hdGFibGUiLCJpc1NpZGVGaWx0ZXIiLCJnZXRBcHBsaWNhdGlvbkNvbmZpZyIsInZhbGlkYXRlRmlsdGVyc1VwZGF0ZURhdGFzZXRzIiwiZ2VuZXJhdGVIYXNoSWQiLCJ0b0FycmF5IiwiYXJyYXlNb3ZlIiwiQU5JTUFUSU9OX1dJTkRPVyIsIkJBU0VfU1BFRUQiLCJDT01QQVJFX1RZUEVTIiwiREVGQVVMVF9URVhUX0xBQkVMIiwiRURJVE9SX01PREVTIiwiRklMVEVSX1RZUEVTIiwiRklMVEVSX1ZJRVdfVFlQRVMiLCJMQVlFUl9UWVBFUyIsIkZQUyIsIkxJR0hUX0FORF9TSEFET1dfRUZGRUNUIiwiRElTVEFOQ0VfRk9HX1RZUEUiLCJTVVJGQUNFX0ZPR19UWVBFIiwiTUFYX0RFRkFVTFRfVE9PTFRJUFMiLCJQTE9UX1RZUEVTIiwiU09SVF9PUkRFUiIsIlNZTkNfVElNRUxJTkVfTU9ERVMiLCJDSEFOTkVMX1NDQUxFUyIsIlNDQUxFX1RZUEVTIiwiSU5JVElBTF9BTk5PVEFUSU9OX0tJTkQiLCJJTklUSUFMX0FOTk9UQVRJT05fQU5HTEUiLCJJTklUSUFMX0FOTk9UQVRJT05fQVJNX0xFTkdUSCIsIklOSVRJQUxfQU5OT1RBVElPTl9URVhUX1dJRFRIIiwiSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfSEVJR0hUIiwiSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEgiLCJJTklUSUFMX0FOTk9UQVRJT05fTElORV9DT0xPUiIsIklOSVRJQUxfQU5OT1RBVElPTl9URVhUX1NJREUiLCJJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9WRVJUSUNBTF9QT1NJVElPTiIsIkFOTk9UQVRJT05fQU5HTEVfQllfUExBQ0VNRU5UIiwidGV4dFBsYWNlbWVudEZyb21BbmdsZSIsIkFubm90YXRpb25LaW5kIiwiRGF0YXNldFR5cGUiLCJnZXREYXRhc2V0UmVmcmVzaEludGVydmFsTXMiLCJnZXRSZW1vdGVTb3VyY2VGb3JtYXQiLCJMQVlFUl9JRF9MRU5HVEgiLCJMYXllciIsIkxheWVyQ2xhc3NlcyIsImFwcGx5XyIsImNvbXBvc2VfIiwiZmlsdGVyT3V0QnlJZCIsIm1lcmdlXyIsInBheWxvYWRfIiwicGlja18iLCJyZW1vdmVFbGVtZW50QXRJbmRleCIsInN3YXBfIiwiaXNWYWxpZE1lcmdlciIsIm1lcmdlU3RhdGVGcm9tTWVyZ2VycyIsIlZJU19TVEFURV9NRVJHRVJTIiwiY3JlYXRlTGF5ZXJGcm9tQ29uZmlnIiwicGFyc2VMYXllckNvbmZpZyIsInNlcmlhbGl6ZUZpbHRlciIsInNlcmlhbGl6ZUxheWVyIiwic2VyaWFsaXplVmlzU3RhdGUiLCJ2YWxpZGF0ZUxheWVyV2l0aERhdGEiLCJLZXBsZXJHTFNjaGVtYSIsImdldEZpbGVzVG9QYXJzZSIsImxvYWRFeHRlcm5hbGx5SG9zdGVkRGF0YXNldCIsInByb2Nlc3NHZW9qc29uIiwiYXNzaWduR3B1Q2hhbm5lbCIsImNvcHlUYWJsZUFuZFVwZGF0ZSIsImNyZWF0ZU5ld0RhdGFFbnRyeSIsInBpblRhYmxlQ29sdW1ucyIsInNldEZpbHRlckdwdU1vZGUiLCJzb3J0RGF0YXNldEJ5Q29sdW1uIiwiZmluZEZpZWxkc1RvU2hvdyIsImNhbGN1bGF0ZUxheWVyRGF0YSIsImZpbmREZWZhdWx0TGF5ZXIiLCJnZXRMYXllck9yZGVyRnJvbUxheWVycyIsIm1lcmdlTGF5ZXJWaXNDb25maWdGb3JOZXdEYXRhc2V0cyIsImdldE5ld0xheWVyR3JvdXAiLCJhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIiLCJyZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIiLCJnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIiLCJmaW5kUGFyZW50R3JvdXBGb3JMYXllciIsImdldEluZGV4RnJvbUxheWVyRW50cnlJZCIsInVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIiLCJnZXRGbGF0TGF5ZXJPcmRlciIsInJlcGxhY2VMYXllckVudHJ5SW5MYXllck9yZGVyIiwiZ2V0UHJvcFZhbHVlVG9NZXJnZXIiLCJoYXNQcm9wc1RvTWVyZ2UiLCJtZXJnZURhdGFzZXRzQnlPcmRlciIsImZpeEVmZmVjdE9yZGVyIiwiZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMiLCJnZXRJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzIiwibWVyZ2VUaW1lRG9tYWlucyIsImFkanVzdFZhbHVlVG9BbmltYXRpb25XaW5kb3ciLCJ1cGRhdGVUaW1lRmlsdGVyUGxvdFR5cGUiLCJnZXREZWZhdWx0VGltZUZvcm1hdCIsIkxheWVyVG9GaWx0ZXJUaW1lSW50ZXJ2YWwiLCJUSU1FX0lOVEVSVkFMU19PUkRFUkVEIiwibWVyZ2VGaWx0ZXJEb21haW4iLCJpbml0Q3VzdG9tUGFsZXR0ZUJ5Q3VzdG9tU2NhbGUiLCJjb2xsZWN0Q29sdW1uVmFsdWVzIiwiZ2V0Q29sdW1uU3RhdGlzdGljcyIsImNyZWF0ZUVmZmVjdCIsImZpbmRNYXBCb3VuZHMiLCJ2aXNTdGF0ZVVwZGF0ZXJzIiwiZGVmYXVsdEludGVyYWN0aW9uQ29uZmlnIiwidG9vbHRpcCIsImlkIiwibGFiZWwiLCJlbmFibGVkIiwiY29uZmlnIiwiZmllbGRzVG9TaG93IiwiY29tcGFyZU1vZGUiLCJjb21wYXJlVHlwZSIsIkFCU09MVVRFIiwiZ2VvY29kZXIiLCJwb3NpdGlvbiIsImxpbWl0U2VhcmNoIiwiYnJ1c2giLCJzaXplIiwiY29vcmRpbmF0ZSIsIkRFRkFVTFRfQU5JTUFUSU9OX0NPTkZJRyIsImRvbWFpbiIsImN1cnJlbnRUaW1lIiwic3BlZWQiLCJpc0FuaW1hdGluZyIsInRpbWVTdGVwcyIsInRpbWVGb3JtYXQiLCJ0aW1lem9uZSIsImRlZmF1bHRUaW1lRm9ybWF0IiwiaGlkZUNvbnRyb2wiLCJkdXJhdGlvbiIsIkRFRkFVTFRfRURJVE9SIiwibW9kZSIsIkRSQVdfUE9MWUdPTiIsImZlYXR1cmVzIiwic2VsZWN0ZWRGZWF0dXJlIiwidmlzaWJsZSIsIklOSVRJQUxfVklTX1NUQVRFIiwibWFwSW5mbyIsInRpdGxlIiwiZGVzY3JpcHRpb24iLCJsYXllcnMiLCJsYXllckRhdGEiLCJsYXllclRvQmVNZXJnZWQiLCJsYXllck9yZGVyIiwibGF5ZXJPcmRlclRvQmVNZXJnZWQiLCJmaWx0ZXJzIiwiZmlsdGVyVG9CZU1lcmdlZCIsImRhdGFzZXRzIiwiZWRpdGluZ0RhdGFzZXQiLCJ1bmRlZmluZWQiLCJlZmZlY3RzIiwiZWZmZWN0T3JkZXIiLCJhbm5vdGF0aW9ucyIsImFubm90YXRpb25zVG9CZU1lcmdlZCIsInNlbGVjdGVkQW5ub3RhdGlvbklkIiwiaXNFZGl0aW5nQW5ub3RhdGlvblRleHQiLCJpbnRlcmFjdGlvbkNvbmZpZyIsImludGVyYWN0aW9uVG9CZU1lcmdlZCIsImxheWVyQmxlbmRpbmciLCJvdmVybGF5QmxlbmRpbmciLCJob3ZlckluZm8iLCJjbGlja2VkIiwibW91c2VQb3MiLCJtYXhEZWZhdWx0VG9vbHRpcHMiLCJzcGxpdE1hcHMiLCJzcGxpdE1hcHNUb0JlTWVyZ2VkIiwiaXNNZXJnaW5nRGF0YXNldHMiLCJsYXllckNsYXNzZXMiLCJhbmltYXRpb25Db25maWciLCJlZGl0b3IiLCJmaWxlTG9hZGluZyIsImZpbGVMb2FkaW5nUHJvZ3Jlc3MiLCJsb2FkaW5nSW5kaWNhdG9yVmFsdWUiLCJsb2FkZXJzIiwibG9hZE9wdGlvbnMiLCJtZXJnZXJzIiwic2NoZW1hIiwiQUNUSU9OX1RBU0tfRklUX0JPVU5EUyIsImZyb21DYWxsYmFjayIsIl8iLCJjYiIsIkFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04iLCJ1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEiLCJzdGF0ZSIsIl9yZWYiLCJsYXllciIsImlkeCIsIl9vYmplY3RTcHJlYWQiLCJtYXAiLCJseXIiLCJpIiwiZCIsInVwZGF0ZVN0YXRlT25MYXllclZpc2liaWxpdHlDaGFuZ2UiLCJuZXdTdGF0ZSIsImxlbmd0aCIsImlzVmlzaWJsZSIsImFuaW1hdGlvbiIsInVwZGF0ZUFuaW1hdGlvbkRvbWFpbiIsInBpY2tDaGFuZ2VkUHJvcHMiLCJwcmV2IiwibmV4dCIsImNoYW5nZWRQcm9wcyIsInBpY2tQcm9wc09mIiwib2JqIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJrZXkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJWSVNVQUxfQ0hBTk5FTF9QUk9QX1RZUEVTIiwiYXBwbHlMYXllckNvbmZpZ1VwZGF0ZXIiLCJhY3Rpb24iLCJfc2VyaWFsaXplTGF5ZXIiLCJvbGRMYXllcklkIiwibmV3TGF5ZXJDb25maWciLCJsYXllckluZGV4IiwibmV3UGFyc2VkTGF5ZXIiLCJvbGRMYXllciIsImZpbmQiLCJsIiwiZGF0YXNldCIsImRhdGFJZCIsIm5ld0xheWVyIiwibmV4dFN0YXRlIiwidHlwZSIsIm9sZExheWVySW5kZXgiLCJmaW5kSW5kZXgiLCJsYXllclR5cGVDaGFuZ2VVcGRhdGVyIiwibmV3TGF5ZXJJZCIsInNlcmlhbGl6ZWRPbGRMYXllciIsInNlcmlhbGl6ZWROZXdMYXllciIsImNoYW5nZWQiLCJ2aXNDb25maWciLCJsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIiLCJ2aXN1YWxDaGFubmVscyIsImNoYW5uZWxOYW1lIiwiY2hhbm5lbCIsImNoYW5uZWxQcm9wTmFtZXMiLCJwcm9wIiwic29tZSIsImxheWVyVmlzdWFsQ2hhbm5lbENoYW5nZVVwZGF0ZXIiLCJfaXRlcmF0b3IiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIl9zdGVwIiwicyIsIm4iLCJkb25lIiwidmFsdWUiLCJlcnIiLCJlIiwiZiIsImxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlciIsInVwZGF0ZWxheWVyVmlzaWJpbHR5IiwiZmlsdGVySW5kZXgiLCJmaWx0ZXJTeW5jZWRXaXRoVGltZWxpbmUiLCJzeW5jVGltZUZpbHRlcldpdGhMYXllclRpbWVsaW5lVXBkYXRlciIsImVuYWJsZSIsInByb3BzIiwibmV3Q29uZmlnIiwiX2FjdGlvbiRuZXdDb25maWciLCJyZXN0Q29uZmlnIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwiX2V4Y2x1ZGVkIiwic3RhdGVXaXRoRGF0YUlkIiwibGF5ZXJEYXRhSWRDaGFuZ2VVcGRhdGVyIiwibmV4dExheWVyIiwidXBkYXRlTGF5ZXJDb25maWciLCJzaG91bGRDYWxjdWxhdGVMYXllckRhdGEiLCJvbGRMYXllckRhdGEiLCJ1cGRhdGVMYXllckRhdGFSZXN1bHQiLCJsYXllckFuaW1hdGlvbkNoYW5nZVVwZGF0ZXIiLCJfZGVmaW5lUHJvcGVydHkiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhIiwibGF5ZXJUb2dnbGVWaXNpYmlsaXR5VXBkYXRlciIsImxheWVySWQiLCJzcGxpdE1hcElkIiwibWFwSW5kZXgiLCJzbSIsInRvZ2dsZUxheWVyRm9yTWFwVXBkYXRlciIsInN5bmNlZFdpdGhMYXllclRpbWVsaW5lIiwibGF5ZXJTZXRJc1ZhbGlkVXBkYXRlciIsImlzVmFsaWQiLCJsYXllclRvVXBkYXRlIiwibmV3RGF0YSIsIl9jYWxjdWxhdGVMYXllckRhdGEyIiwiYWRkT3JSZW1vdmVUZXh0TGFiZWxzIiwibmV3RmllbGRzIiwidGV4dExhYmVsIiwiZGVmYXVsdFRleHRMYWJlbCIsImFyZ3VtZW50cyIsIm5ld1RleHRMYWJlbCIsInNsaWNlIiwiY3VycmVudEZpZWxkcyIsInRsIiwiZmllbGQiLCJuYW1lIiwiZmlsdGVyIiwiYWRkRmllbGRzIiwiaW5jbHVkZXMiLCJkZWxldGVGaWVsZHMiLCJmZCIsImNvbmNhdCIsIl90b0NvbnN1bWFibGVBcnJheSIsImFmIiwiX3RleHRMYWJlbCRmaW5kJGNvbGxpIiwiX3RleHRMYWJlbCRmaW5kIiwiY29sbGlzaW9uRW5hYmxlZCIsIkJvb2xlYW4iLCJ1cGRhdGVUZXh0TGFiZWxQcm9wQW5kVmFsdWUiLCJzcGxpY2UiLCJsYXllclRleHRMYWJlbENoYW5nZVVwZGF0ZXIiLCJfb2xkTGF5ZXIkZ2V0RGVmYXVsdEwiLCJfb2xkTGF5ZXIkZ2V0RGVmYXVsdEwyIiwiZ2V0RGVmYXVsdExheWVyQ29uZmlnIiwiX3RleHRMYWJlbCQiLCJ2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YSIsImxvYWRlZExheWVyIiwiYWxsb3dFbXB0eUNvbHVtbiIsImlzVmFsaWRUb1NhdmUiLCJ2YWxpZGF0ZWQiLCJvbGRMYXllclR5cGUiLCJuZXdEYXRhc2V0RmllbGRzIiwiZmllbGRzIiwicmVtYXBwZWRGaWVsZHMiLCJ2YWx1ZXMiLCJfcmVmMiIsImZpZWxkS2V5IiwiY3VycmVudEZpZWxkIiwibWF0Y2hlZCIsIl9yZWYzIiwidmFsaWRhdGVWaXN1YWxDaGFubmVsIiwiaXNDb25maWdBY3RpdmUiLCJ1cGRhdGVMYXllckRvbWFpbiIsIl9jYWxjdWxhdGVMYXllckRhdGEzIiwic2V0SW5pdGlhbExheWVyQ29uZmlnIiwicmVzdWx0IiwiZmluZERlZmF1bHRMYXllclByb3BzIiwiQXJyYXkiLCJpc0FycmF5IiwibmV3VHlwZSIsIm9sZElkIiwiZXJyb3IiLCJkZWZhdWx0TGF5ZXJQcm9wcyIsImFzc2lnbkNvbmZpZ1RvTGF5ZXIiLCJ2aXNDb25maWdTZXR0aW5ncyIsImlzTGF5ZXJIb3ZlcmVkIiwiX2NhbGN1bGF0ZUxheWVyRGF0YTQiLCJzZXR0aW5ncyIsIl9zZXR0aW5ncyRsYXllcnMiLCJvbGRMYXllck1hcCIsIm90aGVyTGF5ZXJzIiwiX3RvUHJvcGVydHlLZXkiLCJyZXNvbHZlVmlzdWFsQ2hhbm5lbEZpZWxkRnJvbURhdGFzZXQiLCJ2aXN1YWxDaGFubmVsIiwiaW5jb21pbmciLCJfdHlwZW9mIiwiZm91bmQiLCJuZXdWaXNDb25maWciLCJ1cGRhdGVMYXllclZpc0NvbmZpZyIsInVwZGF0ZUxheWVyVmlzdWFsQ2hhbm5lbCIsInVwZGF0ZWRTdGF0ZSIsImNoYW5uZWxTY2FsZVR5cGUiLCJjb2xvciIsInVwZGF0ZUxheWVyQ29sb3JVSSIsInJhbmdlIiwiY29sb3JSYW5nZUNvbmZpZyIsImNvbG9yVUkiLCJjdXN0b21CcmVha3MiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNSIsInNjYWxlIiwiY3VzdG9tT3JkaW5hbCIsImN1c3RvbVBhbGV0dGUiLCJvcmRpbmFsRG9tYWluIiwiY29sb3JCcmVha3MiLCJzaG93Q29sb3JDaGFydCIsImNoYW5uZWxLZXkiLCJqZW5rcyIsImVkaXRCb3VuZHMiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNiIsInNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIiLCJfcmVmNCIsInJlZHVjZSIsImFjY3UiLCJzZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlciIsInNldEZpbHRlclVwZGF0ZXIiLCJzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyIiwiX3JlZjUiLCJhbmltYXRpb25XaW5kb3ciLCJuZXdGaWx0ZXIiLCJuZXdTeW5jVGltZWxpbmVNb2RlIiwiZ2V0U3luY0FuaW1hdGlvbk1vZGUiLCJzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlciIsImFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlciIsIl9zZXJpYWxpemVGaWx0ZXIiLCJmaWx0ZXJJZCIsIm9sZEZpbHRlciIsInNlcmlhbGl6ZWRPbGRGaWx0ZXIiLCJzZXJpYWxpemVkTmV3RmlsdGVyIiwiX2FjdGlvbiR2YWx1ZUluZGV4IiwidmFsdWVJbmRleCIsImRhdGFzZXRJZHNUb0ZpbHRlciIsIl9sb29wIiwicmVzIiwidiIsIl91cGRhdGVGaWx0ZXJQcm9wIiwiZW5sYXJnZWRGaWx0ZXIiLCJ2aWV3IiwiZW5sYXJnZWQiLCJzaWRlIiwiZmlsdGVyZWREYXRhc2V0cyIsImZpbHRlcldpdGhQTG90IiwidXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhIiwidGltZVJhbmdlIiwiYWRqdXN0QW5pbWF0aW9uQ29uZmlnV2l0aEZpbHRlciIsIl91cGRhdGVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgiLCJfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4IiwibmV4dFZhbHVlIiwiX2kiLCJfYXJyIiwibmV4dFZhbCIsImRvbWFpblN0ZXBzIiwibmV4dEZpbHRlciIsInN0ZXAiLCJkYXRhc2V0SWRzIiwib2xkRGF0YUlkIiwiZGF0YXNldElkIiwiX2FwcGx5RmlsdGVyRmllbGROYW1lIiwibWVyZ2VEb21haW4iLCJ1cGRhdGVkRmlsdGVyIiwibmV3RGF0YXNldCIsImdwdSIsImVuZE5hbWUiLCJfYXBwbHlUaW1lRmlsdGVyRW5kRmkiLCJncHVDaGFubmVsIiwiZ3B1RW5kQ2hhbm5lbCIsImxheWVySWREaWZmZXJlbmNlIiwibGF5ZXJEYXRhSWRzIiwibGlkIiwibmV3RGF0YUlkcyIsInNldEZpbHRlclBsb3RVcGRhdGVyIiwiX3JlZjYiLCJuZXdQcm9wIiwicGxvdFR5cGUiLCJjaGFydFR5cGUiLCJ5QXhpcyIsImxpbmVDaGFydCIsImhpc3RvZ3JhbSIsImFkZEZpbHRlclVwZGF0ZXIiLCJjcmVhdGVPclVwZGF0ZUZpbHRlclVwZGF0ZXIiLCJvcmlnaW5hbEluZGV4IiwiaW5kZXgiLCJsYXllckNvbG9yVUlDaGFuZ2VVcGRhdGVyIiwiX3JlZjciLCJvbGRWaXhDb25maWciLCJ0b2dnbGVGaWx0ZXJBbmltYXRpb25VcGRhdGVyIiwiaXNGaWx0ZXJBbmltYXRpb25Db25maWciLCJzZXRBbmltYXRpb25Db25maWdVcGRhdGVyIiwidG9nZ2xlTGF5ZXJBbmltYXRpb25VcGRhdGVyIiwidG9nZ2xlTGF5ZXJBbmltYXRpb25Db250cm9sVXBkYXRlciIsInVwZGF0ZUZpbHRlckFuaW1hdGlvblNwZWVkVXBkYXRlciIsInVwZGF0ZUxheWVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyIiwiX3JlZjgiLCJzZXRGaWx0ZXJWaWV3VXBkYXRlciIsInNob3VsZFJlc2V0T3RoZXJGaWx0ZXJzVmlldyIsInRvZ2dsZUZpbHRlckZlYXR1cmVVcGRhdGVyIiwicmVtb3ZlRmlsdGVyVXBkYXRlciIsIl9zdGF0ZSRmaWx0ZXJzJGlkeCIsIm5ld0ZpbHRlcnMiLCJuZXdFZGl0b3IiLCJhZGRMYXllclVwZGF0ZXIiLCJuZXdMYXllckRhdGEiLCJ3YXJuIiwiX2FjdGlvbiRkYXRhc2V0SWQiLCJkZWZhdWx0RGF0YXNldCIsInJlbW92ZUxheWVyVXBkYXRlciIsIl9yZWY5IiwiTnVtYmVyIiwiaXNGaW5pdGUiLCJsYXllclRvUmVtb3ZlIiwicmVvcmRlckxheWVyVXBkYXRlciIsIl9yZWYwIiwib3JkZXIiLCJhZGRMYXllckdyb3VwVXBkYXRlciIsImxheWVyR3JvdXAiLCJuZXdMYXllck9yZGVyIiwicmVtb3ZlTGF5ZXJHcm91cFVwZGF0ZXIiLCJsYXllckdyb3VwVG9SZW1vdmUiLCJsYXllcklkc1RvUmVtb3ZlIiwidXBkYXRlTGF5ZXJHcm91cFVwZGF0ZXIiLCJvcHRpb25zIiwibmV3TGF5ZXJHcm91cCIsImxheWVySWRzIiwiYWNjIiwiYWRkTGF5ZXJUb0xheWVyR3JvdXBVcGRhdGVyIiwibGF5ZXJHcm91cElkIiwiZW50cnkiLCJuZXdHcm91cExheWVyT3JkZXIiLCJyZW1vdmVMYXllckZyb21MYXllckdyb3VwVXBkYXRlciIsIm5ld0xheWVyR3JvdXBPcmRlciIsInN3YXBMYXllck9yZGVyRW50cmllc1VwZGF0ZXIiLCJvcmlnaW5MYXllcklkIiwiZGVzdGluYXRpb25MYXllcklkIiwib3JpZ2luTGF5ZXJHcm91cElkIiwiZGVzdGluYXRpb25MYXllckdyb3VwSWQiLCJvcmlnaW5JbmRleCIsImRlc3RpbmF0aW9uSW5kZXgiLCJkZXN0SW5kZXgiLCJkdXBsaWNhdGVMYXllclVwZGF0ZXIiLCJfcmVmMSIsIm9yaWdpbmFsIiwib3JpZ2luYWxMYXllck9yZGVySWR4IiwibmV3TGFiZWwiLCJwb3N0Zml4IiwicGFyZW50R3JvdXAiLCJsYXllck9yZGVyV2l0aG91dFByZXBlbmRlZCIsImlkeEluR3JvdXAiLCJ1cGRhdGVkR3JvdXAiLCJhZGRFZmZlY3RVcGRhdGVyIiwiX2FjdGlvbiRjb25maWciLCJfYWN0aW9uJGNvbmZpZzIiLCJfYWN0aW9uJGNvbmZpZzMiLCJlZmZlY3QiLCJuZXdFZmZlY3QiLCJzZXRQcm9wcyIsInJlbW92ZUVmZmVjdFVwZGF0ZXIiLCJfcmVmMTAiLCJlZmZlY3RUb1JlbW92ZSIsImVmZmVjdElkIiwicmVvcmRlckVmZmVjdFVwZGF0ZXIiLCJfcmVmMTEiLCJ1cGRhdGVFZmZlY3RVcGRhdGVyIiwiX3JlZjEyIiwiaWR4MiIsImVmZmVjdE9yZGVySWQiLCJuZXh0UGFyYW1zIiwicGFyYW1ldGVycyIsInRpbWVzdGFtcCIsIm5ld0VmZmVjdHMiLCJtYWtlTmV3QW5ub3RhdGlvbiIsIl9jb25maWcka2luZCIsIl9yZWYxMyIsIl9jb25maWckdGV4dFNpZGUiLCJfcmVmMTQiLCJfY29uZmlnJHRleHRWZXJ0aWNhbFAiLCJfY29uZmlnJGlkIiwiX2NvbmZpZyRpc1Zpc2libGUiLCJfY29uZmlnJGF1dG9TaXplIiwiX2NvbmZpZyRhdXRvU2l6ZVkiLCJfY29uZmlnJGFuY2hvclBvaW50IiwiX2NvbmZpZyRsYWJlbCIsIl9jb25maWckbGluZUNvbG9yIiwiX2NvbmZpZyRsaW5lV2lkdGgiLCJfY29uZmlnJHRleHRXaWR0aCIsIl9jb25maWckdGV4dEhlaWdodCIsIl9jb25maWckdGV4dFZlcnRpY2FsQSIsIl9hcm1MZW5ndGgiLCJfYXJtTGVuZ3RoMiIsIl9hcm1MZW5ndGgzIiwiX3JhZGl1c0luTWV0ZXJzIiwia2luZCIsInByb3ZpZGVkQW5nbGUiLCJhbmdsZSIsImRlcml2ZWRGcm9tQW5nbGUiLCJ0ZXh0U2lkZSIsIlRFWFQiLCJ0ZXh0VmVydGljYWxQb3NpdGlvbiIsInZlcnRpY2FsIiwiYmFzZSIsImF1dG9TaXplIiwiYXV0b1NpemVZIiwiYW5jaG9yUG9pbnQiLCJsaW5lQ29sb3IiLCJsaW5lV2lkdGgiLCJ0ZXh0V2lkdGgiLCJ0ZXh0SGVpZ2h0IiwidGV4dFZlcnRpY2FsQWxpZ24iLCJkZWZhdWx0QW5nbGUiLCJQT0lOVCIsImFybUxlbmd0aCIsIkFSUk9XIiwiQ0lSQ0xFIiwicmFkaXVzSW5NZXRlcnMiLCJhZGRBbm5vdGF0aW9uVXBkYXRlciIsIm5ld0Fubm90YXRpb24iLCJyZW1vdmVBbm5vdGF0aW9uVXBkYXRlciIsIl9yZWYxNSIsImEiLCJ1cGRhdGVBbm5vdGF0aW9uVXBkYXRlciIsIl9yZWYxNiIsIm5leHRBbm5vdGF0aW9uIiwibmV3QW5ub3RhdGlvbnMiLCJkdXBsaWNhdGVBbm5vdGF0aW9uVXBkYXRlciIsIl9yZWYxNyIsInNldFNlbGVjdGVkQW5ub3RhdGlvblVwZGF0ZXIiLCJfcmVmMTgiLCJpc0VkaXRpbmdUZXh0IiwicmVtb3ZlRGF0YXNldFVwZGF0ZXIiLCJkYXRhc2V0S2V5IiwiX3N0YXRlJGRhdGFzZXRzIiwibmV3RGF0YXNldHMiLCJsYXllcnNUb1JlbW92ZSIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJpbmRleE9mIiwicHVzaCIsInJlbW92ZURhdGFzZXRGcm9tSW50ZXJhY3Rpb25Db25maWciLCJfcmVmMTkiLCJfaW50ZXJhY3Rpb25Db25maWciLCJfY29uZmlnJGZpZWxkc1RvU2hvdyIsInVwZGF0ZUxheWVyQmxlbmRpbmdVcGRhdGVyIiwidXBkYXRlT3ZlcmxheUJsZW5kaW5nVXBkYXRlciIsInNob3dEYXRhc2V0VGFibGVVcGRhdGVyIiwidXBkYXRlVGFibGVDb2xvclVwZGF0ZXIiLCJ1cGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyIiwibmV3Q29sb3IiLCJyZXNldE1hcENvbmZpZ1VwZGF0ZXIiLCJpbml0aWFsU3RhdGUiLCJyZWNlaXZlTWFwQ29uZmlnVXBkYXRlciIsIl9yZWYyMCIsIl9yZWYyMCRwYXlsb2FkIiwicGF5bG9hZCIsIl9yZWYyMCRwYXlsb2FkJGNvbmZpZyIsIl9yZWYyMCRwYXlsb2FkJG9wdGlvbiIsInZpc1N0YXRlIiwia2VlcEV4aXN0aW5nQ29uZmlnIiwibWVyZ2VkU3RhdGUiLCJfaXRlcmF0b3IzIiwiX3N0ZXAzIiwibWVyZ2VyIiwibWVyZ2UiLCJ0b01lcmdlUHJvcCIsImxheWVySG92ZXJVcGRhdGVyIiwiaW5mbyIsImludGVyYWN0aW9uQ29uZmlnQ2hhbmdlVXBkYXRlciIsImNvbnRyYWRpY3QiLCJrIiwibGF5ZXJDbGlja1VwZGF0ZXIiLCJwaW5uZWQiLCJwaWNrZWQiLCJtYXBDbGlja1VwZGF0ZXIiLCJtb3VzZU1vdmVVcGRhdGVyIiwiX3JlZjIxIiwiZXZ0IiwicG9pbnQiLCJtb3VzZVBvc2l0aW9uIiwibG5nTGF0IiwidG9nZ2xlU3BsaXRNYXBVcGRhdGVyIiwiZHVwbGljYXRlIiwiY2xvc2VTcGVjaWZpY01hcEF0SW5kZXgiLCJfcmVmMjIiLCJoYXNUYWJ1bGFyRGF0YXNldERhdGEiLCJkYXRhIiwiX2RhdGEkcm93cyIsIl9kYXRhJGNvbHMiLCJyb3dzIiwiY29scyIsImFycm93VGFibGUiLCJuZWVkc0V4dGVybmFsbHlIb3N0ZWRIeWRyYXRlIiwiX2RhdGFzZXQkaW5mbyIsIl9kYXRhc2V0JG1ldGFkYXRhIiwiRVhURVJOQUxMWV9IT1NURUQiLCJtZXRhZGF0YSIsInNvdXJjZSIsImh5ZHJhdGVFeHRlcm5hbGx5SG9zdGVkUHJvdG9EYXRhc2V0IiwiX3giLCJfaHlkcmF0ZUV4dGVybmFsbHlIb3N0ZWRQcm90b0RhdGFzZXQiLCJhcHBseSIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlMiIsIl9kYXRhc2V0JG1ldGFkYXRhNiIsIl9kYXRhc2V0JG1ldGFkYXRhNyIsImxvYWRlZCIsIl9kYXRhc2V0JG1ldGFkYXRhOCIsIndyYXAiLCJfY2FsbGVlMiQiLCJfY29udGV4dDIiLCJhYnJ1cHQiLCJmb3JtYXQiLCJieXBhc3NDYWNoZSIsInNlbnQiLCJFcnJvciIsImV0YWciLCJsYXN0TW9kaWZpZWQiLCJsYXN0RmV0Y2hlZEF0IiwiRGF0ZSIsIm5vdyIsInJlZnJlc2hTdGF0dXMiLCJzdG9wIiwiSFlEUkFURV9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0siLCJmcm9tUHJvbWlzZSIsIkZBSUxfQ1JFQVRFX0RBVEFTRVRfVEFTSyIsIl9yZWYyMyIsIl9jYWxsZWUiLCJtZXNzYWdlIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsIl94MiIsImNyZWF0ZU5ld0RhdGFFbnRyeVRhc2siLCJjaGFpbiIsImh5ZHJhdGVkIiwidGFzayIsInBhdGNoRGF0YXNldE1ldGFkYXRhIiwicGF0Y2giLCJyZWZyZXNoRXh0ZXJuYWxseUhvc3RlZFRhYmxlIiwiX3gzIiwiX3JlZnJlc2hFeHRlcm5hbGx5SG9zdGVkVGFibGUiLCJfY2FsbGVlMyIsIl9yZWYyNCIsIm9uUHJvZ3Jlc3MiLCJfY2FsbGVlMyQiLCJfY29udGV4dDMiLCJhcmciLCJSRUZSRVNIX0VYVEVSTkFMTFlfSE9TVEVEX0RBVEFTRVRfVEFTSyIsImZyb21Qcm9taXNlV2l0aFByb2dyZXNzIiwicmVmcmVzaERhdGFzZXRVcGRhdGVyIiwiX3JlZjI1IiwiX2RhdGFzZXQkbWV0YWRhdGEyIiwiX2RhdGFzZXQkbWV0YWRhdGEzIiwibmV4dERhdGFzZXQiLCJyZWZyZXNoRXJyb3IiLCJyZWZyZXNoUHJvZ3Jlc3MiLCJwcm9ncmVzcyIsIl9wcm9ncmVzcyRwZXJjZW50IiwiTWF0aCIsInJvdW5kIiwicGVyY2VudCIsImJpbWFwIiwicmVmcmVzaERhdGFzZXRQcm9ncmVzc1VwZGF0ZXIiLCJfcmVmMjYiLCJfZGF0YXNldCRtZXRhZGF0YTQiLCJfZGF0YXNldCRtZXRhZGF0YTUiLCJuZXh0UGVyY2VudCIsIm1heCIsIm1pbiIsImZpZWxkTmFtZXNFcXVhbCIsImN1cnJlbnQiLCJldmVyeSIsInJlYmluZExheWVyc0FuZEZpbHRlcnNBZnRlclNjaGVtYUNoYW5nZSIsIm5leHRMYXllcnMiLCJkcm9wcGVkTGF5ZXJzIiwicmVib3VuZCIsIm5leHRMYXllck9yZGVyIiwibmV4dFNwbGl0TWFwcyIsIm5leHRMYXllckRhdGEiLCJvbGRJZHgiLCJmaWx0ZXJzRm9yRGF0YXNldCIsIm90aGVyRmlsdGVycyIsIl92YWxpZGF0ZUZpbHRlcnNVcGRhdCIsInVwZGF0ZWREYXRhc2V0cyIsIm5leHRGaWx0ZXJzIiwicmVmcmVzaERhdGFzZXRTdWNjZXNzVXBkYXRlciIsIl9yZWYyNyIsIl9yZXN1bHQkZGF0YSIsIm1ldGFkYXRhUGF0Y2giLCJzY2hlbWFVbmNoYW5nZWQiLCJub3RNb2RpZmllZCIsInVwZGF0ZSIsInJlZnJlc2hlZCIsInJlYXBwbHlGaWx0ZXJzQW5kTGF5ZXJEYXRhIiwiaXNEYXRhc2V0Um93TGlzdCIsInRvQXJyYXlSb3ciLCJyb3ciLCJyZWNvcmQiLCJub3JtYWxpemVEYXRhc2V0Um93cyIsImxpc3QiLCJub3JtYWxpemVkIiwiYXJyYXlSb3ciLCJhZGRUb0RhdGFzZXRVcGRhdGVyIiwiX3JlZjI4IiwiYXBwbGllZCIsInVwc2VydEJ5IiwidXBzZXJ0Um93cyIsImFwcGVuZFJvd3MiLCJyZW1vdmVGcm9tRGF0YXNldFVwZGF0ZXIiLCJfcmVmMjkiLCJyb3dJbmRleGVzIiwiYnlGaWVsZCIsImluZGV4ZXMiLCJmaW5kUm93SW5kZXhlc0J5RmllbGRWYWx1ZXMiLCJyZW1vdmVSb3dzIiwicmVmcmVzaERhdGFzZXRFcnJvclVwZGF0ZXIiLCJfcmVmMzAiLCJTdHJpbmciLCJ1cGRhdGVWaXNEYXRhVXBkYXRlciIsImNyZWF0ZURhdGFzZXRUYXNrcyIsIm5vdGlmaWNhdGlvblRhc2tzIiwiX3JlZjMxIiwiZGF0YXNldEluZGV4IiwiX3JlZjMxJGluZm8iLCJyZXN0IiwiX2V4Y2x1ZGVkMiIsImRhdGFzZXRzQWxsU2V0dGxlZFRhc2siLCJhbGxTZXR0bGVkIiwicmVzdWx0cyIsImFkZFRvTWFwT3B0aW9ucyIsInNldExvYWRpbmdJbmRpY2F0b3JVcGRhdGVyIiwiY2hhbmdlIiwiY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3NVcGRhdGVyIiwiX2FjdGlvbiRwYXlsb2FkIiwibmV3RGF0YUVudHJpZXMiLCJzdGF0dXMiLCJyZWFzb24iLCJsYXllck1lcmdlcnMiLCJtIiwid2FpdEZvckxheWVyRGF0YSIsImRhdGFzZXRNZXJnZXJzIiwicG9zdE1lcmdlclBheWxvYWQiLCJhcHBseU1lcmdlcnNVcGRhdGVyIiwibWVyZ2VTdGF0ZVJlc3VsdCIsImFsbE1lcmdlZCIsInBvc3RNZXJnZVVwZGF0ZXIiLCJsYXllclZpc0NvbmZpZ0Zyb21BZGREYXRhT3B0aW9ucyIsImxheWVyVmlzQ29uZmlnIiwicG9seWdvbkZpbHRlckRlcGVuZHNPbkxheWVyTWV0YSIsIl9sYXllciRjb25maWciLCJnZW9qc29uIiwiY29sdW1uTW9kZSIsImZEYXRhSWQiLCJkYXRhc2V0RmlsdGVyZWQiLCJkYXRhRW1wdHkiLCJuZXdMYXllcnMiLCJhdXRvQ3JlYXRlTGF5ZXJzIiwiYWRkRGVmYXVsdExheWVycyIsImxheWVyc05vdEluU3BsaXRNYXBzIiwidG9vbHRpcEZpZWxkcyIsImF1dG9DcmVhdGVUb29sdGlwcyIsImFkZERlZmF1bHRUb29sdGlwcyIsInBvbHlnb25GaWx0ZXJzIiwicG9seWdvbiIsInBvbHlnb25NZXRhRGF0YUlkcyIsIl9mJGxheWVySWQiLCJjZW50ZXJNYXAiLCJib3VuZHMiLCJwYWRkaW5nIiwiZml0Qm91bmRzVGFzayIsInJlbmFtZURhdGFzZXRVcGRhdGVyIiwiQUxMT1dFRF9VUERBVEVfREFUQVNFVF9QUk9QUyIsInZhbGlkYXRlRGF0YXNldFVwZGF0ZVByb3BzIiwidmFsaWRhdGVkUHJvcHMiLCJlbnRyaWVzIiwiX2VudHJ5IiwiX3NsaWNlZFRvQXJyYXkiLCJleGlzdGluZyIsInJlY29uY2lsZUxheWVyV2l0aE5ld1NjaGVtYSIsInJlbmFtZXMiLCJuZXdUYWJsZSIsIl9sYXllciRjb25maWckdGV4dExhYiIsImNvbmZpZ1BhdGNoIiwiY29sdW1uc1BhdGNoIiwiY29sdW1uc0NoYW5nZWQiLCJjb2x1bW5zIiwiX3JlZjMyIiwiX3JlZjMzIiwiY2tleSIsImNvbCIsIl9yZWYzNCIsImZpZWxkQ29uZmlnIiwibGF5ZXJDb3B5IiwiYXNzaWduIiwiY3JlYXRlIiwiZ2V0UHJvdG90eXBlT2YiLCJoYXNBbGxDb2x1bW5zIiwidXBkYXRlRGF0YXNldFVwZGF0ZXIiLCJfaW50ZXJhY3Rpb25Db25maWcyIiwiX3Rvb2x0aXAkY29uZmlnIiwiX2FjdGlvbiRyZW5hbWVzIiwidXBkYXRlU2NoZW1hIiwiZmlsdGVyZWRJZHhDUFUiLCJhbGxJbmRleGVzIiwiZmlsdGVyUmVjb3JkQ1BVIiwic29ydENvbHVtbiIsInNvcnRPcmRlciIsInBpbm5lZENvbHVtbnMiLCJfcmVuYW1lcyRuYW1lIiwiZ2V0Q29sdW1uRmllbGRJZHgiLCJuZXdGaWVsZHNCeU5hbWUiLCJTZXQiLCJfcmVuYW1lcyRvbGROYW1lIiwiX3VwZGF0ZWQkeUF4aXMiLCJ2aSIsIm9sZE5hbWUiLCJuZXdOYW1lIiwiZmllbGRJZHgiLCJfYXBwbHlGaWx0ZXJGaWVsZE5hbWUyIiwidXBkYXRlZCIsImhhcyIsImZpbHRlclRhYmxlIiwicmVjb25jaWxlZCIsIm5leHRGaWVsZHNUb1Nob3ciLCJmbGF0TWFwIiwiX3JlbmFtZXMkZiRuYW1lIiwiX3N0YXRlJHNwbGl0TWFwcyRpbmRlIiwiaW5kZXhUb1JldHJpZXZlIiwibWFwTGF5ZXJzIiwibG9hZEZpbGVzVXBkYXRlciIsImZpbGVzIiwiX2FjdGlvbiRvbkZpbmlzaCIsIm9uRmluaXNoIiwiY29tcGFuaW9uRmlsZXMiLCJmcm9tIiwiZmlsZXNUb0xvYWQiLCJpbml0aWFsRmlsZUxvYWRpbmdQcm9ncmVzcyIsImZpbGVDYWNoZSIsImxvYWROZXh0RmlsZVVwZGF0ZXIiLCJsb2FkRmlsZVN0ZXBTdWNjZXNzVXBkYXRlciIsImZpbGVOYW1lIiwiX3N0YXRlJGZpbGVMb2FkaW5nIiwic3RhdGVXaXRoUHJvZ3Jlc3MiLCJ1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlciIsInN0YXRlV2l0aENhY2hlIiwiX2ZpbGVzVG9Mb2FkIiwiX3RvQXJyYXkiLCJmaWxlIiwicmVtYWluaW5nRmlsZXNUb0xvYWQiLCJtYWtlTG9hZEZpbGVUYXNrIiwiZ2VuIiwiY29udGVudCIsInByb2Nlc3NGaWxlQ29udGVudFVwZGF0ZXIiLCJfYWN0aW9uJHBheWxvYWQyIiwicGFyc2VQcm9ncmVzcyIsInByZXZQcm9ncmVzcyIsIm5leHRGaWxlQmF0Y2hVcGRhdGVyIiwiX3JlZjM1IiwiX2FjY3VtdWxhdGVkJGRhdGEiLCJfcmVmMzUkcGF5bG9hZCIsImFjY3VtdWxhdGVkIiwidXNlQXJyb3dQcm9ncmVzc2l2ZUxvYWRpbmciLCJlbmRzV2l0aCIsInNraXBBcnJvd0NvbXBhY3QiLCJfcmVmMzYiLCJsb2FkRmlsZXNFcnJVcGRhdGVyIiwiX3JlZjM3IiwiX3N0YXRlJGZpbGVMb2FkaW5nMiIsImFwcGx5Q1BVRmlsdGVyVXBkYXRlciIsIl9yZWYzOCIsImRhdGFJZHMiLCJzZXRNYXBJbmZvVXBkYXRlciIsImVtcHR5IiwiZGVmYXVsdExheWVycyIsImZvdW5kTGF5ZXJzIiwibWVyZ2VkIiwiX3JlZjQwIiwiZml4ZWREb21haW4iLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNyIsIl9zdGF0ZSRmaWx0ZXJzIiwiYW5pbWF0YWJsZUxheWVycyIsImxheWVyRG9tYWlucyIsIm1lcmdlZERvbWFpbiIsIm1lcmdlZFRpbWVTdGVwcyIsInNvcnQiLCJzeW5jZWRGaWx0ZXIiLCJuZXdBbmltYXRpb25Eb21haW4iLCJzZXRFZGl0b3JNb2RlVXBkYXRlciIsIl9yZWY0MSIsInNrZXRjaGVzRW5hYmxlZCIsImVuYWJsZURyYXdPbk1hcFNrZXRjaGVzIiwiRFJBV19QT0lOVCIsIkRSQVdfTElORVNUUklORyIsInNldEZlYXR1cmVzVXBkYXRlciIsIl9yZWY0MiIsIl9sYXN0RmVhdHVyZSRwcm9wZXJ0aSIsIl9sYXN0RmVhdHVyZSRwcm9wZXJ0aTIiLCJfcmVmNDIkZmVhdHVyZXMiLCJsYXN0RmVhdHVyZSIsInByb3BlcnRpZXMiLCJpc0Nsb3NlZCIsInNoYXBlIiwiRURJVCIsImZlYXR1cmUiLCJmZWF0dXJlVmFsdWUiLCJmaWx0ZXJJZHgiLCJmaWwiLCJmaW5kRWRpdG9yRmVhdHVyZSIsIl9zdGF0ZSRlZGl0b3Ikc2VsZWN0ZSIsImZyb21FZGl0b3IiLCJpdGVtIiwic2V0RWRpdG9yRmVhdHVyZVByb3BlcnRpZXNVcGRhdGVyIiwiX3JlZjQzIiwiX3N0YXRlJGVkaXRvciRzZWxlY3RlMiIsIm5leHRGZWF0dXJlIiwibmV4dEVkaXRvciIsInNldFNlbGVjdGVkRmVhdHVyZVVwZGF0ZXIiLCJfcmVmNDQiLCJzZWxlY3Rpb25Db250ZXh0IiwiZGVsZXRlRmVhdHVyZVVwZGF0ZXIiLCJfcmVmNDUiLCJzZXRQb2x5Z29uRmlsdGVyTGF5ZXJVcGRhdGVyIiwibm9uZUZpbHRlckZlYXR1cmUiLCJfZmlsdGVyJGxheWVySWQiLCJpc0xheWVySW5jbHVkZWQiLCJza2V0Y2hGZWF0dXJlIiwic3RhdGVXaXRob3V0RmlsdGVyIiwic2V0UG9seWdvbkZpbHRlckFsbExheWVyc1VwZGF0ZXIiLCJ2aXNpYmxlTGF5ZXJJZHMiLCJhbGxMYXllcklkcyIsInNvcnRUYWJsZUNvbHVtblVwZGF0ZXIiLCJfcmVmNDYiLCJjb2x1bW4iLCJzb3J0TW9kZSIsImN1cnJlbnRNb2RlIiwiQVNDRU5ESU5HIiwic29ydGVkIiwicGluVGFibGVDb2x1bW5VcGRhdGVyIiwiX3JlZjQ3IiwiY29weVRhYmxlQ29sdW1uVXBkYXRlciIsIl9yZWY0OCIsInRleHQiLCJkYXRhQ29udGFpbmVyIiwidmFsdWVBdCIsImpvaW4iLCJzZXRDb2x1bW5EaXNwbGF5Rm9ybWF0VXBkYXRlciIsIl9yZWY0OSIsImZvcm1hdHMiLCJkaXNwbGF5Rm9ybWF0IiwiX2xheWVyJGNvbmZpZzIiLCJjb2xvckZpZWxkIiwiZ2V0TWFwcGVkVmFsdWUiLCJmaWx0ZXJQcm9wcyIsIm1hcHBlZFZhbHVlIiwieWllbGRGb3JQYWludCIsIlByb21pc2UiLCJyZXNvbHZlIiwic2V0VGltZW91dCIsInJlcXVlc3REYXRhc2V0Q29sdW1uU3RhdGlzdGljcyIsIl94NCIsIl9yZXF1ZXN0RGF0YXNldENvbHVtblN0YXRpc3RpY3MiLCJfY2FsbGVlNCIsIl9yZWY1MCIsIl9jYWxsZWU0JCIsIl9jb250ZXh0NCIsImdldENvbHVtbkZpbHRlclByb3BzIiwiZmllbGRUeXBlIiwiTE9BRF9DT0xVTU5fU1RBVFNfVEFTSyIsImxvYWRDb2x1bW5TdGF0c1VwZGF0ZXIiLCJfcmVmNTEiLCJmaWVsZE5hbWUiLCJmaWVsZE5hbWVzVG9Mb2FkIiwiZmllbGRzVG9Mb2FkIiwiaXNMb2FkaW5nU3RhdHMiLCJ0YXNrcyIsIl9yZWY1MiIsImxvYWRDb2x1bW5TdGF0c1N1Y2Nlc3NVcGRhdGVyIiwiX3JlZjUzIiwibmV3RmlsdGVyUHJvcHMiLCJjb2x1bW5TdGF0cyIsImxvYWRDb2x1bW5TdGF0c0Vycm9yVXBkYXRlciIsIl9yZWY1NCIsInRvZ2dsZUVkaXRvclZpc2liaWxpdHlVcGRhdGVyIiwiY29udmVydEVkaXRvckZlYXR1cmVzVG9MYXllclVwZGF0ZXIiLCJfYWN0aW9uIiwiY2xlYXJlZFN0YXRlIiwibGFiZWxJZCIsImZsb29yIiwicmFuZG9tIiwiZXh0cmFjdERhdGFGcm9tRmVhdHVyZVVwZGF0ZXIiLCJfcmVmNTUiLCJleHRyYWN0ZWQiLCJyb3dDb3VudCIsInNldEZpbHRlckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyIiwiX3JlZjU2IiwidXBkYXRlcyIsImNoZWNrVGltZUNvbmZpZ0FyZ3MiLCJhbGxvd2VkIiwic2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlciIsIl9yZWY1NyIsImxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZVVwZGF0ZXIiLCJfbGF5ZXIkZmlsdGVyZWRJdGVtQ28iLCJldmVudCIsImRlY2tnbExheWVySWQiLCJjb3VudCIsImZpbHRlcmVkSXRlbUNvdW50Iiwid21zRmVhdHVyZUluZm9VcGRhdGVyIiwiZmVhdHVyZUluZm8iLCJvYmplY3QiLCJ3bXNGZWF0dXJlSW5mbyIsIl9uZXdTdGF0ZSRhbmltYXRpb25DbyIsIl9uZXdTdGF0ZSRhbmltYXRpb25DbzIiLCJfYWN0aW9uJGVuYWJsZSIsImludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMiLCJoYXNJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXIiLCJuZXdGaWx0ZXJEb21haW4iLCJpbnRlcnZhbCIsImFkanVzdFRpbWVGaWx0ZXJJbnRlcnZhbCIsIm5ld0ZpbHRlclZhbHVlIiwic3luY1RpbWVsaW5lTW9kZSIsImVuZCIsInZhbGlkYXRlU3luY0FuaW1hdGlvbk1vZGUiLCJfcmVmNTgiLCJ0aW1lbGluZVZhbHVlIiwiZ2V0VGltZWxpbmVWYWx1ZUZyb21GaWx0ZXIiLCJmcmVlIiwiX2ZpbHRlciRzeW5jVGltZWxpbmVNIiwibmV3TW9kZSIsInN0YXJ0IiwiaW50ZXJ2YWxJbmRleCIsImN1cnJlbnRJbmRleCIsIm1ldGEiLCJ0YXJnZXRUaW1lSW50ZXJ2YWwiLCJuZXdJbmRleCIsImxheWVyVGltZUludGVydmFsIiwidXBkYXRlZFBsb3RUeXBlIiwiZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzIiwiZGF0YUlkVG9SZXBsYWNlIiwiX3ZhbHVlJGNvbmZpZyIsIl92YWx1ZSRjb25maWcyIiwicmVwbGFjZWQiLCJmaW5kQ2hpbGREYXRhc2V0SWRzIiwiX3ZhbHVlJG5ld0RhdGFzZXQiLCJjaGlsZERhdGFJZHMiLCJtb3ZlVmFsdWVUb0JlTWVyZ2VkIiwicHJvcFZhbHVlcyIsIl9yZWY2MCIsInNhdmVVbm1lcmdlZCIsInN0YXRlUmVtb3ZlZCIsInByb3BWYWx1ZSIsInAiLCJ0b0JlTWVyZ2VkIiwicmVwbGFjZURhdGFzZXRBbmREZXBzIiwiZGF0YUlkVG9Vc2UiLCJyZXBsYWNlRGF0YXNldERlcHNJblN0YXRlIiwicHJlcGFyZVN0YXRlRm9yRGF0YXNldFJlcGxhY2UiLCJfbmV4dFN0YXRlJGxheWVyVG9CZU0iLCJzZXJpYWxpemVkU3RhdGUiLCJwcmVzZXJ2ZUxheWVyT3JkZXIiLCJwcmVzZXJ2ZURhdGFzZXRPcmRlciIsIl9zZXJpYWxpemVkU3RhdGUkc3BsaSIsIl9yZWY2MSIsImFjY3VTdGF0ZSIsIl9yZWY2MiIsInJlcGxhY2VQYXJlbnREYXRhc2V0SWRzIiwiZ2V0Q2hpbGREYXRhc2V0SWRzIiwicHJlc2VydmVPcmRlciIsInRvTWVyZ2VQcm9wcyIsInNhdmVkUHJvcHMiLCJyZXBsYWNlZFN0YXRlIiwiX3JlcGxhY2VkU3RhdGUkbWVyZ2VyIiwibWVyZ2VyT3B0aW9ucyIsInJlcGxhY2VkSXRlbSIsInJlcGxhY2VQcm9wVmFsdWVJblN0YXRlIiwiX3JlZjYzIiwiY2hpbGREYXRhSWQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdmlzLXN0YXRlLXVwZGF0ZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7YmJveH0gZnJvbSAnQHR1cmYvYmJveCc7XG5pbXBvcnQgdHlwZSB7QWxsR2VvSlNPTn0gZnJvbSAnQHR1cmYvaGVscGVycyc7XG5pbXBvcnQgY29weSBmcm9tICdjb3B5LXRvLWNsaXBib2FyZCc7XG5pbXBvcnQgZGVlcG1lcmdlIGZyb20gJ2RlZXBtZXJnZSc7XG5pbXBvcnQge2NvbnNvbGUgYXMgQ29uc29sZX0gZnJvbSAnZ2xvYmFsL3dpbmRvdyc7XG5pbXBvcnQgY2xvbmVEZWVwIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L2Nsb25lRGVlcCc7XG5pbXBvcnQgZ2V0IGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L2dldCc7XG5pbXBvcnQgaXNFcXVhbCBmcm9tICdlcy10b29sa2l0L2NvbXBhdC9pc0VxdWFsJztcbmltcG9ydCBwaWNrIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L3BpY2snO1xuaW1wb3J0IHVuaXEgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvdW5pcSc7XG5pbXBvcnQgeG9yIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L3hvcic7XG5pbXBvcnQgVGFzaywge2Rpc2FibGVTdGFja0NhcHR1cmluZywgd2l0aFRhc2t9IGZyb20gJ0BrZXBsZXIuZ2wvdGFza3MnO1xuaW1wb3J0IHR5cGUge1Rhc2tEZXNjcmlwdG9yfSBmcm9tICdAa2VwbGVyLmdsL3Rhc2tzJztcbi8vIFRhc2tzXG5pbXBvcnQge1xuICBERUxBWV9UQVNLLFxuICBBQ1RJT05fVEFTSyxcbiAgTE9BRF9GSUxFX1RBU0ssXG4gIFBST0NFU1NfRklMRV9EQVRBLFxuICBVTldSQVBfVEFTS1xufSBmcm9tICdAa2VwbGVyLmdsL3Rhc2tzJztcbi8vIEFjdGlvbnNcbmltcG9ydCB7XG4gIGFkZE5vdGlmaWNhdGlvbixcbiAgQWN0aW9uVHlwZXMsXG4gIENyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzUGF5bG9hZCxcbiAgTWFwU3RhdGVBY3Rpb25zLFxuICBSZWNlaXZlTWFwQ29uZmlnUGF5bG9hZCxcbiAgVmlzU3RhdGVBY3Rpb25zLFxuICBhcHBseUxheWVyQ29uZmlnLFxuICBjcmVhdGVOZXdEYXRhc2V0U3VjY2VzcyxcbiAgbGF5ZXJDb25maWdDaGFuZ2UsXG4gIGxheWVyVHlwZUNoYW5nZSxcbiAgbGF5ZXJWaXNDb25maWdDaGFuZ2UsXG4gIGxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSxcbiAgbG9hZEZpbGVTdGVwU3VjY2VzcyxcbiAgbG9hZEZpbGVzRXJyLFxuICBsb2FkRmlsZXNTdWNjZXNzLFxuICBsb2FkTmV4dEZpbGUsXG4gIG5leHRGaWxlQmF0Y2gsXG4gIHNldEZpbHRlcixcbiAgcHJvY2Vzc0ZpbGVDb250ZW50LFxuICBmaXRCb3VuZHMgYXMgZml0TWFwQm91bmRzLFxuICB0b2dnbGVMYXllckZvck1hcCxcbiAgYXBwbHlGaWx0ZXJDb25maWcsXG4gIFNldExvYWRpbmdJbmRpY2F0b3JQYXlsb2FkLFxuICBsb2FkQ29sdW1uU3RhdHNTdWNjZXNzLFxuICBsb2FkQ29sdW1uU3RhdHNFcnJvcixcbiAgcmVmcmVzaERhdGFzZXRTdWNjZXNzLFxuICByZWZyZXNoRGF0YXNldEVycm9yLFxuICByZWZyZXNoRGF0YXNldFByb2dyZXNzXG59IGZyb20gJ0BrZXBsZXIuZ2wvYWN0aW9ucyc7XG5cbi8vIFV0aWxzXG5pbXBvcnQge1xuICBGSUxURVJfVVBEQVRFUl9QUk9QUyxcbiAgYWRkTmV3TGF5ZXJzVG9TcGxpdE1hcCxcbiAgc25hcFRvTWFya3MsXG4gIGFwcGx5RmlsdGVyRmllbGROYW1lLFxuICBhcHBseVRpbWVGaWx0ZXJFbmRGaWVsZE5hbWUsXG4gIGFwcGx5RmlsdGVyc1RvRGF0YXNldHMsXG4gIGFycmF5SW5zZXJ0LFxuICBjb21iaW5lU3BsaXRNYXBzQnlJbmRleCxcbiAgY29tcHV0ZVNwbGl0TWFwTGF5ZXJzLFxuICBhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluLFxuICBlcnJvck5vdGlmaWNhdGlvbixcbiAgZWRpdG9yRmVhdHVyZXNUb0ZlYXR1cmVDb2xsZWN0aW9uLFxuICBleHRyYWN0Um93c0luc2lkZUZlYXR1cmUsXG4gIGlzVmVjdG9yVGlsZUV4dHJhY3RMYXllcixcbiAgbWVyZ2VVc2VyRmVhdHVyZVByb3BlcnRpZXMsXG4gIHRvU2tldGNoRmVhdHVyZSxcbiAgZmVhdHVyZVRvRmlsdGVyVmFsdWUsXG4gIGZpbHRlckRhdGFzZXRDUFUsXG4gIGdlbmVyYXRlUG9seWdvbkZpbHRlcixcbiAgZ2V0RGVmYXVsdEZpbHRlcixcbiAgZ2V0RmlsdGVySWRJbkZlYXR1cmUsXG4gIGdldFRpbWVXaWRnZXRUaXRsZUZvcm1hdHRlcixcbiAgaXNJblJhbmdlLFxuICBpc09iamVjdCxcbiAgaXNQbGFpbk9iamVjdCxcbiAgaXNSZ2JDb2xvcixcbiAgcGFyc2VGaWVsZFZhbHVlLFxuICByZW1vdmVMYXllckZyb21TcGxpdE1hcHMsXG4gIHNldCxcbiAgdXBkYXRlRmlsdGVyUGxvdCxcbiAgcmVtb3ZlRmlsdGVyUGxvdCxcbiAgaXNMYXllckFuaW1hdGFibGUsXG4gIGlzU2lkZUZpbHRlcixcbiAgZ2V0QXBwbGljYXRpb25Db25maWcsXG4gIHZhbGlkYXRlRmlsdGVyc1VwZGF0ZURhdGFzZXRzXG59IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHtnZW5lcmF0ZUhhc2hJZCwgdG9BcnJheSwgYXJyYXlNb3ZlfSBmcm9tICdAa2VwbGVyLmdsL2NvbW1vbi11dGlscyc7XG4vLyBNZXJnZXJzXG5pbXBvcnQge1xuICBBTklNQVRJT05fV0lORE9XLFxuICBCQVNFX1NQRUVELFxuICBDT01QQVJFX1RZUEVTLFxuICBERUZBVUxUX1RFWFRfTEFCRUwsXG4gIEVESVRPUl9NT0RFUyxcbiAgRklMVEVSX1RZUEVTLFxuICBGSUxURVJfVklFV19UWVBFUyxcbiAgTEFZRVJfVFlQRVMsXG4gIEZQUyxcbiAgTElHSFRfQU5EX1NIQURPV19FRkZFQ1QsXG4gIERJU1RBTkNFX0ZPR19UWVBFLFxuICBTVVJGQUNFX0ZPR19UWVBFLFxuICBNQVhfREVGQVVMVF9UT09MVElQUyxcbiAgUExPVF9UWVBFUyxcbiAgU09SVF9PUkRFUixcbiAgU1lOQ19USU1FTElORV9NT0RFUyxcbiAgQ0hBTk5FTF9TQ0FMRVMsXG4gIFNDQUxFX1RZUEVTLFxuICBJTklUSUFMX0FOTk9UQVRJT05fS0lORCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0FOR0xFLFxuICBJTklUSUFMX0FOTk9UQVRJT05fQVJNX0xFTkdUSCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfV0lEVEgsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9URVhUX0hFSUdIVCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEgsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX0NPTE9SLFxuICBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9TSURFLFxuICBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9WRVJUSUNBTF9QT1NJVElPTixcbiAgQU5OT1RBVElPTl9BTkdMRV9CWV9QTEFDRU1FTlQsXG4gIHRleHRQbGFjZW1lbnRGcm9tQW5nbGUsXG4gIEFubm90YXRpb25LaW5kLFxuICBEYXRhc2V0VHlwZSxcbiAgZ2V0RGF0YXNldFJlZnJlc2hJbnRlcnZhbE1zLFxuICBnZXRSZW1vdGVTb3VyY2VGb3JtYXRcbn0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtMQVlFUl9JRF9MRU5HVEgsIExheWVyLCBMYXllckNsYXNzZXN9IGZyb20gJ0BrZXBsZXIuZ2wvbGF5ZXJzJztcbmltcG9ydCB7XG4gIGFwcGx5XyxcbiAgY29tcG9zZV8sXG4gIGZpbHRlck91dEJ5SWQsXG4gIG1lcmdlXyxcbiAgcGF5bG9hZF8sXG4gIHBpY2tfLFxuICByZW1vdmVFbGVtZW50QXRJbmRleCxcbiAgc3dhcF9cbn0gZnJvbSAnLi9jb21wb3Nlci1oZWxwZXJzJztcbmltcG9ydCB7aXNWYWxpZE1lcmdlciwgbWVyZ2VTdGF0ZUZyb21NZXJnZXJzfSBmcm9tICcuL21lcmdlci1oYW5kbGVyJztcbmltcG9ydCB7XG4gIFZJU19TVEFURV9NRVJHRVJTLFxuICBjcmVhdGVMYXllckZyb21Db25maWcsXG4gIHBhcnNlTGF5ZXJDb25maWcsXG4gIHNlcmlhbGl6ZUZpbHRlcixcbiAgc2VyaWFsaXplTGF5ZXIsXG4gIHNlcmlhbGl6ZVZpc1N0YXRlLFxuICB2YWxpZGF0ZUxheWVyV2l0aERhdGFcbn0gZnJvbSAnLi92aXMtc3RhdGUtbWVyZ2VyJztcblxuaW1wb3J0IEtlcGxlckdMU2NoZW1hLCB7TWVyZ2VyLCBQb3N0TWVyZ2VyUGF5bG9hZCwgVmlzU3RhdGV9IGZyb20gJ0BrZXBsZXIuZ2wvc2NoZW1hcyc7XG5pbXBvcnQge2dldEZpbGVzVG9QYXJzZSwgbG9hZEV4dGVybmFsbHlIb3N0ZWREYXRhc2V0LCBwcm9jZXNzR2VvanNvbn0gZnJvbSAnQGtlcGxlci5nbC9wcm9jZXNzb3JzJztcblxuaW1wb3J0IHtcbiAgRmlsdGVyLFxuICBGZWF0dXJlLFxuICBJbnRlcmFjdGlvbkNvbmZpZyxcbiAgQW5pbWF0aW9uQ29uZmlnLFxuICBGaWx0ZXJBbmltYXRpb25Db25maWcsXG4gIEVkaXRvcixcbiAgRmllbGQsXG4gIExheWVyVmlzQ29uZmlnLFxuICBUaW1lUmFuZ2VGaWx0ZXIsXG4gIEFubm90YXRpb24sXG4gIEFubm90YXRpb25Qcm9wc1BhcnRpYWwsXG4gIFByb3RvRGF0YXNldFxufSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7TG9hZGVyfSBmcm9tICdAbG9hZGVycy5nbC9sb2FkZXItdXRpbHMnO1xuXG5pbXBvcnQge1xuICBEYXRhc2V0cyxcbiAgS2VwbGVyVGFibGUsXG4gIEZpbHRlclByb3BzLFxuICBhc3NpZ25HcHVDaGFubmVsLFxuICBjb3B5VGFibGVBbmRVcGRhdGUsXG4gIGNyZWF0ZU5ld0RhdGFFbnRyeSxcbiAgcGluVGFibGVDb2x1bW5zLFxuICBzZXRGaWx0ZXJHcHVNb2RlLFxuICBzb3J0RGF0YXNldEJ5Q29sdW1uXG59IGZyb20gJ0BrZXBsZXIuZ2wvdGFibGUnO1xuaW1wb3J0IHtmaW5kRmllbGRzVG9TaG93fSBmcm9tICcuL2ludGVyYWN0aW9uLXV0aWxzJztcbmltcG9ydCB7XG4gIGNhbGN1bGF0ZUxheWVyRGF0YSxcbiAgZmluZERlZmF1bHRMYXllcixcbiAgZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMsXG4gIG1lcmdlTGF5ZXJWaXNDb25maWdGb3JOZXdEYXRhc2V0cyxcbiAgZ2V0TmV3TGF5ZXJHcm91cCxcbiAgYWRkTGF5ZXJPckdyb3VwVG9MYXllck9yZGVyLFxuICByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIsXG4gIGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcixcbiAgZmluZFBhcmVudEdyb3VwRm9yTGF5ZXIsXG4gIGdldEluZGV4RnJvbUxheWVyRW50cnlJZCxcbiAgdXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlcixcbiAgZ2V0RmxhdExheWVyT3JkZXIsXG4gIHJlcGxhY2VMYXllckVudHJ5SW5MYXllck9yZGVyXG59IGZyb20gJy4vbGF5ZXItdXRpbHMnO1xuaW1wb3J0IHtnZXRQcm9wVmFsdWVUb01lcmdlciwgaGFzUHJvcHNUb01lcmdlfSBmcm9tICcuL21lcmdlci1oYW5kbGVyJztcbmltcG9ydCB7bWVyZ2VEYXRhc2V0c0J5T3JkZXJ9IGZyb20gJy4vdmlzLXN0YXRlLW1lcmdlcic7XG5pbXBvcnQge1xuICBmaXhFZmZlY3RPcmRlcixcbiAgZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMsXG4gIGdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMsXG4gIG1lcmdlVGltZURvbWFpbnMsXG4gIGFkanVzdFZhbHVlVG9BbmltYXRpb25XaW5kb3csXG4gIHVwZGF0ZVRpbWVGaWx0ZXJQbG90VHlwZSxcbiAgZ2V0RGVmYXVsdFRpbWVGb3JtYXQsXG4gIExheWVyVG9GaWx0ZXJUaW1lSW50ZXJ2YWwsXG4gIFRJTUVfSU5URVJWQUxTX09SREVSRUQsXG4gIG1lcmdlRmlsdGVyRG9tYWluLFxuICBpbml0Q3VzdG9tUGFsZXR0ZUJ5Q3VzdG9tU2NhbGUsXG4gIGNvbGxlY3RDb2x1bW5WYWx1ZXMsXG4gIGdldENvbHVtblN0YXRpc3RpY3Ncbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQge2NyZWF0ZUVmZmVjdH0gZnJvbSAnQGtlcGxlci5nbC9lZmZlY3RzJztcbmltcG9ydCB7UGF5bG9hZEFjdGlvbn0gZnJvbSAnQHJlZHV4anMvdG9vbGtpdCc7XG5cbmltcG9ydCB7ZmluZE1hcEJvdW5kc30gZnJvbSAnLi9kYXRhLXV0aWxzJztcblxuLy8gZGlzYWJsZSBzdGFjayBjYXB0dXJlIGZvciB3aXRoVGFzayBjYWxscyB0aGF0IGhhcHBlbiBvdXRzaWRlIHN0cmljdCByZWR1Y2VyIGNvbnRleHRcbmRpc2FibGVTdGFja0NhcHR1cmluZygpO1xuXG4vKipcbiAqIFVwZGF0ZXJzIGZvciBgdmlzU3RhdGVgIHJlZHVjZXIuIENhbiBiZSB1c2VkIGluIHlvdXIgcm9vdCByZWR1Y2VyIHRvIGRpcmVjdGx5IG1vZGlmeSBrZXBsZXIuZ2wncyBzdGF0ZS5cbiAqIFJlYWQgbW9yZSBhYm91dCBbVXNpbmcgdXBkYXRlcnNdKC4uL2FkdmFuY2VkLXVzYWdlL3VzaW5nLXVwZGF0ZXJzLm1kKVxuICpcbiAqIEBwdWJsaWNcbiAqIEBleGFtcGxlXG4gKlxuICogaW1wb3J0IGtlcGxlckdsUmVkdWNlciwge3Zpc1N0YXRlVXBkYXRlcnN9IGZyb20gJ0BrZXBsZXIuZ2wvcmVkdWNlcnMnO1xuICogLy8gUm9vdCBSZWR1Y2VyXG4gKiBjb25zdCByZWR1Y2VycyA9IGNvbWJpbmVSZWR1Y2Vycyh7XG4gKiAga2VwbGVyR2w6IGtlcGxlckdsUmVkdWNlcixcbiAqICBhcHA6IGFwcFJlZHVjZXJcbiAqIH0pO1xuICpcbiAqIGNvbnN0IGNvbXBvc2VkUmVkdWNlciA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gKiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICogICAgY2FzZSAnQ0xJQ0tfQlVUVE9OJzpcbiAqICAgICAgcmV0dXJuIHtcbiAqICAgICAgICAuLi5zdGF0ZSxcbiAqICAgICAgICBrZXBsZXJHbDoge1xuICogICAgICAgICAgLi4uc3RhdGUua2VwbGVyR2wsXG4gKiAgICAgICAgICBmb286IHtcbiAqICAgICAgICAgICAgIC4uLnN0YXRlLmtlcGxlckdsLmZvbyxcbiAqICAgICAgICAgICAgIHZpc1N0YXRlOiB2aXNTdGF0ZVVwZGF0ZXJzLmVubGFyZ2VGaWx0ZXJVcGRhdGVyKFxuICogICAgICAgICAgICAgICBzdGF0ZS5rZXBsZXJHbC5mb28udmlzU3RhdGUsXG4gKiAgICAgICAgICAgICAgIHtpZHg6IDB9XG4gKiAgICAgICAgICAgICApXG4gKiAgICAgICAgICB9XG4gKiAgICAgICAgfVxuICogICAgICB9O1xuICogIH1cbiAqICByZXR1cm4gcmVkdWNlcnMoc3RhdGUsIGFjdGlvbik7XG4gKiB9O1xuICpcbiAqIGV4cG9ydCBkZWZhdWx0IGNvbXBvc2VkUmVkdWNlcjtcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG4vLyBAdHMtaWdub3JlXG5jb25zdCB2aXNTdGF0ZVVwZGF0ZXJzID0gbnVsbDtcbi8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0SW50ZXJhY3Rpb25Db25maWc6IEludGVyYWN0aW9uQ29uZmlnID0ge1xuICB0b29sdGlwOiB7XG4gICAgaWQ6ICd0b29sdGlwJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy50b29sdGlwJyxcbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIGNvbmZpZzoge1xuICAgICAgZmllbGRzVG9TaG93OiB7fSxcbiAgICAgIGNvbXBhcmVNb2RlOiBmYWxzZSxcbiAgICAgIGNvbXBhcmVUeXBlOiBDT01QQVJFX1RZUEVTLkFCU09MVVRFXG4gICAgfVxuICB9LFxuICBnZW9jb2Rlcjoge1xuICAgIGlkOiAnZ2VvY29kZXInLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLmdlb2NvZGVyJyxcbiAgICBlbmFibGVkOiBmYWxzZSxcbiAgICBwb3NpdGlvbjogbnVsbCxcbiAgICBjb25maWc6IHtcbiAgICAgIGxpbWl0U2VhcmNoOiBmYWxzZVxuICAgIH1cbiAgfSxcbiAgYnJ1c2g6IHtcbiAgICBpZDogJ2JydXNoJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy5icnVzaCcsXG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgY29uZmlnOiB7XG4gICAgICAvLyBzaXplIGlzIGluIGttXG4gICAgICBzaXplOiAwLjVcbiAgICB9XG4gIH0sXG4gIGNvb3JkaW5hdGU6IHtcbiAgICBpZDogJ2Nvb3JkaW5hdGUnLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLmNvb3JkaW5hdGUnLFxuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIHBvc2l0aW9uOiBudWxsXG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0FOSU1BVElPTl9DT05GSUc6IEFuaW1hdGlvbkNvbmZpZyA9IHtcbiAgZG9tYWluOiBudWxsLFxuICBjdXJyZW50VGltZTogbnVsbCxcbiAgc3BlZWQ6IDEsXG4gIGlzQW5pbWF0aW5nOiBmYWxzZSxcbiAgdGltZVN0ZXBzOiBudWxsLFxuICB0aW1lRm9ybWF0OiBudWxsLFxuICB0aW1lem9uZTogbnVsbCxcbiAgZGVmYXVsdFRpbWVGb3JtYXQ6IG51bGwsXG4gIGhpZGVDb250cm9sOiBmYWxzZSxcbiAgZHVyYXRpb246IG51bGxcbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0VESVRPUjogRWRpdG9yID0ge1xuICBtb2RlOiBFRElUT1JfTU9ERVMuRFJBV19QT0xZR09OLFxuICBmZWF0dXJlczogW10sXG4gIHNlbGVjdGVkRmVhdHVyZTogbnVsbCxcbiAgdmlzaWJsZTogdHJ1ZVxufTtcblxuLyoqXG4gKiBEZWZhdWx0IGluaXRpYWwgYHZpc1N0YXRlYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBjb25zdGFudFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgSU5JVElBTF9WSVNfU1RBVEU6IFZpc1N0YXRlID0ge1xuICAvLyBtYXAgaW5mb1xuICBtYXBJbmZvOiB7XG4gICAgdGl0bGU6ICcnLFxuICAgIGRlc2NyaXB0aW9uOiAnJ1xuICB9LFxuICAvLyBsYXllcnNcbiAgbGF5ZXJzOiBbXSxcbiAgbGF5ZXJEYXRhOiBbXSxcbiAgbGF5ZXJUb0JlTWVyZ2VkOiBbXSxcbiAgbGF5ZXJPcmRlcjogW10sXG4gIGxheWVyT3JkZXJUb0JlTWVyZ2VkOiBudWxsLFxuXG4gIC8vIGZpbHRlcnNcbiAgZmlsdGVyczogW10sXG4gIGZpbHRlclRvQmVNZXJnZWQ6IFtdLFxuXG4gIC8vIGEgY29sbGVjdGlvbiBvZiBtdWx0aXBsZSBkYXRhc2V0XG4gIGRhdGFzZXRzOiB7fSxcbiAgZWRpdGluZ0RhdGFzZXQ6IHVuZGVmaW5lZCxcblxuICAvLyBlZmZlY3RzXG4gIGVmZmVjdHM6IFtdLFxuICBlZmZlY3RPcmRlcjogW10sXG5cbiAgLy8gYW5ub3RhdGlvbnNcbiAgYW5ub3RhdGlvbnM6IFtdLFxuICBhbm5vdGF0aW9uc1RvQmVNZXJnZWQ6IFtdLFxuICBzZWxlY3RlZEFubm90YXRpb25JZDogbnVsbCxcbiAgaXNFZGl0aW5nQW5ub3RhdGlvblRleHQ6IGZhbHNlLFxuXG4gIGludGVyYWN0aW9uQ29uZmlnOiBkZWZhdWx0SW50ZXJhY3Rpb25Db25maWcsXG4gIGludGVyYWN0aW9uVG9CZU1lcmdlZDoge30sXG5cbiAgbGF5ZXJCbGVuZGluZzogJ25vcm1hbCcsXG4gIG92ZXJsYXlCbGVuZGluZzogJ25vcm1hbCcsXG4gIGhvdmVySW5mbzogdW5kZWZpbmVkLFxuICBjbGlja2VkOiB1bmRlZmluZWQsXG4gIG1vdXNlUG9zOiB7fSxcbiAgbWF4RGVmYXVsdFRvb2x0aXBzOiBNQVhfREVGQVVMVF9UT09MVElQUyxcblxuICAvLyB0aGlzIGlzIHVzZWQgd2hlbiB1c2VyIHNwbGl0IG1hcHNcbiAgc3BsaXRNYXBzOiBbXG4gICAgLy8gdGhpcyB3aWxsIGNvbnRhaW4gYSBsaXN0IG9mIG9iamVjdHMgdG9cbiAgICAvLyBkZXNjcmliZSB0aGUgc3RhdGUgb2YgbGF5ZXIgYXZhaWxhYmlsaXR5IGFuZCB2aXNpYmlsaXR5IGZvciBlYWNoIG1hcFxuICAgIC8vIFtcbiAgICAvLyAgIHtcbiAgICAvLyAgICAgIGxheWVyczoge2xheWVyX2lkOiB0cnVlIHwgZmFsc2V9XG4gICAgLy8gICB9XG4gICAgLy8gXVxuICBdLFxuICBzcGxpdE1hcHNUb0JlTWVyZ2VkOiBbXSxcbiAgaXNNZXJnaW5nRGF0YXNldHM6IHt9LFxuICAvLyBkZWZhdWx0cyBsYXllciBjbGFzc2VzXG4gIGxheWVyQ2xhc3NlczogTGF5ZXJDbGFzc2VzLFxuXG4gIC8vIGRlZmF1bHQgYW5pbWF0aW9uXG4gIC8vIHRpbWUgaW4gdW5peCB0aW1lc3RhbXAgKG1pbGxpc2Vjb25kcykgKHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBzaW5jZSB0aGUgVW5peCBFcG9jaClcbiAgYW5pbWF0aW9uQ29uZmlnOiBERUZBVUxUX0FOSU1BVElPTl9DT05GSUcsXG5cbiAgZWRpdG9yOiBERUZBVUxUX0VESVRPUixcblxuICBmaWxlTG9hZGluZzogZmFsc2UsXG4gIGZpbGVMb2FkaW5nUHJvZ3Jlc3M6IHt9LFxuICAvLyBmb3IgbG9hZGluZyBkYXRhc2V0c1xuICBsb2FkaW5nSW5kaWNhdG9yVmFsdWU6IDAsXG5cbiAgbG9hZGVyczogW10sXG4gIGxvYWRPcHRpb25zOiB7fSxcblxuICAvLyB2aXNTdGF0ZU1lcmdlcnNcbiAgbWVyZ2VyczogVklTX1NUQVRFX01FUkdFUlMsXG5cbiAgLy8ga2VwbGVyIHNjaGVtYXNcbiAgc2NoZW1hOiBLZXBsZXJHTFNjaGVtYVxufTtcblxuZXhwb3J0IGNvbnN0IEFDVElPTl9UQVNLX0ZJVF9CT1VORFMgPSBUYXNrLmZyb21DYWxsYmFjayhcbiAgKF8sIGNiKSA9PiBjYigpLFxuXG4gICdBQ1RJT05fVEFTS19GSVRfQk9VTkRTJ1xuKTtcblxuZXhwb3J0IGNvbnN0IEFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04gPSBUYXNrLmZyb21DYWxsYmFjayhcbiAgKF8sIGNiKSA9PiBjYigpLFxuXG4gICdBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OJ1xuKTtcblxudHlwZSBVcGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGFUeXBlID0ge1xuICBsYXllcnM6IExheWVyW107XG4gIGxheWVyRGF0YTogYW55W107XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBzdGF0ZSB3aXRoIHVwZGF0ZWQgbGF5ZXIgYW5kIGxheWVyRGF0YVxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YTxTIGV4dGVuZHMgVXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhVHlwZT4oXG4gIHN0YXRlOiBTLFxuICB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fToge2xheWVyRGF0YT86IGFueTsgbGF5ZXI6IExheWVyOyBpZHg6IG51bWJlcn1cbik6IFMge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogc3RhdGUubGF5ZXJzLm1hcCgobHlyLCBpKSA9PiAoaSA9PT0gaWR4ID8gbGF5ZXIgOiBseXIpKSxcbiAgICBsYXllckRhdGE6IGxheWVyRGF0YVxuICAgICAgPyBzdGF0ZS5sYXllckRhdGEubWFwKChkLCBpKSA9PiAoaSA9PT0gaWR4ID8gbGF5ZXJEYXRhIDogZCkpXG4gICAgICA6IHN0YXRlLmxheWVyRGF0YVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RhdGVPbkxheWVyVmlzaWJpbGl0eUNoYW5nZTxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTLCBsYXllcjogTGF5ZXIpOiBTIHtcbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGlmIChzdGF0ZS5zcGxpdE1hcHMubGVuZ3RoKSB7XG4gICAgbmV3U3RhdGUgPSB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIHNwbGl0TWFwczogbGF5ZXIuY29uZmlnLmlzVmlzaWJsZVxuICAgICAgICA/IGFkZE5ld0xheWVyc1RvU3BsaXRNYXAoc3RhdGUuc3BsaXRNYXBzLCBsYXllcilcbiAgICAgICAgOiByZW1vdmVMYXllckZyb21TcGxpdE1hcHMoc3RhdGUuc3BsaXRNYXBzLCBsYXllcilcbiAgICB9O1xuICB9XG5cbiAgaWYgKGxheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCkge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBDb21wYXJlcyB0d28gb2JqZWN0cyAob3IgYXJyYXlzKSBhbmQgcmV0dXJucyBhIG5ldyBvYmplY3Qgd2l0aCBvbmx5IHRoZVxuICogcHJvcGVydGllcyB0aGF0IGhhdmUgY2hhbmdlZCBiZXR3ZWVuIHRoZSB0d28gb2JqZWN0cy5cbiAqL1xuZnVuY3Rpb24gcGlja0NoYW5nZWRQcm9wczxUPihwcmV2OiBULCBuZXh0OiBUKTogUGFydGlhbDxUPiB7XG4gIGNvbnN0IGNoYW5nZWRQcm9wczogUGFydGlhbDxUPiA9IHt9O1xuICBjb25zdCBwaWNrUHJvcHNPZiA9IG9iaiA9PiB7XG4gICAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2hhbmdlZFByb3BzLCBrZXkpICYmXG4gICAgICAgICFpc0VxdWFsKHByZXZba2V5XSwgbmV4dFtrZXldKVxuICAgICAgKSB7XG4gICAgICAgIGNoYW5nZWRQcm9wc1trZXldID0gbmV4dFtrZXldO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICBwaWNrUHJvcHNPZihwcmV2KTtcbiAgcGlja1Byb3BzT2YobmV4dCk7XG4gIHJldHVybiBjaGFuZ2VkUHJvcHM7XG59XG5cbmNvbnN0IFZJU1VBTF9DSEFOTkVMX1BST1BfVFlQRVMgPSBbJ2ZpZWxkJywgJ3NjYWxlJywgJ2RvbWFpbicsICdhZ2dyZWdhdGlvbiddO1xuXG4vKipcbiAqIEFwcGx5IGxheWVyIGNvbmZpZ1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eSwgbWF4LXN0YXRlbWVudHNcbmV4cG9ydCBmdW5jdGlvbiBhcHBseUxheWVyQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BcHBseUxheWVyQ29uZmlnVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXJJZCwgbmV3TGF5ZXJDb25maWcsIGxheWVySW5kZXh9ID0gYWN0aW9uO1xuICBjb25zdCBuZXdQYXJzZWRMYXllciA9XG4gICAgLy8gd2lsbCBtb3ZlIHZpc3VhbENoYW5uZWxzIHRvIHRoZSBjb25maWcgcHJvcFxuICAgIHBhcnNlTGF5ZXJDb25maWcoc3RhdGUuc2NoZW1hLCBuZXdMYXllckNvbmZpZyk7XG4gIGNvbnN0IG9sZExheWVyID0gc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBvbGRMYXllcklkKTtcbiAgaWYgKCFvbGRMYXllciB8fCAhbmV3UGFyc2VkTGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKGxheWVySW5kZXggIT09IG51bGwgJiYgbGF5ZXJJbmRleCAhPT0gdW5kZWZpbmVkICYmIHN0YXRlLmxheWVyc1tsYXllckluZGV4XSAhPT0gb2xkTGF5ZXIpIHtcbiAgICAvLyBsYXllckluZGV4IGlzIHByb3ZpZGVkLCBidXQgaXQgZG9lc24ndCBtYXRjaCB0aGUgb2xkTGF5ZXJcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW25ld1BhcnNlZExheWVyLmNvbmZpZy5kYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgLy8gTWFrZSBzdXJlIHRoZSBsYXllciBpcyB2YWxpZCBhbmQgY29udmVydCBpdCB0byBMYXllclxuICBjb25zdCBuZXdMYXllciA9IHZhbGlkYXRlTGF5ZXJXaXRoRGF0YShkYXRhc2V0LCBuZXdQYXJzZWRMYXllciwgc3RhdGUubGF5ZXJDbGFzc2VzKTtcbiAgaWYgKCFuZXdMYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxldCBuZXh0U3RhdGUgPSBzdGF0ZTtcblxuICBpZiAobmV3TGF5ZXIudHlwZSAmJiBuZXdMYXllci50eXBlICE9PSBvbGRMYXllci50eXBlKSB7XG4gICAgY29uc3Qgb2xkTGF5ZXJJbmRleCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllcklkKTtcbiAgICBpZiAob2xkTGF5ZXJJbmRleCA+PSAwKSB7XG4gICAgICBuZXh0U3RhdGUgPSBsYXllclR5cGVDaGFuZ2VVcGRhdGVyKG5leHRTdGF0ZSwgbGF5ZXJUeXBlQ2hhbmdlKG9sZExheWVyLCBuZXdMYXllci50eXBlKSk7XG4gICAgICAvLyBsYXllclR5cGVDaGFuZ2VVcGRhdGVyIGNoYW5nZXMgdGhlIGlkIG9mIHRoZSBsYXllciwgc28gd2UgbmVlZCB0byBvYnRhaW4gdGhlIG5ldyBpZFxuICAgICAgLy8gYnV0IGZpcnN0IG1ha2Ugc3VyZSB0aGF0IHRoZSBsYXllciB3YXMgbm90IHJlbW92ZWRcbiAgICAgIGlmIChuZXh0U3RhdGUubGF5ZXJzLmxlbmd0aCA9PT0gc3RhdGUubGF5ZXJzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBuZXdMYXllcklkID0gbmV4dFN0YXRlLmxheWVyc1tvbGRMYXllckluZGV4XS5pZDtcbiAgICAgICAgbmV4dFN0YXRlID0gYXBwbHlMYXllckNvbmZpZ1VwZGF0ZXIoXG4gICAgICAgICAgbmV4dFN0YXRlLFxuICAgICAgICAgIGFwcGx5TGF5ZXJDb25maWcobmV3TGF5ZXJJZCwgey4uLm5ld0xheWVyQ29uZmlnLCBpZDogbmV3TGF5ZXJJZH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXh0U3RhdGU7XG4gIH1cblxuICAvLyBzZXJpYWxpemVMYXllcigpIG1pZ2h0IHJldHVybiBudWxsIGlmIHRoZSBvbGQgbGF5ZXIgaXMgbm90IHZhbGlkLFxuICAvLyB3ZSBzaG91bGQgc3RpbGwgYXBwbHkgdGhlIGNoYW5nZXMgaW4gdGhhdCBjYXNlXG4gIGNvbnN0IHNlcmlhbGl6ZWRPbGRMYXllciA9IHNlcmlhbGl6ZUxheWVyKG9sZExheWVyLCBzdGF0ZS5zY2hlbWEpID8/IHtjb25maWc6IHt9fTtcbiAgY29uc3Qgc2VyaWFsaXplZE5ld0xheWVyID0gc2VyaWFsaXplTGF5ZXIobmV3TGF5ZXIsIHN0YXRlLnNjaGVtYSk7XG4gIGlmICghc2VyaWFsaXplZE5ld0xheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmICghaXNFcXVhbChzZXJpYWxpemVkT2xkTGF5ZXIsIHNlcmlhbGl6ZWROZXdMYXllcikpIHtcbiAgICBjb25zdCBjaGFuZ2VkID0gcGlja0NoYW5nZWRQcm9wcyhzZXJpYWxpemVkT2xkTGF5ZXIuY29uZmlnLCBzZXJpYWxpemVkTmV3TGF5ZXIuY29uZmlnKTtcblxuICAgIGlmICgndmlzQ29uZmlnJyBpbiBjaGFuZ2VkKSB7XG4gICAgICBpZiAoY2hhbmdlZC52aXNDb25maWcpIHtcbiAgICAgICAgbmV4dFN0YXRlID0gbGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyKFxuICAgICAgICAgIG5leHRTdGF0ZSxcbiAgICAgICAgICBsYXllclZpc0NvbmZpZ0NoYW5nZShvbGRMYXllciwgY2hhbmdlZC52aXNDb25maWcpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBkZWxldGUgY2hhbmdlZC52aXNDb25maWc7XG4gICAgfVxuXG4gICAgT2JqZWN0LmtleXMob2xkTGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goY2hhbm5lbE5hbWUgPT4ge1xuICAgICAgY29uc3QgY2hhbm5lbCA9IG9sZExheWVyLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxOYW1lXTtcbiAgICAgIGNvbnN0IGNoYW5uZWxQcm9wTmFtZXMgPSBWSVNVQUxfQ0hBTk5FTF9QUk9QX1RZUEVTLm1hcChwcm9wID0+IGNoYW5uZWxbcHJvcF0pO1xuICAgICAgaWYgKGNoYW5uZWxQcm9wTmFtZXMuc29tZShwcm9wID0+IHByb3AgaW4gY2hhbmdlZCkpIHtcbiAgICAgICAgbmV4dFN0YXRlID0gbGF5ZXJWaXN1YWxDaGFubmVsQ2hhbmdlVXBkYXRlcihcbiAgICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgICAgbGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlKFxuICAgICAgICAgICAgb2xkTGF5ZXIsXG4gICAgICAgICAgICBwaWNrKG5ld0xheWVyLmNvbmZpZywgY2hhbm5lbFByb3BOYW1lcyksXG4gICAgICAgICAgICBjaGFubmVsTmFtZVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIGNoYW5uZWxQcm9wTmFtZXMpIHtcbiAgICAgICAgICBkZWxldGUgY2hhbmdlZFtwcm9wXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKE9iamVjdC5rZXlzKGNoYW5nZWQpLmxlbmd0aCA+IDApIHtcbiAgICAgIG5leHRTdGF0ZSA9IGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgICAgICAgbmV4dFN0YXRlLFxuICAgICAgICBsYXllckNvbmZpZ0NoYW5nZShvbGRMYXllciwgcGljayhuZXdMYXllci5jb25maWcsIE9iamVjdC5rZXlzKGNoYW5nZWQpKSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlbGF5ZXJWaXNpYmlsdHkoc3RhdGU6IFZpc1N0YXRlLCBuZXdMYXllcjogTGF5ZXIsIGlzVmlzaWJsZT86IGJvb2xlYW4pOiBWaXNTdGF0ZSB7XG4gIGxldCBuZXdTdGF0ZSA9IHVwZGF0ZVN0YXRlT25MYXllclZpc2liaWxpdHlDaGFuZ2Uoc3RhdGUsIG5ld0xheWVyKTtcbiAgY29uc3QgZmlsdGVySW5kZXggPSBmaWx0ZXJTeW5jZWRXaXRoVGltZWxpbmUoc3RhdGUpO1xuICBpZiAoaXNMYXllckFuaW1hdGFibGUobmV3TGF5ZXIpICYmIGZpbHRlckluZGV4ICE9PSAtMSkge1xuICAgIC8vIGlmIGxheWVyIGlzIGdvaW5nIHRvIGJlIHZpc2libGUgd2Ugc3luYyB3aXRoIGZpbHRlciBvdGhlcndpc2Ugd2UgbmVlZCB0byBjaGVjayB3aGV0aGVyIG90aGVyIGFuaW1hdGFibGUgbGF5ZXJzIGV4aXN0cyBhbmQgYXJlIHZpc2libGVcbiAgICBuZXdTdGF0ZSA9IHN5bmNUaW1lRmlsdGVyV2l0aExheWVyVGltZWxpbmVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgICBpZHg6IGZpbHRlckluZGV4LFxuICAgICAgZW5hYmxlOiBpc1Zpc2libGUgPyBpc1Zpc2libGUgOiBnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVycyhzdGF0ZS5sYXllcnMpLmxlbmd0aCA+IDBcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIGJhc2UgY29uZmlnOiBkYXRhSWQsIGxhYmVsLCBjb2x1bW4sIGlzVmlzaWJsZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZXhwb3J0IGZ1bmN0aW9uIGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyfSA9IGFjdGlvbjtcbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgY29uc3QgcHJvcHMgPSBPYmplY3Qua2V5cyhhY3Rpb24ubmV3Q29uZmlnKTtcbiAgaWYgKFxuICAgIHR5cGVvZiBhY3Rpb24ubmV3Q29uZmlnLmRhdGFJZCA9PT0gJ3N0cmluZycgJiZcbiAgICBhY3Rpb24ubmV3Q29uZmlnLmRhdGFJZCAhPT0gb2xkTGF5ZXIuY29uZmlnLmRhdGFJZFxuICApIHtcbiAgICBjb25zdCB7ZGF0YUlkLCAuLi5yZXN0Q29uZmlnfSA9IGFjdGlvbi5uZXdDb25maWc7XG4gICAgY29uc3Qgc3RhdGVXaXRoRGF0YUlkID0gbGF5ZXJEYXRhSWRDaGFuZ2VVcGRhdGVyKHN0YXRlLCB7XG4gICAgICBvbGRMYXllcixcbiAgICAgIG5ld0NvbmZpZzoge2RhdGFJZH1cbiAgICB9KTtcbiAgICBjb25zdCBuZXh0TGF5ZXIgPSBzdGF0ZVdpdGhEYXRhSWQubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gICAgcmV0dXJuIG5leHRMYXllciAmJiBPYmplY3Qua2V5cyhyZXN0Q29uZmlnKS5sZW5ndGhcbiAgICAgID8gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKHN0YXRlV2l0aERhdGFJZCwge29sZExheWVyOiBuZXh0TGF5ZXIsIG5ld0NvbmZpZzogcmVzdENvbmZpZ30pXG4gICAgICA6IHN0YXRlV2l0aERhdGFJZDtcbiAgfVxuXG4gIGxldCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKGFjdGlvbi5uZXdDb25maWcpO1xuXG4gIGxldCBsYXllckRhdGE7XG5cbiAgaWYgKG5ld0xheWVyLnNob3VsZENhbGN1bGF0ZUxheWVyRGF0YShwcm9wcykpIHtcbiAgICBjb25zdCBvbGRMYXllckRhdGEgPSBzdGF0ZS5sYXllckRhdGFbaWR4XTtcblxuICAgIGNvbnN0IHVwZGF0ZUxheWVyRGF0YVJlc3VsdCA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIG9sZExheWVyRGF0YSk7XG4gICAgbmV3TGF5ZXIgPSB1cGRhdGVMYXllckRhdGFSZXN1bHQubGF5ZXI7XG4gICAgbGF5ZXJEYXRhID0gdXBkYXRlTGF5ZXJEYXRhUmVzdWx0LmxheWVyRGF0YTtcbiAgfVxuXG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuICBpZiAoJ2lzVmlzaWJsZScgaW4gYWN0aW9uLm5ld0NvbmZpZykge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlbGF5ZXJWaXNpYmlsdHkobmV3U3RhdGUsIG5ld0xheWVyLCBhY3Rpb24ubmV3Q29uZmlnLmlzVmlzaWJsZSk7XG4gIH1cblxuICBpZiAoJ2NvbHVtbnMnIGluIGFjdGlvbi5uZXdDb25maWcgJiYgbmV3TGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkKSB7XG4gICAgLy8gVE9ETzogU2hhbiwgbWFrZSB0aGUgYW5pbWF0aW9uIGNvbmZpZyBmdW5jdGlvbiBtb3JlIHJvYnVzdFxuICAgIG5ld1N0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV3U3RhdGUsIHtcbiAgICBsYXllcjogbmV3TGF5ZXIsXG4gICAgbGF5ZXJEYXRhLFxuICAgIGlkeFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxheWVyQW5pbWF0aW9uQ2hhbmdlVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTLCBhY3Rpb24pOiBTIHtcbiAgY29uc3Qge29sZExheWVyLCBwcm9wLCB2YWx1ZX0gPSBhY3Rpb247XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG5cbiAgY29uc3QgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgYW5pbWF0aW9uOiB7XG4gICAgICAuLi5vbGRMYXllci5jb25maWcuYW5pbWF0aW9uLFxuICAgICAgW3Byb3BdOiB2YWx1ZVxuICAgIH1cbiAgfSk7XG5cbiAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSwgc3RhdGUubGF5ZXJEYXRhW2lkeF0pO1xuXG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEoc3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXJJZCwgaXNWaXNpYmxlLCBzcGxpdE1hcElkXG4gKiBoYW5kbGVzIHR3byBjYXNlczpcbiAqIDEpIHRvZ2dsZSB0aGUgdmlzaWJpbGl0eSBvZiBsb2NhbCBTcGxpdE1hcCBsYXllciAodmlzU3RhdGUuc3BsaXRNYXAubGF5ZXJzKVxuICogMikgdG9nZ2xlIHRoZSB2aXNpYmlsaXR5IG9mIGdsb2JhbCBsYXllciAodmlzU3RhdGUubGF5ZXJzKVxuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclRvZ2dsZVZpc2liaWxpdHlVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVG9nZ2xlVmlzaWJpbGl0eVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2xheWVySWQsIGlzVmlzaWJsZSwgc3BsaXRNYXBJZH0gPSBhY3Rpb247XG4gIGNvbnN0IGxheWVyID0gc3RhdGUubGF5ZXJzLmZpbmQoZCA9PiBkLmlkID09PSBsYXllcklkKTtcblxuICBpZiAoIWxheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG5cbiAgaWYgKHNwbGl0TWFwSWQpIHtcbiAgICAvLyBbY2FzZSAxXTogdG9nZ2xlIGxvY2FsIGxheWVyIHZpc2liaWxpdHkgZm9yIGVhY2ggU3BsaXRNYXBcbiAgICBjb25zdCBtYXBJbmRleCA9IG5ld1N0YXRlLnNwbGl0TWFwcy5maW5kSW5kZXgoc20gPT4gc20uaWQgPT09IHNwbGl0TWFwSWQpO1xuICAgIGlmIChpc1Zpc2libGUpIHtcbiAgICAgIC8vIDEpIGlmIHRoZSBsYXllciBpcyBpbnZpc2libGUgZ2xvYmFsbHlcbiAgICAgIC8vIC0+IHNldCBnbG9iYWwgdmlzaWJpbGl0eSB0byB0cnVlXG4gICAgICBuZXdTdGF0ZSA9IGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihuZXdTdGF0ZSwgbGF5ZXJDb25maWdDaGFuZ2UobGF5ZXIsIHtpc1Zpc2libGU6IHRydWV9KSk7XG5cbiAgICAgIC8vIC0+IHNldCBsb2NhbCB2aXNpYmlsaXR5IHRvIHRydWUgYW5kIHRoZSBsb2NhbCB2aXNpYmlsaXRpZXMgb2YgYWxsIG90aGVyIFNwbGl0TWFwcyB0byBmYWxzZVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICAgIHNwbGl0TWFwczogbmV3U3RhdGUuc3BsaXRNYXBzLm1hcChzbSA9PlxuICAgICAgICAgIHNtLmlkICE9PSBzcGxpdE1hcElkXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAuLi5zbSxcbiAgICAgICAgICAgICAgICBsYXllcnM6IHtcbiAgICAgICAgICAgICAgICAgIC4uLnNtLmxheWVycyxcbiAgICAgICAgICAgICAgICAgIFtsYXllcklkXTogZmFsc2VcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgIC4uLnNtLFxuICAgICAgICAgICAgICAgIGxheWVyczoge1xuICAgICAgICAgICAgICAgICAgLi4uc20ubGF5ZXJzLFxuICAgICAgICAgICAgICAgICAgW2xheWVySWRdOiB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIH07XG4gICAgfVxuICAgIC8vIDIpIGVsc2Ugd2hlbiB0aGUgbGF5ZXIgaXMgdmlzaWJsZSBnbG9iYWxseVxuICAgIHJldHVybiB0b2dnbGVMYXllckZvck1hcFVwZGF0ZXIobmV3U3RhdGUsIHRvZ2dsZUxheWVyRm9yTWFwKG1hcEluZGV4LCBsYXllcklkKSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gW2Nhc2UgMl06IHRvZ2dsZSBnbG9iYWwgbGF5ZXIgdmlzaWJpbGl0eVxuICAgIGNvbnN0IG5ld0xheWVyID0gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe2lzVmlzaWJsZX0pO1xuICAgIGNvbnN0IGlkeCA9IG5ld1N0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBsYXllcklkKTtcblxuICAgIG5ld1N0YXRlID0gdXBkYXRlbGF5ZXJWaXNpYmlsdHkobmV3U3RhdGUsIG5ld0xheWVyLCBpc1Zpc2libGUpO1xuICAgIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV3U3RhdGUsIHtcbiAgICAgIGxheWVyOiBuZXdMYXllcixcbiAgICAgIGlkeFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBzdGF0ZVxuICogQHJldHVybnMgaW5kZXggb2YgdGhlIGZpbHRlciBzeW5jZWQgdG8gdGltZWxpbmUgb3IgLTFcbiAqL1xuZnVuY3Rpb24gZmlsdGVyU3luY2VkV2l0aFRpbWVsaW5lKHN0YXRlOiBWaXNTdGF0ZSk6IG51bWJlciB7XG4gIHJldHVybiBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IChmIGFzIFRpbWVSYW5nZUZpbHRlcikuc3luY2VkV2l0aExheWVyVGltZWxpbmUpO1xufVxuXG4vKipcbiAqIFVwZGF0ZXMgaXNWYWxpZCBmbGFnIG9mIGEgbGF5ZXIuXG4gKiBVcGRhdGVzIGlzVmlzaWJsZSBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgaXNWYWxpZC5cbiAqIFRyaWdnZXJzIHVwZGF0ZSBvZiBkYXRhIGZvciB0aGUgbGF5ZXIgaW4gb3JkZXIgdG8gZ2V0IGVycm9ycyBhZ2FpbiBkdXJpbmcgbmV4dCB1cGRhdGUgaXRlcmF0aW9uLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJTZXRJc1ZhbGlkVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclNldElzVmFsaWRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgaXNWYWxpZH0gPSBhY3Rpb247XG5cbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgY29uc3QgbGF5ZXJUb1VwZGF0ZSA9IHN0YXRlLmxheWVyc1tpZHhdO1xuICBpZiAobGF5ZXJUb1VwZGF0ZSkge1xuICAgIGxldCBuZXdMYXllcjtcbiAgICBsZXQgbmV3RGF0YSA9IG51bGw7XG5cbiAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgLy8gVHJpZ2dlciBkYXRhIHVwZGF0ZSBpbiBvcmRlciB0byBzaG93IGVycm9ycyBhZ2FpbiBpZiBwcmVzZW50LlxuICAgICAgY29uc3Qge2xheWVyLCBsYXllckRhdGF9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKGxheWVyVG9VcGRhdGUsIHN0YXRlLCB1bmRlZmluZWQpO1xuICAgICAgbmV3TGF5ZXIgPSBsYXllcjtcbiAgICAgIG5ld0RhdGEgPSBsYXllckRhdGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0xheWVyID0gbGF5ZXJUb1VwZGF0ZS51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgIGlzVmlzaWJsZTogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgbmV3TGF5ZXIuaXNWYWxpZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEoc3RhdGUsIHtpZHgsIGxheWVyOiBuZXdMYXllciwgbGF5ZXJEYXRhOiBuZXdEYXRhfSk7XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbmZ1bmN0aW9uIGFkZE9yUmVtb3ZlVGV4dExhYmVscyhuZXdGaWVsZHMsIHRleHRMYWJlbCwgZGVmYXVsdFRleHRMYWJlbCA9IERFRkFVTFRfVEVYVF9MQUJFTCkge1xuICBsZXQgbmV3VGV4dExhYmVsID0gdGV4dExhYmVsLnNsaWNlKCk7XG5cbiAgY29uc3QgY3VycmVudEZpZWxkcyA9IHRleHRMYWJlbC5tYXAodGwgPT4gdGwuZmllbGQgJiYgdGwuZmllbGQubmFtZSkuZmlsdGVyKGQgPT4gZCk7XG5cbiAgY29uc3QgYWRkRmllbGRzID0gbmV3RmllbGRzLmZpbHRlcihmID0+ICFjdXJyZW50RmllbGRzLmluY2x1ZGVzKGYubmFtZSkpO1xuICBjb25zdCBkZWxldGVGaWVsZHMgPSBjdXJyZW50RmllbGRzLmZpbHRlcihmID0+ICFuZXdGaWVsZHMuZmluZChmZCA9PiBmZC5uYW1lID09PSBmKSk7XG5cbiAgLy8gZGVsZXRlXG4gIG5ld1RleHRMYWJlbCA9IG5ld1RleHRMYWJlbC5maWx0ZXIodGwgPT4gdGwuZmllbGQgJiYgIWRlbGV0ZUZpZWxkcy5pbmNsdWRlcyh0bC5maWVsZC5uYW1lKSk7XG4gIG5ld1RleHRMYWJlbCA9ICFuZXdUZXh0TGFiZWwubGVuZ3RoID8gW2RlZmF1bHRUZXh0TGFiZWxdIDogbmV3VGV4dExhYmVsO1xuXG4gIC8vIGFkZFxuICBuZXdUZXh0TGFiZWwgPSBbXG4gICAgLi4ubmV3VGV4dExhYmVsLmZpbHRlcih0bCA9PiB0bC5maWVsZCksXG4gICAgLi4uYWRkRmllbGRzLm1hcChhZiA9PiAoe1xuICAgICAgLi4uZGVmYXVsdFRleHRMYWJlbCxcbiAgICAgIGZpZWxkOiBhZixcbiAgICAgIGNvbGxpc2lvbkVuYWJsZWQ6IEJvb2xlYW4oXG4gICAgICAgIHRleHRMYWJlbC5maW5kKHRsID0+IHRsLmNvbGxpc2lvbkVuYWJsZWQpPy5jb2xsaXNpb25FbmFibGVkID8/XG4gICAgICAgICAgZGVmYXVsdFRleHRMYWJlbC5jb2xsaXNpb25FbmFibGVkXG4gICAgICApXG4gICAgfSkpXG4gIF07XG5cbiAgcmV0dXJuIG5ld1RleHRMYWJlbDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlVGV4dExhYmVsUHJvcEFuZFZhbHVlKGlkeCwgcHJvcCwgdmFsdWUsIHRleHRMYWJlbCkge1xuICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0ZXh0TGFiZWxbaWR4XSwgcHJvcCkpIHtcbiAgICByZXR1cm4gdGV4dExhYmVsO1xuICB9XG5cbiAgbGV0IG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5zbGljZSgpO1xuXG4gIGlmIChwcm9wID09PSAnZmllbGQnICYmIHZhbHVlID09PSBudWxsICYmIHRleHRMYWJlbC5sZW5ndGggPiAxKSB7XG4gICAgLy8gcmVtb3ZlIGxhYmVsIHdoZW4gZmllbGQgdmFsdWUgaXMgc2V0IHRvIG51bGxcbiAgICBuZXdUZXh0TGFiZWwuc3BsaWNlKGlkeCwgMSk7XG4gIH0gZWxzZSBpZiAocHJvcCkge1xuICAgIG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5tYXAoKHRsLCBpKSA9PiAoaSA9PT0gaWR4ID8gey4uLnRsLCBbcHJvcF06IHZhbHVlfSA6IHRsKSk7XG4gIH1cblxuICByZXR1cm4gbmV3VGV4dExhYmVsO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciBiYXNlIGNvbmZpZzogZGF0YUlkLCBsYWJlbCwgY29sdW1uLCBpc1Zpc2libGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVGV4dExhYmVsQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclRleHRMYWJlbENoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBpZHgsIHByb3AsIHZhbHVlfSA9IGFjdGlvbjtcbiAgY29uc3Qge3RleHRMYWJlbH0gPSBvbGRMYXllci5jb25maWc7XG5cbiAgLy8gd2hlbiBhZGRpbmcgYSBuZXcgZW1wdHkgdGV4dCBsYWJlbCxcbiAgLy8gcmVseSBvbiB0aGUgbGF5ZXIncyBkZWZhdWx0IGNvbmZpZywgb3IgdXNlIHRoZSBjb25zdGFudCBERUZBVUxUX1RFWFRfTEFCRUxcbiAgY29uc3QgZGVmYXVsdFRleHRMYWJlbCA9XG4gICAgb2xkTGF5ZXIuZ2V0RGVmYXVsdExheWVyQ29uZmlnKHtkYXRhSWQ6ICcnfSk/LnRleHRMYWJlbD8uWzBdID8/IERFRkFVTFRfVEVYVF9MQUJFTDtcblxuICBsZXQgbmV3VGV4dExhYmVsID0gdGV4dExhYmVsLnNsaWNlKCk7XG4gIGlmICghdGV4dExhYmVsW2lkeF0gJiYgaWR4ID09PSB0ZXh0TGFiZWwubGVuZ3RoKSB7XG4gICAgLy8gaWYgaWR4IGlzIHNldCB0byBsZW5ndGgsIGFkZCBlbXB0eSB0ZXh0IGxhYmVsXG4gICAgbmV3VGV4dExhYmVsID0gW1xuICAgICAgLi4udGV4dExhYmVsLFxuICAgICAge1xuICAgICAgICAuLi5kZWZhdWx0VGV4dExhYmVsLFxuICAgICAgICBjb2xsaXNpb25FbmFibGVkOiBCb29sZWFuKHRleHRMYWJlbFswXT8uY29sbGlzaW9uRW5hYmxlZClcbiAgICAgIH1cbiAgICBdO1xuICB9XG5cbiAgaWYgKGlkeCA9PT0gJ2FsbCcgJiYgcHJvcCA9PT0gJ2ZpZWxkcycpIHtcbiAgICBuZXdUZXh0TGFiZWwgPSBhZGRPclJlbW92ZVRleHRMYWJlbHModmFsdWUsIHRleHRMYWJlbCwgZGVmYXVsdFRleHRMYWJlbCk7XG4gIH0gZWxzZSBpZiAoaWR4ID09PSAnYWxsJyAmJiBwcm9wKSB7XG4gICAgbmV3VGV4dExhYmVsID0gdGV4dExhYmVsLm1hcCh0bCA9PiAoey4uLnRsLCBbcHJvcF06IHZhbHVlfSkpO1xuICB9IGVsc2Uge1xuICAgIG5ld1RleHRMYWJlbCA9IHVwZGF0ZVRleHRMYWJlbFByb3BBbmRWYWx1ZShpZHgsIHByb3AsIHZhbHVlLCBuZXdUZXh0TGFiZWwpO1xuICB9XG4gIC8vIHVwZGF0ZSB0ZXh0IGxhYmVsIHByb3AgYW5kIHZhbHVlXG4gIHJldHVybiBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoc3RhdGUsIHtcbiAgICBvbGRMYXllcixcbiAgICBuZXdDb25maWc6IHt0ZXh0TGFiZWw6IG5ld1RleHRMYWJlbH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhKGRhdGFzZXQsIGxheWVyQ2xhc3NlcywgbGF5ZXIsIHNjaGVtYSkge1xuICBjb25zdCBsb2FkZWRMYXllciA9IHNlcmlhbGl6ZUxheWVyKGxheWVyLCBzY2hlbWEpO1xuICByZXR1cm4gbG9hZGVkTGF5ZXJcbiAgICA/IHZhbGlkYXRlTGF5ZXJXaXRoRGF0YShkYXRhc2V0LCBsb2FkZWRMYXllciwgbGF5ZXJDbGFzc2VzLCB7XG4gICAgICAgIGFsbG93RW1wdHlDb2x1bW46IHRydWVcbiAgICAgIH0pXG4gICAgOiBudWxsO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciBjb25maWcgZGF0YUlkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllckRhdGFJZENoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiB7XG4gICAgb2xkTGF5ZXI6IExheWVyO1xuICAgIG5ld0NvbmZpZzoge1xuICAgICAgZGF0YUlkOiBzdHJpbmc7XG4gICAgfTtcbiAgfVxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXIsIG5ld0NvbmZpZ30gPSBhY3Rpb247XG4gIGNvbnN0IHtkYXRhSWR9ID0gbmV3Q29uZmlnO1xuXG4gIGlmICghb2xkTGF5ZXIgfHwgIXN0YXRlLmRhdGFzZXRzW2RhdGFJZF0pIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcblxuICBsZXQgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyh7ZGF0YUlkfSk7XG5cbiAgLy8gdGhpcyBtYXkgaGFwcGVuIHdoZW4gYSBsYXllciBpcyBuZXcgKHR5cGU6IG51bGwgYW5kIG5vIGNvbHVtbnMpIGJ1dCBpdCdzIG5vdCByZWFkeSB0byBiZSBzYXZlZFxuICBpZiAobmV3TGF5ZXIuaXNWYWxpZFRvU2F2ZSgpKSB7XG4gICAgY29uc3QgdmFsaWRhdGVkID0gdmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEoXG4gICAgICBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdLFxuICAgICAgc3RhdGUubGF5ZXJDbGFzc2VzLFxuICAgICAgbmV3TGF5ZXIsXG4gICAgICBzdGF0ZS5zY2hlbWFcbiAgICApO1xuICAgIC8vIGlmIGNhbnQgdmFsaWRhdGUgaXQgd2l0aCBkYXRhIGNyZWF0ZSBhIG5ldyBvbmVcbiAgICBpZiAoIXZhbGlkYXRlZCkge1xuICAgICAgY29uc3Qgb2xkTGF5ZXJUeXBlID0gb2xkTGF5ZXIudHlwZTtcbiAgICAgIGlmIChvbGRMYXllclR5cGUpIHtcbiAgICAgICAgbmV3TGF5ZXIgPSBuZXcgc3RhdGUubGF5ZXJDbGFzc2VzW29sZExheWVyVHlwZV0oe2RhdGFJZCwgaWQ6IG9sZExheWVyLmlkfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0xheWVyID0gdmFsaWRhdGVkO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBMYXllciBpcyBub3QgdmFsaWQgdG8gc2F2ZSAoZS5nLiBtaXNzaW5nIGNvbHVtbnMpLCBidXQgd2Ugc3RpbGwgbmVlZCB0b1xuICAgIC8vIHJlbWFwIHZpc3VhbCBjaGFubmVsIGZpZWxkcyB0byB0aGUgbmV3IGRhdGFzZXQgdG8gYXZvaWQgc3RhbGUgZmllbGQgcmVmZXJlbmNlc1xuICAgIC8vIHRoYXQgcG9pbnQgdG8gcm93cyBiZXlvbmQgdGhlIG5ldyBkYXRhc2V0J3MgbGVuZ3RoXG4gICAgY29uc3QgbmV3RGF0YXNldEZpZWxkcyA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF0uZmllbGRzO1xuICAgIGNvbnN0IHJlbWFwcGVkRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gICAgT2JqZWN0LnZhbHVlcyhuZXdMYXllci52aXN1YWxDaGFubmVscykuZm9yRWFjaCgoe2ZpZWxkOiBmaWVsZEtleX0pID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRGaWVsZCA9IG5ld0xheWVyLmNvbmZpZ1tmaWVsZEtleV07XG4gICAgICBpZiAoY3VycmVudEZpZWxkKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoZWQgPSBuZXdEYXRhc2V0RmllbGRzLmZpbmQoZiA9PiBmLm5hbWUgPT09IGN1cnJlbnRGaWVsZC5uYW1lKTtcbiAgICAgICAgcmVtYXBwZWRGaWVsZHNbZmllbGRLZXldID0gbWF0Y2hlZCB8fCBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChPYmplY3Qua2V5cyhyZW1hcHBlZEZpZWxkcykubGVuZ3RoKSB7XG4gICAgICBuZXdMYXllciA9IG5ld0xheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHJlbWFwcGVkRmllbGRzKTtcbiAgICB9XG4gICAgLy8gVmFsaWRhdGUgZmllbGQgdHlwZSBjb21wYXRpYmlsaXR5IOKAlCBjbGVhcnMgZmllbGRzIHdob3NlIHR5cGUgaXMgaW5jb21wYXRpYmxlXG4gICAgLy8gd2l0aCB0aGUgY2hhbm5lbCdzIHN1cHBvcnRlZCBmaWVsZCB0eXBlcyAoZS5nLiBzdHJpbmcgZmllbGQgZm9yIGEgbnVtZXJpYyBzY2FsZSlcbiAgICBPYmplY3QudmFsdWVzKG5ld0xheWVyLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKCh7a2V5fSkgPT4ge1xuICAgICAgbmV3TGF5ZXIudmFsaWRhdGVWaXN1YWxDaGFubmVsKGtleSk7XG4gICAgfSk7XG4gIH1cblxuICBuZXdMYXllciA9IG5ld0xheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICBpc1Zpc2libGU6IG9sZExheWVyLmNvbmZpZy5pc1Zpc2libGUsXG4gICAgaXNDb25maWdBY3RpdmU6IHRydWVcbiAgfSk7XG5cbiAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJEb21haW4oc3RhdGUuZGF0YXNldHMpO1xuICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHN0YXRlLCB1bmRlZmluZWQpO1xuXG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEoc3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEluaXRpYWxMYXllckNvbmZpZyhsYXllciwgZGF0YXNldHMsIGxheWVyQ2xhc3Nlcyk6IExheWVyIHtcbiAgbGV0IG5ld0xheWVyID0gbGF5ZXI7XG4gIGlmICghT2JqZWN0LmtleXMoZGF0YXNldHMpLmxlbmd0aCkge1xuICAgIC8vIG5vIGRhdGEgaXMgbG9hZGVkXG4gICAgcmV0dXJuIGxheWVyO1xuICB9XG4gIGlmICghbGF5ZXIuY29uZmlnLmRhdGFJZCkge1xuICAgIC8vIHNldCBsYXllciBkYXRhSWRcbiAgICBuZXdMYXllciA9IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtkYXRhSWQ6IE9iamVjdC5rZXlzKGRhdGFzZXRzKVswXX0pO1xuICB9XG4gIGNvbnN0IGRhdGFzZXQgPSBkYXRhc2V0c1tuZXdMYXllci5jb25maWcuZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIGxheWVyO1xuICB9XG5cbiAgLy8gZmluZCBkZWZhdXQgbGF5ZXIgcHJvcHNcbiAgY29uc3QgcmVzdWx0ID1cbiAgICB0eXBlb2YgbGF5ZXJDbGFzc2VzW25ld0xheWVyLnR5cGVdLmZpbmREZWZhdWx0TGF5ZXJQcm9wcyA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyBsYXllckNsYXNzZXNbbmV3TGF5ZXIudHlwZV0uZmluZERlZmF1bHRMYXllclByb3BzKGRhdGFzZXQsIFtdKVxuICAgICAgOiB7cHJvcHM6IFtdfTtcblxuICAvLyBhbiBhcnJheSBvZiBwb3NzaWJsZSBwcm9wcywgdXNlIDFzdCBvbmVcbiAgY29uc3QgcHJvcHMgPSBBcnJheS5pc0FycmF5KHJlc3VsdCkgPyByZXN1bHQgOiByZXN1bHQucHJvcHMgfHwgW107XG5cbiAgaWYgKHByb3BzLmxlbmd0aCkge1xuICAgIG5ld0xheWVyID0gbmV3IGxheWVyQ2xhc3Nlc1tsYXllci50eXBlXSh7XG4gICAgICAuLi5wcm9wc1swXSxcbiAgICAgIGxhYmVsOiBuZXdMYXllci5jb25maWcubGFiZWwsXG4gICAgICBkYXRhSWQ6IG5ld0xheWVyLmNvbmZpZy5kYXRhSWQsXG4gICAgICBpc0NvbmZpZ0FjdGl2ZTogbmV3TGF5ZXIuY29uZmlnLmlzQ29uZmlnQWN0aXZlLFxuICAgICAgaXNWaXNpYmxlOiBuZXdMYXllci5jb25maWcuaXNWaXNpYmxlXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHR5cGVvZiBuZXdMYXllci5zZXRJbml0aWFsTGF5ZXJDb25maWcgPT09ICdmdW5jdGlvbidcbiAgICA/IG5ld0xheWVyLnNldEluaXRpYWxMYXllckNvbmZpZyhkYXRhc2V0KVxuICAgIDogbmV3TGF5ZXI7XG59XG4vKipcbiAqIFVwZGF0ZSBsYXllciB0eXBlLiBQcmV2aWV3cyBsYXllciBjb25maWcgd2lsbCBiZSBjb3BpZWQgaWYgYXBwbGljYWJsZS5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclR5cGVDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVHlwZUNoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBuZXdUeXBlfSA9IGFjdGlvbjtcbiAgaWYgKCFvbGRMYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBvbGRJZCA9IG9sZExheWVyLmlkO1xuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkSWQpO1xuXG4gIGlmICghc3RhdGUubGF5ZXJDbGFzc2VzW25ld1R5cGVdKSB7XG4gICAgQ29uc29sZS5lcnJvcihgJHtuZXdUeXBlfSBpcyBub3QgYSB2YWxpZCBsYXllciB0eXBlYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxldCBuZXdMYXllciA9IG5ldyBzdGF0ZS5sYXllckNsYXNzZXNbbmV3VHlwZV0oe1xuICAgIC8vIGtlZXAgb2xkIGxheWVyIGxhYmxlIGFuZCBpc0NvbmZpZ0FjdGl2ZVxuICAgIGxhYmVsOiBvbGRMYXllci5jb25maWcubGFiZWwsXG4gICAgaXNDb25maWdBY3RpdmU6IG9sZExheWVyLmNvbmZpZy5pc0NvbmZpZ0FjdGl2ZSxcbiAgICBkYXRhSWQ6IG9sZExheWVyLmNvbmZpZy5kYXRhSWRcbiAgfSk7XG5cbiAgaWYgKCFvbGRMYXllci50eXBlKSB7XG4gICAgLy8gaWYgc2V0dGluZyBsYXllciB0eXBlIG9uIGFuIGVtcHR5IGxheWVyXG4gICAgbmV3TGF5ZXIgPSBzZXRJbml0aWFsTGF5ZXJDb25maWcobmV3TGF5ZXIsIHN0YXRlLmRhdGFzZXRzLCBzdGF0ZS5sYXllckNsYXNzZXMpO1xuICB9IGVsc2Uge1xuICAgIC8vIGdldCBhIG1pbnQgbGF5ZXIsIHdpdGggbmV3IGlkIGFuZCB0eXBlXG4gICAgLy8gYmVjYXVzZSBkZWNrLmdsIHVzZXMgaWQgdG8gbWF0Y2ggYmV0d2VlbiBuZXcgYW5kIG9sZCBsYXllci5cbiAgICAvLyBJZiB0eXBlIGhhcyBjaGFuZ2VkIGJ1dCBpZCBpcyB0aGUgc2FtZSwgaXQgd2lsbCBicmVha1xuXG4gICAgY29uc3QgZGVmYXVsdExheWVyUHJvcHMgPVxuICAgICAgdHlwZW9mIHN0YXRlLmxheWVyQ2xhc3Nlc1tuZXdUeXBlXS5maW5kRGVmYXVsdExheWVyUHJvcHMgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyBzdGF0ZS5sYXllckNsYXNzZXNbbmV3VHlwZV0uZmluZERlZmF1bHRMYXllclByb3BzKHN0YXRlLmRhdGFzZXRzW25ld0xheWVyLmNvbmZpZy5kYXRhSWRdKVxuICAgICAgICA6IG51bGw7XG5cbiAgICBuZXdMYXllci5hc3NpZ25Db25maWdUb0xheWVyKFxuICAgICAgb2xkTGF5ZXIuY29uZmlnLFxuICAgICAgb2xkTGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MsXG4gICAgICBzdGF0ZS5kYXRhc2V0cyxcbiAgICAgIGRlZmF1bHRMYXllclByb3BzXG4gICAgKTtcbiAgICBuZXdMYXllci51cGRhdGVMYXllckRvbWFpbihzdGF0ZS5kYXRhc2V0cyk7XG4gIH1cblxuICBjb25zdCB7Y2xpY2tlZCwgaG92ZXJJbmZvfSA9IHN0YXRlO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBjbGlja2VkOiBvbGRMYXllci5pc0xheWVySG92ZXJlZChjbGlja2VkKSA/IHVuZGVmaW5lZCA6IGNsaWNrZWQsXG4gICAgaG92ZXJJbmZvOiBvbGRMYXllci5pc0xheWVySG92ZXJlZChob3ZlckluZm8pID8gdW5kZWZpbmVkIDogaG92ZXJJbmZvXG4gIH07XG5cbiAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBuZXdTdGF0ZSk7XG4gIG5ld1N0YXRlID0gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKG5ld1N0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG5cbiAgaWYgKGxheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCB8fCBvbGRMYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQpIHtcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXdTdGF0ZSk7XG4gIH1cblxuICAvLyB1cGRhdGUgc3BsaXRNYXAgbGF5ZXIgaWRcbiAgaWYgKHN0YXRlLnNwbGl0TWFwcy5sZW5ndGgpIHtcbiAgICBuZXdTdGF0ZSA9IHtcbiAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgc3BsaXRNYXBzOiBuZXdTdGF0ZS5zcGxpdE1hcHMubWFwKHNldHRpbmdzID0+IHtcbiAgICAgICAgY29uc3Qge1tvbGRJZF06IG9sZExheWVyTWFwLCAuLi5vdGhlckxheWVyc30gPSBzZXR0aW5ncy5sYXllcnM7XG4gICAgICAgIHJldHVybiBvbGRJZCBpbiBzZXR0aW5ncy5sYXllcnNcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgLi4uc2V0dGluZ3MsXG4gICAgICAgICAgICAgIGxheWVyczoge1xuICAgICAgICAgICAgICAgIC4uLm90aGVyTGF5ZXJzLFxuICAgICAgICAgICAgICAgIFtsYXllci5pZF06IG9sZExheWVyTWFwXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHNldHRpbmdzO1xuICAgICAgfSlcbiAgICB9O1xuICB9XG5cbiAgLy8gdXBkYXRlIGxheWVyT3JkZXIgd2l0aCBuZXcgaWRcbiAgbmV3U3RhdGUgPSB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgbGF5ZXJPcmRlcjogcmVwbGFjZUxheWVyRW50cnlJbkxheWVyT3JkZXIobmV3U3RhdGUubGF5ZXJPcmRlciwgb2xkTGF5ZXIuaWQsIG5ld0xheWVyLmlkKVxuICB9O1xuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBCaW5kIHZpc3VhbCBjaGFubmVsIGZpZWxkcyB0byB0aGUgZGF0YXNldCBmaWVsZCBvZiB0aGUgc2FtZSBuYW1lLlxuICogYGFkZERhdGFUb01hcGAgYW5kIGBsYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2VgIG9mdGVuIHBhc3MgYHtuYW1lLCB0eXBlfWBcbiAqIG9yIHByb2Nlc3NvciBmaWVsZHMgd2hvc2UgdmFsdWVBY2Nlc3NvciBpcyBub3QgYm91bmQgdG8gdGhlIEtlcGxlclRhYmxlLCB3aGljaFxuICogbGVhdmVzIHN0cm9rZUNvbG9yRG9tYWluIGF0IGBbMCwgMV1gIChrZXBsZXIuZ2wgIzMwNjEpLlxuICovXG5mdW5jdGlvbiByZXNvbHZlVmlzdWFsQ2hhbm5lbEZpZWxkRnJvbURhdGFzZXQoXG4gIG5ld0NvbmZpZzogVmlzU3RhdGVBY3Rpb25zLkxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25bJ25ld0NvbmZpZyddLFxuICBkYXRhc2V0OiBLZXBsZXJUYWJsZSB8IHVuZGVmaW5lZCxcbiAgdmlzdWFsQ2hhbm5lbDogTGF5ZXJbJ3Zpc3VhbENoYW5uZWxzJ11bc3RyaW5nXSB8IHVuZGVmaW5lZFxuKSB7XG4gIGlmICghZGF0YXNldCB8fCAhdmlzdWFsQ2hhbm5lbCkge1xuICAgIHJldHVybiBuZXdDb25maWc7XG4gIH1cbiAgY29uc3QgaW5jb21pbmcgPSBuZXdDb25maWdbdmlzdWFsQ2hhbm5lbC5maWVsZF07XG4gIGlmICghaW5jb21pbmcgfHwgdHlwZW9mIGluY29taW5nICE9PSAnb2JqZWN0JyB8fCAhaW5jb21pbmcubmFtZSkge1xuICAgIHJldHVybiBuZXdDb25maWc7XG4gIH1cbiAgY29uc3QgZm91bmQgPSBkYXRhc2V0LmZpZWxkcy5maW5kKGZkID0+IGZkLm5hbWUgPT09IGluY29taW5nLm5hbWUpO1xuICBpZiAoIWZvdW5kKSB7XG4gICAgcmV0dXJuIG5ld0NvbmZpZztcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLm5ld0NvbmZpZyxcbiAgICBbdmlzdWFsQ2hhbm5lbC5maWVsZF06IGZvdW5kXG4gIH07XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIHZpc3VhbCBjaGFubmVsXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMge09iamVjdH0gbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclZpc3VhbENoYW5uZWxDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBuZXdWaXNDb25maWcsIGNoYW5uZWx9ID0gYWN0aW9uO1xuICBpZiAoIW9sZExheWVyLmNvbmZpZy5kYXRhSWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbb2xkTGF5ZXIuY29uZmlnLmRhdGFJZF07XG4gIGNvbnN0IG5ld0NvbmZpZyA9IHJlc29sdmVWaXN1YWxDaGFubmVsRmllbGRGcm9tRGF0YXNldChcbiAgICBhY3Rpb24ubmV3Q29uZmlnLFxuICAgIGRhdGFzZXQsXG4gICAgb2xkTGF5ZXIudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF1cbiAgKTtcblxuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICBsZXQgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyhuZXdDb25maWcpO1xuICBpZiAobmV3VmlzQ29uZmlnKSBuZXdMYXllciA9IG5ld0xheWVyLnVwZGF0ZUxheWVyVmlzQ29uZmlnKG5ld1Zpc0NvbmZpZyk7XG5cbiAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsKGRhdGFzZXQsIGNoYW5uZWwpO1xuXG4gIC8vIGNhbGxpbmcgdXBkYXRlIGFuaW1hdGlvbiBkb21haW4gZmlyc3QgdG8gbWVyZ2UgYWxsIGxheWVyIGFuaW1hdGlvbiBkb21haW5cbiAgbGV0IHVwZGF0ZWRTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihzdGF0ZSk7XG5cbiAgY29uc3QgdmlzdWFsQ2hhbm5lbCA9IG9sZExheWVyLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdO1xuICBpZiAodmlzdWFsQ2hhbm5lbD8uY2hhbm5lbFNjYWxlVHlwZSA9PT0gQ0hBTk5FTF9TQ0FMRVMuY29sb3IgJiYgbmV3Q29uZmlnW3Zpc3VhbENoYW5uZWwuZmllbGRdKSB7XG4gICAgLy8gaWYgY29sb3IgZmllbGQgY2hhbmdlZCwgc2V0IGN1c3RvbUJyZWFrcyB0byBmYWxzZVxuICAgIG5ld0xheWVyLnVwZGF0ZUxheWVyQ29sb3JVSSh2aXN1YWxDaGFubmVsLnJhbmdlLCB7XG4gICAgICBjb2xvclJhbmdlQ29uZmlnOiB7XG4gICAgICAgIC4uLm5ld0xheWVyLmNvbmZpZy5jb2xvclVJW3Zpc3VhbENoYW5uZWwucmFuZ2VdLmNvbG9yUmFuZ2VDb25maWcsXG4gICAgICAgIGN1c3RvbUJyZWFrczogZmFsc2VcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHVwZGF0ZWRTdGF0ZSA9IHtcbiAgICAgIC4uLnVwZGF0ZWRTdGF0ZSxcbiAgICAgIGxheWVyczogdXBkYXRlZFN0YXRlLmxheWVycy5tYXAobCA9PiAobC5pZCA9PT0gb2xkTGF5ZXIuaWQgPyBuZXdMYXllciA6IGwpKVxuICAgIH07XG4gIH1cblxuICBjb25zdCBvbGRMYXllckRhdGEgPSB1cGRhdGVkU3RhdGUubGF5ZXJEYXRhW2lkeF07XG4gIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgdXBkYXRlZFN0YXRlLCBvbGRMYXllckRhdGEpO1xuXG4gIGlmIChcbiAgICB2aXN1YWxDaGFubmVsPy5jaGFubmVsU2NhbGVUeXBlID09PSBDSEFOTkVMX1NDQUxFUy5jb2xvciAmJlxuICAgIG5ld0NvbmZpZ1t2aXN1YWxDaGFubmVsPy5zY2FsZV0gPT09IFNDQUxFX1RZUEVTLmN1c3RvbU9yZGluYWwgJiZcbiAgICAhbmV3VmlzQ29uZmlnXG4gICkge1xuICAgIC8vIHdoZW4gc3dpdGNoaW5nIHRvIGN1c3RvbU9yZGluYWwgc2NhbGUsIGNyZWF0ZSBhIGN1c3RvbVBhbGV0dGUgaW4gY29sb3JVSSB3aXRoIHVwZGF0ZWQgY29sb3JEb21haW5cbiAgICBjb25zdCBjdXN0b21QYWxldHRlID0gaW5pdEN1c3RvbVBhbGV0dGVCeUN1c3RvbVNjYWxlKHtcbiAgICAgIHNjYWxlOiBTQ0FMRV9UWVBFUy5jdXN0b21PcmRpbmFsLFxuICAgICAgZmllbGQ6IGxheWVyLmNvbmZpZ1t2aXN1YWxDaGFubmVsLmZpZWxkXSxcbiAgICAgIG9yZGluYWxEb21haW46IGxheWVyLmNvbmZpZ1tsYXllci52aXN1YWxDaGFubmVsc1tjaGFubmVsXS5kb21haW5dLFxuICAgICAgcmFuZ2U6IGxheWVyLmNvbmZpZy52aXNDb25maWdbdmlzdWFsQ2hhbm5lbC5yYW5nZV0sXG4gICAgICBjb2xvckJyZWFrczogbnVsbFxuICAgIH0pO1xuICAgIC8vIHVwZGF0ZSBjb2xvclJhbmdlIHdpdGggbmV3IGN1c3RvbVBhbGV0dGVcbiAgICBsYXllci51cGRhdGVMYXllckNvbG9yVUkodmlzdWFsQ2hhbm5lbC5yYW5nZSwge1xuICAgICAgc2hvd0NvbG9yQ2hhcnQ6IHRydWUsXG4gICAgICBjb2xvclJhbmdlQ29uZmlnOiB7XG4gICAgICAgIC4uLmxheWVyLmNvbmZpZy5jb2xvclVJW3Zpc3VhbENoYW5uZWwucmFuZ2VdLmNvbG9yUmFuZ2VDb25maWcsXG4gICAgICAgIGN1c3RvbUJyZWFrczogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGN1c3RvbVBhbGV0dGVcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKHVwZGF0ZWRTdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciBgdmlzQ29uZmlnYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyfSA9IGFjdGlvbjtcbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgY29uc3QgcHJvcHMgPSBPYmplY3Qua2V5cyhhY3Rpb24ubmV3VmlzQ29uZmlnKTtcblxuICBjb25zdCBuZXdWaXNDb25maWcgPSB7XG4gICAgLi4ub2xkTGF5ZXIuY29uZmlnLnZpc0NvbmZpZyxcbiAgICAuLi5hY3Rpb24ubmV3VmlzQ29uZmlnXG4gIH07XG5cbiAgY29uc3QgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyh7dmlzQ29uZmlnOiBuZXdWaXNDb25maWd9KTtcblxuICAvLyBKZW5rcyBicmVha3MgZGVwZW5kIG9uIHRoZSBudW1iZXIgb2YgY29sb3JzLiBSZWNhbGN1bGF0ZSB0aGUgZG9tYWluIHdoZW5cbiAgLy8gdGhlIGNvbG9yIHJhbmdlIG9mIGEgSmVua3MgY2hhbm5lbCBjaGFuZ2VzLlxuICBpZiAob2xkTGF5ZXIuY29uZmlnLmRhdGFJZCkge1xuICAgIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tvbGRMYXllci5jb25maWcuZGF0YUlkXTtcbiAgICBpZiAoZGF0YXNldCkge1xuICAgICAgT2JqZWN0LmtleXMobmV3TGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goY2hhbm5lbEtleSA9PiB7XG4gICAgICAgIGNvbnN0IGNoYW5uZWwgPSBuZXdMYXllci52aXN1YWxDaGFubmVsc1tjaGFubmVsS2V5XTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNoYW5uZWw/LnNjYWxlICYmXG4gICAgICAgICAgbmV3TGF5ZXIuY29uZmlnW2NoYW5uZWwuc2NhbGVdID09PSBTQ0FMRV9UWVBFUy5qZW5rcyAmJlxuICAgICAgICAgIGNoYW5uZWwucmFuZ2UgJiZcbiAgICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYWN0aW9uLm5ld1Zpc0NvbmZpZywgY2hhbm5lbC5yYW5nZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsKGRhdGFzZXQsIGNoYW5uZWxLZXkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBsZXQgbmV4dFN0YXRlID0gc3RhdGU7XG5cbiAgLy8gRXhjbHVzaXZlIGJpdG1hcCBlZGl0aW5nOiB3aGVuIGVkaXRCb3VuZHMgaXMgdHVybmVkIG9uIGZvciBvbmUgYml0bWFwIGxheWVyLFxuICAvLyB0dXJuIGl0IG9mZiBmb3IgYWxsIG90aGVyIGJpdG1hcCBsYXllcnNcbiAgaWYgKG5ld0xheWVyLnR5cGUgPT09ICdiaXRtYXAnICYmIGFjdGlvbi5uZXdWaXNDb25maWcuZWRpdEJvdW5kcyA9PT0gdHJ1ZSkge1xuICAgIG5leHRTdGF0ZSA9IHtcbiAgICAgIC4uLm5leHRTdGF0ZSxcbiAgICAgIGxheWVyczogbmV4dFN0YXRlLmxheWVycy5tYXAoKGwsIGkpID0+IHtcbiAgICAgICAgaWYgKGkgIT09IGlkeCAmJiBsLnR5cGUgPT09ICdiaXRtYXAnICYmIGwuY29uZmlnLnZpc0NvbmZpZy5lZGl0Qm91bmRzKSB7XG4gICAgICAgICAgcmV0dXJuIGwudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICAgICAgdmlzQ29uZmlnOiB7Li4ubC5jb25maWcudmlzQ29uZmlnLCBlZGl0Qm91bmRzOiBmYWxzZX1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbDtcbiAgICAgIH0pXG4gICAgfTtcbiAgfVxuXG4gIGlmIChuZXdMYXllci5zaG91bGRDYWxjdWxhdGVMYXllckRhdGEocHJvcHMpKSB7XG4gICAgY29uc3Qgb2xkTGF5ZXJEYXRhID0gbmV4dFN0YXRlLmxheWVyRGF0YVtpZHhdO1xuICAgIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgbmV4dFN0YXRlLCBvbGRMYXllckRhdGEpO1xuICAgIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV4dFN0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKG5leHRTdGF0ZSwge2xheWVyOiBuZXdMYXllciwgaWR4fSk7XG59XG5cbi8qKlxuICogUmVzZXQgYW5pbWF0aW9uIGNvbmZpZyBjdXJyZW50IHRpbWUgdG8gYSBzcGVjaWZpZWQgdmFsdWVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKlxuICovXG5leHBvcnQgY29uc3Qgc2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlciA9IDxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAge3ZhbHVlfTogVmlzU3RhdGVBY3Rpb25zLlNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXJBY3Rpb25cbik6IFMgPT4ge1xuICBjb25zdCBjdXJyZW50VGltZSA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWVbMF0gOiB2YWx1ZTtcbiAgY29uc3QgbmV4dFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgY3VycmVudFRpbWVcbiAgICB9XG4gIH07XG4gIC8vIHVwZGF0ZSBhbmltYXRpb24gY29uZmlnIGZvciBlYWNoIGxheWVyXG4gIHJldHVybiBzdGF0ZS5sYXllcnMucmVkdWNlKChhY2N1LCBsKSA9PiB7XG4gICAgaWYgKGwuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkICYmIGwudHlwZSAhPT0gJ3RyaXAnKSB7XG4gICAgICByZXR1cm4gbGF5ZXJBbmltYXRpb25DaGFuZ2VVcGRhdGVyKGFjY3UsIHtvbGRMYXllcjogbCwgcHJvcDogJ2N1cnJlbnRUaW1lJywgY3VycmVudFRpbWV9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFjY3U7XG4gIH0sIG5leHRTdGF0ZSk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBmaWx0ZXIgcHJvcGVydHlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihzdGF0ZSwgYWN0aW9uKTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZmlsdGVyIGFuaW1hdGlvbiB3aW5kb3dcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICB7aWQsIGFuaW1hdGlvbldpbmRvd306IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyQWN0aW9uXG4pOiBTIHtcbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gZi5pZCA9PT0gaWQpO1xuXG4gIGlmICghZmlsdGVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RmlsdGVyID0ge1xuICAgIC4uLmZpbHRlcixcbiAgICBhbmltYXRpb25XaW5kb3dcbiAgfTtcblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiBzd2FwXzxGaWx0ZXI+KG5ld0ZpbHRlcikoc3RhdGUuZmlsdGVycylcbiAgfTtcblxuICBjb25zdCBuZXdTeW5jVGltZWxpbmVNb2RlID0gZ2V0U3luY0FuaW1hdGlvbk1vZGUobmV3RmlsdGVyIGFzIFRpbWVSYW5nZUZpbHRlcik7XG5cbiAgcmV0dXJuIHNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyKG5ld1N0YXRlLCB7aWQsIG1vZGU6IG5ld1N5bmNUaW1lbGluZU1vZGV9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BcHBseUZpbHRlckNvbmZpZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2ZpbHRlcklkLCBuZXdGaWx0ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCBvbGRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoZiA9PiBmLmlkID09PSBmaWx0ZXJJZCk7XG4gIGlmICghb2xkRmlsdGVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gU2VyaWFsaXplIHRoZSBmaWx0ZXJzIHRvIG9ubHkgY29tcGFyZSB0aGUgc2F2ZWQgcHJvcGVydGllc1xuICBjb25zdCBzZXJpYWxpemVkT2xkRmlsdGVyID0gc2VyaWFsaXplRmlsdGVyKG9sZEZpbHRlciwgc3RhdGUuc2NoZW1hKSA/PyB7Y29uZmlnOiB7fX07XG4gIGNvbnN0IHNlcmlhbGl6ZWROZXdGaWx0ZXIgPSBzZXJpYWxpemVGaWx0ZXIobmV3RmlsdGVyLCBzdGF0ZS5zY2hlbWEpO1xuICBpZiAoIXNlcmlhbGl6ZWROZXdGaWx0ZXIgfHwgaXNFcXVhbChzZXJpYWxpemVkT2xkRmlsdGVyLCBzZXJpYWxpemVkTmV3RmlsdGVyKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIElmIHRoZXJlIGFyZSBhbnkgY2hhbmdlcyB0byB0aGUgZmlsdGVyLCBhcHBseSB0aGVtXG4gIGNvbnN0IGNoYW5nZWQgPSBwaWNrQ2hhbmdlZFByb3BzKHNlcmlhbGl6ZWRPbGRGaWx0ZXIsIHNlcmlhbGl6ZWROZXdGaWx0ZXIpO1xuICBkZWxldGUgY2hhbmdlZFsnaWQnXTsgLy8gaWQgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkXG5cbiAgY29uc3QgZmlsdGVySW5kZXggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGZpbHRlcklkKTtcbiAgaWYgKGZpbHRlckluZGV4IDwgMCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihcbiAgICBzdGF0ZSxcbiAgICBzZXRGaWx0ZXIoZmlsdGVySW5kZXgsIE9iamVjdC5rZXlzKGNoYW5nZWQpLCBPYmplY3QudmFsdWVzKGNoYW5nZWQpKVxuICApO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBmaWx0ZXIgcHJvcGVydHlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2lkeCwgdmFsdWVJbmRleCA9IDB9ID0gYWN0aW9uO1xuICBjb25zdCBvbGRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG4gIGlmICghb2xkRmlsdGVyKSB7XG4gICAgQ29uc29sZS5lcnJvcihgZmlsdGVycy4ke2lkeH0gaXMgdW5kZWZpbmVkYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChcbiAgICBBcnJheS5pc0FycmF5KGFjdGlvbi5wcm9wKSAmJlxuICAgICghQXJyYXkuaXNBcnJheShhY3Rpb24udmFsdWUpIHx8IGFjdGlvbi5wcm9wLmxlbmd0aCAhPT0gYWN0aW9uLnZhbHVlLmxlbmd0aClcbiAgKSB7XG4gICAgQ29uc29sZS5lcnJvcignRXhwZWN0aW5nIHZhbHVlIHRvIGJlIGFuIGFycmF5IG9mIHRoZSBzYW1lIGxlbmd0aCwgc2luY2UgcHJvcCBpcyBhbiBhcnJheScpO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICAvLyBjb252ZXJ0IHByb3AgYW5kIHZhbHVlIHRvIGFycmF5XG4gIGNvbnN0IHByb3BzID0gdG9BcnJheShhY3Rpb24ucHJvcCk7XG4gIGNvbnN0IHZhbHVlcyA9IEFycmF5LmlzQXJyYXkoYWN0aW9uLnByb3ApID8gdG9BcnJheShhY3Rpb24udmFsdWUpIDogW2FjdGlvbi52YWx1ZV07XG5cbiAgbGV0IG5ld0ZpbHRlciA9IG9sZEZpbHRlcjtcbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG5cbiAgbGV0IGRhdGFzZXRJZHNUb0ZpbHRlcjogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHByb3AgPSBwcm9wc1tpXTtcbiAgICBjb25zdCB2YWx1ZSA9IHZhbHVlc1tpXTtcbiAgICAvLyBXZSBjdXJyZW50bHkgZG8gbm90IHN1cHBvcnQgcGFzc2luZyBpbiBuYW1lIGFzIGFuIGFycmF5IGludG8gX3VwZGF0ZUZpbHRlclByb3AsIHNvIHdlIGNhbGwgaXQgbXVsdGlwbGUgdGltZXMgd2l0aCBlYWNoIG5hbWVcbiAgICAvLyBTZWUgdGhlIGNvbW1lbnQgaW4gdGhlcmUgYXMgdG8gd2hhdCBzaG91bGQgYmUgYWRkcmVzc2VkXG4gICAgbGV0IHJlcztcbiAgICBpZiAocHJvcCA9PT0gJ25hbWUnICYmIEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbG9vcC1mdW5jXG4gICAgICByZXMgPSB2YWx1ZS5yZWR1Y2UoKGFjY3UsIHYpID0+IHtcbiAgICAgICAgcmV0dXJuIF91cGRhdGVGaWx0ZXJQcm9wKGFjY3UsIG5ld0ZpbHRlciwgcHJvcCwgdiwgdmFsdWVJbmRleCk7XG4gICAgICB9LCBuZXdTdGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcyA9IF91cGRhdGVGaWx0ZXJQcm9wKG5ld1N0YXRlLCBuZXdGaWx0ZXIsIHByb3AsIHZhbHVlLCB2YWx1ZUluZGV4KTtcbiAgICB9XG4gICAgbmV3RmlsdGVyID0gcmVzLmZpbHRlcjtcbiAgICBuZXdTdGF0ZSA9IHJlcy5zdGF0ZTtcbiAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSBkYXRhc2V0SWRzVG9GaWx0ZXIuY29uY2F0KHJlcy5kYXRhc2V0SWRzVG9GaWx0ZXIpO1xuICB9XG5cbiAgY29uc3QgZW5sYXJnZWRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoZiA9PiBmLnZpZXcgPT09IEZJTFRFUl9WSUVXX1RZUEVTLmVubGFyZ2VkKTtcblxuICBpZiAoZW5sYXJnZWRGaWx0ZXIgJiYgZW5sYXJnZWRGaWx0ZXIuaWQgIT09IG5ld0ZpbHRlci5pZCkge1xuICAgIC8vIHRoZXJlIHNob3VsZCBiZSBvbmx5IG9uZSBlbmxhcmdlZCBmaWx0ZXJcbiAgICBuZXdGaWx0ZXIudmlldyA9IEZJTFRFUl9WSUVXX1RZUEVTLnNpZGU7XG4gIH1cblxuICAvLyBzYXZlIG5ldyBmaWx0ZXJzIHRvIG5ld1N0YXRlXG4gIG5ld1N0YXRlID0gc2V0KFsnZmlsdGVycycsIGlkeF0sIG5ld0ZpbHRlciwgbmV3U3RhdGUpO1xuXG4gIC8vIGZpbHRlciBkYXRhXG4gIGNvbnN0IGZpbHRlcmVkRGF0YXNldHMgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKFxuICAgIHVuaXEoZGF0YXNldElkc1RvRmlsdGVyKSxcbiAgICBuZXdTdGF0ZS5kYXRhc2V0cyxcbiAgICBuZXdTdGF0ZS5maWx0ZXJzLFxuICAgIG5ld1N0YXRlLmxheWVyc1xuICApO1xuXG4gIG5ld1N0YXRlID0gc2V0KFsnZGF0YXNldHMnXSwgZmlsdGVyZWREYXRhc2V0cywgbmV3U3RhdGUpO1xuXG4gIC8vIG5lZWQgdG8gdXBkYXRlIGZpbHRlclBsb3QgYWZ0ZXIgZmlsdGVyIERhdGFzZXQgZm9yIHBsb3QgdG8gdXBkYXRlIG9uIGZpbHRlcmVkIHJlc3VsdFxuICBjb25zdCBmaWx0ZXJXaXRoUExvdCA9IHVwZGF0ZUZpbHRlclBsb3QobmV3U3RhdGUuZGF0YXNldHMsIG5ld1N0YXRlLmZpbHRlcnNbaWR4XSk7XG5cbiAgbmV3U3RhdGUgPSBzZXQoWydmaWx0ZXJzJywgaWR4XSwgZmlsdGVyV2l0aFBMb3QsIG5ld1N0YXRlKTtcblxuICAvLyBkYXRhSWQgaXMgYW4gYXJyYXlcbiAgLy8gcGFzcyBvbmx5IHRoZSBkYXRhc2V0IHdlIG5lZWQgdG8gdXBkYXRlXG4gIG5ld1N0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG5ld1N0YXRlLCBkYXRhc2V0SWRzVG9GaWx0ZXIsIG5ld0ZpbHRlcik7XG5cbiAgLy8gSWYgdGltZSByYW5nZSBmaWx0ZXIgdmFsdWUgd2FzIHVwZGF0ZWQsIGFkanVzdCBhbmltYXRpb24gY29uZmlnXG4gIGlmIChuZXdGaWx0ZXIudHlwZSA9PT0gRklMVEVSX1RZUEVTLnRpbWVSYW5nZSAmJiBwcm9wcy5pbmNsdWRlcygndmFsdWUnKSkge1xuICAgIG5ld1N0YXRlID0gYWRqdXN0QW5pbWF0aW9uQ29uZmlnV2l0aEZpbHRlcihuZXdTdGF0ZSwgYWN0aW9uLmlkeCk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbmZ1bmN0aW9uIF91cGRhdGVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCB2YWx1ZSwgZGF0YXNldHMpIHtcbiAgbGV0IG5ld0ZpbHRlciA9IGZpbHRlcjtcbiAgaWYgKGZpbHRlci5kYXRhSWRbdmFsdWVJbmRleF0pIHtcbiAgICAvLyBpZiBkYXRhSWQgYWxyZWFkeSBleGlzdFxuICAgIG5ld0ZpbHRlciA9IF9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCBkYXRhc2V0cyk7XG4gIH1cbiAgaWYgKHZhbHVlKSB7XG4gICAgY29uc3QgbmV4dFZhbHVlID0gbmV3RmlsdGVyLmRhdGFJZC5zbGljZSgpO1xuICAgIG5leHRWYWx1ZVt2YWx1ZUluZGV4XSA9IHZhbHVlO1xuICAgIG5ld0ZpbHRlciA9IHNldChbJ2RhdGFJZCddLCBuZXh0VmFsdWUsIG5ld0ZpbHRlcik7XG4gIH1cbiAgcmV0dXJuIG5ld0ZpbHRlcjtcbn1cblxuZnVuY3Rpb24gX3JlbW92ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChmaWx0ZXIsIHZhbHVlSW5kZXgsIGRhdGFzZXRzKSB7XG4gIGNvbnN0IGRhdGFJZCA9IGZpbHRlci5kYXRhSWRbdmFsdWVJbmRleF07XG5cbiAgaWYgKGZpbHRlci5kYXRhSWQubGVuZ3RoID09PSAxICYmIHZhbHVlSW5kZXggPT09IDApIHtcbiAgICAvLyBpZiByZW1vdmUgdGhlIG9ubHkgZGF0YUlkLCBjcmVhdGUgYW4gZW1wdHkgZmlsdGVyIGluc3RlYWQ7XG4gICAgcmV0dXJuIGdldERlZmF1bHRGaWx0ZXIoe2lkOiBmaWx0ZXIuaWR9KTtcbiAgfVxuXG4gIGlmIChkYXRhSWQpIHtcbiAgICBmaWx0ZXIgPSByZW1vdmVGaWx0ZXJQbG90KGZpbHRlciwgZGF0YUlkKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgcHJvcCBvZiBbXG4gICAgJ2RhdGFJZCcsXG4gICAgJ25hbWUnLFxuICAgICdmaWVsZElkeCcsXG4gICAgJ2dwdUNoYW5uZWwnLFxuICAgICdlbmROYW1lJyxcbiAgICAnZW5kRmllbGRJZHgnLFxuICAgICdlbmRNYXBwZWRWYWx1ZScsXG4gICAgJ2dwdUVuZENoYW5uZWwnXG4gIF0pIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShmaWx0ZXJbcHJvcF0pKSB7XG4gICAgICBjb25zdCBuZXh0VmFsID0gZmlsdGVyW3Byb3BdLnNsaWNlKCk7XG4gICAgICBuZXh0VmFsLnNwbGljZSh2YWx1ZUluZGV4LCAxKTtcbiAgICAgIGZpbHRlciA9IHNldChbcHJvcF0sIG5leHRWYWwsIGZpbHRlcik7XG4gICAgfVxuICB9XG5cbiAgLy8gbWVyZ2VGaWVsZERvbWFpbiBmb3IgdGhlIHJlbWFpbmluZyBmaWVsZHNcbiAgY29uc3QgZG9tYWluU3RlcHMgPSBtZXJnZUZpbHRlckRvbWFpbihmaWx0ZXIsIGRhdGFzZXRzKTtcblxuICBjb25zdCBuZXh0RmlsdGVyID0ge1xuICAgIC4uLmZpbHRlcixcbiAgICAvLyB2YWx1ZTogbmV4dFZhbHVlLFxuICAgIC4uLihkb21haW5TdGVwcyA/IHtkb21haW46IGRvbWFpblN0ZXBzPy5kb21haW4sIHN0ZXA6IGRvbWFpblN0ZXBzPy5zdGVwfSA6IHt9KVxuICB9O1xuXG4gIGNvbnN0IG5leHRWYWx1ZSA9IGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4obmV4dEZpbHRlci52YWx1ZSwgbmV4dEZpbHRlcik7XG4gIHJldHVybiB7XG4gICAgLi4ubmV4dEZpbHRlcixcbiAgICB2YWx1ZTogbmV4dFZhbHVlXG4gIH07XG59XG5cbi8qKiAqXG4gKiBVcGRhdGVzIGEgc2luZ2xlIHByb3BlcnR5IG9mIGEgZmlsdGVyXG4gKi9cbmZ1bmN0aW9uIF91cGRhdGVGaWx0ZXJQcm9wKHN0YXRlLCBmaWx0ZXIsIHByb3AsIHZhbHVlLCB2YWx1ZUluZGV4LCBkYXRhc2V0SWRzPykge1xuICBsZXQgZGF0YXNldElkc1RvRmlsdGVyOiBzdHJpbmdbXSA9IFtdO1xuICBzd2l0Y2ggKHByb3ApIHtcbiAgICAvLyBUT0RPOiBOZXh0IFBSIGZvciBVSSBpZiB3ZSB1cGRhdGUgZmlsdGVyRGF0YUlkLCB3ZSBuZWVkIHRvIGNvbnNpZGVyIHR3byBjYXNlczpcbiAgICAvLyAxLiBkYXRhSWQgaXMgZW1wdHk6IGNyZWF0ZSBhIGRlZmF1bHQgZmlsdGVyXG4gICAgLy8gMi4gQWRkIGEgbmV3IGRhdGFzZXQgaWRcbiAgICBjYXNlIEZJTFRFUl9VUERBVEVSX1BST1BTLmRhdGFJZDoge1xuICAgICAgY29uc3Qgb2xkRGF0YUlkID0gWy4uLmZpbHRlci5kYXRhSWRdO1xuICAgICAgZmlsdGVyID0gX3VwZGF0ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChmaWx0ZXIsIHZhbHVlSW5kZXgsIHZhbHVlLCBzdGF0ZS5kYXRhc2V0cyk7XG4gICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSB1bmlxKFsuLi5vbGREYXRhSWQsIC4uLmZpbHRlci5kYXRhSWRdKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIEZJTFRFUl9VUERBVEVSX1BST1BTLm5hbWU6IHtcbiAgICAgIC8vIHdlIGFyZSBzdXBwb3J0aW5nIHRoZSBjdXJyZW50IGZ1bmN0aW9uYWxpdHlcbiAgICAgIC8vIFRPRE86IE5leHQgUFIgZm9yIFVJIGZpbHRlciBuYW1lIHdpbGwgb25seSB1cGRhdGUgZmlsdGVyIG5hbWUgYnV0IGl0IHdvbid0IGhhdmUgc2lkZSBlZmZlY3RzXG4gICAgICAvLyB3ZSBhcmUgZ29ubmEgdXNlIHBhaXIgb2YgZGF0YXNldHMgYW5kIGZpZWxkSWR4IHRvIHVwZGF0ZSB0aGUgZmlsdGVyXG4gICAgICBjb25zdCBkYXRhc2V0SWQgPSBmaWx0ZXIuZGF0YUlkW3ZhbHVlSW5kZXhdO1xuICAgICAgY29uc3Qge2ZpbHRlcjogdXBkYXRlZEZpbHRlciwgZGF0YXNldDogbmV3RGF0YXNldH0gPSBhcHBseUZpbHRlckZpZWxkTmFtZShcbiAgICAgICAgZmlsdGVyLFxuICAgICAgICBzdGF0ZS5kYXRhc2V0cyxcbiAgICAgICAgZGF0YXNldElkLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgdmFsdWVJbmRleCxcbiAgICAgICAge21lcmdlRG9tYWluOiB2YWx1ZUluZGV4ID4gMH1cbiAgICAgICk7XG4gICAgICBpZiAodXBkYXRlZEZpbHRlcikge1xuICAgICAgICBmaWx0ZXIgPSB1cGRhdGVkRmlsdGVyO1xuICAgICAgICBpZiAoZmlsdGVyLmdwdSkge1xuICAgICAgICAgIGZpbHRlciA9IHNldEZpbHRlckdwdU1vZGUoZmlsdGVyLCBzdGF0ZS5maWx0ZXJzKTtcbiAgICAgICAgICBmaWx0ZXIgPSBhc3NpZ25HcHVDaGFubmVsKGZpbHRlciwgc3RhdGUuZmlsdGVycyk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUgPSBzZXQoWydkYXRhc2V0cycsIGRhdGFzZXRJZF0sIG5ld0RhdGFzZXQsIHN0YXRlKTtcbiAgICAgICAgLy8gcmVtb3ZlIGZpbHRlciBQbG90IGF0IGRhdGFzZXRJZCwgc28gaXQgd2lsbCBiZSByZWNhbGN1bGF0ZWRcbiAgICAgICAgZmlsdGVyID0gcmVtb3ZlRmlsdGVyUGxvdChmaWx0ZXIsIGRhdGFzZXRJZCk7XG5cbiAgICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gdXBkYXRlZEZpbHRlci5kYXRhSWQ7XG4gICAgICB9XG4gICAgICAvLyBvbmx5IGZpbHRlciB0aGUgY3VycmVudCBkYXRhc2V0XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjYXNlIEZJTFRFUl9VUERBVEVSX1BST1BTLmVuZE5hbWU6IHtcbiAgICAgIGNvbnN0IGRhdGFzZXRJZCA9IGZpbHRlci5kYXRhSWRbdmFsdWVJbmRleF07XG4gICAgICBjb25zdCB7ZmlsdGVyOiB1cGRhdGVkRmlsdGVyLCBkYXRhc2V0OiBuZXdEYXRhc2V0fSA9IGFwcGx5VGltZUZpbHRlckVuZEZpZWxkTmFtZShcbiAgICAgICAgZmlsdGVyLFxuICAgICAgICBzdGF0ZS5kYXRhc2V0cyxcbiAgICAgICAgZGF0YXNldElkLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgdmFsdWVJbmRleFxuICAgICAgKTtcbiAgICAgIGlmICh1cGRhdGVkRmlsdGVyKSB7XG4gICAgICAgIGZpbHRlciA9IHVwZGF0ZWRGaWx0ZXI7XG4gICAgICAgIGZpbHRlciA9IHNldEZpbHRlckdwdU1vZGUoZmlsdGVyLCBzdGF0ZS5maWx0ZXJzKTtcbiAgICAgICAgZmlsdGVyID0gZmlsdGVyLmdwdVxuICAgICAgICAgID8gYXNzaWduR3B1Q2hhbm5lbChmaWx0ZXIsIHN0YXRlLmZpbHRlcnMpXG4gICAgICAgICAgOiB7Li4uZmlsdGVyLCBncHVDaGFubmVsOiB1bmRlZmluZWQsIGdwdUVuZENoYW5uZWw6IHVuZGVmaW5lZH07XG4gICAgICAgIHN0YXRlID0gc2V0KFsnZGF0YXNldHMnLCBkYXRhc2V0SWRdLCBuZXdEYXRhc2V0LCBzdGF0ZSk7XG4gICAgICAgIGZpbHRlciA9IHJlbW92ZUZpbHRlclBsb3QoZmlsdGVyLCBkYXRhc2V0SWQpO1xuICAgICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSB1cGRhdGVkRmlsdGVyLmRhdGFJZDtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNhc2UgRklMVEVSX1VQREFURVJfUFJPUFMubGF5ZXJJZDoge1xuICAgICAgLy8gV2UgbmVlZCB0byB1cGRhdGUgb25seSBkYXRhc2V0SWQvcyBpZiB3ZSBoYXZlIGFkZGVkL3JlbW92ZWQgbGF5ZXJzXG4gICAgICAvLyAtIGNoZWNrIGZvciBsYXllcklkIGNoYW5nZXMgKFhPUiB3b3JrcyBiZWNhdXNlIG9mIHN0cmluZyB2YWx1ZXMpXG4gICAgICAvLyBpZiBubyBkaWZmZXJlbmNlcyBiZXR3ZWVuIGxheWVySWRzLCBkb24ndCBkbyBhbnkgZmlsdGVyaW5nXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBjb25zdCBsYXllcklkRGlmZmVyZW5jZSA9IHhvcih2YWx1ZSwgZmlsdGVyLmxheWVySWQpO1xuXG4gICAgICBjb25zdCBsYXllckRhdGFJZHMgPSB1bmlxPHN0cmluZz4oXG4gICAgICAgIGxheWVySWREaWZmZXJlbmNlXG4gICAgICAgICAgLm1hcChsaWQgPT5cbiAgICAgICAgICAgIGdldChcbiAgICAgICAgICAgICAgc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBsaWQpLFxuICAgICAgICAgICAgICBbJ2NvbmZpZycsICdkYXRhSWQnXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgICAuZmlsdGVyKGQgPT4gZCkgYXMgc3RyaW5nW11cbiAgICAgICk7XG5cbiAgICAgIC8vIG9ubHkgZmlsdGVyIGRhdGFzZXRzSWRzXG4gICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSBsYXllckRhdGFJZHM7XG5cbiAgICAgIC8vIFVwZGF0ZSBuZXdGaWx0ZXIgZGF0YUlkc1xuICAgICAgY29uc3QgbmV3RGF0YUlkcyA9IHVuaXE8c3RyaW5nPihcbiAgICAgICAgdmFsdWVcbiAgICAgICAgICA/Lm1hcChsaWQgPT5cbiAgICAgICAgICAgIGdldChcbiAgICAgICAgICAgICAgc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBsaWQpLFxuICAgICAgICAgICAgICBbJ2NvbmZpZycsICdkYXRhSWQnXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgICAuZmlsdGVyKGQgPT4gZCkgYXMgc3RyaW5nW11cbiAgICAgICk7XG5cbiAgICAgIGZpbHRlciA9IHtcbiAgICAgICAgLi4uZmlsdGVyLFxuICAgICAgICBsYXllcklkOiB2YWx1ZSxcbiAgICAgICAgZGF0YUlkOiBuZXdEYXRhSWRzXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIGZpbHRlciA9IHNldChbcHJvcF0sIHZhbHVlLCBmaWx0ZXIpO1xuICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gWy4uLmZpbHRlci5kYXRhSWRdO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4ge2ZpbHRlciwgZGF0YXNldElkcywgZGF0YXNldElkc1RvRmlsdGVyLCBzdGF0ZX07XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1zdGF0ZW1lbnRzICovXG5cbi8qKlxuICogU2V0IHRoZSBwcm9wZXJ0eSBvZiBhIGZpbHRlciBwbG90XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0RmlsdGVyUGxvdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkeCwgbmV3UHJvcH06IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJQbG90VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoIXN0YXRlLmZpbHRlcnNbaWR4XSkge1xuICAgIENvbnNvbGUuZXJyb3IoYGZpbHRlcnNbJHtpZHh9XSBpcyB1bmRlZmluZWRgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbGV0IG5ld0ZpbHRlciA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcblxuICBmb3IgKGNvbnN0IHByb3AgaW4gbmV3UHJvcCkge1xuICAgIGlmIChwcm9wID09PSAncGxvdFR5cGUnKSB7XG4gICAgICBuZXdGaWx0ZXIgPSBwaWNrXygncGxvdFR5cGUnKShtZXJnZV8obmV3UHJvcC5wbG90VHlwZSkpKG5ld0ZpbHRlcik7XG4gICAgfSBlbHNlIGlmIChwcm9wID09PSAneUF4aXMnKSB7XG4gICAgICBjb25zdCBjaGFydFR5cGUgPSBuZXdQcm9wLnlBeGlzID8gUExPVF9UWVBFUy5saW5lQ2hhcnQgOiBQTE9UX1RZUEVTLmhpc3RvZ3JhbTtcblxuICAgICAgbmV3RmlsdGVyID0gcGlja18oJ3Bsb3RUeXBlJykobWVyZ2VfKHt0eXBlOiBjaGFydFR5cGV9KSkobWVyZ2VfKG5ld1Byb3ApKG5ld0ZpbHRlcikpO1xuICAgIH1cbiAgfVxuXG4gIG5ld0ZpbHRlciA9IHVwZGF0ZUZpbHRlclBsb3Qoc3RhdGUuZGF0YXNldHMsIG5ld0ZpbHRlcik7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiBzdGF0ZS5maWx0ZXJzLm1hcCgoZiwgaSkgPT4gKGkgPT09IGlkeCA/IG5ld0ZpbHRlciA6IGYpKVxuICB9O1xufTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PlxuICAhYWN0aW9uLmRhdGFJZFxuICAgID8gc3RhdGVcbiAgICA6IHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGZpbHRlcnM6IFsuLi5zdGF0ZS5maWx0ZXJzLCBnZXREZWZhdWx0RmlsdGVyKHtkYXRhSWQ6IGFjdGlvbi5kYXRhSWQsIGlkOiBhY3Rpb24uaWR9KV1cbiAgICAgIH07XG5cbi8qKlxuICogQ3JlYXRlIG9yIHVwZGF0ZSBhIGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZU9yVXBkYXRlRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5DcmVhdGVPclVwZGF0ZUZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2lkLCBkYXRhSWQsIGZpZWxkLCB2YWx1ZX0gPSBhY3Rpb247XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGNvbnN0IG9yaWdpbmFsSW5kZXggPSBuZXdTdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGlkKTtcbiAgbGV0IGZpbHRlckluZGV4ID0gb3JpZ2luYWxJbmRleDtcbiAgaWYgKCFpZCAmJiAhZGF0YUlkKSB7XG4gICAgcmV0dXJuIG5ld1N0YXRlO1xuICB9XG4gIGlmIChvcmlnaW5hbEluZGV4IDwgMCAmJiBkYXRhSWQpIHtcbiAgICBuZXdTdGF0ZSA9IGFkZEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtkYXRhSWR9KTtcbiAgICBpZiAobmV3U3RhdGUuZmlsdGVycy5sZW5ndGggIT09IHN0YXRlLmZpbHRlcnMubGVuZ3RoICsgMSkge1xuICAgICAgLy8gTm8gbmV3IGZpbHRlciB3YXMgYWRkZWRcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gICAgLy8gSGVyZSB3ZSBhcmUgYXNzdW1pbmcgdGhhdCB0aGUgZmlsdGVyIHdhcyBhZGRlZCBhdCB0aGUgZW5kXG4gICAgZmlsdGVySW5kZXggPSBuZXdTdGF0ZS5maWx0ZXJzLmxlbmd0aCAtIDE7XG4gICAgbmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJbmRleF0gPSB7XG4gICAgICAuLi5uZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlckluZGV4XSxcbiAgICAgIC4uLihpZCA/IHtpZH0gOiBudWxsKVxuICAgIH07XG4gIH1cblxuICAvLyBObyBuZWVkIHRvIHVwZGF0ZSB0aGlzIGlmIGl0J3MgYSBuZXdseSBjcmVhdGVkIGZpbHRlclxuICAvLyBGaXJzdCB3ZSBtYWtlIHN1cmUgYWxsIHRoZSBkYXRhSWRzIHRoYXQgZmllbGRzIHJlZmVyIHRvIGFyZSB1cGRhdGVkXG4gIGlmIChvcmlnaW5hbEluZGV4ID49IDAgJiYgZGF0YUlkKSB7XG4gICAgLy8gSWYgdGhlIGRhdGFJZCBpcyBhbiBhcnJheSwgd2UgbmVlZCB0byB1cGRhdGUgZWFjaCBvbmUgaW5kaXZpZHVhbGx5IGFzIHRoZXkgbmVlZCBhIGNvcnJlY3QgdmFsdWVJbmRleCBwYXNzZWRcbiAgICBuZXdTdGF0ZSA9IChBcnJheS5pc0FycmF5KGRhdGFJZCkgPyBkYXRhSWQgOiBbZGF0YUlkXSkucmVkdWNlKChhY2N1LCBkLCBpbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoYWNjdSwge1xuICAgICAgICBpZHg6IGZpbHRlckluZGV4LFxuICAgICAgICBwcm9wOiAnZGF0YUlkJyxcbiAgICAgICAgdmFsdWU6IGQsXG4gICAgICAgIHZhbHVlSW5kZXg6IGluZGV4XG4gICAgICB9KTtcbiAgICB9LCBuZXdTdGF0ZSk7XG4gIH1cbiAgLy8gVGhlbiB3ZSB1cGRhdGUgdGhlIGZpZWxkc1xuICBpZiAoZmllbGQpIHtcbiAgICAvLyBJZiB0aGUgZmllbGQgaXMgYW4gYXJyYXksIHdlIG5lZWQgdG8gdXBkYXRlIGVhY2ggZmllbGQgaW5kaXZpZHVhbGx5IGFzIHRoZXkgbmVlZCBhIGNvcnJlY3QgdmFsdWVJbmRleCBwYXNzZWRcbiAgICBuZXdTdGF0ZSA9IChBcnJheS5pc0FycmF5KGZpZWxkKSA/IGZpZWxkIDogW2ZpZWxkXSkucmVkdWNlKChhY2N1LCBmLCBpbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoYWNjdSwge1xuICAgICAgICBpZHg6IGZpbHRlckluZGV4LFxuICAgICAgICBwcm9wOiAnbmFtZScsXG4gICAgICAgIHZhbHVlOiBmLFxuICAgICAgICB2YWx1ZUluZGV4OiBpbmRleFxuICAgICAgfSk7XG4gICAgfSwgbmV3U3RhdGUpO1xuICB9XG4gIC8vIFRoZW4gd2UgdXBkYXRlIHRoZSB2YWx1ZSBzZXBhcmF0ZWx5XG4gIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgbmV3U3RhdGUgPSBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7aWR4OiBmaWx0ZXJJbmRleCwgcHJvcDogJ3ZhbHVlJywgdmFsdWV9KTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn07XG5cbi8qKlxuICogU2V0IGxheWVyIGNvbG9yIHBhbGV0dGUgdWkgc3RhdGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCBsYXllckNvbG9yVUlDaGFuZ2VVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtvbGRMYXllciwgcHJvcCwgbmV3Q29uZmlnfTogVmlzU3RhdGVBY3Rpb25zLkxheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qgb2xkVml4Q29uZmlnID0gb2xkTGF5ZXIuY29uZmlnLnZpc0NvbmZpZ1twcm9wXTtcbiAgY29uc3QgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbG9yVUkocHJvcCwgbmV3Q29uZmlnKTtcbiAgY29uc3QgbmV3VmlzQ29uZmlnID0gbmV3TGF5ZXIuY29uZmlnLnZpc0NvbmZpZ1twcm9wXTtcbiAgaWYgKG9sZFZpeENvbmZpZyAhPT0gbmV3VmlzQ29uZmlnKSB7XG4gICAgcmV0dXJuIGxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlcihzdGF0ZSwge1xuICAgICAgb2xkTGF5ZXIsXG4gICAgICBuZXdWaXNDb25maWc6IHtcbiAgICAgICAgW3Byb3BdOiBuZXdWaXNDb25maWdcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogc3RhdGUubGF5ZXJzLm1hcChsID0+IChsLmlkID09PSBvbGRMYXllci5pZCA/IG5ld0xheWVyIDogbCkpXG4gIH07XG59O1xuXG4vKipcbiAqIFN0YXJ0IGFuZCBlbmQgZmlsdGVyIGFuaW1hdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlRmlsdGVyQW5pbWF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGZpbHRlcnM6IHN0YXRlLmZpbHRlcnMubWFwKChmLCBpKSA9PiAoaSA9PT0gYWN0aW9uLmlkeCA/IHsuLi5mLCBpc0FuaW1hdGluZzogIWYuaXNBbmltYXRpbmd9IDogZikpXG59KTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzRmlsdGVyQW5pbWF0aW9uQ29uZmlnKGNvbmZpZzogQW5pbWF0aW9uQ29uZmlnIHwgRmlsdGVyQW5pbWF0aW9uQ29uZmlnKTogYm9vbGVhbiB7XG4gIHJldHVybiAnZGF0YUlkJyBpbiBjb25maWcgJiYgJ2FuaW1hdGlvbldpbmRvdycgaW4gY29uZmlnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0QW5pbWF0aW9uQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRBbmltYXRpb25Db25maWdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtjb25maWd9ID0gYWN0aW9uO1xuICBpZiAoaXNGaWx0ZXJBbmltYXRpb25Db25maWcoY29uZmlnKSkge1xuICAgIC8vIEZpbmQgZmlsdGVyIHVzZWQgZm9yIGFuaW1hdGlvblxuICAgIC8vIEFzc3VtaW5nIHRoZXJlJ3Mgb25seSBvbmUgZmlsdGVyIHVzZWQgZm9yIGFuaW1hdGlvbiwgc2VlIHNldEZpbHRlclZpZXdVcGRhdGVyXG4gICAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gIWlzU2lkZUZpbHRlcihmKSk7XG4gICAgaWYgKCFmaWx0ZXIpIHtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gICAgY29uc3QgbmV3RmlsdGVyID0gey4uLmZpbHRlciwgLi4uY29uZmlnfTtcbiAgICByZXR1cm4gYXBwbHlGaWx0ZXJDb25maWdVcGRhdGVyKHN0YXRlLCBhcHBseUZpbHRlckNvbmZpZyhmaWx0ZXIuaWQsIG5ld0ZpbHRlcikpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICAgIC4uLmNvbmZpZ1xuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlTGF5ZXJBbmltYXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlTGF5ZXJBbmltYXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgIGlzQW5pbWF0aW5nOiAhc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmlzQW5pbWF0aW5nXG4gIH1cbn0pO1xuXG4vKipcbiAqIEhpZGUgYW5kIHNob3cgbGF5ZXIgYW5pbWF0aW9uIGNvbnRyb2xcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVMYXllckFuaW1hdGlvbkNvbnRyb2xVcGRhdGVyID0gKHN0YXRlOiBWaXNTdGF0ZSk6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBhbmltYXRpb25Db25maWc6IHtcbiAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgaGlkZUNvbnRyb2w6ICFzdGF0ZS5hbmltYXRpb25Db25maWcuaGlkZUNvbnRyb2xcbiAgfVxufSk7XG5cbi8qKlxuICogQ2hhbmdlIGZpbHRlciBhbmltYXRpb24gc3BlZWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoKGYsIGkpID0+IChpID09PSBhY3Rpb24uaWR4ID8gey4uLmYsIHNwZWVkOiBhY3Rpb24uc3BlZWR9IDogZikpXG59KTtcblxuLyoqXG4gKiBVcGRhdGUgYW5pbWF0aW9uIHNwZWVkIHdpdGggdGhlIHZlcnRpY2FsIHNwZWVkIHNsaWRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVMYXllckFuaW1hdGlvblNwZWVkVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7c3BlZWR9OiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgIHNwZWVkXG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBTaG93IGxhcmdlciB0aW1lIGZpbHRlciBhdCBib3R0b20gZm9yIHRpbWUgcGxheWJhY2sgKGFwcGx5IHRvIHRpbWUgZmlsdGVyIG9ubHkpXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0RmlsdGVyVmlld1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyVmlld1VwZGF0ZXJBY3Rpb25cbikgPT4ge1xuICBjb25zdCB7dmlldywgaWR4fSA9IGFjdGlvbjtcbiAgY29uc3Qgc2hvdWxkUmVzZXRPdGhlckZpbHRlcnNWaWV3ID0gdmlldyA9PT0gRklMVEVSX1ZJRVdfVFlQRVMuZW5sYXJnZWQ7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoKGYsIGkpID0+XG4gICAgICBpID09PSBpZHhcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5mLFxuICAgICAgICAgICAgdmlld1xuICAgICAgICAgIH1cbiAgICAgICAgOiBzaG91bGRSZXNldE90aGVyRmlsdGVyc1ZpZXdcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5mLFxuICAgICAgICAgICAgdmlldzogRklMVEVSX1ZJRVdfVFlQRVMuc2lkZVxuICAgICAgICAgIH1cbiAgICAgICAgOiBmXG4gICAgKVxuICB9O1xufTtcblxuLyoqXG4gKiBUb2dnbGVzIGZpbHRlciBmZWF0dXJlIHZpc2liaWxpdHlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVGaWx0ZXJGZWF0dXJlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVGaWx0ZXJGZWF0dXJlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2FjdGlvbi5pZHhdO1xuICBjb25zdCBpc1Zpc2libGUgPSBnZXQoZmlsdGVyLCBbJ3ZhbHVlJywgJ3Byb3BlcnRpZXMnLCAnaXNWaXNpYmxlJ10pO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIoc3RhdGUsIHtcbiAgICBpZHg6IGFjdGlvbi5pZHgsXG4gICAgcHJvcDogJ2VuYWJsZWQnLFxuICAgIHZhbHVlOiAhaXNWaXNpYmxlXG4gIH0pO1xuXG4gIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogYWN0aW9uLmlkeCxcbiAgICBwcm9wOiAndmFsdWUnLFxuICAgIHZhbHVlOiBmZWF0dXJlVG9GaWx0ZXJWYWx1ZShmaWx0ZXIudmFsdWUsIGZpbHRlci5pZCwge1xuICAgICAgaXNWaXNpYmxlOiAhaXNWaXNpYmxlXG4gICAgfSlcbiAgfSk7XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSBmaWx0ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVGaWx0ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2lkeH0gPSBhY3Rpb247XG4gIGNvbnN0IHtkYXRhSWQsIGlkfSA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcblxuICBjb25zdCBuZXdGaWx0ZXJzID0gW1xuICAgIC4uLnN0YXRlLmZpbHRlcnMuc2xpY2UoMCwgaWR4KSxcbiAgICAuLi5zdGF0ZS5maWx0ZXJzLnNsaWNlKGlkeCArIDEsIHN0YXRlLmZpbHRlcnMubGVuZ3RoKVxuICBdO1xuXG4gIGNvbnN0IGZpbHRlcmVkRGF0YXNldHMgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKGRhdGFJZCwgc3RhdGUuZGF0YXNldHMsIG5ld0ZpbHRlcnMsIHN0YXRlLmxheWVycyk7XG4gIGNvbnN0IG5ld0VkaXRvciA9XG4gICAgZ2V0RmlsdGVySWRJbkZlYXR1cmUoc3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZSkgPT09IGlkXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsXG4gICAgICAgIH1cbiAgICAgIDogc3RhdGUuZWRpdG9yO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHNldChbJ2ZpbHRlcnMnXSwgbmV3RmlsdGVycywgc3RhdGUpO1xuICBuZXdTdGF0ZSA9IHNldChbJ2RhdGFzZXRzJ10sIGZpbHRlcmVkRGF0YXNldHMsIG5ld1N0YXRlKTtcbiAgbmV3U3RhdGUgPSBzZXQoWydlZGl0b3InXSwgbmV3RWRpdG9yLCBuZXdTdGF0ZSk7XG5cbiAgcmV0dXJuIHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXdTdGF0ZSwgZGF0YUlkLCB1bmRlZmluZWQpO1xufTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgbGF5ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRMYXllclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGxldCBuZXdMYXllcjtcbiAgbGV0IG5ld0xheWVyRGF0YTtcbiAgaWYgKGFjdGlvbi5jb25maWcpIHtcbiAgICBuZXdMYXllciA9IGNyZWF0ZUxheWVyRnJvbUNvbmZpZyhzdGF0ZSwgYWN0aW9uLmNvbmZpZyk7XG4gICAgaWYgKCFuZXdMYXllcikge1xuICAgICAgQ29uc29sZS53YXJuKFxuICAgICAgICAnRmFpbGVkIHRvIGNyZWF0ZSBsYXllciBmcm9tIGNvbmZpZywgaXQgdXN1YWxseSBtZWFucyB0aGUgY29uZmlnIGlzIG5vdCBiZSBpbiBjb3JyZWN0IGZvcm1hdCcsXG4gICAgICAgIGFjdGlvbi5jb25maWdcbiAgICAgICk7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSk7XG4gICAgbmV3TGF5ZXIgPSByZXN1bHQubGF5ZXI7XG4gICAgbmV3TGF5ZXJEYXRhID0gcmVzdWx0LmxheWVyRGF0YTtcbiAgfSBlbHNlIHtcbiAgICAvLyBjcmVhdGUgYW4gZW1wdHkgbGF5ZXIgd2l0aCBhIHNwZWNpZmljIGRhdGFzZXQgb3IgYSBkZWZhdWx0IG9uZVxuICAgIGNvbnN0IGRlZmF1bHREYXRhc2V0ID0gYWN0aW9uLmRhdGFzZXRJZCA/PyBPYmplY3Qua2V5cyhzdGF0ZS5kYXRhc2V0cylbMF07XG4gICAgbmV3TGF5ZXIgPSBuZXcgTGF5ZXIoe1xuICAgICAgaXNWaXNpYmxlOiB0cnVlLFxuICAgICAgaXNDb25maWdBY3RpdmU6IHRydWUsXG4gICAgICBkYXRhSWQ6IGRlZmF1bHREYXRhc2V0XG4gICAgfSk7XG4gICAgbmV3TGF5ZXJEYXRhID0ge307XG4gIH1cblxuICBsZXQgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBbLi4uc3RhdGUubGF5ZXJzLCBuZXdMYXllcl0sXG4gICAgbGF5ZXJEYXRhOiBbLi4uc3RhdGUubGF5ZXJEYXRhLCBuZXdMYXllckRhdGFdLFxuICAgIC8vIGFkZCBuZXcgbGF5ZXIgYXQgdGhlIHRvcFxuICAgIGxheWVyT3JkZXI6IFtuZXdMYXllci5pZCwgLi4uc3RhdGUubGF5ZXJPcmRlcl0sXG4gICAgc3BsaXRNYXBzOiBhZGROZXdMYXllcnNUb1NwbGl0TWFwKHN0YXRlLnNwbGl0TWFwcywgbmV3TGF5ZXIpXG4gIH07XG5cbiAgaWYgKG5ld0xheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCkge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn07XG5cbi8qKlxuICogcmVtb3ZlIGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlTGF5ZXJVcGRhdGVyPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBUIHtcbiAgY29uc3QgaWR4ID0gTnVtYmVyLmlzRmluaXRlKGlkKVxuICAgID8gLy8gc3VwcG9ydCBvbGRlciBBUEksIHJlbW92ZSBsYXllciBieSBpZHhcbiAgICAgIE51bWJlcihpZClcbiAgICA6IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwIHx8IGlkeCA+PSBzdGF0ZS5sYXllcnMubGVuZ3RoKSB7XG4gICAgLy8gaW52YWxpZCBpbmRleFxuICAgIENvbnNvbGUud2FybihgY2FuIG5vdCByZW1vdmUgbGF5ZXIgd2l0aCBpbnZhbGlkIGlkfGlkeCAke2lkfWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtsYXllcnMsIGxheWVyRGF0YSwgbGF5ZXJPcmRlciwgY2xpY2tlZCwgaG92ZXJJbmZvfSA9IHN0YXRlO1xuICBjb25zdCBsYXllclRvUmVtb3ZlID0gbGF5ZXJzW2lkeF07XG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogZmlsdGVyT3V0QnlJZChsYXllclRvUmVtb3ZlLmlkKShsYXllcnMpLFxuICAgIGxheWVyRGF0YTogcmVtb3ZlRWxlbWVudEF0SW5kZXgoaWR4KShsYXllckRhdGEpLFxuICAgIGxheWVyT3JkZXI6IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihsYXllck9yZGVyLCBsYXllclRvUmVtb3ZlLmlkKSxcbiAgICBjbGlja2VkOiBsYXllclRvUmVtb3ZlLmlzTGF5ZXJIb3ZlcmVkKGNsaWNrZWQpID8gdW5kZWZpbmVkIDogY2xpY2tlZCxcbiAgICBob3ZlckluZm86IGxheWVyVG9SZW1vdmUuaXNMYXllckhvdmVyZWQoaG92ZXJJbmZvKSA/IHVuZGVmaW5lZCA6IGhvdmVySW5mbyxcbiAgICBzcGxpdE1hcHM6IHJlbW92ZUxheWVyRnJvbVNwbGl0TWFwcyhzdGF0ZS5zcGxpdE1hcHMsIGxheWVyVG9SZW1vdmUpXG4gICAgLy8gVE9ETzogdXBkYXRlIGZpbHRlcnMsIGNyZWF0ZSBoZWxwZXIgdG8gcmVtb3ZlIGxheWVyIGZvcm0gZmlsdGVyIChyZW1vdmUgbGF5ZXJpZCBhbmQgZGF0YWlkKSBpZiBtYXBwZWRcbiAgfTtcblxuICByZXR1cm4gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbn1cblxuLyoqXG4gKiBSZW9yZGVyIGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVvcmRlckxheWVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7b3JkZXJ9OiBWaXNTdGF0ZUFjdGlvbnMuUmVvcmRlckxheWVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGxheWVyT3JkZXI6IG9yZGVyXG59KTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgbGF5ZXIgZ3JvdXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRMYXllckdyb3VwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRMYXllckdyb3VwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBsYXllckdyb3VwID0gZ2V0TmV3TGF5ZXJHcm91cChhY3Rpb24pO1xuICBsZXQgbmV3TGF5ZXJPcmRlciA9IFsuLi5zdGF0ZS5sYXllck9yZGVyXTtcblxuICBpZiAoYWN0aW9uLmxheWVyT3JkZXIpIHtcbiAgICBhY3Rpb24ubGF5ZXJPcmRlci5mb3JFYWNoKGxheWVySWQgPT4ge1xuICAgICAgbmV3TGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihuZXdMYXllck9yZGVyLCBsYXllcklkIGFzIHN0cmluZyk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyT3JkZXI6IGFkZExheWVyT3JHcm91cFRvTGF5ZXJPcmRlcihuZXdMYXllck9yZGVyLCBsYXllckdyb3VwKVxuICB9O1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSBsYXllciBncm91cCBhbmQgYWxsIGxheWVycyB3aXRoaW4gaXRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVMYXllckdyb3VwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVMYXllckdyb3VwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7aWR9ID0gYWN0aW9uO1xuICBjb25zdCBsYXllckdyb3VwVG9SZW1vdmUgPSBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgaWQpO1xuICBpZiAoIWxheWVyR3JvdXBUb1JlbW92ZSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGxheWVySWRzVG9SZW1vdmUgPSBnZXRGbGF0TGF5ZXJPcmRlcihsYXllckdyb3VwVG9SZW1vdmUubGF5ZXJPcmRlcik7XG4gIGxldCBuZXdTdGF0ZSA9IHsuLi5zdGF0ZX07XG5cbiAgbGF5ZXJJZHNUb1JlbW92ZS5mb3JFYWNoKGxheWVySWQgPT4ge1xuICAgIGNvbnN0IGlkeCA9IG5ld1N0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBsYXllcklkKTtcbiAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgIG5ld1N0YXRlID0gcmVtb3ZlTGF5ZXJVcGRhdGVyKG5ld1N0YXRlLCB7aWQ6IGxheWVySWR9KTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IG5ld0xheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIobmV3U3RhdGUubGF5ZXJPcmRlciwgbGF5ZXJHcm91cFRvUmVtb3ZlKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5uZXdTdGF0ZSxcbiAgICBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyXG4gIH07XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBhIGxheWVyIGdyb3VwIChsYWJlbCwgdmlzaWJpbGl0eSwgbGF5ZXIgbWVtYmVyc2hpcClcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVMYXllckdyb3VwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVMYXllckdyb3VwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7aWQsIG9wdGlvbnN9ID0gYWN0aW9uO1xuICBjb25zdCBsYXllckdyb3VwID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIGlkKTtcbiAgaWYgKCFsYXllckdyb3VwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGV0IG5ld1N0YXRlID0gey4uLnN0YXRlfTtcblxuICBpZiAob3B0aW9ucy5sYXllck9yZGVyKSB7XG4gICAgbmV3U3RhdGUubGF5ZXJPcmRlciA9IFsuLi5sYXllckdyb3VwLmxheWVyT3JkZXIsIC4uLm5ld1N0YXRlLmxheWVyT3JkZXJdO1xuICAgIG9wdGlvbnMubGF5ZXJPcmRlci5mb3JFYWNoKGxheWVySWQgPT4ge1xuICAgICAgbmV3U3RhdGUubGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihuZXdTdGF0ZS5sYXllck9yZGVyLCBsYXllcklkIGFzIHN0cmluZyk7XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBuZXdMYXllckdyb3VwID0ge1xuICAgIC4uLmxheWVyR3JvdXAsXG4gICAgLi4ub3B0aW9uc1xuICB9O1xuXG4gIGlmIChuZXdMYXllckdyb3VwLmlzVmlzaWJsZSAhPT0gbGF5ZXJHcm91cC5pc1Zpc2libGUpIHtcbiAgICBjb25zdCBsYXllcklkcyA9IGdldEZsYXRMYXllck9yZGVyKG5ld0xheWVyR3JvdXAubGF5ZXJPcmRlcik7XG4gICAgbmV3U3RhdGUgPSBuZXdTdGF0ZS5sYXllcnMucmVkdWNlKChhY2MsIGxheWVyKSA9PiB7XG4gICAgICBpZiAobGF5ZXJJZHMuaW5jbHVkZXMobGF5ZXIuaWQpKSB7XG4gICAgICAgIHJldHVybiBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoYWNjLCB7XG4gICAgICAgICAgb2xkTGF5ZXI6IGxheWVyLFxuICAgICAgICAgIG5ld0NvbmZpZzoge2lzVmlzaWJsZTogbmV3TGF5ZXJHcm91cC5pc1Zpc2libGV9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBuZXdTdGF0ZSk7XG4gIH1cblxuICBjb25zdCBuZXdMYXllck9yZGVyID0gdXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlcihuZXdTdGF0ZS5sYXllck9yZGVyLCBuZXdMYXllckdyb3VwKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5uZXdTdGF0ZSxcbiAgICBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyXG4gIH07XG59O1xuXG4vKipcbiAqIEFkZCBhIGxheWVyIHRvIGEgbGF5ZXIgZ3JvdXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRMYXllclRvTGF5ZXJHcm91cFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkTGF5ZXJUb0xheWVyR3JvdXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtsYXllckdyb3VwSWQsIGxheWVySWR9ID0gYWN0aW9uO1xuICBjb25zdCBsYXllckdyb3VwID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIGxheWVyR3JvdXBJZCk7XG4gIGNvbnN0IGxheWVyID0gc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBsYXllcklkKTtcbiAgaWYgKCFsYXllckdyb3VwIHx8ICFsYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGlmIChsYXllckdyb3VwLmxheWVyT3JkZXIuZmluZChlbnRyeSA9PiBlbnRyeSA9PT0gbGF5ZXJJZCkpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdHcm91cExheWVyT3JkZXIgPSBhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIobGF5ZXJHcm91cC5sYXllck9yZGVyLCBsYXllcklkKTtcbiAgcmV0dXJuIHVwZGF0ZUxheWVyR3JvdXBVcGRhdGVyKHN0YXRlLCB7XG4gICAgaWQ6IGxheWVyR3JvdXBJZCxcbiAgICBvcHRpb25zOiB7bGF5ZXJPcmRlcjogbmV3R3JvdXBMYXllck9yZGVyfVxuICB9KTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgbGF5ZXIgZnJvbSBhIGxheWVyIGdyb3VwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlTGF5ZXJGcm9tTGF5ZXJHcm91cFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlTGF5ZXJGcm9tTGF5ZXJHcm91cFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2xheWVyR3JvdXBJZCwgbGF5ZXJJZH0gPSBhY3Rpb247XG4gIGNvbnN0IGxheWVyR3JvdXAgPSBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgbGF5ZXJHcm91cElkKTtcbiAgaWYgKCFsYXllckdyb3VwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3TGF5ZXJHcm91cE9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKGxheWVyR3JvdXAubGF5ZXJPcmRlciwgbGF5ZXJJZCk7XG4gIHJldHVybiB1cGRhdGVMYXllckdyb3VwVXBkYXRlcihzdGF0ZSwge1xuICAgIGlkOiBsYXllckdyb3VwSWQsXG4gICAgb3B0aW9uczoge2xheWVyT3JkZXI6IG5ld0xheWVyR3JvdXBPcmRlcn1cbiAgfSk7XG59O1xuXG4vKipcbiAqIFN3YXAgbGF5ZXIgb3JkZXIgZW50cmllcyBiZXR3ZWVuIHJvb3QgYW5kIGdyb3Vwc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmV4cG9ydCBjb25zdCBzd2FwTGF5ZXJPcmRlckVudHJpZXNVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlN3YXBMYXllck9yZGVyRW50cmllc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge29yaWdpbkxheWVySWQsIGRlc3RpbmF0aW9uTGF5ZXJJZCwgb3JpZ2luTGF5ZXJHcm91cElkLCBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZH0gPSBhY3Rpb247XG5cbiAgaWYgKCFvcmlnaW5MYXllckdyb3VwSWQgJiYgIWRlc3RpbmF0aW9uTGF5ZXJHcm91cElkKSB7XG4gICAgY29uc3Qgb3JpZ2luSW5kZXggPSBzdGF0ZS5sYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PlxuICAgICAgdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyA/IGVudHJ5ID09PSBvcmlnaW5MYXllcklkIDogZW50cnkuaWQgPT09IG9yaWdpbkxheWVySWRcbiAgICApO1xuICAgIGlmIChkZXN0aW5hdGlvbkxheWVySWQgJiYgb3JpZ2luSW5kZXggIT09IC0xKSB7XG4gICAgICBjb25zdCBkZXN0aW5hdGlvbkluZGV4ID0gc3RhdGUubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICAgICAgdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyA/IGVudHJ5ID09PSBkZXN0aW5hdGlvbkxheWVySWQgOiBlbnRyeS5pZCA9PT0gZGVzdGluYXRpb25MYXllcklkXG4gICAgICApO1xuICAgICAgaWYgKGRlc3RpbmF0aW9uSW5kZXggIT09IC0xKSB7XG4gICAgICAgIGNvbnN0IG5ld0xheWVyT3JkZXIgPSBhcnJheU1vdmUoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luSW5kZXgsIGRlc3RpbmF0aW9uSW5kZXgpO1xuICAgICAgICByZXR1cm4gey4uLnN0YXRlLCBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAob3JpZ2luTGF5ZXJHcm91cElkICYmICFkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCkge1xuICAgIGxldCBuZXdMYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbkxheWVySWQpO1xuICAgIGlmIChkZXN0aW5hdGlvbkxheWVySWQpIHtcbiAgICAgIGNvbnN0IGRlc3RpbmF0aW9uSW5kZXggPSBuZXdMYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PlxuICAgICAgICB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnID8gZW50cnkgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZCA6IGZhbHNlXG4gICAgICApO1xuICAgICAgbmV3TGF5ZXJPcmRlci5zcGxpY2UoZGVzdGluYXRpb25JbmRleCA9PT0gLTEgPyAwIDogZGVzdGluYXRpb25JbmRleCwgMCwgb3JpZ2luTGF5ZXJJZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0xheWVyT3JkZXIgPSBbLi4ubmV3TGF5ZXJPcmRlciwgb3JpZ2luTGF5ZXJJZF07XG4gICAgfVxuICAgIHJldHVybiB7Li4uc3RhdGUsIGxheWVyT3JkZXI6IG5ld0xheWVyT3JkZXJ9O1xuICB9XG5cbiAgaWYgKG9yaWdpbkxheWVyR3JvdXBJZCAmJiBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCkge1xuICAgIGlmIChvcmlnaW5MYXllckdyb3VwSWQgPT09IGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkKSB7XG4gICAgICBjb25zdCBsYXllckdyb3VwID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbkxheWVyR3JvdXBJZCk7XG4gICAgICBpZiAoIWxheWVyR3JvdXApIHJldHVybiBzdGF0ZTtcbiAgICAgIGNvbnN0IG9yaWdpbkluZGV4ID0gbGF5ZXJHcm91cC5sYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PlxuICAgICAgICB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnID8gZW50cnkgPT09IG9yaWdpbkxheWVySWQgOiBlbnRyeS5pZCA9PT0gb3JpZ2luTGF5ZXJJZFxuICAgICAgKTtcbiAgICAgIGlmIChvcmlnaW5JbmRleCA9PT0gLTEpIHJldHVybiBzdGF0ZTtcbiAgICAgIGlmIChkZXN0aW5hdGlvbkxheWVySWQpIHtcbiAgICAgICAgY29uc3QgZGVzdEluZGV4ID0gbGF5ZXJHcm91cC5sYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PlxuICAgICAgICAgIHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycgPyBlbnRyeSA9PT0gZGVzdGluYXRpb25MYXllcklkIDogZW50cnkuaWQgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZFxuICAgICAgICApO1xuICAgICAgICBpZiAoZGVzdEluZGV4ID09PSAtMSkgcmV0dXJuIHN0YXRlO1xuICAgICAgICBjb25zdCBuZXdHcm91cExheWVyT3JkZXIgPSBhcnJheU1vdmUobGF5ZXJHcm91cC5sYXllck9yZGVyLCBvcmlnaW5JbmRleCwgZGVzdEluZGV4KTtcbiAgICAgICAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IHVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwge1xuICAgICAgICAgIC4uLmxheWVyR3JvdXAsXG4gICAgICAgICAgbGF5ZXJPcmRlcjogbmV3R3JvdXBMYXllck9yZGVyXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gey4uLnN0YXRlLCBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICAvLyBDcm9zcy1ncm91cCBtb3ZlOiByZW1vdmUgZnJvbSBvcmlnaW4sIHRoZW4gYWRkIHRvIGRlc3RpbmF0aW9uXG4gICAgY29uc3QgbGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5MYXllcklkKTtcbiAgICBsZXQgbmV3U3RhdGUgPSBhZGRMYXllclRvTGF5ZXJHcm91cFVwZGF0ZXIoXG4gICAgICB7Li4uc3RhdGUsIGxheWVyT3JkZXJ9LFxuICAgICAge2xheWVySWQ6IG9yaWdpbkxheWVySWQsIGxheWVyR3JvdXBJZDogZGVzdGluYXRpb25MYXllckdyb3VwSWR9XG4gICAgKTtcblxuICAgIGlmIChkZXN0aW5hdGlvbkxheWVySWQpIHtcbiAgICAgIGNvbnN0IGxheWVyR3JvdXAgPSBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIobmV3U3RhdGUubGF5ZXJPcmRlciwgZGVzdGluYXRpb25MYXllckdyb3VwSWQpO1xuICAgICAgaWYgKCFsYXllckdyb3VwKSByZXR1cm4gc3RhdGU7XG4gICAgICBjb25zdCBvcmlnaW5JbmRleCA9IGxheWVyR3JvdXAubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT4gZW50cnkgPT09IG9yaWdpbkxheWVySWQpO1xuICAgICAgY29uc3QgZGVzdEluZGV4ID0gbGF5ZXJHcm91cC5sYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PiBlbnRyeSA9PT0gZGVzdGluYXRpb25MYXllcklkKTtcbiAgICAgIGlmIChvcmlnaW5JbmRleCAhPT0gLTEgJiYgZGVzdEluZGV4ICE9PSAtMSkge1xuICAgICAgICBjb25zdCBuZXdHcm91cExheWVyT3JkZXIgPSBhcnJheU1vdmUobGF5ZXJHcm91cC5sYXllck9yZGVyLCBvcmlnaW5JbmRleCwgZGVzdEluZGV4KTtcbiAgICAgICAgbmV3U3RhdGUgPSB7XG4gICAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICAgICAgbGF5ZXJPcmRlcjogdXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlcihuZXdTdGF0ZS5sYXllck9yZGVyLCB7XG4gICAgICAgICAgICAuLi5sYXllckdyb3VwLFxuICAgICAgICAgICAgbGF5ZXJPcmRlcjogbmV3R3JvdXBMYXllck9yZGVyXG4gICAgICAgICAgfSlcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ld1N0YXRlO1xuICB9XG5cbiAgaWYgKCFvcmlnaW5MYXllckdyb3VwSWQgJiYgZGVzdGluYXRpb25MYXllckdyb3VwSWQpIHtcbiAgICBjb25zdCBsYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbkxheWVySWQpO1xuICAgIHJldHVybiBhZGRMYXllclRvTGF5ZXJHcm91cFVwZGF0ZXIoXG4gICAgICB7Li4uc3RhdGUsIGxheWVyT3JkZXJ9LFxuICAgICAge2xheWVySWQ6IG9yaWdpbkxheWVySWQsIGxheWVyR3JvdXBJZDogZGVzdGluYXRpb25MYXllckdyb3VwSWR9XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn07XG5cbi8qKlxuICogZHVwbGljYXRlIGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgZHVwbGljYXRlTGF5ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZH06IFZpc1N0YXRlQWN0aW9ucy5EdXBsaWNhdGVMYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgaWR4ID0gTnVtYmVyLmlzRmluaXRlKGlkKVxuICAgID8gLy8gc3VwcG9ydCBvbGRlciBBUEksIHJlbW92ZSBsYXllciBieSBpZHhcbiAgICAgIE51bWJlcihpZClcbiAgICA6IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwIHx8ICFzdGF0ZS5sYXllcnNbaWR4XSkge1xuICAgIENvbnNvbGUud2FybihgbGF5ZXIgJHtpZHh9IG5vdCBmb3VuZCBpbiBsYXllck9yZGVyYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge2xheWVyc30gPSBzdGF0ZTtcbiAgY29uc3Qgb3JpZ2luYWwgPSBsYXllcnNbaWR4XTtcblxuICBjb25zdCBvcmlnaW5hbExheWVyT3JkZXJJZHggPSBnZXRJbmRleEZyb21MYXllckVudHJ5SWQoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luYWwuaWQpO1xuICBsZXQgbmV3TGFiZWwgPSBgQ29weSBvZiAke29yaWdpbmFsLmNvbmZpZy5sYWJlbH1gO1xuICBsZXQgcG9zdGZpeCA9IDA7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb29wLWZ1bmNcbiAgd2hpbGUgKGxheWVycy5maW5kKGwgPT4gbC5jb25maWcubGFiZWwgPT09IG5ld0xhYmVsKSkge1xuICAgIG5ld0xhYmVsID0gYENvcHkgb2YgJHtvcmlnaW5hbC5jb25maWcubGFiZWx9ICR7Kytwb3N0Zml4fWA7XG4gIH1cblxuICAvLyBjb2xsZWN0IGxheWVyIGNvbmZpZyBmcm9tIG9yaWdpbmFsXG4gIGNvbnN0IGxvYWRlZExheWVyID0gc2VyaWFsaXplTGF5ZXIob3JpZ2luYWwsIHN0YXRlLnNjaGVtYSk7XG5cbiAgLy8gYXNzaWduIG5ldyBpZCBhbmQgbGFiZWwgdG8gY29waWVkIGxheWVyXG4gIGlmICghbG9hZGVkTGF5ZXI/LmNvbmZpZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsb2FkZWRMYXllci5jb25maWcubGFiZWwgPSBuZXdMYWJlbDtcbiAgbG9hZGVkTGF5ZXIuaWQgPSBnZW5lcmF0ZUhhc2hJZChMQVlFUl9JRF9MRU5HVEgpO1xuXG4gIC8vIGFkZCBsYXllciB0byBzdGF0ZVxuICBsZXQgbmV4dFN0YXRlID0gYWRkTGF5ZXJVcGRhdGVyKHN0YXRlLCB7Y29uZmlnOiBsb2FkZWRMYXllcn0pO1xuICAvLyByZXRyaWV2ZSBuZXdseSBjcmVhdGVkIGxheWVyXG4gIGNvbnN0IG5ld0xheWVyID0gbmV4dFN0YXRlLmxheWVyc1tuZXh0U3RhdGUubGF5ZXJzLmxlbmd0aCAtIDFdO1xuXG4gIC8vIENoZWNrIGlmIHRoZSBvcmlnaW5hbCBsYXllciBpcyBpbnNpZGUgYSBncm91cFxuICBjb25zdCBwYXJlbnRHcm91cCA9IGZpbmRQYXJlbnRHcm91cEZvckxheWVyKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbmFsLmlkKTtcblxuICBpZiAocGFyZW50R3JvdXApIHtcbiAgICAvLyBMYXllciBpcyBpbnNpZGUgYSBncm91cCAtIHJlbW92ZSB0aGUgcHJlcGVuZGVkIGlkIGZyb20gcm9vdCBhbmQgaW5zZXJ0IGludG8gdGhlIGdyb3VwXG4gICAgY29uc3QgbGF5ZXJPcmRlcldpdGhvdXRQcmVwZW5kZWQgPSBuZXh0U3RhdGUubGF5ZXJPcmRlci5zbGljZSgxKTtcbiAgICBjb25zdCBpZHhJbkdyb3VwID0gcGFyZW50R3JvdXAubGF5ZXJPcmRlci5maW5kSW5kZXgoZSA9PiBlID09PSBvcmlnaW5hbC5pZCk7XG4gICAgY29uc3QgbmV3R3JvdXBMYXllck9yZGVyID0gYXJyYXlJbnNlcnQocGFyZW50R3JvdXAubGF5ZXJPcmRlciwgaWR4SW5Hcm91cCwgbmV3TGF5ZXIuaWQpO1xuICAgIGNvbnN0IHVwZGF0ZWRHcm91cCA9IHsuLi5wYXJlbnRHcm91cCwgbGF5ZXJPcmRlcjogbmV3R3JvdXBMYXllck9yZGVyfTtcbiAgICBjb25zdCBuZXdMYXllck9yZGVyID0gdXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlcihsYXllck9yZGVyV2l0aG91dFByZXBlbmRlZCwgdXBkYXRlZEdyb3VwKTtcbiAgICBuZXh0U3RhdGUgPSByZW9yZGVyTGF5ZXJVcGRhdGVyKG5leHRTdGF0ZSwge29yZGVyOiBuZXdMYXllck9yZGVyfSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gTGF5ZXIgaXMgYXQgcm9vdCBsZXZlbCAtIHVzZSBvcmlnaW5hbCBpbmRleC1iYXNlZCBpbnNlcnRpb25cbiAgICBjb25zdCBuZXdMYXllck9yZGVyID0gYXJyYXlJbnNlcnQoXG4gICAgICBuZXh0U3RhdGUubGF5ZXJPcmRlci5zbGljZSgxLCBuZXh0U3RhdGUubGF5ZXJPcmRlci5sZW5ndGgpLFxuICAgICAgb3JpZ2luYWxMYXllck9yZGVySWR4LFxuICAgICAgbmV3TGF5ZXIuaWRcbiAgICApO1xuICAgIG5leHRTdGF0ZSA9IHJlb3JkZXJMYXllclVwZGF0ZXIobmV4dFN0YXRlLCB7b3JkZXI6IG5ld0xheWVyT3JkZXJ9KTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVBbmltYXRpb25Eb21haW4obmV4dFN0YXRlKTtcbn07XG5cbi8qKlxuICogQWRkIGEgbmV3IGVmZmVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZEVmZmVjdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkRWZmZWN0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoXG4gICAgYWN0aW9uLmNvbmZpZz8udHlwZSA9PT0gTElHSFRfQU5EX1NIQURPV19FRkZFQ1QudHlwZSAmJlxuICAgIHN0YXRlLmVmZmVjdHMuc29tZShlZmZlY3QgPT4gZWZmZWN0LnR5cGUgPT09IExJR0hUX0FORF9TSEFET1dfRUZGRUNULnR5cGUpXG4gICkge1xuICAgIENvbnNvbGUud2FybihgQ2FuJ3QgYWRkIG1vcmUgdGhhbiBvbmUgJHtMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVC5uYW1lfSBlZmZlY3RgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBpZiAoXG4gICAgYWN0aW9uLmNvbmZpZz8udHlwZSA9PT0gRElTVEFOQ0VfRk9HX1RZUEUgJiZcbiAgICBzdGF0ZS5lZmZlY3RzLnNvbWUoXG4gICAgICBlZmZlY3QgPT4gZWZmZWN0LnR5cGUgPT09IERJU1RBTkNFX0ZPR19UWVBFIHx8IGVmZmVjdC50eXBlID09PSBTVVJGQUNFX0ZPR19UWVBFXG4gICAgKVxuICApIHtcbiAgICBDb25zb2xlLndhcm4oXCJDYW4ndCBhZGQgbW9yZSB0aGFuIG9uZSBmb2cgZWZmZWN0XCIpO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGlmIChcbiAgICBhY3Rpb24uY29uZmlnPy50eXBlID09PSBTVVJGQUNFX0ZPR19UWVBFICYmXG4gICAgc3RhdGUuZWZmZWN0cy5zb21lKFxuICAgICAgZWZmZWN0ID0+IGVmZmVjdC50eXBlID09PSBTVVJGQUNFX0ZPR19UWVBFIHx8IGVmZmVjdC50eXBlID09PSBESVNUQU5DRV9GT0dfVFlQRVxuICAgIClcbiAgKSB7XG4gICAgQ29uc29sZS53YXJuKFwiQ2FuJ3QgYWRkIG1vcmUgdGhhbiBvbmUgZm9nIGVmZmVjdFwiKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdFZmZlY3QgPSBjcmVhdGVFZmZlY3QoYWN0aW9uLmNvbmZpZyk7XG5cbiAgLy8gY29sbGFwc2UgY29uZmlndXJhdG9ycyBmb3Igb3RoZXIgZWZmZWN0c1xuICBzdGF0ZS5lZmZlY3RzLmZvckVhY2goZWZmZWN0ID0+IGVmZmVjdC5zZXRQcm9wcyh7aXNDb25maWdBY3RpdmU6IGZhbHNlfSkpO1xuXG4gIGNvbnN0IGVmZmVjdHMgPSBbLi4uc3RhdGUuZWZmZWN0cywgbmV3RWZmZWN0XTtcbiAgY29uc3QgZWZmZWN0T3JkZXIgPSBmaXhFZmZlY3RPcmRlcihlZmZlY3RzLCBbbmV3RWZmZWN0LmlkLCAuLi5zdGF0ZS5lZmZlY3RPcmRlcl0pO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWZmZWN0cyxcbiAgICBlZmZlY3RPcmRlclxuICB9O1xufTtcblxuLyoqXG4gKiByZW1vdmUgZWZmZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlRWZmZWN0VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlRWZmZWN0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBpZHggPSBzdGF0ZS5lZmZlY3RzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA8IDAgfHwgaWR4ID49IHN0YXRlLmVmZmVjdHMubGVuZ3RoKSB7XG4gICAgQ29uc29sZS53YXJuKGBjYW4gbm90IHJlbW92ZSBlZmZlY3Qgd2l0aCBpbnZhbGlkIGlkICR7aWR9YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge2VmZmVjdHMsIGVmZmVjdE9yZGVyfSA9IHN0YXRlO1xuICBjb25zdCBlZmZlY3RUb1JlbW92ZSA9IGVmZmVjdHNbaWR4XTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGZpeGVkIGluIHRzXG4gICAgZWZmZWN0czogZmlsdGVyT3V0QnlJZChlZmZlY3RUb1JlbW92ZS5pZCkoZWZmZWN0cyksXG4gICAgZWZmZWN0T3JkZXI6IGVmZmVjdE9yZGVyLmZpbHRlcihlZmZlY3RJZCA9PiBlZmZlY3RJZCAhPT0gZWZmZWN0VG9SZW1vdmUuaWQpXG4gIH07XG59O1xuXG4vKipcbiAqIFJlb3JkZXIgZWZmZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVvcmRlckVmZmVjdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge29yZGVyfTogVmlzU3RhdGVBY3Rpb25zLlJlb3JkZXJFZmZlY3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZWZmZWN0T3JkZXI6IGZpeEVmZmVjdE9yZGVyKHN0YXRlLmVmZmVjdHMsIFsuLi5vcmRlcl0pXG59KTtcblxuLyoqXG4gKiBVcGRhdGUgZWZmZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlRWZmZWN0VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWQsIHByb3BzfTogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUVmZmVjdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgaWR4ID0gc3RhdGUuZWZmZWN0cy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwIHx8IGlkeCA+PSBzdGF0ZS5lZmZlY3RzLmxlbmd0aCkge1xuICAgIENvbnNvbGUud2FybihgY2FuIG5vdCB1cGRhdGUgZWZmZWN0IHdpdGggaW52YWxpZCBpZCAke2lkfWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxldCBlZmZlY3RPcmRlciA9IHN0YXRlLmVmZmVjdE9yZGVyO1xuICBpZiAocHJvcHMuaWQgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5pZCAhPT0gaWQpIHtcbiAgICBjb25zdCBpZHgyID0gc3RhdGUuZWZmZWN0cy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBwcm9wcy5pZCk7XG4gICAgaWYgKGlkeDIgPj0gMCkge1xuICAgICAgQ29uc29sZS53YXJuKGBjYW4gbm90IHVwZGF0ZSBlZmZlY3Qgd2l0aCBleGlzdGluZyBlZmZlY3QgaWQgJHtpZH1gKTtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICBlZmZlY3RPcmRlciA9IGVmZmVjdE9yZGVyLm1hcChlZmZlY3RPcmRlcklkID0+XG4gICAgICBlZmZlY3RPcmRlcklkID09PSBpZCA/IChwcm9wcy5pZCBhcyBzdHJpbmcpIDogZWZmZWN0T3JkZXJJZFxuICAgICk7XG4gIH1cblxuICBjb25zdCBlZmZlY3QgPSBzdGF0ZS5lZmZlY3RzW2lkeF07XG4gIGNvbnN0IG5leHRQYXJhbXMgPSBwcm9wcy5wYXJhbWV0ZXJzO1xuICAvLyBBIHRpbWVzdGFtcC1vbmx5IG5vLW9wIHN0aWxsIHVzZWQgdG8gYWxsb2NhdGUgYSBuZXcgdmlzU3RhdGUgKHNldFByb3BzXG4gIC8vIG11dGF0ZXMgaW4gcGxhY2UpLiBUaGF0IHJldHJpZ2dlcmVkIG5lc3RlZCByZWFjdC1yZWR1eCBjb25uZWN0IHN1YnNjcmliZXJzXG4gIC8vIHdoaWxlIGRyYWdnaW5nIHRoZSBMaWdodCAmIFNoYWRvdyBkYXktdGltZSBzbGlkZXIgdW50aWwgUmVhY3QgdGhyZXdcbiAgLy8gXCJNYXhpbXVtIHVwZGF0ZSBkZXB0aCBleGNlZWRlZFwiLlxuICBpZiAoXG4gICAgbmV4dFBhcmFtcyAmJlxuICAgIE9iamVjdC5rZXlzKHByb3BzKS5sZW5ndGggPT09IDEgJiZcbiAgICBPYmplY3Qua2V5cyhuZXh0UGFyYW1zKS5sZW5ndGggPT09IDEgJiZcbiAgICBuZXh0UGFyYW1zLnRpbWVzdGFtcCAhPSBudWxsICYmXG4gICAgbmV4dFBhcmFtcy50aW1lc3RhbXAgPT09IGVmZmVjdC5wYXJhbWV0ZXJzLnRpbWVzdGFtcFxuICApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdFZmZlY3RzID0gWy4uLnN0YXRlLmVmZmVjdHNdO1xuICBuZXdFZmZlY3RzW2lkeF0uc2V0UHJvcHMocHJvcHMpO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWZmZWN0czogbmV3RWZmZWN0cyxcbiAgICBlZmZlY3RPcmRlclxuICB9O1xufTtcblxuLy8gQU5OT1RBVElPTiBVUERBVEVSU1xuXG5mdW5jdGlvbiBtYWtlTmV3QW5ub3RhdGlvbihjb25maWc/OiBBbm5vdGF0aW9uUHJvcHNQYXJ0aWFsKTogQW5ub3RhdGlvbiB7XG4gIGNvbnN0IGtpbmQgPSBjb25maWc/LmtpbmQgPz8gSU5JVElBTF9BTk5PVEFUSU9OX0tJTkQ7XG4gIGNvbnN0IHByb3ZpZGVkQW5nbGUgPSBOdW1iZXIuaXNGaW5pdGUoKGNvbmZpZyBhcyBhbnkpPy5hbmdsZSkgPyAoY29uZmlnIGFzIGFueSkuYW5nbGUgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGRlcml2ZWRGcm9tQW5nbGUgPVxuICAgIHByb3ZpZGVkQW5nbGUgIT0gbnVsbCA/IHRleHRQbGFjZW1lbnRGcm9tQW5nbGUocHJvdmlkZWRBbmdsZSkgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IHRleHRTaWRlID1cbiAgICBjb25maWc/LnRleHRTaWRlID8/XG4gICAgZGVyaXZlZEZyb21BbmdsZT8uc2lkZSA/P1xuICAgIChraW5kID09PSBBbm5vdGF0aW9uS2luZC5URVhUID8gdW5kZWZpbmVkIDogSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfU0lERSk7XG4gIGNvbnN0IHRleHRWZXJ0aWNhbFBvc2l0aW9uID1cbiAgICBjb25maWc/LnRleHRWZXJ0aWNhbFBvc2l0aW9uID8/XG4gICAgZGVyaXZlZEZyb21BbmdsZT8udmVydGljYWwgPz9cbiAgICAoa2luZCA9PT0gQW5ub3RhdGlvbktpbmQuVEVYVCA/IHVuZGVmaW5lZCA6IElOSVRJQUxfQU5OT1RBVElPTl9URVhUX1ZFUlRJQ0FMX1BPU0lUSU9OKTtcbiAgY29uc3QgYmFzZSA9IHtcbiAgICBpZDogY29uZmlnPy5pZCA/PyBnZW5lcmF0ZUhhc2hJZCg2KSxcbiAgICBraW5kLFxuICAgIGlzVmlzaWJsZTogY29uZmlnPy5pc1Zpc2libGUgPz8gdHJ1ZSxcbiAgICBhdXRvU2l6ZTogY29uZmlnPy5hdXRvU2l6ZSA/PyB0cnVlLFxuICAgIGF1dG9TaXplWTogY29uZmlnPy5hdXRvU2l6ZVkgPz8gdHJ1ZSxcbiAgICBhbmNob3JQb2ludDogY29uZmlnPy5hbmNob3JQb2ludCA/PyAoWzAsIDBdIGFzIFtudW1iZXIsIG51bWJlcl0pLFxuICAgIGxhYmVsOiBjb25maWc/LmxhYmVsID8/ICdOZXcgQW5ub3RhdGlvbicsXG4gICAgbGluZUNvbG9yOiBjb25maWc/LmxpbmVDb2xvciA/PyBJTklUSUFMX0FOTk9UQVRJT05fTElORV9DT0xPUixcbiAgICBsaW5lV2lkdGg6IGNvbmZpZz8ubGluZVdpZHRoID8/IElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX1dJRFRILFxuICAgIHRleHRXaWR0aDogY29uZmlnPy50ZXh0V2lkdGggPz8gSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfV0lEVEgsXG4gICAgdGV4dEhlaWdodDogY29uZmlnPy50ZXh0SGVpZ2h0ID8/IElOSVRJQUxfQU5OT1RBVElPTl9URVhUX0hFSUdIVCxcbiAgICB0ZXh0VmVydGljYWxBbGlnbjogY29uZmlnPy50ZXh0VmVydGljYWxBbGlnbiA/PyAoJ2JvdHRvbScgYXMgY29uc3QpLFxuICAgIC4uLih0ZXh0U2lkZSA/IHt0ZXh0U2lkZX0gOiB7fSksXG4gICAgLi4uKHRleHRWZXJ0aWNhbFBvc2l0aW9uID8ge3RleHRWZXJ0aWNhbFBvc2l0aW9ufSA6IHt9KSxcbiAgICBtYXBJbmRleDogY29uZmlnPy5tYXBJbmRleFxuICB9O1xuXG4gIGNvbnN0IGRlZmF1bHRBbmdsZSA9XG4gICAgdGV4dFNpZGUgJiYgdGV4dFZlcnRpY2FsUG9zaXRpb25cbiAgICAgID8gQU5OT1RBVElPTl9BTkdMRV9CWV9QTEFDRU1FTlRbYCR7dGV4dFNpZGV9LSR7dGV4dFZlcnRpY2FsUG9zaXRpb259YF1cbiAgICAgIDogSU5JVElBTF9BTk5PVEFUSU9OX0FOR0xFO1xuXG4gIHN3aXRjaCAoa2luZCkge1xuICAgIGNhc2UgQW5ub3RhdGlvbktpbmQuUE9JTlQ6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5iYXNlLFxuICAgICAgICBraW5kOiBBbm5vdGF0aW9uS2luZC5QT0lOVCxcbiAgICAgICAgYXJtTGVuZ3RoOiAoY29uZmlnIGFzIGFueSk/LmFybUxlbmd0aCA/PyBJTklUSUFMX0FOTk9UQVRJT05fQVJNX0xFTkdUSCxcbiAgICAgICAgYW5nbGU6IHByb3ZpZGVkQW5nbGUgPz8gZGVmYXVsdEFuZ2xlXG4gICAgICB9O1xuICAgIGNhc2UgQW5ub3RhdGlvbktpbmQuQVJST1c6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5iYXNlLFxuICAgICAgICBraW5kOiBBbm5vdGF0aW9uS2luZC5BUlJPVyxcbiAgICAgICAgYXJtTGVuZ3RoOiAoY29uZmlnIGFzIGFueSk/LmFybUxlbmd0aCA/PyBJTklUSUFMX0FOTk9UQVRJT05fQVJNX0xFTkdUSCxcbiAgICAgICAgYW5nbGU6IHByb3ZpZGVkQW5nbGUgPz8gZGVmYXVsdEFuZ2xlXG4gICAgICB9O1xuICAgIGNhc2UgQW5ub3RhdGlvbktpbmQuQ0lSQ0xFOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYmFzZSxcbiAgICAgICAga2luZDogQW5ub3RhdGlvbktpbmQuQ0lSQ0xFLFxuICAgICAgICBhcm1MZW5ndGg6IChjb25maWcgYXMgYW55KT8uYXJtTGVuZ3RoID8/IElOSVRJQUxfQU5OT1RBVElPTl9BUk1fTEVOR1RILFxuICAgICAgICBhbmdsZTogcHJvdmlkZWRBbmdsZSA/PyBkZWZhdWx0QW5nbGUsXG4gICAgICAgIHJhZGl1c0luTWV0ZXJzOiAoY29uZmlnIGFzIGFueSk/LnJhZGl1c0luTWV0ZXJzID8/IDEwMDBcbiAgICAgIH07XG4gICAgY2FzZSBBbm5vdGF0aW9uS2luZC5URVhUOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5iYXNlLFxuICAgICAgICBraW5kOiBBbm5vdGF0aW9uS2luZC5URVhUXG4gICAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQWRkIGEgbmV3IGFubm90YXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRBbm5vdGF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRBbm5vdGF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBuZXdBbm5vdGF0aW9uID0gbWFrZU5ld0Fubm90YXRpb24oYWN0aW9uLmNvbmZpZyk7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5ub3RhdGlvbnM6IFtuZXdBbm5vdGF0aW9uLCAuLi5zdGF0ZS5hbm5vdGF0aW9uc10sXG4gICAgc2VsZWN0ZWRBbm5vdGF0aW9uSWQ6IG5ld0Fubm90YXRpb24uaWQsXG4gICAgaXNFZGl0aW5nQW5ub3RhdGlvblRleHQ6IHRydWVcbiAgfTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGFuIGFubm90YXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVBbm5vdGF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlQW5ub3RhdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbm5vdGF0aW9uczogc3RhdGUuYW5ub3RhdGlvbnMuZmlsdGVyKGEgPT4gYS5pZCAhPT0gaWQpLFxuICAgIHNlbGVjdGVkQW5ub3RhdGlvbklkOiBzdGF0ZS5zZWxlY3RlZEFubm90YXRpb25JZCA9PT0gaWQgPyBudWxsIDogc3RhdGUuc2VsZWN0ZWRBbm5vdGF0aW9uSWQsXG4gICAgaXNFZGl0aW5nQW5ub3RhdGlvblRleHQ6XG4gICAgICBzdGF0ZS5zZWxlY3RlZEFubm90YXRpb25JZCA9PT0gaWQgPyBmYWxzZSA6IHN0YXRlLmlzRWRpdGluZ0Fubm90YXRpb25UZXh0XG4gIH07XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBhbiBhbm5vdGF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlQW5ub3RhdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkLCBjb25maWd9OiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlQW5ub3RhdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgaWR4ID0gc3RhdGUuYW5ub3RhdGlvbnMuZmluZEluZGV4KGEgPT4gYS5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCkge1xuICAgIENvbnNvbGUud2FybihgY2FuIG5vdCB1cGRhdGUgYW5ub3RhdGlvbiB3aXRoIGludmFsaWQgaWQgJHtpZH1gKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgcHJldiA9IHN0YXRlLmFubm90YXRpb25zW2lkeF07XG4gIGxldCBuZXh0QW5ub3RhdGlvbjogQW5ub3RhdGlvbjtcblxuICBpZiAoY29uZmlnLmtpbmQgJiYgY29uZmlnLmtpbmQgIT09IHByZXYua2luZCkge1xuICAgIG5leHRBbm5vdGF0aW9uID0gbWFrZU5ld0Fubm90YXRpb24oey4uLnByZXYsIC4uLmNvbmZpZ30gYXMgQW5ub3RhdGlvblByb3BzUGFydGlhbCk7XG4gIH0gZWxzZSB7XG4gICAgbmV4dEFubm90YXRpb24gPSB7Li4ucHJldiwgLi4uY29uZmlnfSBhcyBBbm5vdGF0aW9uO1xuICB9XG5cbiAgY29uc3QgbmV3QW5ub3RhdGlvbnMgPSBbLi4uc3RhdGUuYW5ub3RhdGlvbnNdO1xuICBuZXdBbm5vdGF0aW9uc1tpZHhdID0gbmV4dEFubm90YXRpb247XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5ub3RhdGlvbnM6IG5ld0Fubm90YXRpb25zXG4gIH07XG59O1xuXG4vKipcbiAqIER1cGxpY2F0ZSBhbiBhbm5vdGF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgZHVwbGljYXRlQW5ub3RhdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkfTogVmlzU3RhdGVBY3Rpb25zLkR1cGxpY2F0ZUFubm90YXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IG9yaWdpbmFsID0gc3RhdGUuYW5ub3RhdGlvbnMuZmluZChhID0+IGEuaWQgPT09IGlkKTtcbiAgaWYgKCFvcmlnaW5hbCkge1xuICAgIENvbnNvbGUud2FybihgY2FuIG5vdCBkdXBsaWNhdGUgYW5ub3RhdGlvbiB3aXRoIGludmFsaWQgaWQgJHtpZH1gKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgbmV3QW5ub3RhdGlvbiA9IHtcbiAgICAuLi5jbG9uZURlZXAob3JpZ2luYWwpLFxuICAgIGlkOiBnZW5lcmF0ZUhhc2hJZCg2KSxcbiAgICBsYWJlbDogYENvcHkgb2YgJHtvcmlnaW5hbC5sYWJlbH1gXG4gIH07XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5ub3RhdGlvbnM6IFtuZXdBbm5vdGF0aW9uLCAuLi5zdGF0ZS5hbm5vdGF0aW9uc10sXG4gICAgc2VsZWN0ZWRBbm5vdGF0aW9uSWQ6IG5ld0Fubm90YXRpb24uaWQsXG4gICAgaXNFZGl0aW5nQW5ub3RhdGlvblRleHQ6IGZhbHNlXG4gIH07XG59O1xuXG4vKipcbiAqIFNldCBzZWxlY3RlZCBhbm5vdGF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0U2VsZWN0ZWRBbm5vdGF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWQsIGlzRWRpdGluZ1RleHR9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0U2VsZWN0ZWRBbm5vdGF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoXG4gICAgaWQgPT09IHN0YXRlLnNlbGVjdGVkQW5ub3RhdGlvbklkICYmXG4gICAgKGlzRWRpdGluZ1RleHQgPz8gZmFsc2UpID09PSBzdGF0ZS5pc0VkaXRpbmdBbm5vdGF0aW9uVGV4dFxuICApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBzZWxlY3RlZEFubm90YXRpb25JZDogaWQsXG4gICAgaXNFZGl0aW5nQW5ub3RhdGlvblRleHQ6IGlzRWRpdGluZ1RleHQgPz8gZmFsc2VcbiAgfTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgZGF0YXNldCBhbmQgYWxsIGxheWVycywgZmlsdGVycywgdG9vbHRpcCBjb25maWdzIHRoYXQgYmFzZWQgb24gaXRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVEYXRhc2V0VXBkYXRlcjxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlRGF0YXNldFVwZGF0ZXJBY3Rpb25cbik6IFQge1xuICAvLyBleHRyYWN0IGRhdGFzZXQga2V5XG4gIGNvbnN0IHtkYXRhSWQ6IGRhdGFzZXRLZXl9ID0gYWN0aW9uO1xuICBjb25zdCB7ZGF0YXNldHN9ID0gc3RhdGU7XG5cbiAgLy8gY2hlY2sgaWYgZGF0YXNldCBpcyBwcmVzZW50XG4gIGlmICghZGF0YXNldHNbZGF0YXNldEtleV0pIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7XG4gICAgbGF5ZXJzLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBkYXRhc2V0czoge1tkYXRhc2V0S2V5XTogZGF0YXNldCwgLi4ubmV3RGF0YXNldHN9XG4gIH0gPSBzdGF0ZTtcblxuICBjb25zdCBsYXllcnNUb1JlbW92ZSA9IGxheWVycy5maWx0ZXIobCA9PiBsLmNvbmZpZy5kYXRhSWQgPT09IGRhdGFzZXRLZXkpLm1hcChsID0+IGwuaWQpO1xuXG4gIC8vIHJlbW92ZSBsYXllcnMgYW5kIGRhdGFzZXRzXG4gIGxldCBuZXdTdGF0ZSA9IGxheWVyc1RvUmVtb3ZlLnJlZHVjZSgoYWNjdSwgaWQpID0+IHJlbW92ZUxheWVyVXBkYXRlcihhY2N1LCB7aWR9KSwge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiBuZXdEYXRhc2V0c1xuICB9KTtcblxuICAvLyB1cGRhdGUgZmlsdGVyc1xuICBjb25zdCBmaWx0ZXJzOiBGaWx0ZXJbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGZpbHRlciBvZiBuZXdTdGF0ZS5maWx0ZXJzKSB7XG4gICAgY29uc3QgdmFsdWVJbmRleCA9IGZpbHRlci5kYXRhSWQuaW5kZXhPZihkYXRhc2V0S2V5KTtcbiAgICBpZiAodmFsdWVJbmRleCA+PSAwICYmIGZpbHRlci5kYXRhSWQubGVuZ3RoID4gMSkge1xuICAgICAgLy8gb25seSByZW1vdmUgb25lIHN5bmNlZCBkYXRhc2V0IGZyb20gdGhlIGZpbHRlclxuICAgICAgZmlsdGVycy5wdXNoKF9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCBkYXRhc2V0cykpO1xuICAgIH0gZWxzZSBpZiAodmFsdWVJbmRleCA8IDApIHtcbiAgICAgIC8vIGxlYXZlIHRoZSBmaWx0ZXIgYXMgaXNcbiAgICAgIGZpbHRlcnMucHVzaChmaWx0ZXIpO1xuICAgIH1cbiAgfVxuXG4gIG5ld1N0YXRlID0gey4uLm5ld1N0YXRlLCBmaWx0ZXJzfTtcblxuICByZXR1cm4gcmVtb3ZlRGF0YXNldEZyb21JbnRlcmFjdGlvbkNvbmZpZyhuZXdTdGF0ZSwge2RhdGFJZDogZGF0YXNldEtleX0pO1xufVxuXG5mdW5jdGlvbiByZW1vdmVEYXRhc2V0RnJvbUludGVyYWN0aW9uQ29uZmlnKHN0YXRlLCB7ZGF0YUlkfSkge1xuICBsZXQge2ludGVyYWN0aW9uQ29uZmlnfSA9IHN0YXRlO1xuICBjb25zdCB7dG9vbHRpcH0gPSBpbnRlcmFjdGlvbkNvbmZpZztcbiAgaWYgKHRvb2x0aXApIHtcbiAgICBjb25zdCB7Y29uZmlnfSA9IHRvb2x0aXA7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIGNvbnN0IHtbZGF0YUlkXTogZmllbGRzLCAuLi5maWVsZHNUb1Nob3d9ID0gY29uZmlnLmZpZWxkc1RvU2hvdztcbiAgICBpbnRlcmFjdGlvbkNvbmZpZyA9IHtcbiAgICAgIC4uLmludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgdG9vbHRpcDogey4uLnRvb2x0aXAsIGNvbmZpZzogey4uLmNvbmZpZywgZmllbGRzVG9TaG93fX1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHsuLi5zdGF0ZSwgaW50ZXJhY3Rpb25Db25maWd9O1xufVxuLyoqXG4gKiB1cGRhdGUgbGF5ZXIgYmxlbmRpbmcgbW9kZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUxheWVyQmxlbmRpbmdVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUxheWVyQmxlbmRpbmdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbGF5ZXJCbGVuZGluZzogYWN0aW9uLm1vZGVcbn0pO1xuXG4vKipcbiAqIHVwZGF0ZSBvdmVybGF5IGJsZW5kaW5nIG1vZGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVPdmVybGF5QmxlbmRpbmdVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZU92ZXJsYXlCbGVuZGluZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBvdmVybGF5QmxlbmRpbmc6IGFjdGlvbi5tb2RlXG59KTtcblxuLyoqXG4gKiBEaXNwbGF5IGRhdGFzZXQgdGFibGUgaW4gYSBtb2RhbFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNob3dEYXRhc2V0VGFibGVVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNob3dEYXRhc2V0VGFibGVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdGluZ0RhdGFzZXQ6IGFjdGlvbi5kYXRhSWRcbiAgfTtcbn07XG5cbi8qKlxuICogQWRkIGN1c3RvbSBjb2xvciBmb3IgZGF0YXNldHMgYW5kIGxheWVyc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZVRhYmxlQ29sb3JVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZURhdGFzZXRDb2xvclVwZGF0ZXJcbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHVwZGF0ZURhdGFzZXRQcm9wc1VwZGF0ZXIoc3RhdGUsIHtkYXRhSWQ6IGFjdGlvbi5kYXRhSWQsIHByb3BzOiB7Y29sb3I6IGFjdGlvbi5uZXdDb2xvcn19KTtcbn07XG5cbi8qKlxuICogcmVzZXQgdmlzU3RhdGUgdG8gaW5pdGlhbCBTdGF0ZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlc2V0TWFwQ29uZmlnVXBkYXRlciA9IChzdGF0ZTogVmlzU3RhdGUpOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5JTklUSUFMX1ZJU19TVEFURSxcbiAgLi4uc3RhdGUuaW5pdGlhbFN0YXRlLFxuICBpbml0aWFsU3RhdGU6IHN0YXRlLmluaXRpYWxTdGF0ZVxufSk7XG5cbi8qKlxuICogUHJvcGFnYXRlIGB2aXNTdGF0ZWAgcmVkdWNlciB3aXRoIGEgbmV3IGNvbmZpZ3VyYXRpb24uIEN1cnJlbnQgY29uZmlnIHdpbGwgYmUgb3ZlcnJpZGUuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge1xuICAgIHBheWxvYWQ6IHtjb25maWcgPSB7fSwgb3B0aW9ucyA9IHt9fVxuICB9OiB7XG4gICAgdHlwZT86IHR5cGVvZiBBY3Rpb25UeXBlcy5SRUNFSVZFX01BUF9DT05GSUc7XG4gICAgcGF5bG9hZDogUmVjZWl2ZU1hcENvbmZpZ1BheWxvYWQ7XG4gIH1cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKCFjb25maWcudmlzU3RhdGUpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7a2VlcEV4aXN0aW5nQ29uZmlnfSA9IG9wdGlvbnM7XG5cbiAgLy8gcmVzZXQgY29uZmlnIGlmIGtlZXBFeGlzdGluZ0NvbmZpZyBpcyBmYWxzeVxuICBsZXQgbWVyZ2VkU3RhdGUgPSAha2VlcEV4aXN0aW5nQ29uZmlnID8gcmVzZXRNYXBDb25maWdVcGRhdGVyKHN0YXRlKSA6IHN0YXRlO1xuICBmb3IgKGNvbnN0IG1lcmdlciBvZiBzdGF0ZS5tZXJnZXJzKSB7XG4gICAgaWYgKGlzVmFsaWRNZXJnZXIobWVyZ2VyKSAmJiBoYXNQcm9wc1RvTWVyZ2UoY29uZmlnLnZpc1N0YXRlLCBtZXJnZXIucHJvcCkpIHtcbiAgICAgIG1lcmdlZFN0YXRlID0gbWVyZ2VyLm1lcmdlKFxuICAgICAgICBtZXJnZWRTdGF0ZSxcbiAgICAgICAgZ2V0UHJvcFZhbHVlVG9NZXJnZXIoY29uZmlnLnZpc1N0YXRlLCBtZXJnZXIucHJvcCwgbWVyZ2VyLnRvTWVyZ2VQcm9wKSxcbiAgICAgICAgLy8gZnJvbUNvbmZpZ1xuICAgICAgICB0cnVlXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtZXJnZWRTdGF0ZTtcbn07XG5cbi8qKlxuICogVHJpZ2dlciBsYXllciBob3ZlciBldmVudCB3aXRoIGhvdmVyZWQgb2JqZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbGF5ZXJIb3ZlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuT25MYXllckhvdmVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGhvdmVySW5mbzoge1xuICAgIC8vIGRlY2suZ2wgaW5mbyBpcyBtdXRhYmxlXG4gICAgLi4uYWN0aW9uLmluZm8sXG4gICAgLi4uKE51bWJlci5pc0Zpbml0ZShhY3Rpb24ubWFwSW5kZXgpID8ge21hcEluZGV4OiBhY3Rpb24ubWFwSW5kZXh9IDoge30pXG4gIH1cbn0pO1xuXG4vKiBlc2xpbnQtZW5hYmxlIG1heC1zdGF0ZW1lbnRzICovXG5cbi8qKlxuICogVXBkYXRlIGBpbnRlcmFjdGlvbkNvbmZpZ2BcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnRlcmFjdGlvbkNvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuSW50ZXJhY3Rpb25Db25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtjb25maWd9ID0gYWN0aW9uO1xuXG4gIGNvbnN0IGludGVyYWN0aW9uQ29uZmlnID0ge1xuICAgIC4uLnN0YXRlLmludGVyYWN0aW9uQ29uZmlnLFxuICAgIC4uLntbY29uZmlnLmlkXTogY29uZmlnfVxuICB9O1xuXG4gIC8vIERvbid0IGVuYWJsZSB0b29sdGlwIGFuZCBicnVzaCBhdCB0aGUgc2FtZSB0aW1lXG4gIC8vIGJ1dCBjb29yZGluYXRlcyBjYW4gYmUgc2hvd24gYXQgYWxsIHRpbWVcbiAgY29uc3QgY29udHJhZGljdCA9IFsnYnJ1c2gnLCAndG9vbHRpcCddO1xuXG4gIGlmIChcbiAgICBjb250cmFkaWN0LmluY2x1ZGVzKGNvbmZpZy5pZCkgJiZcbiAgICBjb25maWcuZW5hYmxlZCAmJlxuICAgICFzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZ1tjb25maWcuaWRdLmVuYWJsZWRcbiAgKSB7XG4gICAgLy8gb25seSBlbmFibGUgb25lIGludGVyYWN0aW9uIGF0IGEgdGltZVxuICAgIGNvbnRyYWRpY3QuZm9yRWFjaChrID0+IHtcbiAgICAgIGlmIChrICE9PSBjb25maWcuaWQpIHtcbiAgICAgICAgaW50ZXJhY3Rpb25Db25maWdba10gPSB7Li4uaW50ZXJhY3Rpb25Db25maWdba10sIGVuYWJsZWQ6IGZhbHNlfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGludGVyYWN0aW9uQ29uZmlnXG4gIH07XG5cbiAgaWYgKGNvbmZpZy5pZCA9PT0gJ2dlb2NvZGVyJyAmJiAhY29uZmlnLmVuYWJsZWQpIHtcbiAgICByZXR1cm4gcmVtb3ZlRGF0YXNldFVwZGF0ZXIobmV3U3RhdGUsIHtkYXRhSWQ6ICdnZW9jb2Rlcl9kYXRhc2V0J30pO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG4vKipcbiAqIFRyaWdnZXIgbGF5ZXIgY2xpY2sgZXZlbnQgd2l0aCBjbGlja2VkIG9iamVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGxheWVyQ2xpY2tVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLk9uTGF5ZXJDbGlja1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBtb3VzZVBvczogc3RhdGUuaW50ZXJhY3Rpb25Db25maWcuY29vcmRpbmF0ZS5lbmFibGVkXG4gICAgPyB7XG4gICAgICAgIC4uLnN0YXRlLm1vdXNlUG9zLFxuICAgICAgICBwaW5uZWQ6IHN0YXRlLm1vdXNlUG9zLnBpbm5lZCA/IG51bGwgOiBjbG9uZURlZXAoc3RhdGUubW91c2VQb3MpXG4gICAgICB9XG4gICAgOiBzdGF0ZS5tb3VzZVBvcyxcbiAgY2xpY2tlZDogYWN0aW9uLmluZm8gJiYgYWN0aW9uLmluZm8ucGlja2VkID8gYWN0aW9uLmluZm8gOiBudWxsXG59KTtcblxuLyoqXG4gKiBUcmlnZ2VyIG1hcCBjbGljayBldmVudCwgdW5zZWxlY3QgY2xpY2tlZCBvYmplY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBtYXBDbGlja1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Pbk1hcENsaWNrVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGNsaWNrZWQ6IG51bGxcbiAgfTtcbn07XG5cbi8qKlxuICogVHJpZ2dlciBtYXAgbW92ZSBldmVudFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IG1vdXNlTW92ZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2V2dH06IFZpc1N0YXRlQWN0aW9ucy5Pbk1vdXNlTW92ZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKE9iamVjdC52YWx1ZXMoc3RhdGUuaW50ZXJhY3Rpb25Db25maWcpLnNvbWUoY29uZmlnID0+IGNvbmZpZy5lbmFibGVkKSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIG1vdXNlUG9zOiB7XG4gICAgICAgIC4uLnN0YXRlLm1vdXNlUG9zLFxuICAgICAgICAuLi4oQXJyYXkuaXNBcnJheShldnQucG9pbnQpID8ge21vdXNlUG9zaXRpb246IFsuLi5ldnQucG9pbnRdfSA6IHt9KSxcbiAgICAgICAgLi4uKEFycmF5LmlzQXJyYXkoZXZ0LmxuZ0xhdCkgPyB7Y29vcmRpbmF0ZTogWy4uLmV2dC5sbmdMYXRdfSA6IHt9KVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59O1xuLyoqXG4gKiBUb2dnbGUgdmlzaWJpbGl0eSBvZiBhIGxheWVyIGZvciBhIHNwbGl0IG1hcFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZVNwbGl0TWFwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IE1hcFN0YXRlQWN0aW9ucy5Ub2dnbGVTcGxpdE1hcFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+XG4gIHN0YXRlLnNwbGl0TWFwcyAmJiBzdGF0ZS5zcGxpdE1hcHMubGVuZ3RoID09PSAwXG4gICAgPyB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAvLyBtYXliZSB3ZSBzaG91bGQgdXNlIGFuIGFycmF5IHRvIHN0b3JlIHN0YXRlIGZvciBhIHNpbmdsZSBtYXAgYXMgd2VsbFxuICAgICAgICAvLyBpZiBjdXJyZW50IG1hcHMgbGVuZ3RoIGlzIGVxdWFsIHRvIDAgaXQgbWVhbnMgdGhhdCB3ZSBhcmUgYWJvdXQgdG8gc3BsaXQgdGhlIHZpZXdcbiAgICAgICAgc3BsaXRNYXBzOiBjb21wdXRlU3BsaXRNYXBMYXllcnMoc3RhdGUubGF5ZXJzLCB7ZHVwbGljYXRlOiBmYWxzZX0pXG4gICAgICB9XG4gICAgOiBjbG9zZVNwZWNpZmljTWFwQXRJbmRleChzdGF0ZSwgYWN0aW9uKTtcblxuLyoqXG4gKiBUb2dnbGUgdmlzaWJpbGl0eSBvZiBhIGxheWVyIGluIGEgc3BsaXQgbWFwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHttYXBJbmRleCwgbGF5ZXJJZH06IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVMYXllckZvck1hcFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge3NwbGl0TWFwc30gPSBzdGF0ZTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHNwbGl0TWFwczogc3BsaXRNYXBzLm1hcCgoc20sIGkpID0+XG4gICAgICBpID09PSBtYXBJbmRleFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLnNwbGl0TWFwc1tpXSxcbiAgICAgICAgICAgIGxheWVyczoge1xuICAgICAgICAgICAgICAuLi5zcGxpdE1hcHNbaV0ubGF5ZXJzLFxuICAgICAgICAgICAgICAvLyBpZiBsYXllcklkIG5vdCBpbiBsYXllcnMsIHNldCBpdCB0byB2aXNpYmxlXG4gICAgICAgICAgICAgIFtsYXllcklkXTogIXNwbGl0TWFwc1tpXS5sYXllcnNbbGF5ZXJJZF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDogc21cbiAgICApXG4gIH07XG59O1xuXG5mdW5jdGlvbiBoYXNUYWJ1bGFyRGF0YXNldERhdGEoZGF0YT86IFByb3RvRGF0YXNldFsnZGF0YSddIHwgbnVsbCk6IGJvb2xlYW4ge1xuICByZXR1cm4gQm9vbGVhbihcbiAgICBkYXRhPy5yb3dzPy5sZW5ndGggfHwgZGF0YT8uY29scz8ubGVuZ3RoIHx8IChkYXRhIGFzIHthcnJvd1RhYmxlPzogdW5rbm93bn0pPy5hcnJvd1RhYmxlXG4gICk7XG59XG5cbmZ1bmN0aW9uIG5lZWRzRXh0ZXJuYWxseUhvc3RlZEh5ZHJhdGUoZGF0YXNldDogUHJvdG9EYXRhc2V0KTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgZGF0YXNldC5pbmZvPy50eXBlID09PSBEYXRhc2V0VHlwZS5FWFRFUk5BTExZX0hPU1RFRCAmJlxuICAgIHR5cGVvZiBkYXRhc2V0Lm1ldGFkYXRhPy5zb3VyY2UgPT09ICdzdHJpbmcnICYmXG4gICAgIWhhc1RhYnVsYXJEYXRhc2V0RGF0YShkYXRhc2V0LmRhdGEpXG4gICk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGh5ZHJhdGVFeHRlcm5hbGx5SG9zdGVkUHJvdG9EYXRhc2V0KGRhdGFzZXQ6IFByb3RvRGF0YXNldCk6IFByb21pc2U8UHJvdG9EYXRhc2V0PiB7XG4gIGlmICghbmVlZHNFeHRlcm5hbGx5SG9zdGVkSHlkcmF0ZShkYXRhc2V0KSkge1xuICAgIHJldHVybiBkYXRhc2V0O1xuICB9XG4gIGNvbnN0IGxvYWRlZCA9IGF3YWl0IGxvYWRFeHRlcm5hbGx5SG9zdGVkRGF0YXNldCh7XG4gICAgc291cmNlOiBkYXRhc2V0Lm1ldGFkYXRhPy5zb3VyY2UgYXMgc3RyaW5nLFxuICAgIGZvcm1hdDogZ2V0UmVtb3RlU291cmNlRm9ybWF0KGRhdGFzZXQubWV0YWRhdGEpLFxuICAgIHNpemU6IHR5cGVvZiBkYXRhc2V0Lm1ldGFkYXRhPy5zaXplID09PSAnbnVtYmVyJyA/IGRhdGFzZXQubWV0YWRhdGEuc2l6ZSA6IHVuZGVmaW5lZCxcbiAgICBieXBhc3NDYWNoZTogZ2V0RGF0YXNldFJlZnJlc2hJbnRlcnZhbE1zKGRhdGFzZXQubWV0YWRhdGEpID4gMFxuICB9KTtcbiAgaWYgKCFsb2FkZWQuZGF0YSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gZGF0YSBsb2FkZWQgZnJvbSAke2RhdGFzZXQubWV0YWRhdGE/LnNvdXJjZX1gKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLmRhdGFzZXQsXG4gICAgZGF0YTogbG9hZGVkLmRhdGEsXG4gICAgbWV0YWRhdGE6IHtcbiAgICAgIC4uLmRhdGFzZXQubWV0YWRhdGEsXG4gICAgICBldGFnOiBsb2FkZWQuZXRhZyxcbiAgICAgIGxhc3RNb2RpZmllZDogbG9hZGVkLmxhc3RNb2RpZmllZCxcbiAgICAgIC4uLih0eXBlb2YgbG9hZGVkLnNpemUgPT09ICdudW1iZXInID8ge3NpemU6IGxvYWRlZC5zaXplfSA6IHt9KSxcbiAgICAgIGxhc3RGZXRjaGVkQXQ6IERhdGUubm93KCksXG4gICAgICByZWZyZXNoU3RhdHVzOiAnaWRsZSdcbiAgICB9XG4gIH07XG59XG5cbmNvbnN0IEhZRFJBVEVfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLID0gVGFzay5mcm9tUHJvbWlzZShcbiAgaHlkcmF0ZUV4dGVybmFsbHlIb3N0ZWRQcm90b0RhdGFzZXQsXG4gICdIWURSQVRFX0VYVEVSTkFMTFlfSE9TVEVEX0RBVEFTRVRfVEFTSydcbik7XG5cbmNvbnN0IEZBSUxfQ1JFQVRFX0RBVEFTRVRfVEFTSyA9IFRhc2suZnJvbVByb21pc2UoYXN5bmMgKG1lc3NhZ2U6IHN0cmluZykgPT4ge1xuICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG59LCAnRkFJTF9DUkVBVEVfREFUQVNFVF9UQVNLJyk7XG5cbmZ1bmN0aW9uIGNyZWF0ZU5ld0RhdGFFbnRyeVRhc2soZGF0YXNldDogUHJvdG9EYXRhc2V0LCBkYXRhc2V0czogRGF0YXNldHMpIHtcbiAgaWYgKCFuZWVkc0V4dGVybmFsbHlIb3N0ZWRIeWRyYXRlKGRhdGFzZXQpKSB7XG4gICAgcmV0dXJuIGNyZWF0ZU5ld0RhdGFFbnRyeShkYXRhc2V0LCBkYXRhc2V0cyk7XG4gIH1cbiAgcmV0dXJuIEhZRFJBVEVfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLKGRhdGFzZXQpLmNoYWluKGh5ZHJhdGVkID0+IHtcbiAgICBjb25zdCB0YXNrID0gY3JlYXRlTmV3RGF0YUVudHJ5KGh5ZHJhdGVkLCBkYXRhc2V0cyk7XG4gICAgcmV0dXJuIChcbiAgICAgIHRhc2sgfHxcbiAgICAgIEZBSUxfQ1JFQVRFX0RBVEFTRVRfVEFTSygnRmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBkYXRhc2V0IGR1ZSB0byBkYXRhIHZlcmlmaWNhdGlvbiBlcnJvcnMnKVxuICAgICk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBwYXRjaERhdGFzZXRNZXRhZGF0YShkYXRhc2V0OiBEYXRhc2V0c1tzdHJpbmddLCBwYXRjaDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIHtcbiAgcmV0dXJuIGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7XG4gICAgbWV0YWRhdGE6IHtcbiAgICAgIC4uLmRhdGFzZXQubWV0YWRhdGEsXG4gICAgICAuLi5wYXRjaFxuICAgIH1cbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlZnJlc2hFeHRlcm5hbGx5SG9zdGVkVGFibGUoe1xuICBhcmc6IG1ldGFkYXRhLFxuICBvblByb2dyZXNzXG59OiB7XG4gIGFyZzoge1xuICAgIHNvdXJjZTogc3RyaW5nO1xuICAgIGZvcm1hdD86IHN0cmluZztcbiAgICBzaXplPzogbnVtYmVyO1xuICAgIGV0YWc/OiBzdHJpbmc7XG4gICAgbGFzdE1vZGlmaWVkPzogc3RyaW5nO1xuICB9O1xuICBvblByb2dyZXNzOiAocHJvZ3Jlc3M6IHtsb2FkZWQ6IG51bWJlcjsgdG90YWw/OiBudW1iZXI7IHBlcmNlbnQ6IG51bWJlcn0pID0+IHZvaWQ7XG59KSB7XG4gIC8vIEZldGNoIG9ubHkuIERvIG5vdCBtdXRhdGUgdGhlIFJlZHV4IHRhYmxlIGhlcmU6IHByb2dyZXNzIGV2ZW50cyBjb3B5IGl0LCBhbmRcbiAgLy8gdGhlIHN1Y2Nlc3MgdXBkYXRlciBhcHBsaWVzIHRoZSBzbmFwc2hvdCB0byB3aGF0ZXZlciBpbnN0YW5jZSBpcyBpbiB0aGUgc3RvcmUuXG4gIHJldHVybiBsb2FkRXh0ZXJuYWxseUhvc3RlZERhdGFzZXQoey4uLm1ldGFkYXRhLCBvblByb2dyZXNzLCBieXBhc3NDYWNoZTogdHJ1ZX0pO1xufVxuXG5jb25zdCBSRUZSRVNIX0VYVEVSTkFMTFlfSE9TVEVEX0RBVEFTRVRfVEFTSyA9IFRhc2suZnJvbVByb21pc2VXaXRoUHJvZ3Jlc3MoXG4gIHJlZnJlc2hFeHRlcm5hbGx5SG9zdGVkVGFibGUsXG4gICdSRUZSRVNIX0VYVEVSTkFMTFlfSE9TVEVEX0RBVEFTRVRfVEFTSydcbik7XG5cbi8qKlxuICogUmUtZmV0Y2ggYW4gZXh0ZXJuYWxseSBob3N0ZWQgZGF0YXNldCBhbmQgcmVwbGFjZSBpdHMgdGFibGUgY29udGVudHMgaW4gcGxhY2UuXG4gKiBMYXllcnMgYW5kIGZpbHRlcnMgYXJlIGtlcHQgd2hlbiBmaWVsZCBuYW1lcyBtYXRjaC5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWZyZXNoRGF0YXNldFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZH06IFZpc1N0YXRlQWN0aW9ucy5SZWZyZXNoRGF0YXNldFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmIChcbiAgICAhZGF0YXNldCB8fFxuICAgIGRhdGFzZXQudHlwZSAhPT0gRGF0YXNldFR5cGUuRVhURVJOQUxMWV9IT1NURUQgfHxcbiAgICB0eXBlb2YgZGF0YXNldC5tZXRhZGF0YT8uc291cmNlICE9PSAnc3RyaW5nJ1xuICApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKGRhdGFzZXQubWV0YWRhdGE/LnJlZnJlc2hTdGF0dXMgPT09ICdsb2FkaW5nJykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5leHREYXRhc2V0ID0gcGF0Y2hEYXRhc2V0TWV0YWRhdGEoZGF0YXNldCwge1xuICAgIHJlZnJlc2hTdGF0dXM6ICdsb2FkaW5nJyxcbiAgICByZWZyZXNoRXJyb3I6IHVuZGVmaW5lZCxcbiAgICByZWZyZXNoUHJvZ3Jlc3M6IHVuZGVmaW5lZFxuICB9KTtcblxuICByZXR1cm4gd2l0aFRhc2soXG4gICAge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBkYXRhc2V0czoge1xuICAgICAgICAuLi5zdGF0ZS5kYXRhc2V0cyxcbiAgICAgICAgW2RhdGFJZF06IG5leHREYXRhc2V0XG4gICAgICB9XG4gICAgfSxcbiAgICBSRUZSRVNIX0VYVEVSTkFMTFlfSE9TVEVEX0RBVEFTRVRfVEFTSyh7XG4gICAgICBhcmc6IHtcbiAgICAgICAgc291cmNlOiBuZXh0RGF0YXNldC5tZXRhZGF0YS5zb3VyY2UgYXMgc3RyaW5nLFxuICAgICAgICBmb3JtYXQ6IGdldFJlbW90ZVNvdXJjZUZvcm1hdChuZXh0RGF0YXNldC5tZXRhZGF0YSksXG4gICAgICAgIHNpemU6IHR5cGVvZiBuZXh0RGF0YXNldC5tZXRhZGF0YS5zaXplID09PSAnbnVtYmVyJyA/IG5leHREYXRhc2V0Lm1ldGFkYXRhLnNpemUgOiB1bmRlZmluZWQsXG4gICAgICAgIGV0YWc6IHR5cGVvZiBuZXh0RGF0YXNldC5tZXRhZGF0YS5ldGFnID09PSAnc3RyaW5nJyA/IG5leHREYXRhc2V0Lm1ldGFkYXRhLmV0YWcgOiB1bmRlZmluZWQsXG4gICAgICAgIGxhc3RNb2RpZmllZDpcbiAgICAgICAgICB0eXBlb2YgbmV4dERhdGFzZXQubWV0YWRhdGEubGFzdE1vZGlmaWVkID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgPyBuZXh0RGF0YXNldC5tZXRhZGF0YS5sYXN0TW9kaWZpZWRcbiAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICB9LFxuICAgICAgb25Qcm9ncmVzczogcHJvZ3Jlc3MgPT5cbiAgICAgICAgcmVmcmVzaERhdGFzZXRQcm9ncmVzcyhkYXRhSWQsIE1hdGgucm91bmQoKHByb2dyZXNzPy5wZXJjZW50ID8/IDApICogMTAwKSlcbiAgICB9KS5iaW1hcChcbiAgICAgIHJlc3VsdCA9PiByZWZyZXNoRGF0YXNldFN1Y2Nlc3MoZGF0YUlkLCByZXN1bHQpLFxuICAgICAgKGVycm9yOiBFcnJvcikgPT4gcmVmcmVzaERhdGFzZXRFcnJvcihkYXRhSWQsIGVycm9yKVxuICAgIClcbiAgKTtcbn1cblxuLyoqXG4gKiBSZWNvcmQgZG93bmxvYWQgcHJvZ3Jlc3MgZm9yIGFuIGluLWZsaWdodCByZW1vdGUgZGF0YXNldCByZWZyZXNoLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZnJlc2hEYXRhc2V0UHJvZ3Jlc3NVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIHBlcmNlbnR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVmcmVzaERhdGFzZXRQcm9ncmVzc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCB8fCBkYXRhc2V0Lm1ldGFkYXRhPy5yZWZyZXNoU3RhdHVzICE9PSAnbG9hZGluZycpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgbmV4dFBlcmNlbnQgPSBOdW1iZXIuaXNGaW5pdGUocGVyY2VudClcbiAgICA/IE1hdGgubWF4KDAsIE1hdGgubWluKDEwMCwgTWF0aC5yb3VuZChwZXJjZW50KSkpXG4gICAgOiAwO1xuICBpZiAoZGF0YXNldC5tZXRhZGF0YT8ucmVmcmVzaFByb2dyZXNzID09PSBuZXh0UGVyY2VudCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiB7XG4gICAgICAuLi5zdGF0ZS5kYXRhc2V0cyxcbiAgICAgIFtkYXRhSWRdOiBwYXRjaERhdGFzZXRNZXRhZGF0YShkYXRhc2V0LCB7cmVmcmVzaFByb2dyZXNzOiBuZXh0UGVyY2VudH0pXG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBmaWVsZE5hbWVzRXF1YWwoY3VycmVudDoge25hbWU6IHN0cmluZ31bXSwgaW5jb21pbmc/OiB7bmFtZTogc3RyaW5nfVtdIHwgbnVsbCk6IGJvb2xlYW4ge1xuICBpZiAoIWluY29taW5nPy5sZW5ndGgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoY3VycmVudC5sZW5ndGggIT09IGluY29taW5nLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gY3VycmVudC5ldmVyeSgoZmllbGQsIGkpID0+IGZpZWxkLm5hbWUgPT09IGluY29taW5nW2ldLm5hbWUpO1xufVxuXG4vKipcbiAqIFdoZW4gYSByZW1vdGUgc25hcHNob3QgY2hhbmdlcyBjb2x1bW4gbmFtZXMsIG9sZCBsYXllciBmaWVsZElkeCAvIGZpbHRlciBuYW1lc1xuICogY2FuIHBvaW50IGF0IHRoZSB3cm9uZyBjb2x1bW4uIFJlLWJpbmQgYnkgbmFtZSBhbmQgZHJvcCBjb25maWdzIHRoYXQgbm8gbG9uZ2VyIGZpdC5cbiAqL1xuZnVuY3Rpb24gcmViaW5kTGF5ZXJzQW5kRmlsdGVyc0FmdGVyU2NoZW1hQ2hhbmdlKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGRhdGFJZDogc3RyaW5nLFxuICBkYXRhc2V0czogVmlzU3RhdGVbJ2RhdGFzZXRzJ11cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IGRhdGFzZXRzW2RhdGFJZF07XG4gIGNvbnN0IG5leHRMYXllcnM6IExheWVyW10gPSBbXTtcbiAgY29uc3QgZHJvcHBlZExheWVyczogTGF5ZXJbXSA9IFtdO1xuXG4gIHN0YXRlLmxheWVycy5mb3JFYWNoKGxheWVyID0+IHtcbiAgICBpZiAobGF5ZXIuY29uZmlnLmRhdGFJZCAhPT0gZGF0YUlkKSB7XG4gICAgICBuZXh0TGF5ZXJzLnB1c2gobGF5ZXIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByZWJvdW5kID0gdmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEoZGF0YXNldCwgc3RhdGUubGF5ZXJDbGFzc2VzLCBsYXllciwgc3RhdGUuc2NoZW1hKTtcbiAgICBpZiAocmVib3VuZD8uaXNWYWxpZFRvU2F2ZSgpKSB7XG4gICAgICBuZXh0TGF5ZXJzLnB1c2gocmVib3VuZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRyb3BwZWRMYXllcnMucHVzaChsYXllcik7XG4gICAgfVxuICB9KTtcblxuICBsZXQgbmV4dExheWVyT3JkZXIgPSBzdGF0ZS5sYXllck9yZGVyO1xuICBsZXQgbmV4dFNwbGl0TWFwcyA9IHN0YXRlLnNwbGl0TWFwcztcbiAgZHJvcHBlZExheWVycy5mb3JFYWNoKGxheWVyID0+IHtcbiAgICBuZXh0TGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihuZXh0TGF5ZXJPcmRlciwgbGF5ZXIuaWQpO1xuICAgIG5leHRTcGxpdE1hcHMgPSByZW1vdmVMYXllckZyb21TcGxpdE1hcHMobmV4dFNwbGl0TWFwcywgbGF5ZXIpO1xuICB9KTtcblxuICBjb25zdCBuZXh0TGF5ZXJEYXRhID0gbmV4dExheWVycy5tYXAobGF5ZXIgPT4ge1xuICAgIGNvbnN0IG9sZElkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgob2xkTGF5ZXIgPT4gb2xkTGF5ZXIuaWQgPT09IGxheWVyLmlkKTtcbiAgICByZXR1cm4gb2xkSWR4ID49IDAgPyBzdGF0ZS5sYXllckRhdGFbb2xkSWR4XSA6IHt9O1xuICB9KTtcblxuICBjb25zdCBmaWx0ZXJzRm9yRGF0YXNldCA9IHN0YXRlLmZpbHRlcnMuZmlsdGVyKGZpbHRlciA9PiB0b0FycmF5KGZpbHRlci5kYXRhSWQpLmluY2x1ZGVzKGRhdGFJZCkpO1xuICBjb25zdCBvdGhlckZpbHRlcnMgPSBzdGF0ZS5maWx0ZXJzLmZpbHRlcihmaWx0ZXIgPT4gIXRvQXJyYXkoZmlsdGVyLmRhdGFJZCkuaW5jbHVkZXMoZGF0YUlkKSk7XG5cbiAgY29uc3Qge3ZhbGlkYXRlZCwgdXBkYXRlZERhdGFzZXRzfSA9IHZhbGlkYXRlRmlsdGVyc1VwZGF0ZURhdGFzZXRzKFxuICAgIHsuLi5zdGF0ZSwgZGF0YXNldHMsIGxheWVyczogbmV4dExheWVyc30sXG4gICAgZmlsdGVyc0ZvckRhdGFzZXRcbiAgKTtcblxuICBjb25zdCBuZXh0RmlsdGVycyA9IFsuLi5vdGhlckZpbHRlcnMsIC4uLnZhbGlkYXRlZF07XG4gIGNvbnN0IGZpbHRlcmVkRGF0YXNldHMgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKFxuICAgIFtkYXRhSWRdLFxuICAgIHVwZGF0ZWREYXRhc2V0cyxcbiAgICBuZXh0RmlsdGVycyxcbiAgICBuZXh0TGF5ZXJzXG4gICk7XG5cbiAgbGV0IG5leHRTdGF0ZTogVmlzU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGF0YXNldHM6IGZpbHRlcmVkRGF0YXNldHMsXG4gICAgbGF5ZXJzOiBuZXh0TGF5ZXJzLFxuICAgIGxheWVyRGF0YTogbmV4dExheWVyRGF0YSxcbiAgICBsYXllck9yZGVyOiBuZXh0TGF5ZXJPcmRlcixcbiAgICBzcGxpdE1hcHM6IG5leHRTcGxpdE1hcHMsXG4gICAgZmlsdGVyczogbmV4dEZpbHRlcnNcbiAgfTtcbiAgbmV4dFN0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG5leHRTdGF0ZSwgW2RhdGFJZF0sIHVuZGVmaW5lZCk7XG4gIHJldHVybiB1cGRhdGVBbmltYXRpb25Eb21haW4obmV4dFN0YXRlKTtcbn1cblxuLyoqXG4gKiBBcHBseSBhIGZpbmlzaGVkIHJlbW90ZSByZWZyZXNoOiBrZWVwIGxheWVycywgcmUtcnVuIGZpbHRlcnMgYW5kIGxheWVyIGRhdGEuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVmcmVzaERhdGFzZXRTdWNjZXNzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCByZXN1bHR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVmcmVzaERhdGFzZXRTdWNjZXNzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbWV0YWRhdGFQYXRjaCA9IHtcbiAgICByZWZyZXNoU3RhdHVzOiAnaWRsZScsXG4gICAgcmVmcmVzaEVycm9yOiB1bmRlZmluZWQsXG4gICAgcmVmcmVzaFByb2dyZXNzOiB1bmRlZmluZWQsXG4gICAgbGFzdEZldGNoZWRBdDogRGF0ZS5ub3coKSxcbiAgICAvLyBBbHdheXMgd3JpdGUgdmFsaWRhdG9ycy4gQSAyMDAgdGhhdCBvbWl0cyB0aGVtIG11c3Qgbm90IGtlZXAgdGhlIHByZXZpb3VzXG4gICAgLy8gRVRhZyBvciBhIGxhdGVyIDMwNCBjYW4gc2tpcCBhIGJvZHkgd2Ugbm8gbG9uZ2VyIGhhdmUuXG4gICAgZXRhZzogcmVzdWx0LmV0YWcsXG4gICAgbGFzdE1vZGlmaWVkOiByZXN1bHQubGFzdE1vZGlmaWVkLFxuICAgIC4uLih0eXBlb2YgcmVzdWx0LnNpemUgPT09ICdudW1iZXInID8ge3NpemU6IHJlc3VsdC5zaXplfSA6IHt9KVxuICB9O1xuXG4gIGNvbnN0IHNjaGVtYVVuY2hhbmdlZCA9IGZpZWxkTmFtZXNFcXVhbChkYXRhc2V0LmZpZWxkcywgcmVzdWx0LmRhdGE/LmZpZWxkcyk7XG5cbiAgLy8gQXBwbHkgdGhlIHNuYXBzaG90IHRvIHRoZSB0YWJsZSBjdXJyZW50bHkgaW4gdGhlIHN0b3JlLiBQcm9ncmVzcyBtYXkgaGF2ZVxuICAvLyBjb3BpZWQgaXQgb2ZmIHRoZSBvYmplY3QgdGhhdCBzdGFydGVkIHRoZSBmZXRjaDsgdGhlIHRhc2sgbmV2ZXIgbXV0YXRlcyBpdC5cbiAgaWYgKCFyZXN1bHQubm90TW9kaWZpZWQgJiYgcmVzdWx0LmRhdGEpIHtcbiAgICAvLyBLZXBsZXJUYWJsZS51cGRhdGUgaXMgYXN5bmMgc28gRHVja0RCIGNhbiBhd2FpdCBBcnJvdyBjb252ZXJzaW9uLiBUaGVcbiAgICAvLyBDU1YvR2VvSlNPTiBwYXRoIChhbmQgS2VwbGVyVGFibGUuaW1wb3J0RGF0YSkgcnVuIHN5bmNocm9ub3VzbHkgYmVmb3JlXG4gICAgLy8gdGhlIGZpcnN0IGF3YWl0LCBzbyB0aGUgc3RvcmUgdGFibGUgaXMgdXBkYXRlZCBiZWZvcmUgd2UgY29weSBpdCBiZWxvdy5cbiAgICB2b2lkIGRhdGFzZXQudXBkYXRlKHJlc3VsdC5kYXRhKTtcbiAgfVxuXG4gIGNvbnN0IHJlZnJlc2hlZCA9IHBhdGNoRGF0YXNldE1ldGFkYXRhKGRhdGFzZXQsIG1ldGFkYXRhUGF0Y2gpO1xuICBjb25zdCBkYXRhc2V0cyA9IHtcbiAgICAuLi5zdGF0ZS5kYXRhc2V0cyxcbiAgICBbZGF0YUlkXTogcmVmcmVzaGVkXG4gIH07XG5cbiAgaWYgKHJlc3VsdC5ub3RNb2RpZmllZCB8fCAhcmVzdWx0LmRhdGEpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBkYXRhc2V0c1xuICAgIH07XG4gIH1cblxuICBpZiAoIXNjaGVtYVVuY2hhbmdlZCkge1xuICAgIHJldHVybiByZWJpbmRMYXllcnNBbmRGaWx0ZXJzQWZ0ZXJTY2hlbWFDaGFuZ2Uoc3RhdGUsIGRhdGFJZCwgZGF0YXNldHMpO1xuICB9XG5cbiAgcmV0dXJuIHJlYXBwbHlGaWx0ZXJzQW5kTGF5ZXJEYXRhKHsuLi5zdGF0ZSwgZGF0YXNldHN9LCBkYXRhSWQpO1xufVxuXG5mdW5jdGlvbiByZWFwcGx5RmlsdGVyc0FuZExheWVyRGF0YShzdGF0ZTogVmlzU3RhdGUsIGRhdGFJZDogc3RyaW5nKTogVmlzU3RhdGUge1xuICBjb25zdCBmaWx0ZXJlZERhdGFzZXRzID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhcbiAgICBbZGF0YUlkXSxcbiAgICBzdGF0ZS5kYXRhc2V0cyxcbiAgICBzdGF0ZS5maWx0ZXJzLFxuICAgIHN0YXRlLmxheWVyc1xuICApO1xuICBsZXQgbmV4dFN0YXRlOiBWaXNTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czogZmlsdGVyZWREYXRhc2V0c1xuICB9O1xuICBuZXh0U3RhdGUgPSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobmV4dFN0YXRlLCBbZGF0YUlkXSwgdW5kZWZpbmVkKTtcbiAgcmV0dXJuIHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXh0U3RhdGUpO1xufVxuXG5mdW5jdGlvbiBpc0RhdGFzZXRSb3dMaXN0KFxuICByb3dzOiBWaXNTdGF0ZUFjdGlvbnMuRGF0YXNldFJvdyB8IFZpc1N0YXRlQWN0aW9ucy5EYXRhc2V0Um93W11cbik6IHJvd3MgaXMgVmlzU3RhdGVBY3Rpb25zLkRhdGFzZXRSb3dbXSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShyb3dzKSB8fCAhcm93cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShyb3dzKTtcbiAgfVxuICAvLyBBIHNpbmdsZSBjb2x1bW4tb3JkZXJlZCByb3cgaXMgYW4gYXJyYXkgb2YgcHJpbWl0aXZlczsgYSBsaXN0IG9mIHJvd3MgaXNcbiAgLy8gYW4gYXJyYXkgb2YgYXJyYXlzIG9yIGFuIGFycmF5IG9mIGZpZWxkLW5hbWUgcmVjb3Jkcy5cbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkocm93c1swXSkgfHwgaXNQbGFpbk9iamVjdChyb3dzWzBdKTtcbn1cblxuZnVuY3Rpb24gdG9BcnJheVJvdyhyb3c6IFZpc1N0YXRlQWN0aW9ucy5EYXRhc2V0Um93LCBmaWVsZHM6IEZpZWxkW10pOiBhbnlbXSB8IG51bGwge1xuICBpZiAoQXJyYXkuaXNBcnJheShyb3cpKSB7XG4gICAgcmV0dXJuIHJvdy5sZW5ndGggPT09IGZpZWxkcy5sZW5ndGggPyByb3cgOiBudWxsO1xuICB9XG4gIGlmIChpc1BsYWluT2JqZWN0KHJvdykpIHtcbiAgICBjb25zdCByZWNvcmQgPSByb3cgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgcmV0dXJuIGZpZWxkcy5tYXAoZmllbGQgPT5cbiAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZWNvcmQsIGZpZWxkLm5hbWUpID8gcmVjb3JkW2ZpZWxkLm5hbWVdIDogbnVsbFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZURhdGFzZXRSb3dzKFxuICByb3dzOiBWaXNTdGF0ZUFjdGlvbnMuRGF0YXNldFJvdyB8IFZpc1N0YXRlQWN0aW9ucy5EYXRhc2V0Um93W10sXG4gIGZpZWxkczogRmllbGRbXVxuKTogYW55W11bXSB8IG51bGwge1xuICBpZiAoIWZpZWxkcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBsaXN0ID0gaXNEYXRhc2V0Um93TGlzdChyb3dzKSA/IHJvd3MgOiBbcm93c107XG4gIGlmICghbGlzdC5sZW5ndGgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBub3JtYWxpemVkOiBhbnlbXVtdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGFycmF5Um93ID0gdG9BcnJheVJvdyhsaXN0W2ldLCBmaWVsZHMpO1xuICAgIGlmICghYXJyYXlSb3cpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBub3JtYWxpemVkLnB1c2goYXJyYXlSb3cpO1xuICB9XG4gIHJldHVybiBub3JtYWxpemVkO1xufVxuXG4vKipcbiAqIEFwcGVuZCBvciB1cHNlcnQgcm93cyBvbiBhbiBleGlzdGluZyBpbi1tZW1vcnkgcm93IGRhdGFzZXQuIEtlZXBzIGxheWVycyBhbmQgcmUtcnVucyBmaWx0ZXJzLlxuICogQXJyb3cvRHVja0RCIHRhYmxlcyB3YXJuIGFuZCBhcmUgbGVmdCB1bmNoYW5nZWQgKElOU0VSVCAvIGNvbmNhdCBub3QgaW1wbGVtZW50ZWQpLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFRvRGF0YXNldFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgcm93cywgb3B0aW9uc306IFZpc1N0YXRlQWN0aW9ucy5BZGRUb0RhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplRGF0YXNldFJvd3Mocm93cywgZGF0YXNldC5maWVsZHMpO1xuICBpZiAoIW5vcm1hbGl6ZWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBhcHBsaWVkID0gb3B0aW9ucz8udXBzZXJ0QnlcbiAgICA/IGRhdGFzZXQudXBzZXJ0Um93cyhub3JtYWxpemVkLCBvcHRpb25zLnVwc2VydEJ5KVxuICAgIDogZGF0YXNldC5hcHBlbmRSb3dzKG5vcm1hbGl6ZWQpO1xuICBpZiAoIWFwcGxpZWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBkYXRhc2V0cyA9IHtcbiAgICAuLi5zdGF0ZS5kYXRhc2V0cyxcbiAgICBbZGF0YUlkXTogY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHt9KVxuICB9O1xuICByZXR1cm4gcmVhcHBseUZpbHRlcnNBbmRMYXllckRhdGEoey4uLnN0YXRlLCBkYXRhc2V0c30sIGRhdGFJZCk7XG59XG5cbi8qKlxuICogRGVsZXRlIHJvd3MgYnkgaW5kZXggb3IgYnkgZmllbGQgdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgaW4tbWVtb3J5IHJvdyBkYXRhc2V0LlxuICogS2VlcHMgbGF5ZXJzLiBBcnJvdy9EdWNrREIgdGFibGVzIHdhcm4gYW5kIGFyZSBsZWZ0IHVuY2hhbmdlZC5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVGcm9tRGF0YXNldFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgcm93SW5kZXhlcywgYnlGaWVsZH06IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVGcm9tRGF0YXNldFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ZXMgPSBieUZpZWxkXG4gICAgPyBkYXRhc2V0LmZpbmRSb3dJbmRleGVzQnlGaWVsZFZhbHVlcyhieUZpZWxkLmZpZWxkLCB0b0FycmF5KGJ5RmllbGQudmFsdWVzKSlcbiAgICA6IHRvQXJyYXkocm93SW5kZXhlcyA/PyBbXSk7XG4gIGlmICghaW5kZXhlcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKCFkYXRhc2V0LnJlbW92ZVJvd3MoaW5kZXhlcykpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBkYXRhc2V0cyA9IHtcbiAgICAuLi5zdGF0ZS5kYXRhc2V0cyxcbiAgICBbZGF0YUlkXTogY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHt9KVxuICB9O1xuICByZXR1cm4gcmVhcHBseUZpbHRlcnNBbmRMYXllckRhdGEoey4uLnN0YXRlLCBkYXRhc2V0c30sIGRhdGFJZCk7XG59XG5cbi8qKlxuICogUmVjb3JkIGEgZmFpbGVkIHJlbW90ZSBkYXRhc2V0IHJlZnJlc2ggd2l0aG91dCBkcm9wcGluZyBleGlzdGluZyByb3dzLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZnJlc2hEYXRhc2V0RXJyb3JVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGVycm9yfTogVmlzU3RhdGVBY3Rpb25zLlJlZnJlc2hEYXRhc2V0RXJyb3JVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXh0U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGF0YXNldHM6IHtcbiAgICAgIC4uLnN0YXRlLmRhdGFzZXRzLFxuICAgICAgW2RhdGFJZF06IHBhdGNoRGF0YXNldE1ldGFkYXRhKGRhdGFzZXQsIHtcbiAgICAgICAgcmVmcmVzaFN0YXR1czogJ2Vycm9yJyxcbiAgICAgICAgcmVmcmVzaEVycm9yOiBlcnJvcj8ubWVzc2FnZSB8fCBTdHJpbmcoZXJyb3IpLFxuICAgICAgICByZWZyZXNoUHJvZ3Jlc3M6IHVuZGVmaW5lZFxuICAgICAgfSlcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuLyoqXG4gKiBBZGQgbmV3IGRhdGFzZXQgdG8gYHZpc1N0YXRlYCwgd2l0aCBvcHRpb24gdG8gbG9hZCBhIG1hcCBjb25maWcgYWxvbmcgd2l0aCB0aGUgZGF0YXNldHNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5leHBvcnQgY29uc3QgdXBkYXRlVmlzRGF0YVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlVmlzRGF0YVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgLy8gZGF0YXNldHMgY2FuIGJlIGEgc2luZ2xlIGRhdGEgZW50cmllcyBvciBhbiBhcnJheSBvZiBtdWx0aXBsZSBkYXRhIGVudHJpZXNcbiAgY29uc3Qge2NvbmZpZywgb3B0aW9uc30gPSBhY3Rpb247XG5cbiAgLy8gYXBwbHkgY29uZmlnIGlmIHBhc3NlZCBmcm9tIGFjdGlvblxuICAvLyBUT0RPOiB3ZSBkb24ndCBoYW5kbGUgYXN5bmMgbWVyZ2VycyBoZXJlIHlldFxuICBsZXQgdXBkYXRlZFN0YXRlID0gY29uZmlnXG4gICAgPyByZWNlaXZlTWFwQ29uZmlnVXBkYXRlcihzdGF0ZSwge1xuICAgICAgICBwYXlsb2FkOiB7Y29uZmlnLCBvcHRpb25zfVxuICAgICAgfSlcbiAgICA6IHN0YXRlO1xuXG4gIGNvbnN0IGRhdGFzZXRzID0gdG9BcnJheShhY3Rpb24uZGF0YXNldHMpO1xuICBpZiAoIWRhdGFzZXRzLmxlbmd0aCkge1xuICAgIHJldHVybiB1cGRhdGVkU3RhdGU7XG4gIH1cblxuICBjb25zdCBjcmVhdGVEYXRhc2V0VGFza3M6IFRhc2tEZXNjcmlwdG9yW10gPSBbXTtcbiAgY29uc3Qgbm90aWZpY2F0aW9uVGFza3M6IFRhc2tEZXNjcmlwdG9yW10gPSBbXTtcblxuICBkYXRhc2V0cy5mb3JFYWNoKCh7aW5mbyA9IHt9LCAuLi5yZXN0fSwgZGF0YXNldEluZGV4KSA9PiB7XG4gICAgY29uc3QgdGFzayA9IGNyZWF0ZU5ld0RhdGFFbnRyeVRhc2soe2luZm8sIC4uLnJlc3R9LCBzdGF0ZS5kYXRhc2V0cyk7XG4gICAgaWYgKHRhc2spIHtcbiAgICAgIGNyZWF0ZURhdGFzZXRUYXNrcy5wdXNoKHRhc2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBub3RpZmljYXRpb25UYXNrcy5wdXNoKFxuICAgICAgICBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OKCkubWFwKCgpID0+XG4gICAgICAgICAgYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBkYXRhc2V0IGR1ZSB0byBkYXRhIHZlcmlmaWNhdGlvbiBlcnJvcnNgLFxuICAgICAgICAgICAgICBpZDogYGRhdGFzZXQtZmFpbGVkLSR7ZGF0YXNldEluZGV4fWBcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgZGF0YXNldHNBbGxTZXR0bGVkVGFzayA9IGNyZWF0ZURhdGFzZXRUYXNrcy5sZW5ndGhcbiAgICA/IFRhc2suYWxsU2V0dGxlZChjcmVhdGVEYXRhc2V0VGFza3MpLm1hcChyZXN1bHRzID0+XG4gICAgICAgIGNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzKHtyZXN1bHRzLCBhZGRUb01hcE9wdGlvbnM6IG9wdGlvbnN9KVxuICAgICAgKVxuICAgIDogbnVsbDtcblxuICBpZiAoZGF0YXNldHNBbGxTZXR0bGVkVGFzaykge1xuICAgIHVwZGF0ZWRTdGF0ZSA9IHNldExvYWRpbmdJbmRpY2F0b3JVcGRhdGVyKHVwZGF0ZWRTdGF0ZSwgcGF5bG9hZF8oe2NoYW5nZTogMSwgdHlwZTogJyd9KSk7XG4gIH1cblxuICByZXR1cm4gd2l0aFRhc2sodXBkYXRlZFN0YXRlLCBbXG4gICAgLi4uKGRhdGFzZXRzQWxsU2V0dGxlZFRhc2sgPyBbZGF0YXNldHNBbGxTZXR0bGVkVGFza10gOiBbXSksXG4gICAgLi4ubm90aWZpY2F0aW9uVGFza3NcbiAgXSk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3NVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogUGF5bG9hZEFjdGlvbjxDcmVhdGVOZXdEYXRhc2V0U3VjY2Vzc1BheWxvYWQ+XG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtyZXN1bHRzLCBhZGRUb01hcE9wdGlvbnN9ID0gYWN0aW9uLnBheWxvYWQ7XG4gIGNvbnN0IG5vdGlmaWNhdGlvblRhc2tzOiBUYXNrRGVzY3JpcHRvcltdID0gW107XG5cbiAgY29uc3QgbmV3RGF0YUVudHJpZXMgPSByZXN1bHRzLnJlZHVjZSgoYWNjdSwgcmVzdWx0LCBpZHgpID0+IHtcbiAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gJ2Z1bGZpbGxlZCcpIHtcbiAgICAgIGNvbnN0IGRhdGFzZXQgPSByZXN1bHQudmFsdWU7XG4gICAgICByZXR1cm4gey4uLmFjY3UsIFtkYXRhc2V0LmlkXTogZGF0YXNldH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHNob3cgZXJyb3Igbm90aWZpY2F0aW9uIG9uIFVJXG4gICAgICBub3RpZmljYXRpb25UYXNrcy5wdXNoKFxuICAgICAgICBBQ1RJT05fVEFTSygpLm1hcCgoKSA9PlxuICAgICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICAgIGVycm9yTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgICAgbWVzc2FnZTogYERhdGFzZXQgZXJyb3I6IEZhaWxlZCB0byBjcmVhdGUgYSBuZXcgZGF0YXNldDpcbiAgICAgICAgICAgICAgJHtyZXN1bHQucmVhc29uIHx8IChyZXN1bHQgYXMgYW55KS52YWx1ZX1gLFxuICAgICAgICAgICAgICBpZDogYGRhdGFzZXQtY3JlYXRlLWZhaWxlZC0ke2lkeH1gXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIHJldHVybiBhY2N1O1xuICAgIH1cbiAgfSwge30gYXMgRGF0YXNldHMpO1xuICAvLyBzYXZlIG5ldyBkYXRhc2V0IGVudHJ5IHRvIHN0YXRlXG4gIGNvbnN0IG1lcmdlZFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiBtZXJnZURhdGFzZXRzQnlPcmRlcihzdGF0ZSwgbmV3RGF0YUVudHJpZXMpXG4gIH07XG5cbiAgLy8gbWVyZ2Ugc3RhdGUgd2l0aCBjb25maWcgdG8gYmUgbWVyZ2VkXG4gIGNvbnN0IGxheWVyTWVyZ2VycyA9IHN0YXRlLm1lcmdlcnMuZmlsdGVyKG0gPT4gbS53YWl0Rm9yTGF5ZXJEYXRhKTtcbiAgY29uc3QgZGF0YXNldE1lcmdlcnMgPSBzdGF0ZS5tZXJnZXJzLmZpbHRlcihtID0+ICFsYXllck1lcmdlcnMuaW5jbHVkZXMobSkpO1xuXG4gIGNvbnN0IG5ld0RhdGFJZHMgPSBPYmplY3Qua2V5cyhuZXdEYXRhRW50cmllcyk7XG4gIGNvbnN0IHBvc3RNZXJnZXJQYXlsb2FkID0ge1xuICAgIG5ld0RhdGFJZHMsXG4gICAgb3B0aW9uczogYWRkVG9NYXBPcHRpb25zLFxuICAgIGxheWVyTWVyZ2Vyc1xuICB9O1xuXG4gIGNvbnN0IHVwZGF0ZWRTdGF0ZSA9IGFwcGx5TWVyZ2Vyc1VwZGF0ZXIobWVyZ2VkU3RhdGUsIHtcbiAgICBtZXJnZXJzOiBkYXRhc2V0TWVyZ2VycyxcbiAgICBwb3N0TWVyZ2VyUGF5bG9hZFxuICB9KTtcblxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgc2V0TG9hZGluZ0luZGljYXRvclVwZGF0ZXIodXBkYXRlZFN0YXRlLCBwYXlsb2FkXyh7Y2hhbmdlOiAtMX0pKSxcbiAgICBub3RpZmljYXRpb25UYXNrc1xuICApO1xufTtcblxuLyoqXG4gKiBBZGQgbmV3IGRhdGFzZXQgdG8gYHZpc1N0YXRlYCwgd2l0aCBvcHRpb24gdG8gbG9hZCBhIG1hcCBjb25maWcgYWxvbmcgd2l0aCB0aGUgZGF0YXNldHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5TWVyZ2Vyc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiB7XG4gICAgbWVyZ2VyczogTWVyZ2VyPGFueT5bXTtcbiAgICBwb3N0TWVyZ2VyUGF5bG9hZDogUG9zdE1lcmdlclBheWxvYWQ7XG4gIH1cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge21lcmdlcnMsIHBvc3RNZXJnZXJQYXlsb2FkfSA9IGFjdGlvbjtcblxuICAvLyBtZXJnZSBzdGF0ZSB3aXRoIGNvbmZpZyB0byBiZSBtZXJnZWRcbiAgY29uc3QgbWVyZ2VTdGF0ZVJlc3VsdCA9IG1lcmdlU3RhdGVGcm9tTWVyZ2VycyhcbiAgICBzdGF0ZSxcbiAgICB7XG4gICAgICAuLi5JTklUSUFMX1ZJU19TVEFURSxcbiAgICAgIC4uLnN0YXRlLmluaXRpYWxTdGF0ZVxuICAgIH0sXG4gICAgbWVyZ2VycyxcbiAgICAvLyBuZXdEYXRhSWRzLFxuICAgIHBvc3RNZXJnZXJQYXlsb2FkXG4gICk7XG5cbiAgLy8gaWYgYWxsIG1lcmdlZCwga2lja3VwIHBvc3QgbWVyZ2UgcHJvY2Vzc1xuICAvLyBpZiBub3Qgd2FpdFxuICByZXR1cm4gbWVyZ2VTdGF0ZVJlc3VsdC5hbGxNZXJnZWRcbiAgICA/IHBvc3RNZXJnZVVwZGF0ZXIobWVyZ2VTdGF0ZVJlc3VsdC5tZXJnZWRTdGF0ZSwgcG9zdE1lcmdlclBheWxvYWQpXG4gICAgOiBtZXJnZVN0YXRlUmVzdWx0Lm1lcmdlZFN0YXRlO1xufVxuXG4vKiogUmVhZHMgYG9wdGlvbnMubGF5ZXJWaXNDb25maWdgIGZyb20gYWRkLWRhdGEtdG8tbWFwIChzZWUgYEFkZERhdGFUb01hcE9wdGlvbnNgKS4gKi9cbmZ1bmN0aW9uIGxheWVyVmlzQ29uZmlnRnJvbUFkZERhdGFPcHRpb25zKFxuICBvcHRpb25zOiBQb3N0TWVyZ2VyUGF5bG9hZFsnb3B0aW9ucyddIHwgdW5kZWZpbmVkXG4pOiBQYXJ0aWFsPExheWVyVmlzQ29uZmlnPiB8IHVuZGVmaW5lZCB7XG4gIGlmICghb3B0aW9ucyB8fCAhKCdsYXllclZpc0NvbmZpZycgaW4gb3B0aW9ucykpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHBhdGNoID0gKG9wdGlvbnMgYXMge2xheWVyVmlzQ29uZmlnPzogdW5rbm93bn0pLmxheWVyVmlzQ29uZmlnO1xuICBpZiAocGF0Y2ggPT0gbnVsbCB8fCB0eXBlb2YgcGF0Y2ggIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkocGF0Y2gpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gcGF0Y2ggYXMgUGFydGlhbDxMYXllclZpc0NvbmZpZz47XG59XG5cbi8qKlxuICogUG9seWdvbiBmaWx0ZXJzIGZvciB0aGVzZSBsYXllcnMgdXNlIGNlbnRyb2lkcyAvIGRhdGFUb0ZlYXR1cmUgZnJvbVxuICogY2FsY3VsYXRlTGF5ZXJEYXRhLiBPdGhlciB0eXBlcyAobGF0L2xuZyBwb2ludHMsIEgzLCBhcmNzKSBjYW4gZmlsdGVyXG4gKiBmcm9tIGNvbHVtbnMgb24gdGhlIGZpcnN0IHBhc3MgYW5kIG11c3Qgbm90IGJlIHJlY2FsY3VsYXRlZCBoZXJlLlxuICovXG5mdW5jdGlvbiBwb2x5Z29uRmlsdGVyRGVwZW5kc09uTGF5ZXJNZXRhKGxheWVyOiBMYXllcik6IGJvb2xlYW4ge1xuICByZXR1cm4gbGF5ZXIudHlwZSA9PT0gTEFZRVJfVFlQRVMuZ2VvanNvbiB8fCBsYXllci5jb25maWc/LmNvbHVtbk1vZGUgPT09ICdnZW9qc29uJztcbn1cblxuLyoqXG4gKiBBZGQgbmV3IGRhdGFzZXQgdG8gYHZpc1N0YXRlYCwgd2l0aCBvcHRpb24gdG8gbG9hZCBhIG1hcCBjb25maWcgYWxvbmcgd2l0aCB0aGUgZGF0YXNldHNcbiAqL1xuZnVuY3Rpb24gcG9zdE1lcmdlVXBkYXRlcihtZXJnZWRTdGF0ZTogVmlzU3RhdGUsIHBvc3RNZXJnZXJQYXlsb2FkOiBQb3N0TWVyZ2VyUGF5bG9hZCk6IFZpc1N0YXRlIHtcbiAgY29uc3Qge25ld0RhdGFJZHMsIG9wdGlvbnMsIGxheWVyTWVyZ2Vyc30gPSBwb3N0TWVyZ2VyUGF5bG9hZDtcbiAgY29uc3QgbmV3RmlsdGVycyA9IG1lcmdlZFN0YXRlLmZpbHRlcnMuZmlsdGVyKGYgPT5cbiAgICBmLmRhdGFJZC5maW5kKGZEYXRhSWQgPT4gbmV3RGF0YUlkcy5pbmNsdWRlcyhmRGF0YUlkKSlcbiAgKTtcbiAgY29uc3QgZGF0YXNldEZpbHRlcmVkOiBzdHJpbmdbXSA9IHVuaXEoXG4gICAgbmV3RmlsdGVycy5yZWR1Y2UoKGFjY3UsIGYpID0+IFsuLi5hY2N1LCAuLi5mLmRhdGFJZF0sIFtdIGFzIHN0cmluZ1tdKVxuICApO1xuICBjb25zdCBkYXRhRW1wdHkgPSBuZXdEYXRhSWRzLmxlbmd0aCA8IDE7XG5cbiAgbGV0IG5ld0xheWVycyA9ICFkYXRhRW1wdHlcbiAgICA/IG1lcmdlZFN0YXRlLmxheWVycy5maWx0ZXIobCA9PiBsLmNvbmZpZy5kYXRhSWQgJiYgbmV3RGF0YUlkcy5pbmNsdWRlcyhsLmNvbmZpZy5kYXRhSWQpKVxuICAgIDogW107XG5cbiAgY29uc3QgbmV3RGF0YUVudHJpZXMgPSBuZXdEYXRhSWRzLnJlZHVjZShcbiAgICAoYWNjdSwgaWQpID0+ICh7XG4gICAgICAuLi5hY2N1LFxuICAgICAgW2lkXTogbWVyZ2VkU3RhdGUuZGF0YXNldHNbaWRdXG4gICAgfSksXG4gICAge31cbiAgKTtcblxuICBpZiAoIW5ld0xheWVycy5sZW5ndGggJiYgKG9wdGlvbnMgfHwge30pLmF1dG9DcmVhdGVMYXllcnMgIT09IGZhbHNlKSB7XG4gICAgLy8gbm8gbGF5ZXIgbWVyZ2VkLCBmaW5kIGRlZmF1bHRzXG4gICAgY29uc3QgcmVzdWx0ID0gYWRkRGVmYXVsdExheWVycyhtZXJnZWRTdGF0ZSwgbmV3RGF0YUVudHJpZXMpO1xuICAgIG1lcmdlZFN0YXRlID0gcmVzdWx0LnN0YXRlO1xuICAgIG5ld0xheWVycyA9IHJlc3VsdC5uZXdMYXllcnM7XG4gIH1cblxuICBpZiAobWVyZ2VkU3RhdGUuc3BsaXRNYXBzLmxlbmd0aCkge1xuICAgIC8vIGlmIG1hcCBpcyBzcGxpdCwgYWRkIG5ldyBsYXllcnMgdG8gc3BsaXRNYXBzXG4gICAgbmV3TGF5ZXJzID0gbWVyZ2VkU3RhdGUubGF5ZXJzLmZpbHRlcihcbiAgICAgIGwgPT4gbC5jb25maWcuZGF0YUlkICYmIG5ld0RhdGFJZHMuaW5jbHVkZXMobC5jb25maWcuZGF0YUlkKVxuICAgICk7XG4gICAgLy8gYSBsYXllciBhbHJlYWR5IGluIGEgcGFuZWwgd2FzIG1lcmdlZCBmcm9tIHNwbGl0IG1hcHMsIHdoaWNoIGRlY2lkZSB0aGUgcGFuZWxzIHNob3dpbmcgaXRcbiAgICBjb25zdCBsYXllcnNOb3RJblNwbGl0TWFwcyA9IG5ld0xheWVycy5maWx0ZXIoXG4gICAgICBsID0+ICFtZXJnZWRTdGF0ZS5zcGxpdE1hcHMuc29tZShzbSA9PiBsLmlkIGluIHNtLmxheWVycylcbiAgICApO1xuICAgIG1lcmdlZFN0YXRlID0ge1xuICAgICAgLi4ubWVyZ2VkU3RhdGUsXG4gICAgICBzcGxpdE1hcHM6IGFkZE5ld0xheWVyc1RvU3BsaXRNYXAobWVyZ2VkU3RhdGUuc3BsaXRNYXBzLCBsYXllcnNOb3RJblNwbGl0TWFwcylcbiAgICB9O1xuICB9XG5cbiAgbWVyZ2VkU3RhdGUgPSBtZXJnZUxheWVyVmlzQ29uZmlnRm9yTmV3RGF0YXNldHMoXG4gICAgbWVyZ2VkU3RhdGUsXG4gICAgbGF5ZXJWaXNDb25maWdGcm9tQWRkRGF0YU9wdGlvbnMob3B0aW9ucyksXG4gICAgbmV3RGF0YUlkc1xuICApO1xuXG4gIC8vIGlmIG5vIHRvb2x0aXBzIG1lcmdlZCBhZGQgZGVmYXVsdCB0b29sdGlwc1xuICBuZXdEYXRhSWRzLmZvckVhY2goZGF0YUlkID0+IHtcbiAgICBjb25zdCB0b29sdGlwRmllbGRzID0gbWVyZ2VkU3RhdGUuaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcC5jb25maWcuZmllbGRzVG9TaG93W2RhdGFJZF07XG4gICAgLy8gbG9hZGluZyBkYXRhc2V0OiBhdXRvQ3JlYXRlVG9vbHRpcHMgaXMgZmFsc2UgYW5kIHdlIGRvbid0IHdhbnQgdG8gcnVuIGFkZERlZmF1bHRUb29sdGlwcyB3aGVuIHRvb2x0aXBGaWVsZHMgaXMgZW1wdHlcbiAgICBpZiAoXG4gICAgICBvcHRpb25zPy5hdXRvQ3JlYXRlVG9vbHRpcHMgIT09IGZhbHNlICYmXG4gICAgICAoIUFycmF5LmlzQXJyYXkodG9vbHRpcEZpZWxkcykgfHwgIXRvb2x0aXBGaWVsZHMubGVuZ3RoKVxuICAgICkge1xuICAgICAgLy8gYWRkaW5nIGRhdGFzZXQ6IGF1dG9DcmVhdGVUb29sdGlwcyBpcyB0cnVlXG4gICAgICBtZXJnZWRTdGF0ZSA9IGFkZERlZmF1bHRUb29sdGlwcyhtZXJnZWRTdGF0ZSwgbmV3RGF0YUVudHJpZXNbZGF0YUlkXSk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCB1cGRhdGVkRGF0YXNldHMgPSBkYXRhRW1wdHlcbiAgICA/IE9iamVjdC5rZXlzKG1lcmdlZFN0YXRlLmRhdGFzZXRzKVxuICAgIDogdW5pcShPYmplY3Qua2V5cyhuZXdEYXRhRW50cmllcykuY29uY2F0KGRhdGFzZXRGaWx0ZXJlZCkpO1xuXG4gIGxldCB1cGRhdGVkU3RhdGUgPSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobWVyZ2VkU3RhdGUsIHVwZGF0ZWREYXRhc2V0cywgdW5kZWZpbmVkKTtcblxuICAvLyBQb2x5Z29uIHBlci1sYXllciBpbmRleGVzIG5lZWQgY2VudHJvaWRzIC8gZGF0YVRvRmVhdHVyZSwgd2hpY2ggYXJlIG9ubHlcbiAgLy8gcG9wdWxhdGVkIGJ5IHRoZSBsYXllci1kYXRhIHBhc3MgYWJvdmUuIFNraXAgZGF0YXNldHMgd2hvc2UgdGFyZ2V0ZWQgbGF5ZXJzXG4gIC8vIGFscmVhZHkgZmlsdGVyZWQgZnJvbSBjb2x1bW5zIChlLmcuIGxhdC9sbmcgcG9pbnRzKS5cbiAgY29uc3QgcG9seWdvbkZpbHRlcnMgPSB1cGRhdGVkU3RhdGUuZmlsdGVycy5maWx0ZXIoXG4gICAgZiA9PiBmLnR5cGUgPT09IEZJTFRFUl9UWVBFUy5wb2x5Z29uICYmIGYuZW5hYmxlZCAhPT0gZmFsc2VcbiAgKTtcbiAgY29uc3QgcG9seWdvbk1ldGFEYXRhSWRzID0gdW5pcShcbiAgICB1cGRhdGVkU3RhdGUubGF5ZXJzXG4gICAgICAuZmlsdGVyKFxuICAgICAgICBsYXllciA9PlxuICAgICAgICAgIHBvbHlnb25GaWx0ZXJEZXBlbmRzT25MYXllck1ldGEobGF5ZXIpICYmXG4gICAgICAgICAgcG9seWdvbkZpbHRlcnMuc29tZShmID0+IGYubGF5ZXJJZD8uaW5jbHVkZXMobGF5ZXIuaWQpKVxuICAgICAgKVxuICAgICAgLm1hcChsYXllciA9PiBsYXllci5jb25maWcuZGF0YUlkKVxuICAgICAgLmZpbHRlcigoaWQpOiBpZCBpcyBzdHJpbmcgPT4gQm9vbGVhbihpZCkgJiYgdXBkYXRlZERhdGFzZXRzLmluY2x1ZGVzKGlkKSlcbiAgKTtcbiAgaWYgKHBvbHlnb25NZXRhRGF0YUlkcy5sZW5ndGgpIHtcbiAgICB1cGRhdGVkU3RhdGUgPSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEoXG4gICAgICB7XG4gICAgICAgIC4uLnVwZGF0ZWRTdGF0ZSxcbiAgICAgICAgZGF0YXNldHM6IGFwcGx5RmlsdGVyc1RvRGF0YXNldHMoXG4gICAgICAgICAgcG9seWdvbk1ldGFEYXRhSWRzLFxuICAgICAgICAgIHVwZGF0ZWRTdGF0ZS5kYXRhc2V0cyxcbiAgICAgICAgICB1cGRhdGVkU3RhdGUuZmlsdGVycyxcbiAgICAgICAgICB1cGRhdGVkU3RhdGUubGF5ZXJzXG4gICAgICAgIClcbiAgICAgIH0sXG4gICAgICBwb2x5Z29uTWV0YURhdGFJZHNcbiAgICApO1xuICB9XG5cbiAgLy8gcmVnaXN0ZXIgbGF5ZXIgYW5pbWF0aW9uIGRvbWFpbixcbiAgLy8gbmVlZCB0byBiZSBjYWxsZWQgYWZ0ZXIgbGF5ZXIgZGF0YSBpcyBjYWxjdWxhdGVkXG4gIHVwZGF0ZWRTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbih1cGRhdGVkU3RhdGUpO1xuXG4gIC8vIHRyeSB0byBwcm9jZXNzIGxheWVyTWVyZ2VycyBhZnRlciBkYXRhc2V0K2RhdGFzZXRNZXJnZXJzXG4gIHVwZGF0ZWRTdGF0ZSA9XG4gICAgbGF5ZXJNZXJnZXJzICYmIGxheWVyTWVyZ2Vycy5sZW5ndGggPiAwXG4gICAgICA/IGFwcGx5TWVyZ2Vyc1VwZGF0ZXIodXBkYXRlZFN0YXRlLCB7XG4gICAgICAgICAgbWVyZ2VyczogbGF5ZXJNZXJnZXJzLFxuICAgICAgICAgIHBvc3RNZXJnZXJQYXlsb2FkOiB7Li4ucG9zdE1lcmdlclBheWxvYWQsIGxheWVyTWVyZ2VyczogW119XG4gICAgICAgIH0pXG4gICAgICA6IHVwZGF0ZWRTdGF0ZTtcblxuICAvLyBjZW50ZXIgdGhlIG1hcCBvbmNlIHRoZSBkYXRhc2V0IGlzIGNyZWF0ZWRcbiAgaWYgKG5ld0xheWVycy5sZW5ndGggJiYgKG9wdGlvbnMgfHwge30pLmNlbnRlck1hcCkge1xuICAgIGNvbnN0IGJvdW5kcyA9IGZpbmRNYXBCb3VuZHMobmV3TGF5ZXJzKTtcbiAgICBpZiAoYm91bmRzKSB7XG4gICAgICBjb25zdCBwYWRkaW5nID0gb3B0aW9ucz8ucGFkZGluZztcbiAgICAgIGNvbnN0IGZpdEJvdW5kc1Rhc2sgPSBBQ1RJT05fVEFTS19GSVRfQk9VTkRTKCkubWFwKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIGZpdE1hcEJvdW5kcyhib3VuZHMsIHBhZGRpbmcpO1xuICAgICAgfSk7XG4gICAgICB1cGRhdGVkU3RhdGUgPSB3aXRoVGFzayh1cGRhdGVkU3RhdGUsIGZpdEJvdW5kc1Rhc2spO1xuICAgIH1cbiAgfVxuXG4gIC8vIG5lZWQgdG8gY2VudGVyIG1hcCBoZXJlIGlmIHdlIGhhdmUgbmV3IGxheWVyc1xuICByZXR1cm4gdXBkYXRlZFN0YXRlO1xufVxuXG4vKipcbiAqIFJlbmFtZSBhbiBleGlzdGluZyBkYXRhc2V0IGluIGB2aXNTdGF0ZWBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5hbWVEYXRhc2V0VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW5hbWVEYXRhc2V0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICByZXR1cm4gdXBkYXRlRGF0YXNldFByb3BzVXBkYXRlcihzdGF0ZSwge2RhdGFJZDogYWN0aW9uLmRhdGFJZCwgcHJvcHM6IHtsYWJlbDogYWN0aW9uLmxhYmVsfX0pO1xufVxuXG5jb25zdCBBTExPV0VEX1VQREFURV9EQVRBU0VUX1BST1BTID0gWydsYWJlbCcsICdjb2xvcicsICdtZXRhZGF0YSddO1xuXG4vKipcbiAqIFZhbGlkYXRlcyBwcm9wZXJ0aWVzIGJlZm9yZSB1cGRhdGluZyB0aGUgZGF0YXNldC5cbiAqIE1ha2VzIHN1cmUgZWFjaCBwcm9wZXJ0eSBpcyBpbiB0aGUgYWxsb3dlZCBsaXN0XG4gKiBNYWtlcyBzdXJlIGNvbG9yIHZhbHVlIGlzIFJHQlxuICogUGVyZm9ybXMgZGVlcCBtZXJnZSB3aGVuIHVwZGF0aW5nIG1ldGFkYXRhXG4gKi9cbmNvbnN0IHZhbGlkYXRlRGF0YXNldFVwZGF0ZVByb3BzID0gKHByb3BzLCBkYXRhc2V0KSA9PiB7XG4gIGNvbnN0IHZhbGlkYXRlZFByb3BzID0gT2JqZWN0LmVudHJpZXMocHJvcHMpLnJlZHVjZSgoYWNjLCBlbnRyeSkgPT4ge1xuICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IGVudHJ5O1xuICAgIC8vIGlzIGl0IGFsbG93ZWQgP1xuICAgIGlmICghQUxMT1dFRF9VUERBVEVfREFUQVNFVF9QUk9QUy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH1cblxuICAgIC8vIGlmIHdlIGFyZSBhZGRpbmcgYSBjb2xvciBidXQgaXQgaXMgbm90IFJHQiB3ZSBkb24ndCBhY2NlcHQgdGhlIHZhbHVlXG4gICAgLy8gaW4gdGhlIGZ1dHVyZSBhcyB3ZSBhZGQgbW9yZSBwcm9wcyB3ZSBzaG91bGQgY2hhbmdlIHRoaXMgaWYgaW50byBhIHN3aXRjaFxuICAgIGlmIChrZXkgPT09ICdjb2xvcicgJiYgIWlzUmdiQ29sb3IodmFsdWUpKSB7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH1cblxuICAgIC8vIGRvIHdlIG5lZWQgZGVlcCBtZXJnZSA/XG4gICAgcmV0dXJuIHsuLi5hY2MsIFtrZXldOiBpc1BsYWluT2JqZWN0KHZhbHVlKSA/IGRlZXBtZXJnZShkYXRhc2V0W2tleV0gfHwge30sIHZhbHVlKSA6IHZhbHVlfTtcbiAgfSwge30pO1xuXG4gIHJldHVybiB2YWxpZGF0ZWRQcm9wcztcbn07XG5cbi8qKlxuICogVXBkYXRlIERhdGFzZXQgcHJvcHMgKGxhYmVsLCBjb2xvciwgbWV0YSkuIERvIG5vdCB1c2UgdG8gdXBkYXRlIGRhdGEgb3IgYW55IHJlbGF0ZWQgcHJvcGVydGllc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZURhdGFzZXRQcm9wc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRGF0YXNldFByb3BzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7ZGF0YUlkLCBwcm9wc30gPSBhY3Rpb247XG4gIGNvbnN0IHtkYXRhc2V0c30gPSBzdGF0ZTtcbiAgY29uc3QgZXhpc3RpbmcgPSBkYXRhc2V0c1tkYXRhSWRdO1xuXG4gIGlmIChleGlzdGluZykge1xuICAgIGNvbnN0IHZhbGlkYXRlZFByb3BzID0gdmFsaWRhdGVEYXRhc2V0VXBkYXRlUHJvcHMocHJvcHMsIGV4aXN0aW5nKTtcbiAgICAvLyAgdmFsaWRhdGUgcHJvcHM6IGp1c3QgY29sb3IgZm9yIG5vd1xuICAgIC8vICB3ZSBvbmx5IGFsbG93IGxhYmVsLCBjb2xvciBhbmQgbWV0YSB0byBiZSB1cGRhdGVkXG4gICAgLy8gY29uc3QgbmV3VGFibGUgPSBjb3B5VGFibGVBbmRVcGRhdGUoZXhpc3RpbmcsIHZhbGlkYXRlZFByb3BzKTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBkYXRhc2V0czoge1xuICAgICAgICAuLi5kYXRhc2V0cyxcbiAgICAgICAgW2RhdGFJZF06IGNvcHlUYWJsZUFuZFVwZGF0ZShleGlzdGluZywgdmFsaWRhdGVkUHJvcHMpXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBSZS12YWxpZGF0ZSBhIGxpdmUgbGF5ZXIgYWdhaW5zdCBhIHRhYmxlIHdob3NlIHNjaGVtYSBqdXN0IGNoYW5nZWQuXG4gKlxuICogVGhlIGxheWVyJ3MgY29sdW1ucyAvIHZpc3VhbC1jaGFubmVsIGZpZWxkcyAvIHRleHQtbGFiZWwgZmllbGRzIGFyZSBmaXJzdFxuICogcmVtYXBwZWQgdG8gdGhlaXIgbmV3IG5hbWVzICh2aWEgYHJlbmFtZXNgKSBzbyB0aGUgbGF5ZXIgZm9sbG93cyBhIHJlbmFtZVxuICogaW5zdGVhZCBvZiB0cmVhdGluZyB0aGUgb2xkIGNvbHVtbiBhcyByZW1vdmVkLCB0aGVuIHJlLXZhbGlkYXRlZCB3aXRoXG4gKiBgdmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGFgIOKAlCB0aGUgc2FtZSBzZXJpYWxpemUgKyB2YWxpZGF0ZSBwYXRoIHVzZWRcbiAqIHdoZW4gYSBzYXZlZCBjb25maWcgaXMgbG9hZGVkIGFnYWluc3QgbmV3IGRhdGEuIFJldHVybnMgYG51bGxgIHdoZW4gYVxuICogcmVxdWlyZWQgY29sdW1uIGlzIGdvbmUgKHRoZSBsYXllciBjYW4gbm8gbG9uZ2VyIGJlIGJ1aWx0KS5cbiAqL1xuZnVuY3Rpb24gcmVjb25jaWxlTGF5ZXJXaXRoTmV3U2NoZW1hKFxuICBsYXllcjogTGF5ZXIsXG4gIHJlbmFtZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gIG5ld1RhYmxlOiBLZXBsZXJUYWJsZSxcbiAgc3RhdGU6IFZpc1N0YXRlXG4pOiBMYXllciB8IG51bGwge1xuICBjb25zdCBjb25maWdQYXRjaDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXG4gIC8vIGZvbGxvdyByZW5hbWVkIGNvbHVtbnNcbiAgY29uc3QgY29sdW1uc1BhdGNoOiBSZWNvcmQ8c3RyaW5nLCB7dmFsdWU6IHN0cmluZyB8IG51bGw7IGZpZWxkSWR4OiBudW1iZXJ9PiA9IHt9O1xuICBsZXQgY29sdW1uc0NoYW5nZWQgPSBmYWxzZTtcbiAgT2JqZWN0LmVudHJpZXMobGF5ZXIuY29uZmlnLmNvbHVtbnMgfHwge30pLmZvckVhY2goKFtja2V5LCBjb2xdKSA9PiB7XG4gICAgaWYgKGNvbD8udmFsdWUgJiYgcmVuYW1lc1tjb2wudmFsdWVdKSB7XG4gICAgICBjb2x1bW5zUGF0Y2hbY2tleV0gPSB7Li4uY29sLCB2YWx1ZTogcmVuYW1lc1tjb2wudmFsdWVdfTtcbiAgICAgIGNvbHVtbnNDaGFuZ2VkID0gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuICBpZiAoY29sdW1uc0NoYW5nZWQpIHtcbiAgICBjb25maWdQYXRjaC5jb2x1bW5zID0gey4uLmxheWVyLmNvbmZpZy5jb2x1bW5zLCAuLi5jb2x1bW5zUGF0Y2h9O1xuICB9XG5cbiAgLy8gZm9sbG93IHJlbmFtZWQgdmlzdWFsLWNoYW5uZWwgZmllbGRzIChjb2xvckZpZWxkLCBzaXplRmllbGQsIC4uLilcbiAgT2JqZWN0LnZhbHVlcyhsYXllci52aXN1YWxDaGFubmVscykuZm9yRWFjaCgoe2ZpZWxkfSkgPT4ge1xuICAgIGNvbnN0IGZpZWxkQ29uZmlnID0gbGF5ZXIuY29uZmlnW2ZpZWxkXTtcbiAgICBpZiAoZmllbGRDb25maWc/Lm5hbWUgJiYgcmVuYW1lc1tmaWVsZENvbmZpZy5uYW1lXSkge1xuICAgICAgY29uZmlnUGF0Y2hbZmllbGRdID0gey4uLmZpZWxkQ29uZmlnLCBuYW1lOiByZW5hbWVzW2ZpZWxkQ29uZmlnLm5hbWVdfTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGZvbGxvdyByZW5hbWVkIHRleHQtbGFiZWwgZmllbGRzXG4gIGlmIChsYXllci5jb25maWcudGV4dExhYmVsPy5sZW5ndGgpIHtcbiAgICBjb25zdCB0ZXh0TGFiZWwgPSBsYXllci5jb25maWcudGV4dExhYmVsLm1hcCh0bCA9PlxuICAgICAgdGwuZmllbGQgJiYgcmVuYW1lc1t0bC5maWVsZC5uYW1lXVxuICAgICAgICA/IHsuLi50bCwgZmllbGQ6IHsuLi50bC5maWVsZCwgbmFtZTogcmVuYW1lc1t0bC5maWVsZC5uYW1lXX19XG4gICAgICAgIDogdGxcbiAgICApO1xuICAgIGlmICh0ZXh0TGFiZWwuc29tZSgodGwsIGkpID0+IHRsICE9PSBsYXllci5jb25maWcudGV4dExhYmVsW2ldKSkge1xuICAgICAgY29uZmlnUGF0Y2gudGV4dExhYmVsID0gdGV4dExhYmVsO1xuICAgIH1cbiAgfVxuXG4gIC8vIHNoYWxsb3ctY29weSB0aGUgbGF5ZXIgc28gd2UgbmV2ZXIgbXV0YXRlIHJlZHV4IHN0YXRlOyB0aGUgY29weSBrZWVwcyB0aGVcbiAgLy8gcHJvdG90eXBlIG1ldGhvZHMgKGB2aXN1YWxDaGFubmVsc2AgZ2V0dGVyLCBgaXNWYWxpZFRvU2F2ZWApIHNvIGl0XG4gIC8vIHNlcmlhbGl6ZXMgZXhhY3RseSBsaWtlIGEgbGl2ZSBsYXllci5cbiAgY29uc3QgbGF5ZXJDb3B5ID0gT2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihsYXllcikpLCBsYXllcik7XG4gIGlmIChPYmplY3Qua2V5cyhjb25maWdQYXRjaCkubGVuZ3RoKSB7XG4gICAgbGF5ZXJDb3B5LmNvbmZpZyA9IHsuLi5sYXllci5jb25maWcsIC4uLmNvbmZpZ1BhdGNofTtcbiAgfVxuXG4gIGNvbnN0IHZhbGlkYXRlZCA9IHZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhKFxuICAgIG5ld1RhYmxlLFxuICAgIHN0YXRlLmxheWVyQ2xhc3NlcyxcbiAgICBsYXllckNvcHksXG4gICAgc3RhdGUuc2NoZW1hXG4gICk7XG5cbiAgcmV0dXJuIHZhbGlkYXRlZCAmJiB2YWxpZGF0ZWQuaGFzQWxsQ29sdW1ucygpID8gdmFsaWRhdGVkIDogbnVsbDtcbn1cblxuLyoqXG4gKiBVcGRhdGUgYW4gZXhpc3RpbmcgZGF0YXNldCdzIHNjaGVtYSAoY29sdW1ucy9maWVsZHMpIGluIHBsYWNlIGFuZCByZWNvbmNpbGVcbiAqIGV2ZXJ5dGhpbmcgdGhhdCByZWZlcmVuY2VkIHRoZSBvbGQgY29sdW1uczogZmlsdGVycywgbGF5ZXJzLCB0b29sdGlwIGZpZWxkcyxcbiAqIHBpbm5lZCBjb2x1bW5zIGFuZCBzb3J0IHN0YXRlLiBUaGUgZGF0YXNldCBrZWVwcyBpdHMgaWQvbGFiZWwvY29sb3IvbWV0YWRhdGEuXG4gKlxuICogYGFjdGlvbi5kYXRhYCBpcyB0aGUgc2FtZSBzaGFwZSBgS2VwbGVyVGFibGUuaW1wb3J0RGF0YWAgYWNjZXB0cyAoYHtjb2xzLFxuICogZmllbGRzLCBhcnJvd1RhYmxlfWAgd2hlbiByZXBsYWNpbmcgY29sdW1ucykuIGBhY3Rpb24ucmVuYW1lc2AgaXMgYW4gb3B0aW9uYWxcbiAqIG9sZCDihpIgbmV3IGNvbHVtbi1uYW1lIG1hcCBzbyBsYXllcnMvZmlsdGVycy90b29sdGlwcyBmb2xsb3cgYSByZW5hbWUgaW5zdGVhZFxuICogb2YgdHJlYXRpbmcgdGhlIG9sZCBjb2x1bW4gYXMgcmVtb3ZlZC5cbiAqXG4gKiBSZWNvbmNpbGlhdGlvbiBpcyBuYW1lLWJhc2VkIOKAlCB0aGUgc2FtZSB3YXkga2VwbGVyLmdsIGxvYWRzIGEgc2F2ZWQgY29uZmlnXG4gKiBhZ2FpbnN0IGNoYW5nZWQgZGF0YS4gQSBsYXllciB3aG9zZSByZXF1aXJlZCBjb2x1bW4gaXMgZ29uZSBpcyByZW1vdmVkOyBhXG4gKiBmaWx0ZXIgb24gYSBnb25lIGNvbHVtbiBpcyBkcm9wcGVkIChvciB0aGUgZGF0YXNldCBpcyBzcGxpY2VkIG91dCBvZiBhIHN5bmNlZFxuICogZmlsdGVyKTsgdG9vbHRpcCBmaWVsZHMgYXJlIHJlbWFwcGVkIC8gZHJvcHBlZC5cbiAqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlRGF0YXNldFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRGF0YXNldFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2RhdGFJZCwgZGF0YSwgcmVuYW1lcyA9IHt9fSA9IGFjdGlvbjtcbiAgY29uc3QgZXhpc3RpbmcgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWV4aXN0aW5nKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gMS4gcmVidWlsZCB0aGUgdGFibGUgc2NoZW1hIGluIHBsYWNlIChzYW1lIGlkL2xhYmVsL2NvbG9yL21ldGFkYXRhKVxuICBjb25zdCBuZXdUYWJsZSA9IGNvcHlUYWJsZUFuZFVwZGF0ZShleGlzdGluZywge30pO1xuICBuZXdUYWJsZS51cGRhdGVTY2hlbWEoZGF0YSk7XG5cbiAgLy8gVGhlIGRhdGEgY29udGFpbmVyIGlzIHJlYnVpbHQgdW5zb3J0ZWQgYW5kIHVuZmlsdGVyZWQ7IHJlc2V0IHRoZSB0YWJsZSdzXG4gIC8vIHZpZXcgc3RhdGUgdGhhdCBpbmRleGVzIGludG8gdGhlIG9sZCBjb250YWluZXIuXG4gIG5ld1RhYmxlLmZpbHRlcmVkSWR4Q1BVID0gbmV3VGFibGUuYWxsSW5kZXhlcztcbiAgbmV3VGFibGUuZmlsdGVyUmVjb3JkQ1BVID0gdW5kZWZpbmVkO1xuICBuZXdUYWJsZS5zb3J0Q29sdW1uID0gdW5kZWZpbmVkO1xuICBuZXdUYWJsZS5zb3J0T3JkZXIgPSBudWxsO1xuICBuZXdUYWJsZS5waW5uZWRDb2x1bW5zID0gKGV4aXN0aW5nLnBpbm5lZENvbHVtbnMgfHwgW10pXG4gICAgLm1hcChuYW1lID0+IHJlbmFtZXNbbmFtZV0gPz8gbmFtZSlcbiAgICAuZmlsdGVyKG5hbWUgPT4gbmV3VGFibGUuZ2V0Q29sdW1uRmllbGRJZHgobmFtZSkgPiAtMSk7XG5cbiAgY29uc3QgbmV3RmllbGRzQnlOYW1lID0gbmV3IFNldChuZXdUYWJsZS5maWVsZHMubWFwKGYgPT4gZi5uYW1lKSk7XG4gIGNvbnN0IG5ld0RhdGFzZXRzID0gey4uLnN0YXRlLmRhdGFzZXRzLCBbZGF0YUlkXTogbmV3VGFibGV9O1xuXG4gIC8vIDIuIHJlY29uY2lsZSBmaWx0ZXJzXG4gIGxldCBuZXdGaWx0ZXJzID0gc3RhdGUuZmlsdGVyc1xuICAgIC5tYXAoZmlsdGVyID0+IHtcbiAgICAgIGNvbnN0IHZpID0gZmlsdGVyLmRhdGFJZC5pbmRleE9mKGRhdGFJZCk7XG4gICAgICBpZiAodmkgPT09IC0xKSB7XG4gICAgICAgIHJldHVybiBmaWx0ZXI7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG9sZE5hbWUgPSBmaWx0ZXIubmFtZVt2aV07XG4gICAgICBjb25zdCBuZXdOYW1lID0gcmVuYW1lc1tvbGROYW1lXSA/PyBvbGROYW1lO1xuICAgICAgY29uc3QgZmllbGRJZHggPSBuZXdUYWJsZS5nZXRDb2x1bW5GaWVsZElkeChuZXdOYW1lKTtcblxuICAgICAgaWYgKGZpZWxkSWR4ID09PSAtMSkge1xuICAgICAgICAvLyBjb2x1bW4gaXMgZ29uZTogZHJvcCBhIHNpbmdsZS1kYXRhc2V0IGZpbHRlciwgc3BsaWNlIGl0IG91dCBvZiBhIHN5bmNlZCBvbmVcbiAgICAgICAgcmV0dXJuIGZpbHRlci5kYXRhSWQubGVuZ3RoID09PSAxXG4gICAgICAgICAgPyBudWxsXG4gICAgICAgICAgOiBfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmksIG5ld0RhdGFzZXRzKTtcbiAgICAgIH1cblxuICAgICAgLy8gY29sdW1uIHByZXNlbnQgKHBvc3NpYmx5IHJlbmFtZWQpOiByZS1yZXNvbHZlIG5hbWUvZmllbGRJZHgvZG9tYWluXG4gICAgICBjb25zdCB7ZmlsdGVyOiB1cGRhdGVkfSA9IGFwcGx5RmlsdGVyRmllbGROYW1lKGZpbHRlciwgbmV3RGF0YXNldHMsIGRhdGFJZCwgbmV3TmFtZSwgdmksIHtcbiAgICAgICAgbWVyZ2VEb21haW46IHZpID4gMFxuICAgICAgfSk7XG4gICAgICBpZiAoIXVwZGF0ZWQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIGJydXNoIGZpbHRlcnMgY2FycnkgYSBzZWNvbmQgeS1heGlzIGZpZWxkOyBmb2xsb3cgYSByZW5hbWUgdGhlcmUgdG9vXG4gICAgICBjb25zdCB5QXhpcyA9XG4gICAgICAgIHVwZGF0ZWQueUF4aXM/Lm5hbWUgJiZcbiAgICAgICAgKHJlbmFtZXNbdXBkYXRlZC55QXhpcy5uYW1lXVxuICAgICAgICAgID8gey4uLnVwZGF0ZWQueUF4aXMsIG5hbWU6IHJlbmFtZXNbdXBkYXRlZC55QXhpcy5uYW1lXX1cbiAgICAgICAgICA6IG5ld0ZpZWxkc0J5TmFtZS5oYXModXBkYXRlZC55QXhpcy5uYW1lKVxuICAgICAgICAgID8gdXBkYXRlZC55QXhpc1xuICAgICAgICAgIDogbnVsbCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnVwZGF0ZWQsXG4gICAgICAgIHlBeGlzLFxuICAgICAgICAvLyBjbGFtcCB0aGUgdXNlcidzIHByZXZpb3VzIHNlbGVjdGlvbiBpbnRvIHRoZSBuZXcgZG9tYWluIGluc3RlYWQgb2ZcbiAgICAgICAgLy8gcmVzZXR0aW5nIGl0IHRvIHRoZSBmdWxsIHJhbmdlXG4gICAgICAgIHZhbHVlOiBhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluKGZpbHRlci52YWx1ZSwgdXBkYXRlZClcbiAgICAgIH07XG4gICAgfSlcbiAgICAuZmlsdGVyKEJvb2xlYW4pIGFzIEZpbHRlcltdO1xuXG4gIC8vIHJlYXNzaWduIEdQVSBjaGFubmVscyBub3cgdGhhdCB0aGUgZmlsdGVyIGxpc3QgaXMgc2V0dGxlZFxuICBuZXdGaWx0ZXJzID0gbmV3RmlsdGVycy5tYXAoZmlsdGVyID0+XG4gICAgZmlsdGVyLmdwdSA/IGFzc2lnbkdwdUNoYW5uZWwoc2V0RmlsdGVyR3B1TW9kZShmaWx0ZXIsIG5ld0ZpbHRlcnMpLCBuZXdGaWx0ZXJzKSA6IGZpbHRlclxuICApO1xuXG4gIC8vIDMuIHJlYnVpbGQgdGhlIHRhYmxlJ3MgZmlsdGVyIHN0YXRlIChncHVGaWx0ZXIgLyBmaWx0ZXJSZWNvcmQgLyBmaWx0ZXJlZEluZGV4KVxuICBuZXdUYWJsZS5maWx0ZXJUYWJsZShcbiAgICBuZXdGaWx0ZXJzLFxuICAgIHN0YXRlLmxheWVycy5maWx0ZXIobCA9PiBsLmNvbmZpZy5kYXRhSWQgPT09IGRhdGFJZCksXG4gICAge31cbiAgKTtcblxuICAvLyA0LiByZWNvbmNpbGUgbGF5ZXJzXG4gIGNvbnN0IGxheWVyc1RvUmVtb3ZlOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBuZXdMYXllcnMgPSBzdGF0ZS5sYXllcnMubWFwKGxheWVyID0+IHtcbiAgICBpZiAobGF5ZXIuY29uZmlnLmRhdGFJZCAhPT0gZGF0YUlkKSB7XG4gICAgICByZXR1cm4gbGF5ZXI7XG4gICAgfVxuICAgIGNvbnN0IHJlY29uY2lsZWQgPSByZWNvbmNpbGVMYXllcldpdGhOZXdTY2hlbWEobGF5ZXIsIHJlbmFtZXMsIG5ld1RhYmxlLCBzdGF0ZSk7XG4gICAgaWYgKHJlY29uY2lsZWQpIHtcbiAgICAgIHJldHVybiByZWNvbmNpbGVkO1xuICAgIH1cbiAgICBsYXllcnNUb1JlbW92ZS5wdXNoKGxheWVyLmlkKTtcbiAgICByZXR1cm4gbGF5ZXI7IC8vIHBsYWNlaG9sZGVyLCBkcm9wcGVkIHZpYSByZW1vdmVMYXllclVwZGF0ZXIgYmVsb3dcbiAgfSk7XG5cbiAgLy8gNS4gcmVjb25jaWxlIHRvb2x0aXAgZmllbGRzVG9TaG93XG4gIGxldCBpbnRlcmFjdGlvbkNvbmZpZyA9IHN0YXRlLmludGVyYWN0aW9uQ29uZmlnO1xuICBjb25zdCB0b29sdGlwID0gaW50ZXJhY3Rpb25Db25maWc/LnRvb2x0aXA7XG4gIGNvbnN0IGZpZWxkc1RvU2hvdyA9IHRvb2x0aXA/LmNvbmZpZz8uZmllbGRzVG9TaG93Py5bZGF0YUlkXTtcbiAgaWYgKGZpZWxkc1RvU2hvdykge1xuICAgIGNvbnN0IG5leHRGaWVsZHNUb1Nob3cgPSBmaWVsZHNUb1Nob3cuZmxhdE1hcChmID0+IHtcbiAgICAgIGNvbnN0IG5hbWUgPSByZW5hbWVzW2YubmFtZV0gPz8gZi5uYW1lO1xuICAgICAgcmV0dXJuIG5ld0ZpZWxkc0J5TmFtZS5oYXMobmFtZSkgPyBbey4uLmYsIG5hbWV9XSA6IFtdO1xuICAgIH0pO1xuICAgIGludGVyYWN0aW9uQ29uZmlnID0ge1xuICAgICAgLi4uaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICB0b29sdGlwOiB7XG4gICAgICAgIC4uLnRvb2x0aXAsXG4gICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgIC4uLnRvb2x0aXAuY29uZmlnLFxuICAgICAgICAgIGZpZWxkc1RvU2hvdzogey4uLnRvb2x0aXAuY29uZmlnLmZpZWxkc1RvU2hvdywgW2RhdGFJZF06IG5leHRGaWVsZHNUb1Nob3d9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgbGV0IG5leHRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czogbmV3RGF0YXNldHMsXG4gICAgZmlsdGVyczogbmV3RmlsdGVycyxcbiAgICBsYXllcnM6IG5ld0xheWVycyxcbiAgICBpbnRlcmFjdGlvbkNvbmZpZ1xuICB9O1xuXG4gIC8vIDYuIGRyb3AgbGF5ZXJzIHRoYXQgbG9zdCB0aGVpciByZXF1aXJlZCBjb2x1bW5zXG4gIG5leHRTdGF0ZSA9IGxheWVyc1RvUmVtb3ZlLnJlZHVjZSgoYWNjdSwgaWQpID0+IHJlbW92ZUxheWVyVXBkYXRlcihhY2N1LCB7aWR9KSwgbmV4dFN0YXRlKTtcblxuICAvLyA3LiByZWNvbXB1dGUgbGF5ZXIgZG9tYWlucyArIGRhdGEgZm9yIHRoZSB1cGRhdGVkIGRhdGFzZXRcbiAgbmV4dFN0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG5leHRTdGF0ZSwgZGF0YUlkKTtcblxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG4vKipcbiAqIFdoZW4gYSB1c2VyIGNsaWNrcyBvbiB0aGUgc3BlY2lmaWMgbWFwIGNsb3NpbmcgaWNvblxuICogdGhlIGFwcGxpY2F0aW9uIHdpbGwgY2xvc2UgdGhlIHNlbGVjdGVkIG1hcFxuICogYW5kIHdpbGwgbWVyZ2UgdGhlIHJlbWFpbmluZyBvbmUgd2l0aCB0aGUgZ2xvYmFsIHN0YXRlXG4gKiBUT0RPOiBpIHRoaW5rIGluIHRoZSBmdXR1cmUgdGhpcyBhY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBtZXJnZSBtYXAgbGF5ZXJzIHdpdGggZ2xvYmFsIHNldHRpbmdzXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhdGUgYHZpc1N0YXRlYFxuICogQHBhcmFtIHtPYmplY3R9IGFjdGlvbiBhY3Rpb25cbiAqIEByZXR1cm5zIHtPYmplY3R9IG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xvc2VTcGVjaWZpY01hcEF0SW5kZXg8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogTWFwU3RhdGVBY3Rpb25zLlRvZ2dsZVNwbGl0TWFwVXBkYXRlckFjdGlvblxuKTogUyB7XG4gIC8vIHJldHJpZXZlIGxheWVycyBtZXRhIGRhdGEgZnJvbSB0aGUgcmVtYWluaW5nIG1hcCB0aGF0IHdlIG5lZWQgdG8ga2VlcFxuICBjb25zdCBpbmRleFRvUmV0cmlldmUgPSAxIC0gYWN0aW9uLnBheWxvYWQ7XG4gIGNvbnN0IG1hcExheWVycyA9IHN0YXRlLnNwbGl0TWFwc1tpbmRleFRvUmV0cmlldmVdPy5sYXllcnM7XG4gIGNvbnN0IHtsYXllcnN9ID0gc3RhdGU7XG5cbiAgLy8gdXBkYXRlIGxheWVyIHZpc2liaWxpdHlcbiAgY29uc3QgbmV3TGF5ZXJzID0gbGF5ZXJzLm1hcChsYXllciA9PlxuICAgIG1hcExheWVycyAmJiAhbWFwTGF5ZXJzW2xheWVyLmlkXSAmJiBsYXllci5jb25maWcuaXNWaXNpYmxlXG4gICAgICA/IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgICAvLyBpZiBsYXllci5pZCBpcyBub3QgaW4gbWFwTGF5ZXJzLCBpdCBzaG91bGQgYmUgaW5WaXNpYmxlXG4gICAgICAgICAgaXNWaXNpYmxlOiBmYWxzZVxuICAgICAgICB9KVxuICAgICAgOiBsYXllclxuICApO1xuXG4gIC8vIGRlbGV0ZSBtYXBcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IG5ld0xheWVycyxcbiAgICBzcGxpdE1hcHM6IFtdXG4gIH07XG59XG5cbi8qKlxuICogVHJpZ2dlciBmaWxlIGxvYWRpbmcgZGlzcGF0Y2ggYGFkZERhdGFUb01hcGAgaWYgc3VjY2VlZCwgb3IgYGxvYWRGaWxlc0VycmAgaWYgZmFpbGVkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbG9hZEZpbGVzVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Mb2FkRmlsZXNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtmaWxlcywgb25GaW5pc2ggPSBsb2FkRmlsZXNTdWNjZXNzfSA9IGFjdGlvbjtcbiAgaWYgKCFmaWxlcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBjb21wYW5pb25GaWxlcyA9IEFycmF5LmZyb20oZmlsZXMpO1xuICBjb25zdCBmaWxlc1RvTG9hZCA9IGdldEZpbGVzVG9QYXJzZShjb21wYW5pb25GaWxlcyk7XG4gIGlmICghZmlsZXNUb0xvYWQubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZmlsZUxvYWRpbmdQcm9ncmVzcyA9IGZpbGVzVG9Mb2FkLnJlZHVjZShcbiAgICAoYWNjdSwgZiwgaSkgPT4gbWVyZ2VfKGluaXRpYWxGaWxlTG9hZGluZ1Byb2dyZXNzKGYsIGkpKShhY2N1KSxcbiAgICB7fVxuICApO1xuXG4gIGNvbnN0IGZpbGVMb2FkaW5nID0ge1xuICAgIGZpbGVDYWNoZTogW10sXG4gICAgZmlsZXNUb0xvYWQsXG4gICAgY29tcGFuaW9uRmlsZXMsXG4gICAgb25GaW5pc2hcbiAgfTtcblxuICBjb25zdCBuZXh0U3RhdGUgPSBtZXJnZV8oe2ZpbGVMb2FkaW5nUHJvZ3Jlc3MsIGZpbGVMb2FkaW5nfSkoc3RhdGUpO1xuXG4gIHJldHVybiBsb2FkTmV4dEZpbGVVcGRhdGVyKG5leHRTdGF0ZSk7XG59O1xuXG4vKipcbiAqIFN1Y2Vzc2Z1bGx5IGxvYWRlZCBvbmUgZmlsZSwgbW92ZSBvbiB0byB0aGUgbmV4dCBvbmVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkRmlsZVN0ZXBTdWNjZXNzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Mb2FkRmlsZVN0ZXBTdWNjZXNzQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICghc3RhdGUuZmlsZUxvYWRpbmcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qge2ZpbGVOYW1lLCBmaWxlQ2FjaGV9ID0gYWN0aW9uO1xuICBjb25zdCB7ZmlsZXNUb0xvYWQsIG9uRmluaXNofSA9IHN0YXRlLmZpbGVMb2FkaW5nO1xuICBjb25zdCBzdGF0ZVdpdGhQcm9ncmVzcyA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7XG4gICAgZmlsZU5hbWUsXG4gICAgcHJvZ3Jlc3M6IHtwZXJjZW50OiAxLCBtZXNzYWdlOiAnRG9uZSd9XG4gIH0pO1xuXG4gIC8vIHNhdmUgcHJvY2Vzc2VkIGZpbGUgdG8gZmlsZUNhY2hlXG4gIGNvbnN0IHN0YXRlV2l0aENhY2hlID0gcGlja18oJ2ZpbGVMb2FkaW5nJykobWVyZ2VfKHtmaWxlQ2FjaGV9KSkoc3RhdGVXaXRoUHJvZ3Jlc3MpO1xuXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBzdGF0ZVdpdGhDYWNoZSxcbiAgICBERUxBWV9UQVNLKDIwMCkubWFwKGZpbGVzVG9Mb2FkLmxlbmd0aCA/IGxvYWROZXh0RmlsZSA6ICgpID0+IG9uRmluaXNoKGZpbGVDYWNoZSkpXG4gICk7XG59XG5cbi8vIHdpdGhUYXNrPFQ+KHN0YXRlOiBULCB0YXNrOiBhbnkpOiBUXG5cbi8qKlxuICpcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkTmV4dEZpbGVVcGRhdGVyKHN0YXRlOiBWaXNTdGF0ZSk6IFZpc1N0YXRlIHtcbiAgaWYgKCFzdGF0ZS5maWxlTG9hZGluZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7ZmlsZXNUb0xvYWR9ID0gc3RhdGUuZmlsZUxvYWRpbmc7XG4gIGNvbnN0IFtmaWxlLCAuLi5yZW1haW5pbmdGaWxlc1RvTG9hZF0gPSBmaWxlc1RvTG9hZDtcblxuICAvLyBzYXZlIGZpbGVzVG9Mb2FkIHRvIHN0YXRlXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHBpY2tfKCdmaWxlTG9hZGluZycpKG1lcmdlXyh7ZmlsZXNUb0xvYWQ6IHJlbWFpbmluZ0ZpbGVzVG9Mb2FkfSkpKHN0YXRlKTtcblxuICBjb25zdCBzdGF0ZVdpdGhQcm9ncmVzcyA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKG5leHRTdGF0ZSwge1xuICAgIGZpbGVOYW1lOiBmaWxlLm5hbWUsXG4gICAgcHJvZ3Jlc3M6IHtwZXJjZW50OiAwLCBtZXNzYWdlOiAnbG9hZGluZy4uLid9XG4gIH0pO1xuXG4gIGNvbnN0IHtsb2FkZXJzLCBsb2FkT3B0aW9uc30gPSBzdGF0ZTtcbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHN0YXRlV2l0aFByb2dyZXNzLFxuICAgIG1ha2VMb2FkRmlsZVRhc2soXG4gICAgICBmaWxlLFxuICAgICAgbmV4dFN0YXRlLmZpbGVMb2FkaW5nICYmIG5leHRTdGF0ZS5maWxlTG9hZGluZy5maWxlQ2FjaGUsXG4gICAgICBsb2FkZXJzLFxuICAgICAgbG9hZE9wdGlvbnMsXG4gICAgICBuZXh0U3RhdGUuZmlsZUxvYWRpbmcgPyBuZXh0U3RhdGUuZmlsZUxvYWRpbmcuY29tcGFuaW9uRmlsZXMgOiB1bmRlZmluZWRcbiAgICApXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlTG9hZEZpbGVUYXNrKFxuICBmaWxlLFxuICBmaWxlQ2FjaGUsXG4gIGxvYWRlcnM6IExvYWRlcltdID0gW10sXG4gIGxvYWRPcHRpb25zID0ge30sXG4gIGNvbXBhbmlvbkZpbGVzPzogRmlsZVtdXG4pIHtcbiAgcmV0dXJuIExPQURfRklMRV9UQVNLKHtmaWxlLCBmaWxlQ2FjaGUsIGxvYWRlcnMsIGxvYWRPcHRpb25zLCBjb21wYW5pb25GaWxlc30pLmJpbWFwKFxuICAgIC8vIHByZXR0aWVyIGlnbm9yZVxuICAgIC8vIHN1Y2Nlc3NcbiAgICBnZW4gPT5cbiAgICAgIG5leHRGaWxlQmF0Y2goe1xuICAgICAgICBnZW4sXG4gICAgICAgIGZpbGVOYW1lOiBmaWxlLm5hbWUsXG4gICAgICAgIG9uRmluaXNoOiByZXN1bHQgPT5cbiAgICAgICAgICBwcm9jZXNzRmlsZUNvbnRlbnQoe1xuICAgICAgICAgICAgY29udGVudDogcmVzdWx0LFxuICAgICAgICAgICAgZmlsZUNhY2hlXG4gICAgICAgICAgfSlcbiAgICAgIH0pLFxuXG4gICAgLy8gZXJyb3JcbiAgICBlcnIgPT4gbG9hZEZpbGVzRXJyKGZpbGUubmFtZSwgZXJyKVxuICApO1xufVxuXG4vKipcbiAqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Qcm9jZXNzRmlsZUNvbnRlbnRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtjb250ZW50LCBmaWxlQ2FjaGV9ID0gYWN0aW9uLnBheWxvYWQ7XG5cbiAgY29uc3Qgc3RhdGVXaXRoUHJvZ3Jlc3MgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihzdGF0ZSwge1xuICAgIGZpbGVOYW1lOiBjb250ZW50LmZpbGVOYW1lLFxuICAgIHByb2dyZXNzOiB7cGVyY2VudDogMSwgbWVzc2FnZTogJ3Byb2Nlc3NpbmcuLi4nfVxuICB9KTtcblxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgc3RhdGVXaXRoUHJvZ3Jlc3MsXG4gICAgUFJPQ0VTU19GSUxFX0RBVEEoe2NvbnRlbnQsIGZpbGVDYWNoZX0pLmJpbWFwKFxuICAgICAgcmVzdWx0ID0+IGxvYWRGaWxlU3RlcFN1Y2Nlc3Moe2ZpbGVOYW1lOiBjb250ZW50LmZpbGVOYW1lLCBmaWxlQ2FjaGU6IHJlc3VsdH0pLFxuICAgICAgZXJyID0+IGxvYWRGaWxlc0Vycihjb250ZW50LmZpbGVOYW1lLCBlcnIpXG4gICAgKVxuICApO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQcm9ncmVzcyhwcmV2UHJvZ3Jlc3MgPSB7fSwgcHJvZ3Jlc3MpIHtcbiAgLy8gVGhpcyBoYXBwZW5zIHdoZW4gcmVjZWl2aW5nIHF1ZXJ5IG1ldGFkYXRhIG9yIG90aGVyIGNhc2VzIHdlIGRvbid0XG4gIC8vIGhhdmUgYW4gdXBkYXRlIGZvciB0aGUgdXNlci5cbiAgaWYgKCFwcm9ncmVzcyB8fCAhcHJvZ3Jlc3MucGVyY2VudCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcGVyY2VudDogcHJvZ3Jlc3MucGVyY2VudFxuICB9O1xufVxuXG4vKipcbiAqIGdldHMgY2FsbGVkIHdpdGggcGF5bG9hZCA9IEFzeW5jR2VuZXJhdG9yPD8/Pz5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBuZXh0RmlsZUJhdGNoVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7XG4gICAgcGF5bG9hZDoge2dlbiwgZmlsZU5hbWUsIHByb2dyZXNzLCBhY2N1bXVsYXRlZCwgb25GaW5pc2h9XG4gIH06IFZpc1N0YXRlQWN0aW9ucy5OZXh0RmlsZUJhdGNoVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBzdGF0ZVdpdGhQcm9ncmVzcyA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7XG4gICAgZmlsZU5hbWUsXG4gICAgcHJvZ3Jlc3M6IHBhcnNlUHJvZ3Jlc3Moc3RhdGUuZmlsZUxvYWRpbmdQcm9ncmVzc1tmaWxlTmFtZV0sIHByb2dyZXNzKVxuICB9KTtcblxuICByZXR1cm4gd2l0aFRhc2soc3RhdGVXaXRoUHJvZ3Jlc3MsIFtcbiAgICAuLi4oZ2V0QXBwbGljYXRpb25Db25maWcoKS51c2VBcnJvd1Byb2dyZXNzaXZlTG9hZGluZyAmJlxuICAgIGZpbGVOYW1lLmVuZHNXaXRoKCdhcnJvdycpICYmXG4gICAgYWNjdW11bGF0ZWQ/LmRhdGE/Lmxlbmd0aCA+IDBcbiAgICAgID8gW1xuICAgICAgICAgIC8vIFNraXAgY29tcGFjdGlvbiB3aGlsZSBiYXRjaGVzIGFyZSBzdGlsbCBhcnJpdmluZy4gVGhlIGNvbXBsZXRlZFxuICAgICAgICAgIC8vIGZpbGUgaXMgY29tcGFjdGVkIG9uY2UgaW4gcHJvY2Vzc0ZpbGVDb250ZW50LlxuICAgICAgICAgIFBST0NFU1NfRklMRV9EQVRBKHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IHsuLi5hY2N1bXVsYXRlZCwgc2tpcEFycm93Q29tcGFjdDogdHJ1ZX0sXG4gICAgICAgICAgICBmaWxlQ2FjaGU6IFtdXG4gICAgICAgICAgfSkuYmltYXAoXG4gICAgICAgICAgICByZXN1bHQgPT4gbG9hZEZpbGVzU3VjY2VzcyhyZXN1bHQpLFxuICAgICAgICAgICAgZXJyID0+IGxvYWRGaWxlc0VycihmaWxlTmFtZSwgZXJyKVxuICAgICAgICAgIClcbiAgICAgICAgXVxuICAgICAgOiBbXSksXG4gICAgVU5XUkFQX1RBU0soZ2VuLm5leHQoKSkuYmltYXAoXG4gICAgICAoe3ZhbHVlLCBkb25lfSkgPT4ge1xuICAgICAgICByZXR1cm4gZG9uZVxuICAgICAgICAgID8gb25GaW5pc2goYWNjdW11bGF0ZWQpXG4gICAgICAgICAgOiBuZXh0RmlsZUJhdGNoKHtcbiAgICAgICAgICAgICAgZ2VuLFxuICAgICAgICAgICAgICBmaWxlTmFtZSxcbiAgICAgICAgICAgICAgcHJvZ3Jlc3M6IHZhbHVlLnByb2dyZXNzLFxuICAgICAgICAgICAgICBhY2N1bXVsYXRlZDogdmFsdWUsXG4gICAgICAgICAgICAgIG9uRmluaXNoXG4gICAgICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBlcnIgPT4gbG9hZEZpbGVzRXJyKGZpbGVOYW1lLCBlcnIpXG4gICAgKVxuICBdKTtcbn07XG5cbi8qKlxuICogVHJpZ2dlciBsb2FkaW5nIGZpbGUgZXJyb3JcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBsb2FkRmlsZXNFcnJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtlcnJvciwgZmlsZU5hbWV9OiBWaXNTdGF0ZUFjdGlvbnMuTG9hZEZpbGVzRXJyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICAvLyB1cGRhdGUgdWkgd2l0aCBlcnJvciBtZXNzYWdlXG4gIENvbnNvbGUud2FybihlcnJvcik7XG4gIGlmICghc3RhdGUuZmlsZUxvYWRpbmcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qge2ZpbGVzVG9Mb2FkLCBvbkZpbmlzaCwgZmlsZUNhY2hlfSA9IHN0YXRlLmZpbGVMb2FkaW5nO1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7XG4gICAgZmlsZU5hbWUsXG4gICAgcHJvZ3Jlc3M6IHtlcnJvcn1cbiAgfSk7XG5cbiAgLy8ga2ljayBvZmYgbmV4dCBmaWxlIG9yIGZpbmlzaFxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgbmV4dFN0YXRlLFxuICAgIERFTEFZX1RBU0soMjAwKS5tYXAoZmlsZXNUb0xvYWQubGVuZ3RoID8gbG9hZE5leHRGaWxlIDogKCkgPT4gb25GaW5pc2goZmlsZUNhY2hlKSlcbiAgKTtcbn07XG5cbi8qKlxuICogV2hlbiBzZWxlY3QgZGF0YXNldCBmb3IgZXhwb3J0LCBhcHBseSBjcHUgZmlsdGVyIHRvIHNlbGVjdGVkIGRhdGFzZXRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhcHBseUNQVUZpbHRlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZH06IFZpc1N0YXRlQWN0aW9ucy5BcHBseUNQVUZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgLy8gYXBwbHkgY3B1RmlsdGVyXG4gIGNvbnN0IGRhdGFJZHMgPSB0b0FycmF5KGRhdGFJZCk7XG5cbiAgcmV0dXJuIGRhdGFJZHMucmVkdWNlKChhY2N1LCBpZCkgPT4gZmlsdGVyRGF0YXNldENQVShhY2N1LCBpZCksIHN0YXRlKTtcbn07XG5cbi8qKlxuICogVXNlciBpbnB1dCB0byB1cGRhdGUgdGhlIGluZm8gb2YgdGhlIG1hcFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldE1hcEluZm9VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldE1hcEluZm9VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbWFwSW5mbzoge1xuICAgIC4uLnN0YXRlLm1hcEluZm8sXG4gICAgLi4uYWN0aW9uLmluZm9cbiAgfVxufSk7XG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byB1cGRhdGUgQWxsIGxheWVyIGRvbWFpbiBhbmQgbGF5ZXIgZGF0YSBvZiBzdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkRGVmYXVsdExheWVycyhcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBkYXRhc2V0czogRGF0YXNldHNcbik6IHtzdGF0ZTogVmlzU3RhdGU7IG5ld0xheWVyczogTGF5ZXJbXX0ge1xuICBjb25zdCBlbXB0eTogTGF5ZXJbXSA9IFtdO1xuICBjb25zdCBkZWZhdWx0TGF5ZXJzID0gT2JqZWN0LnZhbHVlcyhkYXRhc2V0cykucmVkdWNlKChhY2N1OiBMYXllcltdLCBkYXRhc2V0KSA9PiB7XG4gICAgY29uc3QgZm91bmRMYXllcnMgPSBmaW5kRGVmYXVsdExheWVyKGRhdGFzZXQsIHN0YXRlLmxheWVyQ2xhc3Nlcyk7XG4gICAgcmV0dXJuIGZvdW5kTGF5ZXJzICYmIGZvdW5kTGF5ZXJzLmxlbmd0aCA/IGFjY3UuY29uY2F0KGZvdW5kTGF5ZXJzKSA6IGFjY3U7XG4gIH0sIGVtcHR5KTtcblxuICByZXR1cm4ge1xuICAgIHN0YXRlOiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGxheWVyczogWy4uLnN0YXRlLmxheWVycywgLi4uZGVmYXVsdExheWVyc10sXG4gICAgICBsYXllck9yZGVyOiBbXG4gICAgICAgIC8vIHB1dCBuZXcgbGF5ZXJzIG9uIHRvcCBvZiBvbGQgb25lcyBpbiByZXZlcnNlXG4gICAgICAgIC4uLmdldExheWVyT3JkZXJGcm9tTGF5ZXJzKGRlZmF1bHRMYXllcnMpLFxuICAgICAgICAuLi5zdGF0ZS5sYXllck9yZGVyXG4gICAgICBdXG4gICAgfSxcbiAgICBuZXdMYXllcnM6IGRlZmF1bHRMYXllcnNcbiAgfTtcbn1cblxuLyoqXG4gKiBoZWxwZXIgZnVuY3Rpb24gdG8gZmluZCBkZWZhdWx0IHRvb2x0aXBzXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhc2V0XG4gKiBAcmV0dXJucyB7T2JqZWN0fSBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZERlZmF1bHRUb29sdGlwcyhzdGF0ZSwgZGF0YXNldCkge1xuICBjb25zdCB0b29sdGlwRmllbGRzID0gZmluZEZpZWxkc1RvU2hvdyh7XG4gICAgLi4uZGF0YXNldCxcbiAgICBtYXhEZWZhdWx0VG9vbHRpcHM6IHN0YXRlLm1heERlZmF1bHRUb29sdGlwc1xuICB9KTtcbiAgY29uc3QgbWVyZ2VkID0ge1xuICAgIC4uLnN0YXRlLmludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAuY29uZmlnLmZpZWxkc1RvU2hvdyxcbiAgICAuLi50b29sdGlwRmllbGRzXG4gIH07XG5cbiAgcmV0dXJuIHNldChbJ2ludGVyYWN0aW9uQ29uZmlnJywgJ3Rvb2x0aXAnLCAnY29uZmlnJywgJ2ZpZWxkc1RvU2hvdyddLCBtZXJnZWQsIHN0YXRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxGaWxlTG9hZGluZ1Byb2dyZXNzKGZpbGUsIGluZGV4KSB7XG4gIGNvbnN0IGZpbGVOYW1lID0gZmlsZS5uYW1lIHx8IGBVbnRpdGxlZCBGaWxlICR7aW5kZXh9YDtcbiAgcmV0dXJuIHtcbiAgICBbZmlsZU5hbWVdOiB7XG4gICAgICAvLyBwZXJjZW50IG9mIGN1cnJlbnQgZmlsZVxuICAgICAgcGVyY2VudDogMCxcbiAgICAgIG1lc3NhZ2U6ICcnLFxuICAgICAgZmlsZU5hbWUsXG4gICAgICBlcnJvcjogbnVsbFxuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7ZmlsZU5hbWUsIHByb2dyZXNzfSkge1xuICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gIHJldHVybiBwaWNrXygnZmlsZUxvYWRpbmdQcm9ncmVzcycpKHBpY2tfKGZpbGVOYW1lKShtZXJnZV8ocHJvZ3Jlc3MpKSkoc3RhdGUpO1xufVxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gdXBkYXRlIGxheWVyIGRvbWFpbnMgZm9yIGFuIGFycmF5IG9mIGRhdGFzZXRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGE8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGRhdGFJZDogc3RyaW5nIHwgc3RyaW5nW10sXG4gIHVwZGF0ZWRGaWx0ZXI/OiBGaWx0ZXJcbik6IFMge1xuICBjb25zdCBkYXRhSWRzID0gdHlwZW9mIGRhdGFJZCA9PT0gJ3N0cmluZycgPyBbZGF0YUlkXSA6IGRhdGFJZDtcbiAgY29uc3QgbmV3TGF5ZXJzOiBMYXllcltdID0gW107XG4gIGNvbnN0IG5ld0xheWVyRGF0YTogYW55W10gPSBbXTtcblxuICBzdGF0ZS5sYXllcnMuZm9yRWFjaCgob2xkTGF5ZXIsIGkpID0+IHtcbiAgICBpZiAob2xkTGF5ZXIuY29uZmlnLmRhdGFJZCAmJiBkYXRhSWRzLmluY2x1ZGVzKG9sZExheWVyLmNvbmZpZy5kYXRhSWQpKSB7XG4gICAgICAvLyBObyBuZWVkIHRvIHJlY2FsY3VsYXRlIGxheWVyIGRvbWFpbiBpZiBmaWx0ZXIgaGFzIGZpeGVkIGRvbWFpblxuICAgICAgY29uc3QgbmV3TGF5ZXIgPVxuICAgICAgICB1cGRhdGVkRmlsdGVyICYmIHVwZGF0ZWRGaWx0ZXIuZml4ZWREb21haW5cbiAgICAgICAgICA/IG9sZExheWVyXG4gICAgICAgICAgOiBvbGRMYXllci51cGRhdGVMYXllckRvbWFpbihzdGF0ZS5kYXRhc2V0cywgdXBkYXRlZEZpbHRlcik7XG5cbiAgICAgIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIHN0YXRlLmxheWVyRGF0YVtpXSk7XG5cbiAgICAgIG5ld0xheWVycy5wdXNoKGxheWVyKTtcbiAgICAgIG5ld0xheWVyRGF0YS5wdXNoKGxheWVyRGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0xheWVycy5wdXNoKG9sZExheWVyKTtcbiAgICAgIG5ld0xheWVyRGF0YS5wdXNoKHN0YXRlLmxheWVyRGF0YVtpXSk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IG5ld0xheWVycyxcbiAgICBsYXllckRhdGE6IG5ld0xheWVyRGF0YVxuICB9O1xuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUFuaW1hdGlvbkRvbWFpbjxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTKTogUyB7XG4gIC8vIG1lcmdlIGFsbCBhbmltYXRhYmxlIGxheWVyIGRvbWFpbiBhbmQgdXBkYXRlIGdsb2JhbCBjb25maWdcbiAgY29uc3QgYW5pbWF0YWJsZUxheWVycyA9IGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzKHN0YXRlLmxheWVycyk7XG5cbiAgaWYgKCFhbmltYXRhYmxlTGF5ZXJzLmxlbmd0aCkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICAgIGRvbWFpbjogbnVsbCxcbiAgICAgICAgaXNBbmltYXRpbmc6IGZhbHNlLFxuICAgICAgICB0aW1lU3RlcHM6IG51bGwsXG4gICAgICAgIGRlZmF1bHRUaW1lRm9ybWF0OiBudWxsXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGxheWVyRG9tYWlucyA9IGFuaW1hdGFibGVMYXllcnMubWFwKGwgPT4gbC5jb25maWcuYW5pbWF0aW9uLmRvbWFpbiB8fCBbXSk7XG4gIC8vIEB0cy1pZ25vcmVcbiAgY29uc3QgbWVyZ2VkRG9tYWluID0gbWVyZ2VUaW1lRG9tYWlucyhsYXllckRvbWFpbnMpO1xuICBjb25zdCBkZWZhdWx0VGltZUZvcm1hdCA9IGdldFRpbWVXaWRnZXRUaXRsZUZvcm1hdHRlcihtZXJnZWREb21haW4pO1xuXG4gIC8vIG1lcmdlIHRpbWVTdGVwc1xuICBsZXQgbWVyZ2VkVGltZVN0ZXBzOiBudW1iZXJbXSB8IG51bGwgPSB1bmlxPG51bWJlcj4oXG4gICAgYW5pbWF0YWJsZUxheWVycy5yZWR1Y2UoKGFjY3UsIGxheWVyKSA9PiB7XG4gICAgICBhY2N1LnB1c2goLi4uKGxheWVyLmNvbmZpZy5hbmltYXRpb24udGltZVN0ZXBzIHx8IFtdKSk7XG4gICAgICByZXR1cm4gYWNjdTtcbiAgICB9LCBbXSlcbiAgKS5zb3J0KCk7XG5cbiAgbWVyZ2VkVGltZVN0ZXBzID0gbWVyZ2VkVGltZVN0ZXBzLmxlbmd0aCA/IG1lcmdlZFRpbWVTdGVwcyA6IG51bGw7XG5cbiAgLy8gVE9ETzogYmV0dGVyIGhhbmRsaW5nIG9mIGR1cmF0aW9uIGNhbGN1bGF0aW9uXG4gIGNvbnN0IGR1cmF0aW9uID0gbWVyZ2VkVGltZVN0ZXBzXG4gICAgPyAoQkFTRV9TUEVFRCAqICgxMDAwIC8gRlBTKSkgLyBtZXJnZWRUaW1lU3RlcHMubGVuZ3RoIC8gKHN0YXRlLmFuaW1hdGlvbkNvbmZpZy5zcGVlZCB8fCAxKVxuICAgIDogbnVsbDtcblxuICBjb25zdCBuZXh0U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICBkb21haW46IG1lcmdlZERvbWFpbixcbiAgICAgIGRlZmF1bHRUaW1lRm9ybWF0LFxuICAgICAgZHVyYXRpb24sXG4gICAgICB0aW1lU3RlcHM6IG1lcmdlZFRpbWVTdGVwc1xuICAgIH1cbiAgfTtcblxuICAvLyByZXNldCBjdXJyZW50VGltZSBiYXNlZCBvbiBuZXcgZG9tYWluXG4gIGNvbnN0IHN5bmNlZEZpbHRlciA9IHN0YXRlLmZpbHRlcnM/LmZpbmQoZiA9PiAoZiBhcyBUaW1lUmFuZ2VGaWx0ZXIpLnN5bmNlZFdpdGhMYXllclRpbWVsaW5lKSBhc1xuICAgIHwgVGltZVJhbmdlRmlsdGVyXG4gICAgfCB1bmRlZmluZWQ7XG5cbiAgLy8gaWYgc3luY2VkIGZpbHRlciBleGlzdCB3ZWUgbmVlZCB0byBtZXJnZSBhbmltYXRpb25Db25maWcgYW5kIGZpbHRlciBkb21haW5zXG4gIC8vIGFuZCB2YWxpZGF0ZSB0aGUgY3VycmVudCB0aW1lIGFnYWluc3QgdGhlIG5ldyBtZXJnZWQgZG9tYWluXG4gIGNvbnN0IG5ld0FuaW1hdGlvbkRvbWFpbiA9IHN5bmNlZEZpbHRlclxuICAgID8gbWVyZ2VUaW1lRG9tYWlucyhbbWVyZ2VkRG9tYWluLCBzeW5jZWRGaWx0ZXIuZG9tYWluXSlcbiAgICA6IG1lcmdlZERvbWFpbjtcbiAgY29uc3QgY3VycmVudFRpbWUgPSBpc0luUmFuZ2Uoc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmN1cnJlbnRUaW1lLCBuZXdBbmltYXRpb25Eb21haW4pXG4gICAgPyBzdGF0ZS5hbmltYXRpb25Db25maWcuY3VycmVudFRpbWVcbiAgICA6IG5ld0FuaW1hdGlvbkRvbWFpblswXTtcblxuICBpZiAoY3VycmVudFRpbWUgIT09IHN0YXRlLmFuaW1hdGlvbkNvbmZpZy5jdXJyZW50VGltZSkge1xuICAgIC8vIGlmIGN1cnJlbnRUaW1lIGNoYW5nZWQsIG5lZWQgdG8gY2FsbCBhbmltYXRpb25UaW1lVXBkYXRlciB0byByZSBjYWxsIGZvcm1hdExheWVyRGF0YVxuICAgIHJldHVybiBzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyKG5leHRTdGF0ZSwge3ZhbHVlOiBjdXJyZW50VGltZX0pO1xuICB9XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgdGhlIHN0YXR1cyBvZiB0aGUgZWRpdG9yXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgY29uc3Qgc2V0RWRpdG9yTW9kZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge21vZGV9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RWRpdG9yTW9kZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qgc2tldGNoZXNFbmFibGVkID0gZ2V0QXBwbGljYXRpb25Db25maWcoKS5lbmFibGVEcmF3T25NYXBTa2V0Y2hlcztcbiAgaWYgKFxuICAgICFza2V0Y2hlc0VuYWJsZWQgJiZcbiAgICAobW9kZSA9PT0gRURJVE9SX01PREVTLkRSQVdfUE9JTlQgfHwgbW9kZSA9PT0gRURJVE9SX01PREVTLkRSQVdfTElORVNUUklORylcbiAgKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIG1vZGUsXG4gICAgICBzZWxlY3RlZEZlYXR1cmU6IG51bGxcbiAgICB9XG4gIH07XG59O1xuXG4vLyBjb25zdCBmZWF0dXJlVG9GaWx0ZXJWYWx1ZSA9IChmZWF0dXJlKSA9PiAoey4uLmZlYXR1cmUsIGlkOiBmZWF0dXJlLmlkfSk7XG4vKipcbiAqIFVwZGF0ZSBlZGl0b3IgZmVhdHVyZXNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGZWF0dXJlc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2ZlYXR1cmVzID0gW119OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmVhdHVyZXNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGxhc3RGZWF0dXJlID0gZmVhdHVyZXMubGVuZ3RoICYmIGZlYXR1cmVzW2ZlYXR1cmVzLmxlbmd0aCAtIDFdO1xuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgLy8gb25seSBzYXZlIG5vbmUgZmlsdGVyIGZlYXR1cmVzIHRvIGVkaXRvclxuICAgICAgZmVhdHVyZXM6IGZlYXR1cmVzLmZpbHRlcihmID0+ICFnZXRGaWx0ZXJJZEluRmVhdHVyZShmKSksXG4gICAgICBtb2RlOlxuICAgICAgICBsYXN0RmVhdHVyZSAmJiBsYXN0RmVhdHVyZS5wcm9wZXJ0aWVzPy5pc0Nsb3NlZFxuICAgICAgICAgID8gbGFzdEZlYXR1cmUucHJvcGVydGllcz8uc2hhcGUgPT09ICdSZWN0YW5nbGUnXG4gICAgICAgICAgICA/IHN0YXRlLmVkaXRvci5tb2RlXG4gICAgICAgICAgICA6IEVESVRPUl9NT0RFUy5FRElUXG4gICAgICAgICAgOiBzdGF0ZS5lZGl0b3IubW9kZVxuICAgIH1cbiAgfTtcblxuICAvLyBSZXRyaWV2ZSBleGlzdGluZyBmZWF0dXJlXG4gIGNvbnN0IHtzZWxlY3RlZEZlYXR1cmV9ID0gc3RhdGUuZWRpdG9yO1xuXG4gIC8vIElmIG5vIGZlYXR1cmUgaXMgc2VsZWN0ZWQgd2UgY2FuIHNpbXBseSByZXR1cm4gc2luY2Ugbm8gb3BlcmF0aW9uc1xuICBpZiAoIXNlbGVjdGVkRmVhdHVyZSkge1xuICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgfVxuXG4gIC8vIFRPRE86IGNoZWNrIGlmIHRoZSBmZWF0dXJlIGhhcyBjaGFuZ2VkXG4gIGNvbnN0IGZlYXR1cmUgPSBmZWF0dXJlcy5maW5kKGYgPT4gZi5pZCA9PT0gc2VsZWN0ZWRGZWF0dXJlLmlkKTtcblxuICAvLyBpZiBmZWF0dXJlIGlzIHBhcnQgb2YgYSBmaWx0ZXJcbiAgY29uc3QgZmlsdGVySWQgPSBmZWF0dXJlICYmIGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpO1xuICBpZiAoZmlsdGVySWQgJiYgZmVhdHVyZSkge1xuICAgIC8vIGFkZCBiYm94IGZvciBwb2x5Z29uIGZpbHRlciB0byBzcGVlZCB1cCBmaWx0ZXJpbmdcbiAgICBpZiAoZmVhdHVyZS5wcm9wZXJ0aWVzKSBmZWF0dXJlLnByb3BlcnRpZXMuYmJveCA9IGJib3goZmVhdHVyZSBhcyB1bmtub3duIGFzIEFsbEdlb0pTT04pO1xuICAgIGNvbnN0IGZlYXR1cmVWYWx1ZSA9IGZlYXR1cmVUb0ZpbHRlclZhbHVlKGZlYXR1cmUsIGZpbHRlcklkKTtcbiAgICBjb25zdCBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmaWwgPT4gZmlsLmlkID09PSBmaWx0ZXJJZCk7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgICBpZHg6IGZpbHRlcklkeCxcbiAgICAgIHByb3A6ICd2YWx1ZScsXG4gICAgICB2YWx1ZTogZmVhdHVyZVZhbHVlXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbmZ1bmN0aW9uIGZpbmRFZGl0b3JGZWF0dXJlKHN0YXRlOiBWaXNTdGF0ZSwgZmVhdHVyZT86IEZlYXR1cmUgfCBudWxsKTogRmVhdHVyZSB8IG51bGwge1xuICBpZiAoIWZlYXR1cmU/LmlkKSB7XG4gICAgcmV0dXJuIGZlYXR1cmUgfHwgbnVsbDtcbiAgfVxuICBpZiAoc3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZT8uaWQgPT09IGZlYXR1cmUuaWQpIHtcbiAgICByZXR1cm4gc3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZTtcbiAgfVxuICBjb25zdCBmcm9tRWRpdG9yID0gc3RhdGUuZWRpdG9yLmZlYXR1cmVzLmZpbmQoaXRlbSA9PiBpdGVtLmlkID09PSBmZWF0dXJlLmlkKTtcbiAgaWYgKGZyb21FZGl0b3IpIHtcbiAgICByZXR1cm4gZnJvbUVkaXRvcjtcbiAgfVxuICBjb25zdCBmaWx0ZXJJZCA9IGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpO1xuICBpZiAoZmlsdGVySWQpIHtcbiAgICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoaXRlbSA9PiBpdGVtLmlkID09PSBmaWx0ZXJJZCk7XG4gICAgaWYgKGZpbHRlcj8udmFsdWUpIHtcbiAgICAgIHJldHVybiBmaWx0ZXIudmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmZWF0dXJlO1xufVxuXG4vKipcbiAqIFNldCB1c2VyLWZhY2luZyBHZW9KU09OIHByb3BlcnRpZXMgb24gYSBza2V0Y2ggb3IgcG9seWdvbi1maWx0ZXIgZmVhdHVyZS5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRFZGl0b3JGZWF0dXJlUHJvcGVydGllc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2ZlYXR1cmUsIHByb3BlcnRpZXN9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RWRpdG9yRmVhdHVyZVByb3BlcnRpZXNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICghZ2V0QXBwbGljYXRpb25Db25maWcoKS5lbmFibGVEcmF3T25NYXBTa2V0Y2hlcykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHNvdXJjZSA9IGZpbmRFZGl0b3JGZWF0dXJlKHN0YXRlLCBmZWF0dXJlKTtcbiAgaWYgKCFzb3VyY2U/LmlkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV4dEZlYXR1cmUgPSBtZXJnZVVzZXJGZWF0dXJlUHJvcGVydGllcyhzb3VyY2UsIHByb3BlcnRpZXMpO1xuICBjb25zdCBmaWx0ZXJJZCA9IGdldEZpbHRlcklkSW5GZWF0dXJlKG5leHRGZWF0dXJlKTtcbiAgY29uc3QgbmV4dEVkaXRvciA9IHtcbiAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgZmVhdHVyZXM6IGZpbHRlcklkXG4gICAgICA/IHN0YXRlLmVkaXRvci5mZWF0dXJlc1xuICAgICAgOiBzdGF0ZS5lZGl0b3IuZmVhdHVyZXMubWFwKGl0ZW0gPT4gKGl0ZW0uaWQgPT09IG5leHRGZWF0dXJlLmlkID8gbmV4dEZlYXR1cmUgOiBpdGVtKSksXG4gICAgc2VsZWN0ZWRGZWF0dXJlOlxuICAgICAgc3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZT8uaWQgPT09IG5leHRGZWF0dXJlLmlkXG4gICAgICAgID8gbmV4dEZlYXR1cmVcbiAgICAgICAgOiBzdGF0ZS5lZGl0b3Iuc2VsZWN0ZWRGZWF0dXJlXG4gIH07XG5cbiAgY29uc3QgbmV4dFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjogbmV4dEVkaXRvclxuICB9O1xuXG4gIGlmICghZmlsdGVySWQpIHtcbiAgICByZXR1cm4gbmV4dFN0YXRlO1xuICB9XG5cbiAgY29uc3QgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmlkID09PSBmaWx0ZXJJZCk7XG4gIGlmIChmaWx0ZXJJZHggPCAwKSB7XG4gICAgcmV0dXJuIG5leHRTdGF0ZTtcbiAgfVxuXG4gIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKG5leHRTdGF0ZSwge1xuICAgIGlkeDogZmlsdGVySWR4LFxuICAgIHByb3A6ICd2YWx1ZScsXG4gICAgdmFsdWU6IGZlYXR1cmVUb0ZpbHRlclZhbHVlKG5leHRGZWF0dXJlLCBmaWx0ZXJJZClcbiAgfSk7XG59XG5cbi8qKlxuICogU2V0IHRoZSBjdXJyZW50IHNlbGVjdGVkIGZlYXR1cmVcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldFNlbGVjdGVkRmVhdHVyZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2ZlYXR1cmUsIHNlbGVjdGlvbkNvbnRleHR9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0U2VsZWN0ZWRGZWF0dXJlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICAvLyBhZGQgYmJveCBmb3IgcG9seWdvbiBmaWx0ZXIgdG8gc3BlZWQgdXAgZmlsdGVyaW5nXG4gIGxldCBzZWxlY3RlZEZlYXR1cmUgPSBmZWF0dXJlO1xuICBpZiAoZmVhdHVyZT8ucHJvcGVydGllcykge1xuICAgIHNlbGVjdGVkRmVhdHVyZSA9IHtcbiAgICAgIC4uLmZlYXR1cmUsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIC4uLmZlYXR1cmUucHJvcGVydGllcyxcbiAgICAgICAgYmJveDogYmJveChmZWF0dXJlIGFzIHVua25vd24gYXMgQWxsR2VvSlNPTilcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBzZWxlY3RlZEZlYXR1cmUsXG4gICAgICBzZWxlY3Rpb25Db250ZXh0XG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBEZWxldGUgZXhpc3RpbmcgZmVhdHVyZSBmcm9tIGZpbHRlcnNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxldGVGZWF0dXJlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZmVhdHVyZX06IFZpc1N0YXRlQWN0aW9ucy5EZWxldGVGZWF0dXJlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIWZlYXR1cmUpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbFxuICAgIH1cbiAgfTtcblxuICBpZiAoZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSkpIHtcbiAgICBjb25zdCBmaWx0ZXJJZHggPSBuZXdTdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpKTtcblxuICAgIHJldHVybiBmaWx0ZXJJZHggPiAtMSA/IHJlbW92ZUZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtpZHg6IGZpbHRlcklkeH0pIDogbmV3U3RhdGU7XG4gIH1cblxuICAvLyBtb2RpZnkgZWRpdG9yIG9iamVjdFxuICBjb25zdCBuZXdFZGl0b3IgPSB7XG4gICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgIGZlYXR1cmVzOiBzdGF0ZS5lZGl0b3IuZmVhdHVyZXMuZmlsdGVyKGYgPT4gZi5pZCAhPT0gZmVhdHVyZS5pZCksXG4gICAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IG5ld0VkaXRvclxuICB9O1xufVxuXG4vKipcbiAqIFRvZ2dsZSBmZWF0dXJlIGFzIGxheWVyIGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgcGF5bG9hZDogVmlzU3RhdGVBY3Rpb25zLlNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2xheWVyLCBmZWF0dXJlfSA9IHBheWxvYWQ7XG4gIGNvbnN0IGZpbHRlcklkID0gZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSk7XG5cbiAgLy8gbGV0IG5ld0ZpbHRlciA9IG51bGw7XG4gIGxldCBmaWx0ZXJJZHg7XG4gIGxldCBuZXdMYXllcklkID0gW2xheWVyLmlkXTtcbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIC8vIElmIHBvbHlnb24gZmlsdGVyIGFscmVhZHkgZXhpc3RzLCB3ZSBuZWVkIHRvIGZpbmQgb3V0IGlmIHRoZSBjdXJyZW50IGxheWVyIGlzIGFscmVhZHkgaW5jbHVkZWRcbiAgaWYgKGZpbHRlcklkKSB7XG4gICAgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBmaWx0ZXJJZCk7XG5cbiAgICBpZiAoIXN0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSkge1xuICAgICAgLy8gd2hhdCBpZiBmaWx0ZXIgZG9lc24ndCBleGlzdD8uLi4gbm90IHBvc3NpYmxlLlxuICAgICAgLy8gYmVjYXVzZSBmZWF0dXJlcyBpbiB0aGUgZWRpdG9yIGlzIHBhc3NlZCBpbiBmcm9tIGZpbHRlcnMgYW5kIGVkaXRvcnMuXG4gICAgICAvLyBidXQgd2Ugd2lsbCBtb3ZlIHRoaXMgZmVhdHVyZSBiYWNrIHRvIGVkaXRvciBqdXN0IGluIGNhc2VcbiAgICAgIGNvbnN0IG5vbmVGaWx0ZXJGZWF0dXJlID0ge1xuICAgICAgICAuLi5mZWF0dXJlLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgLi4uZmVhdHVyZS5wcm9wZXJ0aWVzLFxuICAgICAgICAgIGZpbHRlcklkOiBudWxsXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBlZGl0b3I6IHtcbiAgICAgICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAgICAgZmVhdHVyZXM6IFsuLi5zdGF0ZS5lZGl0b3IuZmVhdHVyZXMsIG5vbmVGaWx0ZXJGZWF0dXJlXSxcbiAgICAgICAgICBzZWxlY3RlZEZlYXR1cmU6IG5vbmVGaWx0ZXJGZWF0dXJlXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnNbZmlsdGVySWR4XTtcbiAgICBjb25zdCB7bGF5ZXJJZCA9IFtdfSA9IGZpbHRlcjtcbiAgICBjb25zdCBpc0xheWVySW5jbHVkZWQgPSBsYXllcklkLmluY2x1ZGVzKGxheWVyLmlkKTtcblxuICAgIG5ld0xheWVySWQgPSBpc0xheWVySW5jbHVkZWRcbiAgICAgID8gLy8gaWYgbGF5ZXIgaXMgaW5jbHVkZWQsIHJlbW92ZSBpdFxuICAgICAgICBsYXllcklkLmZpbHRlcihsID0+IGwgIT09IGxheWVyLmlkKVxuICAgICAgOiBbLi4ubGF5ZXJJZCwgbGF5ZXIuaWRdO1xuXG4gICAgLy8gTGFzdCBsYXllciByZW1vdmVkOiB0dXJuIHRoZSBmaWx0ZXIgcG9seWdvbiBiYWNrIGludG8gYSBza2V0Y2hcbiAgICBpZiAoIW5ld0xheWVySWQubGVuZ3RoKSB7XG4gICAgICBjb25zdCBza2V0Y2hGZWF0dXJlID0gdG9Ta2V0Y2hGZWF0dXJlKGZlYXR1cmUpO1xuICAgICAgY29uc3Qgc3RhdGVXaXRob3V0RmlsdGVyID0gcmVtb3ZlRmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge2lkeDogZmlsdGVySWR4fSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZVdpdGhvdXRGaWx0ZXIsXG4gICAgICAgIGVkaXRvcjoge1xuICAgICAgICAgIC4uLnN0YXRlV2l0aG91dEZpbHRlci5lZGl0b3IsXG4gICAgICAgICAgZmVhdHVyZXM6IFsuLi5zdGF0ZVdpdGhvdXRGaWx0ZXIuZWRpdG9yLmZlYXR1cmVzLCBza2V0Y2hGZWF0dXJlXSxcbiAgICAgICAgICBzZWxlY3RlZEZlYXR1cmU6IHNrZXRjaEZlYXR1cmVcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gaWYgd2UgaGF2ZW4ndCBjcmVhdGUgdGhlIHBvbHlnb24gZmlsdGVyLCBjcmVhdGUgaXRcbiAgICBjb25zdCBuZXdGaWx0ZXIgPSBnZW5lcmF0ZVBvbHlnb25GaWx0ZXIoW10sIGZlYXR1cmUpO1xuICAgIGZpbHRlcklkeCA9IHN0YXRlLmZpbHRlcnMubGVuZ3RoO1xuXG4gICAgLy8gYWRkIGZlYXR1cmUsIHJlbW92ZSBmZWF0dXJlIGZyb20gZWlkdG9yXG4gICAgbmV3U3RhdGUgPSB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGZpbHRlcnM6IFsuLi5zdGF0ZS5maWx0ZXJzLCBuZXdGaWx0ZXJdLFxuICAgICAgZWRpdG9yOiB7XG4gICAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgICAgZmVhdHVyZXM6IHN0YXRlLmVkaXRvci5mZWF0dXJlcy5maWx0ZXIoZiA9PiBmLmlkICE9PSBmZWF0dXJlLmlkKSxcbiAgICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBuZXdGaWx0ZXIudmFsdWVcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZHg6IGZpbHRlcklkeCxcbiAgICBwcm9wOiAnbGF5ZXJJZCcsXG4gICAgdmFsdWU6IG5ld0xheWVySWRcbiAgfSk7XG59XG5cbi8qKlxuICogQXBwbHkgcG9seWdvbiBmaWx0ZXIgdG8gYWxsIHZpc2libGUgbGF5ZXJzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0UG9seWdvbkZpbHRlckFsbExheWVyc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgcGF5bG9hZDogVmlzU3RhdGVBY3Rpb25zLlNldFBvbHlnb25GaWx0ZXJBbGxMYXllcnNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtmZWF0dXJlfSA9IHBheWxvYWQ7XG5cbiAgY29uc3QgbmV3RmlsdGVyID0gZ2VuZXJhdGVQb2x5Z29uRmlsdGVyKFtdLCBmZWF0dXJlKTtcbiAgY29uc3QgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5sZW5ndGg7XG5cbiAgY29uc3QgbmV3U3RhdGU6IFZpc1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IFsuLi5zdGF0ZS5maWx0ZXJzLCBuZXdGaWx0ZXJdLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgZmVhdHVyZXM6IHN0YXRlLmVkaXRvci5mZWF0dXJlcy5maWx0ZXIoZiA9PiBmLmlkICE9PSBmZWF0dXJlLmlkKSxcbiAgICAgIHNlbGVjdGVkRmVhdHVyZTogbmV3RmlsdGVyLnZhbHVlLFxuICAgICAgbW9kZTogRURJVE9SX01PREVTLkVESVRcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgdmlzaWJsZUxheWVySWRzID0gZ2V0KHBheWxvYWQsICd2aXNpYmxlTGF5ZXJJZHMnKTtcbiAgY29uc3QgYWxsTGF5ZXJJZHMgPSBBcnJheS5pc0FycmF5KHZpc2libGVMYXllcklkcylcbiAgICA/IHZpc2libGVMYXllcklkc1xuICAgIDogc3RhdGUubGF5ZXJzLmZpbHRlcihsID0+IGwuY29uZmlnLmlzVmlzaWJsZSkubWFwKGwgPT4gbC5pZCk7XG5cbiAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZHg6IGZpbHRlcklkeCxcbiAgICBwcm9wOiAnbGF5ZXJJZCcsXG4gICAgdmFsdWU6IGFsbExheWVySWRzXG4gIH0pO1xufVxuXG4vKipcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzb3J0VGFibGVDb2x1bW5VcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGNvbHVtbiwgbW9kZX06IFZpc1N0YXRlQWN0aW9ucy5Tb3J0VGFibGVDb2x1bW5VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbGV0IHNvcnRNb2RlID0gbW9kZTtcbiAgaWYgKCFzb3J0TW9kZSkge1xuICAgIGNvbnN0IGN1cnJlbnRNb2RlID0gZ2V0KGRhdGFzZXQsIFsnc29ydENvbHVtbicsIGNvbHVtbl0pO1xuICAgIC8vIEB0cy1pZ25vcmUgLSBzaG91bGQgYmUgZml4YWJsZSBpbiBhIFRTIGZpbGVcbiAgICBzb3J0TW9kZSA9IGN1cnJlbnRNb2RlXG4gICAgICA/IE9iamVjdC5rZXlzKFNPUlRfT1JERVIpLmZpbmQobSA9PiBtICE9PSBjdXJyZW50TW9kZSlcbiAgICAgIDogU09SVF9PUkRFUi5BU0NFTkRJTkc7XG4gIH1cblxuICBjb25zdCBzb3J0ZWQgPSBzb3J0RGF0YXNldEJ5Q29sdW1uKGRhdGFzZXQsIGNvbHVtbiwgc29ydE1vZGUpO1xuICByZXR1cm4gc2V0KFsnZGF0YXNldHMnLCBkYXRhSWRdLCBzb3J0ZWQsIHN0YXRlKTtcbn1cblxuLyoqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGluVGFibGVDb2x1bW5VcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGNvbHVtbn06IFZpc1N0YXRlQWN0aW9ucy5QaW5UYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBuZXdEYXRhc2V0ID0gcGluVGFibGVDb2x1bW5zKGRhdGFzZXQsIGNvbHVtbik7XG5cbiAgcmV0dXJuIHNldChbJ2RhdGFzZXRzJywgZGF0YUlkXSwgbmV3RGF0YXNldCwgc3RhdGUpO1xufVxuXG4vKipcbiAqIENvcHkgY29sdW1uIGNvbnRlbnQgYXMgc3RyaW5nc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvcHlUYWJsZUNvbHVtblVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgY29sdW1ufTogVmlzU3RhdGVBY3Rpb25zLkNvcHlUYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBmaWVsZElkeCA9IGRhdGFzZXQuZmllbGRzLmZpbmRJbmRleChmID0+IGYubmFtZSA9PT0gY29sdW1uKTtcbiAgaWYgKGZpZWxkSWR4IDwgMCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7dHlwZX0gPSBkYXRhc2V0LmZpZWxkc1tmaWVsZElkeF07XG4gIGNvbnN0IHRleHQgPSBkYXRhc2V0LmRhdGFDb250YWluZXJcbiAgICAubWFwKHJvdyA9PiBwYXJzZUZpZWxkVmFsdWUocm93LnZhbHVlQXQoZmllbGRJZHgpLCB0eXBlKSwgdHJ1ZSlcbiAgICAuam9pbignXFxuJyk7XG5cbiAgY29weSh0ZXh0KTtcblxuICByZXR1cm4gc3RhdGU7XG59XG5cbi8qKlxuICogU2V0IGRpc3BsYXkgZm9ybWF0IGZyb20gY29sdW1ucyBmcm9tIHVzZXIgc2VsZWN0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0Q29sdW1uRGlzcGxheUZvcm1hdFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgZm9ybWF0c306IFZpc1N0YXRlQWN0aW9ucy5TZXRDb2x1bW5EaXNwbGF5Rm9ybWF0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxldCBuZXdGaWVsZHMgPSBkYXRhc2V0LmZpZWxkcztcbiAgT2JqZWN0LmtleXMoZm9ybWF0cykuZm9yRWFjaChjb2x1bW4gPT4ge1xuICAgIGNvbnN0IGZpZWxkSWR4ID0gZGF0YXNldC5maWVsZHMuZmluZEluZGV4KGYgPT4gZi5uYW1lID09PSBjb2x1bW4pO1xuICAgIGlmIChmaWVsZElkeCA+PSAwKSB7XG4gICAgICBjb25zdCBkaXNwbGF5Rm9ybWF0ID0gZm9ybWF0c1tjb2x1bW5dO1xuICAgICAgY29uc3QgZmllbGQgPSBuZXdGaWVsZHNbZmllbGRJZHhdO1xuICAgICAgbmV3RmllbGRzID0gc3dhcF8obWVyZ2VfKHtkaXNwbGF5Rm9ybWF0fSkoZmllbGQpIGFzIHtpZDogc3RyaW5nfSkoXG4gICAgICAgIG5ld0ZpZWxkcyBhcyB7aWQ6IHN0cmluZ31bXVxuICAgICAgKSBhcyBGaWVsZFtdO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgbmV3RGF0YXNldCA9IGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7ZmllbGRzOiBuZXdGaWVsZHMgYXMgRmllbGRbXX0pO1xuICBsZXQgbmV3U3RhdGUgPSBwaWNrXygnZGF0YXNldHMnKShtZXJnZV8oe1tkYXRhSWRdOiBuZXdEYXRhc2V0fSkpKHN0YXRlKTtcblxuICAvLyB1cGRhdGUgY29sb3JGaWVsZCBkaXNwbGF5Rm9ybWF0XG4gIG5ld1N0YXRlID0ge1xuICAgIC4uLm5ld1N0YXRlLFxuICAgIGxheWVyczogbmV3U3RhdGUubGF5ZXJzLm1hcChsYXllciA9PlxuICAgICAgbGF5ZXIuY29uZmlnPy5jb2xvckZpZWxkPy5uYW1lICYmIGxheWVyLmNvbmZpZy5jb2xvckZpZWxkLm5hbWUgaW4gZm9ybWF0c1xuICAgICAgICA/IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgICAgIGNvbG9yRmllbGQ6IHtcbiAgICAgICAgICAgICAgLi4ubGF5ZXIuY29uZmlnLmNvbG9yRmllbGQsXG4gICAgICAgICAgICAgIGRpc3BsYXlGb3JtYXQ6IGZvcm1hdHNbbGF5ZXIuY29uZmlnLmNvbG9yRmllbGQubmFtZV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICA6IGxheWVyXG4gICAgKVxuICB9O1xuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxudHlwZSBMb2FkQ29sdW1uU3RhdHNUYXNrUGF5bG9hZCA9IHtcbiAgZGF0YXNldDogVmlzU3RhdGVbJ2RhdGFzZXRzJ11bc3RyaW5nXTtcbiAgZmllbGQ6IEZpZWxkO1xufTtcblxuZnVuY3Rpb24gZ2V0TWFwcGVkVmFsdWUoZmlsdGVyUHJvcHM/OiBGaWx0ZXJQcm9wcyB8IG51bGwpOiB1bmtub3duW10gfCB1bmRlZmluZWQge1xuICBpZiAoZmlsdGVyUHJvcHMgJiYgJ21hcHBlZFZhbHVlJyBpbiBmaWx0ZXJQcm9wcyAmJiBBcnJheS5pc0FycmF5KGZpbHRlclByb3BzLm1hcHBlZFZhbHVlKSkge1xuICAgIHJldHVybiBmaWx0ZXJQcm9wcy5tYXBwZWRWYWx1ZTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiB5aWVsZEZvclBhaW50KCk6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgc2V0VGltZW91dChyZXNvbHZlLCAwKTtcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlcXVlc3REYXRhc2V0Q29sdW1uU3RhdGlzdGljcyh7ZGF0YXNldCwgZmllbGR9OiBMb2FkQ29sdW1uU3RhdHNUYXNrUGF5bG9hZCkge1xuICAvLyBZaWVsZCBzbyB0aGUgZGF0YSB0YWJsZSBhbmQgcGVyLWNvbHVtbiBsb2FkaW5nIHNwaW5uZXJzIGNhbiBwYWludCBmaXJzdC5cbiAgYXdhaXQgeWllbGRGb3JQYWludCgpO1xuICBjb25zdCBmaWx0ZXJQcm9wcyA9IGZpZWxkLmZpbHRlclByb3BzIHx8IGRhdGFzZXQuZ2V0Q29sdW1uRmlsdGVyUHJvcHMoZmllbGQubmFtZSk7XG4gIGNvbnN0IG1hcHBlZFZhbHVlID0gZ2V0TWFwcGVkVmFsdWUoZmlsdGVyUHJvcHMpO1xuICBjb25zdCB2YWx1ZXMgPSBtYXBwZWRWYWx1ZSA/PyBjb2xsZWN0Q29sdW1uVmFsdWVzKGRhdGFzZXQuZGF0YUNvbnRhaW5lciwgZmllbGQuZmllbGRJZHgpO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBnZXRDb2x1bW5TdGF0aXN0aWNzKHtcbiAgICB2YWx1ZXMsXG4gICAgZmllbGRUeXBlOiBmaWVsZC50eXBlXG4gIH0pO1xuXG4gIHJldHVybiB7cmVzdWx0LCBmaWx0ZXJQcm9wc307XG59XG5cbmNvbnN0IExPQURfQ09MVU1OX1NUQVRTX1RBU0sgPSBUYXNrLmZyb21Qcm9taXNlKFxuICByZXF1ZXN0RGF0YXNldENvbHVtblN0YXRpc3RpY3MsXG4gICdMT0FEX0NPTFVNTl9TVEFUU19UQVNLJ1xuKTtcblxuLyoqXG4gKiBTdGFydCBsb2FkaW5nIGNvbHVtbiBzdGF0aXN0aWNzIGZvciBvbmUgb3IgbW9yZSBmaWVsZHMuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZENvbHVtblN0YXRzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBmaWVsZE5hbWV9OiBWaXNTdGF0ZUFjdGlvbnMuTG9hZENvbHVtblN0YXRzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBmaWVsZE5hbWVzVG9Mb2FkID0gdG9BcnJheShmaWVsZE5hbWUpO1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgY29uc3QgZmllbGRzVG9Mb2FkID0gZGF0YXNldD8uZmllbGRzLmZpbHRlcihmID0+IGZpZWxkTmFtZXNUb0xvYWQuaW5jbHVkZXMoZi5uYW1lKSk7XG4gIGlmICghZGF0YXNldCB8fCAhZmllbGRzVG9Mb2FkLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0ZpZWxkcyA9IGRhdGFzZXQuZmllbGRzLm1hcChmaWVsZCA9PlxuICAgIGZpZWxkTmFtZXNUb0xvYWQuaW5jbHVkZXMoZmllbGQubmFtZSkgPyB7Li4uZmllbGQsIGlzTG9hZGluZ1N0YXRzOiB0cnVlfSA6IGZpZWxkXG4gICk7XG4gIGNvbnN0IG5ld0RhdGFzZXQgPSBjb3B5VGFibGVBbmRVcGRhdGUoZGF0YXNldCwge2ZpZWxkczogbmV3RmllbGRzfSk7XG5cbiAgY29uc3QgdGFza3MgPSBmaWVsZHNUb0xvYWQubWFwKGYgPT5cbiAgICBMT0FEX0NPTFVNTl9TVEFUU19UQVNLKHtkYXRhc2V0OiBuZXdEYXRhc2V0LCBmaWVsZDogZn0pLmJpbWFwKFxuICAgICAgKHtyZXN1bHQsIGZpbHRlclByb3BzfSkgPT4gbG9hZENvbHVtblN0YXRzU3VjY2VzcyhuZXdEYXRhc2V0LmlkLCBmLm5hbWUsIHJlc3VsdCwgZmlsdGVyUHJvcHMpLFxuICAgICAgKGVycm9yOiBFcnJvcikgPT4gbG9hZENvbHVtblN0YXRzRXJyb3IobmV3RGF0YXNldC5pZCwgZi5uYW1lLCBlcnJvcilcbiAgICApXG4gICk7XG4gIGNvbnN0IG5leHRTdGF0ZSA9IHBpY2tfKCdkYXRhc2V0cycpKG1lcmdlXyh7W2RhdGFJZF06IG5ld0RhdGFzZXR9KSkoc3RhdGUpO1xuXG4gIHJldHVybiB3aXRoVGFzayhuZXh0U3RhdGUsIHRhc2tzKTtcbn1cblxuLyoqXG4gKiBQZXJzaXN0IGxvYWRlZCBjb2x1bW4gc3RhdGlzdGljcyBvbiB0aGUgZmllbGQuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZENvbHVtblN0YXRzU3VjY2Vzc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge3Jlc3VsdCwgZmlsdGVyUHJvcHMsIGRhdGFJZCwgZmllbGROYW1lfTogVmlzU3RhdGVBY3Rpb25zLkxvYWRDb2x1bW5TdGF0c1N1Y2Nlc3NVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBjb25zdCBmaWVsZCA9IChkYXRhc2V0Py5maWVsZHMgfHwgW10pLmZpbmQoZiA9PiBmLm5hbWUgPT09IGZpZWxkTmFtZSk7XG4gIGlmICghZGF0YXNldCB8fCAhZmllbGQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdGaWx0ZXJQcm9wcyA9IHtcbiAgICAuLi5maWx0ZXJQcm9wcyxcbiAgICBjb2x1bW5TdGF0czogcmVzdWx0XG4gIH07XG4gIGNvbnN0IG5ld0ZpZWxkcyA9IGRhdGFzZXQuZmllbGRzLm1hcChmID0+XG4gICAgZi5uYW1lID09PSBmaWVsZE5hbWUgPyB7Li4uZiwgZmlsdGVyUHJvcHM6IG5ld0ZpbHRlclByb3BzLCBpc0xvYWRpbmdTdGF0czogZmFsc2V9IDogZlxuICApO1xuICBjb25zdCBuZXdEYXRhc2V0ID0gY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHtmaWVsZHM6IG5ld0ZpZWxkc30pO1xuICByZXR1cm4gcGlja18oJ2RhdGFzZXRzJykobWVyZ2VfKHtbZGF0YUlkXTogbmV3RGF0YXNldH0pKShzdGF0ZSk7XG59XG5cbi8qKlxuICogQ2xlYXIgbG9hZGluZyBmbGFnIHdoZW4gY29sdW1uIHN0YXRpc3RpY3MgZmFpbC5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQ29sdW1uU3RhdHNFcnJvclVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2Vycm9yLCBkYXRhSWQsIGZpZWxkTmFtZX06IFZpc1N0YXRlQWN0aW9ucy5Mb2FkQ29sdW1uU3RhdHNFcnJvclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgQ29uc29sZS5lcnJvcihlcnJvcik7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBjb25zdCBmaWVsZCA9IChkYXRhc2V0Py5maWVsZHMgfHwgW10pLmZpbmQoZiA9PiBmLm5hbWUgPT09IGZpZWxkTmFtZSk7XG4gIGlmICghZGF0YXNldCB8fCAhZmllbGQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgbmV3RmllbGRzID0gZGF0YXNldC5maWVsZHMubWFwKGYgPT5cbiAgICBmLm5hbWUgPT09IGZpZWxkTmFtZSA/IHsuLi5mLCBpc0xvYWRpbmdTdGF0czogZmFsc2V9IDogZlxuICApO1xuICBjb25zdCBuZXdEYXRhc2V0ID0gY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHtmaWVsZHM6IG5ld0ZpZWxkc30pO1xuICByZXR1cm4gcGlja18oJ2RhdGFzZXRzJykobWVyZ2VfKHtbZGF0YUlkXTogbmV3RGF0YXNldH0pKShzdGF0ZSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGVkaXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9nZ2xlRWRpdG9yVmlzaWJpbGl0eVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVFZGl0b3JWaXNpYmlsaXR5VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgdmlzaWJsZTogIXN0YXRlLmVkaXRvci52aXNpYmxlXG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIENvbnZlcnQgZWRpdG9yIHNrZXRjaCBmZWF0dXJlcyBpbnRvIGEgR2VvSlNPTiBkYXRhc2V0L2xheWVyIGFuZCBjbGVhciB0aGUgc2tldGNoZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0RWRpdG9yRmVhdHVyZXNUb0xheWVyVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIF9hY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Db252ZXJ0RWRpdG9yRmVhdHVyZXNUb0xheWVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIWdldEFwcGxpY2F0aW9uQ29uZmlnKCkuZW5hYmxlRHJhd09uTWFwU2tldGNoZXMpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBmZWF0dXJlcyA9IHN0YXRlLmVkaXRvci5mZWF0dXJlcztcbiAgaWYgKCFmZWF0dXJlcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgZGF0YTtcbiAgdHJ5IHtcbiAgICBkYXRhID0gcHJvY2Vzc0dlb2pzb24oZWRpdG9yRmVhdHVyZXNUb0ZlYXR1cmVDb2xsZWN0aW9uKGZlYXR1cmVzKSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG4gICAgcmV0dXJuIHdpdGhUYXNrKFxuICAgICAgc3RhdGUsXG4gICAgICBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OKCkubWFwKCgpID0+XG4gICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIGNvbnZlcnQgZHJhd24gZ2VvbWV0cnkgdG8gYSBsYXllcjogJHttZXNzYWdlfWAsXG4gICAgICAgICAgICBpZDogJ2NvbnZlcnQtZWRpdG9yLWZlYXR1cmVzJ1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgY29uc3QgY2xlYXJlZFN0YXRlOiBWaXNTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIGZlYXR1cmVzOiBbXSxcbiAgICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbCxcbiAgICAgIG1vZGU6IEVESVRPUl9NT0RFUy5FRElUXG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGxhYmVsSWQgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA5MCkgKyAxMDtcblxuICByZXR1cm4gdXBkYXRlVmlzRGF0YVVwZGF0ZXIoY2xlYXJlZFN0YXRlLCB7XG4gICAgZGF0YXNldHM6IHtcbiAgICAgIGluZm86IHtcbiAgICAgICAgaWQ6IGBkcmF3bi1nZW9tZXRyeS0ke2dlbmVyYXRlSGFzaElkKDYpfWAsXG4gICAgICAgIGxhYmVsOiBgRHJhd24gR2VvbWV0cnkgJHtsYWJlbElkfWBcbiAgICAgIH0sXG4gICAgICBkYXRhXG4gICAgfSxcbiAgICBvcHRpb25zOiB7XG4gICAgICBrZWVwRXhpc3RpbmdDb25maWc6IHRydWUsXG4gICAgICBjZW50ZXJNYXA6IGZhbHNlLFxuICAgICAgYXV0b0NyZWF0ZUxheWVyczogdHJ1ZVxuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogQ29weSBpbi1tZW1vcnkgcm93cyAob3IgbG9hZGVkIHZlY3Rvci10aWxlIGZlYXR1cmVzKSBpbnNpZGUgdGhlIHNlbGVjdGVkXG4gKiBEcmF3IG9uIE1hcCBwb2x5Z29uIGludG8gYSBuZXcgZGF0YXNldC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3REYXRhRnJvbUZlYXR1cmVVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtsYXllcklkfTogVmlzU3RhdGVBY3Rpb25zLkV4dHJhY3REYXRhRnJvbUZlYXR1cmVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGZlYXR1cmUgPSBzdGF0ZS5lZGl0b3Iuc2VsZWN0ZWRGZWF0dXJlO1xuICBjb25zdCBsYXllciA9IHN0YXRlLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gbGF5ZXJJZCk7XG4gIGNvbnN0IGRhdGFJZCA9IGxheWVyPy5jb25maWcuZGF0YUlkO1xuICBsZXQgZGF0YXNldCA9IGRhdGFJZCA/IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF0gOiBudWxsO1xuXG4gIGlmICghbGF5ZXIgfHwgIWRhdGFzZXQgfHwgIWRhdGFJZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIEdQVSByYW5nZS90aW1lIGZpbHRlcnMgYXJlIG5vdCByZWZsZWN0ZWQgaW4gZmlsdGVyZWRJbmRleDsgZXZhbHVhdGUgdGhlbSBvbiBDUFVcbiAgLy8gdGhlIHNhbWUgd2F5IGV4cG9ydCBkYXRhIGRvZXMsIHRoZW4gY2xpcCB0aGUgcmVzdWx0IHRvIHRoZSBkcmF3aW5nLlxuICBpZiAoIWlzVmVjdG9yVGlsZUV4dHJhY3RMYXllcihsYXllcikpIHtcbiAgICBzdGF0ZSA9IGZpbHRlckRhdGFzZXRDUFUoc3RhdGUsIGRhdGFJZCk7XG4gICAgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gICAgaWYgKCFkYXRhc2V0KSB7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICB9XG5cbiAgbGV0IGV4dHJhY3RlZDtcbiAgdHJ5IHtcbiAgICBleHRyYWN0ZWQgPSBleHRyYWN0Um93c0luc2lkZUZlYXR1cmUoe2xheWVyLCBkYXRhc2V0LCBmZWF0dXJlfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG4gICAgcmV0dXJuIHdpdGhUYXNrKFxuICAgICAgc3RhdGUsXG4gICAgICBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OKCkubWFwKCgpID0+XG4gICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIGV4dHJhY3QgZGF0YTogJHttZXNzYWdlfWAsXG4gICAgICAgICAgICBpZDogJ2V4dHJhY3QtZGF0YS1mcm9tLWZlYXR1cmUnXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBpZiAoIWV4dHJhY3RlZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGlmICghZXh0cmFjdGVkLnJvd0NvdW50KSB7XG4gICAgcmV0dXJuIHdpdGhUYXNrKFxuICAgICAgc3RhdGUsXG4gICAgICBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OKCkubWFwKCgpID0+XG4gICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICBtZXNzYWdlOiBpc1ZlY3RvclRpbGVFeHRyYWN0TGF5ZXIobGF5ZXIpXG4gICAgICAgICAgICAgID8gJ05vIGxvYWRlZCB2ZWN0b3IgdGlsZSBmZWF0dXJlcyBmb3VuZCBpbnNpZGUgdGhlIHNlbGVjdGVkIGRyYXdpbmcnXG4gICAgICAgICAgICAgIDogJ05vIHJvd3MgZm91bmQgaW5zaWRlIHRoZSBzZWxlY3RlZCBkcmF3aW5nJyxcbiAgICAgICAgICAgIGlkOiAnZXh0cmFjdC1kYXRhLWZyb20tZmVhdHVyZS1lbXB0eSdcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGxldCBkYXRhO1xuICB0cnkge1xuICAgIGRhdGEgPVxuICAgICAgZXh0cmFjdGVkLmtpbmQgPT09ICdnZW9qc29uJ1xuICAgICAgICA/IHByb2Nlc3NHZW9qc29uKHtcbiAgICAgICAgICAgIHR5cGU6ICdGZWF0dXJlQ29sbGVjdGlvbicsXG4gICAgICAgICAgICBmZWF0dXJlczogZXh0cmFjdGVkLmZlYXR1cmVzXG4gICAgICAgICAgfSlcbiAgICAgICAgOiB7ZmllbGRzOiBleHRyYWN0ZWQuZmllbGRzLCByb3dzOiBleHRyYWN0ZWQucm93c307XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG4gICAgcmV0dXJuIHdpdGhUYXNrKFxuICAgICAgc3RhdGUsXG4gICAgICBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OKCkubWFwKCgpID0+XG4gICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIGV4dHJhY3QgZGF0YTogJHttZXNzYWdlfWAsXG4gICAgICAgICAgICBpZDogJ2V4dHJhY3QtZGF0YS1mcm9tLWZlYXR1cmUnXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlVmlzRGF0YVVwZGF0ZXIoc3RhdGUsIHtcbiAgICBkYXRhc2V0czoge1xuICAgICAgaW5mbzoge1xuICAgICAgICBpZDogYGV4dHJhY3QtJHtnZW5lcmF0ZUhhc2hJZCg2KX1gLFxuICAgICAgICBsYWJlbDogYEV4dHJhY3RlZCAke2RhdGFzZXQubGFiZWx9YFxuICAgICAgfSxcbiAgICAgIGRhdGFcbiAgICB9LFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGtlZXBFeGlzdGluZ0NvbmZpZzogdHJ1ZSxcbiAgICAgIGNlbnRlck1hcDogZmFsc2UsXG4gICAgICBhdXRvQ3JlYXRlTGF5ZXJzOiB0cnVlXG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZHgsIGNvbmZpZ306IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IG9sZEZpbHRlciA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcbiAgaWYgKCFvbGRGaWx0ZXIpIHtcbiAgICBDb25zb2xlLmVycm9yKGBmaWx0ZXJzLiR7aWR4fSBpcyB1bmRlZmluZWRgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKG9sZEZpbHRlci50eXBlICE9PSBGSUxURVJfVFlQRVMudGltZVJhbmdlKSB7XG4gICAgQ29uc29sZS5lcnJvcihcbiAgICAgIGBzZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnIGNhbiBvbmx5IGJlIGNhbGxlZCB0byB1cGRhdGUgYSB0aW1lIGZpbHRlci4gY2hlY2sgZmlsdGVyLnR5cGUgPT09ICd0aW1lUmFuZ2UnYFxuICAgICk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgdXBkYXRlcyA9IGNoZWNrVGltZUNvbmZpZ0FyZ3MoY29uZmlnKTtcblxuICByZXR1cm4gcGlja18oJ2ZpbHRlcnMnKShzd2FwXyhtZXJnZV8odXBkYXRlcykob2xkRmlsdGVyKSkpKHN0YXRlKTtcbn1cblxuZnVuY3Rpb24gY2hlY2tUaW1lQ29uZmlnQXJncyhjb25maWcpIHtcbiAgY29uc3QgYWxsb3dlZCA9IFsndGltZUZvcm1hdCcsICd0aW1lem9uZSddO1xuICByZXR1cm4gT2JqZWN0LmtleXMoY29uZmlnKS5yZWR1Y2UoKGFjY3UsIHByb3ApID0+IHtcbiAgICBpZiAoIWFsbG93ZWQuaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgIENvbnNvbGUuZXJyb3IoXG4gICAgICAgIGBzZXRMYXllckFuaW1hdGlvblRpbWVDb25maWcgdGFrZXMgdGltZUZvcm1hdCBhbmQvb3IgdGltZXpvbmUgYXMgb3B0aW9ucywgZm91bmQgJHtwcm9wfWBcbiAgICAgICk7XG4gICAgICByZXR1cm4gYWNjdTtcbiAgICB9XG5cbiAgICAvLyBoZXJlIHdlIGFyZSBOT1QgY2hlY2tpbmcgaWYgdGltZXpvbmUgb3IgdGltZUZvcm1hdCBpbnB1dCBpcyB2YWxpZFxuICAgIGFjY3VbcHJvcF0gPSBjb25maWdbcHJvcF07XG4gICAgcmV0dXJuIGFjY3U7XG4gIH0sIHt9KTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZWRpdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRMYXllckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtjb25maWd9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICghY29uZmlnKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHVwZGF0ZXMgPSBjaGVja1RpbWVDb25maWdBcmdzKGNvbmZpZyk7XG4gIHJldHVybiBwaWNrXygnYW5pbWF0aW9uQ29uZmlnJykobWVyZ2VfKHVwZGF0ZXMpKShzdGF0ZSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGVkaXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2V2ZW50LCBsYXllcn0gPSBhY3Rpb247XG4gIGNvbnN0IHtpZDogZGVja2dsTGF5ZXJJZCwgY291bnR9ID0gZXZlbnQ7XG4gIGlmICghbGF5ZXIpIHtcbiAgICBDb25zb2xlLndhcm4oYGxheWVyRmlsdGVyZWRJdGVtcyBsYXllciBkb2VzbnQgZXhpc3RzYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChsYXllci5maWx0ZXJlZEl0ZW1Db3VudD8uW2RlY2tnbExheWVySWRdID09PSBjb3VudCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxheWVyLmZpbHRlcmVkSXRlbUNvdW50ID0ge1xuICAgIC4uLmxheWVyLmZpbHRlcmVkSXRlbUNvdW50LFxuICAgIFtkZWNrZ2xMYXllcklkXTogY291bnRcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogc3dhcF8obGF5ZXIpKHN0YXRlLmxheWVycylcbiAgfTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgV01TIGZlYXR1cmUgaW5mbyBhbmQgcGluIHRvb2x0aXBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdtc0ZlYXR1cmVJbmZvVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuV01TRmVhdHVyZUluZm9BY3Rpb25cbik6IFMge1xuICBjb25zdCB7bGF5ZXIsIGZlYXR1cmVJbmZvLCBjb29yZGluYXRlfSA9IGFjdGlvbjtcbiAgaWYgKCFsYXllcikge1xuICAgIGNvbnNvbGUud2FybihgV01TIGZlYXR1cmUgaW5mbyBsYXllciBkb2Vzbid0IGV4aXN0YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gQ3JlYXRlIGEgY2xpY2tlZCBvYmplY3Qgc2ltaWxhciB0byBsYXllckNsaWNrVXBkYXRlciB0byBwaW4gdGhlIHRvb2x0aXBcbiAgY29uc3QgY2xpY2tlZCA9IGZlYXR1cmVJbmZvXG4gICAgPyB7XG4gICAgICAgIHBpY2tlZDogdHJ1ZSxcbiAgICAgICAgb2JqZWN0OiB7XG4gICAgICAgICAgd21zRmVhdHVyZUluZm86IGZlYXR1cmVJbmZvXG4gICAgICAgIH0sXG4gICAgICAgIGNvb3JkaW5hdGU6IGNvb3JkaW5hdGUgfHwgWzAsIDBdLFxuICAgICAgICBsYXllcjoge1xuICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICBpZHg6IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBsYXllci5pZCksXG4gICAgICAgICAgICBpZDogbGF5ZXIuaWRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICA6IG51bGw7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBjbGlja2VkXG4gIH07XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtc3RhdGVtZW50c1xuZXhwb3J0IGZ1bmN0aW9uIHN5bmNUaW1lRmlsdGVyV2l0aExheWVyVGltZWxpbmVVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TeW5jVGltZUZpbHRlcldpdGhMYXllclRpbWVsaW5lQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2lkeDogZmlsdGVySWR4LCBlbmFibGUgPSBmYWxzZX0gPSBhY3Rpb247XG5cbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgbGV0IG5ld0ZpbHRlciA9IGZpbHRlcjtcblxuICAvLyBpZiB3ZSBlbmFibGUgc3luYyB3ZSBhcmUgZ29pbmcgdG8gbWVyZ2UgZmlsdGVyIGFuZCBhbmltYXRpb25Db25maWcgZG9tYWlucyBhbmQgc3RvcmUgaW50byBmaWx0ZXIuZG9tYWluXG4gIGlmIChlbmFibGUpIHtcbiAgICBjb25zdCBhbmltYXRhYmxlTGF5ZXJzID0gZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMobmV3U3RhdGUubGF5ZXJzKTtcbiAgICAvLyBpZiBubyBhbmltYXRhYmxlTGF5ZXJzIGFyZSBwcmVzZW50IHdlIHNpbXBseSByZXR1cm5cbiAgICBpZiAoIWFuaW1hdGFibGVMYXllcnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbmV3U3RhdGU7XG4gICAgfVxuXG4gICAgY29uc3QgaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyA9IGdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMoYW5pbWF0YWJsZUxheWVycyk7XG4gICAgY29uc3QgaGFzSW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVyID0gQm9vbGVhbihpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLmxlbmd0aCk7XG5cbiAgICBjb25zdCBuZXdGaWx0ZXJEb21haW4gPSBtZXJnZVRpbWVEb21haW5zKFtmaWx0ZXIuZG9tYWluLCBuZXdTdGF0ZS5hbmltYXRpb25Db25maWcuZG9tYWluXSk7XG5cbiAgICAvLyB3ZSBvbmx5IHVwZGF0ZSBhbmltYXRpb25XaW5kb3cgaWYgd2UgaGF2ZSBpbnRlcnZhbCBiYXNlZCBhbmltYXRpb24gbGF5ZXJzIHdpdGggZGVmaW5lZCBpbnRlcnZhbHMgYW5kIHRoZSBjdXJyZW50IGZpbHRlciBhbmltYXRpb24gd2luZG93IGlzIG5vdCBpbnRlcnZhbFxuICAgIGlmIChoYXNJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXIpIHtcbiAgICAgIGlmIChmaWx0ZXIuYW5pbWF0aW9uV2luZG93ICE9PSBBTklNQVRJT05fV0lORE9XLmludGVydmFsKSB7XG4gICAgICAgIG5ld1N0YXRlID0gc2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgICAgIGlkOiBmaWx0ZXIuaWQsXG4gICAgICAgICAgYW5pbWF0aW9uV2luZG93OiBBTklNQVRJT05fV0lORE9XLmludGVydmFsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gICAgICAvLyBhZGp1c3QgdGltZSBmaWx0ZXIgaW50ZXJ2YWxcbiAgICAgIG5ld0ZpbHRlciA9IGFkanVzdFRpbWVGaWx0ZXJJbnRlcnZhbChuZXdTdGF0ZSwgbmV3RmlsdGVyKTtcblxuICAgICAgLy8gcmVwbGFjZSBmaWx0ZXIgaW4gc3RhdGUgd2l0aCBuZXdGaWx0ZXJcbiAgICAgIG5ld1N0YXRlID0ge1xuICAgICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKG5ld1N0YXRlLmZpbHRlcnMpXG4gICAgICB9O1xuICAgIH1cblxuICAgIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgICAvLyBhZGp1c3QgdmFsdWUgYmFzZWQgb24gbmV3IGRvbWFpblxuICAgIGNvbnN0IG5ld0ZpbHRlclZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihcbiAgICAgIG5ld0ZpbHRlci5hbmltYXRpb25XaW5kb3cgPT09IEFOSU1BVElPTl9XSU5ET1cuaW50ZXJ2YWxcbiAgICAgICAgPyBbbmV3RmlsdGVyRG9tYWluWzBdLCBuZXdGaWx0ZXJEb21haW5bMF1dXG4gICAgICAgIDogbmV3RmlsdGVyRG9tYWluLFxuICAgICAgey4uLm5ld0ZpbHRlciwgZG9tYWluOiBuZXdGaWx0ZXJEb21haW59XG4gICAgKTtcblxuICAgIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgICBwcm9wOiAndmFsdWUnLFxuICAgICAgdmFsdWU6IG5ld0ZpbHRlclZhbHVlXG4gICAgfSk7XG5cbiAgICBuZXdGaWx0ZXIgPSB7XG4gICAgICAuLi4obmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlciksXG4gICAgICBzeW5jZWRXaXRoTGF5ZXJUaW1lbGluZTogdHJ1ZVxuICAgIH07XG5cbiAgICAvLyByZXBsYWNlIGZpbHRlciBpbiBzdGF0ZSB3aXRoIG5ld0ZpbHRlclxuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICBmaWx0ZXJzOiBzd2FwXzxGaWx0ZXI+KG5ld0ZpbHRlcikobmV3U3RhdGUuZmlsdGVycylcbiAgICB9O1xuXG4gICAgbmV3U3RhdGUgPSBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWQ6IG5ld0ZpbHRlci5pZCxcbiAgICAgIG1vZGU6IGdldFN5bmNBbmltYXRpb25Nb2RlKG5ld0ZpbHRlcilcbiAgICB9KTtcblxuICAgIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgICAvLyBzZXQgdGhlIGFuaW1hdGlvbiBjb25maWcgdmFsdWUgdG8gbWF0Y2ggZmlsdGVyIHZhbHVlXG4gICAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIHZhbHVlOiBuZXdGaWx0ZXIudmFsdWVbbmV3RmlsdGVyLnN5bmNUaW1lbGluZU1vZGVdXG4gICAgfSk7XG4gIH1cblxuICAvLyBzZXQgZG9tYWluIGFuZCBzdGVwXG4gIG5ld0ZpbHRlciA9IHtcbiAgICAuLi5maWx0ZXIsXG4gICAgc3luY2VkV2l0aExheWVyVGltZWxpbmU6IGZhbHNlXG4gIH07XG5cbiAgLy8gcmVwbGFjZSBmaWx0ZXIgaW4gc3RhdGUgd2l0aCBuZXdGaWx0ZXJcbiAgbmV3U3RhdGUgPSB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKG5ld1N0YXRlLmZpbHRlcnMpXG4gIH07XG5cbiAgLy8gcmVzZXQgc3luYyB0aW1lbGluZSBtb2RlXG4gIG5ld1N0YXRlID0gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZDogbmV3RmlsdGVyLmlkLFxuICAgIG1vZGU6IFNZTkNfVElNRUxJTkVfTU9ERVMuZW5kXG4gIH0pO1xuXG4gIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgLy8gcmVzZXQgZmlsdGVyIHZhbHVlXG4gIGNvbnN0IG5ld0ZpbHRlclZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihuZXdGaWx0ZXIuZG9tYWluLCBuZXdGaWx0ZXIpO1xuXG4gIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogZmlsdGVySWR4LFxuICAgIHByb3A6ICd2YWx1ZScsXG4gICAgdmFsdWU6IG5ld0ZpbHRlclZhbHVlXG4gIH0pO1xuXG4gIG5ld1N0YXRlID0gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZDogbmV3RmlsdGVyLmlkLFxuICAgIG1vZGU6IGdldFN5bmNBbmltYXRpb25Nb2RlKG5ld0ZpbHRlcilcbiAgfSk7XG5cbiAgLy8gcmVzZXQgYW5pbWF0aW9uIGNvbmZpZyBjdXJyZW50IHRpbWUgdG9cbiAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICB2YWx1ZTogbmV3U3RhdGUuYW5pbWF0aW9uQ29uZmlnLmRvbWFpbj8uWzBdID8/IG51bGxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuc2V0VGltZUZpbHRlclN5bmNUaW1lbGluZU1vZGVBY3Rpb25cbikge1xuICBjb25zdCB7aWQ6IGZpbHRlcklkLCBtb2RlOiBzeW5jVGltZWxpbmVNb2RlfSA9IGFjdGlvbjtcblxuICBjb25zdCBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGZpbHRlcklkKTtcbiAgaWYgKGZpbHRlcklkeCA9PT0gLTEpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gIGlmICghdmFsaWRhdGVTeW5jQW5pbWF0aW9uTW9kZShmaWx0ZXIsIHN5bmNUaW1lbGluZU1vZGUpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RmlsdGVyID0ge1xuICAgIC4uLmZpbHRlcixcbiAgICBzeW5jVGltZWxpbmVNb2RlXG4gIH07XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKHN0YXRlLmZpbHRlcnMpXG4gIH07XG5cbiAgcmV0dXJuIGFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXIobmV3U3RhdGUsIGZpbHRlcklkeCk7XG59XG5cbi8qKlxuICogVXBkYXRlIHN0YXRlIG9mIHRoZSBsb2FkaW5nIGluZGljYXRvci5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgdmlzU3RhdGVcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZCBQYXlsb2FkIHdpdGggY2hhbmdlIG9mIG51bWJlciBvZiBhY3RpdmUgbG9hZGluZyBhY3Rpb25zLlxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRMb2FkaW5nSW5kaWNhdG9yVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7cGF5bG9hZDoge2NoYW5nZX19OiB7cGF5bG9hZDogU2V0TG9hZGluZ0luZGljYXRvclBheWxvYWR9XG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGxldCB7bG9hZGluZ0luZGljYXRvclZhbHVlfSA9IHN0YXRlO1xuICBpZiAoIWxvYWRpbmdJbmRpY2F0b3JWYWx1ZSkge1xuICAgIGxvYWRpbmdJbmRpY2F0b3JWYWx1ZSA9IDA7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxvYWRpbmdJbmRpY2F0b3JWYWx1ZTogTWF0aC5tYXgobG9hZGluZ0luZGljYXRvclZhbHVlICsgY2hhbmdlLCAwKVxuICB9O1xufTtcblxuZnVuY3Rpb24gYWRqdXN0QW5pbWF0aW9uQ29uZmlnV2l0aEZpbHRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTLCBmaWx0ZXJJZHg6IG51bWJlcik6IFMge1xuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF07XG4gIGlmICgoZmlsdGVyIGFzIFRpbWVSYW5nZUZpbHRlcikuc3luY2VkV2l0aExheWVyVGltZWxpbmUpIHtcbiAgICBjb25zdCB0aW1lbGluZVZhbHVlID0gZ2V0VGltZWxpbmVWYWx1ZUZyb21GaWx0ZXIoZmlsdGVyKTtcbiAgICBjb25zdCB2YWx1ZSA9IHN0YXRlLmFuaW1hdGlvbkNvbmZpZy50aW1lU3RlcHNcbiAgICAgID8gc25hcFRvTWFya3ModGltZWxpbmVWYWx1ZSwgc3RhdGUuYW5pbWF0aW9uQ29uZmlnLnRpbWVTdGVwcylcbiAgICAgIDogdGltZWxpbmVWYWx1ZTtcbiAgICByZXR1cm4gc2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlcihzdGF0ZSwge3ZhbHVlfSk7XG4gIH1cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG5mdW5jdGlvbiBnZXRUaW1lbGluZVZhbHVlRnJvbUZpbHRlcihmaWx0ZXIpIHtcbiAgcmV0dXJuIGZpbHRlci52YWx1ZVtmaWx0ZXIuc3luY1RpbWVsaW5lTW9kZV07XG59XG5cbmZ1bmN0aW9uIGdldFN5bmNBbmltYXRpb25Nb2RlKGZpbHRlcjogVGltZVJhbmdlRmlsdGVyKSB7XG4gIGlmIChmaWx0ZXIuYW5pbWF0aW9uV2luZG93ID09PSBBTklNQVRJT05fV0lORE9XLmZyZWUpIHtcbiAgICByZXR1cm4gZmlsdGVyLnN5bmNUaW1lbGluZU1vZGUgPz8gU1lOQ19USU1FTElORV9NT0RFUy5lbmQ7XG4gIH1cblxuICByZXR1cm4gU1lOQ19USU1FTElORV9NT0RFUy5lbmQ7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3luY0FuaW1hdGlvbk1vZGUoZmlsdGVyOiBUaW1lUmFuZ2VGaWx0ZXIsIG5ld01vZGU6IG51bWJlcikge1xuICByZXR1cm4gIShcbiAgICBmaWx0ZXIuYW5pbWF0aW9uV2luZG93ICE9PSBBTklNQVRJT05fV0lORE9XLmZyZWUgJiYgbmV3TW9kZSA9PT0gU1lOQ19USU1FTElORV9NT0RFUy5zdGFydFxuICApO1xufVxuXG5mdW5jdGlvbiBhZGp1c3RUaW1lRmlsdGVySW50ZXJ2YWwoc3RhdGUsIGZpbHRlcikge1xuICBjb25zdCBpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzID0gZ2V0SW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyhzdGF0ZS5sYXllcnMpO1xuXG4gIGxldCBpbnRlcnZhbDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIGlmIChpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgaW50ZXJ2YWxJbmRleCA9IGludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMucmVkdWNlKChjdXJyZW50SW5kZXgsIGwpID0+IHtcbiAgICAgIGlmIChsLm1ldGEudGFyZ2V0VGltZUludGVydmFsKSB7XG4gICAgICAgIGNvbnN0IG5ld0luZGV4ID0gVElNRV9JTlRFUlZBTFNfT1JERVJFRC5maW5kSW5kZXgoaSA9PiBpID09PSBsLm1ldGEudGFyZ2V0VGltZUludGVydmFsKTtcbiAgICAgICAgcmV0dXJuIG5ld0luZGV4ID4gLTEgJiYgbmV3SW5kZXggPCBjdXJyZW50SW5kZXggPyBuZXdJbmRleCA6IGN1cnJlbnRJbmRleDtcbiAgICAgIH1cbiAgICB9LCBUSU1FX0lOVEVSVkFMU19PUkRFUkVELmxlbmd0aCAtIDEpO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25zdCBsYXllclRpbWVJbnRlcnZhbCA9IFRJTUVfSU5URVJWQUxTX09SREVSRURbaW50ZXJ2YWxJbmRleF07XG4gICAgaW50ZXJ2YWwgPSBMYXllclRvRmlsdGVyVGltZUludGVydmFsW2xheWVyVGltZUludGVydmFsXTtcbiAgfVxuXG4gIGlmICghaW50ZXJ2YWwpIHtcbiAgICByZXR1cm4gZmlsdGVyO1xuICB9XG5cbiAgLy8gYWRqdXN0IGZpbHRlclxuICBjb25zdCB0aW1lRm9ybWF0ID0gZ2V0RGVmYXVsdFRpbWVGb3JtYXQoaW50ZXJ2YWwpO1xuICBjb25zdCB1cGRhdGVkUGxvdFR5cGUgPSB7Li4uZmlsdGVyLnBsb3RUeXBlLCBpbnRlcnZhbCwgdGltZUZvcm1hdH07XG4gIGNvbnN0IG5ld0ZpbHRlciA9IHVwZGF0ZVRpbWVGaWx0ZXJQbG90VHlwZShmaWx0ZXIsIHVwZGF0ZWRQbG90VHlwZSwgc3RhdGUuZGF0YXNldHMpO1xuICByZXR1cm4gYWRqdXN0VmFsdWVUb0FuaW1hdGlvbldpbmRvdyhzdGF0ZSwgbmV3RmlsdGVyKTtcbn1cblxuLy8gRmluZCBkYXRhSWQgZnJvbSBhIHNhdmVkIHZpc1N0YXRlIHByb3BlcnR5OlxuLy8gbGF5ZXJzLCBmaWx0ZXJzLCBpbnRlcmFjdGlvbnMsIGxheWVyQmxlbmRpbmcsIG92ZXJsYXlCbGVuZGluZywgc3BsaXRNYXBzLCBhbmltYXRpb25Db25maWcsIGVkaXRvclxuLy8gcmVwbGFjZSBpdCB3aXRoIGFub3RoZXIgZGF0YUlkXG5mdW5jdGlvbiBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHModmFsdWU6IGFueSwgZGF0YUlkOiBzdHJpbmcsIGRhdGFJZFRvUmVwbGFjZTogc3RyaW5nKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIC8vIGZvciBsYXllcnMsIGZpbHRlcnMsIGNhbGwgZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzIG9uIGVhY2ggaXRlbSBpbiBhcnJheVxuICAgIGNvbnN0IHJlcGxhY2VkID0gdmFsdWVcbiAgICAgIC5tYXAodiA9PiBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHModiwgZGF0YUlkLCBkYXRhSWRUb1JlcGxhY2UpKVxuICAgICAgLmZpbHRlcihkID0+IGQpO1xuICAgIHJldHVybiByZXBsYWNlZC5sZW5ndGggPyByZXBsYWNlZCA6IG51bGw7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZS5kYXRhSWQgPT09ICdzdHJpbmcnICYmIHZhbHVlLmRhdGFJZCA9PT0gZGF0YUlkKSB7XG4gICAgLy8gb3RoZXJzXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnZhbHVlLFxuICAgICAgZGF0YUlkOiBkYXRhSWRUb1JlcGxhY2VcbiAgICB9O1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUuZGF0YUlkKSAmJiB2YWx1ZS5kYXRhSWQuaW5jbHVkZXMoZGF0YUlkKSkge1xuICAgIC8vIGZpbHRlclxuICAgIHJldHVybiB7XG4gICAgICAuLi52YWx1ZSxcbiAgICAgIGRhdGFJZDogdmFsdWUuZGF0YUlkLm1hcChkID0+IChkID09PSBkYXRhSWQgPyBkYXRhSWRUb1JlcGxhY2UgOiBkKSlcbiAgICB9O1xuICB9IGVsc2UgaWYgKHZhbHVlLmNvbmZpZz8uZGF0YUlkICYmIHZhbHVlLmNvbmZpZz8uZGF0YUlkID09PSBkYXRhSWQpIHtcbiAgICAvLyBsYXllclxuICAgIHJldHVybiB7XG4gICAgICAuLi52YWx1ZSxcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICAuLi52YWx1ZS5jb25maWcsXG4gICAgICAgIGRhdGFJZDogZGF0YUlkVG9SZXBsYWNlXG4gICAgICB9XG4gICAgfTtcbiAgfSBlbHNlIGlmIChpc09iamVjdCh2YWx1ZSkgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBkYXRhSWQpKSB7XG4gICAgLy8gZm9yIHZhbHVlIHNhdmVkIGFzIHtbZGF0YUlkXTogey4uLn19XG4gICAgcmV0dXJuIHtbZGF0YUlkVG9SZXBsYWNlXTogdmFsdWVbZGF0YUlkXX07XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLy8gRmluZCBkYXRhc2V0SWRzIGRlcml2ZWQgYSBzYXZlZCB2aXNTdGF0ZSBQcm9wZXJ0eTtcbmZ1bmN0aW9uIGZpbmRDaGlsZERhdGFzZXRJZHModmFsdWUpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gZm9yIGxheWVycywgZmlsdGVycywgY2FsbCBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMgb24gZWFjaCBpdGVtIGluIGFycmF5XG4gICAgY29uc3QgY2hpbGREYXRhSWRzID0gdmFsdWUubWFwKGZpbmRDaGlsZERhdGFzZXRJZHMpLmZpbHRlcihkID0+IGQpO1xuICAgIHJldHVybiBjaGlsZERhdGFJZHMubGVuZ3RoID8gY2hpbGREYXRhSWRzIDogbnVsbDtcbiAgfVxuXG4gIC8vIGNoaWxkIGRhdGEgaWQgdXN1YWxseSBzdG9yZXMgaW4gdGhlIGRlcml2ZWQgZGF0YXNldCBpbmZvXG4gIHJldHVybiB2YWx1ZT8ubmV3RGF0YXNldD8uaW5mby5pZCB8fCBudWxsO1xufVxuXG4vLyBtb3ZlZCB1bm1lcmdlZCBsYXllcnMsIGZpbHRlcnMsIGludGVyYWN0aW9uc1xuZnVuY3Rpb24gbW92ZVZhbHVlVG9CZU1lcmdlZChzdGF0ZSwgcHJvcFZhbHVlcywge3Byb3AsIHRvTWVyZ2VQcm9wLCBzYXZlVW5tZXJnZWR9KSB7XG4gIC8vIHJlbW92ZSBwcm9wIHZhbHVlIGZyb20gc3RhdGVcbiAgLy8gVE9ETzogc2hvdWxkIHdlIGFkZCByZW1vdmUgdXBkYXRlciB0byBtZXJnZXIgYXMgd2VsbD9cbiAgaWYgKCFwcm9wVmFsdWVzKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHN0YXRlUmVtb3ZlZCA9XG4gICAgcHJvcCA9PT0gJ2xheWVycydcbiAgICAgID8gcHJvcFZhbHVlcy5yZWR1Y2UoKGFjY3UsIHByb3BWYWx1ZSkgPT4gcmVtb3ZlTGF5ZXJVcGRhdGVyKGFjY3UsIHtpZDogcHJvcFZhbHVlLmlkfSksIHN0YXRlKVxuICAgICAgOiBBcnJheS5pc0FycmF5KHN0YXRlW3Byb3BdKVxuICAgICAgPyB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgW3Byb3BdOiBzdGF0ZVtwcm9wXS5maWx0ZXIocCA9PiAhcHJvcFZhbHVlcy5maW5kKHByb3BWYWx1ZSA9PiBwLmlkID09PSBwcm9wVmFsdWUuaWQpKVxuICAgICAgICB9XG4gICAgICA6IC8vIGlmIG5vdCBhcnJheSwgd2Ugd29uJ3QgcmVtb3ZlIGl0LCByZW1vdmUgZGF0YXNldCBzaG91bGQgaGFuZGxlIGl0XG4gICAgICAgIHN0YXRlO1xuXG4gIC8vIG1vdmUgdG8gc3RhdGVUb0JlTWVyZ2VkXG4gIGNvbnN0IHRvQmVNZXJnZWQgPSB7XG4gICAgW3RvTWVyZ2VQcm9wXTogc2F2ZVVubWVyZ2VkXG4gICAgICA/IC8vIGNhbGwgbWVyZ2Ugc2F2ZVVubWVyZ2VkIG1ldGhvZFxuICAgICAgICBzYXZlVW5tZXJnZWQoc3RhdGVSZW1vdmVkLCBwcm9wVmFsdWVzKVxuICAgICAgOiAvLyBpZiB0b01lcmdlUHJvcCBpcyBhcmFheSwgYXBwZW5kIHRvIGl0XG4gICAgICBBcnJheS5pc0FycmF5KHN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF0pXG4gICAgICA/IFsuLi5zdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdLCAuLi5wcm9wVmFsdWVzXVxuICAgICAgOiAvLyBzYXZlIHByb3BWYWx1ZXMgdG8gdG9NZXJnZVxuICAgICAgaXNPYmplY3Qoc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXSlcbiAgICAgID8ge1xuICAgICAgICAgIC4uLnN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF0sXG4gICAgICAgICAgLi4ucHJvcFZhbHVlc1xuICAgICAgICB9XG4gICAgICA6IHN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlUmVtb3ZlZCxcbiAgICAuLi50b0JlTWVyZ2VkXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VEYXRhc2V0QW5kRGVwczxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAgZGF0YUlkOiBzdHJpbmcsXG4gIGRhdGFJZFRvVXNlOiBzdHJpbmdcbik6IFQge1xuICByZXR1cm4gY29tcG9zZV88VD4oW1xuICAgIGFwcGx5XyhyZXBsYWNlRGF0YXNldERlcHNJblN0YXRlLCB7ZGF0YUlkLCBkYXRhSWRUb1VzZX0pLFxuICAgIGFwcGx5XyhyZW1vdmVEYXRhc2V0VXBkYXRlciwge2RhdGFJZH0pXG4gIF0pKHN0YXRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVTdGF0ZUZvckRhdGFzZXRSZXBsYWNlPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgZGF0YUlkVG9Vc2U6IHN0cmluZ1xuKTogVCB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRTdGF0ZSA9IHNlcmlhbGl6ZVZpc1N0YXRlKHN0YXRlLCBzdGF0ZS5zY2hlbWEpO1xuICBjb25zdCBuZXh0U3RhdGUgPSByZXBsYWNlRGF0YXNldEFuZERlcHMoc3RhdGUsIGRhdGFJZCwgZGF0YUlkVG9Vc2UpO1xuICAvLyBtYWtlIGEgY29weSBvZiBsYXllck9yZGVyLCBiZWNhdXNlIGxheWVyIGlkIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIGl0IGJ5IGNhbGxpbmcgcmVtb3ZlTGF5ZXJVcGRhdGVyXG4gIGNvbnN0IHByZXNlcnZlTGF5ZXJPcmRlciA9IFsuLi5zdGF0ZS5sYXllck9yZGVyXTtcblxuICAvLyBwcmVzZXJ2ZSBkYXRhc2V0IG9yZGVyXG4gIG5leHRTdGF0ZS5wcmVzZXJ2ZURhdGFzZXRPcmRlciA9IE9iamVjdC5rZXlzKHN0YXRlLmRhdGFzZXRzKS5tYXAoZCA9PlxuICAgIGQgPT09IGRhdGFJZCA/IGRhdGFJZFRvVXNlIDogZFxuICApO1xuXG4gIC8vIHByZXNlcnZlTGF5ZXJPcmRlclxuICBpZiAobmV4dFN0YXRlLmxheWVyVG9CZU1lcmdlZD8ubGVuZ3RoKSB7XG4gICAgLy8gY29weSBzcGxpdCBtYXBzIHRvIGJlIG1lcmdlZCwgYmVjYXVzZSBpdCB3aWxsIGJlIHJlc2V0IGluIHJlbW92ZSBsYXllci5cbiAgICAvLyBLZWVwIHRoZSBvbmVzIG9mIGEgZGF0YXNldCByZXBsYWNlZCBhIG1vbWVudCBlYXJsaWVyIGFuZCBub3QgbWVyZ2VkIGJhY2sgeWV0OlxuICAgIC8vIGl0cyBsYXllcnMgYXJlIG5vIGxvbmdlciBpbiB0aGUgY3VycmVudCBzcGxpdCBtYXBzLlxuICAgIG5leHRTdGF0ZS5zcGxpdE1hcHNUb0JlTWVyZ2VkID0gY29tYmluZVNwbGl0TWFwc0J5SW5kZXgoXG4gICAgICBzdGF0ZS5zcGxpdE1hcHNUb0JlTWVyZ2VkLFxuICAgICAgc2VyaWFsaXplZFN0YXRlPy5zcGxpdE1hcHMgPz8gW11cbiAgICApO1xuICAgIG5leHRTdGF0ZS5sYXllck9yZGVyID0gWy4uLnByZXNlcnZlTGF5ZXJPcmRlcl07XG4gIH1cblxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZURhdGFzZXREZXBzSW5TdGF0ZTxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAge2RhdGFJZCwgZGF0YUlkVG9Vc2V9OiB7ZGF0YUlkOiBzdHJpbmc7IGRhdGFJZFRvVXNlOiBzdHJpbmd9XG4pOiBUIHtcbiAgY29uc3Qgc2VyaWFsaXplZFN0YXRlID0gc2VyaWFsaXplVmlzU3RhdGUoc3RhdGUsIHN0YXRlLnNjaGVtYSk7XG5cbiAgY29uc3QgbmV4dFN0YXRlID0gc3RhdGUubWVyZ2Vycy5yZWR1Y2UoXG4gICAgKFxuICAgICAgYWNjdVN0YXRlLFxuICAgICAge3Byb3AsIHRvTWVyZ2VQcm9wLCByZXBsYWNlUGFyZW50RGF0YXNldElkcywgZ2V0Q2hpbGREYXRhc2V0SWRzLCBzYXZlVW5tZXJnZWQsIHByZXNlcnZlT3JkZXJ9XG4gICAgKSA9PiB7XG4gICAgICAvLyBnZXQgZGF0YXNldCBpZHMgdGhhdCBhcmUgZGVwZW5kcyBvbiB0aGlzIGRhdGFzZXRcbiAgICAgIGNvbnN0IHByb3BzID0gdG9BcnJheShwcm9wKTtcbiAgICAgIGNvbnN0IHRvTWVyZ2VQcm9wcyA9IHRvQXJyYXkodG9NZXJnZVByb3ApO1xuICAgICAgY29uc3Qgc2F2ZWRQcm9wcyA9IHNlcmlhbGl6ZWRTdGF0ZSA/IHByb3BzLm1hcChwID0+IHNlcmlhbGl6ZWRTdGF0ZVtwXSkgOiBbXTtcblxuICAgICAgbGV0IHJlcGxhY2VkU3RhdGUgPSBhY2N1U3RhdGU7XG4gICAgICBzYXZlZFByb3BzLmZvckVhY2goKHByb3BWYWx1ZSwgaSkgPT4ge1xuICAgICAgICBjb25zdCBtZXJnZXJPcHRpb25zID0ge1xuICAgICAgICAgIHByb3A6IHByb3BzW2ldLFxuICAgICAgICAgIHRvTWVyZ2VQcm9wOiB0b01lcmdlUHJvcHNbaV0sXG4gICAgICAgICAgZ2V0Q2hpbGREYXRhc2V0SWRzLFxuICAgICAgICAgIHNhdmVVbm1lcmdlZFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlcGxhY2VkSXRlbSA9XG4gICAgICAgICAgcmVwbGFjZVBhcmVudERhdGFzZXRJZHM/Lihwcm9wVmFsdWUsIGRhdGFJZCwgZGF0YUlkVG9Vc2UpIHx8XG4gICAgICAgICAgZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzKHByb3BWYWx1ZSwgZGF0YUlkLCBkYXRhSWRUb1VzZSk7XG4gICAgICAgIHJlcGxhY2VkU3RhdGUgPSByZXBsYWNlZEl0ZW1cbiAgICAgICAgICA/IHJlcGxhY2VQcm9wVmFsdWVJblN0YXRlKHJlcGxhY2VkU3RhdGUsIHJlcGxhY2VkSXRlbSwgbWVyZ2VyT3B0aW9ucylcbiAgICAgICAgICA6IHJlcGxhY2VkU3RhdGU7XG5cbiAgICAgICAgLy8gT25seSB3aGVuIHRoaXMgZGF0YXNldCBoYWQgaXRlbXMgb2YgaXRzIG93biB0byBwYXJrLiBUaGUgdG9CZU1lcmdlZCBsaXN0XG4gICAgICAgIC8vIGNhbiBzdGlsbCBob2xkIGFub3RoZXIgZGF0YXNldCdzIGl0ZW1zLCByZXBsYWNlZCBhIG1vbWVudCBlYXJsaWVyIGFuZFxuICAgICAgICAvLyBub3QgbWVyZ2VkIGJhY2sgeWV0OyBvdmVyd3JpdGluZyB0aGUgb3JkZXIgdGhleSB3ZXJlIHBhcmtlZCB3aXRoIHdvdWxkXG4gICAgICAgIC8vIG1lcmdlIHRoZW0gYmFjayBpbiByZXZlcnNlLlxuICAgICAgICBpZiAoXG4gICAgICAgICAgcmVwbGFjZWRJdGVtICYmXG4gICAgICAgICAgbWVyZ2VyT3B0aW9ucy50b01lcmdlUHJvcCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgcmVwbGFjZWRTdGF0ZVttZXJnZXJPcHRpb25zLnRvTWVyZ2VQcm9wXT8ubGVuZ3RoICYmXG4gICAgICAgICAgcHJlc2VydmVPcmRlclxuICAgICAgICApIHtcbiAgICAgICAgICByZXBsYWNlZFN0YXRlW3ByZXNlcnZlT3JkZXJdID0gcHJvcFZhbHVlLm1hcChpdGVtID0+IGl0ZW0uaWQpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHJlcGxhY2VkU3RhdGU7XG4gICAgfSxcbiAgICBzdGF0ZVxuICApO1xuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VQcm9wVmFsdWVJblN0YXRlKFxuICBzdGF0ZSxcbiAgcmVwbGFjZWRJdGVtLFxuICB7cHJvcCwgdG9NZXJnZVByb3AsIGdldENoaWxkRGF0YXNldElkcywgc2F2ZVVubWVyZ2VkfVxuKSB7XG4gIC8vIHByb3AgaXMgZGVwZW5kcyBvbiB0aGUgZGF0YXNldCB0byBiZSByZXBsYWNlZFxuICAvLyByZW1vdmUgcHJvcCBmcm9tIHN0YXRlLCBhbmQgbW92ZSBpdCB0byB0b0JlTWVyZ2VkXG4gIGxldCBuZXh0U3RhdGUgPSBtb3ZlVmFsdWVUb0JlTWVyZ2VkKHN0YXRlLCByZXBsYWNlZEl0ZW0sIHtwcm9wLCB0b01lcmdlUHJvcCwgc2F2ZVVubWVyZ2VkfSk7XG4gIGNvbnN0IGNoaWxkRGF0YUlkcyA9IGdldENoaWxkRGF0YXNldElkcz8uKHJlcGxhY2VkSXRlbSkgfHwgZmluZENoaWxkRGF0YXNldElkcyhyZXBsYWNlZEl0ZW0pO1xuXG4gIGlmIChjaGlsZERhdGFJZHMpIHtcbiAgICBuZXh0U3RhdGUgPSB0b0FycmF5KGNoaWxkRGF0YUlkcykucmVkdWNlKChhY2N1LCBjaGlsZERhdGFJZCkgPT4ge1xuICAgICAgLy8gc2hvdWxkbid0IG5lZWQgdG8gY2hhbmdlIGNoaWxkIGRhdGFzZXQgaWQsXG4gICAgICAvLyBidXQgc3RpbGwgbmVlZCB0byBtb3ZlIG91dCBvZiBzdGF0ZSBhbmQgbWVyZ2UgYmFjayBpblxuICAgICAgcmV0dXJuIHJlcGxhY2VEYXRhc2V0QW5kRGVwcyhhY2N1LCBjaGlsZERhdGFJZCwgY2hpbGREYXRhSWQpO1xuICAgIH0sIG5leHRTdGF0ZSk7XG4gIH1cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBOztBQUVBLFNBQVFBLElBQUksUUFBTyxZQUFZO0FBRS9CLE9BQU9DLElBQUksTUFBTSxtQkFBbUI7QUFDcEMsT0FBT0MsU0FBUyxNQUFNLFdBQVc7QUFDakMsU0FBUUMsT0FBTyxJQUFJQyxPQUFPLFFBQU8sZUFBZTtBQUNoRCxPQUFPQyxTQUFTLE1BQU0sNkJBQTZCO0FBQ25ELE9BQU9DLEdBQUcsTUFBTSx1QkFBdUI7QUFDdkMsT0FBT0MsT0FBTyxNQUFNLDJCQUEyQjtBQUMvQyxPQUFPQyxJQUFJLE1BQU0sd0JBQXdCO0FBQ3pDLE9BQU9DLElBQUksTUFBTSx3QkFBd0I7QUFDekMsT0FBT0MsR0FBRyxNQUFNLHVCQUF1QjtBQUN2QyxPQUFPQyxJQUFJLElBQUdDLHFCQUFxQixFQUFFQyxRQUFRLFFBQU8sa0JBQWtCO0FBRXRFO0FBQ0EsU0FDRUMsVUFBVSxFQUNWQyxXQUFXLEVBQ1hDLGNBQWMsRUFDZEMsaUJBQWlCLEVBQ2pCQyxXQUFXLFFBQ04sa0JBQWtCO0FBQ3pCO0FBQ0EsU0FDRUMsZUFBZSxFQU1mQyxnQkFBZ0IsRUFDaEJDLHVCQUF1QixFQUN2QkMsaUJBQWlCLEVBQ2pCQyxlQUFlLEVBQ2ZDLG9CQUFvQixFQUNwQkMsOEJBQThCLEVBQzlCQyxtQkFBbUIsRUFDbkJDLFlBQVksRUFDWkMsZ0JBQWdCLEVBQ2hCQyxZQUFZLEVBQ1pDLGFBQWEsRUFD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
|
|
5477
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJiYm94IiwiY29weSIsImRlZXBtZXJnZSIsImNvbnNvbGUiLCJDb25zb2xlIiwiY2xvbmVEZWVwIiwiZ2V0IiwiaXNFcXVhbCIsInBpY2siLCJ1bmlxIiwieG9yIiwiVGFzayIsImRpc2FibGVTdGFja0NhcHR1cmluZyIsIndpdGhUYXNrIiwiREVMQVlfVEFTSyIsIkFDVElPTl9UQVNLIiwiTE9BRF9GSUxFX1RBU0siLCJQUk9DRVNTX0ZJTEVfREFUQSIsIlVOV1JBUF9UQVNLIiwiYWRkTm90aWZpY2F0aW9uIiwiYXBwbHlMYXllckNvbmZpZyIsImNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzIiwibGF5ZXJDb25maWdDaGFuZ2UiLCJsYXllclR5cGVDaGFuZ2UiLCJsYXllclZpc0NvbmZpZ0NoYW5nZSIsImxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSIsImxvYWRGaWxlU3RlcFN1Y2Nlc3MiLCJsb2FkRmlsZXNFcnIiLCJsb2FkRmlsZXNTdWNjZXNzIiwibG9hZE5leHRGaWxlIiwibmV4dEZpbGVCYXRjaCIsInNldEZpbHRlciIsInByb2Nlc3NGaWxlQ29udGVudCIsImZpdEJvdW5kcyIsImZpdE1hcEJvdW5kcyIsInRvZ2dsZUxheWVyRm9yTWFwIiwiYXBwbHlGaWx0ZXJDb25maWciLCJsb2FkQ29sdW1uU3RhdHNTdWNjZXNzIiwibG9hZENvbHVtblN0YXRzRXJyb3IiLCJyZWZyZXNoRGF0YXNldFN1Y2Nlc3MiLCJyZWZyZXNoRGF0YXNldEVycm9yIiwicmVmcmVzaERhdGFzZXRQcm9ncmVzcyIsInNldExvYWRpbmdQcm9ncmVzcyIsIkZJTFRFUl9VUERBVEVSX1BST1BTIiwiYWRkTmV3TGF5ZXJzVG9TcGxpdE1hcCIsInNuYXBUb01hcmtzIiwiYXBwbHlGaWx0ZXJGaWVsZE5hbWUiLCJhcHBseVRpbWVGaWx0ZXJFbmRGaWVsZE5hbWUiLCJhcHBseUZpbHRlcnNUb0RhdGFzZXRzIiwiYXJyYXlJbnNlcnQiLCJjb21iaW5lU3BsaXRNYXBzQnlJbmRleCIsImNvbXB1dGVTcGxpdE1hcExheWVycyIsImFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4iLCJlcnJvck5vdGlmaWNhdGlvbiIsImVkaXRvckZlYXR1cmVzVG9GZWF0dXJlQ29sbGVjdGlvbiIsImV4dHJhY3RSb3dzSW5zaWRlRmVhdHVyZSIsImlzVmVjdG9yVGlsZUV4dHJhY3RMYXllciIsIm1lcmdlVXNlckZlYXR1cmVQcm9wZXJ0aWVzIiwidG9Ta2V0Y2hGZWF0dXJlIiwiZmVhdHVyZVRvRmlsdGVyVmFsdWUiLCJmaWx0ZXJEYXRhc2V0Q1BVIiwiZ2VuZXJhdGVQb2x5Z29uRmlsdGVyIiwiZ2V0RGVmYXVsdEZpbHRlciIsImdldEZpbHRlcklkSW5GZWF0dXJlIiwiZ2V0VGltZVdpZGdldFRpdGxlRm9ybWF0dGVyIiwiaXNJblJhbmdlIiwiaXNPYmplY3QiLCJpc1BsYWluT2JqZWN0IiwiaXNSZ2JDb2xvciIsInBhcnNlRmllbGRWYWx1ZSIsInJlbW92ZUxheWVyRnJvbVNwbGl0TWFwcyIsInNldCIsInVwZGF0ZUZpbHRlclBsb3QiLCJyZW1vdmVGaWx0ZXJQbG90IiwiaXNMYXllckFuaW1hdGFibGUiLCJpc1NpZGVGaWx0ZXIiLCJnZXRBcHBsaWNhdGlvbkNvbmZpZyIsInZhbGlkYXRlRmlsdGVyc1VwZGF0ZURhdGFzZXRzIiwiZ2VuZXJhdGVIYXNoSWQiLCJ0b0FycmF5IiwiYXJyYXlNb3ZlIiwiQU5JTUFUSU9OX1dJTkRPVyIsIkJBU0VfU1BFRUQiLCJDT01QQVJFX1RZUEVTIiwiREVGQVVMVF9URVhUX0xBQkVMIiwiRURJVE9SX01PREVTIiwiRklMVEVSX1RZUEVTIiwiRklMVEVSX1ZJRVdfVFlQRVMiLCJMQVlFUl9UWVBFUyIsIkZQUyIsIkxJR0hUX0FORF9TSEFET1dfRUZGRUNUIiwiRElTVEFOQ0VfRk9HX1RZUEUiLCJTVVJGQUNFX0ZPR19UWVBFIiwiTUFYX0RFRkFVTFRfVE9PTFRJUFMiLCJQTE9UX1RZUEVTIiwiU09SVF9PUkRFUiIsIlNZTkNfVElNRUxJTkVfTU9ERVMiLCJDSEFOTkVMX1NDQUxFUyIsIlNDQUxFX1RZUEVTIiwiSU5JVElBTF9BTk5PVEFUSU9OX0tJTkQiLCJJTklUSUFMX0FOTk9UQVRJT05fQU5HTEUiLCJJTklUSUFMX0FOTk9UQVRJT05fQVJNX0xFTkdUSCIsIklOSVRJQUxfQU5OT1RBVElPTl9URVhUX1dJRFRIIiwiSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfSEVJR0hUIiwiSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEgiLCJJTklUSUFMX0FOTk9UQVRJT05fTElORV9DT0xPUiIsIklOSVRJQUxfQU5OT1RBVElPTl9URVhUX1NJREUiLCJJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9WRVJUSUNBTF9QT1NJVElPTiIsIkFOTk9UQVRJT05fQU5HTEVfQllfUExBQ0VNRU5UIiwidGV4dFBsYWNlbWVudEZyb21BbmdsZSIsIkFubm90YXRpb25LaW5kIiwiRGF0YXNldFR5cGUiLCJnZXREYXRhc2V0UmVmcmVzaEludGVydmFsTXMiLCJnZXRSZW1vdGVTb3VyY2VGb3JtYXQiLCJMQVlFUl9JRF9MRU5HVEgiLCJMYXllciIsIkxheWVyQ2xhc3NlcyIsImFwcGx5XyIsImNvbXBvc2VfIiwiZmlsdGVyT3V0QnlJZCIsIm1lcmdlXyIsInBheWxvYWRfIiwicGlja18iLCJyZW1vdmVFbGVtZW50QXRJbmRleCIsInN3YXBfIiwiaXNWYWxpZE1lcmdlciIsIm1lcmdlU3RhdGVGcm9tTWVyZ2VycyIsIlZJU19TVEFURV9NRVJHRVJTIiwiY3JlYXRlTGF5ZXJGcm9tQ29uZmlnIiwiaXNTYXZlZExheWVyQ29uZmlnVjEiLCJwYXJzZUxheWVyQ29uZmlnIiwic2VyaWFsaXplRmlsdGVyIiwic2VyaWFsaXplTGF5ZXIiLCJzZXJpYWxpemVWaXNTdGF0ZSIsInZhbGlkYXRlTGF5ZXJXaXRoRGF0YSIsIktlcGxlckdMU2NoZW1hIiwiZ2V0RmlsZXNUb1BhcnNlIiwibG9hZEV4dGVybmFsbHlIb3N0ZWREYXRhc2V0IiwicHJvY2Vzc0dlb2pzb24iLCJhc3NpZ25HcHVDaGFubmVsIiwiY29weVRhYmxlQW5kVXBkYXRlIiwiY3JlYXRlTmV3RGF0YUVudHJ5IiwicGluVGFibGVDb2x1bW5zIiwic2V0RmlsdGVyR3B1TW9kZSIsInNvcnREYXRhc2V0QnlDb2x1bW4iLCJmaW5kRmllbGRzVG9TaG93IiwiY2FsY3VsYXRlTGF5ZXJEYXRhIiwiZmluZERlZmF1bHRMYXllciIsImdldExheWVyT3JkZXJGcm9tTGF5ZXJzIiwibWVyZ2VMYXllclZpc0NvbmZpZ0Zvck5ld0RhdGFzZXRzIiwiZ2V0TmV3TGF5ZXJHcm91cCIsImFkZExheWVyT3JHcm91cFRvTGF5ZXJPcmRlciIsInJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlciIsImdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlciIsImZpbmRQYXJlbnRHcm91cEZvckxheWVyIiwiZ2V0SW5kZXhGcm9tTGF5ZXJFbnRyeUlkIiwidXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlciIsImdldEZsYXRMYXllck9yZGVyIiwicmVwbGFjZUxheWVyRW50cnlJbkxheWVyT3JkZXIiLCJnZXRQcm9wVmFsdWVUb01lcmdlciIsImhhc1Byb3BzVG9NZXJnZSIsIm1lcmdlRGF0YXNldHNCeU9yZGVyIiwiZml4RWZmZWN0T3JkZXIiLCJnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVycyIsImdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMiLCJtZXJnZVRpbWVEb21haW5zIiwiYWRqdXN0VmFsdWVUb0FuaW1hdGlvbldpbmRvdyIsInVwZGF0ZVRpbWVGaWx0ZXJQbG90VHlwZSIsImdldERlZmF1bHRUaW1lRm9ybWF0IiwiTGF5ZXJUb0ZpbHRlclRpbWVJbnRlcnZhbCIsIlRJTUVfSU5URVJWQUxTX09SREVSRUQiLCJtZXJnZUZpbHRlckRvbWFpbiIsImluaXRDdXN0b21QYWxldHRlQnlDdXN0b21TY2FsZSIsImNvbGxlY3RDb2x1bW5WYWx1ZXMiLCJnZXRDb2x1bW5TdGF0aXN0aWNzIiwiY3JlYXRlRWZmZWN0IiwiZmluZE1hcEJvdW5kcyIsInZpc1N0YXRlVXBkYXRlcnMiLCJkZWZhdWx0SW50ZXJhY3Rpb25Db25maWciLCJ0b29sdGlwIiwiaWQiLCJsYWJlbCIsImVuYWJsZWQiLCJjb25maWciLCJmaWVsZHNUb1Nob3ciLCJjb21wYXJlTW9kZSIsImNvbXBhcmVUeXBlIiwiQUJTT0xVVEUiLCJnZW9jb2RlciIsInBvc2l0aW9uIiwibGltaXRTZWFyY2giLCJicnVzaCIsInNpemUiLCJjb29yZGluYXRlIiwiREVGQVVMVF9BTklNQVRJT05fQ09ORklHIiwiZG9tYWluIiwiY3VycmVudFRpbWUiLCJzcGVlZCIsImlzQW5pbWF0aW5nIiwidGltZVN0ZXBzIiwidGltZUZvcm1hdCIsInRpbWV6b25lIiwiZGVmYXVsdFRpbWVGb3JtYXQiLCJoaWRlQ29udHJvbCIsImR1cmF0aW9uIiwiREVGQVVMVF9FRElUT1IiLCJtb2RlIiwiRFJBV19QT0xZR09OIiwiZmVhdHVyZXMiLCJzZWxlY3RlZEZlYXR1cmUiLCJ2aXNpYmxlIiwiSU5JVElBTF9WSVNfU1RBVEUiLCJtYXBJbmZvIiwidGl0bGUiLCJkZXNjcmlwdGlvbiIsImxheWVycyIsImxheWVyRGF0YSIsImxheWVyVG9CZU1lcmdlZCIsImxheWVyT3JkZXIiLCJsYXllck9yZGVyVG9CZU1lcmdlZCIsImZpbHRlcnMiLCJmaWx0ZXJUb0JlTWVyZ2VkIiwiZGF0YXNldHMiLCJlZGl0aW5nRGF0YXNldCIsInVuZGVmaW5lZCIsImVmZmVjdHMiLCJlZmZlY3RPcmRlciIsImNoYXJ0cyIsImNoYXJ0c1RvQmVNZXJnZWQiLCJhbm5vdGF0aW9ucyIsImFubm90YXRpb25zVG9CZU1lcmdlZCIsInNlbGVjdGVkQW5ub3RhdGlvbklkIiwiaXNFZGl0aW5nQW5ub3RhdGlvblRleHQiLCJpbnRlcmFjdGlvbkNvbmZpZyIsImludGVyYWN0aW9uVG9CZU1lcmdlZCIsImxheWVyQmxlbmRpbmciLCJvdmVybGF5QmxlbmRpbmciLCJob3ZlckluZm8iLCJjbGlja2VkIiwibW91c2VQb3MiLCJtYXhEZWZhdWx0VG9vbHRpcHMiLCJzcGxpdE1hcHMiLCJzcGxpdE1hcHNUb0JlTWVyZ2VkIiwiaXNNZXJnaW5nRGF0YXNldHMiLCJsYXllckNsYXNzZXMiLCJhbmltYXRpb25Db25maWciLCJlZGl0b3IiLCJmaWxlTG9hZGluZyIsImZpbGVMb2FkaW5nUHJvZ3Jlc3MiLCJsb2FkaW5nSW5kaWNhdG9yVmFsdWUiLCJsb2FkaW5nUHJvZ3Jlc3MiLCJsb2FkZXJzIiwibG9hZE9wdGlvbnMiLCJtZXJnZXJzIiwic2NoZW1hIiwiQUNUSU9OX1RBU0tfRklUX0JPVU5EUyIsImZyb21DYWxsYmFjayIsIl8iLCJjYiIsIkFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04iLCJ1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEiLCJzdGF0ZSIsIl9yZWYiLCJsYXllciIsImlkeCIsIl9vYmplY3RTcHJlYWQiLCJtYXAiLCJseXIiLCJpIiwiZCIsInVwZGF0ZVN0YXRlT25MYXllclZpc2liaWxpdHlDaGFuZ2UiLCJuZXdTdGF0ZSIsImxlbmd0aCIsImlzVmlzaWJsZSIsImFuaW1hdGlvbiIsInVwZGF0ZUFuaW1hdGlvbkRvbWFpbiIsInBpY2tDaGFuZ2VkUHJvcHMiLCJwcmV2IiwibmV4dCIsImNoYW5nZWRQcm9wcyIsInBpY2tQcm9wc09mIiwib2JqIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJrZXkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJWSVNVQUxfQ0hBTk5FTF9QUk9QX1RZUEVTIiwiYXBwbHlMYXllckNvbmZpZ1VwZGF0ZXIiLCJhY3Rpb24iLCJfc2VyaWFsaXplTGF5ZXIiLCJvbGRMYXllcklkIiwibmV3TGF5ZXJDb25maWciLCJsYXllckluZGV4IiwibmV3UGFyc2VkTGF5ZXIiLCJvbGRMYXllciIsImZpbmQiLCJsIiwiZGF0YXNldCIsImRhdGFJZCIsIm5ld0xheWVyIiwibmV4dFN0YXRlIiwidHlwZSIsIm9sZExheWVySW5kZXgiLCJmaW5kSW5kZXgiLCJsYXllclR5cGVDaGFuZ2VVcGRhdGVyIiwibmV3TGF5ZXJJZCIsInNlcmlhbGl6ZWRPbGRMYXllciIsInNlcmlhbGl6ZWROZXdMYXllciIsImNoYW5nZWQiLCJ2aXNDb25maWciLCJsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIiLCJ2aXN1YWxDaGFubmVscyIsImNoYW5uZWxOYW1lIiwiY2hhbm5lbCIsImNoYW5uZWxQcm9wTmFtZXMiLCJwcm9wIiwic29tZSIsImxheWVyVmlzdWFsQ2hhbm5lbENoYW5nZVVwZGF0ZXIiLCJfaXRlcmF0b3IiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIl9zdGVwIiwicyIsIm4iLCJkb25lIiwidmFsdWUiLCJlcnIiLCJlIiwiZiIsImxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlciIsInVwZGF0ZWxheWVyVmlzaWJpbHR5IiwiZmlsdGVySW5kZXgiLCJmaWx0ZXJTeW5jZWRXaXRoVGltZWxpbmUiLCJzeW5jVGltZUZpbHRlcldpdGhMYXllclRpbWVsaW5lVXBkYXRlciIsImVuYWJsZSIsInByb3BzIiwibmV3Q29uZmlnIiwiX2FjdGlvbiRuZXdDb25maWciLCJyZXN0Q29uZmlnIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwiX2V4Y2x1ZGVkIiwic3RhdGVXaXRoRGF0YUlkIiwibGF5ZXJEYXRhSWRDaGFuZ2VVcGRhdGVyIiwibmV4dExheWVyIiwidXBkYXRlTGF5ZXJDb25maWciLCJzaG91bGRDYWxjdWxhdGVMYXllckRhdGEiLCJvbGRMYXllckRhdGEiLCJ1cGRhdGVMYXllckRhdGFSZXN1bHQiLCJsYXllckFuaW1hdGlvbkNoYW5nZVVwZGF0ZXIiLCJfZGVmaW5lUHJvcGVydHkiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhIiwibGF5ZXJUb2dnbGVWaXNpYmlsaXR5VXBkYXRlciIsImxheWVySWQiLCJzcGxpdE1hcElkIiwibWFwSW5kZXgiLCJzbSIsInRvZ2dsZUxheWVyRm9yTWFwVXBkYXRlciIsInN5bmNlZFdpdGhMYXllclRpbWVsaW5lIiwibGF5ZXJTZXRJc1ZhbGlkVXBkYXRlciIsImlzVmFsaWQiLCJsYXllclRvVXBkYXRlIiwibmV3RGF0YSIsIl9jYWxjdWxhdGVMYXllckRhdGEyIiwiYWRkT3JSZW1vdmVUZXh0TGFiZWxzIiwibmV3RmllbGRzIiwidGV4dExhYmVsIiwiZGVmYXVsdFRleHRMYWJlbCIsImFyZ3VtZW50cyIsIm5ld1RleHRMYWJlbCIsInNsaWNlIiwiY3VycmVudEZpZWxkcyIsInRsIiwiZmllbGQiLCJuYW1lIiwiZmlsdGVyIiwiYWRkRmllbGRzIiwiaW5jbHVkZXMiLCJkZWxldGVGaWVsZHMiLCJmZCIsImNvbmNhdCIsIl90b0NvbnN1bWFibGVBcnJheSIsImFmIiwiX3RleHRMYWJlbCRmaW5kJGNvbGxpIiwiX3RleHRMYWJlbCRmaW5kIiwiY29sbGlzaW9uRW5hYmxlZCIsIkJvb2xlYW4iLCJ1cGRhdGVUZXh0TGFiZWxQcm9wQW5kVmFsdWUiLCJzcGxpY2UiLCJsYXllclRleHRMYWJlbENoYW5nZVVwZGF0ZXIiLCJfb2xkTGF5ZXIkZ2V0RGVmYXVsdEwiLCJfb2xkTGF5ZXIkZ2V0RGVmYXVsdEwyIiwiZ2V0RGVmYXVsdExheWVyQ29uZmlnIiwiX3RleHRMYWJlbCQiLCJ2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YSIsImxvYWRlZExheWVyIiwiYWxsb3dFbXB0eUNvbHVtbiIsImlzVmFsaWRUb1NhdmUiLCJ2YWxpZGF0ZWQiLCJvbGRMYXllclR5cGUiLCJuZXdEYXRhc2V0RmllbGRzIiwiZmllbGRzIiwicmVtYXBwZWRGaWVsZHMiLCJ2YWx1ZXMiLCJfcmVmMiIsImZpZWxkS2V5IiwiY3VycmVudEZpZWxkIiwibWF0Y2hlZCIsIl9yZWYzIiwidmFsaWRhdGVWaXN1YWxDaGFubmVsIiwiaXNDb25maWdBY3RpdmUiLCJ1cGRhdGVMYXllckRvbWFpbiIsIl9jYWxjdWxhdGVMYXllckRhdGEzIiwic2V0SW5pdGlhbExheWVyQ29uZmlnIiwicmVzdWx0IiwiZmluZERlZmF1bHRMYXllclByb3BzIiwiQXJyYXkiLCJpc0FycmF5IiwibmV3VHlwZSIsIm9sZElkIiwiZXJyb3IiLCJkZWZhdWx0TGF5ZXJQcm9wcyIsImFzc2lnbkNvbmZpZ1RvTGF5ZXIiLCJ2aXNDb25maWdTZXR0aW5ncyIsImlzTGF5ZXJIb3ZlcmVkIiwiX2NhbGN1bGF0ZUxheWVyRGF0YTQiLCJzZXR0aW5ncyIsIl9zZXR0aW5ncyRsYXllcnMiLCJvbGRMYXllck1hcCIsIm90aGVyTGF5ZXJzIiwiX3RvUHJvcGVydHlLZXkiLCJyZXNvbHZlVmlzdWFsQ2hhbm5lbEZpZWxkRnJvbURhdGFzZXQiLCJ2aXN1YWxDaGFubmVsIiwiaW5jb21pbmciLCJfdHlwZW9mIiwiZm91bmQiLCJuZXdWaXNDb25maWciLCJ1cGRhdGVMYXllclZpc0NvbmZpZyIsInVwZGF0ZUxheWVyVmlzdWFsQ2hhbm5lbCIsInVwZGF0ZWRTdGF0ZSIsImNoYW5uZWxTY2FsZVR5cGUiLCJjb2xvciIsInVwZGF0ZUxheWVyQ29sb3JVSSIsInJhbmdlIiwiY29sb3JSYW5nZUNvbmZpZyIsImNvbG9yVUkiLCJjdXN0b21CcmVha3MiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNSIsInNjYWxlIiwiY3VzdG9tT3JkaW5hbCIsImN1c3RvbVBhbGV0dGUiLCJvcmRpbmFsRG9tYWluIiwiY29sb3JCcmVha3MiLCJzaG93Q29sb3JDaGFydCIsImNoYW5uZWxLZXkiLCJqZW5rcyIsImVkaXRCb3VuZHMiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNiIsInNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIiLCJfcmVmNCIsInJlZHVjZSIsImFjY3UiLCJzZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlciIsInNldEZpbHRlclVwZGF0ZXIiLCJzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyIiwiX3JlZjUiLCJhbmltYXRpb25XaW5kb3ciLCJuZXdGaWx0ZXIiLCJuZXdTeW5jVGltZWxpbmVNb2RlIiwiZ2V0U3luY0FuaW1hdGlvbk1vZGUiLCJzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlciIsImFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlciIsIl9zZXJpYWxpemVGaWx0ZXIiLCJmaWx0ZXJJZCIsIm9sZEZpbHRlciIsInNlcmlhbGl6ZWRPbGRGaWx0ZXIiLCJzZXJpYWxpemVkTmV3RmlsdGVyIiwiX2FjdGlvbiR2YWx1ZUluZGV4IiwidmFsdWVJbmRleCIsImRhdGFzZXRJZHNUb0ZpbHRlciIsIl9sb29wIiwicmVzIiwidiIsIl91cGRhdGVGaWx0ZXJQcm9wIiwiZW5sYXJnZWRGaWx0ZXIiLCJ2aWV3IiwiZW5sYXJnZWQiLCJzaWRlIiwiZmlsdGVyZWREYXRhc2V0cyIsImZpbHRlcldpdGhQTG90IiwidXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhIiwidGltZVJhbmdlIiwiYWRqdXN0QW5pbWF0aW9uQ29uZmlnV2l0aEZpbHRlciIsIl91cGRhdGVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgiLCJfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4IiwibmV4dFZhbHVlIiwiX2kiLCJfYXJyIiwibmV4dFZhbCIsImRvbWFpblN0ZXBzIiwibmV4dEZpbHRlciIsInN0ZXAiLCJkYXRhc2V0SWRzIiwib2xkRGF0YUlkIiwiZGF0YXNldElkIiwiX2FwcGx5RmlsdGVyRmllbGROYW1lIiwibWVyZ2VEb21haW4iLCJ1cGRhdGVkRmlsdGVyIiwibmV3RGF0YXNldCIsImdwdSIsImVuZE5hbWUiLCJfYXBwbHlUaW1lRmlsdGVyRW5kRmkiLCJncHVDaGFubmVsIiwiZ3B1RW5kQ2hhbm5lbCIsImxheWVySWREaWZmZXJlbmNlIiwibGF5ZXJEYXRhSWRzIiwibGlkIiwibmV3RGF0YUlkcyIsInNldEZpbHRlclBsb3RVcGRhdGVyIiwiX3JlZjYiLCJuZXdQcm9wIiwicGxvdFR5cGUiLCJjaGFydFR5cGUiLCJ5QXhpcyIsImxpbmVDaGFydCIsImhpc3RvZ3JhbSIsImFkZEZpbHRlclVwZGF0ZXIiLCJjcmVhdGVPclVwZGF0ZUZpbHRlclVwZGF0ZXIiLCJvcmlnaW5hbEluZGV4IiwiaW5kZXgiLCJsYXllckNvbG9yVUlDaGFuZ2VVcGRhdGVyIiwiX3JlZjciLCJvbGRWaXhDb25maWciLCJ0b2dnbGVGaWx0ZXJBbmltYXRpb25VcGRhdGVyIiwiaXNGaWx0ZXJBbmltYXRpb25Db25maWciLCJzZXRBbmltYXRpb25Db25maWdVcGRhdGVyIiwidG9nZ2xlTGF5ZXJBbmltYXRpb25VcGRhdGVyIiwidG9nZ2xlTGF5ZXJBbmltYXRpb25Db250cm9sVXBkYXRlciIsInVwZGF0ZUZpbHRlckFuaW1hdGlvblNwZWVkVXBkYXRlciIsInVwZGF0ZUxheWVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyIiwiX3JlZjgiLCJzZXRGaWx0ZXJWaWV3VXBkYXRlciIsInNob3VsZFJlc2V0T3RoZXJGaWx0ZXJzVmlldyIsInRvZ2dsZUZpbHRlckZlYXR1cmVVcGRhdGVyIiwicmVtb3ZlRmlsdGVyVXBkYXRlciIsIl9zdGF0ZSRmaWx0ZXJzJGlkeCIsIm5ld0ZpbHRlcnMiLCJuZXdFZGl0b3IiLCJhZGRMYXllclVwZGF0ZXIiLCJuZXdMYXllckRhdGEiLCJ3YXJuIiwiX2FjdGlvbiRkYXRhc2V0SWQiLCJkZWZhdWx0RGF0YXNldCIsInJlbW92ZUxheWVyVXBkYXRlciIsIl9yZWY5IiwiTnVtYmVyIiwiaXNGaW5pdGUiLCJsYXllclRvUmVtb3ZlIiwicmVtb3ZlQ2hhcnRzQW5kRmlsdGVycyIsImNoYXJ0IiwiaXNMYXllckNoYXJ0Q29uZmlnIiwicmVvcmRlckxheWVyVXBkYXRlciIsIl9yZWYwIiwib3JkZXIiLCJhZGRMYXllckdyb3VwVXBkYXRlciIsImxheWVyR3JvdXAiLCJuZXdMYXllck9yZGVyIiwicmVtb3ZlTGF5ZXJHcm91cFVwZGF0ZXIiLCJsYXllckdyb3VwVG9SZW1vdmUiLCJsYXllcklkc1RvUmVtb3ZlIiwidXBkYXRlTGF5ZXJHcm91cFVwZGF0ZXIiLCJvcHRpb25zIiwibmV3TGF5ZXJHcm91cCIsImxheWVySWRzIiwiYWNjIiwiYWRkTGF5ZXJUb0xheWVyR3JvdXBVcGRhdGVyIiwibGF5ZXJHcm91cElkIiwiZW50cnkiLCJuZXdHcm91cExheWVyT3JkZXIiLCJyZW1vdmVMYXllckZyb21MYXllckdyb3VwVXBkYXRlciIsIm5ld0xheWVyR3JvdXBPcmRlciIsInN3YXBMYXllck9yZGVyRW50cmllc1VwZGF0ZXIiLCJvcmlnaW5MYXllcklkIiwiZGVzdGluYXRpb25MYXllcklkIiwib3JpZ2luTGF5ZXJHcm91cElkIiwiZGVzdGluYXRpb25MYXllckdyb3VwSWQiLCJvcmlnaW5JbmRleCIsImRlc3RpbmF0aW9uSW5kZXgiLCJkZXN0SW5kZXgiLCJkdXBsaWNhdGVMYXllclVwZGF0ZXIiLCJfcmVmMSIsIm9yaWdpbmFsIiwib3JpZ2luYWxMYXllck9yZGVySWR4IiwibmV3TGFiZWwiLCJwb3N0Zml4IiwicGFyZW50R3JvdXAiLCJsYXllck9yZGVyV2l0aG91dFByZXBlbmRlZCIsImlkeEluR3JvdXAiLCJ1cGRhdGVkR3JvdXAiLCJhZGRFZmZlY3RVcGRhdGVyIiwiX2FjdGlvbiRjb25maWciLCJfYWN0aW9uJGNvbmZpZzIiLCJfYWN0aW9uJGNvbmZpZzMiLCJlZmZlY3QiLCJuZXdFZmZlY3QiLCJzZXRQcm9wcyIsInJlbW92ZUVmZmVjdFVwZGF0ZXIiLCJfcmVmMTAiLCJlZmZlY3RUb1JlbW92ZSIsImVmZmVjdElkIiwicmVvcmRlckVmZmVjdFVwZGF0ZXIiLCJfcmVmMTEiLCJ1cGRhdGVFZmZlY3RVcGRhdGVyIiwiX3JlZjEyIiwiaWR4MiIsImVmZmVjdE9yZGVySWQiLCJuZXh0UGFyYW1zIiwicGFyYW1ldGVycyIsInRpbWVzdGFtcCIsIm5ld0VmZmVjdHMiLCJtZXJnZUNoYXJ0Q29uZmlnIiwiZGlzcGxheSIsImNoYXJ0RGlzcGxheSIsImF4aXNGaWVsZElmUHJlc2VudCIsImF4aXMiLCJmaWVsZE5hbWVzIiwiX2F4aXMkZmllbGQiLCJoYXMiLCJkcm9wTWlzc2luZ0NoYXJ0RmllbGRzIiwiU2V0IiwieEF4aXMiLCJncm91cEJ5Iiwic2hvdWxkUmVtb3ZlIiwicmVtb3ZlZCIsInJlbW92ZWRJZHMiLCJmaWx0ZXJJZHMiLCJmbGF0TWFwIiwiX2NoYXJ0JGNyb3NzRmlsdGVyIiwiY3Jvc3NGaWx0ZXIiLCJyZWR1Y2VSaWdodCIsImFkZENoYXJ0VXBkYXRlciIsIl9yZWYxMyIsIl9jaGFydCRkaXNwbGF5JGlzQ29uZiIsIl9jaGFydCRkaXNwbGF5IiwiZXhpc3RpbmciLCJ1cGRhdGVDaGFydFVwZGF0ZXIiLCJfcmVmMTQiLCJfbmV4dCRjcm9zc0ZpbHRlcjIiLCJfcHJldiRjcm9zc0ZpbHRlciIsIl9wcmV2JGNyb3NzRmlsdGVyMiIsIl9uZXh0JGNyb3NzRmlsdGVyMyIsImRhdGFJZENoYW5nZWQiLCJsYXllcklkQ2hhbmdlZCIsIl9uZXh0JGNyb3NzRmlsdGVyIiwib3duZWRGaWx0ZXJJZHMiLCJyZW1vdmVDaGFydFVwZGF0ZXIiLCJfcmVmMTUiLCJtYWtlTmV3QW5ub3RhdGlvbiIsIl9jb25maWcka2luZCIsIl9yZWYxNiIsIl9jb25maWckdGV4dFNpZGUiLCJfcmVmMTciLCJfY29uZmlnJHRleHRWZXJ0aWNhbFAiLCJfY29uZmlnJGlkIiwiX2NvbmZpZyRpc1Zpc2libGUiLCJfY29uZmlnJGF1dG9TaXplIiwiX2NvbmZpZyRhdXRvU2l6ZVkiLCJfY29uZmlnJGFuY2hvclBvaW50IiwiX2NvbmZpZyRsYWJlbCIsIl9jb25maWckbGluZUNvbG9yIiwiX2NvbmZpZyRsaW5lV2lkdGgiLCJfY29uZmlnJHRleHRXaWR0aCIsIl9jb25maWckdGV4dEhlaWdodCIsIl9jb25maWckdGV4dFZlcnRpY2FsQSIsIl9hcm1MZW5ndGgiLCJfYXJtTGVuZ3RoMiIsIl9hcm1MZW5ndGgzIiwiX3JhZGl1c0luTWV0ZXJzIiwia2luZCIsInByb3ZpZGVkQW5nbGUiLCJhbmdsZSIsImRlcml2ZWRGcm9tQW5nbGUiLCJ0ZXh0U2lkZSIsIlRFWFQiLCJ0ZXh0VmVydGljYWxQb3NpdGlvbiIsInZlcnRpY2FsIiwiYmFzZSIsImF1dG9TaXplIiwiYXV0b1NpemVZIiwiYW5jaG9yUG9pbnQiLCJsaW5lQ29sb3IiLCJsaW5lV2lkdGgiLCJ0ZXh0V2lkdGgiLCJ0ZXh0SGVpZ2h0IiwidGV4dFZlcnRpY2FsQWxpZ24iLCJkZWZhdWx0QW5nbGUiLCJQT0lOVCIsImFybUxlbmd0aCIsIkFSUk9XIiwiQ0lSQ0xFIiwicmFkaXVzSW5NZXRlcnMiLCJhZGRBbm5vdGF0aW9uVXBkYXRlciIsIm5ld0Fubm90YXRpb24iLCJyZW1vdmVBbm5vdGF0aW9uVXBkYXRlciIsIl9yZWYxOCIsImEiLCJ1cGRhdGVBbm5vdGF0aW9uVXBkYXRlciIsIl9yZWYxOSIsIm5leHRBbm5vdGF0aW9uIiwibmV3QW5ub3RhdGlvbnMiLCJkdXBsaWNhdGVBbm5vdGF0aW9uVXBkYXRlciIsIl9yZWYyMCIsInNldFNlbGVjdGVkQW5ub3RhdGlvblVwZGF0ZXIiLCJfcmVmMjEiLCJpc0VkaXRpbmdUZXh0IiwicmVtb3ZlRGF0YXNldFVwZGF0ZXIiLCJkYXRhc2V0S2V5IiwiX3N0YXRlJGRhdGFzZXRzIiwibmV3RGF0YXNldHMiLCJsYXllcnNUb1JlbW92ZSIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJpbmRleE9mIiwicHVzaCIsInJlbW92ZURhdGFzZXRGcm9tSW50ZXJhY3Rpb25Db25maWciLCJfcmVmMjIiLCJfaW50ZXJhY3Rpb25Db25maWciLCJfY29uZmlnJGZpZWxkc1RvU2hvdyIsInVwZGF0ZUxheWVyQmxlbmRpbmdVcGRhdGVyIiwidXBkYXRlT3ZlcmxheUJsZW5kaW5nVXBkYXRlciIsInNob3dEYXRhc2V0VGFibGVVcGRhdGVyIiwidXBkYXRlVGFibGVDb2xvclVwZGF0ZXIiLCJ1cGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyIiwibmV3Q29sb3IiLCJyZXNldE1hcENvbmZpZ1VwZGF0ZXIiLCJpbml0aWFsU3RhdGUiLCJyZWNlaXZlTWFwQ29uZmlnVXBkYXRlciIsIl9yZWYyMyIsIl9yZWYyMyRwYXlsb2FkIiwicGF5bG9hZCIsIl9yZWYyMyRwYXlsb2FkJGNvbmZpZyIsIl9yZWYyMyRwYXlsb2FkJG9wdGlvbiIsInZpc1N0YXRlIiwia2VlcEV4aXN0aW5nQ29uZmlnIiwibWVyZ2VkU3RhdGUiLCJfaXRlcmF0b3IzIiwiX3N0ZXAzIiwibWVyZ2VyIiwibWVyZ2UiLCJ0b01lcmdlUHJvcCIsImxheWVySG92ZXJVcGRhdGVyIiwiaW5mbyIsImludGVyYWN0aW9uQ29uZmlnQ2hhbmdlVXBkYXRlciIsImNvbnRyYWRpY3QiLCJrIiwibGF5ZXJDbGlja1VwZGF0ZXIiLCJwaW5uZWQiLCJwaWNrZWQiLCJtYXBDbGlja1VwZGF0ZXIiLCJtb3VzZU1vdmVVcGRhdGVyIiwiX3JlZjI0IiwiZXZ0IiwicG9pbnQiLCJtb3VzZVBvc2l0aW9uIiwibG5nTGF0IiwidG9nZ2xlU3BsaXRNYXBVcGRhdGVyIiwiZHVwbGljYXRlIiwiY2xvc2VTcGVjaWZpY01hcEF0SW5kZXgiLCJfcmVmMjUiLCJoYXNUYWJ1bGFyRGF0YXNldERhdGEiLCJkYXRhIiwiX2RhdGEkcm93cyIsIl9kYXRhJGNvbHMiLCJyb3dzIiwiY29scyIsImFycm93VGFibGUiLCJuZWVkc0V4dGVybmFsbHlIb3N0ZWRIeWRyYXRlIiwiX2RhdGFzZXQkaW5mbyIsIl9kYXRhc2V0JG1ldGFkYXRhIiwiRVhURVJOQUxMWV9IT1NURUQiLCJtZXRhZGF0YSIsInNvdXJjZSIsImh5ZHJhdGVFeHRlcm5hbGx5SG9zdGVkUHJvdG9EYXRhc2V0IiwiX3giLCJfaHlkcmF0ZUV4dGVybmFsbHlIb3N0ZWRQcm90b0RhdGFzZXQiLCJhcHBseSIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlMiIsIl9yZWYyNiIsIl9kYXRhc2V0JG1ldGFkYXRhNyIsIl9kYXRhc2V0JG1ldGFkYXRhOCIsIm9uUHJvZ3Jlc3MiLCJsb2FkZWQiLCJfZGF0YXNldCRtZXRhZGF0YTkiLCJ3cmFwIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwiYXJnIiwiYWJydXB0IiwiZm9ybWF0IiwiYnlwYXNzQ2FjaGUiLCJzZW50IiwiRXJyb3IiLCJldGFnIiwibGFzdE1vZGlmaWVkIiwibGFzdEZldGNoZWRBdCIsIkRhdGUiLCJub3ciLCJyZWZyZXNoU3RhdHVzIiwic3RvcCIsIkhZRFJBVEVfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLIiwiZnJvbVByb21pc2VXaXRoUHJvZ3Jlc3MiLCJGQUlMX0NSRUFURV9EQVRBU0VUX1RBU0siLCJmcm9tUHJvbWlzZSIsIl9yZWYyNyIsIl9jYWxsZWUiLCJtZXNzYWdlIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsIl94MiIsImdldERhdGFzZXRQcm9ncmVzc0lkIiwiX2RhdGFzZXQkaW5mbzIiLCJfZGF0YXNldCRtZXRhZGF0YTIiLCJjcmVhdGVOZXdEYXRhRW50cnlUYXNrIiwicHJvZ3Jlc3NJZCIsInByb2dyZXNzIiwiX3Byb2dyZXNzJHBlcmNlbnQiLCJNYXRoIiwicm91bmQiLCJwZXJjZW50IiwiY2hhaW4iLCJoeWRyYXRlZCIsInRhc2siLCJjbGVhckxvYWRpbmdQcm9ncmVzcyIsImlkcyIsImN1cnJlbnQiLCJwYXRjaERhdGFzZXRNZXRhZGF0YSIsInBhdGNoIiwicmVmcmVzaEV4dGVybmFsbHlIb3N0ZWRUYWJsZSIsIl94MyIsIl9yZWZyZXNoRXh0ZXJuYWxseUhvc3RlZFRhYmxlIiwiX2NhbGxlZTMiLCJfcmVmMjgiLCJfY2FsbGVlMyQiLCJfY29udGV4dDMiLCJSRUZSRVNIX0VYVEVSTkFMTFlfSE9TVEVEX0RBVEFTRVRfVEFTSyIsInJlZnJlc2hEYXRhc2V0VXBkYXRlciIsIl9yZWYyOSIsIl9kYXRhc2V0JG1ldGFkYXRhMyIsIl9kYXRhc2V0JG1ldGFkYXRhNCIsIm5leHREYXRhc2V0IiwicmVmcmVzaEVycm9yIiwicmVmcmVzaFByb2dyZXNzIiwiX3Byb2dyZXNzJHBlcmNlbnQyIiwiYmltYXAiLCJyZWZyZXNoRGF0YXNldFByb2dyZXNzVXBkYXRlciIsIl9yZWYzMCIsIl9kYXRhc2V0JG1ldGFkYXRhNSIsIl9kYXRhc2V0JG1ldGFkYXRhNiIsIm5leHRQZXJjZW50IiwibWF4IiwibWluIiwiZmllbGROYW1lc0VxdWFsIiwiZXZlcnkiLCJyZWJpbmRMYXllcnNBbmRGaWx0ZXJzQWZ0ZXJTY2hlbWFDaGFuZ2UiLCJuZXh0TGF5ZXJzIiwiZHJvcHBlZExheWVycyIsInJlYm91bmQiLCJuZXh0TGF5ZXJPcmRlciIsIm5leHRTcGxpdE1hcHMiLCJuZXh0TGF5ZXJEYXRhIiwib2xkSWR4IiwiZmlsdGVyc0ZvckRhdGFzZXQiLCJvdGhlckZpbHRlcnMiLCJfdmFsaWRhdGVGaWx0ZXJzVXBkYXQiLCJ1cGRhdGVkRGF0YXNldHMiLCJuZXh0RmlsdGVycyIsInJlZnJlc2hEYXRhc2V0U3VjY2Vzc1VwZGF0ZXIiLCJfcmVmMzEiLCJfcmVzdWx0JGRhdGEiLCJtZXRhZGF0YVBhdGNoIiwic2NoZW1hVW5jaGFuZ2VkIiwibm90TW9kaWZpZWQiLCJ1cGRhdGUiLCJyZWZyZXNoZWQiLCJyZWFwcGx5RmlsdGVyc0FuZExheWVyRGF0YSIsImlzRGF0YXNldFJvd0xpc3QiLCJ0b0FycmF5Um93Iiwicm93IiwicmVjb3JkIiwibm9ybWFsaXplRGF0YXNldFJvd3MiLCJsaXN0Iiwibm9ybWFsaXplZCIsImFycmF5Um93IiwiYWRkVG9EYXRhc2V0VXBkYXRlciIsIl9yZWYzMiIsImFwcGxpZWQiLCJ1cHNlcnRCeSIsInVwc2VydFJvd3MiLCJhcHBlbmRSb3dzIiwicmVtb3ZlRnJvbURhdGFzZXRVcGRhdGVyIiwiX3JlZjMzIiwicm93SW5kZXhlcyIsImJ5RmllbGQiLCJpbmRleGVzIiwiZmluZFJvd0luZGV4ZXNCeUZpZWxkVmFsdWVzIiwicmVtb3ZlUm93cyIsInJlZnJlc2hEYXRhc2V0RXJyb3JVcGRhdGVyIiwiX3JlZjM0IiwiU3RyaW5nIiwidXBkYXRlVmlzRGF0YVVwZGF0ZXIiLCJjcmVhdGVEYXRhc2V0VGFza3MiLCJub3RpZmljYXRpb25UYXNrcyIsImh5ZHJhdGVQcm9ncmVzcyIsIl9yZWYzNSIsImRhdGFzZXRJbmRleCIsIl9yZWYzNSRpbmZvIiwicmVzdCIsIl9leGNsdWRlZDIiLCJwcm90byIsInByb2dyZXNzSWRzIiwiZGF0YXNldHNBbGxTZXR0bGVkVGFzayIsImFsbFNldHRsZWQiLCJyZXN1bHRzIiwiYWRkVG9NYXBPcHRpb25zIiwic2V0TG9hZGluZ0luZGljYXRvclVwZGF0ZXIiLCJjaGFuZ2UiLCJjcmVhdGVOZXdEYXRhc2V0U3VjY2Vzc1VwZGF0ZXIiLCJfYWN0aW9uJHBheWxvYWQiLCJuZXdEYXRhRW50cmllcyIsInN0YXR1cyIsInJlYXNvbiIsImxheWVyTWVyZ2VycyIsIm0iLCJ3YWl0Rm9yTGF5ZXJEYXRhIiwiZGF0YXNldE1lcmdlcnMiLCJwb3N0TWVyZ2VyUGF5bG9hZCIsImFwcGx5TWVyZ2Vyc1VwZGF0ZXIiLCJtZXJnZVN0YXRlUmVzdWx0IiwiYWxsTWVyZ2VkIiwicG9zdE1lcmdlVXBkYXRlciIsImxheWVyVmlzQ29uZmlnRnJvbUFkZERhdGFPcHRpb25zIiwibGF5ZXJWaXNDb25maWciLCJwb2x5Z29uRmlsdGVyRGVwZW5kc09uTGF5ZXJNZXRhIiwiX2xheWVyJGNvbmZpZyIsImdlb2pzb24iLCJjb2x1bW5Nb2RlIiwiZkRhdGFJZCIsImRhdGFzZXRGaWx0ZXJlZCIsImRhdGFFbXB0eSIsIm5ld0xheWVycyIsImF1dG9DcmVhdGVMYXllcnMiLCJhZGREZWZhdWx0TGF5ZXJzIiwibGF5ZXJzTm90SW5TcGxpdE1hcHMiLCJ0b29sdGlwRmllbGRzIiwiYXV0b0NyZWF0ZVRvb2x0aXBzIiwiYWRkRGVmYXVsdFRvb2x0aXBzIiwicG9seWdvbkZpbHRlcnMiLCJwb2x5Z29uIiwicG9seWdvbk1ldGFEYXRhSWRzIiwiX2YkbGF5ZXJJZCIsImNlbnRlck1hcCIsImJvdW5kcyIsInBhZGRpbmciLCJmaXRCb3VuZHNUYXNrIiwicmVuYW1lRGF0YXNldFVwZGF0ZXIiLCJBTExPV0VEX1VQREFURV9EQVRBU0VUX1BST1BTIiwidmFsaWRhdGVEYXRhc2V0VXBkYXRlUHJvcHMiLCJ2YWxpZGF0ZWRQcm9wcyIsImVudHJpZXMiLCJfZW50cnkiLCJfc2xpY2VkVG9BcnJheSIsInJlY29uY2lsZUxheWVyV2l0aE5ld1NjaGVtYSIsInJlbmFtZXMiLCJuZXdUYWJsZSIsIl9sYXllciRjb25maWckdGV4dExhYiIsImNvbmZpZ1BhdGNoIiwiY29sdW1uc1BhdGNoIiwiY29sdW1uc0NoYW5nZWQiLCJjb2x1bW5zIiwiX3JlZjM2IiwiX3JlZjM3IiwiY2tleSIsImNvbCIsIl9yZWYzOCIsImZpZWxkQ29uZmlnIiwibGF5ZXJDb3B5IiwiYXNzaWduIiwiY3JlYXRlIiwiZ2V0UHJvdG90eXBlT2YiLCJoYXNBbGxDb2x1bW5zIiwidXBkYXRlRGF0YXNldFVwZGF0ZXIiLCJfaW50ZXJhY3Rpb25Db25maWcyIiwiX3Rvb2x0aXAkY29uZmlnIiwiX2FjdGlvbiRyZW5hbWVzIiwidXBkYXRlU2NoZW1hIiwiZmlsdGVyZWRJZHhDUFUiLCJhbGxJbmRleGVzIiwiZmlsdGVyUmVjb3JkQ1BVIiwic29ydENvbHVtbiIsInNvcnRPcmRlciIsInBpbm5lZENvbHVtbnMiLCJfcmVuYW1lcyRuYW1lIiwiZ2V0Q29sdW1uRmllbGRJZHgiLCJuZXdGaWVsZHNCeU5hbWUiLCJfcmVuYW1lcyRvbGROYW1lIiwiX3VwZGF0ZWQkeUF4aXMiLCJ2aSIsIm9sZE5hbWUiLCJuZXdOYW1lIiwiZmllbGRJZHgiLCJfYXBwbHlGaWx0ZXJGaWVsZE5hbWUyIiwidXBkYXRlZCIsImZpbHRlclRhYmxlIiwicmVjb25jaWxlZCIsIm5leHRGaWVsZHNUb1Nob3ciLCJfcmVuYW1lcyRmJG5hbWUiLCJfc3RhdGUkc3BsaXRNYXBzJGluZGUiLCJpbmRleFRvUmV0cmlldmUiLCJtYXBMYXllcnMiLCJsb2FkRmlsZXNVcGRhdGVyIiwiZmlsZXMiLCJfYWN0aW9uJG9uRmluaXNoIiwib25GaW5pc2giLCJjb21wYW5pb25GaWxlcyIsImZyb20iLCJmaWxlc1RvTG9hZCIsImluaXRpYWxGaWxlTG9hZGluZ1Byb2dyZXNzIiwiZmlsZUNhY2hlIiwibG9hZE5leHRGaWxlVXBkYXRlciIsImxvYWRGaWxlU3RlcFN1Y2Nlc3NVcGRhdGVyIiwiZmlsZU5hbWUiLCJfc3RhdGUkZmlsZUxvYWRpbmciLCJzdGF0ZVdpdGhQcm9ncmVzcyIsInVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyIiwic3RhdGVXaXRoQ2FjaGUiLCJfZmlsZXNUb0xvYWQiLCJfdG9BcnJheSIsImZpbGUiLCJyZW1haW5pbmdGaWxlc1RvTG9hZCIsIm1ha2VMb2FkRmlsZVRhc2siLCJnZW4iLCJjb250ZW50IiwicHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlciIsIl9hY3Rpb24kcGF5bG9hZDIiLCJwYXJzZVByb2dyZXNzIiwicHJldlByb2dyZXNzIiwibmV4dEZpbGVCYXRjaFVwZGF0ZXIiLCJfcmVmMzkiLCJfYWNjdW11bGF0ZWQkZGF0YSIsIl9yZWYzOSRwYXlsb2FkIiwiYWNjdW11bGF0ZWQiLCJ1c2VBcnJvd1Byb2dyZXNzaXZlTG9hZGluZyIsImVuZHNXaXRoIiwic2tpcEFycm93Q29tcGFjdCIsIl9yZWY0MCIsImxvYWRGaWxlc0VyclVwZGF0ZXIiLCJfcmVmNDEiLCJfc3RhdGUkZmlsZUxvYWRpbmcyIiwiYXBwbHlDUFVGaWx0ZXJVcGRhdGVyIiwiX3JlZjQyIiwiZGF0YUlkcyIsInNldE1hcEluZm9VcGRhdGVyIiwiZW1wdHkiLCJkZWZhdWx0TGF5ZXJzIiwiZm91bmRMYXllcnMiLCJtZXJnZWQiLCJfcmVmNDQiLCJmaXhlZERvbWFpbiIsIl9jYWxjdWxhdGVMYXllckRhdGE3IiwiX3N0YXRlJGZpbHRlcnMiLCJhbmltYXRhYmxlTGF5ZXJzIiwibGF5ZXJEb21haW5zIiwibWVyZ2VkRG9tYWluIiwibWVyZ2VkVGltZVN0ZXBzIiwic29ydCIsInN5bmNlZEZpbHRlciIsIm5ld0FuaW1hdGlvbkRvbWFpbiIsInNldEVkaXRvck1vZGVVcGRhdGVyIiwiX3JlZjQ1Iiwic2tldGNoZXNFbmFibGVkIiwiZW5hYmxlRHJhd09uTWFwU2tldGNoZXMiLCJEUkFXX1BPSU5UIiwiRFJBV19MSU5FU1RSSU5HIiwic2V0RmVhdHVyZXNVcGRhdGVyIiwiX3JlZjQ2IiwiX2xhc3RGZWF0dXJlJHByb3BlcnRpIiwiX2xhc3RGZWF0dXJlJHByb3BlcnRpMiIsIl9yZWY0NiRmZWF0dXJlcyIsImxhc3RGZWF0dXJlIiwicHJvcGVydGllcyIsImlzQ2xvc2VkIiwic2hhcGUiLCJFRElUIiwiZmVhdHVyZSIsImZlYXR1cmVWYWx1ZSIsImZpbHRlcklkeCIsImZpbCIsImZpbmRFZGl0b3JGZWF0dXJlIiwiX3N0YXRlJGVkaXRvciRzZWxlY3RlIiwiZnJvbUVkaXRvciIsIml0ZW0iLCJzZXRFZGl0b3JGZWF0dXJlUHJvcGVydGllc1VwZGF0ZXIiLCJfcmVmNDciLCJfc3RhdGUkZWRpdG9yJHNlbGVjdGUyIiwibmV4dEZlYXR1cmUiLCJuZXh0RWRpdG9yIiwic2V0U2VsZWN0ZWRGZWF0dXJlVXBkYXRlciIsIl9yZWY0OCIsInNlbGVjdGlvbkNvbnRleHQiLCJkZWxldGVGZWF0dXJlVXBkYXRlciIsIl9yZWY0OSIsInNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXIiLCJub25lRmlsdGVyRmVhdHVyZSIsIl9maWx0ZXIkbGF5ZXJJZCIsImlzTGF5ZXJJbmNsdWRlZCIsInNrZXRjaEZlYXR1cmUiLCJzdGF0ZVdpdGhvdXRGaWx0ZXIiLCJzZXRQb2x5Z29uRmlsdGVyQWxsTGF5ZXJzVXBkYXRlciIsInZpc2libGVMYXllcklkcyIsImFsbExheWVySWRzIiwic29ydFRhYmxlQ29sdW1uVXBkYXRlciIsIl9yZWY1MCIsImNvbHVtbiIsInNvcnRNb2RlIiwiY3VycmVudE1vZGUiLCJBU0NFTkRJTkciLCJzb3J0ZWQiLCJwaW5UYWJsZUNvbHVtblVwZGF0ZXIiLCJfcmVmNTEiLCJjb3B5VGFibGVDb2x1bW5VcGRhdGVyIiwiX3JlZjUyIiwidGV4dCIsImRhdGFDb250YWluZXIiLCJ2YWx1ZUF0Iiwiam9pbiIsInNldENvbHVtbkRpc3BsYXlGb3JtYXRVcGRhdGVyIiwiX3JlZjUzIiwiZm9ybWF0cyIsImRpc3BsYXlGb3JtYXQiLCJfbGF5ZXIkY29uZmlnMiIsImNvbG9yRmllbGQiLCJnZXRNYXBwZWRWYWx1ZSIsImZpbHRlclByb3BzIiwibWFwcGVkVmFsdWUiLCJ5aWVsZEZvclBhaW50IiwiUHJvbWlzZSIsInJlc29sdmUiLCJzZXRUaW1lb3V0IiwicmVxdWVzdERhdGFzZXRDb2x1bW5TdGF0aXN0aWNzIiwiX3g0IiwiX3JlcXVlc3REYXRhc2V0Q29sdW1uU3RhdGlzdGljcyIsIl9jYWxsZWU0IiwiX3JlZjU0IiwiX2NhbGxlZTQkIiwiX2NvbnRleHQ0IiwiZ2V0Q29sdW1uRmlsdGVyUHJvcHMiLCJmaWVsZFR5cGUiLCJMT0FEX0NPTFVNTl9TVEFUU19UQVNLIiwibG9hZENvbHVtblN0YXRzVXBkYXRlciIsIl9yZWY1NSIsImZpZWxkTmFtZSIsImZpZWxkTmFtZXNUb0xvYWQiLCJmaWVsZHNUb0xvYWQiLCJpc0xvYWRpbmdTdGF0cyIsInRhc2tzIiwiX3JlZjU2IiwibG9hZENvbHVtblN0YXRzU3VjY2Vzc1VwZGF0ZXIiLCJfcmVmNTciLCJuZXdGaWx0ZXJQcm9wcyIsImNvbHVtblN0YXRzIiwibG9hZENvbHVtblN0YXRzRXJyb3JVcGRhdGVyIiwiX3JlZjU4IiwidG9nZ2xlRWRpdG9yVmlzaWJpbGl0eVVwZGF0ZXIiLCJjb252ZXJ0RWRpdG9yRmVhdHVyZXNUb0xheWVyVXBkYXRlciIsIl9hY3Rpb24iLCJjbGVhcmVkU3RhdGUiLCJsYWJlbElkIiwiZmxvb3IiLCJyYW5kb20iLCJleHRyYWN0RGF0YUZyb21GZWF0dXJlVXBkYXRlciIsIl9yZWY1OSIsImV4dHJhY3RlZCIsInJvd0NvdW50Iiwic2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ1VwZGF0ZXIiLCJfcmVmNjAiLCJ1cGRhdGVzIiwiY2hlY2tUaW1lQ29uZmlnQXJncyIsImFsbG93ZWQiLCJzZXRMYXllckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyIiwiX3JlZjYxIiwibGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlVXBkYXRlciIsIl9sYXllciRmaWx0ZXJlZEl0ZW1DbyIsImV2ZW50IiwiZGVja2dsTGF5ZXJJZCIsImNvdW50IiwiZmlsdGVyZWRJdGVtQ291bnQiLCJ3bXNGZWF0dXJlSW5mb1VwZGF0ZXIiLCJmZWF0dXJlSW5mbyIsIm9iamVjdCIsIndtc0ZlYXR1cmVJbmZvIiwiX25ld1N0YXRlJGFuaW1hdGlvbkNvIiwiX25ld1N0YXRlJGFuaW1hdGlvbkNvMiIsIl9hY3Rpb24kZW5hYmxlIiwiaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyIsImhhc0ludGVydmFsQmFzZWRBbmltYXRpb25MYXllciIsIm5ld0ZpbHRlckRvbWFpbiIsImludGVydmFsIiwiYWRqdXN0VGltZUZpbHRlckludGVydmFsIiwibmV3RmlsdGVyVmFsdWUiLCJzeW5jVGltZWxpbmVNb2RlIiwiZW5kIiwidmFsaWRhdGVTeW5jQW5pbWF0aW9uTW9kZSIsIl9yZWY2MiIsInNldExvYWRpbmdQcm9ncmVzc1VwZGF0ZXIiLCJfcmVmNjMiLCJfc3RhdGUkbG9hZGluZ1Byb2dyZXMiLCJ0aW1lbGluZVZhbHVlIiwiZ2V0VGltZWxpbmVWYWx1ZUZyb21GaWx0ZXIiLCJmcmVlIiwiX2ZpbHRlciRzeW5jVGltZWxpbmVNIiwibmV3TW9kZSIsInN0YXJ0IiwiaW50ZXJ2YWxJbmRleCIsImN1cnJlbnRJbmRleCIsIm1ldGEiLCJ0YXJnZXRUaW1lSW50ZXJ2YWwiLCJuZXdJbmRleCIsImxheWVyVGltZUludGVydmFsIiwidXBkYXRlZFBsb3RUeXBlIiwiZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzIiwiZGF0YUlkVG9SZXBsYWNlIiwiX3ZhbHVlJGNvbmZpZyIsIl92YWx1ZSRjb25maWcyIiwicmVwbGFjZWQiLCJmaW5kQ2hpbGREYXRhc2V0SWRzIiwiX3ZhbHVlJG5ld0RhdGFzZXQiLCJjaGlsZERhdGFJZHMiLCJtb3ZlVmFsdWVUb0JlTWVyZ2VkIiwicHJvcFZhbHVlcyIsIl9yZWY2NSIsInNhdmVVbm1lcmdlZCIsInN0YXRlUmVtb3ZlZCIsInByb3BWYWx1ZSIsInAiLCJ0b0JlTWVyZ2VkIiwicmVwbGFjZURhdGFzZXRBbmREZXBzIiwiZGF0YUlkVG9Vc2UiLCJyZXBsYWNlRGF0YXNldERlcHNJblN0YXRlIiwicHJlcGFyZVN0YXRlRm9yRGF0YXNldFJlcGxhY2UiLCJfbmV4dFN0YXRlJGxheWVyVG9CZU0iLCJzZXJpYWxpemVkU3RhdGUiLCJwcmVzZXJ2ZUxheWVyT3JkZXIiLCJwcmVzZXJ2ZURhdGFzZXRPcmRlciIsIl9zZXJpYWxpemVkU3RhdGUkc3BsaSIsInByZXNlcnZlZE9yZGVyV2l0aFBhcmtlZCIsInByZXZpb3VzT3JkZXIiLCJwYXJrZWQiLCJwYXJrZWRJZHMiLCJrbm93biIsIm9yZGVyZWQiLCJfcmVmNjYiLCJhY2N1U3RhdGUiLCJfcmVmNjciLCJyZXBsYWNlUGFyZW50RGF0YXNldElkcyIsImdldENoaWxkRGF0YXNldElkcyIsInByZXNlcnZlT3JkZXIiLCJ0b01lcmdlUHJvcHMiLCJzYXZlZFByb3BzIiwicmVwbGFjZWRTdGF0ZSIsIl9yZXBsYWNlZFN0YXRlJG1lcmdlciIsIl9yZXBsYWNlZFN0YXRlJG1lcmdlcjIiLCJtZXJnZXJPcHRpb25zIiwicGFya2VkRWxzZXdoZXJlIiwicmVwbGFjZWRJdGVtIiwicmVwbGFjZVByb3BWYWx1ZUluU3RhdGUiLCJfcmVmNjgiLCJjaGlsZERhdGFJZCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92aXMtc3RhdGUtdXBkYXRlcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtiYm94fSBmcm9tICdAdHVyZi9iYm94JztcbmltcG9ydCB0eXBlIHtBbGxHZW9KU09OfSBmcm9tICdAdHVyZi9oZWxwZXJzJztcbmltcG9ydCBjb3B5IGZyb20gJ2NvcHktdG8tY2xpcGJvYXJkJztcbmltcG9ydCBkZWVwbWVyZ2UgZnJvbSAnZGVlcG1lcmdlJztcbmltcG9ydCB7Y29uc29sZSBhcyBDb25zb2xlfSBmcm9tICdnbG9iYWwvd2luZG93JztcbmltcG9ydCBjbG9uZURlZXAgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvY2xvbmVEZWVwJztcbmltcG9ydCBnZXQgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvZ2V0JztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L2lzRXF1YWwnO1xuaW1wb3J0IHBpY2sgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvcGljayc7XG5pbXBvcnQgdW5pcSBmcm9tICdlcy10b29sa2l0L2NvbXBhdC91bmlxJztcbmltcG9ydCB4b3IgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQveG9yJztcbmltcG9ydCBUYXNrLCB7ZGlzYWJsZVN0YWNrQ2FwdHVyaW5nLCB3aXRoVGFza30gZnJvbSAnQGtlcGxlci5nbC90YXNrcyc7XG5pbXBvcnQgdHlwZSB7VGFza0Rlc2NyaXB0b3J9IGZyb20gJ0BrZXBsZXIuZ2wvdGFza3MnO1xuLy8gVGFza3NcbmltcG9ydCB7XG4gIERFTEFZX1RBU0ssXG4gIEFDVElPTl9UQVNLLFxuICBMT0FEX0ZJTEVfVEFTSyxcbiAgUFJPQ0VTU19GSUxFX0RBVEEsXG4gIFVOV1JBUF9UQVNLXG59IGZyb20gJ0BrZXBsZXIuZ2wvdGFza3MnO1xuLy8gQWN0aW9uc1xuaW1wb3J0IHtcbiAgYWRkTm90aWZpY2F0aW9uLFxuICBBY3Rpb25UeXBlcyxcbiAgQ3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3NQYXlsb2FkLFxuICBNYXBTdGF0ZUFjdGlvbnMsXG4gIFJlY2VpdmVNYXBDb25maWdQYXlsb2FkLFxuICBWaXNTdGF0ZUFjdGlvbnMsXG4gIGFwcGx5TGF5ZXJDb25maWcsXG4gIGNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzLFxuICBsYXllckNvbmZpZ0NoYW5nZSxcbiAgbGF5ZXJUeXBlQ2hhbmdlLFxuICBsYXllclZpc0NvbmZpZ0NoYW5nZSxcbiAgbGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlLFxuICBsb2FkRmlsZVN0ZXBTdWNjZXNzLFxuICBsb2FkRmlsZXNFcnIsXG4gIGxvYWRGaWxlc1N1Y2Nlc3MsXG4gIGxvYWROZXh0RmlsZSxcbiAgbmV4dEZpbGVCYXRjaCxcbiAgc2V0RmlsdGVyLFxuICBwcm9jZXNzRmlsZUNvbnRlbnQsXG4gIGZpdEJvdW5kcyBhcyBmaXRNYXBCb3VuZHMsXG4gIHRvZ2dsZUxheWVyRm9yTWFwLFxuICBhcHBseUZpbHRlckNvbmZpZyxcbiAgU2V0TG9hZGluZ0luZGljYXRvclBheWxvYWQsXG4gIGxvYWRDb2x1bW5TdGF0c1N1Y2Nlc3MsXG4gIGxvYWRDb2x1bW5TdGF0c0Vycm9yLFxuICByZWZyZXNoRGF0YXNldFN1Y2Nlc3MsXG4gIHJlZnJlc2hEYXRhc2V0RXJyb3IsXG4gIHJlZnJlc2hEYXRhc2V0UHJvZ3Jlc3MsXG4gIHNldExvYWRpbmdQcm9ncmVzc1xufSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuXG4vLyBVdGlsc1xuaW1wb3J0IHtcbiAgRklMVEVSX1VQREFURVJfUFJPUFMsXG4gIGFkZE5ld0xheWVyc1RvU3BsaXRNYXAsXG4gIHNuYXBUb01hcmtzLFxuICBhcHBseUZpbHRlckZpZWxkTmFtZSxcbiAgYXBwbHlUaW1lRmlsdGVyRW5kRmllbGROYW1lLFxuICBhcHBseUZpbHRlcnNUb0RhdGFzZXRzLFxuICBhcnJheUluc2VydCxcbiAgY29tYmluZVNwbGl0TWFwc0J5SW5kZXgsXG4gIGNvbXB1dGVTcGxpdE1hcExheWVycyxcbiAgYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbixcbiAgZXJyb3JOb3RpZmljYXRpb24sXG4gIGVkaXRvckZlYXR1cmVzVG9GZWF0dXJlQ29sbGVjdGlvbixcbiAgZXh0cmFjdFJvd3NJbnNpZGVGZWF0dXJlLFxuICBpc1ZlY3RvclRpbGVFeHRyYWN0TGF5ZXIsXG4gIG1lcmdlVXNlckZlYXR1cmVQcm9wZXJ0aWVzLFxuICB0b1NrZXRjaEZlYXR1cmUsXG4gIGZlYXR1cmVUb0ZpbHRlclZhbHVlLFxuICBmaWx0ZXJEYXRhc2V0Q1BVLFxuICBnZW5lcmF0ZVBvbHlnb25GaWx0ZXIsXG4gIGdldERlZmF1bHRGaWx0ZXIsXG4gIGdldEZpbHRlcklkSW5GZWF0dXJlLFxuICBnZXRUaW1lV2lkZ2V0VGl0bGVGb3JtYXR0ZXIsXG4gIGlzSW5SYW5nZSxcbiAgaXNPYmplY3QsXG4gIGlzUGxhaW5PYmplY3QsXG4gIGlzUmdiQ29sb3IsXG4gIHBhcnNlRmllbGRWYWx1ZSxcbiAgcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzLFxuICBzZXQsXG4gIHVwZGF0ZUZpbHRlclBsb3QsXG4gIHJlbW92ZUZpbHRlclBsb3QsXG4gIGlzTGF5ZXJBbmltYXRhYmxlLFxuICBpc1NpZGVGaWx0ZXIsXG4gIGdldEFwcGxpY2F0aW9uQ29uZmlnLFxuICB2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0c1xufSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7Z2VuZXJhdGVIYXNoSWQsIHRvQXJyYXksIGFycmF5TW92ZX0gZnJvbSAnQGtlcGxlci5nbC9jb21tb24tdXRpbHMnO1xuLy8gTWVyZ2Vyc1xuaW1wb3J0IHtcbiAgQU5JTUFUSU9OX1dJTkRPVyxcbiAgQkFTRV9TUEVFRCxcbiAgQ09NUEFSRV9UWVBFUyxcbiAgREVGQVVMVF9URVhUX0xBQkVMLFxuICBFRElUT1JfTU9ERVMsXG4gIEZJTFRFUl9UWVBFUyxcbiAgRklMVEVSX1ZJRVdfVFlQRVMsXG4gIExBWUVSX1RZUEVTLFxuICBGUFMsXG4gIExJR0hUX0FORF9TSEFET1dfRUZGRUNULFxuICBESVNUQU5DRV9GT0dfVFlQRSxcbiAgU1VSRkFDRV9GT0dfVFlQRSxcbiAgTUFYX0RFRkFVTFRfVE9PTFRJUFMsXG4gIFBMT1RfVFlQRVMsXG4gIFNPUlRfT1JERVIsXG4gIFNZTkNfVElNRUxJTkVfTU9ERVMsXG4gIENIQU5ORUxfU0NBTEVTLFxuICBTQ0FMRV9UWVBFUyxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0tJTkQsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9BTkdMRSxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0FSTV9MRU5HVEgsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9URVhUX1dJRFRILFxuICBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9IRUlHSFQsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX1dJRFRILFxuICBJTklUSUFMX0FOTk9UQVRJT05fTElORV9DT0xPUixcbiAgSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfU0lERSxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfVkVSVElDQUxfUE9TSVRJT04sXG4gIEFOTk9UQVRJT05fQU5HTEVfQllfUExBQ0VNRU5ULFxuICB0ZXh0UGxhY2VtZW50RnJvbUFuZ2xlLFxuICBBbm5vdGF0aW9uS2luZCxcbiAgRGF0YXNldFR5cGUsXG4gIGdldERhdGFzZXRSZWZyZXNoSW50ZXJ2YWxNcyxcbiAgZ2V0UmVtb3RlU291cmNlRm9ybWF0XG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7TEFZRVJfSURfTEVOR1RILCBMYXllciwgTGF5ZXJDbGFzc2VzfSBmcm9tICdAa2VwbGVyLmdsL2xheWVycyc7XG5pbXBvcnQge1xuICBhcHBseV8sXG4gIGNvbXBvc2VfLFxuICBmaWx0ZXJPdXRCeUlkLFxuICBtZXJnZV8sXG4gIHBheWxvYWRfLFxuICBwaWNrXyxcbiAgcmVtb3ZlRWxlbWVudEF0SW5kZXgsXG4gIHN3YXBfXG59IGZyb20gJy4vY29tcG9zZXItaGVscGVycyc7XG5pbXBvcnQge2lzVmFsaWRNZXJnZXIsIG1lcmdlU3RhdGVGcm9tTWVyZ2Vyc30gZnJvbSAnLi9tZXJnZXItaGFuZGxlcic7XG5pbXBvcnQge1xuICBWSVNfU1RBVEVfTUVSR0VSUyxcbiAgY3JlYXRlTGF5ZXJGcm9tQ29uZmlnLFxuICBpc1NhdmVkTGF5ZXJDb25maWdWMSxcbiAgcGFyc2VMYXllckNvbmZpZyxcbiAgc2VyaWFsaXplRmlsdGVyLFxuICBzZXJpYWxpemVMYXllcixcbiAgc2VyaWFsaXplVmlzU3RhdGUsXG4gIHZhbGlkYXRlTGF5ZXJXaXRoRGF0YVxufSBmcm9tICcuL3Zpcy1zdGF0ZS1tZXJnZXInO1xuXG5pbXBvcnQgS2VwbGVyR0xTY2hlbWEsIHtNZXJnZXIsIFBvc3RNZXJnZXJQYXlsb2FkLCBWaXNTdGF0ZX0gZnJvbSAnQGtlcGxlci5nbC9zY2hlbWFzJztcbmltcG9ydCB7Z2V0RmlsZXNUb1BhcnNlLCBsb2FkRXh0ZXJuYWxseUhvc3RlZERhdGFzZXQsIHByb2Nlc3NHZW9qc29ufSBmcm9tICdAa2VwbGVyLmdsL3Byb2Nlc3NvcnMnO1xuXG5pbXBvcnQge1xuICBGaWx0ZXIsXG4gIEZlYXR1cmUsXG4gIEludGVyYWN0aW9uQ29uZmlnLFxuICBBbmltYXRpb25Db25maWcsXG4gIEZpbHRlckFuaW1hdGlvbkNvbmZpZyxcbiAgRWRpdG9yLFxuICBGaWVsZCxcbiAgTGF5ZXJWaXNDb25maWcsXG4gIFRpbWVSYW5nZUZpbHRlcixcbiAgQW5ub3RhdGlvbixcbiAgQW5ub3RhdGlvblByb3BzUGFydGlhbCxcbiAgUHJvdG9EYXRhc2V0LFxuICBDaGFydENvbmZpZyxcbiAgTGF5ZXJDaGFydENvbmZpZ1xufSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7TG9hZGVyfSBmcm9tICdAbG9hZGVycy5nbC9sb2FkZXItdXRpbHMnO1xuXG5pbXBvcnQge1xuICBEYXRhc2V0cyxcbiAgS2VwbGVyVGFibGUsXG4gIEZpbHRlclByb3BzLFxuICBhc3NpZ25HcHVDaGFubmVsLFxuICBjb3B5VGFibGVBbmRVcGRhdGUsXG4gIGNyZWF0ZU5ld0RhdGFFbnRyeSxcbiAgcGluVGFibGVDb2x1bW5zLFxuICBzZXRGaWx0ZXJHcHVNb2RlLFxuICBzb3J0RGF0YXNldEJ5Q29sdW1uXG59IGZyb20gJ0BrZXBsZXIuZ2wvdGFibGUnO1xuaW1wb3J0IHtmaW5kRmllbGRzVG9TaG93fSBmcm9tICcuL2ludGVyYWN0aW9uLXV0aWxzJztcbmltcG9ydCB7XG4gIGNhbGN1bGF0ZUxheWVyRGF0YSxcbiAgZmluZERlZmF1bHRMYXllcixcbiAgZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMsXG4gIG1lcmdlTGF5ZXJWaXNDb25maWdGb3JOZXdEYXRhc2V0cyxcbiAgZ2V0TmV3TGF5ZXJHcm91cCxcbiAgYWRkTGF5ZXJPckdyb3VwVG9MYXllck9yZGVyLFxuICByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIsXG4gIGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcixcbiAgZmluZFBhcmVudEdyb3VwRm9yTGF5ZXIsXG4gIGdldEluZGV4RnJvbUxheWVyRW50cnlJZCxcbiAgdXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlcixcbiAgZ2V0RmxhdExheWVyT3JkZXIsXG4gIHJlcGxhY2VMYXllckVudHJ5SW5MYXllck9yZGVyXG59IGZyb20gJy4vbGF5ZXItdXRpbHMnO1xuaW1wb3J0IHtnZXRQcm9wVmFsdWVUb01lcmdlciwgaGFzUHJvcHNUb01lcmdlfSBmcm9tICcuL21lcmdlci1oYW5kbGVyJztcbmltcG9ydCB7bWVyZ2VEYXRhc2V0c0J5T3JkZXJ9IGZyb20gJy4vdmlzLXN0YXRlLW1lcmdlcic7XG5pbXBvcnQge1xuICBmaXhFZmZlY3RPcmRlcixcbiAgZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMsXG4gIGdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMsXG4gIG1lcmdlVGltZURvbWFpbnMsXG4gIGFkanVzdFZhbHVlVG9BbmltYXRpb25XaW5kb3csXG4gIHVwZGF0ZVRpbWVGaWx0ZXJQbG90VHlwZSxcbiAgZ2V0RGVmYXVsdFRpbWVGb3JtYXQsXG4gIExheWVyVG9GaWx0ZXJUaW1lSW50ZXJ2YWwsXG4gIFRJTUVfSU5URVJWQUxTX09SREVSRUQsXG4gIG1lcmdlRmlsdGVyRG9tYWluLFxuICBpbml0Q3VzdG9tUGFsZXR0ZUJ5Q3VzdG9tU2NhbGUsXG4gIGNvbGxlY3RDb2x1bW5WYWx1ZXMsXG4gIGdldENvbHVtblN0YXRpc3RpY3Ncbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQge2NyZWF0ZUVmZmVjdH0gZnJvbSAnQGtlcGxlci5nbC9lZmZlY3RzJztcbmltcG9ydCB7UGF5bG9hZEFjdGlvbn0gZnJvbSAnQHJlZHV4anMvdG9vbGtpdCc7XG5cbmltcG9ydCB7ZmluZE1hcEJvdW5kc30gZnJvbSAnLi9kYXRhLXV0aWxzJztcblxuLy8gZGlzYWJsZSBzdGFjayBjYXB0dXJlIGZvciB3aXRoVGFzayBjYWxscyB0aGF0IGhhcHBlbiBvdXRzaWRlIHN0cmljdCByZWR1Y2VyIGNvbnRleHRcbmRpc2FibGVTdGFja0NhcHR1cmluZygpO1xuXG4vKipcbiAqIFVwZGF0ZXJzIGZvciBgdmlzU3RhdGVgIHJlZHVjZXIuIENhbiBiZSB1c2VkIGluIHlvdXIgcm9vdCByZWR1Y2VyIHRvIGRpcmVjdGx5IG1vZGlmeSBrZXBsZXIuZ2wncyBzdGF0ZS5cbiAqIFJlYWQgbW9yZSBhYm91dCBbVXNpbmcgdXBkYXRlcnNdKC4uL2FkdmFuY2VkLXVzYWdlL3VzaW5nLXVwZGF0ZXJzLm1kKVxuICpcbiAqIEBwdWJsaWNcbiAqIEBleGFtcGxlXG4gKlxuICogaW1wb3J0IGtlcGxlckdsUmVkdWNlciwge3Zpc1N0YXRlVXBkYXRlcnN9IGZyb20gJ0BrZXBsZXIuZ2wvcmVkdWNlcnMnO1xuICogLy8gUm9vdCBSZWR1Y2VyXG4gKiBjb25zdCByZWR1Y2VycyA9IGNvbWJpbmVSZWR1Y2Vycyh7XG4gKiAga2VwbGVyR2w6IGtlcGxlckdsUmVkdWNlcixcbiAqICBhcHA6IGFwcFJlZHVjZXJcbiAqIH0pO1xuICpcbiAqIGNvbnN0IGNvbXBvc2VkUmVkdWNlciA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gKiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICogICAgY2FzZSAnQ0xJQ0tfQlVUVE9OJzpcbiAqICAgICAgcmV0dXJuIHtcbiAqICAgICAgICAuLi5zdGF0ZSxcbiAqICAgICAgICBrZXBsZXJHbDoge1xuICogICAgICAgICAgLi4uc3RhdGUua2VwbGVyR2wsXG4gKiAgICAgICAgICBmb286IHtcbiAqICAgICAgICAgICAgIC4uLnN0YXRlLmtlcGxlckdsLmZvbyxcbiAqICAgICAgICAgICAgIHZpc1N0YXRlOiB2aXNTdGF0ZVVwZGF0ZXJzLmVubGFyZ2VGaWx0ZXJVcGRhdGVyKFxuICogICAgICAgICAgICAgICBzdGF0ZS5rZXBsZXJHbC5mb28udmlzU3RhdGUsXG4gKiAgICAgICAgICAgICAgIHtpZHg6IDB9XG4gKiAgICAgICAgICAgICApXG4gKiAgICAgICAgICB9XG4gKiAgICAgICAgfVxuICogICAgICB9O1xuICogIH1cbiAqICByZXR1cm4gcmVkdWNlcnMoc3RhdGUsIGFjdGlvbik7XG4gKiB9O1xuICpcbiAqIGV4cG9ydCBkZWZhdWx0IGNvbXBvc2VkUmVkdWNlcjtcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG4vLyBAdHMtaWdub3JlXG5jb25zdCB2aXNTdGF0ZVVwZGF0ZXJzID0gbnVsbDtcbi8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0SW50ZXJhY3Rpb25Db25maWc6IEludGVyYWN0aW9uQ29uZmlnID0ge1xuICB0b29sdGlwOiB7XG4gICAgaWQ6ICd0b29sdGlwJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy50b29sdGlwJyxcbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIGNvbmZpZzoge1xuICAgICAgZmllbGRzVG9TaG93OiB7fSxcbiAgICAgIGNvbXBhcmVNb2RlOiBmYWxzZSxcbiAgICAgIGNvbXBhcmVUeXBlOiBDT01QQVJFX1RZUEVTLkFCU09MVVRFXG4gICAgfVxuICB9LFxuICBnZW9jb2Rlcjoge1xuICAgIGlkOiAnZ2VvY29kZXInLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLmdlb2NvZGVyJyxcbiAgICBlbmFibGVkOiBmYWxzZSxcbiAgICBwb3NpdGlvbjogbnVsbCxcbiAgICBjb25maWc6IHtcbiAgICAgIGxpbWl0U2VhcmNoOiBmYWxzZVxuICAgIH1cbiAgfSxcbiAgYnJ1c2g6IHtcbiAgICBpZDogJ2JydXNoJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy5icnVzaCcsXG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgY29uZmlnOiB7XG4gICAgICAvLyBzaXplIGlzIGluIGttXG4gICAgICBzaXplOiAwLjVcbiAgICB9XG4gIH0sXG4gIGNvb3JkaW5hdGU6IHtcbiAgICBpZDogJ2Nvb3JkaW5hdGUnLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLmNvb3JkaW5hdGUnLFxuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIHBvc2l0aW9uOiBudWxsXG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0FOSU1BVElPTl9DT05GSUc6IEFuaW1hdGlvbkNvbmZpZyA9IHtcbiAgZG9tYWluOiBudWxsLFxuICBjdXJyZW50VGltZTogbnVsbCxcbiAgc3BlZWQ6IDEsXG4gIGlzQW5pbWF0aW5nOiBmYWxzZSxcbiAgdGltZVN0ZXBzOiBudWxsLFxuICB0aW1lRm9ybWF0OiBudWxsLFxuICB0aW1lem9uZTogbnVsbCxcbiAgZGVmYXVsdFRpbWVGb3JtYXQ6IG51bGwsXG4gIGhpZGVDb250cm9sOiBmYWxzZSxcbiAgZHVyYXRpb246IG51bGxcbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0VESVRPUjogRWRpdG9yID0ge1xuICBtb2RlOiBFRElUT1JfTU9ERVMuRFJBV19QT0xZR09OLFxuICBmZWF0dXJlczogW10sXG4gIHNlbGVjdGVkRmVhdHVyZTogbnVsbCxcbiAgdmlzaWJsZTogdHJ1ZVxufTtcblxuLyoqXG4gKiBEZWZhdWx0IGluaXRpYWwgYHZpc1N0YXRlYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBjb25zdGFudFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgSU5JVElBTF9WSVNfU1RBVEU6IFZpc1N0YXRlID0ge1xuICAvLyBtYXAgaW5mb1xuICBtYXBJbmZvOiB7XG4gICAgdGl0bGU6ICcnLFxuICAgIGRlc2NyaXB0aW9uOiAnJ1xuICB9LFxuICAvLyBsYXllcnNcbiAgbGF5ZXJzOiBbXSxcbiAgbGF5ZXJEYXRhOiBbXSxcbiAgbGF5ZXJUb0JlTWVyZ2VkOiBbXSxcbiAgbGF5ZXJPcmRlcjogW10sXG4gIGxheWVyT3JkZXJUb0JlTWVyZ2VkOiBudWxsLFxuXG4gIC8vIGZpbHRlcnNcbiAgZmlsdGVyczogW10sXG4gIGZpbHRlclRvQmVNZXJnZWQ6IFtdLFxuXG4gIC8vIGEgY29sbGVjdGlvbiBvZiBtdWx0aXBsZSBkYXRhc2V0XG4gIGRhdGFzZXRzOiB7fSxcbiAgZWRpdGluZ0RhdGFzZXQ6IHVuZGVmaW5lZCxcblxuICAvLyBlZmZlY3RzXG4gIGVmZmVjdHM6IFtdLFxuICBlZmZlY3RPcmRlcjogW10sXG5cbiAgLy8gY2hhcnRzIChlbmFibGVkIGJ5IGRlZmF1bHQ7IGdhdGVkIGJ5IGVuYWJsZUNoYXJ0c1BhbmVsKVxuICBjaGFydHM6IFtdLFxuICBjaGFydHNUb0JlTWVyZ2VkOiBbXSxcblxuICAvLyBhbm5vdGF0aW9uc1xuICBhbm5vdGF0aW9uczogW10sXG4gIGFubm90YXRpb25zVG9CZU1lcmdlZDogW10sXG4gIHNlbGVjdGVkQW5ub3RhdGlvbklkOiBudWxsLFxuICBpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dDogZmFsc2UsXG5cbiAgaW50ZXJhY3Rpb25Db25maWc6IGRlZmF1bHRJbnRlcmFjdGlvbkNvbmZpZyxcbiAgaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkOiB7fSxcblxuICBsYXllckJsZW5kaW5nOiAnbm9ybWFsJyxcbiAgb3ZlcmxheUJsZW5kaW5nOiAnbm9ybWFsJyxcbiAgaG92ZXJJbmZvOiB1bmRlZmluZWQsXG4gIGNsaWNrZWQ6IHVuZGVmaW5lZCxcbiAgbW91c2VQb3M6IHt9LFxuICBtYXhEZWZhdWx0VG9vbHRpcHM6IE1BWF9ERUZBVUxUX1RPT0xUSVBTLFxuXG4gIC8vIHRoaXMgaXMgdXNlZCB3aGVuIHVzZXIgc3BsaXQgbWFwc1xuICBzcGxpdE1hcHM6IFtcbiAgICAvLyB0aGlzIHdpbGwgY29udGFpbiBhIGxpc3Qgb2Ygb2JqZWN0cyB0b1xuICAgIC8vIGRlc2NyaWJlIHRoZSBzdGF0ZSBvZiBsYXllciBhdmFpbGFiaWxpdHkgYW5kIHZpc2liaWxpdHkgZm9yIGVhY2ggbWFwXG4gICAgLy8gW1xuICAgIC8vICAge1xuICAgIC8vICAgICAgbGF5ZXJzOiB7bGF5ZXJfaWQ6IHRydWUgfCBmYWxzZX1cbiAgICAvLyAgIH1cbiAgICAvLyBdXG4gIF0sXG4gIHNwbGl0TWFwc1RvQmVNZXJnZWQ6IFtdLFxuICBpc01lcmdpbmdEYXRhc2V0czoge30sXG4gIC8vIGRlZmF1bHRzIGxheWVyIGNsYXNzZXNcbiAgbGF5ZXJDbGFzc2VzOiBMYXllckNsYXNzZXMsXG5cbiAgLy8gZGVmYXVsdCBhbmltYXRpb25cbiAgLy8gdGltZSBpbiB1bml4IHRpbWVzdGFtcCAobWlsbGlzZWNvbmRzKSAodGhlIG51bWJlciBvZiBzZWNvbmRzIHNpbmNlIHRoZSBVbml4IEVwb2NoKVxuICBhbmltYXRpb25Db25maWc6IERFRkFVTFRfQU5JTUFUSU9OX0NPTkZJRyxcblxuICBlZGl0b3I6IERFRkFVTFRfRURJVE9SLFxuXG4gIGZpbGVMb2FkaW5nOiBmYWxzZSxcbiAgZmlsZUxvYWRpbmdQcm9ncmVzczoge30sXG4gIC8vIGZvciBsb2FkaW5nIGRhdGFzZXRzXG4gIGxvYWRpbmdJbmRpY2F0b3JWYWx1ZTogMCxcbiAgbG9hZGluZ1Byb2dyZXNzOiB7fSxcblxuICBsb2FkZXJzOiBbXSxcbiAgbG9hZE9wdGlvbnM6IHt9LFxuXG4gIC8vIHZpc1N0YXRlTWVyZ2Vyc1xuICBtZXJnZXJzOiBWSVNfU1RBVEVfTUVSR0VSUyxcblxuICAvLyBrZXBsZXIgc2NoZW1hc1xuICBzY2hlbWE6IEtlcGxlckdMU2NoZW1hXG59O1xuXG5leHBvcnQgY29uc3QgQUNUSU9OX1RBU0tfRklUX0JPVU5EUyA9IFRhc2suZnJvbUNhbGxiYWNrKFxuICAoXywgY2IpID0+IGNiKCksXG5cbiAgJ0FDVElPTl9UQVNLX0ZJVF9CT1VORFMnXG4pO1xuXG5leHBvcnQgY29uc3QgQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTiA9IFRhc2suZnJvbUNhbGxiYWNrKFxuICAoXywgY2IpID0+IGNiKCksXG5cbiAgJ0FDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04nXG4pO1xuXG50eXBlIFVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YVR5cGUgPSB7XG4gIGxheWVyczogTGF5ZXJbXTtcbiAgbGF5ZXJEYXRhOiBhbnlbXTtcbn07XG5cbi8qKlxuICogVXBkYXRlIHN0YXRlIHdpdGggdXBkYXRlZCBsYXllciBhbmQgbGF5ZXJEYXRhXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhPFMgZXh0ZW5kcyBVcGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGFUeXBlPihcbiAgc3RhdGU6IFMsXG4gIHtsYXllckRhdGEsIGxheWVyLCBpZHh9OiB7bGF5ZXJEYXRhPzogYW55OyBsYXllcjogTGF5ZXI7IGlkeDogbnVtYmVyfVxuKTogUyB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBzdGF0ZS5sYXllcnMubWFwKChseXIsIGkpID0+IChpID09PSBpZHggPyBsYXllciA6IGx5cikpLFxuICAgIGxheWVyRGF0YTogbGF5ZXJEYXRhXG4gICAgICA/IHN0YXRlLmxheWVyRGF0YS5tYXAoKGQsIGkpID0+IChpID09PSBpZHggPyBsYXllckRhdGEgOiBkKSlcbiAgICAgIDogc3RhdGUubGF5ZXJEYXRhXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTdGF0ZU9uTGF5ZXJWaXNpYmlsaXR5Q2hhbmdlPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFMsIGxheWVyOiBMYXllcik6IFMge1xuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgaWYgKHN0YXRlLnNwbGl0TWFwcy5sZW5ndGgpIHtcbiAgICBuZXdTdGF0ZSA9IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgc3BsaXRNYXBzOiBsYXllci5jb25maWcuaXNWaXNpYmxlXG4gICAgICAgID8gYWRkTmV3TGF5ZXJzVG9TcGxpdE1hcChzdGF0ZS5zcGxpdE1hcHMsIGxheWVyKVxuICAgICAgICA6IHJlbW92ZUxheWVyRnJvbVNwbGl0TWFwcyhzdGF0ZS5zcGxpdE1hcHMsIGxheWVyKVxuICAgIH07XG4gIH1cblxuICBpZiAobGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkKSB7XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4obmV3U3RhdGUpO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG4vKipcbiAqIENvbXBhcmVzIHR3byBvYmplY3RzIChvciBhcnJheXMpIGFuZCByZXR1cm5zIGEgbmV3IG9iamVjdCB3aXRoIG9ubHkgdGhlXG4gKiBwcm9wZXJ0aWVzIHRoYXQgaGF2ZSBjaGFuZ2VkIGJldHdlZW4gdGhlIHR3byBvYmplY3RzLlxuICovXG5mdW5jdGlvbiBwaWNrQ2hhbmdlZFByb3BzPFQ+KHByZXY6IFQsIG5leHQ6IFQpOiBQYXJ0aWFsPFQ+IHtcbiAgY29uc3QgY2hhbmdlZFByb3BzOiBQYXJ0aWFsPFQ+ID0ge307XG4gIGNvbnN0IHBpY2tQcm9wc09mID0gb2JqID0+IHtcbiAgICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGFuZ2VkUHJvcHMsIGtleSkgJiZcbiAgICAgICAgIWlzRXF1YWwocHJldltrZXldLCBuZXh0W2tleV0pXG4gICAgICApIHtcbiAgICAgICAgY2hhbmdlZFByb3BzW2tleV0gPSBuZXh0W2tleV07XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIHBpY2tQcm9wc09mKHByZXYpO1xuICBwaWNrUHJvcHNPZihuZXh0KTtcbiAgcmV0dXJuIGNoYW5nZWRQcm9wcztcbn1cblxuY29uc3QgVklTVUFMX0NIQU5ORUxfUFJPUF9UWVBFUyA9IFsnZmllbGQnLCAnc2NhbGUnLCAnZG9tYWluJywgJ2FnZ3JlZ2F0aW9uJ107XG5cbi8qKlxuICogQXBwbHkgbGF5ZXIgY29uZmlnXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5LCBtYXgtc3RhdGVtZW50c1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5TGF5ZXJDb25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFwcGx5TGF5ZXJDb25maWdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllcklkLCBuZXdMYXllckNvbmZpZywgbGF5ZXJJbmRleH0gPSBhY3Rpb247XG4gIC8vIFNhdmVkIGNvbmZpZ3MgaGF2ZSBhIHZpc3VhbENoYW5uZWxzIHNpYmxpbmc7IHBhcnNlZC9lZGl0b3IgSlNPTiBmb2xkcyB0aG9zZVxuICAvLyBmaWVsZHMgaW50byBjb25maWcuIFJlLXBhcnNpbmcgdGhlIGxhdHRlciBkcm9wcyBjb2xvckZpZWxkIGFuZCByZXNldHMgdGhlIHNjYWxlLlxuICBjb25zdCBuZXdQYXJzZWRMYXllciA9IGlzU2F2ZWRMYXllckNvbmZpZ1YxKG5ld0xheWVyQ29uZmlnKVxuICAgID8gcGFyc2VMYXllckNvbmZpZyhzdGF0ZS5zY2hlbWEsIG5ld0xheWVyQ29uZmlnKVxuICAgIDogbmV3TGF5ZXJDb25maWc7XG4gIGNvbnN0IG9sZExheWVyID0gc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBvbGRMYXllcklkKTtcbiAgaWYgKCFvbGRMYXllciB8fCAhbmV3UGFyc2VkTGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKGxheWVySW5kZXggIT09IG51bGwgJiYgbGF5ZXJJbmRleCAhPT0gdW5kZWZpbmVkICYmIHN0YXRlLmxheWVyc1tsYXllckluZGV4XSAhPT0gb2xkTGF5ZXIpIHtcbiAgICAvLyBsYXllckluZGV4IGlzIHByb3ZpZGVkLCBidXQgaXQgZG9lc24ndCBtYXRjaCB0aGUgb2xkTGF5ZXJcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW25ld1BhcnNlZExheWVyLmNvbmZpZy5kYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgLy8gTWFrZSBzdXJlIHRoZSBsYXllciBpcyB2YWxpZCBhbmQgY29udmVydCBpdCB0byBMYXllclxuICBjb25zdCBuZXdMYXllciA9IHZhbGlkYXRlTGF5ZXJXaXRoRGF0YShkYXRhc2V0LCBuZXdQYXJzZWRMYXllciwgc3RhdGUubGF5ZXJDbGFzc2VzKTtcbiAgaWYgKCFuZXdMYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxldCBuZXh0U3RhdGUgPSBzdGF0ZTtcblxuICBpZiAobmV3TGF5ZXIudHlwZSAmJiBuZXdMYXllci50eXBlICE9PSBvbGRMYXllci50eXBlKSB7XG4gICAgY29uc3Qgb2xkTGF5ZXJJbmRleCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllcklkKTtcbiAgICBpZiAob2xkTGF5ZXJJbmRleCA+PSAwKSB7XG4gICAgICBuZXh0U3RhdGUgPSBsYXllclR5cGVDaGFuZ2VVcGRhdGVyKG5leHRTdGF0ZSwgbGF5ZXJUeXBlQ2hhbmdlKG9sZExheWVyLCBuZXdMYXllci50eXBlKSk7XG4gICAgICAvLyBsYXllclR5cGVDaGFuZ2VVcGRhdGVyIGNoYW5nZXMgdGhlIGlkIG9mIHRoZSBsYXllciwgc28gd2UgbmVlZCB0byBvYnRhaW4gdGhlIG5ldyBpZFxuICAgICAgLy8gYnV0IGZpcnN0IG1ha2Ugc3VyZSB0aGF0IHRoZSBsYXllciB3YXMgbm90IHJlbW92ZWRcbiAgICAgIGlmIChuZXh0U3RhdGUubGF5ZXJzLmxlbmd0aCA9PT0gc3RhdGUubGF5ZXJzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBuZXdMYXllcklkID0gbmV4dFN0YXRlLmxheWVyc1tvbGRMYXllckluZGV4XS5pZDtcbiAgICAgICAgbmV4dFN0YXRlID0gYXBwbHlMYXllckNvbmZpZ1VwZGF0ZXIoXG4gICAgICAgICAgbmV4dFN0YXRlLFxuICAgICAgICAgIGFwcGx5TGF5ZXJDb25maWcobmV3TGF5ZXJJZCwgey4uLm5ld0xheWVyQ29uZmlnLCBpZDogbmV3TGF5ZXJJZH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXh0U3RhdGU7XG4gIH1cblxuICAvLyBzZXJpYWxpemVMYXllcigpIG1pZ2h0IHJldHVybiBudWxsIGlmIHRoZSBvbGQgbGF5ZXIgaXMgbm90IHZhbGlkLFxuICAvLyB3ZSBzaG91bGQgc3RpbGwgYXBwbHkgdGhlIGNoYW5nZXMgaW4gdGhhdCBjYXNlXG4gIGNvbnN0IHNlcmlhbGl6ZWRPbGRMYXllciA9IHNlcmlhbGl6ZUxheWVyKG9sZExheWVyLCBzdGF0ZS5zY2hlbWEpID8/IHtjb25maWc6IHt9fTtcbiAgY29uc3Qgc2VyaWFsaXplZE5ld0xheWVyID0gc2VyaWFsaXplTGF5ZXIobmV3TGF5ZXIsIHN0YXRlLnNjaGVtYSk7XG4gIGlmICghc2VyaWFsaXplZE5ld0xheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmICghaXNFcXVhbChzZXJpYWxpemVkT2xkTGF5ZXIsIHNlcmlhbGl6ZWROZXdMYXllcikpIHtcbiAgICBjb25zdCBjaGFuZ2VkID0gcGlja0NoYW5nZWRQcm9wcyhzZXJpYWxpemVkT2xkTGF5ZXIuY29uZmlnLCBzZXJpYWxpemVkTmV3TGF5ZXIuY29uZmlnKTtcblxuICAgIGlmICgndmlzQ29uZmlnJyBpbiBjaGFuZ2VkKSB7XG4gICAgICBpZiAoY2hhbmdlZC52aXNDb25maWcpIHtcbiAgICAgICAgbmV4dFN0YXRlID0gbGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyKFxuICAgICAgICAgIG5leHRTdGF0ZSxcbiAgICAgICAgICBsYXllclZpc0NvbmZpZ0NoYW5nZShvbGRMYXllciwgY2hhbmdlZC52aXNDb25maWcpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBkZWxldGUgY2hhbmdlZC52aXNDb25maWc7XG4gICAgfVxuXG4gICAgT2JqZWN0LmtleXMob2xkTGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goY2hhbm5lbE5hbWUgPT4ge1xuICAgICAgY29uc3QgY2hhbm5lbCA9IG9sZExheWVyLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxOYW1lXTtcbiAgICAgIGNvbnN0IGNoYW5uZWxQcm9wTmFtZXMgPSBWSVNVQUxfQ0hBTk5FTF9QUk9QX1RZUEVTLm1hcChwcm9wID0+IGNoYW5uZWxbcHJvcF0pO1xuICAgICAgaWYgKGNoYW5uZWxQcm9wTmFtZXMuc29tZShwcm9wID0+IHByb3AgaW4gY2hhbmdlZCkpIHtcbiAgICAgICAgbmV4dFN0YXRlID0gbGF5ZXJWaXN1YWxDaGFubmVsQ2hhbmdlVXBkYXRlcihcbiAgICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgICAgbGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlKFxuICAgICAgICAgICAgb2xkTGF5ZXIsXG4gICAgICAgICAgICBwaWNrKG5ld0xheWVyLmNvbmZpZywgY2hhbm5lbFByb3BOYW1lcyksXG4gICAgICAgICAgICBjaGFubmVsTmFtZVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIGNoYW5uZWxQcm9wTmFtZXMpIHtcbiAgICAgICAgICBkZWxldGUgY2hhbmdlZFtwcm9wXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKE9iamVjdC5rZXlzKGNoYW5nZWQpLmxlbmd0aCA+IDApIHtcbiAgICAgIG5leHRTdGF0ZSA9IGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgICAgICAgbmV4dFN0YXRlLFxuICAgICAgICBsYXllckNvbmZpZ0NoYW5nZShvbGRMYXllciwgcGljayhuZXdMYXllci5jb25maWcsIE9iamVjdC5rZXlzKGNoYW5nZWQpKSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlbGF5ZXJWaXNpYmlsdHkoc3RhdGU6IFZpc1N0YXRlLCBuZXdMYXllcjogTGF5ZXIsIGlzVmlzaWJsZT86IGJvb2xlYW4pOiBWaXNTdGF0ZSB7XG4gIGxldCBuZXdTdGF0ZSA9IHVwZGF0ZVN0YXRlT25MYXllclZpc2liaWxpdHlDaGFuZ2Uoc3RhdGUsIG5ld0xheWVyKTtcbiAgY29uc3QgZmlsdGVySW5kZXggPSBmaWx0ZXJTeW5jZWRXaXRoVGltZWxpbmUoc3RhdGUpO1xuICBpZiAoaXNMYXllckFuaW1hdGFibGUobmV3TGF5ZXIpICYmIGZpbHRlckluZGV4ICE9PSAtMSkge1xuICAgIC8vIGlmIGxheWVyIGlzIGdvaW5nIHRvIGJlIHZpc2libGUgd2Ugc3luYyB3aXRoIGZpbHRlciBvdGhlcndpc2Ugd2UgbmVlZCB0byBjaGVjayB3aGV0aGVyIG90aGVyIGFuaW1hdGFibGUgbGF5ZXJzIGV4aXN0cyBhbmQgYXJlIHZpc2libGVcbiAgICBuZXdTdGF0ZSA9IHN5bmNUaW1lRmlsdGVyV2l0aExheWVyVGltZWxpbmVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgICBpZHg6IGZpbHRlckluZGV4LFxuICAgICAgZW5hYmxlOiBpc1Zpc2libGUgPyBpc1Zpc2libGUgOiBnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVycyhzdGF0ZS5sYXllcnMpLmxlbmd0aCA+IDBcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIGJhc2UgY29uZmlnOiBkYXRhSWQsIGxhYmVsLCBjb2x1bW4sIGlzVmlzaWJsZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZXhwb3J0IGZ1bmN0aW9uIGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyfSA9IGFjdGlvbjtcbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgY29uc3QgcHJvcHMgPSBPYmplY3Qua2V5cyhhY3Rpb24ubmV3Q29uZmlnKTtcbiAgaWYgKFxuICAgIHR5cGVvZiBhY3Rpb24ubmV3Q29uZmlnLmRhdGFJZCA9PT0gJ3N0cmluZycgJiZcbiAgICBhY3Rpb24ubmV3Q29uZmlnLmRhdGFJZCAhPT0gb2xkTGF5ZXIuY29uZmlnLmRhdGFJZFxuICApIHtcbiAgICBjb25zdCB7ZGF0YUlkLCAuLi5yZXN0Q29uZmlnfSA9IGFjdGlvbi5uZXdDb25maWc7XG4gICAgY29uc3Qgc3RhdGVXaXRoRGF0YUlkID0gbGF5ZXJEYXRhSWRDaGFuZ2VVcGRhdGVyKHN0YXRlLCB7XG4gICAgICBvbGRMYXllcixcbiAgICAgIG5ld0NvbmZpZzoge2RhdGFJZH1cbiAgICB9KTtcbiAgICBjb25zdCBuZXh0TGF5ZXIgPSBzdGF0ZVdpdGhEYXRhSWQubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gICAgcmV0dXJuIG5leHRMYXllciAmJiBPYmplY3Qua2V5cyhyZXN0Q29uZmlnKS5sZW5ndGhcbiAgICAgID8gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKHN0YXRlV2l0aERhdGFJZCwge29sZExheWVyOiBuZXh0TGF5ZXIsIG5ld0NvbmZpZzogcmVzdENvbmZpZ30pXG4gICAgICA6IHN0YXRlV2l0aERhdGFJZDtcbiAgfVxuXG4gIGxldCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKGFjdGlvbi5uZXdDb25maWcpO1xuXG4gIGxldCBsYXllckRhdGE7XG5cbiAgaWYgKG5ld0xheWVyLnNob3VsZENhbGN1bGF0ZUxheWVyRGF0YShwcm9wcykpIHtcbiAgICBjb25zdCBvbGRMYXllckRhdGEgPSBzdGF0ZS5sYXllckRhdGFbaWR4XTtcblxuICAgIGNvbnN0IHVwZGF0ZUxheWVyRGF0YVJlc3VsdCA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIG9sZExheWVyRGF0YSk7XG4gICAgbmV3TGF5ZXIgPSB1cGRhdGVMYXllckRhdGFSZXN1bHQubGF5ZXI7XG4gICAgbGF5ZXJEYXRhID0gdXBkYXRlTGF5ZXJEYXRhUmVzdWx0LmxheWVyRGF0YTtcbiAgfVxuXG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuICBpZiAoJ2lzVmlzaWJsZScgaW4gYWN0aW9uLm5ld0NvbmZpZykge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlbGF5ZXJWaXNpYmlsdHkobmV3U3RhdGUsIG5ld0xheWVyLCBhY3Rpb24ubmV3Q29uZmlnLmlzVmlzaWJsZSk7XG4gIH1cblxuICBpZiAoJ2NvbHVtbnMnIGluIGFjdGlvbi5uZXdDb25maWcgJiYgbmV3TGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkKSB7XG4gICAgLy8gVE9ETzogU2hhbiwgbWFrZSB0aGUgYW5pbWF0aW9uIGNvbmZpZyBmdW5jdGlvbiBtb3JlIHJvYnVzdFxuICAgIG5ld1N0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV3U3RhdGUsIHtcbiAgICBsYXllcjogbmV3TGF5ZXIsXG4gICAgbGF5ZXJEYXRhLFxuICAgIGlkeFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxheWVyQW5pbWF0aW9uQ2hhbmdlVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTLCBhY3Rpb24pOiBTIHtcbiAgY29uc3Qge29sZExheWVyLCBwcm9wLCB2YWx1ZX0gPSBhY3Rpb247XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG5cbiAgY29uc3QgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgYW5pbWF0aW9uOiB7XG4gICAgICAuLi5vbGRMYXllci5jb25maWcuYW5pbWF0aW9uLFxuICAgICAgW3Byb3BdOiB2YWx1ZVxuICAgIH1cbiAgfSk7XG5cbiAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSwgc3RhdGUubGF5ZXJEYXRhW2lkeF0pO1xuXG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEoc3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXJJZCwgaXNWaXNpYmxlLCBzcGxpdE1hcElkXG4gKiBoYW5kbGVzIHR3byBjYXNlczpcbiAqIDEpIHRvZ2dsZSB0aGUgdmlzaWJpbGl0eSBvZiBsb2NhbCBTcGxpdE1hcCBsYXllciAodmlzU3RhdGUuc3BsaXRNYXAubGF5ZXJzKVxuICogMikgdG9nZ2xlIHRoZSB2aXNpYmlsaXR5IG9mIGdsb2JhbCBsYXllciAodmlzU3RhdGUubGF5ZXJzKVxuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclRvZ2dsZVZpc2liaWxpdHlVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVG9nZ2xlVmlzaWJpbGl0eVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2xheWVySWQsIGlzVmlzaWJsZSwgc3BsaXRNYXBJZH0gPSBhY3Rpb247XG4gIGNvbnN0IGxheWVyID0gc3RhdGUubGF5ZXJzLmZpbmQoZCA9PiBkLmlkID09PSBsYXllcklkKTtcblxuICBpZiAoIWxheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG5cbiAgaWYgKHNwbGl0TWFwSWQpIHtcbiAgICAvLyBbY2FzZSAxXTogdG9nZ2xlIGxvY2FsIGxheWVyIHZpc2liaWxpdHkgZm9yIGVhY2ggU3BsaXRNYXBcbiAgICBjb25zdCBtYXBJbmRleCA9IG5ld1N0YXRlLnNwbGl0TWFwcy5maW5kSW5kZXgoc20gPT4gc20uaWQgPT09IHNwbGl0TWFwSWQpO1xuICAgIGlmIChpc1Zpc2libGUpIHtcbiAgICAgIC8vIDEpIGlmIHRoZSBsYXllciBpcyBpbnZpc2libGUgZ2xvYmFsbHlcbiAgICAgIC8vIC0+IHNldCBnbG9iYWwgdmlzaWJpbGl0eSB0byB0cnVlXG4gICAgICBuZXdTdGF0ZSA9IGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihuZXdTdGF0ZSwgbGF5ZXJDb25maWdDaGFuZ2UobGF5ZXIsIHtpc1Zpc2libGU6IHRydWV9KSk7XG5cbiAgICAgIC8vIC0+IHNldCBsb2NhbCB2aXNpYmlsaXR5IHRvIHRydWUgYW5kIHRoZSBsb2NhbCB2aXNpYmlsaXRpZXMgb2YgYWxsIG90aGVyIFNwbGl0TWFwcyB0byBmYWxzZVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICAgIHNwbGl0TWFwczogbmV3U3RhdGUuc3BsaXRNYXBzLm1hcChzbSA9PlxuICAgICAgICAgIHNtLmlkICE9PSBzcGxpdE1hcElkXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAuLi5zbSxcbiAgICAgICAgICAgICAgICBsYXllcnM6IHtcbiAgICAgICAgICAgICAgICAgIC4uLnNtLmxheWVycyxcbiAgICAgICAgICAgICAgICAgIFtsYXllcklkXTogZmFsc2VcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgIC4uLnNtLFxuICAgICAgICAgICAgICAgIGxheWVyczoge1xuICAgICAgICAgICAgICAgICAgLi4uc20ubGF5ZXJzLFxuICAgICAgICAgICAgICAgICAgW2xheWVySWRdOiB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIH07XG4gICAgfVxuICAgIC8vIDIpIGVsc2Ugd2hlbiB0aGUgbGF5ZXIgaXMgdmlzaWJsZSBnbG9iYWxseVxuICAgIHJldHVybiB0b2dnbGVMYXllckZvck1hcFVwZGF0ZXIobmV3U3RhdGUsIHRvZ2dsZUxheWVyRm9yTWFwKG1hcEluZGV4LCBsYXllcklkKSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gW2Nhc2UgMl06IHRvZ2dsZSBnbG9iYWwgbGF5ZXIgdmlzaWJpbGl0eVxuICAgIGNvbnN0IG5ld0xheWVyID0gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe2lzVmlzaWJsZX0pO1xuICAgIGNvbnN0IGlkeCA9IG5ld1N0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBsYXllcklkKTtcblxuICAgIG5ld1N0YXRlID0gdXBkYXRlbGF5ZXJWaXNpYmlsdHkobmV3U3RhdGUsIG5ld0xheWVyLCBpc1Zpc2libGUpO1xuICAgIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV3U3RhdGUsIHtcbiAgICAgIGxheWVyOiBuZXdMYXllcixcbiAgICAgIGlkeFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBzdGF0ZVxuICogQHJldHVybnMgaW5kZXggb2YgdGhlIGZpbHRlciBzeW5jZWQgdG8gdGltZWxpbmUgb3IgLTFcbiAqL1xuZnVuY3Rpb24gZmlsdGVyU3luY2VkV2l0aFRpbWVsaW5lKHN0YXRlOiBWaXNTdGF0ZSk6IG51bWJlciB7XG4gIHJldHVybiBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IChmIGFzIFRpbWVSYW5nZUZpbHRlcikuc3luY2VkV2l0aExheWVyVGltZWxpbmUpO1xufVxuXG4vKipcbiAqIFVwZGF0ZXMgaXNWYWxpZCBmbGFnIG9mIGEgbGF5ZXIuXG4gKiBVcGRhdGVzIGlzVmlzaWJsZSBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgaXNWYWxpZC5cbiAqIFRyaWdnZXJzIHVwZGF0ZSBvZiBkYXRhIGZvciB0aGUgbGF5ZXIgaW4gb3JkZXIgdG8gZ2V0IGVycm9ycyBhZ2FpbiBkdXJpbmcgbmV4dCB1cGRhdGUgaXRlcmF0aW9uLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJTZXRJc1ZhbGlkVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclNldElzVmFsaWRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgaXNWYWxpZH0gPSBhY3Rpb247XG5cbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgY29uc3QgbGF5ZXJUb1VwZGF0ZSA9IHN0YXRlLmxheWVyc1tpZHhdO1xuICBpZiAobGF5ZXJUb1VwZGF0ZSkge1xuICAgIGxldCBuZXdMYXllcjtcbiAgICBsZXQgbmV3RGF0YSA9IG51bGw7XG5cbiAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgLy8gVHJpZ2dlciBkYXRhIHVwZGF0ZSBpbiBvcmRlciB0byBzaG93IGVycm9ycyBhZ2FpbiBpZiBwcmVzZW50LlxuICAgICAgY29uc3Qge2xheWVyLCBsYXllckRhdGF9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKGxheWVyVG9VcGRhdGUsIHN0YXRlLCB1bmRlZmluZWQpO1xuICAgICAgbmV3TGF5ZXIgPSBsYXllcjtcbiAgICAgIG5ld0RhdGEgPSBsYXllckRhdGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0xheWVyID0gbGF5ZXJUb1VwZGF0ZS51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgIGlzVmlzaWJsZTogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgbmV3TGF5ZXIuaXNWYWxpZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEoc3RhdGUsIHtpZHgsIGxheWVyOiBuZXdMYXllciwgbGF5ZXJEYXRhOiBuZXdEYXRhfSk7XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbmZ1bmN0aW9uIGFkZE9yUmVtb3ZlVGV4dExhYmVscyhuZXdGaWVsZHMsIHRleHRMYWJlbCwgZGVmYXVsdFRleHRMYWJlbCA9IERFRkFVTFRfVEVYVF9MQUJFTCkge1xuICBsZXQgbmV3VGV4dExhYmVsID0gdGV4dExhYmVsLnNsaWNlKCk7XG5cbiAgY29uc3QgY3VycmVudEZpZWxkcyA9IHRleHRMYWJlbC5tYXAodGwgPT4gdGwuZmllbGQgJiYgdGwuZmllbGQubmFtZSkuZmlsdGVyKGQgPT4gZCk7XG5cbiAgY29uc3QgYWRkRmllbGRzID0gbmV3RmllbGRzLmZpbHRlcihmID0+ICFjdXJyZW50RmllbGRzLmluY2x1ZGVzKGYubmFtZSkpO1xuICBjb25zdCBkZWxldGVGaWVsZHMgPSBjdXJyZW50RmllbGRzLmZpbHRlcihmID0+ICFuZXdGaWVsZHMuZmluZChmZCA9PiBmZC5uYW1lID09PSBmKSk7XG5cbiAgLy8gZGVsZXRlXG4gIG5ld1RleHRMYWJlbCA9IG5ld1RleHRMYWJlbC5maWx0ZXIodGwgPT4gdGwuZmllbGQgJiYgIWRlbGV0ZUZpZWxkcy5pbmNsdWRlcyh0bC5maWVsZC5uYW1lKSk7XG4gIG5ld1RleHRMYWJlbCA9ICFuZXdUZXh0TGFiZWwubGVuZ3RoID8gW2RlZmF1bHRUZXh0TGFiZWxdIDogbmV3VGV4dExhYmVsO1xuXG4gIC8vIGFkZFxuICBuZXdUZXh0TGFiZWwgPSBbXG4gICAgLi4ubmV3VGV4dExhYmVsLmZpbHRlcih0bCA9PiB0bC5maWVsZCksXG4gICAgLi4uYWRkRmllbGRzLm1hcChhZiA9PiAoe1xuICAgICAgLi4uZGVmYXVsdFRleHRMYWJlbCxcbiAgICAgIGZpZWxkOiBhZixcbiAgICAgIGNvbGxpc2lvbkVuYWJsZWQ6IEJvb2xlYW4oXG4gICAgICAgIHRleHRMYWJlbC5maW5kKHRsID0+IHRsLmNvbGxpc2lvbkVuYWJsZWQpPy5jb2xsaXNpb25FbmFibGVkID8/XG4gICAgICAgICAgZGVmYXVsdFRleHRMYWJlbC5jb2xsaXNpb25FbmFibGVkXG4gICAgICApXG4gICAgfSkpXG4gIF07XG5cbiAgcmV0dXJuIG5ld1RleHRMYWJlbDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlVGV4dExhYmVsUHJvcEFuZFZhbHVlKGlkeCwgcHJvcCwgdmFsdWUsIHRleHRMYWJlbCkge1xuICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0ZXh0TGFiZWxbaWR4XSwgcHJvcCkpIHtcbiAgICByZXR1cm4gdGV4dExhYmVsO1xuICB9XG5cbiAgbGV0IG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5zbGljZSgpO1xuXG4gIGlmIChwcm9wID09PSAnZmllbGQnICYmIHZhbHVlID09PSBudWxsICYmIHRleHRMYWJlbC5sZW5ndGggPiAxKSB7XG4gICAgLy8gcmVtb3ZlIGxhYmVsIHdoZW4gZmllbGQgdmFsdWUgaXMgc2V0IHRvIG51bGxcbiAgICBuZXdUZXh0TGFiZWwuc3BsaWNlKGlkeCwgMSk7XG4gIH0gZWxzZSBpZiAocHJvcCkge1xuICAgIG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5tYXAoKHRsLCBpKSA9PiAoaSA9PT0gaWR4ID8gey4uLnRsLCBbcHJvcF06IHZhbHVlfSA6IHRsKSk7XG4gIH1cblxuICByZXR1cm4gbmV3VGV4dExhYmVsO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciBiYXNlIGNvbmZpZzogZGF0YUlkLCBsYWJlbCwgY29sdW1uLCBpc1Zpc2libGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVGV4dExhYmVsQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclRleHRMYWJlbENoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBpZHgsIHByb3AsIHZhbHVlfSA9IGFjdGlvbjtcbiAgY29uc3Qge3RleHRMYWJlbH0gPSBvbGRMYXllci5jb25maWc7XG5cbiAgLy8gd2hlbiBhZGRpbmcgYSBuZXcgZW1wdHkgdGV4dCBsYWJlbCxcbiAgLy8gcmVseSBvbiB0aGUgbGF5ZXIncyBkZWZhdWx0IGNvbmZpZywgb3IgdXNlIHRoZSBjb25zdGFudCBERUZBVUxUX1RFWFRfTEFCRUxcbiAgY29uc3QgZGVmYXVsdFRleHRMYWJlbCA9XG4gICAgb2xkTGF5ZXIuZ2V0RGVmYXVsdExheWVyQ29uZmlnKHtkYXRhSWQ6ICcnfSk/LnRleHRMYWJlbD8uWzBdID8/IERFRkFVTFRfVEVYVF9MQUJFTDtcblxuICBsZXQgbmV3VGV4dExhYmVsID0gdGV4dExhYmVsLnNsaWNlKCk7XG4gIGlmICghdGV4dExhYmVsW2lkeF0gJiYgaWR4ID09PSB0ZXh0TGFiZWwubGVuZ3RoKSB7XG4gICAgLy8gaWYgaWR4IGlzIHNldCB0byBsZW5ndGgsIGFkZCBlbXB0eSB0ZXh0IGxhYmVsXG4gICAgbmV3VGV4dExhYmVsID0gW1xuICAgICAgLi4udGV4dExhYmVsLFxuICAgICAge1xuICAgICAgICAuLi5kZWZhdWx0VGV4dExhYmVsLFxuICAgICAgICBjb2xsaXNpb25FbmFibGVkOiBCb29sZWFuKHRleHRMYWJlbFswXT8uY29sbGlzaW9uRW5hYmxlZClcbiAgICAgIH1cbiAgICBdO1xuICB9XG5cbiAgaWYgKGlkeCA9PT0gJ2FsbCcgJiYgcHJvcCA9PT0gJ2ZpZWxkcycpIHtcbiAgICBuZXdUZXh0TGFiZWwgPSBhZGRPclJlbW92ZVRleHRMYWJlbHModmFsdWUsIHRleHRMYWJlbCwgZGVmYXVsdFRleHRMYWJlbCk7XG4gIH0gZWxzZSBpZiAoaWR4ID09PSAnYWxsJyAmJiBwcm9wKSB7XG4gICAgbmV3VGV4dExhYmVsID0gdGV4dExhYmVsLm1hcCh0bCA9PiAoey4uLnRsLCBbcHJvcF06IHZhbHVlfSkpO1xuICB9IGVsc2Uge1xuICAgIG5ld1RleHRMYWJlbCA9IHVwZGF0ZVRleHRMYWJlbFByb3BBbmRWYWx1ZShpZHgsIHByb3AsIHZhbHVlLCBuZXdUZXh0TGFiZWwpO1xuICB9XG4gIC8vIHVwZGF0ZSB0ZXh0IGxhYmVsIHByb3AgYW5kIHZhbHVlXG4gIHJldHVybiBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoc3RhdGUsIHtcbiAgICBvbGRMYXllcixcbiAgICBuZXdDb25maWc6IHt0ZXh0TGFiZWw6IG5ld1RleHRMYWJlbH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhKGRhdGFzZXQsIGxheWVyQ2xhc3NlcywgbGF5ZXIsIHNjaGVtYSkge1xuICBjb25zdCBsb2FkZWRMYXllciA9IHNlcmlhbGl6ZUxheWVyKGxheWVyLCBzY2hlbWEpO1xuICByZXR1cm4gbG9hZGVkTGF5ZXJcbiAgICA/IHZhbGlkYXRlTGF5ZXJXaXRoRGF0YShkYXRhc2V0LCBsb2FkZWRMYXllciwgbGF5ZXJDbGFzc2VzLCB7XG4gICAgICAgIGFsbG93RW1wdHlDb2x1bW46IHRydWVcbiAgICAgIH0pXG4gICAgOiBudWxsO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciBjb25maWcgZGF0YUlkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllckRhdGFJZENoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiB7XG4gICAgb2xkTGF5ZXI6IExheWVyO1xuICAgIG5ld0NvbmZpZzoge1xuICAgICAgZGF0YUlkOiBzdHJpbmc7XG4gICAgfTtcbiAgfVxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXIsIG5ld0NvbmZpZ30gPSBhY3Rpb247XG4gIGNvbnN0IHtkYXRhSWR9ID0gbmV3Q29uZmlnO1xuXG4gIGlmICghb2xkTGF5ZXIgfHwgIXN0YXRlLmRhdGFzZXRzW2RhdGFJZF0pIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcblxuICBsZXQgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyh7ZGF0YUlkfSk7XG5cbiAgLy8gdGhpcyBtYXkgaGFwcGVuIHdoZW4gYSBsYXllciBpcyBuZXcgKHR5cGU6IG51bGwgYW5kIG5vIGNvbHVtbnMpIGJ1dCBpdCdzIG5vdCByZWFkeSB0byBiZSBzYXZlZFxuICBpZiAobmV3TGF5ZXIuaXNWYWxpZFRvU2F2ZSgpKSB7XG4gICAgY29uc3QgdmFsaWRhdGVkID0gdmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEoXG4gICAgICBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdLFxuICAgICAgc3RhdGUubGF5ZXJDbGFzc2VzLFxuICAgICAgbmV3TGF5ZXIsXG4gICAgICBzdGF0ZS5zY2hlbWFcbiAgICApO1xuICAgIC8vIGlmIGNhbnQgdmFsaWRhdGUgaXQgd2l0aCBkYXRhIGNyZWF0ZSBhIG5ldyBvbmVcbiAgICBpZiAoIXZhbGlkYXRlZCkge1xuICAgICAgY29uc3Qgb2xkTGF5ZXJUeXBlID0gb2xkTGF5ZXIudHlwZTtcbiAgICAgIGlmIChvbGRMYXllclR5cGUpIHtcbiAgICAgICAgbmV3TGF5ZXIgPSBuZXcgc3RhdGUubGF5ZXJDbGFzc2VzW29sZExheWVyVHlwZV0oe2RhdGFJZCwgaWQ6IG9sZExheWVyLmlkfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0xheWVyID0gdmFsaWRhdGVkO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBMYXllciBpcyBub3QgdmFsaWQgdG8gc2F2ZSAoZS5nLiBtaXNzaW5nIGNvbHVtbnMpLCBidXQgd2Ugc3RpbGwgbmVlZCB0b1xuICAgIC8vIHJlbWFwIHZpc3VhbCBjaGFubmVsIGZpZWxkcyB0byB0aGUgbmV3IGRhdGFzZXQgdG8gYXZvaWQgc3RhbGUgZmllbGQgcmVmZXJlbmNlc1xuICAgIC8vIHRoYXQgcG9pbnQgdG8gcm93cyBiZXlvbmQgdGhlIG5ldyBkYXRhc2V0J3MgbGVuZ3RoXG4gICAgY29uc3QgbmV3RGF0YXNldEZpZWxkcyA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF0uZmllbGRzO1xuICAgIGNvbnN0IHJlbWFwcGVkRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gICAgT2JqZWN0LnZhbHVlcyhuZXdMYXllci52aXN1YWxDaGFubmVscykuZm9yRWFjaCgoe2ZpZWxkOiBmaWVsZEtleX0pID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRGaWVsZCA9IG5ld0xheWVyLmNvbmZpZ1tmaWVsZEtleV07XG4gICAgICBpZiAoY3VycmVudEZpZWxkKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoZWQgPSBuZXdEYXRhc2V0RmllbGRzLmZpbmQoZiA9PiBmLm5hbWUgPT09IGN1cnJlbnRGaWVsZC5uYW1lKTtcbiAgICAgICAgcmVtYXBwZWRGaWVsZHNbZmllbGRLZXldID0gbWF0Y2hlZCB8fCBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChPYmplY3Qua2V5cyhyZW1hcHBlZEZpZWxkcykubGVuZ3RoKSB7XG4gICAgICBuZXdMYXllciA9IG5ld0xheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHJlbWFwcGVkRmllbGRzKTtcbiAgICB9XG4gICAgLy8gVmFsaWRhdGUgZmllbGQgdHlwZSBjb21wYXRpYmlsaXR5IOKAlCBjbGVhcnMgZmllbGRzIHdob3NlIHR5cGUgaXMgaW5jb21wYXRpYmxlXG4gICAgLy8gd2l0aCB0aGUgY2hhbm5lbCdzIHN1cHBvcnRlZCBmaWVsZCB0eXBlcyAoZS5nLiBzdHJpbmcgZmllbGQgZm9yIGEgbnVtZXJpYyBzY2FsZSlcbiAgICBPYmplY3QudmFsdWVzKG5ld0xheWVyLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKCh7a2V5fSkgPT4ge1xuICAgICAgbmV3TGF5ZXIudmFsaWRhdGVWaXN1YWxDaGFubmVsKGtleSk7XG4gICAgfSk7XG4gIH1cblxuICBuZXdMYXllciA9IG5ld0xheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICBpc1Zpc2libGU6IG9sZExheWVyLmNvbmZpZy5pc1Zpc2libGUsXG4gICAgaXNDb25maWdBY3RpdmU6IHRydWVcbiAgfSk7XG5cbiAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJEb21haW4oc3RhdGUuZGF0YXNldHMpO1xuICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHN0YXRlLCB1bmRlZmluZWQpO1xuXG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEoc3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEluaXRpYWxMYXllckNvbmZpZyhsYXllciwgZGF0YXNldHMsIGxheWVyQ2xhc3Nlcyk6IExheWVyIHtcbiAgbGV0IG5ld0xheWVyID0gbGF5ZXI7XG4gIGlmICghT2JqZWN0LmtleXMoZGF0YXNldHMpLmxlbmd0aCkge1xuICAgIC8vIG5vIGRhdGEgaXMgbG9hZGVkXG4gICAgcmV0dXJuIGxheWVyO1xuICB9XG4gIGlmICghbGF5ZXIuY29uZmlnLmRhdGFJZCkge1xuICAgIC8vIHNldCBsYXllciBkYXRhSWRcbiAgICBuZXdMYXllciA9IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtkYXRhSWQ6IE9iamVjdC5rZXlzKGRhdGFzZXRzKVswXX0pO1xuICB9XG4gIGNvbnN0IGRhdGFzZXQgPSBkYXRhc2V0c1tuZXdMYXllci5jb25maWcuZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIGxheWVyO1xuICB9XG5cbiAgLy8gZmluZCBkZWZhdXQgbGF5ZXIgcHJvcHNcbiAgY29uc3QgcmVzdWx0ID1cbiAgICB0eXBlb2YgbGF5ZXJDbGFzc2VzW25ld0xheWVyLnR5cGVdLmZpbmREZWZhdWx0TGF5ZXJQcm9wcyA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyBsYXllckNsYXNzZXNbbmV3TGF5ZXIudHlwZV0uZmluZERlZmF1bHRMYXllclByb3BzKGRhdGFzZXQsIFtdKVxuICAgICAgOiB7cHJvcHM6IFtdfTtcblxuICAvLyBhbiBhcnJheSBvZiBwb3NzaWJsZSBwcm9wcywgdXNlIDFzdCBvbmVcbiAgY29uc3QgcHJvcHMgPSBBcnJheS5pc0FycmF5KHJlc3VsdCkgPyByZXN1bHQgOiByZXN1bHQucHJvcHMgfHwgW107XG5cbiAgaWYgKHByb3BzLmxlbmd0aCkge1xuICAgIG5ld0xheWVyID0gbmV3IGxheWVyQ2xhc3Nlc1tsYXllci50eXBlXSh7XG4gICAgICAuLi5wcm9wc1swXSxcbiAgICAgIGxhYmVsOiBuZXdMYXllci5jb25maWcubGFiZWwsXG4gICAgICBkYXRhSWQ6IG5ld0xheWVyLmNvbmZpZy5kYXRhSWQsXG4gICAgICBpc0NvbmZpZ0FjdGl2ZTogbmV3TGF5ZXIuY29uZmlnLmlzQ29uZmlnQWN0aXZlLFxuICAgICAgaXNWaXNpYmxlOiBuZXdMYXllci5jb25maWcuaXNWaXNpYmxlXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHR5cGVvZiBuZXdMYXllci5zZXRJbml0aWFsTGF5ZXJDb25maWcgPT09ICdmdW5jdGlvbidcbiAgICA/IG5ld0xheWVyLnNldEluaXRpYWxMYXllckNvbmZpZyhkYXRhc2V0KVxuICAgIDogbmV3TGF5ZXI7XG59XG4vKipcbiAqIFVwZGF0ZSBsYXllciB0eXBlLiBQcmV2aWV3cyBsYXllciBjb25maWcgd2lsbCBiZSBjb3BpZWQgaWYgYXBwbGljYWJsZS5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclR5cGVDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVHlwZUNoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBuZXdUeXBlfSA9IGFjdGlvbjtcbiAgaWYgKCFvbGRMYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBvbGRJZCA9IG9sZExheWVyLmlkO1xuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkSWQpO1xuXG4gIGlmICghc3RhdGUubGF5ZXJDbGFzc2VzW25ld1R5cGVdKSB7XG4gICAgQ29uc29sZS5lcnJvcihgJHtuZXdUeXBlfSBpcyBub3QgYSB2YWxpZCBsYXllciB0eXBlYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxldCBuZXdMYXllciA9IG5ldyBzdGF0ZS5sYXllckNsYXNzZXNbbmV3VHlwZV0oe1xuICAgIC8vIGtlZXAgb2xkIGxheWVyIGxhYmxlIGFuZCBpc0NvbmZpZ0FjdGl2ZVxuICAgIGxhYmVsOiBvbGRMYXllci5jb25maWcubGFiZWwsXG4gICAgaXNDb25maWdBY3RpdmU6IG9sZExheWVyLmNvbmZpZy5pc0NvbmZpZ0FjdGl2ZSxcbiAgICBkYXRhSWQ6IG9sZExheWVyLmNvbmZpZy5kYXRhSWRcbiAgfSk7XG5cbiAgaWYgKCFvbGRMYXllci50eXBlKSB7XG4gICAgLy8gaWYgc2V0dGluZyBsYXllciB0eXBlIG9uIGFuIGVtcHR5IGxheWVyXG4gICAgbmV3TGF5ZXIgPSBzZXRJbml0aWFsTGF5ZXJDb25maWcobmV3TGF5ZXIsIHN0YXRlLmRhdGFzZXRzLCBzdGF0ZS5sYXllckNsYXNzZXMpO1xuICB9IGVsc2Uge1xuICAgIC8vIGdldCBhIG1pbnQgbGF5ZXIsIHdpdGggbmV3IGlkIGFuZCB0eXBlXG4gICAgLy8gYmVjYXVzZSBkZWNrLmdsIHVzZXMgaWQgdG8gbWF0Y2ggYmV0d2VlbiBuZXcgYW5kIG9sZCBsYXllci5cbiAgICAvLyBJZiB0eXBlIGhhcyBjaGFuZ2VkIGJ1dCBpZCBpcyB0aGUgc2FtZSwgaXQgd2lsbCBicmVha1xuXG4gICAgY29uc3QgZGVmYXVsdExheWVyUHJvcHMgPVxuICAgICAgdHlwZW9mIHN0YXRlLmxheWVyQ2xhc3Nlc1tuZXdUeXBlXS5maW5kRGVmYXVsdExheWVyUHJvcHMgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyBzdGF0ZS5sYXllckNsYXNzZXNbbmV3VHlwZV0uZmluZERlZmF1bHRMYXllclByb3BzKHN0YXRlLmRhdGFzZXRzW25ld0xheWVyLmNvbmZpZy5kYXRhSWRdKVxuICAgICAgICA6IG51bGw7XG5cbiAgICBuZXdMYXllci5hc3NpZ25Db25maWdUb0xheWVyKFxuICAgICAgb2xkTGF5ZXIuY29uZmlnLFxuICAgICAgb2xkTGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MsXG4gICAgICBzdGF0ZS5kYXRhc2V0cyxcbiAgICAgIGRlZmF1bHRMYXllclByb3BzXG4gICAgKTtcbiAgICBuZXdMYXllci51cGRhdGVMYXllckRvbWFpbihzdGF0ZS5kYXRhc2V0cyk7XG4gIH1cblxuICBjb25zdCB7Y2xpY2tlZCwgaG92ZXJJbmZvfSA9IHN0YXRlO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBjbGlja2VkOiBvbGRMYXllci5pc0xheWVySG92ZXJlZChjbGlja2VkKSA/IHVuZGVmaW5lZCA6IGNsaWNrZWQsXG4gICAgaG92ZXJJbmZvOiBvbGRMYXllci5pc0xheWVySG92ZXJlZChob3ZlckluZm8pID8gdW5kZWZpbmVkIDogaG92ZXJJbmZvXG4gIH07XG5cbiAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBuZXdTdGF0ZSk7XG4gIG5ld1N0YXRlID0gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKG5ld1N0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG5cbiAgaWYgKGxheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCB8fCBvbGRMYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQpIHtcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXdTdGF0ZSk7XG4gIH1cblxuICAvLyB1cGRhdGUgc3BsaXRNYXAgbGF5ZXIgaWRcbiAgaWYgKHN0YXRlLnNwbGl0TWFwcy5sZW5ndGgpIHtcbiAgICBuZXdTdGF0ZSA9IHtcbiAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgc3BsaXRNYXBzOiBuZXdTdGF0ZS5zcGxpdE1hcHMubWFwKHNldHRpbmdzID0+IHtcbiAgICAgICAgY29uc3Qge1tvbGRJZF06IG9sZExheWVyTWFwLCAuLi5vdGhlckxheWVyc30gPSBzZXR0aW5ncy5sYXllcnM7XG4gICAgICAgIHJldHVybiBvbGRJZCBpbiBzZXR0aW5ncy5sYXllcnNcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgLi4uc2V0dGluZ3MsXG4gICAgICAgICAgICAgIGxheWVyczoge1xuICAgICAgICAgICAgICAgIC4uLm90aGVyTGF5ZXJzLFxuICAgICAgICAgICAgICAgIFtsYXllci5pZF06IG9sZExheWVyTWFwXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHNldHRpbmdzO1xuICAgICAgfSlcbiAgICB9O1xuICB9XG5cbiAgLy8gdXBkYXRlIGxheWVyT3JkZXIgd2l0aCBuZXcgaWRcbiAgbmV3U3RhdGUgPSB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgbGF5ZXJPcmRlcjogcmVwbGFjZUxheWVyRW50cnlJbkxheWVyT3JkZXIobmV3U3RhdGUubGF5ZXJPcmRlciwgb2xkTGF5ZXIuaWQsIG5ld0xheWVyLmlkKVxuICB9O1xuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBCaW5kIHZpc3VhbCBjaGFubmVsIGZpZWxkcyB0byB0aGUgZGF0YXNldCBmaWVsZCBvZiB0aGUgc2FtZSBuYW1lLlxuICogYGFkZERhdGFUb01hcGAgYW5kIGBsYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2VgIG9mdGVuIHBhc3MgYHtuYW1lLCB0eXBlfWBcbiAqIG9yIHByb2Nlc3NvciBmaWVsZHMgd2hvc2UgdmFsdWVBY2Nlc3NvciBpcyBub3QgYm91bmQgdG8gdGhlIEtlcGxlclRhYmxlLCB3aGljaFxuICogbGVhdmVzIHN0cm9rZUNvbG9yRG9tYWluIGF0IGBbMCwgMV1gIChrZXBsZXIuZ2wgIzMwNjEpLlxuICovXG5mdW5jdGlvbiByZXNvbHZlVmlzdWFsQ2hhbm5lbEZpZWxkRnJvbURhdGFzZXQoXG4gIG5ld0NvbmZpZzogVmlzU3RhdGVBY3Rpb25zLkxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25bJ25ld0NvbmZpZyddLFxuICBkYXRhc2V0OiBLZXBsZXJUYWJsZSB8IHVuZGVmaW5lZCxcbiAgdmlzdWFsQ2hhbm5lbDogTGF5ZXJbJ3Zpc3VhbENoYW5uZWxzJ11bc3RyaW5nXSB8IHVuZGVmaW5lZFxuKSB7XG4gIGlmICghZGF0YXNldCB8fCAhdmlzdWFsQ2hhbm5lbCkge1xuICAgIHJldHVybiBuZXdDb25maWc7XG4gIH1cbiAgY29uc3QgaW5jb21pbmcgPSBuZXdDb25maWdbdmlzdWFsQ2hhbm5lbC5maWVsZF07XG4gIGlmICghaW5jb21pbmcgfHwgdHlwZW9mIGluY29taW5nICE9PSAnb2JqZWN0JyB8fCAhaW5jb21pbmcubmFtZSkge1xuICAgIHJldHVybiBuZXdDb25maWc7XG4gIH1cbiAgY29uc3QgZm91bmQgPSBkYXRhc2V0LmZpZWxkcy5maW5kKGZkID0+IGZkLm5hbWUgPT09IGluY29taW5nLm5hbWUpO1xuICBpZiAoIWZvdW5kKSB7XG4gICAgcmV0dXJuIG5ld0NvbmZpZztcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLm5ld0NvbmZpZyxcbiAgICBbdmlzdWFsQ2hhbm5lbC5maWVsZF06IGZvdW5kXG4gIH07XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIHZpc3VhbCBjaGFubmVsXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMge09iamVjdH0gbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclZpc3VhbENoYW5uZWxDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBuZXdWaXNDb25maWcsIGNoYW5uZWx9ID0gYWN0aW9uO1xuICBpZiAoIW9sZExheWVyLmNvbmZpZy5kYXRhSWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbb2xkTGF5ZXIuY29uZmlnLmRhdGFJZF07XG4gIGNvbnN0IG5ld0NvbmZpZyA9IHJlc29sdmVWaXN1YWxDaGFubmVsRmllbGRGcm9tRGF0YXNldChcbiAgICBhY3Rpb24ubmV3Q29uZmlnLFxuICAgIGRhdGFzZXQsXG4gICAgb2xkTGF5ZXIudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF1cbiAgKTtcblxuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICBsZXQgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyhuZXdDb25maWcpO1xuICBpZiAobmV3VmlzQ29uZmlnKSBuZXdMYXllciA9IG5ld0xheWVyLnVwZGF0ZUxheWVyVmlzQ29uZmlnKG5ld1Zpc0NvbmZpZyk7XG5cbiAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsKGRhdGFzZXQsIGNoYW5uZWwpO1xuXG4gIC8vIGNhbGxpbmcgdXBkYXRlIGFuaW1hdGlvbiBkb21haW4gZmlyc3QgdG8gbWVyZ2UgYWxsIGxheWVyIGFuaW1hdGlvbiBkb21haW5cbiAgbGV0IHVwZGF0ZWRTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihzdGF0ZSk7XG5cbiAgY29uc3QgdmlzdWFsQ2hhbm5lbCA9IG9sZExheWVyLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdO1xuICBpZiAodmlzdWFsQ2hhbm5lbD8uY2hhbm5lbFNjYWxlVHlwZSA9PT0gQ0hBTk5FTF9TQ0FMRVMuY29sb3IgJiYgbmV3Q29uZmlnW3Zpc3VhbENoYW5uZWwuZmllbGRdKSB7XG4gICAgLy8gaWYgY29sb3IgZmllbGQgY2hhbmdlZCwgc2V0IGN1c3RvbUJyZWFrcyB0byBmYWxzZVxuICAgIG5ld0xheWVyLnVwZGF0ZUxheWVyQ29sb3JVSSh2aXN1YWxDaGFubmVsLnJhbmdlLCB7XG4gICAgICBjb2xvclJhbmdlQ29uZmlnOiB7XG4gICAgICAgIC4uLm5ld0xheWVyLmNvbmZpZy5jb2xvclVJW3Zpc3VhbENoYW5uZWwucmFuZ2VdLmNvbG9yUmFuZ2VDb25maWcsXG4gICAgICAgIGN1c3RvbUJyZWFrczogZmFsc2VcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHVwZGF0ZWRTdGF0ZSA9IHtcbiAgICAgIC4uLnVwZGF0ZWRTdGF0ZSxcbiAgICAgIGxheWVyczogdXBkYXRlZFN0YXRlLmxheWVycy5tYXAobCA9PiAobC5pZCA9PT0gb2xkTGF5ZXIuaWQgPyBuZXdMYXllciA6IGwpKVxuICAgIH07XG4gIH1cblxuICBjb25zdCBvbGRMYXllckRhdGEgPSB1cGRhdGVkU3RhdGUubGF5ZXJEYXRhW2lkeF07XG4gIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgdXBkYXRlZFN0YXRlLCBvbGRMYXllckRhdGEpO1xuXG4gIGlmIChcbiAgICB2aXN1YWxDaGFubmVsPy5jaGFubmVsU2NhbGVUeXBlID09PSBDSEFOTkVMX1NDQUxFUy5jb2xvciAmJlxuICAgIG5ld0NvbmZpZ1t2aXN1YWxDaGFubmVsPy5zY2FsZV0gPT09IFNDQUxFX1RZUEVTLmN1c3RvbU9yZGluYWwgJiZcbiAgICAhbmV3VmlzQ29uZmlnXG4gICkge1xuICAgIC8vIHdoZW4gc3dpdGNoaW5nIHRvIGN1c3RvbU9yZGluYWwgc2NhbGUsIGNyZWF0ZSBhIGN1c3RvbVBhbGV0dGUgaW4gY29sb3JVSSB3aXRoIHVwZGF0ZWQgY29sb3JEb21haW5cbiAgICBjb25zdCBjdXN0b21QYWxldHRlID0gaW5pdEN1c3RvbVBhbGV0dGVCeUN1c3RvbVNjYWxlKHtcbiAgICAgIHNjYWxlOiBTQ0FMRV9UWVBFUy5jdXN0b21PcmRpbmFsLFxuICAgICAgZmllbGQ6IGxheWVyLmNvbmZpZ1t2aXN1YWxDaGFubmVsLmZpZWxkXSxcbiAgICAgIG9yZGluYWxEb21haW46IGxheWVyLmNvbmZpZ1tsYXllci52aXN1YWxDaGFubmVsc1tjaGFubmVsXS5kb21haW5dLFxuICAgICAgcmFuZ2U6IGxheWVyLmNvbmZpZy52aXNDb25maWdbdmlzdWFsQ2hhbm5lbC5yYW5nZV0sXG4gICAgICBjb2xvckJyZWFrczogbnVsbFxuICAgIH0pO1xuICAgIC8vIHVwZGF0ZSBjb2xvclJhbmdlIHdpdGggbmV3IGN1c3RvbVBhbGV0dGVcbiAgICBsYXllci51cGRhdGVMYXllckNvbG9yVUkodmlzdWFsQ2hhbm5lbC5yYW5nZSwge1xuICAgICAgc2hvd0NvbG9yQ2hhcnQ6IHRydWUsXG4gICAgICBjb2xvclJhbmdlQ29uZmlnOiB7XG4gICAgICAgIC4uLmxheWVyLmNvbmZpZy5jb2xvclVJW3Zpc3VhbENoYW5uZWwucmFuZ2VdLmNvbG9yUmFuZ2VDb25maWcsXG4gICAgICAgIGN1c3RvbUJyZWFrczogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGN1c3RvbVBhbGV0dGVcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKHVwZGF0ZWRTdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciBgdmlzQ29uZmlnYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyfSA9IGFjdGlvbjtcbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgY29uc3QgcHJvcHMgPSBPYmplY3Qua2V5cyhhY3Rpb24ubmV3VmlzQ29uZmlnKTtcblxuICBjb25zdCBuZXdWaXNDb25maWcgPSB7XG4gICAgLi4ub2xkTGF5ZXIuY29uZmlnLnZpc0NvbmZpZyxcbiAgICAuLi5hY3Rpb24ubmV3VmlzQ29uZmlnXG4gIH07XG5cbiAgY29uc3QgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyh7dmlzQ29uZmlnOiBuZXdWaXNDb25maWd9KTtcblxuICAvLyBKZW5rcyBicmVha3MgZGVwZW5kIG9uIHRoZSBudW1iZXIgb2YgY29sb3JzLiBSZWNhbGN1bGF0ZSB0aGUgZG9tYWluIHdoZW5cbiAgLy8gdGhlIGNvbG9yIHJhbmdlIG9mIGEgSmVua3MgY2hhbm5lbCBjaGFuZ2VzLlxuICBpZiAob2xkTGF5ZXIuY29uZmlnLmRhdGFJZCkge1xuICAgIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tvbGRMYXllci5jb25maWcuZGF0YUlkXTtcbiAgICBpZiAoZGF0YXNldCkge1xuICAgICAgT2JqZWN0LmtleXMobmV3TGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goY2hhbm5lbEtleSA9PiB7XG4gICAgICAgIGNvbnN0IGNoYW5uZWwgPSBuZXdMYXllci52aXN1YWxDaGFubmVsc1tjaGFubmVsS2V5XTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNoYW5uZWw/LnNjYWxlICYmXG4gICAgICAgICAgbmV3TGF5ZXIuY29uZmlnW2NoYW5uZWwuc2NhbGVdID09PSBTQ0FMRV9UWVBFUy5qZW5rcyAmJlxuICAgICAgICAgIGNoYW5uZWwucmFuZ2UgJiZcbiAgICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYWN0aW9uLm5ld1Zpc0NvbmZpZywgY2hhbm5lbC5yYW5nZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsKGRhdGFzZXQsIGNoYW5uZWxLZXkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBsZXQgbmV4dFN0YXRlID0gc3RhdGU7XG5cbiAgLy8gRXhjbHVzaXZlIGJpdG1hcCBlZGl0aW5nOiB3aGVuIGVkaXRCb3VuZHMgaXMgdHVybmVkIG9uIGZvciBvbmUgYml0bWFwIGxheWVyLFxuICAvLyB0dXJuIGl0IG9mZiBmb3IgYWxsIG90aGVyIGJpdG1hcCBsYXllcnNcbiAgaWYgKG5ld0xheWVyLnR5cGUgPT09ICdiaXRtYXAnICYmIGFjdGlvbi5uZXdWaXNDb25maWcuZWRpdEJvdW5kcyA9PT0gdHJ1ZSkge1xuICAgIG5leHRTdGF0ZSA9IHtcbiAgICAgIC4uLm5leHRTdGF0ZSxcbiAgICAgIGxheWVyczogbmV4dFN0YXRlLmxheWVycy5tYXAoKGwsIGkpID0+IHtcbiAgICAgICAgaWYgKGkgIT09IGlkeCAmJiBsLnR5cGUgPT09ICdiaXRtYXAnICYmIGwuY29uZmlnLnZpc0NvbmZpZy5lZGl0Qm91bmRzKSB7XG4gICAgICAgICAgcmV0dXJuIGwudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICAgICAgdmlzQ29uZmlnOiB7Li4ubC5jb25maWcudmlzQ29uZmlnLCBlZGl0Qm91bmRzOiBmYWxzZX1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbDtcbiAgICAgIH0pXG4gICAgfTtcbiAgfVxuXG4gIGlmIChuZXdMYXllci5zaG91bGRDYWxjdWxhdGVMYXllckRhdGEocHJvcHMpKSB7XG4gICAgY29uc3Qgb2xkTGF5ZXJEYXRhID0gbmV4dFN0YXRlLmxheWVyRGF0YVtpZHhdO1xuICAgIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgbmV4dFN0YXRlLCBvbGRMYXllckRhdGEpO1xuICAgIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV4dFN0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKG5leHRTdGF0ZSwge2xheWVyOiBuZXdMYXllciwgaWR4fSk7XG59XG5cbi8qKlxuICogUmVzZXQgYW5pbWF0aW9uIGNvbmZpZyBjdXJyZW50IHRpbWUgdG8gYSBzcGVjaWZpZWQgdmFsdWVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKlxuICovXG5leHBvcnQgY29uc3Qgc2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlciA9IDxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAge3ZhbHVlfTogVmlzU3RhdGVBY3Rpb25zLlNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXJBY3Rpb25cbik6IFMgPT4ge1xuICBjb25zdCBjdXJyZW50VGltZSA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWVbMF0gOiB2YWx1ZTtcbiAgY29uc3QgbmV4dFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgY3VycmVudFRpbWVcbiAgICB9XG4gIH07XG4gIC8vIHVwZGF0ZSBhbmltYXRpb24gY29uZmlnIGZvciBlYWNoIGxheWVyXG4gIHJldHVybiBzdGF0ZS5sYXllcnMucmVkdWNlKChhY2N1LCBsKSA9PiB7XG4gICAgaWYgKGwuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkICYmIGwudHlwZSAhPT0gJ3RyaXAnKSB7XG4gICAgICByZXR1cm4gbGF5ZXJBbmltYXRpb25DaGFuZ2VVcGRhdGVyKGFjY3UsIHtvbGRMYXllcjogbCwgcHJvcDogJ2N1cnJlbnRUaW1lJywgY3VycmVudFRpbWV9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFjY3U7XG4gIH0sIG5leHRTdGF0ZSk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBmaWx0ZXIgcHJvcGVydHlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihzdGF0ZSwgYWN0aW9uKTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZmlsdGVyIGFuaW1hdGlvbiB3aW5kb3dcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICB7aWQsIGFuaW1hdGlvbldpbmRvd306IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyQWN0aW9uXG4pOiBTIHtcbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gZi5pZCA9PT0gaWQpO1xuXG4gIGlmICghZmlsdGVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RmlsdGVyID0ge1xuICAgIC4uLmZpbHRlcixcbiAgICBhbmltYXRpb25XaW5kb3dcbiAgfTtcblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiBzd2FwXzxGaWx0ZXI+KG5ld0ZpbHRlcikoc3RhdGUuZmlsdGVycylcbiAgfTtcblxuICBjb25zdCBuZXdTeW5jVGltZWxpbmVNb2RlID0gZ2V0U3luY0FuaW1hdGlvbk1vZGUobmV3RmlsdGVyIGFzIFRpbWVSYW5nZUZpbHRlcik7XG5cbiAgcmV0dXJuIHNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyKG5ld1N0YXRlLCB7aWQsIG1vZGU6IG5ld1N5bmNUaW1lbGluZU1vZGV9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BcHBseUZpbHRlckNvbmZpZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2ZpbHRlcklkLCBuZXdGaWx0ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCBvbGRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoZiA9PiBmLmlkID09PSBmaWx0ZXJJZCk7XG4gIGlmICghb2xkRmlsdGVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gU2VyaWFsaXplIHRoZSBmaWx0ZXJzIHRvIG9ubHkgY29tcGFyZSB0aGUgc2F2ZWQgcHJvcGVydGllc1xuICBjb25zdCBzZXJpYWxpemVkT2xkRmlsdGVyID0gc2VyaWFsaXplRmlsdGVyKG9sZEZpbHRlciwgc3RhdGUuc2NoZW1hKSA/PyB7Y29uZmlnOiB7fX07XG4gIGNvbnN0IHNlcmlhbGl6ZWROZXdGaWx0ZXIgPSBzZXJpYWxpemVGaWx0ZXIobmV3RmlsdGVyLCBzdGF0ZS5zY2hlbWEpO1xuICBpZiAoIXNlcmlhbGl6ZWROZXdGaWx0ZXIgfHwgaXNFcXVhbChzZXJpYWxpemVkT2xkRmlsdGVyLCBzZXJpYWxpemVkTmV3RmlsdGVyKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIElmIHRoZXJlIGFyZSBhbnkgY2hhbmdlcyB0byB0aGUgZmlsdGVyLCBhcHBseSB0aGVtXG4gIGNvbnN0IGNoYW5nZWQgPSBwaWNrQ2hhbmdlZFByb3BzKHNlcmlhbGl6ZWRPbGRGaWx0ZXIsIHNlcmlhbGl6ZWROZXdGaWx0ZXIpO1xuICBkZWxldGUgY2hhbmdlZFsnaWQnXTsgLy8gaWQgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkXG5cbiAgY29uc3QgZmlsdGVySW5kZXggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGZpbHRlcklkKTtcbiAgaWYgKGZpbHRlckluZGV4IDwgMCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihcbiAgICBzdGF0ZSxcbiAgICBzZXRGaWx0ZXIoZmlsdGVySW5kZXgsIE9iamVjdC5rZXlzKGNoYW5nZWQpLCBPYmplY3QudmFsdWVzKGNoYW5nZWQpKVxuICApO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBmaWx0ZXIgcHJvcGVydHlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2lkeCwgdmFsdWVJbmRleCA9IDB9ID0gYWN0aW9uO1xuICBjb25zdCBvbGRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG4gIGlmICghb2xkRmlsdGVyKSB7XG4gICAgQ29uc29sZS5lcnJvcihgZmlsdGVycy4ke2lkeH0gaXMgdW5kZWZpbmVkYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChcbiAgICBBcnJheS5pc0FycmF5KGFjdGlvbi5wcm9wKSAmJlxuICAgICghQXJyYXkuaXNBcnJheShhY3Rpb24udmFsdWUpIHx8IGFjdGlvbi5wcm9wLmxlbmd0aCAhPT0gYWN0aW9uLnZhbHVlLmxlbmd0aClcbiAgKSB7XG4gICAgQ29uc29sZS5lcnJvcignRXhwZWN0aW5nIHZhbHVlIHRvIGJlIGFuIGFycmF5IG9mIHRoZSBzYW1lIGxlbmd0aCwgc2luY2UgcHJvcCBpcyBhbiBhcnJheScpO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICAvLyBjb252ZXJ0IHByb3AgYW5kIHZhbHVlIHRvIGFycmF5XG4gIGNvbnN0IHByb3BzID0gdG9BcnJheShhY3Rpb24ucHJvcCk7XG4gIGNvbnN0IHZhbHVlcyA9IEFycmF5LmlzQXJyYXkoYWN0aW9uLnByb3ApID8gdG9BcnJheShhY3Rpb24udmFsdWUpIDogW2FjdGlvbi52YWx1ZV07XG5cbiAgbGV0IG5ld0ZpbHRlciA9IG9sZEZpbHRlcjtcbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG5cbiAgbGV0IGRhdGFzZXRJZHNUb0ZpbHRlcjogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHByb3AgPSBwcm9wc1tpXTtcbiAgICBjb25zdCB2YWx1ZSA9IHZhbHVlc1tpXTtcbiAgICAvLyBXZSBjdXJyZW50bHkgZG8gbm90IHN1cHBvcnQgcGFzc2luZyBpbiBuYW1lIGFzIGFuIGFycmF5IGludG8gX3VwZGF0ZUZpbHRlclByb3AsIHNvIHdlIGNhbGwgaXQgbXVsdGlwbGUgdGltZXMgd2l0aCBlYWNoIG5hbWVcbiAgICAvLyBTZWUgdGhlIGNvbW1lbnQgaW4gdGhlcmUgYXMgdG8gd2hhdCBzaG91bGQgYmUgYWRkcmVzc2VkXG4gICAgbGV0IHJlcztcbiAgICBpZiAocHJvcCA9PT0gJ25hbWUnICYmIEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbG9vcC1mdW5jXG4gICAgICByZXMgPSB2YWx1ZS5yZWR1Y2UoKGFjY3UsIHYpID0+IHtcbiAgICAgICAgcmV0dXJuIF91cGRhdGVGaWx0ZXJQcm9wKGFjY3UsIG5ld0ZpbHRlciwgcHJvcCwgdiwgdmFsdWVJbmRleCk7XG4gICAgICB9LCBuZXdTdGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcyA9IF91cGRhdGVGaWx0ZXJQcm9wKG5ld1N0YXRlLCBuZXdGaWx0ZXIsIHByb3AsIHZhbHVlLCB2YWx1ZUluZGV4KTtcbiAgICB9XG4gICAgbmV3RmlsdGVyID0gcmVzLmZpbHRlcjtcbiAgICBuZXdTdGF0ZSA9IHJlcy5zdGF0ZTtcbiAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSBkYXRhc2V0SWRzVG9GaWx0ZXIuY29uY2F0KHJlcy5kYXRhc2V0SWRzVG9GaWx0ZXIpO1xuICB9XG5cbiAgY29uc3QgZW5sYXJnZWRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoZiA9PiBmLnZpZXcgPT09IEZJTFRFUl9WSUVXX1RZUEVTLmVubGFyZ2VkKTtcblxuICBpZiAoZW5sYXJnZWRGaWx0ZXIgJiYgZW5sYXJnZWRGaWx0ZXIuaWQgIT09IG5ld0ZpbHRlci5pZCkge1xuICAgIC8vIHRoZXJlIHNob3VsZCBiZSBvbmx5IG9uZSBlbmxhcmdlZCBmaWx0ZXJcbiAgICBuZXdGaWx0ZXIudmlldyA9IEZJTFRFUl9WSUVXX1RZUEVTLnNpZGU7XG4gIH1cblxuICAvLyBzYXZlIG5ldyBmaWx0ZXJzIHRvIG5ld1N0YXRlXG4gIG5ld1N0YXRlID0gc2V0KFsnZmlsdGVycycsIGlkeF0sIG5ld0ZpbHRlciwgbmV3U3RhdGUpO1xuXG4gIC8vIGZpbHRlciBkYXRhXG4gIGNvbnN0IGZpbHRlcmVkRGF0YXNldHMgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKFxuICAgIHVuaXEoZGF0YXNldElkc1RvRmlsdGVyKSxcbiAgICBuZXdTdGF0ZS5kYXRhc2V0cyxcbiAgICBuZXdTdGF0ZS5maWx0ZXJzLFxuICAgIG5ld1N0YXRlLmxheWVyc1xuICApO1xuXG4gIG5ld1N0YXRlID0gc2V0KFsnZGF0YXNldHMnXSwgZmlsdGVyZWREYXRhc2V0cywgbmV3U3RhdGUpO1xuXG4gIC8vIG5lZWQgdG8gdXBkYXRlIGZpbHRlclBsb3QgYWZ0ZXIgZmlsdGVyIERhdGFzZXQgZm9yIHBsb3QgdG8gdXBkYXRlIG9uIGZpbHRlcmVkIHJlc3VsdFxuICBjb25zdCBmaWx0ZXJXaXRoUExvdCA9IHVwZGF0ZUZpbHRlclBsb3QobmV3U3RhdGUuZGF0YXNldHMsIG5ld1N0YXRlLmZpbHRlcnNbaWR4XSk7XG5cbiAgbmV3U3RhdGUgPSBzZXQoWydmaWx0ZXJzJywgaWR4XSwgZmlsdGVyV2l0aFBMb3QsIG5ld1N0YXRlKTtcblxuICAvLyBkYXRhSWQgaXMgYW4gYXJyYXlcbiAgLy8gcGFzcyBvbmx5IHRoZSBkYXRhc2V0IHdlIG5lZWQgdG8gdXBkYXRlXG4gIG5ld1N0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG5ld1N0YXRlLCBkYXRhc2V0SWRzVG9GaWx0ZXIsIG5ld0ZpbHRlcik7XG5cbiAgLy8gSWYgdGltZSByYW5nZSBmaWx0ZXIgdmFsdWUgd2FzIHVwZGF0ZWQsIGFkanVzdCBhbmltYXRpb24gY29uZmlnXG4gIGlmIChuZXdGaWx0ZXIudHlwZSA9PT0gRklMVEVSX1RZUEVTLnRpbWVSYW5nZSAmJiBwcm9wcy5pbmNsdWRlcygndmFsdWUnKSkge1xuICAgIG5ld1N0YXRlID0gYWRqdXN0QW5pbWF0aW9uQ29uZmlnV2l0aEZpbHRlcihuZXdTdGF0ZSwgYWN0aW9uLmlkeCk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbmZ1bmN0aW9uIF91cGRhdGVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCB2YWx1ZSwgZGF0YXNldHMpIHtcbiAgbGV0IG5ld0ZpbHRlciA9IGZpbHRlcjtcbiAgaWYgKGZpbHRlci5kYXRhSWRbdmFsdWVJbmRleF0pIHtcbiAgICAvLyBpZiBkYXRhSWQgYWxyZWFkeSBleGlzdFxuICAgIG5ld0ZpbHRlciA9IF9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCBkYXRhc2V0cyk7XG4gIH1cbiAgaWYgKHZhbHVlKSB7XG4gICAgY29uc3QgbmV4dFZhbHVlID0gbmV3RmlsdGVyLmRhdGFJZC5zbGljZSgpO1xuICAgIG5leHRWYWx1ZVt2YWx1ZUluZGV4XSA9IHZhbHVlO1xuICAgIG5ld0ZpbHRlciA9IHNldChbJ2RhdGFJZCddLCBuZXh0VmFsdWUsIG5ld0ZpbHRlcik7XG4gIH1cbiAgcmV0dXJuIG5ld0ZpbHRlcjtcbn1cblxuZnVuY3Rpb24gX3JlbW92ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChmaWx0ZXIsIHZhbHVlSW5kZXgsIGRhdGFzZXRzKSB7XG4gIGNvbnN0IGRhdGFJZCA9IGZpbHRlci5kYXRhSWRbdmFsdWVJbmRleF07XG5cbiAgaWYgKGZpbHRlci5kYXRhSWQubGVuZ3RoID09PSAxICYmIHZhbHVlSW5kZXggPT09IDApIHtcbiAgICAvLyBpZiByZW1vdmUgdGhlIG9ubHkgZGF0YUlkLCBjcmVhdGUgYW4gZW1wdHkgZmlsdGVyIGluc3RlYWQ7XG4gICAgcmV0dXJuIGdldERlZmF1bHRGaWx0ZXIoe2lkOiBmaWx0ZXIuaWR9KTtcbiAgfVxuXG4gIGlmIChkYXRhSWQpIHtcbiAgICBmaWx0ZXIgPSByZW1vdmVGaWx0ZXJQbG90KGZpbHRlciwgZGF0YUlkKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgcHJvcCBvZiBbXG4gICAgJ2RhdGFJZCcsXG4gICAgJ25hbWUnLFxuICAgICdmaWVsZElkeCcsXG4gICAgJ2dwdUNoYW5uZWwnLFxuICAgICdlbmROYW1lJyxcbiAgICAnZW5kRmllbGRJZHgnLFxuICAgICdlbmRNYXBwZWRWYWx1ZScsXG4gICAgJ2dwdUVuZENoYW5uZWwnXG4gIF0pIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShmaWx0ZXJbcHJvcF0pKSB7XG4gICAgICBjb25zdCBuZXh0VmFsID0gZmlsdGVyW3Byb3BdLnNsaWNlKCk7XG4gICAgICBuZXh0VmFsLnNwbGljZSh2YWx1ZUluZGV4LCAxKTtcbiAgICAgIGZpbHRlciA9IHNldChbcHJvcF0sIG5leHRWYWwsIGZpbHRlcik7XG4gICAgfVxuICB9XG5cbiAgLy8gbWVyZ2VGaWVsZERvbWFpbiBmb3IgdGhlIHJlbWFpbmluZyBmaWVsZHNcbiAgY29uc3QgZG9tYWluU3RlcHMgPSBtZXJnZUZpbHRlckRvbWFpbihmaWx0ZXIsIGRhdGFzZXRzKTtcblxuICBjb25zdCBuZXh0RmlsdGVyID0ge1xuICAgIC4uLmZpbHRlcixcbiAgICAvLyB2YWx1ZTogbmV4dFZhbHVlLFxuICAgIC4uLihkb21haW5TdGVwcyA/IHtkb21haW46IGRvbWFpblN0ZXBzPy5kb21haW4sIHN0ZXA6IGRvbWFpblN0ZXBzPy5zdGVwfSA6IHt9KVxuICB9O1xuXG4gIGNvbnN0IG5leHRWYWx1ZSA9IGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4obmV4dEZpbHRlci52YWx1ZSwgbmV4dEZpbHRlcik7XG4gIHJldHVybiB7XG4gICAgLi4ubmV4dEZpbHRlcixcbiAgICB2YWx1ZTogbmV4dFZhbHVlXG4gIH07XG59XG5cbi8qKiAqXG4gKiBVcGRhdGVzIGEgc2luZ2xlIHByb3BlcnR5IG9mIGEgZmlsdGVyXG4gKi9cbmZ1bmN0aW9uIF91cGRhdGVGaWx0ZXJQcm9wKHN0YXRlLCBmaWx0ZXIsIHByb3AsIHZhbHVlLCB2YWx1ZUluZGV4LCBkYXRhc2V0SWRzPykge1xuICBsZXQgZGF0YXNldElkc1RvRmlsdGVyOiBzdHJpbmdbXSA9IFtdO1xuICBzd2l0Y2ggKHByb3ApIHtcbiAgICAvLyBUT0RPOiBOZXh0IFBSIGZvciBVSSBpZiB3ZSB1cGRhdGUgZmlsdGVyRGF0YUlkLCB3ZSBuZWVkIHRvIGNvbnNpZGVyIHR3byBjYXNlczpcbiAgICAvLyAxLiBkYXRhSWQgaXMgZW1wdHk6IGNyZWF0ZSBhIGRlZmF1bHQgZmlsdGVyXG4gICAgLy8gMi4gQWRkIGEgbmV3IGRhdGFzZXQgaWRcbiAgICBjYXNlIEZJTFRFUl9VUERBVEVSX1BST1BTLmRhdGFJZDoge1xuICAgICAgY29uc3Qgb2xkRGF0YUlkID0gWy4uLmZpbHRlci5kYXRhSWRdO1xuICAgICAgZmlsdGVyID0gX3VwZGF0ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChmaWx0ZXIsIHZhbHVlSW5kZXgsIHZhbHVlLCBzdGF0ZS5kYXRhc2V0cyk7XG4gICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSB1bmlxKFsuLi5vbGREYXRhSWQsIC4uLmZpbHRlci5kYXRhSWRdKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIEZJTFRFUl9VUERBVEVSX1BST1BTLm5hbWU6IHtcbiAgICAgIC8vIHdlIGFyZSBzdXBwb3J0aW5nIHRoZSBjdXJyZW50IGZ1bmN0aW9uYWxpdHlcbiAgICAgIC8vIFRPRE86IE5leHQgUFIgZm9yIFVJIGZpbHRlciBuYW1lIHdpbGwgb25seSB1cGRhdGUgZmlsdGVyIG5hbWUgYnV0IGl0IHdvbid0IGhhdmUgc2lkZSBlZmZlY3RzXG4gICAgICAvLyB3ZSBhcmUgZ29ubmEgdXNlIHBhaXIgb2YgZGF0YXNldHMgYW5kIGZpZWxkSWR4IHRvIHVwZGF0ZSB0aGUgZmlsdGVyXG4gICAgICBjb25zdCBkYXRhc2V0SWQgPSBmaWx0ZXIuZGF0YUlkW3ZhbHVlSW5kZXhdO1xuICAgICAgY29uc3Qge2ZpbHRlcjogdXBkYXRlZEZpbHRlciwgZGF0YXNldDogbmV3RGF0YXNldH0gPSBhcHBseUZpbHRlckZpZWxkTmFtZShcbiAgICAgICAgZmlsdGVyLFxuICAgICAgICBzdGF0ZS5kYXRhc2V0cyxcbiAgICAgICAgZGF0YXNldElkLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgdmFsdWVJbmRleCxcbiAgICAgICAge21lcmdlRG9tYWluOiB2YWx1ZUluZGV4ID4gMH1cbiAgICAgICk7XG4gICAgICBpZiAodXBkYXRlZEZpbHRlcikge1xuICAgICAgICBmaWx0ZXIgPSB1cGRhdGVkRmlsdGVyO1xuICAgICAgICBpZiAoZmlsdGVyLmdwdSkge1xuICAgICAgICAgIGZpbHRlciA9IHNldEZpbHRlckdwdU1vZGUoZmlsdGVyLCBzdGF0ZS5maWx0ZXJzKTtcbiAgICAgICAgICBmaWx0ZXIgPSBhc3NpZ25HcHVDaGFubmVsKGZpbHRlciwgc3RhdGUuZmlsdGVycyk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUgPSBzZXQoWydkYXRhc2V0cycsIGRhdGFzZXRJZF0sIG5ld0RhdGFzZXQsIHN0YXRlKTtcbiAgICAgICAgLy8gcmVtb3ZlIGZpbHRlciBQbG90IGF0IGRhdGFzZXRJZCwgc28gaXQgd2lsbCBiZSByZWNhbGN1bGF0ZWRcbiAgICAgICAgZmlsdGVyID0gcmVtb3ZlRmlsdGVyUGxvdChmaWx0ZXIsIGRhdGFzZXRJZCk7XG5cbiAgICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gdXBkYXRlZEZpbHRlci5kYXRhSWQ7XG4gICAgICB9XG4gICAgICAvLyBvbmx5IGZpbHRlciB0aGUgY3VycmVudCBkYXRhc2V0XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjYXNlIEZJTFRFUl9VUERBVEVSX1BST1BTLmVuZE5hbWU6IHtcbiAgICAgIGNvbnN0IGRhdGFzZXRJZCA9IGZpbHRlci5kYXRhSWRbdmFsdWVJbmRleF07XG4gICAgICBjb25zdCB7ZmlsdGVyOiB1cGRhdGVkRmlsdGVyLCBkYXRhc2V0OiBuZXdEYXRhc2V0fSA9IGFwcGx5VGltZUZpbHRlckVuZEZpZWxkTmFtZShcbiAgICAgICAgZmlsdGVyLFxuICAgICAgICBzdGF0ZS5kYXRhc2V0cyxcbiAgICAgICAgZGF0YXNldElkLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgdmFsdWVJbmRleFxuICAgICAgKTtcbiAgICAgIGlmICh1cGRhdGVkRmlsdGVyKSB7XG4gICAgICAgIGZpbHRlciA9IHVwZGF0ZWRGaWx0ZXI7XG4gICAgICAgIGZpbHRlciA9IHNldEZpbHRlckdwdU1vZGUoZmlsdGVyLCBzdGF0ZS5maWx0ZXJzKTtcbiAgICAgICAgZmlsdGVyID0gZmlsdGVyLmdwdVxuICAgICAgICAgID8gYXNzaWduR3B1Q2hhbm5lbChmaWx0ZXIsIHN0YXRlLmZpbHRlcnMpXG4gICAgICAgICAgOiB7Li4uZmlsdGVyLCBncHVDaGFubmVsOiB1bmRlZmluZWQsIGdwdUVuZENoYW5uZWw6IHVuZGVmaW5lZH07XG4gICAgICAgIHN0YXRlID0gc2V0KFsnZGF0YXNldHMnLCBkYXRhc2V0SWRdLCBuZXdEYXRhc2V0LCBzdGF0ZSk7XG4gICAgICAgIGZpbHRlciA9IHJlbW92ZUZpbHRlclBsb3QoZmlsdGVyLCBkYXRhc2V0SWQpO1xuICAgICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSB1cGRhdGVkRmlsdGVyLmRhdGFJZDtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNhc2UgRklMVEVSX1VQREFURVJfUFJPUFMubGF5ZXJJZDoge1xuICAgICAgLy8gV2UgbmVlZCB0byB1cGRhdGUgb25seSBkYXRhc2V0SWQvcyBpZiB3ZSBoYXZlIGFkZGVkL3JlbW92ZWQgbGF5ZXJzXG4gICAgICAvLyAtIGNoZWNrIGZvciBsYXllcklkIGNoYW5nZXMgKFhPUiB3b3JrcyBiZWNhdXNlIG9mIHN0cmluZyB2YWx1ZXMpXG4gICAgICAvLyBpZiBubyBkaWZmZXJlbmNlcyBiZXR3ZWVuIGxheWVySWRzLCBkb24ndCBkbyBhbnkgZmlsdGVyaW5nXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBjb25zdCBsYXllcklkRGlmZmVyZW5jZSA9IHhvcih2YWx1ZSwgZmlsdGVyLmxheWVySWQpO1xuXG4gICAgICBjb25zdCBsYXllckRhdGFJZHMgPSB1bmlxPHN0cmluZz4oXG4gICAgICAgIGxheWVySWREaWZmZXJlbmNlXG4gICAgICAgICAgLm1hcChsaWQgPT5cbiAgICAgICAgICAgIGdldChcbiAgICAgICAgICAgICAgc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBsaWQpLFxuICAgICAgICAgICAgICBbJ2NvbmZpZycsICdkYXRhSWQnXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgICAuZmlsdGVyKGQgPT4gZCkgYXMgc3RyaW5nW11cbiAgICAgICk7XG5cbiAgICAgIC8vIG9ubHkgZmlsdGVyIGRhdGFzZXRzSWRzXG4gICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSBsYXllckRhdGFJZHM7XG5cbiAgICAgIC8vIFVwZGF0ZSBuZXdGaWx0ZXIgZGF0YUlkc1xuICAgICAgY29uc3QgbmV3RGF0YUlkcyA9IHVuaXE8c3RyaW5nPihcbiAgICAgICAgdmFsdWVcbiAgICAgICAgICA/Lm1hcChsaWQgPT5cbiAgICAgICAgICAgIGdldChcbiAgICAgICAgICAgICAgc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBsaWQpLFxuICAgICAgICAgICAgICBbJ2NvbmZpZycsICdkYXRhSWQnXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgICAuZmlsdGVyKGQgPT4gZCkgYXMgc3RyaW5nW11cbiAgICAgICk7XG5cbiAgICAgIGZpbHRlciA9IHtcbiAgICAgICAgLi4uZmlsdGVyLFxuICAgICAgICBsYXllcklkOiB2YWx1ZSxcbiAgICAgICAgZGF0YUlkOiBuZXdEYXRhSWRzXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIGZpbHRlciA9IHNldChbcHJvcF0sIHZhbHVlLCBmaWx0ZXIpO1xuICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gWy4uLmZpbHRlci5kYXRhSWRdO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4ge2ZpbHRlciwgZGF0YXNldElkcywgZGF0YXNldElkc1RvRmlsdGVyLCBzdGF0ZX07XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1zdGF0ZW1lbnRzICovXG5cbi8qKlxuICogU2V0IHRoZSBwcm9wZXJ0eSBvZiBhIGZpbHRlciBwbG90XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0RmlsdGVyUGxvdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkeCwgbmV3UHJvcH06IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJQbG90VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoIXN0YXRlLmZpbHRlcnNbaWR4XSkge1xuICAgIENvbnNvbGUuZXJyb3IoYGZpbHRlcnNbJHtpZHh9XSBpcyB1bmRlZmluZWRgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbGV0IG5ld0ZpbHRlciA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcblxuICBmb3IgKGNvbnN0IHByb3AgaW4gbmV3UHJvcCkge1xuICAgIGlmIChwcm9wID09PSAncGxvdFR5cGUnKSB7XG4gICAgICBuZXdGaWx0ZXIgPSBwaWNrXygncGxvdFR5cGUnKShtZXJnZV8obmV3UHJvcC5wbG90VHlwZSkpKG5ld0ZpbHRlcik7XG4gICAgfSBlbHNlIGlmIChwcm9wID09PSAneUF4aXMnKSB7XG4gICAgICBjb25zdCBjaGFydFR5cGUgPSBuZXdQcm9wLnlBeGlzID8gUExPVF9UWVBFUy5saW5lQ2hhcnQgOiBQTE9UX1RZUEVTLmhpc3RvZ3JhbTtcblxuICAgICAgbmV3RmlsdGVyID0gcGlja18oJ3Bsb3RUeXBlJykobWVyZ2VfKHt0eXBlOiBjaGFydFR5cGV9KSkobWVyZ2VfKG5ld1Byb3ApKG5ld0ZpbHRlcikpO1xuICAgIH1cbiAgfVxuXG4gIG5ld0ZpbHRlciA9IHVwZGF0ZUZpbHRlclBsb3Qoc3RhdGUuZGF0YXNldHMsIG5ld0ZpbHRlcik7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiBzdGF0ZS5maWx0ZXJzLm1hcCgoZiwgaSkgPT4gKGkgPT09IGlkeCA/IG5ld0ZpbHRlciA6IGYpKVxuICB9O1xufTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PlxuICAhYWN0aW9uLmRhdGFJZFxuICAgID8gc3RhdGVcbiAgICA6IHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGZpbHRlcnM6IFsuLi5zdGF0ZS5maWx0ZXJzLCBnZXREZWZhdWx0RmlsdGVyKHtkYXRhSWQ6IGFjdGlvbi5kYXRhSWQsIGlkOiBhY3Rpb24uaWR9KV1cbiAgICAgIH07XG5cbi8qKlxuICogQ3JlYXRlIG9yIHVwZGF0ZSBhIGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZU9yVXBkYXRlRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5DcmVhdGVPclVwZGF0ZUZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2lkLCBkYXRhSWQsIGZpZWxkLCB2YWx1ZX0gPSBhY3Rpb247XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGNvbnN0IG9yaWdpbmFsSW5kZXggPSBuZXdTdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGlkKTtcbiAgbGV0IGZpbHRlckluZGV4ID0gb3JpZ2luYWxJbmRleDtcbiAgaWYgKCFpZCAmJiAhZGF0YUlkKSB7XG4gICAgcmV0dXJuIG5ld1N0YXRlO1xuICB9XG4gIGlmIChvcmlnaW5hbEluZGV4IDwgMCAmJiBkYXRhSWQpIHtcbiAgICBuZXdTdGF0ZSA9IGFkZEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtkYXRhSWR9KTtcbiAgICBpZiAobmV3U3RhdGUuZmlsdGVycy5sZW5ndGggIT09IHN0YXRlLmZpbHRlcnMubGVuZ3RoICsgMSkge1xuICAgICAgLy8gTm8gbmV3IGZpbHRlciB3YXMgYWRkZWRcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gICAgLy8gSGVyZSB3ZSBhcmUgYXNzdW1pbmcgdGhhdCB0aGUgZmlsdGVyIHdhcyBhZGRlZCBhdCB0aGUgZW5kXG4gICAgZmlsdGVySW5kZXggPSBuZXdTdGF0ZS5maWx0ZXJzLmxlbmd0aCAtIDE7XG4gICAgbmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJbmRleF0gPSB7XG4gICAgICAuLi5uZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlckluZGV4XSxcbiAgICAgIC4uLihpZCA/IHtpZH0gOiBudWxsKVxuICAgIH07XG4gIH1cblxuICAvLyBObyBuZWVkIHRvIHVwZGF0ZSB0aGlzIGlmIGl0J3MgYSBuZXdseSBjcmVhdGVkIGZpbHRlclxuICAvLyBGaXJzdCB3ZSBtYWtlIHN1cmUgYWxsIHRoZSBkYXRhSWRzIHRoYXQgZmllbGRzIHJlZmVyIHRvIGFyZSB1cGRhdGVkXG4gIGlmIChvcmlnaW5hbEluZGV4ID49IDAgJiYgZGF0YUlkKSB7XG4gICAgLy8gSWYgdGhlIGRhdGFJZCBpcyBhbiBhcnJheSwgd2UgbmVlZCB0byB1cGRhdGUgZWFjaCBvbmUgaW5kaXZpZHVhbGx5IGFzIHRoZXkgbmVlZCBhIGNvcnJlY3QgdmFsdWVJbmRleCBwYXNzZWRcbiAgICBuZXdTdGF0ZSA9IChBcnJheS5pc0FycmF5KGRhdGFJZCkgPyBkYXRhSWQgOiBbZGF0YUlkXSkucmVkdWNlKChhY2N1LCBkLCBpbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoYWNjdSwge1xuICAgICAgICBpZHg6IGZpbHRlckluZGV4LFxuICAgICAgICBwcm9wOiAnZGF0YUlkJyxcbiAgICAgICAgdmFsdWU6IGQsXG4gICAgICAgIHZhbHVlSW5kZXg6IGluZGV4XG4gICAgICB9KTtcbiAgICB9LCBuZXdTdGF0ZSk7XG4gIH1cbiAgLy8gVGhlbiB3ZSB1cGRhdGUgdGhlIGZpZWxkc1xuICBpZiAoZmllbGQpIHtcbiAgICAvLyBJZiB0aGUgZmllbGQgaXMgYW4gYXJyYXksIHdlIG5lZWQgdG8gdXBkYXRlIGVhY2ggZmllbGQgaW5kaXZpZHVhbGx5IGFzIHRoZXkgbmVlZCBhIGNvcnJlY3QgdmFsdWVJbmRleCBwYXNzZWRcbiAgICBuZXdTdGF0ZSA9IChBcnJheS5pc0FycmF5KGZpZWxkKSA/IGZpZWxkIDogW2ZpZWxkXSkucmVkdWNlKChhY2N1LCBmLCBpbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoYWNjdSwge1xuICAgICAgICBpZHg6IGZpbHRlckluZGV4LFxuICAgICAgICBwcm9wOiAnbmFtZScsXG4gICAgICAgIHZhbHVlOiBmLFxuICAgICAgICB2YWx1ZUluZGV4OiBpbmRleFxuICAgICAgfSk7XG4gICAgfSwgbmV3U3RhdGUpO1xuICB9XG4gIC8vIFRoZW4gd2UgdXBkYXRlIHRoZSB2YWx1ZSBzZXBhcmF0ZWx5XG4gIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgbmV3U3RhdGUgPSBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7aWR4OiBmaWx0ZXJJbmRleCwgcHJvcDogJ3ZhbHVlJywgdmFsdWV9KTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn07XG5cbi8qKlxuICogU2V0IGxheWVyIGNvbG9yIHBhbGV0dGUgdWkgc3RhdGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCBsYXllckNvbG9yVUlDaGFuZ2VVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtvbGRMYXllciwgcHJvcCwgbmV3Q29uZmlnfTogVmlzU3RhdGVBY3Rpb25zLkxheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qgb2xkVml4Q29uZmlnID0gb2xkTGF5ZXIuY29uZmlnLnZpc0NvbmZpZ1twcm9wXTtcbiAgY29uc3QgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbG9yVUkocHJvcCwgbmV3Q29uZmlnKTtcbiAgY29uc3QgbmV3VmlzQ29uZmlnID0gbmV3TGF5ZXIuY29uZmlnLnZpc0NvbmZpZ1twcm9wXTtcbiAgaWYgKG9sZFZpeENvbmZpZyAhPT0gbmV3VmlzQ29uZmlnKSB7XG4gICAgcmV0dXJuIGxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlcihzdGF0ZSwge1xuICAgICAgb2xkTGF5ZXIsXG4gICAgICBuZXdWaXNDb25maWc6IHtcbiAgICAgICAgW3Byb3BdOiBuZXdWaXNDb25maWdcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogc3RhdGUubGF5ZXJzLm1hcChsID0+IChsLmlkID09PSBvbGRMYXllci5pZCA/IG5ld0xheWVyIDogbCkpXG4gIH07XG59O1xuXG4vKipcbiAqIFN0YXJ0IGFuZCBlbmQgZmlsdGVyIGFuaW1hdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlRmlsdGVyQW5pbWF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGZpbHRlcnM6IHN0YXRlLmZpbHRlcnMubWFwKChmLCBpKSA9PiAoaSA9PT0gYWN0aW9uLmlkeCA/IHsuLi5mLCBpc0FuaW1hdGluZzogIWYuaXNBbmltYXRpbmd9IDogZikpXG59KTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzRmlsdGVyQW5pbWF0aW9uQ29uZmlnKGNvbmZpZzogQW5pbWF0aW9uQ29uZmlnIHwgRmlsdGVyQW5pbWF0aW9uQ29uZmlnKTogYm9vbGVhbiB7XG4gIHJldHVybiAnZGF0YUlkJyBpbiBjb25maWcgJiYgJ2FuaW1hdGlvbldpbmRvdycgaW4gY29uZmlnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0QW5pbWF0aW9uQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRBbmltYXRpb25Db25maWdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtjb25maWd9ID0gYWN0aW9uO1xuICBpZiAoaXNGaWx0ZXJBbmltYXRpb25Db25maWcoY29uZmlnKSkge1xuICAgIC8vIEZpbmQgZmlsdGVyIHVzZWQgZm9yIGFuaW1hdGlvblxuICAgIC8vIEFzc3VtaW5nIHRoZXJlJ3Mgb25seSBvbmUgZmlsdGVyIHVzZWQgZm9yIGFuaW1hdGlvbiwgc2VlIHNldEZpbHRlclZpZXdVcGRhdGVyXG4gICAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gIWlzU2lkZUZpbHRlcihmKSk7XG4gICAgaWYgKCFmaWx0ZXIpIHtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gICAgY29uc3QgbmV3RmlsdGVyID0gey4uLmZpbHRlciwgLi4uY29uZmlnfTtcbiAgICByZXR1cm4gYXBwbHlGaWx0ZXJDb25maWdVcGRhdGVyKHN0YXRlLCBhcHBseUZpbHRlckNvbmZpZyhmaWx0ZXIuaWQsIG5ld0ZpbHRlcikpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICAgIC4uLmNvbmZpZ1xuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlTGF5ZXJBbmltYXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlTGF5ZXJBbmltYXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgIGlzQW5pbWF0aW5nOiAhc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmlzQW5pbWF0aW5nXG4gIH1cbn0pO1xuXG4vKipcbiAqIEhpZGUgYW5kIHNob3cgbGF5ZXIgYW5pbWF0aW9uIGNvbnRyb2xcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVMYXllckFuaW1hdGlvbkNvbnRyb2xVcGRhdGVyID0gKHN0YXRlOiBWaXNTdGF0ZSk6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBhbmltYXRpb25Db25maWc6IHtcbiAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgaGlkZUNvbnRyb2w6ICFzdGF0ZS5hbmltYXRpb25Db25maWcuaGlkZUNvbnRyb2xcbiAgfVxufSk7XG5cbi8qKlxuICogQ2hhbmdlIGZpbHRlciBhbmltYXRpb24gc3BlZWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoKGYsIGkpID0+IChpID09PSBhY3Rpb24uaWR4ID8gey4uLmYsIHNwZWVkOiBhY3Rpb24uc3BlZWR9IDogZikpXG59KTtcblxuLyoqXG4gKiBVcGRhdGUgYW5pbWF0aW9uIHNwZWVkIHdpdGggdGhlIHZlcnRpY2FsIHNwZWVkIHNsaWRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVMYXllckFuaW1hdGlvblNwZWVkVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7c3BlZWR9OiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgIHNwZWVkXG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBTaG93IGxhcmdlciB0aW1lIGZpbHRlciBhdCBib3R0b20gZm9yIHRpbWUgcGxheWJhY2sgKGFwcGx5IHRvIHRpbWUgZmlsdGVyIG9ubHkpXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0RmlsdGVyVmlld1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyVmlld1VwZGF0ZXJBY3Rpb25cbikgPT4ge1xuICBjb25zdCB7dmlldywgaWR4fSA9IGFjdGlvbjtcbiAgY29uc3Qgc2hvdWxkUmVzZXRPdGhlckZpbHRlcnNWaWV3ID0gdmlldyA9PT0gRklMVEVSX1ZJRVdfVFlQRVMuZW5sYXJnZWQ7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoKGYsIGkpID0+XG4gICAgICBpID09PSBpZHhcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5mLFxuICAgICAgICAgICAgdmlld1xuICAgICAgICAgIH1cbiAgICAgICAgOiBzaG91bGRSZXNldE90aGVyRmlsdGVyc1ZpZXdcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5mLFxuICAgICAgICAgICAgdmlldzogRklMVEVSX1ZJRVdfVFlQRVMuc2lkZVxuICAgICAgICAgIH1cbiAgICAgICAgOiBmXG4gICAgKVxuICB9O1xufTtcblxuLyoqXG4gKiBUb2dnbGVzIGZpbHRlciBmZWF0dXJlIHZpc2liaWxpdHlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVGaWx0ZXJGZWF0dXJlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVGaWx0ZXJGZWF0dXJlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2FjdGlvbi5pZHhdO1xuICBjb25zdCBpc1Zpc2libGUgPSBnZXQoZmlsdGVyLCBbJ3ZhbHVlJywgJ3Byb3BlcnRpZXMnLCAnaXNWaXNpYmxlJ10pO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIoc3RhdGUsIHtcbiAgICBpZHg6IGFjdGlvbi5pZHgsXG4gICAgcHJvcDogJ2VuYWJsZWQnLFxuICAgIHZhbHVlOiAhaXNWaXNpYmxlXG4gIH0pO1xuXG4gIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogYWN0aW9uLmlkeCxcbiAgICBwcm9wOiAndmFsdWUnLFxuICAgIHZhbHVlOiBmZWF0dXJlVG9GaWx0ZXJWYWx1ZShmaWx0ZXIudmFsdWUsIGZpbHRlci5pZCwge1xuICAgICAgaXNWaXNpYmxlOiAhaXNWaXNpYmxlXG4gICAgfSlcbiAgfSk7XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSBmaWx0ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVGaWx0ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2lkeH0gPSBhY3Rpb247XG4gIGNvbnN0IHtkYXRhSWQsIGlkfSA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcblxuICBjb25zdCBuZXdGaWx0ZXJzID0gW1xuICAgIC4uLnN0YXRlLmZpbHRlcnMuc2xpY2UoMCwgaWR4KSxcbiAgICAuLi5zdGF0ZS5maWx0ZXJzLnNsaWNlKGlkeCArIDEsIHN0YXRlLmZpbHRlcnMubGVuZ3RoKVxuICBdO1xuXG4gIGNvbnN0IGZpbHRlcmVkRGF0YXNldHMgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKGRhdGFJZCwgc3RhdGUuZGF0YXNldHMsIG5ld0ZpbHRlcnMsIHN0YXRlLmxheWVycyk7XG4gIGNvbnN0IG5ld0VkaXRvciA9XG4gICAgZ2V0RmlsdGVySWRJbkZlYXR1cmUoc3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZSkgPT09IGlkXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsXG4gICAgICAgIH1cbiAgICAgIDogc3RhdGUuZWRpdG9yO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHNldChbJ2ZpbHRlcnMnXSwgbmV3RmlsdGVycywgc3RhdGUpO1xuICBuZXdTdGF0ZSA9IHNldChbJ2RhdGFzZXRzJ10sIGZpbHRlcmVkRGF0YXNldHMsIG5ld1N0YXRlKTtcbiAgbmV3U3RhdGUgPSBzZXQoWydlZGl0b3InXSwgbmV3RWRpdG9yLCBuZXdTdGF0ZSk7XG5cbiAgcmV0dXJuIHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXdTdGF0ZSwgZGF0YUlkLCB1bmRlZmluZWQpO1xufTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgbGF5ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRMYXllclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGxldCBuZXdMYXllcjtcbiAgbGV0IG5ld0xheWVyRGF0YTtcbiAgaWYgKGFjdGlvbi5jb25maWcpIHtcbiAgICBuZXdMYXllciA9IGNyZWF0ZUxheWVyRnJvbUNvbmZpZyhzdGF0ZSwgYWN0aW9uLmNvbmZpZyk7XG4gICAgaWYgKCFuZXdMYXllcikge1xuICAgICAgQ29uc29sZS53YXJuKFxuICAgICAgICAnRmFpbGVkIHRvIGNyZWF0ZSBsYXllciBmcm9tIGNvbmZpZywgaXQgdXN1YWxseSBtZWFucyB0aGUgY29uZmlnIGlzIG5vdCBiZSBpbiBjb3JyZWN0IGZvcm1hdCcsXG4gICAgICAgIGFjdGlvbi5jb25maWdcbiAgICAgICk7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSk7XG4gICAgbmV3TGF5ZXIgPSByZXN1bHQubGF5ZXI7XG4gICAgbmV3TGF5ZXJEYXRhID0gcmVzdWx0LmxheWVyRGF0YTtcbiAgfSBlbHNlIHtcbiAgICAvLyBjcmVhdGUgYW4gZW1wdHkgbGF5ZXIgd2l0aCBhIHNwZWNpZmljIGRhdGFzZXQgb3IgYSBkZWZhdWx0IG9uZVxuICAgIGNvbnN0IGRlZmF1bHREYXRhc2V0ID0gYWN0aW9uLmRhdGFzZXRJZCA/PyBPYmplY3Qua2V5cyhzdGF0ZS5kYXRhc2V0cylbMF07XG4gICAgbmV3TGF5ZXIgPSBuZXcgTGF5ZXIoe1xuICAgICAgaXNWaXNpYmxlOiB0cnVlLFxuICAgICAgaXNDb25maWdBY3RpdmU6IHRydWUsXG4gICAgICBkYXRhSWQ6IGRlZmF1bHREYXRhc2V0XG4gICAgfSk7XG4gICAgbmV3TGF5ZXJEYXRhID0ge307XG4gIH1cblxuICBsZXQgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBbLi4uc3RhdGUubGF5ZXJzLCBuZXdMYXllcl0sXG4gICAgbGF5ZXJEYXRhOiBbLi4uc3RhdGUubGF5ZXJEYXRhLCBuZXdMYXllckRhdGFdLFxuICAgIC8vIGFkZCBuZXcgbGF5ZXIgYXQgdGhlIHRvcFxuICAgIGxheWVyT3JkZXI6IFtuZXdMYXllci5pZCwgLi4uc3RhdGUubGF5ZXJPcmRlcl0sXG4gICAgc3BsaXRNYXBzOiBhZGROZXdMYXllcnNUb1NwbGl0TWFwKHN0YXRlLnNwbGl0TWFwcywgbmV3TGF5ZXIpXG4gIH07XG5cbiAgaWYgKG5ld0xheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCkge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn07XG5cbi8qKlxuICogcmVtb3ZlIGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlTGF5ZXJVcGRhdGVyPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBUIHtcbiAgY29uc3QgaWR4ID0gTnVtYmVyLmlzRmluaXRlKGlkKVxuICAgID8gLy8gc3VwcG9ydCBvbGRlciBBUEksIHJlbW92ZSBsYXllciBieSBpZHhcbiAgICAgIE51bWJlcihpZClcbiAgICA6IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwIHx8IGlkeCA+PSBzdGF0ZS5sYXllcnMubGVuZ3RoKSB7XG4gICAgLy8gaW52YWxpZCBpbmRleFxuICAgIENvbnNvbGUud2FybihgY2FuIG5vdCByZW1vdmUgbGF5ZXIgd2l0aCBpbnZhbGlkIGlkfGlkeCAke2lkfWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtsYXllcnMsIGxheWVyRGF0YSwgbGF5ZXJPcmRlciwgY2xpY2tlZCwgaG92ZXJJbmZvfSA9IHN0YXRlO1xuICBjb25zdCBsYXllclRvUmVtb3ZlID0gbGF5ZXJzW2lkeF07XG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogZmlsdGVyT3V0QnlJZChsYXllclRvUmVtb3ZlLmlkKShsYXllcnMpLFxuICAgIGxheWVyRGF0YTogcmVtb3ZlRWxlbWVudEF0SW5kZXgoaWR4KShsYXllckRhdGEpLFxuICAgIGxheWVyT3JkZXI6IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihsYXllck9yZGVyLCBsYXllclRvUmVtb3ZlLmlkKSxcbiAgICBjbGlja2VkOiBsYXllclRvUmVtb3ZlLmlzTGF5ZXJIb3ZlcmVkKGNsaWNrZWQpID8gdW5kZWZpbmVkIDogY2xpY2tlZCxcbiAgICBob3ZlckluZm86IGxheWVyVG9SZW1vdmUuaXNMYXllckhvdmVyZWQoaG92ZXJJbmZvKSA/IHVuZGVmaW5lZCA6IGhvdmVySW5mbyxcbiAgICBzcGxpdE1hcHM6IHJlbW92ZUxheWVyRnJvbVNwbGl0TWFwcyhzdGF0ZS5zcGxpdE1hcHMsIGxheWVyVG9SZW1vdmUpXG4gICAgLy8gVE9ETzogdXBkYXRlIGZpbHRlcnMsIGNyZWF0ZSBoZWxwZXIgdG8gcmVtb3ZlIGxheWVyIGZvcm0gZmlsdGVyIChyZW1vdmUgbGF5ZXJpZCBhbmQgZGF0YWlkKSBpZiBtYXBwZWRcbiAgfTtcblxuICByZXR1cm4gdXBkYXRlQW5pbWF0aW9uRG9tYWluKFxuICAgIHJlbW92ZUNoYXJ0c0FuZEZpbHRlcnMoXG4gICAgICBuZXdTdGF0ZSxcbiAgICAgIGNoYXJ0ID0+IGlzTGF5ZXJDaGFydENvbmZpZyhjaGFydCkgJiYgY2hhcnQubGF5ZXJJZCA9PT0gbGF5ZXJUb1JlbW92ZS5pZFxuICAgIClcbiAgKTtcbn1cblxuLyoqXG4gKiBSZW9yZGVyIGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVvcmRlckxheWVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7b3JkZXJ9OiBWaXNTdGF0ZUFjdGlvbnMuUmVvcmRlckxheWVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGxheWVyT3JkZXI6IG9yZGVyXG59KTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgbGF5ZXIgZ3JvdXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRMYXllckdyb3VwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRMYXllckdyb3VwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBsYXllckdyb3VwID0gZ2V0TmV3TGF5ZXJHcm91cChhY3Rpb24pO1xuICBsZXQgbmV3TGF5ZXJPcmRlciA9IFsuLi5zdGF0ZS5sYXllck9yZGVyXTtcblxuICBpZiAoYWN0aW9uLmxheWVyT3JkZXIpIHtcbiAgICBhY3Rpb24ubGF5ZXJPcmRlci5mb3JFYWNoKGxheWVySWQgPT4ge1xuICAgICAgbmV3TGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihuZXdMYXllck9yZGVyLCBsYXllcklkIGFzIHN0cmluZyk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyT3JkZXI6IGFkZExheWVyT3JHcm91cFRvTGF5ZXJPcmRlcihuZXdMYXllck9yZGVyLCBsYXllckdyb3VwKVxuICB9O1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSBsYXllciBncm91cCBhbmQgYWxsIGxheWVycyB3aXRoaW4gaXRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVMYXllckdyb3VwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVMYXllckdyb3VwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7aWR9ID0gYWN0aW9uO1xuICBjb25zdCBsYXllckdyb3VwVG9SZW1vdmUgPSBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgaWQpO1xuICBpZiAoIWxheWVyR3JvdXBUb1JlbW92ZSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGxheWVySWRzVG9SZW1vdmUgPSBnZXRGbGF0TGF5ZXJPcmRlcihsYXllckdyb3VwVG9SZW1vdmUubGF5ZXJPcmRlcik7XG4gIGxldCBuZXdTdGF0ZSA9IHsuLi5zdGF0ZX07XG5cbiAgbGF5ZXJJZHNUb1JlbW92ZS5mb3JFYWNoKGxheWVySWQgPT4ge1xuICAgIGNvbnN0IGlkeCA9IG5ld1N0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBsYXllcklkKTtcbiAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgIG5ld1N0YXRlID0gcmVtb3ZlTGF5ZXJVcGRhdGVyKG5ld1N0YXRlLCB7aWQ6IGxheWVySWR9KTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IG5ld0xheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIobmV3U3RhdGUubGF5ZXJPcmRlciwgbGF5ZXJHcm91cFRvUmVtb3ZlKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5uZXdTdGF0ZSxcbiAgICBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyXG4gIH07XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBhIGxheWVyIGdyb3VwIChsYWJlbCwgdmlzaWJpbGl0eSwgbGF5ZXIgbWVtYmVyc2hpcClcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVMYXllckdyb3VwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVMYXllckdyb3VwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7aWQsIG9wdGlvbnN9ID0gYWN0aW9uO1xuICBjb25zdCBsYXllckdyb3VwID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIGlkKTtcbiAgaWYgKCFsYXllckdyb3VwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGV0IG5ld1N0YXRlID0gey4uLnN0YXRlfTtcblxuICBpZiAob3B0aW9ucy5sYXllck9yZGVyKSB7XG4gICAgbmV3U3RhdGUubGF5ZXJPcmRlciA9IFsuLi5sYXllckdyb3VwLmxheWVyT3JkZXIsIC4uLm5ld1N0YXRlLmxheWVyT3JkZXJdO1xuICAgIG9wdGlvbnMubGF5ZXJPcmRlci5mb3JFYWNoKGxheWVySWQgPT4ge1xuICAgICAgbmV3U3RhdGUubGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihuZXdTdGF0ZS5sYXllck9yZGVyLCBsYXllcklkIGFzIHN0cmluZyk7XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBuZXdMYXllckdyb3VwID0ge1xuICAgIC4uLmxheWVyR3JvdXAsXG4gICAgLi4ub3B0aW9uc1xuICB9O1xuXG4gIGlmIChuZXdMYXllckdyb3VwLmlzVmlzaWJsZSAhPT0gbGF5ZXJHcm91cC5pc1Zpc2libGUpIHtcbiAgICBjb25zdCBsYXllcklkcyA9IGdldEZsYXRMYXllck9yZGVyKG5ld0xheWVyR3JvdXAubGF5ZXJPcmRlcik7XG4gICAgbmV3U3RhdGUgPSBuZXdTdGF0ZS5sYXllcnMucmVkdWNlKChhY2MsIGxheWVyKSA9PiB7XG4gICAgICBpZiAobGF5ZXJJZHMuaW5jbHVkZXMobGF5ZXIuaWQpKSB7XG4gICAgICAgIHJldHVybiBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoYWNjLCB7XG4gICAgICAgICAgb2xkTGF5ZXI6IGxheWVyLFxuICAgICAgICAgIG5ld0NvbmZpZzoge2lzVmlzaWJsZTogbmV3TGF5ZXJHcm91cC5pc1Zpc2libGV9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBuZXdTdGF0ZSk7XG4gIH1cblxuICBjb25zdCBuZXdMYXllck9yZGVyID0gdXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlcihuZXdTdGF0ZS5sYXllck9yZGVyLCBuZXdMYXllckdyb3VwKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5uZXdTdGF0ZSxcbiAgICBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyXG4gIH07XG59O1xuXG4vKipcbiAqIEFkZCBhIGxheWVyIHRvIGEgbGF5ZXIgZ3JvdXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRMYXllclRvTGF5ZXJHcm91cFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkTGF5ZXJUb0xheWVyR3JvdXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtsYXllckdyb3VwSWQsIGxheWVySWR9ID0gYWN0aW9uO1xuICBjb25zdCBsYXllckdyb3VwID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIGxheWVyR3JvdXBJZCk7XG4gIGNvbnN0IGxheWVyID0gc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBsYXllcklkKTtcbiAgaWYgKCFsYXllckdyb3VwIHx8ICFsYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGlmIChsYXllckdyb3VwLmxheWVyT3JkZXIuZmluZChlbnRyeSA9PiBlbnRyeSA9PT0gbGF5ZXJJZCkpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdHcm91cExheWVyT3JkZXIgPSBhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIobGF5ZXJHcm91cC5sYXllck9yZGVyLCBsYXllcklkKTtcbiAgcmV0dXJuIHVwZGF0ZUxheWVyR3JvdXBVcGRhdGVyKHN0YXRlLCB7XG4gICAgaWQ6IGxheWVyR3JvdXBJZCxcbiAgICBvcHRpb25zOiB7bGF5ZXJPcmRlcjogbmV3R3JvdXBMYXllck9yZGVyfVxuICB9KTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgbGF5ZXIgZnJvbSBhIGxheWVyIGdyb3VwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlTGF5ZXJGcm9tTGF5ZXJHcm91cFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlTGF5ZXJGcm9tTGF5ZXJHcm91cFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2xheWVyR3JvdXBJZCwgbGF5ZXJJZH0gPSBhY3Rpb247XG4gIGNvbnN0IGxheWVyR3JvdXAgPSBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgbGF5ZXJHcm91cElkKTtcbiAgaWYgKCFsYXllckdyb3VwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3TGF5ZXJHcm91cE9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKGxheWVyR3JvdXAubGF5ZXJPcmRlciwgbGF5ZXJJZCk7XG4gIHJldHVybiB1cGRhdGVMYXllckdyb3VwVXBkYXRlcihzdGF0ZSwge1xuICAgIGlkOiBsYXllckdyb3VwSWQsXG4gICAgb3B0aW9uczoge2xheWVyT3JkZXI6IG5ld0xheWVyR3JvdXBPcmRlcn1cbiAgfSk7XG59O1xuXG4vKipcbiAqIFN3YXAgbGF5ZXIgb3JkZXIgZW50cmllcyBiZXR3ZWVuIHJvb3QgYW5kIGdyb3Vwc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmV4cG9ydCBjb25zdCBzd2FwTGF5ZXJPcmRlckVudHJpZXNVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlN3YXBMYXllck9yZGVyRW50cmllc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge29yaWdpbkxheWVySWQsIGRlc3RpbmF0aW9uTGF5ZXJJZCwgb3JpZ2luTGF5ZXJHcm91cElkLCBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZH0gPSBhY3Rpb247XG5cbiAgaWYgKCFvcmlnaW5MYXllckdyb3VwSWQgJiYgIWRlc3RpbmF0aW9uTGF5ZXJHcm91cElkKSB7XG4gICAgY29uc3Qgb3JpZ2luSW5kZXggPSBzdGF0ZS5sYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PlxuICAgICAgdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyA/IGVudHJ5ID09PSBvcmlnaW5MYXllcklkIDogZW50cnkuaWQgPT09IG9yaWdpbkxheWVySWRcbiAgICApO1xuICAgIGlmIChkZXN0aW5hdGlvbkxheWVySWQgJiYgb3JpZ2luSW5kZXggIT09IC0xKSB7XG4gICAgICBjb25zdCBkZXN0aW5hdGlvbkluZGV4ID0gc3RhdGUubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICAgICAgdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyA/IGVudHJ5ID09PSBkZXN0aW5hdGlvbkxheWVySWQgOiBlbnRyeS5pZCA9PT0gZGVzdGluYXRpb25MYXllcklkXG4gICAgICApO1xuICAgICAgaWYgKGRlc3RpbmF0aW9uSW5kZXggIT09IC0xKSB7XG4gICAgICAgIGNvbnN0IG5ld0xheWVyT3JkZXIgPSBhcnJheU1vdmUoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luSW5kZXgsIGRlc3RpbmF0aW9uSW5kZXgpO1xuICAgICAgICByZXR1cm4gey4uLnN0YXRlLCBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAob3JpZ2luTGF5ZXJHcm91cElkICYmICFkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCkge1xuICAgIGxldCBuZXdMYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbkxheWVySWQpO1xuICAgIGlmIChkZXN0aW5hdGlvbkxheWVySWQpIHtcbiAgICAgIGNvbnN0IGRlc3RpbmF0aW9uSW5kZXggPSBuZXdMYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PlxuICAgICAgICB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnID8gZW50cnkgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZCA6IGZhbHNlXG4gICAgICApO1xuICAgICAgbmV3TGF5ZXJPcmRlci5zcGxpY2UoZGVzdGluYXRpb25JbmRleCA9PT0gLTEgPyAwIDogZGVzdGluYXRpb25JbmRleCwgMCwgb3JpZ2luTGF5ZXJJZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0xheWVyT3JkZXIgPSBbLi4ubmV3TGF5ZXJPcmRlciwgb3JpZ2luTGF5ZXJJZF07XG4gICAgfVxuICAgIHJldHVybiB7Li4uc3RhdGUsIGxheWVyT3JkZXI6IG5ld0xheWVyT3JkZXJ9O1xuICB9XG5cbiAgaWYgKG9yaWdpbkxheWVyR3JvdXBJZCAmJiBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCkge1xuICAgIGlmIChvcmlnaW5MYXllckdyb3VwSWQgPT09IGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkKSB7XG4gICAgICBjb25zdCBsYXllckdyb3VwID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbkxheWVyR3JvdXBJZCk7XG4gICAgICBpZiAoIWxheWVyR3JvdXApIHJldHVybiBzdGF0ZTtcbiAgICAgIGNvbnN0IG9yaWdpbkluZGV4ID0gbGF5ZXJHcm91cC5sYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PlxuICAgICAgICB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnID8gZW50cnkgPT09IG9yaWdpbkxheWVySWQgOiBlbnRyeS5pZCA9PT0gb3JpZ2luTGF5ZXJJZFxuICAgICAgKTtcbiAgICAgIGlmIChvcmlnaW5JbmRleCA9PT0gLTEpIHJldHVybiBzdGF0ZTtcbiAgICAgIGlmIChkZXN0aW5hdGlvbkxheWVySWQpIHtcbiAgICAgICAgY29uc3QgZGVzdEluZGV4ID0gbGF5ZXJHcm91cC5sYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PlxuICAgICAgICAgIHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycgPyBlbnRyeSA9PT0gZGVzdGluYXRpb25MYXllcklkIDogZW50cnkuaWQgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZFxuICAgICAgICApO1xuICAgICAgICBpZiAoZGVzdEluZGV4ID09PSAtMSkgcmV0dXJuIHN0YXRlO1xuICAgICAgICBjb25zdCBuZXdHcm91cExheWVyT3JkZXIgPSBhcnJheU1vdmUobGF5ZXJHcm91cC5sYXllck9yZGVyLCBvcmlnaW5JbmRleCwgZGVzdEluZGV4KTtcbiAgICAgICAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IHVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwge1xuICAgICAgICAgIC4uLmxheWVyR3JvdXAsXG4gICAgICAgICAgbGF5ZXJPcmRlcjogbmV3R3JvdXBMYXllck9yZGVyXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gey4uLnN0YXRlLCBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICAvLyBDcm9zcy1ncm91cCBtb3ZlOiByZW1vdmUgZnJvbSBvcmlnaW4sIHRoZW4gYWRkIHRvIGRlc3RpbmF0aW9uXG4gICAgY29uc3QgbGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5MYXllcklkKTtcbiAgICBsZXQgbmV3U3RhdGUgPSBhZGRMYXllclRvTGF5ZXJHcm91cFVwZGF0ZXIoXG4gICAgICB7Li4uc3RhdGUsIGxheWVyT3JkZXJ9LFxuICAgICAge2xheWVySWQ6IG9yaWdpbkxheWVySWQsIGxheWVyR3JvdXBJZDogZGVzdGluYXRpb25MYXllckdyb3VwSWR9XG4gICAgKTtcblxuICAgIGlmIChkZXN0aW5hdGlvbkxheWVySWQpIHtcbiAgICAgIGNvbnN0IGxheWVyR3JvdXAgPSBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIobmV3U3RhdGUubGF5ZXJPcmRlciwgZGVzdGluYXRpb25MYXllckdyb3VwSWQpO1xuICAgICAgaWYgKCFsYXllckdyb3VwKSByZXR1cm4gc3RhdGU7XG4gICAgICBjb25zdCBvcmlnaW5JbmRleCA9IGxheWVyR3JvdXAubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT4gZW50cnkgPT09IG9yaWdpbkxheWVySWQpO1xuICAgICAgY29uc3QgZGVzdEluZGV4ID0gbGF5ZXJHcm91cC5sYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PiBlbnRyeSA9PT0gZGVzdGluYXRpb25MYXllcklkKTtcbiAgICAgIGlmIChvcmlnaW5JbmRleCAhPT0gLTEgJiYgZGVzdEluZGV4ICE9PSAtMSkge1xuICAgICAgICBjb25zdCBuZXdHcm91cExheWVyT3JkZXIgPSBhcnJheU1vdmUobGF5ZXJHcm91cC5sYXllck9yZGVyLCBvcmlnaW5JbmRleCwgZGVzdEluZGV4KTtcbiAgICAgICAgbmV3U3RhdGUgPSB7XG4gICAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICAgICAgbGF5ZXJPcmRlcjogdXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlcihuZXdTdGF0ZS5sYXllck9yZGVyLCB7XG4gICAgICAgICAgICAuLi5sYXllckdyb3VwLFxuICAgICAgICAgICAgbGF5ZXJPcmRlcjogbmV3R3JvdXBMYXllck9yZGVyXG4gICAgICAgICAgfSlcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ld1N0YXRlO1xuICB9XG5cbiAgaWYgKCFvcmlnaW5MYXllckdyb3VwSWQgJiYgZGVzdGluYXRpb25MYXllckdyb3VwSWQpIHtcbiAgICBjb25zdCBsYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbkxheWVySWQpO1xuICAgIHJldHVybiBhZGRMYXllclRvTGF5ZXJHcm91cFVwZGF0ZXIoXG4gICAgICB7Li4uc3RhdGUsIGxheWVyT3JkZXJ9LFxuICAgICAge2xheWVySWQ6IG9yaWdpbkxheWVySWQsIGxheWVyR3JvdXBJZDogZGVzdGluYXRpb25MYXllckdyb3VwSWR9XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn07XG5cbi8qKlxuICogZHVwbGljYXRlIGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgZHVwbGljYXRlTGF5ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZH06IFZpc1N0YXRlQWN0aW9ucy5EdXBsaWNhdGVMYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgaWR4ID0gTnVtYmVyLmlzRmluaXRlKGlkKVxuICAgID8gLy8gc3VwcG9ydCBvbGRlciBBUEksIHJlbW92ZSBsYXllciBieSBpZHhcbiAgICAgIE51bWJlcihpZClcbiAgICA6IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwIHx8ICFzdGF0ZS5sYXllcnNbaWR4XSkge1xuICAgIENvbnNvbGUud2FybihgbGF5ZXIgJHtpZHh9IG5vdCBmb3VuZCBpbiBsYXllck9yZGVyYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge2xheWVyc30gPSBzdGF0ZTtcbiAgY29uc3Qgb3JpZ2luYWwgPSBsYXllcnNbaWR4XTtcblxuICBjb25zdCBvcmlnaW5hbExheWVyT3JkZXJJZHggPSBnZXRJbmRleEZyb21MYXllckVudHJ5SWQoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luYWwuaWQpO1xuICBsZXQgbmV3TGFiZWwgPSBgQ29weSBvZiAke29yaWdpbmFsLmNvbmZpZy5sYWJlbH1gO1xuICBsZXQgcG9zdGZpeCA9IDA7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb29wLWZ1bmNcbiAgd2hpbGUgKGxheWVycy5maW5kKGwgPT4gbC5jb25maWcubGFiZWwgPT09IG5ld0xhYmVsKSkge1xuICAgIG5ld0xhYmVsID0gYENvcHkgb2YgJHtvcmlnaW5hbC5jb25maWcubGFiZWx9ICR7Kytwb3N0Zml4fWA7XG4gIH1cblxuICAvLyBjb2xsZWN0IGxheWVyIGNvbmZpZyBmcm9tIG9yaWdpbmFsXG4gIGNvbnN0IGxvYWRlZExheWVyID0gc2VyaWFsaXplTGF5ZXIob3JpZ2luYWwsIHN0YXRlLnNjaGVtYSk7XG5cbiAgLy8gYXNzaWduIG5ldyBpZCBhbmQgbGFiZWwgdG8gY29waWVkIGxheWVyXG4gIGlmICghbG9hZGVkTGF5ZXI/LmNvbmZpZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsb2FkZWRMYXllci5jb25maWcubGFiZWwgPSBuZXdMYWJlbDtcbiAgbG9hZGVkTGF5ZXIuaWQgPSBnZW5lcmF0ZUhhc2hJZChMQVlFUl9JRF9MRU5HVEgpO1xuXG4gIC8vIGFkZCBsYXllciB0byBzdGF0ZVxuICBsZXQgbmV4dFN0YXRlID0gYWRkTGF5ZXJVcGRhdGVyKHN0YXRlLCB7Y29uZmlnOiBsb2FkZWRMYXllcn0pO1xuICAvLyByZXRyaWV2ZSBuZXdseSBjcmVhdGVkIGxheWVyXG4gIGNvbnN0IG5ld0xheWVyID0gbmV4dFN0YXRlLmxheWVyc1tuZXh0U3RhdGUubGF5ZXJzLmxlbmd0aCAtIDFdO1xuXG4gIC8vIENoZWNrIGlmIHRoZSBvcmlnaW5hbCBsYXllciBpcyBpbnNpZGUgYSBncm91cFxuICBjb25zdCBwYXJlbnRHcm91cCA9IGZpbmRQYXJlbnRHcm91cEZvckxheWVyKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbmFsLmlkKTtcblxuICBpZiAocGFyZW50R3JvdXApIHtcbiAgICAvLyBMYXllciBpcyBpbnNpZGUgYSBncm91cCAtIHJlbW92ZSB0aGUgcHJlcGVuZGVkIGlkIGZyb20gcm9vdCBhbmQgaW5zZXJ0IGludG8gdGhlIGdyb3VwXG4gICAgY29uc3QgbGF5ZXJPcmRlcldpdGhvdXRQcmVwZW5kZWQgPSBuZXh0U3RhdGUubGF5ZXJPcmRlci5zbGljZSgxKTtcbiAgICBjb25zdCBpZHhJbkdyb3VwID0gcGFyZW50R3JvdXAubGF5ZXJPcmRlci5maW5kSW5kZXgoZSA9PiBlID09PSBvcmlnaW5hbC5pZCk7XG4gICAgY29uc3QgbmV3R3JvdXBMYXllck9yZGVyID0gYXJyYXlJbnNlcnQocGFyZW50R3JvdXAubGF5ZXJPcmRlciwgaWR4SW5Hcm91cCwgbmV3TGF5ZXIuaWQpO1xuICAgIGNvbnN0IHVwZGF0ZWRHcm91cCA9IHsuLi5wYXJlbnRHcm91cCwgbGF5ZXJPcmRlcjogbmV3R3JvdXBMYXllck9yZGVyfTtcbiAgICBjb25zdCBuZXdMYXllck9yZGVyID0gdXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlcihsYXllck9yZGVyV2l0aG91dFByZXBlbmRlZCwgdXBkYXRlZEdyb3VwKTtcbiAgICBuZXh0U3RhdGUgPSByZW9yZGVyTGF5ZXJVcGRhdGVyKG5leHRTdGF0ZSwge29yZGVyOiBuZXdMYXllck9yZGVyfSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gTGF5ZXIgaXMgYXQgcm9vdCBsZXZlbCAtIHVzZSBvcmlnaW5hbCBpbmRleC1iYXNlZCBpbnNlcnRpb25cbiAgICBjb25zdCBuZXdMYXllck9yZGVyID0gYXJyYXlJbnNlcnQoXG4gICAgICBuZXh0U3RhdGUubGF5ZXJPcmRlci5zbGljZSgxLCBuZXh0U3RhdGUubGF5ZXJPcmRlci5sZW5ndGgpLFxuICAgICAgb3JpZ2luYWxMYXllck9yZGVySWR4LFxuICAgICAgbmV3TGF5ZXIuaWRcbiAgICApO1xuICAgIG5leHRTdGF0ZSA9IHJlb3JkZXJMYXllclVwZGF0ZXIobmV4dFN0YXRlLCB7b3JkZXI6IG5ld0xheWVyT3JkZXJ9KTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVBbmltYXRpb25Eb21haW4obmV4dFN0YXRlKTtcbn07XG5cbi8qKlxuICogQWRkIGEgbmV3IGVmZmVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZEVmZmVjdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkRWZmZWN0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoXG4gICAgYWN0aW9uLmNvbmZpZz8udHlwZSA9PT0gTElHSFRfQU5EX1NIQURPV19FRkZFQ1QudHlwZSAmJlxuICAgIHN0YXRlLmVmZmVjdHMuc29tZShlZmZlY3QgPT4gZWZmZWN0LnR5cGUgPT09IExJR0hUX0FORF9TSEFET1dfRUZGRUNULnR5cGUpXG4gICkge1xuICAgIENvbnNvbGUud2FybihgQ2FuJ3QgYWRkIG1vcmUgdGhhbiBvbmUgJHtMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVC5uYW1lfSBlZmZlY3RgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBpZiAoXG4gICAgYWN0aW9uLmNvbmZpZz8udHlwZSA9PT0gRElTVEFOQ0VfRk9HX1RZUEUgJiZcbiAgICBzdGF0ZS5lZmZlY3RzLnNvbWUoXG4gICAgICBlZmZlY3QgPT4gZWZmZWN0LnR5cGUgPT09IERJU1RBTkNFX0ZPR19UWVBFIHx8IGVmZmVjdC50eXBlID09PSBTVVJGQUNFX0ZPR19UWVBFXG4gICAgKVxuICApIHtcbiAgICBDb25zb2xlLndhcm4oXCJDYW4ndCBhZGQgbW9yZSB0aGFuIG9uZSBmb2cgZWZmZWN0XCIpO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGlmIChcbiAgICBhY3Rpb24uY29uZmlnPy50eXBlID09PSBTVVJGQUNFX0ZPR19UWVBFICYmXG4gICAgc3RhdGUuZWZmZWN0cy5zb21lKFxuICAgICAgZWZmZWN0ID0+IGVmZmVjdC50eXBlID09PSBTVVJGQUNFX0ZPR19UWVBFIHx8IGVmZmVjdC50eXBlID09PSBESVNUQU5DRV9GT0dfVFlQRVxuICAgIClcbiAgKSB7XG4gICAgQ29uc29sZS53YXJuKFwiQ2FuJ3QgYWRkIG1vcmUgdGhhbiBvbmUgZm9nIGVmZmVjdFwiKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdFZmZlY3QgPSBjcmVhdGVFZmZlY3QoYWN0aW9uLmNvbmZpZyk7XG5cbiAgLy8gY29sbGFwc2UgY29uZmlndXJhdG9ycyBmb3Igb3RoZXIgZWZmZWN0c1xuICBzdGF0ZS5lZmZlY3RzLmZvckVhY2goZWZmZWN0ID0+IGVmZmVjdC5zZXRQcm9wcyh7aXNDb25maWdBY3RpdmU6IGZhbHNlfSkpO1xuXG4gIGNvbnN0IGVmZmVjdHMgPSBbLi4uc3RhdGUuZWZmZWN0cywgbmV3RWZmZWN0XTtcbiAgY29uc3QgZWZmZWN0T3JkZXIgPSBmaXhFZmZlY3RPcmRlcihlZmZlY3RzLCBbbmV3RWZmZWN0LmlkLCAuLi5zdGF0ZS5lZmZlY3RPcmRlcl0pO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWZmZWN0cyxcbiAgICBlZmZlY3RPcmRlclxuICB9O1xufTtcblxuLyoqXG4gKiByZW1vdmUgZWZmZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlRWZmZWN0VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlRWZmZWN0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBpZHggPSBzdGF0ZS5lZmZlY3RzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA8IDAgfHwgaWR4ID49IHN0YXRlLmVmZmVjdHMubGVuZ3RoKSB7XG4gICAgQ29uc29sZS53YXJuKGBjYW4gbm90IHJlbW92ZSBlZmZlY3Qgd2l0aCBpbnZhbGlkIGlkICR7aWR9YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge2VmZmVjdHMsIGVmZmVjdE9yZGVyfSA9IHN0YXRlO1xuICBjb25zdCBlZmZlY3RUb1JlbW92ZSA9IGVmZmVjdHNbaWR4XTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGZpeGVkIGluIHRzXG4gICAgZWZmZWN0czogZmlsdGVyT3V0QnlJZChlZmZlY3RUb1JlbW92ZS5pZCkoZWZmZWN0cyksXG4gICAgZWZmZWN0T3JkZXI6IGVmZmVjdE9yZGVyLmZpbHRlcihlZmZlY3RJZCA9PiBlZmZlY3RJZCAhPT0gZWZmZWN0VG9SZW1vdmUuaWQpXG4gIH07XG59O1xuXG4vKipcbiAqIFJlb3JkZXIgZWZmZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVvcmRlckVmZmVjdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge29yZGVyfTogVmlzU3RhdGVBY3Rpb25zLlJlb3JkZXJFZmZlY3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZWZmZWN0T3JkZXI6IGZpeEVmZmVjdE9yZGVyKHN0YXRlLmVmZmVjdHMsIFsuLi5vcmRlcl0pXG59KTtcblxuLyoqXG4gKiBVcGRhdGUgZWZmZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlRWZmZWN0VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWQsIHByb3BzfTogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUVmZmVjdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgaWR4ID0gc3RhdGUuZWZmZWN0cy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwIHx8IGlkeCA+PSBzdGF0ZS5lZmZlY3RzLmxlbmd0aCkge1xuICAgIENvbnNvbGUud2FybihgY2FuIG5vdCB1cGRhdGUgZWZmZWN0IHdpdGggaW52YWxpZCBpZCAke2lkfWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxldCBlZmZlY3RPcmRlciA9IHN0YXRlLmVmZmVjdE9yZGVyO1xuICBpZiAocHJvcHMuaWQgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5pZCAhPT0gaWQpIHtcbiAgICBjb25zdCBpZHgyID0gc3RhdGUuZWZmZWN0cy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBwcm9wcy5pZCk7XG4gICAgaWYgKGlkeDIgPj0gMCkge1xuICAgICAgQ29uc29sZS53YXJuKGBjYW4gbm90IHVwZGF0ZSBlZmZlY3Qgd2l0aCBleGlzdGluZyBlZmZlY3QgaWQgJHtpZH1gKTtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICBlZmZlY3RPcmRlciA9IGVmZmVjdE9yZGVyLm1hcChlZmZlY3RPcmRlcklkID0+XG4gICAgICBlZmZlY3RPcmRlcklkID09PSBpZCA/IChwcm9wcy5pZCBhcyBzdHJpbmcpIDogZWZmZWN0T3JkZXJJZFxuICAgICk7XG4gIH1cblxuICBjb25zdCBlZmZlY3QgPSBzdGF0ZS5lZmZlY3RzW2lkeF07XG4gIGNvbnN0IG5leHRQYXJhbXMgPSBwcm9wcy5wYXJhbWV0ZXJzO1xuICAvLyBBIHRpbWVzdGFtcC1vbmx5IG5vLW9wIHN0aWxsIHVzZWQgdG8gYWxsb2NhdGUgYSBuZXcgdmlzU3RhdGUgKHNldFByb3BzXG4gIC8vIG11dGF0ZXMgaW4gcGxhY2UpLiBUaGF0IHJldHJpZ2dlcmVkIG5lc3RlZCByZWFjdC1yZWR1eCBjb25uZWN0IHN1YnNjcmliZXJzXG4gIC8vIHdoaWxlIGRyYWdnaW5nIHRoZSBMaWdodCAmIFNoYWRvdyBkYXktdGltZSBzbGlkZXIgdW50aWwgUmVhY3QgdGhyZXdcbiAgLy8gXCJNYXhpbXVtIHVwZGF0ZSBkZXB0aCBleGNlZWRlZFwiLlxuICBpZiAoXG4gICAgbmV4dFBhcmFtcyAmJlxuICAgIE9iamVjdC5rZXlzKHByb3BzKS5sZW5ndGggPT09IDEgJiZcbiAgICBPYmplY3Qua2V5cyhuZXh0UGFyYW1zKS5sZW5ndGggPT09IDEgJiZcbiAgICBuZXh0UGFyYW1zLnRpbWVzdGFtcCAhPSBudWxsICYmXG4gICAgbmV4dFBhcmFtcy50aW1lc3RhbXAgPT09IGVmZmVjdC5wYXJhbWV0ZXJzLnRpbWVzdGFtcFxuICApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdFZmZlY3RzID0gWy4uLnN0YXRlLmVmZmVjdHNdO1xuICBuZXdFZmZlY3RzW2lkeF0uc2V0UHJvcHMocHJvcHMpO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWZmZWN0czogbmV3RWZmZWN0cyxcbiAgICBlZmZlY3RPcmRlclxuICB9O1xufTtcblxuZnVuY3Rpb24gaXNMYXllckNoYXJ0Q29uZmlnKGNoYXJ0OiBDaGFydENvbmZpZyk6IGNoYXJ0IGlzIExheWVyQ2hhcnRDb25maWcge1xuICByZXR1cm4gY2hhcnQudHlwZSA9PT0gJ2xheWVyQ2hhcnQnO1xufVxuXG5mdW5jdGlvbiBtZXJnZUNoYXJ0Q29uZmlnKGNoYXJ0OiBDaGFydENvbmZpZywgcHJvcHM6IFBhcnRpYWw8Q2hhcnRDb25maWc+KTogQ2hhcnRDb25maWcge1xuICByZXR1cm4ge1xuICAgIC4uLmNoYXJ0LFxuICAgIC4uLnByb3BzLFxuICAgIGRpc3BsYXk6IHtcbiAgICAgIC4uLmNoYXJ0LmRpc3BsYXksXG4gICAgICAuLi4ocHJvcHMuZGlzcGxheSB8fCB7fSlcbiAgICB9LFxuICAgIGNoYXJ0RGlzcGxheToge1xuICAgICAgLi4uY2hhcnQuY2hhcnREaXNwbGF5LFxuICAgICAgLi4uKChwcm9wcyBhcyBDaGFydENvbmZpZykuY2hhcnREaXNwbGF5IHx8IHt9KVxuICAgIH1cbiAgfSBhcyBDaGFydENvbmZpZztcbn1cblxuZnVuY3Rpb24gYXhpc0ZpZWxkSWZQcmVzZW50PFQgZXh0ZW5kcyB7ZmllbGQ/OiB7bmFtZTogc3RyaW5nfSB8IG51bGw7IHRpdGxlPzogc3RyaW5nIHwgbnVsbH0+KFxuICBheGlzOiBUIHwgdW5kZWZpbmVkLFxuICBmaWVsZE5hbWVzOiBTZXQ8c3RyaW5nPlxuKTogVCB8IHVuZGVmaW5lZCB7XG4gIGlmICghYXhpcz8uZmllbGQ/Lm5hbWUgfHwgZmllbGROYW1lcy5oYXMoYXhpcy5maWVsZC5uYW1lKSkge1xuICAgIHJldHVybiBheGlzO1xuICB9XG4gIHJldHVybiB7Li4uYXhpcywgZmllbGQ6IG51bGwsIHRpdGxlOiBudWxsfTtcbn1cblxuZnVuY3Rpb24gZHJvcE1pc3NpbmdDaGFydEZpZWxkcyhcbiAgY2hhcnQ6IENoYXJ0Q29uZmlnLFxuICBkYXRhc2V0OiB7ZmllbGRzPzoge25hbWU6IHN0cmluZ31bXX0gfCB1bmRlZmluZWRcbik6IENoYXJ0Q29uZmlnIHtcbiAgY29uc3QgZmllbGROYW1lcyA9IG5ldyBTZXQoKGRhdGFzZXQ/LmZpZWxkcyB8fCBbXSkubWFwKGZpZWxkID0+IGZpZWxkLm5hbWUpKTtcbiAgY29uc3QgbmV4dCA9IGNoYXJ0IGFzIENoYXJ0Q29uZmlnICYge1xuICAgIHhBeGlzPzoge2ZpZWxkPzoge25hbWU6IHN0cmluZ30gfCBudWxsfTtcbiAgICB5QXhpcz86IHtmaWVsZD86IHtuYW1lOiBzdHJpbmd9IHwgbnVsbH07XG4gICAgYXhpcz86IHtmaWVsZD86IHtuYW1lOiBzdHJpbmd9IHwgbnVsbH07XG4gICAgZ3JvdXBCeT86IHtmaWVsZD86IHtuYW1lOiBzdHJpbmd9IHwgbnVsbH07XG4gICAgdmFsdWU/OiB7ZmllbGQ/OiB7bmFtZTogc3RyaW5nfSB8IG51bGx9O1xuICB9O1xuICByZXR1cm4gbWVyZ2VDaGFydENvbmZpZyhjaGFydCwge1xuICAgIHhBeGlzOiBheGlzRmllbGRJZlByZXNlbnQobmV4dC54QXhpcywgZmllbGROYW1lcyksXG4gICAgeUF4aXM6IGF4aXNGaWVsZElmUHJlc2VudChuZXh0LnlBeGlzLCBmaWVsZE5hbWVzKSxcbiAgICBheGlzOiBheGlzRmllbGRJZlByZXNlbnQobmV4dC5heGlzLCBmaWVsZE5hbWVzKSxcbiAgICBncm91cEJ5OiBheGlzRmllbGRJZlByZXNlbnQobmV4dC5ncm91cEJ5LCBmaWVsZE5hbWVzKSxcbiAgICB2YWx1ZTogYXhpc0ZpZWxkSWZQcmVzZW50KG5leHQudmFsdWUsIGZpZWxkTmFtZXMpXG4gIH0gYXMgUGFydGlhbDxDaGFydENvbmZpZz4pO1xufVxuXG5mdW5jdGlvbiByZW1vdmVDaGFydHNBbmRGaWx0ZXJzPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICBzaG91bGRSZW1vdmU6IChjaGFydDogQ2hhcnRDb25maWcpID0+IGJvb2xlYW5cbik6IFQge1xuICBjb25zdCBjaGFydHMgPSBzdGF0ZS5jaGFydHMgfHwgW107XG4gIGNvbnN0IHJlbW92ZWQgPSBjaGFydHMuZmlsdGVyKHNob3VsZFJlbW92ZSk7XG4gIGlmICghcmVtb3ZlZC5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgcmVtb3ZlZElkcyA9IG5ldyBTZXQocmVtb3ZlZC5tYXAoY2hhcnQgPT4gY2hhcnQuaWQpKTtcbiAgY29uc3QgZmlsdGVySWRzID0gbmV3IFNldChcbiAgICByZW1vdmVkLmZsYXRNYXAoY2hhcnQgPT4ge1xuICAgICAgY29uc3QgaWQgPSBjaGFydC5jcm9zc0ZpbHRlcj8uZmlsdGVySWQ7XG4gICAgICByZXR1cm4gaWQgPyBbaWQsIGAke2lkfS14YCwgYCR7aWR9LXlgXSA6IFtdO1xuICAgIH0pXG4gICk7XG4gIGxldCBuZXh0U3RhdGU6IFZpc1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGNoYXJ0czogY2hhcnRzLmZpbHRlcihjaGFydCA9PiAhcmVtb3ZlZElkcy5oYXMoY2hhcnQuaWQpKVxuICB9O1xuICBpZiAoZmlsdGVySWRzLnNpemUpIHtcbiAgICBuZXh0U3RhdGUgPSBuZXh0U3RhdGUuZmlsdGVycy5yZWR1Y2VSaWdodCgoYWNjdSwgZmlsdGVyLCBpZHgpID0+IHtcbiAgICAgIHJldHVybiBmaWx0ZXJJZHMuaGFzKGZpbHRlci5pZCkgPyByZW1vdmVGaWx0ZXJVcGRhdGVyKGFjY3UsIHtpZHh9KSA6IGFjY3U7XG4gICAgfSwgbmV4dFN0YXRlKTtcbiAgfVxuICByZXR1cm4gbmV4dFN0YXRlIGFzIFQ7XG59XG5cbi8qKlxuICogQWRkIGEgY2hhcnRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRDaGFydFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2NoYXJ0fTogVmlzU3RhdGVBY3Rpb25zLkFkZENoYXJ0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoIWNoYXJ0Py5pZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAoKHN0YXRlLmNoYXJ0cyB8fCBbXSkuc29tZShleGlzdGluZyA9PiBleGlzdGluZy5pZCA9PT0gY2hhcnQuaWQpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgY2hhcnRzOiBbXG4gICAgICAuLi4oc3RhdGUuY2hhcnRzIHx8IFtdKS5tYXAoZXhpc3RpbmcgPT4gKHtcbiAgICAgICAgLi4uZXhpc3RpbmcsXG4gICAgICAgIGRpc3BsYXk6IHtcbiAgICAgICAgICAuLi5leGlzdGluZy5kaXNwbGF5LFxuICAgICAgICAgIGlzQ29uZmlnQWN0aXZlOiBmYWxzZVxuICAgICAgICB9XG4gICAgICB9KSksXG4gICAgICB7XG4gICAgICAgIC4uLmNoYXJ0LFxuICAgICAgICBkaXNwbGF5OiB7XG4gICAgICAgICAgLi4uY2hhcnQuZGlzcGxheSxcbiAgICAgICAgICBpc0NvbmZpZ0FjdGl2ZTogY2hhcnQuZGlzcGxheT8uaXNDb25maWdBY3RpdmUgPz8gZmFsc2VcbiAgICAgICAgfVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn07XG5cbi8qKlxuICogVXBkYXRlIGEgY2hhcnRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVDaGFydFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkLCBwcm9wc306IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVDaGFydFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgaWR4ID0gKHN0YXRlLmNoYXJ0cyB8fCBbXSkuZmluZEluZGV4KGNoYXJ0ID0+IGNoYXJ0LmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHByZXYgPSBzdGF0ZS5jaGFydHNbaWR4XTtcbiAgY29uc3QgZGF0YUlkQ2hhbmdlZCA9IHR5cGVvZiBwcm9wcy5kYXRhSWQgPT09ICdzdHJpbmcnICYmIHByb3BzLmRhdGFJZCAhPT0gcHJldi5kYXRhSWQ7XG4gIGNvbnN0IGxheWVySWRDaGFuZ2VkID1cbiAgICBpc0xheWVyQ2hhcnRDb25maWcocHJldikgJiZcbiAgICB0eXBlb2YgKHByb3BzIGFzIExheWVyQ2hhcnRDb25maWcpLmxheWVySWQgPT09ICdzdHJpbmcnICYmXG4gICAgKHByb3BzIGFzIExheWVyQ2hhcnRDb25maWcpLmxheWVySWQgIT09IHByZXYubGF5ZXJJZDtcbiAgbGV0IG5leHQgPSBtZXJnZUNoYXJ0Q29uZmlnKHByZXYsIHByb3BzKTtcbiAgaWYgKGRhdGFJZENoYW5nZWQgfHwgbGF5ZXJJZENoYW5nZWQpIHtcbiAgICBjb25zdCBkYXRhSWQgPSBuZXh0LmRhdGFJZCB8fCB1bmRlZmluZWQ7XG4gICAgbmV4dCA9IGRyb3BNaXNzaW5nQ2hhcnRGaWVsZHMobmV4dCwgZGF0YUlkID8gc3RhdGUuZGF0YXNldHNbZGF0YUlkXSA6IHVuZGVmaW5lZCk7XG4gICAgaWYgKG5leHQuY3Jvc3NGaWx0ZXI/LmVuYWJsZWQpIHtcbiAgICAgIG5leHQgPSBtZXJnZUNoYXJ0Q29uZmlnKG5leHQsIHtcbiAgICAgICAgY3Jvc3NGaWx0ZXI6IHsuLi5uZXh0LmNyb3NzRmlsdGVyLCBlbmFibGVkOiBmYWxzZSwgdmFsdWU6IHt9LCBmaWVsZE5hbWVzOiB7fX1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBjb25zdCBjaGFydHMgPSBbLi4uc3RhdGUuY2hhcnRzXTtcbiAgY2hhcnRzW2lkeF0gPSBuZXh0O1xuICBsZXQgbmV4dFN0YXRlOiBWaXNTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBjaGFydHNcbiAgfTtcbiAgY29uc3QgZmlsdGVySWQgPSBuZXh0LmNyb3NzRmlsdGVyPy5maWx0ZXJJZCB8fCBwcmV2LmNyb3NzRmlsdGVyPy5maWx0ZXJJZDtcbiAgaWYgKHByZXYuY3Jvc3NGaWx0ZXI/LmVuYWJsZWQgJiYgIW5leHQuY3Jvc3NGaWx0ZXI/LmVuYWJsZWQgJiYgZmlsdGVySWQpIHtcbiAgICBjb25zdCBvd25lZEZpbHRlcklkcyA9IG5ldyBTZXQoW2ZpbHRlcklkLCBgJHtmaWx0ZXJJZH0teGAsIGAke2ZpbHRlcklkfS15YF0pO1xuICAgIG5leHRTdGF0ZSA9IG5leHRTdGF0ZS5maWx0ZXJzLnJlZHVjZVJpZ2h0KChhY2N1LCBmaWx0ZXIsIGlkeCkgPT4ge1xuICAgICAgcmV0dXJuIG93bmVkRmlsdGVySWRzLmhhcyhmaWx0ZXIuaWQpID8gcmVtb3ZlRmlsdGVyVXBkYXRlcihhY2N1LCB7aWR4fSkgOiBhY2N1O1xuICAgIH0sIG5leHRTdGF0ZSk7XG4gIH1cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgY2hhcnQgYW5kIGFueSBjcm9zcy1maWx0ZXIgaXQgb3duc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUNoYXJ0VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlQ2hhcnRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiByZW1vdmVDaGFydHNBbmRGaWx0ZXJzKHN0YXRlLCBjaGFydCA9PiBjaGFydC5pZCA9PT0gaWQpO1xuXG4vLyBBTk5PVEFUSU9OIFVQREFURVJTXG5cbmZ1bmN0aW9uIG1ha2VOZXdBbm5vdGF0aW9uKGNvbmZpZz86IEFubm90YXRpb25Qcm9wc1BhcnRpYWwpOiBBbm5vdGF0aW9uIHtcbiAgY29uc3Qga2luZCA9IGNvbmZpZz8ua2luZCA/PyBJTklUSUFMX0FOTk9UQVRJT05fS0lORDtcbiAgY29uc3QgcHJvdmlkZWRBbmdsZSA9IE51bWJlci5pc0Zpbml0ZSgoY29uZmlnIGFzIGFueSk/LmFuZ2xlKSA/IChjb25maWcgYXMgYW55KS5hbmdsZSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgZGVyaXZlZEZyb21BbmdsZSA9XG4gICAgcHJvdmlkZWRBbmdsZSAhPSBudWxsID8gdGV4dFBsYWNlbWVudEZyb21BbmdsZShwcm92aWRlZEFuZ2xlKSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgdGV4dFNpZGUgPVxuICAgIGNvbmZpZz8udGV4dFNpZGUgPz9cbiAgICBkZXJpdmVkRnJvbUFuZ2xlPy5zaWRlID8/XG4gICAgKGtpbmQgPT09IEFubm90YXRpb25LaW5kLlRFWFQgPyB1bmRlZmluZWQgOiBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9TSURFKTtcbiAgY29uc3QgdGV4dFZlcnRpY2FsUG9zaXRpb24gPVxuICAgIGNvbmZpZz8udGV4dFZlcnRpY2FsUG9zaXRpb24gPz9cbiAgICBkZXJpdmVkRnJvbUFuZ2xlPy52ZXJ0aWNhbCA/P1xuICAgIChraW5kID09PSBBbm5vdGF0aW9uS2luZC5URVhUID8gdW5kZWZpbmVkIDogSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfVkVSVElDQUxfUE9TSVRJT04pO1xuICBjb25zdCBiYXNlID0ge1xuICAgIGlkOiBjb25maWc/LmlkID8/IGdlbmVyYXRlSGFzaElkKDYpLFxuICAgIGtpbmQsXG4gICAgaXNWaXNpYmxlOiBjb25maWc/LmlzVmlzaWJsZSA/PyB0cnVlLFxuICAgIGF1dG9TaXplOiBjb25maWc/LmF1dG9TaXplID8/IHRydWUsXG4gICAgYXV0b1NpemVZOiBjb25maWc/LmF1dG9TaXplWSA/PyB0cnVlLFxuICAgIGFuY2hvclBvaW50OiBjb25maWc/LmFuY2hvclBvaW50ID8/IChbMCwgMF0gYXMgW251bWJlciwgbnVtYmVyXSksXG4gICAgbGFiZWw6IGNvbmZpZz8ubGFiZWwgPz8gJ05ldyBBbm5vdGF0aW9uJyxcbiAgICBsaW5lQ29sb3I6IGNvbmZpZz8ubGluZUNvbG9yID8/IElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX0NPTE9SLFxuICAgIGxpbmVXaWR0aDogY29uZmlnPy5saW5lV2lkdGggPz8gSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEgsXG4gICAgdGV4dFdpZHRoOiBjb25maWc/LnRleHRXaWR0aCA/PyBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9XSURUSCxcbiAgICB0ZXh0SGVpZ2h0OiBjb25maWc/LnRleHRIZWlnaHQgPz8gSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfSEVJR0hULFxuICAgIHRleHRWZXJ0aWNhbEFsaWduOiBjb25maWc/LnRleHRWZXJ0aWNhbEFsaWduID8/ICgnYm90dG9tJyBhcyBjb25zdCksXG4gICAgLi4uKHRleHRTaWRlID8ge3RleHRTaWRlfSA6IHt9KSxcbiAgICAuLi4odGV4dFZlcnRpY2FsUG9zaXRpb24gPyB7dGV4dFZlcnRpY2FsUG9zaXRpb259IDoge30pLFxuICAgIG1hcEluZGV4OiBjb25maWc/Lm1hcEluZGV4XG4gIH07XG5cbiAgY29uc3QgZGVmYXVsdEFuZ2xlID1cbiAgICB0ZXh0U2lkZSAmJiB0ZXh0VmVydGljYWxQb3NpdGlvblxuICAgICAgPyBBTk5PVEFUSU9OX0FOR0xFX0JZX1BMQUNFTUVOVFtgJHt0ZXh0U2lkZX0tJHt0ZXh0VmVydGljYWxQb3NpdGlvbn1gXVxuICAgICAgOiBJTklUSUFMX0FOTk9UQVRJT05fQU5HTEU7XG5cbiAgc3dpdGNoIChraW5kKSB7XG4gICAgY2FzZSBBbm5vdGF0aW9uS2luZC5QT0lOVDpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmJhc2UsXG4gICAgICAgIGtpbmQ6IEFubm90YXRpb25LaW5kLlBPSU5ULFxuICAgICAgICBhcm1MZW5ndGg6IChjb25maWcgYXMgYW55KT8uYXJtTGVuZ3RoID8/IElOSVRJQUxfQU5OT1RBVElPTl9BUk1fTEVOR1RILFxuICAgICAgICBhbmdsZTogcHJvdmlkZWRBbmdsZSA/PyBkZWZhdWx0QW5nbGVcbiAgICAgIH07XG4gICAgY2FzZSBBbm5vdGF0aW9uS2luZC5BUlJPVzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmJhc2UsXG4gICAgICAgIGtpbmQ6IEFubm90YXRpb25LaW5kLkFSUk9XLFxuICAgICAgICBhcm1MZW5ndGg6IChjb25maWcgYXMgYW55KT8uYXJtTGVuZ3RoID8/IElOSVRJQUxfQU5OT1RBVElPTl9BUk1fTEVOR1RILFxuICAgICAgICBhbmdsZTogcHJvdmlkZWRBbmdsZSA/PyBkZWZhdWx0QW5nbGVcbiAgICAgIH07XG4gICAgY2FzZSBBbm5vdGF0aW9uS2luZC5DSVJDTEU6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5iYXNlLFxuICAgICAgICBraW5kOiBBbm5vdGF0aW9uS2luZC5DSVJDTEUsXG4gICAgICAgIGFybUxlbmd0aDogKGNvbmZpZyBhcyBhbnkpPy5hcm1MZW5ndGggPz8gSU5JVElBTF9BTk5PVEFUSU9OX0FSTV9MRU5HVEgsXG4gICAgICAgIGFuZ2xlOiBwcm92aWRlZEFuZ2xlID8/IGRlZmF1bHRBbmdsZSxcbiAgICAgICAgcmFkaXVzSW5NZXRlcnM6IChjb25maWcgYXMgYW55KT8ucmFkaXVzSW5NZXRlcnMgPz8gMTAwMFxuICAgICAgfTtcbiAgICBjYXNlIEFubm90YXRpb25LaW5kLlRFWFQ6XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmJhc2UsXG4gICAgICAgIGtpbmQ6IEFubm90YXRpb25LaW5kLlRFWFRcbiAgICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBBZGQgYSBuZXcgYW5ub3RhdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZEFubm90YXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZEFubm90YXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IG5ld0Fubm90YXRpb24gPSBtYWtlTmV3QW5ub3RhdGlvbihhY3Rpb24uY29uZmlnKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbm5vdGF0aW9uczogW25ld0Fubm90YXRpb24sIC4uLnN0YXRlLmFubm90YXRpb25zXSxcbiAgICBzZWxlY3RlZEFubm90YXRpb25JZDogbmV3QW5ub3RhdGlvbi5pZCxcbiAgICBpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dDogdHJ1ZVxuICB9O1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYW4gYW5ub3RhdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUFubm90YXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZH06IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVBbm5vdGF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFubm90YXRpb25zOiBzdGF0ZS5hbm5vdGF0aW9ucy5maWx0ZXIoYSA9PiBhLmlkICE9PSBpZCksXG4gICAgc2VsZWN0ZWRBbm5vdGF0aW9uSWQ6IHN0YXRlLnNlbGVjdGVkQW5ub3RhdGlvbklkID09PSBpZCA/IG51bGwgOiBzdGF0ZS5zZWxlY3RlZEFubm90YXRpb25JZCxcbiAgICBpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dDpcbiAgICAgIHN0YXRlLnNlbGVjdGVkQW5ub3RhdGlvbklkID09PSBpZCA/IGZhbHNlIDogc3RhdGUuaXNFZGl0aW5nQW5ub3RhdGlvblRleHRcbiAgfTtcbn07XG5cbi8qKlxuICogVXBkYXRlIGFuIGFubm90YXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVBbm5vdGF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWQsIGNvbmZpZ306IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVBbm5vdGF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBpZHggPSBzdGF0ZS5hbm5vdGF0aW9ucy5maW5kSW5kZXgoYSA9PiBhLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwKSB7XG4gICAgQ29uc29sZS53YXJuKGBjYW4gbm90IHVwZGF0ZSBhbm5vdGF0aW9uIHdpdGggaW52YWxpZCBpZCAke2lkfWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBwcmV2ID0gc3RhdGUuYW5ub3RhdGlvbnNbaWR4XTtcbiAgbGV0IG5leHRBbm5vdGF0aW9uOiBBbm5vdGF0aW9uO1xuXG4gIGlmIChjb25maWcua2luZCAmJiBjb25maWcua2luZCAhPT0gcHJldi5raW5kKSB7XG4gICAgbmV4dEFubm90YXRpb24gPSBtYWtlTmV3QW5ub3RhdGlvbih7Li4ucHJldiwgLi4uY29uZmlnfSBhcyBBbm5vdGF0aW9uUHJvcHNQYXJ0aWFsKTtcbiAgfSBlbHNlIHtcbiAgICBuZXh0QW5ub3RhdGlvbiA9IHsuLi5wcmV2LCAuLi5jb25maWd9IGFzIEFubm90YXRpb247XG4gIH1cblxuICBjb25zdCBuZXdBbm5vdGF0aW9ucyA9IFsuLi5zdGF0ZS5hbm5vdGF0aW9uc107XG4gIG5ld0Fubm90YXRpb25zW2lkeF0gPSBuZXh0QW5ub3RhdGlvbjtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbm5vdGF0aW9uczogbmV3QW5ub3RhdGlvbnNcbiAgfTtcbn07XG5cbi8qKlxuICogRHVwbGljYXRlIGFuIGFubm90YXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBkdXBsaWNhdGVBbm5vdGF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuRHVwbGljYXRlQW5ub3RhdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qgb3JpZ2luYWwgPSBzdGF0ZS5hbm5vdGF0aW9ucy5maW5kKGEgPT4gYS5pZCA9PT0gaWQpO1xuICBpZiAoIW9yaWdpbmFsKSB7XG4gICAgQ29uc29sZS53YXJuKGBjYW4gbm90IGR1cGxpY2F0ZSBhbm5vdGF0aW9uIHdpdGggaW52YWxpZCBpZCAke2lkfWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBuZXdBbm5vdGF0aW9uID0ge1xuICAgIC4uLmNsb25lRGVlcChvcmlnaW5hbCksXG4gICAgaWQ6IGdlbmVyYXRlSGFzaElkKDYpLFxuICAgIGxhYmVsOiBgQ29weSBvZiAke29yaWdpbmFsLmxhYmVsfWBcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbm5vdGF0aW9uczogW25ld0Fubm90YXRpb24sIC4uLnN0YXRlLmFubm90YXRpb25zXSxcbiAgICBzZWxlY3RlZEFubm90YXRpb25JZDogbmV3QW5ub3RhdGlvbi5pZCxcbiAgICBpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dDogZmFsc2VcbiAgfTtcbn07XG5cbi8qKlxuICogU2V0IHNlbGVjdGVkIGFubm90YXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRTZWxlY3RlZEFubm90YXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZCwgaXNFZGl0aW5nVGV4dH06IFZpc1N0YXRlQWN0aW9ucy5TZXRTZWxlY3RlZEFubm90YXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmIChcbiAgICBpZCA9PT0gc3RhdGUuc2VsZWN0ZWRBbm5vdGF0aW9uSWQgJiZcbiAgICAoaXNFZGl0aW5nVGV4dCA/PyBmYWxzZSkgPT09IHN0YXRlLmlzRWRpdGluZ0Fubm90YXRpb25UZXh0XG4gICkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHNlbGVjdGVkQW5ub3RhdGlvbklkOiBpZCxcbiAgICBpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dDogaXNFZGl0aW5nVGV4dCA/PyBmYWxzZVxuICB9O1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSBkYXRhc2V0IGFuZCBhbGwgbGF5ZXJzLCBmaWx0ZXJzLCB0b29sdGlwIGNvbmZpZ3MgdGhhdCBiYXNlZCBvbiBpdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZURhdGFzZXRVcGRhdGVyPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVEYXRhc2V0VXBkYXRlckFjdGlvblxuKTogVCB7XG4gIC8vIGV4dHJhY3QgZGF0YXNldCBrZXlcbiAgY29uc3Qge2RhdGFJZDogZGF0YXNldEtleX0gPSBhY3Rpb247XG4gIGNvbnN0IHtkYXRhc2V0c30gPSBzdGF0ZTtcblxuICAvLyBjaGVjayBpZiBkYXRhc2V0IGlzIHByZXNlbnRcbiAgaWYgKCFkYXRhc2V0c1tkYXRhc2V0S2V5XSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICBsYXllcnMsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIGRhdGFzZXRzOiB7W2RhdGFzZXRLZXldOiBkYXRhc2V0LCAuLi5uZXdEYXRhc2V0c31cbiAgfSA9IHN0YXRlO1xuXG4gIGNvbnN0IGxheWVyc1RvUmVtb3ZlID0gbGF5ZXJzLmZpbHRlcihsID0+IGwuY29uZmlnLmRhdGFJZCA9PT0gZGF0YXNldEtleSkubWFwKGwgPT4gbC5pZCk7XG5cbiAgLy8gcmVtb3ZlIGxheWVycyBhbmQgZGF0YXNldHNcbiAgbGV0IG5ld1N0YXRlID0gbGF5ZXJzVG9SZW1vdmUucmVkdWNlKChhY2N1LCBpZCkgPT4gcmVtb3ZlTGF5ZXJVcGRhdGVyKGFjY3UsIHtpZH0pLCB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGF0YXNldHM6IG5ld0RhdGFzZXRzXG4gIH0pO1xuXG4gIC8vIHVwZGF0ZSBmaWx0ZXJzXG4gIGNvbnN0IGZpbHRlcnM6IEZpbHRlcltdID0gW107XG4gIGZvciAoY29uc3QgZmlsdGVyIG9mIG5ld1N0YXRlLmZpbHRlcnMpIHtcbiAgICBjb25zdCB2YWx1ZUluZGV4ID0gZmlsdGVyLmRhdGFJZC5pbmRleE9mKGRhdGFzZXRLZXkpO1xuICAgIGlmICh2YWx1ZUluZGV4ID49IDAgJiYgZmlsdGVyLmRhdGFJZC5sZW5ndGggPiAxKSB7XG4gICAgICAvLyBvbmx5IHJlbW92ZSBvbmUgc3luY2VkIGRhdGFzZXQgZnJvbSB0aGUgZmlsdGVyXG4gICAgICBmaWx0ZXJzLnB1c2goX3JlbW92ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChmaWx0ZXIsIHZhbHVlSW5kZXgsIGRhdGFzZXRzKSk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZUluZGV4IDwgMCkge1xuICAgICAgLy8gbGVhdmUgdGhlIGZpbHRlciBhcyBpc1xuICAgICAgZmlsdGVycy5wdXNoKGZpbHRlcik7XG4gICAgfVxuICB9XG5cbiAgbmV3U3RhdGUgPSB7Li4ubmV3U3RhdGUsIGZpbHRlcnN9O1xuXG4gIHJldHVybiByZW1vdmVDaGFydHNBbmRGaWx0ZXJzKFxuICAgIHJlbW92ZURhdGFzZXRGcm9tSW50ZXJhY3Rpb25Db25maWcobmV3U3RhdGUsIHtkYXRhSWQ6IGRhdGFzZXRLZXl9KSxcbiAgICBjaGFydCA9PiB7XG4gICAgICBpZiAoY2hhcnQuZGF0YUlkID09PSBkYXRhc2V0S2V5KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKGlzTGF5ZXJDaGFydENvbmZpZyhjaGFydCkpIHtcbiAgICAgICAgcmV0dXJuIGxheWVyc1RvUmVtb3ZlLmluY2x1ZGVzKGNoYXJ0LmxheWVySWQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlRGF0YXNldEZyb21JbnRlcmFjdGlvbkNvbmZpZyhzdGF0ZSwge2RhdGFJZH0pIHtcbiAgbGV0IHtpbnRlcmFjdGlvbkNvbmZpZ30gPSBzdGF0ZTtcbiAgY29uc3Qge3Rvb2x0aXB9ID0gaW50ZXJhY3Rpb25Db25maWc7XG4gIGlmICh0b29sdGlwKSB7XG4gICAgY29uc3Qge2NvbmZpZ30gPSB0b29sdGlwO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBjb25zdCB7W2RhdGFJZF06IGZpZWxkcywgLi4uZmllbGRzVG9TaG93fSA9IGNvbmZpZy5maWVsZHNUb1Nob3c7XG4gICAgaW50ZXJhY3Rpb25Db25maWcgPSB7XG4gICAgICAuLi5pbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgIHRvb2x0aXA6IHsuLi50b29sdGlwLCBjb25maWc6IHsuLi5jb25maWcsIGZpZWxkc1RvU2hvd319XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7Li4uc3RhdGUsIGludGVyYWN0aW9uQ29uZmlnfTtcbn1cbi8qKlxuICogdXBkYXRlIGxheWVyIGJsZW5kaW5nIG1vZGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVMYXllckJsZW5kaW5nVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVMYXllckJsZW5kaW5nVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGxheWVyQmxlbmRpbmc6IGFjdGlvbi5tb2RlXG59KTtcblxuLyoqXG4gKiB1cGRhdGUgb3ZlcmxheSBibGVuZGluZyBtb2RlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlT3ZlcmxheUJsZW5kaW5nVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVPdmVybGF5QmxlbmRpbmdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgb3ZlcmxheUJsZW5kaW5nOiBhY3Rpb24ubW9kZVxufSk7XG5cbi8qKlxuICogRGlzcGxheSBkYXRhc2V0IHRhYmxlIGluIGEgbW9kYWxcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzaG93RGF0YXNldFRhYmxlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TaG93RGF0YXNldFRhYmxlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRpbmdEYXRhc2V0OiBhY3Rpb24uZGF0YUlkXG4gIH07XG59O1xuXG4vKipcbiAqIEFkZCBjdXN0b20gY29sb3IgZm9yIGRhdGFzZXRzIGFuZCBsYXllcnNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVUYWJsZUNvbG9yVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVEYXRhc2V0Q29sb3JVcGRhdGVyXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB1cGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyKHN0YXRlLCB7ZGF0YUlkOiBhY3Rpb24uZGF0YUlkLCBwcm9wczoge2NvbG9yOiBhY3Rpb24ubmV3Q29sb3J9fSk7XG59O1xuXG4vKipcbiAqIHJlc2V0IHZpc1N0YXRlIHRvIGluaXRpYWwgU3RhdGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZXNldE1hcENvbmZpZ1VwZGF0ZXIgPSAoc3RhdGU6IFZpc1N0YXRlKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uSU5JVElBTF9WSVNfU1RBVEUsXG4gIC4uLnN0YXRlLmluaXRpYWxTdGF0ZSxcbiAgaW5pdGlhbFN0YXRlOiBzdGF0ZS5pbml0aWFsU3RhdGVcbn0pO1xuXG4vKipcbiAqIFByb3BhZ2F0ZSBgdmlzU3RhdGVgIHJlZHVjZXIgd2l0aCBhIG5ldyBjb25maWd1cmF0aW9uLiBDdXJyZW50IGNvbmZpZyB3aWxsIGJlIG92ZXJyaWRlLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlY2VpdmVNYXBDb25maWdVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtcbiAgICBwYXlsb2FkOiB7Y29uZmlnID0ge30sIG9wdGlvbnMgPSB7fX1cbiAgfToge1xuICAgIHR5cGU/OiB0eXBlb2YgQWN0aW9uVHlwZXMuUkVDRUlWRV9NQVBfQ09ORklHO1xuICAgIHBheWxvYWQ6IFJlY2VpdmVNYXBDb25maWdQYXlsb2FkO1xuICB9XG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmICghY29uZmlnLnZpc1N0YXRlKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge2tlZXBFeGlzdGluZ0NvbmZpZ30gPSBvcHRpb25zO1xuXG4gIC8vIHJlc2V0IGNvbmZpZyBpZiBrZWVwRXhpc3RpbmdDb25maWcgaXMgZmFsc3lcbiAgbGV0IG1lcmdlZFN0YXRlID0gIWtlZXBFeGlzdGluZ0NvbmZpZyA/IHJlc2V0TWFwQ29uZmlnVXBkYXRlcihzdGF0ZSkgOiBzdGF0ZTtcbiAgZm9yIChjb25zdCBtZXJnZXIgb2Ygc3RhdGUubWVyZ2Vycykge1xuICAgIGlmIChpc1ZhbGlkTWVyZ2VyKG1lcmdlcikgJiYgaGFzUHJvcHNUb01lcmdlKGNvbmZpZy52aXNTdGF0ZSwgbWVyZ2VyLnByb3ApKSB7XG4gICAgICBtZXJnZWRTdGF0ZSA9IG1lcmdlci5tZXJnZShcbiAgICAgICAgbWVyZ2VkU3RhdGUsXG4gICAgICAgIGdldFByb3BWYWx1ZVRvTWVyZ2VyKGNvbmZpZy52aXNTdGF0ZSwgbWVyZ2VyLnByb3AsIG1lcmdlci50b01lcmdlUHJvcCksXG4gICAgICAgIC8vIGZyb21Db25maWdcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWVyZ2VkU3RhdGU7XG59O1xuXG4vKipcbiAqIFRyaWdnZXIgbGF5ZXIgaG92ZXIgZXZlbnQgd2l0aCBob3ZlcmVkIG9iamVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGxheWVySG92ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLk9uTGF5ZXJIb3ZlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBob3ZlckluZm86IHtcbiAgICAvLyBkZWNrLmdsIGluZm8gaXMgbXV0YWJsZVxuICAgIC4uLmFjdGlvbi5pbmZvLFxuICAgIC4uLihOdW1iZXIuaXNGaW5pdGUoYWN0aW9uLm1hcEluZGV4KSA/IHttYXBJbmRleDogYWN0aW9uLm1hcEluZGV4fSA6IHt9KVxuICB9XG59KTtcblxuLyogZXNsaW50LWVuYWJsZSBtYXgtc3RhdGVtZW50cyAqL1xuXG4vKipcbiAqIFVwZGF0ZSBgaW50ZXJhY3Rpb25Db25maWdgXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gaW50ZXJhY3Rpb25Db25maWdDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkludGVyYWN0aW9uQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7Y29uZmlnfSA9IGFjdGlvbjtcblxuICBjb25zdCBpbnRlcmFjdGlvbkNvbmZpZyA9IHtcbiAgICAuLi5zdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAuLi57W2NvbmZpZy5pZF06IGNvbmZpZ31cbiAgfTtcblxuICAvLyBEb24ndCBlbmFibGUgdG9vbHRpcCBhbmQgYnJ1c2ggYXQgdGhlIHNhbWUgdGltZVxuICAvLyBidXQgY29vcmRpbmF0ZXMgY2FuIGJlIHNob3duIGF0IGFsbCB0aW1lXG4gIGNvbnN0IGNvbnRyYWRpY3QgPSBbJ2JydXNoJywgJ3Rvb2x0aXAnXTtcblxuICBpZiAoXG4gICAgY29udHJhZGljdC5pbmNsdWRlcyhjb25maWcuaWQpICYmXG4gICAgY29uZmlnLmVuYWJsZWQgJiZcbiAgICAhc3RhdGUuaW50ZXJhY3Rpb25Db25maWdbY29uZmlnLmlkXS5lbmFibGVkXG4gICkge1xuICAgIC8vIG9ubHkgZW5hYmxlIG9uZSBpbnRlcmFjdGlvbiBhdCBhIHRpbWVcbiAgICBjb250cmFkaWN0LmZvckVhY2goayA9PiB7XG4gICAgICBpZiAoayAhPT0gY29uZmlnLmlkKSB7XG4gICAgICAgIGludGVyYWN0aW9uQ29uZmlnW2tdID0gey4uLmludGVyYWN0aW9uQ29uZmlnW2tdLCBlbmFibGVkOiBmYWxzZX07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBpbnRlcmFjdGlvbkNvbmZpZ1xuICB9O1xuXG4gIGlmIChjb25maWcuaWQgPT09ICdnZW9jb2RlcicgJiYgIWNvbmZpZy5lbmFibGVkKSB7XG4gICAgcmV0dXJuIHJlbW92ZURhdGFzZXRVcGRhdGVyKG5ld1N0YXRlLCB7ZGF0YUlkOiAnZ2VvY29kZXJfZGF0YXNldCd9KTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBUcmlnZ2VyIGxheWVyIGNsaWNrIGV2ZW50IHdpdGggY2xpY2tlZCBvYmplY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBsYXllckNsaWNrVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5PbkxheWVyQ2xpY2tVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbW91c2VQb3M6IHN0YXRlLmludGVyYWN0aW9uQ29uZmlnLmNvb3JkaW5hdGUuZW5hYmxlZFxuICAgID8ge1xuICAgICAgICAuLi5zdGF0ZS5tb3VzZVBvcyxcbiAgICAgICAgcGlubmVkOiBzdGF0ZS5tb3VzZVBvcy5waW5uZWQgPyBudWxsIDogY2xvbmVEZWVwKHN0YXRlLm1vdXNlUG9zKVxuICAgICAgfVxuICAgIDogc3RhdGUubW91c2VQb3MsXG4gIGNsaWNrZWQ6IGFjdGlvbi5pbmZvICYmIGFjdGlvbi5pbmZvLnBpY2tlZCA/IGFjdGlvbi5pbmZvIDogbnVsbFxufSk7XG5cbi8qKlxuICogVHJpZ2dlciBtYXAgY2xpY2sgZXZlbnQsIHVuc2VsZWN0IGNsaWNrZWQgb2JqZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbWFwQ2xpY2tVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuT25NYXBDbGlja1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBjbGlja2VkOiBudWxsXG4gIH07XG59O1xuXG4vKipcbiAqIFRyaWdnZXIgbWFwIG1vdmUgZXZlbnRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBtb3VzZU1vdmVVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtldnR9OiBWaXNTdGF0ZUFjdGlvbnMuT25Nb3VzZU1vdmVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmIChPYmplY3QudmFsdWVzKHN0YXRlLmludGVyYWN0aW9uQ29uZmlnKS5zb21lKGNvbmZpZyA9PiBjb25maWcuZW5hYmxlZCkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBtb3VzZVBvczoge1xuICAgICAgICAuLi5zdGF0ZS5tb3VzZVBvcyxcbiAgICAgICAgLi4uKEFycmF5LmlzQXJyYXkoZXZ0LnBvaW50KSA/IHttb3VzZVBvc2l0aW9uOiBbLi4uZXZ0LnBvaW50XX0gOiB7fSksXG4gICAgICAgIC4uLihBcnJheS5pc0FycmF5KGV2dC5sbmdMYXQpID8ge2Nvb3JkaW5hdGU6IFsuLi5ldnQubG5nTGF0XX0gOiB7fSlcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufTtcbi8qKlxuICogVG9nZ2xlIHZpc2liaWxpdHkgb2YgYSBsYXllciBmb3IgYSBzcGxpdCBtYXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVTcGxpdE1hcFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBNYXBTdGF0ZUFjdGlvbnMuVG9nZ2xlU3BsaXRNYXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PlxuICBzdGF0ZS5zcGxpdE1hcHMgJiYgc3RhdGUuc3BsaXRNYXBzLmxlbmd0aCA9PT0gMFxuICAgID8ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgLy8gbWF5YmUgd2Ugc2hvdWxkIHVzZSBhbiBhcnJheSB0byBzdG9yZSBzdGF0ZSBmb3IgYSBzaW5nbGUgbWFwIGFzIHdlbGxcbiAgICAgICAgLy8gaWYgY3VycmVudCBtYXBzIGxlbmd0aCBpcyBlcXVhbCB0byAwIGl0IG1lYW5zIHRoYXQgd2UgYXJlIGFib3V0IHRvIHNwbGl0IHRoZSB2aWV3XG4gICAgICAgIHNwbGl0TWFwczogY29tcHV0ZVNwbGl0TWFwTGF5ZXJzKHN0YXRlLmxheWVycywge2R1cGxpY2F0ZTogZmFsc2V9KVxuICAgICAgfVxuICAgIDogY2xvc2VTcGVjaWZpY01hcEF0SW5kZXgoc3RhdGUsIGFjdGlvbik7XG5cbi8qKlxuICogVG9nZ2xlIHZpc2liaWxpdHkgb2YgYSBsYXllciBpbiBhIHNwbGl0IG1hcFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUxheWVyRm9yTWFwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7bWFwSW5kZXgsIGxheWVySWR9OiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtzcGxpdE1hcHN9ID0gc3RhdGU7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBzcGxpdE1hcHM6IHNwbGl0TWFwcy5tYXAoKHNtLCBpKSA9PlxuICAgICAgaSA9PT0gbWFwSW5kZXhcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5zcGxpdE1hcHNbaV0sXG4gICAgICAgICAgICBsYXllcnM6IHtcbiAgICAgICAgICAgICAgLi4uc3BsaXRNYXBzW2ldLmxheWVycyxcbiAgICAgICAgICAgICAgLy8gaWYgbGF5ZXJJZCBub3QgaW4gbGF5ZXJzLCBzZXQgaXQgdG8gdmlzaWJsZVxuICAgICAgICAgICAgICBbbGF5ZXJJZF06ICFzcGxpdE1hcHNbaV0ubGF5ZXJzW2xheWVySWRdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICA6IHNtXG4gICAgKVxuICB9O1xufTtcblxuZnVuY3Rpb24gaGFzVGFidWxhckRhdGFzZXREYXRhKGRhdGE/OiBQcm90b0RhdGFzZXRbJ2RhdGEnXSB8IG51bGwpOiBib29sZWFuIHtcbiAgcmV0dXJuIEJvb2xlYW4oXG4gICAgZGF0YT8ucm93cz8ubGVuZ3RoIHx8IGRhdGE/LmNvbHM/Lmxlbmd0aCB8fCAoZGF0YSBhcyB7YXJyb3dUYWJsZT86IHVua25vd259KT8uYXJyb3dUYWJsZVxuICApO1xufVxuXG5mdW5jdGlvbiBuZWVkc0V4dGVybmFsbHlIb3N0ZWRIeWRyYXRlKGRhdGFzZXQ6IFByb3RvRGF0YXNldCk6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIGRhdGFzZXQuaW5mbz8udHlwZSA9PT0gRGF0YXNldFR5cGUuRVhURVJOQUxMWV9IT1NURUQgJiZcbiAgICB0eXBlb2YgZGF0YXNldC5tZXRhZGF0YT8uc291cmNlID09PSAnc3RyaW5nJyAmJlxuICAgICFoYXNUYWJ1bGFyRGF0YXNldERhdGEoZGF0YXNldC5kYXRhKVxuICApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBoeWRyYXRlRXh0ZXJuYWxseUhvc3RlZFByb3RvRGF0YXNldCh7XG4gIGFyZzogZGF0YXNldCxcbiAgb25Qcm9ncmVzc1xufToge1xuICBhcmc6IFByb3RvRGF0YXNldDtcbiAgb25Qcm9ncmVzczogKHByb2dyZXNzOiB7bG9hZGVkOiBudW1iZXI7IHRvdGFsPzogbnVtYmVyOyBwZXJjZW50OiBudW1iZXJ9KSA9PiB2b2lkO1xufSk6IFByb21pc2U8UHJvdG9EYXRhc2V0PiB7XG4gIGlmICghbmVlZHNFeHRlcm5hbGx5SG9zdGVkSHlkcmF0ZShkYXRhc2V0KSkge1xuICAgIHJldHVybiBkYXRhc2V0O1xuICB9XG4gIGNvbnN0IGxvYWRlZCA9IGF3YWl0IGxvYWRFeHRlcm5hbGx5SG9zdGVkRGF0YXNldCh7XG4gICAgc291cmNlOiBkYXRhc2V0Lm1ldGFkYXRhPy5zb3VyY2UgYXMgc3RyaW5nLFxuICAgIGZvcm1hdDogZ2V0UmVtb3RlU291cmNlRm9ybWF0KGRhdGFzZXQubWV0YWRhdGEpLFxuICAgIHNpemU6IHR5cGVvZiBkYXRhc2V0Lm1ldGFkYXRhPy5zaXplID09PSAnbnVtYmVyJyA/IGRhdGFzZXQubWV0YWRhdGEuc2l6ZSA6IHVuZGVmaW5lZCxcbiAgICBieXBhc3NDYWNoZTogZ2V0RGF0YXNldFJlZnJlc2hJbnRlcnZhbE1zKGRhdGFzZXQubWV0YWRhdGEpID4gMCxcbiAgICBvblByb2dyZXNzXG4gIH0pO1xuICBpZiAoIWxvYWRlZC5kYXRhKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBObyBkYXRhIGxvYWRlZCBmcm9tICR7ZGF0YXNldC5tZXRhZGF0YT8uc291cmNlfWApO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uZGF0YXNldCxcbiAgICBkYXRhOiBsb2FkZWQuZGF0YSxcbiAgICBtZXRhZGF0YToge1xuICAgICAgLi4uZGF0YXNldC5tZXRhZGF0YSxcbiAgICAgIGV0YWc6IGxvYWRlZC5ldGFnLFxuICAgICAgbGFzdE1vZGlmaWVkOiBsb2FkZWQubGFzdE1vZGlmaWVkLFxuICAgICAgLi4uKHR5cGVvZiBsb2FkZWQuc2l6ZSA9PT0gJ251bWJlcicgPyB7c2l6ZTogbG9hZGVkLnNpemV9IDoge30pLFxuICAgICAgbGFzdEZldGNoZWRBdDogRGF0ZS5ub3coKSxcbiAgICAgIHJlZnJlc2hTdGF0dXM6ICdpZGxlJ1xuICAgIH1cbiAgfTtcbn1cblxuY29uc3QgSFlEUkFURV9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0sgPSBUYXNrLmZyb21Qcm9taXNlV2l0aFByb2dyZXNzKFxuICBoeWRyYXRlRXh0ZXJuYWxseUhvc3RlZFByb3RvRGF0YXNldCxcbiAgJ0hZRFJBVEVfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLJ1xuKTtcblxuY29uc3QgRkFJTF9DUkVBVEVfREFUQVNFVF9UQVNLID0gVGFzay5mcm9tUHJvbWlzZShhc3luYyAobWVzc2FnZTogc3RyaW5nKSA9PiB7XG4gIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbn0sICdGQUlMX0NSRUFURV9EQVRBU0VUX1RBU0snKTtcblxuZnVuY3Rpb24gZ2V0RGF0YXNldFByb2dyZXNzSWQoZGF0YXNldDogUHJvdG9EYXRhc2V0LCBpbmRleCA9IDApOiBzdHJpbmcge1xuICBpZiAodHlwZW9mIGRhdGFzZXQuaW5mbz8uaWQgPT09ICdzdHJpbmcnICYmIGRhdGFzZXQuaW5mby5pZCkge1xuICAgIHJldHVybiBkYXRhc2V0LmluZm8uaWQ7XG4gIH1cbiAgaWYgKHR5cGVvZiBkYXRhc2V0Lm1ldGFkYXRhPy5zb3VyY2UgPT09ICdzdHJpbmcnICYmIGRhdGFzZXQubWV0YWRhdGEuc291cmNlKSB7XG4gICAgcmV0dXJuIGRhdGFzZXQubWV0YWRhdGEuc291cmNlO1xuICB9XG4gIHJldHVybiBgZGF0YXNldC0ke2luZGV4fWA7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU5ld0RhdGFFbnRyeVRhc2soZGF0YXNldDogUHJvdG9EYXRhc2V0LCBkYXRhc2V0czogRGF0YXNldHMpIHtcbiAgaWYgKCFuZWVkc0V4dGVybmFsbHlIb3N0ZWRIeWRyYXRlKGRhdGFzZXQpKSB7XG4gICAgcmV0dXJuIGNyZWF0ZU5ld0RhdGFFbnRyeShkYXRhc2V0LCBkYXRhc2V0cyk7XG4gIH1cbiAgY29uc3QgcHJvZ3Jlc3NJZCA9IGdldERhdGFzZXRQcm9ncmVzc0lkKGRhdGFzZXQpO1xuICByZXR1cm4gSFlEUkFURV9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0soe1xuICAgIGFyZzogZGF0YXNldCxcbiAgICBvblByb2dyZXNzOiBwcm9ncmVzcyA9PlxuICAgICAgc2V0TG9hZGluZ1Byb2dyZXNzKHByb2dyZXNzSWQsIE1hdGgucm91bmQoKHByb2dyZXNzPy5wZXJjZW50ID8/IDApICogMTAwKSlcbiAgfSkuY2hhaW4oaHlkcmF0ZWQgPT4ge1xuICAgIGNvbnN0IHRhc2sgPSBjcmVhdGVOZXdEYXRhRW50cnkoaHlkcmF0ZWQsIGRhdGFzZXRzKTtcbiAgICByZXR1cm4gKFxuICAgICAgdGFzayB8fFxuICAgICAgRkFJTF9DUkVBVEVfREFUQVNFVF9UQVNLKCdGYWlsZWQgdG8gY3JlYXRlIGEgbmV3IGRhdGFzZXQgZHVlIHRvIGRhdGEgdmVyaWZpY2F0aW9uIGVycm9ycycpXG4gICAgKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNsZWFyTG9hZGluZ1Byb2dyZXNzKHN0YXRlOiBWaXNTdGF0ZSwgaWRzPzogc3RyaW5nW10pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGN1cnJlbnQgPSBzdGF0ZS5sb2FkaW5nUHJvZ3Jlc3MgfHwge307XG4gIGlmICghT2JqZWN0LmtleXMoY3VycmVudCkubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmICgoc3RhdGUubG9hZGluZ0luZGljYXRvclZhbHVlIHx8IDApIDw9IDApIHtcbiAgICByZXR1cm4gey4uLnN0YXRlLCBsb2FkaW5nUHJvZ3Jlc3M6IHt9fTtcbiAgfVxuICBpZiAoIWlkcz8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG5leHQgPSB7Li4uY3VycmVudH07XG4gIGlkcy5mb3JFYWNoKGlkID0+IHtcbiAgICBkZWxldGUgbmV4dFtpZF07XG4gIH0pO1xuICByZXR1cm4gey4uLnN0YXRlLCBsb2FkaW5nUHJvZ3Jlc3M6IG5leHR9O1xufVxuXG5mdW5jdGlvbiBwYXRjaERhdGFzZXRNZXRhZGF0YShkYXRhc2V0OiBEYXRhc2V0c1tzdHJpbmddLCBwYXRjaDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIHtcbiAgcmV0dXJuIGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7XG4gICAgbWV0YWRhdGE6IHtcbiAgICAgIC4uLmRhdGFzZXQubWV0YWRhdGEsXG4gICAgICAuLi5wYXRjaFxuICAgIH1cbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlZnJlc2hFeHRlcm5hbGx5SG9zdGVkVGFibGUoe1xuICBhcmc6IG1ldGFkYXRhLFxuICBvblByb2dyZXNzXG59OiB7XG4gIGFyZzoge1xuICAgIHNvdXJjZTogc3RyaW5nO1xuICAgIGZvcm1hdD86IHN0cmluZztcbiAgICBzaXplPzogbnVtYmVyO1xuICAgIGV0YWc/OiBzdHJpbmc7XG4gICAgbGFzdE1vZGlmaWVkPzogc3RyaW5nO1xuICB9O1xuICBvblByb2dyZXNzOiAocHJvZ3Jlc3M6IHtsb2FkZWQ6IG51bWJlcjsgdG90YWw/OiBudW1iZXI7IHBlcmNlbnQ6IG51bWJlcn0pID0+IHZvaWQ7XG59KSB7XG4gIC8vIEZldGNoIG9ubHkuIERvIG5vdCBtdXRhdGUgdGhlIFJlZHV4IHRhYmxlIGhlcmU6IHByb2dyZXNzIGV2ZW50cyBjb3B5IGl0LCBhbmRcbiAgLy8gdGhlIHN1Y2Nlc3MgdXBkYXRlciBhcHBsaWVzIHRoZSBzbmFwc2hvdCB0byB3aGF0ZXZlciBpbnN0YW5jZSBpcyBpbiB0aGUgc3RvcmUuXG4gIHJldHVybiBsb2FkRXh0ZXJuYWxseUhvc3RlZERhdGFzZXQoey4uLm1ldGFkYXRhLCBvblByb2dyZXNzLCBieXBhc3NDYWNoZTogdHJ1ZX0pO1xufVxuXG5jb25zdCBSRUZSRVNIX0VYVEVSTkFMTFlfSE9TVEVEX0RBVEFTRVRfVEFTSyA9IFRhc2suZnJvbVByb21pc2VXaXRoUHJvZ3Jlc3MoXG4gIHJlZnJlc2hFeHRlcm5hbGx5SG9zdGVkVGFibGUsXG4gICdSRUZSRVNIX0VYVEVSTkFMTFlfSE9TVEVEX0RBVEFTRVRfVEFTSydcbik7XG5cbi8qKlxuICogUmUtZmV0Y2ggYW4gZXh0ZXJuYWxseSBob3N0ZWQgZGF0YXNldCBhbmQgcmVwbGFjZSBpdHMgdGFibGUgY29udGVudHMgaW4gcGxhY2UuXG4gKiBMYXllcnMgYW5kIGZpbHRlcnMgYXJlIGtlcHQgd2hlbiBmaWVsZCBuYW1lcyBtYXRjaC5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWZyZXNoRGF0YXNldFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZH06IFZpc1N0YXRlQWN0aW9ucy5SZWZyZXNoRGF0YXNldFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmIChcbiAgICAhZGF0YXNldCB8fFxuICAgIGRhdGFzZXQudHlwZSAhPT0gRGF0YXNldFR5cGUuRVhURVJOQUxMWV9IT1NURUQgfHxcbiAgICB0eXBlb2YgZGF0YXNldC5tZXRhZGF0YT8uc291cmNlICE9PSAnc3RyaW5nJ1xuICApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKGRhdGFzZXQubWV0YWRhdGE/LnJlZnJlc2hTdGF0dXMgPT09ICdsb2FkaW5nJykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5leHREYXRhc2V0ID0gcGF0Y2hEYXRhc2V0TWV0YWRhdGEoZGF0YXNldCwge1xuICAgIHJlZnJlc2hTdGF0dXM6ICdsb2FkaW5nJyxcbiAgICByZWZyZXNoRXJyb3I6IHVuZGVmaW5lZCxcbiAgICByZWZyZXNoUHJvZ3Jlc3M6IHVuZGVmaW5lZFxuICB9KTtcblxuICByZXR1cm4gd2l0aFRhc2soXG4gICAge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBkYXRhc2V0czoge1xuICAgICAgICAuLi5zdGF0ZS5kYXRhc2V0cyxcbiAgICAgICAgW2RhdGFJZF06IG5leHREYXRhc2V0XG4gICAgICB9XG4gICAgfSxcbiAgICBSRUZSRVNIX0VYVEVSTkFMTFlfSE9TVEVEX0RBVEFTRVRfVEFTSyh7XG4gICAgICBhcmc6IHtcbiAgICAgICAgc291cmNlOiBuZXh0RGF0YXNldC5tZXRhZGF0YS5zb3VyY2UgYXMgc3RyaW5nLFxuICAgICAgICBmb3JtYXQ6IGdldFJlbW90ZVNvdXJjZUZvcm1hdChuZXh0RGF0YXNldC5tZXRhZGF0YSksXG4gICAgICAgIHNpemU6IHR5cGVvZiBuZXh0RGF0YXNldC5tZXRhZGF0YS5zaXplID09PSAnbnVtYmVyJyA/IG5leHREYXRhc2V0Lm1ldGFkYXRhLnNpemUgOiB1bmRlZmluZWQsXG4gICAgICAgIGV0YWc6IHR5cGVvZiBuZXh0RGF0YXNldC5tZXRhZGF0YS5ldGFnID09PSAnc3RyaW5nJyA/IG5leHREYXRhc2V0Lm1ldGFkYXRhLmV0YWcgOiB1bmRlZmluZWQsXG4gICAgICAgIGxhc3RNb2RpZmllZDpcbiAgICAgICAgICB0eXBlb2YgbmV4dERhdGFzZXQubWV0YWRhdGEubGFzdE1vZGlmaWVkID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgPyBuZXh0RGF0YXNldC5tZXRhZGF0YS5sYXN0TW9kaWZpZWRcbiAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICB9LFxuICAgICAgb25Qcm9ncmVzczogcHJvZ3Jlc3MgPT5cbiAgICAgICAgcmVmcmVzaERhdGFzZXRQcm9ncmVzcyhkYXRhSWQsIE1hdGgucm91bmQoKHByb2dyZXNzPy5wZXJjZW50ID8/IDApICogMTAwKSlcbiAgICB9KS5iaW1hcChcbiAgICAgIHJlc3VsdCA9PiByZWZyZXNoRGF0YXNldFN1Y2Nlc3MoZGF0YUlkLCByZXN1bHQpLFxuICAgICAgKGVycm9yOiBFcnJvcikgPT4gcmVmcmVzaERhdGFzZXRFcnJvcihkYXRhSWQsIGVycm9yKVxuICAgIClcbiAgKTtcbn1cblxuLyoqXG4gKiBSZWNvcmQgZG93bmxvYWQgcHJvZ3Jlc3MgZm9yIGFuIGluLWZsaWdodCByZW1vdGUgZGF0YXNldCByZWZyZXNoLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZnJlc2hEYXRhc2V0UHJvZ3Jlc3NVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIHBlcmNlbnR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVmcmVzaERhdGFzZXRQcm9ncmVzc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCB8fCBkYXRhc2V0Lm1ldGFkYXRhPy5yZWZyZXNoU3RhdHVzICE9PSAnbG9hZGluZycpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgbmV4dFBlcmNlbnQgPSBOdW1iZXIuaXNGaW5pdGUocGVyY2VudClcbiAgICA/IE1hdGgubWF4KDAsIE1hdGgubWluKDEwMCwgTWF0aC5yb3VuZChwZXJjZW50KSkpXG4gICAgOiAwO1xuICBpZiAoZGF0YXNldC5tZXRhZGF0YT8ucmVmcmVzaFByb2dyZXNzID09PSBuZXh0UGVyY2VudCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiB7XG4gICAgICAuLi5zdGF0ZS5kYXRhc2V0cyxcbiAgICAgIFtkYXRhSWRdOiBwYXRjaERhdGFzZXRNZXRhZGF0YShkYXRhc2V0LCB7cmVmcmVzaFByb2dyZXNzOiBuZXh0UGVyY2VudH0pXG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBmaWVsZE5hbWVzRXF1YWwoY3VycmVudDoge25hbWU6IHN0cmluZ31bXSwgaW5jb21pbmc/OiB7bmFtZTogc3RyaW5nfVtdIHwgbnVsbCk6IGJvb2xlYW4ge1xuICBpZiAoIWluY29taW5nPy5sZW5ndGgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoY3VycmVudC5sZW5ndGggIT09IGluY29taW5nLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gY3VycmVudC5ldmVyeSgoZmllbGQsIGkpID0+IGZpZWxkLm5hbWUgPT09IGluY29taW5nW2ldLm5hbWUpO1xufVxuXG4vKipcbiAqIFdoZW4gYSByZW1vdGUgc25hcHNob3QgY2hhbmdlcyBjb2x1bW4gbmFtZXMsIG9sZCBsYXllciBmaWVsZElkeCAvIGZpbHRlciBuYW1lc1xuICogY2FuIHBvaW50IGF0IHRoZSB3cm9uZyBjb2x1bW4uIFJlLWJpbmQgYnkgbmFtZSBhbmQgZHJvcCBjb25maWdzIHRoYXQgbm8gbG9uZ2VyIGZpdC5cbiAqL1xuZnVuY3Rpb24gcmViaW5kTGF5ZXJzQW5kRmlsdGVyc0FmdGVyU2NoZW1hQ2hhbmdlKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGRhdGFJZDogc3RyaW5nLFxuICBkYXRhc2V0czogVmlzU3RhdGVbJ2RhdGFzZXRzJ11cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IGRhdGFzZXRzW2RhdGFJZF07XG4gIGNvbnN0IG5leHRMYXllcnM6IExheWVyW10gPSBbXTtcbiAgY29uc3QgZHJvcHBlZExheWVyczogTGF5ZXJbXSA9IFtdO1xuXG4gIHN0YXRlLmxheWVycy5mb3JFYWNoKGxheWVyID0+IHtcbiAgICBpZiAobGF5ZXIuY29uZmlnLmRhdGFJZCAhPT0gZGF0YUlkKSB7XG4gICAgICBuZXh0TGF5ZXJzLnB1c2gobGF5ZXIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByZWJvdW5kID0gdmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEoZGF0YXNldCwgc3RhdGUubGF5ZXJDbGFzc2VzLCBsYXllciwgc3RhdGUuc2NoZW1hKTtcbiAgICBpZiAocmVib3VuZD8uaXNWYWxpZFRvU2F2ZSgpKSB7XG4gICAgICBuZXh0TGF5ZXJzLnB1c2gocmVib3VuZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRyb3BwZWRMYXllcnMucHVzaChsYXllcik7XG4gICAgfVxuICB9KTtcblxuICBsZXQgbmV4dExheWVyT3JkZXIgPSBzdGF0ZS5sYXllck9yZGVyO1xuICBsZXQgbmV4dFNwbGl0TWFwcyA9IHN0YXRlLnNwbGl0TWFwcztcbiAgZHJvcHBlZExheWVycy5mb3JFYWNoKGxheWVyID0+IHtcbiAgICBuZXh0TGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihuZXh0TGF5ZXJPcmRlciwgbGF5ZXIuaWQpO1xuICAgIG5leHRTcGxpdE1hcHMgPSByZW1vdmVMYXllckZyb21TcGxpdE1hcHMobmV4dFNwbGl0TWFwcywgbGF5ZXIpO1xuICB9KTtcblxuICBjb25zdCBuZXh0TGF5ZXJEYXRhID0gbmV4dExheWVycy5tYXAobGF5ZXIgPT4ge1xuICAgIGNvbnN0IG9sZElkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgob2xkTGF5ZXIgPT4gb2xkTGF5ZXIuaWQgPT09IGxheWVyLmlkKTtcbiAgICByZXR1cm4gb2xkSWR4ID49IDAgPyBzdGF0ZS5sYXllckRhdGFbb2xkSWR4XSA6IHt9O1xuICB9KTtcblxuICBjb25zdCBmaWx0ZXJzRm9yRGF0YXNldCA9IHN0YXRlLmZpbHRlcnMuZmlsdGVyKGZpbHRlciA9PiB0b0FycmF5KGZpbHRlci5kYXRhSWQpLmluY2x1ZGVzKGRhdGFJZCkpO1xuICBjb25zdCBvdGhlckZpbHRlcnMgPSBzdGF0ZS5maWx0ZXJzLmZpbHRlcihmaWx0ZXIgPT4gIXRvQXJyYXkoZmlsdGVyLmRhdGFJZCkuaW5jbHVkZXMoZGF0YUlkKSk7XG5cbiAgY29uc3Qge3ZhbGlkYXRlZCwgdXBkYXRlZERhdGFzZXRzfSA9IHZhbGlkYXRlRmlsdGVyc1VwZGF0ZURhdGFzZXRzKFxuICAgIHsuLi5zdGF0ZSwgZGF0YXNldHMsIGxheWVyczogbmV4dExheWVyc30sXG4gICAgZmlsdGVyc0ZvckRhdGFzZXRcbiAgKTtcblxuICBjb25zdCBuZXh0RmlsdGVycyA9IFsuLi5vdGhlckZpbHRlcnMsIC4uLnZhbGlkYXRlZF07XG4gIGNvbnN0IGZpbHRlcmVkRGF0YXNldHMgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKFxuICAgIFtkYXRhSWRdLFxuICAgIHVwZGF0ZWREYXRhc2V0cyxcbiAgICBuZXh0RmlsdGVycyxcbiAgICBuZXh0TGF5ZXJzXG4gICk7XG5cbiAgbGV0IG5leHRTdGF0ZTogVmlzU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGF0YXNldHM6IGZpbHRlcmVkRGF0YXNldHMsXG4gICAgbGF5ZXJzOiBuZXh0TGF5ZXJzLFxuICAgIGxheWVyRGF0YTogbmV4dExheWVyRGF0YSxcbiAgICBsYXllck9yZGVyOiBuZXh0TGF5ZXJPcmRlcixcbiAgICBzcGxpdE1hcHM6IG5leHRTcGxpdE1hcHMsXG4gICAgZmlsdGVyczogbmV4dEZpbHRlcnNcbiAgfTtcbiAgbmV4dFN0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG5leHRTdGF0ZSwgW2RhdGFJZF0sIHVuZGVmaW5lZCk7XG4gIHJldHVybiB1cGRhdGVBbmltYXRpb25Eb21haW4obmV4dFN0YXRlKTtcbn1cblxuLyoqXG4gKiBBcHBseSBhIGZpbmlzaGVkIHJlbW90ZSByZWZyZXNoOiBrZWVwIGxheWVycywgcmUtcnVuIGZpbHRlcnMgYW5kIGxheWVyIGRhdGEuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVmcmVzaERhdGFzZXRTdWNjZXNzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCByZXN1bHR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVmcmVzaERhdGFzZXRTdWNjZXNzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbWV0YWRhdGFQYXRjaCA9IHtcbiAgICByZWZyZXNoU3RhdHVzOiAnaWRsZScsXG4gICAgcmVmcmVzaEVycm9yOiB1bmRlZmluZWQsXG4gICAgcmVmcmVzaFByb2dyZXNzOiB1bmRlZmluZWQsXG4gICAgbGFzdEZldGNoZWRBdDogRGF0ZS5ub3coKSxcbiAgICAvLyBBbHdheXMgd3JpdGUgdmFsaWRhdG9ycy4gQSAyMDAgdGhhdCBvbWl0cyB0aGVtIG11c3Qgbm90IGtlZXAgdGhlIHByZXZpb3VzXG4gICAgLy8gRVRhZyBvciBhIGxhdGVyIDMwNCBjYW4gc2tpcCBhIGJvZHkgd2Ugbm8gbG9uZ2VyIGhhdmUuXG4gICAgZXRhZzogcmVzdWx0LmV0YWcsXG4gICAgbGFzdE1vZGlmaWVkOiByZXN1bHQubGFzdE1vZGlmaWVkLFxuICAgIC4uLih0eXBlb2YgcmVzdWx0LnNpemUgPT09ICdudW1iZXInID8ge3NpemU6IHJlc3VsdC5zaXplfSA6IHt9KVxuICB9O1xuXG4gIGNvbnN0IHNjaGVtYVVuY2hhbmdlZCA9IGZpZWxkTmFtZXNFcXVhbChkYXRhc2V0LmZpZWxkcywgcmVzdWx0LmRhdGE/LmZpZWxkcyk7XG5cbiAgLy8gQXBwbHkgdGhlIHNuYXBzaG90IHRvIHRoZSB0YWJsZSBjdXJyZW50bHkgaW4gdGhlIHN0b3JlLiBQcm9ncmVzcyBtYXkgaGF2ZVxuICAvLyBjb3BpZWQgaXQgb2ZmIHRoZSBvYmplY3QgdGhhdCBzdGFydGVkIHRoZSBmZXRjaDsgdGhlIHRhc2sgbmV2ZXIgbXV0YXRlcyBpdC5cbiAgaWYgKCFyZXN1bHQubm90TW9kaWZpZWQgJiYgcmVzdWx0LmRhdGEpIHtcbiAgICAvLyBLZXBsZXJUYWJsZS51cGRhdGUgaXMgYXN5bmMgc28gRHVja0RCIGNhbiBhd2FpdCBBcnJvdyBjb252ZXJzaW9uLiBUaGVcbiAgICAvLyBDU1YvR2VvSlNPTiBwYXRoIChhbmQgS2VwbGVyVGFibGUuaW1wb3J0RGF0YSkgcnVuIHN5bmNocm9ub3VzbHkgYmVmb3JlXG4gICAgLy8gdGhlIGZpcnN0IGF3YWl0LCBzbyB0aGUgc3RvcmUgdGFibGUgaXMgdXBkYXRlZCBiZWZvcmUgd2UgY29weSBpdCBiZWxvdy5cbiAgICB2b2lkIGRhdGFzZXQudXBkYXRlKHJlc3VsdC5kYXRhKTtcbiAgfVxuXG4gIGNvbnN0IHJlZnJlc2hlZCA9IHBhdGNoRGF0YXNldE1ldGFkYXRhKGRhdGFzZXQsIG1ldGFkYXRhUGF0Y2gpO1xuICBjb25zdCBkYXRhc2V0cyA9IHtcbiAgICAuLi5zdGF0ZS5kYXRhc2V0cyxcbiAgICBbZGF0YUlkXTogcmVmcmVzaGVkXG4gIH07XG5cbiAgaWYgKHJlc3VsdC5ub3RNb2RpZmllZCB8fCAhcmVzdWx0LmRhdGEpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBkYXRhc2V0c1xuICAgIH07XG4gIH1cblxuICBpZiAoIXNjaGVtYVVuY2hhbmdlZCkge1xuICAgIHJldHVybiByZWJpbmRMYXllcnNBbmRGaWx0ZXJzQWZ0ZXJTY2hlbWFDaGFuZ2Uoc3RhdGUsIGRhdGFJZCwgZGF0YXNldHMpO1xuICB9XG5cbiAgcmV0dXJuIHJlYXBwbHlGaWx0ZXJzQW5kTGF5ZXJEYXRhKHsuLi5zdGF0ZSwgZGF0YXNldHN9LCBkYXRhSWQpO1xufVxuXG5mdW5jdGlvbiByZWFwcGx5RmlsdGVyc0FuZExheWVyRGF0YShzdGF0ZTogVmlzU3RhdGUsIGRhdGFJZDogc3RyaW5nKTogVmlzU3RhdGUge1xuICBjb25zdCBmaWx0ZXJlZERhdGFzZXRzID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhcbiAgICBbZGF0YUlkXSxcbiAgICBzdGF0ZS5kYXRhc2V0cyxcbiAgICBzdGF0ZS5maWx0ZXJzLFxuICAgIHN0YXRlLmxheWVyc1xuICApO1xuICBsZXQgbmV4dFN0YXRlOiBWaXNTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czogZmlsdGVyZWREYXRhc2V0c1xuICB9O1xuICBuZXh0U3RhdGUgPSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobmV4dFN0YXRlLCBbZGF0YUlkXSwgdW5kZWZpbmVkKTtcbiAgcmV0dXJuIHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXh0U3RhdGUpO1xufVxuXG5mdW5jdGlvbiBpc0RhdGFzZXRSb3dMaXN0KFxuICByb3dzOiBWaXNTdGF0ZUFjdGlvbnMuRGF0YXNldFJvdyB8IFZpc1N0YXRlQWN0aW9ucy5EYXRhc2V0Um93W11cbik6IHJvd3MgaXMgVmlzU3RhdGVBY3Rpb25zLkRhdGFzZXRSb3dbXSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShyb3dzKSB8fCAhcm93cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShyb3dzKTtcbiAgfVxuICAvLyBBIHNpbmdsZSBjb2x1bW4tb3JkZXJlZCByb3cgaXMgYW4gYXJyYXkgb2YgcHJpbWl0aXZlczsgYSBsaXN0IG9mIHJvd3MgaXNcbiAgLy8gYW4gYXJyYXkgb2YgYXJyYXlzIG9yIGFuIGFycmF5IG9mIGZpZWxkLW5hbWUgcmVjb3Jkcy5cbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkocm93c1swXSkgfHwgaXNQbGFpbk9iamVjdChyb3dzWzBdKTtcbn1cblxuZnVuY3Rpb24gdG9BcnJheVJvdyhyb3c6IFZpc1N0YXRlQWN0aW9ucy5EYXRhc2V0Um93LCBmaWVsZHM6IEZpZWxkW10pOiBhbnlbXSB8IG51bGwge1xuICBpZiAoQXJyYXkuaXNBcnJheShyb3cpKSB7XG4gICAgcmV0dXJuIHJvdy5sZW5ndGggPT09IGZpZWxkcy5sZW5ndGggPyByb3cgOiBudWxsO1xuICB9XG4gIGlmIChpc1BsYWluT2JqZWN0KHJvdykpIHtcbiAgICBjb25zdCByZWNvcmQgPSByb3cgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgcmV0dXJuIGZpZWxkcy5tYXAoZmllbGQgPT5cbiAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZWNvcmQsIGZpZWxkLm5hbWUpID8gcmVjb3JkW2ZpZWxkLm5hbWVdIDogbnVsbFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZURhdGFzZXRSb3dzKFxuICByb3dzOiBWaXNTdGF0ZUFjdGlvbnMuRGF0YXNldFJvdyB8IFZpc1N0YXRlQWN0aW9ucy5EYXRhc2V0Um93W10sXG4gIGZpZWxkczogRmllbGRbXVxuKTogYW55W11bXSB8IG51bGwge1xuICBpZiAoIWZpZWxkcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBsaXN0ID0gaXNEYXRhc2V0Um93TGlzdChyb3dzKSA/IHJvd3MgOiBbcm93c107XG4gIGlmICghbGlzdC5sZW5ndGgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBub3JtYWxpemVkOiBhbnlbXVtdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGFycmF5Um93ID0gdG9BcnJheVJvdyhsaXN0W2ldLCBmaWVsZHMpO1xuICAgIGlmICghYXJyYXlSb3cpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBub3JtYWxpemVkLnB1c2goYXJyYXlSb3cpO1xuICB9XG4gIHJldHVybiBub3JtYWxpemVkO1xufVxuXG4vKipcbiAqIEFwcGVuZCBvciB1cHNlcnQgcm93cyBvbiBhbiBleGlzdGluZyBpbi1tZW1vcnkgcm93IGRhdGFzZXQuIEtlZXBzIGxheWVycyBhbmQgcmUtcnVucyBmaWx0ZXJzLlxuICogQXJyb3cvRHVja0RCIHRhYmxlcyB3YXJuIGFuZCBhcmUgbGVmdCB1bmNoYW5nZWQgKElOU0VSVCAvIGNvbmNhdCBub3QgaW1wbGVtZW50ZWQpLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFRvRGF0YXNldFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgcm93cywgb3B0aW9uc306IFZpc1N0YXRlQWN0aW9ucy5BZGRUb0RhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplRGF0YXNldFJvd3Mocm93cywgZGF0YXNldC5maWVsZHMpO1xuICBpZiAoIW5vcm1hbGl6ZWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBhcHBsaWVkID0gb3B0aW9ucz8udXBzZXJ0QnlcbiAgICA/IGRhdGFzZXQudXBzZXJ0Um93cyhub3JtYWxpemVkLCBvcHRpb25zLnVwc2VydEJ5KVxuICAgIDogZGF0YXNldC5hcHBlbmRSb3dzKG5vcm1hbGl6ZWQpO1xuICBpZiAoIWFwcGxpZWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBkYXRhc2V0cyA9IHtcbiAgICAuLi5zdGF0ZS5kYXRhc2V0cyxcbiAgICBbZGF0YUlkXTogY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHt9KVxuICB9O1xuICByZXR1cm4gcmVhcHBseUZpbHRlcnNBbmRMYXllckRhdGEoey4uLnN0YXRlLCBkYXRhc2V0c30sIGRhdGFJZCk7XG59XG5cbi8qKlxuICogRGVsZXRlIHJvd3MgYnkgaW5kZXggb3IgYnkgZmllbGQgdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgaW4tbWVtb3J5IHJvdyBkYXRhc2V0LlxuICogS2VlcHMgbGF5ZXJzLiBBcnJvdy9EdWNrREIgdGFibGVzIHdhcm4gYW5kIGFyZSBsZWZ0IHVuY2hhbmdlZC5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVGcm9tRGF0YXNldFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgcm93SW5kZXhlcywgYnlGaWVsZH06IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVGcm9tRGF0YXNldFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ZXMgPSBieUZpZWxkXG4gICAgPyBkYXRhc2V0LmZpbmRSb3dJbmRleGVzQnlGaWVsZFZhbHVlcyhieUZpZWxkLmZpZWxkLCB0b0FycmF5KGJ5RmllbGQudmFsdWVzKSlcbiAgICA6IHRvQXJyYXkocm93SW5kZXhlcyA/PyBbXSk7XG4gIGlmICghaW5kZXhlcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKCFkYXRhc2V0LnJlbW92ZVJvd3MoaW5kZXhlcykpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBkYXRhc2V0cyA9IHtcbiAgICAuLi5zdGF0ZS5kYXRhc2V0cyxcbiAgICBbZGF0YUlkXTogY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHt9KVxuICB9O1xuICByZXR1cm4gcmVhcHBseUZpbHRlcnNBbmRMYXllckRhdGEoey4uLnN0YXRlLCBkYXRhc2V0c30sIGRhdGFJZCk7XG59XG5cbi8qKlxuICogUmVjb3JkIGEgZmFpbGVkIHJlbW90ZSBkYXRhc2V0IHJlZnJlc2ggd2l0aG91dCBkcm9wcGluZyBleGlzdGluZyByb3dzLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZnJlc2hEYXRhc2V0RXJyb3JVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGVycm9yfTogVmlzU3RhdGVBY3Rpb25zLlJlZnJlc2hEYXRhc2V0RXJyb3JVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXh0U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGF0YXNldHM6IHtcbiAgICAgIC4uLnN0YXRlLmRhdGFzZXRzLFxuICAgICAgW2RhdGFJZF06IHBhdGNoRGF0YXNldE1ldGFkYXRhKGRhdGFzZXQsIHtcbiAgICAgICAgcmVmcmVzaFN0YXR1czogJ2Vycm9yJyxcbiAgICAgICAgcmVmcmVzaEVycm9yOiBlcnJvcj8ubWVzc2FnZSB8fCBTdHJpbmcoZXJyb3IpLFxuICAgICAgICByZWZyZXNoUHJvZ3Jlc3M6IHVuZGVmaW5lZFxuICAgICAgfSlcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuLyoqXG4gKiBBZGQgbmV3IGRhdGFzZXQgdG8gYHZpc1N0YXRlYCwgd2l0aCBvcHRpb24gdG8gbG9hZCBhIG1hcCBjb25maWcgYWxvbmcgd2l0aCB0aGUgZGF0YXNldHNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5leHBvcnQgY29uc3QgdXBkYXRlVmlzRGF0YVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlVmlzRGF0YVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgLy8gZGF0YXNldHMgY2FuIGJlIGEgc2luZ2xlIGRhdGEgZW50cmllcyBvciBhbiBhcnJheSBvZiBtdWx0aXBsZSBkYXRhIGVudHJpZXNcbiAgY29uc3Qge2NvbmZpZywgb3B0aW9uc30gPSBhY3Rpb247XG5cbiAgLy8gYXBwbHkgY29uZmlnIGlmIHBhc3NlZCBmcm9tIGFjdGlvblxuICAvLyBUT0RPOiB3ZSBkb24ndCBoYW5kbGUgYXN5bmMgbWVyZ2VycyBoZXJlIHlldFxuICBsZXQgdXBkYXRlZFN0YXRlID0gY29uZmlnXG4gICAgPyByZWNlaXZlTWFwQ29uZmlnVXBkYXRlcihzdGF0ZSwge1xuICAgICAgICBwYXlsb2FkOiB7Y29uZmlnLCBvcHRpb25zfVxuICAgICAgfSlcbiAgICA6IHN0YXRlO1xuXG4gIGNvbnN0IGRhdGFzZXRzID0gdG9BcnJheShhY3Rpb24uZGF0YXNldHMpO1xuICBpZiAoIWRhdGFzZXRzLmxlbmd0aCkge1xuICAgIHJldHVybiB1cGRhdGVkU3RhdGU7XG4gIH1cblxuICBjb25zdCBjcmVhdGVEYXRhc2V0VGFza3M6IFRhc2tEZXNjcmlwdG9yW10gPSBbXTtcbiAgY29uc3Qgbm90aWZpY2F0aW9uVGFza3M6IFRhc2tEZXNjcmlwdG9yW10gPSBbXTtcbiAgY29uc3QgaHlkcmF0ZVByb2dyZXNzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge307XG5cbiAgZGF0YXNldHMuZm9yRWFjaCgoe2luZm8gPSB7fSwgLi4ucmVzdH0sIGRhdGFzZXRJbmRleCkgPT4ge1xuICAgIGNvbnN0IHByb3RvID0ge2luZm8sIC4uLnJlc3R9O1xuICAgIGlmIChuZWVkc0V4dGVybmFsbHlIb3N0ZWRIeWRyYXRlKHByb3RvKSkge1xuICAgICAgaHlkcmF0ZVByb2dyZXNzW2dldERhdGFzZXRQcm9ncmVzc0lkKHByb3RvLCBkYXRhc2V0SW5kZXgpXSA9IDA7XG4gICAgfVxuICAgIGNvbnN0IHRhc2sgPSBjcmVhdGVOZXdEYXRhRW50cnlUYXNrKHByb3RvLCBzdGF0ZS5kYXRhc2V0cyk7XG4gICAgaWYgKHRhc2spIHtcbiAgICAgIGNyZWF0ZURhdGFzZXRUYXNrcy5wdXNoKHRhc2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBub3RpZmljYXRpb25UYXNrcy5wdXNoKFxuICAgICAgICBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OKCkubWFwKCgpID0+XG4gICAgICAgICAgYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBkYXRhc2V0IGR1ZSB0byBkYXRhIHZlcmlmaWNhdGlvbiBlcnJvcnNgLFxuICAgICAgICAgICAgICBpZDogYGRhdGFzZXQtZmFpbGVkLSR7ZGF0YXNldEluZGV4fWBcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgcHJvZ3Jlc3NJZHMgPSBPYmplY3Qua2V5cyhoeWRyYXRlUHJvZ3Jlc3MpO1xuICBjb25zdCBkYXRhc2V0c0FsbFNldHRsZWRUYXNrID0gY3JlYXRlRGF0YXNldFRhc2tzLmxlbmd0aFxuICAgID8gVGFzay5hbGxTZXR0bGVkKGNyZWF0ZURhdGFzZXRUYXNrcykubWFwKHJlc3VsdHMgPT5cbiAgICAgICAgY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3Moe3Jlc3VsdHMsIGFkZFRvTWFwT3B0aW9uczogb3B0aW9ucywgcHJvZ3Jlc3NJZHN9KVxuICAgICAgKVxuICAgIDogbnVsbDtcblxuICBpZiAoZGF0YXNldHNBbGxTZXR0bGVkVGFzaykge1xuICAgIHVwZGF0ZWRTdGF0ZSA9IHNldExvYWRpbmdJbmRpY2F0b3JVcGRhdGVyKHVwZGF0ZWRTdGF0ZSwgcGF5bG9hZF8oe2NoYW5nZTogMSwgdHlwZTogJyd9KSk7XG4gICAgaWYgKHByb2dyZXNzSWRzLmxlbmd0aCkge1xuICAgICAgdXBkYXRlZFN0YXRlID0ge1xuICAgICAgICAuLi51cGRhdGVkU3RhdGUsXG4gICAgICAgIGxvYWRpbmdQcm9ncmVzczoge1xuICAgICAgICAgIC4uLnVwZGF0ZWRTdGF0ZS5sb2FkaW5nUHJvZ3Jlc3MsXG4gICAgICAgICAgLi4uaHlkcmF0ZVByb2dyZXNzXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHdpdGhUYXNrKHVwZGF0ZWRTdGF0ZSwgW1xuICAgIC4uLihkYXRhc2V0c0FsbFNldHRsZWRUYXNrID8gW2RhdGFzZXRzQWxsU2V0dGxlZFRhc2tdIDogW10pLFxuICAgIC4uLm5vdGlmaWNhdGlvblRhc2tzXG4gIF0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFBheWxvYWRBY3Rpb248Q3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3NQYXlsb2FkPlxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7cmVzdWx0cywgYWRkVG9NYXBPcHRpb25zLCBwcm9ncmVzc0lkc30gPSBhY3Rpb24ucGF5bG9hZDtcbiAgY29uc3Qgbm90aWZpY2F0aW9uVGFza3M6IFRhc2tEZXNjcmlwdG9yW10gPSBbXTtcblxuICBjb25zdCBuZXdEYXRhRW50cmllcyA9IHJlc3VsdHMucmVkdWNlKChhY2N1LCByZXN1bHQsIGlkeCkgPT4ge1xuICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSAnZnVsZmlsbGVkJykge1xuICAgICAgY29uc3QgZGF0YXNldCA9IHJlc3VsdC52YWx1ZTtcbiAgICAgIHJldHVybiB7Li4uYWNjdSwgW2RhdGFzZXQuaWRdOiBkYXRhc2V0fTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gc2hvdyBlcnJvciBub3RpZmljYXRpb24gb24gVUlcbiAgICAgIG5vdGlmaWNhdGlvblRhc2tzLnB1c2goXG4gICAgICAgIEFDVElPTl9UQVNLKCkubWFwKCgpID0+XG4gICAgICAgICAgYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgICBtZXNzYWdlOiBgRGF0YXNldCBlcnJvcjogRmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBkYXRhc2V0OlxuICAgICAgICAgICAgICAke3Jlc3VsdC5yZWFzb24gfHwgKHJlc3VsdCBhcyBhbnkpLnZhbHVlfWAsXG4gICAgICAgICAgICAgIGlkOiBgZGF0YXNldC1jcmVhdGUtZmFpbGVkLSR7aWR4fWBcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApO1xuICAgICAgcmV0dXJuIGFjY3U7XG4gICAgfVxuICB9LCB7fSBhcyBEYXRhc2V0cyk7XG4gIC8vIHNhdmUgbmV3IGRhdGFzZXQgZW50cnkgdG8gc3RhdGVcbiAgY29uc3QgbWVyZ2VkU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGF0YXNldHM6IG1lcmdlRGF0YXNldHNCeU9yZGVyKHN0YXRlLCBuZXdEYXRhRW50cmllcylcbiAgfTtcblxuICAvLyBtZXJnZSBzdGF0ZSB3aXRoIGNvbmZpZyB0byBiZSBtZXJnZWRcbiAgY29uc3QgbGF5ZXJNZXJnZXJzID0gc3RhdGUubWVyZ2Vycy5maWx0ZXIobSA9PiBtLndhaXRGb3JMYXllckRhdGEpO1xuICBjb25zdCBkYXRhc2V0TWVyZ2VycyA9IHN0YXRlLm1lcmdlcnMuZmlsdGVyKG0gPT4gIWxheWVyTWVyZ2Vycy5pbmNsdWRlcyhtKSk7XG5cbiAgY29uc3QgbmV3RGF0YUlkcyA9IE9iamVjdC5rZXlzKG5ld0RhdGFFbnRyaWVzKTtcbiAgY29uc3QgcG9zdE1lcmdlclBheWxvYWQgPSB7XG4gICAgbmV3RGF0YUlkcyxcbiAgICBvcHRpb25zOiBhZGRUb01hcE9wdGlvbnMsXG4gICAgbGF5ZXJNZXJnZXJzXG4gIH07XG5cbiAgY29uc3QgdXBkYXRlZFN0YXRlID0gYXBwbHlNZXJnZXJzVXBkYXRlcihtZXJnZWRTdGF0ZSwge1xuICAgIG1lcmdlcnM6IGRhdGFzZXRNZXJnZXJzLFxuICAgIHBvc3RNZXJnZXJQYXlsb2FkXG4gIH0pO1xuXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBjbGVhckxvYWRpbmdQcm9ncmVzcyhcbiAgICAgIHNldExvYWRpbmdJbmRpY2F0b3JVcGRhdGVyKHVwZGF0ZWRTdGF0ZSwgcGF5bG9hZF8oe2NoYW5nZTogLTF9KSksXG4gICAgICBwcm9ncmVzc0lkc1xuICAgICksXG4gICAgbm90aWZpY2F0aW9uVGFza3NcbiAgKTtcbn07XG5cbi8qKlxuICogQWRkIG5ldyBkYXRhc2V0IHRvIGB2aXNTdGF0ZWAsIHdpdGggb3B0aW9uIHRvIGxvYWQgYSBtYXAgY29uZmlnIGFsb25nIHdpdGggdGhlIGRhdGFzZXRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBseU1lcmdlcnNVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjoge1xuICAgIG1lcmdlcnM6IE1lcmdlcjxhbnk+W107XG4gICAgcG9zdE1lcmdlclBheWxvYWQ6IFBvc3RNZXJnZXJQYXlsb2FkO1xuICB9XG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHttZXJnZXJzLCBwb3N0TWVyZ2VyUGF5bG9hZH0gPSBhY3Rpb247XG5cbiAgLy8gbWVyZ2Ugc3RhdGUgd2l0aCBjb25maWcgdG8gYmUgbWVyZ2VkXG4gIGNvbnN0IG1lcmdlU3RhdGVSZXN1bHQgPSBtZXJnZVN0YXRlRnJvbU1lcmdlcnMoXG4gICAgc3RhdGUsXG4gICAge1xuICAgICAgLi4uSU5JVElBTF9WSVNfU1RBVEUsXG4gICAgICAuLi5zdGF0ZS5pbml0aWFsU3RhdGVcbiAgICB9LFxuICAgIG1lcmdlcnMsXG4gICAgLy8gbmV3RGF0YUlkcyxcbiAgICBwb3N0TWVyZ2VyUGF5bG9hZFxuICApO1xuXG4gIC8vIGlmIGFsbCBtZXJnZWQsIGtpY2t1cCBwb3N0IG1lcmdlIHByb2Nlc3NcbiAgLy8gaWYgbm90IHdhaXRcbiAgcmV0dXJuIG1lcmdlU3RhdGVSZXN1bHQuYWxsTWVyZ2VkXG4gICAgPyBwb3N0TWVyZ2VVcGRhdGVyKG1lcmdlU3RhdGVSZXN1bHQubWVyZ2VkU3RhdGUsIHBvc3RNZXJnZXJQYXlsb2FkKVxuICAgIDogbWVyZ2VTdGF0ZVJlc3VsdC5tZXJnZWRTdGF0ZTtcbn1cblxuLyoqIFJlYWRzIGBvcHRpb25zLmxheWVyVmlzQ29uZmlnYCBmcm9tIGFkZC1kYXRhLXRvLW1hcCAoc2VlIGBBZGREYXRhVG9NYXBPcHRpb25zYCkuICovXG5mdW5jdGlvbiBsYXllclZpc0NvbmZpZ0Zyb21BZGREYXRhT3B0aW9ucyhcbiAgb3B0aW9uczogUG9zdE1lcmdlclBheWxvYWRbJ29wdGlvbnMnXSB8IHVuZGVmaW5lZFxuKTogUGFydGlhbDxMYXllclZpc0NvbmZpZz4gfCB1bmRlZmluZWQge1xuICBpZiAoIW9wdGlvbnMgfHwgISgnbGF5ZXJWaXNDb25maWcnIGluIG9wdGlvbnMpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBwYXRjaCA9IChvcHRpb25zIGFzIHtsYXllclZpc0NvbmZpZz86IHVua25vd259KS5sYXllclZpc0NvbmZpZztcbiAgaWYgKHBhdGNoID09IG51bGwgfHwgdHlwZW9mIHBhdGNoICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHBhdGNoKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIHBhdGNoIGFzIFBhcnRpYWw8TGF5ZXJWaXNDb25maWc+O1xufVxuXG4vKipcbiAqIFBvbHlnb24gZmlsdGVycyBmb3IgdGhlc2UgbGF5ZXJzIHVzZSBjZW50cm9pZHMgLyBkYXRhVG9GZWF0dXJlIGZyb21cbiAqIGNhbGN1bGF0ZUxheWVyRGF0YS4gT3RoZXIgdHlwZXMgKGxhdC9sbmcgcG9pbnRzLCBIMywgYXJjcykgY2FuIGZpbHRlclxuICogZnJvbSBjb2x1bW5zIG9uIHRoZSBmaXJzdCBwYXNzIGFuZCBtdXN0IG5vdCBiZSByZWNhbGN1bGF0ZWQgaGVyZS5cbiAqL1xuZnVuY3Rpb24gcG9seWdvbkZpbHRlckRlcGVuZHNPbkxheWVyTWV0YShsYXllcjogTGF5ZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIGxheWVyLnR5cGUgPT09IExBWUVSX1RZUEVTLmdlb2pzb24gfHwgbGF5ZXIuY29uZmlnPy5jb2x1bW5Nb2RlID09PSAnZ2VvanNvbic7XG59XG5cbi8qKlxuICogQWRkIG5ldyBkYXRhc2V0IHRvIGB2aXNTdGF0ZWAsIHdpdGggb3B0aW9uIHRvIGxvYWQgYSBtYXAgY29uZmlnIGFsb25nIHdpdGggdGhlIGRhdGFzZXRzXG4gKi9cbmZ1bmN0aW9uIHBvc3RNZXJnZVVwZGF0ZXIobWVyZ2VkU3RhdGU6IFZpc1N0YXRlLCBwb3N0TWVyZ2VyUGF5bG9hZDogUG9zdE1lcmdlclBheWxvYWQpOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtuZXdEYXRhSWRzLCBvcHRpb25zLCBsYXllck1lcmdlcnN9ID0gcG9zdE1lcmdlclBheWxvYWQ7XG4gIGNvbnN0IG5ld0ZpbHRlcnMgPSBtZXJnZWRTdGF0ZS5maWx0ZXJzLmZpbHRlcihmID0+XG4gICAgZi5kYXRhSWQuZmluZChmRGF0YUlkID0+IG5ld0RhdGFJZHMuaW5jbHVkZXMoZkRhdGFJZCkpXG4gICk7XG4gIGNvbnN0IGRhdGFzZXRGaWx0ZXJlZDogc3RyaW5nW10gPSB1bmlxKFxuICAgIG5ld0ZpbHRlcnMucmVkdWNlKChhY2N1LCBmKSA9PiBbLi4uYWNjdSwgLi4uZi5kYXRhSWRdLCBbXSBhcyBzdHJpbmdbXSlcbiAgKTtcbiAgY29uc3QgZGF0YUVtcHR5ID0gbmV3RGF0YUlkcy5sZW5ndGggPCAxO1xuXG4gIGxldCBuZXdMYXllcnMgPSAhZGF0YUVtcHR5XG4gICAgPyBtZXJnZWRTdGF0ZS5sYXllcnMuZmlsdGVyKGwgPT4gbC5jb25maWcuZGF0YUlkICYmIG5ld0RhdGFJZHMuaW5jbHVkZXMobC5jb25maWcuZGF0YUlkKSlcbiAgICA6IFtdO1xuXG4gIGNvbnN0IG5ld0RhdGFFbnRyaWVzID0gbmV3RGF0YUlkcy5yZWR1Y2UoXG4gICAgKGFjY3UsIGlkKSA9PiAoe1xuICAgICAgLi4uYWNjdSxcbiAgICAgIFtpZF06IG1lcmdlZFN0YXRlLmRhdGFzZXRzW2lkXVxuICAgIH0pLFxuICAgIHt9XG4gICk7XG5cbiAgaWYgKCFuZXdMYXllcnMubGVuZ3RoICYmIChvcHRpb25zIHx8IHt9KS5hdXRvQ3JlYXRlTGF5ZXJzICE9PSBmYWxzZSkge1xuICAgIC8vIG5vIGxheWVyIG1lcmdlZCwgZmluZCBkZWZhdWx0c1xuICAgIGNvbnN0IHJlc3VsdCA9IGFkZERlZmF1bHRMYXllcnMobWVyZ2VkU3RhdGUsIG5ld0RhdGFFbnRyaWVzKTtcbiAgICBtZXJnZWRTdGF0ZSA9IHJlc3VsdC5zdGF0ZTtcbiAgICBuZXdMYXllcnMgPSByZXN1bHQubmV3TGF5ZXJzO1xuICB9XG5cbiAgaWYgKG1lcmdlZFN0YXRlLnNwbGl0TWFwcy5sZW5ndGgpIHtcbiAgICAvLyBpZiBtYXAgaXMgc3BsaXQsIGFkZCBuZXcgbGF5ZXJzIHRvIHNwbGl0TWFwc1xuICAgIG5ld0xheWVycyA9IG1lcmdlZFN0YXRlLmxheWVycy5maWx0ZXIoXG4gICAgICBsID0+IGwuY29uZmlnLmRhdGFJZCAmJiBuZXdEYXRhSWRzLmluY2x1ZGVzKGwuY29uZmlnLmRhdGFJZClcbiAgICApO1xuICAgIC8vIGEgbGF5ZXIgYWxyZWFkeSBpbiBhIHBhbmVsIHdhcyBtZXJnZWQgZnJvbSBzcGxpdCBtYXBzLCB3aGljaCBkZWNpZGUgdGhlIHBhbmVscyBzaG93aW5nIGl0XG4gICAgY29uc3QgbGF5ZXJzTm90SW5TcGxpdE1hcHMgPSBuZXdMYXllcnMuZmlsdGVyKFxuICAgICAgbCA9PiAhbWVyZ2VkU3RhdGUuc3BsaXRNYXBzLnNvbWUoc20gPT4gbC5pZCBpbiBzbS5sYXllcnMpXG4gICAgKTtcbiAgICBtZXJnZWRTdGF0ZSA9IHtcbiAgICAgIC4uLm1lcmdlZFN0YXRlLFxuICAgICAgc3BsaXRNYXBzOiBhZGROZXdMYXllcnNUb1NwbGl0TWFwKG1lcmdlZFN0YXRlLnNwbGl0TWFwcywgbGF5ZXJzTm90SW5TcGxpdE1hcHMpXG4gICAgfTtcbiAgfVxuXG4gIG1lcmdlZFN0YXRlID0gbWVyZ2VMYXllclZpc0NvbmZpZ0Zvck5ld0RhdGFzZXRzKFxuICAgIG1lcmdlZFN0YXRlLFxuICAgIGxheWVyVmlzQ29uZmlnRnJvbUFkZERhdGFPcHRpb25zKG9wdGlvbnMpLFxuICAgIG5ld0RhdGFJZHNcbiAgKTtcblxuICAvLyBpZiBubyB0b29sdGlwcyBtZXJnZWQgYWRkIGRlZmF1bHQgdG9vbHRpcHNcbiAgbmV3RGF0YUlkcy5mb3JFYWNoKGRhdGFJZCA9PiB7XG4gICAgY29uc3QgdG9vbHRpcEZpZWxkcyA9IG1lcmdlZFN0YXRlLmludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAuY29uZmlnLmZpZWxkc1RvU2hvd1tkYXRhSWRdO1xuICAgIC8vIGxvYWRpbmcgZGF0YXNldDogYXV0b0NyZWF0ZVRvb2x0aXBzIGlzIGZhbHNlIGFuZCB3ZSBkb24ndCB3YW50IHRvIHJ1biBhZGREZWZhdWx0VG9vbHRpcHMgd2hlbiB0b29sdGlwRmllbGRzIGlzIGVtcHR5XG4gICAgaWYgKFxuICAgICAgb3B0aW9ucz8uYXV0b0NyZWF0ZVRvb2x0aXBzICE9PSBmYWxzZSAmJlxuICAgICAgKCFBcnJheS5pc0FycmF5KHRvb2x0aXBGaWVsZHMpIHx8ICF0b29sdGlwRmllbGRzLmxlbmd0aClcbiAgICApIHtcbiAgICAgIC8vIGFkZGluZyBkYXRhc2V0OiBhdXRvQ3JlYXRlVG9vbHRpcHMgaXMgdHJ1ZVxuICAgICAgbWVyZ2VkU3RhdGUgPSBhZGREZWZhdWx0VG9vbHRpcHMobWVyZ2VkU3RhdGUsIG5ld0RhdGFFbnRyaWVzW2RhdGFJZF0pO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgdXBkYXRlZERhdGFzZXRzID0gZGF0YUVtcHR5XG4gICAgPyBPYmplY3Qua2V5cyhtZXJnZWRTdGF0ZS5kYXRhc2V0cylcbiAgICA6IHVuaXEoT2JqZWN0LmtleXMobmV3RGF0YUVudHJpZXMpLmNvbmNhdChkYXRhc2V0RmlsdGVyZWQpKTtcblxuICBsZXQgdXBkYXRlZFN0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG1lcmdlZFN0YXRlLCB1cGRhdGVkRGF0YXNldHMsIHVuZGVmaW5lZCk7XG5cbiAgLy8gUG9seWdvbiBwZXItbGF5ZXIgaW5kZXhlcyBuZWVkIGNlbnRyb2lkcyAvIGRhdGFUb0ZlYXR1cmUsIHdoaWNoIGFyZSBvbmx5XG4gIC8vIHBvcHVsYXRlZCBieSB0aGUgbGF5ZXItZGF0YSBwYXNzIGFib3ZlLiBTa2lwIGRhdGFzZXRzIHdob3NlIHRhcmdldGVkIGxheWVyc1xuICAvLyBhbHJlYWR5IGZpbHRlcmVkIGZyb20gY29sdW1ucyAoZS5nLiBsYXQvbG5nIHBvaW50cykuXG4gIGNvbnN0IHBvbHlnb25GaWx0ZXJzID0gdXBkYXRlZFN0YXRlLmZpbHRlcnMuZmlsdGVyKFxuICAgIGYgPT4gZi50eXBlID09PSBGSUxURVJfVFlQRVMucG9seWdvbiAmJiBmLmVuYWJsZWQgIT09IGZhbHNlXG4gICk7XG4gIGNvbnN0IHBvbHlnb25NZXRhRGF0YUlkcyA9IHVuaXEoXG4gICAgdXBkYXRlZFN0YXRlLmxheWVyc1xuICAgICAgLmZpbHRlcihcbiAgICAgICAgbGF5ZXIgPT5cbiAgICAgICAgICBwb2x5Z29uRmlsdGVyRGVwZW5kc09uTGF5ZXJNZXRhKGxheWVyKSAmJlxuICAgICAgICAgIHBvbHlnb25GaWx0ZXJzLnNvbWUoZiA9PiBmLmxheWVySWQ/LmluY2x1ZGVzKGxheWVyLmlkKSlcbiAgICAgIClcbiAgICAgIC5tYXAobGF5ZXIgPT4gbGF5ZXIuY29uZmlnLmRhdGFJZClcbiAgICAgIC5maWx0ZXIoKGlkKTogaWQgaXMgc3RyaW5nID0+IEJvb2xlYW4oaWQpICYmIHVwZGF0ZWREYXRhc2V0cy5pbmNsdWRlcyhpZCkpXG4gICk7XG4gIGlmIChwb2x5Z29uTWV0YURhdGFJZHMubGVuZ3RoKSB7XG4gICAgdXBkYXRlZFN0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKFxuICAgICAge1xuICAgICAgICAuLi51cGRhdGVkU3RhdGUsXG4gICAgICAgIGRhdGFzZXRzOiBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKFxuICAgICAgICAgIHBvbHlnb25NZXRhRGF0YUlkcyxcbiAgICAgICAgICB1cGRhdGVkU3RhdGUuZGF0YXNldHMsXG4gICAgICAgICAgdXBkYXRlZFN0YXRlLmZpbHRlcnMsXG4gICAgICAgICAgdXBkYXRlZFN0YXRlLmxheWVyc1xuICAgICAgICApXG4gICAgICB9LFxuICAgICAgcG9seWdvbk1ldGFEYXRhSWRzXG4gICAgKTtcbiAgfVxuXG4gIC8vIHJlZ2lzdGVyIGxheWVyIGFuaW1hdGlvbiBkb21haW4sXG4gIC8vIG5lZWQgdG8gYmUgY2FsbGVkIGFmdGVyIGxheWVyIGRhdGEgaXMgY2FsY3VsYXRlZFxuICB1cGRhdGVkU3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4odXBkYXRlZFN0YXRlKTtcblxuICAvLyB0cnkgdG8gcHJvY2VzcyBsYXllck1lcmdlcnMgYWZ0ZXIgZGF0YXNldCtkYXRhc2V0TWVyZ2Vyc1xuICB1cGRhdGVkU3RhdGUgPVxuICAgIGxheWVyTWVyZ2VycyAmJiBsYXllck1lcmdlcnMubGVuZ3RoID4gMFxuICAgICAgPyBhcHBseU1lcmdlcnNVcGRhdGVyKHVwZGF0ZWRTdGF0ZSwge1xuICAgICAgICAgIG1lcmdlcnM6IGxheWVyTWVyZ2VycyxcbiAgICAgICAgICBwb3N0TWVyZ2VyUGF5bG9hZDogey4uLnBvc3RNZXJnZXJQYXlsb2FkLCBsYXllck1lcmdlcnM6IFtdfVxuICAgICAgICB9KVxuICAgICAgOiB1cGRhdGVkU3RhdGU7XG5cbiAgLy8gY2VudGVyIHRoZSBtYXAgb25jZSB0aGUgZGF0YXNldCBpcyBjcmVhdGVkXG4gIGlmIChuZXdMYXllcnMubGVuZ3RoICYmIChvcHRpb25zIHx8IHt9KS5jZW50ZXJNYXApIHtcbiAgICBjb25zdCBib3VuZHMgPSBmaW5kTWFwQm91bmRzKG5ld0xheWVycyk7XG4gICAgaWYgKGJvdW5kcykge1xuICAgICAgY29uc3QgcGFkZGluZyA9IG9wdGlvbnM/LnBhZGRpbmc7XG4gICAgICBjb25zdCBmaXRCb3VuZHNUYXNrID0gQUNUSU9OX1RBU0tfRklUX0JPVU5EUygpLm1hcCgoKSA9PiB7XG4gICAgICAgIHJldHVybiBmaXRNYXBCb3VuZHMoYm91bmRzLCBwYWRkaW5nKTtcbiAgICAgIH0pO1xuICAgICAgdXBkYXRlZFN0YXRlID0gd2l0aFRhc2sodXBkYXRlZFN0YXRlLCBmaXRCb3VuZHNUYXNrKTtcbiAgICB9XG4gIH1cblxuICAvLyBuZWVkIHRvIGNlbnRlciBtYXAgaGVyZSBpZiB3ZSBoYXZlIG5ldyBsYXllcnNcbiAgcmV0dXJuIHVwZGF0ZWRTdGF0ZTtcbn1cblxuLyoqXG4gKiBSZW5hbWUgYW4gZXhpc3RpbmcgZGF0YXNldCBpbiBgdmlzU3RhdGVgXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuYW1lRGF0YXNldFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUmVuYW1lRGF0YXNldFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgcmV0dXJuIHVwZGF0ZURhdGFzZXRQcm9wc1VwZGF0ZXIoc3RhdGUsIHtkYXRhSWQ6IGFjdGlvbi5kYXRhSWQsIHByb3BzOiB7bGFiZWw6IGFjdGlvbi5sYWJlbH19KTtcbn1cblxuY29uc3QgQUxMT1dFRF9VUERBVEVfREFUQVNFVF9QUk9QUyA9IFsnbGFiZWwnLCAnY29sb3InLCAnbWV0YWRhdGEnXTtcblxuLyoqXG4gKiBWYWxpZGF0ZXMgcHJvcGVydGllcyBiZWZvcmUgdXBkYXRpbmcgdGhlIGRhdGFzZXQuXG4gKiBNYWtlcyBzdXJlIGVhY2ggcHJvcGVydHkgaXMgaW4gdGhlIGFsbG93ZWQgbGlzdFxuICogTWFrZXMgc3VyZSBjb2xvciB2YWx1ZSBpcyBSR0JcbiAqIFBlcmZvcm1zIGRlZXAgbWVyZ2Ugd2hlbiB1cGRhdGluZyBtZXRhZGF0YVxuICovXG5jb25zdCB2YWxpZGF0ZURhdGFzZXRVcGRhdGVQcm9wcyA9IChwcm9wcywgZGF0YXNldCkgPT4ge1xuICBjb25zdCB2YWxpZGF0ZWRQcm9wcyA9IE9iamVjdC5lbnRyaWVzKHByb3BzKS5yZWR1Y2UoKGFjYywgZW50cnkpID0+IHtcbiAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBlbnRyeTtcbiAgICAvLyBpcyBpdCBhbGxvd2VkID9cbiAgICBpZiAoIUFMTE9XRURfVVBEQVRFX0RBVEFTRVRfUFJPUFMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9XG5cbiAgICAvLyBpZiB3ZSBhcmUgYWRkaW5nIGEgY29sb3IgYnV0IGl0IGlzIG5vdCBSR0Igd2UgZG9uJ3QgYWNjZXB0IHRoZSB2YWx1ZVxuICAgIC8vIGluIHRoZSBmdXR1cmUgYXMgd2UgYWRkIG1vcmUgcHJvcHMgd2Ugc2hvdWxkIGNoYW5nZSB0aGlzIGlmIGludG8gYSBzd2l0Y2hcbiAgICBpZiAoa2V5ID09PSAnY29sb3InICYmICFpc1JnYkNvbG9yKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9XG5cbiAgICAvLyBkbyB3ZSBuZWVkIGRlZXAgbWVyZ2UgP1xuICAgIHJldHVybiB7Li4uYWNjLCBba2V5XTogaXNQbGFpbk9iamVjdCh2YWx1ZSkgPyBkZWVwbWVyZ2UoZGF0YXNldFtrZXldIHx8IHt9LCB2YWx1ZSkgOiB2YWx1ZX07XG4gIH0sIHt9KTtcblxuICByZXR1cm4gdmFsaWRhdGVkUHJvcHM7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBEYXRhc2V0IHByb3BzIChsYWJlbCwgY29sb3IsIG1ldGEpLiBEbyBub3QgdXNlIHRvIHVwZGF0ZSBkYXRhIG9yIGFueSByZWxhdGVkIHByb3BlcnRpZXNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZURhdGFzZXRQcm9wc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2RhdGFJZCwgcHJvcHN9ID0gYWN0aW9uO1xuICBjb25zdCB7ZGF0YXNldHN9ID0gc3RhdGU7XG4gIGNvbnN0IGV4aXN0aW5nID0gZGF0YXNldHNbZGF0YUlkXTtcblxuICBpZiAoZXhpc3RpbmcpIHtcbiAgICBjb25zdCB2YWxpZGF0ZWRQcm9wcyA9IHZhbGlkYXRlRGF0YXNldFVwZGF0ZVByb3BzKHByb3BzLCBleGlzdGluZyk7XG4gICAgLy8gIHZhbGlkYXRlIHByb3BzOiBqdXN0IGNvbG9yIGZvciBub3dcbiAgICAvLyAgd2Ugb25seSBhbGxvdyBsYWJlbCwgY29sb3IgYW5kIG1ldGEgdG8gYmUgdXBkYXRlZFxuICAgIC8vIGNvbnN0IG5ld1RhYmxlID0gY29weVRhYmxlQW5kVXBkYXRlKGV4aXN0aW5nLCB2YWxpZGF0ZWRQcm9wcyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgZGF0YXNldHM6IHtcbiAgICAgICAgLi4uZGF0YXNldHMsXG4gICAgICAgIFtkYXRhSWRdOiBjb3B5VGFibGVBbmRVcGRhdGUoZXhpc3RpbmcsIHZhbGlkYXRlZFByb3BzKVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbi8qKlxuICogUmUtdmFsaWRhdGUgYSBsaXZlIGxheWVyIGFnYWluc3QgYSB0YWJsZSB3aG9zZSBzY2hlbWEganVzdCBjaGFuZ2VkLlxuICpcbiAqIFRoZSBsYXllcidzIGNvbHVtbnMgLyB2aXN1YWwtY2hhbm5lbCBmaWVsZHMgLyB0ZXh0LWxhYmVsIGZpZWxkcyBhcmUgZmlyc3RcbiAqIHJlbWFwcGVkIHRvIHRoZWlyIG5ldyBuYW1lcyAodmlhIGByZW5hbWVzYCkgc28gdGhlIGxheWVyIGZvbGxvd3MgYSByZW5hbWVcbiAqIGluc3RlYWQgb2YgdHJlYXRpbmcgdGhlIG9sZCBjb2x1bW4gYXMgcmVtb3ZlZCwgdGhlbiByZS12YWxpZGF0ZWQgd2l0aFxuICogYHZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhYCDigJQgdGhlIHNhbWUgc2VyaWFsaXplICsgdmFsaWRhdGUgcGF0aCB1c2VkXG4gKiB3aGVuIGEgc2F2ZWQgY29uZmlnIGlzIGxvYWRlZCBhZ2FpbnN0IG5ldyBkYXRhLiBSZXR1cm5zIGBudWxsYCB3aGVuIGFcbiAqIHJlcXVpcmVkIGNvbHVtbiBpcyBnb25lICh0aGUgbGF5ZXIgY2FuIG5vIGxvbmdlciBiZSBidWlsdCkuXG4gKi9cbmZ1bmN0aW9uIHJlY29uY2lsZUxheWVyV2l0aE5ld1NjaGVtYShcbiAgbGF5ZXI6IExheWVyLFxuICByZW5hbWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICBuZXdUYWJsZTogS2VwbGVyVGFibGUsXG4gIHN0YXRlOiBWaXNTdGF0ZVxuKTogTGF5ZXIgfCBudWxsIHtcbiAgY29uc3QgY29uZmlnUGF0Y2g6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblxuICAvLyBmb2xsb3cgcmVuYW1lZCBjb2x1bW5zXG4gIGNvbnN0IGNvbHVtbnNQYXRjaDogUmVjb3JkPHN0cmluZywge3ZhbHVlOiBzdHJpbmcgfCBudWxsOyBmaWVsZElkeDogbnVtYmVyfT4gPSB7fTtcbiAgbGV0IGNvbHVtbnNDaGFuZ2VkID0gZmFsc2U7XG4gIE9iamVjdC5lbnRyaWVzKGxheWVyLmNvbmZpZy5jb2x1bW5zIHx8IHt9KS5mb3JFYWNoKChbY2tleSwgY29sXSkgPT4ge1xuICAgIGlmIChjb2w/LnZhbHVlICYmIHJlbmFtZXNbY29sLnZhbHVlXSkge1xuICAgICAgY29sdW1uc1BhdGNoW2NrZXldID0gey4uLmNvbCwgdmFsdWU6IHJlbmFtZXNbY29sLnZhbHVlXX07XG4gICAgICBjb2x1bW5zQ2hhbmdlZCA9IHRydWU7XG4gICAgfVxuICB9KTtcbiAgaWYgKGNvbHVtbnNDaGFuZ2VkKSB7XG4gICAgY29uZmlnUGF0Y2guY29sdW1ucyA9IHsuLi5sYXllci5jb25maWcuY29sdW1ucywgLi4uY29sdW1uc1BhdGNofTtcbiAgfVxuXG4gIC8vIGZvbGxvdyByZW5hbWVkIHZpc3VhbC1jaGFubmVsIGZpZWxkcyAoY29sb3JGaWVsZCwgc2l6ZUZpZWxkLCAuLi4pXG4gIE9iamVjdC52YWx1ZXMobGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goKHtmaWVsZH0pID0+IHtcbiAgICBjb25zdCBmaWVsZENvbmZpZyA9IGxheWVyLmNvbmZpZ1tmaWVsZF07XG4gICAgaWYgKGZpZWxkQ29uZmlnPy5uYW1lICYmIHJlbmFtZXNbZmllbGRDb25maWcubmFtZV0pIHtcbiAgICAgIGNvbmZpZ1BhdGNoW2ZpZWxkXSA9IHsuLi5maWVsZENvbmZpZywgbmFtZTogcmVuYW1lc1tmaWVsZENvbmZpZy5uYW1lXX07XG4gICAgfVxuICB9KTtcblxuICAvLyBmb2xsb3cgcmVuYW1lZCB0ZXh0LWxhYmVsIGZpZWxkc1xuICBpZiAobGF5ZXIuY29uZmlnLnRleHRMYWJlbD8ubGVuZ3RoKSB7XG4gICAgY29uc3QgdGV4dExhYmVsID0gbGF5ZXIuY29uZmlnLnRleHRMYWJlbC5tYXAodGwgPT5cbiAgICAgIHRsLmZpZWxkICYmIHJlbmFtZXNbdGwuZmllbGQubmFtZV1cbiAgICAgICAgPyB7Li4udGwsIGZpZWxkOiB7Li4udGwuZmllbGQsIG5hbWU6IHJlbmFtZXNbdGwuZmllbGQubmFtZV19fVxuICAgICAgICA6IHRsXG4gICAgKTtcbiAgICBpZiAodGV4dExhYmVsLnNvbWUoKHRsLCBpKSA9PiB0bCAhPT0gbGF5ZXIuY29uZmlnLnRleHRMYWJlbFtpXSkpIHtcbiAgICAgIGNvbmZpZ1BhdGNoLnRleHRMYWJlbCA9IHRleHRMYWJlbDtcbiAgICB9XG4gIH1cblxuICAvLyBzaGFsbG93LWNvcHkgdGhlIGxheWVyIHNvIHdlIG5ldmVyIG11dGF0ZSByZWR1eCBzdGF0ZTsgdGhlIGNvcHkga2VlcHMgdGhlXG4gIC8vIHByb3RvdHlwZSBtZXRob2RzIChgdmlzdWFsQ2hhbm5lbHNgIGdldHRlciwgYGlzVmFsaWRUb1NhdmVgKSBzbyBpdFxuICAvLyBzZXJpYWxpemVzIGV4YWN0bHkgbGlrZSBhIGxpdmUgbGF5ZXIuXG4gIGNvbnN0IGxheWVyQ29weSA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YobGF5ZXIpKSwgbGF5ZXIpO1xuICBpZiAoT2JqZWN0LmtleXMoY29uZmlnUGF0Y2gpLmxlbmd0aCkge1xuICAgIGxheWVyQ29weS5jb25maWcgPSB7Li4ubGF5ZXIuY29uZmlnLCAuLi5jb25maWdQYXRjaH07XG4gIH1cblxuICBjb25zdCB2YWxpZGF0ZWQgPSB2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YShcbiAgICBuZXdUYWJsZSxcbiAgICBzdGF0ZS5sYXllckNsYXNzZXMsXG4gICAgbGF5ZXJDb3B5LFxuICAgIHN0YXRlLnNjaGVtYVxuICApO1xuXG4gIHJldHVybiB2YWxpZGF0ZWQgJiYgdmFsaWRhdGVkLmhhc0FsbENvbHVtbnMoKSA/IHZhbGlkYXRlZCA6IG51bGw7XG59XG5cbi8qKlxuICogVXBkYXRlIGFuIGV4aXN0aW5nIGRhdGFzZXQncyBzY2hlbWEgKGNvbHVtbnMvZmllbGRzKSBpbiBwbGFjZSBhbmQgcmVjb25jaWxlXG4gKiBldmVyeXRoaW5nIHRoYXQgcmVmZXJlbmNlZCB0aGUgb2xkIGNvbHVtbnM6IGZpbHRlcnMsIGxheWVycywgdG9vbHRpcCBmaWVsZHMsXG4gKiBwaW5uZWQgY29sdW1ucyBhbmQgc29ydCBzdGF0ZS4gVGhlIGRhdGFzZXQga2VlcHMgaXRzIGlkL2xhYmVsL2NvbG9yL21ldGFkYXRhLlxuICpcbiAqIGBhY3Rpb24uZGF0YWAgaXMgdGhlIHNhbWUgc2hhcGUgYEtlcGxlclRhYmxlLmltcG9ydERhdGFgIGFjY2VwdHMgKGB7Y29scyxcbiAqIGZpZWxkcywgYXJyb3dUYWJsZX1gIHdoZW4gcmVwbGFjaW5nIGNvbHVtbnMpLiBgYWN0aW9uLnJlbmFtZXNgIGlzIGFuIG9wdGlvbmFsXG4gKiBvbGQg4oaSIG5ldyBjb2x1bW4tbmFtZSBtYXAgc28gbGF5ZXJzL2ZpbHRlcnMvdG9vbHRpcHMgZm9sbG93IGEgcmVuYW1lIGluc3RlYWRcbiAqIG9mIHRyZWF0aW5nIHRoZSBvbGQgY29sdW1uIGFzIHJlbW92ZWQuXG4gKlxuICogUmVjb25jaWxpYXRpb24gaXMgbmFtZS1iYXNlZCDigJQgdGhlIHNhbWUgd2F5IGtlcGxlci5nbCBsb2FkcyBhIHNhdmVkIGNvbmZpZ1xuICogYWdhaW5zdCBjaGFuZ2VkIGRhdGEuIEEgbGF5ZXIgd2hvc2UgcmVxdWlyZWQgY29sdW1uIGlzIGdvbmUgaXMgcmVtb3ZlZDsgYVxuICogZmlsdGVyIG9uIGEgZ29uZSBjb2x1bW4gaXMgZHJvcHBlZCAob3IgdGhlIGRhdGFzZXQgaXMgc3BsaWNlZCBvdXQgb2YgYSBzeW5jZWRcbiAqIGZpbHRlcik7IHRvb2x0aXAgZmllbGRzIGFyZSByZW1hcHBlZCAvIGRyb3BwZWQuXG4gKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZURhdGFzZXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZURhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtkYXRhSWQsIGRhdGEsIHJlbmFtZXMgPSB7fX0gPSBhY3Rpb247XG4gIGNvbnN0IGV4aXN0aW5nID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFleGlzdGluZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIDEuIHJlYnVpbGQgdGhlIHRhYmxlIHNjaGVtYSBpbiBwbGFjZSAoc2FtZSBpZC9sYWJlbC9jb2xvci9tZXRhZGF0YSlcbiAgY29uc3QgbmV3VGFibGUgPSBjb3B5VGFibGVBbmRVcGRhdGUoZXhpc3RpbmcsIHt9KTtcbiAgbmV3VGFibGUudXBkYXRlU2NoZW1hKGRhdGEpO1xuXG4gIC8vIFRoZSBkYXRhIGNvbnRhaW5lciBpcyByZWJ1aWx0IHVuc29ydGVkIGFuZCB1bmZpbHRlcmVkOyByZXNldCB0aGUgdGFibGUnc1xuICAvLyB2aWV3IHN0YXRlIHRoYXQgaW5kZXhlcyBpbnRvIHRoZSBvbGQgY29udGFpbmVyLlxuICBuZXdUYWJsZS5maWx0ZXJlZElkeENQVSA9IG5ld1RhYmxlLmFsbEluZGV4ZXM7XG4gIG5ld1RhYmxlLmZpbHRlclJlY29yZENQVSA9IHVuZGVmaW5lZDtcbiAgbmV3VGFibGUuc29ydENvbHVtbiA9IHVuZGVmaW5lZDtcbiAgbmV3VGFibGUuc29ydE9yZGVyID0gbnVsbDtcbiAgbmV3VGFibGUucGlubmVkQ29sdW1ucyA9IChleGlzdGluZy5waW5uZWRDb2x1bW5zIHx8IFtdKVxuICAgIC5tYXAobmFtZSA9PiByZW5hbWVzW25hbWVdID8/IG5hbWUpXG4gICAgLmZpbHRlcihuYW1lID0+IG5ld1RhYmxlLmdldENvbHVtbkZpZWxkSWR4KG5hbWUpID4gLTEpO1xuXG4gIGNvbnN0IG5ld0ZpZWxkc0J5TmFtZSA9IG5ldyBTZXQobmV3VGFibGUuZmllbGRzLm1hcChmID0+IGYubmFtZSkpO1xuICBjb25zdCBuZXdEYXRhc2V0cyA9IHsuLi5zdGF0ZS5kYXRhc2V0cywgW2RhdGFJZF06IG5ld1RhYmxlfTtcblxuICAvLyAyLiByZWNvbmNpbGUgZmlsdGVyc1xuICBsZXQgbmV3RmlsdGVycyA9IHN0YXRlLmZpbHRlcnNcbiAgICAubWFwKGZpbHRlciA9PiB7XG4gICAgICBjb25zdCB2aSA9IGZpbHRlci5kYXRhSWQuaW5kZXhPZihkYXRhSWQpO1xuICAgICAgaWYgKHZpID09PSAtMSkge1xuICAgICAgICByZXR1cm4gZmlsdGVyO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBvbGROYW1lID0gZmlsdGVyLm5hbWVbdmldO1xuICAgICAgY29uc3QgbmV3TmFtZSA9IHJlbmFtZXNbb2xkTmFtZV0gPz8gb2xkTmFtZTtcbiAgICAgIGNvbnN0IGZpZWxkSWR4ID0gbmV3VGFibGUuZ2V0Q29sdW1uRmllbGRJZHgobmV3TmFtZSk7XG5cbiAgICAgIGlmIChmaWVsZElkeCA9PT0gLTEpIHtcbiAgICAgICAgLy8gY29sdW1uIGlzIGdvbmU6IGRyb3AgYSBzaW5nbGUtZGF0YXNldCBmaWx0ZXIsIHNwbGljZSBpdCBvdXQgb2YgYSBzeW5jZWQgb25lXG4gICAgICAgIHJldHVybiBmaWx0ZXIuZGF0YUlkLmxlbmd0aCA9PT0gMVxuICAgICAgICAgID8gbnVsbFxuICAgICAgICAgIDogX3JlbW92ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChmaWx0ZXIsIHZpLCBuZXdEYXRhc2V0cyk7XG4gICAgICB9XG5cbiAgICAgIC8vIGNvbHVtbiBwcmVzZW50IChwb3NzaWJseSByZW5hbWVkKTogcmUtcmVzb2x2ZSBuYW1lL2ZpZWxkSWR4L2RvbWFpblxuICAgICAgY29uc3Qge2ZpbHRlcjogdXBkYXRlZH0gPSBhcHBseUZpbHRlckZpZWxkTmFtZShmaWx0ZXIsIG5ld0RhdGFzZXRzLCBkYXRhSWQsIG5ld05hbWUsIHZpLCB7XG4gICAgICAgIG1lcmdlRG9tYWluOiB2aSA+IDBcbiAgICAgIH0pO1xuICAgICAgaWYgKCF1cGRhdGVkKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyBicnVzaCBmaWx0ZXJzIGNhcnJ5IGEgc2Vjb25kIHktYXhpcyBmaWVsZDsgZm9sbG93IGEgcmVuYW1lIHRoZXJlIHRvb1xuICAgICAgY29uc3QgeUF4aXMgPVxuICAgICAgICB1cGRhdGVkLnlBeGlzPy5uYW1lICYmXG4gICAgICAgIChyZW5hbWVzW3VwZGF0ZWQueUF4aXMubmFtZV1cbiAgICAgICAgICA/IHsuLi51cGRhdGVkLnlBeGlzLCBuYW1lOiByZW5hbWVzW3VwZGF0ZWQueUF4aXMubmFtZV19XG4gICAgICAgICAgOiBuZXdGaWVsZHNCeU5hbWUuaGFzKHVwZGF0ZWQueUF4aXMubmFtZSlcbiAgICAgICAgICA/IHVwZGF0ZWQueUF4aXNcbiAgICAgICAgICA6IG51bGwpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi51cGRhdGVkLFxuICAgICAgICB5QXhpcyxcbiAgICAgICAgLy8gY2xhbXAgdGhlIHVzZXIncyBwcmV2aW91cyBzZWxlY3Rpb24gaW50byB0aGUgbmV3IGRvbWFpbiBpbnN0ZWFkIG9mXG4gICAgICAgIC8vIHJlc2V0dGluZyBpdCB0byB0aGUgZnVsbCByYW5nZVxuICAgICAgICB2YWx1ZTogYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihmaWx0ZXIudmFsdWUsIHVwZGF0ZWQpXG4gICAgICB9O1xuICAgIH0pXG4gICAgLmZpbHRlcihCb29sZWFuKSBhcyBGaWx0ZXJbXTtcblxuICAvLyByZWFzc2lnbiBHUFUgY2hhbm5lbHMgbm93IHRoYXQgdGhlIGZpbHRlciBsaXN0IGlzIHNldHRsZWRcbiAgbmV3RmlsdGVycyA9IG5ld0ZpbHRlcnMubWFwKGZpbHRlciA9PlxuICAgIGZpbHRlci5ncHUgPyBhc3NpZ25HcHVDaGFubmVsKHNldEZpbHRlckdwdU1vZGUoZmlsdGVyLCBuZXdGaWx0ZXJzKSwgbmV3RmlsdGVycykgOiBmaWx0ZXJcbiAgKTtcblxuICAvLyAzLiByZWJ1aWxkIHRoZSB0YWJsZSdzIGZpbHRlciBzdGF0ZSAoZ3B1RmlsdGVyIC8gZmlsdGVyUmVjb3JkIC8gZmlsdGVyZWRJbmRleClcbiAgbmV3VGFibGUuZmlsdGVyVGFibGUoXG4gICAgbmV3RmlsdGVycyxcbiAgICBzdGF0ZS5sYXllcnMuZmlsdGVyKGwgPT4gbC5jb25maWcuZGF0YUlkID09PSBkYXRhSWQpLFxuICAgIHt9XG4gICk7XG5cbiAgLy8gNC4gcmVjb25jaWxlIGxheWVyc1xuICBjb25zdCBsYXllcnNUb1JlbW92ZTogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgbmV3TGF5ZXJzID0gc3RhdGUubGF5ZXJzLm1hcChsYXllciA9PiB7XG4gICAgaWYgKGxheWVyLmNvbmZpZy5kYXRhSWQgIT09IGRhdGFJZCkge1xuICAgICAgcmV0dXJuIGxheWVyO1xuICAgIH1cbiAgICBjb25zdCByZWNvbmNpbGVkID0gcmVjb25jaWxlTGF5ZXJXaXRoTmV3U2NoZW1hKGxheWVyLCByZW5hbWVzLCBuZXdUYWJsZSwgc3RhdGUpO1xuICAgIGlmIChyZWNvbmNpbGVkKSB7XG4gICAgICByZXR1cm4gcmVjb25jaWxlZDtcbiAgICB9XG4gICAgbGF5ZXJzVG9SZW1vdmUucHVzaChsYXllci5pZCk7XG4gICAgcmV0dXJuIGxheWVyOyAvLyBwbGFjZWhvbGRlciwgZHJvcHBlZCB2aWEgcmVtb3ZlTGF5ZXJVcGRhdGVyIGJlbG93XG4gIH0pO1xuXG4gIC8vIDUuIHJlY29uY2lsZSB0b29sdGlwIGZpZWxkc1RvU2hvd1xuICBsZXQgaW50ZXJhY3Rpb25Db25maWcgPSBzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZztcbiAgY29uc3QgdG9vbHRpcCA9IGludGVyYWN0aW9uQ29uZmlnPy50b29sdGlwO1xuICBjb25zdCBmaWVsZHNUb1Nob3cgPSB0b29sdGlwPy5jb25maWc/LmZpZWxkc1RvU2hvdz8uW2RhdGFJZF07XG4gIGlmIChmaWVsZHNUb1Nob3cpIHtcbiAgICBjb25zdCBuZXh0RmllbGRzVG9TaG93ID0gZmllbGRzVG9TaG93LmZsYXRNYXAoZiA9PiB7XG4gICAgICBjb25zdCBuYW1lID0gcmVuYW1lc1tmLm5hbWVdID8/IGYubmFtZTtcbiAgICAgIHJldHVybiBuZXdGaWVsZHNCeU5hbWUuaGFzKG5hbWUpID8gW3suLi5mLCBuYW1lfV0gOiBbXTtcbiAgICB9KTtcbiAgICBpbnRlcmFjdGlvbkNvbmZpZyA9IHtcbiAgICAgIC4uLmludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgdG9vbHRpcDoge1xuICAgICAgICAuLi50b29sdGlwLFxuICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICAuLi50b29sdGlwLmNvbmZpZyxcbiAgICAgICAgICBmaWVsZHNUb1Nob3c6IHsuLi50b29sdGlwLmNvbmZpZy5maWVsZHNUb1Nob3csIFtkYXRhSWRdOiBuZXh0RmllbGRzVG9TaG93fVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGxldCBuZXh0U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGF0YXNldHM6IG5ld0RhdGFzZXRzLFxuICAgIGZpbHRlcnM6IG5ld0ZpbHRlcnMsXG4gICAgbGF5ZXJzOiBuZXdMYXllcnMsXG4gICAgaW50ZXJhY3Rpb25Db25maWdcbiAgfTtcblxuICAvLyA2LiBkcm9wIGxheWVycyB0aGF0IGxvc3QgdGhlaXIgcmVxdWlyZWQgY29sdW1uc1xuICBuZXh0U3RhdGUgPSBsYXllcnNUb1JlbW92ZS5yZWR1Y2UoKGFjY3UsIGlkKSA9PiByZW1vdmVMYXllclVwZGF0ZXIoYWNjdSwge2lkfSksIG5leHRTdGF0ZSk7XG5cbiAgLy8gNy4gcmVjb21wdXRlIGxheWVyIGRvbWFpbnMgKyBkYXRhIGZvciB0aGUgdXBkYXRlZCBkYXRhc2V0XG4gIG5leHRTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXh0U3RhdGUsIGRhdGFJZCk7XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuLyoqXG4gKiBXaGVuIGEgdXNlciBjbGlja3Mgb24gdGhlIHNwZWNpZmljIG1hcCBjbG9zaW5nIGljb25cbiAqIHRoZSBhcHBsaWNhdGlvbiB3aWxsIGNsb3NlIHRoZSBzZWxlY3RlZCBtYXBcbiAqIGFuZCB3aWxsIG1lcmdlIHRoZSByZW1haW5pbmcgb25lIHdpdGggdGhlIGdsb2JhbCBzdGF0ZVxuICogVE9ETzogaSB0aGluayBpbiB0aGUgZnV0dXJlIHRoaXMgYWN0aW9uIHNob3VsZCBiZSBjYWxsZWQgbWVyZ2UgbWFwIGxheWVycyB3aXRoIGdsb2JhbCBzZXR0aW5nc1xuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlIGB2aXNTdGF0ZWBcbiAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb24gYWN0aW9uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsb3NlU3BlY2lmaWNNYXBBdEluZGV4PFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IE1hcFN0YXRlQWN0aW9ucy5Ub2dnbGVTcGxpdE1hcFVwZGF0ZXJBY3Rpb25cbik6IFMge1xuICAvLyByZXRyaWV2ZSBsYXllcnMgbWV0YSBkYXRhIGZyb20gdGhlIHJlbWFpbmluZyBtYXAgdGhhdCB3ZSBuZWVkIHRvIGtlZXBcbiAgY29uc3QgaW5kZXhUb1JldHJpZXZlID0gMSAtIGFjdGlvbi5wYXlsb2FkO1xuICBjb25zdCBtYXBMYXllcnMgPSBzdGF0ZS5zcGxpdE1hcHNbaW5kZXhUb1JldHJpZXZlXT8ubGF5ZXJzO1xuICBjb25zdCB7bGF5ZXJzfSA9IHN0YXRlO1xuXG4gIC8vIHVwZGF0ZSBsYXllciB2aXNpYmlsaXR5XG4gIGNvbnN0IG5ld0xheWVycyA9IGxheWVycy5tYXAobGF5ZXIgPT5cbiAgICBtYXBMYXllcnMgJiYgIW1hcExheWVyc1tsYXllci5pZF0gJiYgbGF5ZXIuY29uZmlnLmlzVmlzaWJsZVxuICAgICAgPyBsYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgICAgLy8gaWYgbGF5ZXIuaWQgaXMgbm90IGluIG1hcExheWVycywgaXQgc2hvdWxkIGJlIGluVmlzaWJsZVxuICAgICAgICAgIGlzVmlzaWJsZTogZmFsc2VcbiAgICAgICAgfSlcbiAgICAgIDogbGF5ZXJcbiAgKTtcblxuICAvLyBkZWxldGUgbWFwXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBuZXdMYXllcnMsXG4gICAgc3BsaXRNYXBzOiBbXVxuICB9O1xufVxuXG4vKipcbiAqIFRyaWdnZXIgZmlsZSBsb2FkaW5nIGRpc3BhdGNoIGBhZGREYXRhVG9NYXBgIGlmIHN1Y2NlZWQsIG9yIGBsb2FkRmlsZXNFcnJgIGlmIGZhaWxlZFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGxvYWRGaWxlc1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTG9hZEZpbGVzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7ZmlsZXMsIG9uRmluaXNoID0gbG9hZEZpbGVzU3VjY2Vzc30gPSBhY3Rpb247XG4gIGlmICghZmlsZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgY29tcGFuaW9uRmlsZXMgPSBBcnJheS5mcm9tKGZpbGVzKTtcbiAgY29uc3QgZmlsZXNUb0xvYWQgPSBnZXRGaWxlc1RvUGFyc2UoY29tcGFuaW9uRmlsZXMpO1xuICBpZiAoIWZpbGVzVG9Mb2FkLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGZpbGVMb2FkaW5nUHJvZ3Jlc3MgPSBmaWxlc1RvTG9hZC5yZWR1Y2UoXG4gICAgKGFjY3UsIGYsIGkpID0+IG1lcmdlXyhpbml0aWFsRmlsZUxvYWRpbmdQcm9ncmVzcyhmLCBpKSkoYWNjdSksXG4gICAge31cbiAgKTtcblxuICBjb25zdCBmaWxlTG9hZGluZyA9IHtcbiAgICBmaWxlQ2FjaGU6IFtdLFxuICAgIGZpbGVzVG9Mb2FkLFxuICAgIGNvbXBhbmlvbkZpbGVzLFxuICAgIG9uRmluaXNoXG4gIH07XG5cbiAgY29uc3QgbmV4dFN0YXRlID0gbWVyZ2VfKHtmaWxlTG9hZGluZ1Byb2dyZXNzLCBmaWxlTG9hZGluZ30pKHN0YXRlKTtcblxuICByZXR1cm4gbG9hZE5leHRGaWxlVXBkYXRlcihuZXh0U3RhdGUpO1xufTtcblxuLyoqXG4gKiBTdWNlc3NmdWxseSBsb2FkZWQgb25lIGZpbGUsIG1vdmUgb24gdG8gdGhlIG5leHQgb25lXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZEZpbGVTdGVwU3VjY2Vzc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTG9hZEZpbGVTdGVwU3VjY2Vzc0FjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIXN0YXRlLmZpbGVMb2FkaW5nKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHtmaWxlTmFtZSwgZmlsZUNhY2hlfSA9IGFjdGlvbjtcbiAgY29uc3Qge2ZpbGVzVG9Mb2FkLCBvbkZpbmlzaH0gPSBzdGF0ZS5maWxlTG9hZGluZztcbiAgY29uc3Qgc3RhdGVXaXRoUHJvZ3Jlc3MgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihzdGF0ZSwge1xuICAgIGZpbGVOYW1lLFxuICAgIHByb2dyZXNzOiB7cGVyY2VudDogMSwgbWVzc2FnZTogJ0RvbmUnfVxuICB9KTtcblxuICAvLyBzYXZlIHByb2Nlc3NlZCBmaWxlIHRvIGZpbGVDYWNoZVxuICBjb25zdCBzdGF0ZVdpdGhDYWNoZSA9IHBpY2tfKCdmaWxlTG9hZGluZycpKG1lcmdlXyh7ZmlsZUNhY2hlfSkpKHN0YXRlV2l0aFByb2dyZXNzKTtcblxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgc3RhdGVXaXRoQ2FjaGUsXG4gICAgREVMQVlfVEFTSygyMDApLm1hcChmaWxlc1RvTG9hZC5sZW5ndGggPyBsb2FkTmV4dEZpbGUgOiAoKSA9PiBvbkZpbmlzaChmaWxlQ2FjaGUpKVxuICApO1xufVxuXG4vLyB3aXRoVGFzazxUPihzdGF0ZTogVCwgdGFzazogYW55KTogVFxuXG4vKipcbiAqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZE5leHRGaWxlVXBkYXRlcihzdGF0ZTogVmlzU3RhdGUpOiBWaXNTdGF0ZSB7XG4gIGlmICghc3RhdGUuZmlsZUxvYWRpbmcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qge2ZpbGVzVG9Mb2FkfSA9IHN0YXRlLmZpbGVMb2FkaW5nO1xuICBjb25zdCBbZmlsZSwgLi4ucmVtYWluaW5nRmlsZXNUb0xvYWRdID0gZmlsZXNUb0xvYWQ7XG5cbiAgLy8gc2F2ZSBmaWxlc1RvTG9hZCB0byBzdGF0ZVxuICBjb25zdCBuZXh0U3RhdGUgPSBwaWNrXygnZmlsZUxvYWRpbmcnKShtZXJnZV8oe2ZpbGVzVG9Mb2FkOiByZW1haW5pbmdGaWxlc1RvTG9hZH0pKShzdGF0ZSk7XG5cbiAgY29uc3Qgc3RhdGVXaXRoUHJvZ3Jlc3MgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihuZXh0U3RhdGUsIHtcbiAgICBmaWxlTmFtZTogZmlsZS5uYW1lLFxuICAgIHByb2dyZXNzOiB7cGVyY2VudDogMCwgbWVzc2FnZTogJ2xvYWRpbmcuLi4nfVxuICB9KTtcblxuICBjb25zdCB7bG9hZGVycywgbG9hZE9wdGlvbnN9ID0gc3RhdGU7XG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBzdGF0ZVdpdGhQcm9ncmVzcyxcbiAgICBtYWtlTG9hZEZpbGVUYXNrKFxuICAgICAgZmlsZSxcbiAgICAgIG5leHRTdGF0ZS5maWxlTG9hZGluZyAmJiBuZXh0U3RhdGUuZmlsZUxvYWRpbmcuZmlsZUNhY2hlLFxuICAgICAgbG9hZGVycyxcbiAgICAgIGxvYWRPcHRpb25zLFxuICAgICAgbmV4dFN0YXRlLmZpbGVMb2FkaW5nID8gbmV4dFN0YXRlLmZpbGVMb2FkaW5nLmNvbXBhbmlvbkZpbGVzIDogdW5kZWZpbmVkXG4gICAgKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFrZUxvYWRGaWxlVGFzayhcbiAgZmlsZSxcbiAgZmlsZUNhY2hlLFxuICBsb2FkZXJzOiBMb2FkZXJbXSA9IFtdLFxuICBsb2FkT3B0aW9ucyA9IHt9LFxuICBjb21wYW5pb25GaWxlcz86IEZpbGVbXVxuKSB7XG4gIHJldHVybiBMT0FEX0ZJTEVfVEFTSyh7ZmlsZSwgZmlsZUNhY2hlLCBsb2FkZXJzLCBsb2FkT3B0aW9ucywgY29tcGFuaW9uRmlsZXN9KS5iaW1hcChcbiAgICAvLyBwcmV0dGllciBpZ25vcmVcbiAgICAvLyBzdWNjZXNzXG4gICAgZ2VuID0+XG4gICAgICBuZXh0RmlsZUJhdGNoKHtcbiAgICAgICAgZ2VuLFxuICAgICAgICBmaWxlTmFtZTogZmlsZS5uYW1lLFxuICAgICAgICBvbkZpbmlzaDogcmVzdWx0ID0+XG4gICAgICAgICAgcHJvY2Vzc0ZpbGVDb250ZW50KHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IHJlc3VsdCxcbiAgICAgICAgICAgIGZpbGVDYWNoZVxuICAgICAgICAgIH0pXG4gICAgICB9KSxcblxuICAgIC8vIGVycm9yXG4gICAgZXJyID0+IGxvYWRGaWxlc0VycihmaWxlLm5hbWUsIGVycilcbiAgKTtcbn1cblxuLyoqXG4gKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NGaWxlQ29udGVudFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7Y29udGVudCwgZmlsZUNhY2hlfSA9IGFjdGlvbi5wYXlsb2FkO1xuXG4gIGNvbnN0IHN0YXRlV2l0aFByb2dyZXNzID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtcbiAgICBmaWxlTmFtZTogY29udGVudC5maWxlTmFtZSxcbiAgICBwcm9ncmVzczoge3BlcmNlbnQ6IDEsIG1lc3NhZ2U6ICdwcm9jZXNzaW5nLi4uJ31cbiAgfSk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHN0YXRlV2l0aFByb2dyZXNzLFxuICAgIFBST0NFU1NfRklMRV9EQVRBKHtjb250ZW50LCBmaWxlQ2FjaGV9KS5iaW1hcChcbiAgICAgIHJlc3VsdCA9PiBsb2FkRmlsZVN0ZXBTdWNjZXNzKHtmaWxlTmFtZTogY29udGVudC5maWxlTmFtZSwgZmlsZUNhY2hlOiByZXN1bHR9KSxcbiAgICAgIGVyciA9PiBsb2FkRmlsZXNFcnIoY29udGVudC5maWxlTmFtZSwgZXJyKVxuICAgIClcbiAgKTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUHJvZ3Jlc3MocHJldlByb2dyZXNzID0ge30sIHByb2dyZXNzKSB7XG4gIC8vIFRoaXMgaGFwcGVucyB3aGVuIHJlY2VpdmluZyBxdWVyeSBtZXRhZGF0YSBvciBvdGhlciBjYXNlcyB3ZSBkb24ndFxuICAvLyBoYXZlIGFuIHVwZGF0ZSBmb3IgdGhlIHVzZXIuXG4gIGlmICghcHJvZ3Jlc3MgfHwgIXByb2dyZXNzLnBlcmNlbnQpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHBlcmNlbnQ6IHByb2dyZXNzLnBlcmNlbnRcbiAgfTtcbn1cblxuLyoqXG4gKiBnZXRzIGNhbGxlZCB3aXRoIHBheWxvYWQgPSBBc3luY0dlbmVyYXRvcjw/Pz8+XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbmV4dEZpbGVCYXRjaFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge1xuICAgIHBheWxvYWQ6IHtnZW4sIGZpbGVOYW1lLCBwcm9ncmVzcywgYWNjdW11bGF0ZWQsIG9uRmluaXNofVxuICB9OiBWaXNTdGF0ZUFjdGlvbnMuTmV4dEZpbGVCYXRjaFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qgc3RhdGVXaXRoUHJvZ3Jlc3MgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihzdGF0ZSwge1xuICAgIGZpbGVOYW1lLFxuICAgIHByb2dyZXNzOiBwYXJzZVByb2dyZXNzKHN0YXRlLmZpbGVMb2FkaW5nUHJvZ3Jlc3NbZmlsZU5hbWVdLCBwcm9ncmVzcylcbiAgfSk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKHN0YXRlV2l0aFByb2dyZXNzLCBbXG4gICAgLi4uKGdldEFwcGxpY2F0aW9uQ29uZmlnKCkudXNlQXJyb3dQcm9ncmVzc2l2ZUxvYWRpbmcgJiZcbiAgICBmaWxlTmFtZS5lbmRzV2l0aCgnYXJyb3cnKSAmJlxuICAgIGFjY3VtdWxhdGVkPy5kYXRhPy5sZW5ndGggPiAwXG4gICAgICA/IFtcbiAgICAgICAgICAvLyBTa2lwIGNvbXBhY3Rpb24gd2hpbGUgYmF0Y2hlcyBhcmUgc3RpbGwgYXJyaXZpbmcuIFRoZSBjb21wbGV0ZWRcbiAgICAgICAgICAvLyBmaWxlIGlzIGNvbXBhY3RlZCBvbmNlIGluIHByb2Nlc3NGaWxlQ29udGVudC5cbiAgICAgICAgICBQUk9DRVNTX0ZJTEVfREFUQSh7XG4gICAgICAgICAgICBjb250ZW50OiB7Li4uYWNjdW11bGF0ZWQsIHNraXBBcnJvd0NvbXBhY3Q6IHRydWV9LFxuICAgICAgICAgICAgZmlsZUNhY2hlOiBbXVxuICAgICAgICAgIH0pLmJpbWFwKFxuICAgICAgICAgICAgcmVzdWx0ID0+IGxvYWRGaWxlc1N1Y2Nlc3MocmVzdWx0KSxcbiAgICAgICAgICAgIGVyciA9PiBsb2FkRmlsZXNFcnIoZmlsZU5hbWUsIGVycilcbiAgICAgICAgICApXG4gICAgICAgIF1cbiAgICAgIDogW10pLFxuICAgIFVOV1JBUF9UQVNLKGdlbi5uZXh0KCkpLmJpbWFwKFxuICAgICAgKHt2YWx1ZSwgZG9uZX0pID0+IHtcbiAgICAgICAgcmV0dXJuIGRvbmVcbiAgICAgICAgICA/IG9uRmluaXNoKGFjY3VtdWxhdGVkKVxuICAgICAgICAgIDogbmV4dEZpbGVCYXRjaCh7XG4gICAgICAgICAgICAgIGdlbixcbiAgICAgICAgICAgICAgZmlsZU5hbWUsXG4gICAgICAgICAgICAgIHByb2dyZXNzOiB2YWx1ZS5wcm9ncmVzcyxcbiAgICAgICAgICAgICAgYWNjdW11bGF0ZWQ6IHZhbHVlLFxuICAgICAgICAgICAgICBvbkZpbmlzaFxuICAgICAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgZXJyID0+IGxvYWRGaWxlc0VycihmaWxlTmFtZSwgZXJyKVxuICAgIClcbiAgXSk7XG59O1xuXG4vKipcbiAqIFRyaWdnZXIgbG9hZGluZyBmaWxlIGVycm9yXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbG9hZEZpbGVzRXJyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZXJyb3IsIGZpbGVOYW1lfTogVmlzU3RhdGVBY3Rpb25zLkxvYWRGaWxlc0VyclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgLy8gdXBkYXRlIHVpIHdpdGggZXJyb3IgbWVzc2FnZVxuICBDb25zb2xlLndhcm4oZXJyb3IpO1xuICBpZiAoIXN0YXRlLmZpbGVMb2FkaW5nKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHtmaWxlc1RvTG9hZCwgb25GaW5pc2gsIGZpbGVDYWNoZX0gPSBzdGF0ZS5maWxlTG9hZGluZztcblxuICBjb25zdCBuZXh0U3RhdGUgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihzdGF0ZSwge1xuICAgIGZpbGVOYW1lLFxuICAgIHByb2dyZXNzOiB7ZXJyb3J9XG4gIH0pO1xuXG4gIC8vIGtpY2sgb2ZmIG5leHQgZmlsZSBvciBmaW5pc2hcbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIG5leHRTdGF0ZSxcbiAgICBERUxBWV9UQVNLKDIwMCkubWFwKGZpbGVzVG9Mb2FkLmxlbmd0aCA/IGxvYWROZXh0RmlsZSA6ICgpID0+IG9uRmluaXNoKGZpbGVDYWNoZSkpXG4gICk7XG59O1xuXG4vKipcbiAqIFdoZW4gc2VsZWN0IGRhdGFzZXQgZm9yIGV4cG9ydCwgYXBwbHkgY3B1IGZpbHRlciB0byBzZWxlY3RlZCBkYXRhc2V0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYXBwbHlDUFVGaWx0ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWR9OiBWaXNTdGF0ZUFjdGlvbnMuQXBwbHlDUFVGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIC8vIGFwcGx5IGNwdUZpbHRlclxuICBjb25zdCBkYXRhSWRzID0gdG9BcnJheShkYXRhSWQpO1xuXG4gIHJldHVybiBkYXRhSWRzLnJlZHVjZSgoYWNjdSwgaWQpID0+IGZpbHRlckRhdGFzZXRDUFUoYWNjdSwgaWQpLCBzdGF0ZSk7XG59O1xuXG4vKipcbiAqIFVzZXIgaW5wdXQgdG8gdXBkYXRlIHRoZSBpbmZvIG9mIHRoZSBtYXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRNYXBJbmZvVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRNYXBJbmZvVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIG1hcEluZm86IHtcbiAgICAuLi5zdGF0ZS5tYXBJbmZvLFxuICAgIC4uLmFjdGlvbi5pbmZvXG4gIH1cbn0pO1xuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gdXBkYXRlIEFsbCBsYXllciBkb21haW4gYW5kIGxheWVyIGRhdGEgb2Ygc3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZERlZmF1bHRMYXllcnMoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgZGF0YXNldHM6IERhdGFzZXRzXG4pOiB7c3RhdGU6IFZpc1N0YXRlOyBuZXdMYXllcnM6IExheWVyW119IHtcbiAgY29uc3QgZW1wdHk6IExheWVyW10gPSBbXTtcbiAgY29uc3QgZGVmYXVsdExheWVycyA9IE9iamVjdC52YWx1ZXMoZGF0YXNldHMpLnJlZHVjZSgoYWNjdTogTGF5ZXJbXSwgZGF0YXNldCkgPT4ge1xuICAgIGNvbnN0IGZvdW5kTGF5ZXJzID0gZmluZERlZmF1bHRMYXllcihkYXRhc2V0LCBzdGF0ZS5sYXllckNsYXNzZXMpO1xuICAgIHJldHVybiBmb3VuZExheWVycyAmJiBmb3VuZExheWVycy5sZW5ndGggPyBhY2N1LmNvbmNhdChmb3VuZExheWVycykgOiBhY2N1O1xuICB9LCBlbXB0eSk7XG5cbiAgcmV0dXJuIHtcbiAgICBzdGF0ZToge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBsYXllcnM6IFsuLi5zdGF0ZS5sYXllcnMsIC4uLmRlZmF1bHRMYXllcnNdLFxuICAgICAgbGF5ZXJPcmRlcjogW1xuICAgICAgICAvLyBwdXQgbmV3IGxheWVycyBvbiB0b3Agb2Ygb2xkIG9uZXMgaW4gcmV2ZXJzZVxuICAgICAgICAuLi5nZXRMYXllck9yZGVyRnJvbUxheWVycyhkZWZhdWx0TGF5ZXJzKSxcbiAgICAgICAgLi4uc3RhdGUubGF5ZXJPcmRlclxuICAgICAgXVxuICAgIH0sXG4gICAgbmV3TGF5ZXJzOiBkZWZhdWx0TGF5ZXJzXG4gIH07XG59XG5cbi8qKlxuICogaGVscGVyIGZ1bmN0aW9uIHRvIGZpbmQgZGVmYXVsdCB0b29sdGlwc1xuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gZGF0YXNldFxuICogQHJldHVybnMge09iamVjdH0gbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGREZWZhdWx0VG9vbHRpcHMoc3RhdGUsIGRhdGFzZXQpIHtcbiAgY29uc3QgdG9vbHRpcEZpZWxkcyA9IGZpbmRGaWVsZHNUb1Nob3coe1xuICAgIC4uLmRhdGFzZXQsXG4gICAgbWF4RGVmYXVsdFRvb2x0aXBzOiBzdGF0ZS5tYXhEZWZhdWx0VG9vbHRpcHNcbiAgfSk7XG4gIGNvbnN0IG1lcmdlZCA9IHtcbiAgICAuLi5zdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwLmNvbmZpZy5maWVsZHNUb1Nob3csXG4gICAgLi4udG9vbHRpcEZpZWxkc1xuICB9O1xuXG4gIHJldHVybiBzZXQoWydpbnRlcmFjdGlvbkNvbmZpZycsICd0b29sdGlwJywgJ2NvbmZpZycsICdmaWVsZHNUb1Nob3cnXSwgbWVyZ2VkLCBzdGF0ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsRmlsZUxvYWRpbmdQcm9ncmVzcyhmaWxlLCBpbmRleCkge1xuICBjb25zdCBmaWxlTmFtZSA9IGZpbGUubmFtZSB8fCBgVW50aXRsZWQgRmlsZSAke2luZGV4fWA7XG4gIHJldHVybiB7XG4gICAgW2ZpbGVOYW1lXToge1xuICAgICAgLy8gcGVyY2VudCBvZiBjdXJyZW50IGZpbGVcbiAgICAgIHBlcmNlbnQ6IDAsXG4gICAgICBtZXNzYWdlOiAnJyxcbiAgICAgIGZpbGVOYW1lLFxuICAgICAgZXJyb3I6IG51bGxcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihzdGF0ZSwge2ZpbGVOYW1lLCBwcm9ncmVzc30pIHtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICByZXR1cm4gcGlja18oJ2ZpbGVMb2FkaW5nUHJvZ3Jlc3MnKShwaWNrXyhmaWxlTmFtZSkobWVyZ2VfKHByb2dyZXNzKSkpKHN0YXRlKTtcbn1cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIHVwZGF0ZSBsYXllciBkb21haW5zIGZvciBhbiBhcnJheSBvZiBkYXRhc2V0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBkYXRhSWQ6IHN0cmluZyB8IHN0cmluZ1tdLFxuICB1cGRhdGVkRmlsdGVyPzogRmlsdGVyXG4pOiBTIHtcbiAgY29uc3QgZGF0YUlkcyA9IHR5cGVvZiBkYXRhSWQgPT09ICdzdHJpbmcnID8gW2RhdGFJZF0gOiBkYXRhSWQ7XG4gIGNvbnN0IG5ld0xheWVyczogTGF5ZXJbXSA9IFtdO1xuICBjb25zdCBuZXdMYXllckRhdGE6IGFueVtdID0gW107XG5cbiAgc3RhdGUubGF5ZXJzLmZvckVhY2goKG9sZExheWVyLCBpKSA9PiB7XG4gICAgaWYgKG9sZExheWVyLmNvbmZpZy5kYXRhSWQgJiYgZGF0YUlkcy5pbmNsdWRlcyhvbGRMYXllci5jb25maWcuZGF0YUlkKSkge1xuICAgICAgLy8gTm8gbmVlZCB0byByZWNhbGN1bGF0ZSBsYXllciBkb21haW4gaWYgZmlsdGVyIGhhcyBmaXhlZCBkb21haW5cbiAgICAgIGNvbnN0IG5ld0xheWVyID1cbiAgICAgICAgdXBkYXRlZEZpbHRlciAmJiB1cGRhdGVkRmlsdGVyLmZpeGVkRG9tYWluXG4gICAgICAgICAgPyBvbGRMYXllclxuICAgICAgICAgIDogb2xkTGF5ZXIudXBkYXRlTGF5ZXJEb21haW4oc3RhdGUuZGF0YXNldHMsIHVwZGF0ZWRGaWx0ZXIpO1xuXG4gICAgICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHN0YXRlLCBzdGF0ZS5sYXllckRhdGFbaV0pO1xuXG4gICAgICBuZXdMYXllcnMucHVzaChsYXllcik7XG4gICAgICBuZXdMYXllckRhdGEucHVzaChsYXllckRhdGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdMYXllcnMucHVzaChvbGRMYXllcik7XG4gICAgICBuZXdMYXllckRhdGEucHVzaChzdGF0ZS5sYXllckRhdGFbaV0pO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBuZXdMYXllcnMsXG4gICAgbGF5ZXJEYXRhOiBuZXdMYXllckRhdGFcbiAgfTtcblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVBbmltYXRpb25Eb21haW48UyBleHRlbmRzIFZpc1N0YXRlPihzdGF0ZTogUyk6IFMge1xuICAvLyBtZXJnZSBhbGwgYW5pbWF0YWJsZSBsYXllciBkb21haW4gYW5kIHVwZGF0ZSBnbG9iYWwgY29uZmlnXG4gIGNvbnN0IGFuaW1hdGFibGVMYXllcnMgPSBnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVycyhzdGF0ZS5sYXllcnMpO1xuXG4gIGlmICghYW5pbWF0YWJsZUxheWVycy5sZW5ndGgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgICBkb21haW46IG51bGwsXG4gICAgICAgIGlzQW5pbWF0aW5nOiBmYWxzZSxcbiAgICAgICAgdGltZVN0ZXBzOiBudWxsLFxuICAgICAgICBkZWZhdWx0VGltZUZvcm1hdDogbnVsbFxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBjb25zdCBsYXllckRvbWFpbnMgPSBhbmltYXRhYmxlTGF5ZXJzLm1hcChsID0+IGwuY29uZmlnLmFuaW1hdGlvbi5kb21haW4gfHwgW10pO1xuICAvLyBAdHMtaWdub3JlXG4gIGNvbnN0IG1lcmdlZERvbWFpbiA9IG1lcmdlVGltZURvbWFpbnMobGF5ZXJEb21haW5zKTtcbiAgY29uc3QgZGVmYXVsdFRpbWVGb3JtYXQgPSBnZXRUaW1lV2lkZ2V0VGl0bGVGb3JtYXR0ZXIobWVyZ2VkRG9tYWluKTtcblxuICAvLyBtZXJnZSB0aW1lU3RlcHNcbiAgbGV0IG1lcmdlZFRpbWVTdGVwczogbnVtYmVyW10gfCBudWxsID0gdW5pcTxudW1iZXI+KFxuICAgIGFuaW1hdGFibGVMYXllcnMucmVkdWNlKChhY2N1LCBsYXllcikgPT4ge1xuICAgICAgYWNjdS5wdXNoKC4uLihsYXllci5jb25maWcuYW5pbWF0aW9uLnRpbWVTdGVwcyB8fCBbXSkpO1xuICAgICAgcmV0dXJuIGFjY3U7XG4gICAgfSwgW10pXG4gICkuc29ydCgpO1xuXG4gIG1lcmdlZFRpbWVTdGVwcyA9IG1lcmdlZFRpbWVTdGVwcy5sZW5ndGggPyBtZXJnZWRUaW1lU3RlcHMgOiBudWxsO1xuXG4gIC8vIFRPRE86IGJldHRlciBoYW5kbGluZyBvZiBkdXJhdGlvbiBjYWxjdWxhdGlvblxuICBjb25zdCBkdXJhdGlvbiA9IG1lcmdlZFRpbWVTdGVwc1xuICAgID8gKEJBU0VfU1BFRUQgKiAoMTAwMCAvIEZQUykpIC8gbWVyZ2VkVGltZVN0ZXBzLmxlbmd0aCAvIChzdGF0ZS5hbmltYXRpb25Db25maWcuc3BlZWQgfHwgMSlcbiAgICA6IG51bGw7XG5cbiAgY29uc3QgbmV4dFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgZG9tYWluOiBtZXJnZWREb21haW4sXG4gICAgICBkZWZhdWx0VGltZUZvcm1hdCxcbiAgICAgIGR1cmF0aW9uLFxuICAgICAgdGltZVN0ZXBzOiBtZXJnZWRUaW1lU3RlcHNcbiAgICB9XG4gIH07XG5cbiAgLy8gcmVzZXQgY3VycmVudFRpbWUgYmFzZWQgb24gbmV3IGRvbWFpblxuICBjb25zdCBzeW5jZWRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzPy5maW5kKGYgPT4gKGYgYXMgVGltZVJhbmdlRmlsdGVyKS5zeW5jZWRXaXRoTGF5ZXJUaW1lbGluZSkgYXNcbiAgICB8IFRpbWVSYW5nZUZpbHRlclxuICAgIHwgdW5kZWZpbmVkO1xuXG4gIC8vIGlmIHN5bmNlZCBmaWx0ZXIgZXhpc3Qgd2VlIG5lZWQgdG8gbWVyZ2UgYW5pbWF0aW9uQ29uZmlnIGFuZCBmaWx0ZXIgZG9tYWluc1xuICAvLyBhbmQgdmFsaWRhdGUgdGhlIGN1cnJlbnQgdGltZSBhZ2FpbnN0IHRoZSBuZXcgbWVyZ2VkIGRvbWFpblxuICBjb25zdCBuZXdBbmltYXRpb25Eb21haW4gPSBzeW5jZWRGaWx0ZXJcbiAgICA/IG1lcmdlVGltZURvbWFpbnMoW21lcmdlZERvbWFpbiwgc3luY2VkRmlsdGVyLmRvbWFpbl0pXG4gICAgOiBtZXJnZWREb21haW47XG4gIGNvbnN0IGN1cnJlbnRUaW1lID0gaXNJblJhbmdlKHN0YXRlLmFuaW1hdGlvbkNvbmZpZy5jdXJyZW50VGltZSwgbmV3QW5pbWF0aW9uRG9tYWluKVxuICAgID8gc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmN1cnJlbnRUaW1lXG4gICAgOiBuZXdBbmltYXRpb25Eb21haW5bMF07XG5cbiAgaWYgKGN1cnJlbnRUaW1lICE9PSBzdGF0ZS5hbmltYXRpb25Db25maWcuY3VycmVudFRpbWUpIHtcbiAgICAvLyBpZiBjdXJyZW50VGltZSBjaGFuZ2VkLCBuZWVkIHRvIGNhbGwgYW5pbWF0aW9uVGltZVVwZGF0ZXIgdG8gcmUgY2FsbCBmb3JtYXRMYXllckRhdGFcbiAgICByZXR1cm4gc2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlcihuZXh0U3RhdGUsIHt2YWx1ZTogY3VycmVudFRpbWV9KTtcbiAgfVxuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbi8qKlxuICogVXBkYXRlIHRoZSBzdGF0dXMgb2YgdGhlIGVkaXRvclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEVkaXRvck1vZGVVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHttb2RlfTogVmlzU3RhdGVBY3Rpb25zLlNldEVkaXRvck1vZGVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHNrZXRjaGVzRW5hYmxlZCA9IGdldEFwcGxpY2F0aW9uQ29uZmlnKCkuZW5hYmxlRHJhd09uTWFwU2tldGNoZXM7XG4gIGlmIChcbiAgICAhc2tldGNoZXNFbmFibGVkICYmXG4gICAgKG1vZGUgPT09IEVESVRPUl9NT0RFUy5EUkFXX1BPSU5UIHx8IG1vZGUgPT09IEVESVRPUl9NT0RFUy5EUkFXX0xJTkVTVFJJTkcpXG4gICkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBtb2RlLFxuICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsXG4gICAgfVxuICB9O1xufTtcblxuLy8gY29uc3QgZmVhdHVyZVRvRmlsdGVyVmFsdWUgPSAoZmVhdHVyZSkgPT4gKHsuLi5mZWF0dXJlLCBpZDogZmVhdHVyZS5pZH0pO1xuLyoqXG4gKiBVcGRhdGUgZWRpdG9yIGZlYXR1cmVzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmVhdHVyZXNVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtmZWF0dXJlcyA9IFtdfTogVmlzU3RhdGVBY3Rpb25zLlNldEZlYXR1cmVzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBsYXN0RmVhdHVyZSA9IGZlYXR1cmVzLmxlbmd0aCAmJiBmZWF0dXJlc1tmZWF0dXJlcy5sZW5ndGggLSAxXTtcblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIC8vIG9ubHkgc2F2ZSBub25lIGZpbHRlciBmZWF0dXJlcyB0byBlZGl0b3JcbiAgICAgIGZlYXR1cmVzOiBmZWF0dXJlcy5maWx0ZXIoZiA9PiAhZ2V0RmlsdGVySWRJbkZlYXR1cmUoZikpLFxuICAgICAgbW9kZTpcbiAgICAgICAgbGFzdEZlYXR1cmUgJiYgbGFzdEZlYXR1cmUucHJvcGVydGllcz8uaXNDbG9zZWRcbiAgICAgICAgICA/IGxhc3RGZWF0dXJlLnByb3BlcnRpZXM/LnNoYXBlID09PSAnUmVjdGFuZ2xlJ1xuICAgICAgICAgICAgPyBzdGF0ZS5lZGl0b3IubW9kZVxuICAgICAgICAgICAgOiBFRElUT1JfTU9ERVMuRURJVFxuICAgICAgICAgIDogc3RhdGUuZWRpdG9yLm1vZGVcbiAgICB9XG4gIH07XG5cbiAgLy8gUmV0cmlldmUgZXhpc3RpbmcgZmVhdHVyZVxuICBjb25zdCB7c2VsZWN0ZWRGZWF0dXJlfSA9IHN0YXRlLmVkaXRvcjtcblxuICAvLyBJZiBubyBmZWF0dXJlIGlzIHNlbGVjdGVkIHdlIGNhbiBzaW1wbHkgcmV0dXJuIHNpbmNlIG5vIG9wZXJhdGlvbnNcbiAgaWYgKCFzZWxlY3RlZEZlYXR1cmUpIHtcbiAgICByZXR1cm4gbmV3U3RhdGU7XG4gIH1cblxuICAvLyBUT0RPOiBjaGVjayBpZiB0aGUgZmVhdHVyZSBoYXMgY2hhbmdlZFxuICBjb25zdCBmZWF0dXJlID0gZmVhdHVyZXMuZmluZChmID0+IGYuaWQgPT09IHNlbGVjdGVkRmVhdHVyZS5pZCk7XG5cbiAgLy8gaWYgZmVhdHVyZSBpcyBwYXJ0IG9mIGEgZmlsdGVyXG4gIGNvbnN0IGZpbHRlcklkID0gZmVhdHVyZSAmJiBnZXRGaWx0ZXJJZEluRmVhdHVyZShmZWF0dXJlKTtcbiAgaWYgKGZpbHRlcklkICYmIGZlYXR1cmUpIHtcbiAgICAvLyBhZGQgYmJveCBmb3IgcG9seWdvbiBmaWx0ZXIgdG8gc3BlZWQgdXAgZmlsdGVyaW5nXG4gICAgaWYgKGZlYXR1cmUucHJvcGVydGllcykgZmVhdHVyZS5wcm9wZXJ0aWVzLmJib3ggPSBiYm94KGZlYXR1cmUgYXMgdW5rbm93biBhcyBBbGxHZW9KU09OKTtcbiAgICBjb25zdCBmZWF0dXJlVmFsdWUgPSBmZWF0dXJlVG9GaWx0ZXJWYWx1ZShmZWF0dXJlLCBmaWx0ZXJJZCk7XG4gICAgY29uc3QgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZmlsID0+IGZpbC5pZCA9PT0gZmlsdGVySWQpO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgICBwcm9wOiAndmFsdWUnLFxuICAgICAgdmFsdWU6IGZlYXR1cmVWYWx1ZVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG5mdW5jdGlvbiBmaW5kRWRpdG9yRmVhdHVyZShzdGF0ZTogVmlzU3RhdGUsIGZlYXR1cmU/OiBGZWF0dXJlIHwgbnVsbCk6IEZlYXR1cmUgfCBudWxsIHtcbiAgaWYgKCFmZWF0dXJlPy5pZCkge1xuICAgIHJldHVybiBmZWF0dXJlIHx8IG51bGw7XG4gIH1cbiAgaWYgKHN0YXRlLmVkaXRvci5zZWxlY3RlZEZlYXR1cmU/LmlkID09PSBmZWF0dXJlLmlkKSB7XG4gICAgcmV0dXJuIHN0YXRlLmVkaXRvci5zZWxlY3RlZEZlYXR1cmU7XG4gIH1cbiAgY29uc3QgZnJvbUVkaXRvciA9IHN0YXRlLmVkaXRvci5mZWF0dXJlcy5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PT0gZmVhdHVyZS5pZCk7XG4gIGlmIChmcm9tRWRpdG9yKSB7XG4gICAgcmV0dXJuIGZyb21FZGl0b3I7XG4gIH1cbiAgY29uc3QgZmlsdGVySWQgPSBnZXRGaWx0ZXJJZEluRmVhdHVyZShmZWF0dXJlKTtcbiAgaWYgKGZpbHRlcklkKSB7XG4gICAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PT0gZmlsdGVySWQpO1xuICAgIGlmIChmaWx0ZXI/LnZhbHVlKSB7XG4gICAgICByZXR1cm4gZmlsdGVyLnZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmVhdHVyZTtcbn1cblxuLyoqXG4gKiBTZXQgdXNlci1mYWNpbmcgR2VvSlNPTiBwcm9wZXJ0aWVzIG9uIGEgc2tldGNoIG9yIHBvbHlnb24tZmlsdGVyIGZlYXR1cmUuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RWRpdG9yRmVhdHVyZVByb3BlcnRpZXNVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtmZWF0dXJlLCBwcm9wZXJ0aWVzfTogVmlzU3RhdGVBY3Rpb25zLlNldEVkaXRvckZlYXR1cmVQcm9wZXJ0aWVzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIWdldEFwcGxpY2F0aW9uQ29uZmlnKCkuZW5hYmxlRHJhd09uTWFwU2tldGNoZXMpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBzb3VyY2UgPSBmaW5kRWRpdG9yRmVhdHVyZShzdGF0ZSwgZmVhdHVyZSk7XG4gIGlmICghc291cmNlPy5pZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5leHRGZWF0dXJlID0gbWVyZ2VVc2VyRmVhdHVyZVByb3BlcnRpZXMoc291cmNlLCBwcm9wZXJ0aWVzKTtcbiAgY29uc3QgZmlsdGVySWQgPSBnZXRGaWx0ZXJJZEluRmVhdHVyZShuZXh0RmVhdHVyZSk7XG4gIGNvbnN0IG5leHRFZGl0b3IgPSB7XG4gICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgIGZlYXR1cmVzOiBmaWx0ZXJJZFxuICAgICAgPyBzdGF0ZS5lZGl0b3IuZmVhdHVyZXNcbiAgICAgIDogc3RhdGUuZWRpdG9yLmZlYXR1cmVzLm1hcChpdGVtID0+IChpdGVtLmlkID09PSBuZXh0RmVhdHVyZS5pZCA/IG5leHRGZWF0dXJlIDogaXRlbSkpLFxuICAgIHNlbGVjdGVkRmVhdHVyZTpcbiAgICAgIHN0YXRlLmVkaXRvci5zZWxlY3RlZEZlYXR1cmU/LmlkID09PSBuZXh0RmVhdHVyZS5pZFxuICAgICAgICA/IG5leHRGZWF0dXJlXG4gICAgICAgIDogc3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZVxuICB9O1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IG5leHRFZGl0b3JcbiAgfTtcblxuICBpZiAoIWZpbHRlcklkKSB7XG4gICAgcmV0dXJuIG5leHRTdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGZpbHRlcklkeCA9IHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGl0ZW0gPT4gaXRlbS5pZCA9PT0gZmlsdGVySWQpO1xuICBpZiAoZmlsdGVySWR4IDwgMCkge1xuICAgIHJldHVybiBuZXh0U3RhdGU7XG4gIH1cblxuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihuZXh0U3RhdGUsIHtcbiAgICBpZHg6IGZpbHRlcklkeCxcbiAgICBwcm9wOiAndmFsdWUnLFxuICAgIHZhbHVlOiBmZWF0dXJlVG9GaWx0ZXJWYWx1ZShuZXh0RmVhdHVyZSwgZmlsdGVySWQpXG4gIH0pO1xufVxuXG4vKipcbiAqIFNldCB0aGUgY3VycmVudCBzZWxlY3RlZCBmZWF0dXJlXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRTZWxlY3RlZEZlYXR1cmVVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtmZWF0dXJlLCBzZWxlY3Rpb25Db250ZXh0fTogVmlzU3RhdGVBY3Rpb25zLlNldFNlbGVjdGVkRmVhdHVyZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgLy8gYWRkIGJib3ggZm9yIHBvbHlnb24gZmlsdGVyIHRvIHNwZWVkIHVwIGZpbHRlcmluZ1xuICBsZXQgc2VsZWN0ZWRGZWF0dXJlID0gZmVhdHVyZTtcbiAgaWYgKGZlYXR1cmU/LnByb3BlcnRpZXMpIHtcbiAgICBzZWxlY3RlZEZlYXR1cmUgPSB7XG4gICAgICAuLi5mZWF0dXJlLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAuLi5mZWF0dXJlLnByb3BlcnRpZXMsXG4gICAgICAgIGJib3g6IGJib3goZmVhdHVyZSBhcyB1bmtub3duIGFzIEFsbEdlb0pTT04pXG4gICAgICB9XG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgc2VsZWN0ZWRGZWF0dXJlLFxuICAgICAgc2VsZWN0aW9uQ29udGV4dFxuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogRGVsZXRlIGV4aXN0aW5nIGZlYXR1cmUgZnJvbSBmaWx0ZXJzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZGVsZXRlRmVhdHVyZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2ZlYXR1cmV9OiBWaXNTdGF0ZUFjdGlvbnMuRGVsZXRlRmVhdHVyZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgaWYgKCFmZWF0dXJlKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBzZWxlY3RlZEZlYXR1cmU6IG51bGxcbiAgICB9XG4gIH07XG5cbiAgaWYgKGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpKSB7XG4gICAgY29uc3QgZmlsdGVySWR4ID0gbmV3U3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBnZXRGaWx0ZXJJZEluRmVhdHVyZShmZWF0dXJlKSk7XG5cbiAgICByZXR1cm4gZmlsdGVySWR4ID4gLTEgPyByZW1vdmVGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7aWR4OiBmaWx0ZXJJZHh9KSA6IG5ld1N0YXRlO1xuICB9XG5cbiAgLy8gbW9kaWZ5IGVkaXRvciBvYmplY3RcbiAgY29uc3QgbmV3RWRpdG9yID0ge1xuICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICBmZWF0dXJlczogc3RhdGUuZWRpdG9yLmZlYXR1cmVzLmZpbHRlcihmID0+IGYuaWQgIT09IGZlYXR1cmUuaWQpLFxuICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiBuZXdFZGl0b3JcbiAgfTtcbn1cblxuLyoqXG4gKiBUb2dnbGUgZmVhdHVyZSBhcyBsYXllciBmaWx0ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRQb2x5Z29uRmlsdGVyTGF5ZXJVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHBheWxvYWQ6IFZpc1N0YXRlQWN0aW9ucy5TZXRQb2x5Z29uRmlsdGVyTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtsYXllciwgZmVhdHVyZX0gPSBwYXlsb2FkO1xuICBjb25zdCBmaWx0ZXJJZCA9IGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpO1xuXG4gIC8vIGxldCBuZXdGaWx0ZXIgPSBudWxsO1xuICBsZXQgZmlsdGVySWR4O1xuICBsZXQgbmV3TGF5ZXJJZCA9IFtsYXllci5pZF07XG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuICAvLyBJZiBwb2x5Z29uIGZpbHRlciBhbHJlYWR5IGV4aXN0cywgd2UgbmVlZCB0byBmaW5kIG91dCBpZiB0aGUgY3VycmVudCBsYXllciBpcyBhbHJlYWR5IGluY2x1ZGVkXG4gIGlmIChmaWx0ZXJJZCkge1xuICAgIGZpbHRlcklkeCA9IHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gZi5pZCA9PT0gZmlsdGVySWQpO1xuXG4gICAgaWYgKCFzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0pIHtcbiAgICAgIC8vIHdoYXQgaWYgZmlsdGVyIGRvZXNuJ3QgZXhpc3Q/Li4uIG5vdCBwb3NzaWJsZS5cbiAgICAgIC8vIGJlY2F1c2UgZmVhdHVyZXMgaW4gdGhlIGVkaXRvciBpcyBwYXNzZWQgaW4gZnJvbSBmaWx0ZXJzIGFuZCBlZGl0b3JzLlxuICAgICAgLy8gYnV0IHdlIHdpbGwgbW92ZSB0aGlzIGZlYXR1cmUgYmFjayB0byBlZGl0b3IganVzdCBpbiBjYXNlXG4gICAgICBjb25zdCBub25lRmlsdGVyRmVhdHVyZSA9IHtcbiAgICAgICAgLi4uZmVhdHVyZSxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIC4uLmZlYXR1cmUucHJvcGVydGllcyxcbiAgICAgICAgICBmaWx0ZXJJZDogbnVsbFxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgZWRpdG9yOiB7XG4gICAgICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgICAgIGZlYXR1cmVzOiBbLi4uc3RhdGUuZWRpdG9yLmZlYXR1cmVzLCBub25lRmlsdGVyRmVhdHVyZV0sXG4gICAgICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBub25lRmlsdGVyRmVhdHVyZVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF07XG4gICAgY29uc3Qge2xheWVySWQgPSBbXX0gPSBmaWx0ZXI7XG4gICAgY29uc3QgaXNMYXllckluY2x1ZGVkID0gbGF5ZXJJZC5pbmNsdWRlcyhsYXllci5pZCk7XG5cbiAgICBuZXdMYXllcklkID0gaXNMYXllckluY2x1ZGVkXG4gICAgICA/IC8vIGlmIGxheWVyIGlzIGluY2x1ZGVkLCByZW1vdmUgaXRcbiAgICAgICAgbGF5ZXJJZC5maWx0ZXIobCA9PiBsICE9PSBsYXllci5pZClcbiAgICAgIDogWy4uLmxheWVySWQsIGxheWVyLmlkXTtcblxuICAgIC8vIExhc3QgbGF5ZXIgcmVtb3ZlZDogdHVybiB0aGUgZmlsdGVyIHBvbHlnb24gYmFjayBpbnRvIGEgc2tldGNoXG4gICAgaWYgKCFuZXdMYXllcklkLmxlbmd0aCkge1xuICAgICAgY29uc3Qgc2tldGNoRmVhdHVyZSA9IHRvU2tldGNoRmVhdHVyZShmZWF0dXJlKTtcbiAgICAgIGNvbnN0IHN0YXRlV2l0aG91dEZpbHRlciA9IHJlbW92ZUZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtpZHg6IGZpbHRlcklkeH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGVXaXRob3V0RmlsdGVyLFxuICAgICAgICBlZGl0b3I6IHtcbiAgICAgICAgICAuLi5zdGF0ZVdpdGhvdXRGaWx0ZXIuZWRpdG9yLFxuICAgICAgICAgIGZlYXR1cmVzOiBbLi4uc3RhdGVXaXRob3V0RmlsdGVyLmVkaXRvci5mZWF0dXJlcywgc2tldGNoRmVhdHVyZV0sXG4gICAgICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBza2V0Y2hGZWF0dXJlXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIGlmIHdlIGhhdmVuJ3QgY3JlYXRlIHRoZSBwb2x5Z29uIGZpbHRlciwgY3JlYXRlIGl0XG4gICAgY29uc3QgbmV3RmlsdGVyID0gZ2VuZXJhdGVQb2x5Z29uRmlsdGVyKFtdLCBmZWF0dXJlKTtcbiAgICBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmxlbmd0aDtcblxuICAgIC8vIGFkZCBmZWF0dXJlLCByZW1vdmUgZmVhdHVyZSBmcm9tIGVpZHRvclxuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBmaWx0ZXJzOiBbLi4uc3RhdGUuZmlsdGVycywgbmV3RmlsdGVyXSxcbiAgICAgIGVkaXRvcjoge1xuICAgICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAgIGZlYXR1cmVzOiBzdGF0ZS5lZGl0b3IuZmVhdHVyZXMuZmlsdGVyKGYgPT4gZi5pZCAhPT0gZmVhdHVyZS5pZCksXG4gICAgICAgIHNlbGVjdGVkRmVhdHVyZTogbmV3RmlsdGVyLnZhbHVlXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgcHJvcDogJ2xheWVySWQnLFxuICAgIHZhbHVlOiBuZXdMYXllcklkXG4gIH0pO1xufVxuXG4vKipcbiAqIEFwcGx5IHBvbHlnb24gZmlsdGVyIHRvIGFsbCB2aXNpYmxlIGxheWVyc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFBvbHlnb25GaWx0ZXJBbGxMYXllcnNVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHBheWxvYWQ6IFZpc1N0YXRlQWN0aW9ucy5TZXRQb2x5Z29uRmlsdGVyQWxsTGF5ZXJzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7ZmVhdHVyZX0gPSBwYXlsb2FkO1xuXG4gIGNvbnN0IG5ld0ZpbHRlciA9IGdlbmVyYXRlUG9seWdvbkZpbHRlcihbXSwgZmVhdHVyZSk7XG4gIGNvbnN0IGZpbHRlcklkeCA9IHN0YXRlLmZpbHRlcnMubGVuZ3RoO1xuXG4gIGNvbnN0IG5ld1N0YXRlOiBWaXNTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiBbLi4uc3RhdGUuZmlsdGVycywgbmV3RmlsdGVyXSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIGZlYXR1cmVzOiBzdGF0ZS5lZGl0b3IuZmVhdHVyZXMuZmlsdGVyKGYgPT4gZi5pZCAhPT0gZmVhdHVyZS5pZCksXG4gICAgICBzZWxlY3RlZEZlYXR1cmU6IG5ld0ZpbHRlci52YWx1ZSxcbiAgICAgIG1vZGU6IEVESVRPUl9NT0RFUy5FRElUXG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHZpc2libGVMYXllcklkcyA9IGdldChwYXlsb2FkLCAndmlzaWJsZUxheWVySWRzJyk7XG4gIGNvbnN0IGFsbExheWVySWRzID0gQXJyYXkuaXNBcnJheSh2aXNpYmxlTGF5ZXJJZHMpXG4gICAgPyB2aXNpYmxlTGF5ZXJJZHNcbiAgICA6IHN0YXRlLmxheWVycy5maWx0ZXIobCA9PiBsLmNvbmZpZy5pc1Zpc2libGUpLm1hcChsID0+IGwuaWQpO1xuXG4gIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgcHJvcDogJ2xheWVySWQnLFxuICAgIHZhbHVlOiBhbGxMYXllcklkc1xuICB9KTtcbn1cblxuLyoqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc29ydFRhYmxlQ29sdW1uVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBjb2x1bW4sIG1vZGV9OiBWaXNTdGF0ZUFjdGlvbnMuU29ydFRhYmxlQ29sdW1uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxldCBzb3J0TW9kZSA9IG1vZGU7XG4gIGlmICghc29ydE1vZGUpIHtcbiAgICBjb25zdCBjdXJyZW50TW9kZSA9IGdldChkYXRhc2V0LCBbJ3NvcnRDb2x1bW4nLCBjb2x1bW5dKTtcbiAgICAvLyBAdHMtaWdub3JlIC0gc2hvdWxkIGJlIGZpeGFibGUgaW4gYSBUUyBmaWxlXG4gICAgc29ydE1vZGUgPSBjdXJyZW50TW9kZVxuICAgICAgPyBPYmplY3Qua2V5cyhTT1JUX09SREVSKS5maW5kKG0gPT4gbSAhPT0gY3VycmVudE1vZGUpXG4gICAgICA6IFNPUlRfT1JERVIuQVNDRU5ESU5HO1xuICB9XG5cbiAgY29uc3Qgc29ydGVkID0gc29ydERhdGFzZXRCeUNvbHVtbihkYXRhc2V0LCBjb2x1bW4sIHNvcnRNb2RlKTtcbiAgcmV0dXJuIHNldChbJ2RhdGFzZXRzJywgZGF0YUlkXSwgc29ydGVkLCBzdGF0ZSk7XG59XG5cbi8qKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBpblRhYmxlQ29sdW1uVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBjb2x1bW59OiBWaXNTdGF0ZUFjdGlvbnMuUGluVGFibGVDb2x1bW5VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgbmV3RGF0YXNldCA9IHBpblRhYmxlQ29sdW1ucyhkYXRhc2V0LCBjb2x1bW4pO1xuXG4gIHJldHVybiBzZXQoWydkYXRhc2V0cycsIGRhdGFJZF0sIG5ld0RhdGFzZXQsIHN0YXRlKTtcbn1cblxuLyoqXG4gKiBDb3B5IGNvbHVtbiBjb250ZW50IGFzIHN0cmluZ3NcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb3B5VGFibGVDb2x1bW5VcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGNvbHVtbn06IFZpc1N0YXRlQWN0aW9ucy5Db3B5VGFibGVDb2x1bW5VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgZmllbGRJZHggPSBkYXRhc2V0LmZpZWxkcy5maW5kSW5kZXgoZiA9PiBmLm5hbWUgPT09IGNvbHVtbik7XG4gIGlmIChmaWVsZElkeCA8IDApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qge3R5cGV9ID0gZGF0YXNldC5maWVsZHNbZmllbGRJZHhdO1xuICBjb25zdCB0ZXh0ID0gZGF0YXNldC5kYXRhQ29udGFpbmVyXG4gICAgLm1hcChyb3cgPT4gcGFyc2VGaWVsZFZhbHVlKHJvdy52YWx1ZUF0KGZpZWxkSWR4KSwgdHlwZSksIHRydWUpXG4gICAgLmpvaW4oJ1xcbicpO1xuXG4gIGNvcHkodGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG4vKipcbiAqIFNldCBkaXNwbGF5IGZvcm1hdCBmcm9tIGNvbHVtbnMgZnJvbSB1c2VyIHNlbGVjdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldENvbHVtbkRpc3BsYXlGb3JtYXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGZvcm1hdHN9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0Q29sdW1uRGlzcGxheUZvcm1hdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsZXQgbmV3RmllbGRzID0gZGF0YXNldC5maWVsZHM7XG4gIE9iamVjdC5rZXlzKGZvcm1hdHMpLmZvckVhY2goY29sdW1uID0+IHtcbiAgICBjb25zdCBmaWVsZElkeCA9IGRhdGFzZXQuZmllbGRzLmZpbmRJbmRleChmID0+IGYubmFtZSA9PT0gY29sdW1uKTtcbiAgICBpZiAoZmllbGRJZHggPj0gMCkge1xuICAgICAgY29uc3QgZGlzcGxheUZvcm1hdCA9IGZvcm1hdHNbY29sdW1uXTtcbiAgICAgIGNvbnN0IGZpZWxkID0gbmV3RmllbGRzW2ZpZWxkSWR4XTtcbiAgICAgIG5ld0ZpZWxkcyA9IHN3YXBfKG1lcmdlXyh7ZGlzcGxheUZvcm1hdH0pKGZpZWxkKSBhcyB7aWQ6IHN0cmluZ30pKFxuICAgICAgICBuZXdGaWVsZHMgYXMge2lkOiBzdHJpbmd9W11cbiAgICAgICkgYXMgRmllbGRbXTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IG5ld0RhdGFzZXQgPSBjb3B5VGFibGVBbmRVcGRhdGUoZGF0YXNldCwge2ZpZWxkczogbmV3RmllbGRzIGFzIEZpZWxkW119KTtcbiAgbGV0IG5ld1N0YXRlID0gcGlja18oJ2RhdGFzZXRzJykobWVyZ2VfKHtbZGF0YUlkXTogbmV3RGF0YXNldH0pKShzdGF0ZSk7XG5cbiAgLy8gdXBkYXRlIGNvbG9yRmllbGQgZGlzcGxheUZvcm1hdFxuICBuZXdTdGF0ZSA9IHtcbiAgICAuLi5uZXdTdGF0ZSxcbiAgICBsYXllcnM6IG5ld1N0YXRlLmxheWVycy5tYXAobGF5ZXIgPT5cbiAgICAgIGxheWVyLmNvbmZpZz8uY29sb3JGaWVsZD8ubmFtZSAmJiBsYXllci5jb25maWcuY29sb3JGaWVsZC5uYW1lIGluIGZvcm1hdHNcbiAgICAgICAgPyBsYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgICAgICBjb2xvckZpZWxkOiB7XG4gICAgICAgICAgICAgIC4uLmxheWVyLmNvbmZpZy5jb2xvckZpZWxkLFxuICAgICAgICAgICAgICBkaXNwbGF5Rm9ybWF0OiBmb3JtYXRzW2xheWVyLmNvbmZpZy5jb2xvckZpZWxkLm5hbWVdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgOiBsYXllclxuICAgIClcbiAgfTtcblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbnR5cGUgTG9hZENvbHVtblN0YXRzVGFza1BheWxvYWQgPSB7XG4gIGRhdGFzZXQ6IFZpc1N0YXRlWydkYXRhc2V0cyddW3N0cmluZ107XG4gIGZpZWxkOiBGaWVsZDtcbn07XG5cbmZ1bmN0aW9uIGdldE1hcHBlZFZhbHVlKGZpbHRlclByb3BzPzogRmlsdGVyUHJvcHMgfCBudWxsKTogdW5rbm93bltdIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGZpbHRlclByb3BzICYmICdtYXBwZWRWYWx1ZScgaW4gZmlsdGVyUHJvcHMgJiYgQXJyYXkuaXNBcnJheShmaWx0ZXJQcm9wcy5tYXBwZWRWYWx1ZSkpIHtcbiAgICByZXR1cm4gZmlsdGVyUHJvcHMubWFwcGVkVmFsdWU7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24geWllbGRGb3JQYWludCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgMCk7XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZXF1ZXN0RGF0YXNldENvbHVtblN0YXRpc3RpY3Moe2RhdGFzZXQsIGZpZWxkfTogTG9hZENvbHVtblN0YXRzVGFza1BheWxvYWQpIHtcbiAgLy8gWWllbGQgc28gdGhlIGRhdGEgdGFibGUgYW5kIHBlci1jb2x1bW4gbG9hZGluZyBzcGlubmVycyBjYW4gcGFpbnQgZmlyc3QuXG4gIGF3YWl0IHlpZWxkRm9yUGFpbnQoKTtcbiAgY29uc3QgZmlsdGVyUHJvcHMgPSBmaWVsZC5maWx0ZXJQcm9wcyB8fCBkYXRhc2V0LmdldENvbHVtbkZpbHRlclByb3BzKGZpZWxkLm5hbWUpO1xuICBjb25zdCBtYXBwZWRWYWx1ZSA9IGdldE1hcHBlZFZhbHVlKGZpbHRlclByb3BzKTtcbiAgY29uc3QgdmFsdWVzID0gbWFwcGVkVmFsdWUgPz8gY29sbGVjdENvbHVtblZhbHVlcyhkYXRhc2V0LmRhdGFDb250YWluZXIsIGZpZWxkLmZpZWxkSWR4KTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZ2V0Q29sdW1uU3RhdGlzdGljcyh7XG4gICAgdmFsdWVzLFxuICAgIGZpZWxkVHlwZTogZmllbGQudHlwZVxuICB9KTtcblxuICByZXR1cm4ge3Jlc3VsdCwgZmlsdGVyUHJvcHN9O1xufVxuXG5jb25zdCBMT0FEX0NPTFVNTl9TVEFUU19UQVNLID0gVGFzay5mcm9tUHJvbWlzZShcbiAgcmVxdWVzdERhdGFzZXRDb2x1bW5TdGF0aXN0aWNzLFxuICAnTE9BRF9DT0xVTU5fU1RBVFNfVEFTSydcbik7XG5cbi8qKlxuICogU3RhcnQgbG9hZGluZyBjb2x1bW4gc3RhdGlzdGljcyBmb3Igb25lIG9yIG1vcmUgZmllbGRzLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRDb2x1bW5TdGF0c1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgZmllbGROYW1lfTogVmlzU3RhdGVBY3Rpb25zLkxvYWRDb2x1bW5TdGF0c1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZmllbGROYW1lc1RvTG9hZCA9IHRvQXJyYXkoZmllbGROYW1lKTtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGNvbnN0IGZpZWxkc1RvTG9hZCA9IGRhdGFzZXQ/LmZpZWxkcy5maWx0ZXIoZiA9PiBmaWVsZE5hbWVzVG9Mb2FkLmluY2x1ZGVzKGYubmFtZSkpO1xuICBpZiAoIWRhdGFzZXQgfHwgIWZpZWxkc1RvTG9hZC5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdGaWVsZHMgPSBkYXRhc2V0LmZpZWxkcy5tYXAoZmllbGQgPT5cbiAgICBmaWVsZE5hbWVzVG9Mb2FkLmluY2x1ZGVzKGZpZWxkLm5hbWUpID8gey4uLmZpZWxkLCBpc0xvYWRpbmdTdGF0czogdHJ1ZX0gOiBmaWVsZFxuICApO1xuICBjb25zdCBuZXdEYXRhc2V0ID0gY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHtmaWVsZHM6IG5ld0ZpZWxkc30pO1xuXG4gIGNvbnN0IHRhc2tzID0gZmllbGRzVG9Mb2FkLm1hcChmID0+XG4gICAgTE9BRF9DT0xVTU5fU1RBVFNfVEFTSyh7ZGF0YXNldDogbmV3RGF0YXNldCwgZmllbGQ6IGZ9KS5iaW1hcChcbiAgICAgICh7cmVzdWx0LCBmaWx0ZXJQcm9wc30pID0+IGxvYWRDb2x1bW5TdGF0c1N1Y2Nlc3MobmV3RGF0YXNldC5pZCwgZi5uYW1lLCByZXN1bHQsIGZpbHRlclByb3BzKSxcbiAgICAgIChlcnJvcjogRXJyb3IpID0+IGxvYWRDb2x1bW5TdGF0c0Vycm9yKG5ld0RhdGFzZXQuaWQsIGYubmFtZSwgZXJyb3IpXG4gICAgKVxuICApO1xuICBjb25zdCBuZXh0U3RhdGUgPSBwaWNrXygnZGF0YXNldHMnKShtZXJnZV8oe1tkYXRhSWRdOiBuZXdEYXRhc2V0fSkpKHN0YXRlKTtcblxuICByZXR1cm4gd2l0aFRhc2sobmV4dFN0YXRlLCB0YXNrcyk7XG59XG5cbi8qKlxuICogUGVyc2lzdCBsb2FkZWQgY29sdW1uIHN0YXRpc3RpY3Mgb24gdGhlIGZpZWxkLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRDb2x1bW5TdGF0c1N1Y2Nlc3NVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtyZXN1bHQsIGZpbHRlclByb3BzLCBkYXRhSWQsIGZpZWxkTmFtZX06IFZpc1N0YXRlQWN0aW9ucy5Mb2FkQ29sdW1uU3RhdHNTdWNjZXNzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgY29uc3QgZmllbGQgPSAoZGF0YXNldD8uZmllbGRzIHx8IFtdKS5maW5kKGYgPT4gZi5uYW1lID09PSBmaWVsZE5hbWUpO1xuICBpZiAoIWRhdGFzZXQgfHwgIWZpZWxkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RmlsdGVyUHJvcHMgPSB7XG4gICAgLi4uZmlsdGVyUHJvcHMsXG4gICAgY29sdW1uU3RhdHM6IHJlc3VsdFxuICB9O1xuICBjb25zdCBuZXdGaWVsZHMgPSBkYXRhc2V0LmZpZWxkcy5tYXAoZiA9PlxuICAgIGYubmFtZSA9PT0gZmllbGROYW1lID8gey4uLmYsIGZpbHRlclByb3BzOiBuZXdGaWx0ZXJQcm9wcywgaXNMb2FkaW5nU3RhdHM6IGZhbHNlfSA6IGZcbiAgKTtcbiAgY29uc3QgbmV3RGF0YXNldCA9IGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7ZmllbGRzOiBuZXdGaWVsZHN9KTtcbiAgcmV0dXJuIHBpY2tfKCdkYXRhc2V0cycpKG1lcmdlXyh7W2RhdGFJZF06IG5ld0RhdGFzZXR9KSkoc3RhdGUpO1xufVxuXG4vKipcbiAqIENsZWFyIGxvYWRpbmcgZmxhZyB3aGVuIGNvbHVtbiBzdGF0aXN0aWNzIGZhaWwuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZENvbHVtblN0YXRzRXJyb3JVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtlcnJvciwgZGF0YUlkLCBmaWVsZE5hbWV9OiBWaXNTdGF0ZUFjdGlvbnMuTG9hZENvbHVtblN0YXRzRXJyb3JVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIENvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgY29uc3QgZmllbGQgPSAoZGF0YXNldD8uZmllbGRzIHx8IFtdKS5maW5kKGYgPT4gZi5uYW1lID09PSBmaWVsZE5hbWUpO1xuICBpZiAoIWRhdGFzZXQgfHwgIWZpZWxkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG5ld0ZpZWxkcyA9IGRhdGFzZXQuZmllbGRzLm1hcChmID0+XG4gICAgZi5uYW1lID09PSBmaWVsZE5hbWUgPyB7Li4uZiwgaXNMb2FkaW5nU3RhdHM6IGZhbHNlfSA6IGZcbiAgKTtcbiAgY29uc3QgbmV3RGF0YXNldCA9IGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7ZmllbGRzOiBuZXdGaWVsZHN9KTtcbiAgcmV0dXJuIHBpY2tfKCdkYXRhc2V0cycpKG1lcmdlXyh7W2RhdGFJZF06IG5ld0RhdGFzZXR9KSkoc3RhdGUpO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBlZGl0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvZ2dsZUVkaXRvclZpc2liaWxpdHlVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlRWRpdG9yVmlzaWJpbGl0eVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIHZpc2libGU6ICFzdGF0ZS5lZGl0b3IudmlzaWJsZVxuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGVkaXRvciBza2V0Y2ggZmVhdHVyZXMgaW50byBhIEdlb0pTT04gZGF0YXNldC9sYXllciBhbmQgY2xlYXIgdGhlIHNrZXRjaGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydEVkaXRvckZlYXR1cmVzVG9MYXllclVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBfYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQ29udmVydEVkaXRvckZlYXR1cmVzVG9MYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgaWYgKCFnZXRBcHBsaWNhdGlvbkNvbmZpZygpLmVuYWJsZURyYXdPbk1hcFNrZXRjaGVzKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZmVhdHVyZXMgPSBzdGF0ZS5lZGl0b3IuZmVhdHVyZXM7XG4gIGlmICghZmVhdHVyZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGV0IGRhdGE7XG4gIHRyeSB7XG4gICAgZGF0YSA9IHByb2Nlc3NHZW9qc29uKGVkaXRvckZlYXR1cmVzVG9GZWF0dXJlQ29sbGVjdGlvbihmZWF0dXJlcykpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICAgIHJldHVybiB3aXRoVGFzayhcbiAgICAgIHN0YXRlLFxuICAgICAgQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTigpLm1hcCgoKSA9PlxuICAgICAgICBhZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgbWVzc2FnZTogYEZhaWxlZCB0byBjb252ZXJ0IGRyYXduIGdlb21ldHJ5IHRvIGEgbGF5ZXI6ICR7bWVzc2FnZX1gLFxuICAgICAgICAgICAgaWQ6ICdjb252ZXJ0LWVkaXRvci1mZWF0dXJlcydcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGNsZWFyZWRTdGF0ZTogVmlzU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBmZWF0dXJlczogW10sXG4gICAgICBzZWxlY3RlZEZlYXR1cmU6IG51bGwsXG4gICAgICBtb2RlOiBFRElUT1JfTU9ERVMuRURJVFxuICAgIH1cbiAgfTtcblxuICBjb25zdCBsYWJlbElkID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogOTApICsgMTA7XG5cbiAgcmV0dXJuIHVwZGF0ZVZpc0RhdGFVcGRhdGVyKGNsZWFyZWRTdGF0ZSwge1xuICAgIGRhdGFzZXRzOiB7XG4gICAgICBpbmZvOiB7XG4gICAgICAgIGlkOiBgZHJhd24tZ2VvbWV0cnktJHtnZW5lcmF0ZUhhc2hJZCg2KX1gLFxuICAgICAgICBsYWJlbDogYERyYXduIEdlb21ldHJ5ICR7bGFiZWxJZH1gXG4gICAgICB9LFxuICAgICAgZGF0YVxuICAgIH0sXG4gICAgb3B0aW9uczoge1xuICAgICAga2VlcEV4aXN0aW5nQ29uZmlnOiB0cnVlLFxuICAgICAgY2VudGVyTWFwOiBmYWxzZSxcbiAgICAgIGF1dG9DcmVhdGVMYXllcnM6IHRydWVcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIENvcHkgaW4tbWVtb3J5IHJvd3MgKG9yIGxvYWRlZCB2ZWN0b3ItdGlsZSBmZWF0dXJlcykgaW5zaWRlIHRoZSBzZWxlY3RlZFxuICogRHJhdyBvbiBNYXAgcG9seWdvbiBpbnRvIGEgbmV3IGRhdGFzZXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0RGF0YUZyb21GZWF0dXJlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7bGF5ZXJJZH06IFZpc1N0YXRlQWN0aW9ucy5FeHRyYWN0RGF0YUZyb21GZWF0dXJlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBmZWF0dXJlID0gc3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZTtcbiAgY29uc3QgbGF5ZXIgPSBzdGF0ZS5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IGxheWVySWQpO1xuICBjb25zdCBkYXRhSWQgPSBsYXllcj8uY29uZmlnLmRhdGFJZDtcbiAgbGV0IGRhdGFzZXQgPSBkYXRhSWQgPyBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdIDogbnVsbDtcblxuICBpZiAoIWxheWVyIHx8ICFkYXRhc2V0IHx8ICFkYXRhSWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyBHUFUgcmFuZ2UvdGltZSBmaWx0ZXJzIGFyZSBub3QgcmVmbGVjdGVkIGluIGZpbHRlcmVkSW5kZXg7IGV2YWx1YXRlIHRoZW0gb24gQ1BVXG4gIC8vIHRoZSBzYW1lIHdheSBleHBvcnQgZGF0YSBkb2VzLCB0aGVuIGNsaXAgdGhlIHJlc3VsdCB0byB0aGUgZHJhd2luZy5cbiAgaWYgKCFpc1ZlY3RvclRpbGVFeHRyYWN0TGF5ZXIobGF5ZXIpKSB7XG4gICAgc3RhdGUgPSBmaWx0ZXJEYXRhc2V0Q1BVKHN0YXRlLCBkYXRhSWQpO1xuICAgIGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICAgIGlmICghZGF0YXNldCkge1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cbiAgfVxuXG4gIGxldCBleHRyYWN0ZWQ7XG4gIHRyeSB7XG4gICAgZXh0cmFjdGVkID0gZXh0cmFjdFJvd3NJbnNpZGVGZWF0dXJlKHtsYXllciwgZGF0YXNldCwgZmVhdHVyZX0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICAgIHJldHVybiB3aXRoVGFzayhcbiAgICAgIHN0YXRlLFxuICAgICAgQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTigpLm1hcCgoKSA9PlxuICAgICAgICBhZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgbWVzc2FnZTogYEZhaWxlZCB0byBleHRyYWN0IGRhdGE6ICR7bWVzc2FnZX1gLFxuICAgICAgICAgICAgaWQ6ICdleHRyYWN0LWRhdGEtZnJvbS1mZWF0dXJlJ1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgaWYgKCFleHRyYWN0ZWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBpZiAoIWV4dHJhY3RlZC5yb3dDb3VudCkge1xuICAgIHJldHVybiB3aXRoVGFzayhcbiAgICAgIHN0YXRlLFxuICAgICAgQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTigpLm1hcCgoKSA9PlxuICAgICAgICBhZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgbWVzc2FnZTogaXNWZWN0b3JUaWxlRXh0cmFjdExheWVyKGxheWVyKVxuICAgICAgICAgICAgICA/ICdObyBsb2FkZWQgdmVjdG9yIHRpbGUgZmVhdHVyZXMgZm91bmQgaW5zaWRlIHRoZSBzZWxlY3RlZCBkcmF3aW5nJ1xuICAgICAgICAgICAgICA6ICdObyByb3dzIGZvdW5kIGluc2lkZSB0aGUgc2VsZWN0ZWQgZHJhd2luZycsXG4gICAgICAgICAgICBpZDogJ2V4dHJhY3QtZGF0YS1mcm9tLWZlYXR1cmUtZW1wdHknXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBsZXQgZGF0YTtcbiAgdHJ5IHtcbiAgICBkYXRhID1cbiAgICAgIGV4dHJhY3RlZC5raW5kID09PSAnZ2VvanNvbidcbiAgICAgICAgPyBwcm9jZXNzR2VvanNvbih7XG4gICAgICAgICAgICB0eXBlOiAnRmVhdHVyZUNvbGxlY3Rpb24nLFxuICAgICAgICAgICAgZmVhdHVyZXM6IGV4dHJhY3RlZC5mZWF0dXJlc1xuICAgICAgICAgIH0pXG4gICAgICAgIDoge2ZpZWxkczogZXh0cmFjdGVkLmZpZWxkcywgcm93czogZXh0cmFjdGVkLnJvd3N9O1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICAgIHJldHVybiB3aXRoVGFzayhcbiAgICAgIHN0YXRlLFxuICAgICAgQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTigpLm1hcCgoKSA9PlxuICAgICAgICBhZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgbWVzc2FnZTogYEZhaWxlZCB0byBleHRyYWN0IGRhdGE6ICR7bWVzc2FnZX1gLFxuICAgICAgICAgICAgaWQ6ICdleHRyYWN0LWRhdGEtZnJvbS1mZWF0dXJlJ1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZVZpc0RhdGFVcGRhdGVyKHN0YXRlLCB7XG4gICAgZGF0YXNldHM6IHtcbiAgICAgIGluZm86IHtcbiAgICAgICAgaWQ6IGBleHRyYWN0LSR7Z2VuZXJhdGVIYXNoSWQoNil9YCxcbiAgICAgICAgbGFiZWw6IGBFeHRyYWN0ZWQgJHtkYXRhc2V0LmxhYmVsfWBcbiAgICAgIH0sXG4gICAgICBkYXRhXG4gICAgfSxcbiAgICBvcHRpb25zOiB7XG4gICAgICBrZWVwRXhpc3RpbmdDb25maWc6IHRydWUsXG4gICAgICBjZW50ZXJNYXA6IGZhbHNlLFxuICAgICAgYXV0b0NyZWF0ZUxheWVyczogdHJ1ZVxuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR4LCBjb25maWd9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ0FjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBvbGRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG4gIGlmICghb2xkRmlsdGVyKSB7XG4gICAgQ29uc29sZS5lcnJvcihgZmlsdGVycy4ke2lkeH0gaXMgdW5kZWZpbmVkYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChvbGRGaWx0ZXIudHlwZSAhPT0gRklMVEVSX1RZUEVTLnRpbWVSYW5nZSkge1xuICAgIENvbnNvbGUuZXJyb3IoXG4gICAgICBgc2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZyBjYW4gb25seSBiZSBjYWxsZWQgdG8gdXBkYXRlIGEgdGltZSBmaWx0ZXIuIGNoZWNrIGZpbHRlci50eXBlID09PSAndGltZVJhbmdlJ2BcbiAgICApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHVwZGF0ZXMgPSBjaGVja1RpbWVDb25maWdBcmdzKGNvbmZpZyk7XG5cbiAgcmV0dXJuIHBpY2tfKCdmaWx0ZXJzJykoc3dhcF8obWVyZ2VfKHVwZGF0ZXMpKG9sZEZpbHRlcikpKShzdGF0ZSk7XG59XG5cbmZ1bmN0aW9uIGNoZWNrVGltZUNvbmZpZ0FyZ3MoY29uZmlnKSB7XG4gIGNvbnN0IGFsbG93ZWQgPSBbJ3RpbWVGb3JtYXQnLCAndGltZXpvbmUnXTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGNvbmZpZykucmVkdWNlKChhY2N1LCBwcm9wKSA9PiB7XG4gICAgaWYgKCFhbGxvd2VkLmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICBDb25zb2xlLmVycm9yKFxuICAgICAgICBgc2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnIHRha2VzIHRpbWVGb3JtYXQgYW5kL29yIHRpbWV6b25lIGFzIG9wdGlvbnMsIGZvdW5kICR7cHJvcH1gXG4gICAgICApO1xuICAgICAgcmV0dXJuIGFjY3U7XG4gICAgfVxuXG4gICAgLy8gaGVyZSB3ZSBhcmUgTk9UIGNoZWNraW5nIGlmIHRpbWV6b25lIG9yIHRpbWVGb3JtYXQgaW5wdXQgaXMgdmFsaWRcbiAgICBhY2N1W3Byb3BdID0gY29uZmlnW3Byb3BdO1xuICAgIHJldHVybiBhY2N1O1xuICB9LCB7fSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGVkaXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7Y29uZmlnfTogVmlzU3RhdGVBY3Rpb25zLlNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZ0FjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIWNvbmZpZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB1cGRhdGVzID0gY2hlY2tUaW1lQ29uZmlnQXJncyhjb25maWcpO1xuICByZXR1cm4gcGlja18oJ2FuaW1hdGlvbkNvbmZpZycpKG1lcmdlXyh1cGRhdGVzKSkoc3RhdGUpO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBlZGl0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZVVwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZUFjdGlvblxuKTogUyB7XG4gIGNvbnN0IHtldmVudCwgbGF5ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCB7aWQ6IGRlY2tnbExheWVySWQsIGNvdW50fSA9IGV2ZW50O1xuICBpZiAoIWxheWVyKSB7XG4gICAgQ29uc29sZS53YXJuKGBsYXllckZpbHRlcmVkSXRlbXMgbGF5ZXIgZG9lc250IGV4aXN0c2ApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAobGF5ZXIuZmlsdGVyZWRJdGVtQ291bnQ/LltkZWNrZ2xMYXllcklkXSA9PT0gY291bnQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsYXllci5maWx0ZXJlZEl0ZW1Db3VudCA9IHtcbiAgICAuLi5sYXllci5maWx0ZXJlZEl0ZW1Db3VudCxcbiAgICBbZGVja2dsTGF5ZXJJZF06IGNvdW50XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IHN3YXBfKGxheWVyKShzdGF0ZS5sYXllcnMpXG4gIH07XG59XG5cbi8qKlxuICogVXBkYXRlIFdNUyBmZWF0dXJlIGluZm8gYW5kIHBpbiB0b29sdGlwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3bXNGZWF0dXJlSW5mb1VwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLldNU0ZlYXR1cmVJbmZvQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2xheWVyLCBmZWF0dXJlSW5mbywgY29vcmRpbmF0ZX0gPSBhY3Rpb247XG4gIGlmICghbGF5ZXIpIHtcbiAgICBjb25zb2xlLndhcm4oYFdNUyBmZWF0dXJlIGluZm8gbGF5ZXIgZG9lc24ndCBleGlzdGApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIENyZWF0ZSBhIGNsaWNrZWQgb2JqZWN0IHNpbWlsYXIgdG8gbGF5ZXJDbGlja1VwZGF0ZXIgdG8gcGluIHRoZSB0b29sdGlwXG4gIGNvbnN0IGNsaWNrZWQgPSBmZWF0dXJlSW5mb1xuICAgID8ge1xuICAgICAgICBwaWNrZWQ6IHRydWUsXG4gICAgICAgIG9iamVjdDoge1xuICAgICAgICAgIHdtc0ZlYXR1cmVJbmZvOiBmZWF0dXJlSW5mb1xuICAgICAgICB9LFxuICAgICAgICBjb29yZGluYXRlOiBjb29yZGluYXRlIHx8IFswLCAwXSxcbiAgICAgICAgbGF5ZXI6IHtcbiAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgaWR4OiBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gbGF5ZXIuaWQpLFxuICAgICAgICAgICAgaWQ6IGxheWVyLmlkXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgOiBudWxsO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgY2xpY2tlZFxuICB9O1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LXN0YXRlbWVudHNcbmV4cG9ydCBmdW5jdGlvbiBzeW5jVGltZUZpbHRlcldpdGhMYXllclRpbWVsaW5lVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU3luY1RpbWVGaWx0ZXJXaXRoTGF5ZXJUaW1lbGluZUFjdGlvblxuKTogUyB7XG4gIGNvbnN0IHtpZHg6IGZpbHRlcklkeCwgZW5hYmxlID0gZmFsc2V9ID0gYWN0aW9uO1xuXG4gIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGxldCBuZXdGaWx0ZXIgPSBmaWx0ZXI7XG5cbiAgLy8gaWYgd2UgZW5hYmxlIHN5bmMgd2UgYXJlIGdvaW5nIHRvIG1lcmdlIGZpbHRlciBhbmQgYW5pbWF0aW9uQ29uZmlnIGRvbWFpbnMgYW5kIHN0b3JlIGludG8gZmlsdGVyLmRvbWFpblxuICBpZiAoZW5hYmxlKSB7XG4gICAgY29uc3QgYW5pbWF0YWJsZUxheWVycyA9IGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzKG5ld1N0YXRlLmxheWVycyk7XG4gICAgLy8gaWYgbm8gYW5pbWF0YWJsZUxheWVycyBhcmUgcHJlc2VudCB3ZSBzaW1wbHkgcmV0dXJuXG4gICAgaWYgKCFhbmltYXRhYmxlTGF5ZXJzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG5ld1N0YXRlO1xuICAgIH1cblxuICAgIGNvbnN0IGludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMgPSBnZXRJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzKGFuaW1hdGFibGVMYXllcnMpO1xuICAgIGNvbnN0IGhhc0ludGVydmFsQmFzZWRBbmltYXRpb25MYXllciA9IEJvb2xlYW4oaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycy5sZW5ndGgpO1xuXG4gICAgY29uc3QgbmV3RmlsdGVyRG9tYWluID0gbWVyZ2VUaW1lRG9tYWlucyhbZmlsdGVyLmRvbWFpbiwgbmV3U3RhdGUuYW5pbWF0aW9uQ29uZmlnLmRvbWFpbl0pO1xuXG4gICAgLy8gd2Ugb25seSB1cGRhdGUgYW5pbWF0aW9uV2luZG93IGlmIHdlIGhhdmUgaW50ZXJ2YWwgYmFzZWQgYW5pbWF0aW9uIGxheWVycyB3aXRoIGRlZmluZWQgaW50ZXJ2YWxzIGFuZCB0aGUgY3VycmVudCBmaWx0ZXIgYW5pbWF0aW9uIHdpbmRvdyBpcyBub3QgaW50ZXJ2YWxcbiAgICBpZiAoaGFzSW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVyKSB7XG4gICAgICBpZiAoZmlsdGVyLmFuaW1hdGlvbldpbmRvdyAhPT0gQU5JTUFUSU9OX1dJTkRPVy5pbnRlcnZhbCkge1xuICAgICAgICBuZXdTdGF0ZSA9IHNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgICAgICBpZDogZmlsdGVyLmlkLFxuICAgICAgICAgIGFuaW1hdGlvbldpbmRvdzogQU5JTUFUSU9OX1dJTkRPVy5pbnRlcnZhbFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgbmV3RmlsdGVyID0gbmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICAgICAgLy8gYWRqdXN0IHRpbWUgZmlsdGVyIGludGVydmFsXG4gICAgICBuZXdGaWx0ZXIgPSBhZGp1c3RUaW1lRmlsdGVySW50ZXJ2YWwobmV3U3RhdGUsIG5ld0ZpbHRlcik7XG5cbiAgICAgIC8vIHJlcGxhY2UgZmlsdGVyIGluIHN0YXRlIHdpdGggbmV3RmlsdGVyXG4gICAgICBuZXdTdGF0ZSA9IHtcbiAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICAgIGZpbHRlcnM6IHN3YXBfPEZpbHRlcj4obmV3RmlsdGVyKShuZXdTdGF0ZS5maWx0ZXJzKVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gICAgLy8gYWRqdXN0IHZhbHVlIGJhc2VkIG9uIG5ldyBkb21haW5cbiAgICBjb25zdCBuZXdGaWx0ZXJWYWx1ZSA9IGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4oXG4gICAgICBuZXdGaWx0ZXIuYW5pbWF0aW9uV2luZG93ID09PSBBTklNQVRJT05fV0lORE9XLmludGVydmFsXG4gICAgICAgID8gW25ld0ZpbHRlckRvbWFpblswXSwgbmV3RmlsdGVyRG9tYWluWzBdXVxuICAgICAgICA6IG5ld0ZpbHRlckRvbWFpbixcbiAgICAgIHsuLi5uZXdGaWx0ZXIsIGRvbWFpbjogbmV3RmlsdGVyRG9tYWlufVxuICAgICk7XG5cbiAgICBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIGlkeDogZmlsdGVySWR4LFxuICAgICAgcHJvcDogJ3ZhbHVlJyxcbiAgICAgIHZhbHVlOiBuZXdGaWx0ZXJWYWx1ZVxuICAgIH0pO1xuXG4gICAgbmV3RmlsdGVyID0ge1xuICAgICAgLi4uKG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXIpLFxuICAgICAgc3luY2VkV2l0aExheWVyVGltZWxpbmU6IHRydWVcbiAgICB9O1xuXG4gICAgLy8gcmVwbGFjZSBmaWx0ZXIgaW4gc3RhdGUgd2l0aCBuZXdGaWx0ZXJcbiAgICBuZXdTdGF0ZSA9IHtcbiAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKG5ld1N0YXRlLmZpbHRlcnMpXG4gICAgfTtcblxuICAgIG5ld1N0YXRlID0gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIGlkOiBuZXdGaWx0ZXIuaWQsXG4gICAgICBtb2RlOiBnZXRTeW5jQW5pbWF0aW9uTW9kZShuZXdGaWx0ZXIpXG4gICAgfSk7XG5cbiAgICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gICAgLy8gc2V0IHRoZSBhbmltYXRpb24gY29uZmlnIHZhbHVlIHRvIG1hdGNoIGZpbHRlciB2YWx1ZVxuICAgIHJldHVybiBzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgICB2YWx1ZTogbmV3RmlsdGVyLnZhbHVlW25ld0ZpbHRlci5zeW5jVGltZWxpbmVNb2RlXVxuICAgIH0pO1xuICB9XG5cbiAgLy8gc2V0IGRvbWFpbiBhbmQgc3RlcFxuICBuZXdGaWx0ZXIgPSB7XG4gICAgLi4uZmlsdGVyLFxuICAgIHN5bmNlZFdpdGhMYXllclRpbWVsaW5lOiBmYWxzZVxuICB9O1xuXG4gIC8vIHJlcGxhY2UgZmlsdGVyIGluIHN0YXRlIHdpdGggbmV3RmlsdGVyXG4gIG5ld1N0YXRlID0ge1xuICAgIC4uLm5ld1N0YXRlLFxuICAgIGZpbHRlcnM6IHN3YXBfPEZpbHRlcj4obmV3RmlsdGVyKShuZXdTdGF0ZS5maWx0ZXJzKVxuICB9O1xuXG4gIC8vIHJlc2V0IHN5bmMgdGltZWxpbmUgbW9kZVxuICBuZXdTdGF0ZSA9IHNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWQ6IG5ld0ZpbHRlci5pZCxcbiAgICBtb2RlOiBTWU5DX1RJTUVMSU5FX01PREVTLmVuZFxuICB9KTtcblxuICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gIC8vIHJlc2V0IGZpbHRlciB2YWx1ZVxuICBjb25zdCBuZXdGaWx0ZXJWYWx1ZSA9IGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4obmV3RmlsdGVyLmRvbWFpbiwgbmV3RmlsdGVyKTtcblxuICBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZHg6IGZpbHRlcklkeCxcbiAgICBwcm9wOiAndmFsdWUnLFxuICAgIHZhbHVlOiBuZXdGaWx0ZXJWYWx1ZVxuICB9KTtcblxuICBuZXdTdGF0ZSA9IHNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWQ6IG5ld0ZpbHRlci5pZCxcbiAgICBtb2RlOiBnZXRTeW5jQW5pbWF0aW9uTW9kZShuZXdGaWx0ZXIpXG4gIH0pO1xuXG4gIC8vIHJlc2V0IGFuaW1hdGlvbiBjb25maWcgY3VycmVudCB0aW1lIHRvXG4gIHJldHVybiBzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgdmFsdWU6IG5ld1N0YXRlLmFuaW1hdGlvbkNvbmZpZy5kb21haW4/LlswXSA/PyBudWxsXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLnNldFRpbWVGaWx0ZXJTeW5jVGltZWxpbmVNb2RlQWN0aW9uXG4pIHtcbiAgY29uc3Qge2lkOiBmaWx0ZXJJZCwgbW9kZTogc3luY1RpbWVsaW5lTW9kZX0gPSBhY3Rpb247XG5cbiAgY29uc3QgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBmaWx0ZXJJZCk7XG4gIGlmIChmaWx0ZXJJZHggPT09IC0xKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICBpZiAoIXZhbGlkYXRlU3luY0FuaW1hdGlvbk1vZGUoZmlsdGVyLCBzeW5jVGltZWxpbmVNb2RlKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0ZpbHRlciA9IHtcbiAgICAuLi5maWx0ZXIsXG4gICAgc3luY1RpbWVsaW5lTW9kZVxuICB9O1xuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IHN3YXBfPEZpbHRlcj4obmV3RmlsdGVyKShzdGF0ZS5maWx0ZXJzKVxuICB9O1xuXG4gIHJldHVybiBhZGp1c3RBbmltYXRpb25Db25maWdXaXRoRmlsdGVyKG5ld1N0YXRlLCBmaWx0ZXJJZHgpO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBzdGF0ZSBvZiB0aGUgbG9hZGluZyBpbmRpY2F0b3IuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIHZpc1N0YXRlXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgUGF5bG9hZCB3aXRoIGNoYW5nZSBvZiBudW1iZXIgb2YgYWN0aXZlIGxvYWRpbmcgYWN0aW9ucy5cbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0TG9hZGluZ0luZGljYXRvclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge3BheWxvYWQ6IHtjaGFuZ2V9fToge3BheWxvYWQ6IFNldExvYWRpbmdJbmRpY2F0b3JQYXlsb2FkfVxuKTogVmlzU3RhdGUgPT4ge1xuICBsZXQge2xvYWRpbmdJbmRpY2F0b3JWYWx1ZX0gPSBzdGF0ZTtcbiAgaWYgKCFsb2FkaW5nSW5kaWNhdG9yVmFsdWUpIHtcbiAgICBsb2FkaW5nSW5kaWNhdG9yVmFsdWUgPSAwO1xuICB9XG5cbiAgY29uc3QgbmV4dFZhbHVlID0gTWF0aC5tYXgobG9hZGluZ0luZGljYXRvclZhbHVlICsgY2hhbmdlLCAwKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsb2FkaW5nSW5kaWNhdG9yVmFsdWU6IG5leHRWYWx1ZSxcbiAgICAuLi4obmV4dFZhbHVlID09PSAwICYmIE9iamVjdC5rZXlzKHN0YXRlLmxvYWRpbmdQcm9ncmVzcyB8fCB7fSkubGVuZ3RoXG4gICAgICA/IHtsb2FkaW5nUHJvZ3Jlc3M6IHt9fVxuICAgICAgOiB7fSlcbiAgfTtcbn07XG5cbi8qKlxuICogUmVjb3JkIGRvd25sb2FkIHByb2dyZXNzIGZvciBhbiBpbi1mbGlnaHQgcmVtb3RlIGRhdGFzZXQgaHlkcmF0ZS5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZCwgcGVyY2VudH06IFZpc1N0YXRlQWN0aW9ucy5TZXRMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICgoc3RhdGUubG9hZGluZ0luZGljYXRvclZhbHVlIHx8IDApIDw9IDApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgbmV4dFBlcmNlbnQgPSBOdW1iZXIuaXNGaW5pdGUocGVyY2VudClcbiAgICA/IE1hdGgubWF4KDAsIE1hdGgubWluKDEwMCwgTWF0aC5yb3VuZChwZXJjZW50KSkpXG4gICAgOiAwO1xuICBpZiAoc3RhdGUubG9hZGluZ1Byb2dyZXNzPy5baWRdID09PSBuZXh0UGVyY2VudCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxvYWRpbmdQcm9ncmVzczoge1xuICAgICAgLi4uc3RhdGUubG9hZGluZ1Byb2dyZXNzLFxuICAgICAgW2lkXTogbmV4dFBlcmNlbnRcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihzdGF0ZTogUywgZmlsdGVySWR4OiBudW1iZXIpOiBTIHtcbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdO1xuICBpZiAoKGZpbHRlciBhcyBUaW1lUmFuZ2VGaWx0ZXIpLnN5bmNlZFdpdGhMYXllclRpbWVsaW5lKSB7XG4gICAgY29uc3QgdGltZWxpbmVWYWx1ZSA9IGdldFRpbWVsaW5lVmFsdWVGcm9tRmlsdGVyKGZpbHRlcik7XG4gICAgY29uc3QgdmFsdWUgPSBzdGF0ZS5hbmltYXRpb25Db25maWcudGltZVN0ZXBzXG4gICAgICA/IHNuYXBUb01hcmtzKHRpbWVsaW5lVmFsdWUsIHN0YXRlLmFuaW1hdGlvbkNvbmZpZy50aW1lU3RlcHMpXG4gICAgICA6IHRpbWVsaW5lVmFsdWU7XG4gICAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIoc3RhdGUsIHt2YWx1ZX0pO1xuICB9XG4gIHJldHVybiBzdGF0ZTtcbn1cblxuZnVuY3Rpb24gZ2V0VGltZWxpbmVWYWx1ZUZyb21GaWx0ZXIoZmlsdGVyKSB7XG4gIHJldHVybiBmaWx0ZXIudmFsdWVbZmlsdGVyLnN5bmNUaW1lbGluZU1vZGVdO1xufVxuXG5mdW5jdGlvbiBnZXRTeW5jQW5pbWF0aW9uTW9kZShmaWx0ZXI6IFRpbWVSYW5nZUZpbHRlcikge1xuICBpZiAoZmlsdGVyLmFuaW1hdGlvbldpbmRvdyA9PT0gQU5JTUFUSU9OX1dJTkRPVy5mcmVlKSB7XG4gICAgcmV0dXJuIGZpbHRlci5zeW5jVGltZWxpbmVNb2RlID8/IFNZTkNfVElNRUxJTkVfTU9ERVMuZW5kO1xuICB9XG5cbiAgcmV0dXJuIFNZTkNfVElNRUxJTkVfTU9ERVMuZW5kO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN5bmNBbmltYXRpb25Nb2RlKGZpbHRlcjogVGltZVJhbmdlRmlsdGVyLCBuZXdNb2RlOiBudW1iZXIpIHtcbiAgcmV0dXJuICEoXG4gICAgZmlsdGVyLmFuaW1hdGlvbldpbmRvdyAhPT0gQU5JTUFUSU9OX1dJTkRPVy5mcmVlICYmIG5ld01vZGUgPT09IFNZTkNfVElNRUxJTkVfTU9ERVMuc3RhcnRcbiAgKTtcbn1cblxuZnVuY3Rpb24gYWRqdXN0VGltZUZpbHRlckludGVydmFsKHN0YXRlLCBmaWx0ZXIpIHtcbiAgY29uc3QgaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyA9IGdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMoc3RhdGUubGF5ZXJzKTtcblxuICBsZXQgaW50ZXJ2YWw6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBpZiAoaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycy5sZW5ndGggPiAwKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IGludGVydmFsSW5kZXggPSBpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLnJlZHVjZSgoY3VycmVudEluZGV4LCBsKSA9PiB7XG4gICAgICBpZiAobC5tZXRhLnRhcmdldFRpbWVJbnRlcnZhbCkge1xuICAgICAgICBjb25zdCBuZXdJbmRleCA9IFRJTUVfSU5URVJWQUxTX09SREVSRUQuZmluZEluZGV4KGkgPT4gaSA9PT0gbC5tZXRhLnRhcmdldFRpbWVJbnRlcnZhbCk7XG4gICAgICAgIHJldHVybiBuZXdJbmRleCA+IC0xICYmIG5ld0luZGV4IDwgY3VycmVudEluZGV4ID8gbmV3SW5kZXggOiBjdXJyZW50SW5kZXg7XG4gICAgICB9XG4gICAgfSwgVElNRV9JTlRFUlZBTFNfT1JERVJFRC5sZW5ndGggLSAxKTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgbGF5ZXJUaW1lSW50ZXJ2YWwgPSBUSU1FX0lOVEVSVkFMU19PUkRFUkVEW2ludGVydmFsSW5kZXhdO1xuICAgIGludGVydmFsID0gTGF5ZXJUb0ZpbHRlclRpbWVJbnRlcnZhbFtsYXllclRpbWVJbnRlcnZhbF07XG4gIH1cblxuICBpZiAoIWludGVydmFsKSB7XG4gICAgcmV0dXJuIGZpbHRlcjtcbiAgfVxuXG4gIC8vIGFkanVzdCBmaWx0ZXJcbiAgY29uc3QgdGltZUZvcm1hdCA9IGdldERlZmF1bHRUaW1lRm9ybWF0KGludGVydmFsKTtcbiAgY29uc3QgdXBkYXRlZFBsb3RUeXBlID0gey4uLmZpbHRlci5wbG90VHlwZSwgaW50ZXJ2YWwsIHRpbWVGb3JtYXR9O1xuICBjb25zdCBuZXdGaWx0ZXIgPSB1cGRhdGVUaW1lRmlsdGVyUGxvdFR5cGUoZmlsdGVyLCB1cGRhdGVkUGxvdFR5cGUsIHN0YXRlLmRhdGFzZXRzKTtcbiAgcmV0dXJuIGFkanVzdFZhbHVlVG9BbmltYXRpb25XaW5kb3coc3RhdGUsIG5ld0ZpbHRlcik7XG59XG5cbi8vIEZpbmQgZGF0YUlkIGZyb20gYSBzYXZlZCB2aXNTdGF0ZSBwcm9wZXJ0eTpcbi8vIGxheWVycywgZmlsdGVycywgaW50ZXJhY3Rpb25zLCBsYXllckJsZW5kaW5nLCBvdmVybGF5QmxlbmRpbmcsIHNwbGl0TWFwcywgYW5pbWF0aW9uQ29uZmlnLCBlZGl0b3Jcbi8vIHJlcGxhY2UgaXQgd2l0aCBhbm90aGVyIGRhdGFJZFxuZnVuY3Rpb24gZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzKHZhbHVlOiBhbnksIGRhdGFJZDogc3RyaW5nLCBkYXRhSWRUb1JlcGxhY2U6IHN0cmluZykge1xuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIC8vIGZvciBsYXllcnMsIGZpbHRlcnMsIGNhbGwgZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzIG9uIGVhY2ggaXRlbSBpbiBhcnJheVxuICAgIGNvbnN0IHJlcGxhY2VkID0gdmFsdWVcbiAgICAgIC5tYXAodiA9PiBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHModiwgZGF0YUlkLCBkYXRhSWRUb1JlcGxhY2UpKVxuICAgICAgLmZpbHRlcihkID0+IGQpO1xuICAgIHJldHVybiByZXBsYWNlZC5sZW5ndGggPyByZXBsYWNlZCA6IG51bGw7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZS5kYXRhSWQgPT09ICdzdHJpbmcnICYmIHZhbHVlLmRhdGFJZCA9PT0gZGF0YUlkKSB7XG4gICAgLy8gb3RoZXJzXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnZhbHVlLFxuICAgICAgZGF0YUlkOiBkYXRhSWRUb1JlcGxhY2VcbiAgICB9O1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUuZGF0YUlkKSAmJiB2YWx1ZS5kYXRhSWQuaW5jbHVkZXMoZGF0YUlkKSkge1xuICAgIC8vIGZpbHRlclxuICAgIHJldHVybiB7XG4gICAgICAuLi52YWx1ZSxcbiAgICAgIGRhdGFJZDogdmFsdWUuZGF0YUlkLm1hcChkID0+IChkID09PSBkYXRhSWQgPyBkYXRhSWRUb1JlcGxhY2UgOiBkKSlcbiAgICB9O1xuICB9IGVsc2UgaWYgKHZhbHVlLmNvbmZpZz8uZGF0YUlkICYmIHZhbHVlLmNvbmZpZz8uZGF0YUlkID09PSBkYXRhSWQpIHtcbiAgICAvLyBsYXllclxuICAgIHJldHVybiB7XG4gICAgICAuLi52YWx1ZSxcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICAuLi52YWx1ZS5jb25maWcsXG4gICAgICAgIGRhdGFJZDogZGF0YUlkVG9SZXBsYWNlXG4gICAgICB9XG4gICAgfTtcbiAgfSBlbHNlIGlmIChpc09iamVjdCh2YWx1ZSkgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBkYXRhSWQpKSB7XG4gICAgLy8gZm9yIHZhbHVlIHNhdmVkIGFzIHtbZGF0YUlkXTogey4uLn19XG4gICAgcmV0dXJuIHtbZGF0YUlkVG9SZXBsYWNlXTogdmFsdWVbZGF0YUlkXX07XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLy8gRmluZCBkYXRhc2V0SWRzIGRlcml2ZWQgYSBzYXZlZCB2aXNTdGF0ZSBQcm9wZXJ0eTtcbmZ1bmN0aW9uIGZpbmRDaGlsZERhdGFzZXRJZHModmFsdWUpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gZm9yIGxheWVycywgZmlsdGVycywgY2FsbCBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMgb24gZWFjaCBpdGVtIGluIGFycmF5XG4gICAgY29uc3QgY2hpbGREYXRhSWRzID0gdmFsdWUubWFwKGZpbmRDaGlsZERhdGFzZXRJZHMpLmZpbHRlcihkID0+IGQpO1xuICAgIHJldHVybiBjaGlsZERhdGFJZHMubGVuZ3RoID8gY2hpbGREYXRhSWRzIDogbnVsbDtcbiAgfVxuXG4gIC8vIGNoaWxkIGRhdGEgaWQgdXN1YWxseSBzdG9yZXMgaW4gdGhlIGRlcml2ZWQgZGF0YXNldCBpbmZvXG4gIHJldHVybiB2YWx1ZT8ubmV3RGF0YXNldD8uaW5mby5pZCB8fCBudWxsO1xufVxuXG4vLyBtb3ZlZCB1bm1lcmdlZCBsYXllcnMsIGZpbHRlcnMsIGludGVyYWN0aW9uc1xuZnVuY3Rpb24gbW92ZVZhbHVlVG9CZU1lcmdlZChzdGF0ZSwgcHJvcFZhbHVlcywge3Byb3AsIHRvTWVyZ2VQcm9wLCBzYXZlVW5tZXJnZWR9KSB7XG4gIC8vIHJlbW92ZSBwcm9wIHZhbHVlIGZyb20gc3RhdGVcbiAgLy8gVE9ETzogc2hvdWxkIHdlIGFkZCByZW1vdmUgdXBkYXRlciB0byBtZXJnZXIgYXMgd2VsbD9cbiAgaWYgKCFwcm9wVmFsdWVzKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHN0YXRlUmVtb3ZlZCA9XG4gICAgcHJvcCA9PT0gJ2xheWVycydcbiAgICAgID8gcHJvcFZhbHVlcy5yZWR1Y2UoKGFjY3UsIHByb3BWYWx1ZSkgPT4gcmVtb3ZlTGF5ZXJVcGRhdGVyKGFjY3UsIHtpZDogcHJvcFZhbHVlLmlkfSksIHN0YXRlKVxuICAgICAgOiBBcnJheS5pc0FycmF5KHN0YXRlW3Byb3BdKVxuICAgICAgPyB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgW3Byb3BdOiBzdGF0ZVtwcm9wXS5maWx0ZXIocCA9PiAhcHJvcFZhbHVlcy5maW5kKHByb3BWYWx1ZSA9PiBwLmlkID09PSBwcm9wVmFsdWUuaWQpKVxuICAgICAgICB9XG4gICAgICA6IC8vIGlmIG5vdCBhcnJheSwgd2Ugd29uJ3QgcmVtb3ZlIGl0LCByZW1vdmUgZGF0YXNldCBzaG91bGQgaGFuZGxlIGl0XG4gICAgICAgIHN0YXRlO1xuXG4gIC8vIG1vdmUgdG8gc3RhdGVUb0JlTWVyZ2VkXG4gIGNvbnN0IHRvQmVNZXJnZWQgPSB7XG4gICAgW3RvTWVyZ2VQcm9wXTogc2F2ZVVubWVyZ2VkXG4gICAgICA/IC8vIGNhbGwgbWVyZ2Ugc2F2ZVVubWVyZ2VkIG1ldGhvZFxuICAgICAgICBzYXZlVW5tZXJnZWQoc3RhdGVSZW1vdmVkLCBwcm9wVmFsdWVzKVxuICAgICAgOiAvLyBpZiB0b01lcmdlUHJvcCBpcyBhcmFheSwgYXBwZW5kIHRvIGl0XG4gICAgICBBcnJheS5pc0FycmF5KHN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF0pXG4gICAgICA/IFsuLi5zdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdLCAuLi5wcm9wVmFsdWVzXVxuICAgICAgOiAvLyBzYXZlIHByb3BWYWx1ZXMgdG8gdG9NZXJnZVxuICAgICAgaXNPYmplY3Qoc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXSlcbiAgICAgID8ge1xuICAgICAgICAgIC4uLnN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF0sXG4gICAgICAgICAgLi4ucHJvcFZhbHVlc1xuICAgICAgICB9XG4gICAgICA6IHN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlUmVtb3ZlZCxcbiAgICAuLi50b0JlTWVyZ2VkXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VEYXRhc2V0QW5kRGVwczxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAgZGF0YUlkOiBzdHJpbmcsXG4gIGRhdGFJZFRvVXNlOiBzdHJpbmdcbik6IFQge1xuICByZXR1cm4gY29tcG9zZV88VD4oW1xuICAgIGFwcGx5XyhyZXBsYWNlRGF0YXNldERlcHNJblN0YXRlLCB7ZGF0YUlkLCBkYXRhSWRUb1VzZX0pLFxuICAgIGFwcGx5XyhyZW1vdmVEYXRhc2V0VXBkYXRlciwge2RhdGFJZH0pXG4gIF0pKHN0YXRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVTdGF0ZUZvckRhdGFzZXRSZXBsYWNlPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgZGF0YUlkVG9Vc2U6IHN0cmluZ1xuKTogVCB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRTdGF0ZSA9IHNlcmlhbGl6ZVZpc1N0YXRlKHN0YXRlLCBzdGF0ZS5zY2hlbWEpO1xuICBjb25zdCBuZXh0U3RhdGUgPSByZXBsYWNlRGF0YXNldEFuZERlcHMoc3RhdGUsIGRhdGFJZCwgZGF0YUlkVG9Vc2UpO1xuICAvLyBtYWtlIGEgY29weSBvZiBsYXllck9yZGVyLCBiZWNhdXNlIGxheWVyIGlkIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIGl0IGJ5IGNhbGxpbmcgcmVtb3ZlTGF5ZXJVcGRhdGVyXG4gIGNvbnN0IHByZXNlcnZlTGF5ZXJPcmRlciA9IFsuLi5zdGF0ZS5sYXllck9yZGVyXTtcblxuICAvLyBwcmVzZXJ2ZSBkYXRhc2V0IG9yZGVyXG4gIG5leHRTdGF0ZS5wcmVzZXJ2ZURhdGFzZXRPcmRlciA9IE9iamVjdC5rZXlzKHN0YXRlLmRhdGFzZXRzKS5tYXAoZCA9PlxuICAgIGQgPT09IGRhdGFJZCA/IGRhdGFJZFRvVXNlIDogZFxuICApO1xuXG4gIC8vIHByZXNlcnZlTGF5ZXJPcmRlclxuICBpZiAobmV4dFN0YXRlLmxheWVyVG9CZU1lcmdlZD8ubGVuZ3RoKSB7XG4gICAgLy8gY29weSBzcGxpdCBtYXBzIHRvIGJlIG1lcmdlZCwgYmVjYXVzZSBpdCB3aWxsIGJlIHJlc2V0IGluIHJlbW92ZSBsYXllci5cbiAgICAvLyBLZWVwIHRoZSBvbmVzIG9mIGEgZGF0YXNldCByZXBsYWNlZCBhIG1vbWVudCBlYXJsaWVyIGFuZCBub3QgbWVyZ2VkIGJhY2sgeWV0OlxuICAgIC8vIGl0cyBsYXllcnMgYXJlIG5vIGxvbmdlciBpbiB0aGUgY3VycmVudCBzcGxpdCBtYXBzLlxuICAgIG5leHRTdGF0ZS5zcGxpdE1hcHNUb0JlTWVyZ2VkID0gY29tYmluZVNwbGl0TWFwc0J5SW5kZXgoXG4gICAgICBzdGF0ZS5zcGxpdE1hcHNUb0JlTWVyZ2VkLFxuICAgICAgc2VyaWFsaXplZFN0YXRlPy5zcGxpdE1hcHMgPz8gW11cbiAgICApO1xuICAgIG5leHRTdGF0ZS5sYXllck9yZGVyID0gWy4uLnByZXNlcnZlTGF5ZXJPcmRlcl07XG4gIH1cblxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG4vKipcbiAqIFRoZSBvcmRlciB0byBwcmVzZXJ2ZSBmb3IgdGhlIGl0ZW1zIHRoYXQgd2lsbCBiZSBtZXJnZWQgYmFjay5cbiAqXG4gKiBgaWRzYCBjb21lcyBmcm9tIHRoZSBzZXJpYWxpemVkIHN0YXRlLCBzbyBpdCBsaXN0cyBldmVyeXRoaW5nIGJ1dCB0aGUgaXRlbXNcbiAqIGFub3RoZXIgZGF0YXNldCdzIHJlcGxhY2VtZW50IHBhcmtlZCBhIG1vbWVudCBhZ286IGFuIGFwcCByZWZyZXNoaW5nIHNldmVyYWxcbiAqIGRhdGFzZXRzIGluIGEgcm93IHByZXBhcmVzIHRoZSBzZWNvbmQgcmVwbGFjZW1lbnQgYmVmb3JlIHRoZSBmaXJzdCBvbmUnc1xuICogaXRlbXMgaGF2ZSBtZXJnZWQgYmFjay4gV3JpdGluZyBgaWRzYCBhcyBpdCBpcyB3b3VsZCBkcm9wIHRob3NlLCBhbmRcbiAqIGBpbnNlcnRJdGVtQmFzZWRPblByZXNlcnZlZE9yZGVyYCBwdXRzIGFuIGl0ZW0gaXQgY2Fubm90IHBsYWNlIGF0IHRoZSBmcm9udCDigJRcbiAqIHNvIHRoZXkgd291bGQgY29tZSBiYWNrIHJldmVyc2VkLiBXaGVyZSB0aGV5IGJlbG9uZyBpcyB3aGF0IHRoZSBvcmRlciB3cml0dGVuXG4gKiB3aGVuIHRoZXkgd2VyZSBwYXJrZWQgYWxyZWFkeSBzYXlzLCBzbyB0aGF0IG9yZGVyIGlzIGtlcHQgZm9yIHRoZW0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmVzZXJ2ZWRPcmRlcldpdGhQYXJrZWQoXG4gIHByZXZpb3VzT3JkZXI6IHN0cmluZ1tdID0gW10sXG4gIGlkczogc3RyaW5nW10sXG4gIHBhcmtlZDoge2lkPzogc3RyaW5nfVtdXG4pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHBhcmtlZElkcyA9IHBhcmtlZFxuICAgIC5tYXAoaXRlbSA9PiBpdGVtPy5pZClcbiAgICAuZmlsdGVyKChpZCk6IGlkIGlzIHN0cmluZyA9PiBCb29sZWFuKGlkKSAmJiAhaWRzLmluY2x1ZGVzKGlkIGFzIHN0cmluZykpO1xuXG4gIGlmICghcGFya2VkSWRzLmxlbmd0aCkge1xuICAgIHJldHVybiBpZHM7XG4gIH1cblxuICBjb25zdCBrbm93biA9IG5ldyBTZXQoWy4uLmlkcywgLi4ucGFya2VkSWRzXSk7XG4gIGNvbnN0IG9yZGVyZWQgPSAocHJldmlvdXNPcmRlciB8fCBbXSkuZmlsdGVyKGlkID0+IGtub3duLmhhcyhpZCkpO1xuICBjb25zdCByZXN0ID0gWy4uLmlkcywgLi4ucGFya2VkSWRzXS5maWx0ZXIoaWQgPT4gIW9yZGVyZWQuaW5jbHVkZXMoaWQpKTtcblxuICByZXR1cm4gWy4uLm9yZGVyZWQsIC4uLnJlc3RdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZURhdGFzZXREZXBzSW5TdGF0ZTxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAge2RhdGFJZCwgZGF0YUlkVG9Vc2V9OiB7ZGF0YUlkOiBzdHJpbmc7IGRhdGFJZFRvVXNlOiBzdHJpbmd9XG4pOiBUIHtcbiAgY29uc3Qgc2VyaWFsaXplZFN0YXRlID0gc2VyaWFsaXplVmlzU3RhdGUoc3RhdGUsIHN0YXRlLnNjaGVtYSk7XG5cbiAgY29uc3QgbmV4dFN0YXRlID0gc3RhdGUubWVyZ2Vycy5yZWR1Y2UoXG4gICAgKFxuICAgICAgYWNjdVN0YXRlLFxuICAgICAge3Byb3AsIHRvTWVyZ2VQcm9wLCByZXBsYWNlUGFyZW50RGF0YXNldElkcywgZ2V0Q2hpbGREYXRhc2V0SWRzLCBzYXZlVW5tZXJnZWQsIHByZXNlcnZlT3JkZXJ9XG4gICAgKSA9PiB7XG4gICAgICAvLyBnZXQgZGF0YXNldCBpZHMgdGhhdCBhcmUgZGVwZW5kcyBvbiB0aGlzIGRhdGFzZXRcbiAgICAgIGNvbnN0IHByb3BzID0gdG9BcnJheShwcm9wKTtcbiAgICAgIGNvbnN0IHRvTWVyZ2VQcm9wcyA9IHRvQXJyYXkodG9NZXJnZVByb3ApO1xuICAgICAgY29uc3Qgc2F2ZWRQcm9wcyA9IHNlcmlhbGl6ZWRTdGF0ZSA/IHByb3BzLm1hcChwID0+IHNlcmlhbGl6ZWRTdGF0ZVtwXSkgOiBbXTtcblxuICAgICAgbGV0IHJlcGxhY2VkU3RhdGUgPSBhY2N1U3RhdGU7XG4gICAgICBzYXZlZFByb3BzLmZvckVhY2goKHByb3BWYWx1ZSwgaSkgPT4ge1xuICAgICAgICBpZiAocHJvcFZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWVyZ2VyT3B0aW9ucyA9IHtcbiAgICAgICAgICBwcm9wOiBwcm9wc1tpXSxcbiAgICAgICAgICB0b01lcmdlUHJvcDogdG9NZXJnZVByb3BzW2ldLFxuICAgICAgICAgIGdldENoaWxkRGF0YXNldElkcyxcbiAgICAgICAgICBzYXZlVW5tZXJnZWRcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBXaGF0IGFub3RoZXIgZGF0YXNldCdzIHJlcGxhY2VtZW50IHBhcmtlZCBhIG1vbWVudCBhZ28gYW5kIGhhcyBub3RcbiAgICAgICAgLy8gbWVyZ2VkIGJhY2sgeWV0LCByZWFkIGJlZm9yZSB0aGlzIG9uZSBwYXJrcyBhbnl0aGluZyBvZiBpdHMgb3duLlxuICAgICAgICBjb25zdCBwYXJrZWRFbHNld2hlcmUgPVxuICAgICAgICAgIG1lcmdlck9wdGlvbnMudG9NZXJnZVByb3AgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB0b0FycmF5KHJlcGxhY2VkU3RhdGVbbWVyZ2VyT3B0aW9ucy50b01lcmdlUHJvcF0gPz8gW10pXG4gICAgICAgICAgICA6IFtdO1xuXG4gICAgICAgIGNvbnN0IHJlcGxhY2VkSXRlbSA9XG4gICAgICAgICAgcmVwbGFjZVBhcmVudERhdGFzZXRJZHM/Lihwcm9wVmFsdWUsIGRhdGFJZCwgZGF0YUlkVG9Vc2UpIHx8XG4gICAgICAgICAgZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzKHByb3BWYWx1ZSwgZGF0YUlkLCBkYXRhSWRUb1VzZSk7XG4gICAgICAgIHJlcGxhY2VkU3RhdGUgPSByZXBsYWNlZEl0ZW1cbiAgICAgICAgICA/IHJlcGxhY2VQcm9wVmFsdWVJblN0YXRlKHJlcGxhY2VkU3RhdGUsIHJlcGxhY2VkSXRlbSwgbWVyZ2VyT3B0aW9ucylcbiAgICAgICAgICA6IHJlcGxhY2VkU3RhdGU7XG5cbiAgICAgICAgLy8gT25seSB3aGVuIHRoaXMgZGF0YXNldCBoYWQgaXRlbXMgb2YgaXRzIG93biB0byBwYXJrLiBUaGUgdG9CZU1lcmdlZCBsaXN0XG4gICAgICAgIC8vIGNhbiBzdGlsbCBob2xkIGFub3RoZXIgZGF0YXNldCdzIGl0ZW1zLCByZXBsYWNlZCBhIG1vbWVudCBlYXJsaWVyIGFuZFxuICAgICAgICAvLyBub3QgbWVyZ2VkIGJhY2sgeWV0OyBvdmVyd3JpdGluZyB0aGUgb3JkZXIgdGhleSB3ZXJlIHBhcmtlZCB3aXRoIHdvdWxkXG4gICAgICAgIC8vIG1lcmdlIHRoZW0gYmFjayBpbiByZXZlcnNlLlxuICAgICAgICBpZiAoXG4gICAgICAgICAgcmVwbGFjZWRJdGVtICYmXG4gICAgICAgICAgbWVyZ2VyT3B0aW9ucy50b01lcmdlUHJvcCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgcmVwbGFjZWRTdGF0ZVttZXJnZXJPcHRpb25zLnRvTWVyZ2VQcm9wXT8ubGVuZ3RoICYmXG4gICAgICAgICAgcHJlc2VydmVPcmRlclxuICAgICAgICApIHtcbiAgICAgICAgICByZXBsYWNlZFN0YXRlW3ByZXNlcnZlT3JkZXJdID0gcHJlc2VydmVkT3JkZXJXaXRoUGFya2VkKFxuICAgICAgICAgICAgcmVwbGFjZWRTdGF0ZVtwcmVzZXJ2ZU9yZGVyXSxcbiAgICAgICAgICAgIHByb3BWYWx1ZS5tYXAoaXRlbSA9PiBpdGVtLmlkKSxcbiAgICAgICAgICAgIHBhcmtlZEVsc2V3aGVyZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gcmVwbGFjZWRTdGF0ZTtcbiAgICB9LFxuICAgIHN0YXRlXG4gICk7XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZVByb3BWYWx1ZUluU3RhdGUoXG4gIHN0YXRlLFxuICByZXBsYWNlZEl0ZW0sXG4gIHtwcm9wLCB0b01lcmdlUHJvcCwgZ2V0Q2hpbGREYXRhc2V0SWRzLCBzYXZlVW5tZXJnZWR9XG4pIHtcbiAgLy8gcHJvcCBpcyBkZXBlbmRzIG9uIHRoZSBkYXRhc2V0IHRvIGJlIHJlcGxhY2VkXG4gIC8vIHJlbW92ZSBwcm9wIGZyb20gc3RhdGUsIGFuZCBtb3ZlIGl0IHRvIHRvQmVNZXJnZWRcbiAgbGV0IG5leHRTdGF0ZSA9IG1vdmVWYWx1ZVRvQmVNZXJnZWQoc3RhdGUsIHJlcGxhY2VkSXRlbSwge3Byb3AsIHRvTWVyZ2VQcm9wLCBzYXZlVW5tZXJnZWR9KTtcbiAgY29uc3QgY2hpbGREYXRhSWRzID0gZ2V0Q2hpbGREYXRhc2V0SWRzPy4ocmVwbGFjZWRJdGVtKSB8fCBmaW5kQ2hpbGREYXRhc2V0SWRzKHJlcGxhY2VkSXRlbSk7XG5cbiAgaWYgKGNoaWxkRGF0YUlkcykge1xuICAgIG5leHRTdGF0ZSA9IHRvQXJyYXkoY2hpbGREYXRhSWRzKS5yZWR1Y2UoKGFjY3UsIGNoaWxkRGF0YUlkKSA9PiB7XG4gICAgICAvLyBzaG91bGRuJ3QgbmVlZCB0byBjaGFuZ2UgY2hpbGQgZGF0YXNldCBpZCxcbiAgICAgIC8vIGJ1dCBzdGlsbCBuZWVkIHRvIG1vdmUgb3V0IG9mIHN0YXRlIGFuZCBtZXJnZSBiYWNrIGluXG4gICAgICByZXR1cm4gcmVwbGFjZURhdGFzZXRBbmREZXBzKGFjY3UsIGNoaWxkRGF0YUlkLCBjaGlsZERhdGFJZCk7XG4gICAgfSwgbmV4dFN0YXRlKTtcbiAgfVxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7O0FBRUEsU0FBUUEsSUFBSSxRQUFPLFlBQVk7QUFFL0IsT0FBT0MsSUFBSSxNQUFNLG1CQUFtQjtBQUNwQyxPQUFPQyxTQUFTLE1BQU0sV0FBVztBQUNqQyxTQUFRQyxPQUFPLElBQUlDLE9BQU8sUUFBTyxlQUFlO0FBQ2hELE9BQU9DLFNBQVMsTUFBTSw2QkFBNkI7QUFDbkQsT0FBT0MsR0FBRyxNQUFNLHVCQUF1QjtBQUN2QyxPQUFPQyxPQUFPLE1BQU0sMkJBQTJCO0FBQy9DLE9BQU9DLElBQUksTUFBTSx3QkFB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
|