@kepler.gl/reducers 3.3.0-alpha.15 → 3.3.0-alpha.17

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.
Files changed (47) hide show
  1. package/dist/cjs/column-edit-reconcile.js +100 -0
  2. package/dist/cjs/column-edit-updaters.spec.js +840 -0
  3. package/dist/cjs/combined-updaters.js +166 -8
  4. package/dist/cjs/composers.js +4 -5
  5. package/dist/cjs/dataset-ops-updaters.js +375 -0
  6. package/dist/cjs/dataset-ops-updaters.spec.js +382 -0
  7. package/dist/cjs/export-utils.js +118 -46
  8. package/dist/cjs/interaction-utils.js +166 -6
  9. package/dist/cjs/layer-utils.js +135 -9
  10. package/dist/cjs/ui-state-updaters.js +134 -51
  11. package/dist/cjs/ui-state.js +2 -2
  12. package/dist/cjs/vis-state-merger-text-label.spec.js +75 -0
  13. package/dist/cjs/vis-state-merger.js +99 -25
  14. package/dist/cjs/vis-state-selectors.js +5 -4
  15. package/dist/cjs/vis-state-updaters.js +1077 -256
  16. package/dist/cjs/vis-state.js +2 -2
  17. package/dist/column-edit-reconcile.d.ts +4 -0
  18. package/dist/column-edit-updaters.spec.d.ts +1 -0
  19. package/dist/combined-updaters.d.ts +21 -1
  20. package/dist/composers.d.ts +3 -0
  21. package/dist/dataset-ops-updaters.d.ts +21 -0
  22. package/dist/dataset-ops-updaters.spec.d.ts +1 -0
  23. package/dist/esm/column-edit-reconcile.js +95 -0
  24. package/dist/esm/column-edit-updaters.spec.js +839 -0
  25. package/dist/esm/combined-updaters.js +166 -8
  26. package/dist/esm/composers.js +3 -2
  27. package/dist/esm/dataset-ops-updaters.js +357 -0
  28. package/dist/esm/dataset-ops-updaters.spec.js +381 -0
  29. package/dist/esm/export-utils.js +117 -45
  30. package/dist/esm/interaction-utils.js +159 -3
  31. package/dist/esm/layer-utils.js +133 -9
  32. package/dist/esm/ui-state-updaters.js +133 -50
  33. package/dist/esm/ui-state.js +2 -2
  34. package/dist/esm/vis-state-merger-text-label.spec.js +74 -0
  35. package/dist/esm/vis-state-merger.js +99 -26
  36. package/dist/esm/vis-state-selectors.js +5 -4
  37. package/dist/esm/vis-state-updaters.js +1020 -263
  38. package/dist/esm/vis-state.js +2 -2
  39. package/dist/export-utils.d.ts +2 -2
  40. package/dist/interaction-utils.d.ts +25 -2
  41. package/dist/layer-utils.d.ts +17 -0
  42. package/dist/ui-state-updaters.d.ts +30 -0
  43. package/dist/vis-state-merger-text-label.spec.d.ts +1 -0
  44. package/dist/vis-state-merger.d.ts +10 -2
  45. package/dist/vis-state-updaters.d.ts +61 -15
  46. package/dist/vis-state.d.ts +20 -0
  47. package/package.json +17 -17
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.VIS_STATE_MERGERS = void 0;
9
9
  exports.createLayerFromConfig = createLayerFromConfig;
10
+ exports.fallbackTextLabelForLoadedLayer = fallbackTextLabelForLoadedLayer;
10
11
  exports.insertLayerAtRightOrder = insertLayerAtRightOrder;
11
12
  exports.isSavedLayerConfigV1 = isSavedLayerConfigV1;
12
13
  exports.mergeAnimationConfig = mergeAnimationConfig;
@@ -46,12 +47,14 @@ var _pick = _interopRequireDefault(require("es-toolkit/compat/pick"));
46
47
  var _flattenDeep = _interopRequireDefault(require("es-toolkit/compat/flattenDeep"));
47
48
  var _deepmerge = _interopRequireDefault(require("deepmerge"));
48
49
  var _utils = require("@kepler.gl/utils");
50
+ var _layers = require("@kepler.gl/layers");
49
51
  var _effects = require("@kepler.gl/effects");
50
52
  var _commonUtils = require("@kepler.gl/common-utils");
51
53
  var _constants = require("@kepler.gl/constants");
52
54
  var _schemas = require("@kepler.gl/schemas");
53
55
  var _table = require("@kepler.gl/table");
54
56
  var _layerUtils = require("./layer-utils");
57
+ var _interactionUtils = require("./interaction-utils");
55
58
  var _excluded = ["enabled"],
56
59
  _excluded2 = ["optional"];
57
60
  function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
@@ -186,13 +189,15 @@ function insertItemBasedOnPreservedOrder(currentItems, items) {
186
189
  }
187
190
  function createLayerFromConfig(state, layerConfig) {
188
191
  // check if the layer config is parsed
189
- var parsedLayerConfig = isSavedLayerConfigV1(layerConfig) ? parseLayerConfig(state.schema, layerConfig) : layerConfig;
192
+ var savedLayerConfig = isSavedLayerConfigV1(layerConfig);
193
+ var parsedLayerConfig = savedLayerConfig ? parseLayerConfig(state.schema, layerConfig) : layerConfig;
190
194
  if (!parsedLayerConfig) {
191
195
  return null;
192
196
  }
193
197
  // first validate config against dataset
194
198
  var _validateLayersByData = validateLayersByDatasets(state.datasets, state.layerClasses, [parsedLayerConfig], {
195
- allowEmptyColumn: true
199
+ allowEmptyColumn: true,
200
+ keepUnlabeledAggregationTextLabel: savedLayerConfig
196
201
  }),
197
202
  validated = _validateLayersByData.validated,
198
203
  failed = _validateLayersByData.failed;
@@ -273,7 +278,9 @@ function mergeLayers(state) {
273
278
  toMerge.push(l);
274
279
  }
275
280
  });
276
- var _validateLayersByData2 = validateLayersByDatasets(state.datasets, state.layerClasses, toMerge),
281
+ var _validateLayersByData2 = validateLayersByDatasets(state.datasets, state.layerClasses, toMerge, {
282
+ keepUnlabeledAggregationTextLabel: true
283
+ }),
277
284
  mergedLayer = _validateLayersByData2.validated,
278
285
  failed = _validateLayersByData2.failed;
279
286
  unmerged.push.apply(unmerged, (0, _toConsumableArray2["default"])(failed));
@@ -483,20 +490,23 @@ function mergeInteractions(state, interactionToBeMerged) {
483
490
  if (!state.interactionConfig[key]) {
484
491
  return;
485
492
  }
486
- var currentConfig = key === 'tooltip' || key === 'brush' || key === 'geocoder' ? state.interactionConfig[key].config : null;
493
+ var currentConfig = key === 'tooltip' || key === 'brush' || key === 'geocoder' || key === 'legend' || key === 'zoomOpacity' ? state.interactionConfig[key].config : null;
487
494
  var _ref2 = interactionToBeMerged[key] || {},
488
495
  enabled = _ref2.enabled,
489
496
  configSaved = (0, _objectWithoutProperties2["default"])(_ref2, _excluded);
490
497
  var configToMerge = configSaved;
491
498
  if (key === 'tooltip') {
492
- var _mergeInteractionTool = mergeInteractionTooltipConfig(state, configSaved),
499
+ var savedTooltipConfig = configSaved;
500
+ var _mergeInteractionTool = mergeInteractionTooltipConfig(state, savedTooltipConfig),
493
501
  mergedTooltip = _mergeInteractionTool.mergedTooltip,
494
502
  unmergedTooltip = _mergeInteractionTool.unmergedTooltip;
495
503
 
496
504
  // merge new dataset tooltips with original dataset tooltips
497
- configToMerge = {
505
+ configToMerge = _objectSpread({
498
506
  fieldsToShow: _objectSpread(_objectSpread({}, currentConfig.fieldsToShow), mergedTooltip)
499
- };
507
+ }, savedTooltipConfig.timezone !== undefined ? {
508
+ timezone: savedTooltipConfig.timezone
509
+ } : {});
500
510
  if (Object.keys(unmergedTooltip).length) {
501
511
  // @ts-expect-error
502
512
  unmerged.tooltip = {
@@ -520,6 +530,24 @@ function mergeInteractions(state, interactionToBeMerged) {
520
530
  }
521
531
  function combineInteractionConfigs(configs) {
522
532
  var combined = _objectSpread({}, configs[0]);
533
+ // `legend` is optional on older saved maps; seed it so a later config is not dropped.
534
+ if (!combined.legend) {
535
+ var withLegend = configs.find(function (c) {
536
+ return c.legend;
537
+ });
538
+ if (withLegend !== null && withLegend !== void 0 && withLegend.legend) {
539
+ combined.legend = withLegend.legend;
540
+ }
541
+ }
542
+ // Same for fade-on-zoom: an older config in front must not drop controllers from a later one.
543
+ if (!combined.zoomOpacity) {
544
+ var withZoomOpacity = configs.find(function (c) {
545
+ return c.zoomOpacity;
546
+ });
547
+ if (withZoomOpacity !== null && withZoomOpacity !== void 0 && withZoomOpacity.zoomOpacity) {
548
+ combined.zoomOpacity = withZoomOpacity.zoomOpacity;
549
+ }
550
+ }
523
551
  // handle each property key of an `InteractionConfig`, e.g. tooltip, geocoder, brush, coordinate
524
552
  // by combining values for each among all passed in configs
525
553
  var _loop2 = function _loop2(key) {
@@ -544,6 +572,14 @@ function combineInteractionConfigs(configs) {
544
572
  combined[key].compareType = getValueWithHighestOccurrence(toBeCombinedProps.map(function (p) {
545
573
  return p.compareType;
546
574
  }));
575
+ var hasTimezone = toBeCombinedProps.some(function (p) {
576
+ return (p === null || p === void 0 ? void 0 : p.timezone) !== undefined;
577
+ });
578
+ if (hasTimezone) {
579
+ combined[key].timezone = getValueWithHighestOccurrence(toBeCombinedProps.map(function (p) {
580
+ return p === null || p === void 0 ? void 0 : p.timezone;
581
+ }));
582
+ }
547
583
 
548
584
  // combine fieldsToShow among all dataset ids
549
585
  combined[key].fieldsToShow = toBeCombinedProps.map(function (p) {
@@ -583,9 +619,24 @@ function combineInteractionConfigs(configs) {
583
619
  })) !== null && _aggregate !== void 0 ? _aggregate : null;
584
620
  }
585
621
  if (key === 'geocoder') {
622
+ var _toBeCombinedProps$fi;
586
623
  combined[key].limitSearch = toBeCombinedProps.some(function (p) {
587
624
  return p === null || p === void 0 ? void 0 : p.limitSearch;
588
625
  });
626
+ var color = (_toBeCombinedProps$fi = toBeCombinedProps.find(function (p) {
627
+ return p === null || p === void 0 ? void 0 : p.color;
628
+ })) === null || _toBeCombinedProps$fi === void 0 ? void 0 : _toBeCombinedProps$fi.color;
629
+ if (color) {
630
+ combined[key].color = color;
631
+ }
632
+ }
633
+ if (key === 'legend') {
634
+ combined[key].hideInvisibleLayers = toBeCombinedProps.some(function (p) {
635
+ return p === null || p === void 0 ? void 0 : p.hideInvisibleLayers;
636
+ });
637
+ }
638
+ if (key === 'zoomOpacity' && combined.zoomOpacity) {
639
+ combined.zoomOpacity.controllers = (0, _interactionUtils.combineZoomOpacityControllers)(toBeCombinedProps);
589
640
  }
590
641
  };
591
642
  for (var key in combined) {
@@ -708,7 +759,8 @@ function mergeCharts(state, charts, fromConfig) {
708
759
  // Older configs omit `pinned`; keep charts visible like the legend.
709
760
  pinned: chart.pinned !== false,
710
761
  display: _objectSpread(_objectSpread({}, chart.display), {}, {
711
- isConfigActive: false
762
+ isConfigActive: false,
763
+ isJsonEditorActive: false
712
764
  })
713
765
  }) : chart;
714
766
  if (normalized.dataId && (!state.datasets[normalized.dataId] || state.isMergingDatasets[normalized.dataId])) {
@@ -995,28 +1047,46 @@ function validateColumn(column, columns, allFields) {
995
1047
  * @param {Object} options
996
1048
  * @return {Object} - validated textlabel
997
1049
  */
998
- function validateSavedTextLabel(fields, _ref9, savedTextLabel) {
999
- var _ref0 = (0, _slicedToArray2["default"])(_ref9, 1),
1000
- layerTextLabel = _ref0[0];
1050
+ function validateSavedTextLabel(fields, layerTextLabels, savedTextLabel) {
1001
1051
  var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
1052
+ var layerTextLabel = layerTextLabels[0];
1002
1053
  var savedTextLabels = Array.isArray(savedTextLabel) ? savedTextLabel : [savedTextLabel];
1054
+ var countLabelLayer = Boolean(options.layerType && _layers.AGGREGATION_COUNT_LAYER_TYPES.has(options.layerType));
1003
1055
 
1004
1056
  // validate field
1005
1057
  return savedTextLabels.map(function (textLabel) {
1006
- var field = textLabel.field ? fields.find(function (fd) {
1007
- return Object.keys(textLabel.field).every(function (key) {
1008
- return textLabel.field[key] === fd[key];
1058
+ var field = null;
1059
+ if (textLabel.field) {
1060
+ // Cluster, hexbin, and grid persist a synthetic point-count field that
1061
+ // is not one of the dataset columns.
1062
+ field = countLabelLayer && textLabel.field.name === _layers.POINT_COUNT_FIELD_NAME ? (0, _layers.createPointCountLabelField)() : fields.find(function (fd) {
1063
+ return Object.keys(textLabel.field).every(function (key) {
1064
+ return textLabel.field[key] === fd[key];
1065
+ });
1009
1066
  });
1010
- }) : null;
1067
+ }
1011
1068
  if (field === undefined && options.throwOnError) {
1012
1069
  throw new Error("Layer has invalid text label field: ".concat(JSON.stringify(textLabel.field)));
1013
1070
  }
1014
1071
  return Object.keys(layerTextLabel).reduce(function (accu, key) {
1015
- return _objectSpread(_objectSpread({}, accu), {}, (0, _defineProperty2["default"])({}, key, key === 'field' ? field : textLabel[key] || layerTextLabel[key]));
1072
+ var _textLabel$key;
1073
+ return _objectSpread(_objectSpread({}, accu), {}, (0, _defineProperty2["default"])({}, key, key === 'field' ? field : (_textLabel$key = textLabel[key]) !== null && _textLabel$key !== void 0 ? _textLabel$key : layerTextLabel[key]));
1016
1074
  }, {});
1017
1075
  });
1018
1076
  }
1019
1077
 
1078
+ /**
1079
+ * Maps saved before count labels omit `textLabel`. Those cluster, hexbin, and
1080
+ * grid layers stay unlabeled. New layers still get the point-count default
1081
+ * from `getDefaultLayerConfig`.
1082
+ */
1083
+ function fallbackTextLabelForLoadedLayer(layerType, newLayerTextLabel) {
1084
+ if (layerType && _layers.AGGREGATION_COUNT_LAYER_TYPES.has(layerType)) {
1085
+ return [_objectSpread({}, _constants.DEFAULT_TEXT_LABEL)];
1086
+ }
1087
+ return newLayerTextLabel;
1088
+ }
1089
+
1020
1090
  /**
1021
1091
  * Saved visual channel field/scale may live in any of:
1022
1092
  * - `config[key]` after schema parse (VisualChannelSchemaV1 folds channels into config)
@@ -1044,10 +1114,10 @@ function getSavedVisualChannelValue(savedLayer, key) {
1044
1114
  */
1045
1115
  function validateSavedVisualChannels(fields, newLayer, savedLayer) {
1046
1116
  var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
1047
- Object.values(newLayer.visualChannels).forEach(function (_ref1) {
1048
- var field = _ref1.field,
1049
- scale = _ref1.scale,
1050
- key = _ref1.key;
1117
+ Object.values(newLayer.visualChannels).forEach(function (_ref9) {
1118
+ var field = _ref9.field,
1119
+ scale = _ref9.scale,
1120
+ key = _ref9.key;
1051
1121
  var savedField = getSavedVisualChannelValue(savedLayer, field);
1052
1122
  var savedScale = getSavedVisualChannelValue(savedLayer, scale);
1053
1123
  var foundField;
@@ -1159,6 +1229,7 @@ function validateLayerWithData(dataset, savedLayer, layerClasses) {
1159
1229
  color: savedLayer.config.color,
1160
1230
  isVisible: savedLayer.config.isVisible,
1161
1231
  hidden: savedLayer.config.hidden,
1232
+ isIncludedInLegend: savedLayer.config.isIncludedInLegend,
1162
1233
  columnMode: savedLayer.config.columnMode,
1163
1234
  highlightColor: savedLayer.config.highlightColor
1164
1235
  });
@@ -1173,10 +1244,13 @@ function validateLayerWithData(dataset, savedLayer, layerClasses) {
1173
1244
  return null;
1174
1245
  }
1175
1246
  }
1176
- var textLabel = savedLayer.config.textLabel && newLayer.config.textLabel ? validateSavedTextLabel(fields, newLayer.config.textLabel, savedLayer.config.textLabel, options) : newLayer.config.textLabel;
1247
+ var textLabel = savedLayer.config.textLabel && newLayer.config.textLabel ? validateSavedTextLabel(fields, newLayer.config.textLabel, savedLayer.config.textLabel, _objectSpread(_objectSpread({}, options), {}, {
1248
+ layerType: savedLayer.type
1249
+ })) : options.keepUnlabeledAggregationTextLabel ? fallbackTextLabelForLoadedLayer(savedLayer.type, newLayer.config.textLabel) : newLayer.config.textLabel;
1177
1250
 
1178
1251
  // copy visConfig over to emptyLayer to make sure it has all the props
1179
- var copiedVisConfig = newLayer.copyLayerConfig(newLayer.config.visConfig, savedLayer.config.visConfig || {}, {
1252
+ var savedVisConfig = savedLayer.type === '3D' ? (0, _layers.migrateLegacyScenegraphVisConfig)(savedLayer.config.visConfig) : savedLayer.config.visConfig;
1253
+ var copiedVisConfig = newLayer.copyLayerConfig(newLayer.config.visConfig, savedVisConfig || {}, {
1180
1254
  shallowCopy: ['colorRange', 'strokeColorRange']
1181
1255
  });
1182
1256
 
@@ -1252,7 +1326,7 @@ function mergeDatasetsByOrder(state, newDataEntries) {
1252
1326
  * It ignores `undefined` or `null` values, but returns `null` if no mode could be calculated.
1253
1327
  */
1254
1328
  function getValueWithHighestOccurrence(arr) {
1255
- var _ref13;
1329
+ var _ref11;
1256
1330
  var tallys = new Map();
1257
1331
  arr.forEach(function (value) {
1258
1332
  if ((0, _commonUtils.notNullorUndefined)(value)) {
@@ -1267,7 +1341,7 @@ function getValueWithHighestOccurrence(arr) {
1267
1341
  if (tallys.size === 0) {
1268
1342
  return null;
1269
1343
  }
1270
- return (_ref13 = (0, _toConsumableArray2["default"])(tallys.entries())) === null || _ref13 === void 0 ? void 0 : _ref13.reduce(function (acc, next) {
1344
+ return (_ref11 = (0, _toConsumableArray2["default"])(tallys.entries())) === null || _ref11 === void 0 ? void 0 : _ref11.reduce(function (acc, next) {
1271
1345
  return next[1] > acc[1] ? next : acc;
1272
1346
  })[0];
1273
1347
  }
@@ -1325,4 +1399,4 @@ var VIS_STATE_MERGERS = exports.VIS_STATE_MERGERS = [{
1325
1399
  prop: 'editor',
1326
1400
  combineConfigs: combineEditorConfigs
1327
1401
  }];
1328
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdW5pcSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX3BpY2siLCJfZmxhdHRlbkRlZXAiLCJfZGVlcG1lcmdlIiwiX3V0aWxzIiwiX2VmZmVjdHMiLCJfY29tbW9uVXRpbHMiLCJfY29uc3RhbnRzIiwiX3NjaGVtYXMiLCJfdGFibGUiLCJfbGF5ZXJVdGlscyIsIl9leGNsdWRlZCIsIl9leGNsdWRlZDIiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsInIiLCJlIiwidCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiQXJyYXkiLCJpc0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwibGVuZ3RoIiwiX24iLCJGIiwicyIsIm4iLCJkb25lIiwidmFsdWUiLCJmIiwiVHlwZUVycm9yIiwibyIsImEiLCJ1IiwiY2FsbCIsIm5leHQiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIl90b1Byb3BlcnR5S2V5IiwiaSIsIl90b1ByaW1pdGl2ZSIsIl90eXBlb2YzIiwidG9QcmltaXRpdmUiLCJTdHJpbmciLCJOdW1iZXIiLCJvd25LZXlzIiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwibWVyZ2VGaWx0ZXJzIiwic3RhdGUiLCJmaWx0ZXJzVG9NZXJnZSIsImZyb21Db25maWciLCJwcmVzZXJ2ZUZpbHRlck9yZGVyIiwibWFwIiwibCIsImlkIiwiX3ZhbGlkYXRlRmlsdGVyc1VwZGF0IiwidmFsaWRhdGVGaWx0ZXJzVXBkYXRlRGF0YXNldHMiLCJ2YWxpZGF0ZWQiLCJmYWlsZWQiLCJ1cGRhdGVkRGF0YXNldHMiLCJ1cGRhdGVkRmlsdGVycyIsImluc2VydEl0ZW1CYXNlZE9uUHJlc2VydmVkT3JkZXIiLCJmaWx0ZXJzIiwicmVzZXRGaWx0ZXJHcHVNb2RlIiwiYXNzaWduR3B1Q2hhbm5lbHMiLCJkYXRhc2V0c1RvRmlsdGVyIiwidW5pcSIsImZsYXR0ZW5EZWVwIiwiZGF0YUlkIiwiZmlsdGVyZWQiLCJhcHBseUZpbHRlcnNUb0RhdGFzZXRzIiwibGF5ZXJzIiwiZGF0YXNldHMiLCJmaWx0ZXJUb0JlTWVyZ2VkIiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsInJlcGxhY2VGaWx0ZXJEYXRhc2V0SWRzIiwic2F2ZWRGaWx0ZXIiLCJkYXRhSWRUb1VzZSIsInJlcGxhY2VkIiwiaW5jbHVkZXMiLCJfZmlsdGVyJHBsb3RUeXBlIiwibmV3RGF0YUlkIiwiZCIsInBsb3RUeXBlIiwiY29sb3JzQnlEYXRhSWQiLCJfZmlsdGVyJHBsb3RUeXBlMiIsIl9yZWYiLCJjb2xvciIsInJlc3QiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMyIiwiaXNTYXZlZExheWVyQ29uZmlnVjEiLCJsYXllckNvbmZpZyIsInZpc3VhbENoYW5uZWxzIiwicGFyc2VMYXllckNvbmZpZyIsInNjaGVtYSIsIl9zY2hlbWEkcGFyc2VTYXZlZENvbiIsInNhdmVkQ29uZmlnIiwidmVyc2lvbiIsIkNVUlJFTlRfVkVSU0lPTiIsImNvbmZpZyIsInZpc1N0YXRlIiwibGF5ZXJPcmRlciIsInBhcnNlU2F2ZWRDb25maWciLCJjdXJyZW50SXRlbXMiLCJpdGVtcyIsInByZXNlcnZlZE9yZGVyIiwidW5kZWZpbmVkIiwiZGVmYXVsdFN0YXJ0IiwibmV3SXRlbXMiLCJfaXRlcmF0b3IiLCJfc3RlcCIsIml0ZW0iLCJleHBlY3RlZElkeCIsImluZGV4T2YiLCJpbnNlcnRBdCIsInByZWNlZWRJZHgiLCJfbG9vcCIsInByZWNlZWRJdGVtSWQiLCJmaW5kSW5kZXgiLCJhcnJheUluc2VydCIsImVyciIsImNyZWF0ZUxheWVyRnJvbUNvbmZpZyIsInBhcnNlZExheWVyQ29uZmlnIiwiX3ZhbGlkYXRlTGF5ZXJzQnlEYXRhIiwidmFsaWRhdGVMYXllcnNCeURhdGFzZXRzIiwibGF5ZXJDbGFzc2VzIiwiYWxsb3dFbXB0eUNvbHVtbiIsIm5ld0xheWVyIiwidXBkYXRlTGF5ZXJEb21haW4iLCJzZXJpYWxpemVGaWx0ZXIiLCJuZXdGaWx0ZXIiLCJfc2VyaWFsaXplZFZpc1N0YXRlJGYiLCJzZXJpYWxpemVkVmlzU3RhdGUiLCJzZXJpYWxpemVWaXNTdGF0ZSIsInNlcmlhbGl6ZUxheWVyIiwiX3NlcmlhbGl6ZWRWaXNTdGF0ZSRsIiwic2VyaWFsaXplRWZmZWN0IiwibmV3RWZmZWN0IiwiX3NlcmlhbGl6ZWRWaXNTdGF0ZSRlIiwiZWZmZWN0cyIsImVmZmVjdE9yZGVyIiwiX3NjaGVtYSRwYXJzZVNhdmVkQ29uMiIsInNhdmVkU3RhdGUiLCJnZXRDb25maWdUb1NhdmUiLCJtZXJnZUxheWVycyIsImxheWVyc1RvTWVyZ2UiLCJwcmVzZXJ2ZUxheWVyT3JkZXIiLCJnZXRMYXllck9yZGVyRnJvbUxheWVycyIsInVubWVyZ2VkIiwidG9NZXJnZSIsIl9sJGNvbmZpZyIsImlzTWVyZ2luZ0RhdGFzZXRzIiwiX3ZhbGlkYXRlTGF5ZXJzQnlEYXRhMiIsIm1lcmdlZExheWVyIiwiX2luc2VydExheWVyQXRSaWdodE9yIiwiaW5zZXJ0TGF5ZXJBdFJpZ2h0T3JkZXIiLCJuZXdMYXllck9yZGVyIiwibmV3TGF5ZXJzIiwibWVyZ2VkU3RhdGUiLCJsYXllclRvQmVNZXJnZWQiLCJsYXllck9yZGVyVG9CZU1lcmdlZCIsInNhdmVkT3JkZXIiLCJtZXJnZUxheWVyT3JkZXIiLCJjdXJyZW50TGF5ZXJzIiwibGF5ZXJzVG9JbnNlcnQiLCJjdXJyZW50T3JkZXIiLCJjdXJyZW50TGF5ZXJRdWV1ZSIsImVudHJ5IiwiZmluZEJ5SWQiLCJsYXllciIsIkJvb2xlYW4iLCJuZXdMYXllck9yZGVyUXVldWUiLCJuZXdGbGF0TGF5ZXJPcmRlciIsImhhc0dyb3VwcyIsInNvbWUiLCJpc1BsYWluT2JqZWN0IiwiZXhpc3RpbmdGbGF0SWRzIiwiU2V0IiwibmV3SW5zZXJ0ZWRJZHMiLCJoYXMiLCJyZXN1bHQiLCJmbGF0UXVldWUiLCJmbGF0SWR4IiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsInNhdmVkTGF5ZXJPcmRlciIsInZhbGlkTGF5ZXJJZHMiLCJmaWx0ZXJMYXllck9yZGVyIiwib3JkZXIiLCJfaXRlcmF0b3IzIiwiX3N0ZXAzIiwiZ3JvdXAiLCJmaWx0ZXJlZEdyb3VwT3JkZXIiLCJyZXN0b3JlZExheWVyT3JkZXIiLCJsYXllcklkc0luUmVzdG9yZWQiLCJjb2xsZWN0SWRzIiwiX2l0ZXJhdG9yNCIsIl9zdGVwNCIsImFkZCIsIm1pc3NpbmdMYXllcnMiLCJtZXJnZUludGVyYWN0aW9ucyIsImludGVyYWN0aW9uVG9CZU1lcmdlZCIsIm1lcmdlZCIsImtleSIsImludGVyYWN0aW9uQ29uZmlnIiwiY3VycmVudENvbmZpZyIsIl9yZWYyIiwiZW5hYmxlZCIsImNvbmZpZ1NhdmVkIiwiY29uZmlnVG9NZXJnZSIsIl9tZXJnZUludGVyYWN0aW9uVG9vbCIsIm1lcmdlSW50ZXJhY3Rpb25Ub29sdGlwQ29uZmlnIiwibWVyZ2VkVG9vbHRpcCIsInVubWVyZ2VkVG9vbHRpcCIsImZpZWxkc1RvU2hvdyIsInRvb2x0aXAiLCJwaWNrIiwibmV4dFN0YXRlIiwic2F2ZWRVbm1lcmdlZEludGVyYWN0aW9uIiwiY29tYmluZUludGVyYWN0aW9uQ29uZmlncyIsImNvbmZpZ3MiLCJjb21iaW5lZCIsIl9sb29wMiIsInRvQmVDb21iaW5lZFByb3BzIiwiYyIsInAiLCJjb21wYXJlTW9kZSIsImNvbXBhcmVUeXBlIiwiZ2V0VmFsdWVXaXRoSGlnaGVzdE9jY3VycmVuY2UiLCJyZWR1Y2UiLCJhY2MiLCJuZXh0RmllbGRzVG9TaG93IiwiX2xvb3AzIiwibmV4dERhdGFJZEtleSIsIm5leHRUb29sdGlwRmllbGRzIiwibmV4dFRGIiwiZmluZCIsIl9yZWYzIiwiX2FnZ3JlZ2F0ZSIsInNpemUiLCJhZ2dyZWdhdGUiLCJBR0dSRUdBVElPTl9UWVBFUyIsIm1heGltdW0iLCJsaW1pdFNlYXJjaCIsIl91bm1lcmdlZCR0b29sdGlwIiwiX3VubWVyZ2VkJHRvb2x0aXAyIiwiX3N0YXRlJGludGVyYWN0aW9uVG9CIiwiX3VubWVyZ2VkJHRvb2x0aXAzIiwicmVwbGFjZUludGVyYWN0aW9uRGF0YXNldElkcyIsImRhdGFJZFRvUmVwbGFjZSIsIl9pbnRlcmFjdGlvbkNvbmZpZyR0byIsIl9pbnRlcmFjdGlvbkNvbmZpZyR0bzIiLCJtZXJnZVNwbGl0TWFwcyIsInNwbGl0TWFwcyIsImxheWVyRXhpc3RzIiwiY3JlYXRlUGFuZWxzIiwic20iLCJpZHMiLCJnZXRJbml0aWFsTWFwTGF5ZXJzRm9yU3BsaXRNYXAiLCJlbnRyaWVzIiwicGFuZWwiLCJmcm9tRW50cmllcyIsIl9yZWY0IiwiX3JlZjUiLCJfc2xpY2VkVG9BcnJheTIiLCJfcmVmNiIsIl9yZWY3Iiwic3BsaXRNYXBzVG9CZU1lcmdlZCIsImNvbWJpbmVTcGxpdE1hcHNCeUluZGV4IiwibWVyZ2VDaGFydHMiLCJjaGFydHMiLCJpbmNvbWluZ0lkcyIsImNoYXJ0IiwiZXhpc3RpbmdJZHMiLCJuZXh0Q2hhcnRzIiwibm9ybWFsaXplZCIsInBpbm5lZCIsImRpc3BsYXkiLCJpc0NvbmZpZ0FjdGl2ZSIsImNoYXJ0c1RvQmVNZXJnZWQiLCJyZXBsYWNlQ2hhcnREYXRhc2V0SWRzIiwic2F2ZWRDaGFydHMiLCJtZXJnZUVmZmVjdHMiLCJuZXdFZmZlY3RzIiwiZWZmZWN0IiwiY3JlYXRlRWZmZWN0IiwiZGVlcG1lcmdlIiwiYWxsIiwiaXNWYWxpZFRvU2F2ZSIsIm1lcmdlQW5ub3RhdGlvbnMiLCJhbm5vdGF0aW9ucyIsInZhbGlkQW5ub3RhdGlvbnMiLCJpc0Fubm90YXRpb25LaW5kIiwia2luZCIsImFuY2hvclBvaW50IiwiZXZlcnkiLCJpc0Zpbml0ZSIsImlzVmlzaWJsZSIsImF1dG9TaXplIiwiYXV0b1NpemVZIiwibGFiZWwiLCJsaW5lQ29sb3IiLCJJTklUSUFMX0FOTk9UQVRJT05fTElORV9DT0xPUiIsImxpbmVXaWR0aCIsIklOSVRJQUxfQU5OT1RBVElPTl9MSU5FX1dJRFRIIiwidGV4dFdpZHRoIiwidGV4dEhlaWdodCIsInRvb2x0aXBDb25maWciLCJfbG9vcDQiLCJhbGxGaWVsZHMiLCJmaWVsZHMiLCJmb3VuZEZpZWxkc1RvU2hvdyIsImZpZWxkIiwibWVyZ2VMYXllckJsZW5kaW5nIiwibGF5ZXJCbGVuZGluZyIsIkxBWUVSX0JMRU5ESU5HUyIsImNvbWJpbmVMYXllckJsZW5kaW5nQ29uZmlncyIsIm1lcmdlT3ZlcmxheUJsZW5kaW5nIiwib3ZlcmxheUJsZW5kaW5nIiwiT1ZFUkxBWV9CTEVORElOR1MiLCJjb21iaW5lT3ZlcmxheUJsZW5kaW5nQ29uZmlncyIsIm1lcmdlQW5pbWF0aW9uQ29uZmlnIiwiYW5pbWF0aW9uIiwiY3VycmVudFRpbWUiLCJhbmltYXRpb25Db25maWciLCJkb21haW4iLCJjb21iaW5lQW5pbWF0aW9uQ29uZmlncyIsIl9hZ2dyZWdhdGUyIiwiX2FnZ3JlZ2F0ZTMiLCJtaW5pbXVtIiwic3BlZWQiLCJ0aW1lRm9ybWF0IiwidGltZXpvbmUiLCJ2YWxpZGF0ZVNhdmVkTGF5ZXJDb2x1bW5zIiwic2F2ZWRDb2xzIiwiZW1wdHlDb2xzIiwib3B0aW9ucyIsImNvbHVtbnMiLCJfbG9vcDUiLCJfT2JqZWN0JGtleXMiLCJfaSIsInNhdmVkIiwiZmllbGRJZHgiLCJfcmVmOCIsImFsbENvbEZvdW5kIiwidmFsaWRhdGVDb2x1bW4iLCJydiIsInRocm93T25FcnJvciIsInJlcXVpcmVkQ29sdW1ucyIsImsiLCJvcHRpb25hbCIsIm1pc3NpbmdDb2x1bW5zIiwiRXJyb3IiLCJqb2luIiwiY29uZmlnQ29sdW1ucyIsImludmFsaWRDb2x1bW5zIiwiX2NvbHVtbnMkayIsImNvbHVtbiIsInZhbGlkYXRvciIsInZhbGlkYXRlU2F2ZWRUZXh0TGFiZWwiLCJfcmVmOSIsInNhdmVkVGV4dExhYmVsIiwiX3JlZjAiLCJsYXllclRleHRMYWJlbCIsInNhdmVkVGV4dExhYmVscyIsInRleHRMYWJlbCIsImZkIiwiSlNPTiIsInN0cmluZ2lmeSIsImFjY3UiLCJnZXRTYXZlZFZpc3VhbENoYW5uZWxWYWx1ZSIsInNhdmVkTGF5ZXIiLCJjaGFubmVscyIsIl90eXBlb2YyIiwidmFsaWRhdGVTYXZlZFZpc3VhbENoYW5uZWxzIiwidmFsdWVzIiwiX3JlZjEiLCJzY2FsZSIsInNhdmVkRmllbGQiLCJzYXZlZFNjYWxlIiwiZm91bmRGaWVsZCIsImZvdW5kQ2hhbm5lbCIsInVwZGF0ZUxheWVyQ29uZmlnIiwidmFsaWRhdGVWaXN1YWxDaGFubmVsIiwiX25ld0xheWVyJGNvbmZpZyRmaWVsIiwiZmllbGROYW1lIiwiX2xheWVyJGNvbmZpZyIsInZhbGlkYXRlTGF5ZXIiLCJ2YWxpZGF0ZUxheWVyV2l0aERhdGEiLCJfZ2V0Q29sdW1uQ29uZmlnRm9yVmFsaWRhdGlvbiIsImNvbHVtbkNvbmZpZyIsImdldExheWVyQ29sdW1ucyIsImNvbE1vZGVDb25maWciLCJjb2x1bW5Nb2RlIiwic3VwcG9ydGVkQ29sdW1uTW9kZXMiLCJjb2xNb2RlIiwiZ3JvdXBDb2x1bW5zIiwiY29sdW1uR3JvdXBzIiwiZmxhdE1hcCIsInJlcXVpcmVkS2V5cyIsIm9wdGlvbmFsQ29sdW1ucyIsImNvbCIsIl9vcHRpb25hbCIsInJlcXVpcmVkQ29sIiwiZGF0YXNldCIsInR5cGUiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImhpZGRlbiIsImhpZ2hsaWdodENvbG9yIiwiY29waWVkVmlzQ29uZmlnIiwiY29weUxheWVyQ29uZmlnIiwidmlzQ29uZmlnIiwic2hhbGxvd0NvcHkiLCJ2YWxpZGF0ZVZpc0NvbmZpZyIsIm1lcmdlRWRpdG9yIiwic2F2ZWRFZGl0b3IiLCJfc2F2ZWRFZGl0b3IkdmlzaWJsZSIsImVkaXRvciIsImZlYXR1cmVzIiwidmlzaWJsZSIsImNvbWJpbmVFZGl0b3JDb25maWdzIiwibmV4dENvbmZpZyIsIm1lcmdlRGF0YXNldHNCeU9yZGVyIiwibmV3RGF0YUVudHJpZXMiLCJwcmVzZXJ2ZURhdGFzZXRPcmRlciIsIm5ld0RhdGFzZXRJZHMiLCJfc3RhdGUkcHJlc2VydmVEYXRhc2UiLCJhcnIiLCJfcmVmMTMiLCJ0YWxseXMiLCJNYXAiLCJub3ROdWxsb3JVbmRlZmluZWQiLCJzZXQiLCJnZXQiLCJWSVNfU1RBVEVfTUVSR0VSUyIsImV4cG9ydHMiLCJtZXJnZSIsInByb3AiLCJ0b01lcmdlUHJvcCIsInByZXNlcnZlT3JkZXIiLCJyZXBsYWNlUGFyZW50RGF0YXNldElkcyIsInNhdmVVbm1lcmdlZCIsImNvbWJpbmVDb25maWdzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Zpcy1zdGF0ZS1tZXJnZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHVuaXEgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvdW5pcSc7XG5pbXBvcnQgcGljayBmcm9tICdlcy10b29sa2l0L2NvbXBhdC9waWNrJztcbmltcG9ydCBmbGF0dGVuRGVlcCBmcm9tICdlcy10b29sa2l0L2NvbXBhdC9mbGF0dGVuRGVlcCc7XG5pbXBvcnQgZGVlcG1lcmdlIGZyb20gJ2RlZXBtZXJnZSc7XG5pbXBvcnQge1xuICBhcnJheUluc2VydCxcbiAgY29tYmluZVNwbGl0TWFwc0J5SW5kZXgsXG4gIGdldEluaXRpYWxNYXBMYXllcnNGb3JTcGxpdE1hcCxcbiAgYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyxcbiAgdmFsaWRhdGVGaWx0ZXJzVXBkYXRlRGF0YXNldHMsXG4gIGZpbmRCeUlkLFxuICBhZ2dyZWdhdGUsXG4gIGlzUGxhaW5PYmplY3Rcbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5cbmltcG9ydCB7TGF5ZXJ9IGZyb20gJ0BrZXBsZXIuZ2wvbGF5ZXJzJztcbmltcG9ydCB7Y3JlYXRlRWZmZWN0fSBmcm9tICdAa2VwbGVyLmdsL2VmZmVjdHMnO1xuaW1wb3J0IHtub3ROdWxsb3JVbmRlZmluZWR9IGZyb20gJ0BrZXBsZXIuZ2wvY29tbW9uLXV0aWxzJztcbmltcG9ydCB7XG4gIEFHR1JFR0FUSU9OX1RZUEVTLFxuICBMQVlFUl9CTEVORElOR1MsXG4gIE9WRVJMQVlfQkxFTkRJTkdTLFxuICBpc0Fubm90YXRpb25LaW5kLFxuICBJTklUSUFMX0FOTk9UQVRJT05fTElORV9DT0xPUixcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEhcbn0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtDVVJSRU5UX1ZFUlNJT04sIFZpc1N0YXRlLCBWaXNTdGF0ZU1lcmdlcnMsIEtlcGxlckdMU2NoZW1hQ2xhc3N9IGZyb20gJ0BrZXBsZXIuZ2wvc2NoZW1hcyc7XG5cbmltcG9ydCB7XG4gIFBhcnNlZExheWVyLFxuICBQYXJzZWRWaXNTdGF0ZSxcbiAgU2F2ZWRJbnRlcmFjdGlvbkNvbmZpZyxcbiAgVG9vbHRpcEluZm8sXG4gIFNhdmVkRWRpdG9yLFxuICBQYXJzZWRDb25maWcsXG4gIEZpbHRlcixcbiAgRWZmZWN0IGFzIEVmZmVjdFR5cGUsXG4gIFBhcnNlZEVmZmVjdCxcbiAgTGF5ZXJDb2x1bW5zLFxuICBMYXllckNvbHVtbixcbiAgUGFyc2VkRmlsdGVyLFxuICBOZXN0ZWRQYXJ0aWFsLFxuICBTYXZlZEFuaW1hdGlvbkNvbmZpZyxcbiAgTGF5ZXJPcmRlcixcbiAgTGF5ZXJPcmRlckdyb3VwLFxuICBDaGFydENvbmZpZ1xufSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7S2VwbGVyVGFibGUsIERhdGFzZXRzLCBhc3NpZ25HcHVDaGFubmVscywgcmVzZXRGaWx0ZXJHcHVNb2RlfSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcblxuaW1wb3J0IHtnZXRMYXllck9yZGVyRnJvbUxheWVyc30gZnJvbSAnLi9sYXllci11dGlscyc7XG5cbi8qKlxuICogTWVyZ2UgbG9hZGVkIGZpbHRlcnMgd2l0aCBjdXJyZW50IHN0YXRlLCBpZiBubyBmaWVsZHMgb3IgZGF0YSBhcmUgbG9hZGVkXG4gKiBzYXZlIGl0IGZvciBsYXRlclxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlRmlsdGVyczxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgZmlsdGVyc1RvTWVyZ2U6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2ZpbHRlcnMnXSxcbiAgZnJvbUNvbmZpZz86IGJvb2xlYW5cbik6IFMge1xuICBjb25zdCBwcmVzZXJ2ZUZpbHRlck9yZGVyID0gZnJvbUNvbmZpZ1xuICAgID8gZmlsdGVyc1RvTWVyZ2U/Lm1hcChsID0+IGwuaWQpXG4gICAgOiBzdGF0ZS5wcmVzZXJ2ZUZpbHRlck9yZGVyO1xuXG4gIGlmICghQXJyYXkuaXNBcnJheShmaWx0ZXJzVG9NZXJnZSkgfHwgIWZpbHRlcnNUb01lcmdlLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHt2YWxpZGF0ZWQsIGZhaWxlZCwgdXBkYXRlZERhdGFzZXRzfSA9IHZhbGlkYXRlRmlsdGVyc1VwZGF0ZURhdGFzZXRzKHN0YXRlLCBmaWx0ZXJzVG9NZXJnZSk7XG4gIGxldCB1cGRhdGVkRmlsdGVycyA9IGluc2VydEl0ZW1CYXNlZE9uUHJlc2VydmVkT3JkZXIoXG4gICAgc3RhdGUuZmlsdGVycyxcbiAgICB2YWxpZGF0ZWQsXG4gICAgcHJlc2VydmVGaWx0ZXJPcmRlclxuICApO1xuXG4gIC8vIG1lcmdlIGZpbHRlciB3aXRoIGV4aXN0aW5nXG4gIHVwZGF0ZWRGaWx0ZXJzID0gcmVzZXRGaWx0ZXJHcHVNb2RlKHVwZGF0ZWRGaWx0ZXJzKTtcbiAgdXBkYXRlZEZpbHRlcnMgPSBhc3NpZ25HcHVDaGFubmVscyh1cGRhdGVkRmlsdGVycyk7XG4gIC8vIGZpbHRlciBkYXRhXG4gIGNvbnN0IGRhdGFzZXRzVG9GaWx0ZXIgPSB1bmlxKGZsYXR0ZW5EZWVwKHZhbGlkYXRlZC5tYXAoZiA9PiBmLmRhdGFJZCkpKTtcblxuICBjb25zdCBmaWx0ZXJlZCA9IGFwcGx5RmlsdGVyc1RvRGF0YXNldHMoXG4gICAgZGF0YXNldHNUb0ZpbHRlcixcbiAgICB1cGRhdGVkRGF0YXNldHMsXG4gICAgdXBkYXRlZEZpbHRlcnMsXG4gICAgc3RhdGUubGF5ZXJzXG4gICk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiB1cGRhdGVkRmlsdGVycyxcbiAgICBkYXRhc2V0czogZmlsdGVyZWQsXG4gICAgcHJlc2VydmVGaWx0ZXJPcmRlcixcbiAgICBmaWx0ZXJUb0JlTWVyZ2VkOiBbLi4uc3RhdGUuZmlsdGVyVG9CZU1lcmdlZCwgLi4uZmFpbGVkXVxuICB9O1xufVxuXG4vLyByZXBsYWNlIGRhdGFJZCBpbiBzYXZlZCBGaWx0ZXJcbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlRmlsdGVyRGF0YXNldElkcyhcbiAgc2F2ZWRGaWx0ZXI6IEZpbHRlcltdLFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgZGF0YUlkVG9Vc2U6IHN0cmluZ1xuKSB7XG4gIGNvbnN0IHJlcGxhY2VkOiBGaWx0ZXJbXSA9IFtdO1xuICBzYXZlZEZpbHRlci5mb3JFYWNoKGZpbHRlciA9PiB7XG4gICAgaWYgKGZpbHRlci5kYXRhSWQuaW5jbHVkZXMoZGF0YUlkKSkge1xuICAgICAgY29uc3QgbmV3RGF0YUlkID0gZmlsdGVyLmRhdGFJZC5tYXAoZCA9PiAoZCA9PT0gZGF0YUlkID8gZGF0YUlkVG9Vc2UgOiBkKSk7XG4gICAgICBsZXQgcGxvdFR5cGU7XG4gICAgICAvLyBUT0RPOiBtb3JlIGdlbmVyaWMgYXBwcm9hY2ggdG8gc2F2ZSBwbG90VHlwZS5jb2xvcnNCeURhdGFJZFxuICAgICAgaWYgKGZpbHRlci5wbG90VHlwZT8uY29sb3JzQnlEYXRhSWQ/LltkYXRhSWRdKSB7XG4gICAgICAgIC8vIHJlcGxhY2UgY29sb3JCeURhdGFJZCBpbiBmaWx0ZXIucGxvdFR5cGVcbiAgICAgICAgY29uc3Qge1tkYXRhSWRdOiBjb2xvciwgLi4ucmVzdH0gPSBmaWx0ZXIucGxvdFR5cGU/LmNvbG9yc0J5RGF0YUlkIHx8IHt9O1xuICAgICAgICBwbG90VHlwZSA9IHtcbiAgICAgICAgICAuLi5maWx0ZXIucGxvdFR5cGUsXG4gICAgICAgICAgY29sb3JzQnlEYXRhSWQ6IHtcbiAgICAgICAgICAgIC4uLnJlc3QsXG4gICAgICAgICAgICBbZGF0YUlkVG9Vc2VdOiBjb2xvclxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJlcGxhY2VkLnB1c2goe1xuICAgICAgICAuLi5maWx0ZXIsXG4gICAgICAgIGRhdGFJZDogbmV3RGF0YUlkLFxuICAgICAgICAuLi4ocGxvdFR5cGUgPyB7cGxvdFR5cGV9IDoge30pXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVwbGFjZWQubGVuZ3RoID8gcmVwbGFjZWQgOiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTYXZlZExheWVyQ29uZmlnVjEobGF5ZXJDb25maWc6IGFueSk6IGJvb2xlYW4ge1xuICAvLyBleHBvcnRlZCBsYXllciBjb25maWd1cmF0aW9uIGNvbnRhaW5zIHZpc3VhbENoYW5uZWxzIHByb3BlcnR5XG4gIHJldHVybiBsYXllckNvbmZpZz8udmlzdWFsQ2hhbm5lbHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUxheWVyQ29uZmlnKFxuICBzY2hlbWE6IEtlcGxlckdMU2NoZW1hQ2xhc3MsXG4gIGxheWVyQ29uZmlnOiBhbnlcbik6IFBhcnNlZExheWVyIHwgdW5kZWZpbmVkIHtcbiAgLy8gYXNzdW1lIHRoZSBsYXllciBjb25maWcgaXMgY3VycmVudCB2ZXJzaW9uXG4gIGNvbnN0IHNhdmVkQ29uZmlnID0ge1xuICAgIHZlcnNpb246IENVUlJFTlRfVkVSU0lPTixcbiAgICBjb25maWc6IHtcbiAgICAgIHZpc1N0YXRlOiB7bGF5ZXJzOiBbbGF5ZXJDb25maWddLCBsYXllck9yZGVyOiBbbGF5ZXJDb25maWcuaWRdfVxuICAgIH1cbiAgfTtcblxuICByZXR1cm4gc2NoZW1hLnBhcnNlU2F2ZWRDb25maWcoc2F2ZWRDb25maWcpPy52aXNTdGF0ZT8ubGF5ZXJzPy5bMF07XG59XG5cbmZ1bmN0aW9uIGluc2VydEl0ZW1CYXNlZE9uUHJlc2VydmVkT3JkZXIoXG4gIGN1cnJlbnRJdGVtczogRmlsdGVyW10sXG4gIGl0ZW1zOiBGaWx0ZXJbXSxcbiAgcHJlc2VydmVkT3JkZXI6IGFueVtdID0gW10sXG4gIGRlZmF1bHRTdGFydD86IGJvb2xlYW5cbikge1xuICBsZXQgbmV3SXRlbXMgPSBbLi4uY3VycmVudEl0ZW1zXTtcblxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICBjb25zdCBleHBlY3RlZElkeCA9IHByZXNlcnZlZE9yZGVyLmluZGV4T2YoaXRlbS5pZCk7XG4gICAgLy8gaW5zZXJ0QXQgdGhlIGVuZCBieSBkZWZhdWx0XG4gICAgbGV0IGluc2VydEF0ID0gZGVmYXVsdFN0YXJ0ID8gMCA6IG5ld0l0ZW1zLmxlbmd0aDtcbiAgICBpZiAoZXhwZWN0ZWRJZHggPiAwKSB7XG4gICAgICAvLyBsb29rIGZvciBsYXllciB0byBpbnNlcnQgYWZ0ZXJcbiAgICAgIGxldCBpID0gZXhwZWN0ZWRJZHggKyAxO1xuICAgICAgbGV0IHByZWNlZWRJZHggPSAtMTtcbiAgICAgIHdoaWxlIChpLS0gPiAwICYmIHByZWNlZWRJZHggPCAwKSB7XG4gICAgICAgIC8vIGtlZXAgbG9va2luZyBmb3IgcHJlY2VlZCBsYXllciB0aGF0IGlzIGFscmVhZHkgbG9hZGVkXG4gICAgICAgIGNvbnN0IHByZWNlZWRJdGVtSWQgPSBwcmVzZXJ2ZWRPcmRlcltpIC0gMV07XG4gICAgICAgIHByZWNlZWRJZHggPSBuZXdJdGVtcy5maW5kSW5kZXgoZCA9PiBkLmlkID09PSBwcmVjZWVkSXRlbUlkKTtcbiAgICAgIH1cbiAgICAgIGlmIChwcmVjZWVkSWR4ID4gLTEpIHtcbiAgICAgICAgLy8gaWYgZm91bmRcbiAgICAgICAgaW5zZXJ0QXQgPSBwcmVjZWVkSWR4ICsgMTtcbiAgICAgIH1cbiAgICB9XG4gICAgbmV3SXRlbXMgPSBhcnJheUluc2VydChuZXdJdGVtcywgaW5zZXJ0QXQsIGl0ZW0pO1xuICB9XG4gIHJldHVybiBuZXdJdGVtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUxheWVyRnJvbUNvbmZpZyhzdGF0ZTogVmlzU3RhdGUsIGxheWVyQ29uZmlnOiBhbnkpOiBMYXllciB8IG51bGwge1xuICAvLyBjaGVjayBpZiB0aGUgbGF5ZXIgY29uZmlnIGlzIHBhcnNlZFxuICBjb25zdCBwYXJzZWRMYXllckNvbmZpZyA9IGlzU2F2ZWRMYXllckNvbmZpZ1YxKGxheWVyQ29uZmlnKVxuICAgID8gcGFyc2VMYXllckNvbmZpZyhzdGF0ZS5zY2hlbWEsIGxheWVyQ29uZmlnKVxuICAgIDogbGF5ZXJDb25maWc7XG5cbiAgaWYgKCFwYXJzZWRMYXllckNvbmZpZykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIC8vIGZpcnN0IHZhbGlkYXRlIGNvbmZpZyBhZ2FpbnN0IGRhdGFzZXRcbiAgY29uc3Qge3ZhbGlkYXRlZCwgZmFpbGVkfSA9IHZhbGlkYXRlTGF5ZXJzQnlEYXRhc2V0cyhcbiAgICBzdGF0ZS5kYXRhc2V0cyxcbiAgICBzdGF0ZS5sYXllckNsYXNzZXMsXG4gICAgW3BhcnNlZExheWVyQ29uZmlnXSxcbiAgICB7YWxsb3dFbXB0eUNvbHVtbjogdHJ1ZX1cbiAgKTtcblxuICBpZiAoZmFpbGVkPy5sZW5ndGggfHwgIXZhbGlkYXRlZC5sZW5ndGgpIHtcbiAgICAvLyBmYWlsZWRcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IG5ld0xheWVyID0gdmFsaWRhdGVkWzBdO1xuICBuZXdMYXllci51cGRhdGVMYXllckRvbWFpbihzdGF0ZS5kYXRhc2V0cyk7XG4gIHJldHVybiBuZXdMYXllcjtcbn1cblxuLyoqXG4gKiBHZXQgbG9hZGVkIGZpbHRlciBmcm9tIHN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVGaWx0ZXIoXG4gIG5ld0ZpbHRlcjogRmlsdGVyLFxuICBzY2hlbWE6IEtlcGxlckdMU2NoZW1hQ2xhc3Ncbik6IFBhcnNlZEZpbHRlciB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRWaXNTdGF0ZSA9IHNlcmlhbGl6ZVZpc1N0YXRlKHtmaWx0ZXJzOiBbbmV3RmlsdGVyXX0sIHNjaGVtYSk7XG4gIHJldHVybiBzZXJpYWxpemVkVmlzU3RhdGU/LmZpbHRlcnM/LlswXTtcbn1cblxuLyoqXG4gKiBHZXQgbG9hZGVkIGxheWVyIGZyb20gc3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZUxheWVyKFxuICBuZXdMYXllcjogTGF5ZXIsXG4gIHNjaGVtYTogS2VwbGVyR0xTY2hlbWFDbGFzc1xuKTogUGFyc2VkTGF5ZXIgfCB1bmRlZmluZWQge1xuICBjb25zdCBzZXJpYWxpemVkVmlzU3RhdGUgPSBzZXJpYWxpemVWaXNTdGF0ZShcbiAgICB7bGF5ZXJzOiBbbmV3TGF5ZXJdLCBsYXllck9yZGVyOiBbbmV3TGF5ZXIuaWRdfSxcbiAgICBzY2hlbWFcbiAgKTtcbiAgcmV0dXJuIHNlcmlhbGl6ZWRWaXNTdGF0ZT8ubGF5ZXJzPy5bMF07XG59XG5cbi8qKlxuICogR2V0IGxvYWRlZCBlZmZlY3QgZnJvbSBzdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplRWZmZWN0KFxuICBuZXdFZmZlY3Q6IEVmZmVjdFR5cGUsXG4gIHNjaGVtYTogS2VwbGVyR0xTY2hlbWFDbGFzc1xuKTogUGFyc2VkRWZmZWN0IHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc2VyaWFsaXplZFZpc1N0YXRlID0gc2VyaWFsaXplVmlzU3RhdGUoXG4gICAge2VmZmVjdHM6IFtuZXdFZmZlY3RdLCBlZmZlY3RPcmRlcjogW25ld0VmZmVjdC5pZF19LFxuICAgIHNjaGVtYVxuICApO1xuICByZXR1cm4gc2VyaWFsaXplZFZpc1N0YXRlPy5lZmZlY3RzPy5bMF07XG59XG5cbi8qKlxuICogR2V0IHZpcyBzdGF0ZSBjb25maWdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZVZpc1N0YXRlKFxuICB2aXNTdGF0ZTogUGFydGlhbDxWaXNTdGF0ZT4sXG4gIHNjaGVtYTogS2VwbGVyR0xTY2hlbWFDbGFzc1xuKTogUGFyc2VkVmlzU3RhdGUgfCB1bmRlZmluZWQge1xuICBjb25zdCBzYXZlZFN0YXRlID0gc2NoZW1hLmdldENvbmZpZ1RvU2F2ZSh7XG4gICAgdmlzU3RhdGVcbiAgfSk7XG4gIHJldHVybiBzYXZlZFN0YXRlID8gc2NoZW1hLnBhcnNlU2F2ZWRDb25maWcoc2F2ZWRTdGF0ZSk/LnZpc1N0YXRlIDogdW5kZWZpbmVkO1xufVxuLyoqXG4gKiBNZXJnZSBsYXllcnMgZnJvbSBkZS1zZXJpYWxpemVkIHN0YXRlLCBpZiBubyBmaWVsZHMgb3IgZGF0YSBhcmUgbG9hZGVkXG4gKiBzYXZlIGl0IGZvciBsYXRlclxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlTGF5ZXJzPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBsYXllcnNUb01lcmdlOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydsYXllcnMnXSA9IFtdLFxuICBmcm9tQ29uZmlnPzogYm9vbGVhblxuKTogUyB7XG4gIGNvbnN0IHByZXNlcnZlTGF5ZXJPcmRlciA9IGZyb21Db25maWdcbiAgICA/IGdldExheWVyT3JkZXJGcm9tTGF5ZXJzKGxheWVyc1RvTWVyZ2UpXG4gICAgOiBzdGF0ZS5wcmVzZXJ2ZUxheWVyT3JkZXI7XG4gIGlmICghQXJyYXkuaXNBcnJheShsYXllcnNUb01lcmdlKSB8fCAhbGF5ZXJzVG9NZXJnZS5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgLy8gZG9uJ3QgbWVyZ2UgbGF5ZXIgaWYgZGF0YXNldCBpcyBiZWluZyBtZXJnZWRcbiAgY29uc3QgdW5tZXJnZWQ6IFBhcnNlZExheWVyW10gPSBbXTtcbiAgY29uc3QgdG9NZXJnZTogUGFyc2VkTGF5ZXJbXSA9IFtdO1xuICBsYXllcnNUb01lcmdlLmZvckVhY2goKGw6IFBhcnNlZExheWVyKSA9PiB7XG4gICAgaWYgKGw/LmNvbmZpZz8uZGF0YUlkICYmIHN0YXRlLmlzTWVyZ2luZ0RhdGFzZXRzW2wuY29uZmlnLmRhdGFJZF0pIHtcbiAgICAgIHVubWVyZ2VkLnB1c2gobCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRvTWVyZ2UucHVzaChsKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IHt2YWxpZGF0ZWQ6IG1lcmdlZExheWVyLCBmYWlsZWR9ID0gdmFsaWRhdGVMYXllcnNCeURhdGFzZXRzKFxuICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgIHN0YXRlLmxheWVyQ2xhc3NlcyxcbiAgICB0b01lcmdlXG4gICk7XG4gIHVubWVyZ2VkLnB1c2goLi4uZmFpbGVkKTtcbiAgLy8gcHV0IG5ldyBsYXllcnMgaW4gZnJvbnQgb2YgY3VycmVudCBsYXllcnNcbiAgY29uc3Qge25ld0xheWVyT3JkZXIsIG5ld0xheWVyc30gPSBpbnNlcnRMYXllckF0UmlnaHRPcmRlcihcbiAgICBzdGF0ZS5sYXllcnMsXG4gICAgbWVyZ2VkTGF5ZXIsXG4gICAgc3RhdGUubGF5ZXJPcmRlcixcbiAgICBwcmVzZXJ2ZUxheWVyT3JkZXJcbiAgKTtcblxuICBsZXQgbWVyZ2VkU3RhdGU6IFMgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBuZXdMYXllcnMsXG4gICAgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlcixcbiAgICBwcmVzZXJ2ZUxheWVyT3JkZXIsXG4gICAgbGF5ZXJUb0JlTWVyZ2VkOiBbLi4uc3RhdGUubGF5ZXJUb0JlTWVyZ2VkLCAuLi51bm1lcmdlZF1cbiAgfTtcblxuICAvLyBBcHBseSBwZW5kaW5nIGxheWVyT3JkZXIgd2l0aCBncm91cHMgaWYgbGF5ZXJzIGFyZSBub3cgYXZhaWxhYmxlXG4gIGlmIChtZXJnZWRTdGF0ZS5sYXllck9yZGVyVG9CZU1lcmdlZCAmJiBtZXJnZWRTdGF0ZS5sYXllcnMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IHNhdmVkT3JkZXIgPSBtZXJnZWRTdGF0ZS5sYXllck9yZGVyVG9CZU1lcmdlZDtcbiAgICBtZXJnZWRTdGF0ZSA9IG1lcmdlTGF5ZXJPcmRlcihtZXJnZWRTdGF0ZSwgc2F2ZWRPcmRlcik7XG4gICAgLy8gS2VlcCBzYXZlZExheWVyT3JkZXIgYXZhaWxhYmxlIGZvciBmdXR1cmUgZGVmZXJyZWQgbGF5ZXJzXG4gICAgaWYgKG1lcmdlZFN0YXRlLmxheWVyVG9CZU1lcmdlZC5sZW5ndGggPiAwKSB7XG4gICAgICBtZXJnZWRTdGF0ZSA9IHsuLi5tZXJnZWRTdGF0ZSwgbGF5ZXJPcmRlclRvQmVNZXJnZWQ6IHNhdmVkT3JkZXJ9O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtZXJnZWRTdGF0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc2VydExheWVyQXRSaWdodE9yZGVyKFxuICBjdXJyZW50TGF5ZXJzLFxuICBsYXllcnNUb0luc2VydCxcbiAgY3VycmVudE9yZGVyLFxuICBwcmVzZXJ2ZWRPcmRlcjogc3RyaW5nW10gPSBbXVxuKSB7XG4gIGlmICghbGF5ZXJzVG9JbnNlcnQ/Lmxlbmd0aCkge1xuICAgIHJldHVybiB7bmV3TGF5ZXJzOiBjdXJyZW50TGF5ZXJzLCBuZXdMYXllck9yZGVyOiBjdXJyZW50T3JkZXJ9O1xuICB9XG5cbiAgY29uc3QgY3VycmVudExheWVyUXVldWUgPSBjdXJyZW50T3JkZXJcbiAgICAuZmlsdGVyKGVudHJ5ID0+IHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpXG4gICAgLm1hcChpZCA9PiBmaW5kQnlJZChpZCkoY3VycmVudExheWVycykpXG4gICAgLmZpbHRlcihsYXllciA9PiBCb29sZWFuKGxheWVyKSk7XG4gIGNvbnN0IG5ld0xheWVycyA9IGN1cnJlbnRMYXllcnMuY29uY2F0KGxheWVyc1RvSW5zZXJ0KTtcbiAgY29uc3QgbmV3TGF5ZXJPcmRlclF1ZXVlID0gaW5zZXJ0SXRlbUJhc2VkT25QcmVzZXJ2ZWRPcmRlcihcbiAgICBjdXJyZW50TGF5ZXJRdWV1ZSxcbiAgICBsYXllcnNUb0luc2VydCxcbiAgICBwcmVzZXJ2ZWRPcmRlcixcbiAgICB0cnVlXG4gICk7XG5cbiAgY29uc3QgbmV3RmxhdExheWVyT3JkZXIgPSBnZXRMYXllck9yZGVyRnJvbUxheWVycyhuZXdMYXllck9yZGVyUXVldWUpO1xuXG4gIC8vIElmIG5vIGdyb3VwcyBleGlzdCBpbiBjdXJyZW50IG9yZGVyLCBqdXN0IHVzZSB0aGUgbmV3IGZsYXQgb3JkZXJcbiAgY29uc3QgaGFzR3JvdXBzID0gY3VycmVudE9yZGVyLnNvbWUoZW50cnkgPT4gaXNQbGFpbk9iamVjdChlbnRyeSkpO1xuICBpZiAoIWhhc0dyb3Vwcykge1xuICAgIHJldHVybiB7XG4gICAgICBuZXdMYXllck9yZGVyOiBuZXdGbGF0TGF5ZXJPcmRlcixcbiAgICAgIG5ld0xheWVyc1xuICAgIH07XG4gIH1cblxuICAvLyBSZWJ1aWxkIGxheWVyT3JkZXIgcHJlc2VydmluZyBncm91cHMgaW4gdGhlaXIgcmVsYXRpdmUgcG9zaXRpb25zLlxuICAvLyBSZXBsYWNlIGVhY2ggc3RyaW5nIGVudHJ5IHdpdGggaXRzIHVwZGF0ZWQgcG9zaXRpb24gZnJvbSBuZXdGbGF0TGF5ZXJPcmRlcixcbiAgLy8gYW5kIGtlZXAgZ3JvdXBzIGFzLWlzLlxuICBjb25zdCBleGlzdGluZ0ZsYXRJZHMgPSBuZXcgU2V0KFxuICAgIGN1cnJlbnRPcmRlci5maWx0ZXIoZW50cnkgPT4gdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykgYXMgc3RyaW5nW11cbiAgKTtcbiAgY29uc3QgbmV3SW5zZXJ0ZWRJZHMgPSBuZXdGbGF0TGF5ZXJPcmRlci5maWx0ZXIoaWQgPT4gIWV4aXN0aW5nRmxhdElkcy5oYXMoaWQpKTtcblxuICAvLyBSZWJ1aWxkOiB3YWxrIHRocm91Z2ggY3VycmVudE9yZGVyLCByZXBsYWNlIHN0cmluZyBlbnRyaWVzIHdpdGggdGhlaXJcbiAgLy8gbmV3IHBvc2l0aW9uIGVxdWl2YWxlbnRzIGZyb20gbmV3RmxhdExheWVyT3JkZXIsIHRoZW4gYXBwZW5kIGFueSBuZXdseSBpbnNlcnRlZCBsYXllcnNcbiAgY29uc3QgcmVzdWx0OiBMYXllck9yZGVyID0gW107XG4gIGNvbnN0IGZsYXRRdWV1ZSA9IFsuLi5uZXdGbGF0TGF5ZXJPcmRlci5maWx0ZXIoaWQgPT4gZXhpc3RpbmdGbGF0SWRzLmhhcyhpZCkpXTtcbiAgbGV0IGZsYXRJZHggPSAwO1xuXG4gIGZvciAoY29uc3QgZW50cnkgb2YgY3VycmVudE9yZGVyKSB7XG4gICAgaWYgKGlzUGxhaW5PYmplY3QoZW50cnkpKSB7XG4gICAgICByZXN1bHQucHVzaChlbnRyeSBhcyBMYXllck9yZGVyR3JvdXApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZXBsYWNlIHdpdGggY29ycmVzcG9uZGluZyBlbnRyeSBmcm9tIHJlb3JkZXJlZCBmbGF0IGxpc3RcbiAgICAgIGlmIChmbGF0SWR4IDwgZmxhdFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICByZXN1bHQucHVzaChmbGF0UXVldWVbZmxhdElkeF0pO1xuICAgICAgICBmbGF0SWR4Kys7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQXBwZW5kIGFueSBuZXdseSBpbnNlcnRlZCBsYXllcnMgYXQgdGhlIGZyb250ICh0aGV5IGFyZSBuZXcpXG4gIHJldHVybiB7XG4gICAgbmV3TGF5ZXJPcmRlcjogWy4uLm5ld0luc2VydGVkSWRzLCAuLi5yZXN1bHRdLFxuICAgIG5ld0xheWVyc1xuICB9O1xufVxuXG4vKipcbiAqIE1lcmdlIHNhdmVkIGxheWVyT3JkZXIgd2l0aCBjdXJyZW50IHN0YXRlIHRvIHJlc3RvcmUgbGF5ZXIgZ3JvdXBzLlxuICogQ2FsbGVkIGFmdGVyIGxheWVycyBoYXZlIGJlZW4gbWVyZ2VkLiBJZiB0aGUgc2F2ZWQgY29uZmlnIGNvbnRhaW5zIGEgbGF5ZXJPcmRlclxuICogd2l0aCBncm91cHMsIHRoaXMgcmVwbGFjZXMgdGhlIGZsYXQgbGF5ZXJPcmRlciB3aXRoIHRoZSBzYXZlZCBoaWVyYXJjaGljYWwgb25lLFxuICogZmlsdGVyaW5nIG91dCBhbnkgbGF5ZXIgSURzIHRoYXQgZG9uJ3QgZXhpc3QgaW4gdGhlIGN1cnJlbnQgc3RhdGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUxheWVyT3JkZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIHNhdmVkTGF5ZXJPcmRlcj86IGFueVtdLFxuICBmcm9tQ29uZmlnPzogYm9vbGVhblxuKTogUyB7XG4gIGlmICghc2F2ZWRMYXllck9yZGVyIHx8ICFBcnJheS5pc0FycmF5KHNhdmVkTGF5ZXJPcmRlcikgfHwgc2F2ZWRMYXllck9yZGVyLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIENoZWNrIGlmIHRoZSBzYXZlZCBsYXllck9yZGVyIGNvbnRhaW5zIGFueSBncm91cHNcbiAgY29uc3QgaGFzR3JvdXBzID0gc2F2ZWRMYXllck9yZGVyLnNvbWUoZW50cnkgPT4gaXNQbGFpbk9iamVjdChlbnRyeSkpO1xuICBpZiAoIWhhc0dyb3Vwcykge1xuICAgIC8vIE5vIGdyb3VwcyAtIHRoZSBsYXllciBtZXJnZXIgYWxyZWFkeSBoYW5kbGVkIG9yZGVyaW5nIHZpYSBwcmVzZXJ2ZUxheWVyT3JkZXJcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyBJZiBsYXllcnMgaGF2ZW4ndCBiZWVuIG1lcmdlZCB5ZXQsIHN0b3JlIGZvciBsYXRlclxuICBpZiAoc3RhdGUubGF5ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGxheWVyT3JkZXJUb0JlTWVyZ2VkOiBzYXZlZExheWVyT3JkZXJcbiAgICB9O1xuICB9XG5cbiAgLy8gQnVpbGQgYSBzZXQgb2YgdmFsaWQgbGF5ZXIgSURzIGZyb20gY3VycmVudCBzdGF0ZVxuICBjb25zdCB2YWxpZExheWVySWRzID0gbmV3IFNldChzdGF0ZS5sYXllcnMubWFwKGwgPT4gbC5pZCkpO1xuXG4gIC8vIFJlY3Vyc2l2ZWx5IGZpbHRlciB0aGUgc2F2ZWQgbGF5ZXJPcmRlciB0byBvbmx5IGluY2x1ZGUgdmFsaWQgbGF5ZXJzXG4gIGZ1bmN0aW9uIGZpbHRlckxheWVyT3JkZXIob3JkZXI6IGFueVtdKTogTGF5ZXJPcmRlciB7XG4gICAgY29uc3QgcmVzdWx0OiBMYXllck9yZGVyID0gW107XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBvcmRlcikge1xuICAgICAgaWYgKGlzUGxhaW5PYmplY3QoZW50cnkpKSB7XG4gICAgICAgIGNvbnN0IGdyb3VwID0gZW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwO1xuICAgICAgICBjb25zdCBmaWx0ZXJlZEdyb3VwT3JkZXIgPSBmaWx0ZXJMYXllck9yZGVyKGdyb3VwLmxheWVyT3JkZXIpO1xuICAgICAgICAvLyBLZWVwIHRoZSBncm91cCBldmVuIGlmIGVtcHR5ICh1c2VyIG1heSB3YW50IHRoZSBlbXB0eSBncm91cClcbiAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgIC4uLmdyb3VwLFxuICAgICAgICAgIGxheWVyT3JkZXI6IGZpbHRlcmVkR3JvdXBPcmRlclxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyAmJiB2YWxpZExheWVySWRzLmhhcyhlbnRyeSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goZW50cnkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgY29uc3QgcmVzdG9yZWRMYXllck9yZGVyID0gZmlsdGVyTGF5ZXJPcmRlcihzYXZlZExheWVyT3JkZXIpO1xuXG4gIC8vIEZpbmQgYW55IGxheWVycyBpbiB0aGUgY3VycmVudCBzdGF0ZSB0aGF0IGFyZW4ndCBpbiB0aGUgcmVzdG9yZWQgb3JkZXJcbiAgLy8gKGNvdWxkIGhhcHBlbiBpZiBsYXllcnMgd2VyZSBhZGRlZCBiZXR3ZWVuIHNhdmUgYW5kIGxvYWQpXG4gIGNvbnN0IGxheWVySWRzSW5SZXN0b3JlZCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBmdW5jdGlvbiBjb2xsZWN0SWRzKG9yZGVyOiBhbnlbXSkge1xuICAgIGZvciAoY29uc3QgZW50cnkgb2Ygb3JkZXIpIHtcbiAgICAgIGlmIChpc1BsYWluT2JqZWN0KGVudHJ5KSkge1xuICAgICAgICBjb2xsZWN0SWRzKChlbnRyeSBhcyBMYXllck9yZGVyR3JvdXApLmxheWVyT3JkZXIpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGxheWVySWRzSW5SZXN0b3JlZC5hZGQoZW50cnkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb2xsZWN0SWRzKHJlc3RvcmVkTGF5ZXJPcmRlcik7XG5cbiAgLy8gQWRkIGFueSBtaXNzaW5nIGxheWVycyBhdCB0aGUgdG9wXG4gIGNvbnN0IG1pc3NpbmdMYXllcnMgPSBzdGF0ZS5sYXllcnMuZmlsdGVyKGwgPT4gIWxheWVySWRzSW5SZXN0b3JlZC5oYXMobC5pZCkpLm1hcChsID0+IGwuaWQpO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJPcmRlcjogWy4uLm1pc3NpbmdMYXllcnMsIC4uLnJlc3RvcmVkTGF5ZXJPcmRlcl0sXG4gICAgbGF5ZXJPcmRlclRvQmVNZXJnZWQ6IG51bGxcbiAgfTtcbn1cblxuLyoqXG4gKiBNZXJnZSBpbnRlcmFjdGlvbnMgd2l0aCBzYXZlZCBjb25maWdcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUludGVyYWN0aW9uczxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkOiBQYXJ0aWFsPFNhdmVkSW50ZXJhY3Rpb25Db25maWc+IHwgdW5kZWZpbmVkXG4pOiBTIHtcbiAgY29uc3QgbWVyZ2VkOiBOZXN0ZWRQYXJ0aWFsPFNhdmVkSW50ZXJhY3Rpb25Db25maWc+ID0ge307XG4gIGNvbnN0IHVubWVyZ2VkOiBQYXJ0aWFsPFNhdmVkSW50ZXJhY3Rpb25Db25maWc+ID0ge307XG5cbiAgaWYgKGludGVyYWN0aW9uVG9CZU1lcmdlZCkge1xuICAgIChPYmplY3Qua2V5cyhpbnRlcmFjdGlvblRvQmVNZXJnZWQpIGFzIEFycmF5PGtleW9mIFNhdmVkSW50ZXJhY3Rpb25Db25maWc+KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAoIXN0YXRlLmludGVyYWN0aW9uQ29uZmlnW2tleV0pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjdXJyZW50Q29uZmlnID1cbiAgICAgICAga2V5ID09PSAndG9vbHRpcCcgfHwga2V5ID09PSAnYnJ1c2gnIHx8IGtleSA9PT0gJ2dlb2NvZGVyJ1xuICAgICAgICAgID8gc3RhdGUuaW50ZXJhY3Rpb25Db25maWdba2V5XS5jb25maWdcbiAgICAgICAgICA6IG51bGw7XG5cbiAgICAgIGNvbnN0IHtlbmFibGVkLCAuLi5jb25maWdTYXZlZH0gPSBpbnRlcmFjdGlvblRvQmVNZXJnZWRba2V5XSB8fCB7fTtcblxuICAgICAgbGV0IGNvbmZpZ1RvTWVyZ2UgPSBjb25maWdTYXZlZDtcblxuICAgICAgaWYgKGtleSA9PT0gJ3Rvb2x0aXAnKSB7XG4gICAgICAgIGNvbnN0IHttZXJnZWRUb29sdGlwLCB1bm1lcmdlZFRvb2x0aXB9ID0gbWVyZ2VJbnRlcmFjdGlvblRvb2x0aXBDb25maWcoXG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgY29uZmlnU2F2ZWQgYXMgU2F2ZWRJbnRlcmFjdGlvbkNvbmZpZ1sndG9vbHRpcCddXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gbWVyZ2UgbmV3IGRhdGFzZXQgdG9vbHRpcHMgd2l0aCBvcmlnaW5hbCBkYXRhc2V0IHRvb2x0aXBzXG4gICAgICAgIGNvbmZpZ1RvTWVyZ2UgPSB7XG4gICAgICAgICAgZmllbGRzVG9TaG93OiB7XG4gICAgICAgICAgICAuLi4oY3VycmVudENvbmZpZyBhcyBUb29sdGlwSW5mb1snY29uZmlnJ10pLmZpZWxkc1RvU2hvdyxcbiAgICAgICAgICAgIC4uLm1lcmdlZFRvb2x0aXBcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHVubWVyZ2VkVG9vbHRpcCkubGVuZ3RoKSB7XG4gICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgIHVubWVyZ2VkLnRvb2x0aXAgPSB7ZmllbGRzVG9TaG93OiB1bm1lcmdlZFRvb2x0aXAsIGVuYWJsZWQ6IEJvb2xlYW4oZW5hYmxlZCl9O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG1lcmdlZFtrZXldID0ge1xuICAgICAgICAuLi5zdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZ1trZXldLFxuICAgICAgICBlbmFibGVkOiBCb29sZWFuKGVuYWJsZWQpLFxuICAgICAgICAuLi4oY3VycmVudENvbmZpZ1xuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBjb25maWc6IHBpY2soXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgLi4uY3VycmVudENvbmZpZyxcbiAgICAgICAgICAgICAgICAgIC4uLmNvbmZpZ1RvTWVyZ2VcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGN1cnJlbnRDb25maWcpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHt9KVxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBpbnRlcmFjdGlvbkNvbmZpZzoge1xuICAgICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICAuLi5tZXJnZWRcbiAgICB9LFxuICAgIGludGVyYWN0aW9uVG9CZU1lcmdlZDogc2F2ZWRVbm1lcmdlZEludGVyYWN0aW9uKHN0YXRlLCB1bm1lcmdlZClcbiAgfTtcbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuZnVuY3Rpb24gY29tYmluZUludGVyYWN0aW9uQ29uZmlncyhjb25maWdzOiBTYXZlZEludGVyYWN0aW9uQ29uZmlnW10pOiBTYXZlZEludGVyYWN0aW9uQ29uZmlnIHtcbiAgY29uc3QgY29tYmluZWQgPSB7Li4uY29uZmlnc1swXX07XG4gIC8vIGhhbmRsZSBlYWNoIHByb3BlcnR5IGtleSBvZiBhbiBgSW50ZXJhY3Rpb25Db25maWdgLCBlLmcuIHRvb2x0aXAsIGdlb2NvZGVyLCBicnVzaCwgY29vcmRpbmF0ZVxuICAvLyBieSBjb21iaW5pbmcgdmFsdWVzIGZvciBlYWNoIGFtb25nIGFsbCBwYXNzZWQgaW4gY29uZmlnc1xuXG4gIGZvciAoY29uc3Qga2V5IGluIGNvbWJpbmVkKSB7XG4gICAgY29uc3QgdG9CZUNvbWJpbmVkUHJvcHMgPSBjb25maWdzLm1hcChjID0+IGNba2V5XSk7XG5cbiAgICAvLyBhbGwgb2YgdGhlc2UgaGF2ZSBhbiBlbmFibGVkIGJvb2xlYW5cbiAgICBjb21iaW5lZFtrZXldID0ge1xuICAgICAgLy8gYXJlIGFueSBvZiB0aGUgY29uZmlncycgZW5hYmxlZCB2YWx1ZXMgdHJ1ZT9cbiAgICAgIGVuYWJsZWQ6IHRvQmVDb21iaW5lZFByb3BzLnNvbWUocCA9PiBwPy5lbmFibGVkKVxuICAgIH07XG5cbiAgICBpZiAoa2V5ID09PSAndG9vbHRpcCcpIHtcbiAgICAgIC8vIGFyZSBhbnkgb2YgdGhlIGNvbmZpZ3MnIGNvbXBhcmVNb2RlIHZhbHVlcyB0cnVlP1xuICAgICAgY29tYmluZWRba2V5XS5jb21wYXJlTW9kZSA9IHRvQmVDb21iaW5lZFByb3BzLnNvbWUocCA9PiBwPy5jb21wYXJlTW9kZSk7XG5cbiAgICAgIC8vIHJldHVybiB0aGUgY29tcGFyZSB0eXBlIG1vZGUsIGl0IHdpbGwgYmUgZWl0aGVyIGFic29sdXRlIG9yIHJlbGF0aXZlXG4gICAgICBjb21iaW5lZFtrZXldLmNvbXBhcmVUeXBlID0gZ2V0VmFsdWVXaXRoSGlnaGVzdE9jY3VycmVuY2UoXG4gICAgICAgIHRvQmVDb21iaW5lZFByb3BzLm1hcChwID0+IHAuY29tcGFyZVR5cGUpXG4gICAgICApO1xuXG4gICAgICAvLyBjb21iaW5lIGZpZWxkc1RvU2hvdyBhbW9uZyBhbGwgZGF0YXNldCBpZHNcbiAgICAgIGNvbWJpbmVkW2tleV0uZmllbGRzVG9TaG93ID0gdG9CZUNvbWJpbmVkUHJvcHNcbiAgICAgICAgLm1hcChwID0+IHAuZmllbGRzVG9TaG93KVxuICAgICAgICAucmVkdWNlKChhY2MsIG5leHRGaWVsZHNUb1Nob3cpID0+IHtcbiAgICAgICAgICBmb3IgKGNvbnN0IG5leHREYXRhSWRLZXkgaW4gbmV4dEZpZWxkc1RvU2hvdykge1xuICAgICAgICAgICAgY29uc3QgbmV4dFRvb2x0aXBGaWVsZHMgPSBuZXh0RmllbGRzVG9TaG93W25leHREYXRhSWRLZXldO1xuICAgICAgICAgICAgaWYgKCFhY2NbbmV4dERhdGFJZEtleV0pIHtcbiAgICAgICAgICAgICAgLy8gaWYgdGhlIGRhdGFzZXQgaWQgaXMgbm90IHByZXNlbnQgaW4gdGhlIGFjY3VtdWxhdG9yXG4gICAgICAgICAgICAgIC8vIHRoZW4gYWRkIGl0IHdpdGggaXRzIHRvb2x0aXAgZmllbGRzXG4gICAgICAgICAgICAgIGFjY1tuZXh0RGF0YUlkS2V5XSA9IG5leHRUb29sdGlwRmllbGRzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIHRoZSBkYXRhc2V0IGlkIGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgYWNjdW11bGF0b3JcbiAgICAgICAgICAgICAgLy8gc28gb25seSBhZGQgdGhlIG5leHQgdG9vbHRpcCBmaWVsZHMgZm9yIHRoaXMgZGF0YXNldCdzIGFycmF5IGlmIHRoZXkgYXJlIG5vdCBhbHJlYWR5IHByZXNlbnQsXG4gICAgICAgICAgICAgIC8vIHVzaW5nIHRoZSB0b29sdGlwRmllbGQubmFtZSBwcm9wZXJ0eSBmb3IgdW5pcXVlbmVzc1xuICAgICAgICAgICAgICBuZXh0VG9vbHRpcEZpZWxkcy5mb3JFYWNoKG5leHRURiA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFhY2NbbmV4dERhdGFJZEtleV0uZmluZCgoe25hbWV9KSA9PiBuZXh0VEYubmFtZSA9PT0gbmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgIGFjY1tuZXh0RGF0YUlkS2V5XS5wdXNoKG5leHRURik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSwge30pO1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdicnVzaCcpIHtcbiAgICAgIC8vIGtlZXAgdGhlIGJpZ2dlc3QgYnJ1c2ggc2l6ZVxuICAgICAgY29tYmluZWRba2V5XS5zaXplID1cbiAgICAgICAgYWdncmVnYXRlKHRvQmVDb21iaW5lZFByb3BzLCBBR0dSRUdBVElPTl9UWVBFUy5tYXhpbXVtLCBwID0+IHAuc2l6ZSkgPz8gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnZ2VvY29kZXInKSB7XG4gICAgICBjb21iaW5lZFtrZXldLmxpbWl0U2VhcmNoID0gdG9CZUNvbWJpbmVkUHJvcHMuc29tZShwID0+IHA/LmxpbWl0U2VhcmNoKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29tYmluZWQ7XG59XG5cbmZ1bmN0aW9uIHNhdmVkVW5tZXJnZWRJbnRlcmFjdGlvbjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgdW5tZXJnZWQ6IFBhcnRpYWw8U2F2ZWRJbnRlcmFjdGlvbkNvbmZpZz5cbikge1xuICBpZiAoIXVubWVyZ2VkPy50b29sdGlwPy5maWVsZHNUb1Nob3cpIHtcbiAgICByZXR1cm4gc3RhdGUuaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkO1xuICB9XG4gIHJldHVybiB7XG4gICAgdG9vbHRpcDoge1xuICAgICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkLnRvb2x0aXAsXG4gICAgICAuLi4odHlwZW9mIHVubWVyZ2VkPy50b29sdGlwPy5lbmFibGVkID09PSAnYm9vbGVhbidcbiAgICAgICAgPyB7ZW5hYmxlZDogdW5tZXJnZWQudG9vbHRpcC5lbmFibGVkfVxuICAgICAgICA6IHt9KSxcbiAgICAgIGZpZWxkc1RvU2hvdzoge1xuICAgICAgICAuLi5zdGF0ZS5pbnRlcmFjdGlvblRvQmVNZXJnZWQ/LnRvb2x0aXA/LmZpZWxkc1RvU2hvdyxcbiAgICAgICAgLi4udW5tZXJnZWQ/LnRvb2x0aXA/LmZpZWxkc1RvU2hvd1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZUludGVyYWN0aW9uRGF0YXNldElkcyhpbnRlcmFjdGlvbkNvbmZpZywgZGF0YUlkOiBzdHJpbmcsIGRhdGFJZFRvUmVwbGFjZTogc3RyaW5nKSB7XG4gIGlmIChpbnRlcmFjdGlvbkNvbmZpZz8udG9vbHRpcD8uZmllbGRzVG9TaG93W2RhdGFJZF0pIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICB0b29sdGlwOiB7XG4gICAgICAgIC4uLmludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAsXG4gICAgICAgIGZpZWxkc1RvU2hvdzoge1xuICAgICAgICAgIFtkYXRhSWRUb1JlcGxhY2VdOiBpbnRlcmFjdGlvbkNvbmZpZz8udG9vbHRpcD8uZmllbGRzVG9TaG93W2RhdGFJZF1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogTWVyZ2Ugc3BsaXRNYXBzIGNvbmZpZyB3aXRoIGN1cnJlbnQgdmlzU3RldGUuXG4gKiBQYW5lbHMgYXJlIG1hdGNoZWQgYnkgaW5kZXg6IGluZGV4IGkgb2YgYHNwbGl0TWFwc2AsIGBzdGF0ZS5zcGxpdE1hcHNgIGFuZFxuICogYHN0YXRlLnNwbGl0TWFwc1RvQmVNZXJnZWRgIGlzIHRoZSBzYW1lIG1hcCBwYW5lbC5cbiAqIDEuIGlmIGN1cnJlbnQgbWFwIGlzIHNwbGl0LCBidXQgc3BsaXRNYXAgRE9FU05PVCBjb250YWluIG1hcHNcbiAqICAgIDogZG9uJ3QgbWVyZ2UgYW55dGhpbmdcbiAqIDIuIGlmIGN1cnJlbnQgbWFwIGlzIE5PVCBzcGxpdCwgYnV0IHNwbGl0TWFwcyBjb250YWluIG1hcHNcbiAqICAgIDogYWRkIHRvIHNwbGl0TWFwcywgYW5kIGFkZCBjdXJyZW50IGxheWVycyB0byBzcGxpdE1hcHMuXG4gKiAgICAgIFBhbmVscyBhcmUgY3JlYXRlZCBvbmNlIG9uZSBvZiB0aGVtIGNhbiBiZSBtZXJnZWQ6IGl0IGhhcyBubyBsYXllcnMsIG9yIG9uZSBvZiBpdHMgbGF5ZXJzIGV4aXN0c1xuICogMy4gbGF5ZXJzIHRoYXQgZG9uJ3QgZXhpc3QgeWV0XG4gKiAgICA6IHNhdmUgdG8gc3BsaXRNYXBzVG9CZU1lcmdlZCwgaW4gdGhlIHBhbmVsIGF0IHRoZSBzYW1lIGluZGV4XG4gKiBBIGxheWVyIGxpc3RlZCBpbiBzcGxpdE1hcHMgb25seSBzaG93cyBpbiB0aGUgcGFuZWxzIHRoYXQgbGlzdCBpdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlU3BsaXRNYXBzPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBzcGxpdE1hcHM6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ3NwbGl0TWFwcyddID0gW11cbik6IFMge1xuICBjb25zdCBsYXllckV4aXN0cyA9IChpZDogc3RyaW5nKSA9PiBzdGF0ZS5sYXllcnMuc29tZShsID0+IGwuaWQgPT09IGlkKTtcbiAgY29uc3QgY3JlYXRlUGFuZWxzID1cbiAgICBzdGF0ZS5zcGxpdE1hcHMubGVuZ3RoID4gMCB8fFxuICAgIHNwbGl0TWFwcy5zb21lKHNtID0+IHtcbiAgICAgIGNvbnN0IGlkcyA9IE9iamVjdC5rZXlzKHNtLmxheWVycyk7XG4gICAgICByZXR1cm4gIWlkcy5sZW5ndGggfHwgaWRzLnNvbWUobGF5ZXJFeGlzdHMpO1xuICAgIH0pO1xuICBjb25zdCBjdXJyZW50TGF5ZXJzID0gZ2V0SW5pdGlhbE1hcExheWVyc0ZvclNwbGl0TWFwKFxuICAgIHN0YXRlLmxheWVycy5maWx0ZXIobCA9PiAhc3BsaXRNYXBzLnNvbWUoc20gPT4gbC5pZCBpbiBzbS5sYXllcnMpKVxuICApO1xuXG4gIGNvbnN0IG1lcmdlZCA9IFsuLi5zdGF0ZS5zcGxpdE1hcHNdO1xuICBjb25zdCB1bm1lcmdlZDogdHlwZW9mIHNwbGl0TWFwcyA9IFtdO1xuICBzcGxpdE1hcHMuZm9yRWFjaCgoc20sIGkpID0+IHtcbiAgICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXMoc20ubGF5ZXJzKTtcbiAgICBpZiAoY3JlYXRlUGFuZWxzKSB7XG4gICAgICAvLyBjcmVhdGUgbWFwIHBhbmVsIGlmIGN1cnJlbnQgbWFwIGlzIG5vdCBzcGxpdCwga2VlcCBpZFxuICAgICAgY29uc3QgcGFuZWwgPSBtZXJnZWRbaV0gfHwgey4uLnNtLCBsYXllcnM6IGN1cnJlbnRMYXllcnN9O1xuICAgICAgbWVyZ2VkW2ldID0ge1xuICAgICAgICAuLi5wYW5lbCxcbiAgICAgICAgbGF5ZXJzOiB7Li4ucGFuZWwubGF5ZXJzLCAuLi5PYmplY3QuZnJvbUVudHJpZXMoZW50cmllcy5maWx0ZXIoKFtpZF0pID0+IGxheWVyRXhpc3RzKGlkKSkpfVxuICAgICAgfTtcbiAgICB9XG4gICAgdW5tZXJnZWRbaV0gPSB7Li4uc20sIGxheWVyczogT2JqZWN0LmZyb21FbnRyaWVzKGVudHJpZXMuZmlsdGVyKChbaWRdKSA9PiAhbGF5ZXJFeGlzdHMoaWQpKSl9O1xuICB9KTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHNwbGl0TWFwczogbWVyZ2VkLFxuICAgIHNwbGl0TWFwc1RvQmVNZXJnZWQ6IHVubWVyZ2VkLnNvbWUoc20gPT4gT2JqZWN0LmtleXMoc20ubGF5ZXJzKS5sZW5ndGgpXG4gICAgICA/IGNvbWJpbmVTcGxpdE1hcHNCeUluZGV4KHN0YXRlLnNwbGl0TWFwc1RvQmVNZXJnZWQsIHVubWVyZ2VkKVxuICAgICAgOiBzdGF0ZS5zcGxpdE1hcHNUb0JlTWVyZ2VkXG4gIH07XG59XG5cbi8qKlxuICogTWVyZ2UgY2hhcnRzIHdpdGggc2F2ZWQgY29uZmlnLiBDaGFydHMgd2hvc2UgZGF0YXNldCBpcyBub3QgbG9hZGVkIHlldCBhcmVcbiAqIHBhcmtlZCBvbiBgY2hhcnRzVG9CZU1lcmdlZGAgKHNhbWUgYXMgZmlsdGVycykgc28gZGF0YXNldCByZXBsYWNlIGNhbiByZW1hcFxuICogYGRhdGFJZGAgYW5kIHJlc3RvcmUgdGhlbSBhZnRlciB0aGUgbmV3IHRhYmxlIGxhbmRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VDaGFydHM8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGNoYXJ0czogQ2hhcnRDb25maWdbXSB8IHVuZGVmaW5lZCxcbiAgZnJvbUNvbmZpZz86IGJvb2xlYW5cbik6IFMge1xuICBpZiAoIUFycmF5LmlzQXJyYXkoY2hhcnRzKSB8fCAhY2hhcnRzLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBpbmNvbWluZ0lkcyA9IG5ldyBTZXQoXG4gICAgY2hhcnRzLm1hcChjaGFydCA9PiBjaGFydD8uaWQpLmZpbHRlcigoaWQpOiBpZCBpcyBzdHJpbmcgPT4gQm9vbGVhbihpZCkpXG4gICk7XG4gIGNvbnN0IGV4aXN0aW5nSWRzID0gbmV3IFNldCgoc3RhdGUuY2hhcnRzIHx8IFtdKS5tYXAoY2hhcnQgPT4gY2hhcnQuaWQpKTtcbiAgY29uc3QgbmV4dENoYXJ0czogQ2hhcnRDb25maWdbXSA9IFtdO1xuICBjb25zdCBmYWlsZWQ6IENoYXJ0Q29uZmlnW10gPSBbXTtcbiAgY2hhcnRzLmZvckVhY2goY2hhcnQgPT4ge1xuICAgIGlmICghY2hhcnQgfHwgIWNoYXJ0LmlkIHx8IGV4aXN0aW5nSWRzLmhhcyhjaGFydC5pZCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgbm9ybWFsaXplZDogQ2hhcnRDb25maWcgPSBmcm9tQ29uZmlnXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5jaGFydCxcbiAgICAgICAgICAvLyBPbGRlciBjb25maWdzIG9taXQgYHBpbm5lZGA7IGtlZXAgY2hhcnRzIHZpc2libGUgbGlrZSB0aGUgbGVnZW5kLlxuICAgICAgICAgIHBpbm5lZDogY2hhcnQucGlubmVkICE9PSBmYWxzZSxcbiAgICAgICAgICBkaXNwbGF5OiB7XG4gICAgICAgICAgICAuLi5jaGFydC5kaXNwbGF5LFxuICAgICAgICAgICAgaXNDb25maWdBY3RpdmU6IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICA6IGNoYXJ0O1xuICAgIGlmIChcbiAgICAgIG5vcm1hbGl6ZWQuZGF0YUlkICYmXG4gICAgICAoIXN0YXRlLmRhdGFzZXRzW25vcm1hbGl6ZWQuZGF0YUlkXSB8fCBzdGF0ZS5pc01lcmdpbmdEYXRhc2V0c1tub3JtYWxpemVkLmRhdGFJZF0pXG4gICAgKSB7XG4gICAgICBmYWlsZWQucHVzaChub3JtYWxpemVkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZXhpc3RpbmdJZHMuYWRkKG5vcm1hbGl6ZWQuaWQpO1xuICAgIG5leHRDaGFydHMucHVzaChub3JtYWxpemVkKTtcbiAgfSk7XG4gIGlmICghbmV4dENoYXJ0cy5sZW5ndGggJiYgIWZhaWxlZC5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBjaGFydHM6IG5leHRDaGFydHMubGVuZ3RoID8gWy4uLihzdGF0ZS5jaGFydHMgfHwgW10pLCAuLi5uZXh0Q2hhcnRzXSA6IHN0YXRlLmNoYXJ0cyxcbiAgICBjaGFydHNUb0JlTWVyZ2VkOiBbXG4gICAgICAuLi4oc3RhdGUuY2hhcnRzVG9CZU1lcmdlZCB8fCBbXSkuZmlsdGVyKGNoYXJ0ID0+ICFpbmNvbWluZ0lkcy5oYXMoY2hhcnQuaWQpKSxcbiAgICAgIC4uLmZhaWxlZFxuICAgIF1cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VDaGFydERhdGFzZXRJZHMoXG4gIHNhdmVkQ2hhcnRzOiBDaGFydENvbmZpZ1tdIHwgdW5kZWZpbmVkLFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgZGF0YUlkVG9Vc2U6IHN0cmluZ1xuKTogQ2hhcnRDb25maWdbXSB8IG51bGwge1xuICBpZiAoIUFycmF5LmlzQXJyYXkoc2F2ZWRDaGFydHMpIHx8ICFzYXZlZENoYXJ0cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCByZXBsYWNlZCA9IHNhdmVkQ2hhcnRzXG4gICAgLmZpbHRlcihjaGFydCA9PiBjaGFydD8uZGF0YUlkID09PSBkYXRhSWQpXG4gICAgLm1hcChjaGFydCA9PiAoey4uLmNoYXJ0LCBkYXRhSWQ6IGRhdGFJZFRvVXNlfSkpO1xuICByZXR1cm4gcmVwbGFjZWQubGVuZ3RoID8gcmVwbGFjZWQgOiBudWxsO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlRWZmZWN0czxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgZWZmZWN0czogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnZWZmZWN0cyddLFxuICBmcm9tQ29uZmlnPzogYm9vbGVhblxuKTogUyB7XG4gIGNvbnN0IG5ld0VmZmVjdHMgPSBbXG4gICAgLi4uc3RhdGUuZWZmZWN0cyxcbiAgICAuLi4oZWZmZWN0cyB8fCBbXSlcbiAgICAgIC5tYXAoZWZmZWN0ID0+IHtcbiAgICAgICAgcmV0dXJuIGZyb21Db25maWdcbiAgICAgICAgICA/IGNyZWF0ZUVmZmVjdChcbiAgICAgICAgICAgICAgZGVlcG1lcmdlLmFsbChbXG4gICAgICAgICAgICAgICAgZWZmZWN0LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIC8vIGNvbGxhcHNlIGFsbCBwYW5lbHMgd2hlbiBsb2FkaW5nIGVmZmVjdHNcbiAgICAgICAgICAgICAgICAgIGlzQ29uZmlnQWN0aXZlOiBmYWxzZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IChlZmZlY3QgYXMgRWZmZWN0VHlwZSk7XG4gICAgICB9KVxuICAgICAgLmZpbHRlcihlZmZlY3QgPT4ge1xuICAgICAgICByZXR1cm4gQm9vbGVhbihlZmZlY3QgJiYgZWZmZWN0LmlzVmFsaWRUb1NhdmUoKSk7XG4gICAgICB9KVxuICBdO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVmZmVjdHM6IG5ld0VmZmVjdHMsXG4gICAgZWZmZWN0T3JkZXI6IG5ld0VmZmVjdHMubWFwKGVmZmVjdCA9PiBlZmZlY3QuaWQpXG4gIH07XG59XG5cbi8qKlxuICogTWVyZ2UgYW5ub3RhdGlvbnMgd2l0aCBzYXZlZCBjb25maWdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlQW5ub3RhdGlvbnM8UyBleHRlbmRzIFZpc1N0YXRlPihzdGF0ZTogUywgYW5ub3RhdGlvbnM6IGFueVtdKTogUyB7XG4gIGlmICghYW5ub3RhdGlvbnMgfHwgIWFubm90YXRpb25zLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBleGlzdGluZ0lkcyA9IG5ldyBTZXQoc3RhdGUuYW5ub3RhdGlvbnMubWFwKGEgPT4gYS5pZCkpO1xuICBjb25zdCB2YWxpZEFubm90YXRpb25zID0gYW5ub3RhdGlvbnNcbiAgICAuZmlsdGVyKFxuICAgICAgYSA9PlxuICAgICAgICBhICYmXG4gICAgICAgIGEuaWQgJiZcbiAgICAgICAgIWV4aXN0aW5nSWRzLmhhcyhhLmlkKSAmJlxuICAgICAgICBpc0Fubm90YXRpb25LaW5kKGEua2luZCkgJiZcbiAgICAgICAgQXJyYXkuaXNBcnJheShhLmFuY2hvclBvaW50KSAmJlxuICAgICAgICAoYS5hbmNob3JQb2ludC5sZW5ndGggPT09IDIgfHwgYS5hbmNob3JQb2ludC5sZW5ndGggPT09IDMpICYmXG4gICAgICAgIGEuYW5jaG9yUG9pbnQuZXZlcnkodmFsdWUgPT4gTnVtYmVyLmlzRmluaXRlKHZhbHVlKSlcbiAgICApXG4gICAgLm1hcChhID0+ICh7XG4gICAgICBpc1Zpc2libGU6IHRydWUsXG4gICAgICBhdXRvU2l6ZTogdHJ1ZSxcbiAgICAgIGF1dG9TaXplWTogdHJ1ZSxcbiAgICAgIGxhYmVsOiAnJyxcbiAgICAgIGxpbmVDb2xvcjogSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfQ09MT1IsXG4gICAgICBsaW5lV2lkdGg6IElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX1dJRFRILFxuICAgICAgdGV4dFdpZHRoOiAwLFxuICAgICAgdGV4dEhlaWdodDogMCxcbiAgICAgIC4uLmFcbiAgICB9KSk7XG4gIGlmICghdmFsaWRBbm5vdGF0aW9ucy5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbm5vdGF0aW9uczogWy4uLnN0YXRlLmFubm90YXRpb25zLCAuLi52YWxpZEFubm90YXRpb25zXVxuICB9O1xufVxuXG4vKipcbiAqIE1lcmdlIGludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAgd2l0aCBzYXZlZCBjb25maWcsXG4gKiB2YWxpZGF0ZSBmaWVsZHNUb1Nob3dcbiAqXG4gKiBAcGFyYW0gc3RhdGVcbiAqIEBwYXJhbSB0b29sdGlwQ29uZmlnXG4gKiBAcmV0dXJuIC0ge21lcmdlZFRvb2x0aXA6IHt9LCB1bm1lcmdlZFRvb2x0aXA6IHt9fVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VJbnRlcmFjdGlvblRvb2x0aXBDb25maWcoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgdG9vbHRpcENvbmZpZzogUGljazxUb29sdGlwSW5mb1snY29uZmlnJ10sICdmaWVsZHNUb1Nob3cnPiB8IG51bGwgPSBudWxsXG4pIHtcbiAgY29uc3QgdW5tZXJnZWRUb29sdGlwOiBUb29sdGlwSW5mb1snY29uZmlnJ11bJ2ZpZWxkc1RvU2hvdyddID0ge307XG4gIGNvbnN0IG1lcmdlZFRvb2x0aXA6IFRvb2x0aXBJbmZvWydjb25maWcnXVsnZmllbGRzVG9TaG93J10gPSB7fTtcblxuICBpZiAoXG4gICAgIXRvb2x0aXBDb25maWcgfHxcbiAgICAhdG9vbHRpcENvbmZpZy5maWVsZHNUb1Nob3cgfHxcbiAgICAhT2JqZWN0LmtleXModG9vbHRpcENvbmZpZy5maWVsZHNUb1Nob3cpLmxlbmd0aFxuICApIHtcbiAgICByZXR1cm4ge21lcmdlZFRvb2x0aXAsIHVubWVyZ2VkVG9vbHRpcH07XG4gIH1cblxuICBmb3IgKGNvbnN0IGRhdGFJZCBpbiB0b29sdGlwQ29uZmlnLmZpZWxkc1RvU2hvdykge1xuICAgIGlmICghc3RhdGUuZGF0YXNldHNbZGF0YUlkXSB8fCBzdGF0ZS5pc01lcmdpbmdEYXRhc2V0c1tkYXRhSWRdKSB7XG4gICAgICAvLyBpcyBub3QgeWV0IGxvYWRlZFxuICAgICAgdW5tZXJnZWRUb29sdGlwW2RhdGFJZF0gPSB0b29sdGlwQ29uZmlnLmZpZWxkc1RvU2hvd1tkYXRhSWRdO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpZiBkYXRhc2V0IGlzIGxvYWRlZFxuICAgICAgY29uc3QgYWxsRmllbGRzID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXS5maWVsZHMubWFwKGQgPT4gZC5uYW1lKTtcbiAgICAgIGNvbnN0IGZvdW5kRmllbGRzVG9TaG93ID0gdG9vbHRpcENvbmZpZy5maWVsZHNUb1Nob3dbZGF0YUlkXS5maWx0ZXIoZmllbGQgPT5cbiAgICAgICAgYWxsRmllbGRzLmluY2x1ZGVzKGZpZWxkLm5hbWUpXG4gICAgICApO1xuXG4gICAgICBtZXJnZWRUb29sdGlwW2RhdGFJZF0gPSBmb3VuZEZpZWxkc1RvU2hvdztcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge21lcmdlZFRvb2x0aXAsIHVubWVyZ2VkVG9vbHRpcH07XG59XG4vKipcbiAqIE1lcmdlIGxheWVyQmxlbmRpbmcgd2l0aCBzYXZlZFxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlTGF5ZXJCbGVuZGluZzxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgbGF5ZXJCbGVuZGluZzogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnbGF5ZXJCbGVuZGluZyddXG4pOiBTIHtcbiAgaWYgKGxheWVyQmxlbmRpbmcgJiYgTEFZRVJfQkxFTkRJTkdTW2xheWVyQmxlbmRpbmddKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgbGF5ZXJCbGVuZGluZ1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbi8qKlxuICogQ29tYmluZXMgbXVsdGlwbGUgbGF5ZXIgYmxlbmRpbmcgY29uZmlncyBpbnRvIGEgc2luZ2xlIHN0cmluZ1xuICogYnkgcmV0dXJuaW5nIHRoZSBvbmUgd2l0aCB0aGUgaGlnaGVzdCBvY2N1cnJlbmNlXG4gKi9cbmZ1bmN0aW9uIGNvbWJpbmVMYXllckJsZW5kaW5nQ29uZmlncyhjb25maWdzOiBzdHJpbmdbXSk6IHN0cmluZyB8IG51bGwge1xuICAvLyByZXR1cm4gdGhlIG1vZGUgb2YgdGhlIGxheWVyIGJsZW5kaW5nIHR5cGVcbiAgcmV0dXJuIGdldFZhbHVlV2l0aEhpZ2hlc3RPY2N1cnJlbmNlKGNvbmZpZ3MpO1xufVxuXG4vKipcbiAqIE1lcmdlIG92ZXJsYXlCbGVuZGluZyB3aXRoIHNhdmVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZU92ZXJsYXlCbGVuZGluZzxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgb3ZlcmxheUJsZW5kaW5nOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydvdmVybGF5QmxlbmRpbmcnXVxuKTogUyB7XG4gIGlmIChvdmVybGF5QmxlbmRpbmcgJiYgT1ZFUkxBWV9CTEVORElOR1Nbb3ZlcmxheUJsZW5kaW5nXSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIG92ZXJsYXlCbGVuZGluZ1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbi8qKlxuICogQ29tYmluZXMgbXVsdGlwbGUgb3ZlcmxheSBibGVuZGluZyBjb25maWdzIGludG8gYSBzaW5nbGUgc3RyaW5nXG4gKiBieSByZXR1cm5pbmcgdGhlIG9uZSB3aXRoIHRoZSBoaWdoZXN0IG9jY3VycmVuY2VcbiAqKi9cbmZ1bmN0aW9uIGNvbWJpbmVPdmVybGF5QmxlbmRpbmdDb25maWdzKGNvbmZpZ3M6IHN0cmluZ1tdKTogc3RyaW5nIHwgbnVsbCB7XG4gIC8vIHJldHVybiB0aGUgbW9kZSBvZiB0aGUgb3ZlcmxheSBibGVuZGluZyB0eXBlXG4gIHJldHVybiBnZXRWYWx1ZVdpdGhIaWdoZXN0T2NjdXJyZW5jZShjb25maWdzKTtcbn1cblxuLyoqXG4gKiBNZXJnZSBhbmltYXRpb24gY29uZmlnXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUFuaW1hdGlvbkNvbmZpZzxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYW5pbWF0aW9uOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydhbmltYXRpb25Db25maWcnXVxuKTogUyB7XG4gIGlmIChhbmltYXRpb24gJiYgYW5pbWF0aW9uLmN1cnJlbnRUaW1lKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgLi4uYW5pbWF0aW9uLFxuICAgICAgICBkb21haW46IG51bGxcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG5mdW5jdGlvbiBjb21iaW5lQW5pbWF0aW9uQ29uZmlncyhjb25maWdzOiBTYXZlZEFuaW1hdGlvbkNvbmZpZ1tdKTogU2F2ZWRBbmltYXRpb25Db25maWcge1xuICAvLyBnZXQgdGhlIHNtYWxsZXN0IHZhbHVlcyBvZiBjdXJyZW50VGltZSBhbmQgc3BlZWQgYW1vbmcgYWxsIGNvbmZpZ3NcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW50VGltZTogYWdncmVnYXRlKGNvbmZpZ3MsIEFHR1JFR0FUSU9OX1RZUEVTLm1pbmltdW0sIGMgPT4gYy5jdXJyZW50VGltZSkgPz8gbnVsbCxcbiAgICBzcGVlZDogYWdncmVnYXRlKGNvbmZpZ3MsIEFHR1JFR0FUSU9OX1RZUEVTLm1pbmltdW0sIGMgPT4gYy5zcGVlZCkgPz8gbnVsbCxcbiAgICAvLyBhbmQgdGhlIG1vc3QgY29tbW9uIHRpbWUgZm9ybWF0IGFuZCB0aW1lem9uZSBhbW9uZyB0aGUgY29uZmlncyB0aGF0IHNldCBvbmVcbiAgICB0aW1lRm9ybWF0OiBnZXRWYWx1ZVdpdGhIaWdoZXN0T2NjdXJyZW5jZShjb25maWdzLm1hcChjID0+IGMudGltZUZvcm1hdCkpLFxuICAgIHRpbWV6b25lOiBnZXRWYWx1ZVdpdGhIaWdoZXN0T2NjdXJyZW5jZShjb25maWdzLm1hcChjID0+IGMudGltZXpvbmUpKVxuICB9O1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHNhdmVkIGxheWVyIGNvbHVtbnMgd2l0aCBuZXcgZGF0YSxcbiAqIHVwZGF0ZSBmaWVsZElkeCBiYXNlZCBvbiBuZXcgZmllbGRzXG4gKlxuICogQHBhcmFtIGZpZWxkc1xuICogQHBhcmFtIHNhdmVkQ29sc1xuICogQHBhcmFtIGVtcHR5Q29sc1xuICogQHBhcmFtIG9wdGlvbnNcbiAqIEByZXR1cm4gLSB2YWxpZGF0ZWQgY29sdW1ucyBvciBudWxsXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU2F2ZWRMYXllckNvbHVtbnMoXG4gIGZpZWxkczogS2VwbGVyVGFibGVbJ2ZpZWxkcyddLFxuICBzYXZlZENvbHM6IHtcbiAgICBba2V5OiBzdHJpbmddOiBzdHJpbmc7XG4gIH0gPSB7fSxcbiAgZW1wdHlDb2xzOiBMYXllckNvbHVtbnMsXG4gIG9wdGlvbnM6IHt0aHJvd09uRXJyb3I/OiBib29sZWFufSA9IHt9XG4pIHtcbiAgLy8gUHJlcGFyZSBjb2x1bW5zIGZvciB0aGUgdmFsaWRhdG9yXG4gIGNvbnN0IGNvbHVtbnM6IHR5cGVvZiBlbXB0eUNvbHMgPSB7fTtcbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoZW1wdHlDb2xzKSkge1xuICAgIGNvbHVtbnNba2V5XSA9IHsuLi5lbXB0eUNvbHNba2V5XX07XG5cbiAgICBjb25zdCBzYXZlZCA9IHNhdmVkQ29sc1trZXldO1xuICAgIGlmIChzYXZlZCkge1xuICAgICAgY29uc3QgZmllbGRJZHggPSBmaWVsZHMuZmluZEluZGV4KCh7bmFtZX0pID0+IG5hbWUgPT09IHNhdmVkKTtcblxuICAgICAgaWYgKGZpZWxkSWR4ID4gLTEpIHtcbiAgICAgICAgLy8gdXBkYXRlIGZvdW5kIGNvbHVtbnNcbiAgICAgICAgY29sdW1uc1trZXldLmZpZWxkSWR4ID0gZmllbGRJZHg7XG4gICAgICAgIGNvbHVtbnNba2V5XS52YWx1ZSA9IHNhdmVkO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIGZpbmQgYWN0dWFsIGNvbHVtbiBmaWVsZElkeCwgaW4gY2FzZSBpdCBoYXMgY2hhbmdlZFxuICBjb25zdCBhbGxDb2xGb3VuZCA9IE9iamVjdC5rZXlzKGNvbHVtbnMpLmV2ZXJ5KGtleSA9PlxuICAgIHZhbGlkYXRlQ29sdW1uKGNvbHVtbnNba2V5XSwgY29sdW1ucywgZmllbGRzKVxuICApO1xuXG4gIGNvbnN0IHJ2ID0gYWxsQ29sRm91bmQgPyBjb2x1bW5zIDogbnVsbDtcbiAgaWYgKG9wdGlvbnMudGhyb3dPbkVycm9yKSB7XG4gICAgY29uc3QgcmVxdWlyZWRDb2x1bW5zID0gT2JqZWN0LmtleXMoZW1wdHlDb2xzKS5maWx0ZXIoayA9PiAhZW1wdHlDb2xzW2tdLm9wdGlvbmFsKTtcbiAgICBjb25zdCBtaXNzaW5nQ29sdW1ucyA9IHJlcXVpcmVkQ29sdW1ucy5maWx0ZXIoayA9PiAhY29sdW1ucz8uW2tdLnZhbHVlKTtcbiAgICBpZiAobWlzc2luZ0NvbHVtbnMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYExheWVyIGhhcyBtaXNzaW5nIG9yIGludmFsaWQgY29sdW1uczogJHttaXNzaW5nQ29sdW1ucy5qb2luKCcsICcpfWApO1xuICAgIH1cbiAgICBjb25zdCBjb25maWdDb2x1bW5zID0gT2JqZWN0LmtleXMoc2F2ZWRDb2xzKTtcbiAgICBjb25zdCBpbnZhbGlkQ29sdW1ucyA9IGNvbmZpZ0NvbHVtbnMuZmlsdGVyKGsgPT4gIWNvbHVtbnM/LltrXT8udmFsdWUpO1xuICAgIGlmIChpbnZhbGlkQ29sdW1ucy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTGF5ZXIgaGFzIGludmFsaWQgY29sdW1uczogJHtpbnZhbGlkQ29sdW1ucy5qb2luKCcsICcpfWApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBydjtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBsYXllciBjb2x1bW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQ29sdW1uKFxuICBjb2x1bW46IExheWVyQ29sdW1uICYge3ZhbGlkYXRvcj86IHR5cGVvZiB2YWxpZGF0ZUNvbHVtbn0sXG4gIGNvbHVtbnM6IExheWVyQ29sdW1ucyxcbiAgYWxsRmllbGRzOiBLZXBsZXJUYWJsZVsnZmllbGRzJ11cbik6IGJvb2xlYW4ge1xuICBpZiAoY29sdW1uLm9wdGlvbmFsIHx8IGNvbHVtbi52YWx1ZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChjb2x1bW4udmFsaWRhdG9yKSB7XG4gICAgcmV0dXJuIGNvbHVtbi52YWxpZGF0b3IoY29sdW1uLCBjb2x1bW5zLCBhbGxGaWVsZHMpO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBzYXZlZCB0ZXh0IGxhYmVsIGNvbmZpZyB3aXRoIG5ldyBkYXRhXG4gKiByZWZlciB0byB2aXMtc3RhdGUtc2NoZW1hLmpzIFRleHRMYWJlbFNjaGVtYVYxXG4gKlxuICogQHBhcmFtIHtBcnJheTxPYmplY3Q+fSBmaWVsZHNcbiAqIEBwYXJhbSB7T2JqZWN0fSBzYXZlZFRleHRMYWJlbFxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm4ge09iamVjdH0gLSB2YWxpZGF0ZWQgdGV4dGxhYmVsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVNhdmVkVGV4dExhYmVsKFxuICBmaWVsZHMsXG4gIFtsYXllclRleHRMYWJlbF0sXG4gIHNhdmVkVGV4dExhYmVsLFxuICBvcHRpb25zOiB7dGhyb3dPbkVycm9yPzogYm9vbGVhbn0gPSB7fVxuKSB7XG4gIGNvbnN0IHNhdmVkVGV4dExhYmVscyA9IEFycmF5LmlzQXJyYXkoc2F2ZWRUZXh0TGFiZWwpID8gc2F2ZWRUZXh0TGFiZWwgOiBbc2F2ZWRUZXh0TGFiZWxdO1xuXG4gIC8vIHZhbGlkYXRlIGZpZWxkXG4gIHJldHVybiBzYXZlZFRleHRMYWJlbHMubWFwKHRleHRMYWJlbCA9PiB7XG4gICAgY29uc3QgZmllbGQgPSB0ZXh0TGFiZWwuZmllbGRcbiAgICAgID8gZmllbGRzLmZpbmQoZmQgPT5cbiAgICAgICAgICBPYmplY3Qua2V5cyh0ZXh0TGFiZWwuZmllbGQpLmV2ZXJ5KGtleSA9PiB0ZXh0TGFiZWwuZmllbGRba2V5XSA9PT0gZmRba2V5XSlcbiAgICAgICAgKVxuICAgICAgOiBudWxsO1xuXG4gICAgaWYgKGZpZWxkID09PSB1bmRlZmluZWQgJiYgb3B0aW9ucy50aHJvd09uRXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTGF5ZXIgaGFzIGludmFsaWQgdGV4dCBsYWJlbCBmaWVsZDogJHtKU09OLnN0cmluZ2lmeSh0ZXh0TGFiZWwuZmllbGQpfWApO1xuICAgIH1cblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhsYXllclRleHRMYWJlbCkucmVkdWNlKFxuICAgICAgKGFjY3UsIGtleSkgPT4gKHtcbiAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgW2tleV06IGtleSA9PT0gJ2ZpZWxkJyA/IGZpZWxkIDogdGV4dExhYmVsW2tleV0gfHwgbGF5ZXJUZXh0TGFiZWxba2V5XVxuICAgICAgfSksXG4gICAgICB7fVxuICAgICk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFNhdmVkIHZpc3VhbCBjaGFubmVsIGZpZWxkL3NjYWxlIG1heSBsaXZlIGluIGFueSBvZjpcbiAqIC0gYGNvbmZpZ1trZXldYCBhZnRlciBzY2hlbWEgcGFyc2UgKFZpc3VhbENoYW5uZWxTY2hlbWFWMSBmb2xkcyBjaGFubmVscyBpbnRvIGNvbmZpZylcbiAqIC0gYHZpc3VhbENoYW5uZWxzW2tleV1gIGFzIGEgc2libGluZyBvZiBgY29uZmlnYCAodW5wYXJzZWQgYWRkRGF0YVRvTWFwIHBheWxvYWQpXG4gKiAtIGBjb25maWcudmlzdWFsQ2hhbm5lbHNba2V5XWAgKGNvbW1vbiBtaXN0YWtlIG9mIG5lc3RpbmcgdmlzdWFsQ2hhbm5lbHMgaW5zaWRlIGNvbmZpZylcbiAqXG4gKiBXaXRob3V0IHRoaXMgbG9va3VwLCBwcm9ncmFtbWF0aWMgR2VvSlNPTiBzdHJva2VDb2xvckZpZWxkIG5ldmVyIGJpbmRzIGFuZFxuICogc3Ryb2tlQ29sb3JEb21haW4gc3RheXMgYXQgdGhlIGRlZmF1bHQgYFswLCAxXWAgKGtlcGxlci5nbCAjMzA2MSkuXG4gKi9cbmZ1bmN0aW9uIGdldFNhdmVkVmlzdWFsQ2hhbm5lbFZhbHVlKHNhdmVkTGF5ZXI6IFBhcnNlZExheWVyLCBrZXk6IHN0cmluZyk6IGFueSB7XG4gIGNvbnN0IGNvbmZpZyA9IHNhdmVkTGF5ZXIuY29uZmlnIGFzIFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQ7XG4gIGlmIChjb25maWcgJiYgY29uZmlnW2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBjb25maWdba2V5XTtcbiAgfVxuICBjb25zdCBjaGFubmVscyA9XG4gICAgKHNhdmVkTGF5ZXIgYXMge3Zpc3VhbENoYW5uZWxzPzogUmVjb3JkPHN0cmluZywgYW55Pn0pLnZpc3VhbENoYW5uZWxzIHx8XG4gICAgKGNvbmZpZyAmJiBjb25maWcudmlzdWFsQ2hhbm5lbHMpO1xuICBpZiAoY2hhbm5lbHMgJiYgdHlwZW9mIGNoYW5uZWxzID09PSAnb2JqZWN0JyAmJiBjaGFubmVsc1trZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gY2hhbm5lbHNba2V5XTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHNhdmVkIHZpc3VhbCBjaGFubmVscyBjb25maWcgd2l0aCBuZXcgZGF0YSxcbiAqIHJlZmVyIHRvIHZpcy1zdGF0ZS1zY2hlbWEuanMgVmlzdWFsQ2hhbm5lbFNjaGVtYVYxXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVNhdmVkVmlzdWFsQ2hhbm5lbHMoXG4gIGZpZWxkczogS2VwbGVyVGFibGVbJ2ZpZWxkcyddLFxuICBuZXdMYXllcjogTGF5ZXIsXG4gIHNhdmVkTGF5ZXI6IFBhcnNlZExheWVyLFxuICBvcHRpb25zOiB7dGhyb3dPbkVycm9yPzogYm9vbGVhbn0gPSB7fVxuKTogbnVsbCB8IExheWVyIHtcbiAgT2JqZWN0LnZhbHVlcyhuZXdMYXllci52aXN1YWxDaGFubmVscykuZm9yRWFjaCgoe2ZpZWxkLCBzY2FsZSwga2V5fSkgPT4ge1xuICAgIGNvbnN0IHNhdmVkRmllbGQgPSBnZXRTYXZlZFZpc3VhbENoYW5uZWxWYWx1ZShzYXZlZExheWVyLCBmaWVsZCk7XG4gICAgY29uc3Qgc2F2ZWRTY2FsZSA9IGdldFNhdmVkVmlzdWFsQ2hhbm5lbFZhbHVlKHNhdmVkTGF5ZXIsIHNjYWxlKTtcbiAgICBsZXQgZm91bmRGaWVsZDtcbiAgICBpZiAoc2F2ZWRGaWVsZD8ubmFtZSkge1xuICAgICAgZm91bmRGaWVsZCA9IGZpZWxkcy5maW5kKGZkID0+IGZkLm5hbWUgPT09IHNhdmVkRmllbGQubmFtZSk7XG4gICAgfVxuXG4gICAgY29uc3QgZm91bmRDaGFubmVsID0ge1xuICAgICAgLi4uKGZvdW5kRmllbGQgPyB7W2ZpZWxkXTogZm91bmRGaWVsZH0gOiB7fSksXG4gICAgICAuLi4oc2F2ZWRTY2FsZSA/IHtbc2NhbGVdOiBzYXZlZFNjYWxlfSA6IHt9KVxuICAgIH07XG4gICAgaWYgKE9iamVjdC5rZXlzKGZvdW5kQ2hhbm5lbCkubGVuZ3RoKSB7XG4gICAgICBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyhmb3VuZENoYW5uZWwpO1xuICAgIH1cblxuICAgIG5ld0xheWVyLnZhbGlkYXRlVmlzdWFsQ2hhbm5lbChrZXkpO1xuICAgIGlmIChvcHRpb25zLnRocm93T25FcnJvcikge1xuICAgICAgY29uc3QgZmllbGROYW1lID0gc2F2ZWRGaWVsZD8ubmFtZTtcbiAgICAgIGlmIChmaWVsZE5hbWUgJiYgZmllbGROYW1lICE9PSBuZXdMYXllci5jb25maWdbZmllbGRdPy5uYW1lKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTGF5ZXIgaGFzIGludmFsaWQgdmlzdWFsIGNoYW5uZWwgZmllbGQ6ICR7ZmllbGR9YCk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG5ld0xheWVyO1xufVxuXG50eXBlIFZhbGlkYXRlTGF5ZXJPcHRpb24gPSB7XG4gIGFsbG93RW1wdHlDb2x1bW4/OiBib29sZWFuO1xuICB0aHJvd09uRXJyb3I/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlTGF5ZXJzQnlEYXRhc2V0cyhcbiAgZGF0YXNldHM6IERhdGFzZXRzLFxuICBsYXllckNsYXNzZXM6IFZpc1N0YXRlWydsYXllckNsYXNzZXMnXSxcbiAgbGF5ZXJzOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydsYXllcnMnXSA9IFtdLFxuICBvcHRpb25zPzogVmFsaWRhdGVMYXllck9wdGlvblxuKSB7XG4gIGNvbnN0IHZhbGlkYXRlZDogTGF5ZXJbXSA9IFtdO1xuICBjb25zdCBmYWlsZWQ6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2xheWVycyddID0gW107XG5cbiAgbGF5ZXJzLmZvckVhY2gobGF5ZXIgPT4ge1xuICAgIGxldCB2YWxpZGF0ZUxheWVyOiBMYXllciB8IG51bGwgPSBudWxsO1xuXG4gICAgaWYgKGxheWVyPy5jb25maWc/LmRhdGFJZCkge1xuICAgICAgaWYgKGRhdGFzZXRzW2xheWVyLmNvbmZpZy5kYXRhSWRdKSB7XG4gICAgICAgIC8vIGRhdGFzZXRzIGFyZSBhbHJlYWR5IGxvYWRlZFxuICAgICAgICB2YWxpZGF0ZUxheWVyID0gdmFsaWRhdGVMYXllcldpdGhEYXRhKFxuICAgICAgICAgIGRhdGFzZXRzW2xheWVyLmNvbmZpZy5kYXRhSWRdLFxuICAgICAgICAgIGxheWVyLFxuICAgICAgICAgIGxheWVyQ2xhc3NlcyxcbiAgICAgICAgICBvcHRpb25zXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlTGF5ZXIpIHtcbiAgICAgIHZhbGlkYXRlZC5wdXNoKHZhbGlkYXRlTGF5ZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBkYXRhc2V0cyBub3QgeWV0IGxvYWRlZFxuICAgICAgZmFpbGVkLnB1c2gobGF5ZXIpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHt2YWxpZGF0ZWQsIGZhaWxlZH07XG59XG5cbi8qKlxuICogR2V0IHJlcXVpcmVkIGNvbHVtbnMgZm9yIHZhbGlkYXRpb24gYmFzZWQgb24gY29sdW1uIG1vZGVcbiAqL1xuZnVuY3Rpb24gX2dldENvbHVtbkNvbmZpZ0ZvclZhbGlkYXRpb24obmV3TGF5ZXIpIHtcbiAgLy8gZmluZCBjb2x1bW4gZmllbGRJZHhcbiAgbGV0IGNvbHVtbkNvbmZpZyA9IG5ld0xheWVyLmdldExheWVyQ29sdW1ucygpO1xuICAvLyBpZiBjb2x1bW5Nb2RlIGlzIGRlZmluZWQsIGZpbmQgY29sdW1uIG1vZGUgY29uZmlnXG4gIGNvbnN0IGNvbE1vZGVDb25maWcgPSBuZXdMYXllci5jb25maWcuY29sdW1uTW9kZVxuICAgID8gKG5ld0xheWVyLnN1cHBvcnRlZENvbHVtbk1vZGVzIHx8IFtdKS5maW5kKFxuICAgICAgICBjb2xNb2RlID0+IGNvbE1vZGUua2V5ID09PSBuZXdMYXllci5jb25maWcuY29sdW1uTW9kZVxuICAgICAgKVxuICAgIDogbnVsbDtcblxuICBpZiAoY29sTW9kZUNvbmZpZykge1xuICAgIC8vIG9ubHkgdmFsaWRhdGUgY29sdW1ucyBpbiBjb2x1bW4gbW9kZSAoaW5jbHVkaW5nIHRhYmJlZCBjb2x1bW5Hcm91cHMpXG4gICAgY29uc3QgZ3JvdXBDb2x1bW5zID0gKGNvbE1vZGVDb25maWcuY29sdW1uR3JvdXBzIHx8IFtdKS5mbGF0TWFwKGdyb3VwID0+IGdyb3VwLmNvbHVtbnMgfHwgW10pO1xuICAgIGNvbnN0IHJlcXVpcmVkS2V5cyA9IG5ldyBTZXQoY29sTW9kZUNvbmZpZy5yZXF1aXJlZENvbHVtbnMgfHwgW10pO1xuICAgIGNvbHVtbkNvbmZpZyA9IFtcbiAgICAgIC4uLihjb2xNb2RlQ29uZmlnLnJlcXVpcmVkQ29sdW1ucyB8fCBbXSksXG4gICAgICAuLi4oY29sTW9kZUNvbmZpZy5vcHRpb25hbENvbHVtbnMgfHwgW10pLFxuICAgICAgLi4uZ3JvdXBDb2x1bW5zXG4gICAgXS5yZWR1Y2UoKGFjY3UsIGtleSkgPT4ge1xuICAgICAgY29uc3QgY29sID0gY29sdW1uQ29uZmlnW2tleV07XG4gICAgICBpZiAoIWNvbCkge1xuICAgICAgICByZXR1cm4gYWNjdTtcbiAgICAgIH1cbiAgICAgIC8vIE9wdGlvbmFsaXR5IG11c3QgZm9sbG93IHRoZSBhY3RpdmUgbW9kZTogYSBmaWVsZCBvcHRpb25hbCBpbiBhbm90aGVyIG1vZGVcbiAgICAgIC8vIChlLmcuIGFsdGl0dWRlIGluIFVWKSBpcyBzdGlsbCByZXF1aXJlZCB3aGVuIHRoaXMgbW9kZSBsaXN0cyBpdCBpbiByZXF1aXJlZENvbHVtbnMuXG4gICAgICBpZiAocmVxdWlyZWRLZXlzLmhhcyhrZXkpKSB7XG4gICAgICAgIGNvbnN0IHtvcHRpb25hbDogX29wdGlvbmFsLCAuLi5yZXF1aXJlZENvbH0gPSBjb2w7XG4gICAgICAgIHJldHVybiB7Li4uYWNjdSwgW2tleV06IHJlcXVpcmVkQ29sfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7Li4uYWNjdSwgW2tleV06IHsuLi5jb2wsIG9wdGlvbmFsOiB0cnVlfX07XG4gICAgfSwge30pO1xuICB9XG5cbiAgcmV0dXJuIGNvbHVtbkNvbmZpZztcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBzYXZlZCBsYXllciBjb25maWcgd2l0aCBuZXcgZGF0YSxcbiAqIHVwZGF0ZSBmaWVsZElkeCBiYXNlZCBvbiBuZXcgZmllbGRzXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVMYXllcldpdGhEYXRhKFxuICBkYXRhc2V0OiBLZXBsZXJUYWJsZSxcbiAgc2F2ZWRMYXllcjogUGFyc2VkTGF5ZXIsXG4gIGxheWVyQ2xhc3NlczogVmlzU3RhdGVbJ2xheWVyQ2xhc3NlcyddLFxuICBvcHRpb25zOiBWYWxpZGF0ZUxheWVyT3B0aW9uID0ge31cbik6IExheWVyIHwgbnVsbCB7XG4gIGNvbnN0IHtmaWVsZHMsIGlkOiBkYXRhSWR9ID0gZGF0YXNldDtcbiAgY29uc3Qge3R5cGV9ID0gc2F2ZWRMYXllcjtcbiAgY29uc3Qge3Rocm93T25FcnJvcn0gPSBvcHRpb25zO1xuICAvLyBsYXllciBkb2VzbnQgaGF2ZSBhIHZhbGlkIHR5cGVcbiAgaWYgKCF0eXBlIHx8ICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobGF5ZXJDbGFzc2VzLCB0eXBlKSB8fCAhc2F2ZWRMYXllci5jb25maWcpIHtcbiAgICBpZiAodGhyb3dPbkVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYExheWVyIGhhcyBpbnZhbGlkIHR5cGUgXCIke3R5cGV9XCIgb3IgY29uZmlnIGlzIG1pc3NpbmdgKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBsZXQgbmV3TGF5ZXIgPSBuZXcgbGF5ZXJDbGFzc2VzW3R5cGVdKHtcbiAgICBpZDogc2F2ZWRMYXllci5pZCxcbiAgICBkYXRhSWQsXG4gICAgbGFiZWw6IHNhdmVkTGF5ZXIuY29uZmlnLmxhYmVsLFxuICAgIGNvbG9yOiBzYXZlZExheWVyLmNvbmZpZy5jb2xvcixcbiAgICBpc1Zpc2libGU6IHNhdmVkTGF5ZXIuY29uZmlnLmlzVmlzaWJsZSxcbiAgICBoaWRkZW46IHNhdmVkTGF5ZXIuY29uZmlnLmhpZGRlbixcbiAgICBjb2x1bW5Nb2RlOiBzYXZlZExheWVyLmNvbmZpZy5jb2x1bW5Nb2RlLFxuICAgIGhpZ2hsaWdodENvbG9yOiBzYXZlZExheWVyLmNvbmZpZy5oaWdobGlnaHRDb2xvclxuICB9KTtcblxuICBjb25zdCBjb2x1bW5Db25maWcgPSBfZ2V0Q29sdW1uQ29uZmlnRm9yVmFsaWRhdGlvbihuZXdMYXllcik7XG5cbiAgaWYgKE9iamVjdC5rZXlzKGNvbHVtbkNvbmZpZykpIHtcbiAgICBjb25zdCBjb2x1bW5zID0gdmFsaWRhdGVTYXZlZExheWVyQ29sdW1ucyhcbiAgICAgIGZpZWxkcyxcbiAgICAgIHNhdmVkTGF5ZXIuY29uZmlnLmNvbHVtbnMsXG4gICAgICBjb2x1bW5Db25maWcsXG4gICAgICBvcHRpb25zXG4gICAgKTtcbiAgICBpZiAoY29sdW1ucykge1xuICAgICAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICBjb2x1bW5zOiB7XG4gICAgICAgICAgLi4ubmV3TGF5ZXIuY29uZmlnLmNvbHVtbnMsXG4gICAgICAgICAgLi4uY29sdW1uc1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKCFvcHRpb25zLmFsbG93RW1wdHlDb2x1bW4pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHRleHRMYWJlbCA9XG4gICAgc2F2ZWRMYXllci5jb25maWcudGV4dExhYmVsICYmIG5ld0xheWVyLmNvbmZpZy50ZXh0TGFiZWxcbiAgICAgID8gdmFsaWRhdGVTYXZlZFRleHRMYWJlbChcbiAgICAgICAgICBmaWVsZHMsXG4gICAgICAgICAgbmV3TGF5ZXIuY29uZmlnLnRleHRMYWJlbCxcbiAgICAgICAgICBzYXZlZExheWVyLmNvbmZpZy50ZXh0TGFiZWwsXG4gICAgICAgICAgb3B0aW9uc1xuICAgICAgICApXG4gICAgICA6IG5ld0xheWVyLmNvbmZpZy50ZXh0TGFiZWw7XG5cbiAgLy8gY29weSB2aXNDb25maWcgb3ZlciB0byBlbXB0eUxheWVyIHRvIG1ha2Ugc3VyZSBpdCBoYXMgYWxsIHRoZSBwcm9wc1xuICBjb25zdCBjb3BpZWRWaXNDb25maWcgPSBuZXdMYXllci5jb3B5TGF5ZXJDb25maWcoXG4gICAgbmV3TGF5ZXIuY29uZmlnLnZpc0NvbmZpZyxcbiAgICBzYXZlZExheWVyLmNvbmZpZy52aXNDb25maWcgfHwge30sXG4gICAge1xuICAgICAgc2hhbGxvd0NvcHk6IFsnY29sb3JSYW5nZScsICdzdHJva2VDb2xvclJhbmdlJ11cbiAgICB9XG4gICk7XG5cbiAgLy8gY2FsbCBsYXllciBtZXRob2RzIHRvIHZhbGlkYXRlIHZpc0NvbmZpZyB3aGVuIHN3aXRjaGluZyBkYXRhc2V0XG4gIGNvbnN0IHZpc0NvbmZpZyA9IG5ld0xheWVyLnZhbGlkYXRlVmlzQ29uZmlnXG4gICAgPyBuZXdMYXllci52YWxpZGF0ZVZpc0NvbmZpZyhkYXRhc2V0LCBjb3BpZWRWaXNDb25maWcpXG4gICAgOiBjb3BpZWRWaXNDb25maWc7XG5cbiAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgIHZpc0NvbmZpZyxcbiAgICB0ZXh0TGFiZWxcbiAgfSk7XG5cbiAgLy8gdmlzdWFsIGNoYW5uZWwgZmllbGQgaXMgc2F2ZWQgdG8gYmUge25hbWUsIHR5cGV9XG4gIC8vIGZpbmQgdmlzdWFsIGNoYW5uZWwgZmllbGQgYnkgbWF0Y2hpbmcgYm90aCBuYW1lIGFuZCB0eXBlXG4gIC8vIHJlZmVyIHRvIHZpcy1zdGF0ZS1zY2hlbWEuanMgVmlzdWFsQ2hhbm5lbFNjaGVtYVYxXG4gIG5ld0xheWVyID0gdmFsaWRhdGVTYXZlZFZpc3VhbENoYW5uZWxzKGZpZWxkcywgbmV3TGF5ZXIsIHNhdmVkTGF5ZXIsIG9wdGlvbnMpO1xuXG4gIGlmICh0aHJvd09uRXJyb3IpIHtcbiAgICBpZiAoIW5ld0xheWVyLmlzVmFsaWRUb1NhdmUoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBMYXllciBpcyBub3QgdmFsaWQgdG8gc2F2ZTogJHtuZXdMYXllci5pZH1gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3TGF5ZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUVkaXRvcjxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTLCBzYXZlZEVkaXRvcjogU2F2ZWRFZGl0b3IpIHtcbiAgaWYgKCFzYXZlZEVkaXRvcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgZmVhdHVyZXM6IFsuLi5zdGF0ZS5lZGl0b3IuZmVhdHVyZXMsIC4uLihzYXZlZEVkaXRvci5mZWF0dXJlcyB8fCBbXSldLFxuICAgICAgLy8gaWYgc2F2ZWRFZGl0b3IudmlzaWJsZSBpcyB1bmRlZmluZWQga2VlcCBzdGF0ZS5lZGl0b3IudmlzaWJsZVxuICAgICAgdmlzaWJsZTogc2F2ZWRFZGl0b3IudmlzaWJsZSA/PyBzdGF0ZS5lZGl0b3IudmlzaWJsZVxuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gY29tYmluZUVkaXRvckNvbmZpZ3MoY29uZmlnczogU2F2ZWRFZGl0b3JbXSk6IFNhdmVkRWRpdG9yIHtcbiAgcmV0dXJuIGNvbmZpZ3MucmVkdWNlKFxuICAgIChhY2MsIG5leHRDb25maWcpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmFjYyxcbiAgICAgICAgZmVhdHVyZXM6IFsuLi5hY2MuZmVhdHVyZXMsIC4uLihuZXh0Q29uZmlnLmZlYXR1cmVzIHx8IFtdKV1cbiAgICAgIH07XG4gICAgfSxcbiAgICB7XG4gICAgICAvLyBzdGFydCB3aXRoOlxuICAgICAgLy8gLSBlbXB0eSBhcnJheSBmb3IgZmVhdHVyZXMgYWNjdW11bGF0aW9uXG4gICAgICAvLyAtIGFuZCBhcmUgYW55IG9mIHRoZSBjb25maWdzJyB2aXNpYmxlIHZhbHVlcyB0cnVlP1xuICAgICAgZmVhdHVyZXM6IFtdLFxuICAgICAgdmlzaWJsZTogY29uZmlncy5zb21lKGMgPT4gYz8udmlzaWJsZSlcbiAgICB9XG4gICk7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgc2F2ZWQgbGF5ZXIgY29uZmlnIHdpdGggbmV3IGRhdGEsXG4gKiB1cGRhdGUgZmllbGRJZHggYmFzZWQgb24gbmV3IGZpZWxkc1xuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VEYXRhc2V0c0J5T3JkZXIoc3RhdGU6IFZpc1N0YXRlLCBuZXdEYXRhRW50cmllczogRGF0YXNldHMpOiBEYXRhc2V0cyB7XG4gIGNvbnN0IG1lcmdlZCA9IHtcbiAgICAuLi5zdGF0ZS5kYXRhc2V0cyxcbiAgICAuLi5uZXdEYXRhRW50cmllc1xuICB9O1xuXG4gIGlmIChBcnJheS5pc0FycmF5KHN0YXRlLnByZXNlcnZlRGF0YXNldE9yZGVyKSkge1xuICAgIC8vIHByZXNlcnZlRGF0YXNldE9yZGVyICBtaWdodCBub3QgaW5jbHVkZSB0aGUgIG5ldyBkYXRhc2V0c1xuICAgIGNvbnN0IG5ld0RhdGFzZXRJZHMgPSBPYmplY3Qua2V5cyhtZXJnZWQpLmZpbHRlcihcbiAgICAgIGlkID0+ICFzdGF0ZS5wcmVzZXJ2ZURhdGFzZXRPcmRlcj8uaW5jbHVkZXMoaWQpXG4gICAgKTtcbiAgICByZXR1cm4gWy4uLnN0YXRlLnByZXNlcnZlRGF0YXNldE9yZGVyLCAuLi5uZXdEYXRhc2V0SWRzXS5yZWR1Y2UoXG4gICAgICAoYWNjdSwgZGF0YUlkKSA9PiAoe1xuICAgICAgICAuLi5hY2N1LFxuICAgICAgICAuLi4obWVyZ2VkW2RhdGFJZF0gPyB7W2RhdGFJZF06IG1lcmdlZFtkYXRhSWRdfSA6IHt9KVxuICAgICAgfSksXG4gICAgICB7fVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gbWVyZ2VkO1xufVxuXG4vKipcbiAqIFNpbWxpYXIgcHVycG9zZSB0byBhZ2dyZWdhdGlvbiB1dGlscyBgZ2V0TW9kZWAgZnVuY3Rpb24sXG4gKiBidXQgcmV0dXJucyB0aGUgbW9kZSBpbiB0aGUgc2FtZSB2YWx1ZSB0eXBlIHdpdGhvdXQgY29lcmNpbmcgdG8gYSBzdHJpbmcuXG4gKiBJdCBpZ25vcmVzIGB1bmRlZmluZWRgIG9yIGBudWxsYCB2YWx1ZXMsIGJ1dCByZXR1cm5zIGBudWxsYCBpZiBubyBtb2RlIGNvdWxkIGJlIGNhbGN1bGF0ZWQuXG4gKi9cbmZ1bmN0aW9uIGdldFZhbHVlV2l0aEhpZ2hlc3RPY2N1cnJlbmNlPFQ+KGFycjogVFtdKTogVCB8IG51bGwge1xuICBjb25zdCB0YWxseXMgPSBuZXcgTWFwKCk7XG4gIGFyci5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICBpZiAobm90TnVsbG9yVW5kZWZpbmVkKHZhbHVlKSkge1xuICAgICAgaWYgKCF0YWxseXMuaGFzKHZhbHVlKSkge1xuICAgICAgICB0YWxseXMuc2V0KHZhbHVlLCAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRhbGx5cy5zZXQodmFsdWUsIHRhbGx5cy5nZXQodmFsdWUpICsgMSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgLy8gcmV0dXJuIHRoZSB2YWx1ZSB3aXRoIHRoZSBoaWdoZXN0IHRvdGFsIG9jY3VycmVuY2UgY291bnRcbiAgaWYgKHRhbGx5cy5zaXplID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIFsuLi50YWxseXMuZW50cmllcygpXT8ucmVkdWNlKChhY2MsIG5leHQpID0+IChuZXh0WzFdID4gYWNjWzFdID8gbmV4dCA6IGFjYykpWzBdO1xufVxuXG5leHBvcnQgY29uc3QgVklTX1NUQVRFX01FUkdFUlM6IFZpc1N0YXRlTWVyZ2Vyczxhbnk+ID0gW1xuICB7XG4gICAgbWVyZ2U6IG1lcmdlTGF5ZXJzLFxuICAgIHByb3A6ICdsYXllcnMnLFxuICAgIHRvTWVyZ2VQcm9wOiAnbGF5ZXJUb0JlTWVyZ2VkJyxcbiAgICBwcmVzZXJ2ZU9yZGVyOiAncHJlc2VydmVMYXllck9yZGVyJ1xuICB9LFxuICB7XG4gICAgbWVyZ2U6IG1lcmdlTGF5ZXJPcmRlcixcbiAgICBwcm9wOiAnbGF5ZXJPcmRlcidcbiAgfSxcbiAge1xuICAgIG1lcmdlOiBtZXJnZUZpbHRlcnMsXG4gICAgcHJvcDogJ2ZpbHRlcnMnLFxuICAgIHRvTWVyZ2VQcm9wOiAnZmlsdGVyVG9CZU1lcmdlZCcsXG4gICAgcHJlc2VydmVPcmRlcjogJ3ByZXNlcnZlRmlsdGVyT3JkZXInLFxuICAgIHJlcGxhY2VQYXJlbnREYXRhc2V0SWRzOiByZXBsYWNlRmlsdGVyRGF0YXNldElkc1xuICB9LFxuICB7XG4gICAgbWVyZ2U6IG1lcmdlRWZmZWN0cyxcbiAgICBwcm9wOiAnZWZmZWN0cydcbiAgfSxcbiAge1xuICAgIG1lcmdlOiBtZXJnZUNoYXJ0cyxcbiAgICBwcm9wOiAnY2hhcnRzJyxcbiAgICB0b01lcmdlUHJvcDogJ2NoYXJ0c1RvQmVNZXJnZWQnLFxuICAgIHJlcGxhY2VQYXJlbnREYXRhc2V0SWRzOiByZXBsYWNlQ2hhcnREYXRhc2V0SWRzXG4gIH0sXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VBbm5vdGF0aW9ucyxcbiAgICBwcm9wOiAnYW5ub3RhdGlvbnMnLFxuICAgIHRvTWVyZ2VQcm9wOiAnYW5ub3RhdGlvbnNUb0JlTWVyZ2VkJ1xuICB9LFxuICB7XG4gICAgbWVyZ2U6IG1lcmdlSW50ZXJhY3Rpb25zLFxuICAgIHByb3A6ICdpbnRlcmFjdGlvbkNvbmZpZycsXG4gICAgdG9NZXJnZVByb3A6ICdpbnRlcmFjdGlvblRvQmVNZXJnZWQnLFxuICAgIHJlcGxhY2VQYXJlbnREYXRhc2V0SWRzOiByZXBsYWNlSW50ZXJhY3Rpb25EYXRhc2V0SWRzLFxuICAgIHNhdmVVbm1lcmdlZDogc2F2ZWRVbm1lcmdlZEludGVyYWN0aW9uLFxuICAgIGNvbWJpbmVDb25maWdzOiBjb21iaW5lSW50ZXJhY3Rpb25Db25maWdzXG4gIH0sXG4gIHttZXJnZTogbWVyZ2VMYXllckJsZW5kaW5nLCBwcm9wOiAnbGF5ZXJCbGVuZGluZycsIGNvbWJpbmVDb25maWdzOiBjb21iaW5lTGF5ZXJCbGVuZGluZ0NvbmZpZ3N9LFxuICB7XG4gICAgbWVyZ2U6IG1lcmdlT3ZlcmxheUJsZW5kaW5nLFxuICAgIHByb3A6ICdvdmVybGF5QmxlbmRpbmcnLFxuICAgIGNvbWJpbmVDb25maWdzOiBjb21iaW5lT3ZlcmxheUJsZW5kaW5nQ29uZmlnc1xuICB9LFxuICB7bWVyZ2U6IG1lcmdlU3BsaXRNYXBzLCBwcm9wOiAnc3BsaXRNYXBzJywgdG9NZXJnZVByb3A6ICdzcGxpdE1hcHNUb0JlTWVyZ2VkJ30sXG4gIHttZXJnZTogbWVyZ2VBbmltYXRpb25Db25maWcsIHByb3A6ICdhbmltYXRpb25Db25maWcnLCBjb21iaW5lQ29uZmlnczogY29tYmluZUFuaW1hdGlvbkNvbmZpZ3N9LFxuICB7bWVyZ2U6IG1lcmdlRWRpdG9yLCBwcm9wOiAnZWRpdG9yJywgY29tYmluZUNvbmZpZ3M6IGNvbWJpbmVFZGl0b3JDb25maWdzfVxuXTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLElB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
1402
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdW5pcSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX3BpY2siLCJfZmxhdHRlbkRlZXAiLCJfZGVlcG1lcmdlIiwiX3V0aWxzIiwiX2xheWVycyIsIl9lZmZlY3RzIiwiX2NvbW1vblV0aWxzIiwiX2NvbnN0YW50cyIsIl9zY2hlbWFzIiwiX3RhYmxlIiwiX2xheWVyVXRpbHMiLCJfaW50ZXJhY3Rpb25VdGlscyIsIl9leGNsdWRlZCIsIl9leGNsdWRlZDIiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsInIiLCJlIiwidCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiQXJyYXkiLCJpc0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwibGVuZ3RoIiwiX24iLCJGIiwicyIsIm4iLCJkb25lIiwidmFsdWUiLCJmIiwiVHlwZUVycm9yIiwibyIsImEiLCJ1IiwiY2FsbCIsIm5leHQiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIl90b1Byb3BlcnR5S2V5IiwiaSIsIl90b1ByaW1pdGl2ZSIsIl90eXBlb2YzIiwidG9QcmltaXRpdmUiLCJTdHJpbmciLCJOdW1iZXIiLCJvd25LZXlzIiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwibWVyZ2VGaWx0ZXJzIiwic3RhdGUiLCJmaWx0ZXJzVG9NZXJnZSIsImZyb21Db25maWciLCJwcmVzZXJ2ZUZpbHRlck9yZGVyIiwibWFwIiwibCIsImlkIiwiX3ZhbGlkYXRlRmlsdGVyc1VwZGF0IiwidmFsaWRhdGVGaWx0ZXJzVXBkYXRlRGF0YXNldHMiLCJ2YWxpZGF0ZWQiLCJmYWlsZWQiLCJ1cGRhdGVkRGF0YXNldHMiLCJ1cGRhdGVkRmlsdGVycyIsImluc2VydEl0ZW1CYXNlZE9uUHJlc2VydmVkT3JkZXIiLCJmaWx0ZXJzIiwicmVzZXRGaWx0ZXJHcHVNb2RlIiwiYXNzaWduR3B1Q2hhbm5lbHMiLCJkYXRhc2V0c1RvRmlsdGVyIiwidW5pcSIsImZsYXR0ZW5EZWVwIiwiZGF0YUlkIiwiZmlsdGVyZWQiLCJhcHBseUZpbHRlcnNUb0RhdGFzZXRzIiwibGF5ZXJzIiwiZGF0YXNldHMiLCJmaWx0ZXJUb0JlTWVyZ2VkIiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsInJlcGxhY2VGaWx0ZXJEYXRhc2V0SWRzIiwic2F2ZWRGaWx0ZXIiLCJkYXRhSWRUb1VzZSIsInJlcGxhY2VkIiwiaW5jbHVkZXMiLCJfZmlsdGVyJHBsb3RUeXBlIiwibmV3RGF0YUlkIiwiZCIsInBsb3RUeXBlIiwiY29sb3JzQnlEYXRhSWQiLCJfZmlsdGVyJHBsb3RUeXBlMiIsIl9yZWYiLCJjb2xvciIsInJlc3QiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMyIiwiaXNTYXZlZExheWVyQ29uZmlnVjEiLCJsYXllckNvbmZpZyIsInZpc3VhbENoYW5uZWxzIiwicGFyc2VMYXllckNvbmZpZyIsInNjaGVtYSIsIl9zY2hlbWEkcGFyc2VTYXZlZENvbiIsInNhdmVkQ29uZmlnIiwidmVyc2lvbiIsIkNVUlJFTlRfVkVSU0lPTiIsImNvbmZpZyIsInZpc1N0YXRlIiwibGF5ZXJPcmRlciIsInBhcnNlU2F2ZWRDb25maWciLCJjdXJyZW50SXRlbXMiLCJpdGVtcyIsInByZXNlcnZlZE9yZGVyIiwidW5kZWZpbmVkIiwiZGVmYXVsdFN0YXJ0IiwibmV3SXRlbXMiLCJfaXRlcmF0b3IiLCJfc3RlcCIsIml0ZW0iLCJleHBlY3RlZElkeCIsImluZGV4T2YiLCJpbnNlcnRBdCIsInByZWNlZWRJZHgiLCJfbG9vcCIsInByZWNlZWRJdGVtSWQiLCJmaW5kSW5kZXgiLCJhcnJheUluc2VydCIsImVyciIsImNyZWF0ZUxheWVyRnJvbUNvbmZpZyIsInNhdmVkTGF5ZXJDb25maWciLCJwYXJzZWRMYXllckNvbmZpZyIsIl92YWxpZGF0ZUxheWVyc0J5RGF0YSIsInZhbGlkYXRlTGF5ZXJzQnlEYXRhc2V0cyIsImxheWVyQ2xhc3NlcyIsImFsbG93RW1wdHlDb2x1bW4iLCJrZWVwVW5sYWJlbGVkQWdncmVnYXRpb25UZXh0TGFiZWwiLCJuZXdMYXllciIsInVwZGF0ZUxheWVyRG9tYWluIiwic2VyaWFsaXplRmlsdGVyIiwibmV3RmlsdGVyIiwiX3NlcmlhbGl6ZWRWaXNTdGF0ZSRmIiwic2VyaWFsaXplZFZpc1N0YXRlIiwic2VyaWFsaXplVmlzU3RhdGUiLCJzZXJpYWxpemVMYXllciIsIl9zZXJpYWxpemVkVmlzU3RhdGUkbCIsInNlcmlhbGl6ZUVmZmVjdCIsIm5ld0VmZmVjdCIsIl9zZXJpYWxpemVkVmlzU3RhdGUkZSIsImVmZmVjdHMiLCJlZmZlY3RPcmRlciIsIl9zY2hlbWEkcGFyc2VTYXZlZENvbjIiLCJzYXZlZFN0YXRlIiwiZ2V0Q29uZmlnVG9TYXZlIiwibWVyZ2VMYXllcnMiLCJsYXllcnNUb01lcmdlIiwicHJlc2VydmVMYXllck9yZGVyIiwiZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMiLCJ1bm1lcmdlZCIsInRvTWVyZ2UiLCJfbCRjb25maWciLCJpc01lcmdpbmdEYXRhc2V0cyIsIl92YWxpZGF0ZUxheWVyc0J5RGF0YTIiLCJtZXJnZWRMYXllciIsIl9pbnNlcnRMYXllckF0UmlnaHRPciIsImluc2VydExheWVyQXRSaWdodE9yZGVyIiwibmV3TGF5ZXJPcmRlciIsIm5ld0xheWVycyIsIm1lcmdlZFN0YXRlIiwibGF5ZXJUb0JlTWVyZ2VkIiwibGF5ZXJPcmRlclRvQmVNZXJnZWQiLCJzYXZlZE9yZGVyIiwibWVyZ2VMYXllck9yZGVyIiwiY3VycmVudExheWVycyIsImxheWVyc1RvSW5zZXJ0IiwiY3VycmVudE9yZGVyIiwiY3VycmVudExheWVyUXVldWUiLCJlbnRyeSIsImZpbmRCeUlkIiwibGF5ZXIiLCJCb29sZWFuIiwibmV3TGF5ZXJPcmRlclF1ZXVlIiwibmV3RmxhdExheWVyT3JkZXIiLCJoYXNHcm91cHMiLCJzb21lIiwiaXNQbGFpbk9iamVjdCIsImV4aXN0aW5nRmxhdElkcyIsIlNldCIsIm5ld0luc2VydGVkSWRzIiwiaGFzIiwicmVzdWx0IiwiZmxhdFF1ZXVlIiwiZmxhdElkeCIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJzYXZlZExheWVyT3JkZXIiLCJ2YWxpZExheWVySWRzIiwiZmlsdGVyTGF5ZXJPcmRlciIsIm9yZGVyIiwiX2l0ZXJhdG9yMyIsIl9zdGVwMyIsImdyb3VwIiwiZmlsdGVyZWRHcm91cE9yZGVyIiwicmVzdG9yZWRMYXllck9yZGVyIiwibGF5ZXJJZHNJblJlc3RvcmVkIiwiY29sbGVjdElkcyIsIl9pdGVyYXRvcjQiLCJfc3RlcDQiLCJhZGQiLCJtaXNzaW5nTGF5ZXJzIiwibWVyZ2VJbnRlcmFjdGlvbnMiLCJpbnRlcmFjdGlvblRvQmVNZXJnZWQiLCJtZXJnZWQiLCJrZXkiLCJpbnRlcmFjdGlvbkNvbmZpZyIsImN1cnJlbnRDb25maWciLCJfcmVmMiIsImVuYWJsZWQiLCJjb25maWdTYXZlZCIsImNvbmZpZ1RvTWVyZ2UiLCJzYXZlZFRvb2x0aXBDb25maWciLCJfbWVyZ2VJbnRlcmFjdGlvblRvb2wiLCJtZXJnZUludGVyYWN0aW9uVG9vbHRpcENvbmZpZyIsIm1lcmdlZFRvb2x0aXAiLCJ1bm1lcmdlZFRvb2x0aXAiLCJmaWVsZHNUb1Nob3ciLCJ0aW1lem9uZSIsInRvb2x0aXAiLCJwaWNrIiwibmV4dFN0YXRlIiwic2F2ZWRVbm1lcmdlZEludGVyYWN0aW9uIiwiY29tYmluZUludGVyYWN0aW9uQ29uZmlncyIsImNvbmZpZ3MiLCJjb21iaW5lZCIsImxlZ2VuZCIsIndpdGhMZWdlbmQiLCJmaW5kIiwiYyIsInpvb21PcGFjaXR5Iiwid2l0aFpvb21PcGFjaXR5IiwiX2xvb3AyIiwidG9CZUNvbWJpbmVkUHJvcHMiLCJwIiwiY29tcGFyZU1vZGUiLCJjb21wYXJlVHlwZSIsImdldFZhbHVlV2l0aEhpZ2hlc3RPY2N1cnJlbmNlIiwiaGFzVGltZXpvbmUiLCJyZWR1Y2UiLCJhY2MiLCJuZXh0RmllbGRzVG9TaG93IiwiX2xvb3AzIiwibmV4dERhdGFJZEtleSIsIm5leHRUb29sdGlwRmllbGRzIiwibmV4dFRGIiwiX3JlZjMiLCJfYWdncmVnYXRlIiwic2l6ZSIsImFnZ3JlZ2F0ZSIsIkFHR1JFR0FUSU9OX1RZUEVTIiwibWF4aW11bSIsIl90b0JlQ29tYmluZWRQcm9wcyRmaSIsImxpbWl0U2VhcmNoIiwiaGlkZUludmlzaWJsZUxheWVycyIsImNvbnRyb2xsZXJzIiwiY29tYmluZVpvb21PcGFjaXR5Q29udHJvbGxlcnMiLCJfdW5tZXJnZWQkdG9vbHRpcCIsIl91bm1lcmdlZCR0b29sdGlwMiIsIl9zdGF0ZSRpbnRlcmFjdGlvblRvQiIsIl91bm1lcmdlZCR0b29sdGlwMyIsInJlcGxhY2VJbnRlcmFjdGlvbkRhdGFzZXRJZHMiLCJkYXRhSWRUb1JlcGxhY2UiLCJfaW50ZXJhY3Rpb25Db25maWckdG8iLCJfaW50ZXJhY3Rpb25Db25maWckdG8yIiwibWVyZ2VTcGxpdE1hcHMiLCJzcGxpdE1hcHMiLCJsYXllckV4aXN0cyIsImNyZWF0ZVBhbmVscyIsInNtIiwiaWRzIiwiZ2V0SW5pdGlhbE1hcExheWVyc0ZvclNwbGl0TWFwIiwiZW50cmllcyIsInBhbmVsIiwiZnJvbUVudHJpZXMiLCJfcmVmNCIsIl9yZWY1IiwiX3NsaWNlZFRvQXJyYXkyIiwiX3JlZjYiLCJfcmVmNyIsInNwbGl0TWFwc1RvQmVNZXJnZWQiLCJjb21iaW5lU3BsaXRNYXBzQnlJbmRleCIsIm1lcmdlQ2hhcnRzIiwiY2hhcnRzIiwiaW5jb21pbmdJZHMiLCJjaGFydCIsImV4aXN0aW5nSWRzIiwibmV4dENoYXJ0cyIsIm5vcm1hbGl6ZWQiLCJwaW5uZWQiLCJkaXNwbGF5IiwiaXNDb25maWdBY3RpdmUiLCJpc0pzb25FZGl0b3JBY3RpdmUiLCJjaGFydHNUb0JlTWVyZ2VkIiwicmVwbGFjZUNoYXJ0RGF0YXNldElkcyIsInNhdmVkQ2hhcnRzIiwibWVyZ2VFZmZlY3RzIiwibmV3RWZmZWN0cyIsImVmZmVjdCIsImNyZWF0ZUVmZmVjdCIsImRlZXBtZXJnZSIsImFsbCIsImlzVmFsaWRUb1NhdmUiLCJtZXJnZUFubm90YXRpb25zIiwiYW5ub3RhdGlvbnMiLCJ2YWxpZEFubm90YXRpb25zIiwiaXNBbm5vdGF0aW9uS2luZCIsImtpbmQiLCJhbmNob3JQb2ludCIsImV2ZXJ5IiwiaXNGaW5pdGUiLCJpc1Zpc2libGUiLCJhdXRvU2l6ZSIsImF1dG9TaXplWSIsImxhYmVsIiwibGluZUNvbG9yIiwiSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfQ09MT1IiLCJsaW5lV2lkdGgiLCJJTklUSUFMX0FOTk9UQVRJT05fTElORV9XSURUSCIsInRleHRXaWR0aCIsInRleHRIZWlnaHQiLCJ0b29sdGlwQ29uZmlnIiwiX2xvb3A0IiwiYWxsRmllbGRzIiwiZmllbGRzIiwiZm91bmRGaWVsZHNUb1Nob3ciLCJmaWVsZCIsIm1lcmdlTGF5ZXJCbGVuZGluZyIsImxheWVyQmxlbmRpbmciLCJMQVlFUl9CTEVORElOR1MiLCJjb21iaW5lTGF5ZXJCbGVuZGluZ0NvbmZpZ3MiLCJtZXJnZU92ZXJsYXlCbGVuZGluZyIsIm92ZXJsYXlCbGVuZGluZyIsIk9WRVJMQVlfQkxFTkRJTkdTIiwiY29tYmluZU92ZXJsYXlCbGVuZGluZ0NvbmZpZ3MiLCJtZXJnZUFuaW1hdGlvbkNvbmZpZyIsImFuaW1hdGlvbiIsImN1cnJlbnRUaW1lIiwiYW5pbWF0aW9uQ29uZmlnIiwiZG9tYWluIiwiY29tYmluZUFuaW1hdGlvbkNvbmZpZ3MiLCJfYWdncmVnYXRlMiIsIl9hZ2dyZWdhdGUzIiwibWluaW11bSIsInNwZWVkIiwidGltZUZvcm1hdCIsInZhbGlkYXRlU2F2ZWRMYXllckNvbHVtbnMiLCJzYXZlZENvbHMiLCJlbXB0eUNvbHMiLCJvcHRpb25zIiwiY29sdW1ucyIsIl9sb29wNSIsIl9PYmplY3Qka2V5cyIsIl9pIiwic2F2ZWQiLCJmaWVsZElkeCIsIl9yZWY4IiwiYWxsQ29sRm91bmQiLCJ2YWxpZGF0ZUNvbHVtbiIsInJ2IiwidGhyb3dPbkVycm9yIiwicmVxdWlyZWRDb2x1bW5zIiwiayIsIm9wdGlvbmFsIiwibWlzc2luZ0NvbHVtbnMiLCJFcnJvciIsImpvaW4iLCJjb25maWdDb2x1bW5zIiwiaW52YWxpZENvbHVtbnMiLCJfY29sdW1ucyRrIiwiY29sdW1uIiwidmFsaWRhdG9yIiwidmFsaWRhdGVTYXZlZFRleHRMYWJlbCIsImxheWVyVGV4dExhYmVscyIsInNhdmVkVGV4dExhYmVsIiwibGF5ZXJUZXh0TGFiZWwiLCJzYXZlZFRleHRMYWJlbHMiLCJjb3VudExhYmVsTGF5ZXIiLCJsYXllclR5cGUiLCJBR0dSRUdBVElPTl9DT1VOVF9MQVlFUl9UWVBFUyIsInRleHRMYWJlbCIsIlBPSU5UX0NPVU5UX0ZJRUxEX05BTUUiLCJjcmVhdGVQb2ludENvdW50TGFiZWxGaWVsZCIsImZkIiwiSlNPTiIsInN0cmluZ2lmeSIsImFjY3UiLCJfdGV4dExhYmVsJGtleSIsImZhbGxiYWNrVGV4dExhYmVsRm9yTG9hZGVkTGF5ZXIiLCJuZXdMYXllclRleHRMYWJlbCIsIkRFRkFVTFRfVEVYVF9MQUJFTCIsImdldFNhdmVkVmlzdWFsQ2hhbm5lbFZhbHVlIiwic2F2ZWRMYXllciIsImNoYW5uZWxzIiwiX3R5cGVvZjIiLCJ2YWxpZGF0ZVNhdmVkVmlzdWFsQ2hhbm5lbHMiLCJ2YWx1ZXMiLCJfcmVmOSIsInNjYWxlIiwic2F2ZWRGaWVsZCIsInNhdmVkU2NhbGUiLCJmb3VuZEZpZWxkIiwiZm91bmRDaGFubmVsIiwidXBkYXRlTGF5ZXJDb25maWciLCJ2YWxpZGF0ZVZpc3VhbENoYW5uZWwiLCJfbmV3TGF5ZXIkY29uZmlnJGZpZWwiLCJmaWVsZE5hbWUiLCJfbGF5ZXIkY29uZmlnIiwidmFsaWRhdGVMYXllciIsInZhbGlkYXRlTGF5ZXJXaXRoRGF0YSIsIl9nZXRDb2x1bW5Db25maWdGb3JWYWxpZGF0aW9uIiwiY29sdW1uQ29uZmlnIiwiZ2V0TGF5ZXJDb2x1bW5zIiwiY29sTW9kZUNvbmZpZyIsImNvbHVtbk1vZGUiLCJzdXBwb3J0ZWRDb2x1bW5Nb2RlcyIsImNvbE1vZGUiLCJncm91cENvbHVtbnMiLCJjb2x1bW5Hcm91cHMiLCJmbGF0TWFwIiwicmVxdWlyZWRLZXlzIiwib3B0aW9uYWxDb2x1bW5zIiwiY29sIiwiX29wdGlvbmFsIiwicmVxdWlyZWRDb2wiLCJkYXRhc2V0IiwidHlwZSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiaGlkZGVuIiwiaXNJbmNsdWRlZEluTGVnZW5kIiwiaGlnaGxpZ2h0Q29sb3IiLCJzYXZlZFZpc0NvbmZpZyIsIm1pZ3JhdGVMZWdhY3lTY2VuZWdyYXBoVmlzQ29uZmlnIiwidmlzQ29uZmlnIiwiY29waWVkVmlzQ29uZmlnIiwiY29weUxheWVyQ29uZmlnIiwic2hhbGxvd0NvcHkiLCJ2YWxpZGF0ZVZpc0NvbmZpZyIsIm1lcmdlRWRpdG9yIiwic2F2ZWRFZGl0b3IiLCJfc2F2ZWRFZGl0b3IkdmlzaWJsZSIsImVkaXRvciIsImZlYXR1cmVzIiwidmlzaWJsZSIsImNvbWJpbmVFZGl0b3JDb25maWdzIiwibmV4dENvbmZpZyIsIm1lcmdlRGF0YXNldHNCeU9yZGVyIiwibmV3RGF0YUVudHJpZXMiLCJwcmVzZXJ2ZURhdGFzZXRPcmRlciIsIm5ld0RhdGFzZXRJZHMiLCJfc3RhdGUkcHJlc2VydmVEYXRhc2UiLCJhcnIiLCJfcmVmMTEiLCJ0YWxseXMiLCJNYXAiLCJub3ROdWxsb3JVbmRlZmluZWQiLCJzZXQiLCJnZXQiLCJWSVNfU1RBVEVfTUVSR0VSUyIsImV4cG9ydHMiLCJtZXJnZSIsInByb3AiLCJ0b01lcmdlUHJvcCIsInByZXNlcnZlT3JkZXIiLCJyZXBsYWNlUGFyZW50RGF0YXNldElkcyIsInNhdmVVbm1lcmdlZCIsImNvbWJpbmVDb25maWdzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Zpcy1zdGF0ZS1tZXJnZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHVuaXEgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvdW5pcSc7XG5pbXBvcnQgcGljayBmcm9tICdlcy10b29sa2l0L2NvbXBhdC9waWNrJztcbmltcG9ydCBmbGF0dGVuRGVlcCBmcm9tICdlcy10b29sa2l0L2NvbXBhdC9mbGF0dGVuRGVlcCc7XG5pbXBvcnQgZGVlcG1lcmdlIGZyb20gJ2RlZXBtZXJnZSc7XG5pbXBvcnQge1xuICBhcnJheUluc2VydCxcbiAgY29tYmluZVNwbGl0TWFwc0J5SW5kZXgsXG4gIGdldEluaXRpYWxNYXBMYXllcnNGb3JTcGxpdE1hcCxcbiAgYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyxcbiAgdmFsaWRhdGVGaWx0ZXJzVXBkYXRlRGF0YXNldHMsXG4gIGZpbmRCeUlkLFxuICBhZ2dyZWdhdGUsXG4gIGlzUGxhaW5PYmplY3Rcbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5cbmltcG9ydCB7XG4gIEFHR1JFR0FUSU9OX0NPVU5UX0xBWUVSX1RZUEVTLFxuICBMYXllcixcbiAgY3JlYXRlUG9pbnRDb3VudExhYmVsRmllbGQsXG4gIG1pZ3JhdGVMZWdhY3lTY2VuZWdyYXBoVmlzQ29uZmlnLFxuICBQT0lOVF9DT1VOVF9GSUVMRF9OQU1FXG59IGZyb20gJ0BrZXBsZXIuZ2wvbGF5ZXJzJztcbmltcG9ydCB7Y3JlYXRlRWZmZWN0fSBmcm9tICdAa2VwbGVyLmdsL2VmZmVjdHMnO1xuaW1wb3J0IHtub3ROdWxsb3JVbmRlZmluZWR9IGZyb20gJ0BrZXBsZXIuZ2wvY29tbW9uLXV0aWxzJztcbmltcG9ydCB7XG4gIEFHR1JFR0FUSU9OX1RZUEVTLFxuICBERUZBVUxUX1RFWFRfTEFCRUwsXG4gIExBWUVSX0JMRU5ESU5HUyxcbiAgT1ZFUkxBWV9CTEVORElOR1MsXG4gIGlzQW5ub3RhdGlvbktpbmQsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX0NPTE9SLFxuICBJTklUSUFMX0FOTk9UQVRJT05fTElORV9XSURUSFxufSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge0NVUlJFTlRfVkVSU0lPTiwgVmlzU3RhdGUsIFZpc1N0YXRlTWVyZ2VycywgS2VwbGVyR0xTY2hlbWFDbGFzc30gZnJvbSAnQGtlcGxlci5nbC9zY2hlbWFzJztcblxuaW1wb3J0IHtcbiAgUGFyc2VkTGF5ZXIsXG4gIFBhcnNlZFZpc1N0YXRlLFxuICBTYXZlZEludGVyYWN0aW9uQ29uZmlnLFxuICBUb29sdGlwSW5mbyxcbiAgU2F2ZWRFZGl0b3IsXG4gIFBhcnNlZENvbmZpZyxcbiAgRmlsdGVyLFxuICBFZmZlY3QgYXMgRWZmZWN0VHlwZSxcbiAgUGFyc2VkRWZmZWN0LFxuICBMYXllckNvbHVtbnMsXG4gIExheWVyQ29sdW1uLFxuICBQYXJzZWRGaWx0ZXIsXG4gIE5lc3RlZFBhcnRpYWwsXG4gIFNhdmVkQW5pbWF0aW9uQ29uZmlnLFxuICBMYXllck9yZGVyLFxuICBMYXllck9yZGVyR3JvdXAsXG4gIENoYXJ0Q29uZmlnXG59IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtLZXBsZXJUYWJsZSwgRGF0YXNldHMsIGFzc2lnbkdwdUNoYW5uZWxzLCByZXNldEZpbHRlckdwdU1vZGV9IGZyb20gJ0BrZXBsZXIuZ2wvdGFibGUnO1xuXG5pbXBvcnQge2dldExheWVyT3JkZXJGcm9tTGF5ZXJzfSBmcm9tICcuL2xheWVyLXV0aWxzJztcbmltcG9ydCB7Y29tYmluZVpvb21PcGFjaXR5Q29udHJvbGxlcnN9IGZyb20gJy4vaW50ZXJhY3Rpb24tdXRpbHMnO1xuXG4vKipcbiAqIE1lcmdlIGxvYWRlZCBmaWx0ZXJzIHdpdGggY3VycmVudCBzdGF0ZSwgaWYgbm8gZmllbGRzIG9yIGRhdGEgYXJlIGxvYWRlZFxuICogc2F2ZSBpdCBmb3IgbGF0ZXJcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUZpbHRlcnM8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGZpbHRlcnNUb01lcmdlOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydmaWx0ZXJzJ10sXG4gIGZyb21Db25maWc/OiBib29sZWFuXG4pOiBTIHtcbiAgY29uc3QgcHJlc2VydmVGaWx0ZXJPcmRlciA9IGZyb21Db25maWdcbiAgICA/IGZpbHRlcnNUb01lcmdlPy5tYXAobCA9PiBsLmlkKVxuICAgIDogc3RhdGUucHJlc2VydmVGaWx0ZXJPcmRlcjtcblxuICBpZiAoIUFycmF5LmlzQXJyYXkoZmlsdGVyc1RvTWVyZ2UpIHx8ICFmaWx0ZXJzVG9NZXJnZS5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7dmFsaWRhdGVkLCBmYWlsZWQsIHVwZGF0ZWREYXRhc2V0c30gPSB2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0cyhzdGF0ZSwgZmlsdGVyc1RvTWVyZ2UpO1xuICBsZXQgdXBkYXRlZEZpbHRlcnMgPSBpbnNlcnRJdGVtQmFzZWRPblByZXNlcnZlZE9yZGVyKFxuICAgIHN0YXRlLmZpbHRlcnMsXG4gICAgdmFsaWRhdGVkLFxuICAgIHByZXNlcnZlRmlsdGVyT3JkZXJcbiAgKTtcblxuICAvLyBtZXJnZSBmaWx0ZXIgd2l0aCBleGlzdGluZ1xuICB1cGRhdGVkRmlsdGVycyA9IHJlc2V0RmlsdGVyR3B1TW9kZSh1cGRhdGVkRmlsdGVycyk7XG4gIHVwZGF0ZWRGaWx0ZXJzID0gYXNzaWduR3B1Q2hhbm5lbHModXBkYXRlZEZpbHRlcnMpO1xuICAvLyBmaWx0ZXIgZGF0YVxuICBjb25zdCBkYXRhc2V0c1RvRmlsdGVyID0gdW5pcShmbGF0dGVuRGVlcCh2YWxpZGF0ZWQubWFwKGYgPT4gZi5kYXRhSWQpKSk7XG5cbiAgY29uc3QgZmlsdGVyZWQgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKFxuICAgIGRhdGFzZXRzVG9GaWx0ZXIsXG4gICAgdXBkYXRlZERhdGFzZXRzLFxuICAgIHVwZGF0ZWRGaWx0ZXJzLFxuICAgIHN0YXRlLmxheWVyc1xuICApO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogdXBkYXRlZEZpbHRlcnMsXG4gICAgZGF0YXNldHM6IGZpbHRlcmVkLFxuICAgIHByZXNlcnZlRmlsdGVyT3JkZXIsXG4gICAgZmlsdGVyVG9CZU1lcmdlZDogWy4uLnN0YXRlLmZpbHRlclRvQmVNZXJnZWQsIC4uLmZhaWxlZF1cbiAgfTtcbn1cblxuLy8gcmVwbGFjZSBkYXRhSWQgaW4gc2F2ZWQgRmlsdGVyXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUZpbHRlckRhdGFzZXRJZHMoXG4gIHNhdmVkRmlsdGVyOiBGaWx0ZXJbXSxcbiAgZGF0YUlkOiBzdHJpbmcsXG4gIGRhdGFJZFRvVXNlOiBzdHJpbmdcbikge1xuICBjb25zdCByZXBsYWNlZDogRmlsdGVyW10gPSBbXTtcbiAgc2F2ZWRGaWx0ZXIuZm9yRWFjaChmaWx0ZXIgPT4ge1xuICAgIGlmIChmaWx0ZXIuZGF0YUlkLmluY2x1ZGVzKGRhdGFJZCkpIHtcbiAgICAgIGNvbnN0IG5ld0RhdGFJZCA9IGZpbHRlci5kYXRhSWQubWFwKGQgPT4gKGQgPT09IGRhdGFJZCA/IGRhdGFJZFRvVXNlIDogZCkpO1xuICAgICAgbGV0IHBsb3RUeXBlO1xuICAgICAgLy8gVE9ETzogbW9yZSBnZW5lcmljIGFwcHJvYWNoIHRvIHNhdmUgcGxvdFR5cGUuY29sb3JzQnlEYXRhSWRcbiAgICAgIGlmIChmaWx0ZXIucGxvdFR5cGU/LmNvbG9yc0J5RGF0YUlkPy5bZGF0YUlkXSkge1xuICAgICAgICAvLyByZXBsYWNlIGNvbG9yQnlEYXRhSWQgaW4gZmlsdGVyLnBsb3RUeXBlXG4gICAgICAgIGNvbnN0IHtbZGF0YUlkXTogY29sb3IsIC4uLnJlc3R9ID0gZmlsdGVyLnBsb3RUeXBlPy5jb2xvcnNCeURhdGFJZCB8fCB7fTtcbiAgICAgICAgcGxvdFR5cGUgPSB7XG4gICAgICAgICAgLi4uZmlsdGVyLnBsb3RUeXBlLFxuICAgICAgICAgIGNvbG9yc0J5RGF0YUlkOiB7XG4gICAgICAgICAgICAuLi5yZXN0LFxuICAgICAgICAgICAgW2RhdGFJZFRvVXNlXTogY29sb3JcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXBsYWNlZC5wdXNoKHtcbiAgICAgICAgLi4uZmlsdGVyLFxuICAgICAgICBkYXRhSWQ6IG5ld0RhdGFJZCxcbiAgICAgICAgLi4uKHBsb3RUeXBlID8ge3Bsb3RUeXBlfSA6IHt9KVxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlcGxhY2VkLmxlbmd0aCA/IHJlcGxhY2VkIDogbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2F2ZWRMYXllckNvbmZpZ1YxKGxheWVyQ29uZmlnOiBhbnkpOiBib29sZWFuIHtcbiAgLy8gZXhwb3J0ZWQgbGF5ZXIgY29uZmlndXJhdGlvbiBjb250YWlucyB2aXN1YWxDaGFubmVscyBwcm9wZXJ0eVxuICByZXR1cm4gbGF5ZXJDb25maWc/LnZpc3VhbENoYW5uZWxzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VMYXllckNvbmZpZyhcbiAgc2NoZW1hOiBLZXBsZXJHTFNjaGVtYUNsYXNzLFxuICBsYXllckNvbmZpZzogYW55XG4pOiBQYXJzZWRMYXllciB8IHVuZGVmaW5lZCB7XG4gIC8vIGFzc3VtZSB0aGUgbGF5ZXIgY29uZmlnIGlzIGN1cnJlbnQgdmVyc2lvblxuICBjb25zdCBzYXZlZENvbmZpZyA9IHtcbiAgICB2ZXJzaW9uOiBDVVJSRU5UX1ZFUlNJT04sXG4gICAgY29uZmlnOiB7XG4gICAgICB2aXNTdGF0ZToge2xheWVyczogW2xheWVyQ29uZmlnXSwgbGF5ZXJPcmRlcjogW2xheWVyQ29uZmlnLmlkXX1cbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIHNjaGVtYS5wYXJzZVNhdmVkQ29uZmlnKHNhdmVkQ29uZmlnKT8udmlzU3RhdGU/LmxheWVycz8uWzBdO1xufVxuXG5mdW5jdGlvbiBpbnNlcnRJdGVtQmFzZWRPblByZXNlcnZlZE9yZGVyKFxuICBjdXJyZW50SXRlbXM6IEZpbHRlcltdLFxuICBpdGVtczogRmlsdGVyW10sXG4gIHByZXNlcnZlZE9yZGVyOiBhbnlbXSA9IFtdLFxuICBkZWZhdWx0U3RhcnQ/OiBib29sZWFuXG4pIHtcbiAgbGV0IG5ld0l0ZW1zID0gWy4uLmN1cnJlbnRJdGVtc107XG5cbiAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgY29uc3QgZXhwZWN0ZWRJZHggPSBwcmVzZXJ2ZWRPcmRlci5pbmRleE9mKGl0ZW0uaWQpO1xuICAgIC8vIGluc2VydEF0IHRoZSBlbmQgYnkgZGVmYXVsdFxuICAgIGxldCBpbnNlcnRBdCA9IGRlZmF1bHRTdGFydCA/IDAgOiBuZXdJdGVtcy5sZW5ndGg7XG4gICAgaWYgKGV4cGVjdGVkSWR4ID4gMCkge1xuICAgICAgLy8gbG9vayBmb3IgbGF5ZXIgdG8gaW5zZXJ0IGFmdGVyXG4gICAgICBsZXQgaSA9IGV4cGVjdGVkSWR4ICsgMTtcbiAgICAgIGxldCBwcmVjZWVkSWR4ID0gLTE7XG4gICAgICB3aGlsZSAoaS0tID4gMCAmJiBwcmVjZWVkSWR4IDwgMCkge1xuICAgICAgICAvLyBrZWVwIGxvb2tpbmcgZm9yIHByZWNlZWQgbGF5ZXIgdGhhdCBpcyBhbHJlYWR5IGxvYWRlZFxuICAgICAgICBjb25zdCBwcmVjZWVkSXRlbUlkID0gcHJlc2VydmVkT3JkZXJbaSAtIDFdO1xuICAgICAgICBwcmVjZWVkSWR4ID0gbmV3SXRlbXMuZmluZEluZGV4KGQgPT4gZC5pZCA9PT0gcHJlY2VlZEl0ZW1JZCk7XG4gICAgICB9XG4gICAgICBpZiAocHJlY2VlZElkeCA+IC0xKSB7XG4gICAgICAgIC8vIGlmIGZvdW5kXG4gICAgICAgIGluc2VydEF0ID0gcHJlY2VlZElkeCArIDE7XG4gICAgICB9XG4gICAgfVxuICAgIG5ld0l0ZW1zID0gYXJyYXlJbnNlcnQobmV3SXRlbXMsIGluc2VydEF0LCBpdGVtKTtcbiAgfVxuICByZXR1cm4gbmV3SXRlbXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVMYXllckZyb21Db25maWcoc3RhdGU6IFZpc1N0YXRlLCBsYXllckNvbmZpZzogYW55KTogTGF5ZXIgfCBudWxsIHtcbiAgLy8gY2hlY2sgaWYgdGhlIGxheWVyIGNvbmZpZyBpcyBwYXJzZWRcbiAgY29uc3Qgc2F2ZWRMYXllckNvbmZpZyA9IGlzU2F2ZWRMYXllckNvbmZpZ1YxKGxheWVyQ29uZmlnKTtcbiAgY29uc3QgcGFyc2VkTGF5ZXJDb25maWcgPSBzYXZlZExheWVyQ29uZmlnXG4gICAgPyBwYXJzZUxheWVyQ29uZmlnKHN0YXRlLnNjaGVtYSwgbGF5ZXJDb25maWcpXG4gICAgOiBsYXllckNvbmZpZztcblxuICBpZiAoIXBhcnNlZExheWVyQ29uZmlnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLy8gZmlyc3QgdmFsaWRhdGUgY29uZmlnIGFnYWluc3QgZGF0YXNldFxuICBjb25zdCB7dmFsaWRhdGVkLCBmYWlsZWR9ID0gdmFsaWRhdGVMYXllcnNCeURhdGFzZXRzKFxuICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgIHN0YXRlLmxheWVyQ2xhc3NlcyxcbiAgICBbcGFyc2VkTGF5ZXJDb25maWddLFxuICAgIHthbGxvd0VtcHR5Q29sdW1uOiB0cnVlLCBrZWVwVW5sYWJlbGVkQWdncmVnYXRpb25UZXh0TGFiZWw6IHNhdmVkTGF5ZXJDb25maWd9XG4gICk7XG5cbiAgaWYgKGZhaWxlZD8ubGVuZ3RoIHx8ICF2YWxpZGF0ZWQubGVuZ3RoKSB7XG4gICAgLy8gZmFpbGVkXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBuZXdMYXllciA9IHZhbGlkYXRlZFswXTtcbiAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJEb21haW4oc3RhdGUuZGF0YXNldHMpO1xuICByZXR1cm4gbmV3TGF5ZXI7XG59XG5cbi8qKlxuICogR2V0IGxvYWRlZCBmaWx0ZXIgZnJvbSBzdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplRmlsdGVyKFxuICBuZXdGaWx0ZXI6IEZpbHRlcixcbiAgc2NoZW1hOiBLZXBsZXJHTFNjaGVtYUNsYXNzXG4pOiBQYXJzZWRGaWx0ZXIgfCB1bmRlZmluZWQge1xuICBjb25zdCBzZXJpYWxpemVkVmlzU3RhdGUgPSBzZXJpYWxpemVWaXNTdGF0ZSh7ZmlsdGVyczogW25ld0ZpbHRlcl19LCBzY2hlbWEpO1xuICByZXR1cm4gc2VyaWFsaXplZFZpc1N0YXRlPy5maWx0ZXJzPy5bMF07XG59XG5cbi8qKlxuICogR2V0IGxvYWRlZCBsYXllciBmcm9tIHN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVMYXllcihcbiAgbmV3TGF5ZXI6IExheWVyLFxuICBzY2hlbWE6IEtlcGxlckdMU2NoZW1hQ2xhc3Ncbik6IFBhcnNlZExheWVyIHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc2VyaWFsaXplZFZpc1N0YXRlID0gc2VyaWFsaXplVmlzU3RhdGUoXG4gICAge2xheWVyczogW25ld0xheWVyXSwgbGF5ZXJPcmRlcjogW25ld0xheWVyLmlkXX0sXG4gICAgc2NoZW1hXG4gICk7XG4gIHJldHVybiBzZXJpYWxpemVkVmlzU3RhdGU/LmxheWVycz8uWzBdO1xufVxuXG4vKipcbiAqIEdldCBsb2FkZWQgZWZmZWN0IGZyb20gc3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZUVmZmVjdChcbiAgbmV3RWZmZWN0OiBFZmZlY3RUeXBlLFxuICBzY2hlbWE6IEtlcGxlckdMU2NoZW1hQ2xhc3Ncbik6IFBhcnNlZEVmZmVjdCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRWaXNTdGF0ZSA9IHNlcmlhbGl6ZVZpc1N0YXRlKFxuICAgIHtlZmZlY3RzOiBbbmV3RWZmZWN0XSwgZWZmZWN0T3JkZXI6IFtuZXdFZmZlY3QuaWRdfSxcbiAgICBzY2hlbWFcbiAgKTtcbiAgcmV0dXJuIHNlcmlhbGl6ZWRWaXNTdGF0ZT8uZWZmZWN0cz8uWzBdO1xufVxuXG4vKipcbiAqIEdldCB2aXMgc3RhdGUgY29uZmlnXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVWaXNTdGF0ZShcbiAgdmlzU3RhdGU6IFBhcnRpYWw8VmlzU3RhdGU+LFxuICBzY2hlbWE6IEtlcGxlckdMU2NoZW1hQ2xhc3Ncbik6IFBhcnNlZFZpc1N0YXRlIHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc2F2ZWRTdGF0ZSA9IHNjaGVtYS5nZXRDb25maWdUb1NhdmUoe1xuICAgIHZpc1N0YXRlXG4gIH0pO1xuICByZXR1cm4gc2F2ZWRTdGF0ZSA/IHNjaGVtYS5wYXJzZVNhdmVkQ29uZmlnKHNhdmVkU3RhdGUpPy52aXNTdGF0ZSA6IHVuZGVmaW5lZDtcbn1cbi8qKlxuICogTWVyZ2UgbGF5ZXJzIGZyb20gZGUtc2VyaWFsaXplZCBzdGF0ZSwgaWYgbm8gZmllbGRzIG9yIGRhdGEgYXJlIGxvYWRlZFxuICogc2F2ZSBpdCBmb3IgbGF0ZXJcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUxheWVyczxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgbGF5ZXJzVG9NZXJnZTogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnbGF5ZXJzJ10gPSBbXSxcbiAgZnJvbUNvbmZpZz86IGJvb2xlYW5cbik6IFMge1xuICBjb25zdCBwcmVzZXJ2ZUxheWVyT3JkZXIgPSBmcm9tQ29uZmlnXG4gICAgPyBnZXRMYXllck9yZGVyRnJvbUxheWVycyhsYXllcnNUb01lcmdlKVxuICAgIDogc3RhdGUucHJlc2VydmVMYXllck9yZGVyO1xuICBpZiAoIUFycmF5LmlzQXJyYXkobGF5ZXJzVG9NZXJnZSkgfHwgIWxheWVyc1RvTWVyZ2UubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIC8vIGRvbid0IG1lcmdlIGxheWVyIGlmIGRhdGFzZXQgaXMgYmVpbmcgbWVyZ2VkXG4gIGNvbnN0IHVubWVyZ2VkOiBQYXJzZWRMYXllcltdID0gW107XG4gIGNvbnN0IHRvTWVyZ2U6IFBhcnNlZExheWVyW10gPSBbXTtcbiAgbGF5ZXJzVG9NZXJnZS5mb3JFYWNoKChsOiBQYXJzZWRMYXllcikgPT4ge1xuICAgIGlmIChsPy5jb25maWc/LmRhdGFJZCAmJiBzdGF0ZS5pc01lcmdpbmdEYXRhc2V0c1tsLmNvbmZpZy5kYXRhSWRdKSB7XG4gICAgICB1bm1lcmdlZC5wdXNoKGwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0b01lcmdlLnB1c2gobCk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCB7dmFsaWRhdGVkOiBtZXJnZWRMYXllciwgZmFpbGVkfSA9IHZhbGlkYXRlTGF5ZXJzQnlEYXRhc2V0cyhcbiAgICBzdGF0ZS5kYXRhc2V0cyxcbiAgICBzdGF0ZS5sYXllckNsYXNzZXMsXG4gICAgdG9NZXJnZSxcbiAgICB7a2VlcFVubGFiZWxlZEFnZ3JlZ2F0aW9uVGV4dExhYmVsOiB0cnVlfVxuICApO1xuICB1bm1lcmdlZC5wdXNoKC4uLmZhaWxlZCk7XG4gIC8vIHB1dCBuZXcgbGF5ZXJzIGluIGZyb250IG9mIGN1cnJlbnQgbGF5ZXJzXG4gIGNvbnN0IHtuZXdMYXllck9yZGVyLCBuZXdMYXllcnN9ID0gaW5zZXJ0TGF5ZXJBdFJpZ2h0T3JkZXIoXG4gICAgc3RhdGUubGF5ZXJzLFxuICAgIG1lcmdlZExheWVyLFxuICAgIHN0YXRlLmxheWVyT3JkZXIsXG4gICAgcHJlc2VydmVMYXllck9yZGVyXG4gICk7XG5cbiAgbGV0IG1lcmdlZFN0YXRlOiBTID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogbmV3TGF5ZXJzLFxuICAgIGxheWVyT3JkZXI6IG5ld0xheWVyT3JkZXIsXG4gICAgcHJlc2VydmVMYXllck9yZGVyLFxuICAgIGxheWVyVG9CZU1lcmdlZDogWy4uLnN0YXRlLmxheWVyVG9CZU1lcmdlZCwgLi4udW5tZXJnZWRdXG4gIH07XG5cbiAgLy8gQXBwbHkgcGVuZGluZyBsYXllck9yZGVyIHdpdGggZ3JvdXBzIGlmIGxheWVycyBhcmUgbm93IGF2YWlsYWJsZVxuICBpZiAobWVyZ2VkU3RhdGUubGF5ZXJPcmRlclRvQmVNZXJnZWQgJiYgbWVyZ2VkU3RhdGUubGF5ZXJzLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBzYXZlZE9yZGVyID0gbWVyZ2VkU3RhdGUubGF5ZXJPcmRlclRvQmVNZXJnZWQ7XG4gICAgbWVyZ2VkU3RhdGUgPSBtZXJnZUxheWVyT3JkZXIobWVyZ2VkU3RhdGUsIHNhdmVkT3JkZXIpO1xuICAgIC8vIEtlZXAgc2F2ZWRMYXllck9yZGVyIGF2YWlsYWJsZSBmb3IgZnV0dXJlIGRlZmVycmVkIGxheWVyc1xuICAgIGlmIChtZXJnZWRTdGF0ZS5sYXllclRvQmVNZXJnZWQubGVuZ3RoID4gMCkge1xuICAgICAgbWVyZ2VkU3RhdGUgPSB7Li4ubWVyZ2VkU3RhdGUsIGxheWVyT3JkZXJUb0JlTWVyZ2VkOiBzYXZlZE9yZGVyfTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWVyZ2VkU3RhdGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRMYXllckF0UmlnaHRPcmRlcihcbiAgY3VycmVudExheWVycyxcbiAgbGF5ZXJzVG9JbnNlcnQsXG4gIGN1cnJlbnRPcmRlcixcbiAgcHJlc2VydmVkT3JkZXI6IHN0cmluZ1tdID0gW11cbikge1xuICBpZiAoIWxheWVyc1RvSW5zZXJ0Py5sZW5ndGgpIHtcbiAgICByZXR1cm4ge25ld0xheWVyczogY3VycmVudExheWVycywgbmV3TGF5ZXJPcmRlcjogY3VycmVudE9yZGVyfTtcbiAgfVxuXG4gIGNvbnN0IGN1cnJlbnRMYXllclF1ZXVlID0gY3VycmVudE9yZGVyXG4gICAgLmZpbHRlcihlbnRyeSA9PiB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKVxuICAgIC5tYXAoaWQgPT4gZmluZEJ5SWQoaWQpKGN1cnJlbnRMYXllcnMpKVxuICAgIC5maWx0ZXIobGF5ZXIgPT4gQm9vbGVhbihsYXllcikpO1xuICBjb25zdCBuZXdMYXllcnMgPSBjdXJyZW50TGF5ZXJzLmNvbmNhdChsYXllcnNUb0luc2VydCk7XG4gIGNvbnN0IG5ld0xheWVyT3JkZXJRdWV1ZSA9IGluc2VydEl0ZW1CYXNlZE9uUHJlc2VydmVkT3JkZXIoXG4gICAgY3VycmVudExheWVyUXVldWUsXG4gICAgbGF5ZXJzVG9JbnNlcnQsXG4gICAgcHJlc2VydmVkT3JkZXIsXG4gICAgdHJ1ZVxuICApO1xuXG4gIGNvbnN0IG5ld0ZsYXRMYXllck9yZGVyID0gZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMobmV3TGF5ZXJPcmRlclF1ZXVlKTtcblxuICAvLyBJZiBubyBncm91cHMgZXhpc3QgaW4gY3VycmVudCBvcmRlciwganVzdCB1c2UgdGhlIG5ldyBmbGF0IG9yZGVyXG4gIGNvbnN0IGhhc0dyb3VwcyA9IGN1cnJlbnRPcmRlci5zb21lKGVudHJ5ID0+IGlzUGxhaW5PYmplY3QoZW50cnkpKTtcbiAgaWYgKCFoYXNHcm91cHMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmV3TGF5ZXJPcmRlcjogbmV3RmxhdExheWVyT3JkZXIsXG4gICAgICBuZXdMYXllcnNcbiAgICB9O1xuICB9XG5cbiAgLy8gUmVidWlsZCBsYXllck9yZGVyIHByZXNlcnZpbmcgZ3JvdXBzIGluIHRoZWlyIHJlbGF0aXZlIHBvc2l0aW9ucy5cbiAgLy8gUmVwbGFjZSBlYWNoIHN0cmluZyBlbnRyeSB3aXRoIGl0cyB1cGRhdGVkIHBvc2l0aW9uIGZyb20gbmV3RmxhdExheWVyT3JkZXIsXG4gIC8vIGFuZCBrZWVwIGdyb3VwcyBhcy1pcy5cbiAgY29uc3QgZXhpc3RpbmdGbGF0SWRzID0gbmV3IFNldChcbiAgICBjdXJyZW50T3JkZXIuZmlsdGVyKGVudHJ5ID0+IHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIGFzIHN0cmluZ1tdXG4gICk7XG4gIGNvbnN0IG5ld0luc2VydGVkSWRzID0gbmV3RmxhdExheWVyT3JkZXIuZmlsdGVyKGlkID0+ICFleGlzdGluZ0ZsYXRJZHMuaGFzKGlkKSk7XG5cbiAgLy8gUmVidWlsZDogd2FsayB0aHJvdWdoIGN1cnJlbnRPcmRlciwgcmVwbGFjZSBzdHJpbmcgZW50cmllcyB3aXRoIHRoZWlyXG4gIC8vIG5ldyBwb3NpdGlvbiBlcXVpdmFsZW50cyBmcm9tIG5ld0ZsYXRMYXllck9yZGVyLCB0aGVuIGFwcGVuZCBhbnkgbmV3bHkgaW5zZXJ0ZWQgbGF5ZXJzXG4gIGNvbnN0IHJlc3VsdDogTGF5ZXJPcmRlciA9IFtdO1xuICBjb25zdCBmbGF0UXVldWUgPSBbLi4ubmV3RmxhdExheWVyT3JkZXIuZmlsdGVyKGlkID0+IGV4aXN0aW5nRmxhdElkcy5oYXMoaWQpKV07XG4gIGxldCBmbGF0SWR4ID0gMDtcblxuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGN1cnJlbnRPcmRlcikge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KGVudHJ5KSkge1xuICAgICAgcmVzdWx0LnB1c2goZW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmVwbGFjZSB3aXRoIGNvcnJlc3BvbmRpbmcgZW50cnkgZnJvbSByZW9yZGVyZWQgZmxhdCBsaXN0XG4gICAgICBpZiAoZmxhdElkeCA8IGZsYXRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goZmxhdFF1ZXVlW2ZsYXRJZHhdKTtcbiAgICAgICAgZmxhdElkeCsrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEFwcGVuZCBhbnkgbmV3bHkgaW5zZXJ0ZWQgbGF5ZXJzIGF0IHRoZSBmcm9udCAodGhleSBhcmUgbmV3KVxuICByZXR1cm4ge1xuICAgIG5ld0xheWVyT3JkZXI6IFsuLi5uZXdJbnNlcnRlZElkcywgLi4ucmVzdWx0XSxcbiAgICBuZXdMYXllcnNcbiAgfTtcbn1cblxuLyoqXG4gKiBNZXJnZSBzYXZlZCBsYXllck9yZGVyIHdpdGggY3VycmVudCBzdGF0ZSB0byByZXN0b3JlIGxheWVyIGdyb3Vwcy5cbiAqIENhbGxlZCBhZnRlciBsYXllcnMgaGF2ZSBiZWVuIG1lcmdlZC4gSWYgdGhlIHNhdmVkIGNvbmZpZyBjb250YWlucyBhIGxheWVyT3JkZXJcbiAqIHdpdGggZ3JvdXBzLCB0aGlzIHJlcGxhY2VzIHRoZSBmbGF0IGxheWVyT3JkZXIgd2l0aCB0aGUgc2F2ZWQgaGllcmFyY2hpY2FsIG9uZSxcbiAqIGZpbHRlcmluZyBvdXQgYW55IGxheWVyIElEcyB0aGF0IGRvbid0IGV4aXN0IGluIHRoZSBjdXJyZW50IHN0YXRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VMYXllck9yZGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBzYXZlZExheWVyT3JkZXI/OiBhbnlbXSxcbiAgZnJvbUNvbmZpZz86IGJvb2xlYW5cbik6IFMge1xuICBpZiAoIXNhdmVkTGF5ZXJPcmRlciB8fCAhQXJyYXkuaXNBcnJheShzYXZlZExheWVyT3JkZXIpIHx8IHNhdmVkTGF5ZXJPcmRlci5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyBDaGVjayBpZiB0aGUgc2F2ZWQgbGF5ZXJPcmRlciBjb250YWlucyBhbnkgZ3JvdXBzXG4gIGNvbnN0IGhhc0dyb3VwcyA9IHNhdmVkTGF5ZXJPcmRlci5zb21lKGVudHJ5ID0+IGlzUGxhaW5PYmplY3QoZW50cnkpKTtcbiAgaWYgKCFoYXNHcm91cHMpIHtcbiAgICAvLyBObyBncm91cHMgLSB0aGUgbGF5ZXIgbWVyZ2VyIGFscmVhZHkgaGFuZGxlZCBvcmRlcmluZyB2aWEgcHJlc2VydmVMYXllck9yZGVyXG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gSWYgbGF5ZXJzIGhhdmVuJ3QgYmVlbiBtZXJnZWQgeWV0LCBzdG9yZSBmb3IgbGF0ZXJcbiAgaWYgKHN0YXRlLmxheWVycy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBsYXllck9yZGVyVG9CZU1lcmdlZDogc2F2ZWRMYXllck9yZGVyXG4gICAgfTtcbiAgfVxuXG4gIC8vIEJ1aWxkIGEgc2V0IG9mIHZhbGlkIGxheWVyIElEcyBmcm9tIGN1cnJlbnQgc3RhdGVcbiAgY29uc3QgdmFsaWRMYXllcklkcyA9IG5ldyBTZXQoc3RhdGUubGF5ZXJzLm1hcChsID0+IGwuaWQpKTtcblxuICAvLyBSZWN1cnNpdmVseSBmaWx0ZXIgdGhlIHNhdmVkIGxheWVyT3JkZXIgdG8gb25seSBpbmNsdWRlIHZhbGlkIGxheWVyc1xuICBmdW5jdGlvbiBmaWx0ZXJMYXllck9yZGVyKG9yZGVyOiBhbnlbXSk6IExheWVyT3JkZXIge1xuICAgIGNvbnN0IHJlc3VsdDogTGF5ZXJPcmRlciA9IFtdO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2Ygb3JkZXIpIHtcbiAgICAgIGlmIChpc1BsYWluT2JqZWN0KGVudHJ5KSkge1xuICAgICAgICBjb25zdCBncm91cCA9IGVudHJ5IGFzIExheWVyT3JkZXJHcm91cDtcbiAgICAgICAgY29uc3QgZmlsdGVyZWRHcm91cE9yZGVyID0gZmlsdGVyTGF5ZXJPcmRlcihncm91cC5sYXllck9yZGVyKTtcbiAgICAgICAgLy8gS2VlcCB0aGUgZ3JvdXAgZXZlbiBpZiBlbXB0eSAodXNlciBtYXkgd2FudCB0aGUgZW1wdHkgZ3JvdXApXG4gICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAuLi5ncm91cCxcbiAgICAgICAgICBsYXllck9yZGVyOiBmaWx0ZXJlZEdyb3VwT3JkZXJcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycgJiYgdmFsaWRMYXllcklkcy5oYXMoZW50cnkpKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGVudHJ5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGNvbnN0IHJlc3RvcmVkTGF5ZXJPcmRlciA9IGZpbHRlckxheWVyT3JkZXIoc2F2ZWRMYXllck9yZGVyKTtcblxuICAvLyBGaW5kIGFueSBsYXllcnMgaW4gdGhlIGN1cnJlbnQgc3RhdGUgdGhhdCBhcmVuJ3QgaW4gdGhlIHJlc3RvcmVkIG9yZGVyXG4gIC8vIChjb3VsZCBoYXBwZW4gaWYgbGF5ZXJzIHdlcmUgYWRkZWQgYmV0d2VlbiBzYXZlIGFuZCBsb2FkKVxuICBjb25zdCBsYXllcklkc0luUmVzdG9yZWQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgZnVuY3Rpb24gY29sbGVjdElkcyhvcmRlcjogYW55W10pIHtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIG9yZGVyKSB7XG4gICAgICBpZiAoaXNQbGFpbk9iamVjdChlbnRyeSkpIHtcbiAgICAgICAgY29sbGVjdElkcygoZW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwKS5sYXllck9yZGVyKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICBsYXllcklkc0luUmVzdG9yZWQuYWRkKGVudHJ5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29sbGVjdElkcyhyZXN0b3JlZExheWVyT3JkZXIpO1xuXG4gIC8vIEFkZCBhbnkgbWlzc2luZyBsYXllcnMgYXQgdGhlIHRvcFxuICBjb25zdCBtaXNzaW5nTGF5ZXJzID0gc3RhdGUubGF5ZXJzLmZpbHRlcihsID0+ICFsYXllcklkc0luUmVzdG9yZWQuaGFzKGwuaWQpKS5tYXAobCA9PiBsLmlkKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyT3JkZXI6IFsuLi5taXNzaW5nTGF5ZXJzLCAuLi5yZXN0b3JlZExheWVyT3JkZXJdLFxuICAgIGxheWVyT3JkZXJUb0JlTWVyZ2VkOiBudWxsXG4gIH07XG59XG5cbi8qKlxuICogTWVyZ2UgaW50ZXJhY3Rpb25zIHdpdGggc2F2ZWQgY29uZmlnXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VJbnRlcmFjdGlvbnM8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGludGVyYWN0aW9uVG9CZU1lcmdlZDogUGFydGlhbDxTYXZlZEludGVyYWN0aW9uQ29uZmlnPiB8IHVuZGVmaW5lZFxuKTogUyB7XG4gIGNvbnN0IG1lcmdlZDogTmVzdGVkUGFydGlhbDxTYXZlZEludGVyYWN0aW9uQ29uZmlnPiA9IHt9O1xuICBjb25zdCB1bm1lcmdlZDogUGFydGlhbDxTYXZlZEludGVyYWN0aW9uQ29uZmlnPiA9IHt9O1xuXG4gIGlmIChpbnRlcmFjdGlvblRvQmVNZXJnZWQpIHtcbiAgICAoT2JqZWN0LmtleXMoaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkKSBhcyBBcnJheTxrZXlvZiBTYXZlZEludGVyYWN0aW9uQ29uZmlnPikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKCFzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZ1trZXldKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY3VycmVudENvbmZpZyA9XG4gICAgICAgIGtleSA9PT0gJ3Rvb2x0aXAnIHx8XG4gICAgICAgIGtleSA9PT0gJ2JydXNoJyB8fFxuICAgICAgICBrZXkgPT09ICdnZW9jb2RlcicgfHxcbiAgICAgICAga2V5ID09PSAnbGVnZW5kJyB8fFxuICAgICAgICBrZXkgPT09ICd6b29tT3BhY2l0eSdcbiAgICAgICAgICA/IHN0YXRlLmludGVyYWN0aW9uQ29uZmlnW2tleV0uY29uZmlnXG4gICAgICAgICAgOiBudWxsO1xuXG4gICAgICBjb25zdCB7ZW5hYmxlZCwgLi4uY29uZmlnU2F2ZWR9ID0gaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkW2tleV0gfHwge307XG5cbiAgICAgIGxldCBjb25maWdUb01lcmdlID0gY29uZmlnU2F2ZWQ7XG5cbiAgICAgIGlmIChrZXkgPT09ICd0b29sdGlwJykge1xuICAgICAgICBjb25zdCBzYXZlZFRvb2x0aXBDb25maWcgPSBjb25maWdTYXZlZCBhcyBTYXZlZEludGVyYWN0aW9uQ29uZmlnWyd0b29sdGlwJ107XG4gICAgICAgIGNvbnN0IHttZXJnZWRUb29sdGlwLCB1bm1lcmdlZFRvb2x0aXB9ID0gbWVyZ2VJbnRlcmFjdGlvblRvb2x0aXBDb25maWcoXG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgc2F2ZWRUb29sdGlwQ29uZmlnXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gbWVyZ2UgbmV3IGRhdGFzZXQgdG9vbHRpcHMgd2l0aCBvcmlnaW5hbCBkYXRhc2V0IHRvb2x0aXBzXG4gICAgICAgIGNvbmZpZ1RvTWVyZ2UgPSB7XG4gICAgICAgICAgZmllbGRzVG9TaG93OiB7XG4gICAgICAgICAgICAuLi4oY3VycmVudENvbmZpZyBhcyBUb29sdGlwSW5mb1snY29uZmlnJ10pLmZpZWxkc1RvU2hvdyxcbiAgICAgICAgICAgIC4uLm1lcmdlZFRvb2x0aXBcbiAgICAgICAgICB9LFxuICAgICAgICAgIC4uLihzYXZlZFRvb2x0aXBDb25maWcudGltZXpvbmUgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB7dGltZXpvbmU6IHNhdmVkVG9vbHRpcENvbmZpZy50aW1lem9uZX1cbiAgICAgICAgICAgIDoge30pXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHVubWVyZ2VkVG9vbHRpcCkubGVuZ3RoKSB7XG4gICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgIHVubWVyZ2VkLnRvb2x0aXAgPSB7ZmllbGRzVG9TaG93OiB1bm1lcmdlZFRvb2x0aXAsIGVuYWJsZWQ6IEJvb2xlYW4oZW5hYmxlZCl9O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG1lcmdlZFtrZXldID0ge1xuICAgICAgICAuLi5zdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZ1trZXldLFxuICAgICAgICBlbmFibGVkOiBCb29sZWFuKGVuYWJsZWQpLFxuICAgICAgICAuLi4oY3VycmVudENvbmZpZ1xuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBjb25maWc6IHBpY2soXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgLi4uY3VycmVudENvbmZpZyxcbiAgICAgICAgICAgICAgICAgIC4uLmNvbmZpZ1RvTWVyZ2VcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGN1cnJlbnRDb25maWcpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHt9KVxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBpbnRlcmFjdGlvbkNvbmZpZzoge1xuICAgICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICAuLi5tZXJnZWRcbiAgICB9LFxuICAgIGludGVyYWN0aW9uVG9CZU1lcmdlZDogc2F2ZWRVbm1lcmdlZEludGVyYWN0aW9uKHN0YXRlLCB1bm1lcmdlZClcbiAgfTtcbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuZnVuY3Rpb24gY29tYmluZUludGVyYWN0aW9uQ29uZmlncyhjb25maWdzOiBTYXZlZEludGVyYWN0aW9uQ29uZmlnW10pOiBTYXZlZEludGVyYWN0aW9uQ29uZmlnIHtcbiAgY29uc3QgY29tYmluZWQgPSB7Li4uY29uZmlnc1swXX07XG4gIC8vIGBsZWdlbmRgIGlzIG9wdGlvbmFsIG9uIG9sZGVyIHNhdmVkIG1hcHM7IHNlZWQgaXQgc28gYSBsYXRlciBjb25maWcgaXMgbm90IGRyb3BwZWQuXG4gIGlmICghY29tYmluZWQubGVnZW5kKSB7XG4gICAgY29uc3Qgd2l0aExlZ2VuZCA9IGNvbmZpZ3MuZmluZChjID0+IGMubGVnZW5kKTtcbiAgICBpZiAod2l0aExlZ2VuZD8ubGVnZW5kKSB7XG4gICAgICBjb21iaW5lZC5sZWdlbmQgPSB3aXRoTGVnZW5kLmxlZ2VuZDtcbiAgICB9XG4gIH1cbiAgLy8gU2FtZSBmb3IgZmFkZS1vbi16b29tOiBhbiBvbGRlciBjb25maWcgaW4gZnJvbnQgbXVzdCBub3QgZHJvcCBjb250cm9sbGVycyBmcm9tIGEgbGF0ZXIgb25lLlxuICBpZiAoIWNvbWJpbmVkLnpvb21PcGFjaXR5KSB7XG4gICAgY29uc3Qgd2l0aFpvb21PcGFjaXR5ID0gY29uZmlncy5maW5kKGMgPT4gYy56b29tT3BhY2l0eSk7XG4gICAgaWYgKHdpdGhab29tT3BhY2l0eT8uem9vbU9wYWNpdHkpIHtcbiAgICAgIGNvbWJpbmVkLnpvb21PcGFjaXR5ID0gd2l0aFpvb21PcGFjaXR5Lnpvb21PcGFjaXR5O1xuICAgIH1cbiAgfVxuICAvLyBoYW5kbGUgZWFjaCBwcm9wZXJ0eSBrZXkgb2YgYW4gYEludGVyYWN0aW9uQ29uZmlnYCwgZS5nLiB0b29sdGlwLCBnZW9jb2RlciwgYnJ1c2gsIGNvb3JkaW5hdGVcbiAgLy8gYnkgY29tYmluaW5nIHZhbHVlcyBmb3IgZWFjaCBhbW9uZyBhbGwgcGFzc2VkIGluIGNvbmZpZ3NcblxuICBmb3IgKGNvbnN0IGtleSBpbiBjb21iaW5lZCkge1xuICAgIGNvbnN0IHRvQmVDb21iaW5lZFByb3BzID0gY29uZmlncy5tYXAoYyA9PiBjW2tleV0pO1xuXG4gICAgLy8gYWxsIG9mIHRoZXNlIGhhdmUgYW4gZW5hYmxlZCBib29sZWFuXG4gICAgY29tYmluZWRba2V5XSA9IHtcbiAgICAgIC8vIGFyZSBhbnkgb2YgdGhlIGNvbmZpZ3MnIGVuYWJsZWQgdmFsdWVzIHRydWU/XG4gICAgICBlbmFibGVkOiB0b0JlQ29tYmluZWRQcm9wcy5zb21lKHAgPT4gcD8uZW5hYmxlZClcbiAgICB9O1xuXG4gICAgaWYgKGtleSA9PT0gJ3Rvb2x0aXAnKSB7XG4gICAgICAvLyBhcmUgYW55IG9mIHRoZSBjb25maWdzJyBjb21wYXJlTW9kZSB2YWx1ZXMgdHJ1ZT9cbiAgICAgIGNvbWJpbmVkW2tleV0uY29tcGFyZU1vZGUgPSB0b0JlQ29tYmluZWRQcm9wcy5zb21lKHAgPT4gcD8uY29tcGFyZU1vZGUpO1xuXG4gICAgICAvLyByZXR1cm4gdGhlIGNvbXBhcmUgdHlwZSBtb2RlLCBpdCB3aWxsIGJlIGVpdGhlciBhYnNvbHV0ZSBvciByZWxhdGl2ZVxuICAgICAgY29tYmluZWRba2V5XS5jb21wYXJlVHlwZSA9IGdldFZhbHVlV2l0aEhpZ2hlc3RPY2N1cnJlbmNlKFxuICAgICAgICB0b0JlQ29tYmluZWRQcm9wcy5tYXAocCA9PiBwLmNvbXBhcmVUeXBlKVxuICAgICAgKTtcblxuICAgICAgY29uc3QgaGFzVGltZXpvbmUgPSB0b0JlQ29tYmluZWRQcm9wcy5zb21lKHAgPT4gcD8udGltZXpvbmUgIT09IHVuZGVmaW5lZCk7XG4gICAgICBpZiAoaGFzVGltZXpvbmUpIHtcbiAgICAgICAgY29tYmluZWRba2V5XS50aW1lem9uZSA9IGdldFZhbHVlV2l0aEhpZ2hlc3RPY2N1cnJlbmNlKFxuICAgICAgICAgIHRvQmVDb21iaW5lZFByb3BzLm1hcChwID0+IHA/LnRpbWV6b25lKVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBjb21iaW5lIGZpZWxkc1RvU2hvdyBhbW9uZyBhbGwgZGF0YXNldCBpZHNcbiAgICAgIGNvbWJpbmVkW2tleV0uZmllbGRzVG9TaG93ID0gdG9CZUNvbWJpbmVkUHJvcHNcbiAgICAgICAgLm1hcChwID0+IHAuZmllbGRzVG9TaG93KVxuICAgICAgICAucmVkdWNlKChhY2MsIG5leHRGaWVsZHNUb1Nob3cpID0+IHtcbiAgICAgICAgICBmb3IgKGNvbnN0IG5leHREYXRhSWRLZXkgaW4gbmV4dEZpZWxkc1RvU2hvdykge1xuICAgICAgICAgICAgY29uc3QgbmV4dFRvb2x0aXBGaWVsZHMgPSBuZXh0RmllbGRzVG9TaG93W25leHREYXRhSWRLZXldO1xuICAgICAgICAgICAgaWYgKCFhY2NbbmV4dERhdGFJZEtleV0pIHtcbiAgICAgICAgICAgICAgLy8gaWYgdGhlIGRhdGFzZXQgaWQgaXMgbm90IHByZXNlbnQgaW4gdGhlIGFjY3VtdWxhdG9yXG4gICAgICAgICAgICAgIC8vIHRoZW4gYWRkIGl0IHdpdGggaXRzIHRvb2x0aXAgZmllbGRzXG4gICAgICAgICAgICAgIGFjY1tuZXh0RGF0YUlkS2V5XSA9IG5leHRUb29sdGlwRmllbGRzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIHRoZSBkYXRhc2V0IGlkIGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgYWNjdW11bGF0b3JcbiAgICAgICAgICAgICAgLy8gc28gb25seSBhZGQgdGhlIG5leHQgdG9vbHRpcCBmaWVsZHMgZm9yIHRoaXMgZGF0YXNldCdzIGFycmF5IGlmIHRoZXkgYXJlIG5vdCBhbHJlYWR5IHByZXNlbnQsXG4gICAgICAgICAgICAgIC8vIHVzaW5nIHRoZSB0b29sdGlwRmllbGQubmFtZSBwcm9wZXJ0eSBmb3IgdW5pcXVlbmVzc1xuICAgICAgICAgICAgICBuZXh0VG9vbHRpcEZpZWxkcy5mb3JFYWNoKG5leHRURiA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFhY2NbbmV4dERhdGFJZEtleV0uZmluZCgoe25hbWV9KSA9PiBuZXh0VEYubmFtZSA9PT0gbmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgIGFjY1tuZXh0RGF0YUlkS2V5XS5wdXNoKG5leHRURik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSwge30pO1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdicnVzaCcpIHtcbiAgICAgIC8vIGtlZXAgdGhlIGJpZ2dlc3QgYnJ1c2ggc2l6ZVxuICAgICAgY29tYmluZWRba2V5XS5zaXplID1cbiAgICAgICAgYWdncmVnYXRlKHRvQmVDb21iaW5lZFByb3BzLCBBR0dSRUdBVElPTl9UWVBFUy5tYXhpbXVtLCBwID0+IHAuc2l6ZSkgPz8gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnZ2VvY29kZXInKSB7XG4gICAgICBjb21iaW5lZFtrZXldLmxpbWl0U2VhcmNoID0gdG9CZUNvbWJpbmVkUHJvcHMuc29tZShwID0+IHA/LmxpbWl0U2VhcmNoKTtcbiAgICAgIGNvbnN0IGNvbG9yID0gdG9CZUNvbWJpbmVkUHJvcHMuZmluZChwID0+IHA/LmNvbG9yKT8uY29sb3I7XG4gICAgICBpZiAoY29sb3IpIHtcbiAgICAgICAgY29tYmluZWRba2V5XS5jb2xvciA9IGNvbG9yO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdsZWdlbmQnKSB7XG4gICAgICBjb21iaW5lZFtrZXldLmhpZGVJbnZpc2libGVMYXllcnMgPSB0b0JlQ29tYmluZWRQcm9wcy5zb21lKHAgPT4gcD8uaGlkZUludmlzaWJsZUxheWVycyk7XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ3pvb21PcGFjaXR5JyAmJiBjb21iaW5lZC56b29tT3BhY2l0eSkge1xuICAgICAgY29tYmluZWQuem9vbU9wYWNpdHkuY29udHJvbGxlcnMgPSBjb21iaW5lWm9vbU9wYWNpdHlDb250cm9sbGVycyh0b0JlQ29tYmluZWRQcm9wcyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvbWJpbmVkO1xufVxuXG5mdW5jdGlvbiBzYXZlZFVubWVyZ2VkSW50ZXJhY3Rpb248UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIHVubWVyZ2VkOiBQYXJ0aWFsPFNhdmVkSW50ZXJhY3Rpb25Db25maWc+XG4pIHtcbiAgaWYgKCF1bm1lcmdlZD8udG9vbHRpcD8uZmllbGRzVG9TaG93KSB7XG4gICAgcmV0dXJuIHN0YXRlLmludGVyYWN0aW9uVG9CZU1lcmdlZDtcbiAgfVxuICByZXR1cm4ge1xuICAgIHRvb2x0aXA6IHtcbiAgICAgIC4uLnN0YXRlLmludGVyYWN0aW9uVG9CZU1lcmdlZC50b29sdGlwLFxuICAgICAgLi4uKHR5cGVvZiB1bm1lcmdlZD8udG9vbHRpcD8uZW5hYmxlZCA9PT0gJ2Jvb2xlYW4nXG4gICAgICAgID8ge2VuYWJsZWQ6IHVubWVyZ2VkLnRvb2x0aXAuZW5hYmxlZH1cbiAgICAgICAgOiB7fSksXG4gICAgICBmaWVsZHNUb1Nob3c6IHtcbiAgICAgICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkPy50b29sdGlwPy5maWVsZHNUb1Nob3csXG4gICAgICAgIC4uLnVubWVyZ2VkPy50b29sdGlwPy5maWVsZHNUb1Nob3dcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VJbnRlcmFjdGlvbkRhdGFzZXRJZHMoaW50ZXJhY3Rpb25Db25maWcsIGRhdGFJZDogc3RyaW5nLCBkYXRhSWRUb1JlcGxhY2U6IHN0cmluZykge1xuICBpZiAoaW50ZXJhY3Rpb25Db25maWc/LnRvb2x0aXA/LmZpZWxkc1RvU2hvd1tkYXRhSWRdKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgdG9vbHRpcDoge1xuICAgICAgICAuLi5pbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwLFxuICAgICAgICBmaWVsZHNUb1Nob3c6IHtcbiAgICAgICAgICBbZGF0YUlkVG9SZXBsYWNlXTogaW50ZXJhY3Rpb25Db25maWc/LnRvb2x0aXA/LmZpZWxkc1RvU2hvd1tkYXRhSWRdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIE1lcmdlIHNwbGl0TWFwcyBjb25maWcgd2l0aCBjdXJyZW50IHZpc1N0ZXRlLlxuICogUGFuZWxzIGFyZSBtYXRjaGVkIGJ5IGluZGV4OiBpbmRleCBpIG9mIGBzcGxpdE1hcHNgLCBgc3RhdGUuc3BsaXRNYXBzYCBhbmRcbiAqIGBzdGF0ZS5zcGxpdE1hcHNUb0JlTWVyZ2VkYCBpcyB0aGUgc2FtZSBtYXAgcGFuZWwuXG4gKiAxLiBpZiBjdXJyZW50IG1hcCBpcyBzcGxpdCwgYnV0IHNwbGl0TWFwIERPRVNOT1QgY29udGFpbiBtYXBzXG4gKiAgICA6IGRvbid0IG1lcmdlIGFueXRoaW5nXG4gKiAyLiBpZiBjdXJyZW50IG1hcCBpcyBOT1Qgc3BsaXQsIGJ1dCBzcGxpdE1hcHMgY29udGFpbiBtYXBzXG4gKiAgICA6IGFkZCB0byBzcGxpdE1hcHMsIGFuZCBhZGQgY3VycmVudCBsYXllcnMgdG8gc3BsaXRNYXBzLlxuICogICAgICBQYW5lbHMgYXJlIGNyZWF0ZWQgb25jZSBvbmUgb2YgdGhlbSBjYW4gYmUgbWVyZ2VkOiBpdCBoYXMgbm8gbGF5ZXJzLCBvciBvbmUgb2YgaXRzIGxheWVycyBleGlzdHNcbiAqIDMuIGxheWVycyB0aGF0IGRvbid0IGV4aXN0IHlldFxuICogICAgOiBzYXZlIHRvIHNwbGl0TWFwc1RvQmVNZXJnZWQsIGluIHRoZSBwYW5lbCBhdCB0aGUgc2FtZSBpbmRleFxuICogQSBsYXllciBsaXN0ZWQgaW4gc3BsaXRNYXBzIG9ubHkgc2hvd3MgaW4gdGhlIHBhbmVscyB0aGF0IGxpc3QgaXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZVNwbGl0TWFwczxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgc3BsaXRNYXBzOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydzcGxpdE1hcHMnXSA9IFtdXG4pOiBTIHtcbiAgY29uc3QgbGF5ZXJFeGlzdHMgPSAoaWQ6IHN0cmluZykgPT4gc3RhdGUubGF5ZXJzLnNvbWUobCA9PiBsLmlkID09PSBpZCk7XG4gIGNvbnN0IGNyZWF0ZVBhbmVscyA9XG4gICAgc3RhdGUuc3BsaXRNYXBzLmxlbmd0aCA+IDAgfHxcbiAgICBzcGxpdE1hcHMuc29tZShzbSA9PiB7XG4gICAgICBjb25zdCBpZHMgPSBPYmplY3Qua2V5cyhzbS5sYXllcnMpO1xuICAgICAgcmV0dXJuICFpZHMubGVuZ3RoIHx8IGlkcy5zb21lKGxheWVyRXhpc3RzKTtcbiAgICB9KTtcbiAgY29uc3QgY3VycmVudExheWVycyA9IGdldEluaXRpYWxNYXBMYXllcnNGb3JTcGxpdE1hcChcbiAgICBzdGF0ZS5sYXllcnMuZmlsdGVyKGwgPT4gIXNwbGl0TWFwcy5zb21lKHNtID0+IGwuaWQgaW4gc20ubGF5ZXJzKSlcbiAgKTtcblxuICBjb25zdCBtZXJnZWQgPSBbLi4uc3RhdGUuc3BsaXRNYXBzXTtcbiAgY29uc3QgdW5tZXJnZWQ6IHR5cGVvZiBzcGxpdE1hcHMgPSBbXTtcbiAgc3BsaXRNYXBzLmZvckVhY2goKHNtLCBpKSA9PiB7XG4gICAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHNtLmxheWVycyk7XG4gICAgaWYgKGNyZWF0ZVBhbmVscykge1xuICAgICAgLy8gY3JlYXRlIG1hcCBwYW5lbCBpZiBjdXJyZW50IG1hcCBpcyBub3Qgc3BsaXQsIGtlZXAgaWRcbiAgICAgIGNvbnN0IHBhbmVsID0gbWVyZ2VkW2ldIHx8IHsuLi5zbSwgbGF5ZXJzOiBjdXJyZW50TGF5ZXJzfTtcbiAgICAgIG1lcmdlZFtpXSA9IHtcbiAgICAgICAgLi4ucGFuZWwsXG4gICAgICAgIGxheWVyczogey4uLnBhbmVsLmxheWVycywgLi4uT2JqZWN0LmZyb21FbnRyaWVzKGVudHJpZXMuZmlsdGVyKChbaWRdKSA9PiBsYXllckV4aXN0cyhpZCkpKX1cbiAgICAgIH07XG4gICAgfVxuICAgIHVubWVyZ2VkW2ldID0gey4uLnNtLCBsYXllcnM6IE9iamVjdC5mcm9tRW50cmllcyhlbnRyaWVzLmZpbHRlcigoW2lkXSkgPT4gIWxheWVyRXhpc3RzKGlkKSkpfTtcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBzcGxpdE1hcHM6IG1lcmdlZCxcbiAgICBzcGxpdE1hcHNUb0JlTWVyZ2VkOiB1bm1lcmdlZC5zb21lKHNtID0+IE9iamVjdC5rZXlzKHNtLmxheWVycykubGVuZ3RoKVxuICAgICAgPyBjb21iaW5lU3BsaXRNYXBzQnlJbmRleChzdGF0ZS5zcGxpdE1hcHNUb0JlTWVyZ2VkLCB1bm1lcmdlZClcbiAgICAgIDogc3RhdGUuc3BsaXRNYXBzVG9CZU1lcmdlZFxuICB9O1xufVxuXG4vKipcbiAqIE1lcmdlIGNoYXJ0cyB3aXRoIHNhdmVkIGNvbmZpZy4gQ2hhcnRzIHdob3NlIGRhdGFzZXQgaXMgbm90IGxvYWRlZCB5ZXQgYXJlXG4gKiBwYXJrZWQgb24gYGNoYXJ0c1RvQmVNZXJnZWRgIChzYW1lIGFzIGZpbHRlcnMpIHNvIGRhdGFzZXQgcmVwbGFjZSBjYW4gcmVtYXBcbiAqIGBkYXRhSWRgIGFuZCByZXN0b3JlIHRoZW0gYWZ0ZXIgdGhlIG5ldyB0YWJsZSBsYW5kcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlQ2hhcnRzPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBjaGFydHM6IENoYXJ0Q29uZmlnW10gfCB1bmRlZmluZWQsXG4gIGZyb21Db25maWc/OiBib29sZWFuXG4pOiBTIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGNoYXJ0cykgfHwgIWNoYXJ0cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgaW5jb21pbmdJZHMgPSBuZXcgU2V0KFxuICAgIGNoYXJ0cy5tYXAoY2hhcnQgPT4gY2hhcnQ/LmlkKS5maWx0ZXIoKGlkKTogaWQgaXMgc3RyaW5nID0+IEJvb2xlYW4oaWQpKVxuICApO1xuICBjb25zdCBleGlzdGluZ0lkcyA9IG5ldyBTZXQoKHN0YXRlLmNoYXJ0cyB8fCBbXSkubWFwKGNoYXJ0ID0+IGNoYXJ0LmlkKSk7XG4gIGNvbnN0IG5leHRDaGFydHM6IENoYXJ0Q29uZmlnW10gPSBbXTtcbiAgY29uc3QgZmFpbGVkOiBDaGFydENvbmZpZ1tdID0gW107XG4gIGNoYXJ0cy5mb3JFYWNoKGNoYXJ0ID0+IHtcbiAgICBpZiAoIWNoYXJ0IHx8ICFjaGFydC5pZCB8fCBleGlzdGluZ0lkcy5oYXMoY2hhcnQuaWQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG5vcm1hbGl6ZWQ6IENoYXJ0Q29uZmlnID0gZnJvbUNvbmZpZ1xuICAgICAgPyB7XG4gICAgICAgICAgLi4uY2hhcnQsXG4gICAgICAgICAgLy8gT2xkZXIgY29uZmlncyBvbWl0IGBwaW5uZWRgOyBrZWVwIGNoYXJ0cyB2aXNpYmxlIGxpa2UgdGhlIGxlZ2VuZC5cbiAgICAgICAgICBwaW5uZWQ6IGNoYXJ0LnBpbm5lZCAhPT0gZmFsc2UsXG4gICAgICAgICAgZGlzcGxheToge1xuICAgICAgICAgICAgLi4uY2hhcnQuZGlzcGxheSxcbiAgICAgICAgICAgIGlzQ29uZmlnQWN0aXZlOiBmYWxzZSxcbiAgICAgICAgICAgIGlzSnNvbkVkaXRvckFjdGl2ZTogZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIDogY2hhcnQ7XG4gICAgaWYgKFxuICAgICAgbm9ybWFsaXplZC5kYXRhSWQgJiZcbiAgICAgICghc3RhdGUuZGF0YXNldHNbbm9ybWFsaXplZC5kYXRhSWRdIHx8IHN0YXRlLmlzTWVyZ2luZ0RhdGFzZXRzW25vcm1hbGl6ZWQuZGF0YUlkXSlcbiAgICApIHtcbiAgICAgIGZhaWxlZC5wdXNoKG5vcm1hbGl6ZWQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBleGlzdGluZ0lkcy5hZGQobm9ybWFsaXplZC5pZCk7XG4gICAgbmV4dENoYXJ0cy5wdXNoKG5vcm1hbGl6ZWQpO1xuICB9KTtcbiAgaWYgKCFuZXh0Q2hhcnRzLmxlbmd0aCAmJiAhZmFpbGVkLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGNoYXJ0czogbmV4dENoYXJ0cy5sZW5ndGggPyBbLi4uKHN0YXRlLmNoYXJ0cyB8fCBbXSksIC4uLm5leHRDaGFydHNdIDogc3RhdGUuY2hhcnRzLFxuICAgIGNoYXJ0c1RvQmVNZXJnZWQ6IFtcbiAgICAgIC4uLihzdGF0ZS5jaGFydHNUb0JlTWVyZ2VkIHx8IFtdKS5maWx0ZXIoY2hhcnQgPT4gIWluY29taW5nSWRzLmhhcyhjaGFydC5pZCkpLFxuICAgICAgLi4uZmFpbGVkXG4gICAgXVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUNoYXJ0RGF0YXNldElkcyhcbiAgc2F2ZWRDaGFydHM6IENoYXJ0Q29uZmlnW10gfCB1bmRlZmluZWQsXG4gIGRhdGFJZDogc3RyaW5nLFxuICBkYXRhSWRUb1VzZTogc3RyaW5nXG4pOiBDaGFydENvbmZpZ1tdIHwgbnVsbCB7XG4gIGlmICghQXJyYXkuaXNBcnJheShzYXZlZENoYXJ0cykgfHwgIXNhdmVkQ2hhcnRzLmxlbmd0aCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHJlcGxhY2VkID0gc2F2ZWRDaGFydHNcbiAgICAuZmlsdGVyKGNoYXJ0ID0+IGNoYXJ0Py5kYXRhSWQgPT09IGRhdGFJZClcbiAgICAubWFwKGNoYXJ0ID0+ICh7Li4uY2hhcnQsIGRhdGFJZDogZGF0YUlkVG9Vc2V9KSk7XG4gIHJldHVybiByZXBsYWNlZC5sZW5ndGggPyByZXBsYWNlZCA6IG51bGw7XG59XG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VFZmZlY3RzPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBlZmZlY3RzOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydlZmZlY3RzJ10sXG4gIGZyb21Db25maWc/OiBib29sZWFuXG4pOiBTIHtcbiAgY29uc3QgbmV3RWZmZWN0cyA9IFtcbiAgICAuLi5zdGF0ZS5lZmZlY3RzLFxuICAgIC4uLihlZmZlY3RzIHx8IFtdKVxuICAgICAgLm1hcChlZmZlY3QgPT4ge1xuICAgICAgICByZXR1cm4gZnJvbUNvbmZpZ1xuICAgICAgICAgID8gY3JlYXRlRWZmZWN0KFxuICAgICAgICAgICAgICBkZWVwbWVyZ2UuYWxsKFtcbiAgICAgICAgICAgICAgICBlZmZlY3QsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgLy8gY29sbGFwc2UgYWxsIHBhbmVscyB3aGVuIGxvYWRpbmcgZWZmZWN0c1xuICAgICAgICAgICAgICAgICAgaXNDb25maWdBY3RpdmU6IGZhbHNlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogKGVmZmVjdCBhcyBFZmZlY3RUeXBlKTtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKGVmZmVjdCA9PiB7XG4gICAgICAgIHJldHVybiBCb29sZWFuKGVmZmVjdCAmJiBlZmZlY3QuaXNWYWxpZFRvU2F2ZSgpKTtcbiAgICAgIH0pXG4gIF07XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWZmZWN0czogbmV3RWZmZWN0cyxcbiAgICBlZmZlY3RPcmRlcjogbmV3RWZmZWN0cy5tYXAoZWZmZWN0ID0+IGVmZmVjdC5pZClcbiAgfTtcbn1cblxuLyoqXG4gKiBNZXJnZSBhbm5vdGF0aW9ucyB3aXRoIHNhdmVkIGNvbmZpZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VBbm5vdGF0aW9uczxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTLCBhbm5vdGF0aW9uczogYW55W10pOiBTIHtcbiAgaWYgKCFhbm5vdGF0aW9ucyB8fCAhYW5ub3RhdGlvbnMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IGV4aXN0aW5nSWRzID0gbmV3IFNldChzdGF0ZS5hbm5vdGF0aW9ucy5tYXAoYSA9PiBhLmlkKSk7XG4gIGNvbnN0IHZhbGlkQW5ub3RhdGlvbnMgPSBhbm5vdGF0aW9uc1xuICAgIC5maWx0ZXIoXG4gICAgICBhID0+XG4gICAgICAgIGEgJiZcbiAgICAgICAgYS5pZCAmJlxuICAgICAgICAhZXhpc3RpbmdJZHMuaGFzKGEuaWQpICYmXG4gICAgICAgIGlzQW5ub3RhdGlvbktpbmQoYS5raW5kKSAmJlxuICAgICAgICBBcnJheS5pc0FycmF5KGEuYW5jaG9yUG9pbnQpICYmXG4gICAgICAgIChhLmFuY2hvclBvaW50Lmxlbmd0aCA9PT0gMiB8fCBhLmFuY2hvclBvaW50Lmxlbmd0aCA9PT0gMykgJiZcbiAgICAgICAgYS5hbmNob3JQb2ludC5ldmVyeSh2YWx1ZSA9PiBOdW1iZXIuaXNGaW5pdGUodmFsdWUpKVxuICAgIClcbiAgICAubWFwKGEgPT4gKHtcbiAgICAgIGlzVmlzaWJsZTogdHJ1ZSxcbiAgICAgIGF1dG9TaXplOiB0cnVlLFxuICAgICAgYXV0b1NpemVZOiB0cnVlLFxuICAgICAgbGFiZWw6ICcnLFxuICAgICAgbGluZUNvbG9yOiBJTklUSUFMX0FOTk9UQVRJT05fTElORV9DT0xPUixcbiAgICAgIGxpbmVXaWR0aDogSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEgsXG4gICAgICB0ZXh0V2lkdGg6IDAsXG4gICAgICB0ZXh0SGVpZ2h0OiAwLFxuICAgICAgLi4uYVxuICAgIH0pKTtcbiAgaWYgKCF2YWxpZEFubm90YXRpb25zLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFubm90YXRpb25zOiBbLi4uc3RhdGUuYW5ub3RhdGlvbnMsIC4uLnZhbGlkQW5ub3RhdGlvbnNdXG4gIH07XG59XG5cbi8qKlxuICogTWVyZ2UgaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcCB3aXRoIHNhdmVkIGNvbmZpZyxcbiAqIHZhbGlkYXRlIGZpZWxkc1RvU2hvd1xuICpcbiAqIEBwYXJhbSBzdGF0ZVxuICogQHBhcmFtIHRvb2x0aXBDb25maWdcbiAqIEByZXR1cm4gLSB7bWVyZ2VkVG9vbHRpcDoge30sIHVubWVyZ2VkVG9vbHRpcDoge319XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUludGVyYWN0aW9uVG9vbHRpcENvbmZpZyhcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB0b29sdGlwQ29uZmlnOiBQaWNrPFRvb2x0aXBJbmZvWydjb25maWcnXSwgJ2ZpZWxkc1RvU2hvdyc+IHwgbnVsbCA9IG51bGxcbikge1xuICBjb25zdCB1bm1lcmdlZFRvb2x0aXA6IFRvb2x0aXBJbmZvWydjb25maWcnXVsnZmllbGRzVG9TaG93J10gPSB7fTtcbiAgY29uc3QgbWVyZ2VkVG9vbHRpcDogVG9vbHRpcEluZm9bJ2NvbmZpZyddWydmaWVsZHNUb1Nob3cnXSA9IHt9O1xuXG4gIGlmIChcbiAgICAhdG9vbHRpcENvbmZpZyB8fFxuICAgICF0b29sdGlwQ29uZmlnLmZpZWxkc1RvU2hvdyB8fFxuICAgICFPYmplY3Qua2V5cyh0b29sdGlwQ29uZmlnLmZpZWxkc1RvU2hvdykubGVuZ3RoXG4gICkge1xuICAgIHJldHVybiB7bWVyZ2VkVG9vbHRpcCwgdW5tZXJnZWRUb29sdGlwfTtcbiAgfVxuXG4gIGZvciAoY29uc3QgZGF0YUlkIGluIHRvb2x0aXBDb25maWcuZmllbGRzVG9TaG93KSB7XG4gICAgaWYgKCFzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdIHx8IHN0YXRlLmlzTWVyZ2luZ0RhdGFzZXRzW2RhdGFJZF0pIHtcbiAgICAgIC8vIGlzIG5vdCB5ZXQgbG9hZGVkXG4gICAgICB1bm1lcmdlZFRvb2x0aXBbZGF0YUlkXSA9IHRvb2x0aXBDb25maWcuZmllbGRzVG9TaG93W2RhdGFJZF07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGlmIGRhdGFzZXQgaXMgbG9hZGVkXG4gICAgICBjb25zdCBhbGxGaWVsZHMgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdLmZpZWxkcy5tYXAoZCA9PiBkLm5hbWUpO1xuICAgICAgY29uc3QgZm91bmRGaWVsZHNUb1Nob3cgPSB0b29sdGlwQ29uZmlnLmZpZWxkc1RvU2hvd1tkYXRhSWRdLmZpbHRlcihmaWVsZCA9PlxuICAgICAgICBhbGxGaWVsZHMuaW5jbHVkZXMoZmllbGQubmFtZSlcbiAgICAgICk7XG5cbiAgICAgIG1lcmdlZFRvb2x0aXBbZGF0YUlkXSA9IGZvdW5kRmllbGRzVG9TaG93O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7bWVyZ2VkVG9vbHRpcCwgdW5tZXJnZWRUb29sdGlwfTtcbn1cbi8qKlxuICogTWVyZ2UgbGF5ZXJCbGVuZGluZyB3aXRoIHNhdmVkXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VMYXllckJsZW5kaW5nPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBsYXllckJsZW5kaW5nOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydsYXllckJsZW5kaW5nJ11cbik6IFMge1xuICBpZiAobGF5ZXJCbGVuZGluZyAmJiBMQVlFUl9CTEVORElOR1NbbGF5ZXJCbGVuZGluZ10pIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBsYXllckJsZW5kaW5nXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBDb21iaW5lcyBtdWx0aXBsZSBsYXllciBibGVuZGluZyBjb25maWdzIGludG8gYSBzaW5nbGUgc3RyaW5nXG4gKiBieSByZXR1cm5pbmcgdGhlIG9uZSB3aXRoIHRoZSBoaWdoZXN0IG9jY3VycmVuY2VcbiAqL1xuZnVuY3Rpb24gY29tYmluZUxheWVyQmxlbmRpbmdDb25maWdzKGNvbmZpZ3M6IHN0cmluZ1tdKTogc3RyaW5nIHwgbnVsbCB7XG4gIC8vIHJldHVybiB0aGUgbW9kZSBvZiB0aGUgbGF5ZXIgYmxlbmRpbmcgdHlwZVxuICByZXR1cm4gZ2V0VmFsdWVXaXRoSGlnaGVzdE9jY3VycmVuY2UoY29uZmlncyk7XG59XG5cbi8qKlxuICogTWVyZ2Ugb3ZlcmxheUJsZW5kaW5nIHdpdGggc2F2ZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlT3ZlcmxheUJsZW5kaW5nPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBvdmVybGF5QmxlbmRpbmc6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ292ZXJsYXlCbGVuZGluZyddXG4pOiBTIHtcbiAgaWYgKG92ZXJsYXlCbGVuZGluZyAmJiBPVkVSTEFZX0JMRU5ESU5HU1tvdmVybGF5QmxlbmRpbmddKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgb3ZlcmxheUJsZW5kaW5nXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBDb21iaW5lcyBtdWx0aXBsZSBvdmVybGF5IGJsZW5kaW5nIGNvbmZpZ3MgaW50byBhIHNpbmdsZSBzdHJpbmdcbiAqIGJ5IHJldHVybmluZyB0aGUgb25lIHdpdGggdGhlIGhpZ2hlc3Qgb2NjdXJyZW5jZVxuICoqL1xuZnVuY3Rpb24gY29tYmluZU92ZXJsYXlCbGVuZGluZ0NvbmZpZ3MoY29uZmlnczogc3RyaW5nW10pOiBzdHJpbmcgfCBudWxsIHtcbiAgLy8gcmV0dXJuIHRoZSBtb2RlIG9mIHRoZSBvdmVybGF5IGJsZW5kaW5nIHR5cGVcbiAgcmV0dXJuIGdldFZhbHVlV2l0aEhpZ2hlc3RPY2N1cnJlbmNlKGNvbmZpZ3MpO1xufVxuXG4vKipcbiAqIE1lcmdlIGFuaW1hdGlvbiBjb25maWdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlQW5pbWF0aW9uQ29uZmlnPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhbmltYXRpb246IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2FuaW1hdGlvbkNvbmZpZyddXG4pOiBTIHtcbiAgaWYgKGFuaW1hdGlvbiAmJiBhbmltYXRpb24uY3VycmVudFRpbWUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgICAuLi5hbmltYXRpb24sXG4gICAgICAgIGRvbWFpbjogbnVsbFxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbmZ1bmN0aW9uIGNvbWJpbmVBbmltYXRpb25Db25maWdzKGNvbmZpZ3M6IFNhdmVkQW5pbWF0aW9uQ29uZmlnW10pOiBTYXZlZEFuaW1hdGlvbkNvbmZpZyB7XG4gIC8vIGdldCB0aGUgc21hbGxlc3QgdmFsdWVzIG9mIGN1cnJlbnRUaW1lIGFuZCBzcGVlZCBhbW9uZyBhbGwgY29uZmlnc1xuICByZXR1cm4ge1xuICAgIGN1cnJlbnRUaW1lOiBhZ2dyZWdhdGUoY29uZmlncywgQUdHUkVHQVRJT05fVFlQRVMubWluaW11bSwgYyA9PiBjLmN1cnJlbnRUaW1lKSA/PyBudWxsLFxuICAgIHNwZWVkOiBhZ2dyZWdhdGUoY29uZmlncywgQUdHUkVHQVRJT05fVFlQRVMubWluaW11bSwgYyA9PiBjLnNwZWVkKSA/PyBudWxsLFxuICAgIC8vIGFuZCB0aGUgbW9zdCBjb21tb24gdGltZSBmb3JtYXQgYW5kIHRpbWV6b25lIGFtb25nIHRoZSBjb25maWdzIHRoYXQgc2V0IG9uZVxuICAgIHRpbWVGb3JtYXQ6IGdldFZhbHVlV2l0aEhpZ2hlc3RPY2N1cnJlbmNlKGNvbmZpZ3MubWFwKGMgPT4gYy50aW1lRm9ybWF0KSksXG4gICAgdGltZXpvbmU6IGdldFZhbHVlV2l0aEhpZ2hlc3RPY2N1cnJlbmNlKGNvbmZpZ3MubWFwKGMgPT4gYy50aW1lem9uZSkpXG4gIH07XG59XG5cbi8qKlxuICogVmFsaWRhdGUgc2F2ZWQgbGF5ZXIgY29sdW1ucyB3aXRoIG5ldyBkYXRhLFxuICogdXBkYXRlIGZpZWxkSWR4IGJhc2VkIG9uIG5ldyBmaWVsZHNcbiAqXG4gKiBAcGFyYW0gZmllbGRzXG4gKiBAcGFyYW0gc2F2ZWRDb2xzXG4gKiBAcGFyYW0gZW1wdHlDb2xzXG4gKiBAcGFyYW0gb3B0aW9uc1xuICogQHJldHVybiAtIHZhbGlkYXRlZCBjb2x1bW5zIG9yIG51bGxcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVTYXZlZExheWVyQ29sdW1ucyhcbiAgZmllbGRzOiBLZXBsZXJUYWJsZVsnZmllbGRzJ10sXG4gIHNhdmVkQ29sczoge1xuICAgIFtrZXk6IHN0cmluZ106IHN0cmluZztcbiAgfSA9IHt9LFxuICBlbXB0eUNvbHM6IExheWVyQ29sdW1ucyxcbiAgb3B0aW9uczoge3Rocm93T25FcnJvcj86IGJvb2xlYW59ID0ge31cbikge1xuICAvLyBQcmVwYXJlIGNvbHVtbnMgZm9yIHRoZSB2YWxpZGF0b3JcbiAgY29uc3QgY29sdW1uczogdHlwZW9mIGVtcHR5Q29scyA9IHt9O1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhlbXB0eUNvbHMpKSB7XG4gICAgY29sdW1uc1trZXldID0gey4uLmVtcHR5Q29sc1trZXldfTtcblxuICAgIGNvbnN0IHNhdmVkID0gc2F2ZWRDb2xzW2tleV07XG4gICAgaWYgKHNhdmVkKSB7XG4gICAgICBjb25zdCBmaWVsZElkeCA9IGZpZWxkcy5maW5kSW5kZXgoKHtuYW1lfSkgPT4gbmFtZSA9PT0gc2F2ZWQpO1xuXG4gICAgICBpZiAoZmllbGRJZHggPiAtMSkge1xuICAgICAgICAvLyB1cGRhdGUgZm91bmQgY29sdW1uc1xuICAgICAgICBjb2x1bW5zW2tleV0uZmllbGRJZHggPSBmaWVsZElkeDtcbiAgICAgICAgY29sdW1uc1trZXldLnZhbHVlID0gc2F2ZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gZmluZCBhY3R1YWwgY29sdW1uIGZpZWxkSWR4LCBpbiBjYXNlIGl0IGhhcyBjaGFuZ2VkXG4gIGNvbnN0IGFsbENvbEZvdW5kID0gT2JqZWN0LmtleXMoY29sdW1ucykuZXZlcnkoa2V5ID0+XG4gICAgdmFsaWRhdGVDb2x1bW4oY29sdW1uc1trZXldLCBjb2x1bW5zLCBmaWVsZHMpXG4gICk7XG5cbiAgY29uc3QgcnYgPSBhbGxDb2xGb3VuZCA/IGNvbHVtbnMgOiBudWxsO1xuICBpZiAob3B0aW9ucy50aHJvd09uRXJyb3IpIHtcbiAgICBjb25zdCByZXF1aXJlZENvbHVtbnMgPSBPYmplY3Qua2V5cyhlbXB0eUNvbHMpLmZpbHRlcihrID0+ICFlbXB0eUNvbHNba10ub3B0aW9uYWwpO1xuICAgIGNvbnN0IG1pc3NpbmdDb2x1bW5zID0gcmVxdWlyZWRDb2x1bW5zLmZpbHRlcihrID0+ICFjb2x1bW5zPy5ba10udmFsdWUpO1xuICAgIGlmIChtaXNzaW5nQ29sdW1ucy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTGF5ZXIgaGFzIG1pc3Npbmcgb3IgaW52YWxpZCBjb2x1bW5zOiAke21pc3NpbmdDb2x1bW5zLmpvaW4oJywgJyl9YCk7XG4gICAgfVxuICAgIGNvbnN0IGNvbmZpZ0NvbHVtbnMgPSBPYmplY3Qua2V5cyhzYXZlZENvbHMpO1xuICAgIGNvbnN0IGludmFsaWRDb2x1bW5zID0gY29uZmlnQ29sdW1ucy5maWx0ZXIoayA9PiAhY29sdW1ucz8uW2tdPy52YWx1ZSk7XG4gICAgaWYgKGludmFsaWRDb2x1bW5zLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBMYXllciBoYXMgaW52YWxpZCBjb2x1bW5zOiAke2ludmFsaWRDb2x1bW5zLmpvaW4oJywgJyl9YCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJ2O1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIGxheWVyIGNvbHVtblxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVDb2x1bW4oXG4gIGNvbHVtbjogTGF5ZXJDb2x1bW4gJiB7dmFsaWRhdG9yPzogdHlwZW9mIHZhbGlkYXRlQ29sdW1ufSxcbiAgY29sdW1uczogTGF5ZXJDb2x1bW5zLFxuICBhbGxGaWVsZHM6IEtlcGxlclRhYmxlWydmaWVsZHMnXVxuKTogYm9vbGVhbiB7XG4gIGlmIChjb2x1bW4ub3B0aW9uYWwgfHwgY29sdW1uLnZhbHVlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKGNvbHVtbi52YWxpZGF0b3IpIHtcbiAgICByZXR1cm4gY29sdW1uLnZhbGlkYXRvcihjb2x1bW4sIGNvbHVtbnMsIGFsbEZpZWxkcyk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHNhdmVkIHRleHQgbGFiZWwgY29uZmlnIHdpdGggbmV3IGRhdGFcbiAqIHJlZmVyIHRvIHZpcy1zdGF0ZS1zY2hlbWEuanMgVGV4dExhYmVsU2NoZW1hVjFcbiAqXG4gKiBAcGFyYW0ge0FycmF5PE9iamVjdD59IGZpZWxkc1xuICogQHBhcmFtIHtPYmplY3R9IHNhdmVkVGV4dExhYmVsXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICogQHJldHVybiB7T2JqZWN0fSAtIHZhbGlkYXRlZCB0ZXh0bGFiZWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU2F2ZWRUZXh0TGFiZWwoXG4gIGZpZWxkcyxcbiAgbGF5ZXJUZXh0TGFiZWxzOiBhbnlbXSxcbiAgc2F2ZWRUZXh0TGFiZWwsXG4gIG9wdGlvbnM6IHt0aHJvd09uRXJyb3I/OiBib29sZWFuOyBsYXllclR5cGU/OiBzdHJpbmcgfCBudWxsfSA9IHt9XG4pOiBhbnlbXSB7XG4gIGNvbnN0IGxheWVyVGV4dExhYmVsID0gbGF5ZXJUZXh0TGFiZWxzWzBdO1xuICBjb25zdCBzYXZlZFRleHRMYWJlbHMgPSBBcnJheS5pc0FycmF5KHNhdmVkVGV4dExhYmVsKSA/IHNhdmVkVGV4dExhYmVsIDogW3NhdmVkVGV4dExhYmVsXTtcbiAgY29uc3QgY291bnRMYWJlbExheWVyID0gQm9vbGVhbihcbiAgICBvcHRpb25zLmxheWVyVHlwZSAmJiBBR0dSRUdBVElPTl9DT1VOVF9MQVlFUl9UWVBFUy5oYXMob3B0aW9ucy5sYXllclR5cGUpXG4gICk7XG5cbiAgLy8gdmFsaWRhdGUgZmllbGRcbiAgcmV0dXJuIHNhdmVkVGV4dExhYmVscy5tYXAodGV4dExhYmVsID0+IHtcbiAgICBsZXQgZmllbGQgPSBudWxsO1xuICAgIGlmICh0ZXh0TGFiZWwuZmllbGQpIHtcbiAgICAgIC8vIENsdXN0ZXIsIGhleGJpbiwgYW5kIGdyaWQgcGVyc2lzdCBhIHN5bnRoZXRpYyBwb2ludC1jb3VudCBmaWVsZCB0aGF0XG4gICAgICAvLyBpcyBub3Qgb25lIG9mIHRoZSBkYXRhc2V0IGNvbHVtbnMuXG4gICAgICBmaWVsZCA9XG4gICAgICAgIGNvdW50TGFiZWxMYXllciAmJiB0ZXh0TGFiZWwuZmllbGQubmFtZSA9PT0gUE9JTlRfQ09VTlRfRklFTERfTkFNRVxuICAgICAgICAgID8gY3JlYXRlUG9pbnRDb3VudExhYmVsRmllbGQoKVxuICAgICAgICAgIDogZmllbGRzLmZpbmQoZmQgPT5cbiAgICAgICAgICAgICAgT2JqZWN0LmtleXModGV4dExhYmVsLmZpZWxkKS5ldmVyeShrZXkgPT4gdGV4dExhYmVsLmZpZWxkW2tleV0gPT09IGZkW2tleV0pXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIGlmIChmaWVsZCA9PT0gdW5kZWZpbmVkICYmIG9wdGlvbnMudGhyb3dPbkVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYExheWVyIGhhcyBpbnZhbGlkIHRleHQgbGFiZWwgZmllbGQ6ICR7SlNPTi5zdHJpbmdpZnkodGV4dExhYmVsLmZpZWxkKX1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gT2JqZWN0LmtleXMobGF5ZXJUZXh0TGFiZWwpLnJlZHVjZShcbiAgICAgIChhY2N1LCBrZXkpID0+ICh7XG4gICAgICAgIC4uLmFjY3UsXG4gICAgICAgIC8vIEtlZXAgZXhwbGljaXQgZmFsc2UgLyAwLiBgfHxgIHdvdWxkIHJlcGxhY2UgYSBzYXZlZCBjb2xsaXNpb25FbmFibGVkXG4gICAgICAgIC8vIG9mIGZhbHNlIHdpdGggdGhlIGFnZ3JlZ2F0aW9uIGRlZmF1bHQgb2YgdHJ1ZS5cbiAgICAgICAgW2tleV06IGtleSA9PT0gJ2ZpZWxkJyA/IGZpZWxkIDogdGV4dExhYmVsW2tleV0gPz8gbGF5ZXJUZXh0TGFiZWxba2V5XVxuICAgICAgfSksXG4gICAgICB7fVxuICAgICk7XG4gIH0pO1xufVxuXG4vKipcbiAqIE1hcHMgc2F2ZWQgYmVmb3JlIGNvdW50IGxhYmVscyBvbWl0IGB0ZXh0TGFiZWxgLiBUaG9zZSBjbHVzdGVyLCBoZXhiaW4sIGFuZFxuICogZ3JpZCBsYXllcnMgc3RheSB1bmxhYmVsZWQuIE5ldyBsYXllcnMgc3RpbGwgZ2V0IHRoZSBwb2ludC1jb3VudCBkZWZhdWx0XG4gKiBmcm9tIGBnZXREZWZhdWx0TGF5ZXJDb25maWdgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmFsbGJhY2tUZXh0TGFiZWxGb3JMb2FkZWRMYXllcihcbiAgbGF5ZXJUeXBlOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLFxuICBuZXdMYXllclRleHRMYWJlbDogYW55W11cbik6IGFueVtdIHtcbiAgaWYgKGxheWVyVHlwZSAmJiBBR0dSRUdBVElPTl9DT1VOVF9MQVlFUl9UWVBFUy5oYXMobGF5ZXJUeXBlKSkge1xuICAgIHJldHVybiBbey4uLkRFRkFVTFRfVEVYVF9MQUJFTH1dO1xuICB9XG4gIHJldHVybiBuZXdMYXllclRleHRMYWJlbDtcbn1cblxuLyoqXG4gKiBTYXZlZCB2aXN1YWwgY2hhbm5lbCBmaWVsZC9zY2FsZSBtYXkgbGl2ZSBpbiBhbnkgb2Y6XG4gKiAtIGBjb25maWdba2V5XWAgYWZ0ZXIgc2NoZW1hIHBhcnNlIChWaXN1YWxDaGFubmVsU2NoZW1hVjEgZm9sZHMgY2hhbm5lbHMgaW50byBjb25maWcpXG4gKiAtIGB2aXN1YWxDaGFubmVsc1trZXldYCBhcyBhIHNpYmxpbmcgb2YgYGNvbmZpZ2AgKHVucGFyc2VkIGFkZERhdGFUb01hcCBwYXlsb2FkKVxuICogLSBgY29uZmlnLnZpc3VhbENoYW5uZWxzW2tleV1gIChjb21tb24gbWlzdGFrZSBvZiBuZXN0aW5nIHZpc3VhbENoYW5uZWxzIGluc2lkZSBjb25maWcpXG4gKlxuICogV2l0aG91dCB0aGlzIGxvb2t1cCwgcHJvZ3JhbW1hdGljIEdlb0pTT04gc3Ryb2tlQ29sb3JGaWVsZCBuZXZlciBiaW5kcyBhbmRcbiAqIHN0cm9rZUNvbG9yRG9tYWluIHN0YXlzIGF0IHRoZSBkZWZhdWx0IGBbMCwgMV1gIChrZXBsZXIuZ2wgIzMwNjEpLlxuICovXG5mdW5jdGlvbiBnZXRTYXZlZFZpc3VhbENoYW5uZWxWYWx1ZShzYXZlZExheWVyOiBQYXJzZWRMYXllciwga2V5OiBzdHJpbmcpOiBhbnkge1xuICBjb25zdCBjb25maWcgPSBzYXZlZExheWVyLmNvbmZpZyBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkO1xuICBpZiAoY29uZmlnICYmIGNvbmZpZ1trZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gY29uZmlnW2tleV07XG4gIH1cbiAgY29uc3QgY2hhbm5lbHMgPVxuICAgIChzYXZlZExheWVyIGFzIHt2aXN1YWxDaGFubmVscz86IFJlY29yZDxzdHJpbmcsIGFueT59KS52aXN1YWxDaGFubmVscyB8fFxuICAgIChjb25maWcgJiYgY29uZmlnLnZpc3VhbENoYW5uZWxzKTtcbiAgaWYgKGNoYW5uZWxzICYmIHR5cGVvZiBjaGFubmVscyA9PT0gJ29iamVjdCcgJiYgY2hhbm5lbHNba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGNoYW5uZWxzW2tleV07XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBzYXZlZCB2aXN1YWwgY2hhbm5lbHMgY29uZmlnIHdpdGggbmV3IGRhdGEsXG4gKiByZWZlciB0byB2aXMtc3RhdGUtc2NoZW1hLmpzIFZpc3VhbENoYW5uZWxTY2hlbWFWMVxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVTYXZlZFZpc3VhbENoYW5uZWxzKFxuICBmaWVsZHM6IEtlcGxlclRhYmxlWydmaWVsZHMnXSxcbiAgbmV3TGF5ZXI6IExheWVyLFxuICBzYXZlZExheWVyOiBQYXJzZWRMYXllcixcbiAgb3B0aW9uczoge3Rocm93T25FcnJvcj86IGJvb2xlYW59ID0ge31cbik6IG51bGwgfCBMYXllciB7XG4gIE9iamVjdC52YWx1ZXMobmV3TGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goKHtmaWVsZCwgc2NhbGUsIGtleX0pID0+IHtcbiAgICBjb25zdCBzYXZlZEZpZWxkID0gZ2V0U2F2ZWRWaXN1YWxDaGFubmVsVmFsdWUoc2F2ZWRMYXllciwgZmllbGQpO1xuICAgIGNvbnN0IHNhdmVkU2NhbGUgPSBnZXRTYXZlZFZpc3VhbENoYW5uZWxWYWx1ZShzYXZlZExheWVyLCBzY2FsZSk7XG4gICAgbGV0IGZvdW5kRmllbGQ7XG4gICAgaWYgKHNhdmVkRmllbGQ/Lm5hbWUpIHtcbiAgICAgIGZvdW5kRmllbGQgPSBmaWVsZHMuZmluZChmZCA9PiBmZC5uYW1lID09PSBzYXZlZEZpZWxkLm5hbWUpO1xuICAgIH1cblxuICAgIGNvbnN0IGZvdW5kQ2hhbm5lbCA9IHtcbiAgICAgIC4uLihmb3VuZEZpZWxkID8ge1tmaWVsZF06IGZvdW5kRmllbGR9IDoge30pLFxuICAgICAgLi4uKHNhdmVkU2NhbGUgPyB7W3NjYWxlXTogc2F2ZWRTY2FsZX0gOiB7fSlcbiAgICB9O1xuICAgIGlmIChPYmplY3Qua2V5cyhmb3VuZENoYW5uZWwpLmxlbmd0aCkge1xuICAgICAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoZm91bmRDaGFubmVsKTtcbiAgICB9XG5cbiAgICBuZXdMYXllci52YWxpZGF0ZVZpc3VhbENoYW5uZWwoa2V5KTtcbiAgICBpZiAob3B0aW9ucy50aHJvd09uRXJyb3IpIHtcbiAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IHNhdmVkRmllbGQ/Lm5hbWU7XG4gICAgICBpZiAoZmllbGROYW1lICYmIGZpZWxkTmFtZSAhPT0gbmV3TGF5ZXIuY29uZmlnW2ZpZWxkXT8ubmFtZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYExheWVyIGhhcyBpbnZhbGlkIHZpc3VhbCBjaGFubmVsIGZpZWxkOiAke2ZpZWxkfWApO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiBuZXdMYXllcjtcbn1cblxudHlwZSBWYWxpZGF0ZUxheWVyT3B0aW9uID0ge1xuICBhbGxvd0VtcHR5Q29sdW1uPzogYm9vbGVhbjtcbiAgdGhyb3dPbkVycm9yPzogYm9vbGVhbjtcbiAgLy8gU2F2ZWQgbWFwcyB0aGF0IG9taXQgdGV4dExhYmVsIHByZWRhdGUgY291bnQgbGFiZWxzIGFuZCBzdGF5IHVubGFiZWxlZC5cbiAgLy8gQSBuZXcgbGF5ZXIgY29uZmlnIG9taXRzIGl0IHRvbywgYW5kIHNob3VsZCBrZWVwIHRoZSBsYXllciBkZWZhdWx0LlxuICBrZWVwVW5sYWJlbGVkQWdncmVnYXRpb25UZXh0TGFiZWw/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlTGF5ZXJzQnlEYXRhc2V0cyhcbiAgZGF0YXNldHM6IERhdGFzZXRzLFxuICBsYXllckNsYXNzZXM6IFZpc1N0YXRlWydsYXllckNsYXNzZXMnXSxcbiAgbGF5ZXJzOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydsYXllcnMnXSA9IFtdLFxuICBvcHRpb25zPzogVmFsaWRhdGVMYXllck9wdGlvblxuKSB7XG4gIGNvbnN0IHZhbGlkYXRlZDogTGF5ZXJbXSA9IFtdO1xuICBjb25zdCBmYWlsZWQ6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2xheWVycyddID0gW107XG5cbiAgbGF5ZXJzLmZvckVhY2gobGF5ZXIgPT4ge1xuICAgIGxldCB2YWxpZGF0ZUxheWVyOiBMYXllciB8IG51bGwgPSBudWxsO1xuXG4gICAgaWYgKGxheWVyPy5jb25maWc/LmRhdGFJZCkge1xuICAgICAgaWYgKGRhdGFzZXRzW2xheWVyLmNvbmZpZy5kYXRhSWRdKSB7XG4gICAgICAgIC8vIGRhdGFzZXRzIGFyZSBhbHJlYWR5IGxvYWRlZFxuICAgICAgICB2YWxpZGF0ZUxheWVyID0gdmFsaWRhdGVMYXllcldpdGhEYXRhKFxuICAgICAgICAgIGRhdGFzZXRzW2xheWVyLmNvbmZpZy5kYXRhSWRdLFxuICAgICAgICAgIGxheWVyLFxuICAgICAgICAgIGxheWVyQ2xhc3NlcyxcbiAgICAgICAgICBvcHRpb25zXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlTGF5ZXIpIHtcbiAgICAgIHZhbGlkYXRlZC5wdXNoKHZhbGlkYXRlTGF5ZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBkYXRhc2V0cyBub3QgeWV0IGxvYWRlZFxuICAgICAgZmFpbGVkLnB1c2gobGF5ZXIpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHt2YWxpZGF0ZWQsIGZhaWxlZH07XG59XG5cbi8qKlxuICogR2V0IHJlcXVpcmVkIGNvbHVtbnMgZm9yIHZhbGlkYXRpb24gYmFzZWQgb24gY29sdW1uIG1vZGVcbiAqL1xuZnVuY3Rpb24gX2dldENvbHVtbkNvbmZpZ0ZvclZhbGlkYXRpb24obmV3TGF5ZXIpIHtcbiAgLy8gZmluZCBjb2x1bW4gZmllbGRJZHhcbiAgbGV0IGNvbHVtbkNvbmZpZyA9IG5ld0xheWVyLmdldExheWVyQ29sdW1ucygpO1xuICAvLyBpZiBjb2x1bW5Nb2RlIGlzIGRlZmluZWQsIGZpbmQgY29sdW1uIG1vZGUgY29uZmlnXG4gIGNvbnN0IGNvbE1vZGVDb25maWcgPSBuZXdMYXllci5jb25maWcuY29sdW1uTW9kZVxuICAgID8gKG5ld0xheWVyLnN1cHBvcnRlZENvbHVtbk1vZGVzIHx8IFtdKS5maW5kKFxuICAgICAgICBjb2xNb2RlID0+IGNvbE1vZGUua2V5ID09PSBuZXdMYXllci5jb25maWcuY29sdW1uTW9kZVxuICAgICAgKVxuICAgIDogbnVsbDtcblxuICBpZiAoY29sTW9kZUNvbmZpZykge1xuICAgIC8vIG9ubHkgdmFsaWRhdGUgY29sdW1ucyBpbiBjb2x1bW4gbW9kZSAoaW5jbHVkaW5nIHRhYmJlZCBjb2x1bW5Hcm91cHMpXG4gICAgY29uc3QgZ3JvdXBDb2x1bW5zID0gKGNvbE1vZGVDb25maWcuY29sdW1uR3JvdXBzIHx8IFtdKS5mbGF0TWFwKGdyb3VwID0+IGdyb3VwLmNvbHVtbnMgfHwgW10pO1xuICAgIGNvbnN0IHJlcXVpcmVkS2V5cyA9IG5ldyBTZXQoY29sTW9kZUNvbmZpZy5yZXF1aXJlZENvbHVtbnMgfHwgW10pO1xuICAgIGNvbHVtbkNvbmZpZyA9IFtcbiAgICAgIC4uLihjb2xNb2RlQ29uZmlnLnJlcXVpcmVkQ29sdW1ucyB8fCBbXSksXG4gICAgICAuLi4oY29sTW9kZUNvbmZpZy5vcHRpb25hbENvbHVtbnMgfHwgW10pLFxuICAgICAgLi4uZ3JvdXBDb2x1bW5zXG4gICAgXS5yZWR1Y2UoKGFjY3UsIGtleSkgPT4ge1xuICAgICAgY29uc3QgY29sID0gY29sdW1uQ29uZmlnW2tleV07XG4gICAgICBpZiAoIWNvbCkge1xuICAgICAgICByZXR1cm4gYWNjdTtcbiAgICAgIH1cbiAgICAgIC8vIE9wdGlvbmFsaXR5IG11c3QgZm9sbG93IHRoZSBhY3RpdmUgbW9kZTogYSBmaWVsZCBvcHRpb25hbCBpbiBhbm90aGVyIG1vZGVcbiAgICAgIC8vIChlLmcuIGFsdGl0dWRlIGluIFVWKSBpcyBzdGlsbCByZXF1aXJlZCB3aGVuIHRoaXMgbW9kZSBsaXN0cyBpdCBpbiByZXF1aXJlZENvbHVtbnMuXG4gICAgICBpZiAocmVxdWlyZWRLZXlzLmhhcyhrZXkpKSB7XG4gICAgICAgIGNvbnN0IHtvcHRpb25hbDogX29wdGlvbmFsLCAuLi5yZXF1aXJlZENvbH0gPSBjb2w7XG4gICAgICAgIHJldHVybiB7Li4uYWNjdSwgW2tleV06IHJlcXVpcmVkQ29sfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7Li4uYWNjdSwgW2tleV06IHsuLi5jb2wsIG9wdGlvbmFsOiB0cnVlfX07XG4gICAgfSwge30pO1xuICB9XG5cbiAgcmV0dXJuIGNvbHVtbkNvbmZpZztcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBzYXZlZCBsYXllciBjb25maWcgd2l0aCBuZXcgZGF0YSxcbiAqIHVwZGF0ZSBmaWVsZElkeCBiYXNlZCBvbiBuZXcgZmllbGRzXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVMYXllcldpdGhEYXRhKFxuICBkYXRhc2V0OiBLZXBsZXJUYWJsZSxcbiAgc2F2ZWRMYXllcjogUGFyc2VkTGF5ZXIsXG4gIGxheWVyQ2xhc3NlczogVmlzU3RhdGVbJ2xheWVyQ2xhc3NlcyddLFxuICBvcHRpb25zOiBWYWxpZGF0ZUxheWVyT3B0aW9uID0ge31cbik6IExheWVyIHwgbnVsbCB7XG4gIGNvbnN0IHtmaWVsZHMsIGlkOiBkYXRhSWR9ID0gZGF0YXNldDtcbiAgY29uc3Qge3R5cGV9ID0gc2F2ZWRMYXllcjtcbiAgY29uc3Qge3Rocm93T25FcnJvcn0gPSBvcHRpb25zO1xuICAvLyBsYXllciBkb2VzbnQgaGF2ZSBhIHZhbGlkIHR5cGVcbiAgaWYgKCF0eXBlIHx8ICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobGF5ZXJDbGFzc2VzLCB0eXBlKSB8fCAhc2F2ZWRMYXllci5jb25maWcpIHtcbiAgICBpZiAodGhyb3dPbkVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYExheWVyIGhhcyBpbnZhbGlkIHR5cGUgXCIke3R5cGV9XCIgb3IgY29uZmlnIGlzIG1pc3NpbmdgKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBsZXQgbmV3TGF5ZXIgPSBuZXcgbGF5ZXJDbGFzc2VzW3R5cGVdKHtcbiAgICBpZDogc2F2ZWRMYXllci5pZCxcbiAgICBkYXRhSWQsXG4gICAgbGFiZWw6IHNhdmVkTGF5ZXIuY29uZmlnLmxhYmVsLFxuICAgIGNvbG9yOiBzYXZlZExheWVyLmNvbmZpZy5jb2xvcixcbiAgICBpc1Zpc2libGU6IHNhdmVkTGF5ZXIuY29uZmlnLmlzVmlzaWJsZSxcbiAgICBoaWRkZW46IHNhdmVkTGF5ZXIuY29uZmlnLmhpZGRlbixcbiAgICBpc0luY2x1ZGVkSW5MZWdlbmQ6IHNhdmVkTGF5ZXIuY29uZmlnLmlzSW5jbHVkZWRJbkxlZ2VuZCxcbiAgICBjb2x1bW5Nb2RlOiBzYXZlZExheWVyLmNvbmZpZy5jb2x1bW5Nb2RlLFxuICAgIGhpZ2hsaWdodENvbG9yOiBzYXZlZExheWVyLmNvbmZpZy5oaWdobGlnaHRDb2xvclxuICB9KTtcblxuICBjb25zdCBjb2x1bW5Db25maWcgPSBfZ2V0Q29sdW1uQ29uZmlnRm9yVmFsaWRhdGlvbihuZXdMYXllcik7XG5cbiAgaWYgKE9iamVjdC5rZXlzKGNvbHVtbkNvbmZpZykpIHtcbiAgICBjb25zdCBjb2x1bW5zID0gdmFsaWRhdGVTYXZlZExheWVyQ29sdW1ucyhcbiAgICAgIGZpZWxkcyxcbiAgICAgIHNhdmVkTGF5ZXIuY29uZmlnLmNvbHVtbnMsXG4gICAgICBjb2x1bW5Db25maWcsXG4gICAgICBvcHRpb25zXG4gICAgKTtcbiAgICBpZiAoY29sdW1ucykge1xuICAgICAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICBjb2x1bW5zOiB7XG4gICAgICAgICAgLi4ubmV3TGF5ZXIuY29uZmlnLmNvbHVtbnMsXG4gICAgICAgICAgLi4uY29sdW1uc1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKCFvcHRpb25zLmFsbG93RW1wdHlDb2x1bW4pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHRleHRMYWJlbCA9XG4gICAgc2F2ZWRMYXllci5jb25maWcudGV4dExhYmVsICYmIG5ld0xheWVyLmNvbmZpZy50ZXh0TGFiZWxcbiAgICAgID8gdmFsaWRhdGVTYXZlZFRleHRMYWJlbChmaWVsZHMsIG5ld0xheWVyLmNvbmZpZy50ZXh0TGFiZWwsIHNhdmVkTGF5ZXIuY29uZmlnLnRleHRMYWJlbCwge1xuICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgbGF5ZXJUeXBlOiBzYXZlZExheWVyLnR5cGVcbiAgICAgICAgfSlcbiAgICAgIDogb3B0aW9ucy5rZWVwVW5sYWJlbGVkQWdncmVnYXRpb25UZXh0TGFiZWxcbiAgICAgID8gZmFsbGJhY2tUZXh0TGFiZWxGb3JMb2FkZWRMYXllcihzYXZlZExheWVyLnR5cGUsIG5ld0xheWVyLmNvbmZpZy50ZXh0TGFiZWwpXG4gICAgICA6IG5ld0xheWVyLmNvbmZpZy50ZXh0TGFiZWw7XG5cbiAgLy8gY29weSB2aXNDb25maWcgb3ZlciB0byBlbXB0eUxheWVyIHRvIG1ha2Ugc3VyZSBpdCBoYXMgYWxsIHRoZSBwcm9wc1xuICBjb25zdCBzYXZlZFZpc0NvbmZpZyA9XG4gICAgc2F2ZWRMYXllci50eXBlID09PSAnM0QnXG4gICAgICA/IG1pZ3JhdGVMZWdhY3lTY2VuZWdyYXBoVmlzQ29uZmlnKHNhdmVkTGF5ZXIuY29uZmlnLnZpc0NvbmZpZylcbiAgICAgIDogc2F2ZWRMYXllci5jb25maWcudmlzQ29uZmlnO1xuICBjb25zdCBjb3BpZWRWaXNDb25maWcgPSBuZXdMYXllci5jb3B5TGF5ZXJDb25maWcoXG4gICAgbmV3TGF5ZXIuY29uZmlnLnZpc0NvbmZpZyxcbiAgICBzYXZlZFZpc0NvbmZpZyB8fCB7fSxcbiAgICB7XG4gICAgICBzaGFsbG93Q29weTogWydjb2xvclJhbmdlJywgJ3N0cm9rZUNvbG9yUmFuZ2UnXVxuICAgIH1cbiAgKTtcblxuICAvLyBjYWxsIGxheWVyIG1ldGhvZHMgdG8gdmFsaWRhdGUgdmlzQ29uZmlnIHdoZW4gc3dpdGNoaW5nIGRhdGFzZXRcbiAgY29uc3QgdmlzQ29uZmlnID0gbmV3TGF5ZXIudmFsaWRhdGVWaXNDb25maWdcbiAgICA/IG5ld0xheWVyLnZhbGlkYXRlVmlzQ29uZmlnKGRhdGFzZXQsIGNvcGllZFZpc0NvbmZpZylcbiAgICA6IGNvcGllZFZpc0NvbmZpZztcblxuICBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgdmlzQ29uZmlnLFxuICAgIHRleHRMYWJlbFxuICB9KTtcblxuICAvLyB2aXN1YWwgY2hhbm5lbCBmaWVsZCBpcyBzYXZlZCB0byBiZSB7bmFtZSwgdHlwZX1cbiAgLy8gZmluZCB2aXN1YWwgY2hhbm5lbCBmaWVsZCBieSBtYXRjaGluZyBib3RoIG5hbWUgYW5kIHR5cGVcbiAgLy8gcmVmZXIgdG8gdmlzLXN0YXRlLXNjaGVtYS5qcyBWaXN1YWxDaGFubmVsU2NoZW1hVjFcbiAgbmV3TGF5ZXIgPSB2YWxpZGF0ZVNhdmVkVmlzdWFsQ2hhbm5lbHMoZmllbGRzLCBuZXdMYXllciwgc2F2ZWRMYXllciwgb3B0aW9ucyk7XG5cbiAgaWYgKHRocm93T25FcnJvcikge1xuICAgIGlmICghbmV3TGF5ZXIuaXNWYWxpZFRvU2F2ZSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYExheWVyIGlzIG5vdCB2YWxpZCB0byBzYXZlOiAke25ld0xheWVyLmlkfWApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXdMYXllcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlRWRpdG9yPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFMsIHNhdmVkRWRpdG9yOiBTYXZlZEVkaXRvcikge1xuICBpZiAoIXNhdmVkRWRpdG9yKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBmZWF0dXJlczogWy4uLnN0YXRlLmVkaXRvci5mZWF0dXJlcywgLi4uKHNhdmVkRWRpdG9yLmZlYXR1cmVzIHx8IFtdKV0sXG4gICAgICAvLyBpZiBzYXZlZEVkaXRvci52aXNpYmxlIGlzIHVuZGVmaW5lZCBrZWVwIHN0YXRlLmVkaXRvci52aXNpYmxlXG4gICAgICB2aXNpYmxlOiBzYXZlZEVkaXRvci52aXNpYmxlID8/IHN0YXRlLmVkaXRvci52aXNpYmxlXG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBjb21iaW5lRWRpdG9yQ29uZmlncyhjb25maWdzOiBTYXZlZEVkaXRvcltdKTogU2F2ZWRFZGl0b3Ige1xuICByZXR1cm4gY29uZmlncy5yZWR1Y2UoXG4gICAgKGFjYywgbmV4dENvbmZpZykgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYWNjLFxuICAgICAgICBmZWF0dXJlczogWy4uLmFjYy5mZWF0dXJlcywgLi4uKG5leHRDb25maWcuZmVhdHVyZXMgfHwgW10pXVxuICAgICAgfTtcbiAgICB9LFxuICAgIHtcbiAgICAgIC8vIHN0YXJ0IHdpdGg6XG4gICAgICAvLyAtIGVtcHR5IGFycmF5IGZvciBmZWF0dXJlcyBhY2N1bXVsYXRpb25cbiAgICAgIC8vIC0gYW5kIGFyZSBhbnkgb2YgdGhlIGNvbmZpZ3MnIHZpc2libGUgdmFsdWVzIHRydWU/XG4gICAgICBmZWF0dXJlczogW10sXG4gICAgICB2aXNpYmxlOiBjb25maWdzLnNvbWUoYyA9PiBjPy52aXNpYmxlKVxuICAgIH1cbiAgKTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBzYXZlZCBsYXllciBjb25maWcgd2l0aCBuZXcgZGF0YSxcbiAqIHVwZGF0ZSBmaWVsZElkeCBiYXNlZCBvbiBuZXcgZmllbGRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZURhdGFzZXRzQnlPcmRlcihzdGF0ZTogVmlzU3RhdGUsIG5ld0RhdGFFbnRyaWVzOiBEYXRhc2V0cyk6IERhdGFzZXRzIHtcbiAgY29uc3QgbWVyZ2VkID0ge1xuICAgIC4uLnN0YXRlLmRhdGFzZXRzLFxuICAgIC4uLm5ld0RhdGFFbnRyaWVzXG4gIH07XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoc3RhdGUucHJlc2VydmVEYXRhc2V0T3JkZXIpKSB7XG4gICAgLy8gcHJlc2VydmVEYXRhc2V0T3JkZXIgIG1pZ2h0IG5vdCBpbmNsdWRlIHRoZSAgbmV3IGRhdGFzZXRzXG4gICAgY29uc3QgbmV3RGF0YXNldElkcyA9IE9iamVjdC5rZXlzKG1lcmdlZCkuZmlsdGVyKFxuICAgICAgaWQgPT4gIXN0YXRlLnByZXNlcnZlRGF0YXNldE9yZGVyPy5pbmNsdWRlcyhpZClcbiAgICApO1xuICAgIHJldHVybiBbLi4uc3RhdGUucHJlc2VydmVEYXRhc2V0T3JkZXIsIC4uLm5ld0RhdGFzZXRJZHNdLnJlZHVjZShcbiAgICAgIChhY2N1LCBkYXRhSWQpID0+ICh7XG4gICAgICAgIC4uLmFjY3UsXG4gICAgICAgIC4uLihtZXJnZWRbZGF0YUlkXSA/IHtbZGF0YUlkXTogbWVyZ2VkW2RhdGFJZF19IDoge30pXG4gICAgICB9KSxcbiAgICAgIHt9XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBtZXJnZWQ7XG59XG5cbi8qKlxuICogU2ltbGlhciBwdXJwb3NlIHRvIGFnZ3JlZ2F0aW9uIHV0aWxzIGBnZXRNb2RlYCBmdW5jdGlvbixcbiAqIGJ1dCByZXR1cm5zIHRoZSBtb2RlIGluIHRoZSBzYW1lIHZhbHVlIHR5cGUgd2l0aG91dCBjb2VyY2luZyB0byBhIHN0cmluZy5cbiAqIEl0IGlnbm9yZXMgYHVuZGVmaW5lZGAgb3IgYG51bGxgIHZhbHVlcywgYnV0IHJldHVybnMgYG51bGxgIGlmIG5vIG1vZGUgY291bGQgYmUgY2FsY3VsYXRlZC5cbiAqL1xuZnVuY3Rpb24gZ2V0VmFsdWVXaXRoSGlnaGVzdE9jY3VycmVuY2U8VD4oYXJyOiBUW10pOiBUIHwgbnVsbCB7XG4gIGNvbnN0IHRhbGx5cyA9IG5ldyBNYXAoKTtcbiAgYXJyLmZvckVhY2godmFsdWUgPT4ge1xuICAgIGlmIChub3ROdWxsb3JVbmRlZmluZWQodmFsdWUpKSB7XG4gICAgICBpZiAoIXRhbGx5cy5oYXModmFsdWUpKSB7XG4gICAgICAgIHRhbGx5cy5zZXQodmFsdWUsIDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFsbHlzLnNldCh2YWx1ZSwgdGFsbHlzLmdldCh2YWx1ZSkgKyAxKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICAvLyByZXR1cm4gdGhlIHZhbHVlIHdpdGggdGhlIGhpZ2hlc3QgdG90YWwgb2NjdXJyZW5jZSBjb3VudFxuICBpZiAodGFsbHlzLnNpemUgPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gWy4uLnRhbGx5cy5lbnRyaWVzKCldPy5yZWR1Y2UoKGFjYywgbmV4dCkgPT4gKG5leHRbMV0gPiBhY2NbMV0gPyBuZXh0IDogYWNjKSlbMF07XG59XG5cbmV4cG9ydCBjb25zdCBWSVNfU1RBVEVfTUVSR0VSUzogVmlzU3RhdGVNZXJnZXJzPGFueT4gPSBbXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VMYXllcnMsXG4gICAgcHJvcDogJ2xheWVycycsXG4gICAgdG9NZXJnZVByb3A6ICdsYXllclRvQmVNZXJnZWQnLFxuICAgIHByZXNlcnZlT3JkZXI6ICdwcmVzZXJ2ZUxheWVyT3JkZXInXG4gIH0sXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VMYXllck9yZGVyLFxuICAgIHByb3A6ICdsYXllck9yZGVyJ1xuICB9LFxuICB7XG4gICAgbWVyZ2U6IG1lcmdlRmlsdGVycyxcbiAgICBwcm9wOiAnZmlsdGVycycsXG4gICAgdG9NZXJnZVByb3A6ICdmaWx0ZXJUb0JlTWVyZ2VkJyxcbiAgICBwcmVzZXJ2ZU9yZGVyOiAncHJlc2VydmVGaWx0ZXJPcmRlcicsXG4gICAgcmVwbGFjZVBhcmVudERhdGFzZXRJZHM6IHJlcGxhY2VGaWx0ZXJEYXRhc2V0SWRzXG4gIH0sXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VFZmZlY3RzLFxuICAgIHByb3A6ICdlZmZlY3RzJ1xuICB9LFxuICB7XG4gICAgbWVyZ2U6IG1lcmdlQ2hhcnRzLFxuICAgIHByb3A6ICdjaGFydHMnLFxuICAgIHRvTWVyZ2VQcm9wOiAnY2hhcnRzVG9CZU1lcmdlZCcsXG4gICAgcmVwbGFjZVBhcmVudERhdGFzZXRJZHM6IHJlcGxhY2VDaGFydERhdGFzZXRJZHNcbiAgfSxcbiAge1xuICAgIG1lcmdlOiBtZXJnZUFubm90YXRpb25zLFxuICAgIHByb3A6ICdhbm5vdGF0aW9ucycsXG4gICAgdG9NZXJnZVByb3A6ICdhbm5vdGF0aW9uc1RvQmVNZXJnZWQnXG4gIH0sXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VJbnRlcmFjdGlvbnMsXG4gICAgcHJvcDogJ2ludGVyYWN0aW9uQ29uZmlnJyxcbiAgICB0b01lcmdlUHJvcDogJ2ludGVyYWN0aW9uVG9CZU1lcmdlZCcsXG4gICAgcmVwbGFjZVBhcmVudERhdGFzZXRJZHM6IHJlcGxhY2VJbnRlcmFjdGlvbkRhdGFzZXRJZHMsXG4gICAgc2F2ZVVubWVyZ2VkOiBzYXZlZFVubWVyZ2VkSW50ZXJhY3Rpb24sXG4gICAgY29tYmluZUNvbmZpZ3M6IGNvbWJpbmVJbnRlcmFjdGlvbkNvbmZpZ3NcbiAgfSxcbiAge21lcmdlOiBtZXJnZUxheWVyQmxlbmRpbmcsIHByb3A6ICdsYXllckJsZW5kaW5nJywgY29tYmluZUNvbmZpZ3M6IGNvbWJpbmVMYXllckJsZW5kaW5nQ29uZmlnc30sXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VPdmVybGF5QmxlbmRpbmcsXG4gICAgcHJvcDogJ292ZXJsYXlCbGVuZGluZycsXG4gICAgY29tYmluZUNvbmZpZ3M6IGNvbWJpbmVPdmVybGF5QmxlbmRpbmdDb25maWdzXG4gIH0sXG4gIHttZXJnZTogbWVyZ2VTcGxpdE1hcHMsIHByb3A6ICdzcGxpdE1hcHMnLCB0b01lcmdlUHJvcDogJ3NwbGl0TWFwc1RvQmVNZXJnZWQnfSxcbiAge21lcmdlOiBtZXJnZUFuaW1hdGlvbkNvbmZpZywgcHJvcDogJ2FuaW1hdGlvbkNvbmZpZycsIGNvbWJpbmVDb25maWdzOiBjb21iaW5lQW5pbWF0aW9uQ29uZmlnc30sXG4gIHttZXJnZTogbWVyZ2VFZGl0b3IsIHByb3A6ICdlZGl0b3InLCBjb21iaW5lQ29uZmlnczogY29tYmluZUVkaXRvckNvbmZpZ3N9XG5dO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLEtBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLEtBQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLFlBQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLFVBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLE1BQUEsR0FBQUosT0FBQTtBQVdBLElBQUFLLE9BQUEsR0FBQUwsT0FBQTtBQU9BLElBQUFNLFFBQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLFlBQUEsR0FBQVAsT0FBQTtBQUNBLElBQUFRLFVBQUEsR0FBQVIsT0FBQTtBQVNBLElBQUFTLFFBQUEsR0FBQVQsT0FBQTtBQXFCQSxJQUFBVSxNQUFBLEdBQUFWLE9BQUE7QUFFQSxJ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