@kepler.gl/reducers 3.3.0-alpha.8 → 3.3.0-alpha.9
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/interaction-utils.js +13 -3
- package/dist/cjs/ui-state-updaters.js +3 -15
- package/dist/cjs/vis-state-updaters.js +702 -113
- package/dist/cjs/vis-state.js +2 -2
- package/dist/esm/interaction-utils.js +13 -3
- package/dist/esm/ui-state-updaters.js +3 -15
- package/dist/esm/vis-state-updaters.js +691 -111
- package/dist/esm/vis-state.js +2 -2
- package/dist/interaction-utils.d.ts +1 -1
- package/dist/vis-state-updaters.d.ts +58 -0
- package/package.json +16 -16
|
@@ -32,13 +32,13 @@ import Task, { disableStackCapturing, withTask } from 'react-palm/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 } 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 } from '@kepler.gl/actions';
|
|
36
36
|
|
|
37
37
|
// Utils
|
|
38
|
-
import { FILTER_UPDATER_PROPS, addNewLayersToSplitMap, snapToMarks, applyFilterFieldName, applyFiltersToDatasets, arrayInsert, computeSplitMapLayers, adjustValueToFilterDomain, errorNotification, editorFeaturesToFeatureCollection, mergeUserFeatureProperties, toSketchFeature, featureToFilterValue, filterDatasetCPU, generatePolygonFilter, getDefaultFilter, getFilterIdInFeature, getTimeWidgetTitleFormatter, isInRange, isObject, isPlainObject, isRgbColor, parseFieldValue, removeLayerFromSplitMaps, set, updateFilterPlot, removeFilterPlot, isLayerAnimatable, isSideFilter, getApplicationConfig } from '@kepler.gl/utils';
|
|
38
|
+
import { FILTER_UPDATER_PROPS, addNewLayersToSplitMap, snapToMarks, applyFilterFieldName, applyFiltersToDatasets, arrayInsert, computeSplitMapLayers, adjustValueToFilterDomain, errorNotification, editorFeaturesToFeatureCollection, 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';
|
|
39
39
|
import { generateHashId, toArray, arrayMove } from '@kepler.gl/common-utils';
|
|
40
40
|
// Mergers
|
|
41
|
-
import { ANIMATION_WINDOW, BASE_SPEED, COMPARE_TYPES, DEFAULT_TEXT_LABEL, EDITOR_MODES, FILTER_TYPES, FILTER_VIEW_TYPES, LAYER_TYPES, FPS, LIGHT_AND_SHADOW_EFFECT, DISTANCE_FOG_TYPE, SURFACE_FOG_TYPE, MAX_DEFAULT_TOOLTIPS, PLOT_TYPES, SORT_ORDER, SYNC_TIMELINE_MODES, CHANNEL_SCALES, SCALE_TYPES, INITIAL_ANNOTATION_KIND, INITIAL_ANNOTATION_ANGLE, INITIAL_ANNOTATION_ARM_LENGTH, INITIAL_ANNOTATION_TEXT_WIDTH, INITIAL_ANNOTATION_TEXT_HEIGHT, INITIAL_ANNOTATION_LINE_WIDTH, INITIAL_ANNOTATION_LINE_COLOR, AnnotationKind, DatasetType, getRemoteSourceFormat } from '@kepler.gl/constants';
|
|
41
|
+
import { ANIMATION_WINDOW, BASE_SPEED, COMPARE_TYPES, DEFAULT_TEXT_LABEL, EDITOR_MODES, FILTER_TYPES, FILTER_VIEW_TYPES, LAYER_TYPES, FPS, LIGHT_AND_SHADOW_EFFECT, DISTANCE_FOG_TYPE, SURFACE_FOG_TYPE, MAX_DEFAULT_TOOLTIPS, PLOT_TYPES, SORT_ORDER, SYNC_TIMELINE_MODES, CHANNEL_SCALES, SCALE_TYPES, INITIAL_ANNOTATION_KIND, INITIAL_ANNOTATION_ANGLE, INITIAL_ANNOTATION_ARM_LENGTH, INITIAL_ANNOTATION_TEXT_WIDTH, INITIAL_ANNOTATION_TEXT_HEIGHT, INITIAL_ANNOTATION_LINE_WIDTH, INITIAL_ANNOTATION_LINE_COLOR, AnnotationKind, DatasetType, getDatasetRefreshIntervalMs, getRemoteSourceFormat } from '@kepler.gl/constants';
|
|
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';
|
|
@@ -2066,6 +2066,15 @@ export var updateEffectUpdater = function updateEffectUpdater(state, _ref12) {
|
|
|
2066
2066
|
return effectOrderId === id ? props.id : effectOrderId;
|
|
2067
2067
|
});
|
|
2068
2068
|
}
|
|
2069
|
+
var effect = state.effects[idx];
|
|
2070
|
+
var nextParams = props.parameters;
|
|
2071
|
+
// A timestamp-only no-op still used to allocate a new visState (setProps
|
|
2072
|
+
// mutates in place). That retriggered nested react-redux connect subscribers
|
|
2073
|
+
// while dragging the Light & Shadow day-time slider until React threw
|
|
2074
|
+
// "Maximum update depth exceeded".
|
|
2075
|
+
if (nextParams && Object.keys(props).length === 1 && Object.keys(nextParams).length === 1 && nextParams.timestamp != null && nextParams.timestamp === effect.parameters.timestamp) {
|
|
2076
|
+
return state;
|
|
2077
|
+
}
|
|
2069
2078
|
var newEffects = _toConsumableArray(state.effects);
|
|
2070
2079
|
newEffects[idx].setProps(props);
|
|
2071
2080
|
return _objectSpread(_objectSpread({}, state), {}, {
|
|
@@ -2540,8 +2549,8 @@ function hydrateExternallyHostedProtoDataset(_x) {
|
|
|
2540
2549
|
}
|
|
2541
2550
|
function _hydrateExternallyHostedProtoDataset() {
|
|
2542
2551
|
_hydrateExternallyHostedProtoDataset = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(dataset) {
|
|
2543
|
-
var _dataset$
|
|
2544
|
-
var
|
|
2552
|
+
var _dataset$metadata6, _dataset$metadata7;
|
|
2553
|
+
var loaded, _dataset$metadata8;
|
|
2545
2554
|
return _regeneratorRuntime.wrap(function _callee2$(_context2) {
|
|
2546
2555
|
while (1) switch (_context2.prev = _context2.next) {
|
|
2547
2556
|
case 0:
|
|
@@ -2553,16 +2562,32 @@ function _hydrateExternallyHostedProtoDataset() {
|
|
|
2553
2562
|
case 2:
|
|
2554
2563
|
_context2.next = 4;
|
|
2555
2564
|
return loadExternallyHostedDataset({
|
|
2556
|
-
source: (_dataset$
|
|
2565
|
+
source: (_dataset$metadata6 = dataset.metadata) === null || _dataset$metadata6 === void 0 ? void 0 : _dataset$metadata6.source,
|
|
2557
2566
|
format: getRemoteSourceFormat(dataset.metadata),
|
|
2558
|
-
size: typeof ((_dataset$
|
|
2567
|
+
size: typeof ((_dataset$metadata7 = dataset.metadata) === null || _dataset$metadata7 === void 0 ? void 0 : _dataset$metadata7.size) === 'number' ? dataset.metadata.size : undefined,
|
|
2568
|
+
bypassCache: getDatasetRefreshIntervalMs(dataset.metadata) > 0
|
|
2559
2569
|
});
|
|
2560
2570
|
case 4:
|
|
2561
|
-
|
|
2571
|
+
loaded = _context2.sent;
|
|
2572
|
+
if (loaded.data) {
|
|
2573
|
+
_context2.next = 7;
|
|
2574
|
+
break;
|
|
2575
|
+
}
|
|
2576
|
+
throw new Error("No data loaded from ".concat((_dataset$metadata8 = dataset.metadata) === null || _dataset$metadata8 === void 0 ? void 0 : _dataset$metadata8.source));
|
|
2577
|
+
case 7:
|
|
2562
2578
|
return _context2.abrupt("return", _objectSpread(_objectSpread({}, dataset), {}, {
|
|
2563
|
-
data: data
|
|
2579
|
+
data: loaded.data,
|
|
2580
|
+
metadata: _objectSpread(_objectSpread(_objectSpread({}, dataset.metadata), {}, {
|
|
2581
|
+
etag: loaded.etag,
|
|
2582
|
+
lastModified: loaded.lastModified
|
|
2583
|
+
}, typeof loaded.size === 'number' ? {
|
|
2584
|
+
size: loaded.size
|
|
2585
|
+
} : {}), {}, {
|
|
2586
|
+
lastFetchedAt: Date.now(),
|
|
2587
|
+
refreshStatus: 'idle'
|
|
2588
|
+
})
|
|
2564
2589
|
}));
|
|
2565
|
-
case
|
|
2590
|
+
case 8:
|
|
2566
2591
|
case "end":
|
|
2567
2592
|
return _context2.stop();
|
|
2568
2593
|
}
|
|
@@ -2596,6 +2621,342 @@ function createNewDataEntryTask(dataset, datasets) {
|
|
|
2596
2621
|
return task || FAIL_CREATE_DATASET_TASK('Failed to create a new dataset due to data verification errors');
|
|
2597
2622
|
});
|
|
2598
2623
|
}
|
|
2624
|
+
function patchDatasetMetadata(dataset, patch) {
|
|
2625
|
+
return copyTableAndUpdate(dataset, {
|
|
2626
|
+
metadata: _objectSpread(_objectSpread({}, dataset.metadata), patch)
|
|
2627
|
+
});
|
|
2628
|
+
}
|
|
2629
|
+
function refreshExternallyHostedTable(_x3) {
|
|
2630
|
+
return _refreshExternallyHostedTable.apply(this, arguments);
|
|
2631
|
+
}
|
|
2632
|
+
function _refreshExternallyHostedTable() {
|
|
2633
|
+
_refreshExternallyHostedTable = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(_ref22) {
|
|
2634
|
+
var metadata, onProgress;
|
|
2635
|
+
return _regeneratorRuntime.wrap(function _callee3$(_context3) {
|
|
2636
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
2637
|
+
case 0:
|
|
2638
|
+
metadata = _ref22.arg, onProgress = _ref22.onProgress;
|
|
2639
|
+
return _context3.abrupt("return", loadExternallyHostedDataset(_objectSpread(_objectSpread({}, metadata), {}, {
|
|
2640
|
+
onProgress: onProgress,
|
|
2641
|
+
bypassCache: true
|
|
2642
|
+
})));
|
|
2643
|
+
case 2:
|
|
2644
|
+
case "end":
|
|
2645
|
+
return _context3.stop();
|
|
2646
|
+
}
|
|
2647
|
+
}, _callee3);
|
|
2648
|
+
}));
|
|
2649
|
+
return _refreshExternallyHostedTable.apply(this, arguments);
|
|
2650
|
+
}
|
|
2651
|
+
var REFRESH_EXTERNALLY_HOSTED_DATASET_TASK = Task.fromPromiseWithProgress(refreshExternallyHostedTable, 'REFRESH_EXTERNALLY_HOSTED_DATASET_TASK');
|
|
2652
|
+
|
|
2653
|
+
/**
|
|
2654
|
+
* Re-fetch an externally hosted dataset and replace its table contents in place.
|
|
2655
|
+
* Layers and filters are kept when field names match.
|
|
2656
|
+
* @memberof visStateUpdaters
|
|
2657
|
+
* @public
|
|
2658
|
+
*/
|
|
2659
|
+
export function refreshDatasetUpdater(state, _ref23) {
|
|
2660
|
+
var _dataset$metadata2, _dataset$metadata3;
|
|
2661
|
+
var dataId = _ref23.dataId;
|
|
2662
|
+
var dataset = state.datasets[dataId];
|
|
2663
|
+
if (!dataset || dataset.type !== DatasetType.EXTERNALLY_HOSTED || typeof ((_dataset$metadata2 = dataset.metadata) === null || _dataset$metadata2 === void 0 ? void 0 : _dataset$metadata2.source) !== 'string') {
|
|
2664
|
+
return state;
|
|
2665
|
+
}
|
|
2666
|
+
if (((_dataset$metadata3 = dataset.metadata) === null || _dataset$metadata3 === void 0 ? void 0 : _dataset$metadata3.refreshStatus) === 'loading') {
|
|
2667
|
+
return state;
|
|
2668
|
+
}
|
|
2669
|
+
var nextDataset = patchDatasetMetadata(dataset, {
|
|
2670
|
+
refreshStatus: 'loading',
|
|
2671
|
+
refreshError: undefined,
|
|
2672
|
+
refreshProgress: undefined
|
|
2673
|
+
});
|
|
2674
|
+
return withTask(_objectSpread(_objectSpread({}, state), {}, {
|
|
2675
|
+
datasets: _objectSpread(_objectSpread({}, state.datasets), {}, _defineProperty({}, dataId, nextDataset))
|
|
2676
|
+
}), REFRESH_EXTERNALLY_HOSTED_DATASET_TASK({
|
|
2677
|
+
arg: {
|
|
2678
|
+
source: nextDataset.metadata.source,
|
|
2679
|
+
format: getRemoteSourceFormat(nextDataset.metadata),
|
|
2680
|
+
size: typeof nextDataset.metadata.size === 'number' ? nextDataset.metadata.size : undefined,
|
|
2681
|
+
etag: typeof nextDataset.metadata.etag === 'string' ? nextDataset.metadata.etag : undefined,
|
|
2682
|
+
lastModified: typeof nextDataset.metadata.lastModified === 'string' ? nextDataset.metadata.lastModified : undefined
|
|
2683
|
+
},
|
|
2684
|
+
onProgress: function onProgress(progress) {
|
|
2685
|
+
var _progress$percent;
|
|
2686
|
+
return refreshDatasetProgress(dataId, Math.round(((_progress$percent = progress === null || progress === void 0 ? void 0 : progress.percent) !== null && _progress$percent !== void 0 ? _progress$percent : 0) * 100));
|
|
2687
|
+
}
|
|
2688
|
+
}).bimap(function (result) {
|
|
2689
|
+
return refreshDatasetSuccess(dataId, result);
|
|
2690
|
+
}, function (error) {
|
|
2691
|
+
return refreshDatasetError(dataId, error);
|
|
2692
|
+
}));
|
|
2693
|
+
}
|
|
2694
|
+
|
|
2695
|
+
/**
|
|
2696
|
+
* Record download progress for an in-flight remote dataset refresh.
|
|
2697
|
+
* @memberof visStateUpdaters
|
|
2698
|
+
* @public
|
|
2699
|
+
*/
|
|
2700
|
+
export function refreshDatasetProgressUpdater(state, _ref24) {
|
|
2701
|
+
var _dataset$metadata4, _dataset$metadata5;
|
|
2702
|
+
var dataId = _ref24.dataId,
|
|
2703
|
+
percent = _ref24.percent;
|
|
2704
|
+
var dataset = state.datasets[dataId];
|
|
2705
|
+
if (!dataset || ((_dataset$metadata4 = dataset.metadata) === null || _dataset$metadata4 === void 0 ? void 0 : _dataset$metadata4.refreshStatus) !== 'loading') {
|
|
2706
|
+
return state;
|
|
2707
|
+
}
|
|
2708
|
+
var nextPercent = Number.isFinite(percent) ? Math.max(0, Math.min(100, Math.round(percent))) : 0;
|
|
2709
|
+
if (((_dataset$metadata5 = dataset.metadata) === null || _dataset$metadata5 === void 0 ? void 0 : _dataset$metadata5.refreshProgress) === nextPercent) {
|
|
2710
|
+
return state;
|
|
2711
|
+
}
|
|
2712
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
2713
|
+
datasets: _objectSpread(_objectSpread({}, state.datasets), {}, _defineProperty({}, dataId, patchDatasetMetadata(dataset, {
|
|
2714
|
+
refreshProgress: nextPercent
|
|
2715
|
+
})))
|
|
2716
|
+
});
|
|
2717
|
+
}
|
|
2718
|
+
function fieldNamesEqual(current, incoming) {
|
|
2719
|
+
if (!(incoming !== null && incoming !== void 0 && incoming.length)) {
|
|
2720
|
+
return true;
|
|
2721
|
+
}
|
|
2722
|
+
if (current.length !== incoming.length) {
|
|
2723
|
+
return false;
|
|
2724
|
+
}
|
|
2725
|
+
return current.every(function (field, i) {
|
|
2726
|
+
return field.name === incoming[i].name;
|
|
2727
|
+
});
|
|
2728
|
+
}
|
|
2729
|
+
|
|
2730
|
+
/**
|
|
2731
|
+
* When a remote snapshot changes column names, old layer fieldIdx / filter names
|
|
2732
|
+
* can point at the wrong column. Re-bind by name and drop configs that no longer fit.
|
|
2733
|
+
*/
|
|
2734
|
+
function rebindLayersAndFiltersAfterSchemaChange(state, dataId, datasets) {
|
|
2735
|
+
var dataset = datasets[dataId];
|
|
2736
|
+
var nextLayers = [];
|
|
2737
|
+
var droppedLayers = [];
|
|
2738
|
+
state.layers.forEach(function (layer) {
|
|
2739
|
+
if (layer.config.dataId !== dataId) {
|
|
2740
|
+
nextLayers.push(layer);
|
|
2741
|
+
return;
|
|
2742
|
+
}
|
|
2743
|
+
var rebound = validateExistingLayerWithData(dataset, state.layerClasses, layer, state.schema);
|
|
2744
|
+
if (rebound !== null && rebound !== void 0 && rebound.isValidToSave()) {
|
|
2745
|
+
nextLayers.push(rebound);
|
|
2746
|
+
} else {
|
|
2747
|
+
droppedLayers.push(layer);
|
|
2748
|
+
}
|
|
2749
|
+
});
|
|
2750
|
+
var nextLayerOrder = state.layerOrder;
|
|
2751
|
+
var nextSplitMaps = state.splitMaps;
|
|
2752
|
+
droppedLayers.forEach(function (layer) {
|
|
2753
|
+
nextLayerOrder = removeElementFromLayerOrder(nextLayerOrder, layer.id);
|
|
2754
|
+
nextSplitMaps = removeLayerFromSplitMaps(nextSplitMaps, layer);
|
|
2755
|
+
});
|
|
2756
|
+
var nextLayerData = nextLayers.map(function (layer) {
|
|
2757
|
+
var oldIdx = state.layers.findIndex(function (oldLayer) {
|
|
2758
|
+
return oldLayer.id === layer.id;
|
|
2759
|
+
});
|
|
2760
|
+
return oldIdx >= 0 ? state.layerData[oldIdx] : {};
|
|
2761
|
+
});
|
|
2762
|
+
var filtersForDataset = state.filters.filter(function (filter) {
|
|
2763
|
+
return toArray(filter.dataId).includes(dataId);
|
|
2764
|
+
});
|
|
2765
|
+
var otherFilters = state.filters.filter(function (filter) {
|
|
2766
|
+
return !toArray(filter.dataId).includes(dataId);
|
|
2767
|
+
});
|
|
2768
|
+
var _validateFiltersUpdat = validateFiltersUpdateDatasets(_objectSpread(_objectSpread({}, state), {}, {
|
|
2769
|
+
datasets: datasets,
|
|
2770
|
+
layers: nextLayers
|
|
2771
|
+
}), filtersForDataset),
|
|
2772
|
+
validated = _validateFiltersUpdat.validated,
|
|
2773
|
+
updatedDatasets = _validateFiltersUpdat.updatedDatasets;
|
|
2774
|
+
var nextFilters = [].concat(_toConsumableArray(otherFilters), _toConsumableArray(validated));
|
|
2775
|
+
var filteredDatasets = applyFiltersToDatasets([dataId], updatedDatasets, nextFilters, nextLayers);
|
|
2776
|
+
var nextState = _objectSpread(_objectSpread({}, state), {}, {
|
|
2777
|
+
datasets: filteredDatasets,
|
|
2778
|
+
layers: nextLayers,
|
|
2779
|
+
layerData: nextLayerData,
|
|
2780
|
+
layerOrder: nextLayerOrder,
|
|
2781
|
+
splitMaps: nextSplitMaps,
|
|
2782
|
+
filters: nextFilters
|
|
2783
|
+
});
|
|
2784
|
+
nextState = updateAllLayerDomainData(nextState, [dataId], undefined);
|
|
2785
|
+
return updateAnimationDomain(nextState);
|
|
2786
|
+
}
|
|
2787
|
+
|
|
2788
|
+
/**
|
|
2789
|
+
* Apply a finished remote refresh: keep layers, re-run filters and layer data.
|
|
2790
|
+
* @memberof visStateUpdaters
|
|
2791
|
+
* @public
|
|
2792
|
+
*/
|
|
2793
|
+
export function refreshDatasetSuccessUpdater(state, _ref25) {
|
|
2794
|
+
var _result$data;
|
|
2795
|
+
var dataId = _ref25.dataId,
|
|
2796
|
+
result = _ref25.result;
|
|
2797
|
+
var dataset = state.datasets[dataId];
|
|
2798
|
+
if (!dataset) {
|
|
2799
|
+
return state;
|
|
2800
|
+
}
|
|
2801
|
+
var metadataPatch = _objectSpread({
|
|
2802
|
+
refreshStatus: 'idle',
|
|
2803
|
+
refreshError: undefined,
|
|
2804
|
+
refreshProgress: undefined,
|
|
2805
|
+
lastFetchedAt: Date.now(),
|
|
2806
|
+
// Always write validators. A 200 that omits them must not keep the previous
|
|
2807
|
+
// ETag or a later 304 can skip a body we no longer have.
|
|
2808
|
+
etag: result.etag,
|
|
2809
|
+
lastModified: result.lastModified
|
|
2810
|
+
}, typeof result.size === 'number' ? {
|
|
2811
|
+
size: result.size
|
|
2812
|
+
} : {});
|
|
2813
|
+
var schemaUnchanged = fieldNamesEqual(dataset.fields, (_result$data = result.data) === null || _result$data === void 0 ? void 0 : _result$data.fields);
|
|
2814
|
+
|
|
2815
|
+
// Apply the snapshot to the table currently in the store. Progress may have
|
|
2816
|
+
// copied it off the object that started the fetch; the task never mutates it.
|
|
2817
|
+
if (!result.notModified && result.data) {
|
|
2818
|
+
// KeplerTable.update is async so DuckDB can await Arrow conversion. The
|
|
2819
|
+
// CSV/GeoJSON path (and KeplerTable.importData) run synchronously before
|
|
2820
|
+
// the first await, so the store table is updated before we copy it below.
|
|
2821
|
+
void dataset.update(result.data);
|
|
2822
|
+
}
|
|
2823
|
+
var refreshed = patchDatasetMetadata(dataset, metadataPatch);
|
|
2824
|
+
var datasets = _objectSpread(_objectSpread({}, state.datasets), {}, _defineProperty({}, dataId, refreshed));
|
|
2825
|
+
if (result.notModified || !result.data) {
|
|
2826
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
2827
|
+
datasets: datasets
|
|
2828
|
+
});
|
|
2829
|
+
}
|
|
2830
|
+
if (!schemaUnchanged) {
|
|
2831
|
+
return rebindLayersAndFiltersAfterSchemaChange(state, dataId, datasets);
|
|
2832
|
+
}
|
|
2833
|
+
return reapplyFiltersAndLayerData(_objectSpread(_objectSpread({}, state), {}, {
|
|
2834
|
+
datasets: datasets
|
|
2835
|
+
}), dataId);
|
|
2836
|
+
}
|
|
2837
|
+
function reapplyFiltersAndLayerData(state, dataId) {
|
|
2838
|
+
var filteredDatasets = applyFiltersToDatasets([dataId], state.datasets, state.filters, state.layers);
|
|
2839
|
+
var nextState = _objectSpread(_objectSpread({}, state), {}, {
|
|
2840
|
+
datasets: filteredDatasets
|
|
2841
|
+
});
|
|
2842
|
+
nextState = updateAllLayerDomainData(nextState, [dataId], undefined);
|
|
2843
|
+
return updateAnimationDomain(nextState);
|
|
2844
|
+
}
|
|
2845
|
+
function isDatasetRowList(rows) {
|
|
2846
|
+
if (!Array.isArray(rows) || !rows.length) {
|
|
2847
|
+
return Array.isArray(rows);
|
|
2848
|
+
}
|
|
2849
|
+
// A single column-ordered row is an array of primitives; a list of rows is
|
|
2850
|
+
// an array of arrays or an array of field-name records.
|
|
2851
|
+
return Array.isArray(rows[0]) || isPlainObject(rows[0]);
|
|
2852
|
+
}
|
|
2853
|
+
function toArrayRow(row, fields) {
|
|
2854
|
+
if (Array.isArray(row)) {
|
|
2855
|
+
return row.length === fields.length ? row : null;
|
|
2856
|
+
}
|
|
2857
|
+
if (isPlainObject(row)) {
|
|
2858
|
+
var record = row;
|
|
2859
|
+
return fields.map(function (field) {
|
|
2860
|
+
return Object.prototype.hasOwnProperty.call(record, field.name) ? record[field.name] : null;
|
|
2861
|
+
});
|
|
2862
|
+
}
|
|
2863
|
+
return null;
|
|
2864
|
+
}
|
|
2865
|
+
function normalizeDatasetRows(rows, fields) {
|
|
2866
|
+
if (!fields.length) {
|
|
2867
|
+
return null;
|
|
2868
|
+
}
|
|
2869
|
+
var list = isDatasetRowList(rows) ? rows : [rows];
|
|
2870
|
+
if (!list.length) {
|
|
2871
|
+
return null;
|
|
2872
|
+
}
|
|
2873
|
+
var normalized = [];
|
|
2874
|
+
for (var i = 0; i < list.length; i++) {
|
|
2875
|
+
var arrayRow = toArrayRow(list[i], fields);
|
|
2876
|
+
if (!arrayRow) {
|
|
2877
|
+
return null;
|
|
2878
|
+
}
|
|
2879
|
+
normalized.push(arrayRow);
|
|
2880
|
+
}
|
|
2881
|
+
return normalized;
|
|
2882
|
+
}
|
|
2883
|
+
|
|
2884
|
+
/**
|
|
2885
|
+
* Append or upsert rows on an existing in-memory row dataset. Keeps layers and re-runs filters.
|
|
2886
|
+
* Arrow/DuckDB tables warn and are left unchanged (INSERT / concat not implemented).
|
|
2887
|
+
* @memberof visStateUpdaters
|
|
2888
|
+
* @public
|
|
2889
|
+
*/
|
|
2890
|
+
export function addToDatasetUpdater(state, _ref26) {
|
|
2891
|
+
var dataId = _ref26.dataId,
|
|
2892
|
+
rows = _ref26.rows,
|
|
2893
|
+
options = _ref26.options;
|
|
2894
|
+
var dataset = state.datasets[dataId];
|
|
2895
|
+
if (!dataset) {
|
|
2896
|
+
return state;
|
|
2897
|
+
}
|
|
2898
|
+
var normalized = normalizeDatasetRows(rows, dataset.fields);
|
|
2899
|
+
if (!normalized) {
|
|
2900
|
+
return state;
|
|
2901
|
+
}
|
|
2902
|
+
var applied = options !== null && options !== void 0 && options.upsertBy ? dataset.upsertRows(normalized, options.upsertBy) : dataset.appendRows(normalized);
|
|
2903
|
+
if (!applied) {
|
|
2904
|
+
return state;
|
|
2905
|
+
}
|
|
2906
|
+
var datasets = _objectSpread(_objectSpread({}, state.datasets), {}, _defineProperty({}, dataId, copyTableAndUpdate(dataset, {})));
|
|
2907
|
+
return reapplyFiltersAndLayerData(_objectSpread(_objectSpread({}, state), {}, {
|
|
2908
|
+
datasets: datasets
|
|
2909
|
+
}), dataId);
|
|
2910
|
+
}
|
|
2911
|
+
|
|
2912
|
+
/**
|
|
2913
|
+
* Delete rows by index or by field values from an existing in-memory row dataset.
|
|
2914
|
+
* Keeps layers. Arrow/DuckDB tables warn and are left unchanged.
|
|
2915
|
+
* @memberof visStateUpdaters
|
|
2916
|
+
* @public
|
|
2917
|
+
*/
|
|
2918
|
+
export function removeFromDatasetUpdater(state, _ref27) {
|
|
2919
|
+
var dataId = _ref27.dataId,
|
|
2920
|
+
rowIndexes = _ref27.rowIndexes,
|
|
2921
|
+
byField = _ref27.byField;
|
|
2922
|
+
var dataset = state.datasets[dataId];
|
|
2923
|
+
if (!dataset) {
|
|
2924
|
+
return state;
|
|
2925
|
+
}
|
|
2926
|
+
var indexes = byField ? dataset.findRowIndexesByFieldValues(byField.field, toArray(byField.values)) : toArray(rowIndexes !== null && rowIndexes !== void 0 ? rowIndexes : []);
|
|
2927
|
+
if (!indexes.length) {
|
|
2928
|
+
return state;
|
|
2929
|
+
}
|
|
2930
|
+
if (!dataset.removeRows(indexes)) {
|
|
2931
|
+
return state;
|
|
2932
|
+
}
|
|
2933
|
+
var datasets = _objectSpread(_objectSpread({}, state.datasets), {}, _defineProperty({}, dataId, copyTableAndUpdate(dataset, {})));
|
|
2934
|
+
return reapplyFiltersAndLayerData(_objectSpread(_objectSpread({}, state), {}, {
|
|
2935
|
+
datasets: datasets
|
|
2936
|
+
}), dataId);
|
|
2937
|
+
}
|
|
2938
|
+
|
|
2939
|
+
/**
|
|
2940
|
+
* Record a failed remote dataset refresh without dropping existing rows.
|
|
2941
|
+
* @memberof visStateUpdaters
|
|
2942
|
+
* @public
|
|
2943
|
+
*/
|
|
2944
|
+
export function refreshDatasetErrorUpdater(state, _ref28) {
|
|
2945
|
+
var dataId = _ref28.dataId,
|
|
2946
|
+
error = _ref28.error;
|
|
2947
|
+
var dataset = state.datasets[dataId];
|
|
2948
|
+
if (!dataset) {
|
|
2949
|
+
return state;
|
|
2950
|
+
}
|
|
2951
|
+
var nextState = _objectSpread(_objectSpread({}, state), {}, {
|
|
2952
|
+
datasets: _objectSpread(_objectSpread({}, state.datasets), {}, _defineProperty({}, dataId, patchDatasetMetadata(dataset, {
|
|
2953
|
+
refreshStatus: 'error',
|
|
2954
|
+
refreshError: (error === null || error === void 0 ? void 0 : error.message) || String(error),
|
|
2955
|
+
refreshProgress: undefined
|
|
2956
|
+
})))
|
|
2957
|
+
});
|
|
2958
|
+
return nextState;
|
|
2959
|
+
}
|
|
2599
2960
|
|
|
2600
2961
|
/**
|
|
2601
2962
|
* Add new dataset to `visState`, with option to load a map config along with the datasets
|
|
@@ -2622,10 +2983,10 @@ export var updateVisDataUpdater = function updateVisDataUpdater(state, action) {
|
|
|
2622
2983
|
}
|
|
2623
2984
|
var createDatasetTasks = [];
|
|
2624
2985
|
var notificationTasks = [];
|
|
2625
|
-
datasets.forEach(function (
|
|
2626
|
-
var
|
|
2627
|
-
info =
|
|
2628
|
-
rest = _objectWithoutProperties(
|
|
2986
|
+
datasets.forEach(function (_ref29, datasetIndex) {
|
|
2987
|
+
var _ref29$info = _ref29.info,
|
|
2988
|
+
info = _ref29$info === void 0 ? {} : _ref29$info,
|
|
2989
|
+
rest = _objectWithoutProperties(_ref29, _excluded2);
|
|
2629
2990
|
var task = createNewDataEntryTask(_objectSpread({
|
|
2630
2991
|
info: info
|
|
2631
2992
|
}, rest), state.datasets);
|
|
@@ -2906,6 +3267,225 @@ export function updateDatasetPropsUpdater(state, action) {
|
|
|
2906
3267
|
return state;
|
|
2907
3268
|
}
|
|
2908
3269
|
|
|
3270
|
+
/**
|
|
3271
|
+
* Re-validate a live layer against a table whose schema just changed.
|
|
3272
|
+
*
|
|
3273
|
+
* The layer's columns / visual-channel fields / text-label fields are first
|
|
3274
|
+
* remapped to their new names (via `renames`) so the layer follows a rename
|
|
3275
|
+
* instead of treating the old column as removed, then re-validated with
|
|
3276
|
+
* `validateExistingLayerWithData` — the same serialize + validate path used
|
|
3277
|
+
* when a saved config is loaded against new data. Returns `null` when a
|
|
3278
|
+
* required column is gone (the layer can no longer be built).
|
|
3279
|
+
*/
|
|
3280
|
+
function reconcileLayerWithNewSchema(layer, renames, newTable, state) {
|
|
3281
|
+
var _layer$config$textLab;
|
|
3282
|
+
var configPatch = {};
|
|
3283
|
+
|
|
3284
|
+
// follow renamed columns
|
|
3285
|
+
var columnsPatch = {};
|
|
3286
|
+
var columnsChanged = false;
|
|
3287
|
+
Object.entries(layer.config.columns || {}).forEach(function (_ref30) {
|
|
3288
|
+
var _ref31 = _slicedToArray(_ref30, 2),
|
|
3289
|
+
ckey = _ref31[0],
|
|
3290
|
+
col = _ref31[1];
|
|
3291
|
+
if (col !== null && col !== void 0 && col.value && renames[col.value]) {
|
|
3292
|
+
columnsPatch[ckey] = _objectSpread(_objectSpread({}, col), {}, {
|
|
3293
|
+
value: renames[col.value]
|
|
3294
|
+
});
|
|
3295
|
+
columnsChanged = true;
|
|
3296
|
+
}
|
|
3297
|
+
});
|
|
3298
|
+
if (columnsChanged) {
|
|
3299
|
+
configPatch.columns = _objectSpread(_objectSpread({}, layer.config.columns), columnsPatch);
|
|
3300
|
+
}
|
|
3301
|
+
|
|
3302
|
+
// follow renamed visual-channel fields (colorField, sizeField, ...)
|
|
3303
|
+
Object.values(layer.visualChannels).forEach(function (_ref32) {
|
|
3304
|
+
var field = _ref32.field;
|
|
3305
|
+
var fieldConfig = layer.config[field];
|
|
3306
|
+
if (fieldConfig !== null && fieldConfig !== void 0 && fieldConfig.name && renames[fieldConfig.name]) {
|
|
3307
|
+
configPatch[field] = _objectSpread(_objectSpread({}, fieldConfig), {}, {
|
|
3308
|
+
name: renames[fieldConfig.name]
|
|
3309
|
+
});
|
|
3310
|
+
}
|
|
3311
|
+
});
|
|
3312
|
+
|
|
3313
|
+
// follow renamed text-label fields
|
|
3314
|
+
if ((_layer$config$textLab = layer.config.textLabel) !== null && _layer$config$textLab !== void 0 && _layer$config$textLab.length) {
|
|
3315
|
+
var textLabel = layer.config.textLabel.map(function (tl) {
|
|
3316
|
+
return tl.field && renames[tl.field.name] ? _objectSpread(_objectSpread({}, tl), {}, {
|
|
3317
|
+
field: _objectSpread(_objectSpread({}, tl.field), {}, {
|
|
3318
|
+
name: renames[tl.field.name]
|
|
3319
|
+
})
|
|
3320
|
+
}) : tl;
|
|
3321
|
+
});
|
|
3322
|
+
if (textLabel.some(function (tl, i) {
|
|
3323
|
+
return tl !== layer.config.textLabel[i];
|
|
3324
|
+
})) {
|
|
3325
|
+
configPatch.textLabel = textLabel;
|
|
3326
|
+
}
|
|
3327
|
+
}
|
|
3328
|
+
|
|
3329
|
+
// shallow-copy the layer so we never mutate redux state; the copy keeps the
|
|
3330
|
+
// prototype methods (`visualChannels` getter, `isValidToSave`) so it
|
|
3331
|
+
// serializes exactly like a live layer.
|
|
3332
|
+
var layerCopy = Object.assign(Object.create(Object.getPrototypeOf(layer)), layer);
|
|
3333
|
+
if (Object.keys(configPatch).length) {
|
|
3334
|
+
layerCopy.config = _objectSpread(_objectSpread({}, layer.config), configPatch);
|
|
3335
|
+
}
|
|
3336
|
+
var validated = validateExistingLayerWithData(newTable, state.layerClasses, layerCopy, state.schema);
|
|
3337
|
+
return validated && validated.hasAllColumns() ? validated : null;
|
|
3338
|
+
}
|
|
3339
|
+
|
|
3340
|
+
/**
|
|
3341
|
+
* Update an existing dataset's schema (columns/fields) in place and reconcile
|
|
3342
|
+
* everything that referenced the old columns: filters, layers, tooltip fields,
|
|
3343
|
+
* pinned columns and sort state. The dataset keeps its id/label/color/metadata.
|
|
3344
|
+
*
|
|
3345
|
+
* `action.data` is the same shape `KeplerTable.importData` accepts (`{cols,
|
|
3346
|
+
* fields, arrowTable}` when replacing columns). `action.renames` is an optional
|
|
3347
|
+
* old → new column-name map so layers/filters/tooltips follow a rename instead
|
|
3348
|
+
* of treating the old column as removed.
|
|
3349
|
+
*
|
|
3350
|
+
* Reconciliation is name-based — the same way kepler.gl loads a saved config
|
|
3351
|
+
* against changed data. A layer whose required column is gone is removed; a
|
|
3352
|
+
* filter on a gone column is dropped (or the dataset is spliced out of a synced
|
|
3353
|
+
* filter); tooltip fields are remapped / dropped.
|
|
3354
|
+
*
|
|
3355
|
+
* @memberof visStateUpdaters
|
|
3356
|
+
* @public
|
|
3357
|
+
*/
|
|
3358
|
+
export function updateDatasetUpdater(state, action) {
|
|
3359
|
+
var _interactionConfig2, _tooltip$config;
|
|
3360
|
+
var dataId = action.dataId,
|
|
3361
|
+
data = action.data,
|
|
3362
|
+
_action$renames = action.renames,
|
|
3363
|
+
renames = _action$renames === void 0 ? {} : _action$renames;
|
|
3364
|
+
var existing = state.datasets[dataId];
|
|
3365
|
+
if (!existing) {
|
|
3366
|
+
return state;
|
|
3367
|
+
}
|
|
3368
|
+
|
|
3369
|
+
// 1. rebuild the table schema in place (same id/label/color/metadata)
|
|
3370
|
+
var newTable = copyTableAndUpdate(existing, {});
|
|
3371
|
+
newTable.updateSchema(data);
|
|
3372
|
+
|
|
3373
|
+
// The data container is rebuilt unsorted and unfiltered; reset the table's
|
|
3374
|
+
// view state that indexes into the old container.
|
|
3375
|
+
newTable.filteredIdxCPU = newTable.allIndexes;
|
|
3376
|
+
newTable.filterRecordCPU = undefined;
|
|
3377
|
+
newTable.sortColumn = undefined;
|
|
3378
|
+
newTable.sortOrder = null;
|
|
3379
|
+
newTable.pinnedColumns = (existing.pinnedColumns || []).map(function (name) {
|
|
3380
|
+
var _renames$name;
|
|
3381
|
+
return (_renames$name = renames[name]) !== null && _renames$name !== void 0 ? _renames$name : name;
|
|
3382
|
+
}).filter(function (name) {
|
|
3383
|
+
return newTable.getColumnFieldIdx(name) > -1;
|
|
3384
|
+
});
|
|
3385
|
+
var newFieldsByName = new Set(newTable.fields.map(function (f) {
|
|
3386
|
+
return f.name;
|
|
3387
|
+
}));
|
|
3388
|
+
var newDatasets = _objectSpread(_objectSpread({}, state.datasets), {}, _defineProperty({}, dataId, newTable));
|
|
3389
|
+
|
|
3390
|
+
// 2. reconcile filters
|
|
3391
|
+
var newFilters = state.filters.map(function (filter) {
|
|
3392
|
+
var _renames$oldName, _updated$yAxis;
|
|
3393
|
+
var vi = filter.dataId.indexOf(dataId);
|
|
3394
|
+
if (vi === -1) {
|
|
3395
|
+
return filter;
|
|
3396
|
+
}
|
|
3397
|
+
var oldName = filter.name[vi];
|
|
3398
|
+
var newName = (_renames$oldName = renames[oldName]) !== null && _renames$oldName !== void 0 ? _renames$oldName : oldName;
|
|
3399
|
+
var fieldIdx = newTable.getColumnFieldIdx(newName);
|
|
3400
|
+
if (fieldIdx === -1) {
|
|
3401
|
+
// column is gone: drop a single-dataset filter, splice it out of a synced one
|
|
3402
|
+
return filter.dataId.length === 1 ? null : _removeFilterDataIdAtValueIndex(filter, vi, newDatasets);
|
|
3403
|
+
}
|
|
3404
|
+
|
|
3405
|
+
// column present (possibly renamed): re-resolve name/fieldIdx/domain
|
|
3406
|
+
var _applyFilterFieldName2 = applyFilterFieldName(filter, newDatasets, dataId, newName, vi, {
|
|
3407
|
+
mergeDomain: vi > 0
|
|
3408
|
+
}),
|
|
3409
|
+
updated = _applyFilterFieldName2.filter;
|
|
3410
|
+
if (!updated) {
|
|
3411
|
+
return null;
|
|
3412
|
+
}
|
|
3413
|
+
|
|
3414
|
+
// brush filters carry a second y-axis field; follow a rename there too
|
|
3415
|
+
var yAxis = ((_updated$yAxis = updated.yAxis) === null || _updated$yAxis === void 0 ? void 0 : _updated$yAxis.name) && (renames[updated.yAxis.name] ? _objectSpread(_objectSpread({}, updated.yAxis), {}, {
|
|
3416
|
+
name: renames[updated.yAxis.name]
|
|
3417
|
+
}) : newFieldsByName.has(updated.yAxis.name) ? updated.yAxis : null);
|
|
3418
|
+
return _objectSpread(_objectSpread({}, updated), {}, {
|
|
3419
|
+
yAxis: yAxis,
|
|
3420
|
+
// clamp the user's previous selection into the new domain instead of
|
|
3421
|
+
// resetting it to the full range
|
|
3422
|
+
value: adjustValueToFilterDomain(filter.value, updated)
|
|
3423
|
+
});
|
|
3424
|
+
}).filter(Boolean);
|
|
3425
|
+
|
|
3426
|
+
// reassign GPU channels now that the filter list is settled
|
|
3427
|
+
newFilters = newFilters.map(function (filter) {
|
|
3428
|
+
return filter.gpu ? assignGpuChannel(setFilterGpuMode(filter, newFilters), newFilters) : filter;
|
|
3429
|
+
});
|
|
3430
|
+
|
|
3431
|
+
// 3. rebuild the table's filter state (gpuFilter / filterRecord / filteredIndex)
|
|
3432
|
+
newTable.filterTable(newFilters, state.layers.filter(function (l) {
|
|
3433
|
+
return l.config.dataId === dataId;
|
|
3434
|
+
}), {});
|
|
3435
|
+
|
|
3436
|
+
// 4. reconcile layers
|
|
3437
|
+
var layersToRemove = [];
|
|
3438
|
+
var newLayers = state.layers.map(function (layer) {
|
|
3439
|
+
if (layer.config.dataId !== dataId) {
|
|
3440
|
+
return layer;
|
|
3441
|
+
}
|
|
3442
|
+
var reconciled = reconcileLayerWithNewSchema(layer, renames, newTable, state);
|
|
3443
|
+
if (reconciled) {
|
|
3444
|
+
return reconciled;
|
|
3445
|
+
}
|
|
3446
|
+
layersToRemove.push(layer.id);
|
|
3447
|
+
return layer; // placeholder, dropped via removeLayerUpdater below
|
|
3448
|
+
});
|
|
3449
|
+
|
|
3450
|
+
// 5. reconcile tooltip fieldsToShow
|
|
3451
|
+
var interactionConfig = state.interactionConfig;
|
|
3452
|
+
var tooltip = (_interactionConfig2 = interactionConfig) === null || _interactionConfig2 === void 0 ? void 0 : _interactionConfig2.tooltip;
|
|
3453
|
+
var fieldsToShow = tooltip === null || tooltip === void 0 || (_tooltip$config = tooltip.config) === null || _tooltip$config === void 0 || (_tooltip$config = _tooltip$config.fieldsToShow) === null || _tooltip$config === void 0 ? void 0 : _tooltip$config[dataId];
|
|
3454
|
+
if (fieldsToShow) {
|
|
3455
|
+
var nextFieldsToShow = fieldsToShow.flatMap(function (f) {
|
|
3456
|
+
var _renames$f$name;
|
|
3457
|
+
var name = (_renames$f$name = renames[f.name]) !== null && _renames$f$name !== void 0 ? _renames$f$name : f.name;
|
|
3458
|
+
return newFieldsByName.has(name) ? [_objectSpread(_objectSpread({}, f), {}, {
|
|
3459
|
+
name: name
|
|
3460
|
+
})] : [];
|
|
3461
|
+
});
|
|
3462
|
+
interactionConfig = _objectSpread(_objectSpread({}, interactionConfig), {}, {
|
|
3463
|
+
tooltip: _objectSpread(_objectSpread({}, tooltip), {}, {
|
|
3464
|
+
config: _objectSpread(_objectSpread({}, tooltip.config), {}, {
|
|
3465
|
+
fieldsToShow: _objectSpread(_objectSpread({}, tooltip.config.fieldsToShow), {}, _defineProperty({}, dataId, nextFieldsToShow))
|
|
3466
|
+
})
|
|
3467
|
+
})
|
|
3468
|
+
});
|
|
3469
|
+
}
|
|
3470
|
+
var nextState = _objectSpread(_objectSpread({}, state), {}, {
|
|
3471
|
+
datasets: newDatasets,
|
|
3472
|
+
filters: newFilters,
|
|
3473
|
+
layers: newLayers,
|
|
3474
|
+
interactionConfig: interactionConfig
|
|
3475
|
+
});
|
|
3476
|
+
|
|
3477
|
+
// 6. drop layers that lost their required columns
|
|
3478
|
+
nextState = layersToRemove.reduce(function (accu, id) {
|
|
3479
|
+
return removeLayerUpdater(accu, {
|
|
3480
|
+
id: id
|
|
3481
|
+
});
|
|
3482
|
+
}, nextState);
|
|
3483
|
+
|
|
3484
|
+
// 7. recompute layer domains + data for the updated dataset
|
|
3485
|
+
nextState = updateAllLayerDomainData(nextState, dataId);
|
|
3486
|
+
return nextState;
|
|
3487
|
+
}
|
|
3488
|
+
|
|
2909
3489
|
/**
|
|
2910
3490
|
* When a user clicks on the specific map closing icon
|
|
2911
3491
|
* the application will close the selected map
|
|
@@ -3103,14 +3683,14 @@ export function parseProgress() {
|
|
|
3103
3683
|
* @memberof visStateUpdaters
|
|
3104
3684
|
* @public
|
|
3105
3685
|
*/
|
|
3106
|
-
export var nextFileBatchUpdater = function nextFileBatchUpdater(state,
|
|
3686
|
+
export var nextFileBatchUpdater = function nextFileBatchUpdater(state, _ref33) {
|
|
3107
3687
|
var _accumulated$data;
|
|
3108
|
-
var
|
|
3109
|
-
gen =
|
|
3110
|
-
fileName =
|
|
3111
|
-
progress =
|
|
3112
|
-
accumulated =
|
|
3113
|
-
onFinish =
|
|
3688
|
+
var _ref33$payload = _ref33.payload,
|
|
3689
|
+
gen = _ref33$payload.gen,
|
|
3690
|
+
fileName = _ref33$payload.fileName,
|
|
3691
|
+
progress = _ref33$payload.progress,
|
|
3692
|
+
accumulated = _ref33$payload.accumulated,
|
|
3693
|
+
onFinish = _ref33$payload.onFinish;
|
|
3114
3694
|
var stateWithProgress = updateFileLoadingProgressUpdater(state, {
|
|
3115
3695
|
fileName: fileName,
|
|
3116
3696
|
progress: parseProgress(state.fileLoadingProgress[fileName], progress)
|
|
@@ -3127,9 +3707,9 @@ export var nextFileBatchUpdater = function nextFileBatchUpdater(state, _ref23) {
|
|
|
3127
3707
|
return loadFilesSuccess(result);
|
|
3128
3708
|
}, function (err) {
|
|
3129
3709
|
return loadFilesErr(fileName, err);
|
|
3130
|
-
})] : []), [UNWRAP_TASK(gen.next()).bimap(function (
|
|
3131
|
-
var value =
|
|
3132
|
-
done =
|
|
3710
|
+
})] : []), [UNWRAP_TASK(gen.next()).bimap(function (_ref34) {
|
|
3711
|
+
var value = _ref34.value,
|
|
3712
|
+
done = _ref34.done;
|
|
3133
3713
|
return done ? onFinish(accumulated) : nextFileBatch({
|
|
3134
3714
|
gen: gen,
|
|
3135
3715
|
fileName: fileName,
|
|
@@ -3147,9 +3727,9 @@ export var nextFileBatchUpdater = function nextFileBatchUpdater(state, _ref23) {
|
|
|
3147
3727
|
* @memberof visStateUpdaters
|
|
3148
3728
|
* @public
|
|
3149
3729
|
*/
|
|
3150
|
-
export var loadFilesErrUpdater = function loadFilesErrUpdater(state,
|
|
3151
|
-
var error =
|
|
3152
|
-
fileName =
|
|
3730
|
+
export var loadFilesErrUpdater = function loadFilesErrUpdater(state, _ref35) {
|
|
3731
|
+
var error = _ref35.error,
|
|
3732
|
+
fileName = _ref35.fileName;
|
|
3153
3733
|
// update ui with error message
|
|
3154
3734
|
Console.warn(error);
|
|
3155
3735
|
if (!state.fileLoading) {
|
|
@@ -3177,8 +3757,8 @@ export var loadFilesErrUpdater = function loadFilesErrUpdater(state, _ref25) {
|
|
|
3177
3757
|
* @memberof visStateUpdaters
|
|
3178
3758
|
* @public
|
|
3179
3759
|
*/
|
|
3180
|
-
export var applyCPUFilterUpdater = function applyCPUFilterUpdater(state,
|
|
3181
|
-
var dataId =
|
|
3760
|
+
export var applyCPUFilterUpdater = function applyCPUFilterUpdater(state, _ref36) {
|
|
3761
|
+
var dataId = _ref36.dataId;
|
|
3182
3762
|
// apply cpuFilter
|
|
3183
3763
|
var dataIds = toArray(dataId);
|
|
3184
3764
|
return dataIds.reduce(function (accu, id) {
|
|
@@ -3237,9 +3817,9 @@ export function initialFileLoadingProgress(file, index) {
|
|
|
3237
3817
|
error: null
|
|
3238
3818
|
});
|
|
3239
3819
|
}
|
|
3240
|
-
export function updateFileLoadingProgressUpdater(state,
|
|
3241
|
-
var fileName =
|
|
3242
|
-
progress =
|
|
3820
|
+
export function updateFileLoadingProgressUpdater(state, _ref38) {
|
|
3821
|
+
var fileName = _ref38.fileName,
|
|
3822
|
+
progress = _ref38.progress;
|
|
3243
3823
|
// @ts-expect-error
|
|
3244
3824
|
return pick_('fileLoadingProgress')(pick_(fileName)(merge_(progress)))(state);
|
|
3245
3825
|
}
|
|
@@ -3331,8 +3911,8 @@ export function updateAnimationDomain(state) {
|
|
|
3331
3911
|
* Update the status of the editor
|
|
3332
3912
|
* @memberof visStateUpdaters
|
|
3333
3913
|
*/
|
|
3334
|
-
export var setEditorModeUpdater = function setEditorModeUpdater(state,
|
|
3335
|
-
var mode =
|
|
3914
|
+
export var setEditorModeUpdater = function setEditorModeUpdater(state, _ref39) {
|
|
3915
|
+
var mode = _ref39.mode;
|
|
3336
3916
|
var sketchesEnabled = getApplicationConfig().enableDrawOnMapSketches;
|
|
3337
3917
|
if (!sketchesEnabled && (mode === EDITOR_MODES.DRAW_POINT || mode === EDITOR_MODES.DRAW_LINESTRING)) {
|
|
3338
3918
|
return state;
|
|
@@ -3350,10 +3930,10 @@ export var setEditorModeUpdater = function setEditorModeUpdater(state, _ref29) {
|
|
|
3350
3930
|
* Update editor features
|
|
3351
3931
|
* @memberof visStateUpdaters
|
|
3352
3932
|
*/
|
|
3353
|
-
export function setFeaturesUpdater(state,
|
|
3933
|
+
export function setFeaturesUpdater(state, _ref40) {
|
|
3354
3934
|
var _lastFeature$properti, _lastFeature$properti2;
|
|
3355
|
-
var
|
|
3356
|
-
features =
|
|
3935
|
+
var _ref40$features = _ref40.features,
|
|
3936
|
+
features = _ref40$features === void 0 ? [] : _ref40$features;
|
|
3357
3937
|
var lastFeature = features.length && features[features.length - 1];
|
|
3358
3938
|
var newState = _objectSpread(_objectSpread({}, state), {}, {
|
|
3359
3939
|
editor: _objectSpread(_objectSpread({}, state.editor), {}, {
|
|
@@ -3426,10 +4006,10 @@ function findEditorFeature(state, feature) {
|
|
|
3426
4006
|
* Set user-facing GeoJSON properties on a sketch or polygon-filter feature.
|
|
3427
4007
|
* @memberof visStateUpdaters
|
|
3428
4008
|
*/
|
|
3429
|
-
export function setEditorFeaturePropertiesUpdater(state,
|
|
4009
|
+
export function setEditorFeaturePropertiesUpdater(state, _ref41) {
|
|
3430
4010
|
var _state$editor$selecte2;
|
|
3431
|
-
var feature =
|
|
3432
|
-
properties =
|
|
4011
|
+
var feature = _ref41.feature,
|
|
4012
|
+
properties = _ref41.properties;
|
|
3433
4013
|
if (!getApplicationConfig().enableDrawOnMapSketches) {
|
|
3434
4014
|
return state;
|
|
3435
4015
|
}
|
|
@@ -3468,9 +4048,9 @@ export function setEditorFeaturePropertiesUpdater(state, _ref31) {
|
|
|
3468
4048
|
* Set the current selected feature
|
|
3469
4049
|
* @memberof uiStateUpdaters
|
|
3470
4050
|
*/
|
|
3471
|
-
export var setSelectedFeatureUpdater = function setSelectedFeatureUpdater(state,
|
|
3472
|
-
var feature =
|
|
3473
|
-
selectionContext =
|
|
4051
|
+
export var setSelectedFeatureUpdater = function setSelectedFeatureUpdater(state, _ref42) {
|
|
4052
|
+
var feature = _ref42.feature,
|
|
4053
|
+
selectionContext = _ref42.selectionContext;
|
|
3474
4054
|
// add bbox for polygon filter to speed up filtering
|
|
3475
4055
|
var selectedFeature = feature;
|
|
3476
4056
|
if (feature !== null && feature !== void 0 && feature.properties) {
|
|
@@ -3492,8 +4072,8 @@ export var setSelectedFeatureUpdater = function setSelectedFeatureUpdater(state,
|
|
|
3492
4072
|
* Delete existing feature from filters
|
|
3493
4073
|
* @memberof visStateUpdaters
|
|
3494
4074
|
*/
|
|
3495
|
-
export function deleteFeatureUpdater(state,
|
|
3496
|
-
var feature =
|
|
4075
|
+
export function deleteFeatureUpdater(state, _ref43) {
|
|
4076
|
+
var feature = _ref43.feature;
|
|
3497
4077
|
if (!feature) {
|
|
3498
4078
|
return state;
|
|
3499
4079
|
}
|
|
@@ -3638,10 +4218,10 @@ export function setPolygonFilterAllLayersUpdater(state, payload) {
|
|
|
3638
4218
|
* @memberof visStateUpdaters
|
|
3639
4219
|
* @public
|
|
3640
4220
|
*/
|
|
3641
|
-
export function sortTableColumnUpdater(state,
|
|
3642
|
-
var dataId =
|
|
3643
|
-
column =
|
|
3644
|
-
mode =
|
|
4221
|
+
export function sortTableColumnUpdater(state, _ref44) {
|
|
4222
|
+
var dataId = _ref44.dataId,
|
|
4223
|
+
column = _ref44.column,
|
|
4224
|
+
mode = _ref44.mode;
|
|
3645
4225
|
var dataset = state.datasets[dataId];
|
|
3646
4226
|
if (!dataset) {
|
|
3647
4227
|
return state;
|
|
@@ -3662,9 +4242,9 @@ export function sortTableColumnUpdater(state, _ref34) {
|
|
|
3662
4242
|
* @memberof visStateUpdaters
|
|
3663
4243
|
* @public
|
|
3664
4244
|
*/
|
|
3665
|
-
export function pinTableColumnUpdater(state,
|
|
3666
|
-
var dataId =
|
|
3667
|
-
column =
|
|
4245
|
+
export function pinTableColumnUpdater(state, _ref45) {
|
|
4246
|
+
var dataId = _ref45.dataId,
|
|
4247
|
+
column = _ref45.column;
|
|
3668
4248
|
var dataset = state.datasets[dataId];
|
|
3669
4249
|
if (!dataset) {
|
|
3670
4250
|
return state;
|
|
@@ -3678,9 +4258,9 @@ export function pinTableColumnUpdater(state, _ref35) {
|
|
|
3678
4258
|
* @memberof visStateUpdaters
|
|
3679
4259
|
* @public
|
|
3680
4260
|
*/
|
|
3681
|
-
export function copyTableColumnUpdater(state,
|
|
3682
|
-
var dataId =
|
|
3683
|
-
column =
|
|
4261
|
+
export function copyTableColumnUpdater(state, _ref46) {
|
|
4262
|
+
var dataId = _ref46.dataId,
|
|
4263
|
+
column = _ref46.column;
|
|
3684
4264
|
var dataset = state.datasets[dataId];
|
|
3685
4265
|
if (!dataset) {
|
|
3686
4266
|
return state;
|
|
@@ -3704,9 +4284,9 @@ export function copyTableColumnUpdater(state, _ref36) {
|
|
|
3704
4284
|
* @memberof visStateUpdaters
|
|
3705
4285
|
* @public
|
|
3706
4286
|
*/
|
|
3707
|
-
export function setColumnDisplayFormatUpdater(state,
|
|
3708
|
-
var dataId =
|
|
3709
|
-
formats =
|
|
4287
|
+
export function setColumnDisplayFormatUpdater(state, _ref47) {
|
|
4288
|
+
var dataId = _ref47.dataId,
|
|
4289
|
+
formats = _ref47.formats;
|
|
3710
4290
|
var dataset = state.datasets[dataId];
|
|
3711
4291
|
if (!dataset) {
|
|
3712
4292
|
return state;
|
|
@@ -3753,38 +4333,38 @@ function yieldForPaint() {
|
|
|
3753
4333
|
setTimeout(resolve, 0);
|
|
3754
4334
|
});
|
|
3755
4335
|
}
|
|
3756
|
-
function requestDatasetColumnStatistics(
|
|
4336
|
+
function requestDatasetColumnStatistics(_x4) {
|
|
3757
4337
|
return _requestDatasetColumnStatistics.apply(this, arguments);
|
|
3758
4338
|
}
|
|
3759
4339
|
function _requestDatasetColumnStatistics() {
|
|
3760
|
-
_requestDatasetColumnStatistics = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function
|
|
4340
|
+
_requestDatasetColumnStatistics = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4(_ref48) {
|
|
3761
4341
|
var dataset, field, filterProps, mappedValue, values, result;
|
|
3762
|
-
return _regeneratorRuntime.wrap(function
|
|
3763
|
-
while (1) switch (
|
|
4342
|
+
return _regeneratorRuntime.wrap(function _callee4$(_context4) {
|
|
4343
|
+
while (1) switch (_context4.prev = _context4.next) {
|
|
3764
4344
|
case 0:
|
|
3765
|
-
dataset =
|
|
3766
|
-
|
|
4345
|
+
dataset = _ref48.dataset, field = _ref48.field;
|
|
4346
|
+
_context4.next = 3;
|
|
3767
4347
|
return yieldForPaint();
|
|
3768
4348
|
case 3:
|
|
3769
4349
|
filterProps = field.filterProps || dataset.getColumnFilterProps(field.name);
|
|
3770
4350
|
mappedValue = getMappedValue(filterProps);
|
|
3771
4351
|
values = mappedValue !== null && mappedValue !== void 0 ? mappedValue : collectColumnValues(dataset.dataContainer, field.fieldIdx);
|
|
3772
|
-
|
|
4352
|
+
_context4.next = 8;
|
|
3773
4353
|
return getColumnStatistics({
|
|
3774
4354
|
values: values,
|
|
3775
4355
|
fieldType: field.type
|
|
3776
4356
|
});
|
|
3777
4357
|
case 8:
|
|
3778
|
-
result =
|
|
3779
|
-
return
|
|
4358
|
+
result = _context4.sent;
|
|
4359
|
+
return _context4.abrupt("return", {
|
|
3780
4360
|
result: result,
|
|
3781
4361
|
filterProps: filterProps
|
|
3782
4362
|
});
|
|
3783
4363
|
case 10:
|
|
3784
4364
|
case "end":
|
|
3785
|
-
return
|
|
4365
|
+
return _context4.stop();
|
|
3786
4366
|
}
|
|
3787
|
-
},
|
|
4367
|
+
}, _callee4);
|
|
3788
4368
|
}));
|
|
3789
4369
|
return _requestDatasetColumnStatistics.apply(this, arguments);
|
|
3790
4370
|
}
|
|
@@ -3795,9 +4375,9 @@ var LOAD_COLUMN_STATS_TASK = Task.fromPromise(requestDatasetColumnStatistics, 'L
|
|
|
3795
4375
|
* @memberof visStateUpdaters
|
|
3796
4376
|
* @public
|
|
3797
4377
|
*/
|
|
3798
|
-
export function loadColumnStatsUpdater(state,
|
|
3799
|
-
var dataId =
|
|
3800
|
-
fieldName =
|
|
4378
|
+
export function loadColumnStatsUpdater(state, _ref49) {
|
|
4379
|
+
var dataId = _ref49.dataId,
|
|
4380
|
+
fieldName = _ref49.fieldName;
|
|
3801
4381
|
var fieldNamesToLoad = toArray(fieldName);
|
|
3802
4382
|
var dataset = state.datasets[dataId];
|
|
3803
4383
|
var fieldsToLoad = dataset === null || dataset === void 0 ? void 0 : dataset.fields.filter(function (f) {
|
|
@@ -3818,9 +4398,9 @@ export function loadColumnStatsUpdater(state, _ref39) {
|
|
|
3818
4398
|
return LOAD_COLUMN_STATS_TASK({
|
|
3819
4399
|
dataset: newDataset,
|
|
3820
4400
|
field: f
|
|
3821
|
-
}).bimap(function (
|
|
3822
|
-
var result =
|
|
3823
|
-
filterProps =
|
|
4401
|
+
}).bimap(function (_ref50) {
|
|
4402
|
+
var result = _ref50.result,
|
|
4403
|
+
filterProps = _ref50.filterProps;
|
|
3824
4404
|
return loadColumnStatsSuccess(newDataset.id, f.name, result, filterProps);
|
|
3825
4405
|
}, function (error) {
|
|
3826
4406
|
return loadColumnStatsError(newDataset.id, f.name, error);
|
|
@@ -3835,11 +4415,11 @@ export function loadColumnStatsUpdater(state, _ref39) {
|
|
|
3835
4415
|
* @memberof visStateUpdaters
|
|
3836
4416
|
* @public
|
|
3837
4417
|
*/
|
|
3838
|
-
export function loadColumnStatsSuccessUpdater(state,
|
|
3839
|
-
var result =
|
|
3840
|
-
filterProps =
|
|
3841
|
-
dataId =
|
|
3842
|
-
fieldName =
|
|
4418
|
+
export function loadColumnStatsSuccessUpdater(state, _ref51) {
|
|
4419
|
+
var result = _ref51.result,
|
|
4420
|
+
filterProps = _ref51.filterProps,
|
|
4421
|
+
dataId = _ref51.dataId,
|
|
4422
|
+
fieldName = _ref51.fieldName;
|
|
3843
4423
|
var dataset = state.datasets[dataId];
|
|
3844
4424
|
var field = ((dataset === null || dataset === void 0 ? void 0 : dataset.fields) || []).find(function (f) {
|
|
3845
4425
|
return f.name === fieldName;
|
|
@@ -3867,10 +4447,10 @@ export function loadColumnStatsSuccessUpdater(state, _ref41) {
|
|
|
3867
4447
|
* @memberof visStateUpdaters
|
|
3868
4448
|
* @public
|
|
3869
4449
|
*/
|
|
3870
|
-
export function loadColumnStatsErrorUpdater(state,
|
|
3871
|
-
var error =
|
|
3872
|
-
dataId =
|
|
3873
|
-
fieldName =
|
|
4450
|
+
export function loadColumnStatsErrorUpdater(state, _ref52) {
|
|
4451
|
+
var error = _ref52.error,
|
|
4452
|
+
dataId = _ref52.dataId,
|
|
4453
|
+
fieldName = _ref52.fieldName;
|
|
3874
4454
|
Console.error(error);
|
|
3875
4455
|
var dataset = state.datasets[dataId];
|
|
3876
4456
|
var field = ((dataset === null || dataset === void 0 ? void 0 : dataset.fields) || []).find(function (f) {
|
|
@@ -3951,9 +4531,9 @@ _action) {
|
|
|
3951
4531
|
}
|
|
3952
4532
|
});
|
|
3953
4533
|
}
|
|
3954
|
-
export function setFilterAnimationTimeConfigUpdater(state,
|
|
3955
|
-
var idx =
|
|
3956
|
-
config =
|
|
4534
|
+
export function setFilterAnimationTimeConfigUpdater(state, _ref53) {
|
|
4535
|
+
var idx = _ref53.idx,
|
|
4536
|
+
config = _ref53.config;
|
|
3957
4537
|
var oldFilter = state.filters[idx];
|
|
3958
4538
|
if (!oldFilter) {
|
|
3959
4539
|
Console.error("filters.".concat(idx, " is undefined"));
|
|
@@ -3983,8 +4563,8 @@ function checkTimeConfigArgs(config) {
|
|
|
3983
4563
|
/**
|
|
3984
4564
|
* Update editor
|
|
3985
4565
|
*/
|
|
3986
|
-
export function setLayerAnimationTimeConfigUpdater(state,
|
|
3987
|
-
var config =
|
|
4566
|
+
export function setLayerAnimationTimeConfigUpdater(state, _ref54) {
|
|
4567
|
+
var config = _ref54.config;
|
|
3988
4568
|
if (!config) {
|
|
3989
4569
|
return state;
|
|
3990
4570
|
}
|
|
@@ -4182,8 +4762,8 @@ export function setTimeFilterTimelineModeUpdater(state, action) {
|
|
|
4182
4762
|
* @returns nextState
|
|
4183
4763
|
* @public
|
|
4184
4764
|
*/
|
|
4185
|
-
export var setLoadingIndicatorUpdater = function setLoadingIndicatorUpdater(state,
|
|
4186
|
-
var change =
|
|
4765
|
+
export var setLoadingIndicatorUpdater = function setLoadingIndicatorUpdater(state, _ref55) {
|
|
4766
|
+
var change = _ref55.payload.change;
|
|
4187
4767
|
var loadingIndicatorValue = state.loadingIndicatorValue;
|
|
4188
4768
|
if (!loadingIndicatorValue) {
|
|
4189
4769
|
loadingIndicatorValue = 0;
|
|
@@ -4303,10 +4883,10 @@ function findChildDatasetIds(value) {
|
|
|
4303
4883
|
}
|
|
4304
4884
|
|
|
4305
4885
|
// moved unmerged layers, filters, interactions
|
|
4306
|
-
function moveValueToBeMerged(state, propValues,
|
|
4307
|
-
var prop =
|
|
4308
|
-
toMergeProp =
|
|
4309
|
-
saveUnmerged =
|
|
4886
|
+
function moveValueToBeMerged(state, propValues, _ref57) {
|
|
4887
|
+
var prop = _ref57.prop,
|
|
4888
|
+
toMergeProp = _ref57.toMergeProp,
|
|
4889
|
+
saveUnmerged = _ref57.saveUnmerged;
|
|
4310
4890
|
// remove prop value from state
|
|
4311
4891
|
// TODO: should we add remove updater to merger as well?
|
|
4312
4892
|
if (!propValues) {
|
|
@@ -4363,17 +4943,17 @@ export function prepareStateForDatasetReplace(state, dataId, dataIdToUse) {
|
|
|
4363
4943
|
}
|
|
4364
4944
|
return nextState;
|
|
4365
4945
|
}
|
|
4366
|
-
export function replaceDatasetDepsInState(state,
|
|
4367
|
-
var dataId =
|
|
4368
|
-
dataIdToUse =
|
|
4946
|
+
export function replaceDatasetDepsInState(state, _ref58) {
|
|
4947
|
+
var dataId = _ref58.dataId,
|
|
4948
|
+
dataIdToUse = _ref58.dataIdToUse;
|
|
4369
4949
|
var serializedState = serializeVisState(state, state.schema);
|
|
4370
|
-
var nextState = state.mergers.reduce(function (accuState,
|
|
4371
|
-
var prop =
|
|
4372
|
-
toMergeProp =
|
|
4373
|
-
replaceParentDatasetIds =
|
|
4374
|
-
getChildDatasetIds =
|
|
4375
|
-
saveUnmerged =
|
|
4376
|
-
preserveOrder =
|
|
4950
|
+
var nextState = state.mergers.reduce(function (accuState, _ref59) {
|
|
4951
|
+
var prop = _ref59.prop,
|
|
4952
|
+
toMergeProp = _ref59.toMergeProp,
|
|
4953
|
+
replaceParentDatasetIds = _ref59.replaceParentDatasetIds,
|
|
4954
|
+
getChildDatasetIds = _ref59.getChildDatasetIds,
|
|
4955
|
+
saveUnmerged = _ref59.saveUnmerged,
|
|
4956
|
+
preserveOrder = _ref59.preserveOrder;
|
|
4377
4957
|
// get dataset ids that are depends on this dataset
|
|
4378
4958
|
var props = toArray(prop);
|
|
4379
4959
|
var toMergeProps = toArray(toMergeProp);
|
|
@@ -4401,11 +4981,11 @@ export function replaceDatasetDepsInState(state, _ref48) {
|
|
|
4401
4981
|
}, state);
|
|
4402
4982
|
return nextState;
|
|
4403
4983
|
}
|
|
4404
|
-
function replacePropValueInState(state, replacedItem,
|
|
4405
|
-
var prop =
|
|
4406
|
-
toMergeProp =
|
|
4407
|
-
getChildDatasetIds =
|
|
4408
|
-
saveUnmerged =
|
|
4984
|
+
function replacePropValueInState(state, replacedItem, _ref60) {
|
|
4985
|
+
var prop = _ref60.prop,
|
|
4986
|
+
toMergeProp = _ref60.toMergeProp,
|
|
4987
|
+
getChildDatasetIds = _ref60.getChildDatasetIds,
|
|
4988
|
+
saveUnmerged = _ref60.saveUnmerged;
|
|
4409
4989
|
// prop is depends on the dataset to be replaced
|
|
4410
4990
|
// remove prop from state, and move it to toBeMerged
|
|
4411
4991
|
var nextState = moveValueToBeMerged(state, replacedItem, {
|
|
@@ -4423,4 +5003,4 @@ function replacePropValueInState(state, replacedItem, _ref50) {
|
|
|
4423
5003
|
}
|
|
4424
5004
|
return nextState;
|
|
4425
5005
|
}
|
|
4426
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJiYm94IiwiY29weSIsImRlZXBtZXJnZSIsImNvbnNvbGUiLCJDb25zb2xlIiwiY2xvbmVEZWVwIiwiZ2V0IiwiaXNFcXVhbCIsInBpY2siLCJ1bmlxIiwieG9yIiwiVGFzayIsImRpc2FibGVTdGFja0NhcHR1cmluZyIsIndpdGhUYXNrIiwiREVMQVlfVEFTSyIsIkFDVElPTl9UQVNLIiwiTE9BRF9GSUxFX1RBU0siLCJQUk9DRVNTX0ZJTEVfREFUQSIsIlVOV1JBUF9UQVNLIiwiYWRkTm90aWZpY2F0aW9uIiwiYXBwbHlMYXllckNvbmZpZyIsImNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzIiwibGF5ZXJDb25maWdDaGFuZ2UiLCJsYXllclR5cGVDaGFuZ2UiLCJsYXllclZpc0NvbmZpZ0NoYW5nZSIsImxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSIsImxvYWRGaWxlU3RlcFN1Y2Nlc3MiLCJsb2FkRmlsZXNFcnIiLCJsb2FkRmlsZXNTdWNjZXNzIiwibG9hZE5leHRGaWxlIiwibmV4dEZpbGVCYXRjaCIsInNldEZpbHRlciIsInByb2Nlc3NGaWxlQ29udGVudCIsImZpdEJvdW5kcyIsImZpdE1hcEJvdW5kcyIsInRvZ2dsZUxheWVyRm9yTWFwIiwiYXBwbHlGaWx0ZXJDb25maWciLCJsb2FkQ29sdW1uU3RhdHNTdWNjZXNzIiwibG9hZENvbHVtblN0YXRzRXJyb3IiLCJGSUxURVJfVVBEQVRFUl9QUk9QUyIsImFkZE5ld0xheWVyc1RvU3BsaXRNYXAiLCJzbmFwVG9NYXJrcyIsImFwcGx5RmlsdGVyRmllbGROYW1lIiwiYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyIsImFycmF5SW5zZXJ0IiwiY29tcHV0ZVNwbGl0TWFwTGF5ZXJzIiwiYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbiIsImVycm9yTm90aWZpY2F0aW9uIiwiZWRpdG9yRmVhdHVyZXNUb0ZlYXR1cmVDb2xsZWN0aW9uIiwibWVyZ2VVc2VyRmVhdHVyZVByb3BlcnRpZXMiLCJ0b1NrZXRjaEZlYXR1cmUiLCJmZWF0dXJlVG9GaWx0ZXJWYWx1ZSIsImZpbHRlckRhdGFzZXRDUFUiLCJnZW5lcmF0ZVBvbHlnb25GaWx0ZXIiLCJnZXREZWZhdWx0RmlsdGVyIiwiZ2V0RmlsdGVySWRJbkZlYXR1cmUiLCJnZXRUaW1lV2lkZ2V0VGl0bGVGb3JtYXR0ZXIiLCJpc0luUmFuZ2UiLCJpc09iamVjdCIsImlzUGxhaW5PYmplY3QiLCJpc1JnYkNvbG9yIiwicGFyc2VGaWVsZFZhbHVlIiwicmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzIiwic2V0IiwidXBkYXRlRmlsdGVyUGxvdCIsInJlbW92ZUZpbHRlclBsb3QiLCJpc0xheWVyQW5pbWF0YWJsZSIsImlzU2lkZUZpbHRlciIsImdldEFwcGxpY2F0aW9uQ29uZmlnIiwiZ2VuZXJhdGVIYXNoSWQiLCJ0b0FycmF5IiwiYXJyYXlNb3ZlIiwiQU5JTUFUSU9OX1dJTkRPVyIsIkJBU0VfU1BFRUQiLCJDT01QQVJFX1RZUEVTIiwiREVGQVVMVF9URVhUX0xBQkVMIiwiRURJVE9SX01PREVTIiwiRklMVEVSX1RZUEVTIiwiRklMVEVSX1ZJRVdfVFlQRVMiLCJMQVlFUl9UWVBFUyIsIkZQUyIsIkxJR0hUX0FORF9TSEFET1dfRUZGRUNUIiwiRElTVEFOQ0VfRk9HX1RZUEUiLCJTVVJGQUNFX0ZPR19UWVBFIiwiTUFYX0RFRkFVTFRfVE9PTFRJUFMiLCJQTE9UX1RZUEVTIiwiU09SVF9PUkRFUiIsIlNZTkNfVElNRUxJTkVfTU9ERVMiLCJDSEFOTkVMX1NDQUxFUyIsIlNDQUxFX1RZUEVTIiwiSU5JVElBTF9BTk5PVEFUSU9OX0tJTkQiLCJJTklUSUFMX0FOTk9UQVRJT05fQU5HTEUiLCJJTklUSUFMX0FOTk9UQVRJT05fQVJNX0xFTkdUSCIsIklOSVRJQUxfQU5OT1RBVElPTl9URVhUX1dJRFRIIiwiSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfSEVJR0hUIiwiSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEgiLCJJTklUSUFMX0FOTk9UQVRJT05fTElORV9DT0xPUiIsIkFubm90YXRpb25LaW5kIiwiRGF0YXNldFR5cGUiLCJnZXRSZW1vdGVTb3VyY2VGb3JtYXQiLCJMQVlFUl9JRF9MRU5HVEgiLCJMYXllciIsIkxheWVyQ2xhc3NlcyIsImFwcGx5XyIsImNvbXBvc2VfIiwiZmlsdGVyT3V0QnlJZCIsIm1lcmdlXyIsInBheWxvYWRfIiwicGlja18iLCJyZW1vdmVFbGVtZW50QXRJbmRleCIsInN3YXBfIiwiaXNWYWxpZE1lcmdlciIsIm1lcmdlU3RhdGVGcm9tTWVyZ2VycyIsIlZJU19TVEFURV9NRVJHRVJTIiwiY3JlYXRlTGF5ZXJGcm9tQ29uZmlnIiwicGFyc2VMYXllckNvbmZpZyIsInNlcmlhbGl6ZUZpbHRlciIsInNlcmlhbGl6ZUxheWVyIiwic2VyaWFsaXplVmlzU3RhdGUiLCJ2YWxpZGF0ZUxheWVyV2l0aERhdGEiLCJLZXBsZXJHTFNjaGVtYSIsImxvYWRFeHRlcm5hbGx5SG9zdGVkRGF0YXNldCIsInByb2Nlc3NHZW9qc29uIiwiYXNzaWduR3B1Q2hhbm5lbCIsImNvcHlUYWJsZUFuZFVwZGF0ZSIsImNyZWF0ZU5ld0RhdGFFbnRyeSIsInBpblRhYmxlQ29sdW1ucyIsInNldEZpbHRlckdwdU1vZGUiLCJzb3J0RGF0YXNldEJ5Q29sdW1uIiwiZmluZEZpZWxkc1RvU2hvdyIsImNhbGN1bGF0ZUxheWVyRGF0YSIsImZpbmREZWZhdWx0TGF5ZXIiLCJnZXRMYXllck9yZGVyRnJvbUxheWVycyIsIm1lcmdlTGF5ZXJWaXNDb25maWdGb3JOZXdEYXRhc2V0cyIsImdldE5ld0xheWVyR3JvdXAiLCJhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIiLCJyZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIiLCJnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIiLCJmaW5kUGFyZW50R3JvdXBGb3JMYXllciIsImdldEluZGV4RnJvbUxheWVyRW50cnlJZCIsInVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIiLCJnZXRGbGF0TGF5ZXJPcmRlciIsInJlcGxhY2VMYXllckVudHJ5SW5MYXllck9yZGVyIiwiZ2V0UHJvcFZhbHVlVG9NZXJnZXIiLCJoYXNQcm9wc1RvTWVyZ2UiLCJtZXJnZURhdGFzZXRzQnlPcmRlciIsImZpeEVmZmVjdE9yZGVyIiwiZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMiLCJnZXRJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzIiwibWVyZ2VUaW1lRG9tYWlucyIsImFkanVzdFZhbHVlVG9BbmltYXRpb25XaW5kb3ciLCJ1cGRhdGVUaW1lRmlsdGVyUGxvdFR5cGUiLCJnZXREZWZhdWx0VGltZUZvcm1hdCIsIkxheWVyVG9GaWx0ZXJUaW1lSW50ZXJ2YWwiLCJUSU1FX0lOVEVSVkFMU19PUkRFUkVEIiwibWVyZ2VGaWx0ZXJEb21haW4iLCJpbml0Q3VzdG9tUGFsZXR0ZUJ5Q3VzdG9tU2NhbGUiLCJjb2xsZWN0Q29sdW1uVmFsdWVzIiwiZ2V0Q29sdW1uU3RhdGlzdGljcyIsImNyZWF0ZUVmZmVjdCIsImZpbmRNYXBCb3VuZHMiLCJ2aXNTdGF0ZVVwZGF0ZXJzIiwiZGVmYXVsdEludGVyYWN0aW9uQ29uZmlnIiwidG9vbHRpcCIsImlkIiwibGFiZWwiLCJlbmFibGVkIiwiY29uZmlnIiwiZmllbGRzVG9TaG93IiwiY29tcGFyZU1vZGUiLCJjb21wYXJlVHlwZSIsIkFCU09MVVRFIiwiZ2VvY29kZXIiLCJwb3NpdGlvbiIsImxpbWl0U2VhcmNoIiwiYnJ1c2giLCJzaXplIiwiY29vcmRpbmF0ZSIsIkRFRkFVTFRfQU5JTUFUSU9OX0NPTkZJRyIsImRvbWFpbiIsImN1cnJlbnRUaW1lIiwic3BlZWQiLCJpc0FuaW1hdGluZyIsInRpbWVTdGVwcyIsInRpbWVGb3JtYXQiLCJ0aW1lem9uZSIsImRlZmF1bHRUaW1lRm9ybWF0IiwiaGlkZUNvbnRyb2wiLCJkdXJhdGlvbiIsIkRFRkFVTFRfRURJVE9SIiwibW9kZSIsIkRSQVdfUE9MWUdPTiIsImZlYXR1cmVzIiwic2VsZWN0ZWRGZWF0dXJlIiwidmlzaWJsZSIsIklOSVRJQUxfVklTX1NUQVRFIiwibWFwSW5mbyIsInRpdGxlIiwiZGVzY3JpcHRpb24iLCJsYXllcnMiLCJsYXllckRhdGEiLCJsYXllclRvQmVNZXJnZWQiLCJsYXllck9yZGVyIiwibGF5ZXJPcmRlclRvQmVNZXJnZWQiLCJmaWx0ZXJzIiwiZmlsdGVyVG9CZU1lcmdlZCIsImRhdGFzZXRzIiwiZWRpdGluZ0RhdGFzZXQiLCJ1bmRlZmluZWQiLCJlZmZlY3RzIiwiZWZmZWN0T3JkZXIiLCJhbm5vdGF0aW9ucyIsImFubm90YXRpb25zVG9CZU1lcmdlZCIsInNlbGVjdGVkQW5ub3RhdGlvbklkIiwiaXNFZGl0aW5nQW5ub3RhdGlvblRleHQiLCJpbnRlcmFjdGlvbkNvbmZpZyIsImludGVyYWN0aW9uVG9CZU1lcmdlZCIsImxheWVyQmxlbmRpbmciLCJvdmVybGF5QmxlbmRpbmciLCJob3ZlckluZm8iLCJjbGlja2VkIiwibW91c2VQb3MiLCJtYXhEZWZhdWx0VG9vbHRpcHMiLCJzcGxpdE1hcHMiLCJzcGxpdE1hcHNUb0JlTWVyZ2VkIiwiaXNNZXJnaW5nRGF0YXNldHMiLCJsYXllckNsYXNzZXMiLCJhbmltYXRpb25Db25maWciLCJlZGl0b3IiLCJmaWxlTG9hZGluZyIsImZpbGVMb2FkaW5nUHJvZ3Jlc3MiLCJsb2FkaW5nSW5kaWNhdG9yVmFsdWUiLCJsb2FkZXJzIiwibG9hZE9wdGlvbnMiLCJtZXJnZXJzIiwic2NoZW1hIiwiQUNUSU9OX1RBU0tfRklUX0JPVU5EUyIsImZyb21DYWxsYmFjayIsIl8iLCJjYiIsIkFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04iLCJ1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEiLCJzdGF0ZSIsIl9yZWYiLCJsYXllciIsImlkeCIsIl9vYmplY3RTcHJlYWQiLCJtYXAiLCJseXIiLCJpIiwiZCIsInVwZGF0ZVN0YXRlT25MYXllclZpc2liaWxpdHlDaGFuZ2UiLCJuZXdTdGF0ZSIsImxlbmd0aCIsImlzVmlzaWJsZSIsImFuaW1hdGlvbiIsInVwZGF0ZUFuaW1hdGlvbkRvbWFpbiIsInBpY2tDaGFuZ2VkUHJvcHMiLCJwcmV2IiwibmV4dCIsImNoYW5nZWRQcm9wcyIsInBpY2tQcm9wc09mIiwib2JqIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJrZXkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJWSVNVQUxfQ0hBTk5FTF9QUk9QX1RZUEVTIiwiYXBwbHlMYXllckNvbmZpZ1VwZGF0ZXIiLCJhY3Rpb24iLCJfc2VyaWFsaXplTGF5ZXIiLCJvbGRMYXllcklkIiwibmV3TGF5ZXJDb25maWciLCJsYXllckluZGV4IiwibmV3UGFyc2VkTGF5ZXIiLCJvbGRMYXllciIsImZpbmQiLCJsIiwiZGF0YXNldCIsImRhdGFJZCIsIm5ld0xheWVyIiwibmV4dFN0YXRlIiwidHlwZSIsIm9sZExheWVySW5kZXgiLCJmaW5kSW5kZXgiLCJsYXllclR5cGVDaGFuZ2VVcGRhdGVyIiwibmV3TGF5ZXJJZCIsInNlcmlhbGl6ZWRPbGRMYXllciIsInNlcmlhbGl6ZWROZXdMYXllciIsImNoYW5nZWQiLCJ2aXNDb25maWciLCJsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIiLCJ2aXN1YWxDaGFubmVscyIsImNoYW5uZWxOYW1lIiwiY2hhbm5lbCIsImNoYW5uZWxQcm9wTmFtZXMiLCJwcm9wIiwic29tZSIsImxheWVyVmlzdWFsQ2hhbm5lbENoYW5nZVVwZGF0ZXIiLCJfaXRlcmF0b3IiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIl9zdGVwIiwicyIsIm4iLCJkb25lIiwidmFsdWUiLCJlcnIiLCJlIiwiZiIsImxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlciIsInVwZGF0ZWxheWVyVmlzaWJpbHR5IiwiZmlsdGVySW5kZXgiLCJmaWx0ZXJTeW5jZWRXaXRoVGltZWxpbmUiLCJzeW5jVGltZUZpbHRlcldpdGhMYXllclRpbWVsaW5lVXBkYXRlciIsImVuYWJsZSIsInByb3BzIiwibmV3Q29uZmlnIiwiX2FjdGlvbiRuZXdDb25maWciLCJyZXN0Q29uZmlnIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwiX2V4Y2x1ZGVkIiwic3RhdGVXaXRoRGF0YUlkIiwibGF5ZXJEYXRhSWRDaGFuZ2VVcGRhdGVyIiwibmV4dExheWVyIiwidXBkYXRlTGF5ZXJDb25maWciLCJzaG91bGRDYWxjdWxhdGVMYXllckRhdGEiLCJvbGRMYXllckRhdGEiLCJ1cGRhdGVMYXllckRhdGFSZXN1bHQiLCJsYXllckFuaW1hdGlvbkNoYW5nZVVwZGF0ZXIiLCJfZGVmaW5lUHJvcGVydHkiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhIiwibGF5ZXJUb2dnbGVWaXNpYmlsaXR5VXBkYXRlciIsImxheWVySWQiLCJzcGxpdE1hcElkIiwibWFwSW5kZXgiLCJzbSIsInRvZ2dsZUxheWVyRm9yTWFwVXBkYXRlciIsInN5bmNlZFdpdGhMYXllclRpbWVsaW5lIiwibGF5ZXJTZXRJc1ZhbGlkVXBkYXRlciIsImlzVmFsaWQiLCJsYXllclRvVXBkYXRlIiwibmV3RGF0YSIsIl9jYWxjdWxhdGVMYXllckRhdGEyIiwiYWRkT3JSZW1vdmVUZXh0TGFiZWxzIiwibmV3RmllbGRzIiwidGV4dExhYmVsIiwiZGVmYXVsdFRleHRMYWJlbCIsImFyZ3VtZW50cyIsIm5ld1RleHRMYWJlbCIsInNsaWNlIiwiY3VycmVudEZpZWxkcyIsInRsIiwiZmllbGQiLCJuYW1lIiwiZmlsdGVyIiwiYWRkRmllbGRzIiwiaW5jbHVkZXMiLCJkZWxldGVGaWVsZHMiLCJmZCIsImNvbmNhdCIsIl90b0NvbnN1bWFibGVBcnJheSIsImFmIiwidXBkYXRlVGV4dExhYmVsUHJvcEFuZFZhbHVlIiwic3BsaWNlIiwibGF5ZXJUZXh0TGFiZWxDaGFuZ2VVcGRhdGVyIiwiX29sZExheWVyJGdldERlZmF1bHRMIiwiX29sZExheWVyJGdldERlZmF1bHRMMiIsImdldERlZmF1bHRMYXllckNvbmZpZyIsInZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhIiwibG9hZGVkTGF5ZXIiLCJhbGxvd0VtcHR5Q29sdW1uIiwiaXNWYWxpZFRvU2F2ZSIsInZhbGlkYXRlZCIsIm9sZExheWVyVHlwZSIsIm5ld0RhdGFzZXRGaWVsZHMiLCJmaWVsZHMiLCJyZW1hcHBlZEZpZWxkcyIsInZhbHVlcyIsIl9yZWYyIiwiZmllbGRLZXkiLCJjdXJyZW50RmllbGQiLCJtYXRjaGVkIiwiX3JlZjMiLCJ2YWxpZGF0ZVZpc3VhbENoYW5uZWwiLCJpc0NvbmZpZ0FjdGl2ZSIsInVwZGF0ZUxheWVyRG9tYWluIiwiX2NhbGN1bGF0ZUxheWVyRGF0YTMiLCJzZXRJbml0aWFsTGF5ZXJDb25maWciLCJyZXN1bHQiLCJmaW5kRGVmYXVsdExheWVyUHJvcHMiLCJBcnJheSIsImlzQXJyYXkiLCJuZXdUeXBlIiwib2xkSWQiLCJlcnJvciIsImRlZmF1bHRMYXllclByb3BzIiwiYXNzaWduQ29uZmlnVG9MYXllciIsInZpc0NvbmZpZ1NldHRpbmdzIiwiaXNMYXllckhvdmVyZWQiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNCIsInNldHRpbmdzIiwiX3NldHRpbmdzJGxheWVycyIsIm9sZExheWVyTWFwIiwib3RoZXJMYXllcnMiLCJfdG9Qcm9wZXJ0eUtleSIsIm5ld1Zpc0NvbmZpZyIsInVwZGF0ZUxheWVyVmlzQ29uZmlnIiwidXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsIiwidXBkYXRlZFN0YXRlIiwidmlzdWFsQ2hhbm5lbCIsImNoYW5uZWxTY2FsZVR5cGUiLCJjb2xvciIsInVwZGF0ZUxheWVyQ29sb3JVSSIsInJhbmdlIiwiY29sb3JSYW5nZUNvbmZpZyIsImNvbG9yVUkiLCJjdXN0b21CcmVha3MiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNSIsInNjYWxlIiwiY3VzdG9tT3JkaW5hbCIsImN1c3RvbVBhbGV0dGUiLCJvcmRpbmFsRG9tYWluIiwiY29sb3JCcmVha3MiLCJzaG93Q29sb3JDaGFydCIsImVkaXRCb3VuZHMiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNiIsInNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIiLCJfcmVmNCIsInJlZHVjZSIsImFjY3UiLCJzZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlciIsInNldEZpbHRlclVwZGF0ZXIiLCJzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyIiwiX3JlZjUiLCJhbmltYXRpb25XaW5kb3ciLCJuZXdGaWx0ZXIiLCJuZXdTeW5jVGltZWxpbmVNb2RlIiwiZ2V0U3luY0FuaW1hdGlvbk1vZGUiLCJzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlciIsImFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlciIsIl9zZXJpYWxpemVGaWx0ZXIiLCJmaWx0ZXJJZCIsIm9sZEZpbHRlciIsInNlcmlhbGl6ZWRPbGRGaWx0ZXIiLCJzZXJpYWxpemVkTmV3RmlsdGVyIiwiX2FjdGlvbiR2YWx1ZUluZGV4IiwidmFsdWVJbmRleCIsImRhdGFzZXRJZHNUb0ZpbHRlciIsIl9sb29wIiwicmVzIiwidiIsIl91cGRhdGVGaWx0ZXJQcm9wIiwiZW5sYXJnZWRGaWx0ZXIiLCJ2aWV3IiwiZW5sYXJnZWQiLCJzaWRlIiwiZmlsdGVyZWREYXRhc2V0cyIsImZpbHRlcldpdGhQTG90IiwidXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhIiwidGltZVJhbmdlIiwiYWRqdXN0QW5pbWF0aW9uQ29uZmlnV2l0aEZpbHRlciIsIl91cGRhdGVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgiLCJfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4IiwibmV4dFZhbHVlIiwiX2kiLCJfYXJyIiwibmV4dFZhbCIsImRvbWFpblN0ZXBzIiwibmV4dEZpbHRlciIsInN0ZXAiLCJkYXRhc2V0SWRzIiwib2xkRGF0YUlkIiwiZGF0YXNldElkIiwiX2FwcGx5RmlsdGVyRmllbGROYW1lIiwibWVyZ2VEb21haW4iLCJ1cGRhdGVkRmlsdGVyIiwibmV3RGF0YXNldCIsImdwdSIsImxheWVySWREaWZmZXJlbmNlIiwibGF5ZXJEYXRhSWRzIiwibGlkIiwibmV3RGF0YUlkcyIsInNldEZpbHRlclBsb3RVcGRhdGVyIiwiX3JlZjYiLCJuZXdQcm9wIiwicGxvdFR5cGUiLCJjaGFydFR5cGUiLCJ5QXhpcyIsImxpbmVDaGFydCIsImhpc3RvZ3JhbSIsImFkZEZpbHRlclVwZGF0ZXIiLCJjcmVhdGVPclVwZGF0ZUZpbHRlclVwZGF0ZXIiLCJvcmlnaW5hbEluZGV4IiwiaW5kZXgiLCJsYXllckNvbG9yVUlDaGFuZ2VVcGRhdGVyIiwiX3JlZjciLCJvbGRWaXhDb25maWciLCJ0b2dnbGVGaWx0ZXJBbmltYXRpb25VcGRhdGVyIiwiaXNGaWx0ZXJBbmltYXRpb25Db25maWciLCJzZXRBbmltYXRpb25Db25maWdVcGRhdGVyIiwidG9nZ2xlTGF5ZXJBbmltYXRpb25VcGRhdGVyIiwidG9nZ2xlTGF5ZXJBbmltYXRpb25Db250cm9sVXBkYXRlciIsInVwZGF0ZUZpbHRlckFuaW1hdGlvblNwZWVkVXBkYXRlciIsInVwZGF0ZUxheWVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyIiwiX3JlZjgiLCJzZXRGaWx0ZXJWaWV3VXBkYXRlciIsInNob3VsZFJlc2V0T3RoZXJGaWx0ZXJzVmlldyIsInRvZ2dsZUZpbHRlckZlYXR1cmVVcGRhdGVyIiwicmVtb3ZlRmlsdGVyVXBkYXRlciIsIl9zdGF0ZSRmaWx0ZXJzJGlkeCIsIm5ld0ZpbHRlcnMiLCJuZXdFZGl0b3IiLCJhZGRMYXllclVwZGF0ZXIiLCJuZXdMYXllckRhdGEiLCJ3YXJuIiwiX2FjdGlvbiRkYXRhc2V0SWQiLCJkZWZhdWx0RGF0YXNldCIsInJlbW92ZUxheWVyVXBkYXRlciIsIl9yZWY5IiwiTnVtYmVyIiwiaXNGaW5pdGUiLCJsYXllclRvUmVtb3ZlIiwicmVvcmRlckxheWVyVXBkYXRlciIsIl9yZWYwIiwib3JkZXIiLCJhZGRMYXllckdyb3VwVXBkYXRlciIsImxheWVyR3JvdXAiLCJuZXdMYXllck9yZGVyIiwicmVtb3ZlTGF5ZXJHcm91cFVwZGF0ZXIiLCJsYXllckdyb3VwVG9SZW1vdmUiLCJsYXllcklkc1RvUmVtb3ZlIiwidXBkYXRlTGF5ZXJHcm91cFVwZGF0ZXIiLCJvcHRpb25zIiwibmV3TGF5ZXJHcm91cCIsImxheWVySWRzIiwiYWNjIiwiYWRkTGF5ZXJUb0xheWVyR3JvdXBVcGRhdGVyIiwibGF5ZXJHcm91cElkIiwiZW50cnkiLCJuZXdHcm91cExheWVyT3JkZXIiLCJyZW1vdmVMYXllckZyb21MYXllckdyb3VwVXBkYXRlciIsIm5ld0xheWVyR3JvdXBPcmRlciIsInN3YXBMYXllck9yZGVyRW50cmllc1VwZGF0ZXIiLCJvcmlnaW5MYXllcklkIiwiZGVzdGluYXRpb25MYXllcklkIiwib3JpZ2luTGF5ZXJHcm91cElkIiwiZGVzdGluYXRpb25MYXllckdyb3VwSWQiLCJvcmlnaW5JbmRleCIsImRlc3RpbmF0aW9uSW5kZXgiLCJkZXN0SW5kZXgiLCJkdXBsaWNhdGVMYXllclVwZGF0ZXIiLCJfcmVmMSIsIm9yaWdpbmFsIiwib3JpZ2luYWxMYXllck9yZGVySWR4IiwibmV3TGFiZWwiLCJwb3N0Zml4IiwicGFyZW50R3JvdXAiLCJsYXllck9yZGVyV2l0aG91dFByZXBlbmRlZCIsImlkeEluR3JvdXAiLCJ1cGRhdGVkR3JvdXAiLCJhZGRFZmZlY3RVcGRhdGVyIiwiX2FjdGlvbiRjb25maWciLCJfYWN0aW9uJGNvbmZpZzIiLCJfYWN0aW9uJGNvbmZpZzMiLCJlZmZlY3QiLCJuZXdFZmZlY3QiLCJzZXRQcm9wcyIsInJlbW92ZUVmZmVjdFVwZGF0ZXIiLCJfcmVmMTAiLCJlZmZlY3RUb1JlbW92ZSIsImVmZmVjdElkIiwicmVvcmRlckVmZmVjdFVwZGF0ZXIiLCJfcmVmMTEiLCJ1cGRhdGVFZmZlY3RVcGRhdGVyIiwiX3JlZjEyIiwiaWR4MiIsImVmZmVjdE9yZGVySWQiLCJuZXdFZmZlY3RzIiwibWFrZU5ld0Fubm90YXRpb24iLCJfY29uZmlnJGtpbmQiLCJfY29uZmlnJGlkIiwiX2NvbmZpZyRpc1Zpc2libGUiLCJfY29uZmlnJGF1dG9TaXplIiwiX2NvbmZpZyRhdXRvU2l6ZVkiLCJfY29uZmlnJGFuY2hvclBvaW50IiwiX2NvbmZpZyRsYWJlbCIsIl9jb25maWckbGluZUNvbG9yIiwiX2NvbmZpZyRsaW5lV2lkdGgiLCJfY29uZmlnJHRleHRXaWR0aCIsIl9jb25maWckdGV4dEhlaWdodCIsIl9jb25maWckdGV4dFZlcnRpY2FsQSIsIl9hcm1MZW5ndGgiLCJfYW5nbGUiLCJfYXJtTGVuZ3RoMiIsIl9hbmdsZTIiLCJfYXJtTGVuZ3RoMyIsIl9hbmdsZTMiLCJfcmFkaXVzSW5NZXRlcnMiLCJraW5kIiwiYmFzZSIsImF1dG9TaXplIiwiYXV0b1NpemVZIiwiYW5jaG9yUG9pbnQiLCJsaW5lQ29sb3IiLCJsaW5lV2lkdGgiLCJ0ZXh0V2lkdGgiLCJ0ZXh0SGVpZ2h0IiwidGV4dFZlcnRpY2FsQWxpZ24iLCJQT0lOVCIsImFybUxlbmd0aCIsImFuZ2xlIiwiQVJST1ciLCJDSVJDTEUiLCJyYWRpdXNJbk1ldGVycyIsIlRFWFQiLCJhZGRBbm5vdGF0aW9uVXBkYXRlciIsIm5ld0Fubm90YXRpb24iLCJyZW1vdmVBbm5vdGF0aW9uVXBkYXRlciIsIl9yZWYxMyIsImEiLCJ1cGRhdGVBbm5vdGF0aW9uVXBkYXRlciIsIl9yZWYxNCIsIm5leHRBbm5vdGF0aW9uIiwibmV3QW5ub3RhdGlvbnMiLCJkdXBsaWNhdGVBbm5vdGF0aW9uVXBkYXRlciIsIl9yZWYxNSIsInNldFNlbGVjdGVkQW5ub3RhdGlvblVwZGF0ZXIiLCJfcmVmMTYiLCJpc0VkaXRpbmdUZXh0IiwicmVtb3ZlRGF0YXNldFVwZGF0ZXIiLCJkYXRhc2V0S2V5IiwiX3N0YXRlJGRhdGFzZXRzIiwibmV3RGF0YXNldHMiLCJsYXllcnNUb1JlbW92ZSIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJpbmRleE9mIiwicHVzaCIsInJlbW92ZURhdGFzZXRGcm9tSW50ZXJhY3Rpb25Db25maWciLCJfcmVmMTciLCJfaW50ZXJhY3Rpb25Db25maWciLCJfY29uZmlnJGZpZWxkc1RvU2hvdyIsInVwZGF0ZUxheWVyQmxlbmRpbmdVcGRhdGVyIiwidXBkYXRlT3ZlcmxheUJsZW5kaW5nVXBkYXRlciIsInNob3dEYXRhc2V0VGFibGVVcGRhdGVyIiwidXBkYXRlVGFibGVDb2xvclVwZGF0ZXIiLCJ1cGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyIiwibmV3Q29sb3IiLCJyZXNldE1hcENvbmZpZ1VwZGF0ZXIiLCJpbml0aWFsU3RhdGUiLCJyZWNlaXZlTWFwQ29uZmlnVXBkYXRlciIsIl9yZWYxOCIsIl9yZWYxOCRwYXlsb2FkIiwicGF5bG9hZCIsIl9yZWYxOCRwYXlsb2FkJGNvbmZpZyIsIl9yZWYxOCRwYXlsb2FkJG9wdGlvbiIsInZpc1N0YXRlIiwia2VlcEV4aXN0aW5nQ29uZmlnIiwibWVyZ2VkU3RhdGUiLCJfaXRlcmF0b3IzIiwiX3N0ZXAzIiwibWVyZ2VyIiwibWVyZ2UiLCJ0b01lcmdlUHJvcCIsImxheWVySG92ZXJVcGRhdGVyIiwiaW5mbyIsImludGVyYWN0aW9uQ29uZmlnQ2hhbmdlVXBkYXRlciIsImNvbnRyYWRpY3QiLCJrIiwibGF5ZXJDbGlja1VwZGF0ZXIiLCJwaW5uZWQiLCJwaWNrZWQiLCJtYXBDbGlja1VwZGF0ZXIiLCJtb3VzZU1vdmVVcGRhdGVyIiwiX3JlZjE5IiwiZXZ0IiwicG9pbnQiLCJtb3VzZVBvc2l0aW9uIiwibG5nTGF0IiwidG9nZ2xlU3BsaXRNYXBVcGRhdGVyIiwiZHVwbGljYXRlIiwiY2xvc2VTcGVjaWZpY01hcEF0SW5kZXgiLCJfcmVmMjAiLCJoYXNUYWJ1bGFyRGF0YXNldERhdGEiLCJkYXRhIiwiX2RhdGEkcm93cyIsIl9kYXRhJGNvbHMiLCJCb29sZWFuIiwicm93cyIsImNvbHMiLCJhcnJvd1RhYmxlIiwibmVlZHNFeHRlcm5hbGx5SG9zdGVkSHlkcmF0ZSIsIl9kYXRhc2V0JGluZm8iLCJfZGF0YXNldCRtZXRhZGF0YSIsIkVYVEVSTkFMTFlfSE9TVEVEIiwibWV0YWRhdGEiLCJzb3VyY2UiLCJoeWRyYXRlRXh0ZXJuYWxseUhvc3RlZFByb3RvRGF0YXNldCIsIl94IiwiX2h5ZHJhdGVFeHRlcm5hbGx5SG9zdGVkUHJvdG9EYXRhc2V0IiwiYXBwbHkiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZTIiLCJfZGF0YXNldCRtZXRhZGF0YTIiLCJfZGF0YXNldCRtZXRhZGF0YTMiLCJ3cmFwIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwiYWJydXB0IiwiZm9ybWF0Iiwic2VudCIsInN0b3AiLCJIWURSQVRFX0VYVEVSTkFMTFlfSE9TVEVEX0RBVEFTRVRfVEFTSyIsImZyb21Qcm9taXNlIiwiRkFJTF9DUkVBVEVfREFUQVNFVF9UQVNLIiwiX3JlZjIxIiwiX2NhbGxlZSIsIm1lc3NhZ2UiLCJfY2FsbGVlJCIsIl9jb250ZXh0IiwiRXJyb3IiLCJfeDIiLCJjcmVhdGVOZXdEYXRhRW50cnlUYXNrIiwiY2hhaW4iLCJoeWRyYXRlZCIsInRhc2siLCJ1cGRhdGVWaXNEYXRhVXBkYXRlciIsImNyZWF0ZURhdGFzZXRUYXNrcyIsIm5vdGlmaWNhdGlvblRhc2tzIiwiX3JlZjIyIiwiZGF0YXNldEluZGV4IiwiX3JlZjIyJGluZm8iLCJyZXN0IiwiX2V4Y2x1ZGVkMiIsImRhdGFzZXRzQWxsU2V0dGxlZFRhc2siLCJhbGxTZXR0bGVkIiwicmVzdWx0cyIsImFkZFRvTWFwT3B0aW9ucyIsInNldExvYWRpbmdJbmRpY2F0b3JVcGRhdGVyIiwiY2hhbmdlIiwiY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3NVcGRhdGVyIiwiX2FjdGlvbiRwYXlsb2FkIiwibmV3RGF0YUVudHJpZXMiLCJzdGF0dXMiLCJyZWFzb24iLCJsYXllck1lcmdlcnMiLCJtIiwid2FpdEZvckxheWVyRGF0YSIsImRhdGFzZXRNZXJnZXJzIiwicG9zdE1lcmdlclBheWxvYWQiLCJhcHBseU1lcmdlcnNVcGRhdGVyIiwibWVyZ2VTdGF0ZVJlc3VsdCIsImFsbE1lcmdlZCIsInBvc3RNZXJnZVVwZGF0ZXIiLCJsYXllclZpc0NvbmZpZ0Zyb21BZGREYXRhT3B0aW9ucyIsInBhdGNoIiwibGF5ZXJWaXNDb25maWciLCJfdHlwZW9mIiwicG9seWdvbkZpbHRlckRlcGVuZHNPbkxheWVyTWV0YSIsIl9sYXllciRjb25maWciLCJnZW9qc29uIiwiY29sdW1uTW9kZSIsImZEYXRhSWQiLCJkYXRhc2V0RmlsdGVyZWQiLCJkYXRhRW1wdHkiLCJuZXdMYXllcnMiLCJhdXRvQ3JlYXRlTGF5ZXJzIiwiYWRkRGVmYXVsdExheWVycyIsInRvb2x0aXBGaWVsZHMiLCJhdXRvQ3JlYXRlVG9vbHRpcHMiLCJhZGREZWZhdWx0VG9vbHRpcHMiLCJ1cGRhdGVkRGF0YXNldHMiLCJwb2x5Z29uRmlsdGVycyIsInBvbHlnb24iLCJwb2x5Z29uTWV0YURhdGFJZHMiLCJfZiRsYXllcklkIiwiY2VudGVyTWFwIiwiYm91bmRzIiwicGFkZGluZyIsImZpdEJvdW5kc1Rhc2siLCJyZW5hbWVEYXRhc2V0VXBkYXRlciIsIkFMTE9XRURfVVBEQVRFX0RBVEFTRVRfUFJPUFMiLCJ2YWxpZGF0ZURhdGFzZXRVcGRhdGVQcm9wcyIsInZhbGlkYXRlZFByb3BzIiwiZW50cmllcyIsIl9lbnRyeSIsIl9zbGljZWRUb0FycmF5IiwiZXhpc3RpbmciLCJfc3RhdGUkc3BsaXRNYXBzJGluZGUiLCJpbmRleFRvUmV0cmlldmUiLCJtYXBMYXllcnMiLCJsb2FkRmlsZXNVcGRhdGVyIiwiZmlsZXMiLCJfYWN0aW9uJG9uRmluaXNoIiwib25GaW5pc2giLCJmcm9tIiwiaW5pdGlhbEZpbGVMb2FkaW5nUHJvZ3Jlc3MiLCJmaWxlQ2FjaGUiLCJmaWxlc1RvTG9hZCIsImxvYWROZXh0RmlsZVVwZGF0ZXIiLCJsb2FkRmlsZVN0ZXBTdWNjZXNzVXBkYXRlciIsImZpbGVOYW1lIiwiX3N0YXRlJGZpbGVMb2FkaW5nIiwic3RhdGVXaXRoUHJvZ3Jlc3MiLCJ1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlciIsInByb2dyZXNzIiwicGVyY2VudCIsInN0YXRlV2l0aENhY2hlIiwiX2ZpbGVzVG9Mb2FkIiwiX3RvQXJyYXkiLCJmaWxlIiwicmVtYWluaW5nRmlsZXNUb0xvYWQiLCJtYWtlTG9hZEZpbGVUYXNrIiwiYmltYXAiLCJnZW4iLCJjb250ZW50IiwicHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlciIsIl9hY3Rpb24kcGF5bG9hZDIiLCJwYXJzZVByb2dyZXNzIiwicHJldlByb2dyZXNzIiwibmV4dEZpbGVCYXRjaFVwZGF0ZXIiLCJfcmVmMjMiLCJfYWNjdW11bGF0ZWQkZGF0YSIsIl9yZWYyMyRwYXlsb2FkIiwiYWNjdW11bGF0ZWQiLCJ1c2VBcnJvd1Byb2dyZXNzaXZlTG9hZGluZyIsImVuZHNXaXRoIiwic2tpcEFycm93Q29tcGFjdCIsIl9yZWYyNCIsImxvYWRGaWxlc0VyclVwZGF0ZXIiLCJfcmVmMjUiLCJfc3RhdGUkZmlsZUxvYWRpbmcyIiwiYXBwbHlDUFVGaWx0ZXJVcGRhdGVyIiwiX3JlZjI2IiwiZGF0YUlkcyIsInNldE1hcEluZm9VcGRhdGVyIiwiZW1wdHkiLCJkZWZhdWx0TGF5ZXJzIiwiZm91bmRMYXllcnMiLCJtZXJnZWQiLCJfcmVmMjgiLCJmaXhlZERvbWFpbiIsIl9jYWxjdWxhdGVMYXllckRhdGE3IiwiX3N0YXRlJGZpbHRlcnMiLCJhbmltYXRhYmxlTGF5ZXJzIiwibGF5ZXJEb21haW5zIiwibWVyZ2VkRG9tYWluIiwibWVyZ2VkVGltZVN0ZXBzIiwic29ydCIsInN5bmNlZEZpbHRlciIsIm5ld0FuaW1hdGlvbkRvbWFpbiIsInNldEVkaXRvck1vZGVVcGRhdGVyIiwiX3JlZjI5Iiwic2tldGNoZXNFbmFibGVkIiwiZW5hYmxlRHJhd09uTWFwU2tldGNoZXMiLCJEUkFXX1BPSU5UIiwiRFJBV19MSU5FU1RSSU5HIiwic2V0RmVhdHVyZXNVcGRhdGVyIiwiX3JlZjMwIiwiX2xhc3RGZWF0dXJlJHByb3BlcnRpIiwiX2xhc3RGZWF0dXJlJHByb3BlcnRpMiIsIl9yZWYzMCRmZWF0dXJlcyIsImxhc3RGZWF0dXJlIiwicHJvcGVydGllcyIsImlzQ2xvc2VkIiwic2hhcGUiLCJFRElUIiwiZmVhdHVyZSIsImZlYXR1cmVWYWx1ZSIsImZpbHRlcklkeCIsImZpbCIsImZpbmRFZGl0b3JGZWF0dXJlIiwiX3N0YXRlJGVkaXRvciRzZWxlY3RlIiwiZnJvbUVkaXRvciIsIml0ZW0iLCJzZXRFZGl0b3JGZWF0dXJlUHJvcGVydGllc1VwZGF0ZXIiLCJfcmVmMzEiLCJfc3RhdGUkZWRpdG9yJHNlbGVjdGUyIiwibmV4dEZlYXR1cmUiLCJuZXh0RWRpdG9yIiwic2V0U2VsZWN0ZWRGZWF0dXJlVXBkYXRlciIsIl9yZWYzMiIsInNlbGVjdGlvbkNvbnRleHQiLCJkZWxldGVGZWF0dXJlVXBkYXRlciIsIl9yZWYzMyIsInNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXIiLCJub25lRmlsdGVyRmVhdHVyZSIsIl9maWx0ZXIkbGF5ZXJJZCIsImlzTGF5ZXJJbmNsdWRlZCIsInNrZXRjaEZlYXR1cmUiLCJzdGF0ZVdpdGhvdXRGaWx0ZXIiLCJzZXRQb2x5Z29uRmlsdGVyQWxsTGF5ZXJzVXBkYXRlciIsInZpc2libGVMYXllcklkcyIsImFsbExheWVySWRzIiwic29ydFRhYmxlQ29sdW1uVXBkYXRlciIsIl9yZWYzNCIsImNvbHVtbiIsInNvcnRNb2RlIiwiY3VycmVudE1vZGUiLCJBU0NFTkRJTkciLCJzb3J0ZWQiLCJwaW5UYWJsZUNvbHVtblVwZGF0ZXIiLCJfcmVmMzUiLCJjb3B5VGFibGVDb2x1bW5VcGRhdGVyIiwiX3JlZjM2IiwiZmllbGRJZHgiLCJ0ZXh0IiwiZGF0YUNvbnRhaW5lciIsInJvdyIsInZhbHVlQXQiLCJqb2luIiwic2V0Q29sdW1uRGlzcGxheUZvcm1hdFVwZGF0ZXIiLCJfcmVmMzciLCJmb3JtYXRzIiwiZGlzcGxheUZvcm1hdCIsIl9sYXllciRjb25maWcyIiwiY29sb3JGaWVsZCIsImdldE1hcHBlZFZhbHVlIiwiZmlsdGVyUHJvcHMiLCJtYXBwZWRWYWx1ZSIsInlpZWxkRm9yUGFpbnQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInNldFRpbWVvdXQiLCJyZXF1ZXN0RGF0YXNldENvbHVtblN0YXRpc3RpY3MiLCJfeDMiLCJfcmVxdWVzdERhdGFzZXRDb2x1bW5TdGF0aXN0aWNzIiwiX2NhbGxlZTMiLCJfcmVmMzgiLCJfY2FsbGVlMyQiLCJfY29udGV4dDMiLCJnZXRDb2x1bW5GaWx0ZXJQcm9wcyIsImZpZWxkVHlwZSIsIkxPQURfQ09MVU1OX1NUQVRTX1RBU0siLCJsb2FkQ29sdW1uU3RhdHNVcGRhdGVyIiwiX3JlZjM5IiwiZmllbGROYW1lIiwiZmllbGROYW1lc1RvTG9hZCIsImZpZWxkc1RvTG9hZCIsImlzTG9hZGluZ1N0YXRzIiwidGFza3MiLCJfcmVmNDAiLCJsb2FkQ29sdW1uU3RhdHNTdWNjZXNzVXBkYXRlciIsIl9yZWY0MSIsIm5ld0ZpbHRlclByb3BzIiwiY29sdW1uU3RhdHMiLCJsb2FkQ29sdW1uU3RhdHNFcnJvclVwZGF0ZXIiLCJfcmVmNDIiLCJ0b2dnbGVFZGl0b3JWaXNpYmlsaXR5VXBkYXRlciIsImNvbnZlcnRFZGl0b3JGZWF0dXJlc1RvTGF5ZXJVcGRhdGVyIiwiX2FjdGlvbiIsIlN0cmluZyIsImNsZWFyZWRTdGF0ZSIsImxhYmVsSWQiLCJNYXRoIiwiZmxvb3IiLCJyYW5kb20iLCJzZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlciIsIl9yZWY0MyIsInVwZGF0ZXMiLCJjaGVja1RpbWVDb25maWdBcmdzIiwiYWxsb3dlZCIsInNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZ1VwZGF0ZXIiLCJfcmVmNDQiLCJsYXllckZpbHRlcmVkSXRlbXNDaGFuZ2VVcGRhdGVyIiwiX2xheWVyJGZpbHRlcmVkSXRlbUNvIiwiZXZlbnQiLCJkZWNrZ2xMYXllcklkIiwiY291bnQiLCJmaWx0ZXJlZEl0ZW1Db3VudCIsIndtc0ZlYXR1cmVJbmZvVXBkYXRlciIsImZlYXR1cmVJbmZvIiwib2JqZWN0Iiwid21zRmVhdHVyZUluZm8iLCJfbmV3U3RhdGUkYW5pbWF0aW9uQ28iLCJfbmV3U3RhdGUkYW5pbWF0aW9uQ28yIiwiX2FjdGlvbiRlbmFibGUiLCJpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzIiwiaGFzSW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVyIiwibmV3RmlsdGVyRG9tYWluIiwiaW50ZXJ2YWwiLCJhZGp1c3RUaW1lRmlsdGVySW50ZXJ2YWwiLCJuZXdGaWx0ZXJWYWx1ZSIsInN5bmNUaW1lbGluZU1vZGUiLCJlbmQiLCJ2YWxpZGF0ZVN5bmNBbmltYXRpb25Nb2RlIiwiX3JlZjQ1IiwibWF4IiwidGltZWxpbmVWYWx1ZSIsImdldFRpbWVsaW5lVmFsdWVGcm9tRmlsdGVyIiwiZnJlZSIsIl9maWx0ZXIkc3luY1RpbWVsaW5lTSIsIm5ld01vZGUiLCJzdGFydCIsImludGVydmFsSW5kZXgiLCJjdXJyZW50SW5kZXgiLCJtZXRhIiwidGFyZ2V0VGltZUludGVydmFsIiwibmV3SW5kZXgiLCJoZXhUaWxlSW50ZXJ2YWwiLCJ1cGRhdGVkUGxvdFR5cGUiLCJkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMiLCJkYXRhSWRUb1JlcGxhY2UiLCJfdmFsdWUkY29uZmlnIiwiX3ZhbHVlJGNvbmZpZzIiLCJyZXBsYWNlZCIsImZpbmRDaGlsZERhdGFzZXRJZHMiLCJfdmFsdWUkbmV3RGF0YXNldCIsImNoaWxkRGF0YUlkcyIsIm1vdmVWYWx1ZVRvQmVNZXJnZWQiLCJwcm9wVmFsdWVzIiwiX3JlZjQ3Iiwic2F2ZVVubWVyZ2VkIiwic3RhdGVSZW1vdmVkIiwicHJvcFZhbHVlIiwicCIsInRvQmVNZXJnZWQiLCJyZXBsYWNlRGF0YXNldEFuZERlcHMiLCJkYXRhSWRUb1VzZSIsInJlcGxhY2VEYXRhc2V0RGVwc0luU3RhdGUiLCJwcmVwYXJlU3RhdGVGb3JEYXRhc2V0UmVwbGFjZSIsIl9uZXh0U3RhdGUkbGF5ZXJUb0JlTSIsInNlcmlhbGl6ZWRTdGF0ZSIsInByZXNlcnZlTGF5ZXJPcmRlciIsInByZXNlcnZlRGF0YXNldE9yZGVyIiwiX3NlcmlhbGl6ZWRTdGF0ZSRzcGxpIiwiX3JlZjQ4IiwiYWNjdVN0YXRlIiwiX3JlZjQ5IiwicmVwbGFjZVBhcmVudERhdGFzZXRJZHMiLCJnZXRDaGlsZERhdGFzZXRJZHMiLCJwcmVzZXJ2ZU9yZGVyIiwidG9NZXJnZVByb3BzIiwic2F2ZWRQcm9wcyIsInJlcGxhY2VkU3RhdGUiLCJfcmVwbGFjZWRTdGF0ZSRtZXJnZXIiLCJtZXJnZXJPcHRpb25zIiwicmVwbGFjZWRJdGVtIiwicmVwbGFjZVByb3BWYWx1ZUluU3RhdGUiLCJfcmVmNTAiLCJjaGlsZERhdGFJZCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92aXMtc3RhdGUtdXBkYXRlcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtiYm94fSBmcm9tICdAdHVyZi9iYm94JztcbmltcG9ydCB0eXBlIHtBbGxHZW9KU09OfSBmcm9tICdAdHVyZi9oZWxwZXJzJztcbmltcG9ydCBjb3B5IGZyb20gJ2NvcHktdG8tY2xpcGJvYXJkJztcbmltcG9ydCBkZWVwbWVyZ2UgZnJvbSAnZGVlcG1lcmdlJztcbmltcG9ydCB7Y29uc29sZSBhcyBDb25zb2xlfSBmcm9tICdnbG9iYWwvd2luZG93JztcbmltcG9ydCBjbG9uZURlZXAgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvY2xvbmVEZWVwJztcbmltcG9ydCBnZXQgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvZ2V0JztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L2lzRXF1YWwnO1xuaW1wb3J0IHBpY2sgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvcGljayc7XG5pbXBvcnQgdW5pcSBmcm9tICdlcy10b29sa2l0L2NvbXBhdC91bmlxJztcbmltcG9ydCB4b3IgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQveG9yJztcbmltcG9ydCBUYXNrLCB7ZGlzYWJsZVN0YWNrQ2FwdHVyaW5nLCB3aXRoVGFza30gZnJvbSAncmVhY3QtcGFsbS90YXNrcyc7XG4vLyBUYXNrc1xuaW1wb3J0IHtcbiAgREVMQVlfVEFTSyxcbiAgQUNUSU9OX1RBU0ssXG4gIExPQURfRklMRV9UQVNLLFxuICBQUk9DRVNTX0ZJTEVfREFUQSxcbiAgVU5XUkFQX1RBU0tcbn0gZnJvbSAnQGtlcGxlci5nbC90YXNrcyc7XG4vLyBBY3Rpb25zXG5pbXBvcnQge1xuICBhZGROb3RpZmljYXRpb24sXG4gIEFjdGlvblR5cGVzLFxuICBDcmVhdGVOZXdEYXRhc2V0U3VjY2Vzc1BheWxvYWQsXG4gIE1hcFN0YXRlQWN0aW9ucyxcbiAgUmVjZWl2ZU1hcENvbmZpZ1BheWxvYWQsXG4gIFZpc1N0YXRlQWN0aW9ucyxcbiAgYXBwbHlMYXllckNvbmZpZyxcbiAgY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3MsXG4gIGxheWVyQ29uZmlnQ2hhbmdlLFxuICBsYXllclR5cGVDaGFuZ2UsXG4gIGxheWVyVmlzQ29uZmlnQ2hhbmdlLFxuICBsYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2UsXG4gIGxvYWRGaWxlU3RlcFN1Y2Nlc3MsXG4gIGxvYWRGaWxlc0VycixcbiAgbG9hZEZpbGVzU3VjY2VzcyxcbiAgbG9hZE5leHRGaWxlLFxuICBuZXh0RmlsZUJhdGNoLFxuICBzZXRGaWx0ZXIsXG4gIHByb2Nlc3NGaWxlQ29udGVudCxcbiAgZml0Qm91bmRzIGFzIGZpdE1hcEJvdW5kcyxcbiAgdG9nZ2xlTGF5ZXJGb3JNYXAsXG4gIGFwcGx5RmlsdGVyQ29uZmlnLFxuICBTZXRMb2FkaW5nSW5kaWNhdG9yUGF5bG9hZCxcbiAgbG9hZENvbHVtblN0YXRzU3VjY2VzcyxcbiAgbG9hZENvbHVtblN0YXRzRXJyb3Jcbn0gZnJvbSAnQGtlcGxlci5nbC9hY3Rpb25zJztcblxuLy8gVXRpbHNcbmltcG9ydCB7XG4gIEZJTFRFUl9VUERBVEVSX1BST1BTLFxuICBhZGROZXdMYXllcnNUb1NwbGl0TWFwLFxuICBzbmFwVG9NYXJrcyxcbiAgYXBwbHlGaWx0ZXJGaWVsZE5hbWUsXG4gIGFwcGx5RmlsdGVyc1RvRGF0YXNldHMsXG4gIGFycmF5SW5zZXJ0LFxuICBjb21wdXRlU3BsaXRNYXBMYXllcnMsXG4gIGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4sXG4gIGVycm9yTm90aWZpY2F0aW9uLFxuICBlZGl0b3JGZWF0dXJlc1RvRmVhdHVyZUNvbGxlY3Rpb24sXG4gIG1lcmdlVXNlckZlYXR1cmVQcm9wZXJ0aWVzLFxuICB0b1NrZXRjaEZlYXR1cmUsXG4gIGZlYXR1cmVUb0ZpbHRlclZhbHVlLFxuICBmaWx0ZXJEYXRhc2V0Q1BVLFxuICBnZW5lcmF0ZVBvbHlnb25GaWx0ZXIsXG4gIGdldERlZmF1bHRGaWx0ZXIsXG4gIGdldEZpbHRlcklkSW5GZWF0dXJlLFxuICBnZXRUaW1lV2lkZ2V0VGl0bGVGb3JtYXR0ZXIsXG4gIGlzSW5SYW5nZSxcbiAgaXNPYmplY3QsXG4gIGlzUGxhaW5PYmplY3QsXG4gIGlzUmdiQ29sb3IsXG4gIHBhcnNlRmllbGRWYWx1ZSxcbiAgcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzLFxuICBzZXQsXG4gIHVwZGF0ZUZpbHRlclBsb3QsXG4gIHJlbW92ZUZpbHRlclBsb3QsXG4gIGlzTGF5ZXJBbmltYXRhYmxlLFxuICBpc1NpZGVGaWx0ZXIsXG4gIGdldEFwcGxpY2F0aW9uQ29uZmlnXG59IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHtnZW5lcmF0ZUhhc2hJZCwgdG9BcnJheSwgYXJyYXlNb3ZlfSBmcm9tICdAa2VwbGVyLmdsL2NvbW1vbi11dGlscyc7XG4vLyBNZXJnZXJzXG5pbXBvcnQge1xuICBBTklNQVRJT05fV0lORE9XLFxuICBCQVNFX1NQRUVELFxuICBDT01QQVJFX1RZUEVTLFxuICBERUZBVUxUX1RFWFRfTEFCRUwsXG4gIEVESVRPUl9NT0RFUyxcbiAgRklMVEVSX1RZUEVTLFxuICBGSUxURVJfVklFV19UWVBFUyxcbiAgTEFZRVJfVFlQRVMsXG4gIEZQUyxcbiAgTElHSFRfQU5EX1NIQURPV19FRkZFQ1QsXG4gIERJU1RBTkNFX0ZPR19UWVBFLFxuICBTVVJGQUNFX0ZPR19UWVBFLFxuICBNQVhfREVGQVVMVF9UT09MVElQUyxcbiAgUExPVF9UWVBFUyxcbiAgU09SVF9PUkRFUixcbiAgU1lOQ19USU1FTElORV9NT0RFUyxcbiAgQ0hBTk5FTF9TQ0FMRVMsXG4gIFNDQUxFX1RZUEVTLFxuICBJTklUSUFMX0FOTk9UQVRJT05fS0lORCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0FOR0xFLFxuICBJTklUSUFMX0FOTk9UQVRJT05fQVJNX0xFTkdUSCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfV0lEVEgsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9URVhUX0hFSUdIVCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEgsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX0NPTE9SLFxuICBBbm5vdGF0aW9uS2luZCxcbiAgRGF0YXNldFR5cGUsXG4gIGdldFJlbW90ZVNvdXJjZUZvcm1hdFxufSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge0xBWUVSX0lEX0xFTkdUSCwgTGF5ZXIsIExheWVyQ2xhc3Nlc30gZnJvbSAnQGtlcGxlci5nbC9sYXllcnMnO1xuaW1wb3J0IHtcbiAgYXBwbHlfLFxuICBjb21wb3NlXyxcbiAgZmlsdGVyT3V0QnlJZCxcbiAgbWVyZ2VfLFxuICBwYXlsb2FkXyxcbiAgcGlja18sXG4gIHJlbW92ZUVsZW1lbnRBdEluZGV4LFxuICBzd2FwX1xufSBmcm9tICcuL2NvbXBvc2VyLWhlbHBlcnMnO1xuaW1wb3J0IHtpc1ZhbGlkTWVyZ2VyLCBtZXJnZVN0YXRlRnJvbU1lcmdlcnN9IGZyb20gJy4vbWVyZ2VyLWhhbmRsZXInO1xuaW1wb3J0IHtcbiAgVklTX1NUQVRFX01FUkdFUlMsXG4gIGNyZWF0ZUxheWVyRnJvbUNvbmZpZyxcbiAgcGFyc2VMYXllckNvbmZpZyxcbiAgc2VyaWFsaXplRmlsdGVyLFxuICBzZXJpYWxpemVMYXllcixcbiAgc2VyaWFsaXplVmlzU3RhdGUsXG4gIHZhbGlkYXRlTGF5ZXJXaXRoRGF0YVxufSBmcm9tICcuL3Zpcy1zdGF0ZS1tZXJnZXInO1xuXG5pbXBvcnQgS2VwbGVyR0xTY2hlbWEsIHtNZXJnZXIsIFBvc3RNZXJnZXJQYXlsb2FkLCBWaXNTdGF0ZX0gZnJvbSAnQGtlcGxlci5nbC9zY2hlbWFzJztcbmltcG9ydCB7bG9hZEV4dGVybmFsbHlIb3N0ZWREYXRhc2V0LCBwcm9jZXNzR2VvanNvbn0gZnJvbSAnQGtlcGxlci5nbC9wcm9jZXNzb3JzJztcblxuaW1wb3J0IHtcbiAgRmlsdGVyLFxuICBGZWF0dXJlLFxuICBJbnRlcmFjdGlvbkNvbmZpZyxcbiAgQW5pbWF0aW9uQ29uZmlnLFxuICBGaWx0ZXJBbmltYXRpb25Db25maWcsXG4gIEVkaXRvcixcbiAgRmllbGQsXG4gIExheWVyVmlzQ29uZmlnLFxuICBUaW1lUmFuZ2VGaWx0ZXIsXG4gIEFubm90YXRpb24sXG4gIEFubm90YXRpb25Qcm9wc1BhcnRpYWwsXG4gIFByb3RvRGF0YXNldFxufSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7TG9hZGVyfSBmcm9tICdAbG9hZGVycy5nbC9sb2FkZXItdXRpbHMnO1xuXG5pbXBvcnQge1xuICBEYXRhc2V0cyxcbiAgRmlsdGVyUHJvcHMsXG4gIGFzc2lnbkdwdUNoYW5uZWwsXG4gIGNvcHlUYWJsZUFuZFVwZGF0ZSxcbiAgY3JlYXRlTmV3RGF0YUVudHJ5LFxuICBwaW5UYWJsZUNvbHVtbnMsXG4gIHNldEZpbHRlckdwdU1vZGUsXG4gIHNvcnREYXRhc2V0QnlDb2x1bW5cbn0gZnJvbSAnQGtlcGxlci5nbC90YWJsZSc7XG5pbXBvcnQge2ZpbmRGaWVsZHNUb1Nob3d9IGZyb20gJy4vaW50ZXJhY3Rpb24tdXRpbHMnO1xuaW1wb3J0IHtcbiAgY2FsY3VsYXRlTGF5ZXJEYXRhLFxuICBmaW5kRGVmYXVsdExheWVyLFxuICBnZXRMYXllck9yZGVyRnJvbUxheWVycyxcbiAgbWVyZ2VMYXllclZpc0NvbmZpZ0Zvck5ld0RhdGFzZXRzLFxuICBnZXROZXdMYXllckdyb3VwLFxuICBhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIsXG4gIHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcixcbiAgZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyLFxuICBmaW5kUGFyZW50R3JvdXBGb3JMYXllcixcbiAgZ2V0SW5kZXhGcm9tTGF5ZXJFbnRyeUlkLFxuICB1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyLFxuICBnZXRGbGF0TGF5ZXJPcmRlcixcbiAgcmVwbGFjZUxheWVyRW50cnlJbkxheWVyT3JkZXJcbn0gZnJvbSAnLi9sYXllci11dGlscyc7XG5pbXBvcnQge2dldFByb3BWYWx1ZVRvTWVyZ2VyLCBoYXNQcm9wc1RvTWVyZ2V9IGZyb20gJy4vbWVyZ2VyLWhhbmRsZXInO1xuaW1wb3J0IHttZXJnZURhdGFzZXRzQnlPcmRlcn0gZnJvbSAnLi92aXMtc3RhdGUtbWVyZ2VyJztcbmltcG9ydCB7XG4gIGZpeEVmZmVjdE9yZGVyLFxuICBnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVycyxcbiAgZ2V0SW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyxcbiAgbWVyZ2VUaW1lRG9tYWlucyxcbiAgYWRqdXN0VmFsdWVUb0FuaW1hdGlvbldpbmRvdyxcbiAgdXBkYXRlVGltZUZpbHRlclBsb3RUeXBlLFxuICBnZXREZWZhdWx0VGltZUZvcm1hdCxcbiAgTGF5ZXJUb0ZpbHRlclRpbWVJbnRlcnZhbCxcbiAgVElNRV9JTlRFUlZBTFNfT1JERVJFRCxcbiAgbWVyZ2VGaWx0ZXJEb21haW4sXG4gIGluaXRDdXN0b21QYWxldHRlQnlDdXN0b21TY2FsZSxcbiAgY29sbGVjdENvbHVtblZhbHVlcyxcbiAgZ2V0Q29sdW1uU3RhdGlzdGljc1xufSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7Y3JlYXRlRWZmZWN0fSBmcm9tICdAa2VwbGVyLmdsL2VmZmVjdHMnO1xuaW1wb3J0IHtQYXlsb2FkQWN0aW9ufSBmcm9tICdAcmVkdXhqcy90b29sa2l0JztcblxuaW1wb3J0IHtmaW5kTWFwQm91bmRzfSBmcm9tICcuL2RhdGEtdXRpbHMnO1xuXG4vLyByZWFjdC1wYWxtXG4vLyBkaXNhYmxlIGNhcHR1cmUgZXhjZXB0aW9uIGZvciByZWFjdC1wYWxtIGNhbGwgdG8gd2l0aFRhc2tcbmRpc2FibGVTdGFja0NhcHR1cmluZygpO1xuXG4vKipcbiAqIFVwZGF0ZXJzIGZvciBgdmlzU3RhdGVgIHJlZHVjZXIuIENhbiBiZSB1c2VkIGluIHlvdXIgcm9vdCByZWR1Y2VyIHRvIGRpcmVjdGx5IG1vZGlmeSBrZXBsZXIuZ2wncyBzdGF0ZS5cbiAqIFJlYWQgbW9yZSBhYm91dCBbVXNpbmcgdXBkYXRlcnNdKC4uL2FkdmFuY2VkLXVzYWdlL3VzaW5nLXVwZGF0ZXJzLm1kKVxuICpcbiAqIEBwdWJsaWNcbiAqIEBleGFtcGxlXG4gKlxuICogaW1wb3J0IGtlcGxlckdsUmVkdWNlciwge3Zpc1N0YXRlVXBkYXRlcnN9IGZyb20gJ0BrZXBsZXIuZ2wvcmVkdWNlcnMnO1xuICogLy8gUm9vdCBSZWR1Y2VyXG4gKiBjb25zdCByZWR1Y2VycyA9IGNvbWJpbmVSZWR1Y2Vycyh7XG4gKiAga2VwbGVyR2w6IGtlcGxlckdsUmVkdWNlcixcbiAqICBhcHA6IGFwcFJlZHVjZXJcbiAqIH0pO1xuICpcbiAqIGNvbnN0IGNvbXBvc2VkUmVkdWNlciA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gKiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICogICAgY2FzZSAnQ0xJQ0tfQlVUVE9OJzpcbiAqICAgICAgcmV0dXJuIHtcbiAqICAgICAgICAuLi5zdGF0ZSxcbiAqICAgICAgICBrZXBsZXJHbDoge1xuICogICAgICAgICAgLi4uc3RhdGUua2VwbGVyR2wsXG4gKiAgICAgICAgICBmb286IHtcbiAqICAgICAgICAgICAgIC4uLnN0YXRlLmtlcGxlckdsLmZvbyxcbiAqICAgICAgICAgICAgIHZpc1N0YXRlOiB2aXNTdGF0ZVVwZGF0ZXJzLmVubGFyZ2VGaWx0ZXJVcGRhdGVyKFxuICogICAgICAgICAgICAgICBzdGF0ZS5rZXBsZXJHbC5mb28udmlzU3RhdGUsXG4gKiAgICAgICAgICAgICAgIHtpZHg6IDB9XG4gKiAgICAgICAgICAgICApXG4gKiAgICAgICAgICB9XG4gKiAgICAgICAgfVxuICogICAgICB9O1xuICogIH1cbiAqICByZXR1cm4gcmVkdWNlcnMoc3RhdGUsIGFjdGlvbik7XG4gKiB9O1xuICpcbiAqIGV4cG9ydCBkZWZhdWx0IGNvbXBvc2VkUmVkdWNlcjtcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG4vLyBAdHMtaWdub3JlXG5jb25zdCB2aXNTdGF0ZVVwZGF0ZXJzID0gbnVsbDtcbi8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0SW50ZXJhY3Rpb25Db25maWc6IEludGVyYWN0aW9uQ29uZmlnID0ge1xuICB0b29sdGlwOiB7XG4gICAgaWQ6ICd0b29sdGlwJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy50b29sdGlwJyxcbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIGNvbmZpZzoge1xuICAgICAgZmllbGRzVG9TaG93OiB7fSxcbiAgICAgIGNvbXBhcmVNb2RlOiBmYWxzZSxcbiAgICAgIGNvbXBhcmVUeXBlOiBDT01QQVJFX1RZUEVTLkFCU09MVVRFXG4gICAgfVxuICB9LFxuICBnZW9jb2Rlcjoge1xuICAgIGlkOiAnZ2VvY29kZXInLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLmdlb2NvZGVyJyxcbiAgICBlbmFibGVkOiBmYWxzZSxcbiAgICBwb3NpdGlvbjogbnVsbCxcbiAgICBjb25maWc6IHtcbiAgICAgIGxpbWl0U2VhcmNoOiBmYWxzZVxuICAgIH1cbiAgfSxcbiAgYnJ1c2g6IHtcbiAgICBpZDogJ2JydXNoJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy5icnVzaCcsXG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgY29uZmlnOiB7XG4gICAgICAvLyBzaXplIGlzIGluIGttXG4gICAgICBzaXplOiAwLjVcbiAgICB9XG4gIH0sXG4gIGNvb3JkaW5hdGU6IHtcbiAgICBpZDogJ2Nvb3JkaW5hdGUnLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLmNvb3JkaW5hdGUnLFxuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIHBvc2l0aW9uOiBudWxsXG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0FOSU1BVElPTl9DT05GSUc6IEFuaW1hdGlvbkNvbmZpZyA9IHtcbiAgZG9tYWluOiBudWxsLFxuICBjdXJyZW50VGltZTogbnVsbCxcbiAgc3BlZWQ6IDEsXG4gIGlzQW5pbWF0aW5nOiBmYWxzZSxcbiAgdGltZVN0ZXBzOiBudWxsLFxuICB0aW1lRm9ybWF0OiBudWxsLFxuICB0aW1lem9uZTogbnVsbCxcbiAgZGVmYXVsdFRpbWVGb3JtYXQ6IG51bGwsXG4gIGhpZGVDb250cm9sOiBmYWxzZSxcbiAgZHVyYXRpb246IG51bGxcbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0VESVRPUjogRWRpdG9yID0ge1xuICBtb2RlOiBFRElUT1JfTU9ERVMuRFJBV19QT0xZR09OLFxuICBmZWF0dXJlczogW10sXG4gIHNlbGVjdGVkRmVhdHVyZTogbnVsbCxcbiAgdmlzaWJsZTogdHJ1ZVxufTtcblxuLyoqXG4gKiBEZWZhdWx0IGluaXRpYWwgYHZpc1N0YXRlYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBjb25zdGFudFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgSU5JVElBTF9WSVNfU1RBVEU6IFZpc1N0YXRlID0ge1xuICAvLyBtYXAgaW5mb1xuICBtYXBJbmZvOiB7XG4gICAgdGl0bGU6ICcnLFxuICAgIGRlc2NyaXB0aW9uOiAnJ1xuICB9LFxuICAvLyBsYXllcnNcbiAgbGF5ZXJzOiBbXSxcbiAgbGF5ZXJEYXRhOiBbXSxcbiAgbGF5ZXJUb0JlTWVyZ2VkOiBbXSxcbiAgbGF5ZXJPcmRlcjogW10sXG4gIGxheWVyT3JkZXJUb0JlTWVyZ2VkOiBudWxsLFxuXG4gIC8vIGZpbHRlcnNcbiAgZmlsdGVyczogW10sXG4gIGZpbHRlclRvQmVNZXJnZWQ6IFtdLFxuXG4gIC8vIGEgY29sbGVjdGlvbiBvZiBtdWx0aXBsZSBkYXRhc2V0XG4gIGRhdGFzZXRzOiB7fSxcbiAgZWRpdGluZ0RhdGFzZXQ6IHVuZGVmaW5lZCxcblxuICAvLyBlZmZlY3RzXG4gIGVmZmVjdHM6IFtdLFxuICBlZmZlY3RPcmRlcjogW10sXG5cbiAgLy8gYW5ub3RhdGlvbnNcbiAgYW5ub3RhdGlvbnM6IFtdLFxuICBhbm5vdGF0aW9uc1RvQmVNZXJnZWQ6IFtdLFxuICBzZWxlY3RlZEFubm90YXRpb25JZDogbnVsbCxcbiAgaXNFZGl0aW5nQW5ub3RhdGlvblRleHQ6IGZhbHNlLFxuXG4gIGludGVyYWN0aW9uQ29uZmlnOiBkZWZhdWx0SW50ZXJhY3Rpb25Db25maWcsXG4gIGludGVyYWN0aW9uVG9CZU1lcmdlZDoge30sXG5cbiAgbGF5ZXJCbGVuZGluZzogJ25vcm1hbCcsXG4gIG92ZXJsYXlCbGVuZGluZzogJ25vcm1hbCcsXG4gIGhvdmVySW5mbzogdW5kZWZpbmVkLFxuICBjbGlja2VkOiB1bmRlZmluZWQsXG4gIG1vdXNlUG9zOiB7fSxcbiAgbWF4RGVmYXVsdFRvb2x0aXBzOiBNQVhfREVGQVVMVF9UT09MVElQUyxcblxuICAvLyB0aGlzIGlzIHVzZWQgd2hlbiB1c2VyIHNwbGl0IG1hcHNcbiAgc3BsaXRNYXBzOiBbXG4gICAgLy8gdGhpcyB3aWxsIGNvbnRhaW4gYSBsaXN0IG9mIG9iamVjdHMgdG9cbiAgICAvLyBkZXNjcmliZSB0aGUgc3RhdGUgb2YgbGF5ZXIgYXZhaWxhYmlsaXR5IGFuZCB2aXNpYmlsaXR5IGZvciBlYWNoIG1hcFxuICAgIC8vIFtcbiAgICAvLyAgIHtcbiAgICAvLyAgICAgIGxheWVyczoge2xheWVyX2lkOiB0cnVlIHwgZmFsc2V9XG4gICAgLy8gICB9XG4gICAgLy8gXVxuICBdLFxuICBzcGxpdE1hcHNUb0JlTWVyZ2VkOiBbXSxcbiAgaXNNZXJnaW5nRGF0YXNldHM6IHt9LFxuICAvLyBkZWZhdWx0cyBsYXllciBjbGFzc2VzXG4gIGxheWVyQ2xhc3NlczogTGF5ZXJDbGFzc2VzLFxuXG4gIC8vIGRlZmF1bHQgYW5pbWF0aW9uXG4gIC8vIHRpbWUgaW4gdW5peCB0aW1lc3RhbXAgKG1pbGxpc2Vjb25kcykgKHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBzaW5jZSB0aGUgVW5peCBFcG9jaClcbiAgYW5pbWF0aW9uQ29uZmlnOiBERUZBVUxUX0FOSU1BVElPTl9DT05GSUcsXG5cbiAgZWRpdG9yOiBERUZBVUxUX0VESVRPUixcblxuICBmaWxlTG9hZGluZzogZmFsc2UsXG4gIGZpbGVMb2FkaW5nUHJvZ3Jlc3M6IHt9LFxuICAvLyBmb3IgbG9hZGluZyBkYXRhc2V0c1xuICBsb2FkaW5nSW5kaWNhdG9yVmFsdWU6IDAsXG5cbiAgbG9hZGVyczogW10sXG4gIGxvYWRPcHRpb25zOiB7fSxcblxuICAvLyB2aXNTdGF0ZU1lcmdlcnNcbiAgbWVyZ2VyczogVklTX1NUQVRFX01FUkdFUlMsXG5cbiAgLy8ga2VwbGVyIHNjaGVtYXNcbiAgc2NoZW1hOiBLZXBsZXJHTFNjaGVtYVxufTtcblxuZXhwb3J0IGNvbnN0IEFDVElPTl9UQVNLX0ZJVF9CT1VORFMgPSBUYXNrLmZyb21DYWxsYmFjayhcbiAgKF8sIGNiKSA9PiBjYigpLFxuXG4gICdBQ1RJT05fVEFTS19GSVRfQk9VTkRTJ1xuKTtcblxuZXhwb3J0IGNvbnN0IEFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04gPSBUYXNrLmZyb21DYWxsYmFjayhcbiAgKF8sIGNiKSA9PiBjYigpLFxuXG4gICdBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OJ1xuKTtcblxudHlwZSBVcGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGFUeXBlID0ge1xuICBsYXllcnM6IExheWVyW107XG4gIGxheWVyRGF0YTogYW55W107XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBzdGF0ZSB3aXRoIHVwZGF0ZWQgbGF5ZXIgYW5kIGxheWVyRGF0YVxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YTxTIGV4dGVuZHMgVXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhVHlwZT4oXG4gIHN0YXRlOiBTLFxuICB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fToge2xheWVyRGF0YT86IGFueTsgbGF5ZXI6IExheWVyOyBpZHg6IG51bWJlcn1cbik6IFMge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogc3RhdGUubGF5ZXJzLm1hcCgobHlyLCBpKSA9PiAoaSA9PT0gaWR4ID8gbGF5ZXIgOiBseXIpKSxcbiAgICBsYXllckRhdGE6IGxheWVyRGF0YVxuICAgICAgPyBzdGF0ZS5sYXllckRhdGEubWFwKChkLCBpKSA9PiAoaSA9PT0gaWR4ID8gbGF5ZXJEYXRhIDogZCkpXG4gICAgICA6IHN0YXRlLmxheWVyRGF0YVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RhdGVPbkxheWVyVmlzaWJpbGl0eUNoYW5nZTxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTLCBsYXllcjogTGF5ZXIpOiBTIHtcbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGlmIChzdGF0ZS5zcGxpdE1hcHMubGVuZ3RoKSB7XG4gICAgbmV3U3RhdGUgPSB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIHNwbGl0TWFwczogbGF5ZXIuY29uZmlnLmlzVmlzaWJsZVxuICAgICAgICA/IGFkZE5ld0xheWVyc1RvU3BsaXRNYXAoc3RhdGUuc3BsaXRNYXBzLCBsYXllcilcbiAgICAgICAgOiByZW1vdmVMYXllckZyb21TcGxpdE1hcHMoc3RhdGUuc3BsaXRNYXBzLCBsYXllcilcbiAgICB9O1xuICB9XG5cbiAgaWYgKGxheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCkge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBDb21wYXJlcyB0d28gb2JqZWN0cyAob3IgYXJyYXlzKSBhbmQgcmV0dXJucyBhIG5ldyBvYmplY3Qgd2l0aCBvbmx5IHRoZVxuICogcHJvcGVydGllcyB0aGF0IGhhdmUgY2hhbmdlZCBiZXR3ZWVuIHRoZSB0d28gb2JqZWN0cy5cbiAqL1xuZnVuY3Rpb24gcGlja0NoYW5nZWRQcm9wczxUPihwcmV2OiBULCBuZXh0OiBUKTogUGFydGlhbDxUPiB7XG4gIGNvbnN0IGNoYW5nZWRQcm9wczogUGFydGlhbDxUPiA9IHt9O1xuICBjb25zdCBwaWNrUHJvcHNPZiA9IG9iaiA9PiB7XG4gICAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2hhbmdlZFByb3BzLCBrZXkpICYmXG4gICAgICAgICFpc0VxdWFsKHByZXZba2V5XSwgbmV4dFtrZXldKVxuICAgICAgKSB7XG4gICAgICAgIGNoYW5nZWRQcm9wc1trZXldID0gbmV4dFtrZXldO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICBwaWNrUHJvcHNPZihwcmV2KTtcbiAgcGlja1Byb3BzT2YobmV4dCk7XG4gIHJldHVybiBjaGFuZ2VkUHJvcHM7XG59XG5cbmNvbnN0IFZJU1VBTF9DSEFOTkVMX1BST1BfVFlQRVMgPSBbJ2ZpZWxkJywgJ3NjYWxlJywgJ2RvbWFpbicsICdhZ2dyZWdhdGlvbiddO1xuXG4vKipcbiAqIEFwcGx5IGxheWVyIGNvbmZpZ1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eSwgbWF4LXN0YXRlbWVudHNcbmV4cG9ydCBmdW5jdGlvbiBhcHBseUxheWVyQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BcHBseUxheWVyQ29uZmlnVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXJJZCwgbmV3TGF5ZXJDb25maWcsIGxheWVySW5kZXh9ID0gYWN0aW9uO1xuICBjb25zdCBuZXdQYXJzZWRMYXllciA9XG4gICAgLy8gd2lsbCBtb3ZlIHZpc3VhbENoYW5uZWxzIHRvIHRoZSBjb25maWcgcHJvcFxuICAgIHBhcnNlTGF5ZXJDb25maWcoc3RhdGUuc2NoZW1hLCBuZXdMYXllckNvbmZpZyk7XG4gIGNvbnN0IG9sZExheWVyID0gc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBvbGRMYXllcklkKTtcbiAgaWYgKCFvbGRMYXllciB8fCAhbmV3UGFyc2VkTGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKGxheWVySW5kZXggIT09IG51bGwgJiYgbGF5ZXJJbmRleCAhPT0gdW5kZWZpbmVkICYmIHN0YXRlLmxheWVyc1tsYXllckluZGV4XSAhPT0gb2xkTGF5ZXIpIHtcbiAgICAvLyBsYXllckluZGV4IGlzIHByb3ZpZGVkLCBidXQgaXQgZG9lc24ndCBtYXRjaCB0aGUgb2xkTGF5ZXJcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW25ld1BhcnNlZExheWVyLmNvbmZpZy5kYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgLy8gTWFrZSBzdXJlIHRoZSBsYXllciBpcyB2YWxpZCBhbmQgY29udmVydCBpdCB0byBMYXllclxuICBjb25zdCBuZXdMYXllciA9IHZhbGlkYXRlTGF5ZXJXaXRoRGF0YShkYXRhc2V0LCBuZXdQYXJzZWRMYXllciwgc3RhdGUubGF5ZXJDbGFzc2VzKTtcbiAgaWYgKCFuZXdMYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxldCBuZXh0U3RhdGUgPSBzdGF0ZTtcblxuICBpZiAobmV3TGF5ZXIudHlwZSAmJiBuZXdMYXllci50eXBlICE9PSBvbGRMYXllci50eXBlKSB7XG4gICAgY29uc3Qgb2xkTGF5ZXJJbmRleCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllcklkKTtcbiAgICBpZiAob2xkTGF5ZXJJbmRleCA+PSAwKSB7XG4gICAgICBuZXh0U3RhdGUgPSBsYXllclR5cGVDaGFuZ2VVcGRhdGVyKG5leHRTdGF0ZSwgbGF5ZXJUeXBlQ2hhbmdlKG9sZExheWVyLCBuZXdMYXllci50eXBlKSk7XG4gICAgICAvLyBsYXllclR5cGVDaGFuZ2VVcGRhdGVyIGNoYW5nZXMgdGhlIGlkIG9mIHRoZSBsYXllciwgc28gd2UgbmVlZCB0byBvYnRhaW4gdGhlIG5ldyBpZFxuICAgICAgLy8gYnV0IGZpcnN0IG1ha2Ugc3VyZSB0aGF0IHRoZSBsYXllciB3YXMgbm90IHJlbW92ZWRcbiAgICAgIGlmIChuZXh0U3RhdGUubGF5ZXJzLmxlbmd0aCA9PT0gc3RhdGUubGF5ZXJzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBuZXdMYXllcklkID0gbmV4dFN0YXRlLmxheWVyc1tvbGRMYXllckluZGV4XS5pZDtcbiAgICAgICAgbmV4dFN0YXRlID0gYXBwbHlMYXllckNvbmZpZ1VwZGF0ZXIoXG4gICAgICAgICAgbmV4dFN0YXRlLFxuICAgICAgICAgIGFwcGx5TGF5ZXJDb25maWcobmV3TGF5ZXJJZCwgey4uLm5ld0xheWVyQ29uZmlnLCBpZDogbmV3TGF5ZXJJZH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXh0U3RhdGU7XG4gIH1cblxuICAvLyBzZXJpYWxpemVMYXllcigpIG1pZ2h0IHJldHVybiBudWxsIGlmIHRoZSBvbGQgbGF5ZXIgaXMgbm90IHZhbGlkLFxuICAvLyB3ZSBzaG91bGQgc3RpbGwgYXBwbHkgdGhlIGNoYW5nZXMgaW4gdGhhdCBjYXNlXG4gIGNvbnN0IHNlcmlhbGl6ZWRPbGRMYXllciA9IHNlcmlhbGl6ZUxheWVyKG9sZExheWVyLCBzdGF0ZS5zY2hlbWEpID8/IHtjb25maWc6IHt9fTtcbiAgY29uc3Qgc2VyaWFsaXplZE5ld0xheWVyID0gc2VyaWFsaXplTGF5ZXIobmV3TGF5ZXIsIHN0YXRlLnNjaGVtYSk7XG4gIGlmICghc2VyaWFsaXplZE5ld0xheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmICghaXNFcXVhbChzZXJpYWxpemVkT2xkTGF5ZXIsIHNlcmlhbGl6ZWROZXdMYXllcikpIHtcbiAgICBjb25zdCBjaGFuZ2VkID0gcGlja0NoYW5nZWRQcm9wcyhzZXJpYWxpemVkT2xkTGF5ZXIuY29uZmlnLCBzZXJpYWxpemVkTmV3TGF5ZXIuY29uZmlnKTtcblxuICAgIGlmICgndmlzQ29uZmlnJyBpbiBjaGFuZ2VkKSB7XG4gICAgICBpZiAoY2hhbmdlZC52aXNDb25maWcpIHtcbiAgICAgICAgbmV4dFN0YXRlID0gbGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyKFxuICAgICAgICAgIG5leHRTdGF0ZSxcbiAgICAgICAgICBsYXllclZpc0NvbmZpZ0NoYW5nZShvbGRMYXllciwgY2hhbmdlZC52aXNDb25maWcpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBkZWxldGUgY2hhbmdlZC52aXNDb25maWc7XG4gICAgfVxuXG4gICAgT2JqZWN0LmtleXMob2xkTGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goY2hhbm5lbE5hbWUgPT4ge1xuICAgICAgY29uc3QgY2hhbm5lbCA9IG9sZExheWVyLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxOYW1lXTtcbiAgICAgIGNvbnN0IGNoYW5uZWxQcm9wTmFtZXMgPSBWSVNVQUxfQ0hBTk5FTF9QUk9QX1RZUEVTLm1hcChwcm9wID0+IGNoYW5uZWxbcHJvcF0pO1xuICAgICAgaWYgKGNoYW5uZWxQcm9wTmFtZXMuc29tZShwcm9wID0+IHByb3AgaW4gY2hhbmdlZCkpIHtcbiAgICAgICAgbmV4dFN0YXRlID0gbGF5ZXJWaXN1YWxDaGFubmVsQ2hhbmdlVXBkYXRlcihcbiAgICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgICAgbGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlKFxuICAgICAgICAgICAgb2xkTGF5ZXIsXG4gICAgICAgICAgICBwaWNrKG5ld0xheWVyLmNvbmZpZywgY2hhbm5lbFByb3BOYW1lcyksXG4gICAgICAgICAgICBjaGFubmVsTmFtZVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIGNoYW5uZWxQcm9wTmFtZXMpIHtcbiAgICAgICAgICBkZWxldGUgY2hhbmdlZFtwcm9wXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKE9iamVjdC5rZXlzKGNoYW5nZWQpLmxlbmd0aCA+IDApIHtcbiAgICAgIG5leHRTdGF0ZSA9IGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgICAgICAgbmV4dFN0YXRlLFxuICAgICAgICBsYXllckNvbmZpZ0NoYW5nZShvbGRMYXllciwgcGljayhuZXdMYXllci5jb25maWcsIE9iamVjdC5rZXlzKGNoYW5nZWQpKSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlbGF5ZXJWaXNpYmlsdHkoc3RhdGU6IFZpc1N0YXRlLCBuZXdMYXllcjogTGF5ZXIsIGlzVmlzaWJsZT86IGJvb2xlYW4pOiBWaXNTdGF0ZSB7XG4gIGxldCBuZXdTdGF0ZSA9IHVwZGF0ZVN0YXRlT25MYXllclZpc2liaWxpdHlDaGFuZ2Uoc3RhdGUsIG5ld0xheWVyKTtcbiAgY29uc3QgZmlsdGVySW5kZXggPSBmaWx0ZXJTeW5jZWRXaXRoVGltZWxpbmUoc3RhdGUpO1xuICBpZiAoaXNMYXllckFuaW1hdGFibGUobmV3TGF5ZXIpICYmIGZpbHRlckluZGV4ICE9PSAtMSkge1xuICAgIC8vIGlmIGxheWVyIGlzIGdvaW5nIHRvIGJlIHZpc2libGUgd2Ugc3luYyB3aXRoIGZpbHRlciBvdGhlcndpc2Ugd2UgbmVlZCB0byBjaGVjayB3aGV0aGVyIG90aGVyIGFuaW1hdGFibGUgbGF5ZXJzIGV4aXN0cyBhbmQgYXJlIHZpc2libGVcbiAgICBuZXdTdGF0ZSA9IHN5bmNUaW1lRmlsdGVyV2l0aExheWVyVGltZWxpbmVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgICBpZHg6IGZpbHRlckluZGV4LFxuICAgICAgZW5hYmxlOiBpc1Zpc2libGUgPyBpc1Zpc2libGUgOiBnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVycyhzdGF0ZS5sYXllcnMpLmxlbmd0aCA+IDBcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIGJhc2UgY29uZmlnOiBkYXRhSWQsIGxhYmVsLCBjb2x1bW4sIGlzVmlzaWJsZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZXhwb3J0IGZ1bmN0aW9uIGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyfSA9IGFjdGlvbjtcbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgY29uc3QgcHJvcHMgPSBPYmplY3Qua2V5cyhhY3Rpb24ubmV3Q29uZmlnKTtcbiAgaWYgKFxuICAgIHR5cGVvZiBhY3Rpb24ubmV3Q29uZmlnLmRhdGFJZCA9PT0gJ3N0cmluZycgJiZcbiAgICBhY3Rpb24ubmV3Q29uZmlnLmRhdGFJZCAhPT0gb2xkTGF5ZXIuY29uZmlnLmRhdGFJZFxuICApIHtcbiAgICBjb25zdCB7ZGF0YUlkLCAuLi5yZXN0Q29uZmlnfSA9IGFjdGlvbi5uZXdDb25maWc7XG4gICAgY29uc3Qgc3RhdGVXaXRoRGF0YUlkID0gbGF5ZXJEYXRhSWRDaGFuZ2VVcGRhdGVyKHN0YXRlLCB7XG4gICAgICBvbGRMYXllcixcbiAgICAgIG5ld0NvbmZpZzoge2RhdGFJZH1cbiAgICB9KTtcbiAgICBjb25zdCBuZXh0TGF5ZXIgPSBzdGF0ZVdpdGhEYXRhSWQubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gICAgcmV0dXJuIG5leHRMYXllciAmJiBPYmplY3Qua2V5cyhyZXN0Q29uZmlnKS5sZW5ndGhcbiAgICAgID8gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKHN0YXRlV2l0aERhdGFJZCwge29sZExheWVyOiBuZXh0TGF5ZXIsIG5ld0NvbmZpZzogcmVzdENvbmZpZ30pXG4gICAgICA6IHN0YXRlV2l0aERhdGFJZDtcbiAgfVxuXG4gIGxldCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKGFjdGlvbi5uZXdDb25maWcpO1xuXG4gIGxldCBsYXllckRhdGE7XG5cbiAgaWYgKG5ld0xheWVyLnNob3VsZENhbGN1bGF0ZUxheWVyRGF0YShwcm9wcykpIHtcbiAgICBjb25zdCBvbGRMYXllckRhdGEgPSBzdGF0ZS5sYXllckRhdGFbaWR4XTtcblxuICAgIGNvbnN0IHVwZGF0ZUxheWVyRGF0YVJlc3VsdCA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIG9sZExheWVyRGF0YSk7XG4gICAgbmV3TGF5ZXIgPSB1cGRhdGVMYXllckRhdGFSZXN1bHQubGF5ZXI7XG4gICAgbGF5ZXJEYXRhID0gdXBkYXRlTGF5ZXJEYXRhUmVzdWx0LmxheWVyRGF0YTtcbiAgfVxuXG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuICBpZiAoJ2lzVmlzaWJsZScgaW4gYWN0aW9uLm5ld0NvbmZpZykge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlbGF5ZXJWaXNpYmlsdHkobmV3U3RhdGUsIG5ld0xheWVyLCBhY3Rpb24ubmV3Q29uZmlnLmlzVmlzaWJsZSk7XG4gIH1cblxuICBpZiAoJ2NvbHVtbnMnIGluIGFjdGlvbi5uZXdDb25maWcgJiYgbmV3TGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkKSB7XG4gICAgLy8gVE9ETzogU2hhbiwgbWFrZSB0aGUgYW5pbWF0aW9uIGNvbmZpZyBmdW5jdGlvbiBtb3JlIHJvYnVzdFxuICAgIG5ld1N0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV3U3RhdGUsIHtcbiAgICBsYXllcjogbmV3TGF5ZXIsXG4gICAgbGF5ZXJEYXRhLFxuICAgIGlkeFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxheWVyQW5pbWF0aW9uQ2hhbmdlVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTLCBhY3Rpb24pOiBTIHtcbiAgY29uc3Qge29sZExheWVyLCBwcm9wLCB2YWx1ZX0gPSBhY3Rpb247XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG5cbiAgY29uc3QgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgYW5pbWF0aW9uOiB7XG4gICAgICAuLi5vbGRMYXllci5jb25maWcuYW5pbWF0aW9uLFxuICAgICAgW3Byb3BdOiB2YWx1ZVxuICAgIH1cbiAgfSk7XG5cbiAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSwgc3RhdGUubGF5ZXJEYXRhW2lkeF0pO1xuXG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEoc3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXJJZCwgaXNWaXNpYmxlLCBzcGxpdE1hcElkXG4gKiBoYW5kbGVzIHR3byBjYXNlczpcbiAqIDEpIHRvZ2dsZSB0aGUgdmlzaWJpbGl0eSBvZiBsb2NhbCBTcGxpdE1hcCBsYXllciAodmlzU3RhdGUuc3BsaXRNYXAubGF5ZXJzKVxuICogMikgdG9nZ2xlIHRoZSB2aXNpYmlsaXR5IG9mIGdsb2JhbCBsYXllciAodmlzU3RhdGUubGF5ZXJzKVxuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclRvZ2dsZVZpc2liaWxpdHlVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVG9nZ2xlVmlzaWJpbGl0eVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2xheWVySWQsIGlzVmlzaWJsZSwgc3BsaXRNYXBJZH0gPSBhY3Rpb247XG4gIGNvbnN0IGxheWVyID0gc3RhdGUubGF5ZXJzLmZpbmQoZCA9PiBkLmlkID09PSBsYXllcklkKTtcblxuICBpZiAoIWxheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG5cbiAgaWYgKHNwbGl0TWFwSWQpIHtcbiAgICAvLyBbY2FzZSAxXTogdG9nZ2xlIGxvY2FsIGxheWVyIHZpc2liaWxpdHkgZm9yIGVhY2ggU3BsaXRNYXBcbiAgICBjb25zdCBtYXBJbmRleCA9IG5ld1N0YXRlLnNwbGl0TWFwcy5maW5kSW5kZXgoc20gPT4gc20uaWQgPT09IHNwbGl0TWFwSWQpO1xuICAgIGlmIChpc1Zpc2libGUpIHtcbiAgICAgIC8vIDEpIGlmIHRoZSBsYXllciBpcyBpbnZpc2libGUgZ2xvYmFsbHlcbiAgICAgIC8vIC0+IHNldCBnbG9iYWwgdmlzaWJpbGl0eSB0byB0cnVlXG4gICAgICBuZXdTdGF0ZSA9IGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihuZXdTdGF0ZSwgbGF5ZXJDb25maWdDaGFuZ2UobGF5ZXIsIHtpc1Zpc2libGU6IHRydWV9KSk7XG5cbiAgICAgIC8vIC0+IHNldCBsb2NhbCB2aXNpYmlsaXR5IHRvIHRydWUgYW5kIHRoZSBsb2NhbCB2aXNpYmlsaXRpZXMgb2YgYWxsIG90aGVyIFNwbGl0TWFwcyB0byBmYWxzZVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICAgIHNwbGl0TWFwczogbmV3U3RhdGUuc3BsaXRNYXBzLm1hcChzbSA9PlxuICAgICAgICAgIHNtLmlkICE9PSBzcGxpdE1hcElkXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAuLi5zbSxcbiAgICAgICAgICAgICAgICBsYXllcnM6IHtcbiAgICAgICAgICAgICAgICAgIC4uLnNtLmxheWVycyxcbiAgICAgICAgICAgICAgICAgIFtsYXllcklkXTogZmFsc2VcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgIC4uLnNtLFxuICAgICAgICAgICAgICAgIGxheWVyczoge1xuICAgICAgICAgICAgICAgICAgLi4uc20ubGF5ZXJzLFxuICAgICAgICAgICAgICAgICAgW2xheWVySWRdOiB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIH07XG4gICAgfVxuICAgIC8vIDIpIGVsc2Ugd2hlbiB0aGUgbGF5ZXIgaXMgdmlzaWJsZSBnbG9iYWxseVxuICAgIHJldHVybiB0b2dnbGVMYXllckZvck1hcFVwZGF0ZXIobmV3U3RhdGUsIHRvZ2dsZUxheWVyRm9yTWFwKG1hcEluZGV4LCBsYXllcklkKSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gW2Nhc2UgMl06IHRvZ2dsZSBnbG9iYWwgbGF5ZXIgdmlzaWJpbGl0eVxuICAgIGNvbnN0IG5ld0xheWVyID0gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe2lzVmlzaWJsZX0pO1xuICAgIGNvbnN0IGlkeCA9IG5ld1N0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBsYXllcklkKTtcblxuICAgIG5ld1N0YXRlID0gdXBkYXRlbGF5ZXJWaXNpYmlsdHkobmV3U3RhdGUsIG5ld0xheWVyLCBpc1Zpc2libGUpO1xuICAgIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV3U3RhdGUsIHtcbiAgICAgIGxheWVyOiBuZXdMYXllcixcbiAgICAgIGlkeFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBzdGF0ZVxuICogQHJldHVybnMgaW5kZXggb2YgdGhlIGZpbHRlciBzeW5jZWQgdG8gdGltZWxpbmUgb3IgLTFcbiAqL1xuZnVuY3Rpb24gZmlsdGVyU3luY2VkV2l0aFRpbWVsaW5lKHN0YXRlOiBWaXNTdGF0ZSk6IG51bWJlciB7XG4gIHJldHVybiBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IChmIGFzIFRpbWVSYW5nZUZpbHRlcikuc3luY2VkV2l0aExheWVyVGltZWxpbmUpO1xufVxuXG4vKipcbiAqIFVwZGF0ZXMgaXNWYWxpZCBmbGFnIG9mIGEgbGF5ZXIuXG4gKiBVcGRhdGVzIGlzVmlzaWJsZSBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgaXNWYWxpZC5cbiAqIFRyaWdnZXJzIHVwZGF0ZSBvZiBkYXRhIGZvciB0aGUgbGF5ZXIgaW4gb3JkZXIgdG8gZ2V0IGVycm9ycyBhZ2FpbiBkdXJpbmcgbmV4dCB1cGRhdGUgaXRlcmF0aW9uLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJTZXRJc1ZhbGlkVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclNldElzVmFsaWRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgaXNWYWxpZH0gPSBhY3Rpb247XG5cbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgY29uc3QgbGF5ZXJUb1VwZGF0ZSA9IHN0YXRlLmxheWVyc1tpZHhdO1xuICBpZiAobGF5ZXJUb1VwZGF0ZSkge1xuICAgIGxldCBuZXdMYXllcjtcbiAgICBsZXQgbmV3RGF0YSA9IG51bGw7XG5cbiAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgLy8gVHJpZ2dlciBkYXRhIHVwZGF0ZSBpbiBvcmRlciB0byBzaG93IGVycm9ycyBhZ2FpbiBpZiBwcmVzZW50LlxuICAgICAgY29uc3Qge2xheWVyLCBsYXllckRhdGF9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKGxheWVyVG9VcGRhdGUsIHN0YXRlLCB1bmRlZmluZWQpO1xuICAgICAgbmV3TGF5ZXIgPSBsYXllcjtcbiAgICAgIG5ld0RhdGEgPSBsYXllckRhdGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0xheWVyID0gbGF5ZXJUb1VwZGF0ZS51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgIGlzVmlzaWJsZTogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgbmV3TGF5ZXIuaXNWYWxpZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEoc3RhdGUsIHtpZHgsIGxheWVyOiBuZXdMYXllciwgbGF5ZXJEYXRhOiBuZXdEYXRhfSk7XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbmZ1bmN0aW9uIGFkZE9yUmVtb3ZlVGV4dExhYmVscyhuZXdGaWVsZHMsIHRleHRMYWJlbCwgZGVmYXVsdFRleHRMYWJlbCA9IERFRkFVTFRfVEVYVF9MQUJFTCkge1xuICBsZXQgbmV3VGV4dExhYmVsID0gdGV4dExhYmVsLnNsaWNlKCk7XG5cbiAgY29uc3QgY3VycmVudEZpZWxkcyA9IHRleHRMYWJlbC5tYXAodGwgPT4gdGwuZmllbGQgJiYgdGwuZmllbGQubmFtZSkuZmlsdGVyKGQgPT4gZCk7XG5cbiAgY29uc3QgYWRkRmllbGRzID0gbmV3RmllbGRzLmZpbHRlcihmID0+ICFjdXJyZW50RmllbGRzLmluY2x1ZGVzKGYubmFtZSkpO1xuICBjb25zdCBkZWxldGVGaWVsZHMgPSBjdXJyZW50RmllbGRzLmZpbHRlcihmID0+ICFuZXdGaWVsZHMuZmluZChmZCA9PiBmZC5uYW1lID09PSBmKSk7XG5cbiAgLy8gZGVsZXRlXG4gIG5ld1RleHRMYWJlbCA9IG5ld1RleHRMYWJlbC5maWx0ZXIodGwgPT4gdGwuZmllbGQgJiYgIWRlbGV0ZUZpZWxkcy5pbmNsdWRlcyh0bC5maWVsZC5uYW1lKSk7XG4gIG5ld1RleHRMYWJlbCA9ICFuZXdUZXh0TGFiZWwubGVuZ3RoID8gW2RlZmF1bHRUZXh0TGFiZWxdIDogbmV3VGV4dExhYmVsO1xuXG4gIC8vIGFkZFxuICBuZXdUZXh0TGFiZWwgPSBbXG4gICAgLi4ubmV3VGV4dExhYmVsLmZpbHRlcih0bCA9PiB0bC5maWVsZCksXG4gICAgLi4uYWRkRmllbGRzLm1hcChhZiA9PiAoe1xuICAgICAgLi4uZGVmYXVsdFRleHRMYWJlbCxcbiAgICAgIGZpZWxkOiBhZlxuICAgIH0pKVxuICBdO1xuXG4gIHJldHVybiBuZXdUZXh0TGFiZWw7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVRleHRMYWJlbFByb3BBbmRWYWx1ZShpZHgsIHByb3AsIHZhbHVlLCB0ZXh0TGFiZWwpIHtcbiAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGV4dExhYmVsW2lkeF0sIHByb3ApKSB7XG4gICAgcmV0dXJuIHRleHRMYWJlbDtcbiAgfVxuXG4gIGxldCBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwuc2xpY2UoKTtcblxuICBpZiAocHJvcCA9PT0gJ2ZpZWxkJyAmJiB2YWx1ZSA9PT0gbnVsbCAmJiB0ZXh0TGFiZWwubGVuZ3RoID4gMSkge1xuICAgIC8vIHJlbW92ZSBsYWJlbCB3aGVuIGZpZWxkIHZhbHVlIGlzIHNldCB0byBudWxsXG4gICAgbmV3VGV4dExhYmVsLnNwbGljZShpZHgsIDEpO1xuICB9IGVsc2UgaWYgKHByb3ApIHtcbiAgICBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwubWFwKCh0bCwgaSkgPT4gKGkgPT09IGlkeCA/IHsuLi50bCwgW3Byb3BdOiB2YWx1ZX0gOiB0bCkpO1xuICB9XG5cbiAgcmV0dXJuIG5ld1RleHRMYWJlbDtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgYmFzZSBjb25maWc6IGRhdGFJZCwgbGFiZWwsIGNvbHVtbiwgaXNWaXNpYmxlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclRleHRMYWJlbENoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJUZXh0TGFiZWxDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgaWR4LCBwcm9wLCB2YWx1ZX0gPSBhY3Rpb247XG4gIGNvbnN0IHt0ZXh0TGFiZWx9ID0gb2xkTGF5ZXIuY29uZmlnO1xuXG4gIC8vIHdoZW4gYWRkaW5nIGEgbmV3IGVtcHR5IHRleHQgbGFiZWwsXG4gIC8vIHJlbHkgb24gdGhlIGxheWVyJ3MgZGVmYXVsdCBjb25maWcsIG9yIHVzZSB0aGUgY29uc3RhbnQgREVGQVVMVF9URVhUX0xBQkVMXG4gIGNvbnN0IGRlZmF1bHRUZXh0TGFiZWwgPVxuICAgIG9sZExheWVyLmdldERlZmF1bHRMYXllckNvbmZpZyh7ZGF0YUlkOiAnJ30pPy50ZXh0TGFiZWw/LlswXSA/PyBERUZBVUxUX1RFWFRfTEFCRUw7XG5cbiAgbGV0IG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5zbGljZSgpO1xuICBpZiAoIXRleHRMYWJlbFtpZHhdICYmIGlkeCA9PT0gdGV4dExhYmVsLmxlbmd0aCkge1xuICAgIC8vIGlmIGlkeCBpcyBzZXQgdG8gbGVuZ3RoLCBhZGQgZW1wdHkgdGV4dCBsYWJlbFxuICAgIG5ld1RleHRMYWJlbCA9IFsuLi50ZXh0TGFiZWwsIGRlZmF1bHRUZXh0TGFiZWxdO1xuICB9XG5cbiAgaWYgKGlkeCA9PT0gJ2FsbCcgJiYgcHJvcCA9PT0gJ2ZpZWxkcycpIHtcbiAgICBuZXdUZXh0TGFiZWwgPSBhZGRPclJlbW92ZVRleHRMYWJlbHModmFsdWUsIHRleHRMYWJlbCwgZGVmYXVsdFRleHRMYWJlbCk7XG4gIH0gZWxzZSB7XG4gICAgbmV3VGV4dExhYmVsID0gdXBkYXRlVGV4dExhYmVsUHJvcEFuZFZhbHVlKGlkeCwgcHJvcCwgdmFsdWUsIG5ld1RleHRMYWJlbCk7XG4gIH1cbiAgLy8gdXBkYXRlIHRleHQgbGFiZWwgcHJvcCBhbmQgdmFsdWVcbiAgcmV0dXJuIGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihzdGF0ZSwge1xuICAgIG9sZExheWVyLFxuICAgIG5ld0NvbmZpZzoge3RleHRMYWJlbDogbmV3VGV4dExhYmVsfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEoZGF0YXNldCwgbGF5ZXJDbGFzc2VzLCBsYXllciwgc2NoZW1hKSB7XG4gIGNvbnN0IGxvYWRlZExheWVyID0gc2VyaWFsaXplTGF5ZXIobGF5ZXIsIHNjaGVtYSk7XG4gIHJldHVybiBsb2FkZWRMYXllclxuICAgID8gdmFsaWRhdGVMYXllcldpdGhEYXRhKGRhdGFzZXQsIGxvYWRlZExheWVyLCBsYXllckNsYXNzZXMsIHtcbiAgICAgICAgYWxsb3dFbXB0eUNvbHVtbjogdHJ1ZVxuICAgICAgfSlcbiAgICA6IG51bGw7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIGNvbmZpZyBkYXRhSWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyRGF0YUlkQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IHtcbiAgICBvbGRMYXllcjogTGF5ZXI7XG4gICAgbmV3Q29uZmlnOiB7XG4gICAgICBkYXRhSWQ6IHN0cmluZztcbiAgICB9O1xuICB9XG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgbmV3Q29uZmlnfSA9IGFjdGlvbjtcbiAgY29uc3Qge2RhdGFJZH0gPSBuZXdDb25maWc7XG5cbiAgaWYgKCFvbGRMYXllciB8fCAhc3RhdGUuZGF0YXNldHNbZGF0YUlkXSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuXG4gIGxldCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtkYXRhSWR9KTtcblxuICAvLyB0aGlzIG1heSBoYXBwZW4gd2hlbiBhIGxheWVyIGlzIG5ldyAodHlwZTogbnVsbCBhbmQgbm8gY29sdW1ucykgYnV0IGl0J3Mgbm90IHJlYWR5IHRvIGJlIHNhdmVkXG4gIGlmIChuZXdMYXllci5pc1ZhbGlkVG9TYXZlKCkpIHtcbiAgICBjb25zdCB2YWxpZGF0ZWQgPSB2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YShcbiAgICAgIHN0YXRlLmRhdGFzZXRzW2RhdGFJZF0sXG4gICAgICBzdGF0ZS5sYXllckNsYXNzZXMsXG4gICAgICBuZXdMYXllcixcbiAgICAgIHN0YXRlLnNjaGVtYVxuICAgICk7XG4gICAgLy8gaWYgY2FudCB2YWxpZGF0ZSBpdCB3aXRoIGRhdGEgY3JlYXRlIGEgbmV3IG9uZVxuICAgIGlmICghdmFsaWRhdGVkKSB7XG4gICAgICBjb25zdCBvbGRMYXllclR5cGUgPSBvbGRMYXllci50eXBlO1xuICAgICAgaWYgKG9sZExheWVyVHlwZSkge1xuICAgICAgICBuZXdMYXllciA9IG5ldyBzdGF0ZS5sYXllckNsYXNzZXNbb2xkTGF5ZXJUeXBlXSh7ZGF0YUlkLCBpZDogb2xkTGF5ZXIuaWR9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbmV3TGF5ZXIgPSB2YWxpZGF0ZWQ7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIExheWVyIGlzIG5vdCB2YWxpZCB0byBzYXZlIChlLmcuIG1pc3NpbmcgY29sdW1ucyksIGJ1dCB3ZSBzdGlsbCBuZWVkIHRvXG4gICAgLy8gcmVtYXAgdmlzdWFsIGNoYW5uZWwgZmllbGRzIHRvIHRoZSBuZXcgZGF0YXNldCB0byBhdm9pZCBzdGFsZSBmaWVsZCByZWZlcmVuY2VzXG4gICAgLy8gdGhhdCBwb2ludCB0byByb3dzIGJleW9uZCB0aGUgbmV3IGRhdGFzZXQncyBsZW5ndGhcbiAgICBjb25zdCBuZXdEYXRhc2V0RmllbGRzID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXS5maWVsZHM7XG4gICAgY29uc3QgcmVtYXBwZWRGaWVsZHM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICBPYmplY3QudmFsdWVzKG5ld0xheWVyLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKCh7ZmllbGQ6IGZpZWxkS2V5fSkgPT4ge1xuICAgICAgY29uc3QgY3VycmVudEZpZWxkID0gbmV3TGF5ZXIuY29uZmlnW2ZpZWxkS2V5XTtcbiAgICAgIGlmIChjdXJyZW50RmllbGQpIHtcbiAgICAgICAgY29uc3QgbWF0Y2hlZCA9IG5ld0RhdGFzZXRGaWVsZHMuZmluZChmID0+IGYubmFtZSA9PT0gY3VycmVudEZpZWxkLm5hbWUpO1xuICAgICAgICByZW1hcHBlZEZpZWxkc1tmaWVsZEtleV0gPSBtYXRjaGVkIHx8IG51bGw7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKE9iamVjdC5rZXlzKHJlbWFwcGVkRmllbGRzKS5sZW5ndGgpIHtcbiAgICAgIG5ld0xheWVyID0gbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb25maWcocmVtYXBwZWRGaWVsZHMpO1xuICAgIH1cbiAgICAvLyBWYWxpZGF0ZSBmaWVsZCB0eXBlIGNvbXBhdGliaWxpdHkg4oCUIGNsZWFycyBmaWVsZHMgd2hvc2UgdHlwZSBpcyBpbmNvbXBhdGlibGVcbiAgICAvLyB3aXRoIHRoZSBjaGFubmVsJ3Mgc3VwcG9ydGVkIGZpZWxkIHR5cGVzIChlLmcuIHN0cmluZyBmaWVsZCBmb3IgYSBudW1lcmljIHNjYWxlKVxuICAgIE9iamVjdC52YWx1ZXMobmV3TGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goKHtrZXl9KSA9PiB7XG4gICAgICBuZXdMYXllci52YWxpZGF0ZVZpc3VhbENoYW5uZWwoa2V5KTtcbiAgICB9KTtcbiAgfVxuXG4gIG5ld0xheWVyID0gbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgIGlzVmlzaWJsZTogb2xkTGF5ZXIuY29uZmlnLmlzVmlzaWJsZSxcbiAgICBpc0NvbmZpZ0FjdGl2ZTogdHJ1ZVxuICB9KTtcblxuICBuZXdMYXllci51cGRhdGVMYXllckRvbWFpbihzdGF0ZS5kYXRhc2V0cyk7XG4gIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIHVuZGVmaW5lZCk7XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0SW5pdGlhbExheWVyQ29uZmlnKGxheWVyLCBkYXRhc2V0cywgbGF5ZXJDbGFzc2VzKTogTGF5ZXIge1xuICBsZXQgbmV3TGF5ZXIgPSBsYXllcjtcbiAgaWYgKCFPYmplY3Qua2V5cyhkYXRhc2V0cykubGVuZ3RoKSB7XG4gICAgLy8gbm8gZGF0YSBpcyBsb2FkZWRcbiAgICByZXR1cm4gbGF5ZXI7XG4gIH1cbiAgaWYgKCFsYXllci5jb25maWcuZGF0YUlkKSB7XG4gICAgLy8gc2V0IGxheWVyIGRhdGFJZFxuICAgIG5ld0xheWVyID0gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe2RhdGFJZDogT2JqZWN0LmtleXMoZGF0YXNldHMpWzBdfSk7XG4gIH1cbiAgY29uc3QgZGF0YXNldCA9IGRhdGFzZXRzW25ld0xheWVyLmNvbmZpZy5kYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gbGF5ZXI7XG4gIH1cblxuICAvLyBmaW5kIGRlZmF1dCBsYXllciBwcm9wc1xuICBjb25zdCByZXN1bHQgPVxuICAgIHR5cGVvZiBsYXllckNsYXNzZXNbbmV3TGF5ZXIudHlwZV0uZmluZERlZmF1bHRMYXllclByb3BzID09PSAnZnVuY3Rpb24nXG4gICAgICA/IGxheWVyQ2xhc3Nlc1tuZXdMYXllci50eXBlXS5maW5kRGVmYXVsdExheWVyUHJvcHMoZGF0YXNldCwgW10pXG4gICAgICA6IHtwcm9wczogW119O1xuXG4gIC8vIGFuIGFycmF5IG9mIHBvc3NpYmxlIHByb3BzLCB1c2UgMXN0IG9uZVxuICBjb25zdCBwcm9wcyA9IEFycmF5LmlzQXJyYXkocmVzdWx0KSA/IHJlc3VsdCA6IHJlc3VsdC5wcm9wcyB8fCBbXTtcblxuICBpZiAocHJvcHMubGVuZ3RoKSB7XG4gICAgbmV3TGF5ZXIgPSBuZXcgbGF5ZXJDbGFzc2VzW2xheWVyLnR5cGVdKHtcbiAgICAgIC4uLnByb3BzWzBdLFxuICAgICAgbGFiZWw6IG5ld0xheWVyLmNvbmZpZy5sYWJlbCxcbiAgICAgIGRhdGFJZDogbmV3TGF5ZXIuY29uZmlnLmRhdGFJZCxcbiAgICAgIGlzQ29uZmlnQWN0aXZlOiBuZXdMYXllci5jb25maWcuaXNDb25maWdBY3RpdmUsXG4gICAgICBpc1Zpc2libGU6IG5ld0xheWVyLmNvbmZpZy5pc1Zpc2libGVcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gdHlwZW9mIG5ld0xheWVyLnNldEluaXRpYWxMYXllckNvbmZpZyA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gbmV3TGF5ZXIuc2V0SW5pdGlhbExheWVyQ29uZmlnKGRhdGFzZXQpXG4gICAgOiBuZXdMYXllcjtcbn1cbi8qKlxuICogVXBkYXRlIGxheWVyIHR5cGUuIFByZXZpZXdzIGxheWVyIGNvbmZpZyB3aWxsIGJlIGNvcGllZCBpZiBhcHBsaWNhYmxlLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVHlwZUNoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJUeXBlQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXIsIG5ld1R5cGV9ID0gYWN0aW9uO1xuICBpZiAoIW9sZExheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG9sZElkID0gb2xkTGF5ZXIuaWQ7XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRJZCk7XG5cbiAgaWYgKCFzdGF0ZS5sYXllckNsYXNzZXNbbmV3VHlwZV0pIHtcbiAgICBDb25zb2xlLmVycm9yKGAke25ld1R5cGV9IGlzIG5vdCBhIHZhbGlkIGxheWVyIHR5cGVgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbGV0IG5ld0xheWVyID0gbmV3IHN0YXRlLmxheWVyQ2xhc3Nlc1tuZXdUeXBlXSh7XG4gICAgLy8ga2VlcCBvbGQgbGF5ZXIgbGFibGUgYW5kIGlzQ29uZmlnQWN0aXZlXG4gICAgbGFiZWw6IG9sZExheWVyLmNvbmZpZy5sYWJlbCxcbiAgICBpc0NvbmZpZ0FjdGl2ZTogb2xkTGF5ZXIuY29uZmlnLmlzQ29uZmlnQWN0aXZlLFxuICAgIGRhdGFJZDogb2xkTGF5ZXIuY29uZmlnLmRhdGFJZFxuICB9KTtcblxuICBpZiAoIW9sZExheWVyLnR5cGUpIHtcbiAgICAvLyBpZiBzZXR0aW5nIGxheWVyIHR5cGUgb24gYW4gZW1wdHkgbGF5ZXJcbiAgICBuZXdMYXllciA9IHNldEluaXRpYWxMYXllckNvbmZpZyhuZXdMYXllciwgc3RhdGUuZGF0YXNldHMsIHN0YXRlLmxheWVyQ2xhc3Nlcyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gZ2V0IGEgbWludCBsYXllciwgd2l0aCBuZXcgaWQgYW5kIHR5cGVcbiAgICAvLyBiZWNhdXNlIGRlY2suZ2wgdXNlcyBpZCB0byBtYXRjaCBiZXR3ZWVuIG5ldyBhbmQgb2xkIGxheWVyLlxuICAgIC8vIElmIHR5cGUgaGFzIGNoYW5nZWQgYnV0IGlkIGlzIHRoZSBzYW1lLCBpdCB3aWxsIGJyZWFrXG5cbiAgICBjb25zdCBkZWZhdWx0TGF5ZXJQcm9wcyA9XG4gICAgICB0eXBlb2Ygc3RhdGUubGF5ZXJDbGFzc2VzW25ld1R5cGVdLmZpbmREZWZhdWx0TGF5ZXJQcm9wcyA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IHN0YXRlLmxheWVyQ2xhc3Nlc1tuZXdUeXBlXS5maW5kRGVmYXVsdExheWVyUHJvcHMoc3RhdGUuZGF0YXNldHNbbmV3TGF5ZXIuY29uZmlnLmRhdGFJZF0pXG4gICAgICAgIDogbnVsbDtcblxuICAgIG5ld0xheWVyLmFzc2lnbkNvbmZpZ1RvTGF5ZXIoXG4gICAgICBvbGRMYXllci5jb25maWcsXG4gICAgICBvbGRMYXllci52aXNDb25maWdTZXR0aW5ncyxcbiAgICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgICAgZGVmYXVsdExheWVyUHJvcHNcbiAgICApO1xuICAgIG5ld0xheWVyLnVwZGF0ZUxheWVyRG9tYWluKHN0YXRlLmRhdGFzZXRzKTtcbiAgfVxuXG4gIGNvbnN0IHtjbGlja2VkLCBob3ZlckluZm99ID0gc3RhdGU7XG5cbiAgbGV0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGNsaWNrZWQ6IG9sZExheWVyLmlzTGF5ZXJIb3ZlcmVkKGNsaWNrZWQpID8gdW5kZWZpbmVkIDogY2xpY2tlZCxcbiAgICBob3ZlckluZm86IG9sZExheWVyLmlzTGF5ZXJIb3ZlcmVkKGhvdmVySW5mbykgPyB1bmRlZmluZWQgOiBob3ZlckluZm9cbiAgfTtcblxuICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIG5ld1N0YXRlKTtcbiAgbmV3U3RhdGUgPSB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV3U3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcblxuICBpZiAobGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkIHx8IG9sZExheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCkge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbiAgfVxuXG4gIC8vIHVwZGF0ZSBzcGxpdE1hcCBsYXllciBpZFxuICBpZiAoc3RhdGUuc3BsaXRNYXBzLmxlbmd0aCkge1xuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICBzcGxpdE1hcHM6IG5ld1N0YXRlLnNwbGl0TWFwcy5tYXAoc2V0dGluZ3MgPT4ge1xuICAgICAgICBjb25zdCB7W29sZElkXTogb2xkTGF5ZXJNYXAsIC4uLm90aGVyTGF5ZXJzfSA9IHNldHRpbmdzLmxheWVycztcbiAgICAgICAgcmV0dXJuIG9sZElkIGluIHNldHRpbmdzLmxheWVyc1xuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAuLi5zZXR0aW5ncyxcbiAgICAgICAgICAgICAgbGF5ZXJzOiB7XG4gICAgICAgICAgICAgICAgLi4ub3RoZXJMYXllcnMsXG4gICAgICAgICAgICAgICAgW2xheWVyLmlkXTogb2xkTGF5ZXJNYXBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDogc2V0dGluZ3M7XG4gICAgICB9KVxuICAgIH07XG4gIH1cblxuICAvLyB1cGRhdGUgbGF5ZXJPcmRlciB3aXRoIG5ldyBpZFxuICBuZXdTdGF0ZSA9IHtcbiAgICAuLi5uZXdTdGF0ZSxcbiAgICBsYXllck9yZGVyOiByZXBsYWNlTGF5ZXJFbnRyeUluTGF5ZXJPcmRlcihuZXdTdGF0ZS5sYXllck9yZGVyLCBvbGRMYXllci5pZCwgbmV3TGF5ZXIuaWQpXG4gIH07XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciB2aXN1YWwgY2hhbm5lbFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJWaXN1YWxDaGFubmVsQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgbmV3Q29uZmlnLCBuZXdWaXNDb25maWcsIGNoYW5uZWx9ID0gYWN0aW9uO1xuICBpZiAoIW9sZExheWVyLmNvbmZpZy5kYXRhSWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbb2xkTGF5ZXIuY29uZmlnLmRhdGFJZF07XG5cbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgbGV0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcobmV3Q29uZmlnKTtcbiAgaWYgKG5ld1Zpc0NvbmZpZykgbmV3TGF5ZXIgPSBuZXdMYXllci51cGRhdGVMYXllclZpc0NvbmZpZyhuZXdWaXNDb25maWcpO1xuXG4gIG5ld0xheWVyLnVwZGF0ZUxheWVyVmlzdWFsQ2hhbm5lbChkYXRhc2V0LCBjaGFubmVsKTtcblxuICAvLyBjYWxsaW5nIHVwZGF0ZSBhbmltYXRpb24gZG9tYWluIGZpcnN0IHRvIG1lcmdlIGFsbCBsYXllciBhbmltYXRpb24gZG9tYWluXG4gIGxldCB1cGRhdGVkU3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4oc3RhdGUpO1xuXG4gIGNvbnN0IHZpc3VhbENoYW5uZWwgPSBvbGRMYXllci52aXN1YWxDaGFubmVsc1tjaGFubmVsXTtcbiAgaWYgKHZpc3VhbENoYW5uZWw/LmNoYW5uZWxTY2FsZVR5cGUgPT09IENIQU5ORUxfU0NBTEVTLmNvbG9yICYmIG5ld0NvbmZpZ1t2aXN1YWxDaGFubmVsLmZpZWxkXSkge1xuICAgIC8vIGlmIGNvbG9yIGZpZWxkIGNoYW5nZWQsIHNldCBjdXN0b21CcmVha3MgdG8gZmFsc2VcbiAgICBuZXdMYXllci51cGRhdGVMYXllckNvbG9yVUkodmlzdWFsQ2hhbm5lbC5yYW5nZSwge1xuICAgICAgY29sb3JSYW5nZUNvbmZpZzoge1xuICAgICAgICAuLi5uZXdMYXllci5jb25maWcuY29sb3JVSVt2aXN1YWxDaGFubmVsLnJhbmdlXS5jb2xvclJhbmdlQ29uZmlnLFxuICAgICAgICBjdXN0b21CcmVha3M6IGZhbHNlXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB1cGRhdGVkU3RhdGUgPSB7XG4gICAgICAuLi51cGRhdGVkU3RhdGUsXG4gICAgICBsYXllcnM6IHVwZGF0ZWRTdGF0ZS5sYXllcnMubWFwKGwgPT4gKGwuaWQgPT09IG9sZExheWVyLmlkID8gbmV3TGF5ZXIgOiBsKSlcbiAgICB9O1xuICB9XG5cbiAgY29uc3Qgb2xkTGF5ZXJEYXRhID0gdXBkYXRlZFN0YXRlLmxheWVyRGF0YVtpZHhdO1xuICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHVwZGF0ZWRTdGF0ZSwgb2xkTGF5ZXJEYXRhKTtcblxuICBpZiAoXG4gICAgdmlzdWFsQ2hhbm5lbD8uY2hhbm5lbFNjYWxlVHlwZSA9PT0gQ0hBTk5FTF9TQ0FMRVMuY29sb3IgJiZcbiAgICBuZXdDb25maWdbdmlzdWFsQ2hhbm5lbD8uc2NhbGVdID09PSBTQ0FMRV9UWVBFUy5jdXN0b21PcmRpbmFsICYmXG4gICAgIW5ld1Zpc0NvbmZpZ1xuICApIHtcbiAgICAvLyB3aGVuIHN3aXRjaGluZyB0byBjdXN0b21PcmRpbmFsIHNjYWxlLCBjcmVhdGUgYSBjdXN0b21QYWxldHRlIGluIGNvbG9yVUkgd2l0aCB1cGRhdGVkIGNvbG9yRG9tYWluXG4gICAgY29uc3QgY3VzdG9tUGFsZXR0ZSA9IGluaXRDdXN0b21QYWxldHRlQnlDdXN0b21TY2FsZSh7XG4gICAgICBzY2FsZTogU0NBTEVfVFlQRVMuY3VzdG9tT3JkaW5hbCxcbiAgICAgIGZpZWxkOiBsYXllci5jb25maWdbdmlzdWFsQ2hhbm5lbC5maWVsZF0sXG4gICAgICBvcmRpbmFsRG9tYWluOiBsYXllci5jb25maWdbbGF5ZXIudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF0uZG9tYWluXSxcbiAgICAgIHJhbmdlOiBsYXllci5jb25maWcudmlzQ29uZmlnW3Zpc3VhbENoYW5uZWwucmFuZ2VdLFxuICAgICAgY29sb3JCcmVha3M6IG51bGxcbiAgICB9KTtcbiAgICAvLyB1cGRhdGUgY29sb3JSYW5nZSB3aXRoIG5ldyBjdXN0b21QYWxldHRlXG4gICAgbGF5ZXIudXBkYXRlTGF5ZXJDb2xvclVJKHZpc3VhbENoYW5uZWwucmFuZ2UsIHtcbiAgICAgIHNob3dDb2xvckNoYXJ0OiB0cnVlLFxuICAgICAgY29sb3JSYW5nZUNvbmZpZzoge1xuICAgICAgICAuLi5sYXllci5jb25maWcuY29sb3JVSVt2aXN1YWxDaGFubmVsLnJhbmdlXS5jb2xvclJhbmdlQ29uZmlnLFxuICAgICAgICBjdXN0b21CcmVha3M6IHRydWVcbiAgICAgIH0sXG4gICAgICBjdXN0b21QYWxldHRlXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YSh1cGRhdGVkU3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgYHZpc0NvbmZpZ2BcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllcn0gPSBhY3Rpb247XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gIGNvbnN0IHByb3BzID0gT2JqZWN0LmtleXMoYWN0aW9uLm5ld1Zpc0NvbmZpZyk7XG5cbiAgY29uc3QgbmV3VmlzQ29uZmlnID0ge1xuICAgIC4uLm9sZExheWVyLmNvbmZpZy52aXNDb25maWcsXG4gICAgLi4uYWN0aW9uLm5ld1Zpc0NvbmZpZ1xuICB9O1xuXG4gIGNvbnN0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe3Zpc0NvbmZpZzogbmV3VmlzQ29uZmlnfSk7XG5cbiAgbGV0IG5leHRTdGF0ZSA9IHN0YXRlO1xuXG4gIC8vIEV4Y2x1c2l2ZSBiaXRtYXAgZWRpdGluZzogd2hlbiBlZGl0Qm91bmRzIGlzIHR1cm5lZCBvbiBmb3Igb25lIGJpdG1hcCBsYXllcixcbiAgLy8gdHVybiBpdCBvZmYgZm9yIGFsbCBvdGhlciBiaXRtYXAgbGF5ZXJzXG4gIGlmIChcbiAgICBuZXdMYXllci50eXBlID09PSAnYml0bWFwJyAmJlxuICAgIGFjdGlvbi5uZXdWaXNDb25maWcuZWRpdEJvdW5kcyA9PT0gdHJ1ZVxuICApIHtcbiAgICBuZXh0U3RhdGUgPSB7XG4gICAgICAuLi5uZXh0U3RhdGUsXG4gICAgICBsYXllcnM6IG5leHRTdGF0ZS5sYXllcnMubWFwKChsLCBpKSA9PiB7XG4gICAgICAgIGlmIChpICE9PSBpZHggJiYgbC50eXBlID09PSAnYml0bWFwJyAmJiBsLmNvbmZpZy52aXNDb25maWcuZWRpdEJvdW5kcykge1xuICAgICAgICAgIHJldHVybiBsLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgICAgIHZpc0NvbmZpZzogey4uLmwuY29uZmlnLnZpc0NvbmZpZywgZWRpdEJvdW5kczogZmFsc2V9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGw7XG4gICAgICB9KVxuICAgIH07XG4gIH1cblxuICBpZiAobmV3TGF5ZXIuc2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhKHByb3BzKSkge1xuICAgIGNvbnN0IG9sZExheWVyRGF0YSA9IG5leHRTdGF0ZS5sYXllckRhdGFbaWR4XTtcbiAgICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIG5leHRTdGF0ZSwgb2xkTGF5ZXJEYXRhKTtcbiAgICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKG5leHRTdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXh0U3RhdGUsIHtsYXllcjogbmV3TGF5ZXIsIGlkeH0pO1xufVxuXG4vKipcbiAqIFJlc2V0IGFuaW1hdGlvbiBjb25maWcgY3VycmVudCB0aW1lIHRvIGEgc3BlY2lmaWVkIHZhbHVlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICpcbiAqL1xuZXhwb3J0IGNvbnN0IHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIgPSA8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIHt2YWx1ZX06IFZpc1N0YXRlQWN0aW9ucy5TZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyQWN0aW9uXG4pOiBTID0+IHtcbiAgY29uc3QgY3VycmVudFRpbWUgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlWzBdIDogdmFsdWU7XG4gIGNvbnN0IG5leHRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgIGN1cnJlbnRUaW1lXG4gICAgfVxuICB9O1xuICAvLyB1cGRhdGUgYW5pbWF0aW9uIGNvbmZpZyBmb3IgZWFjaCBsYXllclxuICByZXR1cm4gc3RhdGUubGF5ZXJzLnJlZHVjZSgoYWNjdSwgbCkgPT4ge1xuICAgIGlmIChsLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCAmJiBsLnR5cGUgIT09ICd0cmlwJykge1xuICAgICAgcmV0dXJuIGxheWVyQW5pbWF0aW9uQ2hhbmdlVXBkYXRlcihhY2N1LCB7b2xkTGF5ZXI6IGwsIHByb3A6ICdjdXJyZW50VGltZScsIGN1cnJlbnRUaW1lfSk7XG4gICAgfVxuICAgIHJldHVybiBhY2N1O1xuICB9LCBuZXh0U3RhdGUpO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgZmlsdGVyIHByb3BlcnR5XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmlsdGVyQW5pbWF0aW9uVGltZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyQW5pbWF0aW9uVGltZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoc3RhdGUsIGFjdGlvbik7XG59XG5cbi8qKlxuICogVXBkYXRlIGZpbHRlciBhbmltYXRpb24gd2luZG93XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAge2lkLCBhbmltYXRpb25XaW5kb3d9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlckFjdGlvblxuKTogUyB7XG4gIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnMuZmluZChmID0+IGYuaWQgPT09IGlkKTtcblxuICBpZiAoIWZpbHRlcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0ZpbHRlciA9IHtcbiAgICAuLi5maWx0ZXIsXG4gICAgYW5pbWF0aW9uV2luZG93XG4gIH07XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKHN0YXRlLmZpbHRlcnMpXG4gIH07XG5cbiAgY29uc3QgbmV3U3luY1RpbWVsaW5lTW9kZSA9IGdldFN5bmNBbmltYXRpb25Nb2RlKG5ld0ZpbHRlciBhcyBUaW1lUmFuZ2VGaWx0ZXIpO1xuXG4gIHJldHVybiBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcihuZXdTdGF0ZSwge2lkLCBtb2RlOiBuZXdTeW5jVGltZWxpbmVNb2RlfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseUZpbHRlckNvbmZpZ1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQXBwbHlGaWx0ZXJDb25maWdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtmaWx0ZXJJZCwgbmV3RmlsdGVyfSA9IGFjdGlvbjtcbiAgY29uc3Qgb2xkRmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gZi5pZCA9PT0gZmlsdGVySWQpO1xuICBpZiAoIW9sZEZpbHRlcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIFNlcmlhbGl6ZSB0aGUgZmlsdGVycyB0byBvbmx5IGNvbXBhcmUgdGhlIHNhdmVkIHByb3BlcnRpZXNcbiAgY29uc3Qgc2VyaWFsaXplZE9sZEZpbHRlciA9IHNlcmlhbGl6ZUZpbHRlcihvbGRGaWx0ZXIsIHN0YXRlLnNjaGVtYSkgPz8ge2NvbmZpZzoge319O1xuICBjb25zdCBzZXJpYWxpemVkTmV3RmlsdGVyID0gc2VyaWFsaXplRmlsdGVyKG5ld0ZpbHRlciwgc3RhdGUuc2NoZW1hKTtcbiAgaWYgKCFzZXJpYWxpemVkTmV3RmlsdGVyIHx8IGlzRXF1YWwoc2VyaWFsaXplZE9sZEZpbHRlciwgc2VyaWFsaXplZE5ld0ZpbHRlcikpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyBJZiB0aGVyZSBhcmUgYW55IGNoYW5nZXMgdG8gdGhlIGZpbHRlciwgYXBwbHkgdGhlbVxuICBjb25zdCBjaGFuZ2VkID0gcGlja0NoYW5nZWRQcm9wcyhzZXJpYWxpemVkT2xkRmlsdGVyLCBzZXJpYWxpemVkTmV3RmlsdGVyKTtcbiAgZGVsZXRlIGNoYW5nZWRbJ2lkJ107IC8vIGlkIHNob3VsZCBub3QgYmUgY2hhbmdlZFxuXG4gIGNvbnN0IGZpbHRlckluZGV4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBmaWx0ZXJJZCk7XG4gIGlmIChmaWx0ZXJJbmRleCA8IDApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoXG4gICAgc3RhdGUsXG4gICAgc2V0RmlsdGVyKGZpbHRlckluZGV4LCBPYmplY3Qua2V5cyhjaGFuZ2VkKSwgT2JqZWN0LnZhbHVlcyhjaGFuZ2VkKSlcbiAgKTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZmlsdGVyIHByb3BlcnR5XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmlsdGVyVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyVXBkYXRlckFjdGlvblxuKTogUyB7XG4gIGNvbnN0IHtpZHgsIHZhbHVlSW5kZXggPSAwfSA9IGFjdGlvbjtcbiAgY29uc3Qgb2xkRmlsdGVyID0gc3RhdGUuZmlsdGVyc1tpZHhdO1xuICBpZiAoIW9sZEZpbHRlcikge1xuICAgIENvbnNvbGUuZXJyb3IoYGZpbHRlcnMuJHtpZHh9IGlzIHVuZGVmaW5lZGApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAoXG4gICAgQXJyYXkuaXNBcnJheShhY3Rpb24ucHJvcCkgJiZcbiAgICAoIUFycmF5LmlzQXJyYXkoYWN0aW9uLnZhbHVlKSB8fCBhY3Rpb24ucHJvcC5sZW5ndGggIT09IGFjdGlvbi52YWx1ZS5sZW5ndGgpXG4gICkge1xuICAgIENvbnNvbGUuZXJyb3IoJ0V4cGVjdGluZyB2YWx1ZSB0byBiZSBhbiBhcnJheSBvZiB0aGUgc2FtZSBsZW5ndGgsIHNpbmNlIHByb3AgaXMgYW4gYXJyYXknKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgLy8gY29udmVydCBwcm9wIGFuZCB2YWx1ZSB0byBhcnJheVxuICBjb25zdCBwcm9wcyA9IHRvQXJyYXkoYWN0aW9uLnByb3ApO1xuICBjb25zdCB2YWx1ZXMgPSBBcnJheS5pc0FycmF5KGFjdGlvbi5wcm9wKSA/IHRvQXJyYXkoYWN0aW9uLnZhbHVlKSA6IFthY3Rpb24udmFsdWVdO1xuXG4gIGxldCBuZXdGaWx0ZXIgPSBvbGRGaWx0ZXI7XG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuXG4gIGxldCBkYXRhc2V0SWRzVG9GaWx0ZXI6IHN0cmluZ1tdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBwcm9wID0gcHJvcHNbaV07XG4gICAgY29uc3QgdmFsdWUgPSB2YWx1ZXNbaV07XG4gICAgLy8gV2UgY3VycmVudGx5IGRvIG5vdCBzdXBwb3J0IHBhc3NpbmcgaW4gbmFtZSBhcyBhbiBhcnJheSBpbnRvIF91cGRhdGVGaWx0ZXJQcm9wLCBzbyB3ZSBjYWxsIGl0IG11bHRpcGxlIHRpbWVzIHdpdGggZWFjaCBuYW1lXG4gICAgLy8gU2VlIHRoZSBjb21tZW50IGluIHRoZXJlIGFzIHRvIHdoYXQgc2hvdWxkIGJlIGFkZHJlc3NlZFxuICAgIGxldCByZXM7XG4gICAgaWYgKHByb3AgPT09ICduYW1lJyAmJiBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvb3AtZnVuY1xuICAgICAgcmVzID0gdmFsdWUucmVkdWNlKChhY2N1LCB2KSA9PiB7XG4gICAgICAgIHJldHVybiBfdXBkYXRlRmlsdGVyUHJvcChhY2N1LCBuZXdGaWx0ZXIsIHByb3AsIHYsIHZhbHVlSW5kZXgpO1xuICAgICAgfSwgbmV3U3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXMgPSBfdXBkYXRlRmlsdGVyUHJvcChuZXdTdGF0ZSwgbmV3RmlsdGVyLCBwcm9wLCB2YWx1ZSwgdmFsdWVJbmRleCk7XG4gICAgfVxuICAgIG5ld0ZpbHRlciA9IHJlcy5maWx0ZXI7XG4gICAgbmV3U3RhdGUgPSByZXMuc3RhdGU7XG4gICAgZGF0YXNldElkc1RvRmlsdGVyID0gZGF0YXNldElkc1RvRmlsdGVyLmNvbmNhdChyZXMuZGF0YXNldElkc1RvRmlsdGVyKTtcbiAgfVxuXG4gIGNvbnN0IGVubGFyZ2VkRmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gZi52aWV3ID09PSBGSUxURVJfVklFV19UWVBFUy5lbmxhcmdlZCk7XG5cbiAgaWYgKGVubGFyZ2VkRmlsdGVyICYmIGVubGFyZ2VkRmlsdGVyLmlkICE9PSBuZXdGaWx0ZXIuaWQpIHtcbiAgICAvLyB0aGVyZSBzaG91bGQgYmUgb25seSBvbmUgZW5sYXJnZWQgZmlsdGVyXG4gICAgbmV3RmlsdGVyLnZpZXcgPSBGSUxURVJfVklFV19UWVBFUy5zaWRlO1xuICB9XG5cbiAgLy8gc2F2ZSBuZXcgZmlsdGVycyB0byBuZXdTdGF0ZVxuICBuZXdTdGF0ZSA9IHNldChbJ2ZpbHRlcnMnLCBpZHhdLCBuZXdGaWx0ZXIsIG5ld1N0YXRlKTtcblxuICAvLyBmaWx0ZXIgZGF0YVxuICBjb25zdCBmaWx0ZXJlZERhdGFzZXRzID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhcbiAgICB1bmlxKGRhdGFzZXRJZHNUb0ZpbHRlciksXG4gICAgbmV3U3RhdGUuZGF0YXNldHMsXG4gICAgbmV3U3RhdGUuZmlsdGVycyxcbiAgICBuZXdTdGF0ZS5sYXllcnNcbiAgKTtcblxuICBuZXdTdGF0ZSA9IHNldChbJ2RhdGFzZXRzJ10sIGZpbHRlcmVkRGF0YXNldHMsIG5ld1N0YXRlKTtcblxuICAvLyBuZWVkIHRvIHVwZGF0ZSBmaWx0ZXJQbG90IGFmdGVyIGZpbHRlciBEYXRhc2V0IGZvciBwbG90IHRvIHVwZGF0ZSBvbiBmaWx0ZXJlZCByZXN1bHRcbiAgY29uc3QgZmlsdGVyV2l0aFBMb3QgPSB1cGRhdGVGaWx0ZXJQbG90KG5ld1N0YXRlLmRhdGFzZXRzLCBuZXdTdGF0ZS5maWx0ZXJzW2lkeF0pO1xuXG4gIG5ld1N0YXRlID0gc2V0KFsnZmlsdGVycycsIGlkeF0sIGZpbHRlcldpdGhQTG90LCBuZXdTdGF0ZSk7XG5cbiAgLy8gZGF0YUlkIGlzIGFuIGFycmF5XG4gIC8vIHBhc3Mgb25seSB0aGUgZGF0YXNldCB3ZSBuZWVkIHRvIHVwZGF0ZVxuICBuZXdTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXdTdGF0ZSwgZGF0YXNldElkc1RvRmlsdGVyLCBuZXdGaWx0ZXIpO1xuXG4gIC8vIElmIHRpbWUgcmFuZ2UgZmlsdGVyIHZhbHVlIHdhcyB1cGRhdGVkLCBhZGp1c3QgYW5pbWF0aW9uIGNvbmZpZ1xuICBpZiAobmV3RmlsdGVyLnR5cGUgPT09IEZJTFRFUl9UWVBFUy50aW1lUmFuZ2UgJiYgcHJvcHMuaW5jbHVkZXMoJ3ZhbHVlJykpIHtcbiAgICBuZXdTdGF0ZSA9IGFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXIobmV3U3RhdGUsIGFjdGlvbi5pZHgpO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG5mdW5jdGlvbiBfdXBkYXRlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgdmFsdWUsIGRhdGFzZXRzKSB7XG4gIGxldCBuZXdGaWx0ZXIgPSBmaWx0ZXI7XG4gIGlmIChmaWx0ZXIuZGF0YUlkW3ZhbHVlSW5kZXhdKSB7XG4gICAgLy8gaWYgZGF0YUlkIGFscmVhZHkgZXhpc3RcbiAgICBuZXdGaWx0ZXIgPSBfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgZGF0YXNldHMpO1xuICB9XG4gIGlmICh2YWx1ZSkge1xuICAgIGNvbnN0IG5leHRWYWx1ZSA9IG5ld0ZpbHRlci5kYXRhSWQuc2xpY2UoKTtcbiAgICBuZXh0VmFsdWVbdmFsdWVJbmRleF0gPSB2YWx1ZTtcbiAgICBuZXdGaWx0ZXIgPSBzZXQoWydkYXRhSWQnXSwgbmV4dFZhbHVlLCBuZXdGaWx0ZXIpO1xuICB9XG4gIHJldHVybiBuZXdGaWx0ZXI7XG59XG5cbmZ1bmN0aW9uIF9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCBkYXRhc2V0cykge1xuICBjb25zdCBkYXRhSWQgPSBmaWx0ZXIuZGF0YUlkW3ZhbHVlSW5kZXhdO1xuXG4gIGlmIChmaWx0ZXIuZGF0YUlkLmxlbmd0aCA9PT0gMSAmJiB2YWx1ZUluZGV4ID09PSAwKSB7XG4gICAgLy8gaWYgcmVtb3ZlIHRoZSBvbmx5IGRhdGFJZCwgY3JlYXRlIGFuIGVtcHR5IGZpbHRlciBpbnN0ZWFkO1xuICAgIHJldHVybiBnZXREZWZhdWx0RmlsdGVyKHtpZDogZmlsdGVyLmlkfSk7XG4gIH1cblxuICBpZiAoZGF0YUlkKSB7XG4gICAgZmlsdGVyID0gcmVtb3ZlRmlsdGVyUGxvdChmaWx0ZXIsIGRhdGFJZCk7XG4gIH1cblxuICBmb3IgKGNvbnN0IHByb3Agb2YgWydkYXRhSWQnLCAnbmFtZScsICdmaWVsZElkeCcsICdncHVDaGFubmVsJ10pIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShmaWx0ZXJbcHJvcF0pKSB7XG4gICAgICBjb25zdCBuZXh0VmFsID0gZmlsdGVyW3Byb3BdLnNsaWNlKCk7XG4gICAgICBuZXh0VmFsLnNwbGljZSh2YWx1ZUluZGV4LCAxKTtcbiAgICAgIGZpbHRlciA9IHNldChbcHJvcF0sIG5leHRWYWwsIGZpbHRlcik7XG4gICAgfVxuICB9XG5cbiAgLy8gbWVyZ2VGaWVsZERvbWFpbiBmb3IgdGhlIHJlbWFpbmluZyBmaWVsZHNcbiAgY29uc3QgZG9tYWluU3RlcHMgPSBtZXJnZUZpbHRlckRvbWFpbihmaWx0ZXIsIGRhdGFzZXRzKTtcblxuICBjb25zdCBuZXh0RmlsdGVyID0ge1xuICAgIC4uLmZpbHRlcixcbiAgICAvLyB2YWx1ZTogbmV4dFZhbHVlLFxuICAgIC4uLihkb21haW5TdGVwcyA/IHtkb21haW46IGRvbWFpblN0ZXBzPy5kb21haW4sIHN0ZXA6IGRvbWFpblN0ZXBzPy5zdGVwfSA6IHt9KVxuICB9O1xuXG4gIGNvbnN0IG5leHRWYWx1ZSA9IGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4obmV4dEZpbHRlci52YWx1ZSwgbmV4dEZpbHRlcik7XG4gIHJldHVybiB7XG4gICAgLi4ubmV4dEZpbHRlcixcbiAgICB2YWx1ZTogbmV4dFZhbHVlXG4gIH07XG59XG5cbi8qKiAqXG4gKiBVcGRhdGVzIGEgc2luZ2xlIHByb3BlcnR5IG9mIGEgZmlsdGVyXG4gKi9cbmZ1bmN0aW9uIF91cGRhdGVGaWx0ZXJQcm9wKHN0YXRlLCBmaWx0ZXIsIHByb3AsIHZhbHVlLCB2YWx1ZUluZGV4LCBkYXRhc2V0SWRzPykge1xuICBsZXQgZGF0YXNldElkc1RvRmlsdGVyOiBzdHJpbmdbXSA9IFtdO1xuICBzd2l0Y2ggKHByb3ApIHtcbiAgICAvLyBUT0RPOiBOZXh0IFBSIGZvciBVSSBpZiB3ZSB1cGRhdGUgZmlsdGVyRGF0YUlkLCB3ZSBuZWVkIHRvIGNvbnNpZGVyIHR3byBjYXNlczpcbiAgICAvLyAxLiBkYXRhSWQgaXMgZW1wdHk6IGNyZWF0ZSBhIGRlZmF1bHQgZmlsdGVyXG4gICAgLy8gMi4gQWRkIGEgbmV3IGRhdGFzZXQgaWRcbiAgICBjYXNlIEZJTFRFUl9VUERBVEVSX1BST1BTLmRhdGFJZDoge1xuICAgICAgY29uc3Qgb2xkRGF0YUlkID0gWy4uLmZpbHRlci5kYXRhSWRdO1xuICAgICAgZmlsdGVyID0gX3VwZGF0ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChmaWx0ZXIsIHZhbHVlSW5kZXgsIHZhbHVlLCBzdGF0ZS5kYXRhc2V0cyk7XG4gICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSB1bmlxKFsuLi5vbGREYXRhSWQsIC4uLmZpbHRlci5kYXRhSWRdKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIEZJTFRFUl9VUERBVEVSX1BST1BTLm5hbWU6IHtcbiAgICAgIC8vIHdlIGFyZSBzdXBwb3J0aW5nIHRoZSBjdXJyZW50IGZ1bmN0aW9uYWxpdHlcbiAgICAgIC8vIFRPRE86IE5leHQgUFIgZm9yIFVJIGZpbHRlciBuYW1lIHdpbGwgb25seSB1cGRhdGUgZmlsdGVyIG5hbWUgYnV0IGl0IHdvbid0IGhhdmUgc2lkZSBlZmZlY3RzXG4gICAgICAvLyB3ZSBhcmUgZ29ubmEgdXNlIHBhaXIgb2YgZGF0YXNldHMgYW5kIGZpZWxkSWR4IHRvIHVwZGF0ZSB0aGUgZmlsdGVyXG4gICAgICBjb25zdCBkYXRhc2V0SWQgPSBmaWx0ZXIuZGF0YUlkW3ZhbHVlSW5kZXhdO1xuICAgICAgY29uc3Qge2ZpbHRlcjogdXBkYXRlZEZpbHRlciwgZGF0YXNldDogbmV3RGF0YXNldH0gPSBhcHBseUZpbHRlckZpZWxkTmFtZShcbiAgICAgICAgZmlsdGVyLFxuICAgICAgICBzdGF0ZS5kYXRhc2V0cyxcbiAgICAgICAgZGF0YXNldElkLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgdmFsdWVJbmRleCxcbiAgICAgICAge21lcmdlRG9tYWluOiB2YWx1ZUluZGV4ID4gMH1cbiAgICAgICk7XG4gICAgICBpZiAodXBkYXRlZEZpbHRlcikge1xuICAgICAgICBmaWx0ZXIgPSB1cGRhdGVkRmlsdGVyO1xuICAgICAgICBpZiAoZmlsdGVyLmdwdSkge1xuICAgICAgICAgIGZpbHRlciA9IHNldEZpbHRlckdwdU1vZGUoZmlsdGVyLCBzdGF0ZS5maWx0ZXJzKTtcbiAgICAgICAgICBmaWx0ZXIgPSBhc3NpZ25HcHVDaGFubmVsKGZpbHRlciwgc3RhdGUuZmlsdGVycyk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUgPSBzZXQoWydkYXRhc2V0cycsIGRhdGFzZXRJZF0sIG5ld0RhdGFzZXQsIHN0YXRlKTtcbiAgICAgICAgLy8gcmVtb3ZlIGZpbHRlciBQbG90IGF0IGRhdGFzZXRJZCwgc28gaXQgd2lsbCBiZSByZWNhbGN1bGF0ZWRcbiAgICAgICAgZmlsdGVyID0gcmVtb3ZlRmlsdGVyUGxvdChmaWx0ZXIsIGRhdGFzZXRJZCk7XG5cbiAgICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gdXBkYXRlZEZpbHRlci5kYXRhSWQ7XG4gICAgICB9XG4gICAgICAvLyBvbmx5IGZpbHRlciB0aGUgY3VycmVudCBkYXRhc2V0XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjYXNlIEZJTFRFUl9VUERBVEVSX1BST1BTLmxheWVySWQ6IHtcbiAgICAgIC8vIFdlIG5lZWQgdG8gdXBkYXRlIG9ubHkgZGF0YXNldElkL3MgaWYgd2UgaGF2ZSBhZGRlZC9yZW1vdmVkIGxheWVyc1xuICAgICAgLy8gLSBjaGVjayBmb3IgbGF5ZXJJZCBjaGFuZ2VzIChYT1Igd29ya3MgYmVjYXVzZSBvZiBzdHJpbmcgdmFsdWVzKVxuICAgICAgLy8gaWYgbm8gZGlmZmVyZW5jZXMgYmV0d2VlbiBsYXllcklkcywgZG9uJ3QgZG8gYW55IGZpbHRlcmluZ1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgY29uc3QgbGF5ZXJJZERpZmZlcmVuY2UgPSB4b3IodmFsdWUsIGZpbHRlci5sYXllcklkKTtcblxuICAgICAgY29uc3QgbGF5ZXJEYXRhSWRzID0gdW5pcTxzdHJpbmc+KFxuICAgICAgICBsYXllcklkRGlmZmVyZW5jZVxuICAgICAgICAgIC5tYXAobGlkID0+XG4gICAgICAgICAgICBnZXQoXG4gICAgICAgICAgICAgIHN0YXRlLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gbGlkKSxcbiAgICAgICAgICAgICAgWydjb25maWcnLCAnZGF0YUlkJ11cbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgICAgLmZpbHRlcihkID0+IGQpIGFzIHN0cmluZ1tdXG4gICAgICApO1xuXG4gICAgICAvLyBvbmx5IGZpbHRlciBkYXRhc2V0c0lkc1xuICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gbGF5ZXJEYXRhSWRzO1xuXG4gICAgICAvLyBVcGRhdGUgbmV3RmlsdGVyIGRhdGFJZHNcbiAgICAgIGNvbnN0IG5ld0RhdGFJZHMgPSB1bmlxPHN0cmluZz4oXG4gICAgICAgIHZhbHVlXG4gICAgICAgICAgPy5tYXAobGlkID0+XG4gICAgICAgICAgICBnZXQoXG4gICAgICAgICAgICAgIHN0YXRlLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gbGlkKSxcbiAgICAgICAgICAgICAgWydjb25maWcnLCAnZGF0YUlkJ11cbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgICAgLmZpbHRlcihkID0+IGQpIGFzIHN0cmluZ1tdXG4gICAgICApO1xuXG4gICAgICBmaWx0ZXIgPSB7XG4gICAgICAgIC4uLmZpbHRlcixcbiAgICAgICAgbGF5ZXJJZDogdmFsdWUsXG4gICAgICAgIGRhdGFJZDogbmV3RGF0YUlkc1xuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICBmaWx0ZXIgPSBzZXQoW3Byb3BdLCB2YWx1ZSwgZmlsdGVyKTtcbiAgICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IFsuLi5maWx0ZXIuZGF0YUlkXTtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIHtmaWx0ZXIsIGRhdGFzZXRJZHMsIGRhdGFzZXRJZHNUb0ZpbHRlciwgc3RhdGV9O1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtc3RhdGVtZW50cyAqL1xuXG4vKipcbiAqIFNldCB0aGUgcHJvcGVydHkgb2YgYSBmaWx0ZXIgcGxvdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEZpbHRlclBsb3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZHgsIG5ld1Byb3B9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyUGxvdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKCFzdGF0ZS5maWx0ZXJzW2lkeF0pIHtcbiAgICBDb25zb2xlLmVycm9yKGBmaWx0ZXJzWyR7aWR4fV0gaXMgdW5kZWZpbmVkYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxldCBuZXdGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG5cbiAgZm9yIChjb25zdCBwcm9wIGluIG5ld1Byb3ApIHtcbiAgICBpZiAocHJvcCA9PT0gJ3Bsb3RUeXBlJykge1xuICAgICAgbmV3RmlsdGVyID0gcGlja18oJ3Bsb3RUeXBlJykobWVyZ2VfKG5ld1Byb3AucGxvdFR5cGUpKShuZXdGaWx0ZXIpO1xuICAgIH0gZWxzZSBpZiAocHJvcCA9PT0gJ3lBeGlzJykge1xuICAgICAgY29uc3QgY2hhcnRUeXBlID0gbmV3UHJvcC55QXhpcyA/IFBMT1RfVFlQRVMubGluZUNoYXJ0IDogUExPVF9UWVBFUy5oaXN0b2dyYW07XG5cbiAgICAgIG5ld0ZpbHRlciA9IHBpY2tfKCdwbG90VHlwZScpKG1lcmdlXyh7dHlwZTogY2hhcnRUeXBlfSkpKG1lcmdlXyhuZXdQcm9wKShuZXdGaWx0ZXIpKTtcbiAgICB9XG4gIH1cblxuICBuZXdGaWx0ZXIgPSB1cGRhdGVGaWx0ZXJQbG90KHN0YXRlLmRhdGFzZXRzLCBuZXdGaWx0ZXIpO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoKGYsIGkpID0+IChpID09PSBpZHggPyBuZXdGaWx0ZXIgOiBmKSlcbiAgfTtcbn07XG5cbi8qKlxuICogQWRkIGEgbmV3IGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZEZpbHRlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkRmlsdGVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT5cbiAgIWFjdGlvbi5kYXRhSWRcbiAgICA/IHN0YXRlXG4gICAgOiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBmaWx0ZXJzOiBbLi4uc3RhdGUuZmlsdGVycywgZ2V0RGVmYXVsdEZpbHRlcih7ZGF0YUlkOiBhY3Rpb24uZGF0YUlkLCBpZDogYWN0aW9uLmlkfSldXG4gICAgICB9O1xuXG4vKipcbiAqIENyZWF0ZSBvciB1cGRhdGUgYSBmaWx0ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVPclVwZGF0ZUZpbHRlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQ3JlYXRlT3JVcGRhdGVGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtpZCwgZGF0YUlkLCBmaWVsZCwgdmFsdWV9ID0gYWN0aW9uO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuICBjb25zdCBvcmlnaW5hbEluZGV4ID0gbmV3U3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBpZCk7XG4gIGxldCBmaWx0ZXJJbmRleCA9IG9yaWdpbmFsSW5kZXg7XG4gIGlmICghaWQgJiYgIWRhdGFJZCkge1xuICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgfVxuICBpZiAob3JpZ2luYWxJbmRleCA8IDAgJiYgZGF0YUlkKSB7XG4gICAgbmV3U3RhdGUgPSBhZGRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7ZGF0YUlkfSk7XG4gICAgaWYgKG5ld1N0YXRlLmZpbHRlcnMubGVuZ3RoICE9PSBzdGF0ZS5maWx0ZXJzLmxlbmd0aCArIDEpIHtcbiAgICAgIC8vIE5vIG5ldyBmaWx0ZXIgd2FzIGFkZGVkXG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICAgIC8vIEhlcmUgd2UgYXJlIGFzc3VtaW5nIHRoYXQgdGhlIGZpbHRlciB3YXMgYWRkZWQgYXQgdGhlIGVuZFxuICAgIGZpbHRlckluZGV4ID0gbmV3U3RhdGUuZmlsdGVycy5sZW5ndGggLSAxO1xuICAgIG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySW5kZXhdID0ge1xuICAgICAgLi4ubmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJbmRleF0sXG4gICAgICAuLi4oaWQgPyB7aWR9IDogbnVsbClcbiAgICB9O1xuICB9XG5cbiAgLy8gTm8gbmVlZCB0byB1cGRhdGUgdGhpcyBpZiBpdCdzIGEgbmV3bHkgY3JlYXRlZCBmaWx0ZXJcbiAgLy8gRmlyc3Qgd2UgbWFrZSBzdXJlIGFsbCB0aGUgZGF0YUlkcyB0aGF0IGZpZWxkcyByZWZlciB0byBhcmUgdXBkYXRlZFxuICBpZiAob3JpZ2luYWxJbmRleCA+PSAwICYmIGRhdGFJZCkge1xuICAgIC8vIElmIHRoZSBkYXRhSWQgaXMgYW4gYXJyYXksIHdlIG5lZWQgdG8gdXBkYXRlIGVhY2ggb25lIGluZGl2aWR1YWxseSBhcyB0aGV5IG5lZWQgYSBjb3JyZWN0IHZhbHVlSW5kZXggcGFzc2VkXG4gICAgbmV3U3RhdGUgPSAoQXJyYXkuaXNBcnJheShkYXRhSWQpID8gZGF0YUlkIDogW2RhdGFJZF0pLnJlZHVjZSgoYWNjdSwgZCwgaW5kZXgpID0+IHtcbiAgICAgIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKGFjY3UsIHtcbiAgICAgICAgaWR4OiBmaWx0ZXJJbmRleCxcbiAgICAgICAgcHJvcDogJ2RhdGFJZCcsXG4gICAgICAgIHZhbHVlOiBkLFxuICAgICAgICB2YWx1ZUluZGV4OiBpbmRleFxuICAgICAgfSk7XG4gICAgfSwgbmV3U3RhdGUpO1xuICB9XG4gIC8vIFRoZW4gd2UgdXBkYXRlIHRoZSBmaWVsZHNcbiAgaWYgKGZpZWxkKSB7XG4gICAgLy8gSWYgdGhlIGZpZWxkIGlzIGFuIGFycmF5LCB3ZSBuZWVkIHRvIHVwZGF0ZSBlYWNoIGZpZWxkIGluZGl2aWR1YWxseSBhcyB0aGV5IG5lZWQgYSBjb3JyZWN0IHZhbHVlSW5kZXggcGFzc2VkXG4gICAgbmV3U3RhdGUgPSAoQXJyYXkuaXNBcnJheShmaWVsZCkgPyBmaWVsZCA6IFtmaWVsZF0pLnJlZHVjZSgoYWNjdSwgZiwgaW5kZXgpID0+IHtcbiAgICAgIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKGFjY3UsIHtcbiAgICAgICAgaWR4OiBmaWx0ZXJJbmRleCxcbiAgICAgICAgcHJvcDogJ25hbWUnLFxuICAgICAgICB2YWx1ZTogZixcbiAgICAgICAgdmFsdWVJbmRleDogaW5kZXhcbiAgICAgIH0pO1xuICAgIH0sIG5ld1N0YXRlKTtcbiAgfVxuICAvLyBUaGVuIHdlIHVwZGF0ZSB0aGUgdmFsdWUgc2VwYXJhdGVseVxuICBpZiAodmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJykge1xuICAgIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge2lkeDogZmlsdGVySW5kZXgsIHByb3A6ICd2YWx1ZScsIHZhbHVlfSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59O1xuXG4vKipcbiAqIFNldCBsYXllciBjb2xvciBwYWxldHRlIHVpIHN0YXRlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgY29uc3QgbGF5ZXJDb2xvclVJQ2hhbmdlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7b2xkTGF5ZXIsIHByb3AsIG5ld0NvbmZpZ306IFZpc1N0YXRlQWN0aW9ucy5MYXllckNvbG9yVUlDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IG9sZFZpeENvbmZpZyA9IG9sZExheWVyLmNvbmZpZy52aXNDb25maWdbcHJvcF07XG4gIGNvbnN0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb2xvclVJKHByb3AsIG5ld0NvbmZpZyk7XG4gIGNvbnN0IG5ld1Zpc0NvbmZpZyA9IG5ld0xheWVyLmNvbmZpZy52aXNDb25maWdbcHJvcF07XG4gIGlmIChvbGRWaXhDb25maWcgIT09IG5ld1Zpc0NvbmZpZykge1xuICAgIHJldHVybiBsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIoc3RhdGUsIHtcbiAgICAgIG9sZExheWVyLFxuICAgICAgbmV3VmlzQ29uZmlnOiB7XG4gICAgICAgIFtwcm9wXTogbmV3VmlzQ29uZmlnXG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IHN0YXRlLmxheWVycy5tYXAobCA9PiAobC5pZCA9PT0gb2xkTGF5ZXIuaWQgPyBuZXdMYXllciA6IGwpKVxuICB9O1xufTtcblxuLyoqXG4gKiBTdGFydCBhbmQgZW5kIGZpbHRlciBhbmltYXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVGaWx0ZXJBbmltYXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBmaWx0ZXJzOiBzdGF0ZS5maWx0ZXJzLm1hcCgoZiwgaSkgPT4gKGkgPT09IGFjdGlvbi5pZHggPyB7Li4uZiwgaXNBbmltYXRpbmc6ICFmLmlzQW5pbWF0aW5nfSA6IGYpKVxufSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0ZpbHRlckFuaW1hdGlvbkNvbmZpZyhjb25maWc6IEFuaW1hdGlvbkNvbmZpZyB8IEZpbHRlckFuaW1hdGlvbkNvbmZpZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gJ2RhdGFJZCcgaW4gY29uZmlnICYmICdhbmltYXRpb25XaW5kb3cnIGluIGNvbmZpZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEFuaW1hdGlvbkNvbmZpZ1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0QW5pbWF0aW9uQ29uZmlnVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7Y29uZmlnfSA9IGFjdGlvbjtcbiAgaWYgKGlzRmlsdGVyQW5pbWF0aW9uQ29uZmlnKGNvbmZpZykpIHtcbiAgICAvLyBGaW5kIGZpbHRlciB1c2VkIGZvciBhbmltYXRpb25cbiAgICAvLyBBc3N1bWluZyB0aGVyZSdzIG9ubHkgb25lIGZpbHRlciB1c2VkIGZvciBhbmltYXRpb24sIHNlZSBzZXRGaWx0ZXJWaWV3VXBkYXRlclxuICAgIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnMuZmluZChmID0+ICFpc1NpZGVGaWx0ZXIoZikpO1xuICAgIGlmICghZmlsdGVyKSB7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICAgIGNvbnN0IG5ld0ZpbHRlciA9IHsuLi5maWx0ZXIsIC4uLmNvbmZpZ307XG4gICAgcmV0dXJuIGFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlcihzdGF0ZSwgYXBwbHlGaWx0ZXJDb25maWcoZmlsdGVyLmlkLCBuZXdGaWx0ZXIpKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgICAuLi5jb25maWdcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICBpc0FuaW1hdGluZzogIXN0YXRlLmFuaW1hdGlvbkNvbmZpZy5pc0FuaW1hdGluZ1xuICB9XG59KTtcblxuLyoqXG4gKiBIaWRlIGFuZCBzaG93IGxheWVyIGFuaW1hdGlvbiBjb250cm9sXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlTGF5ZXJBbmltYXRpb25Db250cm9sVXBkYXRlciA9IChzdGF0ZTogVmlzU3RhdGUpOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgIGhpZGVDb250cm9sOiAhc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmhpZGVDb250cm9sXG4gIH1cbn0pO1xuXG4vKipcbiAqIENoYW5nZSBmaWx0ZXIgYW5pbWF0aW9uIHNwZWVkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUZpbHRlckFuaW1hdGlvblNwZWVkVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGZpbHRlcnM6IHN0YXRlLmZpbHRlcnMubWFwKChmLCBpKSA9PiAoaSA9PT0gYWN0aW9uLmlkeCA/IHsuLi5mLCBzcGVlZDogYWN0aW9uLnNwZWVkfSA6IGYpKVxufSk7XG5cbi8qKlxuICogVXBkYXRlIGFuaW1hdGlvbiBzcGVlZCB3aXRoIHRoZSB2ZXJ0aWNhbCBzcGVlZCBzbGlkZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKlxuICovXG5leHBvcnQgY29uc3QgdXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge3NwZWVkfTogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUxheWVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICBzcGVlZFxuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogU2hvdyBsYXJnZXIgdGltZSBmaWx0ZXIgYXQgYm90dG9tIGZvciB0aW1lIHBsYXliYWNrIChhcHBseSB0byB0aW1lIGZpbHRlciBvbmx5KVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEZpbHRlclZpZXdVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlclZpZXdVcGRhdGVyQWN0aW9uXG4pID0+IHtcbiAgY29uc3Qge3ZpZXcsIGlkeH0gPSBhY3Rpb247XG4gIGNvbnN0IHNob3VsZFJlc2V0T3RoZXJGaWx0ZXJzVmlldyA9IHZpZXcgPT09IEZJTFRFUl9WSUVXX1RZUEVTLmVubGFyZ2VkO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IHN0YXRlLmZpbHRlcnMubWFwKChmLCBpKSA9PlxuICAgICAgaSA9PT0gaWR4XG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uZixcbiAgICAgICAgICAgIHZpZXdcbiAgICAgICAgICB9XG4gICAgICAgIDogc2hvdWxkUmVzZXRPdGhlckZpbHRlcnNWaWV3XG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uZixcbiAgICAgICAgICAgIHZpZXc6IEZJTFRFUl9WSUVXX1RZUEVTLnNpZGVcbiAgICAgICAgICB9XG4gICAgICAgIDogZlxuICAgIClcbiAgfTtcbn07XG5cbi8qKlxuICogVG9nZ2xlcyBmaWx0ZXIgZmVhdHVyZSB2aXNpYmlsaXR5XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlRmlsdGVyRmVhdHVyZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlRmlsdGVyRmVhdHVyZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1thY3Rpb24uaWR4XTtcbiAgY29uc3QgaXNWaXNpYmxlID0gZ2V0KGZpbHRlciwgWyd2YWx1ZScsICdwcm9wZXJ0aWVzJywgJ2lzVmlzaWJsZSddKTtcblxuICBsZXQgbmV3U3RhdGUgPSBzZXRGaWx0ZXJVcGRhdGVyKHN0YXRlLCB7XG4gICAgaWR4OiBhY3Rpb24uaWR4LFxuICAgIHByb3A6ICdlbmFibGVkJyxcbiAgICB2YWx1ZTogIWlzVmlzaWJsZVxuICB9KTtcblxuICBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZHg6IGFjdGlvbi5pZHgsXG4gICAgcHJvcDogJ3ZhbHVlJyxcbiAgICB2YWx1ZTogZmVhdHVyZVRvRmlsdGVyVmFsdWUoZmlsdGVyLnZhbHVlLCBmaWx0ZXIuaWQsIHtcbiAgICAgIGlzVmlzaWJsZTogIWlzVmlzaWJsZVxuICAgIH0pXG4gIH0pO1xuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtpZHh9ID0gYWN0aW9uO1xuICBjb25zdCB7ZGF0YUlkLCBpZH0gPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG5cbiAgY29uc3QgbmV3RmlsdGVycyA9IFtcbiAgICAuLi5zdGF0ZS5maWx0ZXJzLnNsaWNlKDAsIGlkeCksXG4gICAgLi4uc3RhdGUuZmlsdGVycy5zbGljZShpZHggKyAxLCBzdGF0ZS5maWx0ZXJzLmxlbmd0aClcbiAgXTtcblxuICBjb25zdCBmaWx0ZXJlZERhdGFzZXRzID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhkYXRhSWQsIHN0YXRlLmRhdGFzZXRzLCBuZXdGaWx0ZXJzLCBzdGF0ZS5sYXllcnMpO1xuICBjb25zdCBuZXdFZGl0b3IgPVxuICAgIGdldEZpbHRlcklkSW5GZWF0dXJlKHN0YXRlLmVkaXRvci5zZWxlY3RlZEZlYXR1cmUpID09PSBpZFxuICAgICAgPyB7XG4gICAgICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbFxuICAgICAgICB9XG4gICAgICA6IHN0YXRlLmVkaXRvcjtcblxuICBsZXQgbmV3U3RhdGUgPSBzZXQoWydmaWx0ZXJzJ10sIG5ld0ZpbHRlcnMsIHN0YXRlKTtcbiAgbmV3U3RhdGUgPSBzZXQoWydkYXRhc2V0cyddLCBmaWx0ZXJlZERhdGFzZXRzLCBuZXdTdGF0ZSk7XG4gIG5ld1N0YXRlID0gc2V0KFsnZWRpdG9yJ10sIG5ld0VkaXRvciwgbmV3U3RhdGUpO1xuXG4gIHJldHVybiB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobmV3U3RhdGUsIGRhdGFJZCwgdW5kZWZpbmVkKTtcbn07XG5cbi8qKlxuICogQWRkIGEgbmV3IGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkTGF5ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZExheWVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBsZXQgbmV3TGF5ZXI7XG4gIGxldCBuZXdMYXllckRhdGE7XG4gIGlmIChhY3Rpb24uY29uZmlnKSB7XG4gICAgbmV3TGF5ZXIgPSBjcmVhdGVMYXllckZyb21Db25maWcoc3RhdGUsIGFjdGlvbi5jb25maWcpO1xuICAgIGlmICghbmV3TGF5ZXIpIHtcbiAgICAgIENvbnNvbGUud2FybihcbiAgICAgICAgJ0ZhaWxlZCB0byBjcmVhdGUgbGF5ZXIgZnJvbSBjb25maWcsIGl0IHVzdWFsbHkgbWVhbnMgdGhlIGNvbmZpZyBpcyBub3QgYmUgaW4gY29ycmVjdCBmb3JtYXQnLFxuICAgICAgICBhY3Rpb24uY29uZmlnXG4gICAgICApO1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUpO1xuICAgIG5ld0xheWVyID0gcmVzdWx0LmxheWVyO1xuICAgIG5ld0xheWVyRGF0YSA9IHJlc3VsdC5sYXllckRhdGE7XG4gIH0gZWxzZSB7XG4gICAgLy8gY3JlYXRlIGFuIGVtcHR5IGxheWVyIHdpdGggYSBzcGVjaWZpYyBkYXRhc2V0IG9yIGEgZGVmYXVsdCBvbmVcbiAgICBjb25zdCBkZWZhdWx0RGF0YXNldCA9IGFjdGlvbi5kYXRhc2V0SWQgPz8gT2JqZWN0LmtleXMoc3RhdGUuZGF0YXNldHMpWzBdO1xuICAgIG5ld0xheWVyID0gbmV3IExheWVyKHtcbiAgICAgIGlzVmlzaWJsZTogdHJ1ZSxcbiAgICAgIGlzQ29uZmlnQWN0aXZlOiB0cnVlLFxuICAgICAgZGF0YUlkOiBkZWZhdWx0RGF0YXNldFxuICAgIH0pO1xuICAgIG5ld0xheWVyRGF0YSA9IHt9O1xuICB9XG5cbiAgbGV0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogWy4uLnN0YXRlLmxheWVycywgbmV3TGF5ZXJdLFxuICAgIGxheWVyRGF0YTogWy4uLnN0YXRlLmxheWVyRGF0YSwgbmV3TGF5ZXJEYXRhXSxcbiAgICAvLyBhZGQgbmV3IGxheWVyIGF0IHRoZSB0b3BcbiAgICBsYXllck9yZGVyOiBbbmV3TGF5ZXIuaWQsIC4uLnN0YXRlLmxheWVyT3JkZXJdLFxuICAgIHNwbGl0TWFwczogYWRkTmV3TGF5ZXJzVG9TcGxpdE1hcChzdGF0ZS5zcGxpdE1hcHMsIG5ld0xheWVyKVxuICB9O1xuXG4gIGlmIChuZXdMYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQpIHtcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXdTdGF0ZSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59O1xuXG4vKipcbiAqIHJlbW92ZSBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUxheWVyVXBkYXRlcjxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAge2lkfTogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUxheWVyVXBkYXRlckFjdGlvblxuKTogVCB7XG4gIGNvbnN0IGlkeCA9IE51bWJlci5pc0Zpbml0ZShpZClcbiAgICA/IC8vIHN1cHBvcnQgb2xkZXIgQVBJLCByZW1vdmUgbGF5ZXIgYnkgaWR4XG4gICAgICBOdW1iZXIoaWQpXG4gICAgOiBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCB8fCBpZHggPj0gc3RhdGUubGF5ZXJzLmxlbmd0aCkge1xuICAgIC8vIGludmFsaWQgaW5kZXhcbiAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgcmVtb3ZlIGxheWVyIHdpdGggaW52YWxpZCBpZHxpZHggJHtpZH1gKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7bGF5ZXJzLCBsYXllckRhdGEsIGxheWVyT3JkZXIsIGNsaWNrZWQsIGhvdmVySW5mb30gPSBzdGF0ZTtcbiAgY29uc3QgbGF5ZXJUb1JlbW92ZSA9IGxheWVyc1tpZHhdO1xuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IGZpbHRlck91dEJ5SWQobGF5ZXJUb1JlbW92ZS5pZCkobGF5ZXJzKSxcbiAgICBsYXllckRhdGE6IHJlbW92ZUVsZW1lbnRBdEluZGV4KGlkeCkobGF5ZXJEYXRhKSxcbiAgICBsYXllck9yZGVyOiByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIobGF5ZXJPcmRlciwgbGF5ZXJUb1JlbW92ZS5pZCksXG4gICAgY2xpY2tlZDogbGF5ZXJUb1JlbW92ZS5pc0xheWVySG92ZXJlZChjbGlja2VkKSA/IHVuZGVmaW5lZCA6IGNsaWNrZWQsXG4gICAgaG92ZXJJbmZvOiBsYXllclRvUmVtb3ZlLmlzTGF5ZXJIb3ZlcmVkKGhvdmVySW5mbykgPyB1bmRlZmluZWQgOiBob3ZlckluZm8sXG4gICAgc3BsaXRNYXBzOiByZW1vdmVMYXllckZyb21TcGxpdE1hcHMoc3RhdGUuc3BsaXRNYXBzLCBsYXllclRvUmVtb3ZlKVxuICAgIC8vIFRPRE86IHVwZGF0ZSBmaWx0ZXJzLCBjcmVhdGUgaGVscGVyIHRvIHJlbW92ZSBsYXllciBmb3JtIGZpbHRlciAocmVtb3ZlIGxheWVyaWQgYW5kIGRhdGFpZCkgaWYgbWFwcGVkXG4gIH07XG5cbiAgcmV0dXJuIHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXdTdGF0ZSk7XG59XG5cbi8qKlxuICogUmVvcmRlciBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlb3JkZXJMYXllclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge29yZGVyfTogVmlzU3RhdGVBY3Rpb25zLlJlb3JkZXJMYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBsYXllck9yZGVyOiBvcmRlclxufSk7XG5cbi8qKlxuICogQWRkIGEgbmV3IGxheWVyIGdyb3VwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkTGF5ZXJHcm91cFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkTGF5ZXJHcm91cFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgbGF5ZXJHcm91cCA9IGdldE5ld0xheWVyR3JvdXAoYWN0aW9uKTtcbiAgbGV0IG5ld0xheWVyT3JkZXIgPSBbLi4uc3RhdGUubGF5ZXJPcmRlcl07XG5cbiAgaWYgKGFjdGlvbi5sYXllck9yZGVyKSB7XG4gICAgYWN0aW9uLmxheWVyT3JkZXIuZm9yRWFjaChsYXllcklkID0+IHtcbiAgICAgIG5ld0xheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIobmV3TGF5ZXJPcmRlciwgbGF5ZXJJZCBhcyBzdHJpbmcpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllck9yZGVyOiBhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIobmV3TGF5ZXJPcmRlciwgbGF5ZXJHcm91cClcbiAgfTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgbGF5ZXIgZ3JvdXAgYW5kIGFsbCBsYXllcnMgd2l0aGluIGl0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlTGF5ZXJHcm91cFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlTGF5ZXJHcm91cFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2lkfSA9IGFjdGlvbjtcbiAgY29uc3QgbGF5ZXJHcm91cFRvUmVtb3ZlID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIGlkKTtcbiAgaWYgKCFsYXllckdyb3VwVG9SZW1vdmUpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBsYXllcklkc1RvUmVtb3ZlID0gZ2V0RmxhdExheWVyT3JkZXIobGF5ZXJHcm91cFRvUmVtb3ZlLmxheWVyT3JkZXIpO1xuICBsZXQgbmV3U3RhdGUgPSB7Li4uc3RhdGV9O1xuXG4gIGxheWVySWRzVG9SZW1vdmUuZm9yRWFjaChsYXllcklkID0+IHtcbiAgICBjb25zdCBpZHggPSBuZXdTdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gbGF5ZXJJZCk7XG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICBuZXdTdGF0ZSA9IHJlbW92ZUxheWVyVXBkYXRlcihuZXdTdGF0ZSwge2lkOiBsYXllcklkfSk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBuZXdMYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKG5ld1N0YXRlLmxheWVyT3JkZXIsIGxheWVyR3JvdXBUb1JlbW92ZSk7XG4gIHJldHVybiB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlclxuICB9O1xufTtcblxuLyoqXG4gKiBVcGRhdGUgYSBsYXllciBncm91cCAobGFiZWwsIHZpc2liaWxpdHksIGxheWVyIG1lbWJlcnNoaXApXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlTGF5ZXJHcm91cFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlTGF5ZXJHcm91cFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2lkLCBvcHRpb25zfSA9IGFjdGlvbjtcbiAgY29uc3QgbGF5ZXJHcm91cCA9IGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBpZCk7XG4gIGlmICghbGF5ZXJHcm91cCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxldCBuZXdTdGF0ZSA9IHsuLi5zdGF0ZX07XG5cbiAgaWYgKG9wdGlvbnMubGF5ZXJPcmRlcikge1xuICAgIG5ld1N0YXRlLmxheWVyT3JkZXIgPSBbLi4ubGF5ZXJHcm91cC5sYXllck9yZGVyLCAuLi5uZXdTdGF0ZS5sYXllck9yZGVyXTtcbiAgICBvcHRpb25zLmxheWVyT3JkZXIuZm9yRWFjaChsYXllcklkID0+IHtcbiAgICAgIG5ld1N0YXRlLmxheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIoXG4gICAgICAgIG5ld1N0YXRlLmxheWVyT3JkZXIsXG4gICAgICAgIGxheWVySWQgYXMgc3RyaW5nXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgbmV3TGF5ZXJHcm91cCA9IHtcbiAgICAuLi5sYXllckdyb3VwLFxuICAgIC4uLm9wdGlvbnNcbiAgfTtcblxuICBpZiAobmV3TGF5ZXJHcm91cC5pc1Zpc2libGUgIT09IGxheWVyR3JvdXAuaXNWaXNpYmxlKSB7XG4gICAgY29uc3QgbGF5ZXJJZHMgPSBnZXRGbGF0TGF5ZXJPcmRlcihuZXdMYXllckdyb3VwLmxheWVyT3JkZXIpO1xuICAgIG5ld1N0YXRlID0gbmV3U3RhdGUubGF5ZXJzLnJlZHVjZSgoYWNjLCBsYXllcikgPT4ge1xuICAgICAgaWYgKGxheWVySWRzLmluY2x1ZGVzKGxheWVyLmlkKSkge1xuICAgICAgICByZXR1cm4gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKGFjYywge1xuICAgICAgICAgIG9sZExheWVyOiBsYXllcixcbiAgICAgICAgICBuZXdDb25maWc6IHtpc1Zpc2libGU6IG5ld0xheWVyR3JvdXAuaXNWaXNpYmxlfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgbmV3U3RhdGUpO1xuICB9XG5cbiAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IHVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIobmV3U3RhdGUubGF5ZXJPcmRlciwgbmV3TGF5ZXJHcm91cCk7XG4gIHJldHVybiB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlclxuICB9O1xufTtcblxuLyoqXG4gKiBBZGQgYSBsYXllciB0byBhIGxheWVyIGdyb3VwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkTGF5ZXJUb0xheWVyR3JvdXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZExheWVyVG9MYXllckdyb3VwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7bGF5ZXJHcm91cElkLCBsYXllcklkfSA9IGFjdGlvbjtcbiAgY29uc3QgbGF5ZXJHcm91cCA9IGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBsYXllckdyb3VwSWQpO1xuICBjb25zdCBsYXllciA9IHN0YXRlLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gbGF5ZXJJZCk7XG4gIGlmICghbGF5ZXJHcm91cCB8fCAhbGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBpZiAobGF5ZXJHcm91cC5sYXllck9yZGVyLmZpbmQoZW50cnkgPT4gZW50cnkgPT09IGxheWVySWQpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3R3JvdXBMYXllck9yZGVyID0gYWRkTGF5ZXJPckdyb3VwVG9MYXllck9yZGVyKGxheWVyR3JvdXAubGF5ZXJPcmRlciwgbGF5ZXJJZCk7XG4gIHJldHVybiB1cGRhdGVMYXllckdyb3VwVXBkYXRlcihzdGF0ZSwge1xuICAgIGlkOiBsYXllckdyb3VwSWQsXG4gICAgb3B0aW9uczoge2xheWVyT3JkZXI6IG5ld0dyb3VwTGF5ZXJPcmRlcn1cbiAgfSk7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIGxheWVyIGZyb20gYSBsYXllciBncm91cFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUxheWVyRnJvbUxheWVyR3JvdXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUxheWVyRnJvbUxheWVyR3JvdXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtsYXllckdyb3VwSWQsIGxheWVySWR9ID0gYWN0aW9uO1xuICBjb25zdCBsYXllckdyb3VwID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIGxheWVyR3JvdXBJZCk7XG4gIGlmICghbGF5ZXJHcm91cCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0xheWVyR3JvdXBPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihsYXllckdyb3VwLmxheWVyT3JkZXIsIGxheWVySWQpO1xuICByZXR1cm4gdXBkYXRlTGF5ZXJHcm91cFVwZGF0ZXIoc3RhdGUsIHtcbiAgICBpZDogbGF5ZXJHcm91cElkLFxuICAgIG9wdGlvbnM6IHtsYXllck9yZGVyOiBuZXdMYXllckdyb3VwT3JkZXJ9XG4gIH0pO1xufTtcblxuLyoqXG4gKiBTd2FwIGxheWVyIG9yZGVyIGVudHJpZXMgYmV0d2VlbiByb290IGFuZCBncm91cHNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5leHBvcnQgY29uc3Qgc3dhcExheWVyT3JkZXJFbnRyaWVzVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Td2FwTGF5ZXJPcmRlckVudHJpZXNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtvcmlnaW5MYXllcklkLCBkZXN0aW5hdGlvbkxheWVySWQsIG9yaWdpbkxheWVyR3JvdXBJZCwgZGVzdGluYXRpb25MYXllckdyb3VwSWR9ID0gYWN0aW9uO1xuXG4gIGlmICghb3JpZ2luTGF5ZXJHcm91cElkICYmICFkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCkge1xuICAgIGNvbnN0IG9yaWdpbkluZGV4ID0gc3RhdGUubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICAgIHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycgPyBlbnRyeSA9PT0gb3JpZ2luTGF5ZXJJZCA6IGVudHJ5LmlkID09PSBvcmlnaW5MYXllcklkXG4gICAgKTtcbiAgICBpZiAoZGVzdGluYXRpb25MYXllcklkICYmIG9yaWdpbkluZGV4ICE9PSAtMSkge1xuICAgICAgY29uc3QgZGVzdGluYXRpb25JbmRleCA9IHN0YXRlLmxheWVyT3JkZXIuZmluZEluZGV4KGVudHJ5ID0+XG4gICAgICAgIHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycgPyBlbnRyeSA9PT0gZGVzdGluYXRpb25MYXllcklkIDogZW50cnkuaWQgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZFxuICAgICAgKTtcbiAgICAgIGlmIChkZXN0aW5hdGlvbkluZGV4ICE9PSAtMSkge1xuICAgICAgICBjb25zdCBuZXdMYXllck9yZGVyID0gYXJyYXlNb3ZlKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbkluZGV4LCBkZXN0aW5hdGlvbkluZGV4KTtcbiAgICAgICAgcmV0dXJuIHsuLi5zdGF0ZSwgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlcn07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKG9yaWdpbkxheWVyR3JvdXBJZCAmJiAhZGVzdGluYXRpb25MYXllckdyb3VwSWQpIHtcbiAgICBsZXQgbmV3TGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5MYXllcklkKTtcbiAgICBpZiAoZGVzdGluYXRpb25MYXllcklkKSB7XG4gICAgICBjb25zdCBkZXN0aW5hdGlvbkluZGV4ID0gbmV3TGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICAgICAgdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyA/IGVudHJ5ID09PSBkZXN0aW5hdGlvbkxheWVySWQgOiBmYWxzZVxuICAgICAgKTtcbiAgICAgIG5ld0xheWVyT3JkZXIuc3BsaWNlKGRlc3RpbmF0aW9uSW5kZXggPT09IC0xID8gMCA6IGRlc3RpbmF0aW9uSW5kZXgsIDAsIG9yaWdpbkxheWVySWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdMYXllck9yZGVyID0gWy4uLm5ld0xheWVyT3JkZXIsIG9yaWdpbkxheWVySWRdO1xuICAgIH1cbiAgICByZXR1cm4gey4uLnN0YXRlLCBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyfTtcbiAgfVxuXG4gIGlmIChvcmlnaW5MYXllckdyb3VwSWQgJiYgZGVzdGluYXRpb25MYXllckdyb3VwSWQpIHtcbiAgICBpZiAob3JpZ2luTGF5ZXJHcm91cElkID09PSBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCkge1xuICAgICAgY29uc3QgbGF5ZXJHcm91cCA9IGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5MYXllckdyb3VwSWQpO1xuICAgICAgaWYgKCFsYXllckdyb3VwKSByZXR1cm4gc3RhdGU7XG4gICAgICBjb25zdCBvcmlnaW5JbmRleCA9IGxheWVyR3JvdXAubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICAgICAgdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyA/IGVudHJ5ID09PSBvcmlnaW5MYXllcklkIDogZW50cnkuaWQgPT09IG9yaWdpbkxheWVySWRcbiAgICAgICk7XG4gICAgICBpZiAob3JpZ2luSW5kZXggPT09IC0xKSByZXR1cm4gc3RhdGU7XG4gICAgICBpZiAoZGVzdGluYXRpb25MYXllcklkKSB7XG4gICAgICAgIGNvbnN0IGRlc3RJbmRleCA9IGxheWVyR3JvdXAubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICAgICAgICB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnID8gZW50cnkgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZCA6IGVudHJ5LmlkID09PSBkZXN0aW5hdGlvbkxheWVySWRcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGRlc3RJbmRleCA9PT0gLTEpIHJldHVybiBzdGF0ZTtcbiAgICAgICAgY29uc3QgbmV3R3JvdXBMYXllck9yZGVyID0gYXJyYXlNb3ZlKGxheWVyR3JvdXAubGF5ZXJPcmRlciwgb3JpZ2luSW5kZXgsIGRlc3RJbmRleCk7XG4gICAgICAgIGNvbnN0IG5ld0xheWVyT3JkZXIgPSB1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIHtcbiAgICAgICAgICAuLi5sYXllckdyb3VwLFxuICAgICAgICAgIGxheWVyT3JkZXI6IG5ld0dyb3VwTGF5ZXJPcmRlclxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHsuLi5zdGF0ZSwgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlcn07XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgLy8gQ3Jvc3MtZ3JvdXAgbW92ZTogcmVtb3ZlIGZyb20gb3JpZ2luLCB0aGVuIGFkZCB0byBkZXN0aW5hdGlvblxuICAgIGNvbnN0IGxheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luTGF5ZXJJZCk7XG4gICAgbGV0IG5ld1N0YXRlID0gYWRkTGF5ZXJUb0xheWVyR3JvdXBVcGRhdGVyKFxuICAgICAgey4uLnN0YXRlLCBsYXllck9yZGVyfSxcbiAgICAgIHtsYXllcklkOiBvcmlnaW5MYXllcklkLCBsYXllckdyb3VwSWQ6IGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkfVxuICAgICk7XG5cbiAgICBpZiAoZGVzdGluYXRpb25MYXllcklkKSB7XG4gICAgICBjb25zdCBsYXllckdyb3VwID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKG5ld1N0YXRlLmxheWVyT3JkZXIsIGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkKTtcbiAgICAgIGlmICghbGF5ZXJHcm91cCkgcmV0dXJuIHN0YXRlO1xuICAgICAgY29uc3Qgb3JpZ2luSW5kZXggPSBsYXllckdyb3VwLmxheWVyT3JkZXIuZmluZEluZGV4KGVudHJ5ID0+IGVudHJ5ID09PSBvcmlnaW5MYXllcklkKTtcbiAgICAgIGNvbnN0IGRlc3RJbmRleCA9IGxheWVyR3JvdXAubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT4gZW50cnkgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZCk7XG4gICAgICBpZiAob3JpZ2luSW5kZXggIT09IC0xICYmIGRlc3RJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgY29uc3QgbmV3R3JvdXBMYXllck9yZGVyID0gYXJyYXlNb3ZlKGxheWVyR3JvdXAubGF5ZXJPcmRlciwgb3JpZ2luSW5kZXgsIGRlc3RJbmRleCk7XG4gICAgICAgIG5ld1N0YXRlID0ge1xuICAgICAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgICAgIGxheWVyT3JkZXI6IHVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIobmV3U3RhdGUubGF5ZXJPcmRlciwge1xuICAgICAgICAgICAgLi4ubGF5ZXJHcm91cCxcbiAgICAgICAgICAgIGxheWVyT3JkZXI6IG5ld0dyb3VwTGF5ZXJPcmRlclxuICAgICAgICAgIH0pXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgfVxuXG4gIGlmICghb3JpZ2luTGF5ZXJHcm91cElkICYmIGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkKSB7XG4gICAgY29uc3QgbGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5MYXllcklkKTtcbiAgICByZXR1cm4gYWRkTGF5ZXJUb0xheWVyR3JvdXBVcGRhdGVyKFxuICAgICAgey4uLnN0YXRlLCBsYXllck9yZGVyfSxcbiAgICAgIHtsYXllcklkOiBvcmlnaW5MYXllcklkLCBsYXllckdyb3VwSWQ6IGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkfVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59O1xuXG4vKipcbiAqIGR1cGxpY2F0ZSBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGR1cGxpY2F0ZUxheWVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuRHVwbGljYXRlTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGlkeCA9IE51bWJlci5pc0Zpbml0ZShpZClcbiAgICA/IC8vIHN1cHBvcnQgb2xkZXIgQVBJLCByZW1vdmUgbGF5ZXIgYnkgaWR4XG4gICAgICBOdW1iZXIoaWQpXG4gICAgOiBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCB8fCAhc3RhdGUubGF5ZXJzW2lkeF0pIHtcbiAgICBDb25zb2xlLndhcm4oYGxheWVyICR7aWR4fSBub3QgZm91bmQgaW4gbGF5ZXJPcmRlcmApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtsYXllcnN9ID0gc3RhdGU7XG4gIGNvbnN0IG9yaWdpbmFsID0gbGF5ZXJzW2lkeF07XG5cbiAgY29uc3Qgb3JpZ2luYWxMYXllck9yZGVySWR4ID0gZ2V0SW5kZXhGcm9tTGF5ZXJFbnRyeUlkKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbmFsLmlkKTtcbiAgbGV0IG5ld0xhYmVsID0gYENvcHkgb2YgJHtvcmlnaW5hbC5jb25maWcubGFiZWx9YDtcbiAgbGV0IHBvc3RmaXggPSAwO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbG9vcC1mdW5jXG4gIHdoaWxlIChsYXllcnMuZmluZChsID0+IGwuY29uZmlnLmxhYmVsID09PSBuZXdMYWJlbCkpIHtcbiAgICBuZXdMYWJlbCA9IGBDb3B5IG9mICR7b3JpZ2luYWwuY29uZmlnLmxhYmVsfSAkeysrcG9zdGZpeH1gO1xuICB9XG5cbiAgLy8gY29sbGVjdCBsYXllciBjb25maWcgZnJvbSBvcmlnaW5hbFxuICBjb25zdCBsb2FkZWRMYXllciA9IHNlcmlhbGl6ZUxheWVyKG9yaWdpbmFsLCBzdGF0ZS5zY2hlbWEpO1xuXG4gIC8vIGFzc2lnbiBuZXcgaWQgYW5kIGxhYmVsIHRvIGNvcGllZCBsYXllclxuICBpZiAoIWxvYWRlZExheWVyPy5jb25maWcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbG9hZGVkTGF5ZXIuY29uZmlnLmxhYmVsID0gbmV3TGFiZWw7XG4gIGxvYWRlZExheWVyLmlkID0gZ2VuZXJhdGVIYXNoSWQoTEFZRVJfSURfTEVOR1RIKTtcblxuICAvLyBhZGQgbGF5ZXIgdG8gc3RhdGVcbiAgbGV0IG5leHRTdGF0ZSA9IGFkZExheWVyVXBkYXRlcihzdGF0ZSwge2NvbmZpZzogbG9hZGVkTGF5ZXJ9KTtcbiAgLy8gcmV0cmlldmUgbmV3bHkgY3JlYXRlZCBsYXllclxuICBjb25zdCBuZXdMYXllciA9IG5leHRTdGF0ZS5sYXllcnNbbmV4dFN0YXRlLmxheWVycy5sZW5ndGggLSAxXTtcblxuICAvLyBDaGVjayBpZiB0aGUgb3JpZ2luYWwgbGF5ZXIgaXMgaW5zaWRlIGEgZ3JvdXBcbiAgY29uc3QgcGFyZW50R3JvdXAgPSBmaW5kUGFyZW50R3JvdXBGb3JMYXllcihzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5hbC5pZCk7XG5cbiAgaWYgKHBhcmVudEdyb3VwKSB7XG4gICAgLy8gTGF5ZXIgaXMgaW5zaWRlIGEgZ3JvdXAgLSByZW1vdmUgdGhlIHByZXBlbmRlZCBpZCBmcm9tIHJvb3QgYW5kIGluc2VydCBpbnRvIHRoZSBncm91cFxuICAgIGNvbnN0IGxheWVyT3JkZXJXaXRob3V0UHJlcGVuZGVkID0gbmV4dFN0YXRlLmxheWVyT3JkZXIuc2xpY2UoMSk7XG4gICAgY29uc3QgaWR4SW5Hcm91cCA9IHBhcmVudEdyb3VwLmxheWVyT3JkZXIuZmluZEluZGV4KGUgPT4gZSA9PT0gb3JpZ2luYWwuaWQpO1xuICAgIGNvbnN0IG5ld0dyb3VwTGF5ZXJPcmRlciA9IGFycmF5SW5zZXJ0KHBhcmVudEdyb3VwLmxheWVyT3JkZXIsIGlkeEluR3JvdXAsIG5ld0xheWVyLmlkKTtcbiAgICBjb25zdCB1cGRhdGVkR3JvdXAgPSB7Li4ucGFyZW50R3JvdXAsIGxheWVyT3JkZXI6IG5ld0dyb3VwTGF5ZXJPcmRlcn07XG4gICAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IHVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIoXG4gICAgICBsYXllck9yZGVyV2l0aG91dFByZXBlbmRlZCxcbiAgICAgIHVwZGF0ZWRHcm91cFxuICAgICk7XG4gICAgbmV4dFN0YXRlID0gcmVvcmRlckxheWVyVXBkYXRlcihuZXh0U3RhdGUsIHtvcmRlcjogbmV3TGF5ZXJPcmRlcn0pO1xuICB9IGVsc2Uge1xuICAgIC8vIExheWVyIGlzIGF0IHJvb3QgbGV2ZWwgLSB1c2Ugb3JpZ2luYWwgaW5kZXgtYmFzZWQgaW5zZXJ0aW9uXG4gICAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IGFycmF5SW5zZXJ0KFxuICAgICAgbmV4dFN0YXRlLmxheWVyT3JkZXIuc2xpY2UoMSwgbmV4dFN0YXRlLmxheWVyT3JkZXIubGVuZ3RoKSxcbiAgICAgIG9yaWdpbmFsTGF5ZXJPcmRlcklkeCxcbiAgICAgIG5ld0xheWVyLmlkXG4gICAgKTtcbiAgICBuZXh0U3RhdGUgPSByZW9yZGVyTGF5ZXJVcGRhdGVyKG5leHRTdGF0ZSwge29yZGVyOiBuZXdMYXllck9yZGVyfSk7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5leHRTdGF0ZSk7XG59O1xuXG4vKipcbiAqIEFkZCBhIG5ldyBlZmZlY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRFZmZlY3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZEVmZmVjdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKFxuICAgIGFjdGlvbi5jb25maWc/LnR5cGUgPT09IExJR0hUX0FORF9TSEFET1dfRUZGRUNULnR5cGUgJiZcbiAgICBzdGF0ZS5lZmZlY3RzLnNvbWUoZWZmZWN0ID0+IGVmZmVjdC50eXBlID09PSBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVC50eXBlKVxuICApIHtcbiAgICBDb25zb2xlLndhcm4oYENhbid0IGFkZCBtb3JlIHRoYW4gb25lICR7TElHSFRfQU5EX1NIQURPV19FRkZFQ1QubmFtZX0gZWZmZWN0YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgaWYgKFxuICAgIGFjdGlvbi5jb25maWc/LnR5cGUgPT09IERJU1RBTkNFX0ZPR19UWVBFICYmXG4gICAgc3RhdGUuZWZmZWN0cy5zb21lKFxuICAgICAgZWZmZWN0ID0+IGVmZmVjdC50eXBlID09PSBESVNUQU5DRV9GT0dfVFlQRSB8fCBlZmZlY3QudHlwZSA9PT0gU1VSRkFDRV9GT0dfVFlQRVxuICAgIClcbiAgKSB7XG4gICAgQ29uc29sZS53YXJuKFwiQ2FuJ3QgYWRkIG1vcmUgdGhhbiBvbmUgZm9nIGVmZmVjdFwiKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBpZiAoXG4gICAgYWN0aW9uLmNvbmZpZz8udHlwZSA9PT0gU1VSRkFDRV9GT0dfVFlQRSAmJlxuICAgIHN0YXRlLmVmZmVjdHMuc29tZShcbiAgICAgIGVmZmVjdCA9PiBlZmZlY3QudHlwZSA9PT0gU1VSRkFDRV9GT0dfVFlQRSB8fCBlZmZlY3QudHlwZSA9PT0gRElTVEFOQ0VfRk9HX1RZUEVcbiAgICApXG4gICkge1xuICAgIENvbnNvbGUud2FybihcIkNhbid0IGFkZCBtb3JlIHRoYW4gb25lIGZvZyBlZmZlY3RcIik7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RWZmZWN0ID0gY3JlYXRlRWZmZWN0KGFjdGlvbi5jb25maWcpO1xuXG4gIC8vIGNvbGxhcHNlIGNvbmZpZ3VyYXRvcnMgZm9yIG90aGVyIGVmZmVjdHNcbiAgc3RhdGUuZWZmZWN0cy5mb3JFYWNoKGVmZmVjdCA9PiBlZmZlY3Quc2V0UHJvcHMoe2lzQ29uZmlnQWN0aXZlOiBmYWxzZX0pKTtcblxuICBjb25zdCBlZmZlY3RzID0gWy4uLnN0YXRlLmVmZmVjdHMsIG5ld0VmZmVjdF07XG4gIGNvbnN0IGVmZmVjdE9yZGVyID0gZml4RWZmZWN0T3JkZXIoZWZmZWN0cywgW25ld0VmZmVjdC5pZCwgLi4uc3RhdGUuZWZmZWN0T3JkZXJdKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVmZmVjdHMsXG4gICAgZWZmZWN0T3JkZXJcbiAgfTtcbn07XG5cbi8qKlxuICogcmVtb3ZlIGVmZmVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUVmZmVjdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkfTogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUVmZmVjdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgaWR4ID0gc3RhdGUuZWZmZWN0cy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwIHx8IGlkeCA+PSBzdGF0ZS5lZmZlY3RzLmxlbmd0aCkge1xuICAgIENvbnNvbGUud2FybihgY2FuIG5vdCByZW1vdmUgZWZmZWN0IHdpdGggaW52YWxpZCBpZCAke2lkfWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtlZmZlY3RzLCBlZmZlY3RPcmRlcn0gPSBzdGF0ZTtcbiAgY29uc3QgZWZmZWN0VG9SZW1vdmUgPSBlZmZlY3RzW2lkeF07XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBmaXhlZCBpbiB0c1xuICAgIGVmZmVjdHM6IGZpbHRlck91dEJ5SWQoZWZmZWN0VG9SZW1vdmUuaWQpKGVmZmVjdHMpLFxuICAgIGVmZmVjdE9yZGVyOiBlZmZlY3RPcmRlci5maWx0ZXIoZWZmZWN0SWQgPT4gZWZmZWN0SWQgIT09IGVmZmVjdFRvUmVtb3ZlLmlkKVxuICB9O1xufTtcblxuLyoqXG4gKiBSZW9yZGVyIGVmZmVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlb3JkZXJFZmZlY3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtvcmRlcn06IFZpc1N0YXRlQWN0aW9ucy5SZW9yZGVyRWZmZWN0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGVmZmVjdE9yZGVyOiBmaXhFZmZlY3RPcmRlcihzdGF0ZS5lZmZlY3RzLCBbLi4ub3JkZXJdKVxufSk7XG5cbi8qKlxuICogVXBkYXRlIGVmZmVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUVmZmVjdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkLCBwcm9wc306IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVFZmZlY3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmVmZmVjdHMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCB8fCBpZHggPj0gc3RhdGUuZWZmZWN0cy5sZW5ndGgpIHtcbiAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgdXBkYXRlIGVmZmVjdCB3aXRoIGludmFsaWQgaWQgJHtpZH1gKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgZWZmZWN0T3JkZXIgPSBzdGF0ZS5lZmZlY3RPcmRlcjtcbiAgaWYgKHByb3BzLmlkICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuaWQgIT09IGlkKSB7XG4gICAgY29uc3QgaWR4MiA9IHN0YXRlLmVmZmVjdHMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gcHJvcHMuaWQpO1xuICAgIGlmIChpZHgyID49IDApIHtcbiAgICAgIENvbnNvbGUud2FybihgY2FuIG5vdCB1cGRhdGUgZWZmZWN0IHdpdGggZXhpc3RpbmcgZWZmZWN0IGlkICR7aWR9YCk7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgZWZmZWN0T3JkZXIgPSBlZmZlY3RPcmRlci5tYXAoZWZmZWN0T3JkZXJJZCA9PlxuICAgICAgZWZmZWN0T3JkZXJJZCA9PT0gaWQgPyAocHJvcHMuaWQgYXMgc3RyaW5nKSA6IGVmZmVjdE9yZGVySWRcbiAgICApO1xuICB9XG5cbiAgY29uc3QgbmV3RWZmZWN0cyA9IFsuLi5zdGF0ZS5lZmZlY3RzXTtcbiAgbmV3RWZmZWN0c1tpZHhdLnNldFByb3BzKHByb3BzKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVmZmVjdHM6IG5ld0VmZmVjdHMsXG4gICAgZWZmZWN0T3JkZXJcbiAgfTtcbn07XG5cbi8vIEFOTk9UQVRJT04gVVBEQVRFUlNcblxuZnVuY3Rpb24gbWFrZU5ld0Fubm90YXRpb24oY29uZmlnPzogQW5ub3RhdGlvblByb3BzUGFydGlhbCk6IEFubm90YXRpb24ge1xuICBjb25zdCBraW5kID0gY29uZmlnPy5raW5kID8/IElOSVRJQUxfQU5OT1RBVElPTl9LSU5EO1xuICBjb25zdCBiYXNlID0ge1xuICAgIGlkOiBjb25maWc/LmlkID8/IGdlbmVyYXRlSGFzaElkKDYpLFxuICAgIGtpbmQsXG4gICAgaXNWaXNpYmxlOiBjb25maWc/LmlzVmlzaWJsZSA/PyB0cnVlLFxuICAgIGF1dG9TaXplOiBjb25maWc/LmF1dG9TaXplID8/IHRydWUsXG4gICAgYXV0b1NpemVZOiBjb25maWc/LmF1dG9TaXplWSA/PyB0cnVlLFxuICAgIGFuY2hvclBvaW50OiBjb25maWc/LmFuY2hvclBvaW50ID8/IChbMCwgMF0gYXMgW251bWJlciwgbnVtYmVyXSksXG4gICAgbGFiZWw6IGNvbmZpZz8ubGFiZWwgPz8gJ05ldyBBbm5vdGF0aW9uJyxcbiAgICBsaW5lQ29sb3I6IGNvbmZpZz8ubGluZUNvbG9yID8/IElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX0NPTE9SLFxuICAgIGxpbmVXaWR0aDogY29uZmlnPy5saW5lV2lkdGggPz8gSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEgsXG4gICAgdGV4dFdpZHRoOiBjb25maWc/LnRleHRXaWR0aCA/PyBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9XSURUSCxcbiAgICB0ZXh0SGVpZ2h0OiBjb25maWc/LnRleHRIZWlnaHQgPz8gSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfSEVJR0hULFxuICAgIHRleHRWZXJ0aWNhbEFsaWduOiBjb25maWc/LnRleHRWZXJ0aWNhbEFsaWduID8/ICgnYm90dG9tJyBhcyBjb25zdCksXG4gICAgbWFwSW5kZXg6IGNvbmZpZz8ubWFwSW5kZXhcbiAgfTtcblxuICBzd2l0Y2ggKGtpbmQpIHtcbiAgICBjYXNlIEFubm90YXRpb25LaW5kLlBPSU5UOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYmFzZSxcbiAgICAgICAga2luZDogQW5ub3RhdGlvbktpbmQuUE9JTlQsXG4gICAgICAgIGFybUxlbmd0aDogKGNvbmZpZyBhcyBhbnkpPy5hcm1MZW5ndGggPz8gSU5JVElBTF9BTk5PVEFUSU9OX0FSTV9MRU5HVEgsXG4gICAgICAgIGFuZ2xlOiAoY29uZmlnIGFzIGFueSk/LmFuZ2xlID8/IElOSVRJQUxfQU5OT1RBVElPTl9BTkdMRVxuICAgICAgfTtcbiAgICBjYXNlIEFubm90YXRpb25LaW5kLkFSUk9XOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYmFzZSxcbiAgICAgICAga2luZDogQW5ub3RhdGlvbktpbmQuQVJST1csXG4gICAgICAgIGFybUxlbmd0aDogKGNvbmZpZyBhcyBhbnkpPy5hcm1MZW5ndGggPz8gSU5JVElBTF9BTk5PVEFUSU9OX0FSTV9MRU5HVEgsXG4gICAgICAgIGFuZ2xlOiAoY29uZmlnIGFzIGFueSk/LmFuZ2xlID8/IElOSVRJQUxfQU5OT1RBVElPTl9BTkdMRVxuICAgICAgfTtcbiAgICBjYXNlIEFubm90YXRpb25LaW5kLkNJUkNMRTpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmJhc2UsXG4gICAgICAgIGtpbmQ6IEFubm90YXRpb25LaW5kLkNJUkNMRSxcbiAgICAgICAgYXJtTGVuZ3RoOiAoY29uZmlnIGFzIGFueSk/LmFybUxlbmd0aCA/PyBJTklUSUFMX0FOTk9UQVRJT05fQVJNX0xFTkdUSCxcbiAgICAgICAgYW5nbGU6IChjb25maWcgYXMgYW55KT8uYW5nbGUgPz8gSU5JVElBTF9BTk5PVEFUSU9OX0FOR0xFLFxuICAgICAgICByYWRpdXNJbk1ldGVyczogKGNvbmZpZyBhcyBhbnkpPy5yYWRpdXNJbk1ldGVycyA/PyAxMDAwXG4gICAgICB9O1xuICAgIGNhc2UgQW5ub3RhdGlvbktpbmQuVEVYVDpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYmFzZSxcbiAgICAgICAga2luZDogQW5ub3RhdGlvbktpbmQuVEVYVFxuICAgICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEFkZCBhIG5ldyBhbm5vdGF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkQW5ub3RhdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkQW5ub3RhdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgbmV3QW5ub3RhdGlvbiA9IG1ha2VOZXdBbm5vdGF0aW9uKGFjdGlvbi5jb25maWcpO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFubm90YXRpb25zOiBbbmV3QW5ub3RhdGlvbiwgLi4uc3RhdGUuYW5ub3RhdGlvbnNdLFxuICAgIHNlbGVjdGVkQW5ub3RhdGlvbklkOiBuZXdBbm5vdGF0aW9uLmlkLFxuICAgIGlzRWRpdGluZ0Fubm90YXRpb25UZXh0OiB0cnVlXG4gIH07XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhbiBhbm5vdGF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlQW5ub3RhdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkfTogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUFubm90YXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5ub3RhdGlvbnM6IHN0YXRlLmFubm90YXRpb25zLmZpbHRlcihhID0+IGEuaWQgIT09IGlkKSxcbiAgICBzZWxlY3RlZEFubm90YXRpb25JZDogc3RhdGUuc2VsZWN0ZWRBbm5vdGF0aW9uSWQgPT09IGlkID8gbnVsbCA6IHN0YXRlLnNlbGVjdGVkQW5ub3RhdGlvbklkLFxuICAgIGlzRWRpdGluZ0Fubm90YXRpb25UZXh0OlxuICAgICAgc3RhdGUuc2VsZWN0ZWRBbm5vdGF0aW9uSWQgPT09IGlkID8gZmFsc2UgOiBzdGF0ZS5pc0VkaXRpbmdBbm5vdGF0aW9uVGV4dFxuICB9O1xufTtcblxuLyoqXG4gKiBVcGRhdGUgYW4gYW5ub3RhdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUFubm90YXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZCwgY29uZmlnfTogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUFubm90YXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmFubm90YXRpb25zLmZpbmRJbmRleChhID0+IGEuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA8IDApIHtcbiAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgdXBkYXRlIGFubm90YXRpb24gd2l0aCBpbnZhbGlkIGlkICR7aWR9YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHByZXYgPSBzdGF0ZS5hbm5vdGF0aW9uc1tpZHhdO1xuICBsZXQgbmV4dEFubm90YXRpb246IEFubm90YXRpb247XG5cbiAgaWYgKGNvbmZpZy5raW5kICYmIGNvbmZpZy5raW5kICE9PSBwcmV2LmtpbmQpIHtcbiAgICBuZXh0QW5ub3RhdGlvbiA9IG1ha2VOZXdBbm5vdGF0aW9uKHsuLi5wcmV2LCAuLi5jb25maWd9IGFzIEFubm90YXRpb25Qcm9wc1BhcnRpYWwpO1xuICB9IGVsc2Uge1xuICAgIG5leHRBbm5vdGF0aW9uID0gey4uLnByZXYsIC4uLmNvbmZpZ30gYXMgQW5ub3RhdGlvbjtcbiAgfVxuXG4gIGNvbnN0IG5ld0Fubm90YXRpb25zID0gWy4uLnN0YXRlLmFubm90YXRpb25zXTtcbiAgbmV3QW5ub3RhdGlvbnNbaWR4XSA9IG5leHRBbm5vdGF0aW9uO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFubm90YXRpb25zOiBuZXdBbm5vdGF0aW9uc1xuICB9O1xufTtcblxuLyoqXG4gKiBEdXBsaWNhdGUgYW4gYW5ub3RhdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGR1cGxpY2F0ZUFubm90YXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZH06IFZpc1N0YXRlQWN0aW9ucy5EdXBsaWNhdGVBbm5vdGF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBvcmlnaW5hbCA9IHN0YXRlLmFubm90YXRpb25zLmZpbmQoYSA9PiBhLmlkID09PSBpZCk7XG4gIGlmICghb3JpZ2luYWwpIHtcbiAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgZHVwbGljYXRlIGFubm90YXRpb24gd2l0aCBpbnZhbGlkIGlkICR7aWR9YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG5ld0Fubm90YXRpb24gPSB7XG4gICAgLi4uY2xvbmVEZWVwKG9yaWdpbmFsKSxcbiAgICBpZDogZ2VuZXJhdGVIYXNoSWQoNiksXG4gICAgbGFiZWw6IGBDb3B5IG9mICR7b3JpZ2luYWwubGFiZWx9YFxuICB9O1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFubm90YXRpb25zOiBbbmV3QW5ub3RhdGlvbiwgLi4uc3RhdGUuYW5ub3RhdGlvbnNdLFxuICAgIHNlbGVjdGVkQW5ub3RhdGlvbklkOiBuZXdBbm5vdGF0aW9uLmlkLFxuICAgIGlzRWRpdGluZ0Fubm90YXRpb25UZXh0OiBmYWxzZVxuICB9O1xufTtcblxuLyoqXG4gKiBTZXQgc2VsZWN0ZWQgYW5ub3RhdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldFNlbGVjdGVkQW5ub3RhdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkLCBpc0VkaXRpbmdUZXh0fTogVmlzU3RhdGVBY3Rpb25zLlNldFNlbGVjdGVkQW5ub3RhdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKFxuICAgIGlkID09PSBzdGF0ZS5zZWxlY3RlZEFubm90YXRpb25JZCAmJlxuICAgIChpc0VkaXRpbmdUZXh0ID8/IGZhbHNlKSA9PT0gc3RhdGUuaXNFZGl0aW5nQW5ub3RhdGlvblRleHRcbiAgKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgc2VsZWN0ZWRBbm5vdGF0aW9uSWQ6IGlkLFxuICAgIGlzRWRpdGluZ0Fubm90YXRpb25UZXh0OiBpc0VkaXRpbmdUZXh0ID8/IGZhbHNlXG4gIH07XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIGRhdGFzZXQgYW5kIGFsbCBsYXllcnMsIGZpbHRlcnMsIHRvb2x0aXAgY29uZmlncyB0aGF0IGJhc2VkIG9uIGl0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRGF0YXNldFVwZGF0ZXI8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZURhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBUIHtcbiAgLy8gZXh0cmFjdCBkYXRhc2V0IGtleVxuICBjb25zdCB7ZGF0YUlkOiBkYXRhc2V0S2V5fSA9IGFjdGlvbjtcbiAgY29uc3Qge2RhdGFzZXRzfSA9IHN0YXRlO1xuXG4gIC8vIGNoZWNrIGlmIGRhdGFzZXQgaXMgcHJlc2VudFxuICBpZiAoIWRhdGFzZXRzW2RhdGFzZXRLZXldKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge1xuICAgIGxheWVycyxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgZGF0YXNldHM6IHtbZGF0YXNldEtleV06IGRhdGFzZXQsIC4uLm5ld0RhdGFzZXRzfVxuICB9ID0gc3RhdGU7XG5cbiAgY29uc3QgbGF5ZXJzVG9SZW1vdmUgPSBsYXllcnMuZmlsdGVyKGwgPT4gbC5jb25maWcuZGF0YUlkID09PSBkYXRhc2V0S2V5KS5tYXAobCA9PiBsLmlkKTtcblxuICAvLyByZW1vdmUgbGF5ZXJzIGFuZCBkYXRhc2V0c1xuICBsZXQgbmV3U3RhdGUgPSBsYXllcnNUb1JlbW92ZS5yZWR1Y2UoKGFjY3UsIGlkKSA9PiByZW1vdmVMYXllclVwZGF0ZXIoYWNjdSwge2lkfSksIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czogbmV3RGF0YXNldHNcbiAgfSk7XG5cbiAgLy8gdXBkYXRlIGZpbHRlcnNcbiAgY29uc3QgZmlsdGVyczogRmlsdGVyW10gPSBbXTtcbiAgZm9yIChjb25zdCBmaWx0ZXIgb2YgbmV3U3RhdGUuZmlsdGVycykge1xuICAgIGNvbnN0IHZhbHVlSW5kZXggPSBmaWx0ZXIuZGF0YUlkLmluZGV4T2YoZGF0YXNldEtleSk7XG4gICAgaWYgKHZhbHVlSW5kZXggPj0gMCAmJiBmaWx0ZXIuZGF0YUlkLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIG9ubHkgcmVtb3ZlIG9uZSBzeW5jZWQgZGF0YXNldCBmcm9tIHRoZSBmaWx0ZXJcbiAgICAgIGZpbHRlcnMucHVzaChfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgZGF0YXNldHMpKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlSW5kZXggPCAwKSB7XG4gICAgICAvLyBsZWF2ZSB0aGUgZmlsdGVyIGFzIGlzXG4gICAgICBmaWx0ZXJzLnB1c2goZmlsdGVyKTtcbiAgICB9XG4gIH1cblxuICBuZXdTdGF0ZSA9IHsuLi5uZXdTdGF0ZSwgZmlsdGVyc307XG5cbiAgcmV0dXJuIHJlbW92ZURhdGFzZXRGcm9tSW50ZXJhY3Rpb25Db25maWcobmV3U3RhdGUsIHtkYXRhSWQ6IGRhdGFzZXRLZXl9KTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlRGF0YXNldEZyb21JbnRlcmFjdGlvbkNvbmZpZyhzdGF0ZSwge2RhdGFJZH0pIHtcbiAgbGV0IHtpbnRlcmFjdGlvbkNvbmZpZ30gPSBzdGF0ZTtcbiAgY29uc3Qge3Rvb2x0aXB9ID0gaW50ZXJhY3Rpb25Db25maWc7XG4gIGlmICh0b29sdGlwKSB7XG4gICAgY29uc3Qge2NvbmZpZ30gPSB0b29sdGlwO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBjb25zdCB7W2RhdGFJZF06IGZpZWxkcywgLi4uZmllbGRzVG9TaG93fSA9IGNvbmZpZy5maWVsZHNUb1Nob3c7XG4gICAgaW50ZXJhY3Rpb25Db25maWcgPSB7XG4gICAgICAuLi5pbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgIHRvb2x0aXA6IHsuLi50b29sdGlwLCBjb25maWc6IHsuLi5jb25maWcsIGZpZWxkc1RvU2hvd319XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7Li4uc3RhdGUsIGludGVyYWN0aW9uQ29uZmlnfTtcbn1cbi8qKlxuICogdXBkYXRlIGxheWVyIGJsZW5kaW5nIG1vZGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVMYXllckJsZW5kaW5nVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVMYXllckJsZW5kaW5nVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGxheWVyQmxlbmRpbmc6IGFjdGlvbi5tb2RlXG59KTtcblxuLyoqXG4gKiB1cGRhdGUgb3ZlcmxheSBibGVuZGluZyBtb2RlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlT3ZlcmxheUJsZW5kaW5nVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVPdmVybGF5QmxlbmRpbmdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgb3ZlcmxheUJsZW5kaW5nOiBhY3Rpb24ubW9kZVxufSk7XG5cbi8qKlxuICogRGlzcGxheSBkYXRhc2V0IHRhYmxlIGluIGEgbW9kYWxcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzaG93RGF0YXNldFRhYmxlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TaG93RGF0YXNldFRhYmxlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRpbmdEYXRhc2V0OiBhY3Rpb24uZGF0YUlkXG4gIH07XG59O1xuXG4vKipcbiAqIEFkZCBjdXN0b20gY29sb3IgZm9yIGRhdGFzZXRzIGFuZCBsYXllcnNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVUYWJsZUNvbG9yVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVEYXRhc2V0Q29sb3JVcGRhdGVyXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB1cGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyKHN0YXRlLCB7ZGF0YUlkOiBhY3Rpb24uZGF0YUlkLCBwcm9wczoge2NvbG9yOiBhY3Rpb24ubmV3Q29sb3J9fSk7XG59O1xuXG4vKipcbiAqIHJlc2V0IHZpc1N0YXRlIHRvIGluaXRpYWwgU3RhdGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZXNldE1hcENvbmZpZ1VwZGF0ZXIgPSAoc3RhdGU6IFZpc1N0YXRlKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uSU5JVElBTF9WSVNfU1RBVEUsXG4gIC4uLnN0YXRlLmluaXRpYWxTdGF0ZSxcbiAgaW5pdGlhbFN0YXRlOiBzdGF0ZS5pbml0aWFsU3RhdGVcbn0pO1xuXG4vKipcbiAqIFByb3BhZ2F0ZSBgdmlzU3RhdGVgIHJlZHVjZXIgd2l0aCBhIG5ldyBjb25maWd1cmF0aW9uLiBDdXJyZW50IGNvbmZpZyB3aWxsIGJlIG92ZXJyaWRlLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlY2VpdmVNYXBDb25maWdVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtcbiAgICBwYXlsb2FkOiB7Y29uZmlnID0ge30sIG9wdGlvbnMgPSB7fX1cbiAgfToge1xuICAgIHR5cGU/OiB0eXBlb2YgQWN0aW9uVHlwZXMuUkVDRUlWRV9NQVBfQ09ORklHO1xuICAgIHBheWxvYWQ6IFJlY2VpdmVNYXBDb25maWdQYXlsb2FkO1xuICB9XG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmICghY29uZmlnLnZpc1N0YXRlKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge2tlZXBFeGlzdGluZ0NvbmZpZ30gPSBvcHRpb25zO1xuXG4gIC8vIHJlc2V0IGNvbmZpZyBpZiBrZWVwRXhpc3RpbmdDb25maWcgaXMgZmFsc3lcbiAgbGV0IG1lcmdlZFN0YXRlID0gIWtlZXBFeGlzdGluZ0NvbmZpZyA/IHJlc2V0TWFwQ29uZmlnVXBkYXRlcihzdGF0ZSkgOiBzdGF0ZTtcbiAgZm9yIChjb25zdCBtZXJnZXIgb2Ygc3RhdGUubWVyZ2Vycykge1xuICAgIGlmIChpc1ZhbGlkTWVyZ2VyKG1lcmdlcikgJiYgaGFzUHJvcHNUb01lcmdlKGNvbmZpZy52aXNTdGF0ZSwgbWVyZ2VyLnByb3ApKSB7XG4gICAgICBtZXJnZWRTdGF0ZSA9IG1lcmdlci5tZXJnZShcbiAgICAgICAgbWVyZ2VkU3RhdGUsXG4gICAgICAgIGdldFByb3BWYWx1ZVRvTWVyZ2VyKGNvbmZpZy52aXNTdGF0ZSwgbWVyZ2VyLnByb3AsIG1lcmdlci50b01lcmdlUHJvcCksXG4gICAgICAgIC8vIGZyb21Db25maWdcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWVyZ2VkU3RhdGU7XG59O1xuXG4vKipcbiAqIFRyaWdnZXIgbGF5ZXIgaG92ZXIgZXZlbnQgd2l0aCBob3ZlcmVkIG9iamVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGxheWVySG92ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLk9uTGF5ZXJIb3ZlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBob3ZlckluZm86IHtcbiAgICAvLyBkZWNrLmdsIGluZm8gaXMgbXV0YWJsZVxuICAgIC4uLmFjdGlvbi5pbmZvLFxuICAgIC4uLihOdW1iZXIuaXNGaW5pdGUoYWN0aW9uLm1hcEluZGV4KSA/IHttYXBJbmRleDogYWN0aW9uLm1hcEluZGV4fSA6IHt9KVxuICB9XG59KTtcblxuLyogZXNsaW50LWVuYWJsZSBtYXgtc3RhdGVtZW50cyAqL1xuXG4vKipcbiAqIFVwZGF0ZSBgaW50ZXJhY3Rpb25Db25maWdgXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gaW50ZXJhY3Rpb25Db25maWdDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkludGVyYWN0aW9uQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7Y29uZmlnfSA9IGFjdGlvbjtcblxuICBjb25zdCBpbnRlcmFjdGlvbkNvbmZpZyA9IHtcbiAgICAuLi5zdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAuLi57W2NvbmZpZy5pZF06IGNvbmZpZ31cbiAgfTtcblxuICAvLyBEb24ndCBlbmFibGUgdG9vbHRpcCBhbmQgYnJ1c2ggYXQgdGhlIHNhbWUgdGltZVxuICAvLyBidXQgY29vcmRpbmF0ZXMgY2FuIGJlIHNob3duIGF0IGFsbCB0aW1lXG4gIGNvbnN0IGNvbnRyYWRpY3QgPSBbJ2JydXNoJywgJ3Rvb2x0aXAnXTtcblxuICBpZiAoXG4gICAgY29udHJhZGljdC5pbmNsdWRlcyhjb25maWcuaWQpICYmXG4gICAgY29uZmlnLmVuYWJsZWQgJiZcbiAgICAhc3RhdGUuaW50ZXJhY3Rpb25Db25maWdbY29uZmlnLmlkXS5lbmFibGVkXG4gICkge1xuICAgIC8vIG9ubHkgZW5hYmxlIG9uZSBpbnRlcmFjdGlvbiBhdCBhIHRpbWVcbiAgICBjb250cmFkaWN0LmZvckVhY2goayA9PiB7XG4gICAgICBpZiAoayAhPT0gY29uZmlnLmlkKSB7XG4gICAgICAgIGludGVyYWN0aW9uQ29uZmlnW2tdID0gey4uLmludGVyYWN0aW9uQ29uZmlnW2tdLCBlbmFibGVkOiBmYWxzZX07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBpbnRlcmFjdGlvbkNvbmZpZ1xuICB9O1xuXG4gIGlmIChjb25maWcuaWQgPT09ICdnZW9jb2RlcicgJiYgIWNvbmZpZy5lbmFibGVkKSB7XG4gICAgcmV0dXJuIHJlbW92ZURhdGFzZXRVcGRhdGVyKG5ld1N0YXRlLCB7ZGF0YUlkOiAnZ2VvY29kZXJfZGF0YXNldCd9KTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBUcmlnZ2VyIGxheWVyIGNsaWNrIGV2ZW50IHdpdGggY2xpY2tlZCBvYmplY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBsYXllckNsaWNrVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5PbkxheWVyQ2xpY2tVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbW91c2VQb3M6IHN0YXRlLmludGVyYWN0aW9uQ29uZmlnLmNvb3JkaW5hdGUuZW5hYmxlZFxuICAgID8ge1xuICAgICAgICAuLi5zdGF0ZS5tb3VzZVBvcyxcbiAgICAgICAgcGlubmVkOiBzdGF0ZS5tb3VzZVBvcy5waW5uZWQgPyBudWxsIDogY2xvbmVEZWVwKHN0YXRlLm1vdXNlUG9zKVxuICAgICAgfVxuICAgIDogc3RhdGUubW91c2VQb3MsXG4gIGNsaWNrZWQ6IGFjdGlvbi5pbmZvICYmIGFjdGlvbi5pbmZvLnBpY2tlZCA/IGFjdGlvbi5pbmZvIDogbnVsbFxufSk7XG5cbi8qKlxuICogVHJpZ2dlciBtYXAgY2xpY2sgZXZlbnQsIHVuc2VsZWN0IGNsaWNrZWQgb2JqZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbWFwQ2xpY2tVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuT25NYXBDbGlja1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBjbGlja2VkOiBudWxsXG4gIH07XG59O1xuXG4vKipcbiAqIFRyaWdnZXIgbWFwIG1vdmUgZXZlbnRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBtb3VzZU1vdmVVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtldnR9OiBWaXNTdGF0ZUFjdGlvbnMuT25Nb3VzZU1vdmVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmIChPYmplY3QudmFsdWVzKHN0YXRlLmludGVyYWN0aW9uQ29uZmlnKS5zb21lKGNvbmZpZyA9PiBjb25maWcuZW5hYmxlZCkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBtb3VzZVBvczoge1xuICAgICAgICAuLi5zdGF0ZS5tb3VzZVBvcyxcbiAgICAgICAgLi4uKEFycmF5LmlzQXJyYXkoZXZ0LnBvaW50KSA/IHttb3VzZVBvc2l0aW9uOiBbLi4uZXZ0LnBvaW50XX0gOiB7fSksXG4gICAgICAgIC4uLihBcnJheS5pc0FycmF5KGV2dC5sbmdMYXQpID8ge2Nvb3JkaW5hdGU6IFsuLi5ldnQubG5nTGF0XX0gOiB7fSlcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufTtcbi8qKlxuICogVG9nZ2xlIHZpc2liaWxpdHkgb2YgYSBsYXllciBmb3IgYSBzcGxpdCBtYXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVTcGxpdE1hcFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBNYXBTdGF0ZUFjdGlvbnMuVG9nZ2xlU3BsaXRNYXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PlxuICBzdGF0ZS5zcGxpdE1hcHMgJiYgc3RhdGUuc3BsaXRNYXBzLmxlbmd0aCA9PT0gMFxuICAgID8ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgLy8gbWF5YmUgd2Ugc2hvdWxkIHVzZSBhbiBhcnJheSB0byBzdG9yZSBzdGF0ZSBmb3IgYSBzaW5nbGUgbWFwIGFzIHdlbGxcbiAgICAgICAgLy8gaWYgY3VycmVudCBtYXBzIGxlbmd0aCBpcyBlcXVhbCB0byAwIGl0IG1lYW5zIHRoYXQgd2UgYXJlIGFib3V0IHRvIHNwbGl0IHRoZSB2aWV3XG4gICAgICAgIHNwbGl0TWFwczogY29tcHV0ZVNwbGl0TWFwTGF5ZXJzKHN0YXRlLmxheWVycywge2R1cGxpY2F0ZTogZmFsc2V9KVxuICAgICAgfVxuICAgIDogY2xvc2VTcGVjaWZpY01hcEF0SW5kZXgoc3RhdGUsIGFjdGlvbik7XG5cbi8qKlxuICogVG9nZ2xlIHZpc2liaWxpdHkgb2YgYSBsYXllciBpbiBhIHNwbGl0IG1hcFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUxheWVyRm9yTWFwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7bWFwSW5kZXgsIGxheWVySWR9OiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtzcGxpdE1hcHN9ID0gc3RhdGU7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBzcGxpdE1hcHM6IHNwbGl0TWFwcy5tYXAoKHNtLCBpKSA9PlxuICAgICAgaSA9PT0gbWFwSW5kZXhcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5zcGxpdE1hcHNbaV0sXG4gICAgICAgICAgICBsYXllcnM6IHtcbiAgICAgICAgICAgICAgLi4uc3BsaXRNYXBzW2ldLmxheWVycyxcbiAgICAgICAgICAgICAgLy8gaWYgbGF5ZXJJZCBub3QgaW4gbGF5ZXJzLCBzZXQgaXQgdG8gdmlzaWJsZVxuICAgICAgICAgICAgICBbbGF5ZXJJZF06ICFzcGxpdE1hcHNbaV0ubGF5ZXJzW2xheWVySWRdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICA6IHNtXG4gICAgKVxuICB9O1xufTtcblxuZnVuY3Rpb24gaGFzVGFidWxhckRhdGFzZXREYXRhKGRhdGE/OiBQcm90b0RhdGFzZXRbJ2RhdGEnXSB8IG51bGwpOiBib29sZWFuIHtcbiAgcmV0dXJuIEJvb2xlYW4oZGF0YT8ucm93cz8ubGVuZ3RoIHx8IGRhdGE/LmNvbHM/Lmxlbmd0aCB8fCAoZGF0YSBhcyB7YXJyb3dUYWJsZT86IHVua25vd259KT8uYXJyb3dUYWJsZSk7XG59XG5cbmZ1bmN0aW9uIG5lZWRzRXh0ZXJuYWxseUhvc3RlZEh5ZHJhdGUoZGF0YXNldDogUHJvdG9EYXRhc2V0KTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgZGF0YXNldC5pbmZvPy50eXBlID09PSBEYXRhc2V0VHlwZS5FWFRFUk5BTExZX0hPU1RFRCAmJlxuICAgIHR5cGVvZiBkYXRhc2V0Lm1ldGFkYXRhPy5zb3VyY2UgPT09ICdzdHJpbmcnICYmXG4gICAgIWhhc1RhYnVsYXJEYXRhc2V0RGF0YShkYXRhc2V0LmRhdGEpXG4gICk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGh5ZHJhdGVFeHRlcm5hbGx5SG9zdGVkUHJvdG9EYXRhc2V0KGRhdGFzZXQ6IFByb3RvRGF0YXNldCk6IFByb21pc2U8UHJvdG9EYXRhc2V0PiB7XG4gIGlmICghbmVlZHNFeHRlcm5hbGx5SG9zdGVkSHlkcmF0ZShkYXRhc2V0KSkge1xuICAgIHJldHVybiBkYXRhc2V0O1xuICB9XG4gIGNvbnN0IGRhdGEgPSBhd2FpdCBsb2FkRXh0ZXJuYWxseUhvc3RlZERhdGFzZXQoe1xuICAgIHNvdXJjZTogZGF0YXNldC5tZXRhZGF0YT8uc291cmNlIGFzIHN0cmluZyxcbiAgICBmb3JtYXQ6IGdldFJlbW90ZVNvdXJjZUZvcm1hdChkYXRhc2V0Lm1ldGFkYXRhKSxcbiAgICBzaXplOiB0eXBlb2YgZGF0YXNldC5tZXRhZGF0YT8uc2l6ZSA9PT0gJ251bWJlcicgPyBkYXRhc2V0Lm1ldGFkYXRhLnNpemUgOiB1bmRlZmluZWRcbiAgfSk7XG4gIHJldHVybiB7Li4uZGF0YXNldCwgZGF0YX07XG59XG5cbmNvbnN0IEhZRFJBVEVfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLID0gVGFzay5mcm9tUHJvbWlzZShcbiAgaHlkcmF0ZUV4dGVybmFsbHlIb3N0ZWRQcm90b0RhdGFzZXQsXG4gICdIWURSQVRFX0VYVEVSTkFMTFlfSE9TVEVEX0RBVEFTRVRfVEFTSydcbik7XG5cbmNvbnN0IEZBSUxfQ1JFQVRFX0RBVEFTRVRfVEFTSyA9IFRhc2suZnJvbVByb21pc2UoYXN5bmMgKG1lc3NhZ2U6IHN0cmluZykgPT4ge1xuICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG59LCAnRkFJTF9DUkVBVEVfREFUQVNFVF9UQVNLJyk7XG5cbmZ1bmN0aW9uIGNyZWF0ZU5ld0RhdGFFbnRyeVRhc2soZGF0YXNldDogUHJvdG9EYXRhc2V0LCBkYXRhc2V0czogRGF0YXNldHMpIHtcbiAgaWYgKCFuZWVkc0V4dGVybmFsbHlIb3N0ZWRIeWRyYXRlKGRhdGFzZXQpKSB7XG4gICAgcmV0dXJuIGNyZWF0ZU5ld0RhdGFFbnRyeShkYXRhc2V0LCBkYXRhc2V0cyk7XG4gIH1cbiAgcmV0dXJuIEhZRFJBVEVfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLKGRhdGFzZXQpLmNoYWluKGh5ZHJhdGVkID0+IHtcbiAgICBjb25zdCB0YXNrID0gY3JlYXRlTmV3RGF0YUVudHJ5KGh5ZHJhdGVkLCBkYXRhc2V0cyk7XG4gICAgcmV0dXJuIChcbiAgICAgIHRhc2sgfHxcbiAgICAgIEZBSUxfQ1JFQVRFX0RBVEFTRVRfVEFTSygnRmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBkYXRhc2V0IGR1ZSB0byBkYXRhIHZlcmlmaWNhdGlvbiBlcnJvcnMnKVxuICAgICk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEFkZCBuZXcgZGF0YXNldCB0byBgdmlzU3RhdGVgLCB3aXRoIG9wdGlvbiB0byBsb2FkIGEgbWFwIGNvbmZpZyBhbG9uZyB3aXRoIHRoZSBkYXRhc2V0c1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmV4cG9ydCBjb25zdCB1cGRhdGVWaXNEYXRhVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVWaXNEYXRhVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICAvLyBkYXRhc2V0cyBjYW4gYmUgYSBzaW5nbGUgZGF0YSBlbnRyaWVzIG9yIGFuIGFycmF5IG9mIG11bHRpcGxlIGRhdGEgZW50cmllc1xuICBjb25zdCB7Y29uZmlnLCBvcHRpb25zfSA9IGFjdGlvbjtcblxuICAvLyBhcHBseSBjb25maWcgaWYgcGFzc2VkIGZyb20gYWN0aW9uXG4gIC8vIFRPRE86IHdlIGRvbid0IGhhbmRsZSBhc3luYyBtZXJnZXJzIGhlcmUgeWV0XG4gIGxldCB1cGRhdGVkU3RhdGUgPSBjb25maWdcbiAgICA/IHJlY2VpdmVNYXBDb25maWdVcGRhdGVyKHN0YXRlLCB7XG4gICAgICAgIHBheWxvYWQ6IHtjb25maWcsIG9wdGlvbnN9XG4gICAgICB9KVxuICAgIDogc3RhdGU7XG5cbiAgY29uc3QgZGF0YXNldHMgPSB0b0FycmF5KGFjdGlvbi5kYXRhc2V0cyk7XG4gIGlmICghZGF0YXNldHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHVwZGF0ZWRTdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGNyZWF0ZURhdGFzZXRUYXNrczogVGFza1tdID0gW107XG4gIGNvbnN0IG5vdGlmaWNhdGlvblRhc2tzOiBUYXNrW10gPSBbXTtcblxuICBkYXRhc2V0cy5mb3JFYWNoKCh7aW5mbyA9IHt9LCAuLi5yZXN0fSwgZGF0YXNldEluZGV4KSA9PiB7XG4gICAgY29uc3QgdGFzayA9IGNyZWF0ZU5ld0RhdGFFbnRyeVRhc2soe2luZm8sIC4uLnJlc3R9LCBzdGF0ZS5kYXRhc2V0cyk7XG4gICAgaWYgKHRhc2spIHtcbiAgICAgIGNyZWF0ZURhdGFzZXRUYXNrcy5wdXNoKHRhc2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBub3RpZmljYXRpb25UYXNrcy5wdXNoKFxuICAgICAgICBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OKCkubWFwKCgpID0+XG4gICAgICAgICAgYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBkYXRhc2V0IGR1ZSB0byBkYXRhIHZlcmlmaWNhdGlvbiBlcnJvcnNgLFxuICAgICAgICAgICAgICBpZDogYGRhdGFzZXQtZmFpbGVkLSR7ZGF0YXNldEluZGV4fWBcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgZGF0YXNldHNBbGxTZXR0bGVkVGFzayA9IGNyZWF0ZURhdGFzZXRUYXNrcy5sZW5ndGhcbiAgICA/IFRhc2suYWxsU2V0dGxlZChjcmVhdGVEYXRhc2V0VGFza3MpLm1hcChyZXN1bHRzID0+XG4gICAgICAgIGNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzKHtyZXN1bHRzLCBhZGRUb01hcE9wdGlvbnM6IG9wdGlvbnN9KVxuICAgICAgKVxuICAgIDogbnVsbDtcblxuICBpZiAoZGF0YXNldHNBbGxTZXR0bGVkVGFzaykge1xuICAgIHVwZGF0ZWRTdGF0ZSA9IHNldExvYWRpbmdJbmRpY2F0b3JVcGRhdGVyKHVwZGF0ZWRTdGF0ZSwgcGF5bG9hZF8oe2NoYW5nZTogMSwgdHlwZTogJyd9KSk7XG4gIH1cblxuICByZXR1cm4gd2l0aFRhc2sodXBkYXRlZFN0YXRlLCBbXG4gICAgLi4uKGRhdGFzZXRzQWxsU2V0dGxlZFRhc2sgPyBbZGF0YXNldHNBbGxTZXR0bGVkVGFza10gOiBbXSksXG4gICAgLi4ubm90aWZpY2F0aW9uVGFza3NcbiAgXSk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3NVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogUGF5bG9hZEFjdGlvbjxDcmVhdGVOZXdEYXRhc2V0U3VjY2Vzc1BheWxvYWQ+XG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtyZXN1bHRzLCBhZGRUb01hcE9wdGlvbnN9ID0gYWN0aW9uLnBheWxvYWQ7XG4gIGNvbnN0IG5vdGlmaWNhdGlvblRhc2tzOiBUYXNrW10gPSBbXTtcblxuICBjb25zdCBuZXdEYXRhRW50cmllcyA9IHJlc3VsdHMucmVkdWNlKChhY2N1LCByZXN1bHQsIGlkeCkgPT4ge1xuICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSAnZnVsZmlsbGVkJykge1xuICAgICAgY29uc3QgZGF0YXNldCA9IHJlc3VsdC52YWx1ZTtcbiAgICAgIHJldHVybiB7Li4uYWNjdSwgW2RhdGFzZXQuaWRdOiBkYXRhc2V0fTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gc2hvdyBlcnJvciBub3RpZmljYXRpb24gb24gVUlcbiAgICAgIG5vdGlmaWNhdGlvblRhc2tzLnB1c2goXG4gICAgICAgIEFDVElPTl9UQVNLKCkubWFwKCgpID0+XG4gICAgICAgICAgYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgICBtZXNzYWdlOiBgRGF0YXNldCBlcnJvcjogRmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBkYXRhc2V0OlxuICAgICAgICAgICAgICAke3Jlc3VsdC5yZWFzb24gfHwgKHJlc3VsdCBhcyBhbnkpLnZhbHVlfWAsXG4gICAgICAgICAgICAgIGlkOiBgZGF0YXNldC1jcmVhdGUtZmFpbGVkLSR7aWR4fWBcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApO1xuICAgICAgcmV0dXJuIGFjY3U7XG4gICAgfVxuICB9LCB7fSBhcyBEYXRhc2V0cyk7XG4gIC8vIHNhdmUgbmV3IGRhdGFzZXQgZW50cnkgdG8gc3RhdGVcbiAgY29uc3QgbWVyZ2VkU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGF0YXNldHM6IG1lcmdlRGF0YXNldHNCeU9yZGVyKHN0YXRlLCBuZXdEYXRhRW50cmllcylcbiAgfTtcblxuICAvLyBtZXJnZSBzdGF0ZSB3aXRoIGNvbmZpZyB0byBiZSBtZXJnZWRcbiAgY29uc3QgbGF5ZXJNZXJnZXJzID0gc3RhdGUubWVyZ2Vycy5maWx0ZXIobSA9PiBtLndhaXRGb3JMYXllckRhdGEpO1xuICBjb25zdCBkYXRhc2V0TWVyZ2VycyA9IHN0YXRlLm1lcmdlcnMuZmlsdGVyKG0gPT4gIWxheWVyTWVyZ2Vycy5pbmNsdWRlcyhtKSk7XG5cbiAgY29uc3QgbmV3RGF0YUlkcyA9IE9iamVjdC5rZXlzKG5ld0RhdGFFbnRyaWVzKTtcbiAgY29uc3QgcG9zdE1lcmdlclBheWxvYWQgPSB7XG4gICAgbmV3RGF0YUlkcyxcbiAgICBvcHRpb25zOiBhZGRUb01hcE9wdGlvbnMsXG4gICAgbGF5ZXJNZXJnZXJzXG4gIH07XG5cbiAgY29uc3QgdXBkYXRlZFN0YXRlID0gYXBwbHlNZXJnZXJzVXBkYXRlcihtZXJnZWRTdGF0ZSwge1xuICAgIG1lcmdlcnM6IGRhdGFzZXRNZXJnZXJzLFxuICAgIHBvc3RNZXJnZXJQYXlsb2FkXG4gIH0pO1xuXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBzZXRMb2FkaW5nSW5kaWNhdG9yVXBkYXRlcih1cGRhdGVkU3RhdGUsIHBheWxvYWRfKHtjaGFuZ2U6IC0xfSkpLFxuICAgIG5vdGlmaWNhdGlvblRhc2tzXG4gICk7XG59O1xuXG4vKipcbiAqIEFkZCBuZXcgZGF0YXNldCB0byBgdmlzU3RhdGVgLCB3aXRoIG9wdGlvbiB0byBsb2FkIGEgbWFwIGNvbmZpZyBhbG9uZyB3aXRoIHRoZSBkYXRhc2V0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlNZXJnZXJzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IHtcbiAgICBtZXJnZXJzOiBNZXJnZXI8YW55PltdO1xuICAgIHBvc3RNZXJnZXJQYXlsb2FkOiBQb3N0TWVyZ2VyUGF5bG9hZDtcbiAgfVxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7bWVyZ2VycywgcG9zdE1lcmdlclBheWxvYWR9ID0gYWN0aW9uO1xuXG4gIC8vIG1lcmdlIHN0YXRlIHdpdGggY29uZmlnIHRvIGJlIG1lcmdlZFxuICBjb25zdCBtZXJnZVN0YXRlUmVzdWx0ID0gbWVyZ2VTdGF0ZUZyb21NZXJnZXJzKFxuICAgIHN0YXRlLFxuICAgIHtcbiAgICAgIC4uLklOSVRJQUxfVklTX1NUQVRFLFxuICAgICAgLi4uc3RhdGUuaW5pdGlhbFN0YXRlXG4gICAgfSxcbiAgICBtZXJnZXJzLFxuICAgIC8vIG5ld0RhdGFJZHMsXG4gICAgcG9zdE1lcmdlclBheWxvYWRcbiAgKTtcblxuICAvLyBpZiBhbGwgbWVyZ2VkLCBraWNrdXAgcG9zdCBtZXJnZSBwcm9jZXNzXG4gIC8vIGlmIG5vdCB3YWl0XG4gIHJldHVybiBtZXJnZVN0YXRlUmVzdWx0LmFsbE1lcmdlZFxuICAgID8gcG9zdE1lcmdlVXBkYXRlcihtZXJnZVN0YXRlUmVzdWx0Lm1lcmdlZFN0YXRlLCBwb3N0TWVyZ2VyUGF5bG9hZClcbiAgICA6IG1lcmdlU3RhdGVSZXN1bHQubWVyZ2VkU3RhdGU7XG59XG5cbi8qKiBSZWFkcyBgb3B0aW9ucy5sYXllclZpc0NvbmZpZ2AgZnJvbSBhZGQtZGF0YS10by1tYXAgKHNlZSBgQWRkRGF0YVRvTWFwT3B0aW9uc2ApLiAqL1xuZnVuY3Rpb24gbGF5ZXJWaXNDb25maWdGcm9tQWRkRGF0YU9wdGlvbnMoXG4gIG9wdGlvbnM6IFBvc3RNZXJnZXJQYXlsb2FkWydvcHRpb25zJ10gfCB1bmRlZmluZWRcbik6IFBhcnRpYWw8TGF5ZXJWaXNDb25maWc+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFvcHRpb25zIHx8ICEoJ2xheWVyVmlzQ29uZmlnJyBpbiBvcHRpb25zKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcGF0Y2ggPSAob3B0aW9ucyBhcyB7bGF5ZXJWaXNDb25maWc/OiB1bmtub3dufSkubGF5ZXJWaXNDb25maWc7XG4gIGlmIChwYXRjaCA9PSBudWxsIHx8IHR5cGVvZiBwYXRjaCAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShwYXRjaCkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiBwYXRjaCBhcyBQYXJ0aWFsPExheWVyVmlzQ29uZmlnPjtcbn1cblxuLyoqXG4gKiBQb2x5Z29uIGZpbHRlcnMgZm9yIHRoZXNlIGxheWVycyB1c2UgY2VudHJvaWRzIC8gZGF0YVRvRmVhdHVyZSBmcm9tXG4gKiBjYWxjdWxhdGVMYXllckRhdGEuIE90aGVyIHR5cGVzIChsYXQvbG5nIHBvaW50cywgSDMsIGFyY3MpIGNhbiBmaWx0ZXJcbiAqIGZyb20gY29sdW1ucyBvbiB0aGUgZmlyc3QgcGFzcyBhbmQgbXVzdCBub3QgYmUgcmVjYWxjdWxhdGVkIGhlcmUuXG4gKi9cbmZ1bmN0aW9uIHBvbHlnb25GaWx0ZXJEZXBlbmRzT25MYXllck1ldGEobGF5ZXI6IExheWVyKTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgbGF5ZXIudHlwZSA9PT0gTEFZRVJfVFlQRVMuZ2VvanNvbiB8fFxuICAgIGxheWVyLmNvbmZpZz8uY29sdW1uTW9kZSA9PT0gJ2dlb2pzb24nXG4gICk7XG59XG5cbi8qKlxuICogQWRkIG5ldyBkYXRhc2V0IHRvIGB2aXNTdGF0ZWAsIHdpdGggb3B0aW9uIHRvIGxvYWQgYSBtYXAgY29uZmlnIGFsb25nIHdpdGggdGhlIGRhdGFzZXRzXG4gKi9cbmZ1bmN0aW9uIHBvc3RNZXJnZVVwZGF0ZXIobWVyZ2VkU3RhdGU6IFZpc1N0YXRlLCBwb3N0TWVyZ2VyUGF5bG9hZDogUG9zdE1lcmdlclBheWxvYWQpOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtuZXdEYXRhSWRzLCBvcHRpb25zLCBsYXllck1lcmdlcnN9ID0gcG9zdE1lcmdlclBheWxvYWQ7XG4gIGNvbnN0IG5ld0ZpbHRlcnMgPSBtZXJnZWRTdGF0ZS5maWx0ZXJzLmZpbHRlcihmID0+XG4gICAgZi5kYXRhSWQuZmluZChmRGF0YUlkID0+IG5ld0RhdGFJZHMuaW5jbHVkZXMoZkRhdGFJZCkpXG4gICk7XG4gIGNvbnN0IGRhdGFzZXRGaWx0ZXJlZDogc3RyaW5nW10gPSB1bmlxKFxuICAgIG5ld0ZpbHRlcnMucmVkdWNlKChhY2N1LCBmKSA9PiBbLi4uYWNjdSwgLi4uZi5kYXRhSWRdLCBbXSBhcyBzdHJpbmdbXSlcbiAgKTtcbiAgY29uc3QgZGF0YUVtcHR5ID0gbmV3RGF0YUlkcy5sZW5ndGggPCAxO1xuXG4gIGxldCBuZXdMYXllcnMgPSAhZGF0YUVtcHR5XG4gICAgPyBtZXJnZWRTdGF0ZS5sYXllcnMuZmlsdGVyKGwgPT4gbC5jb25maWcuZGF0YUlkICYmIG5ld0RhdGFJZHMuaW5jbHVkZXMobC5jb25maWcuZGF0YUlkKSlcbiAgICA6IFtdO1xuXG4gIGNvbnN0IG5ld0RhdGFFbnRyaWVzID0gbmV3RGF0YUlkcy5yZWR1Y2UoXG4gICAgKGFjY3UsIGlkKSA9PiAoe1xuICAgICAgLi4uYWNjdSxcbiAgICAgIFtpZF06IG1lcmdlZFN0YXRlLmRhdGFzZXRzW2lkXVxuICAgIH0pLFxuICAgIHt9XG4gICk7XG5cbiAgaWYgKCFuZXdMYXllcnMubGVuZ3RoICYmIChvcHRpb25zIHx8IHt9KS5hdXRvQ3JlYXRlTGF5ZXJzICE9PSBmYWxzZSkge1xuICAgIC8vIG5vIGxheWVyIG1lcmdlZCwgZmluZCBkZWZhdWx0c1xuICAgIGNvbnN0IHJlc3VsdCA9IGFkZERlZmF1bHRMYXllcnMobWVyZ2VkU3RhdGUsIG5ld0RhdGFFbnRyaWVzKTtcbiAgICBtZXJnZWRTdGF0ZSA9IHJlc3VsdC5zdGF0ZTtcbiAgICBuZXdMYXllcnMgPSByZXN1bHQubmV3TGF5ZXJzO1xuICB9XG5cbiAgaWYgKG1lcmdlZFN0YXRlLnNwbGl0TWFwcy5sZW5ndGgpIHtcbiAgICAvLyBpZiBtYXAgaXMgc3BsaXQsIGFkZCBuZXcgbGF5ZXJzIHRvIHNwbGl0TWFwc1xuICAgIG5ld0xheWVycyA9IG1lcmdlZFN0YXRlLmxheWVycy5maWx0ZXIoXG4gICAgICBsID0+IGwuY29uZmlnLmRhdGFJZCAmJiBuZXdEYXRhSWRzLmluY2x1ZGVzKGwuY29uZmlnLmRhdGFJZClcbiAgICApO1xuICAgIG1lcmdlZFN0YXRlID0ge1xuICAgICAgLi4ubWVyZ2VkU3RhdGUsXG4gICAgICBzcGxpdE1hcHM6IGFkZE5ld0xheWVyc1RvU3BsaXRNYXAobWVyZ2VkU3RhdGUuc3BsaXRNYXBzLCBuZXdMYXllcnMpXG4gICAgfTtcbiAgfVxuXG4gIG1lcmdlZFN0YXRlID0gbWVyZ2VMYXllclZpc0NvbmZpZ0Zvck5ld0RhdGFzZXRzKFxuICAgIG1lcmdlZFN0YXRlLFxuICAgIGxheWVyVmlzQ29uZmlnRnJvbUFkZERhdGFPcHRpb25zKG9wdGlvbnMpLFxuICAgIG5ld0RhdGFJZHNcbiAgKTtcblxuICAvLyBpZiBubyB0b29sdGlwcyBtZXJnZWQgYWRkIGRlZmF1bHQgdG9vbHRpcHNcbiAgbmV3RGF0YUlkcy5mb3JFYWNoKGRhdGFJZCA9PiB7XG4gICAgY29uc3QgdG9vbHRpcEZpZWxkcyA9IG1lcmdlZFN0YXRlLmludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAuY29uZmlnLmZpZWxkc1RvU2hvd1tkYXRhSWRdO1xuICAgIC8vIGxvYWRpbmcgZGF0YXNldDogYXV0b0NyZWF0ZVRvb2x0aXBzIGlzIGZhbHNlIGFuZCB3ZSBkb24ndCB3YW50IHRvIHJ1biBhZGREZWZhdWx0VG9vbHRpcHMgd2hlbiB0b29sdGlwRmllbGRzIGlzIGVtcHR5XG4gICAgaWYgKFxuICAgICAgb3B0aW9ucz8uYXV0b0NyZWF0ZVRvb2x0aXBzICE9PSBmYWxzZSAmJlxuICAgICAgKCFBcnJheS5pc0FycmF5KHRvb2x0aXBGaWVsZHMpIHx8ICF0b29sdGlwRmllbGRzLmxlbmd0aClcbiAgICApIHtcbiAgICAgIC8vIGFkZGluZyBkYXRhc2V0OiBhdXRvQ3JlYXRlVG9vbHRpcHMgaXMgdHJ1ZVxuICAgICAgbWVyZ2VkU3RhdGUgPSBhZGREZWZhdWx0VG9vbHRpcHMobWVyZ2VkU3RhdGUsIG5ld0RhdGFFbnRyaWVzW2RhdGFJZF0pO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgdXBkYXRlZERhdGFzZXRzID0gZGF0YUVtcHR5XG4gICAgPyBPYmplY3Qua2V5cyhtZXJnZWRTdGF0ZS5kYXRhc2V0cylcbiAgICA6IHVuaXEoT2JqZWN0LmtleXMobmV3RGF0YUVudHJpZXMpLmNvbmNhdChkYXRhc2V0RmlsdGVyZWQpKTtcblxuICBsZXQgdXBkYXRlZFN0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG1lcmdlZFN0YXRlLCB1cGRhdGVkRGF0YXNldHMsIHVuZGVmaW5lZCk7XG5cbiAgLy8gUG9seWdvbiBwZXItbGF5ZXIgaW5kZXhlcyBuZWVkIGNlbnRyb2lkcyAvIGRhdGFUb0ZlYXR1cmUsIHdoaWNoIGFyZSBvbmx5XG4gIC8vIHBvcHVsYXRlZCBieSB0aGUgbGF5ZXItZGF0YSBwYXNzIGFib3ZlLiBTa2lwIGRhdGFzZXRzIHdob3NlIHRhcmdldGVkIGxheWVyc1xuICAvLyBhbHJlYWR5IGZpbHRlcmVkIGZyb20gY29sdW1ucyAoZS5nLiBsYXQvbG5nIHBvaW50cykuXG4gIGNvbnN0IHBvbHlnb25GaWx0ZXJzID0gdXBkYXRlZFN0YXRlLmZpbHRlcnMuZmlsdGVyKFxuICAgIGYgPT4gZi50eXBlID09PSBGSUxURVJfVFlQRVMucG9seWdvbiAmJiBmLmVuYWJsZWQgIT09IGZhbHNlXG4gICk7XG4gIGNvbnN0IHBvbHlnb25NZXRhRGF0YUlkcyA9IHVuaXEoXG4gICAgdXBkYXRlZFN0YXRlLmxheWVyc1xuICAgICAgLmZpbHRlcihcbiAgICAgICAgbGF5ZXIgPT5cbiAgICAgICAgICBwb2x5Z29uRmlsdGVyRGVwZW5kc09uTGF5ZXJNZXRhKGxheWVyKSAmJlxuICAgICAgICAgIHBvbHlnb25GaWx0ZXJzLnNvbWUoZiA9PiBmLmxheWVySWQ/LmluY2x1ZGVzKGxheWVyLmlkKSlcbiAgICAgIClcbiAgICAgIC5tYXAobGF5ZXIgPT4gbGF5ZXIuY29uZmlnLmRhdGFJZClcbiAgICAgIC5maWx0ZXIoKGlkKTogaWQgaXMgc3RyaW5nID0+IEJvb2xlYW4oaWQpICYmIHVwZGF0ZWREYXRhc2V0cy5pbmNsdWRlcyhpZCkpXG4gICk7XG4gIGlmIChwb2x5Z29uTWV0YURhdGFJZHMubGVuZ3RoKSB7XG4gICAgdXBkYXRlZFN0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKFxuICAgICAge1xuICAgICAgICAuLi51cGRhdGVkU3RhdGUsXG4gICAgICAgIGRhdGFzZXRzOiBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKFxuICAgICAgICAgIHBvbHlnb25NZXRhRGF0YUlkcyxcbiAgICAgICAgICB1cGRhdGVkU3RhdGUuZGF0YXNldHMsXG4gICAgICAgICAgdXBkYXRlZFN0YXRlLmZpbHRlcnMsXG4gICAgICAgICAgdXBkYXRlZFN0YXRlLmxheWVyc1xuICAgICAgICApXG4gICAgICB9LFxuICAgICAgcG9seWdvbk1ldGFEYXRhSWRzXG4gICAgKTtcbiAgfVxuXG4gIC8vIHJlZ2lzdGVyIGxheWVyIGFuaW1hdGlvbiBkb21haW4sXG4gIC8vIG5lZWQgdG8gYmUgY2FsbGVkIGFmdGVyIGxheWVyIGRhdGEgaXMgY2FsY3VsYXRlZFxuICB1cGRhdGVkU3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4odXBkYXRlZFN0YXRlKTtcblxuICAvLyB0cnkgdG8gcHJvY2VzcyBsYXllck1lcmdlcnMgYWZ0ZXIgZGF0YXNldCtkYXRhc2V0TWVyZ2Vyc1xuICB1cGRhdGVkU3RhdGUgPVxuICAgIGxheWVyTWVyZ2VycyAmJiBsYXllck1lcmdlcnMubGVuZ3RoID4gMFxuICAgICAgPyBhcHBseU1lcmdlcnNVcGRhdGVyKHVwZGF0ZWRTdGF0ZSwge1xuICAgICAgICAgIG1lcmdlcnM6IGxheWVyTWVyZ2VycyxcbiAgICAgICAgICBwb3N0TWVyZ2VyUGF5bG9hZDogey4uLnBvc3RNZXJnZXJQYXlsb2FkLCBsYXllck1lcmdlcnM6IFtdfVxuICAgICAgICB9KVxuICAgICAgOiB1cGRhdGVkU3RhdGU7XG5cbiAgLy8gY2VudGVyIHRoZSBtYXAgb25jZSB0aGUgZGF0YXNldCBpcyBjcmVhdGVkXG4gIGlmIChuZXdMYXllcnMubGVuZ3RoICYmIChvcHRpb25zIHx8IHt9KS5jZW50ZXJNYXApIHtcbiAgICBjb25zdCBib3VuZHMgPSBmaW5kTWFwQm91bmRzKG5ld0xheWVycyk7XG4gICAgaWYgKGJvdW5kcykge1xuICAgICAgY29uc3QgcGFkZGluZyA9IG9wdGlvbnM/LnBhZGRpbmc7XG4gICAgICBjb25zdCBmaXRCb3VuZHNUYXNrID0gQUNUSU9OX1RBU0tfRklUX0JPVU5EUygpLm1hcCgoKSA9PiB7XG4gICAgICAgIHJldHVybiBmaXRNYXBCb3VuZHMoYm91bmRzLCBwYWRkaW5nKTtcbiAgICAgIH0pO1xuICAgICAgdXBkYXRlZFN0YXRlID0gd2l0aFRhc2sodXBkYXRlZFN0YXRlLCBmaXRCb3VuZHNUYXNrKTtcbiAgICB9XG4gIH1cblxuICAvLyBuZWVkIHRvIGNlbnRlciBtYXAgaGVyZSBpZiB3ZSBoYXZlIG5ldyBsYXllcnNcbiAgcmV0dXJuIHVwZGF0ZWRTdGF0ZTtcbn1cblxuLyoqXG4gKiBSZW5hbWUgYW4gZXhpc3RpbmcgZGF0YXNldCBpbiBgdmlzU3RhdGVgXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuYW1lRGF0YXNldFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUmVuYW1lRGF0YXNldFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgcmV0dXJuIHVwZGF0ZURhdGFzZXRQcm9wc1VwZGF0ZXIoc3RhdGUsIHtkYXRhSWQ6IGFjdGlvbi5kYXRhSWQsIHByb3BzOiB7bGFiZWw6IGFjdGlvbi5sYWJlbH19KTtcbn1cblxuY29uc3QgQUxMT1dFRF9VUERBVEVfREFUQVNFVF9QUk9QUyA9IFsnbGFiZWwnLCAnY29sb3InLCAnbWV0YWRhdGEnXTtcblxuLyoqXG4gKiBWYWxpZGF0ZXMgcHJvcGVydGllcyBiZWZvcmUgdXBkYXRpbmcgdGhlIGRhdGFzZXQuXG4gKiBNYWtlcyBzdXJlIGVhY2ggcHJvcGVydHkgaXMgaW4gdGhlIGFsbG93ZWQgbGlzdFxuICogTWFrZXMgc3VyZSBjb2xvciB2YWx1ZSBpcyBSR0JcbiAqIFBlcmZvcm1zIGRlZXAgbWVyZ2Ugd2hlbiB1cGRhdGluZyBtZXRhZGF0YVxuICovXG5jb25zdCB2YWxpZGF0ZURhdGFzZXRVcGRhdGVQcm9wcyA9IChwcm9wcywgZGF0YXNldCkgPT4ge1xuICBjb25zdCB2YWxpZGF0ZWRQcm9wcyA9IE9iamVjdC5lbnRyaWVzKHByb3BzKS5yZWR1Y2UoKGFjYywgZW50cnkpID0+IHtcbiAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBlbnRyeTtcbiAgICAvLyBpcyBpdCBhbGxvd2VkID9cbiAgICBpZiAoIUFMTE9XRURfVVBEQVRFX0RBVEFTRVRfUFJPUFMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9XG5cbiAgICAvLyBpZiB3ZSBhcmUgYWRkaW5nIGEgY29sb3IgYnV0IGl0IGlzIG5vdCBSR0Igd2UgZG9uJ3QgYWNjZXB0IHRoZSB2YWx1ZVxuICAgIC8vIGluIHRoZSBmdXR1cmUgYXMgd2UgYWRkIG1vcmUgcHJvcHMgd2Ugc2hvdWxkIGNoYW5nZSB0aGlzIGlmIGludG8gYSBzd2l0Y2hcbiAgICBpZiAoa2V5ID09PSAnY29sb3InICYmICFpc1JnYkNvbG9yKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9XG5cbiAgICAvLyBkbyB3ZSBuZWVkIGRlZXAgbWVyZ2UgP1xuICAgIHJldHVybiB7Li4uYWNjLCBba2V5XTogaXNQbGFpbk9iamVjdCh2YWx1ZSkgPyBkZWVwbWVyZ2UoZGF0YXNldFtrZXldIHx8IHt9LCB2YWx1ZSkgOiB2YWx1ZX07XG4gIH0sIHt9KTtcblxuICByZXR1cm4gdmFsaWRhdGVkUHJvcHM7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBEYXRhc2V0IHByb3BzIChsYWJlbCwgY29sb3IsIG1ldGEpLiBEbyBub3QgdXNlIHRvIHVwZGF0ZSBkYXRhIG9yIGFueSByZWxhdGVkIHByb3BlcnRpZXNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZURhdGFzZXRQcm9wc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2RhdGFJZCwgcHJvcHN9ID0gYWN0aW9uO1xuICBjb25zdCB7ZGF0YXNldHN9ID0gc3RhdGU7XG4gIGNvbnN0IGV4aXN0aW5nID0gZGF0YXNldHNbZGF0YUlkXTtcblxuICBpZiAoZXhpc3RpbmcpIHtcbiAgICBjb25zdCB2YWxpZGF0ZWRQcm9wcyA9IHZhbGlkYXRlRGF0YXNldFVwZGF0ZVByb3BzKHByb3BzLCBleGlzdGluZyk7XG4gICAgLy8gIHZhbGlkYXRlIHByb3BzOiBqdXN0IGNvbG9yIGZvciBub3dcbiAgICAvLyAgd2Ugb25seSBhbGxvdyBsYWJlbCwgY29sb3IgYW5kIG1ldGEgdG8gYmUgdXBkYXRlZFxuICAgIC8vIGNvbnN0IG5ld1RhYmxlID0gY29weVRhYmxlQW5kVXBkYXRlKGV4aXN0aW5nLCB2YWxpZGF0ZWRQcm9wcyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgZGF0YXNldHM6IHtcbiAgICAgICAgLi4uZGF0YXNldHMsXG4gICAgICAgIFtkYXRhSWRdOiBjb3B5VGFibGVBbmRVcGRhdGUoZXhpc3RpbmcsIHZhbGlkYXRlZFByb3BzKVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbi8qKlxuICogV2hlbiBhIHVzZXIgY2xpY2tzIG9uIHRoZSBzcGVjaWZpYyBtYXAgY2xvc2luZyBpY29uXG4gKiB0aGUgYXBwbGljYXRpb24gd2lsbCBjbG9zZSB0aGUgc2VsZWN0ZWQgbWFwXG4gKiBhbmQgd2lsbCBtZXJnZSB0aGUgcmVtYWluaW5nIG9uZSB3aXRoIHRoZSBnbG9iYWwgc3RhdGVcbiAqIFRPRE86IGkgdGhpbmsgaW4gdGhlIGZ1dHVyZSB0aGlzIGFjdGlvbiBzaG91bGQgYmUgY2FsbGVkIG1lcmdlIG1hcCBsYXllcnMgd2l0aCBnbG9iYWwgc2V0dGluZ3NcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZSBgdmlzU3RhdGVgXG4gKiBAcGFyYW0ge09iamVjdH0gYWN0aW9uIGFjdGlvblxuICogQHJldHVybnMge09iamVjdH0gbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbG9zZVNwZWNpZmljTWFwQXRJbmRleDxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBNYXBTdGF0ZUFjdGlvbnMuVG9nZ2xlU3BsaXRNYXBVcGRhdGVyQWN0aW9uXG4pOiBTIHtcbiAgLy8gcmV0cmlldmUgbGF5ZXJzIG1ldGEgZGF0YSBmcm9tIHRoZSByZW1haW5pbmcgbWFwIHRoYXQgd2UgbmVlZCB0byBrZWVwXG4gIGNvbnN0IGluZGV4VG9SZXRyaWV2ZSA9IDEgLSBhY3Rpb24ucGF5bG9hZDtcbiAgY29uc3QgbWFwTGF5ZXJzID0gc3RhdGUuc3BsaXRNYXBzW2luZGV4VG9SZXRyaWV2ZV0/LmxheWVycztcbiAgY29uc3Qge2xheWVyc30gPSBzdGF0ZTtcblxuICAvLyB1cGRhdGUgbGF5ZXIgdmlzaWJpbGl0eVxuICBjb25zdCBuZXdMYXllcnMgPSBsYXllcnMubWFwKGxheWVyID0+XG4gICAgbWFwTGF5ZXJzICYmICFtYXBMYXllcnNbbGF5ZXIuaWRdICYmIGxheWVyLmNvbmZpZy5pc1Zpc2libGVcbiAgICAgID8gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICAgIC8vIGlmIGxheWVyLmlkIGlzIG5vdCBpbiBtYXBMYXllcnMsIGl0IHNob3VsZCBiZSBpblZpc2libGVcbiAgICAgICAgICBpc1Zpc2libGU6IGZhbHNlXG4gICAgICAgIH0pXG4gICAgICA6IGxheWVyXG4gICk7XG5cbiAgLy8gZGVsZXRlIG1hcFxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogbmV3TGF5ZXJzLFxuICAgIHNwbGl0TWFwczogW11cbiAgfTtcbn1cblxuLyoqXG4gKiBUcmlnZ2VyIGZpbGUgbG9hZGluZyBkaXNwYXRjaCBgYWRkRGF0YVRvTWFwYCBpZiBzdWNjZWVkLCBvciBgbG9hZEZpbGVzRXJyYCBpZiBmYWlsZWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBsb2FkRmlsZXNVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxvYWRGaWxlc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2ZpbGVzLCBvbkZpbmlzaCA9IGxvYWRGaWxlc1N1Y2Nlc3N9ID0gYWN0aW9uO1xuICBpZiAoIWZpbGVzLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGZpbGVMb2FkaW5nUHJvZ3Jlc3MgPSBBcnJheS5mcm9tKGZpbGVzKS5yZWR1Y2UoXG4gICAgKGFjY3UsIGYsIGkpID0+IG1lcmdlXyhpbml0aWFsRmlsZUxvYWRpbmdQcm9ncmVzcyhmLCBpKSkoYWNjdSksXG4gICAge31cbiAgKTtcblxuICBjb25zdCBmaWxlTG9hZGluZyA9IHtcbiAgICBmaWxlQ2FjaGU6IFtdLFxuICAgIGZpbGVzVG9Mb2FkOiBmaWxlcyxcbiAgICBvbkZpbmlzaFxuICB9O1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IG1lcmdlXyh7ZmlsZUxvYWRpbmdQcm9ncmVzcywgZmlsZUxvYWRpbmd9KShzdGF0ZSk7XG5cbiAgcmV0dXJuIGxvYWROZXh0RmlsZVVwZGF0ZXIobmV4dFN0YXRlKTtcbn07XG5cbi8qKlxuICogU3VjZXNzZnVsbHkgbG9hZGVkIG9uZSBmaWxlLCBtb3ZlIG9uIHRvIHRoZSBuZXh0IG9uZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRGaWxlU3RlcFN1Y2Nlc3NVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxvYWRGaWxlU3RlcFN1Y2Nlc3NBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgaWYgKCFzdGF0ZS5maWxlTG9hZGluZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7ZmlsZU5hbWUsIGZpbGVDYWNoZX0gPSBhY3Rpb247XG4gIGNvbnN0IHtmaWxlc1RvTG9hZCwgb25GaW5pc2h9ID0gc3RhdGUuZmlsZUxvYWRpbmc7XG4gIGNvbnN0IHN0YXRlV2l0aFByb2dyZXNzID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtcbiAgICBmaWxlTmFtZSxcbiAgICBwcm9ncmVzczoge3BlcmNlbnQ6IDEsIG1lc3NhZ2U6ICdEb25lJ31cbiAgfSk7XG5cbiAgLy8gc2F2ZSBwcm9jZXNzZWQgZmlsZSB0byBmaWxlQ2FjaGVcbiAgY29uc3Qgc3RhdGVXaXRoQ2FjaGUgPSBwaWNrXygnZmlsZUxvYWRpbmcnKShtZXJnZV8oe2ZpbGVDYWNoZX0pKShzdGF0ZVdpdGhQcm9ncmVzcyk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHN0YXRlV2l0aENhY2hlLFxuICAgIERFTEFZX1RBU0soMjAwKS5tYXAoZmlsZXNUb0xvYWQubGVuZ3RoID8gbG9hZE5leHRGaWxlIDogKCkgPT4gb25GaW5pc2goZmlsZUNhY2hlKSlcbiAgKTtcbn1cblxuLy8gd2l0aFRhc2s8VD4oc3RhdGU6IFQsIHRhc2s6IGFueSk6IFRcblxuLyoqXG4gKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWROZXh0RmlsZVVwZGF0ZXIoc3RhdGU6IFZpc1N0YXRlKTogVmlzU3RhdGUge1xuICBpZiAoIXN0YXRlLmZpbGVMb2FkaW5nKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHtmaWxlc1RvTG9hZH0gPSBzdGF0ZS5maWxlTG9hZGluZztcbiAgY29uc3QgW2ZpbGUsIC4uLnJlbWFpbmluZ0ZpbGVzVG9Mb2FkXSA9IGZpbGVzVG9Mb2FkO1xuXG4gIC8vIHNhdmUgZmlsZXNUb0xvYWQgdG8gc3RhdGVcbiAgY29uc3QgbmV4dFN0YXRlID0gcGlja18oJ2ZpbGVMb2FkaW5nJykobWVyZ2VfKHtmaWxlc1RvTG9hZDogcmVtYWluaW5nRmlsZXNUb0xvYWR9KSkoc3RhdGUpO1xuXG4gIGNvbnN0IHN0YXRlV2l0aFByb2dyZXNzID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIobmV4dFN0YXRlLCB7XG4gICAgZmlsZU5hbWU6IGZpbGUubmFtZSxcbiAgICBwcm9ncmVzczoge3BlcmNlbnQ6IDAsIG1lc3NhZ2U6ICdsb2FkaW5nLi4uJ31cbiAgfSk7XG5cbiAgY29uc3Qge2xvYWRlcnMsIGxvYWRPcHRpb25zfSA9IHN0YXRlO1xuICByZXR1cm4gd2l0aFRhc2soXG4gICAgc3RhdGVXaXRoUHJvZ3Jlc3MsXG4gICAgbWFrZUxvYWRGaWxlVGFzayhcbiAgICAgIGZpbGUsXG4gICAgICBuZXh0U3RhdGUuZmlsZUxvYWRpbmcgJiYgbmV4dFN0YXRlLmZpbGVMb2FkaW5nLmZpbGVDYWNoZSxcbiAgICAgIGxvYWRlcnMsXG4gICAgICBsb2FkT3B0aW9uc1xuICAgIClcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VMb2FkRmlsZVRhc2soZmlsZSwgZmlsZUNhY2hlLCBsb2FkZXJzOiBMb2FkZXJbXSA9IFtdLCBsb2FkT3B0aW9ucyA9IHt9KSB7XG4gIHJldHVybiBMT0FEX0ZJTEVfVEFTSyh7ZmlsZSwgZmlsZUNhY2hlLCBsb2FkZXJzLCBsb2FkT3B0aW9uc30pLmJpbWFwKFxuICAgIC8vIHByZXR0aWVyIGlnbm9yZVxuICAgIC8vIHN1Y2Nlc3NcbiAgICBnZW4gPT5cbiAgICAgIG5leHRGaWxlQmF0Y2goe1xuICAgICAgICBnZW4sXG4gICAgICAgIGZpbGVOYW1lOiBmaWxlLm5hbWUsXG4gICAgICAgIG9uRmluaXNoOiByZXN1bHQgPT5cbiAgICAgICAgICBwcm9jZXNzRmlsZUNvbnRlbnQoe1xuICAgICAgICAgICAgY29udGVudDogcmVzdWx0LFxuICAgICAgICAgICAgZmlsZUNhY2hlXG4gICAgICAgICAgfSlcbiAgICAgIH0pLFxuXG4gICAgLy8gZXJyb3JcbiAgICBlcnIgPT4gbG9hZEZpbGVzRXJyKGZpbGUubmFtZSwgZXJyKVxuICApO1xufVxuXG4vKipcbiAqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Qcm9jZXNzRmlsZUNvbnRlbnRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtjb250ZW50LCBmaWxlQ2FjaGV9ID0gYWN0aW9uLnBheWxvYWQ7XG5cbiAgY29uc3Qgc3RhdGVXaXRoUHJvZ3Jlc3MgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihzdGF0ZSwge1xuICAgIGZpbGVOYW1lOiBjb250ZW50LmZpbGVOYW1lLFxuICAgIHByb2dyZXNzOiB7cGVyY2VudDogMSwgbWVzc2FnZTogJ3Byb2Nlc3NpbmcuLi4nfVxuICB9KTtcblxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgc3RhdGVXaXRoUHJvZ3Jlc3MsXG4gICAgUFJPQ0VTU19GSUxFX0RBVEEoe2NvbnRlbnQsIGZpbGVDYWNoZX0pLmJpbWFwKFxuICAgICAgcmVzdWx0ID0+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+XG4gICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIGNvbnZlcnQgZHJhd24gZ2VvbWV0cnkgdG8gYSBsYXllcjogJHttZXNzYWdlfWAsXG4gICAgICAgICAgICBpZDogJ2NvbnZlcnQtZWRpdG9yLWZlYXR1cmVzJ1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgY29uc3QgY2xlYXJlZFN0YXRlOiBWaXNTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIGZlYXR1cmVzOiBbXSxcbiAgICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbCxcbiAgICAgIG1vZGU6IEVESVRPUl9NT0RFUy5FRElUXG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGxhYmVsSWQgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA5MCkgKyAxMDtcblxuICByZXR1cm4gdXBkYXRlVmlzRGF0YVVwZGF0ZXIoY2xlYXJlZFN0YXRlLCB7XG4gICAgZGF0YXNldHM6IHtcbiAgICAgIGluZm86IHtcbiAgICAgICAgaWQ6IGBkcmF3bi1nZW9tZXRyeS0ke2dlbmVyYXRlSGFzaElkKDYpfWAsXG4gICAgICAgIGxhYmVsOiBgRHJhd24gR2VvbWV0cnkgJHtsYWJlbElkfWBcbiAgICAgIH0sXG4gICAgICBkYXRhXG4gICAgfSxcbiAgICBvcHRpb25zOiB7XG4gICAgICBrZWVwRXhpc3RpbmdDb25maWc6IHRydWUsXG4gICAgICBjZW50ZXJNYXA6IGZhbHNlLFxuICAgICAgYXV0b0NyZWF0ZUxheWVyczogdHJ1ZVxuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR4LCBjb25maWd9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ0FjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBvbGRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG4gIGlmICghb2xkRmlsdGVyKSB7XG4gICAgQ29uc29sZS5lcnJvcihgZmlsdGVycy4ke2lkeH0gaXMgdW5kZWZpbmVkYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChvbGRGaWx0ZXIudHlwZSAhPT0gRklMVEVSX1RZUEVTLnRpbWVSYW5nZSkge1xuICAgIENvbnNvbGUuZXJyb3IoXG4gICAgICBgc2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZyBjYW4gb25seSBiZSBjYWxsZWQgdG8gdXBkYXRlIGEgdGltZSBmaWx0ZXIuIGNoZWNrIGZpbHRlci50eXBlID09PSAndGltZVJhbmdlJ2BcbiAgICApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHVwZGF0ZXMgPSBjaGVja1RpbWVDb25maWdBcmdzKGNvbmZpZyk7XG5cbiAgcmV0dXJuIHBpY2tfKCdmaWx0ZXJzJykoc3dhcF8obWVyZ2VfKHVwZGF0ZXMpKG9sZEZpbHRlcikpKShzdGF0ZSk7XG59XG5cbmZ1bmN0aW9uIGNoZWNrVGltZUNvbmZpZ0FyZ3MoY29uZmlnKSB7XG4gIGNvbnN0IGFsbG93ZWQgPSBbJ3RpbWVGb3JtYXQnLCAndGltZXpvbmUnXTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGNvbmZpZykucmVkdWNlKChhY2N1LCBwcm9wKSA9PiB7XG4gICAgaWYgKCFhbGxvd2VkLmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICBDb25zb2xlLmVycm9yKFxuICAgICAgICBgc2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnIHRha2VzIHRpbWVGb3JtYXQgYW5kL29yIHRpbWV6b25lIGFzIG9wdGlvbnMsIGZvdW5kICR7cHJvcH1gXG4gICAgICApO1xuICAgICAgcmV0dXJuIGFjY3U7XG4gICAgfVxuXG4gICAgLy8gaGVyZSB3ZSBhcmUgTk9UIGNoZWNraW5nIGlmIHRpbWV6b25lIG9yIHRpbWVGb3JtYXQgaW5wdXQgaXMgdmFsaWRcbiAgICBhY2N1W3Byb3BdID0gY29uZmlnW3Byb3BdO1xuICAgIHJldHVybiBhY2N1O1xuICB9LCB7fSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGVkaXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7Y29uZmlnfTogVmlzU3RhdGVBY3Rpb25zLlNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZ0FjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIWNvbmZpZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB1cGRhdGVzID0gY2hlY2tUaW1lQ29uZmlnQXJncyhjb25maWcpO1xuICByZXR1cm4gcGlja18oJ2FuaW1hdGlvbkNvbmZpZycpKG1lcmdlXyh1cGRhdGVzKSkoc3RhdGUpO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBlZGl0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZVVwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZUFjdGlvblxuKTogUyB7XG4gIGNvbnN0IHtldmVudCwgbGF5ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCB7aWQ6IGRlY2tnbExheWVySWQsIGNvdW50fSA9IGV2ZW50O1xuICBpZiAoIWxheWVyKSB7XG4gICAgQ29uc29sZS53YXJuKGBsYXllckZpbHRlcmVkSXRlbXMgbGF5ZXIgZG9lc250IGV4aXN0c2ApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAobGF5ZXIuZmlsdGVyZWRJdGVtQ291bnQ/LltkZWNrZ2xMYXllcklkXSA9PT0gY291bnQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsYXllci5maWx0ZXJlZEl0ZW1Db3VudCA9IHtcbiAgICAuLi5sYXllci5maWx0ZXJlZEl0ZW1Db3VudCxcbiAgICBbZGVja2dsTGF5ZXJJZF06IGNvdW50XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IHN3YXBfKGxheWVyKShzdGF0ZS5sYXllcnMpXG4gIH07XG59XG5cbi8qKlxuICogVXBkYXRlIFdNUyBmZWF0dXJlIGluZm8gYW5kIHBpbiB0b29sdGlwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3bXNGZWF0dXJlSW5mb1VwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLldNU0ZlYXR1cmVJbmZvQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2xheWVyLCBmZWF0dXJlSW5mbywgY29vcmRpbmF0ZX0gPSBhY3Rpb247XG4gIGlmICghbGF5ZXIpIHtcbiAgICBjb25zb2xlLndhcm4oYFdNUyBmZWF0dXJlIGluZm8gbGF5ZXIgZG9lc24ndCBleGlzdGApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIENyZWF0ZSBhIGNsaWNrZWQgb2JqZWN0IHNpbWlsYXIgdG8gbGF5ZXJDbGlja1VwZGF0ZXIgdG8gcGluIHRoZSB0b29sdGlwXG4gIGNvbnN0IGNsaWNrZWQgPSBmZWF0dXJlSW5mb1xuICAgID8ge1xuICAgICAgICBwaWNrZWQ6IHRydWUsXG4gICAgICAgIG9iamVjdDoge1xuICAgICAgICAgIHdtc0ZlYXR1cmVJbmZvOiBmZWF0dXJlSW5mb1xuICAgICAgICB9LFxuICAgICAgICBjb29yZGluYXRlOiBjb29yZGluYXRlIHx8IFswLCAwXSxcbiAgICAgICAgbGF5ZXI6IHtcbiAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgaWR4OiBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gbGF5ZXIuaWQpLFxuICAgICAgICAgICAgaWQ6IGxheWVyLmlkXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgOiBudWxsO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgY2xpY2tlZFxuICB9O1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LXN0YXRlbWVudHNcbmV4cG9ydCBmdW5jdGlvbiBzeW5jVGltZUZpbHRlcldpdGhMYXllclRpbWVsaW5lVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU3luY1RpbWVGaWx0ZXJXaXRoTGF5ZXJUaW1lbGluZUFjdGlvblxuKTogUyB7XG4gIGNvbnN0IHtpZHg6IGZpbHRlcklkeCwgZW5hYmxlID0gZmFsc2V9ID0gYWN0aW9uO1xuXG4gIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGxldCBuZXdGaWx0ZXIgPSBmaWx0ZXI7XG5cbiAgLy8gaWYgd2UgZW5hYmxlIHN5bmMgd2UgYXJlIGdvaW5nIHRvIG1lcmdlIGZpbHRlciBhbmQgYW5pbWF0aW9uQ29uZmlnIGRvbWFpbnMgYW5kIHN0b3JlIGludG8gZmlsdGVyLmRvbWFpblxuICBpZiAoZW5hYmxlKSB7XG4gICAgY29uc3QgYW5pbWF0YWJsZUxheWVycyA9IGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzKG5ld1N0YXRlLmxheWVycyk7XG4gICAgLy8gaWYgbm8gYW5pbWF0YWJsZUxheWVycyBhcmUgcHJlc2VudCB3ZSBzaW1wbHkgcmV0dXJuXG4gICAgaWYgKCFhbmltYXRhYmxlTGF5ZXJzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG5ld1N0YXRlO1xuICAgIH1cblxuICAgIGNvbnN0IGludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMgPSBnZXRJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzKGFuaW1hdGFibGVMYXllcnMpO1xuICAgIGNvbnN0IGhhc0ludGVydmFsQmFzZWRBbmltYXRpb25MYXllciA9IEJvb2xlYW4oaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycy5sZW5ndGgpO1xuXG4gICAgY29uc3QgbmV3RmlsdGVyRG9tYWluID0gbWVyZ2VUaW1lRG9tYWlucyhbZmlsdGVyLmRvbWFpbiwgbmV3U3RhdGUuYW5pbWF0aW9uQ29uZmlnLmRvbWFpbl0pO1xuXG4gICAgLy8gd2Ugb25seSB1cGRhdGUgYW5pbWF0aW9uV2luZG93IGlmIHdlIGhhdmUgaW50ZXJ2YWwgYmFzZWQgYW5pbWF0aW9uIGxheWVycyB3aXRoIGRlZmluZWQgaW50ZXJ2YWxzIGFuZCB0aGUgY3VycmVudCBmaWx0ZXIgYW5pbWF0aW9uIHdpbmRvdyBpcyBub3QgaW50ZXJ2YWxcbiAgICBpZiAoaGFzSW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVyKSB7XG4gICAgICBpZiAoZmlsdGVyLmFuaW1hdGlvbldpbmRvdyAhPT0gQU5JTUFUSU9OX1dJTkRPVy5pbnRlcnZhbCkge1xuICAgICAgICBuZXdTdGF0ZSA9IHNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgICAgICBpZDogZmlsdGVyLmlkLFxuICAgICAgICAgIGFuaW1hdGlvbldpbmRvdzogQU5JTUFUSU9OX1dJTkRPVy5pbnRlcnZhbFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgbmV3RmlsdGVyID0gbmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICAgICAgLy8gYWRqdXN0IHRpbWUgZmlsdGVyIGludGVydmFsXG4gICAgICBuZXdGaWx0ZXIgPSBhZGp1c3RUaW1lRmlsdGVySW50ZXJ2YWwobmV3U3RhdGUsIG5ld0ZpbHRlcik7XG5cbiAgICAgIC8vIHJlcGxhY2UgZmlsdGVyIGluIHN0YXRlIHdpdGggbmV3RmlsdGVyXG4gICAgICBuZXdTdGF0ZSA9IHtcbiAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICAgIGZpbHRlcnM6IHN3YXBfPEZpbHRlcj4obmV3RmlsdGVyKShuZXdTdGF0ZS5maWx0ZXJzKVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gICAgLy8gYWRqdXN0IHZhbHVlIGJhc2VkIG9uIG5ldyBkb21haW5cbiAgICBjb25zdCBuZXdGaWx0ZXJWYWx1ZSA9IGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4oXG4gICAgICBuZXdGaWx0ZXIuYW5pbWF0aW9uV2luZG93ID09PSBBTklNQVRJT05fV0lORE9XLmludGVydmFsXG4gICAgICAgID8gW25ld0ZpbHRlckRvbWFpblswXSwgbmV3RmlsdGVyRG9tYWluWzBdXVxuICAgICAgICA6IG5ld0ZpbHRlckRvbWFpbixcbiAgICAgIHsuLi5uZXdGaWx0ZXIsIGRvbWFpbjogbmV3RmlsdGVyRG9tYWlufVxuICAgICk7XG5cbiAgICBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIGlkeDogZmlsdGVySWR4LFxuICAgICAgcHJvcDogJ3ZhbHVlJyxcbiAgICAgIHZhbHVlOiBuZXdGaWx0ZXJWYWx1ZVxuICAgIH0pO1xuXG4gICAgbmV3RmlsdGVyID0ge1xuICAgICAgLi4uKG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXIpLFxuICAgICAgc3luY2VkV2l0aExheWVyVGltZWxpbmU6IHRydWVcbiAgICB9O1xuXG4gICAgLy8gcmVwbGFjZSBmaWx0ZXIgaW4gc3RhdGUgd2l0aCBuZXdGaWx0ZXJcbiAgICBuZXdTdGF0ZSA9IHtcbiAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKG5ld1N0YXRlLmZpbHRlcnMpXG4gICAgfTtcblxuICAgIG5ld1N0YXRlID0gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIGlkOiBuZXdGaWx0ZXIuaWQsXG4gICAgICBtb2RlOiBnZXRTeW5jQW5pbWF0aW9uTW9kZShuZXdGaWx0ZXIpXG4gICAgfSk7XG5cbiAgICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gICAgLy8gc2V0IHRoZSBhbmltYXRpb24gY29uZmlnIHZhbHVlIHRvIG1hdGNoIGZpbHRlciB2YWx1ZVxuICAgIHJldHVybiBzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgICB2YWx1ZTogbmV3RmlsdGVyLnZhbHVlW25ld0ZpbHRlci5zeW5jVGltZWxpbmVNb2RlXVxuICAgIH0pO1xuICB9XG5cbiAgLy8gc2V0IGRvbWFpbiBhbmQgc3RlcFxuICBuZXdGaWx0ZXIgPSB7XG4gICAgLi4uZmlsdGVyLFxuICAgIHN5bmNlZFdpdGhMYXllclRpbWVsaW5lOiBmYWxzZVxuICB9O1xuXG4gIC8vIHJlcGxhY2UgZmlsdGVyIGluIHN0YXRlIHdpdGggbmV3RmlsdGVyXG4gIG5ld1N0YXRlID0ge1xuICAgIC4uLm5ld1N0YXRlLFxuICAgIGZpbHRlcnM6IHN3YXBfPEZpbHRlcj4obmV3RmlsdGVyKShuZXdTdGF0ZS5maWx0ZXJzKVxuICB9O1xuXG4gIC8vIHJlc2V0IHN5bmMgdGltZWxpbmUgbW9kZVxuICBuZXdTdGF0ZSA9IHNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWQ6IG5ld0ZpbHRlci5pZCxcbiAgICBtb2RlOiBTWU5DX1RJTUVMSU5FX01PREVTLmVuZFxuICB9KTtcblxuICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gIC8vIHJlc2V0IGZpbHRlciB2YWx1ZVxuICBjb25zdCBuZXdGaWx0ZXJWYWx1ZSA9IGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4obmV3RmlsdGVyLmRvbWFpbiwgbmV3RmlsdGVyKTtcblxuICBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZHg6IGZpbHRlcklkeCxcbiAgICBwcm9wOiAndmFsdWUnLFxuICAgIHZhbHVlOiBuZXdGaWx0ZXJWYWx1ZVxuICB9KTtcblxuICBuZXdTdGF0ZSA9IHNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWQ6IG5ld0ZpbHRlci5pZCxcbiAgICBtb2RlOiBnZXRTeW5jQW5pbWF0aW9uTW9kZShuZXdGaWx0ZXIpXG4gIH0pO1xuXG4gIC8vIHJlc2V0IGFuaW1hdGlvbiBjb25maWcgY3VycmVudCB0aW1lIHRvXG4gIHJldHVybiBzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgdmFsdWU6IG5ld1N0YXRlLmFuaW1hdGlvbkNvbmZpZy5kb21haW4/LlswXSA/PyBudWxsXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLnNldFRpbWVGaWx0ZXJTeW5jVGltZWxpbmVNb2RlQWN0aW9uXG4pIHtcbiAgY29uc3Qge2lkOiBmaWx0ZXJJZCwgbW9kZTogc3luY1RpbWVsaW5lTW9kZX0gPSBhY3Rpb247XG5cbiAgY29uc3QgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBmaWx0ZXJJZCk7XG4gIGlmIChmaWx0ZXJJZHggPT09IC0xKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICBpZiAoIXZhbGlkYXRlU3luY0FuaW1hdGlvbk1vZGUoZmlsdGVyLCBzeW5jVGltZWxpbmVNb2RlKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0ZpbHRlciA9IHtcbiAgICAuLi5maWx0ZXIsXG4gICAgc3luY1RpbWVsaW5lTW9kZVxuICB9O1xuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IHN3YXBfPEZpbHRlcj4obmV3RmlsdGVyKShzdGF0ZS5maWx0ZXJzKVxuICB9O1xuXG4gIHJldHVybiBhZGp1c3RBbmltYXRpb25Db25maWdXaXRoRmlsdGVyKG5ld1N0YXRlLCBmaWx0ZXJJZHgpO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBzdGF0ZSBvZiB0aGUgbG9hZGluZyBpbmRpY2F0b3IuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIHZpc1N0YXRlXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgUGF5bG9hZCB3aXRoIGNoYW5nZSBvZiBudW1iZXIgb2YgYWN0aXZlIGxvYWRpbmcgYWN0aW9ucy5cbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0TG9hZGluZ0luZGljYXRvclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge3BheWxvYWQ6IHtjaGFuZ2V9fToge3BheWxvYWQ6IFNldExvYWRpbmdJbmRpY2F0b3JQYXlsb2FkfVxuKTogVmlzU3RhdGUgPT4ge1xuICBsZXQge2xvYWRpbmdJbmRpY2F0b3JWYWx1ZX0gPSBzdGF0ZTtcbiAgaWYgKCFsb2FkaW5nSW5kaWNhdG9yVmFsdWUpIHtcbiAgICBsb2FkaW5nSW5kaWNhdG9yVmFsdWUgPSAwO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsb2FkaW5nSW5kaWNhdG9yVmFsdWU6IE1hdGgubWF4KGxvYWRpbmdJbmRpY2F0b3JWYWx1ZSArIGNoYW5nZSwgMClcbiAgfTtcbn07XG5cbmZ1bmN0aW9uIGFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihzdGF0ZTogUywgZmlsdGVySWR4OiBudW1iZXIpOiBTIHtcbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdO1xuICBpZiAoKGZpbHRlciBhcyBUaW1lUmFuZ2VGaWx0ZXIpLnN5bmNlZFdpdGhMYXllclRpbWVsaW5lKSB7XG4gICAgY29uc3QgdGltZWxpbmVWYWx1ZSA9IGdldFRpbWVsaW5lVmFsdWVGcm9tRmlsdGVyKGZpbHRlcik7XG4gICAgY29uc3QgdmFsdWUgPSBzdGF0ZS5hbmltYXRpb25Db25maWcudGltZVN0ZXBzXG4gICAgICA/IHNuYXBUb01hcmtzKHRpbWVsaW5lVmFsdWUsIHN0YXRlLmFuaW1hdGlvbkNvbmZpZy50aW1lU3RlcHMpXG4gICAgICA6IHRpbWVsaW5lVmFsdWU7XG4gICAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIoc3RhdGUsIHt2YWx1ZX0pO1xuICB9XG4gIHJldHVybiBzdGF0ZTtcbn1cblxuZnVuY3Rpb24gZ2V0VGltZWxpbmVWYWx1ZUZyb21GaWx0ZXIoZmlsdGVyKSB7XG4gIHJldHVybiBmaWx0ZXIudmFsdWVbZmlsdGVyLnN5bmNUaW1lbGluZU1vZGVdO1xufVxuXG5mdW5jdGlvbiBnZXRTeW5jQW5pbWF0aW9uTW9kZShmaWx0ZXI6IFRpbWVSYW5nZUZpbHRlcikge1xuICBpZiAoZmlsdGVyLmFuaW1hdGlvbldpbmRvdyA9PT0gQU5JTUFUSU9OX1dJTkRPVy5mcmVlKSB7XG4gICAgcmV0dXJuIGZpbHRlci5zeW5jVGltZWxpbmVNb2RlID8/IFNZTkNfVElNRUxJTkVfTU9ERVMuZW5kO1xuICB9XG5cbiAgcmV0dXJuIFNZTkNfVElNRUxJTkVfTU9ERVMuZW5kO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN5bmNBbmltYXRpb25Nb2RlKGZpbHRlcjogVGltZVJhbmdlRmlsdGVyLCBuZXdNb2RlOiBudW1iZXIpIHtcbiAgcmV0dXJuICEoXG4gICAgZmlsdGVyLmFuaW1hdGlvbldpbmRvdyAhPT0gQU5JTUFUSU9OX1dJTkRPVy5mcmVlICYmIG5ld01vZGUgPT09IFNZTkNfVElNRUxJTkVfTU9ERVMuc3RhcnRcbiAgKTtcbn1cblxuZnVuY3Rpb24gYWRqdXN0VGltZUZpbHRlckludGVydmFsKHN0YXRlLCBmaWx0ZXIpIHtcbiAgY29uc3QgaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyA9IGdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMoc3RhdGUubGF5ZXJzKTtcblxuICBsZXQgaW50ZXJ2YWw6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBpZiAoaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycy5sZW5ndGggPiAwKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IGludGVydmFsSW5kZXggPSBpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLnJlZHVjZSgoY3VycmVudEluZGV4LCBsKSA9PiB7XG4gICAgICBpZiAobC5tZXRhLnRhcmdldFRpbWVJbnRlcnZhbCkge1xuICAgICAgICBjb25zdCBuZXdJbmRleCA9IFRJTUVfSU5URVJWQUxTX09SREVSRUQuZmluZEluZGV4KGkgPT4gaSA9PT0gbC5tZXRhLnRhcmdldFRpbWVJbnRlcnZhbCk7XG4gICAgICAgIHJldHVybiBuZXdJbmRleCA+IC0xICYmIG5ld0luZGV4IDwgY3VycmVudEluZGV4ID8gbmV3SW5kZXggOiBjdXJyZW50SW5kZXg7XG4gICAgICB9XG4gICAgfSwgVElNRV9JTlRFUlZBTFNfT1JERVJFRC5sZW5ndGggLSAxKTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgaGV4VGlsZUludGVydmFsID0gVElNRV9JTlRFUlZBTFNfT1JERVJFRFtpbnRlcnZhbEluZGV4XTtcbiAgICBpbnRlcnZhbCA9IExheWVyVG9GaWx0ZXJUaW1lSW50ZXJ2YWxbaGV4VGlsZUludGVydmFsXTtcbiAgfVxuXG4gIGlmICghaW50ZXJ2YWwpIHtcbiAgICByZXR1cm4gZmlsdGVyO1xuICB9XG5cbiAgLy8gYWRqdXN0IGZpbHRlclxuICBjb25zdCB0aW1lRm9ybWF0ID0gZ2V0RGVmYXVsdFRpbWVGb3JtYXQoaW50ZXJ2YWwpO1xuICBjb25zdCB1cGRhdGVkUGxvdFR5cGUgPSB7Li4uZmlsdGVyLnBsb3RUeXBlLCBpbnRlcnZhbCwgdGltZUZvcm1hdH07XG4gIGNvbnN0IG5ld0ZpbHRlciA9IHVwZGF0ZVRpbWVGaWx0ZXJQbG90VHlwZShmaWx0ZXIsIHVwZGF0ZWRQbG90VHlwZSwgc3RhdGUuZGF0YXNldHMpO1xuICByZXR1cm4gYWRqdXN0VmFsdWVUb0FuaW1hdGlvbldpbmRvdyhzdGF0ZSwgbmV3RmlsdGVyKTtcbn1cblxuLy8gRmluZCBkYXRhSWQgZnJvbSBhIHNhdmVkIHZpc1N0YXRlIHByb3BlcnR5OlxuLy8gbGF5ZXJzLCBmaWx0ZXJzLCBpbnRlcmFjdGlvbnMsIGxheWVyQmxlbmRpbmcsIG92ZXJsYXlCbGVuZGluZywgc3BsaXRNYXBzLCBhbmltYXRpb25Db25maWcsIGVkaXRvclxuLy8gcmVwbGFjZSBpdCB3aXRoIGFub3RoZXIgZGF0YUlkXG5mdW5jdGlvbiBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHModmFsdWU6IGFueSwgZGF0YUlkOiBzdHJpbmcsIGRhdGFJZFRvUmVwbGFjZTogc3RyaW5nKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIC8vIGZvciBsYXllcnMsIGZpbHRlcnMsIGNhbGwgZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzIG9uIGVhY2ggaXRlbSBpbiBhcnJheVxuICAgIGNvbnN0IHJlcGxhY2VkID0gdmFsdWVcbiAgICAgIC5tYXAodiA9PiBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHModiwgZGF0YUlkLCBkYXRhSWRUb1JlcGxhY2UpKVxuICAgICAgLmZpbHRlcihkID0+IGQpO1xuICAgIHJldHVybiByZXBsYWNlZC5sZW5ndGggPyByZXBsYWNlZCA6IG51bGw7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZS5kYXRhSWQgPT09ICdzdHJpbmcnICYmIHZhbHVlLmRhdGFJZCA9PT0gZGF0YUlkKSB7XG4gICAgLy8gb3RoZXJzXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnZhbHVlLFxuICAgICAgZGF0YUlkOiBkYXRhSWRUb1JlcGxhY2VcbiAgICB9O1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUuZGF0YUlkKSAmJiB2YWx1ZS5kYXRhSWQuaW5jbHVkZXMoZGF0YUlkKSkge1xuICAgIC8vIGZpbHRlclxuICAgIHJldHVybiB7XG4gICAgICAuLi52YWx1ZSxcbiAgICAgIGRhdGFJZDogdmFsdWUuZGF0YUlkLm1hcChkID0+IChkID09PSBkYXRhSWQgPyBkYXRhSWRUb1JlcGxhY2UgOiBkKSlcbiAgICB9O1xuICB9IGVsc2UgaWYgKHZhbHVlLmNvbmZpZz8uZGF0YUlkICYmIHZhbHVlLmNvbmZpZz8uZGF0YUlkID09PSBkYXRhSWQpIHtcbiAgICAvLyBsYXllclxuICAgIHJldHVybiB7XG4gICAgICAuLi52YWx1ZSxcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICAuLi52YWx1ZS5jb25maWcsXG4gICAgICAgIGRhdGFJZDogZGF0YUlkVG9SZXBsYWNlXG4gICAgICB9XG4gICAgfTtcbiAgfSBlbHNlIGlmIChpc09iamVjdCh2YWx1ZSkgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBkYXRhSWQpKSB7XG4gICAgLy8gZm9yIHZhbHVlIHNhdmVkIGFzIHtbZGF0YUlkXTogey4uLn19XG4gICAgcmV0dXJuIHtbZGF0YUlkVG9SZXBsYWNlXTogdmFsdWVbZGF0YUlkXX07XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLy8gRmluZCBkYXRhc2V0SWRzIGRlcml2ZWQgYSBzYXZlZCB2aXNTdGF0ZSBQcm9wZXJ0eTtcbmZ1bmN0aW9uIGZpbmRDaGlsZERhdGFzZXRJZHModmFsdWUpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gZm9yIGxheWVycywgZmlsdGVycywgY2FsbCBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMgb24gZWFjaCBpdGVtIGluIGFycmF5XG4gICAgY29uc3QgY2hpbGREYXRhSWRzID0gdmFsdWUubWFwKGZpbmRDaGlsZERhdGFzZXRJZHMpLmZpbHRlcihkID0+IGQpO1xuICAgIHJldHVybiBjaGlsZERhdGFJZHMubGVuZ3RoID8gY2hpbGREYXRhSWRzIDogbnVsbDtcbiAgfVxuXG4gIC8vIGNoaWxkIGRhdGEgaWQgdXN1YWxseSBzdG9yZXMgaW4gdGhlIGRlcml2ZWQgZGF0YXNldCBpbmZvXG4gIHJldHVybiB2YWx1ZT8ubmV3RGF0YXNldD8uaW5mby5pZCB8fCBudWxsO1xufVxuXG4vLyBtb3ZlZCB1bm1lcmdlZCBsYXllcnMsIGZpbHRlcnMsIGludGVyYWN0aW9uc1xuZnVuY3Rpb24gbW92ZVZhbHVlVG9CZU1lcmdlZChzdGF0ZSwgcHJvcFZhbHVlcywge3Byb3AsIHRvTWVyZ2VQcm9wLCBzYXZlVW5tZXJnZWR9KSB7XG4gIC8vIHJlbW92ZSBwcm9wIHZhbHVlIGZyb20gc3RhdGVcbiAgLy8gVE9ETzogc2hvdWxkIHdlIGFkZCByZW1vdmUgdXBkYXRlciB0byBtZXJnZXIgYXMgd2VsbD9cbiAgaWYgKCFwcm9wVmFsdWVzKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHN0YXRlUmVtb3ZlZCA9XG4gICAgcHJvcCA9PT0gJ2xheWVycydcbiAgICAgID8gcHJvcFZhbHVlcy5yZWR1Y2UoKGFjY3UsIHByb3BWYWx1ZSkgPT4gcmVtb3ZlTGF5ZXJVcGRhdGVyKGFjY3UsIHtpZDogcHJvcFZhbHVlLmlkfSksIHN0YXRlKVxuICAgICAgOiBBcnJheS5pc0FycmF5KHN0YXRlW3Byb3BdKVxuICAgICAgPyB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgW3Byb3BdOiBzdGF0ZVtwcm9wXS5maWx0ZXIocCA9PiAhcHJvcFZhbHVlcy5maW5kKHByb3BWYWx1ZSA9PiBwLmlkID09PSBwcm9wVmFsdWUuaWQpKVxuICAgICAgICB9XG4gICAgICA6IC8vIGlmIG5vdCBhcnJheSwgd2Ugd29uJ3QgcmVtb3ZlIGl0LCByZW1vdmUgZGF0YXNldCBzaG91bGQgaGFuZGxlIGl0XG4gICAgICAgIHN0YXRlO1xuXG4gIC8vIG1vdmUgdG8gc3RhdGVUb0JlTWVyZ2VkXG4gIGNvbnN0IHRvQmVNZXJnZWQgPSB7XG4gICAgW3RvTWVyZ2VQcm9wXTogc2F2ZVVubWVyZ2VkXG4gICAgICA/IC8vIGNhbGwgbWVyZ2Ugc2F2ZVVubWVyZ2VkIG1ldGhvZFxuICAgICAgICBzYXZlVW5tZXJnZWQoc3RhdGVSZW1vdmVkLCBwcm9wVmFsdWVzKVxuICAgICAgOiAvLyBpZiB0b01lcmdlUHJvcCBpcyBhcmFheSwgYXBwZW5kIHRvIGl0XG4gICAgICBBcnJheS5pc0FycmF5KHN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF0pXG4gICAgICA/IFsuLi5zdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdLCAuLi5wcm9wVmFsdWVzXVxuICAgICAgOiAvLyBzYXZlIHByb3BWYWx1ZXMgdG8gdG9NZXJnZVxuICAgICAgaXNPYmplY3Qoc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXSlcbiAgICAgID8ge1xuICAgICAgICAgIC4uLnN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF0sXG4gICAgICAgICAgLi4ucHJvcFZhbHVlc1xuICAgICAgICB9XG4gICAgICA6IHN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlUmVtb3ZlZCxcbiAgICAuLi50b0JlTWVyZ2VkXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VEYXRhc2V0QW5kRGVwczxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAgZGF0YUlkOiBzdHJpbmcsXG4gIGRhdGFJZFRvVXNlOiBzdHJpbmdcbik6IFQge1xuICByZXR1cm4gY29tcG9zZV88VD4oW1xuICAgIGFwcGx5XyhyZXBsYWNlRGF0YXNldERlcHNJblN0YXRlLCB7ZGF0YUlkLCBkYXRhSWRUb1VzZX0pLFxuICAgIGFwcGx5XyhyZW1vdmVEYXRhc2V0VXBkYXRlciwge2RhdGFJZH0pXG4gIF0pKHN0YXRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVTdGF0ZUZvckRhdGFzZXRSZXBsYWNlPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgZGF0YUlkVG9Vc2U6IHN0cmluZ1xuKTogVCB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRTdGF0ZSA9IHNlcmlhbGl6ZVZpc1N0YXRlKHN0YXRlLCBzdGF0ZS5zY2hlbWEpO1xuICBjb25zdCBuZXh0U3RhdGUgPSByZXBsYWNlRGF0YXNldEFuZERlcHMoc3RhdGUsIGRhdGFJZCwgZGF0YUlkVG9Vc2UpO1xuICAvLyBtYWtlIGEgY29weSBvZiBsYXllck9yZGVyLCBiZWNhdXNlIGxheWVyIGlkIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIGl0IGJ5IGNhbGxpbmcgcmVtb3ZlTGF5ZXJVcGRhdGVyXG4gIGNvbnN0IHByZXNlcnZlTGF5ZXJPcmRlciA9IFsuLi5zdGF0ZS5sYXllck9yZGVyXTtcblxuICAvLyBwcmVzZXJ2ZSBkYXRhc2V0IG9yZGVyXG4gIG5leHRTdGF0ZS5wcmVzZXJ2ZURhdGFzZXRPcmRlciA9IE9iamVjdC5rZXlzKHN0YXRlLmRhdGFzZXRzKS5tYXAoZCA9PlxuICAgIGQgPT09IGRhdGFJZCA/IGRhdGFJZFRvVXNlIDogZFxuICApO1xuXG4gIC8vIHByZXNlcnZlTGF5ZXJPcmRlclxuICBpZiAobmV4dFN0YXRlLmxheWVyVG9CZU1lcmdlZD8ubGVuZ3RoKSB7XG4gICAgLy8gY29weSBzcGxpdCBtYXBzIHRvIGJlIG1lcmdlZCwgYmVjYXVzZSBpdCB3aWxsIGJlIHJlc2V0IGluIHJlbW92ZSBsYXllclxuICAgIG5leHRTdGF0ZS5zcGxpdE1hcHNUb0JlTWVyZ2VkID0gc2VyaWFsaXplZFN0YXRlPy5zcGxpdE1hcHMgPz8gW107XG4gICAgbmV4dFN0YXRlLmxheWVyT3JkZXIgPSBbLi4ucHJlc2VydmVMYXllck9yZGVyXTtcbiAgfVxuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlRGF0YXNldERlcHNJblN0YXRlPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICB7ZGF0YUlkLCBkYXRhSWRUb1VzZX06IHtkYXRhSWQ6IHN0cmluZzsgZGF0YUlkVG9Vc2U6IHN0cmluZ31cbik6IFQge1xuICBjb25zdCBzZXJpYWxpemVkU3RhdGUgPSBzZXJpYWxpemVWaXNTdGF0ZShzdGF0ZSwgc3RhdGUuc2NoZW1hKTtcblxuICBjb25zdCBuZXh0U3RhdGUgPSBzdGF0ZS5tZXJnZXJzLnJlZHVjZShcbiAgICAoXG4gICAgICBhY2N1U3RhdGUsXG4gICAgICB7cHJvcCwgdG9NZXJnZVByb3AsIHJlcGxhY2VQYXJlbnREYXRhc2V0SWRzLCBnZXRDaGlsZERhdGFzZXRJZHMsIHNhdmVVbm1lcmdlZCwgcHJlc2VydmVPcmRlcn1cbiAgICApID0+IHtcbiAgICAgIC8vIGdldCBkYXRhc2V0IGlkcyB0aGF0IGFyZSBkZXBlbmRzIG9uIHRoaXMgZGF0YXNldFxuICAgICAgY29uc3QgcHJvcHMgPSB0b0FycmF5KHByb3ApO1xuICAgICAgY29uc3QgdG9NZXJnZVByb3BzID0gdG9BcnJheSh0b01lcmdlUHJvcCk7XG4gICAgICBjb25zdCBzYXZlZFByb3BzID0gc2VyaWFsaXplZFN0YXRlID8gcHJvcHMubWFwKHAgPT4gc2VyaWFsaXplZFN0YXRlW3BdKSA6IFtdO1xuXG4gICAgICBsZXQgcmVwbGFjZWRTdGF0ZSA9IGFjY3VTdGF0ZTtcbiAgICAgIHNhdmVkUHJvcHMuZm9yRWFjaCgocHJvcFZhbHVlLCBpKSA9PiB7XG4gICAgICAgIGNvbnN0IG1lcmdlck9wdGlvbnMgPSB7XG4gICAgICAgICAgcHJvcDogcHJvcHNbaV0sXG4gICAgICAgICAgdG9NZXJnZVByb3A6IHRvTWVyZ2VQcm9wc1tpXSxcbiAgICAgICAgICBnZXRDaGlsZERhdGFzZXRJZHMsXG4gICAgICAgICAgc2F2ZVVubWVyZ2VkXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVwbGFjZWRJdGVtID1cbiAgICAgICAgICByZXBsYWNlUGFyZW50RGF0YXNldElkcz8uKHByb3BWYWx1ZSwgZGF0YUlkLCBkYXRhSWRUb1VzZSkgfHxcbiAgICAgICAgICBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMocHJvcFZhbHVlLCBkYXRhSWQsIGRhdGFJZFRvVXNlKTtcbiAgICAgICAgcmVwbGFjZWRTdGF0ZSA9IHJlcGxhY2VkSXRlbVxuICAgICAgICAgID8gcmVwbGFjZVByb3BWYWx1ZUluU3RhdGUocmVwbGFjZWRTdGF0ZSwgcmVwbGFjZWRJdGVtLCBtZXJnZXJPcHRpb25zKVxuICAgICAgICAgIDogcmVwbGFjZWRTdGF0ZTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgbWVyZ2VyT3B0aW9ucy50b01lcmdlUHJvcCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgcmVwbGFjZWRTdGF0ZVttZXJnZXJPcHRpb25zLnRvTWVyZ2VQcm9wXT8ubGVuZ3RoICYmXG4gICAgICAgICAgcHJlc2VydmVPcmRlclxuICAgICAgICApIHtcbiAgICAgICAgICByZXBsYWNlZFN0YXRlW3ByZXNlcnZlT3JkZXJdID0gcHJvcFZhbHVlLm1hcChpdGVtID0+IGl0ZW0uaWQpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHJlcGxhY2VkU3RhdGU7XG4gICAgfSxcbiAgICBzdGF0ZVxuICApO1xuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VQcm9wVmFsdWVJblN0YXRlKFxuICBzdGF0ZSxcbiAgcmVwbGFjZWRJdGVtLFxuICB7cHJvcCwgdG9NZXJnZVByb3AsIGdldENoaWxkRGF0YXNldElkcywgc2F2ZVVubWVyZ2VkfVxuKSB7XG4gIC8vIHByb3AgaXMgZGVwZW5kcyBvbiB0aGUgZGF0YXNldCB0byBiZSByZXBsYWNlZFxuICAvLyByZW1vdmUgcHJvcCBmcm9tIHN0YXRlLCBhbmQgbW92ZSBpdCB0byB0b0JlTWVyZ2VkXG4gIGxldCBuZXh0U3RhdGUgPSBtb3ZlVmFsdWVUb0JlTWVyZ2VkKHN0YXRlLCByZXBsYWNlZEl0ZW0sIHtwcm9wLCB0b01lcmdlUHJvcCwgc2F2ZVVubWVyZ2VkfSk7XG4gIGNvbnN0IGNoaWxkRGF0YUlkcyA9IGdldENoaWxkRGF0YXNldElkcz8uKHJlcGxhY2VkSXRlbSkgfHwgZmluZENoaWxkRGF0YXNldElkcyhyZXBsYWNlZEl0ZW0pO1xuXG4gIGlmIChjaGlsZERhdGFJZHMpIHtcbiAgICBuZXh0U3RhdGUgPSB0b0FycmF5KGNoaWxkRGF0YUlkcykucmVkdWNlKChhY2N1LCBjaGlsZERhdGFJZCkgPT4ge1xuICAgICAgLy8gc2hvdWxkbid0IG5lZWQgdG8gY2hhbmdlIGNoaWxkIGRhdGFzZXQgaWQsXG4gICAgICAvLyBidXQgc3RpbGwgbmVlZCB0byBtb3ZlIG91dCBvZiBzdGF0ZSBhbmQgbWVyZ2UgYmFjayBpblxuICAgICAgcmV0dXJuIHJlcGxhY2VEYXRhc2V0QW5kRGVwcyhhY2N1LCBjaGlsZERhdGFJZCwgY2hpbGREYXRhSWQpO1xuICAgIH0sIG5leHRTdGF0ZSk7XG4gIH1cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBOztBQUVBLFNBQVFBLElBQUksUUFBTyxZQUFZO0FBRS9CLE9BQU9DLElBQUksTUFBTSxtQkFBbUI7QUFDcEMsT0FBT0MsU0FBUyxNQUFNLFdBQVc7QUFDakMsU0FBUUMsT0FBTyxJQUFJQyxPQUFPLFFBQU8sZUFBZTtBQUNoRCxPQUFPQyxTQUFTLE1BQU0sNkJBQTZCO0FBQ25ELE9BQU9DLEdBQUcsTUFBTSx1QkFBdUI7QUFDdkMsT0FBT0MsT0FBTyxNQUFNLDJCQUEyQjtBQUMvQyxPQUFPQyxJQUFJLE1BQU0sd0JBQXdCO0FBQ3pDLE9BQU9DLElBQUksTUFB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
|
|
5006
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJiYm94IiwiY29weSIsImRlZXBtZXJnZSIsImNvbnNvbGUiLCJDb25zb2xlIiwiY2xvbmVEZWVwIiwiZ2V0IiwiaXNFcXVhbCIsInBpY2siLCJ1bmlxIiwieG9yIiwiVGFzayIsImRpc2FibGVTdGFja0NhcHR1cmluZyIsIndpdGhUYXNrIiwiREVMQVlfVEFTSyIsIkFDVElPTl9UQVNLIiwiTE9BRF9GSUxFX1RBU0siLCJQUk9DRVNTX0ZJTEVfREFUQSIsIlVOV1JBUF9UQVNLIiwiYWRkTm90aWZpY2F0aW9uIiwiYXBwbHlMYXllckNvbmZpZyIsImNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzIiwibGF5ZXJDb25maWdDaGFuZ2UiLCJsYXllclR5cGVDaGFuZ2UiLCJsYXllclZpc0NvbmZpZ0NoYW5nZSIsImxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSIsImxvYWRGaWxlU3RlcFN1Y2Nlc3MiLCJsb2FkRmlsZXNFcnIiLCJsb2FkRmlsZXNTdWNjZXNzIiwibG9hZE5leHRGaWxlIiwibmV4dEZpbGVCYXRjaCIsInNldEZpbHRlciIsInByb2Nlc3NGaWxlQ29udGVudCIsImZpdEJvdW5kcyIsImZpdE1hcEJvdW5kcyIsInRvZ2dsZUxheWVyRm9yTWFwIiwiYXBwbHlGaWx0ZXJDb25maWciLCJsb2FkQ29sdW1uU3RhdHNTdWNjZXNzIiwibG9hZENvbHVtblN0YXRzRXJyb3IiLCJyZWZyZXNoRGF0YXNldFN1Y2Nlc3MiLCJyZWZyZXNoRGF0YXNldEVycm9yIiwicmVmcmVzaERhdGFzZXRQcm9ncmVzcyIsIkZJTFRFUl9VUERBVEVSX1BST1BTIiwiYWRkTmV3TGF5ZXJzVG9TcGxpdE1hcCIsInNuYXBUb01hcmtzIiwiYXBwbHlGaWx0ZXJGaWVsZE5hbWUiLCJhcHBseUZpbHRlcnNUb0RhdGFzZXRzIiwiYXJyYXlJbnNlcnQiLCJjb21wdXRlU3BsaXRNYXBMYXllcnMiLCJhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluIiwiZXJyb3JOb3RpZmljYXRpb24iLCJlZGl0b3JGZWF0dXJlc1RvRmVhdHVyZUNvbGxlY3Rpb24iLCJtZXJnZVVzZXJGZWF0dXJlUHJvcGVydGllcyIsInRvU2tldGNoRmVhdHVyZSIsImZlYXR1cmVUb0ZpbHRlclZhbHVlIiwiZmlsdGVyRGF0YXNldENQVSIsImdlbmVyYXRlUG9seWdvbkZpbHRlciIsImdldERlZmF1bHRGaWx0ZXIiLCJnZXRGaWx0ZXJJZEluRmVhdHVyZSIsImdldFRpbWVXaWRnZXRUaXRsZUZvcm1hdHRlciIsImlzSW5SYW5nZSIsImlzT2JqZWN0IiwiaXNQbGFpbk9iamVjdCIsImlzUmdiQ29sb3IiLCJwYXJzZUZpZWxkVmFsdWUiLCJyZW1vdmVMYXllckZyb21TcGxpdE1hcHMiLCJzZXQiLCJ1cGRhdGVGaWx0ZXJQbG90IiwicmVtb3ZlRmlsdGVyUGxvdCIsImlzTGF5ZXJBbmltYXRhYmxlIiwiaXNTaWRlRmlsdGVyIiwiZ2V0QXBwbGljYXRpb25Db25maWciLCJ2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0cyIsImdlbmVyYXRlSGFzaElkIiwidG9BcnJheSIsImFycmF5TW92ZSIsIkFOSU1BVElPTl9XSU5ET1ciLCJCQVNFX1NQRUVEIiwiQ09NUEFSRV9UWVBFUyIsIkRFRkFVTFRfVEVYVF9MQUJFTCIsIkVESVRPUl9NT0RFUyIsIkZJTFRFUl9UWVBFUyIsIkZJTFRFUl9WSUVXX1RZUEVTIiwiTEFZRVJfVFlQRVMiLCJGUFMiLCJMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVCIsIkRJU1RBTkNFX0ZPR19UWVBFIiwiU1VSRkFDRV9GT0dfVFlQRSIsIk1BWF9ERUZBVUxUX1RPT0xUSVBTIiwiUExPVF9UWVBFUyIsIlNPUlRfT1JERVIiLCJTWU5DX1RJTUVMSU5FX01PREVTIiwiQ0hBTk5FTF9TQ0FMRVMiLCJTQ0FMRV9UWVBFUyIsIklOSVRJQUxfQU5OT1RBVElPTl9LSU5EIiwiSU5JVElBTF9BTk5PVEFUSU9OX0FOR0xFIiwiSU5JVElBTF9BTk5PVEFUSU9OX0FSTV9MRU5HVEgiLCJJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9XSURUSCIsIklOSVRJQUxfQU5OT1RBVElPTl9URVhUX0hFSUdIVCIsIklOSVRJQUxfQU5OT1RBVElPTl9MSU5FX1dJRFRIIiwiSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfQ09MT1IiLCJBbm5vdGF0aW9uS2luZCIsIkRhdGFzZXRUeXBlIiwiZ2V0RGF0YXNldFJlZnJlc2hJbnRlcnZhbE1zIiwiZ2V0UmVtb3RlU291cmNlRm9ybWF0IiwiTEFZRVJfSURfTEVOR1RIIiwiTGF5ZXIiLCJMYXllckNsYXNzZXMiLCJhcHBseV8iLCJjb21wb3NlXyIsImZpbHRlck91dEJ5SWQiLCJtZXJnZV8iLCJwYXlsb2FkXyIsInBpY2tfIiwicmVtb3ZlRWxlbWVudEF0SW5kZXgiLCJzd2FwXyIsImlzVmFsaWRNZXJnZXIiLCJtZXJnZVN0YXRlRnJvbU1lcmdlcnMiLCJWSVNfU1RBVEVfTUVSR0VSUyIsImNyZWF0ZUxheWVyRnJvbUNvbmZpZyIsInBhcnNlTGF5ZXJDb25maWciLCJzZXJpYWxpemVGaWx0ZXIiLCJzZXJpYWxpemVMYXllciIsInNlcmlhbGl6ZVZpc1N0YXRlIiwidmFsaWRhdGVMYXllcldpdGhEYXRhIiwiS2VwbGVyR0xTY2hlbWEiLCJsb2FkRXh0ZXJuYWxseUhvc3RlZERhdGFzZXQiLCJwcm9jZXNzR2VvanNvbiIsImFzc2lnbkdwdUNoYW5uZWwiLCJjb3B5VGFibGVBbmRVcGRhdGUiLCJjcmVhdGVOZXdEYXRhRW50cnkiLCJwaW5UYWJsZUNvbHVtbnMiLCJzZXRGaWx0ZXJHcHVNb2RlIiwic29ydERhdGFzZXRCeUNvbHVtbiIsImZpbmRGaWVsZHNUb1Nob3ciLCJjYWxjdWxhdGVMYXllckRhdGEiLCJmaW5kRGVmYXVsdExheWVyIiwiZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMiLCJtZXJnZUxheWVyVmlzQ29uZmlnRm9yTmV3RGF0YXNldHMiLCJnZXROZXdMYXllckdyb3VwIiwiYWRkTGF5ZXJPckdyb3VwVG9MYXllck9yZGVyIiwicmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyIiwiZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyIiwiZmluZFBhcmVudEdyb3VwRm9yTGF5ZXIiLCJnZXRJbmRleEZyb21MYXllckVudHJ5SWQiLCJ1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyIiwiZ2V0RmxhdExheWVyT3JkZXIiLCJyZXBsYWNlTGF5ZXJFbnRyeUluTGF5ZXJPcmRlciIsImdldFByb3BWYWx1ZVRvTWVyZ2VyIiwiaGFzUHJvcHNUb01lcmdlIiwibWVyZ2VEYXRhc2V0c0J5T3JkZXIiLCJmaXhFZmZlY3RPcmRlciIsImdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzIiwiZ2V0SW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyIsIm1lcmdlVGltZURvbWFpbnMiLCJhZGp1c3RWYWx1ZVRvQW5pbWF0aW9uV2luZG93IiwidXBkYXRlVGltZUZpbHRlclBsb3RUeXBlIiwiZ2V0RGVmYXVsdFRpbWVGb3JtYXQiLCJMYXllclRvRmlsdGVyVGltZUludGVydmFsIiwiVElNRV9JTlRFUlZBTFNfT1JERVJFRCIsIm1lcmdlRmlsdGVyRG9tYWluIiwiaW5pdEN1c3RvbVBhbGV0dGVCeUN1c3RvbVNjYWxlIiwiY29sbGVjdENvbHVtblZhbHVlcyIsImdldENvbHVtblN0YXRpc3RpY3MiLCJjcmVhdGVFZmZlY3QiLCJmaW5kTWFwQm91bmRzIiwidmlzU3RhdGVVcGRhdGVycyIsImRlZmF1bHRJbnRlcmFjdGlvbkNvbmZpZyIsInRvb2x0aXAiLCJpZCIsImxhYmVsIiwiZW5hYmxlZCIsImNvbmZpZyIsImZpZWxkc1RvU2hvdyIsImNvbXBhcmVNb2RlIiwiY29tcGFyZVR5cGUiLCJBQlNPTFVURSIsImdlb2NvZGVyIiwicG9zaXRpb24iLCJsaW1pdFNlYXJjaCIsImJydXNoIiwic2l6ZSIsImNvb3JkaW5hdGUiLCJERUZBVUxUX0FOSU1BVElPTl9DT05GSUciLCJkb21haW4iLCJjdXJyZW50VGltZSIsInNwZWVkIiwiaXNBbmltYXRpbmciLCJ0aW1lU3RlcHMiLCJ0aW1lRm9ybWF0IiwidGltZXpvbmUiLCJkZWZhdWx0VGltZUZvcm1hdCIsImhpZGVDb250cm9sIiwiZHVyYXRpb24iLCJERUZBVUxUX0VESVRPUiIsIm1vZGUiLCJEUkFXX1BPTFlHT04iLCJmZWF0dXJlcyIsInNlbGVjdGVkRmVhdHVyZSIsInZpc2libGUiLCJJTklUSUFMX1ZJU19TVEFURSIsIm1hcEluZm8iLCJ0aXRsZSIsImRlc2NyaXB0aW9uIiwibGF5ZXJzIiwibGF5ZXJEYXRhIiwibGF5ZXJUb0JlTWVyZ2VkIiwibGF5ZXJPcmRlciIsImxheWVyT3JkZXJUb0JlTWVyZ2VkIiwiZmlsdGVycyIsImZpbHRlclRvQmVNZXJnZWQiLCJkYXRhc2V0cyIsImVkaXRpbmdEYXRhc2V0IiwidW5kZWZpbmVkIiwiZWZmZWN0cyIsImVmZmVjdE9yZGVyIiwiYW5ub3RhdGlvbnMiLCJhbm5vdGF0aW9uc1RvQmVNZXJnZWQiLCJzZWxlY3RlZEFubm90YXRpb25JZCIsImlzRWRpdGluZ0Fubm90YXRpb25UZXh0IiwiaW50ZXJhY3Rpb25Db25maWciLCJpbnRlcmFjdGlvblRvQmVNZXJnZWQiLCJsYXllckJsZW5kaW5nIiwib3ZlcmxheUJsZW5kaW5nIiwiaG92ZXJJbmZvIiwiY2xpY2tlZCIsIm1vdXNlUG9zIiwibWF4RGVmYXVsdFRvb2x0aXBzIiwic3BsaXRNYXBzIiwic3BsaXRNYXBzVG9CZU1lcmdlZCIsImlzTWVyZ2luZ0RhdGFzZXRzIiwibGF5ZXJDbGFzc2VzIiwiYW5pbWF0aW9uQ29uZmlnIiwiZWRpdG9yIiwiZmlsZUxvYWRpbmciLCJmaWxlTG9hZGluZ1Byb2dyZXNzIiwibG9hZGluZ0luZGljYXRvclZhbHVlIiwibG9hZGVycyIsImxvYWRPcHRpb25zIiwibWVyZ2VycyIsInNjaGVtYSIsIkFDVElPTl9UQVNLX0ZJVF9CT1VORFMiLCJmcm9tQ2FsbGJhY2siLCJfIiwiY2IiLCJBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OIiwidXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhIiwic3RhdGUiLCJfcmVmIiwibGF5ZXIiLCJpZHgiLCJfb2JqZWN0U3ByZWFkIiwibWFwIiwibHlyIiwiaSIsImQiLCJ1cGRhdGVTdGF0ZU9uTGF5ZXJWaXNpYmlsaXR5Q2hhbmdlIiwibmV3U3RhdGUiLCJsZW5ndGgiLCJpc1Zpc2libGUiLCJhbmltYXRpb24iLCJ1cGRhdGVBbmltYXRpb25Eb21haW4iLCJwaWNrQ2hhbmdlZFByb3BzIiwicHJldiIsIm5leHQiLCJjaGFuZ2VkUHJvcHMiLCJwaWNrUHJvcHNPZiIsIm9iaiIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwia2V5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiVklTVUFMX0NIQU5ORUxfUFJPUF9UWVBFUyIsImFwcGx5TGF5ZXJDb25maWdVcGRhdGVyIiwiYWN0aW9uIiwiX3NlcmlhbGl6ZUxheWVyIiwib2xkTGF5ZXJJZCIsIm5ld0xheWVyQ29uZmlnIiwibGF5ZXJJbmRleCIsIm5ld1BhcnNlZExheWVyIiwib2xkTGF5ZXIiLCJmaW5kIiwibCIsImRhdGFzZXQiLCJkYXRhSWQiLCJuZXdMYXllciIsIm5leHRTdGF0ZSIsInR5cGUiLCJvbGRMYXllckluZGV4IiwiZmluZEluZGV4IiwibGF5ZXJUeXBlQ2hhbmdlVXBkYXRlciIsIm5ld0xheWVySWQiLCJzZXJpYWxpemVkT2xkTGF5ZXIiLCJzZXJpYWxpemVkTmV3TGF5ZXIiLCJjaGFuZ2VkIiwidmlzQ29uZmlnIiwibGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyIiwidmlzdWFsQ2hhbm5lbHMiLCJjaGFubmVsTmFtZSIsImNoYW5uZWwiLCJjaGFubmVsUHJvcE5hbWVzIiwicHJvcCIsInNvbWUiLCJsYXllclZpc3VhbENoYW5uZWxDaGFuZ2VVcGRhdGVyIiwiX2l0ZXJhdG9yIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJfc3RlcCIsInMiLCJuIiwiZG9uZSIsInZhbHVlIiwiZXJyIiwiZSIsImYiLCJsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIiLCJ1cGRhdGVsYXllclZpc2liaWx0eSIsImZpbHRlckluZGV4IiwiZmlsdGVyU3luY2VkV2l0aFRpbWVsaW5lIiwic3luY1RpbWVGaWx0ZXJXaXRoTGF5ZXJUaW1lbGluZVVwZGF0ZXIiLCJlbmFibGUiLCJwcm9wcyIsIm5ld0NvbmZpZyIsIl9hY3Rpb24kbmV3Q29uZmlnIiwicmVzdENvbmZpZyIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsIl9leGNsdWRlZCIsInN0YXRlV2l0aERhdGFJZCIsImxheWVyRGF0YUlkQ2hhbmdlVXBkYXRlciIsIm5leHRMYXllciIsInVwZGF0ZUxheWVyQ29uZmlnIiwic2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhIiwib2xkTGF5ZXJEYXRhIiwidXBkYXRlTGF5ZXJEYXRhUmVzdWx0IiwibGF5ZXJBbmltYXRpb25DaGFuZ2VVcGRhdGVyIiwiX2RlZmluZVByb3BlcnR5IiwiX2NhbGN1bGF0ZUxheWVyRGF0YSIsImxheWVyVG9nZ2xlVmlzaWJpbGl0eVVwZGF0ZXIiLCJsYXllcklkIiwic3BsaXRNYXBJZCIsIm1hcEluZGV4Iiwic20iLCJ0b2dnbGVMYXllckZvck1hcFVwZGF0ZXIiLCJzeW5jZWRXaXRoTGF5ZXJUaW1lbGluZSIsImxheWVyU2V0SXNWYWxpZFVwZGF0ZXIiLCJpc1ZhbGlkIiwibGF5ZXJUb1VwZGF0ZSIsIm5ld0RhdGEiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhMiIsImFkZE9yUmVtb3ZlVGV4dExhYmVscyIsIm5ld0ZpZWxkcyIsInRleHRMYWJlbCIsImRlZmF1bHRUZXh0TGFiZWwiLCJhcmd1bWVudHMiLCJuZXdUZXh0TGFiZWwiLCJzbGljZSIsImN1cnJlbnRGaWVsZHMiLCJ0bCIsImZpZWxkIiwibmFtZSIsImZpbHRlciIsImFkZEZpZWxkcyIsImluY2x1ZGVzIiwiZGVsZXRlRmllbGRzIiwiZmQiLCJjb25jYXQiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJhZiIsInVwZGF0ZVRleHRMYWJlbFByb3BBbmRWYWx1ZSIsInNwbGljZSIsImxheWVyVGV4dExhYmVsQ2hhbmdlVXBkYXRlciIsIl9vbGRMYXllciRnZXREZWZhdWx0TCIsIl9vbGRMYXllciRnZXREZWZhdWx0TDIiLCJnZXREZWZhdWx0TGF5ZXJDb25maWciLCJ2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YSIsImxvYWRlZExheWVyIiwiYWxsb3dFbXB0eUNvbHVtbiIsImlzVmFsaWRUb1NhdmUiLCJ2YWxpZGF0ZWQiLCJvbGRMYXllclR5cGUiLCJuZXdEYXRhc2V0RmllbGRzIiwiZmllbGRzIiwicmVtYXBwZWRGaWVsZHMiLCJ2YWx1ZXMiLCJfcmVmMiIsImZpZWxkS2V5IiwiY3VycmVudEZpZWxkIiwibWF0Y2hlZCIsIl9yZWYzIiwidmFsaWRhdGVWaXN1YWxDaGFubmVsIiwiaXNDb25maWdBY3RpdmUiLCJ1cGRhdGVMYXllckRvbWFpbiIsIl9jYWxjdWxhdGVMYXllckRhdGEzIiwic2V0SW5pdGlhbExheWVyQ29uZmlnIiwicmVzdWx0IiwiZmluZERlZmF1bHRMYXllclByb3BzIiwiQXJyYXkiLCJpc0FycmF5IiwibmV3VHlwZSIsIm9sZElkIiwiZXJyb3IiLCJkZWZhdWx0TGF5ZXJQcm9wcyIsImFzc2lnbkNvbmZpZ1RvTGF5ZXIiLCJ2aXNDb25maWdTZXR0aW5ncyIsImlzTGF5ZXJIb3ZlcmVkIiwiX2NhbGN1bGF0ZUxheWVyRGF0YTQiLCJzZXR0aW5ncyIsIl9zZXR0aW5ncyRsYXllcnMiLCJvbGRMYXllck1hcCIsIm90aGVyTGF5ZXJzIiwiX3RvUHJvcGVydHlLZXkiLCJuZXdWaXNDb25maWciLCJ1cGRhdGVMYXllclZpc0NvbmZpZyIsInVwZGF0ZUxheWVyVmlzdWFsQ2hhbm5lbCIsInVwZGF0ZWRTdGF0ZSIsInZpc3VhbENoYW5uZWwiLCJjaGFubmVsU2NhbGVUeXBlIiwiY29sb3IiLCJ1cGRhdGVMYXllckNvbG9yVUkiLCJyYW5nZSIsImNvbG9yUmFuZ2VDb25maWciLCJjb2xvclVJIiwiY3VzdG9tQnJlYWtzIiwiX2NhbGN1bGF0ZUxheWVyRGF0YTUiLCJzY2FsZSIsImN1c3RvbU9yZGluYWwiLCJjdXN0b21QYWxldHRlIiwib3JkaW5hbERvbWFpbiIsImNvbG9yQnJlYWtzIiwic2hvd0NvbG9yQ2hhcnQiLCJlZGl0Qm91bmRzIiwiX2NhbGN1bGF0ZUxheWVyRGF0YTYiLCJzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyIiwiX3JlZjQiLCJyZWR1Y2UiLCJhY2N1Iiwic2V0RmlsdGVyQW5pbWF0aW9uVGltZVVwZGF0ZXIiLCJzZXRGaWx0ZXJVcGRhdGVyIiwic2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlciIsIl9yZWY1IiwiYW5pbWF0aW9uV2luZG93IiwibmV3RmlsdGVyIiwibmV3U3luY1RpbWVsaW5lTW9kZSIsImdldFN5bmNBbmltYXRpb25Nb2RlIiwic2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIiLCJhcHBseUZpbHRlckNvbmZpZ1VwZGF0ZXIiLCJfc2VyaWFsaXplRmlsdGVyIiwiZmlsdGVySWQiLCJvbGRGaWx0ZXIiLCJzZXJpYWxpemVkT2xkRmlsdGVyIiwic2VyaWFsaXplZE5ld0ZpbHRlciIsIl9hY3Rpb24kdmFsdWVJbmRleCIsInZhbHVlSW5kZXgiLCJkYXRhc2V0SWRzVG9GaWx0ZXIiLCJfbG9vcCIsInJlcyIsInYiLCJfdXBkYXRlRmlsdGVyUHJvcCIsImVubGFyZ2VkRmlsdGVyIiwidmlldyIsImVubGFyZ2VkIiwic2lkZSIsImZpbHRlcmVkRGF0YXNldHMiLCJmaWx0ZXJXaXRoUExvdCIsInVwZGF0ZUFsbExheWVyRG9tYWluRGF0YSIsInRpbWVSYW5nZSIsImFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXIiLCJfdXBkYXRlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4IiwiX3JlbW92ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleCIsIm5leHRWYWx1ZSIsIl9pIiwiX2FyciIsIm5leHRWYWwiLCJkb21haW5TdGVwcyIsIm5leHRGaWx0ZXIiLCJzdGVwIiwiZGF0YXNldElkcyIsIm9sZERhdGFJZCIsImRhdGFzZXRJZCIsIl9hcHBseUZpbHRlckZpZWxkTmFtZSIsIm1lcmdlRG9tYWluIiwidXBkYXRlZEZpbHRlciIsIm5ld0RhdGFzZXQiLCJncHUiLCJsYXllcklkRGlmZmVyZW5jZSIsImxheWVyRGF0YUlkcyIsImxpZCIsIm5ld0RhdGFJZHMiLCJzZXRGaWx0ZXJQbG90VXBkYXRlciIsIl9yZWY2IiwibmV3UHJvcCIsInBsb3RUeXBlIiwiY2hhcnRUeXBlIiwieUF4aXMiLCJsaW5lQ2hhcnQiLCJoaXN0b2dyYW0iLCJhZGRGaWx0ZXJVcGRhdGVyIiwiY3JlYXRlT3JVcGRhdGVGaWx0ZXJVcGRhdGVyIiwib3JpZ2luYWxJbmRleCIsImluZGV4IiwibGF5ZXJDb2xvclVJQ2hhbmdlVXBkYXRlciIsIl9yZWY3Iiwib2xkVml4Q29uZmlnIiwidG9nZ2xlRmlsdGVyQW5pbWF0aW9uVXBkYXRlciIsImlzRmlsdGVyQW5pbWF0aW9uQ29uZmlnIiwic2V0QW5pbWF0aW9uQ29uZmlnVXBkYXRlciIsInRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlciIsInRvZ2dsZUxheWVyQW5pbWF0aW9uQ29udHJvbFVwZGF0ZXIiLCJ1cGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIiLCJ1cGRhdGVMYXllckFuaW1hdGlvblNwZWVkVXBkYXRlciIsIl9yZWY4Iiwic2V0RmlsdGVyVmlld1VwZGF0ZXIiLCJzaG91bGRSZXNldE90aGVyRmlsdGVyc1ZpZXciLCJ0b2dnbGVGaWx0ZXJGZWF0dXJlVXBkYXRlciIsInJlbW92ZUZpbHRlclVwZGF0ZXIiLCJfc3RhdGUkZmlsdGVycyRpZHgiLCJuZXdGaWx0ZXJzIiwibmV3RWRpdG9yIiwiYWRkTGF5ZXJVcGRhdGVyIiwibmV3TGF5ZXJEYXRhIiwid2FybiIsIl9hY3Rpb24kZGF0YXNldElkIiwiZGVmYXVsdERhdGFzZXQiLCJyZW1vdmVMYXllclVwZGF0ZXIiLCJfcmVmOSIsIk51bWJlciIsImlzRmluaXRlIiwibGF5ZXJUb1JlbW92ZSIsInJlb3JkZXJMYXllclVwZGF0ZXIiLCJfcmVmMCIsIm9yZGVyIiwiYWRkTGF5ZXJHcm91cFVwZGF0ZXIiLCJsYXllckdyb3VwIiwibmV3TGF5ZXJPcmRlciIsInJlbW92ZUxheWVyR3JvdXBVcGRhdGVyIiwibGF5ZXJHcm91cFRvUmVtb3ZlIiwibGF5ZXJJZHNUb1JlbW92ZSIsInVwZGF0ZUxheWVyR3JvdXBVcGRhdGVyIiwib3B0aW9ucyIsIm5ld0xheWVyR3JvdXAiLCJsYXllcklkcyIsImFjYyIsImFkZExheWVyVG9MYXllckdyb3VwVXBkYXRlciIsImxheWVyR3JvdXBJZCIsImVudHJ5IiwibmV3R3JvdXBMYXllck9yZGVyIiwicmVtb3ZlTGF5ZXJGcm9tTGF5ZXJHcm91cFVwZGF0ZXIiLCJuZXdMYXllckdyb3VwT3JkZXIiLCJzd2FwTGF5ZXJPcmRlckVudHJpZXNVcGRhdGVyIiwib3JpZ2luTGF5ZXJJZCIsImRlc3RpbmF0aW9uTGF5ZXJJZCIsIm9yaWdpbkxheWVyR3JvdXBJZCIsImRlc3RpbmF0aW9uTGF5ZXJHcm91cElkIiwib3JpZ2luSW5kZXgiLCJkZXN0aW5hdGlvbkluZGV4IiwiZGVzdEluZGV4IiwiZHVwbGljYXRlTGF5ZXJVcGRhdGVyIiwiX3JlZjEiLCJvcmlnaW5hbCIsIm9yaWdpbmFsTGF5ZXJPcmRlcklkeCIsIm5ld0xhYmVsIiwicG9zdGZpeCIsInBhcmVudEdyb3VwIiwibGF5ZXJPcmRlcldpdGhvdXRQcmVwZW5kZWQiLCJpZHhJbkdyb3VwIiwidXBkYXRlZEdyb3VwIiwiYWRkRWZmZWN0VXBkYXRlciIsIl9hY3Rpb24kY29uZmlnIiwiX2FjdGlvbiRjb25maWcyIiwiX2FjdGlvbiRjb25maWczIiwiZWZmZWN0IiwibmV3RWZmZWN0Iiwic2V0UHJvcHMiLCJyZW1vdmVFZmZlY3RVcGRhdGVyIiwiX3JlZjEwIiwiZWZmZWN0VG9SZW1vdmUiLCJlZmZlY3RJZCIsInJlb3JkZXJFZmZlY3RVcGRhdGVyIiwiX3JlZjExIiwidXBkYXRlRWZmZWN0VXBkYXRlciIsIl9yZWYxMiIsImlkeDIiLCJlZmZlY3RPcmRlcklkIiwibmV4dFBhcmFtcyIsInBhcmFtZXRlcnMiLCJ0aW1lc3RhbXAiLCJuZXdFZmZlY3RzIiwibWFrZU5ld0Fubm90YXRpb24iLCJfY29uZmlnJGtpbmQiLCJfY29uZmlnJGlkIiwiX2NvbmZpZyRpc1Zpc2libGUiLCJfY29uZmlnJGF1dG9TaXplIiwiX2NvbmZpZyRhdXRvU2l6ZVkiLCJfY29uZmlnJGFuY2hvclBvaW50IiwiX2NvbmZpZyRsYWJlbCIsIl9jb25maWckbGluZUNvbG9yIiwiX2NvbmZpZyRsaW5lV2lkdGgiLCJfY29uZmlnJHRleHRXaWR0aCIsIl9jb25maWckdGV4dEhlaWdodCIsIl9jb25maWckdGV4dFZlcnRpY2FsQSIsIl9hcm1MZW5ndGgiLCJfYW5nbGUiLCJfYXJtTGVuZ3RoMiIsIl9hbmdsZTIiLCJfYXJtTGVuZ3RoMyIsIl9hbmdsZTMiLCJfcmFkaXVzSW5NZXRlcnMiLCJraW5kIiwiYmFzZSIsImF1dG9TaXplIiwiYXV0b1NpemVZIiwiYW5jaG9yUG9pbnQiLCJsaW5lQ29sb3IiLCJsaW5lV2lkdGgiLCJ0ZXh0V2lkdGgiLCJ0ZXh0SGVpZ2h0IiwidGV4dFZlcnRpY2FsQWxpZ24iLCJQT0lOVCIsImFybUxlbmd0aCIsImFuZ2xlIiwiQVJST1ciLCJDSVJDTEUiLCJyYWRpdXNJbk1ldGVycyIsIlRFWFQiLCJhZGRBbm5vdGF0aW9uVXBkYXRlciIsIm5ld0Fubm90YXRpb24iLCJyZW1vdmVBbm5vdGF0aW9uVXBkYXRlciIsIl9yZWYxMyIsImEiLCJ1cGRhdGVBbm5vdGF0aW9uVXBkYXRlciIsIl9yZWYxNCIsIm5leHRBbm5vdGF0aW9uIiwibmV3QW5ub3RhdGlvbnMiLCJkdXBsaWNhdGVBbm5vdGF0aW9uVXBkYXRlciIsIl9yZWYxNSIsInNldFNlbGVjdGVkQW5ub3RhdGlvblVwZGF0ZXIiLCJfcmVmMTYiLCJpc0VkaXRpbmdUZXh0IiwicmVtb3ZlRGF0YXNldFVwZGF0ZXIiLCJkYXRhc2V0S2V5IiwiX3N0YXRlJGRhdGFzZXRzIiwibmV3RGF0YXNldHMiLCJsYXllcnNUb1JlbW92ZSIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJpbmRleE9mIiwicHVzaCIsInJlbW92ZURhdGFzZXRGcm9tSW50ZXJhY3Rpb25Db25maWciLCJfcmVmMTciLCJfaW50ZXJhY3Rpb25Db25maWciLCJfY29uZmlnJGZpZWxkc1RvU2hvdyIsInVwZGF0ZUxheWVyQmxlbmRpbmdVcGRhdGVyIiwidXBkYXRlT3ZlcmxheUJsZW5kaW5nVXBkYXRlciIsInNob3dEYXRhc2V0VGFibGVVcGRhdGVyIiwidXBkYXRlVGFibGVDb2xvclVwZGF0ZXIiLCJ1cGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyIiwibmV3Q29sb3IiLCJyZXNldE1hcENvbmZpZ1VwZGF0ZXIiLCJpbml0aWFsU3RhdGUiLCJyZWNlaXZlTWFwQ29uZmlnVXBkYXRlciIsIl9yZWYxOCIsIl9yZWYxOCRwYXlsb2FkIiwicGF5bG9hZCIsIl9yZWYxOCRwYXlsb2FkJGNvbmZpZyIsIl9yZWYxOCRwYXlsb2FkJG9wdGlvbiIsInZpc1N0YXRlIiwia2VlcEV4aXN0aW5nQ29uZmlnIiwibWVyZ2VkU3RhdGUiLCJfaXRlcmF0b3IzIiwiX3N0ZXAzIiwibWVyZ2VyIiwibWVyZ2UiLCJ0b01lcmdlUHJvcCIsImxheWVySG92ZXJVcGRhdGVyIiwiaW5mbyIsImludGVyYWN0aW9uQ29uZmlnQ2hhbmdlVXBkYXRlciIsImNvbnRyYWRpY3QiLCJrIiwibGF5ZXJDbGlja1VwZGF0ZXIiLCJwaW5uZWQiLCJwaWNrZWQiLCJtYXBDbGlja1VwZGF0ZXIiLCJtb3VzZU1vdmVVcGRhdGVyIiwiX3JlZjE5IiwiZXZ0IiwicG9pbnQiLCJtb3VzZVBvc2l0aW9uIiwibG5nTGF0IiwidG9nZ2xlU3BsaXRNYXBVcGRhdGVyIiwiZHVwbGljYXRlIiwiY2xvc2VTcGVjaWZpY01hcEF0SW5kZXgiLCJfcmVmMjAiLCJoYXNUYWJ1bGFyRGF0YXNldERhdGEiLCJkYXRhIiwiX2RhdGEkcm93cyIsIl9kYXRhJGNvbHMiLCJCb29sZWFuIiwicm93cyIsImNvbHMiLCJhcnJvd1RhYmxlIiwibmVlZHNFeHRlcm5hbGx5SG9zdGVkSHlkcmF0ZSIsIl9kYXRhc2V0JGluZm8iLCJfZGF0YXNldCRtZXRhZGF0YSIsIkVYVEVSTkFMTFlfSE9TVEVEIiwibWV0YWRhdGEiLCJzb3VyY2UiLCJoeWRyYXRlRXh0ZXJuYWxseUhvc3RlZFByb3RvRGF0YXNldCIsIl94IiwiX2h5ZHJhdGVFeHRlcm5hbGx5SG9zdGVkUHJvdG9EYXRhc2V0IiwiYXBwbHkiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZTIiLCJfZGF0YXNldCRtZXRhZGF0YTYiLCJfZGF0YXNldCRtZXRhZGF0YTciLCJsb2FkZWQiLCJfZGF0YXNldCRtZXRhZGF0YTgiLCJ3cmFwIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwiYWJydXB0IiwiZm9ybWF0IiwiYnlwYXNzQ2FjaGUiLCJzZW50IiwiRXJyb3IiLCJldGFnIiwibGFzdE1vZGlmaWVkIiwibGFzdEZldGNoZWRBdCIsIkRhdGUiLCJub3ciLCJyZWZyZXNoU3RhdHVzIiwic3RvcCIsIkhZRFJBVEVfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLIiwiZnJvbVByb21pc2UiLCJGQUlMX0NSRUFURV9EQVRBU0VUX1RBU0siLCJfcmVmMjEiLCJfY2FsbGVlIiwibWVzc2FnZSIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJfeDIiLCJjcmVhdGVOZXdEYXRhRW50cnlUYXNrIiwiY2hhaW4iLCJoeWRyYXRlZCIsInRhc2siLCJwYXRjaERhdGFzZXRNZXRhZGF0YSIsInBhdGNoIiwicmVmcmVzaEV4dGVybmFsbHlIb3N0ZWRUYWJsZSIsIl94MyIsIl9yZWZyZXNoRXh0ZXJuYWxseUhvc3RlZFRhYmxlIiwiX2NhbGxlZTMiLCJfcmVmMjIiLCJvblByb2dyZXNzIiwiX2NhbGxlZTMkIiwiX2NvbnRleHQzIiwiYXJnIiwiUkVGUkVTSF9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0siLCJmcm9tUHJvbWlzZVdpdGhQcm9ncmVzcyIsInJlZnJlc2hEYXRhc2V0VXBkYXRlciIsIl9yZWYyMyIsIl9kYXRhc2V0JG1ldGFkYXRhMiIsIl9kYXRhc2V0JG1ldGFkYXRhMyIsIm5leHREYXRhc2V0IiwicmVmcmVzaEVycm9yIiwicmVmcmVzaFByb2dyZXNzIiwicHJvZ3Jlc3MiLCJfcHJvZ3Jlc3MkcGVyY2VudCIsIk1hdGgiLCJyb3VuZCIsInBlcmNlbnQiLCJiaW1hcCIsInJlZnJlc2hEYXRhc2V0UHJvZ3Jlc3NVcGRhdGVyIiwiX3JlZjI0IiwiX2RhdGFzZXQkbWV0YWRhdGE0IiwiX2RhdGFzZXQkbWV0YWRhdGE1IiwibmV4dFBlcmNlbnQiLCJtYXgiLCJtaW4iLCJmaWVsZE5hbWVzRXF1YWwiLCJjdXJyZW50IiwiaW5jb21pbmciLCJldmVyeSIsInJlYmluZExheWVyc0FuZEZpbHRlcnNBZnRlclNjaGVtYUNoYW5nZSIsIm5leHRMYXllcnMiLCJkcm9wcGVkTGF5ZXJzIiwicmVib3VuZCIsIm5leHRMYXllck9yZGVyIiwibmV4dFNwbGl0TWFwcyIsIm5leHRMYXllckRhdGEiLCJvbGRJZHgiLCJmaWx0ZXJzRm9yRGF0YXNldCIsIm90aGVyRmlsdGVycyIsIl92YWxpZGF0ZUZpbHRlcnNVcGRhdCIsInVwZGF0ZWREYXRhc2V0cyIsIm5leHRGaWx0ZXJzIiwicmVmcmVzaERhdGFzZXRTdWNjZXNzVXBkYXRlciIsIl9yZWYyNSIsIl9yZXN1bHQkZGF0YSIsIm1ldGFkYXRhUGF0Y2giLCJzY2hlbWFVbmNoYW5nZWQiLCJub3RNb2RpZmllZCIsInVwZGF0ZSIsInJlZnJlc2hlZCIsInJlYXBwbHlGaWx0ZXJzQW5kTGF5ZXJEYXRhIiwiaXNEYXRhc2V0Um93TGlzdCIsInRvQXJyYXlSb3ciLCJyb3ciLCJyZWNvcmQiLCJub3JtYWxpemVEYXRhc2V0Um93cyIsImxpc3QiLCJub3JtYWxpemVkIiwiYXJyYXlSb3ciLCJhZGRUb0RhdGFzZXRVcGRhdGVyIiwiX3JlZjI2IiwiYXBwbGllZCIsInVwc2VydEJ5IiwidXBzZXJ0Um93cyIsImFwcGVuZFJvd3MiLCJyZW1vdmVGcm9tRGF0YXNldFVwZGF0ZXIiLCJfcmVmMjciLCJyb3dJbmRleGVzIiwiYnlGaWVsZCIsImluZGV4ZXMiLCJmaW5kUm93SW5kZXhlc0J5RmllbGRWYWx1ZXMiLCJyZW1vdmVSb3dzIiwicmVmcmVzaERhdGFzZXRFcnJvclVwZGF0ZXIiLCJfcmVmMjgiLCJTdHJpbmciLCJ1cGRhdGVWaXNEYXRhVXBkYXRlciIsImNyZWF0ZURhdGFzZXRUYXNrcyIsIm5vdGlmaWNhdGlvblRhc2tzIiwiX3JlZjI5IiwiZGF0YXNldEluZGV4IiwiX3JlZjI5JGluZm8iLCJyZXN0IiwiX2V4Y2x1ZGVkMiIsImRhdGFzZXRzQWxsU2V0dGxlZFRhc2siLCJhbGxTZXR0bGVkIiwicmVzdWx0cyIsImFkZFRvTWFwT3B0aW9ucyIsInNldExvYWRpbmdJbmRpY2F0b3JVcGRhdGVyIiwiY2hhbmdlIiwiY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3NVcGRhdGVyIiwiX2FjdGlvbiRwYXlsb2FkIiwibmV3RGF0YUVudHJpZXMiLCJzdGF0dXMiLCJyZWFzb24iLCJsYXllck1lcmdlcnMiLCJtIiwid2FpdEZvckxheWVyRGF0YSIsImRhdGFzZXRNZXJnZXJzIiwicG9zdE1lcmdlclBheWxvYWQiLCJhcHBseU1lcmdlcnNVcGRhdGVyIiwibWVyZ2VTdGF0ZVJlc3VsdCIsImFsbE1lcmdlZCIsInBvc3RNZXJnZVVwZGF0ZXIiLCJsYXllclZpc0NvbmZpZ0Zyb21BZGREYXRhT3B0aW9ucyIsImxheWVyVmlzQ29uZmlnIiwiX3R5cGVvZiIsInBvbHlnb25GaWx0ZXJEZXBlbmRzT25MYXllck1ldGEiLCJfbGF5ZXIkY29uZmlnIiwiZ2VvanNvbiIsImNvbHVtbk1vZGUiLCJmRGF0YUlkIiwiZGF0YXNldEZpbHRlcmVkIiwiZGF0YUVtcHR5IiwibmV3TGF5ZXJzIiwiYXV0b0NyZWF0ZUxheWVycyIsImFkZERlZmF1bHRMYXllcnMiLCJ0b29sdGlwRmllbGRzIiwiYXV0b0NyZWF0ZVRvb2x0aXBzIiwiYWRkRGVmYXVsdFRvb2x0aXBzIiwicG9seWdvbkZpbHRlcnMiLCJwb2x5Z29uIiwicG9seWdvbk1ldGFEYXRhSWRzIiwiX2YkbGF5ZXJJZCIsImNlbnRlck1hcCIsImJvdW5kcyIsInBhZGRpbmciLCJmaXRCb3VuZHNUYXNrIiwicmVuYW1lRGF0YXNldFVwZGF0ZXIiLCJBTExPV0VEX1VQREFURV9EQVRBU0VUX1BST1BTIiwidmFsaWRhdGVEYXRhc2V0VXBkYXRlUHJvcHMiLCJ2YWxpZGF0ZWRQcm9wcyIsImVudHJpZXMiLCJfZW50cnkiLCJfc2xpY2VkVG9BcnJheSIsImV4aXN0aW5nIiwicmVjb25jaWxlTGF5ZXJXaXRoTmV3U2NoZW1hIiwicmVuYW1lcyIsIm5ld1RhYmxlIiwiX2xheWVyJGNvbmZpZyR0ZXh0TGFiIiwiY29uZmlnUGF0Y2giLCJjb2x1bW5zUGF0Y2giLCJjb2x1bW5zQ2hhbmdlZCIsImNvbHVtbnMiLCJfcmVmMzAiLCJfcmVmMzEiLCJja2V5IiwiY29sIiwiX3JlZjMyIiwiZmllbGRDb25maWciLCJsYXllckNvcHkiLCJhc3NpZ24iLCJjcmVhdGUiLCJnZXRQcm90b3R5cGVPZiIsImhhc0FsbENvbHVtbnMiLCJ1cGRhdGVEYXRhc2V0VXBkYXRlciIsIl9pbnRlcmFjdGlvbkNvbmZpZzIiLCJfdG9vbHRpcCRjb25maWciLCJfYWN0aW9uJHJlbmFtZXMiLCJ1cGRhdGVTY2hlbWEiLCJmaWx0ZXJlZElkeENQVSIsImFsbEluZGV4ZXMiLCJmaWx0ZXJSZWNvcmRDUFUiLCJzb3J0Q29sdW1uIiwic29ydE9yZGVyIiwicGlubmVkQ29sdW1ucyIsIl9yZW5hbWVzJG5hbWUiLCJnZXRDb2x1bW5GaWVsZElkeCIsIm5ld0ZpZWxkc0J5TmFtZSIsIlNldCIsIl9yZW5hbWVzJG9sZE5hbWUiLCJfdXBkYXRlZCR5QXhpcyIsInZpIiwib2xkTmFtZSIsIm5ld05hbWUiLCJmaWVsZElkeCIsIl9hcHBseUZpbHRlckZpZWxkTmFtZTIiLCJ1cGRhdGVkIiwiaGFzIiwiZmlsdGVyVGFibGUiLCJyZWNvbmNpbGVkIiwibmV4dEZpZWxkc1RvU2hvdyIsImZsYXRNYXAiLCJfcmVuYW1lcyRmJG5hbWUiLCJfc3RhdGUkc3BsaXRNYXBzJGluZGUiLCJpbmRleFRvUmV0cmlldmUiLCJtYXBMYXllcnMiLCJsb2FkRmlsZXNVcGRhdGVyIiwiZmlsZXMiLCJfYWN0aW9uJG9uRmluaXNoIiwib25GaW5pc2giLCJmcm9tIiwiaW5pdGlhbEZpbGVMb2FkaW5nUHJvZ3Jlc3MiLCJmaWxlQ2FjaGUiLCJmaWxlc1RvTG9hZCIsImxvYWROZXh0RmlsZVVwZGF0ZXIiLCJsb2FkRmlsZVN0ZXBTdWNjZXNzVXBkYXRlciIsImZpbGVOYW1lIiwiX3N0YXRlJGZpbGVMb2FkaW5nIiwic3RhdGVXaXRoUHJvZ3Jlc3MiLCJ1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlciIsInN0YXRlV2l0aENhY2hlIiwiX2ZpbGVzVG9Mb2FkIiwiX3RvQXJyYXkiLCJmaWxlIiwicmVtYWluaW5nRmlsZXNUb0xvYWQiLCJtYWtlTG9hZEZpbGVUYXNrIiwiZ2VuIiwiY29udGVudCIsInByb2Nlc3NGaWxlQ29udGVudFVwZGF0ZXIiLCJfYWN0aW9uJHBheWxvYWQyIiwicGFyc2VQcm9ncmVzcyIsInByZXZQcm9ncmVzcyIsIm5leHRGaWxlQmF0Y2hVcGRhdGVyIiwiX3JlZjMzIiwiX2FjY3VtdWxhdGVkJGRhdGEiLCJfcmVmMzMkcGF5bG9hZCIsImFjY3VtdWxhdGVkIiwidXNlQXJyb3dQcm9ncmVzc2l2ZUxvYWRpbmciLCJlbmRzV2l0aCIsInNraXBBcnJvd0NvbXBhY3QiLCJfcmVmMzQiLCJsb2FkRmlsZXNFcnJVcGRhdGVyIiwiX3JlZjM1IiwiX3N0YXRlJGZpbGVMb2FkaW5nMiIsImFwcGx5Q1BVRmlsdGVyVXBkYXRlciIsIl9yZWYzNiIsImRhdGFJZHMiLCJzZXRNYXBJbmZvVXBkYXRlciIsImVtcHR5IiwiZGVmYXVsdExheWVycyIsImZvdW5kTGF5ZXJzIiwibWVyZ2VkIiwiX3JlZjM4IiwiZml4ZWREb21haW4iLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNyIsIl9zdGF0ZSRmaWx0ZXJzIiwiYW5pbWF0YWJsZUxheWVycyIsImxheWVyRG9tYWlucyIsIm1lcmdlZERvbWFpbiIsIm1lcmdlZFRpbWVTdGVwcyIsInNvcnQiLCJzeW5jZWRGaWx0ZXIiLCJuZXdBbmltYXRpb25Eb21haW4iLCJzZXRFZGl0b3JNb2RlVXBkYXRlciIsIl9yZWYzOSIsInNrZXRjaGVzRW5hYmxlZCIsImVuYWJsZURyYXdPbk1hcFNrZXRjaGVzIiwiRFJBV19QT0lOVCIsIkRSQVdfTElORVNUUklORyIsInNldEZlYXR1cmVzVXBkYXRlciIsIl9yZWY0MCIsIl9sYXN0RmVhdHVyZSRwcm9wZXJ0aSIsIl9sYXN0RmVhdHVyZSRwcm9wZXJ0aTIiLCJfcmVmNDAkZmVhdHVyZXMiLCJsYXN0RmVhdHVyZSIsInByb3BlcnRpZXMiLCJpc0Nsb3NlZCIsInNoYXBlIiwiRURJVCIsImZlYXR1cmUiLCJmZWF0dXJlVmFsdWUiLCJmaWx0ZXJJZHgiLCJmaWwiLCJmaW5kRWRpdG9yRmVhdHVyZSIsIl9zdGF0ZSRlZGl0b3Ikc2VsZWN0ZSIsImZyb21FZGl0b3IiLCJpdGVtIiwic2V0RWRpdG9yRmVhdHVyZVByb3BlcnRpZXNVcGRhdGVyIiwiX3JlZjQxIiwiX3N0YXRlJGVkaXRvciRzZWxlY3RlMiIsIm5leHRGZWF0dXJlIiwibmV4dEVkaXRvciIsInNldFNlbGVjdGVkRmVhdHVyZVVwZGF0ZXIiLCJfcmVmNDIiLCJzZWxlY3Rpb25Db250ZXh0IiwiZGVsZXRlRmVhdHVyZVVwZGF0ZXIiLCJfcmVmNDMiLCJzZXRQb2x5Z29uRmlsdGVyTGF5ZXJVcGRhdGVyIiwibm9uZUZpbHRlckZlYXR1cmUiLCJfZmlsdGVyJGxheWVySWQiLCJpc0xheWVySW5jbHVkZWQiLCJza2V0Y2hGZWF0dXJlIiwic3RhdGVXaXRob3V0RmlsdGVyIiwic2V0UG9seWdvbkZpbHRlckFsbExheWVyc1VwZGF0ZXIiLCJ2aXNpYmxlTGF5ZXJJZHMiLCJhbGxMYXllcklkcyIsInNvcnRUYWJsZUNvbHVtblVwZGF0ZXIiLCJfcmVmNDQiLCJjb2x1bW4iLCJzb3J0TW9kZSIsImN1cnJlbnRNb2RlIiwiQVNDRU5ESU5HIiwic29ydGVkIiwicGluVGFibGVDb2x1bW5VcGRhdGVyIiwiX3JlZjQ1IiwiY29weVRhYmxlQ29sdW1uVXBkYXRlciIsIl9yZWY0NiIsInRleHQiLCJkYXRhQ29udGFpbmVyIiwidmFsdWVBdCIsImpvaW4iLCJzZXRDb2x1bW5EaXNwbGF5Rm9ybWF0VXBkYXRlciIsIl9yZWY0NyIsImZvcm1hdHMiLCJkaXNwbGF5Rm9ybWF0IiwiX2xheWVyJGNvbmZpZzIiLCJjb2xvckZpZWxkIiwiZ2V0TWFwcGVkVmFsdWUiLCJmaWx0ZXJQcm9wcyIsIm1hcHBlZFZhbHVlIiwieWllbGRGb3JQYWludCIsIlByb21pc2UiLCJyZXNvbHZlIiwic2V0VGltZW91dCIsInJlcXVlc3REYXRhc2V0Q29sdW1uU3RhdGlzdGljcyIsIl94NCIsIl9yZXF1ZXN0RGF0YXNldENvbHVtblN0YXRpc3RpY3MiLCJfY2FsbGVlNCIsIl9yZWY0OCIsIl9jYWxsZWU0JCIsIl9jb250ZXh0NCIsImdldENvbHVtbkZpbHRlclByb3BzIiwiZmllbGRUeXBlIiwiTE9BRF9DT0xVTU5fU1RBVFNfVEFTSyIsImxvYWRDb2x1bW5TdGF0c1VwZGF0ZXIiLCJfcmVmNDkiLCJmaWVsZE5hbWUiLCJmaWVsZE5hbWVzVG9Mb2FkIiwiZmllbGRzVG9Mb2FkIiwiaXNMb2FkaW5nU3RhdHMiLCJ0YXNrcyIsIl9yZWY1MCIsImxvYWRDb2x1bW5TdGF0c1N1Y2Nlc3NVcGRhdGVyIiwiX3JlZjUxIiwibmV3RmlsdGVyUHJvcHMiLCJjb2x1bW5TdGF0cyIsImxvYWRDb2x1bW5TdGF0c0Vycm9yVXBkYXRlciIsIl9yZWY1MiIsInRvZ2dsZUVkaXRvclZpc2liaWxpdHlVcGRhdGVyIiwiY29udmVydEVkaXRvckZlYXR1cmVzVG9MYXllclVwZGF0ZXIiLCJfYWN0aW9uIiwiY2xlYXJlZFN0YXRlIiwibGFiZWxJZCIsImZsb29yIiwicmFuZG9tIiwic2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ1VwZGF0ZXIiLCJfcmVmNTMiLCJ1cGRhdGVzIiwiY2hlY2tUaW1lQ29uZmlnQXJncyIsImFsbG93ZWQiLCJzZXRMYXllckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyIiwiX3JlZjU0IiwibGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlVXBkYXRlciIsIl9sYXllciRmaWx0ZXJlZEl0ZW1DbyIsImV2ZW50IiwiZGVja2dsTGF5ZXJJZCIsImNvdW50IiwiZmlsdGVyZWRJdGVtQ291bnQiLCJ3bXNGZWF0dXJlSW5mb1VwZGF0ZXIiLCJmZWF0dXJlSW5mbyIsIm9iamVjdCIsIndtc0ZlYXR1cmVJbmZvIiwiX25ld1N0YXRlJGFuaW1hdGlvbkNvIiwiX25ld1N0YXRlJGFuaW1hdGlvbkNvMiIsIl9hY3Rpb24kZW5hYmxlIiwiaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyIsImhhc0ludGVydmFsQmFzZWRBbmltYXRpb25MYXllciIsIm5ld0ZpbHRlckRvbWFpbiIsImludGVydmFsIiwiYWRqdXN0VGltZUZpbHRlckludGVydmFsIiwibmV3RmlsdGVyVmFsdWUiLCJzeW5jVGltZWxpbmVNb2RlIiwiZW5kIiwidmFsaWRhdGVTeW5jQW5pbWF0aW9uTW9kZSIsIl9yZWY1NSIsInRpbWVsaW5lVmFsdWUiLCJnZXRUaW1lbGluZVZhbHVlRnJvbUZpbHRlciIsImZyZWUiLCJfZmlsdGVyJHN5bmNUaW1lbGluZU0iLCJuZXdNb2RlIiwic3RhcnQiLCJpbnRlcnZhbEluZGV4IiwiY3VycmVudEluZGV4IiwibWV0YSIsInRhcmdldFRpbWVJbnRlcnZhbCIsIm5ld0luZGV4IiwiaGV4VGlsZUludGVydmFsIiwidXBkYXRlZFBsb3RUeXBlIiwiZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzIiwiZGF0YUlkVG9SZXBsYWNlIiwiX3ZhbHVlJGNvbmZpZyIsIl92YWx1ZSRjb25maWcyIiwicmVwbGFjZWQiLCJmaW5kQ2hpbGREYXRhc2V0SWRzIiwiX3ZhbHVlJG5ld0RhdGFzZXQiLCJjaGlsZERhdGFJZHMiLCJtb3ZlVmFsdWVUb0JlTWVyZ2VkIiwicHJvcFZhbHVlcyIsIl9yZWY1NyIsInNhdmVVbm1lcmdlZCIsInN0YXRlUmVtb3ZlZCIsInByb3BWYWx1ZSIsInAiLCJ0b0JlTWVyZ2VkIiwicmVwbGFjZURhdGFzZXRBbmREZXBzIiwiZGF0YUlkVG9Vc2UiLCJyZXBsYWNlRGF0YXNldERlcHNJblN0YXRlIiwicHJlcGFyZVN0YXRlRm9yRGF0YXNldFJlcGxhY2UiLCJfbmV4dFN0YXRlJGxheWVyVG9CZU0iLCJzZXJpYWxpemVkU3RhdGUiLCJwcmVzZXJ2ZUxheWVyT3JkZXIiLCJwcmVzZXJ2ZURhdGFzZXRPcmRlciIsIl9zZXJpYWxpemVkU3RhdGUkc3BsaSIsIl9yZWY1OCIsImFjY3VTdGF0ZSIsIl9yZWY1OSIsInJlcGxhY2VQYXJlbnREYXRhc2V0SWRzIiwiZ2V0Q2hpbGREYXRhc2V0SWRzIiwicHJlc2VydmVPcmRlciIsInRvTWVyZ2VQcm9wcyIsInNhdmVkUHJvcHMiLCJyZXBsYWNlZFN0YXRlIiwiX3JlcGxhY2VkU3RhdGUkbWVyZ2VyIiwibWVyZ2VyT3B0aW9ucyIsInJlcGxhY2VkSXRlbSIsInJlcGxhY2VQcm9wVmFsdWVJblN0YXRlIiwiX3JlZjYwIiwiY2hpbGREYXRhSWQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdmlzLXN0YXRlLXVwZGF0ZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7YmJveH0gZnJvbSAnQHR1cmYvYmJveCc7XG5pbXBvcnQgdHlwZSB7QWxsR2VvSlNPTn0gZnJvbSAnQHR1cmYvaGVscGVycyc7XG5pbXBvcnQgY29weSBmcm9tICdjb3B5LXRvLWNsaXBib2FyZCc7XG5pbXBvcnQgZGVlcG1lcmdlIGZyb20gJ2RlZXBtZXJnZSc7XG5pbXBvcnQge2NvbnNvbGUgYXMgQ29uc29sZX0gZnJvbSAnZ2xvYmFsL3dpbmRvdyc7XG5pbXBvcnQgY2xvbmVEZWVwIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L2Nsb25lRGVlcCc7XG5pbXBvcnQgZ2V0IGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L2dldCc7XG5pbXBvcnQgaXNFcXVhbCBmcm9tICdlcy10b29sa2l0L2NvbXBhdC9pc0VxdWFsJztcbmltcG9ydCBwaWNrIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L3BpY2snO1xuaW1wb3J0IHVuaXEgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvdW5pcSc7XG5pbXBvcnQgeG9yIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L3hvcic7XG5pbXBvcnQgVGFzaywge2Rpc2FibGVTdGFja0NhcHR1cmluZywgd2l0aFRhc2t9IGZyb20gJ3JlYWN0LXBhbG0vdGFza3MnO1xuLy8gVGFza3NcbmltcG9ydCB7XG4gIERFTEFZX1RBU0ssXG4gIEFDVElPTl9UQVNLLFxuICBMT0FEX0ZJTEVfVEFTSyxcbiAgUFJPQ0VTU19GSUxFX0RBVEEsXG4gIFVOV1JBUF9UQVNLXG59IGZyb20gJ0BrZXBsZXIuZ2wvdGFza3MnO1xuLy8gQWN0aW9uc1xuaW1wb3J0IHtcbiAgYWRkTm90aWZpY2F0aW9uLFxuICBBY3Rpb25UeXBlcyxcbiAgQ3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3NQYXlsb2FkLFxuICBNYXBTdGF0ZUFjdGlvbnMsXG4gIFJlY2VpdmVNYXBDb25maWdQYXlsb2FkLFxuICBWaXNTdGF0ZUFjdGlvbnMsXG4gIGFwcGx5TGF5ZXJDb25maWcsXG4gIGNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzLFxuICBsYXllckNvbmZpZ0NoYW5nZSxcbiAgbGF5ZXJUeXBlQ2hhbmdlLFxuICBsYXllclZpc0NvbmZpZ0NoYW5nZSxcbiAgbGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlLFxuICBsb2FkRmlsZVN0ZXBTdWNjZXNzLFxuICBsb2FkRmlsZXNFcnIsXG4gIGxvYWRGaWxlc1N1Y2Nlc3MsXG4gIGxvYWROZXh0RmlsZSxcbiAgbmV4dEZpbGVCYXRjaCxcbiAgc2V0RmlsdGVyLFxuICBwcm9jZXNzRmlsZUNvbnRlbnQsXG4gIGZpdEJvdW5kcyBhcyBmaXRNYXBCb3VuZHMsXG4gIHRvZ2dsZUxheWVyRm9yTWFwLFxuICBhcHBseUZpbHRlckNvbmZpZyxcbiAgU2V0TG9hZGluZ0luZGljYXRvclBheWxvYWQsXG4gIGxvYWRDb2x1bW5TdGF0c1N1Y2Nlc3MsXG4gIGxvYWRDb2x1bW5TdGF0c0Vycm9yLFxuICByZWZyZXNoRGF0YXNldFN1Y2Nlc3MsXG4gIHJlZnJlc2hEYXRhc2V0RXJyb3IsXG4gIHJlZnJlc2hEYXRhc2V0UHJvZ3Jlc3Ncbn0gZnJvbSAnQGtlcGxlci5nbC9hY3Rpb25zJztcblxuLy8gVXRpbHNcbmltcG9ydCB7XG4gIEZJTFRFUl9VUERBVEVSX1BST1BTLFxuICBhZGROZXdMYXllcnNUb1NwbGl0TWFwLFxuICBzbmFwVG9NYXJrcyxcbiAgYXBwbHlGaWx0ZXJGaWVsZE5hbWUsXG4gIGFwcGx5RmlsdGVyc1RvRGF0YXNldHMsXG4gIGFycmF5SW5zZXJ0LFxuICBjb21wdXRlU3BsaXRNYXBMYXllcnMsXG4gIGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4sXG4gIGVycm9yTm90aWZpY2F0aW9uLFxuICBlZGl0b3JGZWF0dXJlc1RvRmVhdHVyZUNvbGxlY3Rpb24sXG4gIG1lcmdlVXNlckZlYXR1cmVQcm9wZXJ0aWVzLFxuICB0b1NrZXRjaEZlYXR1cmUsXG4gIGZlYXR1cmVUb0ZpbHRlclZhbHVlLFxuICBmaWx0ZXJEYXRhc2V0Q1BVLFxuICBnZW5lcmF0ZVBvbHlnb25GaWx0ZXIsXG4gIGdldERlZmF1bHRGaWx0ZXIsXG4gIGdldEZpbHRlcklkSW5GZWF0dXJlLFxuICBnZXRUaW1lV2lkZ2V0VGl0bGVGb3JtYXR0ZXIsXG4gIGlzSW5SYW5nZSxcbiAgaXNPYmplY3QsXG4gIGlzUGxhaW5PYmplY3QsXG4gIGlzUmdiQ29sb3IsXG4gIHBhcnNlRmllbGRWYWx1ZSxcbiAgcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzLFxuICBzZXQsXG4gIHVwZGF0ZUZpbHRlclBsb3QsXG4gIHJlbW92ZUZpbHRlclBsb3QsXG4gIGlzTGF5ZXJBbmltYXRhYmxlLFxuICBpc1NpZGVGaWx0ZXIsXG4gIGdldEFwcGxpY2F0aW9uQ29uZmlnLFxuICB2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0c1xufSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7Z2VuZXJhdGVIYXNoSWQsIHRvQXJyYXksIGFycmF5TW92ZX0gZnJvbSAnQGtlcGxlci5nbC9jb21tb24tdXRpbHMnO1xuLy8gTWVyZ2Vyc1xuaW1wb3J0IHtcbiAgQU5JTUFUSU9OX1dJTkRPVyxcbiAgQkFTRV9TUEVFRCxcbiAgQ09NUEFSRV9UWVBFUyxcbiAgREVGQVVMVF9URVhUX0xBQkVMLFxuICBFRElUT1JfTU9ERVMsXG4gIEZJTFRFUl9UWVBFUyxcbiAgRklMVEVSX1ZJRVdfVFlQRVMsXG4gIExBWUVSX1RZUEVTLFxuICBGUFMsXG4gIExJR0hUX0FORF9TSEFET1dfRUZGRUNULFxuICBESVNUQU5DRV9GT0dfVFlQRSxcbiAgU1VSRkFDRV9GT0dfVFlQRSxcbiAgTUFYX0RFRkFVTFRfVE9PTFRJUFMsXG4gIFBMT1RfVFlQRVMsXG4gIFNPUlRfT1JERVIsXG4gIFNZTkNfVElNRUxJTkVfTU9ERVMsXG4gIENIQU5ORUxfU0NBTEVTLFxuICBTQ0FMRV9UWVBFUyxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0tJTkQsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9BTkdMRSxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0FSTV9MRU5HVEgsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9URVhUX1dJRFRILFxuICBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9IRUlHSFQsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX1dJRFRILFxuICBJTklUSUFMX0FOTk9UQVRJT05fTElORV9DT0xPUixcbiAgQW5ub3RhdGlvbktpbmQsXG4gIERhdGFzZXRUeXBlLFxuICBnZXREYXRhc2V0UmVmcmVzaEludGVydmFsTXMsXG4gIGdldFJlbW90ZVNvdXJjZUZvcm1hdFxufSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge0xBWUVSX0lEX0xFTkdUSCwgTGF5ZXIsIExheWVyQ2xhc3Nlc30gZnJvbSAnQGtlcGxlci5nbC9sYXllcnMnO1xuaW1wb3J0IHtcbiAgYXBwbHlfLFxuICBjb21wb3NlXyxcbiAgZmlsdGVyT3V0QnlJZCxcbiAgbWVyZ2VfLFxuICBwYXlsb2FkXyxcbiAgcGlja18sXG4gIHJlbW92ZUVsZW1lbnRBdEluZGV4LFxuICBzd2FwX1xufSBmcm9tICcuL2NvbXBvc2VyLWhlbHBlcnMnO1xuaW1wb3J0IHtpc1ZhbGlkTWVyZ2VyLCBtZXJnZVN0YXRlRnJvbU1lcmdlcnN9IGZyb20gJy4vbWVyZ2VyLWhhbmRsZXInO1xuaW1wb3J0IHtcbiAgVklTX1NUQVRFX01FUkdFUlMsXG4gIGNyZWF0ZUxheWVyRnJvbUNvbmZpZyxcbiAgcGFyc2VMYXllckNvbmZpZyxcbiAgc2VyaWFsaXplRmlsdGVyLFxuICBzZXJpYWxpemVMYXllcixcbiAgc2VyaWFsaXplVmlzU3RhdGUsXG4gIHZhbGlkYXRlTGF5ZXJXaXRoRGF0YVxufSBmcm9tICcuL3Zpcy1zdGF0ZS1tZXJnZXInO1xuXG5pbXBvcnQgS2VwbGVyR0xTY2hlbWEsIHtNZXJnZXIsIFBvc3RNZXJnZXJQYXlsb2FkLCBWaXNTdGF0ZX0gZnJvbSAnQGtlcGxlci5nbC9zY2hlbWFzJztcbmltcG9ydCB7bG9hZEV4dGVybmFsbHlIb3N0ZWREYXRhc2V0LCBwcm9jZXNzR2VvanNvbn0gZnJvbSAnQGtlcGxlci5nbC9wcm9jZXNzb3JzJztcblxuaW1wb3J0IHtcbiAgRmlsdGVyLFxuICBGZWF0dXJlLFxuICBJbnRlcmFjdGlvbkNvbmZpZyxcbiAgQW5pbWF0aW9uQ29uZmlnLFxuICBGaWx0ZXJBbmltYXRpb25Db25maWcsXG4gIEVkaXRvcixcbiAgRmllbGQsXG4gIExheWVyVmlzQ29uZmlnLFxuICBUaW1lUmFuZ2VGaWx0ZXIsXG4gIEFubm90YXRpb24sXG4gIEFubm90YXRpb25Qcm9wc1BhcnRpYWwsXG4gIFByb3RvRGF0YXNldFxufSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7TG9hZGVyfSBmcm9tICdAbG9hZGVycy5nbC9sb2FkZXItdXRpbHMnO1xuXG5pbXBvcnQge1xuICBEYXRhc2V0cyxcbiAgS2VwbGVyVGFibGUsXG4gIEZpbHRlclByb3BzLFxuICBhc3NpZ25HcHVDaGFubmVsLFxuICBjb3B5VGFibGVBbmRVcGRhdGUsXG4gIGNyZWF0ZU5ld0RhdGFFbnRyeSxcbiAgcGluVGFibGVDb2x1bW5zLFxuICBzZXRGaWx0ZXJHcHVNb2RlLFxuICBzb3J0RGF0YXNldEJ5Q29sdW1uXG59IGZyb20gJ0BrZXBsZXIuZ2wvdGFibGUnO1xuaW1wb3J0IHtmaW5kRmllbGRzVG9TaG93fSBmcm9tICcuL2ludGVyYWN0aW9uLXV0aWxzJztcbmltcG9ydCB7XG4gIGNhbGN1bGF0ZUxheWVyRGF0YSxcbiAgZmluZERlZmF1bHRMYXllcixcbiAgZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMsXG4gIG1lcmdlTGF5ZXJWaXNDb25maWdGb3JOZXdEYXRhc2V0cyxcbiAgZ2V0TmV3TGF5ZXJHcm91cCxcbiAgYWRkTGF5ZXJPckdyb3VwVG9MYXllck9yZGVyLFxuICByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIsXG4gIGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcixcbiAgZmluZFBhcmVudEdyb3VwRm9yTGF5ZXIsXG4gIGdldEluZGV4RnJvbUxheWVyRW50cnlJZCxcbiAgdXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlcixcbiAgZ2V0RmxhdExheWVyT3JkZXIsXG4gIHJlcGxhY2VMYXllckVudHJ5SW5MYXllck9yZGVyXG59IGZyb20gJy4vbGF5ZXItdXRpbHMnO1xuaW1wb3J0IHtnZXRQcm9wVmFsdWVUb01lcmdlciwgaGFzUHJvcHNUb01lcmdlfSBmcm9tICcuL21lcmdlci1oYW5kbGVyJztcbmltcG9ydCB7bWVyZ2VEYXRhc2V0c0J5T3JkZXJ9IGZyb20gJy4vdmlzLXN0YXRlLW1lcmdlcic7XG5pbXBvcnQge1xuICBmaXhFZmZlY3RPcmRlcixcbiAgZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMsXG4gIGdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMsXG4gIG1lcmdlVGltZURvbWFpbnMsXG4gIGFkanVzdFZhbHVlVG9BbmltYXRpb25XaW5kb3csXG4gIHVwZGF0ZVRpbWVGaWx0ZXJQbG90VHlwZSxcbiAgZ2V0RGVmYXVsdFRpbWVGb3JtYXQsXG4gIExheWVyVG9GaWx0ZXJUaW1lSW50ZXJ2YWwsXG4gIFRJTUVfSU5URVJWQUxTX09SREVSRUQsXG4gIG1lcmdlRmlsdGVyRG9tYWluLFxuICBpbml0Q3VzdG9tUGFsZXR0ZUJ5Q3VzdG9tU2NhbGUsXG4gIGNvbGxlY3RDb2x1bW5WYWx1ZXMsXG4gIGdldENvbHVtblN0YXRpc3RpY3Ncbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQge2NyZWF0ZUVmZmVjdH0gZnJvbSAnQGtlcGxlci5nbC9lZmZlY3RzJztcbmltcG9ydCB7UGF5bG9hZEFjdGlvbn0gZnJvbSAnQHJlZHV4anMvdG9vbGtpdCc7XG5cbmltcG9ydCB7ZmluZE1hcEJvdW5kc30gZnJvbSAnLi9kYXRhLXV0aWxzJztcblxuLy8gcmVhY3QtcGFsbVxuLy8gZGlzYWJsZSBjYXB0dXJlIGV4Y2VwdGlvbiBmb3IgcmVhY3QtcGFsbSBjYWxsIHRvIHdpdGhUYXNrXG5kaXNhYmxlU3RhY2tDYXB0dXJpbmcoKTtcblxuLyoqXG4gKiBVcGRhdGVycyBmb3IgYHZpc1N0YXRlYCByZWR1Y2VyLiBDYW4gYmUgdXNlZCBpbiB5b3VyIHJvb3QgcmVkdWNlciB0byBkaXJlY3RseSBtb2RpZnkga2VwbGVyLmdsJ3Mgc3RhdGUuXG4gKiBSZWFkIG1vcmUgYWJvdXQgW1VzaW5nIHVwZGF0ZXJzXSguLi9hZHZhbmNlZC11c2FnZS91c2luZy11cGRhdGVycy5tZClcbiAqXG4gKiBAcHVibGljXG4gKiBAZXhhbXBsZVxuICpcbiAqIGltcG9ydCBrZXBsZXJHbFJlZHVjZXIsIHt2aXNTdGF0ZVVwZGF0ZXJzfSBmcm9tICdAa2VwbGVyLmdsL3JlZHVjZXJzJztcbiAqIC8vIFJvb3QgUmVkdWNlclxuICogY29uc3QgcmVkdWNlcnMgPSBjb21iaW5lUmVkdWNlcnMoe1xuICogIGtlcGxlckdsOiBrZXBsZXJHbFJlZHVjZXIsXG4gKiAgYXBwOiBhcHBSZWR1Y2VyXG4gKiB9KTtcbiAqXG4gKiBjb25zdCBjb21wb3NlZFJlZHVjZXIgPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICogIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAqICAgIGNhc2UgJ0NMSUNLX0JVVFRPTic6XG4gKiAgICAgIHJldHVybiB7XG4gKiAgICAgICAgLi4uc3RhdGUsXG4gKiAgICAgICAga2VwbGVyR2w6IHtcbiAqICAgICAgICAgIC4uLnN0YXRlLmtlcGxlckdsLFxuICogICAgICAgICAgZm9vOiB7XG4gKiAgICAgICAgICAgICAuLi5zdGF0ZS5rZXBsZXJHbC5mb28sXG4gKiAgICAgICAgICAgICB2aXNTdGF0ZTogdmlzU3RhdGVVcGRhdGVycy5lbmxhcmdlRmlsdGVyVXBkYXRlcihcbiAqICAgICAgICAgICAgICAgc3RhdGUua2VwbGVyR2wuZm9vLnZpc1N0YXRlLFxuICogICAgICAgICAgICAgICB7aWR4OiAwfVxuICogICAgICAgICAgICAgKVxuICogICAgICAgICAgfVxuICogICAgICAgIH1cbiAqICAgICAgfTtcbiAqICB9XG4gKiAgcmV0dXJuIHJlZHVjZXJzKHN0YXRlLCBhY3Rpb24pO1xuICogfTtcbiAqXG4gKiBleHBvcnQgZGVmYXVsdCBjb21wb3NlZFJlZHVjZXI7XG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuLy8gQHRzLWlnbm9yZVxuY29uc3QgdmlzU3RhdGVVcGRhdGVycyA9IG51bGw7XG4vKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdEludGVyYWN0aW9uQ29uZmlnOiBJbnRlcmFjdGlvbkNvbmZpZyA9IHtcbiAgdG9vbHRpcDoge1xuICAgIGlkOiAndG9vbHRpcCcsXG4gICAgbGFiZWw6ICdpbnRlcmFjdGlvbnMudG9vbHRpcCcsXG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgICBjb25maWc6IHtcbiAgICAgIGZpZWxkc1RvU2hvdzoge30sXG4gICAgICBjb21wYXJlTW9kZTogZmFsc2UsXG4gICAgICBjb21wYXJlVHlwZTogQ09NUEFSRV9UWVBFUy5BQlNPTFVURVxuICAgIH1cbiAgfSxcbiAgZ2VvY29kZXI6IHtcbiAgICBpZDogJ2dlb2NvZGVyJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy5nZW9jb2RlcicsXG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgcG9zaXRpb246IG51bGwsXG4gICAgY29uZmlnOiB7XG4gICAgICBsaW1pdFNlYXJjaDogZmFsc2VcbiAgICB9XG4gIH0sXG4gIGJydXNoOiB7XG4gICAgaWQ6ICdicnVzaCcsXG4gICAgbGFiZWw6ICdpbnRlcmFjdGlvbnMuYnJ1c2gnLFxuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIGNvbmZpZzoge1xuICAgICAgLy8gc2l6ZSBpcyBpbiBrbVxuICAgICAgc2l6ZTogMC41XG4gICAgfVxuICB9LFxuICBjb29yZGluYXRlOiB7XG4gICAgaWQ6ICdjb29yZGluYXRlJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy5jb29yZGluYXRlJyxcbiAgICBlbmFibGVkOiBmYWxzZSxcbiAgICBwb3NpdGlvbjogbnVsbFxuICB9XG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9BTklNQVRJT05fQ09ORklHOiBBbmltYXRpb25Db25maWcgPSB7XG4gIGRvbWFpbjogbnVsbCxcbiAgY3VycmVudFRpbWU6IG51bGwsXG4gIHNwZWVkOiAxLFxuICBpc0FuaW1hdGluZzogZmFsc2UsXG4gIHRpbWVTdGVwczogbnVsbCxcbiAgdGltZUZvcm1hdDogbnVsbCxcbiAgdGltZXpvbmU6IG51bGwsXG4gIGRlZmF1bHRUaW1lRm9ybWF0OiBudWxsLFxuICBoaWRlQ29udHJvbDogZmFsc2UsXG4gIGR1cmF0aW9uOiBudWxsXG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9FRElUT1I6IEVkaXRvciA9IHtcbiAgbW9kZTogRURJVE9SX01PREVTLkRSQVdfUE9MWUdPTixcbiAgZmVhdHVyZXM6IFtdLFxuICBzZWxlY3RlZEZlYXR1cmU6IG51bGwsXG4gIHZpc2libGU6IHRydWVcbn07XG5cbi8qKlxuICogRGVmYXVsdCBpbml0aWFsIGB2aXNTdGF0ZWBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAY29uc3RhbnRcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IElOSVRJQUxfVklTX1NUQVRFOiBWaXNTdGF0ZSA9IHtcbiAgLy8gbWFwIGluZm9cbiAgbWFwSW5mbzoge1xuICAgIHRpdGxlOiAnJyxcbiAgICBkZXNjcmlwdGlvbjogJydcbiAgfSxcbiAgLy8gbGF5ZXJzXG4gIGxheWVyczogW10sXG4gIGxheWVyRGF0YTogW10sXG4gIGxheWVyVG9CZU1lcmdlZDogW10sXG4gIGxheWVyT3JkZXI6IFtdLFxuICBsYXllck9yZGVyVG9CZU1lcmdlZDogbnVsbCxcblxuICAvLyBmaWx0ZXJzXG4gIGZpbHRlcnM6IFtdLFxuICBmaWx0ZXJUb0JlTWVyZ2VkOiBbXSxcblxuICAvLyBhIGNvbGxlY3Rpb24gb2YgbXVsdGlwbGUgZGF0YXNldFxuICBkYXRhc2V0czoge30sXG4gIGVkaXRpbmdEYXRhc2V0OiB1bmRlZmluZWQsXG5cbiAgLy8gZWZmZWN0c1xuICBlZmZlY3RzOiBbXSxcbiAgZWZmZWN0T3JkZXI6IFtdLFxuXG4gIC8vIGFubm90YXRpb25zXG4gIGFubm90YXRpb25zOiBbXSxcbiAgYW5ub3RhdGlvbnNUb0JlTWVyZ2VkOiBbXSxcbiAgc2VsZWN0ZWRBbm5vdGF0aW9uSWQ6IG51bGwsXG4gIGlzRWRpdGluZ0Fubm90YXRpb25UZXh0OiBmYWxzZSxcblxuICBpbnRlcmFjdGlvbkNvbmZpZzogZGVmYXVsdEludGVyYWN0aW9uQ29uZmlnLFxuICBpbnRlcmFjdGlvblRvQmVNZXJnZWQ6IHt9LFxuXG4gIGxheWVyQmxlbmRpbmc6ICdub3JtYWwnLFxuICBvdmVybGF5QmxlbmRpbmc6ICdub3JtYWwnLFxuICBob3ZlckluZm86IHVuZGVmaW5lZCxcbiAgY2xpY2tlZDogdW5kZWZpbmVkLFxuICBtb3VzZVBvczoge30sXG4gIG1heERlZmF1bHRUb29sdGlwczogTUFYX0RFRkFVTFRfVE9PTFRJUFMsXG5cbiAgLy8gdGhpcyBpcyB1c2VkIHdoZW4gdXNlciBzcGxpdCBtYXBzXG4gIHNwbGl0TWFwczogW1xuICAgIC8vIHRoaXMgd2lsbCBjb250YWluIGEgbGlzdCBvZiBvYmplY3RzIHRvXG4gICAgLy8gZGVzY3JpYmUgdGhlIHN0YXRlIG9mIGxheWVyIGF2YWlsYWJpbGl0eSBhbmQgdmlzaWJpbGl0eSBmb3IgZWFjaCBtYXBcbiAgICAvLyBbXG4gICAgLy8gICB7XG4gICAgLy8gICAgICBsYXllcnM6IHtsYXllcl9pZDogdHJ1ZSB8IGZhbHNlfVxuICAgIC8vICAgfVxuICAgIC8vIF1cbiAgXSxcbiAgc3BsaXRNYXBzVG9CZU1lcmdlZDogW10sXG4gIGlzTWVyZ2luZ0RhdGFzZXRzOiB7fSxcbiAgLy8gZGVmYXVsdHMgbGF5ZXIgY2xhc3Nlc1xuICBsYXllckNsYXNzZXM6IExheWVyQ2xhc3NlcyxcblxuICAvLyBkZWZhdWx0IGFuaW1hdGlvblxuICAvLyB0aW1lIGluIHVuaXggdGltZXN0YW1wIChtaWxsaXNlY29uZHMpICh0aGUgbnVtYmVyIG9mIHNlY29uZHMgc2luY2UgdGhlIFVuaXggRXBvY2gpXG4gIGFuaW1hdGlvbkNvbmZpZzogREVGQVVMVF9BTklNQVRJT05fQ09ORklHLFxuXG4gIGVkaXRvcjogREVGQVVMVF9FRElUT1IsXG5cbiAgZmlsZUxvYWRpbmc6IGZhbHNlLFxuICBmaWxlTG9hZGluZ1Byb2dyZXNzOiB7fSxcbiAgLy8gZm9yIGxvYWRpbmcgZGF0YXNldHNcbiAgbG9hZGluZ0luZGljYXRvclZhbHVlOiAwLFxuXG4gIGxvYWRlcnM6IFtdLFxuICBsb2FkT3B0aW9uczoge30sXG5cbiAgLy8gdmlzU3RhdGVNZXJnZXJzXG4gIG1lcmdlcnM6IFZJU19TVEFURV9NRVJHRVJTLFxuXG4gIC8vIGtlcGxlciBzY2hlbWFzXG4gIHNjaGVtYTogS2VwbGVyR0xTY2hlbWFcbn07XG5cbmV4cG9ydCBjb25zdCBBQ1RJT05fVEFTS19GSVRfQk9VTkRTID0gVGFzay5mcm9tQ2FsbGJhY2soXG4gIChfLCBjYikgPT4gY2IoKSxcblxuICAnQUNUSU9OX1RBU0tfRklUX0JPVU5EUydcbik7XG5cbmV4cG9ydCBjb25zdCBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OID0gVGFzay5mcm9tQ2FsbGJhY2soXG4gIChfLCBjYikgPT4gY2IoKSxcblxuICAnQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTidcbik7XG5cbnR5cGUgVXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhVHlwZSA9IHtcbiAgbGF5ZXJzOiBMYXllcltdO1xuICBsYXllckRhdGE6IGFueVtdO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgc3RhdGUgd2l0aCB1cGRhdGVkIGxheWVyIGFuZCBsYXllckRhdGFcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGE8UyBleHRlbmRzIFVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YVR5cGU+KFxuICBzdGF0ZTogUyxcbiAge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH06IHtsYXllckRhdGE/OiBhbnk7IGxheWVyOiBMYXllcjsgaWR4OiBudW1iZXJ9XG4pOiBTIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IHN0YXRlLmxheWVycy5tYXAoKGx5ciwgaSkgPT4gKGkgPT09IGlkeCA/IGxheWVyIDogbHlyKSksXG4gICAgbGF5ZXJEYXRhOiBsYXllckRhdGFcbiAgICAgID8gc3RhdGUubGF5ZXJEYXRhLm1hcCgoZCwgaSkgPT4gKGkgPT09IGlkeCA/IGxheWVyRGF0YSA6IGQpKVxuICAgICAgOiBzdGF0ZS5sYXllckRhdGFcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlT25MYXllclZpc2liaWxpdHlDaGFuZ2U8UyBleHRlbmRzIFZpc1N0YXRlPihzdGF0ZTogUywgbGF5ZXI6IExheWVyKTogUyB7XG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuICBpZiAoc3RhdGUuc3BsaXRNYXBzLmxlbmd0aCkge1xuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBzcGxpdE1hcHM6IGxheWVyLmNvbmZpZy5pc1Zpc2libGVcbiAgICAgICAgPyBhZGROZXdMYXllcnNUb1NwbGl0TWFwKHN0YXRlLnNwbGl0TWFwcywgbGF5ZXIpXG4gICAgICAgIDogcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzKHN0YXRlLnNwbGl0TWFwcywgbGF5ZXIpXG4gICAgfTtcbiAgfVxuXG4gIGlmIChsYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQpIHtcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXdTdGF0ZSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogQ29tcGFyZXMgdHdvIG9iamVjdHMgKG9yIGFycmF5cykgYW5kIHJldHVybnMgYSBuZXcgb2JqZWN0IHdpdGggb25seSB0aGVcbiAqIHByb3BlcnRpZXMgdGhhdCBoYXZlIGNoYW5nZWQgYmV0d2VlbiB0aGUgdHdvIG9iamVjdHMuXG4gKi9cbmZ1bmN0aW9uIHBpY2tDaGFuZ2VkUHJvcHM8VD4ocHJldjogVCwgbmV4dDogVCk6IFBhcnRpYWw8VD4ge1xuICBjb25zdCBjaGFuZ2VkUHJvcHM6IFBhcnRpYWw8VD4gPSB7fTtcbiAgY29uc3QgcGlja1Byb3BzT2YgPSBvYmogPT4ge1xuICAgIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoYW5nZWRQcm9wcywga2V5KSAmJlxuICAgICAgICAhaXNFcXVhbChwcmV2W2tleV0sIG5leHRba2V5XSlcbiAgICAgICkge1xuICAgICAgICBjaGFuZ2VkUHJvcHNba2V5XSA9IG5leHRba2V5XTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgcGlja1Byb3BzT2YocHJldik7XG4gIHBpY2tQcm9wc09mKG5leHQpO1xuICByZXR1cm4gY2hhbmdlZFByb3BzO1xufVxuXG5jb25zdCBWSVNVQUxfQ0hBTk5FTF9QUk9QX1RZUEVTID0gWydmaWVsZCcsICdzY2FsZScsICdkb21haW4nLCAnYWdncmVnYXRpb24nXTtcblxuLyoqXG4gKiBBcHBseSBsYXllciBjb25maWdcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHksIG1heC1zdGF0ZW1lbnRzXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlMYXllckNvbmZpZ1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQXBwbHlMYXllckNvbmZpZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVySWQsIG5ld0xheWVyQ29uZmlnLCBsYXllckluZGV4fSA9IGFjdGlvbjtcbiAgY29uc3QgbmV3UGFyc2VkTGF5ZXIgPVxuICAgIC8vIHdpbGwgbW92ZSB2aXN1YWxDaGFubmVscyB0byB0aGUgY29uZmlnIHByb3BcbiAgICBwYXJzZUxheWVyQ29uZmlnKHN0YXRlLnNjaGVtYSwgbmV3TGF5ZXJDb25maWcpO1xuICBjb25zdCBvbGRMYXllciA9IHN0YXRlLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXJJZCk7XG4gIGlmICghb2xkTGF5ZXIgfHwgIW5ld1BhcnNlZExheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChsYXllckluZGV4ICE9PSBudWxsICYmIGxheWVySW5kZXggIT09IHVuZGVmaW5lZCAmJiBzdGF0ZS5sYXllcnNbbGF5ZXJJbmRleF0gIT09IG9sZExheWVyKSB7XG4gICAgLy8gbGF5ZXJJbmRleCBpcyBwcm92aWRlZCwgYnV0IGl0IGRvZXNuJ3QgbWF0Y2ggdGhlIG9sZExheWVyXG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tuZXdQYXJzZWRMYXllci5jb25maWcuZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIC8vIE1ha2Ugc3VyZSB0aGUgbGF5ZXIgaXMgdmFsaWQgYW5kIGNvbnZlcnQgaXQgdG8gTGF5ZXJcbiAgY29uc3QgbmV3TGF5ZXIgPSB2YWxpZGF0ZUxheWVyV2l0aERhdGEoZGF0YXNldCwgbmV3UGFyc2VkTGF5ZXIsIHN0YXRlLmxheWVyQ2xhc3Nlcyk7XG4gIGlmICghbmV3TGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgbmV4dFN0YXRlID0gc3RhdGU7XG5cbiAgaWYgKG5ld0xheWVyLnR5cGUgJiYgbmV3TGF5ZXIudHlwZSAhPT0gb2xkTGF5ZXIudHlwZSkge1xuICAgIGNvbnN0IG9sZExheWVySW5kZXggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXJJZCk7XG4gICAgaWYgKG9sZExheWVySW5kZXggPj0gMCkge1xuICAgICAgbmV4dFN0YXRlID0gbGF5ZXJUeXBlQ2hhbmdlVXBkYXRlcihuZXh0U3RhdGUsIGxheWVyVHlwZUNoYW5nZShvbGRMYXllciwgbmV3TGF5ZXIudHlwZSkpO1xuICAgICAgLy8gbGF5ZXJUeXBlQ2hhbmdlVXBkYXRlciBjaGFuZ2VzIHRoZSBpZCBvZiB0aGUgbGF5ZXIsIHNvIHdlIG5lZWQgdG8gb2J0YWluIHRoZSBuZXcgaWRcbiAgICAgIC8vIGJ1dCBmaXJzdCBtYWtlIHN1cmUgdGhhdCB0aGUgbGF5ZXIgd2FzIG5vdCByZW1vdmVkXG4gICAgICBpZiAobmV4dFN0YXRlLmxheWVycy5sZW5ndGggPT09IHN0YXRlLmxheWVycy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgbmV3TGF5ZXJJZCA9IG5leHRTdGF0ZS5sYXllcnNbb2xkTGF5ZXJJbmRleF0uaWQ7XG4gICAgICAgIG5leHRTdGF0ZSA9IGFwcGx5TGF5ZXJDb25maWdVcGRhdGVyKFxuICAgICAgICAgIG5leHRTdGF0ZSxcbiAgICAgICAgICBhcHBseUxheWVyQ29uZmlnKG5ld0xheWVySWQsIHsuLi5uZXdMYXllckNvbmZpZywgaWQ6IG5ld0xheWVySWR9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV4dFN0YXRlO1xuICB9XG5cbiAgLy8gc2VyaWFsaXplTGF5ZXIoKSBtaWdodCByZXR1cm4gbnVsbCBpZiB0aGUgb2xkIGxheWVyIGlzIG5vdCB2YWxpZCxcbiAgLy8gd2Ugc2hvdWxkIHN0aWxsIGFwcGx5IHRoZSBjaGFuZ2VzIGluIHRoYXQgY2FzZVxuICBjb25zdCBzZXJpYWxpemVkT2xkTGF5ZXIgPSBzZXJpYWxpemVMYXllcihvbGRMYXllciwgc3RhdGUuc2NoZW1hKSA/PyB7Y29uZmlnOiB7fX07XG4gIGNvbnN0IHNlcmlhbGl6ZWROZXdMYXllciA9IHNlcmlhbGl6ZUxheWVyKG5ld0xheWVyLCBzdGF0ZS5zY2hlbWEpO1xuICBpZiAoIXNlcmlhbGl6ZWROZXdMYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAoIWlzRXF1YWwoc2VyaWFsaXplZE9sZExheWVyLCBzZXJpYWxpemVkTmV3TGF5ZXIpKSB7XG4gICAgY29uc3QgY2hhbmdlZCA9IHBpY2tDaGFuZ2VkUHJvcHMoc2VyaWFsaXplZE9sZExheWVyLmNvbmZpZywgc2VyaWFsaXplZE5ld0xheWVyLmNvbmZpZyk7XG5cbiAgICBpZiAoJ3Zpc0NvbmZpZycgaW4gY2hhbmdlZCkge1xuICAgICAgaWYgKGNoYW5nZWQudmlzQ29uZmlnKSB7XG4gICAgICAgIG5leHRTdGF0ZSA9IGxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgICAgbGF5ZXJWaXNDb25maWdDaGFuZ2Uob2xkTGF5ZXIsIGNoYW5nZWQudmlzQ29uZmlnKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgZGVsZXRlIGNoYW5nZWQudmlzQ29uZmlnO1xuICAgIH1cblxuICAgIE9iamVjdC5rZXlzKG9sZExheWVyLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKGNoYW5uZWxOYW1lID0+IHtcbiAgICAgIGNvbnN0IGNoYW5uZWwgPSBvbGRMYXllci52aXN1YWxDaGFubmVsc1tjaGFubmVsTmFtZV07XG4gICAgICBjb25zdCBjaGFubmVsUHJvcE5hbWVzID0gVklTVUFMX0NIQU5ORUxfUFJPUF9UWVBFUy5tYXAocHJvcCA9PiBjaGFubmVsW3Byb3BdKTtcbiAgICAgIGlmIChjaGFubmVsUHJvcE5hbWVzLnNvbWUocHJvcCA9PiBwcm9wIGluIGNoYW5nZWQpKSB7XG4gICAgICAgIG5leHRTdGF0ZSA9IGxheWVyVmlzdWFsQ2hhbm5lbENoYW5nZVVwZGF0ZXIoXG4gICAgICAgICAgbmV4dFN0YXRlLFxuICAgICAgICAgIGxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZShcbiAgICAgICAgICAgIG9sZExheWVyLFxuICAgICAgICAgICAgcGljayhuZXdMYXllci5jb25maWcsIGNoYW5uZWxQcm9wTmFtZXMpLFxuICAgICAgICAgICAgY2hhbm5lbE5hbWVcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBjaGFubmVsUHJvcE5hbWVzKSB7XG4gICAgICAgICAgZGVsZXRlIGNoYW5nZWRbcHJvcF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChPYmplY3Qua2V5cyhjaGFuZ2VkKS5sZW5ndGggPiAwKSB7XG4gICAgICBuZXh0U3RhdGUgPSBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gICAgICAgIG5leHRTdGF0ZSxcbiAgICAgICAgbGF5ZXJDb25maWdDaGFuZ2Uob2xkTGF5ZXIsIHBpY2sobmV3TGF5ZXIuY29uZmlnLCBPYmplY3Qua2V5cyhjaGFuZ2VkKSkpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZWxheWVyVmlzaWJpbHR5KHN0YXRlOiBWaXNTdGF0ZSwgbmV3TGF5ZXI6IExheWVyLCBpc1Zpc2libGU/OiBib29sZWFuKTogVmlzU3RhdGUge1xuICBsZXQgbmV3U3RhdGUgPSB1cGRhdGVTdGF0ZU9uTGF5ZXJWaXNpYmlsaXR5Q2hhbmdlKHN0YXRlLCBuZXdMYXllcik7XG4gIGNvbnN0IGZpbHRlckluZGV4ID0gZmlsdGVyU3luY2VkV2l0aFRpbWVsaW5lKHN0YXRlKTtcbiAgaWYgKGlzTGF5ZXJBbmltYXRhYmxlKG5ld0xheWVyKSAmJiBmaWx0ZXJJbmRleCAhPT0gLTEpIHtcbiAgICAvLyBpZiBsYXllciBpcyBnb2luZyB0byBiZSB2aXNpYmxlIHdlIHN5bmMgd2l0aCBmaWx0ZXIgb3RoZXJ3aXNlIHdlIG5lZWQgdG8gY2hlY2sgd2hldGhlciBvdGhlciBhbmltYXRhYmxlIGxheWVycyBleGlzdHMgYW5kIGFyZSB2aXNpYmxlXG4gICAgbmV3U3RhdGUgPSBzeW5jVGltZUZpbHRlcldpdGhMYXllclRpbWVsaW5lVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWR4OiBmaWx0ZXJJbmRleCxcbiAgICAgIGVuYWJsZTogaXNWaXNpYmxlID8gaXNWaXNpYmxlIDogZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMoc3RhdGUubGF5ZXJzKS5sZW5ndGggPiAwXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciBiYXNlIGNvbmZpZzogZGF0YUlkLCBsYWJlbCwgY29sdW1uLCBpc1Zpc2libGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmV4cG9ydCBmdW5jdGlvbiBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllcn0gPSBhY3Rpb247XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gIGNvbnN0IHByb3BzID0gT2JqZWN0LmtleXMoYWN0aW9uLm5ld0NvbmZpZyk7XG4gIGlmIChcbiAgICB0eXBlb2YgYWN0aW9uLm5ld0NvbmZpZy5kYXRhSWQgPT09ICdzdHJpbmcnICYmXG4gICAgYWN0aW9uLm5ld0NvbmZpZy5kYXRhSWQgIT09IG9sZExheWVyLmNvbmZpZy5kYXRhSWRcbiAgKSB7XG4gICAgY29uc3Qge2RhdGFJZCwgLi4ucmVzdENvbmZpZ30gPSBhY3Rpb24ubmV3Q29uZmlnO1xuICAgIGNvbnN0IHN0YXRlV2l0aERhdGFJZCA9IGxheWVyRGF0YUlkQ2hhbmdlVXBkYXRlcihzdGF0ZSwge1xuICAgICAgb2xkTGF5ZXIsXG4gICAgICBuZXdDb25maWc6IHtkYXRhSWR9XG4gICAgfSk7XG4gICAgY29uc3QgbmV4dExheWVyID0gc3RhdGVXaXRoRGF0YUlkLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICAgIHJldHVybiBuZXh0TGF5ZXIgJiYgT2JqZWN0LmtleXMocmVzdENvbmZpZykubGVuZ3RoXG4gICAgICA/IGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihzdGF0ZVdpdGhEYXRhSWQsIHtvbGRMYXllcjogbmV4dExheWVyLCBuZXdDb25maWc6IHJlc3RDb25maWd9KVxuICAgICAgOiBzdGF0ZVdpdGhEYXRhSWQ7XG4gIH1cblxuICBsZXQgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyhhY3Rpb24ubmV3Q29uZmlnKTtcblxuICBsZXQgbGF5ZXJEYXRhO1xuXG4gIGlmIChuZXdMYXllci5zaG91bGRDYWxjdWxhdGVMYXllckRhdGEocHJvcHMpKSB7XG4gICAgY29uc3Qgb2xkTGF5ZXJEYXRhID0gc3RhdGUubGF5ZXJEYXRhW2lkeF07XG5cbiAgICBjb25zdCB1cGRhdGVMYXllckRhdGFSZXN1bHQgPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHN0YXRlLCBvbGRMYXllckRhdGEpO1xuICAgIG5ld0xheWVyID0gdXBkYXRlTGF5ZXJEYXRhUmVzdWx0LmxheWVyO1xuICAgIGxheWVyRGF0YSA9IHVwZGF0ZUxheWVyRGF0YVJlc3VsdC5sYXllckRhdGE7XG4gIH1cblxuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgaWYgKCdpc1Zpc2libGUnIGluIGFjdGlvbi5uZXdDb25maWcpIHtcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZWxheWVyVmlzaWJpbHR5KG5ld1N0YXRlLCBuZXdMYXllciwgYWN0aW9uLm5ld0NvbmZpZy5pc1Zpc2libGUpO1xuICB9XG5cbiAgaWYgKCdjb2x1bW5zJyBpbiBhY3Rpb24ubmV3Q29uZmlnICYmIG5ld0xheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCkge1xuICAgIC8vIFRPRE86IFNoYW4sIG1ha2UgdGhlIGFuaW1hdGlvbiBjb25maWcgZnVuY3Rpb24gbW9yZSByb2J1c3RcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXdTdGF0ZSk7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKG5ld1N0YXRlLCB7XG4gICAgbGF5ZXI6IG5ld0xheWVyLFxuICAgIGxheWVyRGF0YSxcbiAgICBpZHhcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYXllckFuaW1hdGlvbkNoYW5nZVVwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihzdGF0ZTogUywgYWN0aW9uKTogUyB7XG4gIGNvbnN0IHtvbGRMYXllciwgcHJvcCwgdmFsdWV9ID0gYWN0aW9uO1xuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuXG4gIGNvbnN0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgIGFuaW1hdGlvbjoge1xuICAgICAgLi4ub2xkTGF5ZXIuY29uZmlnLmFuaW1hdGlvbixcbiAgICAgIFtwcm9wXTogdmFsdWVcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIHN0YXRlLmxheWVyRGF0YVtpZHhdKTtcblxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKHN0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVySWQsIGlzVmlzaWJsZSwgc3BsaXRNYXBJZFxuICogaGFuZGxlcyB0d28gY2FzZXM6XG4gKiAxKSB0b2dnbGUgdGhlIHZpc2liaWxpdHkgb2YgbG9jYWwgU3BsaXRNYXAgbGF5ZXIgKHZpc1N0YXRlLnNwbGl0TWFwLmxheWVycylcbiAqIDIpIHRvZ2dsZSB0aGUgdmlzaWJpbGl0eSBvZiBnbG9iYWwgbGF5ZXIgKHZpc1N0YXRlLmxheWVycylcblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJUb2dnbGVWaXNpYmlsaXR5VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclRvZ2dsZVZpc2liaWxpdHlVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtsYXllcklkLCBpc1Zpc2libGUsIHNwbGl0TWFwSWR9ID0gYWN0aW9uO1xuICBjb25zdCBsYXllciA9IHN0YXRlLmxheWVycy5maW5kKGQgPT4gZC5pZCA9PT0gbGF5ZXJJZCk7XG5cbiAgaWYgKCFsYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuXG4gIGlmIChzcGxpdE1hcElkKSB7XG4gICAgLy8gW2Nhc2UgMV06IHRvZ2dsZSBsb2NhbCBsYXllciB2aXNpYmlsaXR5IGZvciBlYWNoIFNwbGl0TWFwXG4gICAgY29uc3QgbWFwSW5kZXggPSBuZXdTdGF0ZS5zcGxpdE1hcHMuZmluZEluZGV4KHNtID0+IHNtLmlkID09PSBzcGxpdE1hcElkKTtcbiAgICBpZiAoaXNWaXNpYmxlKSB7XG4gICAgICAvLyAxKSBpZiB0aGUgbGF5ZXIgaXMgaW52aXNpYmxlIGdsb2JhbGx5XG4gICAgICAvLyAtPiBzZXQgZ2xvYmFsIHZpc2liaWxpdHkgdG8gdHJ1ZVxuICAgICAgbmV3U3RhdGUgPSBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIobmV3U3RhdGUsIGxheWVyQ29uZmlnQ2hhbmdlKGxheWVyLCB7aXNWaXNpYmxlOiB0cnVlfSkpO1xuXG4gICAgICAvLyAtPiBzZXQgbG9jYWwgdmlzaWJpbGl0eSB0byB0cnVlIGFuZCB0aGUgbG9jYWwgdmlzaWJpbGl0aWVzIG9mIGFsbCBvdGhlciBTcGxpdE1hcHMgdG8gZmFsc2VcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgICBzcGxpdE1hcHM6IG5ld1N0YXRlLnNwbGl0TWFwcy5tYXAoc20gPT5cbiAgICAgICAgICBzbS5pZCAhPT0gc3BsaXRNYXBJZFxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgLi4uc20sXG4gICAgICAgICAgICAgICAgbGF5ZXJzOiB7XG4gICAgICAgICAgICAgICAgICAuLi5zbS5sYXllcnMsXG4gICAgICAgICAgICAgICAgICBbbGF5ZXJJZF06IGZhbHNlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAuLi5zbSxcbiAgICAgICAgICAgICAgICBsYXllcnM6IHtcbiAgICAgICAgICAgICAgICAgIC4uLnNtLmxheWVycyxcbiAgICAgICAgICAgICAgICAgIFtsYXllcklkXTogdHJ1ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICApXG4gICAgICB9O1xuICAgIH1cbiAgICAvLyAyKSBlbHNlIHdoZW4gdGhlIGxheWVyIGlzIHZpc2libGUgZ2xvYmFsbHlcbiAgICByZXR1cm4gdG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyKG5ld1N0YXRlLCB0b2dnbGVMYXllckZvck1hcChtYXBJbmRleCwgbGF5ZXJJZCkpO1xuICB9IGVsc2Uge1xuICAgIC8vIFtjYXNlIDJdOiB0b2dnbGUgZ2xvYmFsIGxheWVyIHZpc2liaWxpdHlcbiAgICBjb25zdCBuZXdMYXllciA9IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtpc1Zpc2libGV9KTtcbiAgICBjb25zdCBpZHggPSBuZXdTdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gbGF5ZXJJZCk7XG5cbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZWxheWVyVmlzaWJpbHR5KG5ld1N0YXRlLCBuZXdMYXllciwgaXNWaXNpYmxlKTtcbiAgICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKG5ld1N0YXRlLCB7XG4gICAgICBsYXllcjogbmV3TGF5ZXIsXG4gICAgICBpZHhcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0gc3RhdGVcbiAqIEByZXR1cm5zIGluZGV4IG9mIHRoZSBmaWx0ZXIgc3luY2VkIHRvIHRpbWVsaW5lIG9yIC0xXG4gKi9cbmZ1bmN0aW9uIGZpbHRlclN5bmNlZFdpdGhUaW1lbGluZShzdGF0ZTogVmlzU3RhdGUpOiBudW1iZXIge1xuICByZXR1cm4gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiAoZiBhcyBUaW1lUmFuZ2VGaWx0ZXIpLnN5bmNlZFdpdGhMYXllclRpbWVsaW5lKTtcbn1cblxuLyoqXG4gKiBVcGRhdGVzIGlzVmFsaWQgZmxhZyBvZiBhIGxheWVyLlxuICogVXBkYXRlcyBpc1Zpc2libGUgYmFzZWQgb24gdGhlIHZhbHVlIG9mIGlzVmFsaWQuXG4gKiBUcmlnZ2VycyB1cGRhdGUgb2YgZGF0YSBmb3IgdGhlIGxheWVyIGluIG9yZGVyIHRvIGdldCBlcnJvcnMgYWdhaW4gZHVyaW5nIG5leHQgdXBkYXRlIGl0ZXJhdGlvbi5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyU2V0SXNWYWxpZFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJTZXRJc1ZhbGlkVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXIsIGlzVmFsaWR9ID0gYWN0aW9uO1xuXG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gIGNvbnN0IGxheWVyVG9VcGRhdGUgPSBzdGF0ZS5sYXllcnNbaWR4XTtcbiAgaWYgKGxheWVyVG9VcGRhdGUpIHtcbiAgICBsZXQgbmV3TGF5ZXI7XG4gICAgbGV0IG5ld0RhdGEgPSBudWxsO1xuXG4gICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgIC8vIFRyaWdnZXIgZGF0YSB1cGRhdGUgaW4gb3JkZXIgdG8gc2hvdyBlcnJvcnMgYWdhaW4gaWYgcHJlc2VudC5cbiAgICAgIGNvbnN0IHtsYXllciwgbGF5ZXJEYXRhfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShsYXllclRvVXBkYXRlLCBzdGF0ZSwgdW5kZWZpbmVkKTtcbiAgICAgIG5ld0xheWVyID0gbGF5ZXI7XG4gICAgICBuZXdEYXRhID0gbGF5ZXJEYXRhO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdMYXllciA9IGxheWVyVG9VcGRhdGUudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICBpc1Zpc2libGU6IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIG5ld0xheWVyLmlzVmFsaWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKHN0YXRlLCB7aWR4LCBsYXllcjogbmV3TGF5ZXIsIGxheWVyRGF0YTogbmV3RGF0YX0pO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG5mdW5jdGlvbiBhZGRPclJlbW92ZVRleHRMYWJlbHMobmV3RmllbGRzLCB0ZXh0TGFiZWwsIGRlZmF1bHRUZXh0TGFiZWwgPSBERUZBVUxUX1RFWFRfTEFCRUwpIHtcbiAgbGV0IG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5zbGljZSgpO1xuXG4gIGNvbnN0IGN1cnJlbnRGaWVsZHMgPSB0ZXh0TGFiZWwubWFwKHRsID0+IHRsLmZpZWxkICYmIHRsLmZpZWxkLm5hbWUpLmZpbHRlcihkID0+IGQpO1xuXG4gIGNvbnN0IGFkZEZpZWxkcyA9IG5ld0ZpZWxkcy5maWx0ZXIoZiA9PiAhY3VycmVudEZpZWxkcy5pbmNsdWRlcyhmLm5hbWUpKTtcbiAgY29uc3QgZGVsZXRlRmllbGRzID0gY3VycmVudEZpZWxkcy5maWx0ZXIoZiA9PiAhbmV3RmllbGRzLmZpbmQoZmQgPT4gZmQubmFtZSA9PT0gZikpO1xuXG4gIC8vIGRlbGV0ZVxuICBuZXdUZXh0TGFiZWwgPSBuZXdUZXh0TGFiZWwuZmlsdGVyKHRsID0+IHRsLmZpZWxkICYmICFkZWxldGVGaWVsZHMuaW5jbHVkZXModGwuZmllbGQubmFtZSkpO1xuICBuZXdUZXh0TGFiZWwgPSAhbmV3VGV4dExhYmVsLmxlbmd0aCA/IFtkZWZhdWx0VGV4dExhYmVsXSA6IG5ld1RleHRMYWJlbDtcblxuICAvLyBhZGRcbiAgbmV3VGV4dExhYmVsID0gW1xuICAgIC4uLm5ld1RleHRMYWJlbC5maWx0ZXIodGwgPT4gdGwuZmllbGQpLFxuICAgIC4uLmFkZEZpZWxkcy5tYXAoYWYgPT4gKHtcbiAgICAgIC4uLmRlZmF1bHRUZXh0TGFiZWwsXG4gICAgICBmaWVsZDogYWZcbiAgICB9KSlcbiAgXTtcblxuICByZXR1cm4gbmV3VGV4dExhYmVsO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVUZXh0TGFiZWxQcm9wQW5kVmFsdWUoaWR4LCBwcm9wLCB2YWx1ZSwgdGV4dExhYmVsKSB7XG4gIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRleHRMYWJlbFtpZHhdLCBwcm9wKSkge1xuICAgIHJldHVybiB0ZXh0TGFiZWw7XG4gIH1cblxuICBsZXQgbmV3VGV4dExhYmVsID0gdGV4dExhYmVsLnNsaWNlKCk7XG5cbiAgaWYgKHByb3AgPT09ICdmaWVsZCcgJiYgdmFsdWUgPT09IG51bGwgJiYgdGV4dExhYmVsLmxlbmd0aCA+IDEpIHtcbiAgICAvLyByZW1vdmUgbGFiZWwgd2hlbiBmaWVsZCB2YWx1ZSBpcyBzZXQgdG8gbnVsbFxuICAgIG5ld1RleHRMYWJlbC5zcGxpY2UoaWR4LCAxKTtcbiAgfSBlbHNlIGlmIChwcm9wKSB7XG4gICAgbmV3VGV4dExhYmVsID0gdGV4dExhYmVsLm1hcCgodGwsIGkpID0+IChpID09PSBpZHggPyB7Li4udGwsIFtwcm9wXTogdmFsdWV9IDogdGwpKTtcbiAgfVxuXG4gIHJldHVybiBuZXdUZXh0TGFiZWw7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIGJhc2UgY29uZmlnOiBkYXRhSWQsIGxhYmVsLCBjb2x1bW4sIGlzVmlzaWJsZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJUZXh0TGFiZWxDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVGV4dExhYmVsQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXIsIGlkeCwgcHJvcCwgdmFsdWV9ID0gYWN0aW9uO1xuICBjb25zdCB7dGV4dExhYmVsfSA9IG9sZExheWVyLmNvbmZpZztcblxuICAvLyB3aGVuIGFkZGluZyBhIG5ldyBlbXB0eSB0ZXh0IGxhYmVsLFxuICAvLyByZWx5IG9uIHRoZSBsYXllcidzIGRlZmF1bHQgY29uZmlnLCBvciB1c2UgdGhlIGNvbnN0YW50IERFRkFVTFRfVEVYVF9MQUJFTFxuICBjb25zdCBkZWZhdWx0VGV4dExhYmVsID1cbiAgICBvbGRMYXllci5nZXREZWZhdWx0TGF5ZXJDb25maWcoe2RhdGFJZDogJyd9KT8udGV4dExhYmVsPy5bMF0gPz8gREVGQVVMVF9URVhUX0xBQkVMO1xuXG4gIGxldCBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwuc2xpY2UoKTtcbiAgaWYgKCF0ZXh0TGFiZWxbaWR4XSAmJiBpZHggPT09IHRleHRMYWJlbC5sZW5ndGgpIHtcbiAgICAvLyBpZiBpZHggaXMgc2V0IHRvIGxlbmd0aCwgYWRkIGVtcHR5IHRleHQgbGFiZWxcbiAgICBuZXdUZXh0TGFiZWwgPSBbLi4udGV4dExhYmVsLCBkZWZhdWx0VGV4dExhYmVsXTtcbiAgfVxuXG4gIGlmIChpZHggPT09ICdhbGwnICYmIHByb3AgPT09ICdmaWVsZHMnKSB7XG4gICAgbmV3VGV4dExhYmVsID0gYWRkT3JSZW1vdmVUZXh0TGFiZWxzKHZhbHVlLCB0ZXh0TGFiZWwsIGRlZmF1bHRUZXh0TGFiZWwpO1xuICB9IGVsc2Uge1xuICAgIG5ld1RleHRMYWJlbCA9IHVwZGF0ZVRleHRMYWJlbFByb3BBbmRWYWx1ZShpZHgsIHByb3AsIHZhbHVlLCBuZXdUZXh0TGFiZWwpO1xuICB9XG4gIC8vIHVwZGF0ZSB0ZXh0IGxhYmVsIHByb3AgYW5kIHZhbHVlXG4gIHJldHVybiBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoc3RhdGUsIHtcbiAgICBvbGRMYXllcixcbiAgICBuZXdDb25maWc6IHt0ZXh0TGFiZWw6IG5ld1RleHRMYWJlbH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhKGRhdGFzZXQsIGxheWVyQ2xhc3NlcywgbGF5ZXIsIHNjaGVtYSkge1xuICBjb25zdCBsb2FkZWRMYXllciA9IHNlcmlhbGl6ZUxheWVyKGxheWVyLCBzY2hlbWEpO1xuICByZXR1cm4gbG9hZGVkTGF5ZXJcbiAgICA/IHZhbGlkYXRlTGF5ZXJXaXRoRGF0YShkYXRhc2V0LCBsb2FkZWRMYXllciwgbGF5ZXJDbGFzc2VzLCB7XG4gICAgICAgIGFsbG93RW1wdHlDb2x1bW46IHRydWVcbiAgICAgIH0pXG4gICAgOiBudWxsO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciBjb25maWcgZGF0YUlkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllckRhdGFJZENoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiB7XG4gICAgb2xkTGF5ZXI6IExheWVyO1xuICAgIG5ld0NvbmZpZzoge1xuICAgICAgZGF0YUlkOiBzdHJpbmc7XG4gICAgfTtcbiAgfVxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXIsIG5ld0NvbmZpZ30gPSBhY3Rpb247XG4gIGNvbnN0IHtkYXRhSWR9ID0gbmV3Q29uZmlnO1xuXG4gIGlmICghb2xkTGF5ZXIgfHwgIXN0YXRlLmRhdGFzZXRzW2RhdGFJZF0pIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcblxuICBsZXQgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyh7ZGF0YUlkfSk7XG5cbiAgLy8gdGhpcyBtYXkgaGFwcGVuIHdoZW4gYSBsYXllciBpcyBuZXcgKHR5cGU6IG51bGwgYW5kIG5vIGNvbHVtbnMpIGJ1dCBpdCdzIG5vdCByZWFkeSB0byBiZSBzYXZlZFxuICBpZiAobmV3TGF5ZXIuaXNWYWxpZFRvU2F2ZSgpKSB7XG4gICAgY29uc3QgdmFsaWRhdGVkID0gdmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEoXG4gICAgICBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdLFxuICAgICAgc3RhdGUubGF5ZXJDbGFzc2VzLFxuICAgICAgbmV3TGF5ZXIsXG4gICAgICBzdGF0ZS5zY2hlbWFcbiAgICApO1xuICAgIC8vIGlmIGNhbnQgdmFsaWRhdGUgaXQgd2l0aCBkYXRhIGNyZWF0ZSBhIG5ldyBvbmVcbiAgICBpZiAoIXZhbGlkYXRlZCkge1xuICAgICAgY29uc3Qgb2xkTGF5ZXJUeXBlID0gb2xkTGF5ZXIudHlwZTtcbiAgICAgIGlmIChvbGRMYXllclR5cGUpIHtcbiAgICAgICAgbmV3TGF5ZXIgPSBuZXcgc3RhdGUubGF5ZXJDbGFzc2VzW29sZExheWVyVHlwZV0oe2RhdGFJZCwgaWQ6IG9sZExheWVyLmlkfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0xheWVyID0gdmFsaWRhdGVkO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBMYXllciBpcyBub3QgdmFsaWQgdG8gc2F2ZSAoZS5nLiBtaXNzaW5nIGNvbHVtbnMpLCBidXQgd2Ugc3RpbGwgbmVlZCB0b1xuICAgIC8vIHJlbWFwIHZpc3VhbCBjaGFubmVsIGZpZWxkcyB0byB0aGUgbmV3IGRhdGFzZXQgdG8gYXZvaWQgc3RhbGUgZmllbGQgcmVmZXJlbmNlc1xuICAgIC8vIHRoYXQgcG9pbnQgdG8gcm93cyBiZXlvbmQgdGhlIG5ldyBkYXRhc2V0J3MgbGVuZ3RoXG4gICAgY29uc3QgbmV3RGF0YXNldEZpZWxkcyA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF0uZmllbGRzO1xuICAgIGNvbnN0IHJlbWFwcGVkRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gICAgT2JqZWN0LnZhbHVlcyhuZXdMYXllci52aXN1YWxDaGFubmVscykuZm9yRWFjaCgoe2ZpZWxkOiBmaWVsZEtleX0pID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRGaWVsZCA9IG5ld0xheWVyLmNvbmZpZ1tmaWVsZEtleV07XG4gICAgICBpZiAoY3VycmVudEZpZWxkKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoZWQgPSBuZXdEYXRhc2V0RmllbGRzLmZpbmQoZiA9PiBmLm5hbWUgPT09IGN1cnJlbnRGaWVsZC5uYW1lKTtcbiAgICAgICAgcmVtYXBwZWRGaWVsZHNbZmllbGRLZXldID0gbWF0Y2hlZCB8fCBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChPYmplY3Qua2V5cyhyZW1hcHBlZEZpZWxkcykubGVuZ3RoKSB7XG4gICAgICBuZXdMYXllciA9IG5ld0xheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHJlbWFwcGVkRmllbGRzKTtcbiAgICB9XG4gICAgLy8gVmFsaWRhdGUgZmllbGQgdHlwZSBjb21wYXRpYmlsaXR5IOKAlCBjbGVhcnMgZmllbGRzIHdob3NlIHR5cGUgaXMgaW5jb21wYXRpYmxlXG4gICAgLy8gd2l0aCB0aGUgY2hhbm5lbCdzIHN1cHBvcnRlZCBmaWVsZCB0eXBlcyAoZS5nLiBzdHJpbmcgZmllbGQgZm9yIGEgbnVtZXJpYyBzY2FsZSlcbiAgICBPYmplY3QudmFsdWVzKG5ld0xheWVyLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKCh7a2V5fSkgPT4ge1xuICAgICAgbmV3TGF5ZXIudmFsaWRhdGVWaXN1YWxDaGFubmVsKGtleSk7XG4gICAgfSk7XG4gIH1cblxuICBuZXdMYXllciA9IG5ld0xheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICBpc1Zpc2libGU6IG9sZExheWVyLmNvbmZpZy5pc1Zpc2libGUsXG4gICAgaXNDb25maWdBY3RpdmU6IHRydWVcbiAgfSk7XG5cbiAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJEb21haW4oc3RhdGUuZGF0YXNldHMpO1xuICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHN0YXRlLCB1bmRlZmluZWQpO1xuXG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEoc3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEluaXRpYWxMYXllckNvbmZpZyhsYXllciwgZGF0YXNldHMsIGxheWVyQ2xhc3Nlcyk6IExheWVyIHtcbiAgbGV0IG5ld0xheWVyID0gbGF5ZXI7XG4gIGlmICghT2JqZWN0LmtleXMoZGF0YXNldHMpLmxlbmd0aCkge1xuICAgIC8vIG5vIGRhdGEgaXMgbG9hZGVkXG4gICAgcmV0dXJuIGxheWVyO1xuICB9XG4gIGlmICghbGF5ZXIuY29uZmlnLmRhdGFJZCkge1xuICAgIC8vIHNldCBsYXllciBkYXRhSWRcbiAgICBuZXdMYXllciA9IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtkYXRhSWQ6IE9iamVjdC5rZXlzKGRhdGFzZXRzKVswXX0pO1xuICB9XG4gIGNvbnN0IGRhdGFzZXQgPSBkYXRhc2V0c1tuZXdMYXllci5jb25maWcuZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIGxheWVyO1xuICB9XG5cbiAgLy8gZmluZCBkZWZhdXQgbGF5ZXIgcHJvcHNcbiAgY29uc3QgcmVzdWx0ID1cbiAgICB0eXBlb2YgbGF5ZXJDbGFzc2VzW25ld0xheWVyLnR5cGVdLmZpbmREZWZhdWx0TGF5ZXJQcm9wcyA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyBsYXllckNsYXNzZXNbbmV3TGF5ZXIudHlwZV0uZmluZERlZmF1bHRMYXllclByb3BzKGRhdGFzZXQsIFtdKVxuICAgICAgOiB7cHJvcHM6IFtdfTtcblxuICAvLyBhbiBhcnJheSBvZiBwb3NzaWJsZSBwcm9wcywgdXNlIDFzdCBvbmVcbiAgY29uc3QgcHJvcHMgPSBBcnJheS5pc0FycmF5KHJlc3VsdCkgPyByZXN1bHQgOiByZXN1bHQucHJvcHMgfHwgW107XG5cbiAgaWYgKHByb3BzLmxlbmd0aCkge1xuICAgIG5ld0xheWVyID0gbmV3IGxheWVyQ2xhc3Nlc1tsYXllci50eXBlXSh7XG4gICAgICAuLi5wcm9wc1swXSxcbiAgICAgIGxhYmVsOiBuZXdMYXllci5jb25maWcubGFiZWwsXG4gICAgICBkYXRhSWQ6IG5ld0xheWVyLmNvbmZpZy5kYXRhSWQsXG4gICAgICBpc0NvbmZpZ0FjdGl2ZTogbmV3TGF5ZXIuY29uZmlnLmlzQ29uZmlnQWN0aXZlLFxuICAgICAgaXNWaXNpYmxlOiBuZXdMYXllci5jb25maWcuaXNWaXNpYmxlXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHR5cGVvZiBuZXdMYXllci5zZXRJbml0aWFsTGF5ZXJDb25maWcgPT09ICdmdW5jdGlvbidcbiAgICA/IG5ld0xheWVyLnNldEluaXRpYWxMYXllckNvbmZpZyhkYXRhc2V0KVxuICAgIDogbmV3TGF5ZXI7XG59XG4vKipcbiAqIFVwZGF0ZSBsYXllciB0eXBlLiBQcmV2aWV3cyBsYXllciBjb25maWcgd2lsbCBiZSBjb3BpZWQgaWYgYXBwbGljYWJsZS5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclR5cGVDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVHlwZUNoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBuZXdUeXBlfSA9IGFjdGlvbjtcbiAgaWYgKCFvbGRMYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBvbGRJZCA9IG9sZExheWVyLmlkO1xuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkSWQpO1xuXG4gIGlmICghc3RhdGUubGF5ZXJDbGFzc2VzW25ld1R5cGVdKSB7XG4gICAgQ29uc29sZS5lcnJvcihgJHtuZXdUeXBlfSBpcyBub3QgYSB2YWxpZCBsYXllciB0eXBlYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxldCBuZXdMYXllciA9IG5ldyBzdGF0ZS5sYXllckNsYXNzZXNbbmV3VHlwZV0oe1xuICAgIC8vIGtlZXAgb2xkIGxheWVyIGxhYmxlIGFuZCBpc0NvbmZpZ0FjdGl2ZVxuICAgIGxhYmVsOiBvbGRMYXllci5jb25maWcubGFiZWwsXG4gICAgaXNDb25maWdBY3RpdmU6IG9sZExheWVyLmNvbmZpZy5pc0NvbmZpZ0FjdGl2ZSxcbiAgICBkYXRhSWQ6IG9sZExheWVyLmNvbmZpZy5kYXRhSWRcbiAgfSk7XG5cbiAgaWYgKCFvbGRMYXllci50eXBlKSB7XG4gICAgLy8gaWYgc2V0dGluZyBsYXllciB0eXBlIG9uIGFuIGVtcHR5IGxheWVyXG4gICAgbmV3TGF5ZXIgPSBzZXRJbml0aWFsTGF5ZXJDb25maWcobmV3TGF5ZXIsIHN0YXRlLmRhdGFzZXRzLCBzdGF0ZS5sYXllckNsYXNzZXMpO1xuICB9IGVsc2Uge1xuICAgIC8vIGdldCBhIG1pbnQgbGF5ZXIsIHdpdGggbmV3IGlkIGFuZCB0eXBlXG4gICAgLy8gYmVjYXVzZSBkZWNrLmdsIHVzZXMgaWQgdG8gbWF0Y2ggYmV0d2VlbiBuZXcgYW5kIG9sZCBsYXllci5cbiAgICAvLyBJZiB0eXBlIGhhcyBjaGFuZ2VkIGJ1dCBpZCBpcyB0aGUgc2FtZSwgaXQgd2lsbCBicmVha1xuXG4gICAgY29uc3QgZGVmYXVsdExheWVyUHJvcHMgPVxuICAgICAgdHlwZW9mIHN0YXRlLmxheWVyQ2xhc3Nlc1tuZXdUeXBlXS5maW5kRGVmYXVsdExheWVyUHJvcHMgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyBzdGF0ZS5sYXllckNsYXNzZXNbbmV3VHlwZV0uZmluZERlZmF1bHRMYXllclByb3BzKHN0YXRlLmRhdGFzZXRzW25ld0xheWVyLmNvbmZpZy5kYXRhSWRdKVxuICAgICAgICA6IG51bGw7XG5cbiAgICBuZXdMYXllci5hc3NpZ25Db25maWdUb0xheWVyKFxuICAgICAgb2xkTGF5ZXIuY29uZmlnLFxuICAgICAgb2xkTGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MsXG4gICAgICBzdGF0ZS5kYXRhc2V0cyxcbiAgICAgIGRlZmF1bHRMYXllclByb3BzXG4gICAgKTtcbiAgICBuZXdMYXllci51cGRhdGVMYXllckRvbWFpbihzdGF0ZS5kYXRhc2V0cyk7XG4gIH1cblxuICBjb25zdCB7Y2xpY2tlZCwgaG92ZXJJbmZvfSA9IHN0YXRlO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBjbGlja2VkOiBvbGRMYXllci5pc0xheWVySG92ZXJlZChjbGlja2VkKSA/IHVuZGVmaW5lZCA6IGNsaWNrZWQsXG4gICAgaG92ZXJJbmZvOiBvbGRMYXllci5pc0xheWVySG92ZXJlZChob3ZlckluZm8pID8gdW5kZWZpbmVkIDogaG92ZXJJbmZvXG4gIH07XG5cbiAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBuZXdTdGF0ZSk7XG4gIG5ld1N0YXRlID0gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKG5ld1N0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG5cbiAgaWYgKGxheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCB8fCBvbGRMYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQpIHtcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXdTdGF0ZSk7XG4gIH1cblxuICAvLyB1cGRhdGUgc3BsaXRNYXAgbGF5ZXIgaWRcbiAgaWYgKHN0YXRlLnNwbGl0TWFwcy5sZW5ndGgpIHtcbiAgICBuZXdTdGF0ZSA9IHtcbiAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgc3BsaXRNYXBzOiBuZXdTdGF0ZS5zcGxpdE1hcHMubWFwKHNldHRpbmdzID0+IHtcbiAgICAgICAgY29uc3Qge1tvbGRJZF06IG9sZExheWVyTWFwLCAuLi5vdGhlckxheWVyc30gPSBzZXR0aW5ncy5sYXllcnM7XG4gICAgICAgIHJldHVybiBvbGRJZCBpbiBzZXR0aW5ncy5sYXllcnNcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgLi4uc2V0dGluZ3MsXG4gICAgICAgICAgICAgIGxheWVyczoge1xuICAgICAgICAgICAgICAgIC4uLm90aGVyTGF5ZXJzLFxuICAgICAgICAgICAgICAgIFtsYXllci5pZF06IG9sZExheWVyTWFwXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHNldHRpbmdzO1xuICAgICAgfSlcbiAgICB9O1xuICB9XG5cbiAgLy8gdXBkYXRlIGxheWVyT3JkZXIgd2l0aCBuZXcgaWRcbiAgbmV3U3RhdGUgPSB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgbGF5ZXJPcmRlcjogcmVwbGFjZUxheWVyRW50cnlJbkxheWVyT3JkZXIobmV3U3RhdGUubGF5ZXJPcmRlciwgb2xkTGF5ZXIuaWQsIG5ld0xheWVyLmlkKVxuICB9O1xuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgdmlzdWFsIGNoYW5uZWxcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVmlzdWFsQ2hhbm5lbENoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXIsIG5ld0NvbmZpZywgbmV3VmlzQ29uZmlnLCBjaGFubmVsfSA9IGFjdGlvbjtcbiAgaWYgKCFvbGRMYXllci5jb25maWcuZGF0YUlkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW29sZExheWVyLmNvbmZpZy5kYXRhSWRdO1xuXG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gIGxldCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKG5ld0NvbmZpZyk7XG4gIGlmIChuZXdWaXNDb25maWcpIG5ld0xheWVyID0gbmV3TGF5ZXIudXBkYXRlTGF5ZXJWaXNDb25maWcobmV3VmlzQ29uZmlnKTtcblxuICBuZXdMYXllci51cGRhdGVMYXllclZpc3VhbENoYW5uZWwoZGF0YXNldCwgY2hhbm5lbCk7XG5cbiAgLy8gY2FsbGluZyB1cGRhdGUgYW5pbWF0aW9uIGRvbWFpbiBmaXJzdCB0byBtZXJnZSBhbGwgbGF5ZXIgYW5pbWF0aW9uIGRvbWFpblxuICBsZXQgdXBkYXRlZFN0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKHN0YXRlKTtcblxuICBjb25zdCB2aXN1YWxDaGFubmVsID0gb2xkTGF5ZXIudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF07XG4gIGlmICh2aXN1YWxDaGFubmVsPy5jaGFubmVsU2NhbGVUeXBlID09PSBDSEFOTkVMX1NDQUxFUy5jb2xvciAmJiBuZXdDb25maWdbdmlzdWFsQ2hhbm5lbC5maWVsZF0pIHtcbiAgICAvLyBpZiBjb2xvciBmaWVsZCBjaGFuZ2VkLCBzZXQgY3VzdG9tQnJlYWtzIHRvIGZhbHNlXG4gICAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb2xvclVJKHZpc3VhbENoYW5uZWwucmFuZ2UsIHtcbiAgICAgIGNvbG9yUmFuZ2VDb25maWc6IHtcbiAgICAgICAgLi4ubmV3TGF5ZXIuY29uZmlnLmNvbG9yVUlbdmlzdWFsQ2hhbm5lbC5yYW5nZV0uY29sb3JSYW5nZUNvbmZpZyxcbiAgICAgICAgY3VzdG9tQnJlYWtzOiBmYWxzZVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdXBkYXRlZFN0YXRlID0ge1xuICAgICAgLi4udXBkYXRlZFN0YXRlLFxuICAgICAgbGF5ZXJzOiB1cGRhdGVkU3RhdGUubGF5ZXJzLm1hcChsID0+IChsLmlkID09PSBvbGRMYXllci5pZCA/IG5ld0xheWVyIDogbCkpXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IG9sZExheWVyRGF0YSA9IHVwZGF0ZWRTdGF0ZS5sYXllckRhdGFbaWR4XTtcbiAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCB1cGRhdGVkU3RhdGUsIG9sZExheWVyRGF0YSk7XG5cbiAgaWYgKFxuICAgIHZpc3VhbENoYW5uZWw/LmNoYW5uZWxTY2FsZVR5cGUgPT09IENIQU5ORUxfU0NBTEVTLmNvbG9yICYmXG4gICAgbmV3Q29uZmlnW3Zpc3VhbENoYW5uZWw/LnNjYWxlXSA9PT0gU0NBTEVfVFlQRVMuY3VzdG9tT3JkaW5hbCAmJlxuICAgICFuZXdWaXNDb25maWdcbiAgKSB7XG4gICAgLy8gd2hlbiBzd2l0Y2hpbmcgdG8gY3VzdG9tT3JkaW5hbCBzY2FsZSwgY3JlYXRlIGEgY3VzdG9tUGFsZXR0ZSBpbiBjb2xvclVJIHdpdGggdXBkYXRlZCBjb2xvckRvbWFpblxuICAgIGNvbnN0IGN1c3RvbVBhbGV0dGUgPSBpbml0Q3VzdG9tUGFsZXR0ZUJ5Q3VzdG9tU2NhbGUoe1xuICAgICAgc2NhbGU6IFNDQUxFX1RZUEVTLmN1c3RvbU9yZGluYWwsXG4gICAgICBmaWVsZDogbGF5ZXIuY29uZmlnW3Zpc3VhbENoYW5uZWwuZmllbGRdLFxuICAgICAgb3JkaW5hbERvbWFpbjogbGF5ZXIuY29uZmlnW2xheWVyLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdLmRvbWFpbl0sXG4gICAgICByYW5nZTogbGF5ZXIuY29uZmlnLnZpc0NvbmZpZ1t2aXN1YWxDaGFubmVsLnJhbmdlXSxcbiAgICAgIGNvbG9yQnJlYWtzOiBudWxsXG4gICAgfSk7XG4gICAgLy8gdXBkYXRlIGNvbG9yUmFuZ2Ugd2l0aCBuZXcgY3VzdG9tUGFsZXR0ZVxuICAgIGxheWVyLnVwZGF0ZUxheWVyQ29sb3JVSSh2aXN1YWxDaGFubmVsLnJhbmdlLCB7XG4gICAgICBzaG93Q29sb3JDaGFydDogdHJ1ZSxcbiAgICAgIGNvbG9yUmFuZ2VDb25maWc6IHtcbiAgICAgICAgLi4ubGF5ZXIuY29uZmlnLmNvbG9yVUlbdmlzdWFsQ2hhbm5lbC5yYW5nZV0uY29sb3JSYW5nZUNvbmZpZyxcbiAgICAgICAgY3VzdG9tQnJlYWtzOiB0cnVlXG4gICAgICB9LFxuICAgICAgY3VzdG9tUGFsZXR0ZVxuICAgIH0pO1xuICB9XG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEodXBkYXRlZFN0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIGB2aXNDb25maWdgXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICBjb25zdCBwcm9wcyA9IE9iamVjdC5rZXlzKGFjdGlvbi5uZXdWaXNDb25maWcpO1xuXG4gIGNvbnN0IG5ld1Zpc0NvbmZpZyA9IHtcbiAgICAuLi5vbGRMYXllci5jb25maWcudmlzQ29uZmlnLFxuICAgIC4uLmFjdGlvbi5uZXdWaXNDb25maWdcbiAgfTtcblxuICBjb25zdCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHt2aXNDb25maWc6IG5ld1Zpc0NvbmZpZ30pO1xuXG4gIGxldCBuZXh0U3RhdGUgPSBzdGF0ZTtcblxuICAvLyBFeGNsdXNpdmUgYml0bWFwIGVkaXRpbmc6IHdoZW4gZWRpdEJvdW5kcyBpcyB0dXJuZWQgb24gZm9yIG9uZSBiaXRtYXAgbGF5ZXIsXG4gIC8vIHR1cm4gaXQgb2ZmIGZvciBhbGwgb3RoZXIgYml0bWFwIGxheWVyc1xuICBpZiAobmV3TGF5ZXIudHlwZSA9PT0gJ2JpdG1hcCcgJiYgYWN0aW9uLm5ld1Zpc0NvbmZpZy5lZGl0Qm91bmRzID09PSB0cnVlKSB7XG4gICAgbmV4dFN0YXRlID0ge1xuICAgICAgLi4ubmV4dFN0YXRlLFxuICAgICAgbGF5ZXJzOiBuZXh0U3RhdGUubGF5ZXJzLm1hcCgobCwgaSkgPT4ge1xuICAgICAgICBpZiAoaSAhPT0gaWR4ICYmIGwudHlwZSA9PT0gJ2JpdG1hcCcgJiYgbC5jb25maWcudmlzQ29uZmlnLmVkaXRCb3VuZHMpIHtcbiAgICAgICAgICByZXR1cm4gbC51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgICAgICB2aXNDb25maWc6IHsuLi5sLmNvbmZpZy52aXNDb25maWcsIGVkaXRCb3VuZHM6IGZhbHNlfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsO1xuICAgICAgfSlcbiAgICB9O1xuICB9XG5cbiAgaWYgKG5ld0xheWVyLnNob3VsZENhbGN1bGF0ZUxheWVyRGF0YShwcm9wcykpIHtcbiAgICBjb25zdCBvbGRMYXllckRhdGEgPSBuZXh0U3RhdGUubGF5ZXJEYXRhW2lkeF07XG4gICAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBuZXh0U3RhdGUsIG9sZExheWVyRGF0YSk7XG4gICAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXh0U3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV4dFN0YXRlLCB7bGF5ZXI6IG5ld0xheWVyLCBpZHh9KTtcbn1cblxuLyoqXG4gKiBSZXNldCBhbmltYXRpb24gY29uZmlnIGN1cnJlbnQgdGltZSB0byBhIHNwZWNpZmllZCB2YWx1ZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyID0gPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICB7dmFsdWV9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlckFjdGlvblxuKTogUyA9PiB7XG4gIGNvbnN0IGN1cnJlbnRUaW1lID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZVswXSA6IHZhbHVlO1xuICBjb25zdCBuZXh0U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICBjdXJyZW50VGltZVxuICAgIH1cbiAgfTtcbiAgLy8gdXBkYXRlIGFuaW1hdGlvbiBjb25maWcgZm9yIGVhY2ggbGF5ZXJcbiAgcmV0dXJuIHN0YXRlLmxheWVycy5yZWR1Y2UoKGFjY3UsIGwpID0+IHtcbiAgICBpZiAobC5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQgJiYgbC50eXBlICE9PSAndHJpcCcpIHtcbiAgICAgIHJldHVybiBsYXllckFuaW1hdGlvbkNoYW5nZVVwZGF0ZXIoYWNjdSwge29sZExheWVyOiBsLCBwcm9wOiAnY3VycmVudFRpbWUnLCBjdXJyZW50VGltZX0pO1xuICAgIH1cbiAgICByZXR1cm4gYWNjdTtcbiAgfSwgbmV4dFN0YXRlKTtcbn07XG5cbi8qKlxuICogVXBkYXRlIGZpbHRlciBwcm9wZXJ0eVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlckFuaW1hdGlvblRpbWVVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlckFuaW1hdGlvblRpbWVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKHN0YXRlLCBhY3Rpb24pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBmaWx0ZXIgYW5pbWF0aW9uIHdpbmRvd1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIHtpZCwgYW5pbWF0aW9uV2luZG93fTogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXJBY3Rpb25cbik6IFMge1xuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoZiA9PiBmLmlkID09PSBpZCk7XG5cbiAgaWYgKCFmaWx0ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdGaWx0ZXIgPSB7XG4gICAgLi4uZmlsdGVyLFxuICAgIGFuaW1hdGlvbldpbmRvd1xuICB9O1xuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IHN3YXBfPEZpbHRlcj4obmV3RmlsdGVyKShzdGF0ZS5maWx0ZXJzKVxuICB9O1xuXG4gIGNvbnN0IG5ld1N5bmNUaW1lbGluZU1vZGUgPSBnZXRTeW5jQW5pbWF0aW9uTW9kZShuZXdGaWx0ZXIgYXMgVGltZVJhbmdlRmlsdGVyKTtcblxuICByZXR1cm4gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtpZCwgbW9kZTogbmV3U3luY1RpbWVsaW5lTW9kZX0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlGaWx0ZXJDb25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7ZmlsdGVySWQsIG5ld0ZpbHRlcn0gPSBhY3Rpb247XG4gIGNvbnN0IG9sZEZpbHRlciA9IHN0YXRlLmZpbHRlcnMuZmluZChmID0+IGYuaWQgPT09IGZpbHRlcklkKTtcbiAgaWYgKCFvbGRGaWx0ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyBTZXJpYWxpemUgdGhlIGZpbHRlcnMgdG8gb25seSBjb21wYXJlIHRoZSBzYXZlZCBwcm9wZXJ0aWVzXG4gIGNvbnN0IHNlcmlhbGl6ZWRPbGRGaWx0ZXIgPSBzZXJpYWxpemVGaWx0ZXIob2xkRmlsdGVyLCBzdGF0ZS5zY2hlbWEpID8/IHtjb25maWc6IHt9fTtcbiAgY29uc3Qgc2VyaWFsaXplZE5ld0ZpbHRlciA9IHNlcmlhbGl6ZUZpbHRlcihuZXdGaWx0ZXIsIHN0YXRlLnNjaGVtYSk7XG4gIGlmICghc2VyaWFsaXplZE5ld0ZpbHRlciB8fCBpc0VxdWFsKHNlcmlhbGl6ZWRPbGRGaWx0ZXIsIHNlcmlhbGl6ZWROZXdGaWx0ZXIpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gSWYgdGhlcmUgYXJlIGFueSBjaGFuZ2VzIHRvIHRoZSBmaWx0ZXIsIGFwcGx5IHRoZW1cbiAgY29uc3QgY2hhbmdlZCA9IHBpY2tDaGFuZ2VkUHJvcHMoc2VyaWFsaXplZE9sZEZpbHRlciwgc2VyaWFsaXplZE5ld0ZpbHRlcik7XG4gIGRlbGV0ZSBjaGFuZ2VkWydpZCddOyAvLyBpZCBzaG91bGQgbm90IGJlIGNoYW5nZWRcblxuICBjb25zdCBmaWx0ZXJJbmRleCA9IHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gZi5pZCA9PT0gZmlsdGVySWQpO1xuICBpZiAoZmlsdGVySW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKFxuICAgIHN0YXRlLFxuICAgIHNldEZpbHRlcihmaWx0ZXJJbmRleCwgT2JqZWN0LmtleXMoY2hhbmdlZCksIE9iamVjdC52YWx1ZXMoY2hhbmdlZCkpXG4gICk7XG59XG5cbi8qKlxuICogVXBkYXRlIGZpbHRlciBwcm9wZXJ0eVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlclVwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFMge1xuICBjb25zdCB7aWR4LCB2YWx1ZUluZGV4ID0gMH0gPSBhY3Rpb247XG4gIGNvbnN0IG9sZEZpbHRlciA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcbiAgaWYgKCFvbGRGaWx0ZXIpIHtcbiAgICBDb25zb2xlLmVycm9yKGBmaWx0ZXJzLiR7aWR4fSBpcyB1bmRlZmluZWRgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKFxuICAgIEFycmF5LmlzQXJyYXkoYWN0aW9uLnByb3ApICYmXG4gICAgKCFBcnJheS5pc0FycmF5KGFjdGlvbi52YWx1ZSkgfHwgYWN0aW9uLnByb3AubGVuZ3RoICE9PSBhY3Rpb24udmFsdWUubGVuZ3RoKVxuICApIHtcbiAgICBDb25zb2xlLmVycm9yKCdFeHBlY3RpbmcgdmFsdWUgdG8gYmUgYW4gYXJyYXkgb2YgdGhlIHNhbWUgbGVuZ3RoLCBzaW5jZSBwcm9wIGlzIGFuIGFycmF5Jyk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIC8vIGNvbnZlcnQgcHJvcCBhbmQgdmFsdWUgdG8gYXJyYXlcbiAgY29uc3QgcHJvcHMgPSB0b0FycmF5KGFjdGlvbi5wcm9wKTtcbiAgY29uc3QgdmFsdWVzID0gQXJyYXkuaXNBcnJheShhY3Rpb24ucHJvcCkgPyB0b0FycmF5KGFjdGlvbi52YWx1ZSkgOiBbYWN0aW9uLnZhbHVlXTtcblxuICBsZXQgbmV3RmlsdGVyID0gb2xkRmlsdGVyO1xuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcblxuICBsZXQgZGF0YXNldElkc1RvRmlsdGVyOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgcHJvcCA9IHByb3BzW2ldO1xuICAgIGNvbnN0IHZhbHVlID0gdmFsdWVzW2ldO1xuICAgIC8vIFdlIGN1cnJlbnRseSBkbyBub3Qgc3VwcG9ydCBwYXNzaW5nIGluIG5hbWUgYXMgYW4gYXJyYXkgaW50byBfdXBkYXRlRmlsdGVyUHJvcCwgc28gd2UgY2FsbCBpdCBtdWx0aXBsZSB0aW1lcyB3aXRoIGVhY2ggbmFtZVxuICAgIC8vIFNlZSB0aGUgY29tbWVudCBpbiB0aGVyZSBhcyB0byB3aGF0IHNob3VsZCBiZSBhZGRyZXNzZWRcbiAgICBsZXQgcmVzO1xuICAgIGlmIChwcm9wID09PSAnbmFtZScgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb29wLWZ1bmNcbiAgICAgIHJlcyA9IHZhbHVlLnJlZHVjZSgoYWNjdSwgdikgPT4ge1xuICAgICAgICByZXR1cm4gX3VwZGF0ZUZpbHRlclByb3AoYWNjdSwgbmV3RmlsdGVyLCBwcm9wLCB2LCB2YWx1ZUluZGV4KTtcbiAgICAgIH0sIG5ld1N0YXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzID0gX3VwZGF0ZUZpbHRlclByb3AobmV3U3RhdGUsIG5ld0ZpbHRlciwgcHJvcCwgdmFsdWUsIHZhbHVlSW5kZXgpO1xuICAgIH1cbiAgICBuZXdGaWx0ZXIgPSByZXMuZmlsdGVyO1xuICAgIG5ld1N0YXRlID0gcmVzLnN0YXRlO1xuICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IGRhdGFzZXRJZHNUb0ZpbHRlci5jb25jYXQocmVzLmRhdGFzZXRJZHNUb0ZpbHRlcik7XG4gIH1cblxuICBjb25zdCBlbmxhcmdlZEZpbHRlciA9IHN0YXRlLmZpbHRlcnMuZmluZChmID0+IGYudmlldyA9PT0gRklMVEVSX1ZJRVdfVFlQRVMuZW5sYXJnZWQpO1xuXG4gIGlmIChlbmxhcmdlZEZpbHRlciAmJiBlbmxhcmdlZEZpbHRlci5pZCAhPT0gbmV3RmlsdGVyLmlkKSB7XG4gICAgLy8gdGhlcmUgc2hvdWxkIGJlIG9ubHkgb25lIGVubGFyZ2VkIGZpbHRlclxuICAgIG5ld0ZpbHRlci52aWV3ID0gRklMVEVSX1ZJRVdfVFlQRVMuc2lkZTtcbiAgfVxuXG4gIC8vIHNhdmUgbmV3IGZpbHRlcnMgdG8gbmV3U3RhdGVcbiAgbmV3U3RhdGUgPSBzZXQoWydmaWx0ZXJzJywgaWR4XSwgbmV3RmlsdGVyLCBuZXdTdGF0ZSk7XG5cbiAgLy8gZmlsdGVyIGRhdGFcbiAgY29uc3QgZmlsdGVyZWREYXRhc2V0cyA9IGFwcGx5RmlsdGVyc1RvRGF0YXNldHMoXG4gICAgdW5pcShkYXRhc2V0SWRzVG9GaWx0ZXIpLFxuICAgIG5ld1N0YXRlLmRhdGFzZXRzLFxuICAgIG5ld1N0YXRlLmZpbHRlcnMsXG4gICAgbmV3U3RhdGUubGF5ZXJzXG4gICk7XG5cbiAgbmV3U3RhdGUgPSBzZXQoWydkYXRhc2V0cyddLCBmaWx0ZXJlZERhdGFzZXRzLCBuZXdTdGF0ZSk7XG5cbiAgLy8gbmVlZCB0byB1cGRhdGUgZmlsdGVyUGxvdCBhZnRlciBmaWx0ZXIgRGF0YXNldCBmb3IgcGxvdCB0byB1cGRhdGUgb24gZmlsdGVyZWQgcmVzdWx0XG4gIGNvbnN0IGZpbHRlcldpdGhQTG90ID0gdXBkYXRlRmlsdGVyUGxvdChuZXdTdGF0ZS5kYXRhc2V0cywgbmV3U3RhdGUuZmlsdGVyc1tpZHhdKTtcblxuICBuZXdTdGF0ZSA9IHNldChbJ2ZpbHRlcnMnLCBpZHhdLCBmaWx0ZXJXaXRoUExvdCwgbmV3U3RhdGUpO1xuXG4gIC8vIGRhdGFJZCBpcyBhbiBhcnJheVxuICAvLyBwYXNzIG9ubHkgdGhlIGRhdGFzZXQgd2UgbmVlZCB0byB1cGRhdGVcbiAgbmV3U3RhdGUgPSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobmV3U3RhdGUsIGRhdGFzZXRJZHNUb0ZpbHRlciwgbmV3RmlsdGVyKTtcblxuICAvLyBJZiB0aW1lIHJhbmdlIGZpbHRlciB2YWx1ZSB3YXMgdXBkYXRlZCwgYWRqdXN0IGFuaW1hdGlvbiBjb25maWdcbiAgaWYgKG5ld0ZpbHRlci50eXBlID09PSBGSUxURVJfVFlQRVMudGltZVJhbmdlICYmIHByb3BzLmluY2x1ZGVzKCd2YWx1ZScpKSB7XG4gICAgbmV3U3RhdGUgPSBhZGp1c3RBbmltYXRpb25Db25maWdXaXRoRmlsdGVyKG5ld1N0YXRlLCBhY3Rpb24uaWR4KTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuZnVuY3Rpb24gX3VwZGF0ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChmaWx0ZXIsIHZhbHVlSW5kZXgsIHZhbHVlLCBkYXRhc2V0cykge1xuICBsZXQgbmV3RmlsdGVyID0gZmlsdGVyO1xuICBpZiAoZmlsdGVyLmRhdGFJZFt2YWx1ZUluZGV4XSkge1xuICAgIC8vIGlmIGRhdGFJZCBhbHJlYWR5IGV4aXN0XG4gICAgbmV3RmlsdGVyID0gX3JlbW92ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChmaWx0ZXIsIHZhbHVlSW5kZXgsIGRhdGFzZXRzKTtcbiAgfVxuICBpZiAodmFsdWUpIHtcbiAgICBjb25zdCBuZXh0VmFsdWUgPSBuZXdGaWx0ZXIuZGF0YUlkLnNsaWNlKCk7XG4gICAgbmV4dFZhbHVlW3ZhbHVlSW5kZXhdID0gdmFsdWU7XG4gICAgbmV3RmlsdGVyID0gc2V0KFsnZGF0YUlkJ10sIG5leHRWYWx1ZSwgbmV3RmlsdGVyKTtcbiAgfVxuICByZXR1cm4gbmV3RmlsdGVyO1xufVxuXG5mdW5jdGlvbiBfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgZGF0YXNldHMpIHtcbiAgY29uc3QgZGF0YUlkID0gZmlsdGVyLmRhdGFJZFt2YWx1ZUluZGV4XTtcblxuICBpZiAoZmlsdGVyLmRhdGFJZC5sZW5ndGggPT09IDEgJiYgdmFsdWVJbmRleCA9PT0gMCkge1xuICAgIC8vIGlmIHJlbW92ZSB0aGUgb25seSBkYXRhSWQsIGNyZWF0ZSBhbiBlbXB0eSBmaWx0ZXIgaW5zdGVhZDtcbiAgICByZXR1cm4gZ2V0RGVmYXVsdEZpbHRlcih7aWQ6IGZpbHRlci5pZH0pO1xuICB9XG5cbiAgaWYgKGRhdGFJZCkge1xuICAgIGZpbHRlciA9IHJlbW92ZUZpbHRlclBsb3QoZmlsdGVyLCBkYXRhSWQpO1xuICB9XG5cbiAgZm9yIChjb25zdCBwcm9wIG9mIFsnZGF0YUlkJywgJ25hbWUnLCAnZmllbGRJZHgnLCAnZ3B1Q2hhbm5lbCddKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZmlsdGVyW3Byb3BdKSkge1xuICAgICAgY29uc3QgbmV4dFZhbCA9IGZpbHRlcltwcm9wXS5zbGljZSgpO1xuICAgICAgbmV4dFZhbC5zcGxpY2UodmFsdWVJbmRleCwgMSk7XG4gICAgICBmaWx0ZXIgPSBzZXQoW3Byb3BdLCBuZXh0VmFsLCBmaWx0ZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIG1lcmdlRmllbGREb21haW4gZm9yIHRoZSByZW1haW5pbmcgZmllbGRzXG4gIGNvbnN0IGRvbWFpblN0ZXBzID0gbWVyZ2VGaWx0ZXJEb21haW4oZmlsdGVyLCBkYXRhc2V0cyk7XG5cbiAgY29uc3QgbmV4dEZpbHRlciA9IHtcbiAgICAuLi5maWx0ZXIsXG4gICAgLy8gdmFsdWU6IG5leHRWYWx1ZSxcbiAgICAuLi4oZG9tYWluU3RlcHMgPyB7ZG9tYWluOiBkb21haW5TdGVwcz8uZG9tYWluLCBzdGVwOiBkb21haW5TdGVwcz8uc3RlcH0gOiB7fSlcbiAgfTtcblxuICBjb25zdCBuZXh0VmFsdWUgPSBhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluKG5leHRGaWx0ZXIudmFsdWUsIG5leHRGaWx0ZXIpO1xuICByZXR1cm4ge1xuICAgIC4uLm5leHRGaWx0ZXIsXG4gICAgdmFsdWU6IG5leHRWYWx1ZVxuICB9O1xufVxuXG4vKiogKlxuICogVXBkYXRlcyBhIHNpbmdsZSBwcm9wZXJ0eSBvZiBhIGZpbHRlclxuICovXG5mdW5jdGlvbiBfdXBkYXRlRmlsdGVyUHJvcChzdGF0ZSwgZmlsdGVyLCBwcm9wLCB2YWx1ZSwgdmFsdWVJbmRleCwgZGF0YXNldElkcz8pIHtcbiAgbGV0IGRhdGFzZXRJZHNUb0ZpbHRlcjogc3RyaW5nW10gPSBbXTtcbiAgc3dpdGNoIChwcm9wKSB7XG4gICAgLy8gVE9ETzogTmV4dCBQUiBmb3IgVUkgaWYgd2UgdXBkYXRlIGZpbHRlckRhdGFJZCwgd2UgbmVlZCB0byBjb25zaWRlciB0d28gY2FzZXM6XG4gICAgLy8gMS4gZGF0YUlkIGlzIGVtcHR5OiBjcmVhdGUgYSBkZWZhdWx0IGZpbHRlclxuICAgIC8vIDIuIEFkZCBhIG5ldyBkYXRhc2V0IGlkXG4gICAgY2FzZSBGSUxURVJfVVBEQVRFUl9QUk9QUy5kYXRhSWQ6IHtcbiAgICAgIGNvbnN0IG9sZERhdGFJZCA9IFsuLi5maWx0ZXIuZGF0YUlkXTtcbiAgICAgIGZpbHRlciA9IF91cGRhdGVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCB2YWx1ZSwgc3RhdGUuZGF0YXNldHMpO1xuICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gdW5pcShbLi4ub2xkRGF0YUlkLCAuLi5maWx0ZXIuZGF0YUlkXSk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSBGSUxURVJfVVBEQVRFUl9QUk9QUy5uYW1lOiB7XG4gICAgICAvLyB3ZSBhcmUgc3VwcG9ydGluZyB0aGUgY3VycmVudCBmdW5jdGlvbmFsaXR5XG4gICAgICAvLyBUT0RPOiBOZXh0IFBSIGZvciBVSSBmaWx0ZXIgbmFtZSB3aWxsIG9ubHkgdXBkYXRlIGZpbHRlciBuYW1lIGJ1dCBpdCB3b24ndCBoYXZlIHNpZGUgZWZmZWN0c1xuICAgICAgLy8gd2UgYXJlIGdvbm5hIHVzZSBwYWlyIG9mIGRhdGFzZXRzIGFuZCBmaWVsZElkeCB0byB1cGRhdGUgdGhlIGZpbHRlclxuICAgICAgY29uc3QgZGF0YXNldElkID0gZmlsdGVyLmRhdGFJZFt2YWx1ZUluZGV4XTtcbiAgICAgIGNvbnN0IHtmaWx0ZXI6IHVwZGF0ZWRGaWx0ZXIsIGRhdGFzZXQ6IG5ld0RhdGFzZXR9ID0gYXBwbHlGaWx0ZXJGaWVsZE5hbWUoXG4gICAgICAgIGZpbHRlcixcbiAgICAgICAgc3RhdGUuZGF0YXNldHMsXG4gICAgICAgIGRhdGFzZXRJZCxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHZhbHVlSW5kZXgsXG4gICAgICAgIHttZXJnZURvbWFpbjogdmFsdWVJbmRleCA+IDB9XG4gICAgICApO1xuICAgICAgaWYgKHVwZGF0ZWRGaWx0ZXIpIHtcbiAgICAgICAgZmlsdGVyID0gdXBkYXRlZEZpbHRlcjtcbiAgICAgICAgaWYgKGZpbHRlci5ncHUpIHtcbiAgICAgICAgICBmaWx0ZXIgPSBzZXRGaWx0ZXJHcHVNb2RlKGZpbHRlciwgc3RhdGUuZmlsdGVycyk7XG4gICAgICAgICAgZmlsdGVyID0gYXNzaWduR3B1Q2hhbm5lbChmaWx0ZXIsIHN0YXRlLmZpbHRlcnMpO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRlID0gc2V0KFsnZGF0YXNldHMnLCBkYXRhc2V0SWRdLCBuZXdEYXRhc2V0LCBzdGF0ZSk7XG4gICAgICAgIC8vIHJlbW92ZSBmaWx0ZXIgUGxvdCBhdCBkYXRhc2V0SWQsIHNvIGl0IHdpbGwgYmUgcmVjYWxjdWxhdGVkXG4gICAgICAgIGZpbHRlciA9IHJlbW92ZUZpbHRlclBsb3QoZmlsdGVyLCBkYXRhc2V0SWQpO1xuXG4gICAgICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IHVwZGF0ZWRGaWx0ZXIuZGF0YUlkO1xuICAgICAgfVxuICAgICAgLy8gb25seSBmaWx0ZXIgdGhlIGN1cnJlbnQgZGF0YXNldFxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2FzZSBGSUxURVJfVVBEQVRFUl9QUk9QUy5sYXllcklkOiB7XG4gICAgICAvLyBXZSBuZWVkIHRvIHVwZGF0ZSBvbmx5IGRhdGFzZXRJZC9zIGlmIHdlIGhhdmUgYWRkZWQvcmVtb3ZlZCBsYXllcnNcbiAgICAgIC8vIC0gY2hlY2sgZm9yIGxheWVySWQgY2hhbmdlcyAoWE9SIHdvcmtzIGJlY2F1c2Ugb2Ygc3RyaW5nIHZhbHVlcylcbiAgICAgIC8vIGlmIG5vIGRpZmZlcmVuY2VzIGJldHdlZW4gbGF5ZXJJZHMsIGRvbid0IGRvIGFueSBmaWx0ZXJpbmdcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGNvbnN0IGxheWVySWREaWZmZXJlbmNlID0geG9yKHZhbHVlLCBmaWx0ZXIubGF5ZXJJZCk7XG5cbiAgICAgIGNvbnN0IGxheWVyRGF0YUlkcyA9IHVuaXE8c3RyaW5nPihcbiAgICAgICAgbGF5ZXJJZERpZmZlcmVuY2VcbiAgICAgICAgICAubWFwKGxpZCA9PlxuICAgICAgICAgICAgZ2V0KFxuICAgICAgICAgICAgICBzdGF0ZS5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IGxpZCksXG4gICAgICAgICAgICAgIFsnY29uZmlnJywgJ2RhdGFJZCddXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICAgIC5maWx0ZXIoZCA9PiBkKSBhcyBzdHJpbmdbXVxuICAgICAgKTtcblxuICAgICAgLy8gb25seSBmaWx0ZXIgZGF0YXNldHNJZHNcbiAgICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IGxheWVyRGF0YUlkcztcblxuICAgICAgLy8gVXBkYXRlIG5ld0ZpbHRlciBkYXRhSWRzXG4gICAgICBjb25zdCBuZXdEYXRhSWRzID0gdW5pcTxzdHJpbmc+KFxuICAgICAgICB2YWx1ZVxuICAgICAgICAgID8ubWFwKGxpZCA9PlxuICAgICAgICAgICAgZ2V0KFxuICAgICAgICAgICAgICBzdGF0ZS5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IGxpZCksXG4gICAgICAgICAgICAgIFsnY29uZmlnJywgJ2RhdGFJZCddXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICAgIC5maWx0ZXIoZCA9PiBkKSBhcyBzdHJpbmdbXVxuICAgICAgKTtcblxuICAgICAgZmlsdGVyID0ge1xuICAgICAgICAuLi5maWx0ZXIsXG4gICAgICAgIGxheWVySWQ6IHZhbHVlLFxuICAgICAgICBkYXRhSWQ6IG5ld0RhdGFJZHNcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAgZmlsdGVyID0gc2V0KFtwcm9wXSwgdmFsdWUsIGZpbHRlcik7XG4gICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSBbLi4uZmlsdGVyLmRhdGFJZF07XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiB7ZmlsdGVyLCBkYXRhc2V0SWRzLCBkYXRhc2V0SWRzVG9GaWx0ZXIsIHN0YXRlfTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LXN0YXRlbWVudHMgKi9cblxuLyoqXG4gKiBTZXQgdGhlIHByb3BlcnR5IG9mIGEgZmlsdGVyIHBsb3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRGaWx0ZXJQbG90VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR4LCBuZXdQcm9wfTogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlclBsb3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmICghc3RhdGUuZmlsdGVyc1tpZHhdKSB7XG4gICAgQ29uc29sZS5lcnJvcihgZmlsdGVyc1ske2lkeH1dIGlzIHVuZGVmaW5lZGApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsZXQgbmV3RmlsdGVyID0gc3RhdGUuZmlsdGVyc1tpZHhdO1xuXG4gIGZvciAoY29uc3QgcHJvcCBpbiBuZXdQcm9wKSB7XG4gICAgaWYgKHByb3AgPT09ICdwbG90VHlwZScpIHtcbiAgICAgIG5ld0ZpbHRlciA9IHBpY2tfKCdwbG90VHlwZScpKG1lcmdlXyhuZXdQcm9wLnBsb3RUeXBlKSkobmV3RmlsdGVyKTtcbiAgICB9IGVsc2UgaWYgKHByb3AgPT09ICd5QXhpcycpIHtcbiAgICAgIGNvbnN0IGNoYXJ0VHlwZSA9IG5ld1Byb3AueUF4aXMgPyBQTE9UX1RZUEVTLmxpbmVDaGFydCA6IFBMT1RfVFlQRVMuaGlzdG9ncmFtO1xuXG4gICAgICBuZXdGaWx0ZXIgPSBwaWNrXygncGxvdFR5cGUnKShtZXJnZV8oe3R5cGU6IGNoYXJ0VHlwZX0pKShtZXJnZV8obmV3UHJvcCkobmV3RmlsdGVyKSk7XG4gICAgfVxuICB9XG5cbiAgbmV3RmlsdGVyID0gdXBkYXRlRmlsdGVyUGxvdChzdGF0ZS5kYXRhc2V0cywgbmV3RmlsdGVyKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IHN0YXRlLmZpbHRlcnMubWFwKChmLCBpKSA9PiAoaSA9PT0gaWR4ID8gbmV3RmlsdGVyIDogZikpXG4gIH07XG59O1xuXG4vKipcbiAqIEFkZCBhIG5ldyBmaWx0ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRGaWx0ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZEZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+XG4gICFhY3Rpb24uZGF0YUlkXG4gICAgPyBzdGF0ZVxuICAgIDoge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgZmlsdGVyczogWy4uLnN0YXRlLmZpbHRlcnMsIGdldERlZmF1bHRGaWx0ZXIoe2RhdGFJZDogYWN0aW9uLmRhdGFJZCwgaWQ6IGFjdGlvbi5pZH0pXVxuICAgICAgfTtcblxuLyoqXG4gKiBDcmVhdGUgb3IgdXBkYXRlIGEgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgY3JlYXRlT3JVcGRhdGVGaWx0ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkNyZWF0ZU9yVXBkYXRlRmlsdGVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7aWQsIGRhdGFJZCwgZmllbGQsIHZhbHVlfSA9IGFjdGlvbjtcblxuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgY29uc3Qgb3JpZ2luYWxJbmRleCA9IG5ld1N0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gZi5pZCA9PT0gaWQpO1xuICBsZXQgZmlsdGVySW5kZXggPSBvcmlnaW5hbEluZGV4O1xuICBpZiAoIWlkICYmICFkYXRhSWQpIHtcbiAgICByZXR1cm4gbmV3U3RhdGU7XG4gIH1cbiAgaWYgKG9yaWdpbmFsSW5kZXggPCAwICYmIGRhdGFJZCkge1xuICAgIG5ld1N0YXRlID0gYWRkRmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge2RhdGFJZH0pO1xuICAgIGlmIChuZXdTdGF0ZS5maWx0ZXJzLmxlbmd0aCAhPT0gc3RhdGUuZmlsdGVycy5sZW5ndGggKyAxKSB7XG4gICAgICAvLyBObyBuZXcgZmlsdGVyIHdhcyBhZGRlZFxuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cbiAgICAvLyBIZXJlIHdlIGFyZSBhc3N1bWluZyB0aGF0IHRoZSBmaWx0ZXIgd2FzIGFkZGVkIGF0IHRoZSBlbmRcbiAgICBmaWx0ZXJJbmRleCA9IG5ld1N0YXRlLmZpbHRlcnMubGVuZ3RoIC0gMTtcbiAgICBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlckluZGV4XSA9IHtcbiAgICAgIC4uLm5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySW5kZXhdLFxuICAgICAgLi4uKGlkID8ge2lkfSA6IG51bGwpXG4gICAgfTtcbiAgfVxuXG4gIC8vIE5vIG5lZWQgdG8gdXBkYXRlIHRoaXMgaWYgaXQncyBhIG5ld2x5IGNyZWF0ZWQgZmlsdGVyXG4gIC8vIEZpcnN0IHdlIG1ha2Ugc3VyZSBhbGwgdGhlIGRhdGFJZHMgdGhhdCBmaWVsZHMgcmVmZXIgdG8gYXJlIHVwZGF0ZWRcbiAgaWYgKG9yaWdpbmFsSW5kZXggPj0gMCAmJiBkYXRhSWQpIHtcbiAgICAvLyBJZiB0aGUgZGF0YUlkIGlzIGFuIGFycmF5LCB3ZSBuZWVkIHRvIHVwZGF0ZSBlYWNoIG9uZSBpbmRpdmlkdWFsbHkgYXMgdGhleSBuZWVkIGEgY29ycmVjdCB2YWx1ZUluZGV4IHBhc3NlZFxuICAgIG5ld1N0YXRlID0gKEFycmF5LmlzQXJyYXkoZGF0YUlkKSA/IGRhdGFJZCA6IFtkYXRhSWRdKS5yZWR1Y2UoKGFjY3UsIGQsIGluZGV4KSA9PiB7XG4gICAgICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihhY2N1LCB7XG4gICAgICAgIGlkeDogZmlsdGVySW5kZXgsXG4gICAgICAgIHByb3A6ICdkYXRhSWQnLFxuICAgICAgICB2YWx1ZTogZCxcbiAgICAgICAgdmFsdWVJbmRleDogaW5kZXhcbiAgICAgIH0pO1xuICAgIH0sIG5ld1N0YXRlKTtcbiAgfVxuICAvLyBUaGVuIHdlIHVwZGF0ZSB0aGUgZmllbGRzXG4gIGlmIChmaWVsZCkge1xuICAgIC8vIElmIHRoZSBmaWVsZCBpcyBhbiBhcnJheSwgd2UgbmVlZCB0byB1cGRhdGUgZWFjaCBmaWVsZCBpbmRpdmlkdWFsbHkgYXMgdGhleSBuZWVkIGEgY29ycmVjdCB2YWx1ZUluZGV4IHBhc3NlZFxuICAgIG5ld1N0YXRlID0gKEFycmF5LmlzQXJyYXkoZmllbGQpID8gZmllbGQgOiBbZmllbGRdKS5yZWR1Y2UoKGFjY3UsIGYsIGluZGV4KSA9PiB7XG4gICAgICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihhY2N1LCB7XG4gICAgICAgIGlkeDogZmlsdGVySW5kZXgsXG4gICAgICAgIHByb3A6ICduYW1lJyxcbiAgICAgICAgdmFsdWU6IGYsXG4gICAgICAgIHZhbHVlSW5kZXg6IGluZGV4XG4gICAgICB9KTtcbiAgICB9LCBuZXdTdGF0ZSk7XG4gIH1cbiAgLy8gVGhlbiB3ZSB1cGRhdGUgdGhlIHZhbHVlIHNlcGFyYXRlbHlcbiAgaWYgKHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtpZHg6IGZpbHRlckluZGV4LCBwcm9wOiAndmFsdWUnLCB2YWx1ZX0pO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufTtcblxuLyoqXG4gKiBTZXQgbGF5ZXIgY29sb3IgcGFsZXR0ZSB1aSBzdGF0ZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGNvbnN0IGxheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge29sZExheWVyLCBwcm9wLCBuZXdDb25maWd9OiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJDb2xvclVJQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBvbGRWaXhDb25maWcgPSBvbGRMYXllci5jb25maWcudmlzQ29uZmlnW3Byb3BdO1xuICBjb25zdCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29sb3JVSShwcm9wLCBuZXdDb25maWcpO1xuICBjb25zdCBuZXdWaXNDb25maWcgPSBuZXdMYXllci5jb25maWcudmlzQ29uZmlnW3Byb3BdO1xuICBpZiAob2xkVml4Q29uZmlnICE9PSBuZXdWaXNDb25maWcpIHtcbiAgICByZXR1cm4gbGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyKHN0YXRlLCB7XG4gICAgICBvbGRMYXllcixcbiAgICAgIG5ld1Zpc0NvbmZpZzoge1xuICAgICAgICBbcHJvcF06IG5ld1Zpc0NvbmZpZ1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBzdGF0ZS5sYXllcnMubWFwKGwgPT4gKGwuaWQgPT09IG9sZExheWVyLmlkID8gbmV3TGF5ZXIgOiBsKSlcbiAgfTtcbn07XG5cbi8qKlxuICogU3RhcnQgYW5kIGVuZCBmaWx0ZXIgYW5pbWF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlRmlsdGVyQW5pbWF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVGaWx0ZXJBbmltYXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoKGYsIGkpID0+IChpID09PSBhY3Rpb24uaWR4ID8gey4uLmYsIGlzQW5pbWF0aW5nOiAhZi5pc0FuaW1hdGluZ30gOiBmKSlcbn0pO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNGaWx0ZXJBbmltYXRpb25Db25maWcoY29uZmlnOiBBbmltYXRpb25Db25maWcgfCBGaWx0ZXJBbmltYXRpb25Db25maWcpOiBib29sZWFuIHtcbiAgcmV0dXJuICdkYXRhSWQnIGluIGNvbmZpZyAmJiAnYW5pbWF0aW9uV2luZG93JyBpbiBjb25maWc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRBbmltYXRpb25Db25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldEFuaW1hdGlvbkNvbmZpZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2NvbmZpZ30gPSBhY3Rpb247XG4gIGlmIChpc0ZpbHRlckFuaW1hdGlvbkNvbmZpZyhjb25maWcpKSB7XG4gICAgLy8gRmluZCBmaWx0ZXIgdXNlZCBmb3IgYW5pbWF0aW9uXG4gICAgLy8gQXNzdW1pbmcgdGhlcmUncyBvbmx5IG9uZSBmaWx0ZXIgdXNlZCBmb3IgYW5pbWF0aW9uLCBzZWUgc2V0RmlsdGVyVmlld1VwZGF0ZXJcbiAgICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoZiA9PiAhaXNTaWRlRmlsdGVyKGYpKTtcbiAgICBpZiAoIWZpbHRlcikge1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cbiAgICBjb25zdCBuZXdGaWx0ZXIgPSB7Li4uZmlsdGVyLCAuLi5jb25maWd9O1xuICAgIHJldHVybiBhcHBseUZpbHRlckNvbmZpZ1VwZGF0ZXIoc3RhdGUsIGFwcGx5RmlsdGVyQ29uZmlnKGZpbHRlci5pZCwgbmV3RmlsdGVyKSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgLi4uY29uZmlnXG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVMYXllckFuaW1hdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVMYXllckFuaW1hdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBhbmltYXRpb25Db25maWc6IHtcbiAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgaXNBbmltYXRpbmc6ICFzdGF0ZS5hbmltYXRpb25Db25maWcuaXNBbmltYXRpbmdcbiAgfVxufSk7XG5cbi8qKlxuICogSGlkZSBhbmQgc2hvdyBsYXllciBhbmltYXRpb24gY29udHJvbFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUxheWVyQW5pbWF0aW9uQ29udHJvbFVwZGF0ZXIgPSAoc3RhdGU6IFZpc1N0YXRlKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICBoaWRlQ29udHJvbDogIXN0YXRlLmFuaW1hdGlvbkNvbmZpZy5oaWRlQ29udHJvbFxuICB9XG59KTtcblxuLyoqXG4gKiBDaGFuZ2UgZmlsdGVyIGFuaW1hdGlvbiBzcGVlZFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUZpbHRlckFuaW1hdGlvblNwZWVkVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBmaWx0ZXJzOiBzdGF0ZS5maWx0ZXJzLm1hcCgoZiwgaSkgPT4gKGkgPT09IGFjdGlvbi5pZHggPyB7Li4uZiwgc3BlZWQ6IGFjdGlvbi5zcGVlZH0gOiBmKSlcbn0pO1xuXG4vKipcbiAqIFVwZGF0ZSBhbmltYXRpb24gc3BlZWQgd2l0aCB0aGUgdmVydGljYWwgc3BlZWQgc2xpZGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICpcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUxheWVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtzcGVlZH06IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVMYXllckFuaW1hdGlvblNwZWVkVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgc3BlZWRcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIFNob3cgbGFyZ2VyIHRpbWUgZmlsdGVyIGF0IGJvdHRvbSBmb3IgdGltZSBwbGF5YmFjayAoYXBwbHkgdG8gdGltZSBmaWx0ZXIgb25seSlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRGaWx0ZXJWaWV3VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJWaWV3VXBkYXRlckFjdGlvblxuKSA9PiB7XG4gIGNvbnN0IHt2aWV3LCBpZHh9ID0gYWN0aW9uO1xuICBjb25zdCBzaG91bGRSZXNldE90aGVyRmlsdGVyc1ZpZXcgPSB2aWV3ID09PSBGSUxURVJfVklFV19UWVBFUy5lbmxhcmdlZDtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiBzdGF0ZS5maWx0ZXJzLm1hcCgoZiwgaSkgPT5cbiAgICAgIGkgPT09IGlkeFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLmYsXG4gICAgICAgICAgICB2aWV3XG4gICAgICAgICAgfVxuICAgICAgICA6IHNob3VsZFJlc2V0T3RoZXJGaWx0ZXJzVmlld1xuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLmYsXG4gICAgICAgICAgICB2aWV3OiBGSUxURVJfVklFV19UWVBFUy5zaWRlXG4gICAgICAgICAgfVxuICAgICAgICA6IGZcbiAgICApXG4gIH07XG59O1xuXG4vKipcbiAqIFRvZ2dsZXMgZmlsdGVyIGZlYXR1cmUgdmlzaWJpbGl0eVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUZpbHRlckZlYXR1cmVVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUZpbHRlckZlYXR1cmVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnNbYWN0aW9uLmlkeF07XG4gIGNvbnN0IGlzVmlzaWJsZSA9IGdldChmaWx0ZXIsIFsndmFsdWUnLCAncHJvcGVydGllcycsICdpc1Zpc2libGUnXSk7XG5cbiAgbGV0IG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihzdGF0ZSwge1xuICAgIGlkeDogYWN0aW9uLmlkeCxcbiAgICBwcm9wOiAnZW5hYmxlZCcsXG4gICAgdmFsdWU6ICFpc1Zpc2libGVcbiAgfSk7XG5cbiAgbmV3U3RhdGUgPSBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWR4OiBhY3Rpb24uaWR4LFxuICAgIHByb3A6ICd2YWx1ZScsXG4gICAgdmFsdWU6IGZlYXR1cmVUb0ZpbHRlclZhbHVlKGZpbHRlci52YWx1ZSwgZmlsdGVyLmlkLCB7XG4gICAgICBpc1Zpc2libGU6ICFpc1Zpc2libGVcbiAgICB9KVxuICB9KTtcblxuICByZXR1cm4gbmV3U3RhdGU7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUZpbHRlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlRmlsdGVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7aWR4fSA9IGFjdGlvbjtcbiAgY29uc3Qge2RhdGFJZCwgaWR9ID0gc3RhdGUuZmlsdGVyc1tpZHhdO1xuXG4gIGNvbnN0IG5ld0ZpbHRlcnMgPSBbXG4gICAgLi4uc3RhdGUuZmlsdGVycy5zbGljZSgwLCBpZHgpLFxuICAgIC4uLnN0YXRlLmZpbHRlcnMuc2xpY2UoaWR4ICsgMSwgc3RhdGUuZmlsdGVycy5sZW5ndGgpXG4gIF07XG5cbiAgY29uc3QgZmlsdGVyZWREYXRhc2V0cyA9IGFwcGx5RmlsdGVyc1RvRGF0YXNldHMoZGF0YUlkLCBzdGF0ZS5kYXRhc2V0cywgbmV3RmlsdGVycywgc3RhdGUubGF5ZXJzKTtcbiAgY29uc3QgbmV3RWRpdG9yID1cbiAgICBnZXRGaWx0ZXJJZEluRmVhdHVyZShzdGF0ZS5lZGl0b3Iuc2VsZWN0ZWRGZWF0dXJlKSA9PT0gaWRcbiAgICAgID8ge1xuICAgICAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgICAgICBzZWxlY3RlZEZlYXR1cmU6IG51bGxcbiAgICAgICAgfVxuICAgICAgOiBzdGF0ZS5lZGl0b3I7XG5cbiAgbGV0IG5ld1N0YXRlID0gc2V0KFsnZmlsdGVycyddLCBuZXdGaWx0ZXJzLCBzdGF0ZSk7XG4gIG5ld1N0YXRlID0gc2V0KFsnZGF0YXNldHMnXSwgZmlsdGVyZWREYXRhc2V0cywgbmV3U3RhdGUpO1xuICBuZXdTdGF0ZSA9IHNldChbJ2VkaXRvciddLCBuZXdFZGl0b3IsIG5ld1N0YXRlKTtcblxuICByZXR1cm4gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG5ld1N0YXRlLCBkYXRhSWQsIHVuZGVmaW5lZCk7XG59O1xuXG4vKipcbiAqIEFkZCBhIG5ldyBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZExheWVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRMYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgbGV0IG5ld0xheWVyO1xuICBsZXQgbmV3TGF5ZXJEYXRhO1xuICBpZiAoYWN0aW9uLmNvbmZpZykge1xuICAgIG5ld0xheWVyID0gY3JlYXRlTGF5ZXJGcm9tQ29uZmlnKHN0YXRlLCBhY3Rpb24uY29uZmlnKTtcbiAgICBpZiAoIW5ld0xheWVyKSB7XG4gICAgICBDb25zb2xlLndhcm4oXG4gICAgICAgICdGYWlsZWQgdG8gY3JlYXRlIGxheWVyIGZyb20gY29uZmlnLCBpdCB1c3VhbGx5IG1lYW5zIHRoZSBjb25maWcgaXMgbm90IGJlIGluIGNvcnJlY3QgZm9ybWF0JyxcbiAgICAgICAgYWN0aW9uLmNvbmZpZ1xuICAgICAgKTtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHN0YXRlKTtcbiAgICBuZXdMYXllciA9IHJlc3VsdC5sYXllcjtcbiAgICBuZXdMYXllckRhdGEgPSByZXN1bHQubGF5ZXJEYXRhO1xuICB9IGVsc2Uge1xuICAgIC8vIGNyZWF0ZSBhbiBlbXB0eSBsYXllciB3aXRoIGEgc3BlY2lmaWMgZGF0YXNldCBvciBhIGRlZmF1bHQgb25lXG4gICAgY29uc3QgZGVmYXVsdERhdGFzZXQgPSBhY3Rpb24uZGF0YXNldElkID8/IE9iamVjdC5rZXlzKHN0YXRlLmRhdGFzZXRzKVswXTtcbiAgICBuZXdMYXllciA9IG5ldyBMYXllcih7XG4gICAgICBpc1Zpc2libGU6IHRydWUsXG4gICAgICBpc0NvbmZpZ0FjdGl2ZTogdHJ1ZSxcbiAgICAgIGRhdGFJZDogZGVmYXVsdERhdGFzZXRcbiAgICB9KTtcbiAgICBuZXdMYXllckRhdGEgPSB7fTtcbiAgfVxuXG4gIGxldCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IFsuLi5zdGF0ZS5sYXllcnMsIG5ld0xheWVyXSxcbiAgICBsYXllckRhdGE6IFsuLi5zdGF0ZS5sYXllckRhdGEsIG5ld0xheWVyRGF0YV0sXG4gICAgLy8gYWRkIG5ldyBsYXllciBhdCB0aGUgdG9wXG4gICAgbGF5ZXJPcmRlcjogW25ld0xheWVyLmlkLCAuLi5zdGF0ZS5sYXllck9yZGVyXSxcbiAgICBzcGxpdE1hcHM6IGFkZE5ld0xheWVyc1RvU3BsaXRNYXAoc3RhdGUuc3BsaXRNYXBzLCBuZXdMYXllcilcbiAgfTtcblxuICBpZiAobmV3TGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkKSB7XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4obmV3U3RhdGUpO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufTtcblxuLyoqXG4gKiByZW1vdmUgbGF5ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVMYXllclVwZGF0ZXI8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIHtpZH06IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVMYXllclVwZGF0ZXJBY3Rpb25cbik6IFQge1xuICBjb25zdCBpZHggPSBOdW1iZXIuaXNGaW5pdGUoaWQpXG4gICAgPyAvLyBzdXBwb3J0IG9sZGVyIEFQSSwgcmVtb3ZlIGxheWVyIGJ5IGlkeFxuICAgICAgTnVtYmVyKGlkKVxuICAgIDogc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA8IDAgfHwgaWR4ID49IHN0YXRlLmxheWVycy5sZW5ndGgpIHtcbiAgICAvLyBpbnZhbGlkIGluZGV4XG4gICAgQ29uc29sZS53YXJuKGBjYW4gbm90IHJlbW92ZSBsYXllciB3aXRoIGludmFsaWQgaWR8aWR4ICR7aWR9YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge2xheWVycywgbGF5ZXJEYXRhLCBsYXllck9yZGVyLCBjbGlja2VkLCBob3ZlckluZm99ID0gc3RhdGU7XG4gIGNvbnN0IGxheWVyVG9SZW1vdmUgPSBsYXllcnNbaWR4XTtcbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBmaWx0ZXJPdXRCeUlkKGxheWVyVG9SZW1vdmUuaWQpKGxheWVycyksXG4gICAgbGF5ZXJEYXRhOiByZW1vdmVFbGVtZW50QXRJbmRleChpZHgpKGxheWVyRGF0YSksXG4gICAgbGF5ZXJPcmRlcjogcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKGxheWVyT3JkZXIsIGxheWVyVG9SZW1vdmUuaWQpLFxuICAgIGNsaWNrZWQ6IGxheWVyVG9SZW1vdmUuaXNMYXllckhvdmVyZWQoY2xpY2tlZCkgPyB1bmRlZmluZWQgOiBjbGlja2VkLFxuICAgIGhvdmVySW5mbzogbGF5ZXJUb1JlbW92ZS5pc0xheWVySG92ZXJlZChob3ZlckluZm8pID8gdW5kZWZpbmVkIDogaG92ZXJJbmZvLFxuICAgIHNwbGl0TWFwczogcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzKHN0YXRlLnNwbGl0TWFwcywgbGF5ZXJUb1JlbW92ZSlcbiAgICAvLyBUT0RPOiB1cGRhdGUgZmlsdGVycywgY3JlYXRlIGhlbHBlciB0byByZW1vdmUgbGF5ZXIgZm9ybSBmaWx0ZXIgKHJlbW92ZSBsYXllcmlkIGFuZCBkYXRhaWQpIGlmIG1hcHBlZFxuICB9O1xuXG4gIHJldHVybiB1cGRhdGVBbmltYXRpb25Eb21haW4obmV3U3RhdGUpO1xufVxuXG4vKipcbiAqIFJlb3JkZXIgbGF5ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW9yZGVyTGF5ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtvcmRlcn06IFZpc1N0YXRlQWN0aW9ucy5SZW9yZGVyTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbGF5ZXJPcmRlcjogb3JkZXJcbn0pO1xuXG4vKipcbiAqIEFkZCBhIG5ldyBsYXllciBncm91cFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZExheWVyR3JvdXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZExheWVyR3JvdXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGxheWVyR3JvdXAgPSBnZXROZXdMYXllckdyb3VwKGFjdGlvbik7XG4gIGxldCBuZXdMYXllck9yZGVyID0gWy4uLnN0YXRlLmxheWVyT3JkZXJdO1xuXG4gIGlmIChhY3Rpb24ubGF5ZXJPcmRlcikge1xuICAgIGFjdGlvbi5sYXllck9yZGVyLmZvckVhY2gobGF5ZXJJZCA9PiB7XG4gICAgICBuZXdMYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKG5ld0xheWVyT3JkZXIsIGxheWVySWQgYXMgc3RyaW5nKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJPcmRlcjogYWRkTGF5ZXJPckdyb3VwVG9MYXllck9yZGVyKG5ld0xheWVyT3JkZXIsIGxheWVyR3JvdXApXG4gIH07XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIGxheWVyIGdyb3VwIGFuZCBhbGwgbGF5ZXJzIHdpdGhpbiBpdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUxheWVyR3JvdXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUxheWVyR3JvdXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtpZH0gPSBhY3Rpb247XG4gIGNvbnN0IGxheWVyR3JvdXBUb1JlbW92ZSA9IGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBpZCk7XG4gIGlmICghbGF5ZXJHcm91cFRvUmVtb3ZlKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbGF5ZXJJZHNUb1JlbW92ZSA9IGdldEZsYXRMYXllck9yZGVyKGxheWVyR3JvdXBUb1JlbW92ZS5sYXllck9yZGVyKTtcbiAgbGV0IG5ld1N0YXRlID0gey4uLnN0YXRlfTtcblxuICBsYXllcklkc1RvUmVtb3ZlLmZvckVhY2gobGF5ZXJJZCA9PiB7XG4gICAgY29uc3QgaWR4ID0gbmV3U3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGxheWVySWQpO1xuICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgbmV3U3RhdGUgPSByZW1vdmVMYXllclVwZGF0ZXIobmV3U3RhdGUsIHtpZDogbGF5ZXJJZH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihuZXdTdGF0ZS5sYXllck9yZGVyLCBsYXllckdyb3VwVG9SZW1vdmUpO1xuICByZXR1cm4ge1xuICAgIC4uLm5ld1N0YXRlLFxuICAgIGxheWVyT3JkZXI6IG5ld0xheWVyT3JkZXJcbiAgfTtcbn07XG5cbi8qKlxuICogVXBkYXRlIGEgbGF5ZXIgZ3JvdXAgKGxhYmVsLCB2aXNpYmlsaXR5LCBsYXllciBtZW1iZXJzaGlwKVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUxheWVyR3JvdXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUxheWVyR3JvdXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtpZCwgb3B0aW9uc30gPSBhY3Rpb247XG4gIGNvbnN0IGxheWVyR3JvdXAgPSBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgaWQpO1xuICBpZiAoIWxheWVyR3JvdXApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgbmV3U3RhdGUgPSB7Li4uc3RhdGV9O1xuXG4gIGlmIChvcHRpb25zLmxheWVyT3JkZXIpIHtcbiAgICBuZXdTdGF0ZS5sYXllck9yZGVyID0gWy4uLmxheWVyR3JvdXAubGF5ZXJPcmRlciwgLi4ubmV3U3RhdGUubGF5ZXJPcmRlcl07XG4gICAgb3B0aW9ucy5sYXllck9yZGVyLmZvckVhY2gobGF5ZXJJZCA9PiB7XG4gICAgICBuZXdTdGF0ZS5sYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKG5ld1N0YXRlLmxheWVyT3JkZXIsIGxheWVySWQgYXMgc3RyaW5nKTtcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IG5ld0xheWVyR3JvdXAgPSB7XG4gICAgLi4ubGF5ZXJHcm91cCxcbiAgICAuLi5vcHRpb25zXG4gIH07XG5cbiAgaWYgKG5ld0xheWVyR3JvdXAuaXNWaXNpYmxlICE9PSBsYXllckdyb3VwLmlzVmlzaWJsZSkge1xuICAgIGNvbnN0IGxheWVySWRzID0gZ2V0RmxhdExheWVyT3JkZXIobmV3TGF5ZXJHcm91cC5sYXllck9yZGVyKTtcbiAgICBuZXdTdGF0ZSA9IG5ld1N0YXRlLmxheWVycy5yZWR1Y2UoKGFjYywgbGF5ZXIpID0+IHtcbiAgICAgIGlmIChsYXllcklkcy5pbmNsdWRlcyhsYXllci5pZCkpIHtcbiAgICAgICAgcmV0dXJuIGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihhY2MsIHtcbiAgICAgICAgICBvbGRMYXllcjogbGF5ZXIsXG4gICAgICAgICAgbmV3Q29uZmlnOiB7aXNWaXNpYmxlOiBuZXdMYXllckdyb3VwLmlzVmlzaWJsZX1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIG5ld1N0YXRlKTtcbiAgfVxuXG4gIGNvbnN0IG5ld0xheWVyT3JkZXIgPSB1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyKG5ld1N0YXRlLmxheWVyT3JkZXIsIG5ld0xheWVyR3JvdXApO1xuICByZXR1cm4ge1xuICAgIC4uLm5ld1N0YXRlLFxuICAgIGxheWVyT3JkZXI6IG5ld0xheWVyT3JkZXJcbiAgfTtcbn07XG5cbi8qKlxuICogQWRkIGEgbGF5ZXIgdG8gYSBsYXllciBncm91cFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZExheWVyVG9MYXllckdyb3VwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRMYXllclRvTGF5ZXJHcm91cFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2xheWVyR3JvdXBJZCwgbGF5ZXJJZH0gPSBhY3Rpb247XG4gIGNvbnN0IGxheWVyR3JvdXAgPSBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgbGF5ZXJHcm91cElkKTtcbiAgY29uc3QgbGF5ZXIgPSBzdGF0ZS5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IGxheWVySWQpO1xuICBpZiAoIWxheWVyR3JvdXAgfHwgIWxheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgaWYgKGxheWVyR3JvdXAubGF5ZXJPcmRlci5maW5kKGVudHJ5ID0+IGVudHJ5ID09PSBsYXllcklkKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0dyb3VwTGF5ZXJPcmRlciA9IGFkZExheWVyT3JHcm91cFRvTGF5ZXJPcmRlcihsYXllckdyb3VwLmxheWVyT3JkZXIsIGxheWVySWQpO1xuICByZXR1cm4gdXBkYXRlTGF5ZXJHcm91cFVwZGF0ZXIoc3RhdGUsIHtcbiAgICBpZDogbGF5ZXJHcm91cElkLFxuICAgIG9wdGlvbnM6IHtsYXllck9yZGVyOiBuZXdHcm91cExheWVyT3JkZXJ9XG4gIH0pO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSBsYXllciBmcm9tIGEgbGF5ZXIgZ3JvdXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVMYXllckZyb21MYXllckdyb3VwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVMYXllckZyb21MYXllckdyb3VwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7bGF5ZXJHcm91cElkLCBsYXllcklkfSA9IGFjdGlvbjtcbiAgY29uc3QgbGF5ZXJHcm91cCA9IGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBsYXllckdyb3VwSWQpO1xuICBpZiAoIWxheWVyR3JvdXApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdMYXllckdyb3VwT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIobGF5ZXJHcm91cC5sYXllck9yZGVyLCBsYXllcklkKTtcbiAgcmV0dXJuIHVwZGF0ZUxheWVyR3JvdXBVcGRhdGVyKHN0YXRlLCB7XG4gICAgaWQ6IGxheWVyR3JvdXBJZCxcbiAgICBvcHRpb25zOiB7bGF5ZXJPcmRlcjogbmV3TGF5ZXJHcm91cE9yZGVyfVxuICB9KTtcbn07XG5cbi8qKlxuICogU3dhcCBsYXllciBvcmRlciBlbnRyaWVzIGJldHdlZW4gcm9vdCBhbmQgZ3JvdXBzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZXhwb3J0IGNvbnN0IHN3YXBMYXllck9yZGVyRW50cmllc1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU3dhcExheWVyT3JkZXJFbnRyaWVzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7b3JpZ2luTGF5ZXJJZCwgZGVzdGluYXRpb25MYXllcklkLCBvcmlnaW5MYXllckdyb3VwSWQsIGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkfSA9IGFjdGlvbjtcblxuICBpZiAoIW9yaWdpbkxheWVyR3JvdXBJZCAmJiAhZGVzdGluYXRpb25MYXllckdyb3VwSWQpIHtcbiAgICBjb25zdCBvcmlnaW5JbmRleCA9IHN0YXRlLmxheWVyT3JkZXIuZmluZEluZGV4KGVudHJ5ID0+XG4gICAgICB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnID8gZW50cnkgPT09IG9yaWdpbkxheWVySWQgOiBlbnRyeS5pZCA9PT0gb3JpZ2luTGF5ZXJJZFxuICAgICk7XG4gICAgaWYgKGRlc3RpbmF0aW9uTGF5ZXJJZCAmJiBvcmlnaW5JbmRleCAhPT0gLTEpIHtcbiAgICAgIGNvbnN0IGRlc3RpbmF0aW9uSW5kZXggPSBzdGF0ZS5sYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PlxuICAgICAgICB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnID8gZW50cnkgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZCA6IGVudHJ5LmlkID09PSBkZXN0aW5hdGlvbkxheWVySWRcbiAgICAgICk7XG4gICAgICBpZiAoZGVzdGluYXRpb25JbmRleCAhPT0gLTEpIHtcbiAgICAgICAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IGFycmF5TW92ZShzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5JbmRleCwgZGVzdGluYXRpb25JbmRleCk7XG4gICAgICAgIHJldHVybiB7Li4uc3RhdGUsIGxheWVyT3JkZXI6IG5ld0xheWVyT3JkZXJ9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChvcmlnaW5MYXllckdyb3VwSWQgJiYgIWRlc3RpbmF0aW9uTGF5ZXJHcm91cElkKSB7XG4gICAgbGV0IG5ld0xheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luTGF5ZXJJZCk7XG4gICAgaWYgKGRlc3RpbmF0aW9uTGF5ZXJJZCkge1xuICAgICAgY29uc3QgZGVzdGluYXRpb25JbmRleCA9IG5ld0xheWVyT3JkZXIuZmluZEluZGV4KGVudHJ5ID0+XG4gICAgICAgIHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycgPyBlbnRyeSA9PT0gZGVzdGluYXRpb25MYXllcklkIDogZmFsc2VcbiAgICAgICk7XG4gICAgICBuZXdMYXllck9yZGVyLnNwbGljZShkZXN0aW5hdGlvbkluZGV4ID09PSAtMSA/IDAgOiBkZXN0aW5hdGlvbkluZGV4LCAwLCBvcmlnaW5MYXllcklkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3TGF5ZXJPcmRlciA9IFsuLi5uZXdMYXllck9yZGVyLCBvcmlnaW5MYXllcklkXTtcbiAgICB9XG4gICAgcmV0dXJuIHsuLi5zdGF0ZSwgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlcn07XG4gIH1cblxuICBpZiAob3JpZ2luTGF5ZXJHcm91cElkICYmIGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkKSB7XG4gICAgaWYgKG9yaWdpbkxheWVyR3JvdXBJZCA9PT0gZGVzdGluYXRpb25MYXllckdyb3VwSWQpIHtcbiAgICAgIGNvbnN0IGxheWVyR3JvdXAgPSBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luTGF5ZXJHcm91cElkKTtcbiAgICAgIGlmICghbGF5ZXJHcm91cCkgcmV0dXJuIHN0YXRlO1xuICAgICAgY29uc3Qgb3JpZ2luSW5kZXggPSBsYXllckdyb3VwLmxheWVyT3JkZXIuZmluZEluZGV4KGVudHJ5ID0+XG4gICAgICAgIHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycgPyBlbnRyeSA9PT0gb3JpZ2luTGF5ZXJJZCA6IGVudHJ5LmlkID09PSBvcmlnaW5MYXllcklkXG4gICAgICApO1xuICAgICAgaWYgKG9yaWdpbkluZGV4ID09PSAtMSkgcmV0dXJuIHN0YXRlO1xuICAgICAgaWYgKGRlc3RpbmF0aW9uTGF5ZXJJZCkge1xuICAgICAgICBjb25zdCBkZXN0SW5kZXggPSBsYXllckdyb3VwLmxheWVyT3JkZXIuZmluZEluZGV4KGVudHJ5ID0+XG4gICAgICAgICAgdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyA/IGVudHJ5ID09PSBkZXN0aW5hdGlvbkxheWVySWQgOiBlbnRyeS5pZCA9PT0gZGVzdGluYXRpb25MYXllcklkXG4gICAgICAgICk7XG4gICAgICAgIGlmIChkZXN0SW5kZXggPT09IC0xKSByZXR1cm4gc3RhdGU7XG4gICAgICAgIGNvbnN0IG5ld0dyb3VwTGF5ZXJPcmRlciA9IGFycmF5TW92ZShsYXllckdyb3VwLmxheWVyT3JkZXIsIG9yaWdpbkluZGV4LCBkZXN0SW5kZXgpO1xuICAgICAgICBjb25zdCBuZXdMYXllck9yZGVyID0gdXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCB7XG4gICAgICAgICAgLi4ubGF5ZXJHcm91cCxcbiAgICAgICAgICBsYXllck9yZGVyOiBuZXdHcm91cExheWVyT3JkZXJcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7Li4uc3RhdGUsIGxheWVyT3JkZXI6IG5ld0xheWVyT3JkZXJ9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cblxuICAgIC8vIENyb3NzLWdyb3VwIG1vdmU6IHJlbW92ZSBmcm9tIG9yaWdpbiwgdGhlbiBhZGQgdG8gZGVzdGluYXRpb25cbiAgICBjb25zdCBsYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbkxheWVySWQpO1xuICAgIGxldCBuZXdTdGF0ZSA9IGFkZExheWVyVG9MYXllckdyb3VwVXBkYXRlcihcbiAgICAgIHsuLi5zdGF0ZSwgbGF5ZXJPcmRlcn0sXG4gICAgICB7bGF5ZXJJZDogb3JpZ2luTGF5ZXJJZCwgbGF5ZXJHcm91cElkOiBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZH1cbiAgICApO1xuXG4gICAgaWYgKGRlc3RpbmF0aW9uTGF5ZXJJZCkge1xuICAgICAgY29uc3QgbGF5ZXJHcm91cCA9IGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihuZXdTdGF0ZS5sYXllck9yZGVyLCBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCk7XG4gICAgICBpZiAoIWxheWVyR3JvdXApIHJldHVybiBzdGF0ZTtcbiAgICAgIGNvbnN0IG9yaWdpbkluZGV4ID0gbGF5ZXJHcm91cC5sYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PiBlbnRyeSA9PT0gb3JpZ2luTGF5ZXJJZCk7XG4gICAgICBjb25zdCBkZXN0SW5kZXggPSBsYXllckdyb3VwLmxheWVyT3JkZXIuZmluZEluZGV4KGVudHJ5ID0+IGVudHJ5ID09PSBkZXN0aW5hdGlvbkxheWVySWQpO1xuICAgICAgaWYgKG9yaWdpbkluZGV4ICE9PSAtMSAmJiBkZXN0SW5kZXggIT09IC0xKSB7XG4gICAgICAgIGNvbnN0IG5ld0dyb3VwTGF5ZXJPcmRlciA9IGFycmF5TW92ZShsYXllckdyb3VwLmxheWVyT3JkZXIsIG9yaWdpbkluZGV4LCBkZXN0SW5kZXgpO1xuICAgICAgICBuZXdTdGF0ZSA9IHtcbiAgICAgICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgICAgICBsYXllck9yZGVyOiB1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyKG5ld1N0YXRlLmxheWVyT3JkZXIsIHtcbiAgICAgICAgICAgIC4uLmxheWVyR3JvdXAsXG4gICAgICAgICAgICBsYXllck9yZGVyOiBuZXdHcm91cExheWVyT3JkZXJcbiAgICAgICAgICB9KVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3U3RhdGU7XG4gIH1cblxuICBpZiAoIW9yaWdpbkxheWVyR3JvdXBJZCAmJiBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCkge1xuICAgIGNvbnN0IGxheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luTGF5ZXJJZCk7XG4gICAgcmV0dXJuIGFkZExheWVyVG9MYXllckdyb3VwVXBkYXRlcihcbiAgICAgIHsuLi5zdGF0ZSwgbGF5ZXJPcmRlcn0sXG4gICAgICB7bGF5ZXJJZDogb3JpZ2luTGF5ZXJJZCwgbGF5ZXJHcm91cElkOiBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZH1cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufTtcblxuLyoqXG4gKiBkdXBsaWNhdGUgbGF5ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBkdXBsaWNhdGVMYXllclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkfTogVmlzU3RhdGVBY3Rpb25zLkR1cGxpY2F0ZUxheWVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBpZHggPSBOdW1iZXIuaXNGaW5pdGUoaWQpXG4gICAgPyAvLyBzdXBwb3J0IG9sZGVyIEFQSSwgcmVtb3ZlIGxheWVyIGJ5IGlkeFxuICAgICAgTnVtYmVyKGlkKVxuICAgIDogc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA8IDAgfHwgIXN0YXRlLmxheWVyc1tpZHhdKSB7XG4gICAgQ29uc29sZS53YXJuKGBsYXllciAke2lkeH0gbm90IGZvdW5kIGluIGxheWVyT3JkZXJgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7bGF5ZXJzfSA9IHN0YXRlO1xuICBjb25zdCBvcmlnaW5hbCA9IGxheWVyc1tpZHhdO1xuXG4gIGNvbnN0IG9yaWdpbmFsTGF5ZXJPcmRlcklkeCA9IGdldEluZGV4RnJvbUxheWVyRW50cnlJZChzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5hbC5pZCk7XG4gIGxldCBuZXdMYWJlbCA9IGBDb3B5IG9mICR7b3JpZ2luYWwuY29uZmlnLmxhYmVsfWA7XG4gIGxldCBwb3N0Zml4ID0gMDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvb3AtZnVuY1xuICB3aGlsZSAobGF5ZXJzLmZpbmQobCA9PiBsLmNvbmZpZy5sYWJlbCA9PT0gbmV3TGFiZWwpKSB7XG4gICAgbmV3TGFiZWwgPSBgQ29weSBvZiAke29yaWdpbmFsLmNvbmZpZy5sYWJlbH0gJHsrK3Bvc3RmaXh9YDtcbiAgfVxuXG4gIC8vIGNvbGxlY3QgbGF5ZXIgY29uZmlnIGZyb20gb3JpZ2luYWxcbiAgY29uc3QgbG9hZGVkTGF5ZXIgPSBzZXJpYWxpemVMYXllcihvcmlnaW5hbCwgc3RhdGUuc2NoZW1hKTtcblxuICAvLyBhc3NpZ24gbmV3IGlkIGFuZCBsYWJlbCB0byBjb3BpZWQgbGF5ZXJcbiAgaWYgKCFsb2FkZWRMYXllcj8uY29uZmlnKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxvYWRlZExheWVyLmNvbmZpZy5sYWJlbCA9IG5ld0xhYmVsO1xuICBsb2FkZWRMYXllci5pZCA9IGdlbmVyYXRlSGFzaElkKExBWUVSX0lEX0xFTkdUSCk7XG5cbiAgLy8gYWRkIGxheWVyIHRvIHN0YXRlXG4gIGxldCBuZXh0U3RhdGUgPSBhZGRMYXllclVwZGF0ZXIoc3RhdGUsIHtjb25maWc6IGxvYWRlZExheWVyfSk7XG4gIC8vIHJldHJpZXZlIG5ld2x5IGNyZWF0ZWQgbGF5ZXJcbiAgY29uc3QgbmV3TGF5ZXIgPSBuZXh0U3RhdGUubGF5ZXJzW25leHRTdGF0ZS5sYXllcnMubGVuZ3RoIC0gMV07XG5cbiAgLy8gQ2hlY2sgaWYgdGhlIG9yaWdpbmFsIGxheWVyIGlzIGluc2lkZSBhIGdyb3VwXG4gIGNvbnN0IHBhcmVudEdyb3VwID0gZmluZFBhcmVudEdyb3VwRm9yTGF5ZXIoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luYWwuaWQpO1xuXG4gIGlmIChwYXJlbnRHcm91cCkge1xuICAgIC8vIExheWVyIGlzIGluc2lkZSBhIGdyb3VwIC0gcmVtb3ZlIHRoZSBwcmVwZW5kZWQgaWQgZnJvbSByb290IGFuZCBpbnNlcnQgaW50byB0aGUgZ3JvdXBcbiAgICBjb25zdCBsYXllck9yZGVyV2l0aG91dFByZXBlbmRlZCA9IG5leHRTdGF0ZS5sYXllck9yZGVyLnNsaWNlKDEpO1xuICAgIGNvbnN0IGlkeEluR3JvdXAgPSBwYXJlbnRHcm91cC5sYXllck9yZGVyLmZpbmRJbmRleChlID0+IGUgPT09IG9yaWdpbmFsLmlkKTtcbiAgICBjb25zdCBuZXdHcm91cExheWVyT3JkZXIgPSBhcnJheUluc2VydChwYXJlbnRHcm91cC5sYXllck9yZGVyLCBpZHhJbkdyb3VwLCBuZXdMYXllci5pZCk7XG4gICAgY29uc3QgdXBkYXRlZEdyb3VwID0gey4uLnBhcmVudEdyb3VwLCBsYXllck9yZGVyOiBuZXdHcm91cExheWVyT3JkZXJ9O1xuICAgIGNvbnN0IG5ld0xheWVyT3JkZXIgPSB1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyKGxheWVyT3JkZXJXaXRob3V0UHJlcGVuZGVkLCB1cGRhdGVkR3JvdXApO1xuICAgIG5leHRTdGF0ZSA9IHJlb3JkZXJMYXllclVwZGF0ZXIobmV4dFN0YXRlLCB7b3JkZXI6IG5ld0xheWVyT3JkZXJ9KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBMYXllciBpcyBhdCByb290IGxldmVsIC0gdXNlIG9yaWdpbmFsIGluZGV4LWJhc2VkIGluc2VydGlvblxuICAgIGNvbnN0IG5ld0xheWVyT3JkZXIgPSBhcnJheUluc2VydChcbiAgICAgIG5leHRTdGF0ZS5sYXllck9yZGVyLnNsaWNlKDEsIG5leHRTdGF0ZS5sYXllck9yZGVyLmxlbmd0aCksXG4gICAgICBvcmlnaW5hbExheWVyT3JkZXJJZHgsXG4gICAgICBuZXdMYXllci5pZFxuICAgICk7XG4gICAgbmV4dFN0YXRlID0gcmVvcmRlckxheWVyVXBkYXRlcihuZXh0U3RhdGUsIHtvcmRlcjogbmV3TGF5ZXJPcmRlcn0pO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXh0U3RhdGUpO1xufTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgZWZmZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkRWZmZWN0VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRFZmZlY3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmIChcbiAgICBhY3Rpb24uY29uZmlnPy50eXBlID09PSBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVC50eXBlICYmXG4gICAgc3RhdGUuZWZmZWN0cy5zb21lKGVmZmVjdCA9PiBlZmZlY3QudHlwZSA9PT0gTElHSFRfQU5EX1NIQURPV19FRkZFQ1QudHlwZSlcbiAgKSB7XG4gICAgQ29uc29sZS53YXJuKGBDYW4ndCBhZGQgbW9yZSB0aGFuIG9uZSAke0xJR0hUX0FORF9TSEFET1dfRUZGRUNULm5hbWV9IGVmZmVjdGApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGlmIChcbiAgICBhY3Rpb24uY29uZmlnPy50eXBlID09PSBESVNUQU5DRV9GT0dfVFlQRSAmJlxuICAgIHN0YXRlLmVmZmVjdHMuc29tZShcbiAgICAgIGVmZmVjdCA9PiBlZmZlY3QudHlwZSA9PT0gRElTVEFOQ0VfRk9HX1RZUEUgfHwgZWZmZWN0LnR5cGUgPT09IFNVUkZBQ0VfRk9HX1RZUEVcbiAgICApXG4gICkge1xuICAgIENvbnNvbGUud2FybihcIkNhbid0IGFkZCBtb3JlIHRoYW4gb25lIGZvZyBlZmZlY3RcIik7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgaWYgKFxuICAgIGFjdGlvbi5jb25maWc/LnR5cGUgPT09IFNVUkZBQ0VfRk9HX1RZUEUgJiZcbiAgICBzdGF0ZS5lZmZlY3RzLnNvbWUoXG4gICAgICBlZmZlY3QgPT4gZWZmZWN0LnR5cGUgPT09IFNVUkZBQ0VfRk9HX1RZUEUgfHwgZWZmZWN0LnR5cGUgPT09IERJU1RBTkNFX0ZPR19UWVBFXG4gICAgKVxuICApIHtcbiAgICBDb25zb2xlLndhcm4oXCJDYW4ndCBhZGQgbW9yZSB0aGFuIG9uZSBmb2cgZWZmZWN0XCIpO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0VmZmVjdCA9IGNyZWF0ZUVmZmVjdChhY3Rpb24uY29uZmlnKTtcblxuICAvLyBjb2xsYXBzZSBjb25maWd1cmF0b3JzIGZvciBvdGhlciBlZmZlY3RzXG4gIHN0YXRlLmVmZmVjdHMuZm9yRWFjaChlZmZlY3QgPT4gZWZmZWN0LnNldFByb3BzKHtpc0NvbmZpZ0FjdGl2ZTogZmFsc2V9KSk7XG5cbiAgY29uc3QgZWZmZWN0cyA9IFsuLi5zdGF0ZS5lZmZlY3RzLCBuZXdFZmZlY3RdO1xuICBjb25zdCBlZmZlY3RPcmRlciA9IGZpeEVmZmVjdE9yZGVyKGVmZmVjdHMsIFtuZXdFZmZlY3QuaWQsIC4uLnN0YXRlLmVmZmVjdE9yZGVyXSk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZmZlY3RzLFxuICAgIGVmZmVjdE9yZGVyXG4gIH07XG59O1xuXG4vKipcbiAqIHJlbW92ZSBlZmZlY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVFZmZlY3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZH06IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVFZmZlY3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmVmZmVjdHMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCB8fCBpZHggPj0gc3RhdGUuZWZmZWN0cy5sZW5ndGgpIHtcbiAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgcmVtb3ZlIGVmZmVjdCB3aXRoIGludmFsaWQgaWQgJHtpZH1gKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7ZWZmZWN0cywgZWZmZWN0T3JkZXJ9ID0gc3RhdGU7XG4gIGNvbnN0IGVmZmVjdFRvUmVtb3ZlID0gZWZmZWN0c1tpZHhdO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgZml4ZWQgaW4gdHNcbiAgICBlZmZlY3RzOiBmaWx0ZXJPdXRCeUlkKGVmZmVjdFRvUmVtb3ZlLmlkKShlZmZlY3RzKSxcbiAgICBlZmZlY3RPcmRlcjogZWZmZWN0T3JkZXIuZmlsdGVyKGVmZmVjdElkID0+IGVmZmVjdElkICE9PSBlZmZlY3RUb1JlbW92ZS5pZClcbiAgfTtcbn07XG5cbi8qKlxuICogUmVvcmRlciBlZmZlY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW9yZGVyRWZmZWN0VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7b3JkZXJ9OiBWaXNTdGF0ZUFjdGlvbnMuUmVvcmRlckVmZmVjdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBlZmZlY3RPcmRlcjogZml4RWZmZWN0T3JkZXIoc3RhdGUuZWZmZWN0cywgWy4uLm9yZGVyXSlcbn0pO1xuXG4vKipcbiAqIFVwZGF0ZSBlZmZlY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVFZmZlY3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZCwgcHJvcHN9OiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRWZmZWN0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBpZHggPSBzdGF0ZS5lZmZlY3RzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA8IDAgfHwgaWR4ID49IHN0YXRlLmVmZmVjdHMubGVuZ3RoKSB7XG4gICAgQ29uc29sZS53YXJuKGBjYW4gbm90IHVwZGF0ZSBlZmZlY3Qgd2l0aCBpbnZhbGlkIGlkICR7aWR9YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGV0IGVmZmVjdE9yZGVyID0gc3RhdGUuZWZmZWN0T3JkZXI7XG4gIGlmIChwcm9wcy5pZCAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmlkICE9PSBpZCkge1xuICAgIGNvbnN0IGlkeDIgPSBzdGF0ZS5lZmZlY3RzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IHByb3BzLmlkKTtcbiAgICBpZiAoaWR4MiA+PSAwKSB7XG4gICAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgdXBkYXRlIGVmZmVjdCB3aXRoIGV4aXN0aW5nIGVmZmVjdCBpZCAke2lkfWApO1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cblxuICAgIGVmZmVjdE9yZGVyID0gZWZmZWN0T3JkZXIubWFwKGVmZmVjdE9yZGVySWQgPT5cbiAgICAgIGVmZmVjdE9yZGVySWQgPT09IGlkID8gKHByb3BzLmlkIGFzIHN0cmluZykgOiBlZmZlY3RPcmRlcklkXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGVmZmVjdCA9IHN0YXRlLmVmZmVjdHNbaWR4XTtcbiAgY29uc3QgbmV4dFBhcmFtcyA9IHByb3BzLnBhcmFtZXRlcnM7XG4gIC8vIEEgdGltZXN0YW1wLW9ubHkgbm8tb3Agc3RpbGwgdXNlZCB0byBhbGxvY2F0ZSBhIG5ldyB2aXNTdGF0ZSAoc2V0UHJvcHNcbiAgLy8gbXV0YXRlcyBpbiBwbGFjZSkuIFRoYXQgcmV0cmlnZ2VyZWQgbmVzdGVkIHJlYWN0LXJlZHV4IGNvbm5lY3Qgc3Vic2NyaWJlcnNcbiAgLy8gd2hpbGUgZHJhZ2dpbmcgdGhlIExpZ2h0ICYgU2hhZG93IGRheS10aW1lIHNsaWRlciB1bnRpbCBSZWFjdCB0aHJld1xuICAvLyBcIk1heGltdW0gdXBkYXRlIGRlcHRoIGV4Y2VlZGVkXCIuXG4gIGlmIChcbiAgICBuZXh0UGFyYW1zICYmXG4gICAgT2JqZWN0LmtleXMocHJvcHMpLmxlbmd0aCA9PT0gMSAmJlxuICAgIE9iamVjdC5rZXlzKG5leHRQYXJhbXMpLmxlbmd0aCA9PT0gMSAmJlxuICAgIG5leHRQYXJhbXMudGltZXN0YW1wICE9IG51bGwgJiZcbiAgICBuZXh0UGFyYW1zLnRpbWVzdGFtcCA9PT0gZWZmZWN0LnBhcmFtZXRlcnMudGltZXN0YW1wXG4gICkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0VmZmVjdHMgPSBbLi4uc3RhdGUuZWZmZWN0c107XG4gIG5ld0VmZmVjdHNbaWR4XS5zZXRQcm9wcyhwcm9wcyk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZmZlY3RzOiBuZXdFZmZlY3RzLFxuICAgIGVmZmVjdE9yZGVyXG4gIH07XG59O1xuXG4vLyBBTk5PVEFUSU9OIFVQREFURVJTXG5cbmZ1bmN0aW9uIG1ha2VOZXdBbm5vdGF0aW9uKGNvbmZpZz86IEFubm90YXRpb25Qcm9wc1BhcnRpYWwpOiBBbm5vdGF0aW9uIHtcbiAgY29uc3Qga2luZCA9IGNvbmZpZz8ua2luZCA/PyBJTklUSUFMX0FOTk9UQVRJT05fS0lORDtcbiAgY29uc3QgYmFzZSA9IHtcbiAgICBpZDogY29uZmlnPy5pZCA/PyBnZW5lcmF0ZUhhc2hJZCg2KSxcbiAgICBraW5kLFxuICAgIGlzVmlzaWJsZTogY29uZmlnPy5pc1Zpc2libGUgPz8gdHJ1ZSxcbiAgICBhdXRvU2l6ZTogY29uZmlnPy5hdXRvU2l6ZSA/PyB0cnVlLFxuICAgIGF1dG9TaXplWTogY29uZmlnPy5hdXRvU2l6ZVkgPz8gdHJ1ZSxcbiAgICBhbmNob3JQb2ludDogY29uZmlnPy5hbmNob3JQb2ludCA/PyAoWzAsIDBdIGFzIFtudW1iZXIsIG51bWJlcl0pLFxuICAgIGxhYmVsOiBjb25maWc/LmxhYmVsID8/ICdOZXcgQW5ub3RhdGlvbicsXG4gICAgbGluZUNvbG9yOiBjb25maWc/LmxpbmVDb2xvciA/PyBJTklUSUFMX0FOTk9UQVRJT05fTElORV9DT0xPUixcbiAgICBsaW5lV2lkdGg6IGNvbmZpZz8ubGluZVdpZHRoID8/IElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX1dJRFRILFxuICAgIHRleHRXaWR0aDogY29uZmlnPy50ZXh0V2lkdGggPz8gSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfV0lEVEgsXG4gICAgdGV4dEhlaWdodDogY29uZmlnPy50ZXh0SGVpZ2h0ID8/IElOSVRJQUxfQU5OT1RBVElPTl9URVhUX0hFSUdIVCxcbiAgICB0ZXh0VmVydGljYWxBbGlnbjogY29uZmlnPy50ZXh0VmVydGljYWxBbGlnbiA/PyAoJ2JvdHRvbScgYXMgY29uc3QpLFxuICAgIG1hcEluZGV4OiBjb25maWc/Lm1hcEluZGV4XG4gIH07XG5cbiAgc3dpdGNoIChraW5kKSB7XG4gICAgY2FzZSBBbm5vdGF0aW9uS2luZC5QT0lOVDpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmJhc2UsXG4gICAgICAgIGtpbmQ6IEFubm90YXRpb25LaW5kLlBPSU5ULFxuICAgICAgICBhcm1MZW5ndGg6IChjb25maWcgYXMgYW55KT8uYXJtTGVuZ3RoID8/IElOSVRJQUxfQU5OT1RBVElPTl9BUk1fTEVOR1RILFxuICAgICAgICBhbmdsZTogKGNvbmZpZyBhcyBhbnkpPy5hbmdsZSA/PyBJTklUSUFMX0FOTk9UQVRJT05fQU5HTEVcbiAgICAgIH07XG4gICAgY2FzZSBBbm5vdGF0aW9uS2luZC5BUlJPVzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmJhc2UsXG4gICAgICAgIGtpbmQ6IEFubm90YXRpb25LaW5kLkFSUk9XLFxuICAgICAgICBhcm1MZW5ndGg6IChjb25maWcgYXMgYW55KT8uYXJtTGVuZ3RoID8/IElOSVRJQUxfQU5OT1RBVElPTl9BUk1fTEVOR1RILFxuICAgICAgICBhbmdsZTogKGNvbmZpZyBhcyBhbnkpPy5hbmdsZSA/PyBJTklUSUFMX0FOTk9UQVRJT05fQU5HTEVcbiAgICAgIH07XG4gICAgY2FzZSBBbm5vdGF0aW9uS2luZC5DSVJDTEU6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5iYXNlLFxuICAgICAgICBraW5kOiBBbm5vdGF0aW9uS2luZC5DSVJDTEUsXG4gICAgICAgIGFybUxlbmd0aDogKGNvbmZpZyBhcyBhbnkpPy5hcm1MZW5ndGggPz8gSU5JVElBTF9BTk5PVEFUSU9OX0FSTV9MRU5HVEgsXG4gICAgICAgIGFuZ2xlOiAoY29uZmlnIGFzIGFueSk/LmFuZ2xlID8/IElOSVRJQUxfQU5OT1RBVElPTl9BTkdMRSxcbiAgICAgICAgcmFkaXVzSW5NZXRlcnM6IChjb25maWcgYXMgYW55KT8ucmFkaXVzSW5NZXRlcnMgPz8gMTAwMFxuICAgICAgfTtcbiAgICBjYXNlIEFubm90YXRpb25LaW5kLlRFWFQ6XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmJhc2UsXG4gICAgICAgIGtpbmQ6IEFubm90YXRpb25LaW5kLlRFWFRcbiAgICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBBZGQgYSBuZXcgYW5ub3RhdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZEFubm90YXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZEFubm90YXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IG5ld0Fubm90YXRpb24gPSBtYWtlTmV3QW5ub3RhdGlvbihhY3Rpb24uY29uZmlnKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbm5vdGF0aW9uczogW25ld0Fubm90YXRpb24sIC4uLnN0YXRlLmFubm90YXRpb25zXSxcbiAgICBzZWxlY3RlZEFubm90YXRpb25JZDogbmV3QW5ub3RhdGlvbi5pZCxcbiAgICBpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dDogdHJ1ZVxuICB9O1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYW4gYW5ub3RhdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUFubm90YXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZH06IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVBbm5vdGF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFubm90YXRpb25zOiBzdGF0ZS5hbm5vdGF0aW9ucy5maWx0ZXIoYSA9PiBhLmlkICE9PSBpZCksXG4gICAgc2VsZWN0ZWRBbm5vdGF0aW9uSWQ6IHN0YXRlLnNlbGVjdGVkQW5ub3RhdGlvbklkID09PSBpZCA/IG51bGwgOiBzdGF0ZS5zZWxlY3RlZEFubm90YXRpb25JZCxcbiAgICBpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dDpcbiAgICAgIHN0YXRlLnNlbGVjdGVkQW5ub3RhdGlvbklkID09PSBpZCA/IGZhbHNlIDogc3RhdGUuaXNFZGl0aW5nQW5ub3RhdGlvblRleHRcbiAgfTtcbn07XG5cbi8qKlxuICogVXBkYXRlIGFuIGFubm90YXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVBbm5vdGF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWQsIGNvbmZpZ306IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVBbm5vdGF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBpZHggPSBzdGF0ZS5hbm5vdGF0aW9ucy5maW5kSW5kZXgoYSA9PiBhLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwKSB7XG4gICAgQ29uc29sZS53YXJuKGBjYW4gbm90IHVwZGF0ZSBhbm5vdGF0aW9uIHdpdGggaW52YWxpZCBpZCAke2lkfWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBwcmV2ID0gc3RhdGUuYW5ub3RhdGlvbnNbaWR4XTtcbiAgbGV0IG5leHRBbm5vdGF0aW9uOiBBbm5vdGF0aW9uO1xuXG4gIGlmIChjb25maWcua2luZCAmJiBjb25maWcua2luZCAhPT0gcHJldi5raW5kKSB7XG4gICAgbmV4dEFubm90YXRpb24gPSBtYWtlTmV3QW5ub3RhdGlvbih7Li4ucHJldiwgLi4uY29uZmlnfSBhcyBBbm5vdGF0aW9uUHJvcHNQYXJ0aWFsKTtcbiAgfSBlbHNlIHtcbiAgICBuZXh0QW5ub3RhdGlvbiA9IHsuLi5wcmV2LCAuLi5jb25maWd9IGFzIEFubm90YXRpb247XG4gIH1cblxuICBjb25zdCBuZXdBbm5vdGF0aW9ucyA9IFsuLi5zdGF0ZS5hbm5vdGF0aW9uc107XG4gIG5ld0Fubm90YXRpb25zW2lkeF0gPSBuZXh0QW5ub3RhdGlvbjtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbm5vdGF0aW9uczogbmV3QW5ub3RhdGlvbnNcbiAgfTtcbn07XG5cbi8qKlxuICogRHVwbGljYXRlIGFuIGFubm90YXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBkdXBsaWNhdGVBbm5vdGF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuRHVwbGljYXRlQW5ub3RhdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qgb3JpZ2luYWwgPSBzdGF0ZS5hbm5vdGF0aW9ucy5maW5kKGEgPT4gYS5pZCA9PT0gaWQpO1xuICBpZiAoIW9yaWdpbmFsKSB7XG4gICAgQ29uc29sZS53YXJuKGBjYW4gbm90IGR1cGxpY2F0ZSBhbm5vdGF0aW9uIHdpdGggaW52YWxpZCBpZCAke2lkfWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBuZXdBbm5vdGF0aW9uID0ge1xuICAgIC4uLmNsb25lRGVlcChvcmlnaW5hbCksXG4gICAgaWQ6IGdlbmVyYXRlSGFzaElkKDYpLFxuICAgIGxhYmVsOiBgQ29weSBvZiAke29yaWdpbmFsLmxhYmVsfWBcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbm5vdGF0aW9uczogW25ld0Fubm90YXRpb24sIC4uLnN0YXRlLmFubm90YXRpb25zXSxcbiAgICBzZWxlY3RlZEFubm90YXRpb25JZDogbmV3QW5ub3RhdGlvbi5pZCxcbiAgICBpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dDogZmFsc2VcbiAgfTtcbn07XG5cbi8qKlxuICogU2V0IHNlbGVjdGVkIGFubm90YXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRTZWxlY3RlZEFubm90YXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZCwgaXNFZGl0aW5nVGV4dH06IFZpc1N0YXRlQWN0aW9ucy5TZXRTZWxlY3RlZEFubm90YXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmIChcbiAgICBpZCA9PT0gc3RhdGUuc2VsZWN0ZWRBbm5vdGF0aW9uSWQgJiZcbiAgICAoaXNFZGl0aW5nVGV4dCA/PyBmYWxzZSkgPT09IHN0YXRlLmlzRWRpdGluZ0Fubm90YXRpb25UZXh0XG4gICkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHNlbGVjdGVkQW5ub3RhdGlvbklkOiBpZCxcbiAgICBpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dDogaXNFZGl0aW5nVGV4dCA/PyBmYWxzZVxuICB9O1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSBkYXRhc2V0IGFuZCBhbGwgbGF5ZXJzLCBmaWx0ZXJzLCB0b29sdGlwIGNvbmZpZ3MgdGhhdCBiYXNlZCBvbiBpdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZURhdGFzZXRVcGRhdGVyPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVEYXRhc2V0VXBkYXRlckFjdGlvblxuKTogVCB7XG4gIC8vIGV4dHJhY3QgZGF0YXNldCBrZXlcbiAgY29uc3Qge2RhdGFJZDogZGF0YXNldEtleX0gPSBhY3Rpb247XG4gIGNvbnN0IHtkYXRhc2V0c30gPSBzdGF0ZTtcblxuICAvLyBjaGVjayBpZiBkYXRhc2V0IGlzIHByZXNlbnRcbiAgaWYgKCFkYXRhc2V0c1tkYXRhc2V0S2V5XSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICBsYXllcnMsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIGRhdGFzZXRzOiB7W2RhdGFzZXRLZXldOiBkYXRhc2V0LCAuLi5uZXdEYXRhc2V0c31cbiAgfSA9IHN0YXRlO1xuXG4gIGNvbnN0IGxheWVyc1RvUmVtb3ZlID0gbGF5ZXJzLmZpbHRlcihsID0+IGwuY29uZmlnLmRhdGFJZCA9PT0gZGF0YXNldEtleSkubWFwKGwgPT4gbC5pZCk7XG5cbiAgLy8gcmVtb3ZlIGxheWVycyBhbmQgZGF0YXNldHNcbiAgbGV0IG5ld1N0YXRlID0gbGF5ZXJzVG9SZW1vdmUucmVkdWNlKChhY2N1LCBpZCkgPT4gcmVtb3ZlTGF5ZXJVcGRhdGVyKGFjY3UsIHtpZH0pLCB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGF0YXNldHM6IG5ld0RhdGFzZXRzXG4gIH0pO1xuXG4gIC8vIHVwZGF0ZSBmaWx0ZXJzXG4gIGNvbnN0IGZpbHRlcnM6IEZpbHRlcltdID0gW107XG4gIGZvciAoY29uc3QgZmlsdGVyIG9mIG5ld1N0YXRlLmZpbHRlcnMpIHtcbiAgICBjb25zdCB2YWx1ZUluZGV4ID0gZmlsdGVyLmRhdGFJZC5pbmRleE9mKGRhdGFzZXRLZXkpO1xuICAgIGlmICh2YWx1ZUluZGV4ID49IDAgJiYgZmlsdGVyLmRhdGFJZC5sZW5ndGggPiAxKSB7XG4gICAgICAvLyBvbmx5IHJlbW92ZSBvbmUgc3luY2VkIGRhdGFzZXQgZnJvbSB0aGUgZmlsdGVyXG4gICAgICBmaWx0ZXJzLnB1c2goX3JlbW92ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChmaWx0ZXIsIHZhbHVlSW5kZXgsIGRhdGFzZXRzKSk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZUluZGV4IDwgMCkge1xuICAgICAgLy8gbGVhdmUgdGhlIGZpbHRlciBhcyBpc1xuICAgICAgZmlsdGVycy5wdXNoKGZpbHRlcik7XG4gICAgfVxuICB9XG5cbiAgbmV3U3RhdGUgPSB7Li4ubmV3U3RhdGUsIGZpbHRlcnN9O1xuXG4gIHJldHVybiByZW1vdmVEYXRhc2V0RnJvbUludGVyYWN0aW9uQ29uZmlnKG5ld1N0YXRlLCB7ZGF0YUlkOiBkYXRhc2V0S2V5fSk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZURhdGFzZXRGcm9tSW50ZXJhY3Rpb25Db25maWcoc3RhdGUsIHtkYXRhSWR9KSB7XG4gIGxldCB7aW50ZXJhY3Rpb25Db25maWd9ID0gc3RhdGU7XG4gIGNvbnN0IHt0b29sdGlwfSA9IGludGVyYWN0aW9uQ29uZmlnO1xuICBpZiAodG9vbHRpcCkge1xuICAgIGNvbnN0IHtjb25maWd9ID0gdG9vbHRpcDtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgY29uc3Qge1tkYXRhSWRdOiBmaWVsZHMsIC4uLmZpZWxkc1RvU2hvd30gPSBjb25maWcuZmllbGRzVG9TaG93O1xuICAgIGludGVyYWN0aW9uQ29uZmlnID0ge1xuICAgICAgLi4uaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICB0b29sdGlwOiB7Li4udG9vbHRpcCwgY29uZmlnOiB7Li4uY29uZmlnLCBmaWVsZHNUb1Nob3d9fVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gey4uLnN0YXRlLCBpbnRlcmFjdGlvbkNvbmZpZ307XG59XG4vKipcbiAqIHVwZGF0ZSBsYXllciBibGVuZGluZyBtb2RlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlTGF5ZXJCbGVuZGluZ1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlTGF5ZXJCbGVuZGluZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBsYXllckJsZW5kaW5nOiBhY3Rpb24ubW9kZVxufSk7XG5cbi8qKlxuICogdXBkYXRlIG92ZXJsYXkgYmxlbmRpbmcgbW9kZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZU92ZXJsYXlCbGVuZGluZ1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlT3ZlcmxheUJsZW5kaW5nVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIG92ZXJsYXlCbGVuZGluZzogYWN0aW9uLm1vZGVcbn0pO1xuXG4vKipcbiAqIERpc3BsYXkgZGF0YXNldCB0YWJsZSBpbiBhIG1vZGFsXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2hvd0RhdGFzZXRUYWJsZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2hvd0RhdGFzZXRUYWJsZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0aW5nRGF0YXNldDogYWN0aW9uLmRhdGFJZFxuICB9O1xufTtcblxuLyoqXG4gKiBBZGQgY3VzdG9tIGNvbG9yIGZvciBkYXRhc2V0cyBhbmQgbGF5ZXJzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlVGFibGVDb2xvclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRGF0YXNldENvbG9yVXBkYXRlclxuKTogVmlzU3RhdGUgPT4ge1xuICByZXR1cm4gdXBkYXRlRGF0YXNldFByb3BzVXBkYXRlcihzdGF0ZSwge2RhdGFJZDogYWN0aW9uLmRhdGFJZCwgcHJvcHM6IHtjb2xvcjogYWN0aW9uLm5ld0NvbG9yfX0pO1xufTtcblxuLyoqXG4gKiByZXNldCB2aXNTdGF0ZSB0byBpbml0aWFsIFN0YXRlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVzZXRNYXBDb25maWdVcGRhdGVyID0gKHN0YXRlOiBWaXNTdGF0ZSk6IFZpc1N0YXRlID0+ICh7XG4gIC4uLklOSVRJQUxfVklTX1NUQVRFLFxuICAuLi5zdGF0ZS5pbml0aWFsU3RhdGUsXG4gIGluaXRpYWxTdGF0ZTogc3RhdGUuaW5pdGlhbFN0YXRlXG59KTtcblxuLyoqXG4gKiBQcm9wYWdhdGUgYHZpc1N0YXRlYCByZWR1Y2VyIHdpdGggYSBuZXcgY29uZmlndXJhdGlvbi4gQ3VycmVudCBjb25maWcgd2lsbCBiZSBvdmVycmlkZS5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZWNlaXZlTWFwQ29uZmlnVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7XG4gICAgcGF5bG9hZDoge2NvbmZpZyA9IHt9LCBvcHRpb25zID0ge319XG4gIH06IHtcbiAgICB0eXBlPzogdHlwZW9mIEFjdGlvblR5cGVzLlJFQ0VJVkVfTUFQX0NPTkZJRztcbiAgICBwYXlsb2FkOiBSZWNlaXZlTWFwQ29uZmlnUGF5bG9hZDtcbiAgfVxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoIWNvbmZpZy52aXNTdGF0ZSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtrZWVwRXhpc3RpbmdDb25maWd9ID0gb3B0aW9ucztcblxuICAvLyByZXNldCBjb25maWcgaWYga2VlcEV4aXN0aW5nQ29uZmlnIGlzIGZhbHN5XG4gIGxldCBtZXJnZWRTdGF0ZSA9ICFrZWVwRXhpc3RpbmdDb25maWcgPyByZXNldE1hcENvbmZpZ1VwZGF0ZXIoc3RhdGUpIDogc3RhdGU7XG4gIGZvciAoY29uc3QgbWVyZ2VyIG9mIHN0YXRlLm1lcmdlcnMpIHtcbiAgICBpZiAoaXNWYWxpZE1lcmdlcihtZXJnZXIpICYmIGhhc1Byb3BzVG9NZXJnZShjb25maWcudmlzU3RhdGUsIG1lcmdlci5wcm9wKSkge1xuICAgICAgbWVyZ2VkU3RhdGUgPSBtZXJnZXIubWVyZ2UoXG4gICAgICAgIG1lcmdlZFN0YXRlLFxuICAgICAgICBnZXRQcm9wVmFsdWVUb01lcmdlcihjb25maWcudmlzU3RhdGUsIG1lcmdlci5wcm9wLCBtZXJnZXIudG9NZXJnZVByb3ApLFxuICAgICAgICAvLyBmcm9tQ29uZmlnXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1lcmdlZFN0YXRlO1xufTtcblxuLyoqXG4gKiBUcmlnZ2VyIGxheWVyIGhvdmVyIGV2ZW50IHdpdGggaG92ZXJlZCBvYmplY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBsYXllckhvdmVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5PbkxheWVySG92ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgaG92ZXJJbmZvOiB7XG4gICAgLy8gZGVjay5nbCBpbmZvIGlzIG11dGFibGVcbiAgICAuLi5hY3Rpb24uaW5mbyxcbiAgICAuLi4oTnVtYmVyLmlzRmluaXRlKGFjdGlvbi5tYXBJbmRleCkgPyB7bWFwSW5kZXg6IGFjdGlvbi5tYXBJbmRleH0gOiB7fSlcbiAgfVxufSk7XG5cbi8qIGVzbGludC1lbmFibGUgbWF4LXN0YXRlbWVudHMgKi9cblxuLyoqXG4gKiBVcGRhdGUgYGludGVyYWN0aW9uQ29uZmlnYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludGVyYWN0aW9uQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5JbnRlcmFjdGlvbkNvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2NvbmZpZ30gPSBhY3Rpb247XG5cbiAgY29uc3QgaW50ZXJhY3Rpb25Db25maWcgPSB7XG4gICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Db25maWcsXG4gICAgLi4ue1tjb25maWcuaWRdOiBjb25maWd9XG4gIH07XG5cbiAgLy8gRG9uJ3QgZW5hYmxlIHRvb2x0aXAgYW5kIGJydXNoIGF0IHRoZSBzYW1lIHRpbWVcbiAgLy8gYnV0IGNvb3JkaW5hdGVzIGNhbiBiZSBzaG93biBhdCBhbGwgdGltZVxuICBjb25zdCBjb250cmFkaWN0ID0gWydicnVzaCcsICd0b29sdGlwJ107XG5cbiAgaWYgKFxuICAgIGNvbnRyYWRpY3QuaW5jbHVkZXMoY29uZmlnLmlkKSAmJlxuICAgIGNvbmZpZy5lbmFibGVkICYmXG4gICAgIXN0YXRlLmludGVyYWN0aW9uQ29uZmlnW2NvbmZpZy5pZF0uZW5hYmxlZFxuICApIHtcbiAgICAvLyBvbmx5IGVuYWJsZSBvbmUgaW50ZXJhY3Rpb24gYXQgYSB0aW1lXG4gICAgY29udHJhZGljdC5mb3JFYWNoKGsgPT4ge1xuICAgICAgaWYgKGsgIT09IGNvbmZpZy5pZCkge1xuICAgICAgICBpbnRlcmFjdGlvbkNvbmZpZ1trXSA9IHsuLi5pbnRlcmFjdGlvbkNvbmZpZ1trXSwgZW5hYmxlZDogZmFsc2V9O1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgaW50ZXJhY3Rpb25Db25maWdcbiAgfTtcblxuICBpZiAoY29uZmlnLmlkID09PSAnZ2VvY29kZXInICYmICFjb25maWcuZW5hYmxlZCkge1xuICAgIHJldHVybiByZW1vdmVEYXRhc2V0VXBkYXRlcihuZXdTdGF0ZSwge2RhdGFJZDogJ2dlb2NvZGVyX2RhdGFzZXQnfSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogVHJpZ2dlciBsYXllciBjbGljayBldmVudCB3aXRoIGNsaWNrZWQgb2JqZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbGF5ZXJDbGlja1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuT25MYXllckNsaWNrVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIG1vdXNlUG9zOiBzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZy5jb29yZGluYXRlLmVuYWJsZWRcbiAgICA/IHtcbiAgICAgICAgLi4uc3RhdGUubW91c2VQb3MsXG4gICAgICAgIHBpbm5lZDogc3RhdGUubW91c2VQb3MucGlubmVkID8gbnVsbCA6IGNsb25lRGVlcChzdGF0ZS5tb3VzZVBvcylcbiAgICAgIH1cbiAgICA6IHN0YXRlLm1vdXNlUG9zLFxuICBjbGlja2VkOiBhY3Rpb24uaW5mbyAmJiBhY3Rpb24uaW5mby5waWNrZWQgPyBhY3Rpb24uaW5mbyA6IG51bGxcbn0pO1xuXG4vKipcbiAqIFRyaWdnZXIgbWFwIGNsaWNrIGV2ZW50LCB1bnNlbGVjdCBjbGlja2VkIG9iamVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IG1hcENsaWNrVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLk9uTWFwQ2xpY2tVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgY2xpY2tlZDogbnVsbFxuICB9O1xufTtcblxuLyoqXG4gKiBUcmlnZ2VyIG1hcCBtb3ZlIGV2ZW50XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbW91c2VNb3ZlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZXZ0fTogVmlzU3RhdGVBY3Rpb25zLk9uTW91c2VNb3ZlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoT2JqZWN0LnZhbHVlcyhzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZykuc29tZShjb25maWcgPT4gY29uZmlnLmVuYWJsZWQpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgbW91c2VQb3M6IHtcbiAgICAgICAgLi4uc3RhdGUubW91c2VQb3MsXG4gICAgICAgIC4uLihBcnJheS5pc0FycmF5KGV2dC5wb2ludCkgPyB7bW91c2VQb3NpdGlvbjogWy4uLmV2dC5wb2ludF19IDoge30pLFxuICAgICAgICAuLi4oQXJyYXkuaXNBcnJheShldnQubG5nTGF0KSA/IHtjb29yZGluYXRlOiBbLi4uZXZ0LmxuZ0xhdF19IDoge30pXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn07XG4vKipcbiAqIFRvZ2dsZSB2aXNpYmlsaXR5IG9mIGEgbGF5ZXIgZm9yIGEgc3BsaXQgbWFwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlU3BsaXRNYXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogTWFwU3RhdGVBY3Rpb25zLlRvZ2dsZVNwbGl0TWFwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT5cbiAgc3RhdGUuc3BsaXRNYXBzICYmIHN0YXRlLnNwbGl0TWFwcy5sZW5ndGggPT09IDBcbiAgICA/IHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIC8vIG1heWJlIHdlIHNob3VsZCB1c2UgYW4gYXJyYXkgdG8gc3RvcmUgc3RhdGUgZm9yIGEgc2luZ2xlIG1hcCBhcyB3ZWxsXG4gICAgICAgIC8vIGlmIGN1cnJlbnQgbWFwcyBsZW5ndGggaXMgZXF1YWwgdG8gMCBpdCBtZWFucyB0aGF0IHdlIGFyZSBhYm91dCB0byBzcGxpdCB0aGUgdmlld1xuICAgICAgICBzcGxpdE1hcHM6IGNvbXB1dGVTcGxpdE1hcExheWVycyhzdGF0ZS5sYXllcnMsIHtkdXBsaWNhdGU6IGZhbHNlfSlcbiAgICAgIH1cbiAgICA6IGNsb3NlU3BlY2lmaWNNYXBBdEluZGV4KHN0YXRlLCBhY3Rpb24pO1xuXG4vKipcbiAqIFRvZ2dsZSB2aXNpYmlsaXR5IG9mIGEgbGF5ZXIgaW4gYSBzcGxpdCBtYXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVMYXllckZvck1hcFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge21hcEluZGV4LCBsYXllcklkfTogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUxheWVyRm9yTWFwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7c3BsaXRNYXBzfSA9IHN0YXRlO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgc3BsaXRNYXBzOiBzcGxpdE1hcHMubWFwKChzbSwgaSkgPT5cbiAgICAgIGkgPT09IG1hcEluZGV4XG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uc3BsaXRNYXBzW2ldLFxuICAgICAgICAgICAgbGF5ZXJzOiB7XG4gICAgICAgICAgICAgIC4uLnNwbGl0TWFwc1tpXS5sYXllcnMsXG4gICAgICAgICAgICAgIC8vIGlmIGxheWVySWQgbm90IGluIGxheWVycywgc2V0IGl0IHRvIHZpc2libGVcbiAgICAgICAgICAgICAgW2xheWVySWRdOiAhc3BsaXRNYXBzW2ldLmxheWVyc1tsYXllcklkXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgOiBzbVxuICAgIClcbiAgfTtcbn07XG5cbmZ1bmN0aW9uIGhhc1RhYnVsYXJEYXRhc2V0RGF0YShkYXRhPzogUHJvdG9EYXRhc2V0WydkYXRhJ10gfCBudWxsKTogYm9vbGVhbiB7XG4gIHJldHVybiBCb29sZWFuKFxuICAgIGRhdGE/LnJvd3M/Lmxlbmd0aCB8fCBkYXRhPy5jb2xzPy5sZW5ndGggfHwgKGRhdGEgYXMge2Fycm93VGFibGU/OiB1bmtub3dufSk/LmFycm93VGFibGVcbiAgKTtcbn1cblxuZnVuY3Rpb24gbmVlZHNFeHRlcm5hbGx5SG9zdGVkSHlkcmF0ZShkYXRhc2V0OiBQcm90b0RhdGFzZXQpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBkYXRhc2V0LmluZm8/LnR5cGUgPT09IERhdGFzZXRUeXBlLkVYVEVSTkFMTFlfSE9TVEVEICYmXG4gICAgdHlwZW9mIGRhdGFzZXQubWV0YWRhdGE/LnNvdXJjZSA9PT0gJ3N0cmluZycgJiZcbiAgICAhaGFzVGFidWxhckRhdGFzZXREYXRhKGRhdGFzZXQuZGF0YSlcbiAgKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaHlkcmF0ZUV4dGVybmFsbHlIb3N0ZWRQcm90b0RhdGFzZXQoZGF0YXNldDogUHJvdG9EYXRhc2V0KTogUHJvbWlzZTxQcm90b0RhdGFzZXQ+IHtcbiAgaWYgKCFuZWVkc0V4dGVybmFsbHlIb3N0ZWRIeWRyYXRlKGRhdGFzZXQpKSB7XG4gICAgcmV0dXJuIGRhdGFzZXQ7XG4gIH1cbiAgY29uc3QgbG9hZGVkID0gYXdhaXQgbG9hZEV4dGVybmFsbHlIb3N0ZWREYXRhc2V0KHtcbiAgICBzb3VyY2U6IGRhdGFzZXQubWV0YWRhdGE/LnNvdXJjZSBhcyBzdHJpbmcsXG4gICAgZm9ybWF0OiBnZXRSZW1vdGVTb3VyY2VGb3JtYXQoZGF0YXNldC5tZXRhZGF0YSksXG4gICAgc2l6ZTogdHlwZW9mIGRhdGFzZXQubWV0YWRhdGE/LnNpemUgPT09ICdudW1iZXInID8gZGF0YXNldC5tZXRhZGF0YS5zaXplIDogdW5kZWZpbmVkLFxuICAgIGJ5cGFzc0NhY2hlOiBnZXREYXRhc2V0UmVmcmVzaEludGVydmFsTXMoZGF0YXNldC5tZXRhZGF0YSkgPiAwXG4gIH0pO1xuICBpZiAoIWxvYWRlZC5kYXRhKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBObyBkYXRhIGxvYWRlZCBmcm9tICR7ZGF0YXNldC5tZXRhZGF0YT8uc291cmNlfWApO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uZGF0YXNldCxcbiAgICBkYXRhOiBsb2FkZWQuZGF0YSxcbiAgICBtZXRhZGF0YToge1xuICAgICAgLi4uZGF0YXNldC5tZXRhZGF0YSxcbiAgICAgIGV0YWc6IGxvYWRlZC5ldGFnLFxuICAgICAgbGFzdE1vZGlmaWVkOiBsb2FkZWQubGFzdE1vZGlmaWVkLFxuICAgICAgLi4uKHR5cGVvZiBsb2FkZWQuc2l6ZSA9PT0gJ251bWJlcicgPyB7c2l6ZTogbG9hZGVkLnNpemV9IDoge30pLFxuICAgICAgbGFzdEZldGNoZWRBdDogRGF0ZS5ub3coKSxcbiAgICAgIHJlZnJlc2hTdGF0dXM6ICdpZGxlJ1xuICAgIH1cbiAgfTtcbn1cblxuY29uc3QgSFlEUkFURV9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0sgPSBUYXNrLmZyb21Qcm9taXNlKFxuICBoeWRyYXRlRXh0ZXJuYWxseUhvc3RlZFByb3RvRGF0YXNldCxcbiAgJ0hZRFJBVEVfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLJ1xuKTtcblxuY29uc3QgRkFJTF9DUkVBVEVfREFUQVNFVF9UQVNLID0gVGFzay5mcm9tUHJvbWlzZShhc3luYyAobWVzc2FnZTogc3RyaW5nKSA9PiB7XG4gIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbn0sICdGQUlMX0NSRUFURV9EQVRBU0VUX1RBU0snKTtcblxuZnVuY3Rpb24gY3JlYXRlTmV3RGF0YUVudHJ5VGFzayhkYXRhc2V0OiBQcm90b0RhdGFzZXQsIGRhdGFzZXRzOiBEYXRhc2V0cykge1xuICBpZiAoIW5lZWRzRXh0ZXJuYWxseUhvc3RlZEh5ZHJhdGUoZGF0YXNldCkpIHtcbiAgICByZXR1cm4gY3JlYXRlTmV3RGF0YUVudHJ5KGRhdGFzZXQsIGRhdGFzZXRzKTtcbiAgfVxuICByZXR1cm4gSFlEUkFURV9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0soZGF0YXNldCkuY2hhaW4oaHlkcmF0ZWQgPT4ge1xuICAgIGNvbnN0IHRhc2sgPSBjcmVhdGVOZXdEYXRhRW50cnkoaHlkcmF0ZWQsIGRhdGFzZXRzKTtcbiAgICByZXR1cm4gKFxuICAgICAgdGFzayB8fFxuICAgICAgRkFJTF9DUkVBVEVfREFUQVNFVF9UQVNLKCdGYWlsZWQgdG8gY3JlYXRlIGEgbmV3IGRhdGFzZXQgZHVlIHRvIGRhdGEgdmVyaWZpY2F0aW9uIGVycm9ycycpXG4gICAgKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHBhdGNoRGF0YXNldE1ldGFkYXRhKGRhdGFzZXQ6IERhdGFzZXRzW3N0cmluZ10sIHBhdGNoOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikge1xuICByZXR1cm4gY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHtcbiAgICBtZXRhZGF0YToge1xuICAgICAgLi4uZGF0YXNldC5tZXRhZGF0YSxcbiAgICAgIC4uLnBhdGNoXG4gICAgfVxuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVmcmVzaEV4dGVybmFsbHlIb3N0ZWRUYWJsZSh7XG4gIGFyZzogbWV0YWRhdGEsXG4gIG9uUHJvZ3Jlc3Ncbn06IHtcbiAgYXJnOiB7XG4gICAgc291cmNlOiBzdHJpbmc7XG4gICAgZm9ybWF0Pzogc3RyaW5nO1xuICAgIHNpemU/OiBudW1iZXI7XG4gICAgZXRhZz86IHN0cmluZztcbiAgICBsYXN0TW9kaWZpZWQ/OiBzdHJpbmc7XG4gIH07XG4gIG9uUHJvZ3Jlc3M6IChwcm9ncmVzczoge2xvYWRlZDogbnVtYmVyOyB0b3RhbD86IG51bWJlcjsgcGVyY2VudDogbnVtYmVyfSkgPT4gdm9pZDtcbn0pIHtcbiAgLy8gRmV0Y2ggb25seS4gRG8gbm90IG11dGF0ZSB0aGUgUmVkdXggdGFibGUgaGVyZTogcHJvZ3Jlc3MgZXZlbnRzIGNvcHkgaXQsIGFuZFxuICAvLyB0aGUgc3VjY2VzcyB1cGRhdGVyIGFwcGxpZXMgdGhlIHNuYXBzaG90IHRvIHdoYXRldmVyIGluc3RhbmNlIGlzIGluIHRoZSBzdG9yZS5cbiAgcmV0dXJuIGxvYWRFeHRlcm5hbGx5SG9zdGVkRGF0YXNldCh7Li4ubWV0YWRhdGEsIG9uUHJvZ3Jlc3MsIGJ5cGFzc0NhY2hlOiB0cnVlfSk7XG59XG5cbmNvbnN0IFJFRlJFU0hfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLID0gVGFzay5mcm9tUHJvbWlzZVdpdGhQcm9ncmVzcyhcbiAgcmVmcmVzaEV4dGVybmFsbHlIb3N0ZWRUYWJsZSxcbiAgJ1JFRlJFU0hfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLJ1xuKTtcblxuLyoqXG4gKiBSZS1mZXRjaCBhbiBleHRlcm5hbGx5IGhvc3RlZCBkYXRhc2V0IGFuZCByZXBsYWNlIGl0cyB0YWJsZSBjb250ZW50cyBpbiBwbGFjZS5cbiAqIExheWVycyBhbmQgZmlsdGVycyBhcmUga2VwdCB3aGVuIGZpZWxkIG5hbWVzIG1hdGNoLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZnJlc2hEYXRhc2V0VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkfTogVmlzU3RhdGVBY3Rpb25zLlJlZnJlc2hEYXRhc2V0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKFxuICAgICFkYXRhc2V0IHx8XG4gICAgZGF0YXNldC50eXBlICE9PSBEYXRhc2V0VHlwZS5FWFRFUk5BTExZX0hPU1RFRCB8fFxuICAgIHR5cGVvZiBkYXRhc2V0Lm1ldGFkYXRhPy5zb3VyY2UgIT09ICdzdHJpbmcnXG4gICkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAoZGF0YXNldC5tZXRhZGF0YT8ucmVmcmVzaFN0YXR1cyA9PT0gJ2xvYWRpbmcnKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV4dERhdGFzZXQgPSBwYXRjaERhdGFzZXRNZXRhZGF0YShkYXRhc2V0LCB7XG4gICAgcmVmcmVzaFN0YXR1czogJ2xvYWRpbmcnLFxuICAgIHJlZnJlc2hFcnJvcjogdW5kZWZpbmVkLFxuICAgIHJlZnJlc2hQcm9ncmVzczogdW5kZWZpbmVkXG4gIH0pO1xuXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGRhdGFzZXRzOiB7XG4gICAgICAgIC4uLnN0YXRlLmRhdGFzZXRzLFxuICAgICAgICBbZGF0YUlkXTogbmV4dERhdGFzZXRcbiAgICAgIH1cbiAgICB9LFxuICAgIFJFRlJFU0hfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLKHtcbiAgICAgIGFyZzoge1xuICAgICAgICBzb3VyY2U6IG5leHREYXRhc2V0Lm1ldGFkYXRhLnNvdXJjZSBhcyBzdHJpbmcsXG4gICAgICAgIGZvcm1hdDogZ2V0UmVtb3RlU291cmNlRm9ybWF0KG5leHREYXRhc2V0Lm1ldGFkYXRhKSxcbiAgICAgICAgc2l6ZTogdHlwZW9mIG5leHREYXRhc2V0Lm1ldGFkYXRhLnNpemUgPT09ICdudW1iZXInID8gbmV4dERhdGFzZXQubWV0YWRhdGEuc2l6ZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgZXRhZzogdHlwZW9mIG5leHREYXRhc2V0Lm1ldGFkYXRhLmV0YWcgPT09ICdzdHJpbmcnID8gbmV4dERhdGFzZXQubWV0YWRhdGEuZXRhZyA6IHVuZGVmaW5lZCxcbiAgICAgICAgbGFzdE1vZGlmaWVkOlxuICAgICAgICAgIHR5cGVvZiBuZXh0RGF0YXNldC5tZXRhZGF0YS5sYXN0TW9kaWZpZWQgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICA/IG5leHREYXRhc2V0Lm1ldGFkYXRhLmxhc3RNb2RpZmllZFxuICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgIH0sXG4gICAgICBvblByb2dyZXNzOiBwcm9ncmVzcyA9PlxuICAgICAgICByZWZyZXNoRGF0YXNldFByb2dyZXNzKGRhdGFJZCwgTWF0aC5yb3VuZCgocHJvZ3Jlc3M/LnBlcmNlbnQgPz8gMCkgKiAxMDApKVxuICAgIH0pLmJpbWFwKFxuICAgICAgcmVzdWx0ID0+IHJlZnJlc2hEYXRhc2V0U3VjY2VzcyhkYXRhSWQsIHJlc3VsdCksXG4gICAgICAoZXJyb3I6IEVycm9yKSA9PiByZWZyZXNoRGF0YXNldEVycm9yKGRhdGFJZCwgZXJyb3IpXG4gICAgKVxuICApO1xufVxuXG4vKipcbiAqIFJlY29yZCBkb3dubG9hZCBwcm9ncmVzcyBmb3IgYW4gaW4tZmxpZ2h0IHJlbW90ZSBkYXRhc2V0IHJlZnJlc2guXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVmcmVzaERhdGFzZXRQcm9ncmVzc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgcGVyY2VudH06IFZpc1N0YXRlQWN0aW9ucy5SZWZyZXNoRGF0YXNldFByb2dyZXNzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0IHx8IGRhdGFzZXQubWV0YWRhdGE/LnJlZnJlc2hTdGF0dXMgIT09ICdsb2FkaW5nJykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBuZXh0UGVyY2VudCA9IE51bWJlci5pc0Zpbml0ZShwZXJjZW50KVxuICAgID8gTWF0aC5tYXgoMCwgTWF0aC5taW4oMTAwLCBNYXRoLnJvdW5kKHBlcmNlbnQpKSlcbiAgICA6IDA7XG4gIGlmIChkYXRhc2V0Lm1ldGFkYXRhPy5yZWZyZXNoUHJvZ3Jlc3MgPT09IG5leHRQZXJjZW50KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGF0YXNldHM6IHtcbiAgICAgIC4uLnN0YXRlLmRhdGFzZXRzLFxuICAgICAgW2RhdGFJZF06IHBhdGNoRGF0YXNldE1ldGFkYXRhKGRhdGFzZXQsIHtyZWZyZXNoUHJvZ3Jlc3M6IG5leHRQZXJjZW50fSlcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGZpZWxkTmFtZXNFcXVhbChjdXJyZW50OiB7bmFtZTogc3RyaW5nfVtdLCBpbmNvbWluZz86IHtuYW1lOiBzdHJpbmd9W10gfCBudWxsKTogYm9vbGVhbiB7XG4gIGlmICghaW5jb21pbmc/Lmxlbmd0aCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChjdXJyZW50Lmxlbmd0aCAhPT0gaW5jb21pbmcubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBjdXJyZW50LmV2ZXJ5KChmaWVsZCwgaSkgPT4gZmllbGQubmFtZSA9PT0gaW5jb21pbmdbaV0ubmFtZSk7XG59XG5cbi8qKlxuICogV2hlbiBhIHJlbW90ZSBzbmFwc2hvdCBjaGFuZ2VzIGNvbHVtbiBuYW1lcywgb2xkIGxheWVyIGZpZWxkSWR4IC8gZmlsdGVyIG5hbWVzXG4gKiBjYW4gcG9pbnQgYXQgdGhlIHdyb25nIGNvbHVtbi4gUmUtYmluZCBieSBuYW1lIGFuZCBkcm9wIGNvbmZpZ3MgdGhhdCBubyBsb25nZXIgZml0LlxuICovXG5mdW5jdGlvbiByZWJpbmRMYXllcnNBbmRGaWx0ZXJzQWZ0ZXJTY2hlbWFDaGFuZ2UoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgZGF0YUlkOiBzdHJpbmcsXG4gIGRhdGFzZXRzOiBWaXNTdGF0ZVsnZGF0YXNldHMnXVxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gZGF0YXNldHNbZGF0YUlkXTtcbiAgY29uc3QgbmV4dExheWVyczogTGF5ZXJbXSA9IFtdO1xuICBjb25zdCBkcm9wcGVkTGF5ZXJzOiBMYXllcltdID0gW107XG5cbiAgc3RhdGUubGF5ZXJzLmZvckVhY2gobGF5ZXIgPT4ge1xuICAgIGlmIChsYXllci5jb25maWcuZGF0YUlkICE9PSBkYXRhSWQpIHtcbiAgICAgIG5leHRMYXllcnMucHVzaChsYXllcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJlYm91bmQgPSB2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YShkYXRhc2V0LCBzdGF0ZS5sYXllckNsYXNzZXMsIGxheWVyLCBzdGF0ZS5zY2hlbWEpO1xuICAgIGlmIChyZWJvdW5kPy5pc1ZhbGlkVG9TYXZlKCkpIHtcbiAgICAgIG5leHRMYXllcnMucHVzaChyZWJvdW5kKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZHJvcHBlZExheWVycy5wdXNoKGxheWVyKTtcbiAgICB9XG4gIH0pO1xuXG4gIGxldCBuZXh0TGF5ZXJPcmRlciA9IHN0YXRlLmxheWVyT3JkZXI7XG4gIGxldCBuZXh0U3BsaXRNYXBzID0gc3RhdGUuc3BsaXRNYXBzO1xuICBkcm9wcGVkTGF5ZXJzLmZvckVhY2gobGF5ZXIgPT4ge1xuICAgIG5leHRMYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKG5leHRMYXllck9yZGVyLCBsYXllci5pZCk7XG4gICAgbmV4dFNwbGl0TWFwcyA9IHJlbW92ZUxheWVyRnJvbVNwbGl0TWFwcyhuZXh0U3BsaXRNYXBzLCBsYXllcik7XG4gIH0pO1xuXG4gIGNvbnN0IG5leHRMYXllckRhdGEgPSBuZXh0TGF5ZXJzLm1hcChsYXllciA9PiB7XG4gICAgY29uc3Qgb2xkSWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChvbGRMYXllciA9PiBvbGRMYXllci5pZCA9PT0gbGF5ZXIuaWQpO1xuICAgIHJldHVybiBvbGRJZHggPj0gMCA/IHN0YXRlLmxheWVyRGF0YVtvbGRJZHhdIDoge307XG4gIH0pO1xuXG4gIGNvbnN0IGZpbHRlcnNGb3JEYXRhc2V0ID0gc3RhdGUuZmlsdGVycy5maWx0ZXIoZmlsdGVyID0+IHRvQXJyYXkoZmlsdGVyLmRhdGFJZCkuaW5jbHVkZXMoZGF0YUlkKSk7XG4gIGNvbnN0IG90aGVyRmlsdGVycyA9IHN0YXRlLmZpbHRlcnMuZmlsdGVyKGZpbHRlciA9PiAhdG9BcnJheShmaWx0ZXIuZGF0YUlkKS5pbmNsdWRlcyhkYXRhSWQpKTtcblxuICBjb25zdCB7dmFsaWRhdGVkLCB1cGRhdGVkRGF0YXNldHN9ID0gdmFsaWRhdGVGaWx0ZXJzVXBkYXRlRGF0YXNldHMoXG4gICAgey4uLnN0YXRlLCBkYXRhc2V0cywgbGF5ZXJzOiBuZXh0TGF5ZXJzfSxcbiAgICBmaWx0ZXJzRm9yRGF0YXNldFxuICApO1xuXG4gIGNvbnN0IG5leHRGaWx0ZXJzID0gWy4uLm90aGVyRmlsdGVycywgLi4udmFsaWRhdGVkXTtcbiAgY29uc3QgZmlsdGVyZWREYXRhc2V0cyA9IGFwcGx5RmlsdGVyc1RvRGF0YXNldHMoXG4gICAgW2RhdGFJZF0sXG4gICAgdXBkYXRlZERhdGFzZXRzLFxuICAgIG5leHRGaWx0ZXJzLFxuICAgIG5leHRMYXllcnNcbiAgKTtcblxuICBsZXQgbmV4dFN0YXRlOiBWaXNTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czogZmlsdGVyZWREYXRhc2V0cyxcbiAgICBsYXllcnM6IG5leHRMYXllcnMsXG4gICAgbGF5ZXJEYXRhOiBuZXh0TGF5ZXJEYXRhLFxuICAgIGxheWVyT3JkZXI6IG5leHRMYXllck9yZGVyLFxuICAgIHNwbGl0TWFwczogbmV4dFNwbGl0TWFwcyxcbiAgICBmaWx0ZXJzOiBuZXh0RmlsdGVyc1xuICB9O1xuICBuZXh0U3RhdGUgPSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobmV4dFN0YXRlLCBbZGF0YUlkXSwgdW5kZWZpbmVkKTtcbiAgcmV0dXJuIHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXh0U3RhdGUpO1xufVxuXG4vKipcbiAqIEFwcGx5IGEgZmluaXNoZWQgcmVtb3RlIHJlZnJlc2g6IGtlZXAgbGF5ZXJzLCByZS1ydW4gZmlsdGVycyBhbmQgbGF5ZXIgZGF0YS5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWZyZXNoRGF0YXNldFN1Y2Nlc3NVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIHJlc3VsdH06IFZpc1N0YXRlQWN0aW9ucy5SZWZyZXNoRGF0YXNldFN1Y2Nlc3NVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBtZXRhZGF0YVBhdGNoID0ge1xuICAgIHJlZnJlc2hTdGF0dXM6ICdpZGxlJyxcbiAgICByZWZyZXNoRXJyb3I6IHVuZGVmaW5lZCxcbiAgICByZWZyZXNoUHJvZ3Jlc3M6IHVuZGVmaW5lZCxcbiAgICBsYXN0RmV0Y2hlZEF0OiBEYXRlLm5vdygpLFxuICAgIC8vIEFsd2F5cyB3cml0ZSB2YWxpZGF0b3JzLiBBIDIwMCB0aGF0IG9taXRzIHRoZW0gbXVzdCBub3Qga2VlcCB0aGUgcHJldmlvdXNcbiAgICAvLyBFVGFnIG9yIGEgbGF0ZXIgMzA0IGNhbiBza2lwIGEgYm9keSB3ZSBubyBsb25nZXIgaGF2ZS5cbiAgICBldGFnOiByZXN1bHQuZXRhZyxcbiAgICBsYXN0TW9kaWZpZWQ6IHJlc3VsdC5sYXN0TW9kaWZpZWQsXG4gICAgLi4uKHR5cGVvZiByZXN1bHQuc2l6ZSA9PT0gJ251bWJlcicgPyB7c2l6ZTogcmVzdWx0LnNpemV9IDoge30pXG4gIH07XG5cbiAgY29uc3Qgc2NoZW1hVW5jaGFuZ2VkID0gZmllbGROYW1lc0VxdWFsKGRhdGFzZXQuZmllbGRzLCByZXN1bHQuZGF0YT8uZmllbGRzKTtcblxuICAvLyBBcHBseSB0aGUgc25hcHNob3QgdG8gdGhlIHRhYmxlIGN1cnJlbnRseSBpbiB0aGUgc3RvcmUuIFByb2dyZXNzIG1heSBoYXZlXG4gIC8vIGNvcGllZCBpdCBvZmYgdGhlIG9iamVjdCB0aGF0IHN0YXJ0ZWQgdGhlIGZldGNoOyB0aGUgdGFzayBuZXZlciBtdXRhdGVzIGl0LlxuICBpZiAoIXJlc3VsdC5ub3RNb2RpZmllZCAmJiByZXN1bHQuZGF0YSkge1xuICAgIC8vIEtlcGxlclRhYmxlLnVwZGF0ZSBpcyBhc3luYyBzbyBEdWNrREIgY2FuIGF3YWl0IEFycm93IGNvbnZlcnNpb24uIFRoZVxuICAgIC8vIENTVi9HZW9KU09OIHBhdGggKGFuZCBLZXBsZXJUYWJsZS5pbXBvcnREYXRhKSBydW4gc3luY2hyb25vdXNseSBiZWZvcmVcbiAgICAvLyB0aGUgZmlyc3QgYXdhaXQsIHNvIHRoZSBzdG9yZSB0YWJsZSBpcyB1cGRhdGVkIGJlZm9yZSB3ZSBjb3B5IGl0IGJlbG93LlxuICAgIHZvaWQgZGF0YXNldC51cGRhdGUocmVzdWx0LmRhdGEpO1xuICB9XG5cbiAgY29uc3QgcmVmcmVzaGVkID0gcGF0Y2hEYXRhc2V0TWV0YWRhdGEoZGF0YXNldCwgbWV0YWRhdGFQYXRjaCk7XG4gIGNvbnN0IGRhdGFzZXRzID0ge1xuICAgIC4uLnN0YXRlLmRhdGFzZXRzLFxuICAgIFtkYXRhSWRdOiByZWZyZXNoZWRcbiAgfTtcblxuICBpZiAocmVzdWx0Lm5vdE1vZGlmaWVkIHx8ICFyZXN1bHQuZGF0YSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGRhdGFzZXRzXG4gICAgfTtcbiAgfVxuXG4gIGlmICghc2NoZW1hVW5jaGFuZ2VkKSB7XG4gICAgcmV0dXJuIHJlYmluZExheWVyc0FuZEZpbHRlcnNBZnRlclNjaGVtYUNoYW5nZShzdGF0ZSwgZGF0YUlkLCBkYXRhc2V0cyk7XG4gIH1cblxuICByZXR1cm4gcmVhcHBseUZpbHRlcnNBbmRMYXllckRhdGEoey4uLnN0YXRlLCBkYXRhc2V0c30sIGRhdGFJZCk7XG59XG5cbmZ1bmN0aW9uIHJlYXBwbHlGaWx0ZXJzQW5kTGF5ZXJEYXRhKHN0YXRlOiBWaXNTdGF0ZSwgZGF0YUlkOiBzdHJpbmcpOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGZpbHRlcmVkRGF0YXNldHMgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKFxuICAgIFtkYXRhSWRdLFxuICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgIHN0YXRlLmZpbHRlcnMsXG4gICAgc3RhdGUubGF5ZXJzXG4gICk7XG4gIGxldCBuZXh0U3RhdGU6IFZpc1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiBmaWx0ZXJlZERhdGFzZXRzXG4gIH07XG4gIG5leHRTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXh0U3RhdGUsIFtkYXRhSWRdLCB1bmRlZmluZWQpO1xuICByZXR1cm4gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5leHRTdGF0ZSk7XG59XG5cbmZ1bmN0aW9uIGlzRGF0YXNldFJvd0xpc3QoXG4gIHJvd3M6IFZpc1N0YXRlQWN0aW9ucy5EYXRhc2V0Um93IHwgVmlzU3RhdGVBY3Rpb25zLkRhdGFzZXRSb3dbXVxuKTogcm93cyBpcyBWaXNTdGF0ZUFjdGlvbnMuRGF0YXNldFJvd1tdIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHJvd3MpIHx8ICFyb3dzLmxlbmd0aCkge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHJvd3MpO1xuICB9XG4gIC8vIEEgc2luZ2xlIGNvbHVtbi1vcmRlcmVkIHJvdyBpcyBhbiBhcnJheSBvZiBwcmltaXRpdmVzOyBhIGxpc3Qgb2Ygcm93cyBpc1xuICAvLyBhbiBhcnJheSBvZiBhcnJheXMgb3IgYW4gYXJyYXkgb2YgZmllbGQtbmFtZSByZWNvcmRzLlxuICByZXR1cm4gQXJyYXkuaXNBcnJheShyb3dzWzBdKSB8fCBpc1BsYWluT2JqZWN0KHJvd3NbMF0pO1xufVxuXG5mdW5jdGlvbiB0b0FycmF5Um93KHJvdzogVmlzU3RhdGVBY3Rpb25zLkRhdGFzZXRSb3csIGZpZWxkczogRmllbGRbXSk6IGFueVtdIHwgbnVsbCB7XG4gIGlmIChBcnJheS5pc0FycmF5KHJvdykpIHtcbiAgICByZXR1cm4gcm93Lmxlbmd0aCA9PT0gZmllbGRzLmxlbmd0aCA/IHJvdyA6IG51bGw7XG4gIH1cbiAgaWYgKGlzUGxhaW5PYmplY3Qocm93KSkge1xuICAgIGNvbnN0IHJlY29yZCA9IHJvdyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICByZXR1cm4gZmllbGRzLm1hcChmaWVsZCA9PlxuICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlY29yZCwgZmllbGQubmFtZSkgPyByZWNvcmRbZmllbGQubmFtZV0gOiBudWxsXG4gICAgKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplRGF0YXNldFJvd3MoXG4gIHJvd3M6IFZpc1N0YXRlQWN0aW9ucy5EYXRhc2V0Um93IHwgVmlzU3RhdGVBY3Rpb25zLkRhdGFzZXRSb3dbXSxcbiAgZmllbGRzOiBGaWVsZFtdXG4pOiBhbnlbXVtdIHwgbnVsbCB7XG4gIGlmICghZmllbGRzLmxlbmd0aCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IGxpc3QgPSBpc0RhdGFzZXRSb3dMaXN0KHJvd3MpID8gcm93cyA6IFtyb3dzXTtcbiAgaWYgKCFsaXN0Lmxlbmd0aCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IG5vcm1hbGl6ZWQ6IGFueVtdW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgYXJyYXlSb3cgPSB0b0FycmF5Um93KGxpc3RbaV0sIGZpZWxkcyk7XG4gICAgaWYgKCFhcnJheVJvdykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIG5vcm1hbGl6ZWQucHVzaChhcnJheVJvdyk7XG4gIH1cbiAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG59XG5cbi8qKlxuICogQXBwZW5kIG9yIHVwc2VydCByb3dzIG9uIGFuIGV4aXN0aW5nIGluLW1lbW9yeSByb3cgZGF0YXNldC4gS2VlcHMgbGF5ZXJzIGFuZCByZS1ydW5zIGZpbHRlcnMuXG4gKiBBcnJvdy9EdWNrREIgdGFibGVzIHdhcm4gYW5kIGFyZSBsZWZ0IHVuY2hhbmdlZCAoSU5TRVJUIC8gY29uY2F0IG5vdCBpbXBsZW1lbnRlZCkuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkVG9EYXRhc2V0VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCByb3dzLCBvcHRpb25zfTogVmlzU3RhdGVBY3Rpb25zLkFkZFRvRGF0YXNldFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVEYXRhc2V0Um93cyhyb3dzLCBkYXRhc2V0LmZpZWxkcyk7XG4gIGlmICghbm9ybWFsaXplZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGFwcGxpZWQgPSBvcHRpb25zPy51cHNlcnRCeVxuICAgID8gZGF0YXNldC51cHNlcnRSb3dzKG5vcm1hbGl6ZWQsIG9wdGlvbnMudXBzZXJ0QnkpXG4gICAgOiBkYXRhc2V0LmFwcGVuZFJvd3Mobm9ybWFsaXplZCk7XG4gIGlmICghYXBwbGllZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGRhdGFzZXRzID0ge1xuICAgIC4uLnN0YXRlLmRhdGFzZXRzLFxuICAgIFtkYXRhSWRdOiBjb3B5VGFibGVBbmRVcGRhdGUoZGF0YXNldCwge30pXG4gIH07XG4gIHJldHVybiByZWFwcGx5RmlsdGVyc0FuZExheWVyRGF0YSh7Li4uc3RhdGUsIGRhdGFzZXRzfSwgZGF0YUlkKTtcbn1cblxuLyoqXG4gKiBEZWxldGUgcm93cyBieSBpbmRleCBvciBieSBmaWVsZCB2YWx1ZXMgZnJvbSBhbiBleGlzdGluZyBpbi1tZW1vcnkgcm93IGRhdGFzZXQuXG4gKiBLZWVwcyBsYXllcnMuIEFycm93L0R1Y2tEQiB0YWJsZXMgd2FybiBhbmQgYXJlIGxlZnQgdW5jaGFuZ2VkLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUZyb21EYXRhc2V0VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCByb3dJbmRleGVzLCBieUZpZWxkfTogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUZyb21EYXRhc2V0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgaW5kZXhlcyA9IGJ5RmllbGRcbiAgICA/IGRhdGFzZXQuZmluZFJvd0luZGV4ZXNCeUZpZWxkVmFsdWVzKGJ5RmllbGQuZmllbGQsIHRvQXJyYXkoYnlGaWVsZC52YWx1ZXMpKVxuICAgIDogdG9BcnJheShyb3dJbmRleGVzID8/IFtdKTtcbiAgaWYgKCFpbmRleGVzLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAoIWRhdGFzZXQucmVtb3ZlUm93cyhpbmRleGVzKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGRhdGFzZXRzID0ge1xuICAgIC4uLnN0YXRlLmRhdGFzZXRzLFxuICAgIFtkYXRhSWRdOiBjb3B5VGFibGVBbmRVcGRhdGUoZGF0YXNldCwge30pXG4gIH07XG4gIHJldHVybiByZWFwcGx5RmlsdGVyc0FuZExheWVyRGF0YSh7Li4uc3RhdGUsIGRhdGFzZXRzfSwgZGF0YUlkKTtcbn1cblxuLyoqXG4gKiBSZWNvcmQgYSBmYWlsZWQgcmVtb3RlIGRhdGFzZXQgcmVmcmVzaCB3aXRob3V0IGRyb3BwaW5nIGV4aXN0aW5nIHJvd3MuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVmcmVzaERhdGFzZXRFcnJvclVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgZXJyb3J9OiBWaXNTdGF0ZUFjdGlvbnMuUmVmcmVzaERhdGFzZXRFcnJvclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czoge1xuICAgICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgICBbZGF0YUlkXTogcGF0Y2hEYXRhc2V0TWV0YWRhdGEoZGF0YXNldCwge1xuICAgICAgICByZWZyZXNoU3RhdHVzOiAnZXJyb3InLFxuICAgICAgICByZWZyZXNoRXJyb3I6IGVycm9yPy5tZXNzYWdlIHx8IFN0cmluZyhlcnJvciksXG4gICAgICAgIHJlZnJlc2hQcm9ncmVzczogdW5kZWZpbmVkXG4gICAgICB9KVxuICAgIH1cbiAgfTtcblxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG4vKipcbiAqIEFkZCBuZXcgZGF0YXNldCB0byBgdmlzU3RhdGVgLCB3aXRoIG9wdGlvbiB0byBsb2FkIGEgbWFwIGNvbmZpZyBhbG9uZyB3aXRoIHRoZSBkYXRhc2V0c1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmV4cG9ydCBjb25zdCB1cGRhdGVWaXNEYXRhVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVWaXNEYXRhVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICAvLyBkYXRhc2V0cyBjYW4gYmUgYSBzaW5nbGUgZGF0YSBlbnRyaWVzIG9yIGFuIGFycmF5IG9mIG11bHRpcGxlIGRhdGEgZW50cmllc1xuICBjb25zdCB7Y29uZmlnLCBvcHRpb25zfSA9IGFjdGlvbjtcblxuICAvLyBhcHBseSBjb25maWcgaWYgcGFzc2VkIGZyb20gYWN0aW9uXG4gIC8vIFRPRE86IHdlIGRvbid0IGhhbmRsZSBhc3luYyBtZXJnZXJzIGhlcmUgeWV0XG4gIGxldCB1cGRhdGVkU3RhdGUgPSBjb25maWdcbiAgICA/IHJlY2VpdmVNYXBDb25maWdVcGRhdGVyKHN0YXRlLCB7XG4gICAgICAgIHBheWxvYWQ6IHtjb25maWcsIG9wdGlvbnN9XG4gICAgICB9KVxuICAgIDogc3RhdGU7XG5cbiAgY29uc3QgZGF0YXNldHMgPSB0b0FycmF5KGFjdGlvbi5kYXRhc2V0cyk7XG4gIGlmICghZGF0YXNldHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHVwZGF0ZWRTdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGNyZWF0ZURhdGFzZXRUYXNrczogVGFza1tdID0gW107XG4gIGNvbnN0IG5vdGlmaWNhdGlvblRhc2tzOiBUYXNrW10gPSBbXTtcblxuICBkYXRhc2V0cy5mb3JFYWNoKCh7aW5mbyA9IHt9LCAuLi5yZXN0fSwgZGF0YXNldEluZGV4KSA9PiB7XG4gICAgY29uc3QgdGFzayA9IGNyZWF0ZU5ld0RhdGFFbnRyeVRhc2soe2luZm8sIC4uLnJlc3R9LCBzdGF0ZS5kYXRhc2V0cyk7XG4gICAgaWYgKHRhc2spIHtcbiAgICAgIGNyZWF0ZURhdGFzZXRUYXNrcy5wdXNoKHRhc2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBub3RpZmljYXRpb25UYXNrcy5wdXNoKFxuICAgICAgICBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OKCkubWFwKCgpID0+XG4gICAgICAgICAgYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBkYXRhc2V0IGR1ZSB0byBkYXRhIHZlcmlmaWNhdGlvbiBlcnJvcnNgLFxuICAgICAgICAgICAgICBpZDogYGRhdGFzZXQtZmFpbGVkLSR7ZGF0YXNldEluZGV4fWBcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgZGF0YXNldHNBbGxTZXR0bGVkVGFzayA9IGNyZWF0ZURhdGFzZXRUYXNrcy5sZW5ndGhcbiAgICA/IFRhc2suYWxsU2V0dGxlZChjcmVhdGVEYXRhc2V0VGFza3MpLm1hcChyZXN1bHRzID0+XG4gICAgICAgIGNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzKHtyZXN1bHRzLCBhZGRUb01hcE9wdGlvbnM6IG9wdGlvbnN9KVxuICAgICAgKVxuICAgIDogbnVsbDtcblxuICBpZiAoZGF0YXNldHNBbGxTZXR0bGVkVGFzaykge1xuICAgIHVwZGF0ZWRTdGF0ZSA9IHNldExvYWRpbmdJbmRpY2F0b3JVcGRhdGVyKHVwZGF0ZWRTdGF0ZSwgcGF5bG9hZF8oe2NoYW5nZTogMSwgdHlwZTogJyd9KSk7XG4gIH1cblxuICByZXR1cm4gd2l0aFRhc2sodXBkYXRlZFN0YXRlLCBbXG4gICAgLi4uKGRhdGFzZXRzQWxsU2V0dGxlZFRhc2sgPyBbZGF0YXNldHNBbGxTZXR0bGVkVGFza10gOiBbXSksXG4gICAgLi4ubm90aWZpY2F0aW9uVGFza3NcbiAgXSk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3NVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogUGF5bG9hZEFjdGlvbjxDcmVhdGVOZXdEYXRhc2V0U3VjY2Vzc1BheWxvYWQ+XG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtyZXN1bHRzLCBhZGRUb01hcE9wdGlvbnN9ID0gYWN0aW9uLnBheWxvYWQ7XG4gIGNvbnN0IG5vdGlmaWNhdGlvblRhc2tzOiBUYXNrW10gPSBbXTtcblxuICBjb25zdCBuZXdEYXRhRW50cmllcyA9IHJlc3VsdHMucmVkdWNlKChhY2N1LCByZXN1bHQsIGlkeCkgPT4ge1xuICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSAnZnVsZmlsbGVkJykge1xuICAgICAgY29uc3QgZGF0YXNldCA9IHJlc3VsdC52YWx1ZTtcbiAgICAgIHJldHVybiB7Li4uYWNjdSwgW2RhdGFzZXQuaWRdOiBkYXRhc2V0fTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gc2hvdyBlcnJvciBub3RpZmljYXRpb24gb24gVUlcbiAgICAgIG5vdGlmaWNhdGlvblRhc2tzLnB1c2goXG4gICAgICAgIEFDVElPTl9UQVNLKCkubWFwKCgpID0+XG4gICAgICAgICAgYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgICBtZXNzYWdlOiBgRGF0YXNldCBlcnJvcjogRmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBkYXRhc2V0OlxuICAgICAgICAgICAgICAke3Jlc3VsdC5yZWFzb24gfHwgKHJlc3VsdCBhcyBhbnkpLnZhbHVlfWAsXG4gICAgICAgICAgICAgIGlkOiBgZGF0YXNldC1jcmVhdGUtZmFpbGVkLSR7aWR4fWBcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApO1xuICAgICAgcmV0dXJuIGFjY3U7XG4gICAgfVxuICB9LCB7fSBhcyBEYXRhc2V0cyk7XG4gIC8vIHNhdmUgbmV3IGRhdGFzZXQgZW50cnkgdG8gc3RhdGVcbiAgY29uc3QgbWVyZ2VkU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGF0YXNldHM6IG1lcmdlRGF0YXNldHNCeU9yZGVyKHN0YXRlLCBuZXdEYXRhRW50cmllcylcbiAgfTtcblxuICAvLyBtZXJnZSBzdGF0ZSB3aXRoIGNvbmZpZyB0byBiZSBtZXJnZWRcbiAgY29uc3QgbGF5ZXJNZXJnZXJzID0gc3RhdGUubWVyZ2Vycy5maWx0ZXIobSA9PiBtLndhaXRGb3JMYXllckRhdGEpO1xuICBjb25zdCBkYXRhc2V0TWVyZ2VycyA9IHN0YXRlLm1lcmdlcnMuZmlsdGVyKG0gPT4gIWxheWVyTWVyZ2Vycy5pbmNsdWRlcyhtKSk7XG5cbiAgY29uc3QgbmV3RGF0YUlkcyA9IE9iamVjdC5rZXlzKG5ld0RhdGFFbnRyaWVzKTtcbiAgY29uc3QgcG9zdE1lcmdlclBheWxvYWQgPSB7XG4gICAgbmV3RGF0YUlkcyxcbiAgICBvcHRpb25zOiBhZGRUb01hcE9wdGlvbnMsXG4gICAgbGF5ZXJNZXJnZXJzXG4gIH07XG5cbiAgY29uc3QgdXBkYXRlZFN0YXRlID0gYXBwbHlNZXJnZXJzVXBkYXRlcihtZXJnZWRTdGF0ZSwge1xuICAgIG1lcmdlcnM6IGRhdGFzZXRNZXJnZXJzLFxuICAgIHBvc3RNZXJnZXJQYXlsb2FkXG4gIH0pO1xuXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBzZXRMb2FkaW5nSW5kaWNhdG9yVXBkYXRlcih1cGRhdGVkU3RhdGUsIHBheWxvYWRfKHtjaGFuZ2U6IC0xfSkpLFxuICAgIG5vdGlmaWNhdGlvblRhc2tzXG4gICk7XG59O1xuXG4vKipcbiAqIEFkZCBuZXcgZGF0YXNldCB0byBgdmlzU3RhdGVgLCB3aXRoIG9wdGlvbiB0byBsb2FkIGEgbWFwIGNvbmZpZyBhbG9uZyB3aXRoIHRoZSBkYXRhc2V0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlNZXJnZXJzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IHtcbiAgICBtZXJnZXJzOiBNZXJnZXI8YW55PltdO1xuICAgIHBvc3RNZXJnZXJQYXlsb2FkOiBQb3N0TWVyZ2VyUGF5bG9hZDtcbiAgfVxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7bWVyZ2VycywgcG9zdE1lcmdlclBheWxvYWR9ID0gYWN0aW9uO1xuXG4gIC8vIG1lcmdlIHN0YXRlIHdpdGggY29uZmlnIHRvIGJlIG1lcmdlZFxuICBjb25zdCBtZXJnZVN0YXRlUmVzdWx0ID0gbWVyZ2VTdGF0ZUZyb21NZXJnZXJzKFxuICAgIHN0YXRlLFxuICAgIHtcbiAgICAgIC4uLklOSVRJQUxfVklTX1NUQVRFLFxuICAgICAgLi4uc3RhdGUuaW5pdGlhbFN0YXRlXG4gICAgfSxcbiAgICBtZXJnZXJzLFxuICAgIC8vIG5ld0RhdGFJZHMsXG4gICAgcG9zdE1lcmdlclBheWxvYWRcbiAgKTtcblxuICAvLyBpZiBhbGwgbWVyZ2VkLCBraWNrdXAgcG9zdCBtZXJnZSBwcm9jZXNzXG4gIC8vIGlmIG5vdCB3YWl0XG4gIHJldHVybiBtZXJnZVN0YXRlUmVzdWx0LmFsbE1lcmdlZFxuICAgID8gcG9zdE1lcmdlVXBkYXRlcihtZXJnZVN0YXRlUmVzdWx0Lm1lcmdlZFN0YXRlLCBwb3N0TWVyZ2VyUGF5bG9hZClcbiAgICA6IG1lcmdlU3RhdGVSZXN1bHQubWVyZ2VkU3RhdGU7XG59XG5cbi8qKiBSZWFkcyBgb3B0aW9ucy5sYXllclZpc0NvbmZpZ2AgZnJvbSBhZGQtZGF0YS10by1tYXAgKHNlZSBgQWRkRGF0YVRvTWFwT3B0aW9uc2ApLiAqL1xuZnVuY3Rpb24gbGF5ZXJWaXNDb25maWdGcm9tQWRkRGF0YU9wdGlvbnMoXG4gIG9wdGlvbnM6IFBvc3RNZXJnZXJQYXlsb2FkWydvcHRpb25zJ10gfCB1bmRlZmluZWRcbik6IFBhcnRpYWw8TGF5ZXJWaXNDb25maWc+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFvcHRpb25zIHx8ICEoJ2xheWVyVmlzQ29uZmlnJyBpbiBvcHRpb25zKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcGF0Y2ggPSAob3B0aW9ucyBhcyB7bGF5ZXJWaXNDb25maWc/OiB1bmtub3dufSkubGF5ZXJWaXNDb25maWc7XG4gIGlmIChwYXRjaCA9PSBudWxsIHx8IHR5cGVvZiBwYXRjaCAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShwYXRjaCkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiBwYXRjaCBhcyBQYXJ0aWFsPExheWVyVmlzQ29uZmlnPjtcbn1cblxuLyoqXG4gKiBQb2x5Z29uIGZpbHRlcnMgZm9yIHRoZXNlIGxheWVycyB1c2UgY2VudHJvaWRzIC8gZGF0YVRvRmVhdHVyZSBmcm9tXG4gKiBjYWxjdWxhdGVMYXllckRhdGEuIE90aGVyIHR5cGVzIChsYXQvbG5nIHBvaW50cywgSDMsIGFyY3MpIGNhbiBmaWx0ZXJcbiAqIGZyb20gY29sdW1ucyBvbiB0aGUgZmlyc3QgcGFzcyBhbmQgbXVzdCBub3QgYmUgcmVjYWxjdWxhdGVkIGhlcmUuXG4gKi9cbmZ1bmN0aW9uIHBvbHlnb25GaWx0ZXJEZXBlbmRzT25MYXllck1ldGEobGF5ZXI6IExheWVyKTogYm9vbGVhbiB7XG4gIHJldHVybiBsYXllci50eXBlID09PSBMQVlFUl9UWVBFUy5nZW9qc29uIHx8IGxheWVyLmNvbmZpZz8uY29sdW1uTW9kZSA9PT0gJ2dlb2pzb24nO1xufVxuXG4vKipcbiAqIEFkZCBuZXcgZGF0YXNldCB0byBgdmlzU3RhdGVgLCB3aXRoIG9wdGlvbiB0byBsb2FkIGEgbWFwIGNvbmZpZyBhbG9uZyB3aXRoIHRoZSBkYXRhc2V0c1xuICovXG5mdW5jdGlvbiBwb3N0TWVyZ2VVcGRhdGVyKG1lcmdlZFN0YXRlOiBWaXNTdGF0ZSwgcG9zdE1lcmdlclBheWxvYWQ6IFBvc3RNZXJnZXJQYXlsb2FkKTogVmlzU3RhdGUge1xuICBjb25zdCB7bmV3RGF0YUlkcywgb3B0aW9ucywgbGF5ZXJNZXJnZXJzfSA9IHBvc3RNZXJnZXJQYXlsb2FkO1xuICBjb25zdCBuZXdGaWx0ZXJzID0gbWVyZ2VkU3RhdGUuZmlsdGVycy5maWx0ZXIoZiA9PlxuICAgIGYuZGF0YUlkLmZpbmQoZkRhdGFJZCA9PiBuZXdEYXRhSWRzLmluY2x1ZGVzKGZEYXRhSWQpKVxuICApO1xuICBjb25zdCBkYXRhc2V0RmlsdGVyZWQ6IHN0cmluZ1tdID0gdW5pcShcbiAgICBuZXdGaWx0ZXJzLnJlZHVjZSgoYWNjdSwgZikgPT4gWy4uLmFjY3UsIC4uLmYuZGF0YUlkXSwgW10gYXMgc3RyaW5nW10pXG4gICk7XG4gIGNvbnN0IGRhdGFFbXB0eSA9IG5ld0RhdGFJZHMubGVuZ3RoIDwgMTtcblxuICBsZXQgbmV3TGF5ZXJzID0gIWRhdGFFbXB0eVxuICAgID8gbWVyZ2VkU3RhdGUubGF5ZXJzLmZpbHRlcihsID0+IGwuY29uZmlnLmRhdGFJZCAmJiBuZXdEYXRhSWRzLmluY2x1ZGVzKGwuY29uZmlnLmRhdGFJZCkpXG4gICAgOiBbXTtcblxuICBjb25zdCBuZXdEYXRhRW50cmllcyA9IG5ld0RhdGFJZHMucmVkdWNlKFxuICAgIChhY2N1LCBpZCkgPT4gKHtcbiAgICAgIC4uLmFjY3UsXG4gICAgICBbaWRdOiBtZXJnZWRTdGF0ZS5kYXRhc2V0c1tpZF1cbiAgICB9KSxcbiAgICB7fVxuICApO1xuXG4gIGlmICghbmV3TGF5ZXJzLmxlbmd0aCAmJiAob3B0aW9ucyB8fCB7fSkuYXV0b0NyZWF0ZUxheWVycyAhPT0gZmFsc2UpIHtcbiAgICAvLyBubyBsYXllciBtZXJnZWQsIGZpbmQgZGVmYXVsdHNcbiAgICBjb25zdCByZXN1bHQgPSBhZGREZWZhdWx0TGF5ZXJzKG1lcmdlZFN0YXRlLCBuZXdEYXRhRW50cmllcyk7XG4gICAgbWVyZ2VkU3RhdGUgPSByZXN1bHQuc3RhdGU7XG4gICAgbmV3TGF5ZXJzID0gcmVzdWx0Lm5ld0xheWVycztcbiAgfVxuXG4gIGlmIChtZXJnZWRTdGF0ZS5zcGxpdE1hcHMubGVuZ3RoKSB7XG4gICAgLy8gaWYgbWFwIGlzIHNwbGl0LCBhZGQgbmV3IGxheWVycyB0byBzcGxpdE1hcHNcbiAgICBuZXdMYXllcnMgPSBtZXJnZWRTdGF0ZS5sYXllcnMuZmlsdGVyKFxuICAgICAgbCA9PiBsLmNvbmZpZy5kYXRhSWQgJiYgbmV3RGF0YUlkcy5pbmNsdWRlcyhsLmNvbmZpZy5kYXRhSWQpXG4gICAgKTtcbiAgICBtZXJnZWRTdGF0ZSA9IHtcbiAgICAgIC4uLm1lcmdlZFN0YXRlLFxuICAgICAgc3BsaXRNYXBzOiBhZGROZXdMYXllcnNUb1NwbGl0TWFwKG1lcmdlZFN0YXRlLnNwbGl0TWFwcywgbmV3TGF5ZXJzKVxuICAgIH07XG4gIH1cblxuICBtZXJnZWRTdGF0ZSA9IG1lcmdlTGF5ZXJWaXNDb25maWdGb3JOZXdEYXRhc2V0cyhcbiAgICBtZXJnZWRTdGF0ZSxcbiAgICBsYXllclZpc0NvbmZpZ0Zyb21BZGREYXRhT3B0aW9ucyhvcHRpb25zKSxcbiAgICBuZXdEYXRhSWRzXG4gICk7XG5cbiAgLy8gaWYgbm8gdG9vbHRpcHMgbWVyZ2VkIGFkZCBkZWZhdWx0IHRvb2x0aXBzXG4gIG5ld0RhdGFJZHMuZm9yRWFjaChkYXRhSWQgPT4ge1xuICAgIGNvbnN0IHRvb2x0aXBGaWVsZHMgPSBtZXJnZWRTdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwLmNvbmZpZy5maWVsZHNUb1Nob3dbZGF0YUlkXTtcbiAgICAvLyBsb2FkaW5nIGRhdGFzZXQ6IGF1dG9DcmVhdGVUb29sdGlwcyBpcyBmYWxzZSBhbmQgd2UgZG9uJ3Qgd2FudCB0byBydW4gYWRkRGVmYXVsdFRvb2x0aXBzIHdoZW4gdG9vbHRpcEZpZWxkcyBpcyBlbXB0eVxuICAgIGlmIChcbiAgICAgIG9wdGlvbnM/LmF1dG9DcmVhdGVUb29sdGlwcyAhPT0gZmFsc2UgJiZcbiAgICAgICghQXJyYXkuaXNBcnJheSh0b29sdGlwRmllbGRzKSB8fCAhdG9vbHRpcEZpZWxkcy5sZW5ndGgpXG4gICAgKSB7XG4gICAgICAvLyBhZGRpbmcgZGF0YXNldDogYXV0b0NyZWF0ZVRvb2x0aXBzIGlzIHRydWVcbiAgICAgIG1lcmdlZFN0YXRlID0gYWRkRGVmYXVsdFRvb2x0aXBzKG1lcmdlZFN0YXRlLCBuZXdEYXRhRW50cmllc1tkYXRhSWRdKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IHVwZGF0ZWREYXRhc2V0cyA9IGRhdGFFbXB0eVxuICAgID8gT2JqZWN0LmtleXMobWVyZ2VkU3RhdGUuZGF0YXNldHMpXG4gICAgOiB1bmlxKE9iamVjdC5rZXlzKG5ld0RhdGFFbnRyaWVzKS5jb25jYXQoZGF0YXNldEZpbHRlcmVkKSk7XG5cbiAgbGV0IHVwZGF0ZWRTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShtZXJnZWRTdGF0ZSwgdXBkYXRlZERhdGFzZXRzLCB1bmRlZmluZWQpO1xuXG4gIC8vIFBvbHlnb24gcGVyLWxheWVyIGluZGV4ZXMgbmVlZCBjZW50cm9pZHMgLyBkYXRhVG9GZWF0dXJlLCB3aGljaCBhcmUgb25seVxuICAvLyBwb3B1bGF0ZWQgYnkgdGhlIGxheWVyLWRhdGEgcGFzcyBhYm92ZS4gU2tpcCBkYXRhc2V0cyB3aG9zZSB0YXJnZXRlZCBsYXllcnNcbiAgLy8gYWxyZWFkeSBmaWx0ZXJlZCBmcm9tIGNvbHVtbnMgKGUuZy4gbGF0L2xuZyBwb2ludHMpLlxuICBjb25zdCBwb2x5Z29uRmlsdGVycyA9IHVwZGF0ZWRTdGF0ZS5maWx0ZXJzLmZpbHRlcihcbiAgICBmID0+IGYudHlwZSA9PT0gRklMVEVSX1RZUEVTLnBvbHlnb24gJiYgZi5lbmFibGVkICE9PSBmYWxzZVxuICApO1xuICBjb25zdCBwb2x5Z29uTWV0YURhdGFJZHMgPSB1bmlxKFxuICAgIHVwZGF0ZWRTdGF0ZS5sYXllcnNcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIGxheWVyID0+XG4gICAgICAgICAgcG9seWdvbkZpbHRlckRlcGVuZHNPbkxheWVyTWV0YShsYXllcikgJiZcbiAgICAgICAgICBwb2x5Z29uRmlsdGVycy5zb21lKGYgPT4gZi5sYXllcklkPy5pbmNsdWRlcyhsYXllci5pZCkpXG4gICAgICApXG4gICAgICAubWFwKGxheWVyID0+IGxheWVyLmNvbmZpZy5kYXRhSWQpXG4gICAgICAuZmlsdGVyKChpZCk6IGlkIGlzIHN0cmluZyA9PiBCb29sZWFuKGlkKSAmJiB1cGRhdGVkRGF0YXNldHMuaW5jbHVkZXMoaWQpKVxuICApO1xuICBpZiAocG9seWdvbk1ldGFEYXRhSWRzLmxlbmd0aCkge1xuICAgIHVwZGF0ZWRTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShcbiAgICAgIHtcbiAgICAgICAgLi4udXBkYXRlZFN0YXRlLFxuICAgICAgICBkYXRhc2V0czogYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhcbiAgICAgICAgICBwb2x5Z29uTWV0YURhdGFJZHMsXG4gICAgICAgICAgdXBkYXRlZFN0YXRlLmRhdGFzZXRzLFxuICAgICAgICAgIHVwZGF0ZWRTdGF0ZS5maWx0ZXJzLFxuICAgICAgICAgIHVwZGF0ZWRTdGF0ZS5sYXllcnNcbiAgICAgICAgKVxuICAgICAgfSxcbiAgICAgIHBvbHlnb25NZXRhRGF0YUlkc1xuICAgICk7XG4gIH1cblxuICAvLyByZWdpc3RlciBsYXllciBhbmltYXRpb24gZG9tYWluLFxuICAvLyBuZWVkIHRvIGJlIGNhbGxlZCBhZnRlciBsYXllciBkYXRhIGlzIGNhbGN1bGF0ZWRcbiAgdXBkYXRlZFN0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKHVwZGF0ZWRTdGF0ZSk7XG5cbiAgLy8gdHJ5IHRvIHByb2Nlc3MgbGF5ZXJNZXJnZXJzIGFmdGVyIGRhdGFzZXQrZGF0YXNldE1lcmdlcnNcbiAgdXBkYXRlZFN0YXRlID1cbiAgICBsYXllck1lcmdlcnMgJiYgbGF5ZXJNZXJnZXJzLmxlbmd0aCA+IDBcbiAgICAgID8gYXBwbHlNZXJnZXJzVXBkYXRlcih1cGRhdGVkU3RhdGUsIHtcbiAgICAgICAgICBtZXJnZXJzOiBsYXllck1lcmdlcnMsXG4gICAgICAgICAgcG9zdE1lcmdlclBheWxvYWQ6IHsuLi5wb3N0TWVyZ2VyUGF5bG9hZCwgbGF5ZXJNZXJnZXJzOiBbXX1cbiAgICAgICAgfSlcbiAgICAgIDogdXBkYXRlZFN0YXRlO1xuXG4gIC8vIGNlbnRlciB0aGUgbWFwIG9uY2UgdGhlIGRhdGFzZXQgaXMgY3JlYXRlZFxuICBpZiAobmV3TGF5ZXJzLmxlbmd0aCAmJiAob3B0aW9ucyB8fCB7fSkuY2VudGVyTWFwKSB7XG4gICAgY29uc3QgYm91bmRzID0gZmluZE1hcEJvdW5kcyhuZXdMYXllcnMpO1xuICAgIGlmIChib3VuZHMpIHtcbiAgICAgIGNvbnN0IHBhZGRpbmcgPSBvcHRpb25zPy5wYWRkaW5nO1xuICAgICAgY29uc3QgZml0Qm91bmRzVGFzayA9IEFDVElPTl9UQVNLX0ZJVF9CT1VORFMoKS5tYXAoKCkgPT4ge1xuICAgICAgICByZXR1cm4gZml0TWFwQm91bmRzKGJvdW5kcywgcGFkZGluZyk7XG4gICAgICB9KTtcbiAgICAgIHVwZGF0ZWRTdGF0ZSA9IHdpdGhUYXNrKHVwZGF0ZWRTdGF0ZSwgZml0Qm91bmRzVGFzayk7XG4gICAgfVxuICB9XG5cbiAgLy8gbmVlZCB0byBjZW50ZXIgbWFwIGhlcmUgaWYgd2UgaGF2ZSBuZXcgbGF5ZXJzXG4gIHJldHVybiB1cGRhdGVkU3RhdGU7XG59XG5cbi8qKlxuICogUmVuYW1lIGFuIGV4aXN0aW5nIGRhdGFzZXQgaW4gYHZpc1N0YXRlYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmFtZURhdGFzZXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbmFtZURhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIHJldHVybiB1cGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyKHN0YXRlLCB7ZGF0YUlkOiBhY3Rpb24uZGF0YUlkLCBwcm9wczoge2xhYmVsOiBhY3Rpb24ubGFiZWx9fSk7XG59XG5cbmNvbnN0IEFMTE9XRURfVVBEQVRFX0RBVEFTRVRfUFJPUFMgPSBbJ2xhYmVsJywgJ2NvbG9yJywgJ21ldGFkYXRhJ107XG5cbi8qKlxuICogVmFsaWRhdGVzIHByb3BlcnRpZXMgYmVmb3JlIHVwZGF0aW5nIHRoZSBkYXRhc2V0LlxuICogTWFrZXMgc3VyZSBlYWNoIHByb3BlcnR5IGlzIGluIHRoZSBhbGxvd2VkIGxpc3RcbiAqIE1ha2VzIHN1cmUgY29sb3IgdmFsdWUgaXMgUkdCXG4gKiBQZXJmb3JtcyBkZWVwIG1lcmdlIHdoZW4gdXBkYXRpbmcgbWV0YWRhdGFcbiAqL1xuY29uc3QgdmFsaWRhdGVEYXRhc2V0VXBkYXRlUHJvcHMgPSAocHJvcHMsIGRhdGFzZXQpID0+IHtcbiAgY29uc3QgdmFsaWRhdGVkUHJvcHMgPSBPYmplY3QuZW50cmllcyhwcm9wcykucmVkdWNlKChhY2MsIGVudHJ5KSA9PiB7XG4gICAgY29uc3QgW2tleSwgdmFsdWVdID0gZW50cnk7XG4gICAgLy8gaXMgaXQgYWxsb3dlZCA/XG4gICAgaWYgKCFBTExPV0VEX1VQREFURV9EQVRBU0VUX1BST1BTLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuXG4gICAgLy8gaWYgd2UgYXJlIGFkZGluZyBhIGNvbG9yIGJ1dCBpdCBpcyBub3QgUkdCIHdlIGRvbid0IGFjY2VwdCB0aGUgdmFsdWVcbiAgICAvLyBpbiB0aGUgZnV0dXJlIGFzIHdlIGFkZCBtb3JlIHByb3BzIHdlIHNob3VsZCBjaGFuZ2UgdGhpcyBpZiBpbnRvIGEgc3dpdGNoXG4gICAgaWYgKGtleSA9PT0gJ2NvbG9yJyAmJiAhaXNSZ2JDb2xvcih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuXG4gICAgLy8gZG8gd2UgbmVlZCBkZWVwIG1lcmdlID9cbiAgICByZXR1cm4gey4uLmFjYywgW2tleV06IGlzUGxhaW5PYmplY3QodmFsdWUpID8gZGVlcG1lcmdlKGRhdGFzZXRba2V5XSB8fCB7fSwgdmFsdWUpIDogdmFsdWV9O1xuICB9LCB7fSk7XG5cbiAgcmV0dXJuIHZhbGlkYXRlZFByb3BzO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgRGF0YXNldCBwcm9wcyAobGFiZWwsIGNvbG9yLCBtZXRhKS4gRG8gbm90IHVzZSB0byB1cGRhdGUgZGF0YSBvciBhbnkgcmVsYXRlZCBwcm9wZXJ0aWVzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlRGF0YXNldFByb3BzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtkYXRhSWQsIHByb3BzfSA9IGFjdGlvbjtcbiAgY29uc3Qge2RhdGFzZXRzfSA9IHN0YXRlO1xuICBjb25zdCBleGlzdGluZyA9IGRhdGFzZXRzW2RhdGFJZF07XG5cbiAgaWYgKGV4aXN0aW5nKSB7XG4gICAgY29uc3QgdmFsaWRhdGVkUHJvcHMgPSB2YWxpZGF0ZURhdGFzZXRVcGRhdGVQcm9wcyhwcm9wcywgZXhpc3RpbmcpO1xuICAgIC8vICB2YWxpZGF0ZSBwcm9wczoganVzdCBjb2xvciBmb3Igbm93XG4gICAgLy8gIHdlIG9ubHkgYWxsb3cgbGFiZWwsIGNvbG9yIGFuZCBtZXRhIHRvIGJlIHVwZGF0ZWRcbiAgICAvLyBjb25zdCBuZXdUYWJsZSA9IGNvcHlUYWJsZUFuZFVwZGF0ZShleGlzdGluZywgdmFsaWRhdGVkUHJvcHMpO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGRhdGFzZXRzOiB7XG4gICAgICAgIC4uLmRhdGFzZXRzLFxuICAgICAgICBbZGF0YUlkXTogY29weVRhYmxlQW5kVXBkYXRlKGV4aXN0aW5nLCB2YWxpZGF0ZWRQcm9wcylcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG4vKipcbiAqIFJlLXZhbGlkYXRlIGEgbGl2ZSBsYXllciBhZ2FpbnN0IGEgdGFibGUgd2hvc2Ugc2NoZW1hIGp1c3QgY2hhbmdlZC5cbiAqXG4gKiBUaGUgbGF5ZXIncyBjb2x1bW5zIC8gdmlzdWFsLWNoYW5uZWwgZmllbGRzIC8gdGV4dC1sYWJlbCBmaWVsZHMgYXJlIGZpcnN0XG4gKiByZW1hcHBlZCB0byB0aGVpciBuZXcgbmFtZXMgKHZpYSBgcmVuYW1lc2ApIHNvIHRoZSBsYXllciBmb2xsb3dzIGEgcmVuYW1lXG4gKiBpbnN0ZWFkIG9mIHRyZWF0aW5nIHRoZSBvbGQgY29sdW1uIGFzIHJlbW92ZWQsIHRoZW4gcmUtdmFsaWRhdGVkIHdpdGhcbiAqIGB2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YWAg4oCUIHRoZSBzYW1lIHNlcmlhbGl6ZSArIHZhbGlkYXRlIHBhdGggdXNlZFxuICogd2hlbiBhIHNhdmVkIGNvbmZpZyBpcyBsb2FkZWQgYWdhaW5zdCBuZXcgZGF0YS4gUmV0dXJucyBgbnVsbGAgd2hlbiBhXG4gKiByZXF1aXJlZCBjb2x1bW4gaXMgZ29uZSAodGhlIGxheWVyIGNhbiBubyBsb25nZXIgYmUgYnVpbHQpLlxuICovXG5mdW5jdGlvbiByZWNvbmNpbGVMYXllcldpdGhOZXdTY2hlbWEoXG4gIGxheWVyOiBMYXllcixcbiAgcmVuYW1lczogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgbmV3VGFibGU6IEtlcGxlclRhYmxlLFxuICBzdGF0ZTogVmlzU3RhdGVcbik6IExheWVyIHwgbnVsbCB7XG4gIGNvbnN0IGNvbmZpZ1BhdGNoOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG5cbiAgLy8gZm9sbG93IHJlbmFtZWQgY29sdW1uc1xuICBjb25zdCBjb2x1bW5zUGF0Y2g6IFJlY29yZDxzdHJpbmcsIHt2YWx1ZTogc3RyaW5nIHwgbnVsbDsgZmllbGRJZHg6IG51bWJlcn0+ID0ge307XG4gIGxldCBjb2x1bW5zQ2hhbmdlZCA9IGZhbHNlO1xuICBPYmplY3QuZW50cmllcyhsYXllci5jb25maWcuY29sdW1ucyB8fCB7fSkuZm9yRWFjaCgoW2NrZXksIGNvbF0pID0+IHtcbiAgICBpZiAoY29sPy52YWx1ZSAmJiByZW5hbWVzW2NvbC52YWx1ZV0pIHtcbiAgICAgIGNvbHVtbnNQYXRjaFtja2V5XSA9IHsuLi5jb2wsIHZhbHVlOiByZW5hbWVzW2NvbC52YWx1ZV19O1xuICAgICAgY29sdW1uc0NoYW5nZWQgPSB0cnVlO1xuICAgIH1cbiAgfSk7XG4gIGlmIChjb2x1bW5zQ2hhbmdlZCkge1xuICAgIGNvbmZpZ1BhdGNoLmNvbHVtbnMgPSB7Li4ubGF5ZXIuY29uZmlnLmNvbHVtbnMsIC4uLmNvbHVtbnNQYXRjaH07XG4gIH1cblxuICAvLyBmb2xsb3cgcmVuYW1lZCB2aXN1YWwtY2hhbm5lbCBmaWVsZHMgKGNvbG9yRmllbGQsIHNpemVGaWVsZCwgLi4uKVxuICBPYmplY3QudmFsdWVzKGxheWVyLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKCh7ZmllbGR9KSA9PiB7XG4gICAgY29uc3QgZmllbGRDb25maWcgPSBsYXllci5jb25maWdbZmllbGRdO1xuICAgIGlmIChmaWVsZENvbmZpZz8ubmFtZSAmJiByZW5hbWVzW2ZpZWxkQ29uZmlnLm5hbWVdKSB7XG4gICAgICBjb25maWdQYXRjaFtmaWVsZF0gPSB7Li4uZmllbGRDb25maWcsIG5hbWU6IHJlbmFtZXNbZmllbGRDb25maWcubmFtZV19O1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gZm9sbG93IHJlbmFtZWQgdGV4dC1sYWJlbCBmaWVsZHNcbiAgaWYgKGxheWVyLmNvbmZpZy50ZXh0TGFiZWw/Lmxlbmd0aCkge1xuICAgIGNvbnN0IHRleHRMYWJlbCA9IGxheWVyLmNvbmZpZy50ZXh0TGFiZWwubWFwKHRsID0+XG4gICAgICB0bC5maWVsZCAmJiByZW5hbWVzW3RsLmZpZWxkLm5hbWVdXG4gICAgICAgID8gey4uLnRsLCBmaWVsZDogey4uLnRsLmZpZWxkLCBuYW1lOiByZW5hbWVzW3RsLmZpZWxkLm5hbWVdfX1cbiAgICAgICAgOiB0bFxuICAgICk7XG4gICAgaWYgKHRleHRMYWJlbC5zb21lKCh0bCwgaSkgPT4gdGwgIT09IGxheWVyLmNvbmZpZy50ZXh0TGFiZWxbaV0pKSB7XG4gICAgICBjb25maWdQYXRjaC50ZXh0TGFiZWwgPSB0ZXh0TGFiZWw7XG4gICAgfVxuICB9XG5cbiAgLy8gc2hhbGxvdy1jb3B5IHRoZSBsYXllciBzbyB3ZSBuZXZlciBtdXRhdGUgcmVkdXggc3RhdGU7IHRoZSBjb3B5IGtlZXBzIHRoZVxuICAvLyBwcm90b3R5cGUgbWV0aG9kcyAoYHZpc3VhbENoYW5uZWxzYCBnZXR0ZXIsIGBpc1ZhbGlkVG9TYXZlYCkgc28gaXRcbiAgLy8gc2VyaWFsaXplcyBleGFjdGx5IGxpa2UgYSBsaXZlIGxheWVyLlxuICBjb25zdCBsYXllckNvcHkgPSBPYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKGxheWVyKSksIGxheWVyKTtcbiAgaWYgKE9iamVjdC5rZXlzKGNvbmZpZ1BhdGNoKS5sZW5ndGgpIHtcbiAgICBsYXllckNvcHkuY29uZmlnID0gey4uLmxheWVyLmNvbmZpZywgLi4uY29uZmlnUGF0Y2h9O1xuICB9XG5cbiAgY29uc3QgdmFsaWRhdGVkID0gdmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEoXG4gICAgbmV3VGFibGUsXG4gICAgc3RhdGUubGF5ZXJDbGFzc2VzLFxuICAgIGxheWVyQ29weSxcbiAgICBzdGF0ZS5zY2hlbWFcbiAgKTtcblxuICByZXR1cm4gdmFsaWRhdGVkICYmIHZhbGlkYXRlZC5oYXNBbGxDb2x1bW5zKCkgPyB2YWxpZGF0ZWQgOiBudWxsO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBhbiBleGlzdGluZyBkYXRhc2V0J3Mgc2NoZW1hIChjb2x1bW5zL2ZpZWxkcykgaW4gcGxhY2UgYW5kIHJlY29uY2lsZVxuICogZXZlcnl0aGluZyB0aGF0IHJlZmVyZW5jZWQgdGhlIG9sZCBjb2x1bW5zOiBmaWx0ZXJzLCBsYXllcnMsIHRvb2x0aXAgZmllbGRzLFxuICogcGlubmVkIGNvbHVtbnMgYW5kIHNvcnQgc3RhdGUuIFRoZSBkYXRhc2V0IGtlZXBzIGl0cyBpZC9sYWJlbC9jb2xvci9tZXRhZGF0YS5cbiAqXG4gKiBgYWN0aW9uLmRhdGFgIGlzIHRoZSBzYW1lIHNoYXBlIGBLZXBsZXJUYWJsZS5pbXBvcnREYXRhYCBhY2NlcHRzIChge2NvbHMsXG4gKiBmaWVsZHMsIGFycm93VGFibGV9YCB3aGVuIHJlcGxhY2luZyBjb2x1bW5zKS4gYGFjdGlvbi5yZW5hbWVzYCBpcyBhbiBvcHRpb25hbFxuICogb2xkIOKGkiBuZXcgY29sdW1uLW5hbWUgbWFwIHNvIGxheWVycy9maWx0ZXJzL3Rvb2x0aXBzIGZvbGxvdyBhIHJlbmFtZSBpbnN0ZWFkXG4gKiBvZiB0cmVhdGluZyB0aGUgb2xkIGNvbHVtbiBhcyByZW1vdmVkLlxuICpcbiAqIFJlY29uY2lsaWF0aW9uIGlzIG5hbWUtYmFzZWQg4oCUIHRoZSBzYW1lIHdheSBrZXBsZXIuZ2wgbG9hZHMgYSBzYXZlZCBjb25maWdcbiAqIGFnYWluc3QgY2hhbmdlZCBkYXRhLiBBIGxheWVyIHdob3NlIHJlcXVpcmVkIGNvbHVtbiBpcyBnb25lIGlzIHJlbW92ZWQ7IGFcbiAqIGZpbHRlciBvbiBhIGdvbmUgY29sdW1uIGlzIGRyb3BwZWQgKG9yIHRoZSBkYXRhc2V0IGlzIHNwbGljZWQgb3V0IG9mIGEgc3luY2VkXG4gKiBmaWx0ZXIpOyB0b29sdGlwIGZpZWxkcyBhcmUgcmVtYXBwZWQgLyBkcm9wcGVkLlxuICpcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVEYXRhc2V0VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVEYXRhc2V0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7ZGF0YUlkLCBkYXRhLCByZW5hbWVzID0ge319ID0gYWN0aW9uO1xuICBjb25zdCBleGlzdGluZyA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZXhpc3RpbmcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyAxLiByZWJ1aWxkIHRoZSB0YWJsZSBzY2hlbWEgaW4gcGxhY2UgKHNhbWUgaWQvbGFiZWwvY29sb3IvbWV0YWRhdGEpXG4gIGNvbnN0IG5ld1RhYmxlID0gY29weVRhYmxlQW5kVXBkYXRlKGV4aXN0aW5nLCB7fSk7XG4gIG5ld1RhYmxlLnVwZGF0ZVNjaGVtYShkYXRhKTtcblxuICAvLyBUaGUgZGF0YSBjb250YWluZXIgaXMgcmVidWlsdCB1bnNvcnRlZCBhbmQgdW5maWx0ZXJlZDsgcmVzZXQgdGhlIHRhYmxlJ3NcbiAgLy8gdmlldyBzdGF0ZSB0aGF0IGluZGV4ZXMgaW50byB0aGUgb2xkIGNvbnRhaW5lci5cbiAgbmV3VGFibGUuZmlsdGVyZWRJZHhDUFUgPSBuZXdUYWJsZS5hbGxJbmRleGVzO1xuICBuZXdUYWJsZS5maWx0ZXJSZWNvcmRDUFUgPSB1bmRlZmluZWQ7XG4gIG5ld1RhYmxlLnNvcnRDb2x1bW4gPSB1bmRlZmluZWQ7XG4gIG5ld1RhYmxlLnNvcnRPcmRlciA9IG51bGw7XG4gIG5ld1RhYmxlLnBpbm5lZENvbHVtbnMgPSAoZXhpc3RpbmcucGlubmVkQ29sdW1ucyB8fCBbXSlcbiAgICAubWFwKG5hbWUgPT4gcmVuYW1lc1tuYW1lXSA/PyBuYW1lKVxuICAgIC5maWx0ZXIobmFtZSA9PiBuZXdUYWJsZS5nZXRDb2x1bW5GaWVsZElkeChuYW1lKSA+IC0xKTtcblxuICBjb25zdCBuZXdGaWVsZHNCeU5hbWUgPSBuZXcgU2V0KG5ld1RhYmxlLmZpZWxkcy5tYXAoZiA9PiBmLm5hbWUpKTtcbiAgY29uc3QgbmV3RGF0YXNldHMgPSB7Li4uc3RhdGUuZGF0YXNldHMsIFtkYXRhSWRdOiBuZXdUYWJsZX07XG5cbiAgLy8gMi4gcmVjb25jaWxlIGZpbHRlcnNcbiAgbGV0IG5ld0ZpbHRlcnMgPSBzdGF0ZS5maWx0ZXJzXG4gICAgLm1hcChmaWx0ZXIgPT4ge1xuICAgICAgY29uc3QgdmkgPSBmaWx0ZXIuZGF0YUlkLmluZGV4T2YoZGF0YUlkKTtcbiAgICAgIGlmICh2aSA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIGZpbHRlcjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb2xkTmFtZSA9IGZpbHRlci5uYW1lW3ZpXTtcbiAgICAgIGNvbnN0IG5ld05hbWUgPSByZW5hbWVzW29sZE5hbWVdID8/IG9sZE5hbWU7XG4gICAgICBjb25zdCBmaWVsZElkeCA9IG5ld1RhYmxlLmdldENvbHVtbkZpZWxkSWR4KG5ld05hbWUpO1xuXG4gICAgICBpZiAoZmllbGRJZHggPT09IC0xKSB7XG4gICAgICAgIC8vIGNvbHVtbiBpcyBnb25lOiBkcm9wIGEgc2luZ2xlLWRhdGFzZXQgZmlsdGVyLCBzcGxpY2UgaXQgb3V0IG9mIGEgc3luY2VkIG9uZVxuICAgICAgICByZXR1cm4gZmlsdGVyLmRhdGFJZC5sZW5ndGggPT09IDFcbiAgICAgICAgICA/IG51bGxcbiAgICAgICAgICA6IF9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2aSwgbmV3RGF0YXNldHMpO1xuICAgICAgfVxuXG4gICAgICAvLyBjb2x1bW4gcHJlc2VudCAocG9zc2libHkgcmVuYW1lZCk6IHJlLXJlc29sdmUgbmFtZS9maWVsZElkeC9kb21haW5cbiAgICAgIGNvbnN0IHtmaWx0ZXI6IHVwZGF0ZWR9ID0gYXBwbHlGaWx0ZXJGaWVsZE5hbWUoZmlsdGVyLCBuZXdEYXRhc2V0cywgZGF0YUlkLCBuZXdOYW1lLCB2aSwge1xuICAgICAgICBtZXJnZURvbWFpbjogdmkgPiAwXG4gICAgICB9KTtcbiAgICAgIGlmICghdXBkYXRlZCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gYnJ1c2ggZmlsdGVycyBjYXJyeSBhIHNlY29uZCB5LWF4aXMgZmllbGQ7IGZvbGxvdyBhIHJlbmFtZSB0aGVyZSB0b29cbiAgICAgIGNvbnN0IHlBeGlzID1cbiAgICAgICAgdXBkYXRlZC55QXhpcz8ubmFtZSAmJlxuICAgICAgICAocmVuYW1lc1t1cGRhdGVkLnlBeGlzLm5hbWVdXG4gICAgICAgICAgPyB7Li4udXBkYXRlZC55QXhpcywgbmFtZTogcmVuYW1lc1t1cGRhdGVkLnlBeGlzLm5hbWVdfVxuICAgICAgICAgIDogbmV3RmllbGRzQnlOYW1lLmhhcyh1cGRhdGVkLnlBeGlzLm5hbWUpXG4gICAgICAgICAgPyB1cGRhdGVkLnlBeGlzXG4gICAgICAgICAgOiBudWxsKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udXBkYXRlZCxcbiAgICAgICAgeUF4aXMsXG4gICAgICAgIC8vIGNsYW1wIHRoZSB1c2VyJ3MgcHJldmlvdXMgc2VsZWN0aW9uIGludG8gdGhlIG5ldyBkb21haW4gaW5zdGVhZCBvZlxuICAgICAgICAvLyByZXNldHRpbmcgaXQgdG8gdGhlIGZ1bGwgcmFuZ2VcbiAgICAgICAgdmFsdWU6IGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4oZmlsdGVyLnZhbHVlLCB1cGRhdGVkKVxuICAgICAgfTtcbiAgICB9KVxuICAgIC5maWx0ZXIoQm9vbGVhbikgYXMgRmlsdGVyW107XG5cbiAgLy8gcmVhc3NpZ24gR1BVIGNoYW5uZWxzIG5vdyB0aGF0IHRoZSBmaWx0ZXIgbGlzdCBpcyBzZXR0bGVkXG4gIG5ld0ZpbHRlcnMgPSBuZXdGaWx0ZXJzLm1hcChmaWx0ZXIgPT5cbiAgICBmaWx0ZXIuZ3B1ID8gYXNzaWduR3B1Q2hhbm5lbChzZXRGaWx0ZXJHcHVNb2RlKGZpbHRlciwgbmV3RmlsdGVycyksIG5ld0ZpbHRlcnMpIDogZmlsdGVyXG4gICk7XG5cbiAgLy8gMy4gcmVidWlsZCB0aGUgdGFibGUncyBmaWx0ZXIgc3RhdGUgKGdwdUZpbHRlciAvIGZpbHRlclJlY29yZCAvIGZpbHRlcmVkSW5kZXgpXG4gIG5ld1RhYmxlLmZpbHRlclRhYmxlKFxuICAgIG5ld0ZpbHRlcnMsXG4gICAgc3RhdGUubGF5ZXJzLmZpbHRlcihsID0+IGwuY29uZmlnLmRhdGFJZCA9PT0gZGF0YUlkKSxcbiAgICB7fVxuICApO1xuXG4gIC8vIDQuIHJlY29uY2lsZSBsYXllcnNcbiAgY29uc3QgbGF5ZXJzVG9SZW1vdmU6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IG5ld0xheWVycyA9IHN0YXRlLmxheWVycy5tYXAobGF5ZXIgPT4ge1xuICAgIGlmIChsYXllci5jb25maWcuZGF0YUlkICE9PSBkYXRhSWQpIHtcbiAgICAgIHJldHVybiBsYXllcjtcbiAgICB9XG4gICAgY29uc3QgcmVjb25jaWxlZCA9IHJlY29uY2lsZUxheWVyV2l0aE5ld1NjaGVtYShsYXllciwgcmVuYW1lcywgbmV3VGFibGUsIHN0YXRlKTtcbiAgICBpZiAocmVjb25jaWxlZCkge1xuICAgICAgcmV0dXJuIHJlY29uY2lsZWQ7XG4gICAgfVxuICAgIGxheWVyc1RvUmVtb3ZlLnB1c2gobGF5ZXIuaWQpO1xuICAgIHJldHVybiBsYXllcjsgLy8gcGxhY2Vob2xkZXIsIGRyb3BwZWQgdmlhIHJlbW92ZUxheWVyVXBkYXRlciBiZWxvd1xuICB9KTtcblxuICAvLyA1LiByZWNvbmNpbGUgdG9vbHRpcCBmaWVsZHNUb1Nob3dcbiAgbGV0IGludGVyYWN0aW9uQ29uZmlnID0gc3RhdGUuaW50ZXJhY3Rpb25Db25maWc7XG4gIGNvbnN0IHRvb2x0aXAgPSBpbnRlcmFjdGlvbkNvbmZpZz8udG9vbHRpcDtcbiAgY29uc3QgZmllbGRzVG9TaG93ID0gdG9vbHRpcD8uY29uZmlnPy5maWVsZHNUb1Nob3c/LltkYXRhSWRdO1xuICBpZiAoZmllbGRzVG9TaG93KSB7XG4gICAgY29uc3QgbmV4dEZpZWxkc1RvU2hvdyA9IGZpZWxkc1RvU2hvdy5mbGF0TWFwKGYgPT4ge1xuICAgICAgY29uc3QgbmFtZSA9IHJlbmFtZXNbZi5uYW1lXSA/PyBmLm5hbWU7XG4gICAgICByZXR1cm4gbmV3RmllbGRzQnlOYW1lLmhhcyhuYW1lKSA/IFt7Li4uZiwgbmFtZX1dIDogW107XG4gICAgfSk7XG4gICAgaW50ZXJhY3Rpb25Db25maWcgPSB7XG4gICAgICAuLi5pbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgLi4udG9vbHRpcCxcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgLi4udG9vbHRpcC5jb25maWcsXG4gICAgICAgICAgZmllbGRzVG9TaG93OiB7Li4udG9vbHRpcC5jb25maWcuZmllbGRzVG9TaG93LCBbZGF0YUlkXTogbmV4dEZpZWxkc1RvU2hvd31cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBsZXQgbmV4dFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiBuZXdEYXRhc2V0cyxcbiAgICBmaWx0ZXJzOiBuZXdGaWx0ZXJzLFxuICAgIGxheWVyczogbmV3TGF5ZXJzLFxuICAgIGludGVyYWN0aW9uQ29uZmlnXG4gIH07XG5cbiAgLy8gNi4gZHJvcCBsYXllcnMgdGhhdCBsb3N0IHRoZWlyIHJlcXVpcmVkIGNvbHVtbnNcbiAgbmV4dFN0YXRlID0gbGF5ZXJzVG9SZW1vdmUucmVkdWNlKChhY2N1LCBpZCkgPT4gcmVtb3ZlTGF5ZXJVcGRhdGVyKGFjY3UsIHtpZH0pLCBuZXh0U3RhdGUpO1xuXG4gIC8vIDcuIHJlY29tcHV0ZSBsYXllciBkb21haW5zICsgZGF0YSBmb3IgdGhlIHVwZGF0ZWQgZGF0YXNldFxuICBuZXh0U3RhdGUgPSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobmV4dFN0YXRlLCBkYXRhSWQpO1xuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbi8qKlxuICogV2hlbiBhIHVzZXIgY2xpY2tzIG9uIHRoZSBzcGVjaWZpYyBtYXAgY2xvc2luZyBpY29uXG4gKiB0aGUgYXBwbGljYXRpb24gd2lsbCBjbG9zZSB0aGUgc2VsZWN0ZWQgbWFwXG4gKiBhbmQgd2lsbCBtZXJnZSB0aGUgcmVtYWluaW5nIG9uZSB3aXRoIHRoZSBnbG9iYWwgc3RhdGVcbiAqIFRPRE86IGkgdGhpbmsgaW4gdGhlIGZ1dHVyZSB0aGlzIGFjdGlvbiBzaG91bGQgYmUgY2FsbGVkIG1lcmdlIG1hcCBsYXllcnMgd2l0aCBnbG9iYWwgc2V0dGluZ3NcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZSBgdmlzU3RhdGVgXG4gKiBAcGFyYW0ge09iamVjdH0gYWN0aW9uIGFjdGlvblxuICogQHJldHVybnMge09iamVjdH0gbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbG9zZVNwZWNpZmljTWFwQXRJbmRleDxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBNYXBTdGF0ZUFjdGlvbnMuVG9nZ2xlU3BsaXRNYXBVcGRhdGVyQWN0aW9uXG4pOiBTIHtcbiAgLy8gcmV0cmlldmUgbGF5ZXJzIG1ldGEgZGF0YSBmcm9tIHRoZSByZW1haW5pbmcgbWFwIHRoYXQgd2UgbmVlZCB0byBrZWVwXG4gIGNvbnN0IGluZGV4VG9SZXRyaWV2ZSA9IDEgLSBhY3Rpb24ucGF5bG9hZDtcbiAgY29uc3QgbWFwTGF5ZXJzID0gc3RhdGUuc3BsaXRNYXBzW2luZGV4VG9SZXRyaWV2ZV0/LmxheWVycztcbiAgY29uc3Qge2xheWVyc30gPSBzdGF0ZTtcblxuICAvLyB1cGRhdGUgbGF5ZXIgdmlzaWJpbGl0eVxuICBjb25zdCBuZXdMYXllcnMgPSBsYXllcnMubWFwKGxheWVyID0+XG4gICAgbWFwTGF5ZXJzICYmICFtYXBMYXllcnNbbGF5ZXIuaWRdICYmIGxheWVyLmNvbmZpZy5pc1Zpc2libGVcbiAgICAgID8gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICAgIC8vIGlmIGxheWVyLmlkIGlzIG5vdCBpbiBtYXBMYXllcnMsIGl0IHNob3VsZCBiZSBpblZpc2libGVcbiAgICAgICAgICBpc1Zpc2libGU6IGZhbHNlXG4gICAgICAgIH0pXG4gICAgICA6IGxheWVyXG4gICk7XG5cbiAgLy8gZGVsZXRlIG1hcFxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogbmV3TGF5ZXJzLFxuICAgIHNwbGl0TWFwczogW11cbiAgfTtcbn1cblxuLyoqXG4gKiBUcmlnZ2VyIGZpbGUgbG9hZGluZyBkaXNwYXRjaCBgYWRkRGF0YVRvTWFwYCBpZiBzdWNjZWVkLCBvciBgbG9hZEZpbGVzRXJyYCBpZiBmYWlsZWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBsb2FkRmlsZXNVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxvYWRGaWxlc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2ZpbGVzLCBvbkZpbmlzaCA9IGxvYWRGaWxlc1N1Y2Nlc3N9ID0gYWN0aW9uO1xuICBpZiAoIWZpbGVzLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGZpbGVMb2FkaW5nUHJvZ3Jlc3MgPSBBcnJheS5mcm9tKGZpbGVzKS5yZWR1Y2UoXG4gICAgKGFjY3UsIGYsIGkpID0+IG1lcmdlXyhpbml0aWFsRmlsZUxvYWRpbmdQcm9ncmVzcyhmLCBpKSkoYWNjdSksXG4gICAge31cbiAgKTtcblxuICBjb25zdCBmaWxlTG9hZGluZyA9IHtcbiAgICBmaWxlQ2FjaGU6IFtdLFxuICAgIGZpbGVzVG9Mb2FkOiBmaWxlcyxcbiAgICBvbkZpbmlzaFxuICB9O1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IG1lcmdlXyh7ZmlsZUxvYWRpbmdQcm9ncmVzcywgZmlsZUxvYWRpbmd9KShzdGF0ZSk7XG5cbiAgcmV0dXJuIGxvYWROZXh0RmlsZVVwZGF0ZXIobmV4dFN0YXRlKTtcbn07XG5cbi8qKlxuICogU3VjZXNzZnVsbHkgbG9hZGVkIG9uZSBmaWxlLCBtb3ZlIG9uIHRvIHRoZSBuZXh0IG9uZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRGaWxlU3RlcFN1Y2Nlc3NVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxvYWRGaWxlU3RlcFN1Y2Nlc3NBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgaWYgKCFzdGF0ZS5maWxlTG9hZGluZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7ZmlsZU5hbWUsIGZpbGVDYWNoZX0gPSBhY3Rpb247XG4gIGNvbnN0IHtmaWxlc1RvTG9hZCwgb25GaW5pc2h9ID0gc3RhdGUuZmlsZUxvYWRpbmc7XG4gIGNvbnN0IHN0YXRlV2l0aFByb2dyZXNzID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtcbiAgICBmaWxlTmFtZSxcbiAgICBwcm9ncmVzczoge3BlcmNlbnQ6IDEsIG1lc3NhZ2U6ICdEb25lJ31cbiAgfSk7XG5cbiAgLy8gc2F2ZSBwcm9jZXNzZWQgZmlsZSB0byBmaWxlQ2FjaGVcbiAgY29uc3Qgc3RhdGVXaXRoQ2FjaGUgPSBwaWNrXygnZmlsZUxvYWRpbmcnKShtZXJnZV8oe2ZpbGVDYWNoZX0pKShzdGF0ZVdpdGhQcm9ncmVzcyk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHN0YXRlV2l0aENhY2hlLFxuICAgIERFTEFZX1RBU0soMjAwKS5tYXAoZmlsZXNUb0xvYWQubGVuZ3RoID8gbG9hZE5leHRGaWxlIDogKCkgPT4gb25GaW5pc2goZmlsZUNhY2hlKSlcbiAgKTtcbn1cblxuLy8gd2l0aFRhc2s8VD4oc3RhdGU6IFQsIHRhc2s6IGFueSk6IFRcblxuLyoqXG4gKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWROZXh0RmlsZVVwZGF0ZXIoc3RhdGU6IFZpc1N0YXRlKTogVmlzU3RhdGUge1xuICBpZiAoIXN0YXRlLmZpbGVMb2FkaW5nKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHtmaWxlc1RvTG9hZH0gPSBzdGF0ZS5maWxlTG9hZGluZztcbiAgY29uc3QgW2ZpbGUsIC4uLnJlbWFpbmluZ0ZpbGVzVG9Mb2FkXSA9IGZpbGVzVG9Mb2FkO1xuXG4gIC8vIHNhdmUgZmlsZXNUb0xvYWQgdG8gc3RhdGVcbiAgY29uc3QgbmV4dFN0YXRlID0gcGlja18oJ2ZpbGVMb2FkaW5nJykobWVyZ2VfKHtmaWxlc1RvTG9hZDogcmVtYWluaW5nRmlsZXNUb0xvYWR9KSkoc3RhdGUpO1xuXG4gIGNvbnN0IHN0YXRlV2l0aFByb2dyZXNzID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIobmV4dFN0YXRlLCB7XG4gICAgZmlsZU5hbWU6IGZpbGUubmFtZSxcbiAgICBwcm9ncmVzczoge3BlcmNlbnQ6IDAsIG1lc3NhZ2U6ICdsb2FkaW5nLi4uJ31cbiAgfSk7XG5cbiAgY29uc3Qge2xvYWRlcnMsIGxvYWRPcHRpb25zfSA9IHN0YXRlO1xuICByZXR1cm4gd2l0aFRhc2soXG4gICAgc3RhdGVXaXRoUHJvZ3Jlc3MsXG4gICAgbWFrZUxvYWRGaWxlVGFzayhcbiAgICAgIGZpbGUsXG4gICAgICBuZXh0U3RhdGUuZmlsZUxvYWRpbmcgJiYgbmV4dFN0YXRlLmZpbGVMb2FkaW5nLmZpbGVDYWNoZSxcbiAgICAgIGxvYWRlcnMsXG4gICAgICBsb2FkT3B0aW9uc1xuICAgIClcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VMb2FkRmlsZVRhc2soZmlsZSwgZmlsZUNhY2hlLCBsb2FkZXJzOiBMb2FkZXJbXSA9IFtdLCBsb2FkT3B0aW9ucyA9IHt9KSB7XG4gIHJldHVybiBMT0FEX0ZJTEVfVEFTSyh7ZmlsZSwgZmlsZUNhY2hlLCBsb2FkZXJzLCBsb2FkT3B0aW9uc30pLmJpbWFwKFxuICAgIC8vIHByZXR0aWVyIGlnbm9yZVxuICAgIC8vIHN1Y2Nlc3NcbiAgICBnZW4gPT5cbiAgICAgIG5leHRGaWxlQmF0Y2goe1xuICAgICAgICBnZW4sXG4gICAgICAgIGZpbGVOYW1lOiBmaWxlLm5hbWUsXG4gICAgICAgIG9uRmluaXNoOiByZXN1bHQgPT5cbiAgICAgICAgICBwcm9jZXNzRmlsZUNvbnRlbnQoe1xuICAgICAgICAgICAgY29udGVudDogcmVzdWx0LFxuICAgICAgICAgICAgZmlsZUNhY2hlXG4gICAgICAgICAgfSlcbiAgICAgIH0pLFxuXG4gICAgLy8gZXJyb3JcbiAgICBlcnIgPT4gbG9hZEZpbGVzRXJyKGZpbGUubmFtZSwgZXJyKVxuICApO1xufVxuXG4vKipcbiAqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Qcm9jZXNzRmlsZUNvbnRlbnRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtjb250ZW50LCBmaWxlQ2FjaGV9ID0gYWN0aW9uLnBheWxvYWQ7XG5cbiAgY29uc3Qgc3RhdGVXaXRoUHJvZ3Jlc3MgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihzdGF0ZSwge1xuICAgIGZpbGVOYW1lOiBjb250ZW50LmZpbGVOYW1lLFxuICAgIHByb2dyZXNzOiB7cGVyY2VudDogMSwgbWVzc2FnZTogJ3Byb2Nlc3NpbmcuLi4nfVxuICB9KTtcblxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgc3RhdGVXaXRoUHJvZ3Jlc3MsXG4gICAgUFJPQ0VTU19GSUxFX0RBVEEoe2NvbnRlbnQsIGZpbGVDYWNoZX0pLmJpbWFwKFxuICAgICAgcmVzdWx0ID0+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+XG4gICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIGNvbnZlcnQgZHJhd24gZ2VvbWV0cnkgdG8gYSBsYXllcjogJHttZXNzYWdlfWAsXG4gICAgICAgICAgICBpZDogJ2NvbnZlcnQtZWRpdG9yLWZlYXR1cmVzJ1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgY29uc3QgY2xlYXJlZFN0YXRlOiBWaXNTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIGZlYXR1cmVzOiBbXSxcbiAgICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbCxcbiAgICAgIG1vZGU6IEVESVRPUl9NT0RFUy5FRElUXG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGxhYmVsSWQgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA5MCkgKyAxMDtcblxuICByZXR1cm4gdXBkYXRlVmlzRGF0YVVwZGF0ZXIoY2xlYXJlZFN0YXRlLCB7XG4gICAgZGF0YXNldHM6IHtcbiAgICAgIGluZm86IHtcbiAgICAgICAgaWQ6IGBkcmF3bi1nZW9tZXRyeS0ke2dlbmVyYXRlSGFzaElkKDYpfWAsXG4gICAgICAgIGxhYmVsOiBgRHJhd24gR2VvbWV0cnkgJHtsYWJlbElkfWBcbiAgICAgIH0sXG4gICAgICBkYXRhXG4gICAgfSxcbiAgICBvcHRpb25zOiB7XG4gICAgICBrZWVwRXhpc3RpbmdDb25maWc6IHRydWUsXG4gICAgICBjZW50ZXJNYXA6IGZhbHNlLFxuICAgICAgYXV0b0NyZWF0ZUxheWVyczogdHJ1ZVxuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR4LCBjb25maWd9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ0FjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBvbGRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG4gIGlmICghb2xkRmlsdGVyKSB7XG4gICAgQ29uc29sZS5lcnJvcihgZmlsdGVycy4ke2lkeH0gaXMgdW5kZWZpbmVkYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChvbGRGaWx0ZXIudHlwZSAhPT0gRklMVEVSX1RZUEVTLnRpbWVSYW5nZSkge1xuICAgIENvbnNvbGUuZXJyb3IoXG4gICAgICBgc2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZyBjYW4gb25seSBiZSBjYWxsZWQgdG8gdXBkYXRlIGEgdGltZSBmaWx0ZXIuIGNoZWNrIGZpbHRlci50eXBlID09PSAndGltZVJhbmdlJ2BcbiAgICApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHVwZGF0ZXMgPSBjaGVja1RpbWVDb25maWdBcmdzKGNvbmZpZyk7XG5cbiAgcmV0dXJuIHBpY2tfKCdmaWx0ZXJzJykoc3dhcF8obWVyZ2VfKHVwZGF0ZXMpKG9sZEZpbHRlcikpKShzdGF0ZSk7XG59XG5cbmZ1bmN0aW9uIGNoZWNrVGltZUNvbmZpZ0FyZ3MoY29uZmlnKSB7XG4gIGNvbnN0IGFsbG93ZWQgPSBbJ3RpbWVGb3JtYXQnLCAndGltZXpvbmUnXTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGNvbmZpZykucmVkdWNlKChhY2N1LCBwcm9wKSA9PiB7XG4gICAgaWYgKCFhbGxvd2VkLmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICBDb25zb2xlLmVycm9yKFxuICAgICAgICBgc2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnIHRha2VzIHRpbWVGb3JtYXQgYW5kL29yIHRpbWV6b25lIGFzIG9wdGlvbnMsIGZvdW5kICR7cHJvcH1gXG4gICAgICApO1xuICAgICAgcmV0dXJuIGFjY3U7XG4gICAgfVxuXG4gICAgLy8gaGVyZSB3ZSBhcmUgTk9UIGNoZWNraW5nIGlmIHRpbWV6b25lIG9yIHRpbWVGb3JtYXQgaW5wdXQgaXMgdmFsaWRcbiAgICBhY2N1W3Byb3BdID0gY29uZmlnW3Byb3BdO1xuICAgIHJldHVybiBhY2N1O1xuICB9LCB7fSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGVkaXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7Y29uZmlnfTogVmlzU3RhdGVBY3Rpb25zLlNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZ0FjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIWNvbmZpZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB1cGRhdGVzID0gY2hlY2tUaW1lQ29uZmlnQXJncyhjb25maWcpO1xuICByZXR1cm4gcGlja18oJ2FuaW1hdGlvbkNvbmZpZycpKG1lcmdlXyh1cGRhdGVzKSkoc3RhdGUpO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBlZGl0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZVVwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZUFjdGlvblxuKTogUyB7XG4gIGNvbnN0IHtldmVudCwgbGF5ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCB7aWQ6IGRlY2tnbExheWVySWQsIGNvdW50fSA9IGV2ZW50O1xuICBpZiAoIWxheWVyKSB7XG4gICAgQ29uc29sZS53YXJuKGBsYXllckZpbHRlcmVkSXRlbXMgbGF5ZXIgZG9lc250IGV4aXN0c2ApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAobGF5ZXIuZmlsdGVyZWRJdGVtQ291bnQ/LltkZWNrZ2xMYXllcklkXSA9PT0gY291bnQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsYXllci5maWx0ZXJlZEl0ZW1Db3VudCA9IHtcbiAgICAuLi5sYXllci5maWx0ZXJlZEl0ZW1Db3VudCxcbiAgICBbZGVja2dsTGF5ZXJJZF06IGNvdW50XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IHN3YXBfKGxheWVyKShzdGF0ZS5sYXllcnMpXG4gIH07XG59XG5cbi8qKlxuICogVXBkYXRlIFdNUyBmZWF0dXJlIGluZm8gYW5kIHBpbiB0b29sdGlwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3bXNGZWF0dXJlSW5mb1VwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLldNU0ZlYXR1cmVJbmZvQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2xheWVyLCBmZWF0dXJlSW5mbywgY29vcmRpbmF0ZX0gPSBhY3Rpb247XG4gIGlmICghbGF5ZXIpIHtcbiAgICBjb25zb2xlLndhcm4oYFdNUyBmZWF0dXJlIGluZm8gbGF5ZXIgZG9lc24ndCBleGlzdGApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIENyZWF0ZSBhIGNsaWNrZWQgb2JqZWN0IHNpbWlsYXIgdG8gbGF5ZXJDbGlja1VwZGF0ZXIgdG8gcGluIHRoZSB0b29sdGlwXG4gIGNvbnN0IGNsaWNrZWQgPSBmZWF0dXJlSW5mb1xuICAgID8ge1xuICAgICAgICBwaWNrZWQ6IHRydWUsXG4gICAgICAgIG9iamVjdDoge1xuICAgICAgICAgIHdtc0ZlYXR1cmVJbmZvOiBmZWF0dXJlSW5mb1xuICAgICAgICB9LFxuICAgICAgICBjb29yZGluYXRlOiBjb29yZGluYXRlIHx8IFswLCAwXSxcbiAgICAgICAgbGF5ZXI6IHtcbiAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgaWR4OiBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gbGF5ZXIuaWQpLFxuICAgICAgICAgICAgaWQ6IGxheWVyLmlkXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgOiBudWxsO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgY2xpY2tlZFxuICB9O1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LXN0YXRlbWVudHNcbmV4cG9ydCBmdW5jdGlvbiBzeW5jVGltZUZpbHRlcldpdGhMYXllclRpbWVsaW5lVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU3luY1RpbWVGaWx0ZXJXaXRoTGF5ZXJUaW1lbGluZUFjdGlvblxuKTogUyB7XG4gIGNvbnN0IHtpZHg6IGZpbHRlcklkeCwgZW5hYmxlID0gZmFsc2V9ID0gYWN0aW9uO1xuXG4gIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGxldCBuZXdGaWx0ZXIgPSBmaWx0ZXI7XG5cbiAgLy8gaWYgd2UgZW5hYmxlIHN5bmMgd2UgYXJlIGdvaW5nIHRvIG1lcmdlIGZpbHRlciBhbmQgYW5pbWF0aW9uQ29uZmlnIGRvbWFpbnMgYW5kIHN0b3JlIGludG8gZmlsdGVyLmRvbWFpblxuICBpZiAoZW5hYmxlKSB7XG4gICAgY29uc3QgYW5pbWF0YWJsZUxheWVycyA9IGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzKG5ld1N0YXRlLmxheWVycyk7XG4gICAgLy8gaWYgbm8gYW5pbWF0YWJsZUxheWVycyBhcmUgcHJlc2VudCB3ZSBzaW1wbHkgcmV0dXJuXG4gICAgaWYgKCFhbmltYXRhYmxlTGF5ZXJzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG5ld1N0YXRlO1xuICAgIH1cblxuICAgIGNvbnN0IGludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMgPSBnZXRJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzKGFuaW1hdGFibGVMYXllcnMpO1xuICAgIGNvbnN0IGhhc0ludGVydmFsQmFzZWRBbmltYXRpb25MYXllciA9IEJvb2xlYW4oaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycy5sZW5ndGgpO1xuXG4gICAgY29uc3QgbmV3RmlsdGVyRG9tYWluID0gbWVyZ2VUaW1lRG9tYWlucyhbZmlsdGVyLmRvbWFpbiwgbmV3U3RhdGUuYW5pbWF0aW9uQ29uZmlnLmRvbWFpbl0pO1xuXG4gICAgLy8gd2Ugb25seSB1cGRhdGUgYW5pbWF0aW9uV2luZG93IGlmIHdlIGhhdmUgaW50ZXJ2YWwgYmFzZWQgYW5pbWF0aW9uIGxheWVycyB3aXRoIGRlZmluZWQgaW50ZXJ2YWxzIGFuZCB0aGUgY3VycmVudCBmaWx0ZXIgYW5pbWF0aW9uIHdpbmRvdyBpcyBub3QgaW50ZXJ2YWxcbiAgICBpZiAoaGFzSW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVyKSB7XG4gICAgICBpZiAoZmlsdGVyLmFuaW1hdGlvbldpbmRvdyAhPT0gQU5JTUFUSU9OX1dJTkRPVy5pbnRlcnZhbCkge1xuICAgICAgICBuZXdTdGF0ZSA9IHNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgICAgICBpZDogZmlsdGVyLmlkLFxuICAgICAgICAgIGFuaW1hdGlvbldpbmRvdzogQU5JTUFUSU9OX1dJTkRPVy5pbnRlcnZhbFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgbmV3RmlsdGVyID0gbmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICAgICAgLy8gYWRqdXN0IHRpbWUgZmlsdGVyIGludGVydmFsXG4gICAgICBuZXdGaWx0ZXIgPSBhZGp1c3RUaW1lRmlsdGVySW50ZXJ2YWwobmV3U3RhdGUsIG5ld0ZpbHRlcik7XG5cbiAgICAgIC8vIHJlcGxhY2UgZmlsdGVyIGluIHN0YXRlIHdpdGggbmV3RmlsdGVyXG4gICAgICBuZXdTdGF0ZSA9IHtcbiAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICAgIGZpbHRlcnM6IHN3YXBfPEZpbHRlcj4obmV3RmlsdGVyKShuZXdTdGF0ZS5maWx0ZXJzKVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gICAgLy8gYWRqdXN0IHZhbHVlIGJhc2VkIG9uIG5ldyBkb21haW5cbiAgICBjb25zdCBuZXdGaWx0ZXJWYWx1ZSA9IGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4oXG4gICAgICBuZXdGaWx0ZXIuYW5pbWF0aW9uV2luZG93ID09PSBBTklNQVRJT05fV0lORE9XLmludGVydmFsXG4gICAgICAgID8gW25ld0ZpbHRlckRvbWFpblswXSwgbmV3RmlsdGVyRG9tYWluWzBdXVxuICAgICAgICA6IG5ld0ZpbHRlckRvbWFpbixcbiAgICAgIHsuLi5uZXdGaWx0ZXIsIGRvbWFpbjogbmV3RmlsdGVyRG9tYWlufVxuICAgICk7XG5cbiAgICBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIGlkeDogZmlsdGVySWR4LFxuICAgICAgcHJvcDogJ3ZhbHVlJyxcbiAgICAgIHZhbHVlOiBuZXdGaWx0ZXJWYWx1ZVxuICAgIH0pO1xuXG4gICAgbmV3RmlsdGVyID0ge1xuICAgICAgLi4uKG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXIpLFxuICAgICAgc3luY2VkV2l0aExheWVyVGltZWxpbmU6IHRydWVcbiAgICB9O1xuXG4gICAgLy8gcmVwbGFjZSBmaWx0ZXIgaW4gc3RhdGUgd2l0aCBuZXdGaWx0ZXJcbiAgICBuZXdTdGF0ZSA9IHtcbiAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKG5ld1N0YXRlLmZpbHRlcnMpXG4gICAgfTtcblxuICAgIG5ld1N0YXRlID0gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIGlkOiBuZXdGaWx0ZXIuaWQsXG4gICAgICBtb2RlOiBnZXRTeW5jQW5pbWF0aW9uTW9kZShuZXdGaWx0ZXIpXG4gICAgfSk7XG5cbiAgICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gICAgLy8gc2V0IHRoZSBhbmltYXRpb24gY29uZmlnIHZhbHVlIHRvIG1hdGNoIGZpbHRlciB2YWx1ZVxuICAgIHJldHVybiBzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgICB2YWx1ZTogbmV3RmlsdGVyLnZhbHVlW25ld0ZpbHRlci5zeW5jVGltZWxpbmVNb2RlXVxuICAgIH0pO1xuICB9XG5cbiAgLy8gc2V0IGRvbWFpbiBhbmQgc3RlcFxuICBuZXdGaWx0ZXIgPSB7XG4gICAgLi4uZmlsdGVyLFxuICAgIHN5bmNlZFdpdGhMYXllclRpbWVsaW5lOiBmYWxzZVxuICB9O1xuXG4gIC8vIHJlcGxhY2UgZmlsdGVyIGluIHN0YXRlIHdpdGggbmV3RmlsdGVyXG4gIG5ld1N0YXRlID0ge1xuICAgIC4uLm5ld1N0YXRlLFxuICAgIGZpbHRlcnM6IHN3YXBfPEZpbHRlcj4obmV3RmlsdGVyKShuZXdTdGF0ZS5maWx0ZXJzKVxuICB9O1xuXG4gIC8vIHJlc2V0IHN5bmMgdGltZWxpbmUgbW9kZVxuICBuZXdTdGF0ZSA9IHNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWQ6IG5ld0ZpbHRlci5pZCxcbiAgICBtb2RlOiBTWU5DX1RJTUVMSU5FX01PREVTLmVuZFxuICB9KTtcblxuICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gIC8vIHJlc2V0IGZpbHRlciB2YWx1ZVxuICBjb25zdCBuZXdGaWx0ZXJWYWx1ZSA9IGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4obmV3RmlsdGVyLmRvbWFpbiwgbmV3RmlsdGVyKTtcblxuICBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZHg6IGZpbHRlcklkeCxcbiAgICBwcm9wOiAndmFsdWUnLFxuICAgIHZhbHVlOiBuZXdGaWx0ZXJWYWx1ZVxuICB9KTtcblxuICBuZXdTdGF0ZSA9IHNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWQ6IG5ld0ZpbHRlci5pZCxcbiAgICBtb2RlOiBnZXRTeW5jQW5pbWF0aW9uTW9kZShuZXdGaWx0ZXIpXG4gIH0pO1xuXG4gIC8vIHJlc2V0IGFuaW1hdGlvbiBjb25maWcgY3VycmVudCB0aW1lIHRvXG4gIHJldHVybiBzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgdmFsdWU6IG5ld1N0YXRlLmFuaW1hdGlvbkNvbmZpZy5kb21haW4/LlswXSA/PyBudWxsXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLnNldFRpbWVGaWx0ZXJTeW5jVGltZWxpbmVNb2RlQWN0aW9uXG4pIHtcbiAgY29uc3Qge2lkOiBmaWx0ZXJJZCwgbW9kZTogc3luY1RpbWVsaW5lTW9kZX0gPSBhY3Rpb247XG5cbiAgY29uc3QgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBmaWx0ZXJJZCk7XG4gIGlmIChmaWx0ZXJJZHggPT09IC0xKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICBpZiAoIXZhbGlkYXRlU3luY0FuaW1hdGlvbk1vZGUoZmlsdGVyLCBzeW5jVGltZWxpbmVNb2RlKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0ZpbHRlciA9IHtcbiAgICAuLi5maWx0ZXIsXG4gICAgc3luY1RpbWVsaW5lTW9kZVxuICB9O1xuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IHN3YXBfPEZpbHRlcj4obmV3RmlsdGVyKShzdGF0ZS5maWx0ZXJzKVxuICB9O1xuXG4gIHJldHVybiBhZGp1c3RBbmltYXRpb25Db25maWdXaXRoRmlsdGVyKG5ld1N0YXRlLCBmaWx0ZXJJZHgpO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBzdGF0ZSBvZiB0aGUgbG9hZGluZyBpbmRpY2F0b3IuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIHZpc1N0YXRlXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgUGF5bG9hZCB3aXRoIGNoYW5nZSBvZiBudW1iZXIgb2YgYWN0aXZlIGxvYWRpbmcgYWN0aW9ucy5cbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0TG9hZGluZ0luZGljYXRvclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge3BheWxvYWQ6IHtjaGFuZ2V9fToge3BheWxvYWQ6IFNldExvYWRpbmdJbmRpY2F0b3JQYXlsb2FkfVxuKTogVmlzU3RhdGUgPT4ge1xuICBsZXQge2xvYWRpbmdJbmRpY2F0b3JWYWx1ZX0gPSBzdGF0ZTtcbiAgaWYgKCFsb2FkaW5nSW5kaWNhdG9yVmFsdWUpIHtcbiAgICBsb2FkaW5nSW5kaWNhdG9yVmFsdWUgPSAwO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsb2FkaW5nSW5kaWNhdG9yVmFsdWU6IE1hdGgubWF4KGxvYWRpbmdJbmRpY2F0b3JWYWx1ZSArIGNoYW5nZSwgMClcbiAgfTtcbn07XG5cbmZ1bmN0aW9uIGFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihzdGF0ZTogUywgZmlsdGVySWR4OiBudW1iZXIpOiBTIHtcbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdO1xuICBpZiAoKGZpbHRlciBhcyBUaW1lUmFuZ2VGaWx0ZXIpLnN5bmNlZFdpdGhMYXllclRpbWVsaW5lKSB7XG4gICAgY29uc3QgdGltZWxpbmVWYWx1ZSA9IGdldFRpbWVsaW5lVmFsdWVGcm9tRmlsdGVyKGZpbHRlcik7XG4gICAgY29uc3QgdmFsdWUgPSBzdGF0ZS5hbmltYXRpb25Db25maWcudGltZVN0ZXBzXG4gICAgICA/IHNuYXBUb01hcmtzKHRpbWVsaW5lVmFsdWUsIHN0YXRlLmFuaW1hdGlvbkNvbmZpZy50aW1lU3RlcHMpXG4gICAgICA6IHRpbWVsaW5lVmFsdWU7XG4gICAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIoc3RhdGUsIHt2YWx1ZX0pO1xuICB9XG4gIHJldHVybiBzdGF0ZTtcbn1cblxuZnVuY3Rpb24gZ2V0VGltZWxpbmVWYWx1ZUZyb21GaWx0ZXIoZmlsdGVyKSB7XG4gIHJldHVybiBmaWx0ZXIudmFsdWVbZmlsdGVyLnN5bmNUaW1lbGluZU1vZGVdO1xufVxuXG5mdW5jdGlvbiBnZXRTeW5jQW5pbWF0aW9uTW9kZShmaWx0ZXI6IFRpbWVSYW5nZUZpbHRlcikge1xuICBpZiAoZmlsdGVyLmFuaW1hdGlvbldpbmRvdyA9PT0gQU5JTUFUSU9OX1dJTkRPVy5mcmVlKSB7XG4gICAgcmV0dXJuIGZpbHRlci5zeW5jVGltZWxpbmVNb2RlID8/IFNZTkNfVElNRUxJTkVfTU9ERVMuZW5kO1xuICB9XG5cbiAgcmV0dXJuIFNZTkNfVElNRUxJTkVfTU9ERVMuZW5kO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN5bmNBbmltYXRpb25Nb2RlKGZpbHRlcjogVGltZVJhbmdlRmlsdGVyLCBuZXdNb2RlOiBudW1iZXIpIHtcbiAgcmV0dXJuICEoXG4gICAgZmlsdGVyLmFuaW1hdGlvbldpbmRvdyAhPT0gQU5JTUFUSU9OX1dJTkRPVy5mcmVlICYmIG5ld01vZGUgPT09IFNZTkNfVElNRUxJTkVfTU9ERVMuc3RhcnRcbiAgKTtcbn1cblxuZnVuY3Rpb24gYWRqdXN0VGltZUZpbHRlckludGVydmFsKHN0YXRlLCBmaWx0ZXIpIHtcbiAgY29uc3QgaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyA9IGdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMoc3RhdGUubGF5ZXJzKTtcblxuICBsZXQgaW50ZXJ2YWw6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBpZiAoaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycy5sZW5ndGggPiAwKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IGludGVydmFsSW5kZXggPSBpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLnJlZHVjZSgoY3VycmVudEluZGV4LCBsKSA9PiB7XG4gICAgICBpZiAobC5tZXRhLnRhcmdldFRpbWVJbnRlcnZhbCkge1xuICAgICAgICBjb25zdCBuZXdJbmRleCA9IFRJTUVfSU5URVJWQUxTX09SREVSRUQuZmluZEluZGV4KGkgPT4gaSA9PT0gbC5tZXRhLnRhcmdldFRpbWVJbnRlcnZhbCk7XG4gICAgICAgIHJldHVybiBuZXdJbmRleCA+IC0xICYmIG5ld0luZGV4IDwgY3VycmVudEluZGV4ID8gbmV3SW5kZXggOiBjdXJyZW50SW5kZXg7XG4gICAgICB9XG4gICAgfSwgVElNRV9JTlRFUlZBTFNfT1JERVJFRC5sZW5ndGggLSAxKTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgaGV4VGlsZUludGVydmFsID0gVElNRV9JTlRFUlZBTFNfT1JERVJFRFtpbnRlcnZhbEluZGV4XTtcbiAgICBpbnRlcnZhbCA9IExheWVyVG9GaWx0ZXJUaW1lSW50ZXJ2YWxbaGV4VGlsZUludGVydmFsXTtcbiAgfVxuXG4gIGlmICghaW50ZXJ2YWwpIHtcbiAgICByZXR1cm4gZmlsdGVyO1xuICB9XG5cbiAgLy8gYWRqdXN0IGZpbHRlclxuICBjb25zdCB0aW1lRm9ybWF0ID0gZ2V0RGVmYXVsdFRpbWVGb3JtYXQoaW50ZXJ2YWwpO1xuICBjb25zdCB1cGRhdGVkUGxvdFR5cGUgPSB7Li4uZmlsdGVyLnBsb3RUeXBlLCBpbnRlcnZhbCwgdGltZUZvcm1hdH07XG4gIGNvbnN0IG5ld0ZpbHRlciA9IHVwZGF0ZVRpbWVGaWx0ZXJQbG90VHlwZShmaWx0ZXIsIHVwZGF0ZWRQbG90VHlwZSwgc3RhdGUuZGF0YXNldHMpO1xuICByZXR1cm4gYWRqdXN0VmFsdWVUb0FuaW1hdGlvbldpbmRvdyhzdGF0ZSwgbmV3RmlsdGVyKTtcbn1cblxuLy8gRmluZCBkYXRhSWQgZnJvbSBhIHNhdmVkIHZpc1N0YXRlIHByb3BlcnR5OlxuLy8gbGF5ZXJzLCBmaWx0ZXJzLCBpbnRlcmFjdGlvbnMsIGxheWVyQmxlbmRpbmcsIG92ZXJsYXlCbGVuZGluZywgc3BsaXRNYXBzLCBhbmltYXRpb25Db25maWcsIGVkaXRvclxuLy8gcmVwbGFjZSBpdCB3aXRoIGFub3RoZXIgZGF0YUlkXG5mdW5jdGlvbiBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHModmFsdWU6IGFueSwgZGF0YUlkOiBzdHJpbmcsIGRhdGFJZFRvUmVwbGFjZTogc3RyaW5nKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIC8vIGZvciBsYXllcnMsIGZpbHRlcnMsIGNhbGwgZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzIG9uIGVhY2ggaXRlbSBpbiBhcnJheVxuICAgIGNvbnN0IHJlcGxhY2VkID0gdmFsdWVcbiAgICAgIC5tYXAodiA9PiBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHModiwgZGF0YUlkLCBkYXRhSWRUb1JlcGxhY2UpKVxuICAgICAgLmZpbHRlcihkID0+IGQpO1xuICAgIHJldHVybiByZXBsYWNlZC5sZW5ndGggPyByZXBsYWNlZCA6IG51bGw7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZS5kYXRhSWQgPT09ICdzdHJpbmcnICYmIHZhbHVlLmRhdGFJZCA9PT0gZGF0YUlkKSB7XG4gICAgLy8gb3RoZXJzXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnZhbHVlLFxuICAgICAgZGF0YUlkOiBkYXRhSWRUb1JlcGxhY2VcbiAgICB9O1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUuZGF0YUlkKSAmJiB2YWx1ZS5kYXRhSWQuaW5jbHVkZXMoZGF0YUlkKSkge1xuICAgIC8vIGZpbHRlclxuICAgIHJldHVybiB7XG4gICAgICAuLi52YWx1ZSxcbiAgICAgIGRhdGFJZDogdmFsdWUuZGF0YUlkLm1hcChkID0+IChkID09PSBkYXRhSWQgPyBkYXRhSWRUb1JlcGxhY2UgOiBkKSlcbiAgICB9O1xuICB9IGVsc2UgaWYgKHZhbHVlLmNvbmZpZz8uZGF0YUlkICYmIHZhbHVlLmNvbmZpZz8uZGF0YUlkID09PSBkYXRhSWQpIHtcbiAgICAvLyBsYXllclxuICAgIHJldHVybiB7XG4gICAgICAuLi52YWx1ZSxcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICAuLi52YWx1ZS5jb25maWcsXG4gICAgICAgIGRhdGFJZDogZGF0YUlkVG9SZXBsYWNlXG4gICAgICB9XG4gICAgfTtcbiAgfSBlbHNlIGlmIChpc09iamVjdCh2YWx1ZSkgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBkYXRhSWQpKSB7XG4gICAgLy8gZm9yIHZhbHVlIHNhdmVkIGFzIHtbZGF0YUlkXTogey4uLn19XG4gICAgcmV0dXJuIHtbZGF0YUlkVG9SZXBsYWNlXTogdmFsdWVbZGF0YUlkXX07XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLy8gRmluZCBkYXRhc2V0SWRzIGRlcml2ZWQgYSBzYXZlZCB2aXNTdGF0ZSBQcm9wZXJ0eTtcbmZ1bmN0aW9uIGZpbmRDaGlsZERhdGFzZXRJZHModmFsdWUpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gZm9yIGxheWVycywgZmlsdGVycywgY2FsbCBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMgb24gZWFjaCBpdGVtIGluIGFycmF5XG4gICAgY29uc3QgY2hpbGREYXRhSWRzID0gdmFsdWUubWFwKGZpbmRDaGlsZERhdGFzZXRJZHMpLmZpbHRlcihkID0+IGQpO1xuICAgIHJldHVybiBjaGlsZERhdGFJZHMubGVuZ3RoID8gY2hpbGREYXRhSWRzIDogbnVsbDtcbiAgfVxuXG4gIC8vIGNoaWxkIGRhdGEgaWQgdXN1YWxseSBzdG9yZXMgaW4gdGhlIGRlcml2ZWQgZGF0YXNldCBpbmZvXG4gIHJldHVybiB2YWx1ZT8ubmV3RGF0YXNldD8uaW5mby5pZCB8fCBudWxsO1xufVxuXG4vLyBtb3ZlZCB1bm1lcmdlZCBsYXllcnMsIGZpbHRlcnMsIGludGVyYWN0aW9uc1xuZnVuY3Rpb24gbW92ZVZhbHVlVG9CZU1lcmdlZChzdGF0ZSwgcHJvcFZhbHVlcywge3Byb3AsIHRvTWVyZ2VQcm9wLCBzYXZlVW5tZXJnZWR9KSB7XG4gIC8vIHJlbW92ZSBwcm9wIHZhbHVlIGZyb20gc3RhdGVcbiAgLy8gVE9ETzogc2hvdWxkIHdlIGFkZCByZW1vdmUgdXBkYXRlciB0byBtZXJnZXIgYXMgd2VsbD9cbiAgaWYgKCFwcm9wVmFsdWVzKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHN0YXRlUmVtb3ZlZCA9XG4gICAgcHJvcCA9PT0gJ2xheWVycydcbiAgICAgID8gcHJvcFZhbHVlcy5yZWR1Y2UoKGFjY3UsIHByb3BWYWx1ZSkgPT4gcmVtb3ZlTGF5ZXJVcGRhdGVyKGFjY3UsIHtpZDogcHJvcFZhbHVlLmlkfSksIHN0YXRlKVxuICAgICAgOiBBcnJheS5pc0FycmF5KHN0YXRlW3Byb3BdKVxuICAgICAgPyB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgW3Byb3BdOiBzdGF0ZVtwcm9wXS5maWx0ZXIocCA9PiAhcHJvcFZhbHVlcy5maW5kKHByb3BWYWx1ZSA9PiBwLmlkID09PSBwcm9wVmFsdWUuaWQpKVxuICAgICAgICB9XG4gICAgICA6IC8vIGlmIG5vdCBhcnJheSwgd2Ugd29uJ3QgcmVtb3ZlIGl0LCByZW1vdmUgZGF0YXNldCBzaG91bGQgaGFuZGxlIGl0XG4gICAgICAgIHN0YXRlO1xuXG4gIC8vIG1vdmUgdG8gc3RhdGVUb0JlTWVyZ2VkXG4gIGNvbnN0IHRvQmVNZXJnZWQgPSB7XG4gICAgW3RvTWVyZ2VQcm9wXTogc2F2ZVVubWVyZ2VkXG4gICAgICA/IC8vIGNhbGwgbWVyZ2Ugc2F2ZVVubWVyZ2VkIG1ldGhvZFxuICAgICAgICBzYXZlVW5tZXJnZWQoc3RhdGVSZW1vdmVkLCBwcm9wVmFsdWVzKVxuICAgICAgOiAvLyBpZiB0b01lcmdlUHJvcCBpcyBhcmFheSwgYXBwZW5kIHRvIGl0XG4gICAgICBBcnJheS5pc0FycmF5KHN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF0pXG4gICAgICA/IFsuLi5zdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdLCAuLi5wcm9wVmFsdWVzXVxuICAgICAgOiAvLyBzYXZlIHByb3BWYWx1ZXMgdG8gdG9NZXJnZVxuICAgICAgaXNPYmplY3Qoc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXSlcbiAgICAgID8ge1xuICAgICAgICAgIC4uLnN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF0sXG4gICAgICAgICAgLi4ucHJvcFZhbHVlc1xuICAgICAgICB9XG4gICAgICA6IHN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlUmVtb3ZlZCxcbiAgICAuLi50b0JlTWVyZ2VkXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VEYXRhc2V0QW5kRGVwczxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAgZGF0YUlkOiBzdHJpbmcsXG4gIGRhdGFJZFRvVXNlOiBzdHJpbmdcbik6IFQge1xuICByZXR1cm4gY29tcG9zZV88VD4oW1xuICAgIGFwcGx5XyhyZXBsYWNlRGF0YXNldERlcHNJblN0YXRlLCB7ZGF0YUlkLCBkYXRhSWRUb1VzZX0pLFxuICAgIGFwcGx5XyhyZW1vdmVEYXRhc2V0VXBkYXRlciwge2RhdGFJZH0pXG4gIF0pKHN0YXRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVTdGF0ZUZvckRhdGFzZXRSZXBsYWNlPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgZGF0YUlkVG9Vc2U6IHN0cmluZ1xuKTogVCB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRTdGF0ZSA9IHNlcmlhbGl6ZVZpc1N0YXRlKHN0YXRlLCBzdGF0ZS5zY2hlbWEpO1xuICBjb25zdCBuZXh0U3RhdGUgPSByZXBsYWNlRGF0YXNldEFuZERlcHMoc3RhdGUsIGRhdGFJZCwgZGF0YUlkVG9Vc2UpO1xuICAvLyBtYWtlIGEgY29weSBvZiBsYXllck9yZGVyLCBiZWNhdXNlIGxheWVyIGlkIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIGl0IGJ5IGNhbGxpbmcgcmVtb3ZlTGF5ZXJVcGRhdGVyXG4gIGNvbnN0IHByZXNlcnZlTGF5ZXJPcmRlciA9IFsuLi5zdGF0ZS5sYXllck9yZGVyXTtcblxuICAvLyBwcmVzZXJ2ZSBkYXRhc2V0IG9yZGVyXG4gIG5leHRTdGF0ZS5wcmVzZXJ2ZURhdGFzZXRPcmRlciA9IE9iamVjdC5rZXlzKHN0YXRlLmRhdGFzZXRzKS5tYXAoZCA9PlxuICAgIGQgPT09IGRhdGFJZCA/IGRhdGFJZFRvVXNlIDogZFxuICApO1xuXG4gIC8vIHByZXNlcnZlTGF5ZXJPcmRlclxuICBpZiAobmV4dFN0YXRlLmxheWVyVG9CZU1lcmdlZD8ubGVuZ3RoKSB7XG4gICAgLy8gY29weSBzcGxpdCBtYXBzIHRvIGJlIG1lcmdlZCwgYmVjYXVzZSBpdCB3aWxsIGJlIHJlc2V0IGluIHJlbW92ZSBsYXllclxuICAgIG5leHRTdGF0ZS5zcGxpdE1hcHNUb0JlTWVyZ2VkID0gc2VyaWFsaXplZFN0YXRlPy5zcGxpdE1hcHMgPz8gW107XG4gICAgbmV4dFN0YXRlLmxheWVyT3JkZXIgPSBbLi4ucHJlc2VydmVMYXllck9yZGVyXTtcbiAgfVxuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlRGF0YXNldERlcHNJblN0YXRlPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICB7ZGF0YUlkLCBkYXRhSWRUb1VzZX06IHtkYXRhSWQ6IHN0cmluZzsgZGF0YUlkVG9Vc2U6IHN0cmluZ31cbik6IFQge1xuICBjb25zdCBzZXJpYWxpemVkU3RhdGUgPSBzZXJpYWxpemVWaXNTdGF0ZShzdGF0ZSwgc3RhdGUuc2NoZW1hKTtcblxuICBjb25zdCBuZXh0U3RhdGUgPSBzdGF0ZS5tZXJnZXJzLnJlZHVjZShcbiAgICAoXG4gICAgICBhY2N1U3RhdGUsXG4gICAgICB7cHJvcCwgdG9NZXJnZVByb3AsIHJlcGxhY2VQYXJlbnREYXRhc2V0SWRzLCBnZXRDaGlsZERhdGFzZXRJZHMsIHNhdmVVbm1lcmdlZCwgcHJlc2VydmVPcmRlcn1cbiAgICApID0+IHtcbiAgICAgIC8vIGdldCBkYXRhc2V0IGlkcyB0aGF0IGFyZSBkZXBlbmRzIG9uIHRoaXMgZGF0YXNldFxuICAgICAgY29uc3QgcHJvcHMgPSB0b0FycmF5KHByb3ApO1xuICAgICAgY29uc3QgdG9NZXJnZVByb3BzID0gdG9BcnJheSh0b01lcmdlUHJvcCk7XG4gICAgICBjb25zdCBzYXZlZFByb3BzID0gc2VyaWFsaXplZFN0YXRlID8gcHJvcHMubWFwKHAgPT4gc2VyaWFsaXplZFN0YXRlW3BdKSA6IFtdO1xuXG4gICAgICBsZXQgcmVwbGFjZWRTdGF0ZSA9IGFjY3VTdGF0ZTtcbiAgICAgIHNhdmVkUHJvcHMuZm9yRWFjaCgocHJvcFZhbHVlLCBpKSA9PiB7XG4gICAgICAgIGNvbnN0IG1lcmdlck9wdGlvbnMgPSB7XG4gICAgICAgICAgcHJvcDogcHJvcHNbaV0sXG4gICAgICAgICAgdG9NZXJnZVByb3A6IHRvTWVyZ2VQcm9wc1tpXSxcbiAgICAgICAgICBnZXRDaGlsZERhdGFzZXRJZHMsXG4gICAgICAgICAgc2F2ZVVubWVyZ2VkXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVwbGFjZWRJdGVtID1cbiAgICAgICAgICByZXBsYWNlUGFyZW50RGF0YXNldElkcz8uKHByb3BWYWx1ZSwgZGF0YUlkLCBkYXRhSWRUb1VzZSkgfHxcbiAgICAgICAgICBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMocHJvcFZhbHVlLCBkYXRhSWQsIGRhdGFJZFRvVXNlKTtcbiAgICAgICAgcmVwbGFjZWRTdGF0ZSA9IHJlcGxhY2VkSXRlbVxuICAgICAgICAgID8gcmVwbGFjZVByb3BWYWx1ZUluU3RhdGUocmVwbGFjZWRTdGF0ZSwgcmVwbGFjZWRJdGVtLCBtZXJnZXJPcHRpb25zKVxuICAgICAgICAgIDogcmVwbGFjZWRTdGF0ZTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgbWVyZ2VyT3B0aW9ucy50b01lcmdlUHJvcCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgcmVwbGFjZWRTdGF0ZVttZXJnZXJPcHRpb25zLnRvTWVyZ2VQcm9wXT8ubGVuZ3RoICYmXG4gICAgICAgICAgcHJlc2VydmVPcmRlclxuICAgICAgICApIHtcbiAgICAgICAgICByZXBsYWNlZFN0YXRlW3ByZXNlcnZlT3JkZXJdID0gcHJvcFZhbHVlLm1hcChpdGVtID0+IGl0ZW0uaWQpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHJlcGxhY2VkU3RhdGU7XG4gICAgfSxcbiAgICBzdGF0ZVxuICApO1xuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VQcm9wVmFsdWVJblN0YXRlKFxuICBzdGF0ZSxcbiAgcmVwbGFjZWRJdGVtLFxuICB7cHJvcCwgdG9NZXJnZVByb3AsIGdldENoaWxkRGF0YXNldElkcywgc2F2ZVVubWVyZ2VkfVxuKSB7XG4gIC8vIHByb3AgaXMgZGVwZW5kcyBvbiB0aGUgZGF0YXNldCB0byBiZSByZXBsYWNlZFxuICAvLyByZW1vdmUgcHJvcCBmcm9tIHN0YXRlLCBhbmQgbW92ZSBpdCB0byB0b0JlTWVyZ2VkXG4gIGxldCBuZXh0U3RhdGUgPSBtb3ZlVmFsdWVUb0JlTWVyZ2VkKHN0YXRlLCByZXBsYWNlZEl0ZW0sIHtwcm9wLCB0b01lcmdlUHJvcCwgc2F2ZVVubWVyZ2VkfSk7XG4gIGNvbnN0IGNoaWxkRGF0YUlkcyA9IGdldENoaWxkRGF0YXNldElkcz8uKHJlcGxhY2VkSXRlbSkgfHwgZmluZENoaWxkRGF0YXNldElkcyhyZXBsYWNlZEl0ZW0pO1xuXG4gIGlmIChjaGlsZERhdGFJZHMpIHtcbiAgICBuZXh0U3RhdGUgPSB0b0FycmF5KGNoaWxkRGF0YUlkcykucmVkdWNlKChhY2N1LCBjaGlsZERhdGFJZCkgPT4ge1xuICAgICAgLy8gc2hvdWxkbid0IG5lZWQgdG8gY2hhbmdlIGNoaWxkIGRhdGFzZXQgaWQsXG4gICAgICAvLyBidXQgc3RpbGwgbmVlZCB0byBtb3ZlIG91dCBvZiBzdGF0ZSBhbmQgbWVyZ2UgYmFjayBpblxuICAgICAgcmV0dXJuIHJlcGxhY2VEYXRhc2V0QW5kRGVwcyhhY2N1LCBjaGlsZERhdGFJZCwgY2hpbGREYXRhSWQpO1xuICAgIH0sIG5leHRTdGF0ZSk7XG4gIH1cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBOztBQUVBLFNBQVFBLElBQUksUUFBTyxZQUFZO0FBRS9CLE9BQU9DLElBQUksTUFBTSxtQkFBbUI7QUFDcEMsT0FBT0MsU0FBUyxNQUFNLFdBQVc7QUFDakMsU0FBUUMsT0FBTyxJQUFJQyxPQUFPLFFBQU8sZUFBZTtBQUNoRCxPQUFPQyxTQUFTLE1BQU0sNkJBQTZCO0FBQ25ELE9BQU9DLEdBQUcsTUFBTSx1QkFBdUI7QUFDdkMsT0FBT0MsT0FBTyxNQUFNLDJCQUEyQjtBQUMvQyxPQUFPQyxJQUFJLE1BQU0sd0JBQXdCO0FBQ3pDLE9BQU9DLElBQUksTUFBTSx3QkFBd0I7QUFDekMsT0FBT0MsR0FBRyxNQUFNLHVCQUF1QjtBQUN2QyxPQUFPQyxJQUFJLElBQUdDLHFCQUFxQixFQUFFQyxRQUFRLFFBQU8sa0JBQWtCO0FBQ3RFO0FBQ0EsU0FDRUMsVUFBVSxFQUNWQyxXQUFXLEVBQ1hDLGNBQWMsRUFDZEMsaUJBQWlCLEVBQ2pCQyxXQUFXLFFBQ04sa0JB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
|