@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
@@ -20,12 +20,14 @@ import pick from 'es-toolkit/compat/pick';
20
20
  import flattenDeep from 'es-toolkit/compat/flattenDeep';
21
21
  import deepmerge from 'deepmerge';
22
22
  import { arrayInsert, combineSplitMapsByIndex, getInitialMapLayersForSplitMap, applyFiltersToDatasets, validateFiltersUpdateDatasets, findById, aggregate, isPlainObject } from '@kepler.gl/utils';
23
+ import { AGGREGATION_COUNT_LAYER_TYPES, createPointCountLabelField, migrateLegacyScenegraphVisConfig, POINT_COUNT_FIELD_NAME } from '@kepler.gl/layers';
23
24
  import { createEffect } from '@kepler.gl/effects';
24
25
  import { notNullorUndefined } from '@kepler.gl/common-utils';
25
- import { AGGREGATION_TYPES, LAYER_BLENDINGS, OVERLAY_BLENDINGS, isAnnotationKind, INITIAL_ANNOTATION_LINE_COLOR, INITIAL_ANNOTATION_LINE_WIDTH } from '@kepler.gl/constants';
26
+ import { AGGREGATION_TYPES, DEFAULT_TEXT_LABEL, LAYER_BLENDINGS, OVERLAY_BLENDINGS, isAnnotationKind, INITIAL_ANNOTATION_LINE_COLOR, INITIAL_ANNOTATION_LINE_WIDTH } from '@kepler.gl/constants';
26
27
  import { CURRENT_VERSION } from '@kepler.gl/schemas';
27
28
  import { assignGpuChannels, resetFilterGpuMode } from '@kepler.gl/table';
28
29
  import { getLayerOrderFromLayers } from './layer-utils';
30
+ import { combineZoomOpacityControllers } from './interaction-utils';
29
31
 
30
32
  /**
31
33
  * Merge loaded filters with current state, if no fields or data are loaded
@@ -151,13 +153,15 @@ function insertItemBasedOnPreservedOrder(currentItems, items) {
151
153
  }
152
154
  export function createLayerFromConfig(state, layerConfig) {
153
155
  // check if the layer config is parsed
154
- var parsedLayerConfig = isSavedLayerConfigV1(layerConfig) ? parseLayerConfig(state.schema, layerConfig) : layerConfig;
156
+ var savedLayerConfig = isSavedLayerConfigV1(layerConfig);
157
+ var parsedLayerConfig = savedLayerConfig ? parseLayerConfig(state.schema, layerConfig) : layerConfig;
155
158
  if (!parsedLayerConfig) {
156
159
  return null;
157
160
  }
158
161
  // first validate config against dataset
159
162
  var _validateLayersByData = validateLayersByDatasets(state.datasets, state.layerClasses, [parsedLayerConfig], {
160
- allowEmptyColumn: true
163
+ allowEmptyColumn: true,
164
+ keepUnlabeledAggregationTextLabel: savedLayerConfig
161
165
  }),
162
166
  validated = _validateLayersByData.validated,
163
167
  failed = _validateLayersByData.failed;
@@ -238,7 +242,9 @@ export function mergeLayers(state) {
238
242
  toMerge.push(l);
239
243
  }
240
244
  });
241
- var _validateLayersByData2 = validateLayersByDatasets(state.datasets, state.layerClasses, toMerge),
245
+ var _validateLayersByData2 = validateLayersByDatasets(state.datasets, state.layerClasses, toMerge, {
246
+ keepUnlabeledAggregationTextLabel: true
247
+ }),
242
248
  mergedLayer = _validateLayersByData2.validated,
243
249
  failed = _validateLayersByData2.failed;
244
250
  unmerged.push.apply(unmerged, _toConsumableArray(failed));
@@ -448,20 +454,23 @@ export function mergeInteractions(state, interactionToBeMerged) {
448
454
  if (!state.interactionConfig[key]) {
449
455
  return;
450
456
  }
451
- var currentConfig = key === 'tooltip' || key === 'brush' || key === 'geocoder' ? state.interactionConfig[key].config : null;
457
+ var currentConfig = key === 'tooltip' || key === 'brush' || key === 'geocoder' || key === 'legend' || key === 'zoomOpacity' ? state.interactionConfig[key].config : null;
452
458
  var _ref2 = interactionToBeMerged[key] || {},
453
459
  enabled = _ref2.enabled,
454
460
  configSaved = _objectWithoutProperties(_ref2, _excluded);
455
461
  var configToMerge = configSaved;
456
462
  if (key === 'tooltip') {
457
- var _mergeInteractionTool = mergeInteractionTooltipConfig(state, configSaved),
463
+ var savedTooltipConfig = configSaved;
464
+ var _mergeInteractionTool = mergeInteractionTooltipConfig(state, savedTooltipConfig),
458
465
  mergedTooltip = _mergeInteractionTool.mergedTooltip,
459
466
  unmergedTooltip = _mergeInteractionTool.unmergedTooltip;
460
467
 
461
468
  // merge new dataset tooltips with original dataset tooltips
462
- configToMerge = {
469
+ configToMerge = _objectSpread({
463
470
  fieldsToShow: _objectSpread(_objectSpread({}, currentConfig.fieldsToShow), mergedTooltip)
464
- };
471
+ }, savedTooltipConfig.timezone !== undefined ? {
472
+ timezone: savedTooltipConfig.timezone
473
+ } : {});
465
474
  if (Object.keys(unmergedTooltip).length) {
466
475
  // @ts-expect-error
467
476
  unmerged.tooltip = {
@@ -485,6 +494,24 @@ export function mergeInteractions(state, interactionToBeMerged) {
485
494
  }
486
495
  function combineInteractionConfigs(configs) {
487
496
  var combined = _objectSpread({}, configs[0]);
497
+ // `legend` is optional on older saved maps; seed it so a later config is not dropped.
498
+ if (!combined.legend) {
499
+ var withLegend = configs.find(function (c) {
500
+ return c.legend;
501
+ });
502
+ if (withLegend !== null && withLegend !== void 0 && withLegend.legend) {
503
+ combined.legend = withLegend.legend;
504
+ }
505
+ }
506
+ // Same for fade-on-zoom: an older config in front must not drop controllers from a later one.
507
+ if (!combined.zoomOpacity) {
508
+ var withZoomOpacity = configs.find(function (c) {
509
+ return c.zoomOpacity;
510
+ });
511
+ if (withZoomOpacity !== null && withZoomOpacity !== void 0 && withZoomOpacity.zoomOpacity) {
512
+ combined.zoomOpacity = withZoomOpacity.zoomOpacity;
513
+ }
514
+ }
488
515
  // handle each property key of an `InteractionConfig`, e.g. tooltip, geocoder, brush, coordinate
489
516
  // by combining values for each among all passed in configs
490
517
  var _loop2 = function _loop2(key) {
@@ -509,6 +536,14 @@ function combineInteractionConfigs(configs) {
509
536
  combined[key].compareType = getValueWithHighestOccurrence(toBeCombinedProps.map(function (p) {
510
537
  return p.compareType;
511
538
  }));
539
+ var hasTimezone = toBeCombinedProps.some(function (p) {
540
+ return (p === null || p === void 0 ? void 0 : p.timezone) !== undefined;
541
+ });
542
+ if (hasTimezone) {
543
+ combined[key].timezone = getValueWithHighestOccurrence(toBeCombinedProps.map(function (p) {
544
+ return p === null || p === void 0 ? void 0 : p.timezone;
545
+ }));
546
+ }
512
547
 
513
548
  // combine fieldsToShow among all dataset ids
514
549
  combined[key].fieldsToShow = toBeCombinedProps.map(function (p) {
@@ -548,9 +583,24 @@ function combineInteractionConfigs(configs) {
548
583
  })) !== null && _aggregate !== void 0 ? _aggregate : null;
549
584
  }
550
585
  if (key === 'geocoder') {
586
+ var _toBeCombinedProps$fi;
551
587
  combined[key].limitSearch = toBeCombinedProps.some(function (p) {
552
588
  return p === null || p === void 0 ? void 0 : p.limitSearch;
553
589
  });
590
+ var color = (_toBeCombinedProps$fi = toBeCombinedProps.find(function (p) {
591
+ return p === null || p === void 0 ? void 0 : p.color;
592
+ })) === null || _toBeCombinedProps$fi === void 0 ? void 0 : _toBeCombinedProps$fi.color;
593
+ if (color) {
594
+ combined[key].color = color;
595
+ }
596
+ }
597
+ if (key === 'legend') {
598
+ combined[key].hideInvisibleLayers = toBeCombinedProps.some(function (p) {
599
+ return p === null || p === void 0 ? void 0 : p.hideInvisibleLayers;
600
+ });
601
+ }
602
+ if (key === 'zoomOpacity' && combined.zoomOpacity) {
603
+ combined.zoomOpacity.controllers = combineZoomOpacityControllers(toBeCombinedProps);
554
604
  }
555
605
  };
556
606
  for (var key in combined) {
@@ -673,7 +723,8 @@ export function mergeCharts(state, charts, fromConfig) {
673
723
  // Older configs omit `pinned`; keep charts visible like the legend.
674
724
  pinned: chart.pinned !== false,
675
725
  display: _objectSpread(_objectSpread({}, chart.display), {}, {
676
- isConfigActive: false
726
+ isConfigActive: false,
727
+ isJsonEditorActive: false
677
728
  })
678
729
  }) : chart;
679
730
  if (normalized.dataId && (!state.datasets[normalized.dataId] || state.isMergingDatasets[normalized.dataId])) {
@@ -960,28 +1011,46 @@ export function validateColumn(column, columns, allFields) {
960
1011
  * @param {Object} options
961
1012
  * @return {Object} - validated textlabel
962
1013
  */
963
- export function validateSavedTextLabel(fields, _ref9, savedTextLabel) {
964
- var _ref0 = _slicedToArray(_ref9, 1),
965
- layerTextLabel = _ref0[0];
1014
+ export function validateSavedTextLabel(fields, layerTextLabels, savedTextLabel) {
966
1015
  var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
1016
+ var layerTextLabel = layerTextLabels[0];
967
1017
  var savedTextLabels = Array.isArray(savedTextLabel) ? savedTextLabel : [savedTextLabel];
1018
+ var countLabelLayer = Boolean(options.layerType && AGGREGATION_COUNT_LAYER_TYPES.has(options.layerType));
968
1019
 
969
1020
  // validate field
970
1021
  return savedTextLabels.map(function (textLabel) {
971
- var field = textLabel.field ? fields.find(function (fd) {
972
- return Object.keys(textLabel.field).every(function (key) {
973
- return textLabel.field[key] === fd[key];
1022
+ var field = null;
1023
+ if (textLabel.field) {
1024
+ // Cluster, hexbin, and grid persist a synthetic point-count field that
1025
+ // is not one of the dataset columns.
1026
+ field = countLabelLayer && textLabel.field.name === POINT_COUNT_FIELD_NAME ? createPointCountLabelField() : fields.find(function (fd) {
1027
+ return Object.keys(textLabel.field).every(function (key) {
1028
+ return textLabel.field[key] === fd[key];
1029
+ });
974
1030
  });
975
- }) : null;
1031
+ }
976
1032
  if (field === undefined && options.throwOnError) {
977
1033
  throw new Error("Layer has invalid text label field: ".concat(JSON.stringify(textLabel.field)));
978
1034
  }
979
1035
  return Object.keys(layerTextLabel).reduce(function (accu, key) {
980
- return _objectSpread(_objectSpread({}, accu), {}, _defineProperty({}, key, key === 'field' ? field : textLabel[key] || layerTextLabel[key]));
1036
+ var _textLabel$key;
1037
+ return _objectSpread(_objectSpread({}, accu), {}, _defineProperty({}, key, key === 'field' ? field : (_textLabel$key = textLabel[key]) !== null && _textLabel$key !== void 0 ? _textLabel$key : layerTextLabel[key]));
981
1038
  }, {});
982
1039
  });
983
1040
  }
984
1041
 
1042
+ /**
1043
+ * Maps saved before count labels omit `textLabel`. Those cluster, hexbin, and
1044
+ * grid layers stay unlabeled. New layers still get the point-count default
1045
+ * from `getDefaultLayerConfig`.
1046
+ */
1047
+ export function fallbackTextLabelForLoadedLayer(layerType, newLayerTextLabel) {
1048
+ if (layerType && AGGREGATION_COUNT_LAYER_TYPES.has(layerType)) {
1049
+ return [_objectSpread({}, DEFAULT_TEXT_LABEL)];
1050
+ }
1051
+ return newLayerTextLabel;
1052
+ }
1053
+
985
1054
  /**
986
1055
  * Saved visual channel field/scale may live in any of:
987
1056
  * - `config[key]` after schema parse (VisualChannelSchemaV1 folds channels into config)
@@ -1009,10 +1078,10 @@ function getSavedVisualChannelValue(savedLayer, key) {
1009
1078
  */
1010
1079
  export function validateSavedVisualChannels(fields, newLayer, savedLayer) {
1011
1080
  var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
1012
- Object.values(newLayer.visualChannels).forEach(function (_ref1) {
1013
- var field = _ref1.field,
1014
- scale = _ref1.scale,
1015
- key = _ref1.key;
1081
+ Object.values(newLayer.visualChannels).forEach(function (_ref9) {
1082
+ var field = _ref9.field,
1083
+ scale = _ref9.scale,
1084
+ key = _ref9.key;
1016
1085
  var savedField = getSavedVisualChannelValue(savedLayer, field);
1017
1086
  var savedScale = getSavedVisualChannelValue(savedLayer, scale);
1018
1087
  var foundField;
@@ -1124,6 +1193,7 @@ export function validateLayerWithData(dataset, savedLayer, layerClasses) {
1124
1193
  color: savedLayer.config.color,
1125
1194
  isVisible: savedLayer.config.isVisible,
1126
1195
  hidden: savedLayer.config.hidden,
1196
+ isIncludedInLegend: savedLayer.config.isIncludedInLegend,
1127
1197
  columnMode: savedLayer.config.columnMode,
1128
1198
  highlightColor: savedLayer.config.highlightColor
1129
1199
  });
@@ -1138,10 +1208,13 @@ export function validateLayerWithData(dataset, savedLayer, layerClasses) {
1138
1208
  return null;
1139
1209
  }
1140
1210
  }
1141
- var textLabel = savedLayer.config.textLabel && newLayer.config.textLabel ? validateSavedTextLabel(fields, newLayer.config.textLabel, savedLayer.config.textLabel, options) : newLayer.config.textLabel;
1211
+ var textLabel = savedLayer.config.textLabel && newLayer.config.textLabel ? validateSavedTextLabel(fields, newLayer.config.textLabel, savedLayer.config.textLabel, _objectSpread(_objectSpread({}, options), {}, {
1212
+ layerType: savedLayer.type
1213
+ })) : options.keepUnlabeledAggregationTextLabel ? fallbackTextLabelForLoadedLayer(savedLayer.type, newLayer.config.textLabel) : newLayer.config.textLabel;
1142
1214
 
1143
1215
  // copy visConfig over to emptyLayer to make sure it has all the props
1144
- var copiedVisConfig = newLayer.copyLayerConfig(newLayer.config.visConfig, savedLayer.config.visConfig || {}, {
1216
+ var savedVisConfig = savedLayer.type === '3D' ? migrateLegacyScenegraphVisConfig(savedLayer.config.visConfig) : savedLayer.config.visConfig;
1217
+ var copiedVisConfig = newLayer.copyLayerConfig(newLayer.config.visConfig, savedVisConfig || {}, {
1145
1218
  shallowCopy: ['colorRange', 'strokeColorRange']
1146
1219
  });
1147
1220
 
@@ -1217,7 +1290,7 @@ export function mergeDatasetsByOrder(state, newDataEntries) {
1217
1290
  * It ignores `undefined` or `null` values, but returns `null` if no mode could be calculated.
1218
1291
  */
1219
1292
  function getValueWithHighestOccurrence(arr) {
1220
- var _ref13;
1293
+ var _ref11;
1221
1294
  var tallys = new Map();
1222
1295
  arr.forEach(function (value) {
1223
1296
  if (notNullorUndefined(value)) {
@@ -1232,7 +1305,7 @@ function getValueWithHighestOccurrence(arr) {
1232
1305
  if (tallys.size === 0) {
1233
1306
  return null;
1234
1307
  }
1235
- return (_ref13 = _toConsumableArray(tallys.entries())) === null || _ref13 === void 0 ? void 0 : _ref13.reduce(function (acc, next) {
1308
+ return (_ref11 = _toConsumableArray(tallys.entries())) === null || _ref11 === void 0 ? void 0 : _ref11.reduce(function (acc, next) {
1236
1309
  return next[1] > acc[1] ? next : acc;
1237
1310
  })[0];
1238
1311
  }
@@ -1290,4 +1363,4 @@ export var VIS_STATE_MERGERS = [{
1290
1363
  prop: 'editor',
1291
1364
  combineConfigs: combineEditorConfigs
1292
1365
  }];
1293
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1bmlxIiwicGljayIsImZsYXR0ZW5EZWVwIiwiZGVlcG1lcmdlIiwiYXJyYXlJbnNlcnQiLCJjb21iaW5lU3BsaXRNYXBzQnlJbmRleCIsImdldEluaXRpYWxNYXBMYXllcnNGb3JTcGxpdE1hcCIsImFwcGx5RmlsdGVyc1RvRGF0YXNldHMiLCJ2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0cyIsImZpbmRCeUlkIiwiYWdncmVnYXRlIiwiaXNQbGFpbk9iamVjdCIsImNyZWF0ZUVmZmVjdCIsIm5vdE51bGxvclVuZGVmaW5lZCIsIkFHR1JFR0FUSU9OX1RZUEVTIiwiTEFZRVJfQkxFTkRJTkdTIiwiT1ZFUkxBWV9CTEVORElOR1MiLCJpc0Fubm90YXRpb25LaW5kIiwiSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfQ09MT1IiLCJJTklUSUFMX0FOTk9UQVRJT05fTElORV9XSURUSCIsIkNVUlJFTlRfVkVSU0lPTiIsImFzc2lnbkdwdUNoYW5uZWxzIiwicmVzZXRGaWx0ZXJHcHVNb2RlIiwiZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMiLCJtZXJnZUZpbHRlcnMiLCJzdGF0ZSIsImZpbHRlcnNUb01lcmdlIiwiZnJvbUNvbmZpZyIsInByZXNlcnZlRmlsdGVyT3JkZXIiLCJtYXAiLCJsIiwiaWQiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJfdmFsaWRhdGVGaWx0ZXJzVXBkYXQiLCJ2YWxpZGF0ZWQiLCJmYWlsZWQiLCJ1cGRhdGVkRGF0YXNldHMiLCJ1cGRhdGVkRmlsdGVycyIsImluc2VydEl0ZW1CYXNlZE9uUHJlc2VydmVkT3JkZXIiLCJmaWx0ZXJzIiwiZGF0YXNldHNUb0ZpbHRlciIsImYiLCJkYXRhSWQiLCJmaWx0ZXJlZCIsImxheWVycyIsIl9vYmplY3RTcHJlYWQiLCJkYXRhc2V0cyIsImZpbHRlclRvQmVNZXJnZWQiLCJjb25jYXQiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJyZXBsYWNlRmlsdGVyRGF0YXNldElkcyIsInNhdmVkRmlsdGVyIiwiZGF0YUlkVG9Vc2UiLCJyZXBsYWNlZCIsImZvckVhY2giLCJmaWx0ZXIiLCJpbmNsdWRlcyIsIl9maWx0ZXIkcGxvdFR5cGUiLCJuZXdEYXRhSWQiLCJkIiwicGxvdFR5cGUiLCJjb2xvcnNCeURhdGFJZCIsIl9maWx0ZXIkcGxvdFR5cGUyIiwiX3JlZiIsImNvbG9yIiwicmVzdCIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsIl90b1Byb3BlcnR5S2V5IiwiX2RlZmluZVByb3BlcnR5IiwicHVzaCIsImlzU2F2ZWRMYXllckNvbmZpZ1YxIiwibGF5ZXJDb25maWciLCJ2aXN1YWxDaGFubmVscyIsInBhcnNlTGF5ZXJDb25maWciLCJzY2hlbWEiLCJfc2NoZW1hJHBhcnNlU2F2ZWRDb24iLCJzYXZlZENvbmZpZyIsInZlcnNpb24iLCJjb25maWciLCJ2aXNTdGF0ZSIsImxheWVyT3JkZXIiLCJwYXJzZVNhdmVkQ29uZmlnIiwiY3VycmVudEl0ZW1zIiwiaXRlbXMiLCJwcmVzZXJ2ZWRPcmRlciIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsImRlZmF1bHRTdGFydCIsIm5ld0l0ZW1zIiwiX2l0ZXJhdG9yIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJfc3RlcCIsInMiLCJuIiwiZG9uZSIsIml0ZW0iLCJ2YWx1ZSIsImV4cGVjdGVkSWR4IiwiaW5kZXhPZiIsImluc2VydEF0IiwiaSIsInByZWNlZWRJZHgiLCJfbG9vcCIsInByZWNlZWRJdGVtSWQiLCJmaW5kSW5kZXgiLCJlcnIiLCJlIiwiY3JlYXRlTGF5ZXJGcm9tQ29uZmlnIiwicGFyc2VkTGF5ZXJDb25maWciLCJfdmFsaWRhdGVMYXllcnNCeURhdGEiLCJ2YWxpZGF0ZUxheWVyc0J5RGF0YXNldHMiLCJsYXllckNsYXNzZXMiLCJhbGxvd0VtcHR5Q29sdW1uIiwibmV3TGF5ZXIiLCJ1cGRhdGVMYXllckRvbWFpbiIsInNlcmlhbGl6ZUZpbHRlciIsIm5ld0ZpbHRlciIsIl9zZXJpYWxpemVkVmlzU3RhdGUkZiIsInNlcmlhbGl6ZWRWaXNTdGF0ZSIsInNlcmlhbGl6ZVZpc1N0YXRlIiwic2VyaWFsaXplTGF5ZXIiLCJfc2VyaWFsaXplZFZpc1N0YXRlJGwiLCJzZXJpYWxpemVFZmZlY3QiLCJuZXdFZmZlY3QiLCJfc2VyaWFsaXplZFZpc1N0YXRlJGUiLCJlZmZlY3RzIiwiZWZmZWN0T3JkZXIiLCJfc2NoZW1hJHBhcnNlU2F2ZWRDb24yIiwic2F2ZWRTdGF0ZSIsImdldENvbmZpZ1RvU2F2ZSIsIm1lcmdlTGF5ZXJzIiwibGF5ZXJzVG9NZXJnZSIsInByZXNlcnZlTGF5ZXJPcmRlciIsInVubWVyZ2VkIiwidG9NZXJnZSIsIl9sJGNvbmZpZyIsImlzTWVyZ2luZ0RhdGFzZXRzIiwiX3ZhbGlkYXRlTGF5ZXJzQnlEYXRhMiIsIm1lcmdlZExheWVyIiwiYXBwbHkiLCJfaW5zZXJ0TGF5ZXJBdFJpZ2h0T3IiLCJpbnNlcnRMYXllckF0UmlnaHRPcmRlciIsIm5ld0xheWVyT3JkZXIiLCJuZXdMYXllcnMiLCJtZXJnZWRTdGF0ZSIsImxheWVyVG9CZU1lcmdlZCIsImxheWVyT3JkZXJUb0JlTWVyZ2VkIiwic2F2ZWRPcmRlciIsIm1lcmdlTGF5ZXJPcmRlciIsImN1cnJlbnRMYXllcnMiLCJsYXllcnNUb0luc2VydCIsImN1cnJlbnRPcmRlciIsImN1cnJlbnRMYXllclF1ZXVlIiwiZW50cnkiLCJsYXllciIsIkJvb2xlYW4iLCJuZXdMYXllck9yZGVyUXVldWUiLCJuZXdGbGF0TGF5ZXJPcmRlciIsImhhc0dyb3VwcyIsInNvbWUiLCJleGlzdGluZ0ZsYXRJZHMiLCJTZXQiLCJuZXdJbnNlcnRlZElkcyIsImhhcyIsInJlc3VsdCIsImZsYXRRdWV1ZSIsImZsYXRJZHgiLCJfaXRlcmF0b3IyIiwiX3N0ZXAyIiwic2F2ZWRMYXllck9yZGVyIiwidmFsaWRMYXllcklkcyIsImZpbHRlckxheWVyT3JkZXIiLCJvcmRlciIsIl9pdGVyYXRvcjMiLCJfc3RlcDMiLCJncm91cCIsImZpbHRlcmVkR3JvdXBPcmRlciIsInJlc3RvcmVkTGF5ZXJPcmRlciIsImxheWVySWRzSW5SZXN0b3JlZCIsImNvbGxlY3RJZHMiLCJfaXRlcmF0b3I0IiwiX3N0ZXA0IiwiYWRkIiwibWlzc2luZ0xheWVycyIsIm1lcmdlSW50ZXJhY3Rpb25zIiwiaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkIiwibWVyZ2VkIiwiT2JqZWN0Iiwia2V5cyIsImtleSIsImludGVyYWN0aW9uQ29uZmlnIiwiY3VycmVudENvbmZpZyIsIl9yZWYyIiwiZW5hYmxlZCIsImNvbmZpZ1NhdmVkIiwiX2V4Y2x1ZGVkIiwiY29uZmlnVG9NZXJnZSIsIl9tZXJnZUludGVyYWN0aW9uVG9vbCIsIm1lcmdlSW50ZXJhY3Rpb25Ub29sdGlwQ29uZmlnIiwibWVyZ2VkVG9vbHRpcCIsInVubWVyZ2VkVG9vbHRpcCIsImZpZWxkc1RvU2hvdyIsInRvb2x0aXAiLCJuZXh0U3RhdGUiLCJzYXZlZFVubWVyZ2VkSW50ZXJhY3Rpb24iLCJjb21iaW5lSW50ZXJhY3Rpb25Db25maWdzIiwiY29uZmlncyIsImNvbWJpbmVkIiwiX2xvb3AyIiwidG9CZUNvbWJpbmVkUHJvcHMiLCJjIiwicCIsImNvbXBhcmVNb2RlIiwiY29tcGFyZVR5cGUiLCJnZXRWYWx1ZVdpdGhIaWdoZXN0T2NjdXJyZW5jZSIsInJlZHVjZSIsImFjYyIsIm5leHRGaWVsZHNUb1Nob3ciLCJfbG9vcDMiLCJuZXh0RGF0YUlkS2V5IiwibmV4dFRvb2x0aXBGaWVsZHMiLCJuZXh0VEYiLCJmaW5kIiwiX3JlZjMiLCJuYW1lIiwiX2FnZ3JlZ2F0ZSIsInNpemUiLCJtYXhpbXVtIiwibGltaXRTZWFyY2giLCJfdW5tZXJnZWQkdG9vbHRpcCIsIl91bm1lcmdlZCR0b29sdGlwMiIsIl9zdGF0ZSRpbnRlcmFjdGlvblRvQiIsIl91bm1lcmdlZCR0b29sdGlwMyIsInJlcGxhY2VJbnRlcmFjdGlvbkRhdGFzZXRJZHMiLCJkYXRhSWRUb1JlcGxhY2UiLCJfaW50ZXJhY3Rpb25Db25maWckdG8iLCJfaW50ZXJhY3Rpb25Db25maWckdG8yIiwibWVyZ2VTcGxpdE1hcHMiLCJzcGxpdE1hcHMiLCJsYXllckV4aXN0cyIsImNyZWF0ZVBhbmVscyIsInNtIiwiaWRzIiwiZW50cmllcyIsInBhbmVsIiwiZnJvbUVudHJpZXMiLCJfcmVmNCIsIl9yZWY1IiwiX3NsaWNlZFRvQXJyYXkiLCJfcmVmNiIsIl9yZWY3Iiwic3BsaXRNYXBzVG9CZU1lcmdlZCIsIm1lcmdlQ2hhcnRzIiwiY2hhcnRzIiwiaW5jb21pbmdJZHMiLCJjaGFydCIsImV4aXN0aW5nSWRzIiwibmV4dENoYXJ0cyIsIm5vcm1hbGl6ZWQiLCJwaW5uZWQiLCJkaXNwbGF5IiwiaXNDb25maWdBY3RpdmUiLCJjaGFydHNUb0JlTWVyZ2VkIiwicmVwbGFjZUNoYXJ0RGF0YXNldElkcyIsInNhdmVkQ2hhcnRzIiwibWVyZ2VFZmZlY3RzIiwibmV3RWZmZWN0cyIsImVmZmVjdCIsImFsbCIsImlzVmFsaWRUb1NhdmUiLCJtZXJnZUFubm90YXRpb25zIiwiYW5ub3RhdGlvbnMiLCJhIiwidmFsaWRBbm5vdGF0aW9ucyIsImtpbmQiLCJhbmNob3JQb2ludCIsImV2ZXJ5IiwiTnVtYmVyIiwiaXNGaW5pdGUiLCJpc1Zpc2libGUiLCJhdXRvU2l6ZSIsImF1dG9TaXplWSIsImxhYmVsIiwibGluZUNvbG9yIiwibGluZVdpZHRoIiwidGV4dFdpZHRoIiwidGV4dEhlaWdodCIsInRvb2x0aXBDb25maWciLCJfbG9vcDQiLCJhbGxGaWVsZHMiLCJmaWVsZHMiLCJmb3VuZEZpZWxkc1RvU2hvdyIsImZpZWxkIiwibWVyZ2VMYXllckJsZW5kaW5nIiwibGF5ZXJCbGVuZGluZyIsImNvbWJpbmVMYXllckJsZW5kaW5nQ29uZmlncyIsIm1lcmdlT3ZlcmxheUJsZW5kaW5nIiwib3ZlcmxheUJsZW5kaW5nIiwiY29tYmluZU92ZXJsYXlCbGVuZGluZ0NvbmZpZ3MiLCJtZXJnZUFuaW1hdGlvbkNvbmZpZyIsImFuaW1hdGlvbiIsImN1cnJlbnRUaW1lIiwiYW5pbWF0aW9uQ29uZmlnIiwiZG9tYWluIiwiY29tYmluZUFuaW1hdGlvbkNvbmZpZ3MiLCJfYWdncmVnYXRlMiIsIl9hZ2dyZWdhdGUzIiwibWluaW11bSIsInNwZWVkIiwidGltZUZvcm1hdCIsInRpbWV6b25lIiwidmFsaWRhdGVTYXZlZExheWVyQ29sdW1ucyIsInNhdmVkQ29scyIsImVtcHR5Q29scyIsIm9wdGlvbnMiLCJjb2x1bW5zIiwiX2xvb3A1IiwiX09iamVjdCRrZXlzIiwiX2kiLCJzYXZlZCIsImZpZWxkSWR4IiwiX3JlZjgiLCJhbGxDb2xGb3VuZCIsInZhbGlkYXRlQ29sdW1uIiwicnYiLCJ0aHJvd09uRXJyb3IiLCJyZXF1aXJlZENvbHVtbnMiLCJrIiwib3B0aW9uYWwiLCJtaXNzaW5nQ29sdW1ucyIsIkVycm9yIiwiam9pbiIsImNvbmZpZ0NvbHVtbnMiLCJpbnZhbGlkQ29sdW1ucyIsIl9jb2x1bW5zJGsiLCJjb2x1bW4iLCJ2YWxpZGF0b3IiLCJ2YWxpZGF0ZVNhdmVkVGV4dExhYmVsIiwiX3JlZjkiLCJzYXZlZFRleHRMYWJlbCIsIl9yZWYwIiwibGF5ZXJUZXh0TGFiZWwiLCJzYXZlZFRleHRMYWJlbHMiLCJ0ZXh0TGFiZWwiLCJmZCIsIkpTT04iLCJzdHJpbmdpZnkiLCJhY2N1IiwiZ2V0U2F2ZWRWaXN1YWxDaGFubmVsVmFsdWUiLCJzYXZlZExheWVyIiwiY2hhbm5lbHMiLCJfdHlwZW9mIiwidmFsaWRhdGVTYXZlZFZpc3VhbENoYW5uZWxzIiwidmFsdWVzIiwiX3JlZjEiLCJzY2FsZSIsInNhdmVkRmllbGQiLCJzYXZlZFNjYWxlIiwiZm91bmRGaWVsZCIsImZvdW5kQ2hhbm5lbCIsInVwZGF0ZUxheWVyQ29uZmlnIiwidmFsaWRhdGVWaXN1YWxDaGFubmVsIiwiX25ld0xheWVyJGNvbmZpZyRmaWVsIiwiZmllbGROYW1lIiwiX2xheWVyJGNvbmZpZyIsInZhbGlkYXRlTGF5ZXIiLCJ2YWxpZGF0ZUxheWVyV2l0aERhdGEiLCJfZ2V0Q29sdW1uQ29uZmlnRm9yVmFsaWRhdGlvbiIsImNvbHVtbkNvbmZpZyIsImdldExheWVyQ29sdW1ucyIsImNvbE1vZGVDb25maWciLCJjb2x1bW5Nb2RlIiwic3VwcG9ydGVkQ29sdW1uTW9kZXMiLCJjb2xNb2RlIiwiZ3JvdXBDb2x1bW5zIiwiY29sdW1uR3JvdXBzIiwiZmxhdE1hcCIsInJlcXVpcmVkS2V5cyIsIm9wdGlvbmFsQ29sdW1ucyIsImNvbCIsIl9vcHRpb25hbCIsInJlcXVpcmVkQ29sIiwiX2V4Y2x1ZGVkMiIsImRhdGFzZXQiLCJ0eXBlIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaGlkZGVuIiwiaGlnaGxpZ2h0Q29sb3IiLCJjb3BpZWRWaXNDb25maWciLCJjb3B5TGF5ZXJDb25maWciLCJ2aXNDb25maWciLCJzaGFsbG93Q29weSIsInZhbGlkYXRlVmlzQ29uZmlnIiwibWVyZ2VFZGl0b3IiLCJzYXZlZEVkaXRvciIsIl9zYXZlZEVkaXRvciR2aXNpYmxlIiwiZWRpdG9yIiwiZmVhdHVyZXMiLCJ2aXNpYmxlIiwiY29tYmluZUVkaXRvckNvbmZpZ3MiLCJuZXh0Q29uZmlnIiwibWVyZ2VEYXRhc2V0c0J5T3JkZXIiLCJuZXdEYXRhRW50cmllcyIsInByZXNlcnZlRGF0YXNldE9yZGVyIiwibmV3RGF0YXNldElkcyIsIl9zdGF0ZSRwcmVzZXJ2ZURhdGFzZSIsImFyciIsIl9yZWYxMyIsInRhbGx5cyIsIk1hcCIsInNldCIsImdldCIsIm5leHQiLCJWSVNfU1RBVEVfTUVSR0VSUyIsIm1lcmdlIiwicHJvcCIsInRvTWVyZ2VQcm9wIiwicHJlc2VydmVPcmRlciIsInJlcGxhY2VQYXJlbnREYXRhc2V0SWRzIiwic2F2ZVVubWVyZ2VkIiwiY29tYmluZUNvbmZpZ3MiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdmlzLXN0YXRlLW1lcmdlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgdW5pcSBmcm9tICdlcy10b29sa2l0L2NvbXBhdC91bmlxJztcbmltcG9ydCBwaWNrIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L3BpY2snO1xuaW1wb3J0IGZsYXR0ZW5EZWVwIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L2ZsYXR0ZW5EZWVwJztcbmltcG9ydCBkZWVwbWVyZ2UgZnJvbSAnZGVlcG1lcmdlJztcbmltcG9ydCB7XG4gIGFycmF5SW5zZXJ0LFxuICBjb21iaW5lU3BsaXRNYXBzQnlJbmRleCxcbiAgZ2V0SW5pdGlhbE1hcExheWVyc0ZvclNwbGl0TWFwLFxuICBhcHBseUZpbHRlcnNUb0RhdGFzZXRzLFxuICB2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0cyxcbiAgZmluZEJ5SWQsXG4gIGFnZ3JlZ2F0ZSxcbiAgaXNQbGFpbk9iamVjdFxufSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcblxuaW1wb3J0IHtMYXllcn0gZnJvbSAnQGtlcGxlci5nbC9sYXllcnMnO1xuaW1wb3J0IHtjcmVhdGVFZmZlY3R9IGZyb20gJ0BrZXBsZXIuZ2wvZWZmZWN0cyc7XG5pbXBvcnQge25vdE51bGxvclVuZGVmaW5lZH0gZnJvbSAnQGtlcGxlci5nbC9jb21tb24tdXRpbHMnO1xuaW1wb3J0IHtcbiAgQUdHUkVHQVRJT05fVFlQRVMsXG4gIExBWUVSX0JMRU5ESU5HUyxcbiAgT1ZFUkxBWV9CTEVORElOR1MsXG4gIGlzQW5ub3RhdGlvbktpbmQsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX0NPTE9SLFxuICBJTklUSUFMX0FOTk9UQVRJT05fTElORV9XSURUSFxufSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge0NVUlJFTlRfVkVSU0lPTiwgVmlzU3RhdGUsIFZpc1N0YXRlTWVyZ2VycywgS2VwbGVyR0xTY2hlbWFDbGFzc30gZnJvbSAnQGtlcGxlci5nbC9zY2hlbWFzJztcblxuaW1wb3J0IHtcbiAgUGFyc2VkTGF5ZXIsXG4gIFBhcnNlZFZpc1N0YXRlLFxuICBTYXZlZEludGVyYWN0aW9uQ29uZmlnLFxuICBUb29sdGlwSW5mbyxcbiAgU2F2ZWRFZGl0b3IsXG4gIFBhcnNlZENvbmZpZyxcbiAgRmlsdGVyLFxuICBFZmZlY3QgYXMgRWZmZWN0VHlwZSxcbiAgUGFyc2VkRWZmZWN0LFxuICBMYXllckNvbHVtbnMsXG4gIExheWVyQ29sdW1uLFxuICBQYXJzZWRGaWx0ZXIsXG4gIE5lc3RlZFBhcnRpYWwsXG4gIFNhdmVkQW5pbWF0aW9uQ29uZmlnLFxuICBMYXllck9yZGVyLFxuICBMYXllck9yZGVyR3JvdXAsXG4gIENoYXJ0Q29uZmlnXG59IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtLZXBsZXJUYWJsZSwgRGF0YXNldHMsIGFzc2lnbkdwdUNoYW5uZWxzLCByZXNldEZpbHRlckdwdU1vZGV9IGZyb20gJ0BrZXBsZXIuZ2wvdGFibGUnO1xuXG5pbXBvcnQge2dldExheWVyT3JkZXJGcm9tTGF5ZXJzfSBmcm9tICcuL2xheWVyLXV0aWxzJztcblxuLyoqXG4gKiBNZXJnZSBsb2FkZWQgZmlsdGVycyB3aXRoIGN1cnJlbnQgc3RhdGUsIGlmIG5vIGZpZWxkcyBvciBkYXRhIGFyZSBsb2FkZWRcbiAqIHNhdmUgaXQgZm9yIGxhdGVyXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VGaWx0ZXJzPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBmaWx0ZXJzVG9NZXJnZTogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnZmlsdGVycyddLFxuICBmcm9tQ29uZmlnPzogYm9vbGVhblxuKTogUyB7XG4gIGNvbnN0IHByZXNlcnZlRmlsdGVyT3JkZXIgPSBmcm9tQ29uZmlnXG4gICAgPyBmaWx0ZXJzVG9NZXJnZT8ubWFwKGwgPT4gbC5pZClcbiAgICA6IHN0YXRlLnByZXNlcnZlRmlsdGVyT3JkZXI7XG5cbiAgaWYgKCFBcnJheS5pc0FycmF5KGZpbHRlcnNUb01lcmdlKSB8fCAhZmlsdGVyc1RvTWVyZ2UubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge3ZhbGlkYXRlZCwgZmFpbGVkLCB1cGRhdGVkRGF0YXNldHN9ID0gdmFsaWRhdGVGaWx0ZXJzVXBkYXRlRGF0YXNldHMoc3RhdGUsIGZpbHRlcnNUb01lcmdlKTtcbiAgbGV0IHVwZGF0ZWRGaWx0ZXJzID0gaW5zZXJ0SXRlbUJhc2VkT25QcmVzZXJ2ZWRPcmRlcihcbiAgICBzdGF0ZS5maWx0ZXJzLFxuICAgIHZhbGlkYXRlZCxcbiAgICBwcmVzZXJ2ZUZpbHRlck9yZGVyXG4gICk7XG5cbiAgLy8gbWVyZ2UgZmlsdGVyIHdpdGggZXhpc3RpbmdcbiAgdXBkYXRlZEZpbHRlcnMgPSByZXNldEZpbHRlckdwdU1vZGUodXBkYXRlZEZpbHRlcnMpO1xuICB1cGRhdGVkRmlsdGVycyA9IGFzc2lnbkdwdUNoYW5uZWxzKHVwZGF0ZWRGaWx0ZXJzKTtcbiAgLy8gZmlsdGVyIGRhdGFcbiAgY29uc3QgZGF0YXNldHNUb0ZpbHRlciA9IHVuaXEoZmxhdHRlbkRlZXAodmFsaWRhdGVkLm1hcChmID0+IGYuZGF0YUlkKSkpO1xuXG4gIGNvbnN0IGZpbHRlcmVkID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhcbiAgICBkYXRhc2V0c1RvRmlsdGVyLFxuICAgIHVwZGF0ZWREYXRhc2V0cyxcbiAgICB1cGRhdGVkRmlsdGVycyxcbiAgICBzdGF0ZS5sYXllcnNcbiAgKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IHVwZGF0ZWRGaWx0ZXJzLFxuICAgIGRhdGFzZXRzOiBmaWx0ZXJlZCxcbiAgICBwcmVzZXJ2ZUZpbHRlck9yZGVyLFxuICAgIGZpbHRlclRvQmVNZXJnZWQ6IFsuLi5zdGF0ZS5maWx0ZXJUb0JlTWVyZ2VkLCAuLi5mYWlsZWRdXG4gIH07XG59XG5cbi8vIHJlcGxhY2UgZGF0YUlkIGluIHNhdmVkIEZpbHRlclxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VGaWx0ZXJEYXRhc2V0SWRzKFxuICBzYXZlZEZpbHRlcjogRmlsdGVyW10sXG4gIGRhdGFJZDogc3RyaW5nLFxuICBkYXRhSWRUb1VzZTogc3RyaW5nXG4pIHtcbiAgY29uc3QgcmVwbGFjZWQ6IEZpbHRlcltdID0gW107XG4gIHNhdmVkRmlsdGVyLmZvckVhY2goZmlsdGVyID0+IHtcbiAgICBpZiAoZmlsdGVyLmRhdGFJZC5pbmNsdWRlcyhkYXRhSWQpKSB7XG4gICAgICBjb25zdCBuZXdEYXRhSWQgPSBmaWx0ZXIuZGF0YUlkLm1hcChkID0+IChkID09PSBkYXRhSWQgPyBkYXRhSWRUb1VzZSA6IGQpKTtcbiAgICAgIGxldCBwbG90VHlwZTtcbiAgICAgIC8vIFRPRE86IG1vcmUgZ2VuZXJpYyBhcHByb2FjaCB0byBzYXZlIHBsb3RUeXBlLmNvbG9yc0J5RGF0YUlkXG4gICAgICBpZiAoZmlsdGVyLnBsb3RUeXBlPy5jb2xvcnNCeURhdGFJZD8uW2RhdGFJZF0pIHtcbiAgICAgICAgLy8gcmVwbGFjZSBjb2xvckJ5RGF0YUlkIGluIGZpbHRlci5wbG90VHlwZVxuICAgICAgICBjb25zdCB7W2RhdGFJZF06IGNvbG9yLCAuLi5yZXN0fSA9IGZpbHRlci5wbG90VHlwZT8uY29sb3JzQnlEYXRhSWQgfHwge307XG4gICAgICAgIHBsb3RUeXBlID0ge1xuICAgICAgICAgIC4uLmZpbHRlci5wbG90VHlwZSxcbiAgICAgICAgICBjb2xvcnNCeURhdGFJZDoge1xuICAgICAgICAgICAgLi4ucmVzdCxcbiAgICAgICAgICAgIFtkYXRhSWRUb1VzZV06IGNvbG9yXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmVwbGFjZWQucHVzaCh7XG4gICAgICAgIC4uLmZpbHRlcixcbiAgICAgICAgZGF0YUlkOiBuZXdEYXRhSWQsXG4gICAgICAgIC4uLihwbG90VHlwZSA/IHtwbG90VHlwZX0gOiB7fSlcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXBsYWNlZC5sZW5ndGggPyByZXBsYWNlZCA6IG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NhdmVkTGF5ZXJDb25maWdWMShsYXllckNvbmZpZzogYW55KTogYm9vbGVhbiB7XG4gIC8vIGV4cG9ydGVkIGxheWVyIGNvbmZpZ3VyYXRpb24gY29udGFpbnMgdmlzdWFsQ2hhbm5lbHMgcHJvcGVydHlcbiAgcmV0dXJuIGxheWVyQ29uZmlnPy52aXN1YWxDaGFubmVscztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTGF5ZXJDb25maWcoXG4gIHNjaGVtYTogS2VwbGVyR0xTY2hlbWFDbGFzcyxcbiAgbGF5ZXJDb25maWc6IGFueVxuKTogUGFyc2VkTGF5ZXIgfCB1bmRlZmluZWQge1xuICAvLyBhc3N1bWUgdGhlIGxheWVyIGNvbmZpZyBpcyBjdXJyZW50IHZlcnNpb25cbiAgY29uc3Qgc2F2ZWRDb25maWcgPSB7XG4gICAgdmVyc2lvbjogQ1VSUkVOVF9WRVJTSU9OLFxuICAgIGNvbmZpZzoge1xuICAgICAgdmlzU3RhdGU6IHtsYXllcnM6IFtsYXllckNvbmZpZ10sIGxheWVyT3JkZXI6IFtsYXllckNvbmZpZy5pZF19XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBzY2hlbWEucGFyc2VTYXZlZENvbmZpZyhzYXZlZENvbmZpZyk/LnZpc1N0YXRlPy5sYXllcnM/LlswXTtcbn1cblxuZnVuY3Rpb24gaW5zZXJ0SXRlbUJhc2VkT25QcmVzZXJ2ZWRPcmRlcihcbiAgY3VycmVudEl0ZW1zOiBGaWx0ZXJbXSxcbiAgaXRlbXM6IEZpbHRlcltdLFxuICBwcmVzZXJ2ZWRPcmRlcjogYW55W10gPSBbXSxcbiAgZGVmYXVsdFN0YXJ0PzogYm9vbGVhblxuKSB7XG4gIGxldCBuZXdJdGVtcyA9IFsuLi5jdXJyZW50SXRlbXNdO1xuXG4gIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgIGNvbnN0IGV4cGVjdGVkSWR4ID0gcHJlc2VydmVkT3JkZXIuaW5kZXhPZihpdGVtLmlkKTtcbiAgICAvLyBpbnNlcnRBdCB0aGUgZW5kIGJ5IGRlZmF1bHRcbiAgICBsZXQgaW5zZXJ0QXQgPSBkZWZhdWx0U3RhcnQgPyAwIDogbmV3SXRlbXMubGVuZ3RoO1xuICAgIGlmIChleHBlY3RlZElkeCA+IDApIHtcbiAgICAgIC8vIGxvb2sgZm9yIGxheWVyIHRvIGluc2VydCBhZnRlclxuICAgICAgbGV0IGkgPSBleHBlY3RlZElkeCArIDE7XG4gICAgICBsZXQgcHJlY2VlZElkeCA9IC0xO1xuICAgICAgd2hpbGUgKGktLSA+IDAgJiYgcHJlY2VlZElkeCA8IDApIHtcbiAgICAgICAgLy8ga2VlcCBsb29raW5nIGZvciBwcmVjZWVkIGxheWVyIHRoYXQgaXMgYWxyZWFkeSBsb2FkZWRcbiAgICAgICAgY29uc3QgcHJlY2VlZEl0ZW1JZCA9IHByZXNlcnZlZE9yZGVyW2kgLSAxXTtcbiAgICAgICAgcHJlY2VlZElkeCA9IG5ld0l0ZW1zLmZpbmRJbmRleChkID0+IGQuaWQgPT09IHByZWNlZWRJdGVtSWQpO1xuICAgICAgfVxuICAgICAgaWYgKHByZWNlZWRJZHggPiAtMSkge1xuICAgICAgICAvLyBpZiBmb3VuZFxuICAgICAgICBpbnNlcnRBdCA9IHByZWNlZWRJZHggKyAxO1xuICAgICAgfVxuICAgIH1cbiAgICBuZXdJdGVtcyA9IGFycmF5SW5zZXJ0KG5ld0l0ZW1zLCBpbnNlcnRBdCwgaXRlbSk7XG4gIH1cbiAgcmV0dXJuIG5ld0l0ZW1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTGF5ZXJGcm9tQ29uZmlnKHN0YXRlOiBWaXNTdGF0ZSwgbGF5ZXJDb25maWc6IGFueSk6IExheWVyIHwgbnVsbCB7XG4gIC8vIGNoZWNrIGlmIHRoZSBsYXllciBjb25maWcgaXMgcGFyc2VkXG4gIGNvbnN0IHBhcnNlZExheWVyQ29uZmlnID0gaXNTYXZlZExheWVyQ29uZmlnVjEobGF5ZXJDb25maWcpXG4gICAgPyBwYXJzZUxheWVyQ29uZmlnKHN0YXRlLnNjaGVtYSwgbGF5ZXJDb25maWcpXG4gICAgOiBsYXllckNvbmZpZztcblxuICBpZiAoIXBhcnNlZExheWVyQ29uZmlnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLy8gZmlyc3QgdmFsaWRhdGUgY29uZmlnIGFnYWluc3QgZGF0YXNldFxuICBjb25zdCB7dmFsaWRhdGVkLCBmYWlsZWR9ID0gdmFsaWRhdGVMYXllcnNCeURhdGFzZXRzKFxuICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgIHN0YXRlLmxheWVyQ2xhc3NlcyxcbiAgICBbcGFyc2VkTGF5ZXJDb25maWddLFxuICAgIHthbGxvd0VtcHR5Q29sdW1uOiB0cnVlfVxuICApO1xuXG4gIGlmIChmYWlsZWQ/Lmxlbmd0aCB8fCAhdmFsaWRhdGVkLmxlbmd0aCkge1xuICAgIC8vIGZhaWxlZFxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgbmV3TGF5ZXIgPSB2YWxpZGF0ZWRbMF07XG4gIG5ld0xheWVyLnVwZGF0ZUxheWVyRG9tYWluKHN0YXRlLmRhdGFzZXRzKTtcbiAgcmV0dXJuIG5ld0xheWVyO1xufVxuXG4vKipcbiAqIEdldCBsb2FkZWQgZmlsdGVyIGZyb20gc3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZUZpbHRlcihcbiAgbmV3RmlsdGVyOiBGaWx0ZXIsXG4gIHNjaGVtYTogS2VwbGVyR0xTY2hlbWFDbGFzc1xuKTogUGFyc2VkRmlsdGVyIHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc2VyaWFsaXplZFZpc1N0YXRlID0gc2VyaWFsaXplVmlzU3RhdGUoe2ZpbHRlcnM6IFtuZXdGaWx0ZXJdfSwgc2NoZW1hKTtcbiAgcmV0dXJuIHNlcmlhbGl6ZWRWaXNTdGF0ZT8uZmlsdGVycz8uWzBdO1xufVxuXG4vKipcbiAqIEdldCBsb2FkZWQgbGF5ZXIgZnJvbSBzdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplTGF5ZXIoXG4gIG5ld0xheWVyOiBMYXllcixcbiAgc2NoZW1hOiBLZXBsZXJHTFNjaGVtYUNsYXNzXG4pOiBQYXJzZWRMYXllciB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRWaXNTdGF0ZSA9IHNlcmlhbGl6ZVZpc1N0YXRlKFxuICAgIHtsYXllcnM6IFtuZXdMYXllcl0sIGxheWVyT3JkZXI6IFtuZXdMYXllci5pZF19LFxuICAgIHNjaGVtYVxuICApO1xuICByZXR1cm4gc2VyaWFsaXplZFZpc1N0YXRlPy5sYXllcnM/LlswXTtcbn1cblxuLyoqXG4gKiBHZXQgbG9hZGVkIGVmZmVjdCBmcm9tIHN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVFZmZlY3QoXG4gIG5ld0VmZmVjdDogRWZmZWN0VHlwZSxcbiAgc2NoZW1hOiBLZXBsZXJHTFNjaGVtYUNsYXNzXG4pOiBQYXJzZWRFZmZlY3QgfCB1bmRlZmluZWQge1xuICBjb25zdCBzZXJpYWxpemVkVmlzU3RhdGUgPSBzZXJpYWxpemVWaXNTdGF0ZShcbiAgICB7ZWZmZWN0czogW25ld0VmZmVjdF0sIGVmZmVjdE9yZGVyOiBbbmV3RWZmZWN0LmlkXX0sXG4gICAgc2NoZW1hXG4gICk7XG4gIHJldHVybiBzZXJpYWxpemVkVmlzU3RhdGU/LmVmZmVjdHM/LlswXTtcbn1cblxuLyoqXG4gKiBHZXQgdmlzIHN0YXRlIGNvbmZpZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplVmlzU3RhdGUoXG4gIHZpc1N0YXRlOiBQYXJ0aWFsPFZpc1N0YXRlPixcbiAgc2NoZW1hOiBLZXBsZXJHTFNjaGVtYUNsYXNzXG4pOiBQYXJzZWRWaXNTdGF0ZSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHNhdmVkU3RhdGUgPSBzY2hlbWEuZ2V0Q29uZmlnVG9TYXZlKHtcbiAgICB2aXNTdGF0ZVxuICB9KTtcbiAgcmV0dXJuIHNhdmVkU3RhdGUgPyBzY2hlbWEucGFyc2VTYXZlZENvbmZpZyhzYXZlZFN0YXRlKT8udmlzU3RhdGUgOiB1bmRlZmluZWQ7XG59XG4vKipcbiAqIE1lcmdlIGxheWVycyBmcm9tIGRlLXNlcmlhbGl6ZWQgc3RhdGUsIGlmIG5vIGZpZWxkcyBvciBkYXRhIGFyZSBsb2FkZWRcbiAqIHNhdmUgaXQgZm9yIGxhdGVyXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VMYXllcnM8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGxheWVyc1RvTWVyZ2U6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2xheWVycyddID0gW10sXG4gIGZyb21Db25maWc/OiBib29sZWFuXG4pOiBTIHtcbiAgY29uc3QgcHJlc2VydmVMYXllck9yZGVyID0gZnJvbUNvbmZpZ1xuICAgID8gZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMobGF5ZXJzVG9NZXJnZSlcbiAgICA6IHN0YXRlLnByZXNlcnZlTGF5ZXJPcmRlcjtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGxheWVyc1RvTWVyZ2UpIHx8ICFsYXllcnNUb01lcmdlLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICAvLyBkb24ndCBtZXJnZSBsYXllciBpZiBkYXRhc2V0IGlzIGJlaW5nIG1lcmdlZFxuICBjb25zdCB1bm1lcmdlZDogUGFyc2VkTGF5ZXJbXSA9IFtdO1xuICBjb25zdCB0b01lcmdlOiBQYXJzZWRMYXllcltdID0gW107XG4gIGxheWVyc1RvTWVyZ2UuZm9yRWFjaCgobDogUGFyc2VkTGF5ZXIpID0+IHtcbiAgICBpZiAobD8uY29uZmlnPy5kYXRhSWQgJiYgc3RhdGUuaXNNZXJnaW5nRGF0YXNldHNbbC5jb25maWcuZGF0YUlkXSkge1xuICAgICAgdW5tZXJnZWQucHVzaChsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdG9NZXJnZS5wdXNoKGwpO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3Qge3ZhbGlkYXRlZDogbWVyZ2VkTGF5ZXIsIGZhaWxlZH0gPSB2YWxpZGF0ZUxheWVyc0J5RGF0YXNldHMoXG4gICAgc3RhdGUuZGF0YXNldHMsXG4gICAgc3RhdGUubGF5ZXJDbGFzc2VzLFxuICAgIHRvTWVyZ2VcbiAgKTtcbiAgdW5tZXJnZWQucHVzaCguLi5mYWlsZWQpO1xuICAvLyBwdXQgbmV3IGxheWVycyBpbiBmcm9udCBvZiBjdXJyZW50IGxheWVyc1xuICBjb25zdCB7bmV3TGF5ZXJPcmRlciwgbmV3TGF5ZXJzfSA9IGluc2VydExheWVyQXRSaWdodE9yZGVyKFxuICAgIHN0YXRlLmxheWVycyxcbiAgICBtZXJnZWRMYXllcixcbiAgICBzdGF0ZS5sYXllck9yZGVyLFxuICAgIHByZXNlcnZlTGF5ZXJPcmRlclxuICApO1xuXG4gIGxldCBtZXJnZWRTdGF0ZTogUyA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IG5ld0xheWVycyxcbiAgICBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyLFxuICAgIHByZXNlcnZlTGF5ZXJPcmRlcixcbiAgICBsYXllclRvQmVNZXJnZWQ6IFsuLi5zdGF0ZS5sYXllclRvQmVNZXJnZWQsIC4uLnVubWVyZ2VkXVxuICB9O1xuXG4gIC8vIEFwcGx5IHBlbmRpbmcgbGF5ZXJPcmRlciB3aXRoIGdyb3VwcyBpZiBsYXllcnMgYXJlIG5vdyBhdmFpbGFibGVcbiAgaWYgKG1lcmdlZFN0YXRlLmxheWVyT3JkZXJUb0JlTWVyZ2VkICYmIG1lcmdlZFN0YXRlLmxheWVycy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3Qgc2F2ZWRPcmRlciA9IG1lcmdlZFN0YXRlLmxheWVyT3JkZXJUb0JlTWVyZ2VkO1xuICAgIG1lcmdlZFN0YXRlID0gbWVyZ2VMYXllck9yZGVyKG1lcmdlZFN0YXRlLCBzYXZlZE9yZGVyKTtcbiAgICAvLyBLZWVwIHNhdmVkTGF5ZXJPcmRlciBhdmFpbGFibGUgZm9yIGZ1dHVyZSBkZWZlcnJlZCBsYXllcnNcbiAgICBpZiAobWVyZ2VkU3RhdGUubGF5ZXJUb0JlTWVyZ2VkLmxlbmd0aCA+IDApIHtcbiAgICAgIG1lcmdlZFN0YXRlID0gey4uLm1lcmdlZFN0YXRlLCBsYXllck9yZGVyVG9CZU1lcmdlZDogc2F2ZWRPcmRlcn07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1lcmdlZFN0YXRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0TGF5ZXJBdFJpZ2h0T3JkZXIoXG4gIGN1cnJlbnRMYXllcnMsXG4gIGxheWVyc1RvSW5zZXJ0LFxuICBjdXJyZW50T3JkZXIsXG4gIHByZXNlcnZlZE9yZGVyOiBzdHJpbmdbXSA9IFtdXG4pIHtcbiAgaWYgKCFsYXllcnNUb0luc2VydD8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHtuZXdMYXllcnM6IGN1cnJlbnRMYXllcnMsIG5ld0xheWVyT3JkZXI6IGN1cnJlbnRPcmRlcn07XG4gIH1cblxuICBjb25zdCBjdXJyZW50TGF5ZXJRdWV1ZSA9IGN1cnJlbnRPcmRlclxuICAgIC5maWx0ZXIoZW50cnkgPT4gdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJylcbiAgICAubWFwKGlkID0+IGZpbmRCeUlkKGlkKShjdXJyZW50TGF5ZXJzKSlcbiAgICAuZmlsdGVyKGxheWVyID0+IEJvb2xlYW4obGF5ZXIpKTtcbiAgY29uc3QgbmV3TGF5ZXJzID0gY3VycmVudExheWVycy5jb25jYXQobGF5ZXJzVG9JbnNlcnQpO1xuICBjb25zdCBuZXdMYXllck9yZGVyUXVldWUgPSBpbnNlcnRJdGVtQmFzZWRPblByZXNlcnZlZE9yZGVyKFxuICAgIGN1cnJlbnRMYXllclF1ZXVlLFxuICAgIGxheWVyc1RvSW5zZXJ0LFxuICAgIHByZXNlcnZlZE9yZGVyLFxuICAgIHRydWVcbiAgKTtcblxuICBjb25zdCBuZXdGbGF0TGF5ZXJPcmRlciA9IGdldExheWVyT3JkZXJGcm9tTGF5ZXJzKG5ld0xheWVyT3JkZXJRdWV1ZSk7XG5cbiAgLy8gSWYgbm8gZ3JvdXBzIGV4aXN0IGluIGN1cnJlbnQgb3JkZXIsIGp1c3QgdXNlIHRoZSBuZXcgZmxhdCBvcmRlclxuICBjb25zdCBoYXNHcm91cHMgPSBjdXJyZW50T3JkZXIuc29tZShlbnRyeSA9PiBpc1BsYWluT2JqZWN0KGVudHJ5KSk7XG4gIGlmICghaGFzR3JvdXBzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5ld0xheWVyT3JkZXI6IG5ld0ZsYXRMYXllck9yZGVyLFxuICAgICAgbmV3TGF5ZXJzXG4gICAgfTtcbiAgfVxuXG4gIC8vIFJlYnVpbGQgbGF5ZXJPcmRlciBwcmVzZXJ2aW5nIGdyb3VwcyBpbiB0aGVpciByZWxhdGl2ZSBwb3NpdGlvbnMuXG4gIC8vIFJlcGxhY2UgZWFjaCBzdHJpbmcgZW50cnkgd2l0aCBpdHMgdXBkYXRlZCBwb3NpdGlvbiBmcm9tIG5ld0ZsYXRMYXllck9yZGVyLFxuICAvLyBhbmQga2VlcCBncm91cHMgYXMtaXMuXG4gIGNvbnN0IGV4aXN0aW5nRmxhdElkcyA9IG5ldyBTZXQoXG4gICAgY3VycmVudE9yZGVyLmZpbHRlcihlbnRyeSA9PiB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSBhcyBzdHJpbmdbXVxuICApO1xuICBjb25zdCBuZXdJbnNlcnRlZElkcyA9IG5ld0ZsYXRMYXllck9yZGVyLmZpbHRlcihpZCA9PiAhZXhpc3RpbmdGbGF0SWRzLmhhcyhpZCkpO1xuXG4gIC8vIFJlYnVpbGQ6IHdhbGsgdGhyb3VnaCBjdXJyZW50T3JkZXIsIHJlcGxhY2Ugc3RyaW5nIGVudHJpZXMgd2l0aCB0aGVpclxuICAvLyBuZXcgcG9zaXRpb24gZXF1aXZhbGVudHMgZnJvbSBuZXdGbGF0TGF5ZXJPcmRlciwgdGhlbiBhcHBlbmQgYW55IG5ld2x5IGluc2VydGVkIGxheWVyc1xuICBjb25zdCByZXN1bHQ6IExheWVyT3JkZXIgPSBbXTtcbiAgY29uc3QgZmxhdFF1ZXVlID0gWy4uLm5ld0ZsYXRMYXllck9yZGVyLmZpbHRlcihpZCA9PiBleGlzdGluZ0ZsYXRJZHMuaGFzKGlkKSldO1xuICBsZXQgZmxhdElkeCA9IDA7XG5cbiAgZm9yIChjb25zdCBlbnRyeSBvZiBjdXJyZW50T3JkZXIpIHtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChlbnRyeSkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGVudHJ5IGFzIExheWVyT3JkZXJHcm91cCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlcGxhY2Ugd2l0aCBjb3JyZXNwb25kaW5nIGVudHJ5IGZyb20gcmVvcmRlcmVkIGZsYXQgbGlzdFxuICAgICAgaWYgKGZsYXRJZHggPCBmbGF0UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGZsYXRRdWV1ZVtmbGF0SWR4XSk7XG4gICAgICAgIGZsYXRJZHgrKztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBBcHBlbmQgYW55IG5ld2x5IGluc2VydGVkIGxheWVycyBhdCB0aGUgZnJvbnQgKHRoZXkgYXJlIG5ldylcbiAgcmV0dXJuIHtcbiAgICBuZXdMYXllck9yZGVyOiBbLi4ubmV3SW5zZXJ0ZWRJZHMsIC4uLnJlc3VsdF0sXG4gICAgbmV3TGF5ZXJzXG4gIH07XG59XG5cbi8qKlxuICogTWVyZ2Ugc2F2ZWQgbGF5ZXJPcmRlciB3aXRoIGN1cnJlbnQgc3RhdGUgdG8gcmVzdG9yZSBsYXllciBncm91cHMuXG4gKiBDYWxsZWQgYWZ0ZXIgbGF5ZXJzIGhhdmUgYmVlbiBtZXJnZWQuIElmIHRoZSBzYXZlZCBjb25maWcgY29udGFpbnMgYSBsYXllck9yZGVyXG4gKiB3aXRoIGdyb3VwcywgdGhpcyByZXBsYWNlcyB0aGUgZmxhdCBsYXllck9yZGVyIHdpdGggdGhlIHNhdmVkIGhpZXJhcmNoaWNhbCBvbmUsXG4gKiBmaWx0ZXJpbmcgb3V0IGFueSBsYXllciBJRHMgdGhhdCBkb24ndCBleGlzdCBpbiB0aGUgY3VycmVudCBzdGF0ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlTGF5ZXJPcmRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgc2F2ZWRMYXllck9yZGVyPzogYW55W10sXG4gIGZyb21Db25maWc/OiBib29sZWFuXG4pOiBTIHtcbiAgaWYgKCFzYXZlZExheWVyT3JkZXIgfHwgIUFycmF5LmlzQXJyYXkoc2F2ZWRMYXllck9yZGVyKSB8fCBzYXZlZExheWVyT3JkZXIubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gQ2hlY2sgaWYgdGhlIHNhdmVkIGxheWVyT3JkZXIgY29udGFpbnMgYW55IGdyb3Vwc1xuICBjb25zdCBoYXNHcm91cHMgPSBzYXZlZExheWVyT3JkZXIuc29tZShlbnRyeSA9PiBpc1BsYWluT2JqZWN0KGVudHJ5KSk7XG4gIGlmICghaGFzR3JvdXBzKSB7XG4gICAgLy8gTm8gZ3JvdXBzIC0gdGhlIGxheWVyIG1lcmdlciBhbHJlYWR5IGhhbmRsZWQgb3JkZXJpbmcgdmlhIHByZXNlcnZlTGF5ZXJPcmRlclxuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIElmIGxheWVycyBoYXZlbid0IGJlZW4gbWVyZ2VkIHlldCwgc3RvcmUgZm9yIGxhdGVyXG4gIGlmIChzdGF0ZS5sYXllcnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgbGF5ZXJPcmRlclRvQmVNZXJnZWQ6IHNhdmVkTGF5ZXJPcmRlclxuICAgIH07XG4gIH1cblxuICAvLyBCdWlsZCBhIHNldCBvZiB2YWxpZCBsYXllciBJRHMgZnJvbSBjdXJyZW50IHN0YXRlXG4gIGNvbnN0IHZhbGlkTGF5ZXJJZHMgPSBuZXcgU2V0KHN0YXRlLmxheWVycy5tYXAobCA9PiBsLmlkKSk7XG5cbiAgLy8gUmVjdXJzaXZlbHkgZmlsdGVyIHRoZSBzYXZlZCBsYXllck9yZGVyIHRvIG9ubHkgaW5jbHVkZSB2YWxpZCBsYXllcnNcbiAgZnVuY3Rpb24gZmlsdGVyTGF5ZXJPcmRlcihvcmRlcjogYW55W10pOiBMYXllck9yZGVyIHtcbiAgICBjb25zdCByZXN1bHQ6IExheWVyT3JkZXIgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIG9yZGVyKSB7XG4gICAgICBpZiAoaXNQbGFpbk9iamVjdChlbnRyeSkpIHtcbiAgICAgICAgY29uc3QgZ3JvdXAgPSBlbnRyeSBhcyBMYXllck9yZGVyR3JvdXA7XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkR3JvdXBPcmRlciA9IGZpbHRlckxheWVyT3JkZXIoZ3JvdXAubGF5ZXJPcmRlcik7XG4gICAgICAgIC8vIEtlZXAgdGhlIGdyb3VwIGV2ZW4gaWYgZW1wdHkgKHVzZXIgbWF5IHdhbnQgdGhlIGVtcHR5IGdyb3VwKVxuICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgLi4uZ3JvdXAsXG4gICAgICAgICAgbGF5ZXJPcmRlcjogZmlsdGVyZWRHcm91cE9yZGVyXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnICYmIHZhbGlkTGF5ZXJJZHMuaGFzKGVudHJ5KSkge1xuICAgICAgICByZXN1bHQucHVzaChlbnRyeSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBjb25zdCByZXN0b3JlZExheWVyT3JkZXIgPSBmaWx0ZXJMYXllck9yZGVyKHNhdmVkTGF5ZXJPcmRlcik7XG5cbiAgLy8gRmluZCBhbnkgbGF5ZXJzIGluIHRoZSBjdXJyZW50IHN0YXRlIHRoYXQgYXJlbid0IGluIHRoZSByZXN0b3JlZCBvcmRlclxuICAvLyAoY291bGQgaGFwcGVuIGlmIGxheWVycyB3ZXJlIGFkZGVkIGJldHdlZW4gc2F2ZSBhbmQgbG9hZClcbiAgY29uc3QgbGF5ZXJJZHNJblJlc3RvcmVkID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGZ1bmN0aW9uIGNvbGxlY3RJZHMob3JkZXI6IGFueVtdKSB7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBvcmRlcikge1xuICAgICAgaWYgKGlzUGxhaW5PYmplY3QoZW50cnkpKSB7XG4gICAgICAgIGNvbGxlY3RJZHMoKGVudHJ5IGFzIExheWVyT3JkZXJHcm91cCkubGF5ZXJPcmRlcik7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgbGF5ZXJJZHNJblJlc3RvcmVkLmFkZChlbnRyeSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbGxlY3RJZHMocmVzdG9yZWRMYXllck9yZGVyKTtcblxuICAvLyBBZGQgYW55IG1pc3NpbmcgbGF5ZXJzIGF0IHRoZSB0b3BcbiAgY29uc3QgbWlzc2luZ0xheWVycyA9IHN0YXRlLmxheWVycy5maWx0ZXIobCA9PiAhbGF5ZXJJZHNJblJlc3RvcmVkLmhhcyhsLmlkKSkubWFwKGwgPT4gbC5pZCk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllck9yZGVyOiBbLi4ubWlzc2luZ0xheWVycywgLi4ucmVzdG9yZWRMYXllck9yZGVyXSxcbiAgICBsYXllck9yZGVyVG9CZU1lcmdlZDogbnVsbFxuICB9O1xufVxuXG4vKipcbiAqIE1lcmdlIGludGVyYWN0aW9ucyB3aXRoIHNhdmVkIGNvbmZpZ1xuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlSW50ZXJhY3Rpb25zPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBpbnRlcmFjdGlvblRvQmVNZXJnZWQ6IFBhcnRpYWw8U2F2ZWRJbnRlcmFjdGlvbkNvbmZpZz4gfCB1bmRlZmluZWRcbik6IFMge1xuICBjb25zdCBtZXJnZWQ6IE5lc3RlZFBhcnRpYWw8U2F2ZWRJbnRlcmFjdGlvbkNvbmZpZz4gPSB7fTtcbiAgY29uc3QgdW5tZXJnZWQ6IFBhcnRpYWw8U2F2ZWRJbnRlcmFjdGlvbkNvbmZpZz4gPSB7fTtcblxuICBpZiAoaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkKSB7XG4gICAgKE9iamVjdC5rZXlzKGludGVyYWN0aW9uVG9CZU1lcmdlZCkgYXMgQXJyYXk8a2V5b2YgU2F2ZWRJbnRlcmFjdGlvbkNvbmZpZz4pLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmICghc3RhdGUuaW50ZXJhY3Rpb25Db25maWdba2V5XSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGN1cnJlbnRDb25maWcgPVxuICAgICAgICBrZXkgPT09ICd0b29sdGlwJyB8fCBrZXkgPT09ICdicnVzaCcgfHwga2V5ID09PSAnZ2VvY29kZXInXG4gICAgICAgICAgPyBzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZ1trZXldLmNvbmZpZ1xuICAgICAgICAgIDogbnVsbDtcblxuICAgICAgY29uc3Qge2VuYWJsZWQsIC4uLmNvbmZpZ1NhdmVkfSA9IGludGVyYWN0aW9uVG9CZU1lcmdlZFtrZXldIHx8IHt9O1xuXG4gICAgICBsZXQgY29uZmlnVG9NZXJnZSA9IGNvbmZpZ1NhdmVkO1xuXG4gICAgICBpZiAoa2V5ID09PSAndG9vbHRpcCcpIHtcbiAgICAgICAgY29uc3Qge21lcmdlZFRvb2x0aXAsIHVubWVyZ2VkVG9vbHRpcH0gPSBtZXJnZUludGVyYWN0aW9uVG9vbHRpcENvbmZpZyhcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICBjb25maWdTYXZlZCBhcyBTYXZlZEludGVyYWN0aW9uQ29uZmlnWyd0b29sdGlwJ11cbiAgICAgICAgKTtcblxuICAgICAgICAvLyBtZXJnZSBuZXcgZGF0YXNldCB0b29sdGlwcyB3aXRoIG9yaWdpbmFsIGRhdGFzZXQgdG9vbHRpcHNcbiAgICAgICAgY29uZmlnVG9NZXJnZSA9IHtcbiAgICAgICAgICBmaWVsZHNUb1Nob3c6IHtcbiAgICAgICAgICAgIC4uLihjdXJyZW50Q29uZmlnIGFzIFRvb2x0aXBJbmZvWydjb25maWcnXSkuZmllbGRzVG9TaG93LFxuICAgICAgICAgICAgLi4ubWVyZ2VkVG9vbHRpcFxuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoT2JqZWN0LmtleXModW5tZXJnZWRUb29sdGlwKS5sZW5ndGgpIHtcbiAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgdW5tZXJnZWQudG9vbHRpcCA9IHtmaWVsZHNUb1Nob3c6IHVubWVyZ2VkVG9vbHRpcCwgZW5hYmxlZDogQm9vbGVhbihlbmFibGVkKX07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbWVyZ2VkW2tleV0gPSB7XG4gICAgICAgIC4uLnN0YXRlLmludGVyYWN0aW9uQ29uZmlnW2tleV0sXG4gICAgICAgIGVuYWJsZWQ6IEJvb2xlYW4oZW5hYmxlZCksXG4gICAgICAgIC4uLihjdXJyZW50Q29uZmlnXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGNvbmZpZzogcGljayhcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAuLi5jdXJyZW50Q29uZmlnLFxuICAgICAgICAgICAgICAgICAgLi4uY29uZmlnVG9NZXJnZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoY3VycmVudENvbmZpZylcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge30pXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgbmV4dFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGludGVyYWN0aW9uQ29uZmlnOiB7XG4gICAgICAuLi5zdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgIC4uLm1lcmdlZFxuICAgIH0sXG4gICAgaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkOiBzYXZlZFVubWVyZ2VkSW50ZXJhY3Rpb24oc3RhdGUsIHVubWVyZ2VkKVxuICB9O1xuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG5mdW5jdGlvbiBjb21iaW5lSW50ZXJhY3Rpb25Db25maWdzKGNvbmZpZ3M6IFNhdmVkSW50ZXJhY3Rpb25Db25maWdbXSk6IFNhdmVkSW50ZXJhY3Rpb25Db25maWcge1xuICBjb25zdCBjb21iaW5lZCA9IHsuLi5jb25maWdzWzBdfTtcbiAgLy8gaGFuZGxlIGVhY2ggcHJvcGVydHkga2V5IG9mIGFuIGBJbnRlcmFjdGlvbkNvbmZpZ2AsIGUuZy4gdG9vbHRpcCwgZ2VvY29kZXIsIGJydXNoLCBjb29yZGluYXRlXG4gIC8vIGJ5IGNvbWJpbmluZyB2YWx1ZXMgZm9yIGVhY2ggYW1vbmcgYWxsIHBhc3NlZCBpbiBjb25maWdzXG5cbiAgZm9yIChjb25zdCBrZXkgaW4gY29tYmluZWQpIHtcbiAgICBjb25zdCB0b0JlQ29tYmluZWRQcm9wcyA9IGNvbmZpZ3MubWFwKGMgPT4gY1trZXldKTtcblxuICAgIC8vIGFsbCBvZiB0aGVzZSBoYXZlIGFuIGVuYWJsZWQgYm9vbGVhblxuICAgIGNvbWJpbmVkW2tleV0gPSB7XG4gICAgICAvLyBhcmUgYW55IG9mIHRoZSBjb25maWdzJyBlbmFibGVkIHZhbHVlcyB0cnVlP1xuICAgICAgZW5hYmxlZDogdG9CZUNvbWJpbmVkUHJvcHMuc29tZShwID0+IHA/LmVuYWJsZWQpXG4gICAgfTtcblxuICAgIGlmIChrZXkgPT09ICd0b29sdGlwJykge1xuICAgICAgLy8gYXJlIGFueSBvZiB0aGUgY29uZmlncycgY29tcGFyZU1vZGUgdmFsdWVzIHRydWU/XG4gICAgICBjb21iaW5lZFtrZXldLmNvbXBhcmVNb2RlID0gdG9CZUNvbWJpbmVkUHJvcHMuc29tZShwID0+IHA/LmNvbXBhcmVNb2RlKTtcblxuICAgICAgLy8gcmV0dXJuIHRoZSBjb21wYXJlIHR5cGUgbW9kZSwgaXQgd2lsbCBiZSBlaXRoZXIgYWJzb2x1dGUgb3IgcmVsYXRpdmVcbiAgICAgIGNvbWJpbmVkW2tleV0uY29tcGFyZVR5cGUgPSBnZXRWYWx1ZVdpdGhIaWdoZXN0T2NjdXJyZW5jZShcbiAgICAgICAgdG9CZUNvbWJpbmVkUHJvcHMubWFwKHAgPT4gcC5jb21wYXJlVHlwZSlcbiAgICAgICk7XG5cbiAgICAgIC8vIGNvbWJpbmUgZmllbGRzVG9TaG93IGFtb25nIGFsbCBkYXRhc2V0IGlkc1xuICAgICAgY29tYmluZWRba2V5XS5maWVsZHNUb1Nob3cgPSB0b0JlQ29tYmluZWRQcm9wc1xuICAgICAgICAubWFwKHAgPT4gcC5maWVsZHNUb1Nob3cpXG4gICAgICAgIC5yZWR1Y2UoKGFjYywgbmV4dEZpZWxkc1RvU2hvdykgPT4ge1xuICAgICAgICAgIGZvciAoY29uc3QgbmV4dERhdGFJZEtleSBpbiBuZXh0RmllbGRzVG9TaG93KSB7XG4gICAgICAgICAgICBjb25zdCBuZXh0VG9vbHRpcEZpZWxkcyA9IG5leHRGaWVsZHNUb1Nob3dbbmV4dERhdGFJZEtleV07XG4gICAgICAgICAgICBpZiAoIWFjY1tuZXh0RGF0YUlkS2V5XSkge1xuICAgICAgICAgICAgICAvLyBpZiB0aGUgZGF0YXNldCBpZCBpcyBub3QgcHJlc2VudCBpbiB0aGUgYWNjdW11bGF0b3JcbiAgICAgICAgICAgICAgLy8gdGhlbiBhZGQgaXQgd2l0aCBpdHMgdG9vbHRpcCBmaWVsZHNcbiAgICAgICAgICAgICAgYWNjW25leHREYXRhSWRLZXldID0gbmV4dFRvb2x0aXBGaWVsZHM7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBvdGhlcndpc2UgdGhlIGRhdGFzZXQgaWQgaXMgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBhY2N1bXVsYXRvclxuICAgICAgICAgICAgICAvLyBzbyBvbmx5IGFkZCB0aGUgbmV4dCB0b29sdGlwIGZpZWxkcyBmb3IgdGhpcyBkYXRhc2V0J3MgYXJyYXkgaWYgdGhleSBhcmUgbm90IGFscmVhZHkgcHJlc2VudCxcbiAgICAgICAgICAgICAgLy8gdXNpbmcgdGhlIHRvb2x0aXBGaWVsZC5uYW1lIHByb3BlcnR5IGZvciB1bmlxdWVuZXNzXG4gICAgICAgICAgICAgIG5leHRUb29sdGlwRmllbGRzLmZvckVhY2gobmV4dFRGID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWFjY1tuZXh0RGF0YUlkS2V5XS5maW5kKCh7bmFtZX0pID0+IG5leHRURi5uYW1lID09PSBuYW1lKSkge1xuICAgICAgICAgICAgICAgICAgYWNjW25leHREYXRhSWRLZXldLnB1c2gobmV4dFRGKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LCB7fSk7XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2JydXNoJykge1xuICAgICAgLy8ga2VlcCB0aGUgYmlnZ2VzdCBicnVzaCBzaXplXG4gICAgICBjb21iaW5lZFtrZXldLnNpemUgPVxuICAgICAgICBhZ2dyZWdhdGUodG9CZUNvbWJpbmVkUHJvcHMsIEFHR1JFR0FUSU9OX1RZUEVTLm1heGltdW0sIHAgPT4gcC5zaXplKSA/PyBudWxsO1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdnZW9jb2RlcicpIHtcbiAgICAgIGNvbWJpbmVkW2tleV0ubGltaXRTZWFyY2ggPSB0b0JlQ29tYmluZWRQcm9wcy5zb21lKHAgPT4gcD8ubGltaXRTZWFyY2gpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb21iaW5lZDtcbn1cblxuZnVuY3Rpb24gc2F2ZWRVbm1lcmdlZEludGVyYWN0aW9uPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICB1bm1lcmdlZDogUGFydGlhbDxTYXZlZEludGVyYWN0aW9uQ29uZmlnPlxuKSB7XG4gIGlmICghdW5tZXJnZWQ/LnRvb2x0aXA/LmZpZWxkc1RvU2hvdykge1xuICAgIHJldHVybiBzdGF0ZS5pbnRlcmFjdGlvblRvQmVNZXJnZWQ7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB0b29sdGlwOiB7XG4gICAgICAuLi5zdGF0ZS5pbnRlcmFjdGlvblRvQmVNZXJnZWQudG9vbHRpcCxcbiAgICAgIC4uLih0eXBlb2YgdW5tZXJnZWQ/LnRvb2x0aXA/LmVuYWJsZWQgPT09ICdib29sZWFuJ1xuICAgICAgICA/IHtlbmFibGVkOiB1bm1lcmdlZC50b29sdGlwLmVuYWJsZWR9XG4gICAgICAgIDoge30pLFxuICAgICAgZmllbGRzVG9TaG93OiB7XG4gICAgICAgIC4uLnN0YXRlLmludGVyYWN0aW9uVG9CZU1lcmdlZD8udG9vbHRpcD8uZmllbGRzVG9TaG93LFxuICAgICAgICAuLi51bm1lcmdlZD8udG9vbHRpcD8uZmllbGRzVG9TaG93XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiByZXBsYWNlSW50ZXJhY3Rpb25EYXRhc2V0SWRzKGludGVyYWN0aW9uQ29uZmlnLCBkYXRhSWQ6IHN0cmluZywgZGF0YUlkVG9SZXBsYWNlOiBzdHJpbmcpIHtcbiAgaWYgKGludGVyYWN0aW9uQ29uZmlnPy50b29sdGlwPy5maWVsZHNUb1Nob3dbZGF0YUlkXSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5pbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgLi4uaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcCxcbiAgICAgICAgZmllbGRzVG9TaG93OiB7XG4gICAgICAgICAgW2RhdGFJZFRvUmVwbGFjZV06IGludGVyYWN0aW9uQ29uZmlnPy50b29sdGlwPy5maWVsZHNUb1Nob3dbZGF0YUlkXVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBNZXJnZSBzcGxpdE1hcHMgY29uZmlnIHdpdGggY3VycmVudCB2aXNTdGV0ZS5cbiAqIFBhbmVscyBhcmUgbWF0Y2hlZCBieSBpbmRleDogaW5kZXggaSBvZiBgc3BsaXRNYXBzYCwgYHN0YXRlLnNwbGl0TWFwc2AgYW5kXG4gKiBgc3RhdGUuc3BsaXRNYXBzVG9CZU1lcmdlZGAgaXMgdGhlIHNhbWUgbWFwIHBhbmVsLlxuICogMS4gaWYgY3VycmVudCBtYXAgaXMgc3BsaXQsIGJ1dCBzcGxpdE1hcCBET0VTTk9UIGNvbnRhaW4gbWFwc1xuICogICAgOiBkb24ndCBtZXJnZSBhbnl0aGluZ1xuICogMi4gaWYgY3VycmVudCBtYXAgaXMgTk9UIHNwbGl0LCBidXQgc3BsaXRNYXBzIGNvbnRhaW4gbWFwc1xuICogICAgOiBhZGQgdG8gc3BsaXRNYXBzLCBhbmQgYWRkIGN1cnJlbnQgbGF5ZXJzIHRvIHNwbGl0TWFwcy5cbiAqICAgICAgUGFuZWxzIGFyZSBjcmVhdGVkIG9uY2Ugb25lIG9mIHRoZW0gY2FuIGJlIG1lcmdlZDogaXQgaGFzIG5vIGxheWVycywgb3Igb25lIG9mIGl0cyBsYXllcnMgZXhpc3RzXG4gKiAzLiBsYXllcnMgdGhhdCBkb24ndCBleGlzdCB5ZXRcbiAqICAgIDogc2F2ZSB0byBzcGxpdE1hcHNUb0JlTWVyZ2VkLCBpbiB0aGUgcGFuZWwgYXQgdGhlIHNhbWUgaW5kZXhcbiAqIEEgbGF5ZXIgbGlzdGVkIGluIHNwbGl0TWFwcyBvbmx5IHNob3dzIGluIHRoZSBwYW5lbHMgdGhhdCBsaXN0IGl0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VTcGxpdE1hcHM8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIHNwbGl0TWFwczogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnc3BsaXRNYXBzJ10gPSBbXVxuKTogUyB7XG4gIGNvbnN0IGxheWVyRXhpc3RzID0gKGlkOiBzdHJpbmcpID0+IHN0YXRlLmxheWVycy5zb21lKGwgPT4gbC5pZCA9PT0gaWQpO1xuICBjb25zdCBjcmVhdGVQYW5lbHMgPVxuICAgIHN0YXRlLnNwbGl0TWFwcy5sZW5ndGggPiAwIHx8XG4gICAgc3BsaXRNYXBzLnNvbWUoc20gPT4ge1xuICAgICAgY29uc3QgaWRzID0gT2JqZWN0LmtleXMoc20ubGF5ZXJzKTtcbiAgICAgIHJldHVybiAhaWRzLmxlbmd0aCB8fCBpZHMuc29tZShsYXllckV4aXN0cyk7XG4gICAgfSk7XG4gIGNvbnN0IGN1cnJlbnRMYXllcnMgPSBnZXRJbml0aWFsTWFwTGF5ZXJzRm9yU3BsaXRNYXAoXG4gICAgc3RhdGUubGF5ZXJzLmZpbHRlcihsID0+ICFzcGxpdE1hcHMuc29tZShzbSA9PiBsLmlkIGluIHNtLmxheWVycykpXG4gICk7XG5cbiAgY29uc3QgbWVyZ2VkID0gWy4uLnN0YXRlLnNwbGl0TWFwc107XG4gIGNvbnN0IHVubWVyZ2VkOiB0eXBlb2Ygc3BsaXRNYXBzID0gW107XG4gIHNwbGl0TWFwcy5mb3JFYWNoKChzbSwgaSkgPT4ge1xuICAgIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyhzbS5sYXllcnMpO1xuICAgIGlmIChjcmVhdGVQYW5lbHMpIHtcbiAgICAgIC8vIGNyZWF0ZSBtYXAgcGFuZWwgaWYgY3VycmVudCBtYXAgaXMgbm90IHNwbGl0LCBrZWVwIGlkXG4gICAgICBjb25zdCBwYW5lbCA9IG1lcmdlZFtpXSB8fCB7Li4uc20sIGxheWVyczogY3VycmVudExheWVyc307XG4gICAgICBtZXJnZWRbaV0gPSB7XG4gICAgICAgIC4uLnBhbmVsLFxuICAgICAgICBsYXllcnM6IHsuLi5wYW5lbC5sYXllcnMsIC4uLk9iamVjdC5mcm9tRW50cmllcyhlbnRyaWVzLmZpbHRlcigoW2lkXSkgPT4gbGF5ZXJFeGlzdHMoaWQpKSl9XG4gICAgICB9O1xuICAgIH1cbiAgICB1bm1lcmdlZFtpXSA9IHsuLi5zbSwgbGF5ZXJzOiBPYmplY3QuZnJvbUVudHJpZXMoZW50cmllcy5maWx0ZXIoKFtpZF0pID0+ICFsYXllckV4aXN0cyhpZCkpKX07XG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgc3BsaXRNYXBzOiBtZXJnZWQsXG4gICAgc3BsaXRNYXBzVG9CZU1lcmdlZDogdW5tZXJnZWQuc29tZShzbSA9PiBPYmplY3Qua2V5cyhzbS5sYXllcnMpLmxlbmd0aClcbiAgICAgID8gY29tYmluZVNwbGl0TWFwc0J5SW5kZXgoc3RhdGUuc3BsaXRNYXBzVG9CZU1lcmdlZCwgdW5tZXJnZWQpXG4gICAgICA6IHN0YXRlLnNwbGl0TWFwc1RvQmVNZXJnZWRcbiAgfTtcbn1cblxuLyoqXG4gKiBNZXJnZSBjaGFydHMgd2l0aCBzYXZlZCBjb25maWcuIENoYXJ0cyB3aG9zZSBkYXRhc2V0IGlzIG5vdCBsb2FkZWQgeWV0IGFyZVxuICogcGFya2VkIG9uIGBjaGFydHNUb0JlTWVyZ2VkYCAoc2FtZSBhcyBmaWx0ZXJzKSBzbyBkYXRhc2V0IHJlcGxhY2UgY2FuIHJlbWFwXG4gKiBgZGF0YUlkYCBhbmQgcmVzdG9yZSB0aGVtIGFmdGVyIHRoZSBuZXcgdGFibGUgbGFuZHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUNoYXJ0czxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgY2hhcnRzOiBDaGFydENvbmZpZ1tdIHwgdW5kZWZpbmVkLFxuICBmcm9tQ29uZmlnPzogYm9vbGVhblxuKTogUyB7XG4gIGlmICghQXJyYXkuaXNBcnJheShjaGFydHMpIHx8ICFjaGFydHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IGluY29taW5nSWRzID0gbmV3IFNldChcbiAgICBjaGFydHMubWFwKGNoYXJ0ID0+IGNoYXJ0Py5pZCkuZmlsdGVyKChpZCk6IGlkIGlzIHN0cmluZyA9PiBCb29sZWFuKGlkKSlcbiAgKTtcbiAgY29uc3QgZXhpc3RpbmdJZHMgPSBuZXcgU2V0KChzdGF0ZS5jaGFydHMgfHwgW10pLm1hcChjaGFydCA9PiBjaGFydC5pZCkpO1xuICBjb25zdCBuZXh0Q2hhcnRzOiBDaGFydENvbmZpZ1tdID0gW107XG4gIGNvbnN0IGZhaWxlZDogQ2hhcnRDb25maWdbXSA9IFtdO1xuICBjaGFydHMuZm9yRWFjaChjaGFydCA9PiB7XG4gICAgaWYgKCFjaGFydCB8fCAhY2hhcnQuaWQgfHwgZXhpc3RpbmdJZHMuaGFzKGNoYXJ0LmlkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBub3JtYWxpemVkOiBDaGFydENvbmZpZyA9IGZyb21Db25maWdcbiAgICAgID8ge1xuICAgICAgICAgIC4uLmNoYXJ0LFxuICAgICAgICAgIC8vIE9sZGVyIGNvbmZpZ3Mgb21pdCBgcGlubmVkYDsga2VlcCBjaGFydHMgdmlzaWJsZSBsaWtlIHRoZSBsZWdlbmQuXG4gICAgICAgICAgcGlubmVkOiBjaGFydC5waW5uZWQgIT09IGZhbHNlLFxuICAgICAgICAgIGRpc3BsYXk6IHtcbiAgICAgICAgICAgIC4uLmNoYXJ0LmRpc3BsYXksXG4gICAgICAgICAgICBpc0NvbmZpZ0FjdGl2ZTogZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIDogY2hhcnQ7XG4gICAgaWYgKFxuICAgICAgbm9ybWFsaXplZC5kYXRhSWQgJiZcbiAgICAgICghc3RhdGUuZGF0YXNldHNbbm9ybWFsaXplZC5kYXRhSWRdIHx8IHN0YXRlLmlzTWVyZ2luZ0RhdGFzZXRzW25vcm1hbGl6ZWQuZGF0YUlkXSlcbiAgICApIHtcbiAgICAgIGZhaWxlZC5wdXNoKG5vcm1hbGl6ZWQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBleGlzdGluZ0lkcy5hZGQobm9ybWFsaXplZC5pZCk7XG4gICAgbmV4dENoYXJ0cy5wdXNoKG5vcm1hbGl6ZWQpO1xuICB9KTtcbiAgaWYgKCFuZXh0Q2hhcnRzLmxlbmd0aCAmJiAhZmFpbGVkLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGNoYXJ0czogbmV4dENoYXJ0cy5sZW5ndGggPyBbLi4uKHN0YXRlLmNoYXJ0cyB8fCBbXSksIC4uLm5leHRDaGFydHNdIDogc3RhdGUuY2hhcnRzLFxuICAgIGNoYXJ0c1RvQmVNZXJnZWQ6IFtcbiAgICAgIC4uLihzdGF0ZS5jaGFydHNUb0JlTWVyZ2VkIHx8IFtdKS5maWx0ZXIoY2hhcnQgPT4gIWluY29taW5nSWRzLmhhcyhjaGFydC5pZCkpLFxuICAgICAgLi4uZmFpbGVkXG4gICAgXVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUNoYXJ0RGF0YXNldElkcyhcbiAgc2F2ZWRDaGFydHM6IENoYXJ0Q29uZmlnW10gfCB1bmRlZmluZWQsXG4gIGRhdGFJZDogc3RyaW5nLFxuICBkYXRhSWRUb1VzZTogc3RyaW5nXG4pOiBDaGFydENvbmZpZ1tdIHwgbnVsbCB7XG4gIGlmICghQXJyYXkuaXNBcnJheShzYXZlZENoYXJ0cykgfHwgIXNhdmVkQ2hhcnRzLmxlbmd0aCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHJlcGxhY2VkID0gc2F2ZWRDaGFydHNcbiAgICAuZmlsdGVyKGNoYXJ0ID0+IGNoYXJ0Py5kYXRhSWQgPT09IGRhdGFJZClcbiAgICAubWFwKGNoYXJ0ID0+ICh7Li4uY2hhcnQsIGRhdGFJZDogZGF0YUlkVG9Vc2V9KSk7XG4gIHJldHVybiByZXBsYWNlZC5sZW5ndGggPyByZXBsYWNlZCA6IG51bGw7XG59XG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VFZmZlY3RzPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBlZmZlY3RzOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydlZmZlY3RzJ10sXG4gIGZyb21Db25maWc/OiBib29sZWFuXG4pOiBTIHtcbiAgY29uc3QgbmV3RWZmZWN0cyA9IFtcbiAgICAuLi5zdGF0ZS5lZmZlY3RzLFxuICAgIC4uLihlZmZlY3RzIHx8IFtdKVxuICAgICAgLm1hcChlZmZlY3QgPT4ge1xuICAgICAgICByZXR1cm4gZnJvbUNvbmZpZ1xuICAgICAgICAgID8gY3JlYXRlRWZmZWN0KFxuICAgICAgICAgICAgICBkZWVwbWVyZ2UuYWxsKFtcbiAgICAgICAgICAgICAgICBlZmZlY3QsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgLy8gY29sbGFwc2UgYWxsIHBhbmVscyB3aGVuIGxvYWRpbmcgZWZmZWN0c1xuICAgICAgICAgICAgICAgICAgaXNDb25maWdBY3RpdmU6IGZhbHNlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogKGVmZmVjdCBhcyBFZmZlY3RUeXBlKTtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKGVmZmVjdCA9PiB7XG4gICAgICAgIHJldHVybiBCb29sZWFuKGVmZmVjdCAmJiBlZmZlY3QuaXNWYWxpZFRvU2F2ZSgpKTtcbiAgICAgIH0pXG4gIF07XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWZmZWN0czogbmV3RWZmZWN0cyxcbiAgICBlZmZlY3RPcmRlcjogbmV3RWZmZWN0cy5tYXAoZWZmZWN0ID0+IGVmZmVjdC5pZClcbiAgfTtcbn1cblxuLyoqXG4gKiBNZXJnZSBhbm5vdGF0aW9ucyB3aXRoIHNhdmVkIGNvbmZpZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VBbm5vdGF0aW9uczxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTLCBhbm5vdGF0aW9uczogYW55W10pOiBTIHtcbiAgaWYgKCFhbm5vdGF0aW9ucyB8fCAhYW5ub3RhdGlvbnMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IGV4aXN0aW5nSWRzID0gbmV3IFNldChzdGF0ZS5hbm5vdGF0aW9ucy5tYXAoYSA9PiBhLmlkKSk7XG4gIGNvbnN0IHZhbGlkQW5ub3RhdGlvbnMgPSBhbm5vdGF0aW9uc1xuICAgIC5maWx0ZXIoXG4gICAgICBhID0+XG4gICAgICAgIGEgJiZcbiAgICAgICAgYS5pZCAmJlxuICAgICAgICAhZXhpc3RpbmdJZHMuaGFzKGEuaWQpICYmXG4gICAgICAgIGlzQW5ub3RhdGlvbktpbmQoYS5raW5kKSAmJlxuICAgICAgICBBcnJheS5pc0FycmF5KGEuYW5jaG9yUG9pbnQpICYmXG4gICAgICAgIChhLmFuY2hvclBvaW50Lmxlbmd0aCA9PT0gMiB8fCBhLmFuY2hvclBvaW50Lmxlbmd0aCA9PT0gMykgJiZcbiAgICAgICAgYS5hbmNob3JQb2ludC5ldmVyeSh2YWx1ZSA9PiBOdW1iZXIuaXNGaW5pdGUodmFsdWUpKVxuICAgIClcbiAgICAubWFwKGEgPT4gKHtcbiAgICAgIGlzVmlzaWJsZTogdHJ1ZSxcbiAgICAgIGF1dG9TaXplOiB0cnVlLFxuICAgICAgYXV0b1NpemVZOiB0cnVlLFxuICAgICAgbGFiZWw6ICcnLFxuICAgICAgbGluZUNvbG9yOiBJTklUSUFMX0FOTk9UQVRJT05fTElORV9DT0xPUixcbiAgICAgIGxpbmVXaWR0aDogSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEgsXG4gICAgICB0ZXh0V2lkdGg6IDAsXG4gICAgICB0ZXh0SGVpZ2h0OiAwLFxuICAgICAgLi4uYVxuICAgIH0pKTtcbiAgaWYgKCF2YWxpZEFubm90YXRpb25zLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFubm90YXRpb25zOiBbLi4uc3RhdGUuYW5ub3RhdGlvbnMsIC4uLnZhbGlkQW5ub3RhdGlvbnNdXG4gIH07XG59XG5cbi8qKlxuICogTWVyZ2UgaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcCB3aXRoIHNhdmVkIGNvbmZpZyxcbiAqIHZhbGlkYXRlIGZpZWxkc1RvU2hvd1xuICpcbiAqIEBwYXJhbSBzdGF0ZVxuICogQHBhcmFtIHRvb2x0aXBDb25maWdcbiAqIEByZXR1cm4gLSB7bWVyZ2VkVG9vbHRpcDoge30sIHVubWVyZ2VkVG9vbHRpcDoge319XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUludGVyYWN0aW9uVG9vbHRpcENvbmZpZyhcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB0b29sdGlwQ29uZmlnOiBQaWNrPFRvb2x0aXBJbmZvWydjb25maWcnXSwgJ2ZpZWxkc1RvU2hvdyc+IHwgbnVsbCA9IG51bGxcbikge1xuICBjb25zdCB1bm1lcmdlZFRvb2x0aXA6IFRvb2x0aXBJbmZvWydjb25maWcnXVsnZmllbGRzVG9TaG93J10gPSB7fTtcbiAgY29uc3QgbWVyZ2VkVG9vbHRpcDogVG9vbHRpcEluZm9bJ2NvbmZpZyddWydmaWVsZHNUb1Nob3cnXSA9IHt9O1xuXG4gIGlmIChcbiAgICAhdG9vbHRpcENvbmZpZyB8fFxuICAgICF0b29sdGlwQ29uZmlnLmZpZWxkc1RvU2hvdyB8fFxuICAgICFPYmplY3Qua2V5cyh0b29sdGlwQ29uZmlnLmZpZWxkc1RvU2hvdykubGVuZ3RoXG4gICkge1xuICAgIHJldHVybiB7bWVyZ2VkVG9vbHRpcCwgdW5tZXJnZWRUb29sdGlwfTtcbiAgfVxuXG4gIGZvciAoY29uc3QgZGF0YUlkIGluIHRvb2x0aXBDb25maWcuZmllbGRzVG9TaG93KSB7XG4gICAgaWYgKCFzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdIHx8IHN0YXRlLmlzTWVyZ2luZ0RhdGFzZXRzW2RhdGFJZF0pIHtcbiAgICAgIC8vIGlzIG5vdCB5ZXQgbG9hZGVkXG4gICAgICB1bm1lcmdlZFRvb2x0aXBbZGF0YUlkXSA9IHRvb2x0aXBDb25maWcuZmllbGRzVG9TaG93W2RhdGFJZF07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGlmIGRhdGFzZXQgaXMgbG9hZGVkXG4gICAgICBjb25zdCBhbGxGaWVsZHMgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdLmZpZWxkcy5tYXAoZCA9PiBkLm5hbWUpO1xuICAgICAgY29uc3QgZm91bmRGaWVsZHNUb1Nob3cgPSB0b29sdGlwQ29uZmlnLmZpZWxkc1RvU2hvd1tkYXRhSWRdLmZpbHRlcihmaWVsZCA9PlxuICAgICAgICBhbGxGaWVsZHMuaW5jbHVkZXMoZmllbGQubmFtZSlcbiAgICAgICk7XG5cbiAgICAgIG1lcmdlZFRvb2x0aXBbZGF0YUlkXSA9IGZvdW5kRmllbGRzVG9TaG93O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7bWVyZ2VkVG9vbHRpcCwgdW5tZXJnZWRUb29sdGlwfTtcbn1cbi8qKlxuICogTWVyZ2UgbGF5ZXJCbGVuZGluZyB3aXRoIHNhdmVkXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VMYXllckJsZW5kaW5nPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBsYXllckJsZW5kaW5nOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydsYXllckJsZW5kaW5nJ11cbik6IFMge1xuICBpZiAobGF5ZXJCbGVuZGluZyAmJiBMQVlFUl9CTEVORElOR1NbbGF5ZXJCbGVuZGluZ10pIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBsYXllckJsZW5kaW5nXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBDb21iaW5lcyBtdWx0aXBsZSBsYXllciBibGVuZGluZyBjb25maWdzIGludG8gYSBzaW5nbGUgc3RyaW5nXG4gKiBieSByZXR1cm5pbmcgdGhlIG9uZSB3aXRoIHRoZSBoaWdoZXN0IG9jY3VycmVuY2VcbiAqL1xuZnVuY3Rpb24gY29tYmluZUxheWVyQmxlbmRpbmdDb25maWdzKGNvbmZpZ3M6IHN0cmluZ1tdKTogc3RyaW5nIHwgbnVsbCB7XG4gIC8vIHJldHVybiB0aGUgbW9kZSBvZiB0aGUgbGF5ZXIgYmxlbmRpbmcgdHlwZVxuICByZXR1cm4gZ2V0VmFsdWVXaXRoSGlnaGVzdE9jY3VycmVuY2UoY29uZmlncyk7XG59XG5cbi8qKlxuICogTWVyZ2Ugb3ZlcmxheUJsZW5kaW5nIHdpdGggc2F2ZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlT3ZlcmxheUJsZW5kaW5nPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBvdmVybGF5QmxlbmRpbmc6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ292ZXJsYXlCbGVuZGluZyddXG4pOiBTIHtcbiAgaWYgKG92ZXJsYXlCbGVuZGluZyAmJiBPVkVSTEFZX0JMRU5ESU5HU1tvdmVybGF5QmxlbmRpbmddKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgb3ZlcmxheUJsZW5kaW5nXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBDb21iaW5lcyBtdWx0aXBsZSBvdmVybGF5IGJsZW5kaW5nIGNvbmZpZ3MgaW50byBhIHNpbmdsZSBzdHJpbmdcbiAqIGJ5IHJldHVybmluZyB0aGUgb25lIHdpdGggdGhlIGhpZ2hlc3Qgb2NjdXJyZW5jZVxuICoqL1xuZnVuY3Rpb24gY29tYmluZU92ZXJsYXlCbGVuZGluZ0NvbmZpZ3MoY29uZmlnczogc3RyaW5nW10pOiBzdHJpbmcgfCBudWxsIHtcbiAgLy8gcmV0dXJuIHRoZSBtb2RlIG9mIHRoZSBvdmVybGF5IGJsZW5kaW5nIHR5cGVcbiAgcmV0dXJuIGdldFZhbHVlV2l0aEhpZ2hlc3RPY2N1cnJlbmNlKGNvbmZpZ3MpO1xufVxuXG4vKipcbiAqIE1lcmdlIGFuaW1hdGlvbiBjb25maWdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlQW5pbWF0aW9uQ29uZmlnPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhbmltYXRpb246IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2FuaW1hdGlvbkNvbmZpZyddXG4pOiBTIHtcbiAgaWYgKGFuaW1hdGlvbiAmJiBhbmltYXRpb24uY3VycmVudFRpbWUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgICAuLi5hbmltYXRpb24sXG4gICAgICAgIGRvbWFpbjogbnVsbFxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbmZ1bmN0aW9uIGNvbWJpbmVBbmltYXRpb25Db25maWdzKGNvbmZpZ3M6IFNhdmVkQW5pbWF0aW9uQ29uZmlnW10pOiBTYXZlZEFuaW1hdGlvbkNvbmZpZyB7XG4gIC8vIGdldCB0aGUgc21hbGxlc3QgdmFsdWVzIG9mIGN1cnJlbnRUaW1lIGFuZCBzcGVlZCBhbW9uZyBhbGwgY29uZmlnc1xuICByZXR1cm4ge1xuICAgIGN1cnJlbnRUaW1lOiBhZ2dyZWdhdGUoY29uZmlncywgQUdHUkVHQVRJT05fVFlQRVMubWluaW11bSwgYyA9PiBjLmN1cnJlbnRUaW1lKSA/PyBudWxsLFxuICAgIHNwZWVkOiBhZ2dyZWdhdGUoY29uZmlncywgQUdHUkVHQVRJT05fVFlQRVMubWluaW11bSwgYyA9PiBjLnNwZWVkKSA/PyBudWxsLFxuICAgIC8vIGFuZCB0aGUgbW9zdCBjb21tb24gdGltZSBmb3JtYXQgYW5kIHRpbWV6b25lIGFtb25nIHRoZSBjb25maWdzIHRoYXQgc2V0IG9uZVxuICAgIHRpbWVGb3JtYXQ6IGdldFZhbHVlV2l0aEhpZ2hlc3RPY2N1cnJlbmNlKGNvbmZpZ3MubWFwKGMgPT4gYy50aW1lRm9ybWF0KSksXG4gICAgdGltZXpvbmU6IGdldFZhbHVlV2l0aEhpZ2hlc3RPY2N1cnJlbmNlKGNvbmZpZ3MubWFwKGMgPT4gYy50aW1lem9uZSkpXG4gIH07XG59XG5cbi8qKlxuICogVmFsaWRhdGUgc2F2ZWQgbGF5ZXIgY29sdW1ucyB3aXRoIG5ldyBkYXRhLFxuICogdXBkYXRlIGZpZWxkSWR4IGJhc2VkIG9uIG5ldyBmaWVsZHNcbiAqXG4gKiBAcGFyYW0gZmllbGRzXG4gKiBAcGFyYW0gc2F2ZWRDb2xzXG4gKiBAcGFyYW0gZW1wdHlDb2xzXG4gKiBAcGFyYW0gb3B0aW9uc1xuICogQHJldHVybiAtIHZhbGlkYXRlZCBjb2x1bW5zIG9yIG51bGxcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVTYXZlZExheWVyQ29sdW1ucyhcbiAgZmllbGRzOiBLZXBsZXJUYWJsZVsnZmllbGRzJ10sXG4gIHNhdmVkQ29sczoge1xuICAgIFtrZXk6IHN0cmluZ106IHN0cmluZztcbiAgfSA9IHt9LFxuICBlbXB0eUNvbHM6IExheWVyQ29sdW1ucyxcbiAgb3B0aW9uczoge3Rocm93T25FcnJvcj86IGJvb2xlYW59ID0ge31cbikge1xuICAvLyBQcmVwYXJlIGNvbHVtbnMgZm9yIHRoZSB2YWxpZGF0b3JcbiAgY29uc3QgY29sdW1uczogdHlwZW9mIGVtcHR5Q29scyA9IHt9O1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhlbXB0eUNvbHMpKSB7XG4gICAgY29sdW1uc1trZXldID0gey4uLmVtcHR5Q29sc1trZXldfTtcblxuICAgIGNvbnN0IHNhdmVkID0gc2F2ZWRDb2xzW2tleV07XG4gICAgaWYgKHNhdmVkKSB7XG4gICAgICBjb25zdCBmaWVsZElkeCA9IGZpZWxkcy5maW5kSW5kZXgoKHtuYW1lfSkgPT4gbmFtZSA9PT0gc2F2ZWQpO1xuXG4gICAgICBpZiAoZmllbGRJZHggPiAtMSkge1xuICAgICAgICAvLyB1cGRhdGUgZm91bmQgY29sdW1uc1xuICAgICAgICBjb2x1bW5zW2tleV0uZmllbGRJZHggPSBmaWVsZElkeDtcbiAgICAgICAgY29sdW1uc1trZXldLnZhbHVlID0gc2F2ZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gZmluZCBhY3R1YWwgY29sdW1uIGZpZWxkSWR4LCBpbiBjYXNlIGl0IGhhcyBjaGFuZ2VkXG4gIGNvbnN0IGFsbENvbEZvdW5kID0gT2JqZWN0LmtleXMoY29sdW1ucykuZXZlcnkoa2V5ID0+XG4gICAgdmFsaWRhdGVDb2x1bW4oY29sdW1uc1trZXldLCBjb2x1bW5zLCBmaWVsZHMpXG4gICk7XG5cbiAgY29uc3QgcnYgPSBhbGxDb2xGb3VuZCA/IGNvbHVtbnMgOiBudWxsO1xuICBpZiAob3B0aW9ucy50aHJvd09uRXJyb3IpIHtcbiAgICBjb25zdCByZXF1aXJlZENvbHVtbnMgPSBPYmplY3Qua2V5cyhlbXB0eUNvbHMpLmZpbHRlcihrID0+ICFlbXB0eUNvbHNba10ub3B0aW9uYWwpO1xuICAgIGNvbnN0IG1pc3NpbmdDb2x1bW5zID0gcmVxdWlyZWRDb2x1bW5zLmZpbHRlcihrID0+ICFjb2x1bW5zPy5ba10udmFsdWUpO1xuICAgIGlmIChtaXNzaW5nQ29sdW1ucy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTGF5ZXIgaGFzIG1pc3Npbmcgb3IgaW52YWxpZCBjb2x1bW5zOiAke21pc3NpbmdDb2x1bW5zLmpvaW4oJywgJyl9YCk7XG4gICAgfVxuICAgIGNvbnN0IGNvbmZpZ0NvbHVtbnMgPSBPYmplY3Qua2V5cyhzYXZlZENvbHMpO1xuICAgIGNvbnN0IGludmFsaWRDb2x1bW5zID0gY29uZmlnQ29sdW1ucy5maWx0ZXIoayA9PiAhY29sdW1ucz8uW2tdPy52YWx1ZSk7XG4gICAgaWYgKGludmFsaWRDb2x1bW5zLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBMYXllciBoYXMgaW52YWxpZCBjb2x1bW5zOiAke2ludmFsaWRDb2x1bW5zLmpvaW4oJywgJyl9YCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJ2O1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIGxheWVyIGNvbHVtblxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVDb2x1bW4oXG4gIGNvbHVtbjogTGF5ZXJDb2x1bW4gJiB7dmFsaWRhdG9yPzogdHlwZW9mIHZhbGlkYXRlQ29sdW1ufSxcbiAgY29sdW1uczogTGF5ZXJDb2x1bW5zLFxuICBhbGxGaWVsZHM6IEtlcGxlclRhYmxlWydmaWVsZHMnXVxuKTogYm9vbGVhbiB7XG4gIGlmIChjb2x1bW4ub3B0aW9uYWwgfHwgY29sdW1uLnZhbHVlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKGNvbHVtbi52YWxpZGF0b3IpIHtcbiAgICByZXR1cm4gY29sdW1uLnZhbGlkYXRvcihjb2x1bW4sIGNvbHVtbnMsIGFsbEZpZWxkcyk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHNhdmVkIHRleHQgbGFiZWwgY29uZmlnIHdpdGggbmV3IGRhdGFcbiAqIHJlZmVyIHRvIHZpcy1zdGF0ZS1zY2hlbWEuanMgVGV4dExhYmVsU2NoZW1hVjFcbiAqXG4gKiBAcGFyYW0ge0FycmF5PE9iamVjdD59IGZpZWxkc1xuICogQHBhcmFtIHtPYmplY3R9IHNhdmVkVGV4dExhYmVsXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICogQHJldHVybiB7T2JqZWN0fSAtIHZhbGlkYXRlZCB0ZXh0bGFiZWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU2F2ZWRUZXh0TGFiZWwoXG4gIGZpZWxkcyxcbiAgW2xheWVyVGV4dExhYmVsXSxcbiAgc2F2ZWRUZXh0TGFiZWwsXG4gIG9wdGlvbnM6IHt0aHJvd09uRXJyb3I/OiBib29sZWFufSA9IHt9XG4pIHtcbiAgY29uc3Qgc2F2ZWRUZXh0TGFiZWxzID0gQXJyYXkuaXNBcnJheShzYXZlZFRleHRMYWJlbCkgPyBzYXZlZFRleHRMYWJlbCA6IFtzYXZlZFRleHRMYWJlbF07XG5cbiAgLy8gdmFsaWRhdGUgZmllbGRcbiAgcmV0dXJuIHNhdmVkVGV4dExhYmVscy5tYXAodGV4dExhYmVsID0+IHtcbiAgICBjb25zdCBmaWVsZCA9IHRleHRMYWJlbC5maWVsZFxuICAgICAgPyBmaWVsZHMuZmluZChmZCA9PlxuICAgICAgICAgIE9iamVjdC5rZXlzKHRleHRMYWJlbC5maWVsZCkuZXZlcnkoa2V5ID0+IHRleHRMYWJlbC5maWVsZFtrZXldID09PSBmZFtrZXldKVxuICAgICAgICApXG4gICAgICA6IG51bGw7XG5cbiAgICBpZiAoZmllbGQgPT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLnRocm93T25FcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBMYXllciBoYXMgaW52YWxpZCB0ZXh0IGxhYmVsIGZpZWxkOiAke0pTT04uc3RyaW5naWZ5KHRleHRMYWJlbC5maWVsZCl9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGxheWVyVGV4dExhYmVsKS5yZWR1Y2UoXG4gICAgICAoYWNjdSwga2V5KSA9PiAoe1xuICAgICAgICAuLi5hY2N1LFxuICAgICAgICBba2V5XToga2V5ID09PSAnZmllbGQnID8gZmllbGQgOiB0ZXh0TGFiZWxba2V5XSB8fCBsYXllclRleHRMYWJlbFtrZXldXG4gICAgICB9KSxcbiAgICAgIHt9XG4gICAgKTtcbiAgfSk7XG59XG5cbi8qKlxuICogU2F2ZWQgdmlzdWFsIGNoYW5uZWwgZmllbGQvc2NhbGUgbWF5IGxpdmUgaW4gYW55IG9mOlxuICogLSBgY29uZmlnW2tleV1gIGFmdGVyIHNjaGVtYSBwYXJzZSAoVmlzdWFsQ2hhbm5lbFNjaGVtYVYxIGZvbGRzIGNoYW5uZWxzIGludG8gY29uZmlnKVxuICogLSBgdmlzdWFsQ2hhbm5lbHNba2V5XWAgYXMgYSBzaWJsaW5nIG9mIGBjb25maWdgICh1bnBhcnNlZCBhZGREYXRhVG9NYXAgcGF5bG9hZClcbiAqIC0gYGNvbmZpZy52aXN1YWxDaGFubmVsc1trZXldYCAoY29tbW9uIG1pc3Rha2Ugb2YgbmVzdGluZyB2aXN1YWxDaGFubmVscyBpbnNpZGUgY29uZmlnKVxuICpcbiAqIFdpdGhvdXQgdGhpcyBsb29rdXAsIHByb2dyYW1tYXRpYyBHZW9KU09OIHN0cm9rZUNvbG9yRmllbGQgbmV2ZXIgYmluZHMgYW5kXG4gKiBzdHJva2VDb2xvckRvbWFpbiBzdGF5cyBhdCB0aGUgZGVmYXVsdCBgWzAsIDFdYCAoa2VwbGVyLmdsICMzMDYxKS5cbiAqL1xuZnVuY3Rpb24gZ2V0U2F2ZWRWaXN1YWxDaGFubmVsVmFsdWUoc2F2ZWRMYXllcjogUGFyc2VkTGF5ZXIsIGtleTogc3RyaW5nKTogYW55IHtcbiAgY29uc3QgY29uZmlnID0gc2F2ZWRMYXllci5jb25maWcgYXMgUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZDtcbiAgaWYgKGNvbmZpZyAmJiBjb25maWdba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGNvbmZpZ1trZXldO1xuICB9XG4gIGNvbnN0IGNoYW5uZWxzID1cbiAgICAoc2F2ZWRMYXllciBhcyB7dmlzdWFsQ2hhbm5lbHM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+fSkudmlzdWFsQ2hhbm5lbHMgfHxcbiAgICAoY29uZmlnICYmIGNvbmZpZy52aXN1YWxDaGFubmVscyk7XG4gIGlmIChjaGFubmVscyAmJiB0eXBlb2YgY2hhbm5lbHMgPT09ICdvYmplY3QnICYmIGNoYW5uZWxzW2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBjaGFubmVsc1trZXldO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgc2F2ZWQgdmlzdWFsIGNoYW5uZWxzIGNvbmZpZyB3aXRoIG5ldyBkYXRhLFxuICogcmVmZXIgdG8gdmlzLXN0YXRlLXNjaGVtYS5qcyBWaXN1YWxDaGFubmVsU2NoZW1hVjFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU2F2ZWRWaXN1YWxDaGFubmVscyhcbiAgZmllbGRzOiBLZXBsZXJUYWJsZVsnZmllbGRzJ10sXG4gIG5ld0xheWVyOiBMYXllcixcbiAgc2F2ZWRMYXllcjogUGFyc2VkTGF5ZXIsXG4gIG9wdGlvbnM6IHt0aHJvd09uRXJyb3I/OiBib29sZWFufSA9IHt9XG4pOiBudWxsIHwgTGF5ZXIge1xuICBPYmplY3QudmFsdWVzKG5ld0xheWVyLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKCh7ZmllbGQsIHNjYWxlLCBrZXl9KSA9PiB7XG4gICAgY29uc3Qgc2F2ZWRGaWVsZCA9IGdldFNhdmVkVmlzdWFsQ2hhbm5lbFZhbHVlKHNhdmVkTGF5ZXIsIGZpZWxkKTtcbiAgICBjb25zdCBzYXZlZFNjYWxlID0gZ2V0U2F2ZWRWaXN1YWxDaGFubmVsVmFsdWUoc2F2ZWRMYXllciwgc2NhbGUpO1xuICAgIGxldCBmb3VuZEZpZWxkO1xuICAgIGlmIChzYXZlZEZpZWxkPy5uYW1lKSB7XG4gICAgICBmb3VuZEZpZWxkID0gZmllbGRzLmZpbmQoZmQgPT4gZmQubmFtZSA9PT0gc2F2ZWRGaWVsZC5uYW1lKTtcbiAgICB9XG5cbiAgICBjb25zdCBmb3VuZENoYW5uZWwgPSB7XG4gICAgICAuLi4oZm91bmRGaWVsZCA/IHtbZmllbGRdOiBmb3VuZEZpZWxkfSA6IHt9KSxcbiAgICAgIC4uLihzYXZlZFNjYWxlID8ge1tzY2FsZV06IHNhdmVkU2NhbGV9IDoge30pXG4gICAgfTtcbiAgICBpZiAoT2JqZWN0LmtleXMoZm91bmRDaGFubmVsKS5sZW5ndGgpIHtcbiAgICAgIG5ld0xheWVyLnVwZGF0ZUxheWVyQ29uZmlnKGZvdW5kQ2hhbm5lbCk7XG4gICAgfVxuXG4gICAgbmV3TGF5ZXIudmFsaWRhdGVWaXN1YWxDaGFubmVsKGtleSk7XG4gICAgaWYgKG9wdGlvbnMudGhyb3dPbkVycm9yKSB7XG4gICAgICBjb25zdCBmaWVsZE5hbWUgPSBzYXZlZEZpZWxkPy5uYW1lO1xuICAgICAgaWYgKGZpZWxkTmFtZSAmJiBmaWVsZE5hbWUgIT09IG5ld0xheWVyLmNvbmZpZ1tmaWVsZF0/Lm5hbWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBMYXllciBoYXMgaW52YWxpZCB2aXN1YWwgY2hhbm5lbCBmaWVsZDogJHtmaWVsZH1gKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbmV3TGF5ZXI7XG59XG5cbnR5cGUgVmFsaWRhdGVMYXllck9wdGlvbiA9IHtcbiAgYWxsb3dFbXB0eUNvbHVtbj86IGJvb2xlYW47XG4gIHRocm93T25FcnJvcj86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVMYXllcnNCeURhdGFzZXRzKFxuICBkYXRhc2V0czogRGF0YXNldHMsXG4gIGxheWVyQ2xhc3NlczogVmlzU3RhdGVbJ2xheWVyQ2xhc3NlcyddLFxuICBsYXllcnM6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2xheWVycyddID0gW10sXG4gIG9wdGlvbnM/OiBWYWxpZGF0ZUxheWVyT3B0aW9uXG4pIHtcbiAgY29uc3QgdmFsaWRhdGVkOiBMYXllcltdID0gW107XG4gIGNvbnN0IGZhaWxlZDogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnbGF5ZXJzJ10gPSBbXTtcblxuICBsYXllcnMuZm9yRWFjaChsYXllciA9PiB7XG4gICAgbGV0IHZhbGlkYXRlTGF5ZXI6IExheWVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICBpZiAobGF5ZXI/LmNvbmZpZz8uZGF0YUlkKSB7XG4gICAgICBpZiAoZGF0YXNldHNbbGF5ZXIuY29uZmlnLmRhdGFJZF0pIHtcbiAgICAgICAgLy8gZGF0YXNldHMgYXJlIGFscmVhZHkgbG9hZGVkXG4gICAgICAgIHZhbGlkYXRlTGF5ZXIgPSB2YWxpZGF0ZUxheWVyV2l0aERhdGEoXG4gICAgICAgICAgZGF0YXNldHNbbGF5ZXIuY29uZmlnLmRhdGFJZF0sXG4gICAgICAgICAgbGF5ZXIsXG4gICAgICAgICAgbGF5ZXJDbGFzc2VzLFxuICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVMYXllcikge1xuICAgICAgdmFsaWRhdGVkLnB1c2godmFsaWRhdGVMYXllcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGRhdGFzZXRzIG5vdCB5ZXQgbG9hZGVkXG4gICAgICBmYWlsZWQucHVzaChsYXllcik7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4ge3ZhbGlkYXRlZCwgZmFpbGVkfTtcbn1cblxuLyoqXG4gKiBHZXQgcmVxdWlyZWQgY29sdW1ucyBmb3IgdmFsaWRhdGlvbiBiYXNlZCBvbiBjb2x1bW4gbW9kZVxuICovXG5mdW5jdGlvbiBfZ2V0Q29sdW1uQ29uZmlnRm9yVmFsaWRhdGlvbihuZXdMYXllcikge1xuICAvLyBmaW5kIGNvbHVtbiBmaWVsZElkeFxuICBsZXQgY29sdW1uQ29uZmlnID0gbmV3TGF5ZXIuZ2V0TGF5ZXJDb2x1bW5zKCk7XG4gIC8vIGlmIGNvbHVtbk1vZGUgaXMgZGVmaW5lZCwgZmluZCBjb2x1bW4gbW9kZSBjb25maWdcbiAgY29uc3QgY29sTW9kZUNvbmZpZyA9IG5ld0xheWVyLmNvbmZpZy5jb2x1bW5Nb2RlXG4gICAgPyAobmV3TGF5ZXIuc3VwcG9ydGVkQ29sdW1uTW9kZXMgfHwgW10pLmZpbmQoXG4gICAgICAgIGNvbE1vZGUgPT4gY29sTW9kZS5rZXkgPT09IG5ld0xheWVyLmNvbmZpZy5jb2x1bW5Nb2RlXG4gICAgICApXG4gICAgOiBudWxsO1xuXG4gIGlmIChjb2xNb2RlQ29uZmlnKSB7XG4gICAgLy8gb25seSB2YWxpZGF0ZSBjb2x1bW5zIGluIGNvbHVtbiBtb2RlIChpbmNsdWRpbmcgdGFiYmVkIGNvbHVtbkdyb3VwcylcbiAgICBjb25zdCBncm91cENvbHVtbnMgPSAoY29sTW9kZUNvbmZpZy5jb2x1bW5Hcm91cHMgfHwgW10pLmZsYXRNYXAoZ3JvdXAgPT4gZ3JvdXAuY29sdW1ucyB8fCBbXSk7XG4gICAgY29uc3QgcmVxdWlyZWRLZXlzID0gbmV3IFNldChjb2xNb2RlQ29uZmlnLnJlcXVpcmVkQ29sdW1ucyB8fCBbXSk7XG4gICAgY29sdW1uQ29uZmlnID0gW1xuICAgICAgLi4uKGNvbE1vZGVDb25maWcucmVxdWlyZWRDb2x1bW5zIHx8IFtdKSxcbiAgICAgIC4uLihjb2xNb2RlQ29uZmlnLm9wdGlvbmFsQ29sdW1ucyB8fCBbXSksXG4gICAgICAuLi5ncm91cENvbHVtbnNcbiAgICBdLnJlZHVjZSgoYWNjdSwga2V5KSA9PiB7XG4gICAgICBjb25zdCBjb2wgPSBjb2x1bW5Db25maWdba2V5XTtcbiAgICAgIGlmICghY29sKSB7XG4gICAgICAgIHJldHVybiBhY2N1O1xuICAgICAgfVxuICAgICAgLy8gT3B0aW9uYWxpdHkgbXVzdCBmb2xsb3cgdGhlIGFjdGl2ZSBtb2RlOiBhIGZpZWxkIG9wdGlvbmFsIGluIGFub3RoZXIgbW9kZVxuICAgICAgLy8gKGUuZy4gYWx0aXR1ZGUgaW4gVVYpIGlzIHN0aWxsIHJlcXVpcmVkIHdoZW4gdGhpcyBtb2RlIGxpc3RzIGl0IGluIHJlcXVpcmVkQ29sdW1ucy5cbiAgICAgIGlmIChyZXF1aXJlZEtleXMuaGFzKGtleSkpIHtcbiAgICAgICAgY29uc3Qge29wdGlvbmFsOiBfb3B0aW9uYWwsIC4uLnJlcXVpcmVkQ29sfSA9IGNvbDtcbiAgICAgICAgcmV0dXJuIHsuLi5hY2N1LCBba2V5XTogcmVxdWlyZWRDb2x9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsuLi5hY2N1LCBba2V5XTogey4uLmNvbCwgb3B0aW9uYWw6IHRydWV9fTtcbiAgICB9LCB7fSk7XG4gIH1cblxuICByZXR1cm4gY29sdW1uQ29uZmlnO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHNhdmVkIGxheWVyIGNvbmZpZyB3aXRoIG5ldyBkYXRhLFxuICogdXBkYXRlIGZpZWxkSWR4IGJhc2VkIG9uIG5ldyBmaWVsZHNcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUxheWVyV2l0aERhdGEoXG4gIGRhdGFzZXQ6IEtlcGxlclRhYmxlLFxuICBzYXZlZExheWVyOiBQYXJzZWRMYXllcixcbiAgbGF5ZXJDbGFzc2VzOiBWaXNTdGF0ZVsnbGF5ZXJDbGFzc2VzJ10sXG4gIG9wdGlvbnM6IFZhbGlkYXRlTGF5ZXJPcHRpb24gPSB7fVxuKTogTGF5ZXIgfCBudWxsIHtcbiAgY29uc3Qge2ZpZWxkcywgaWQ6IGRhdGFJZH0gPSBkYXRhc2V0O1xuICBjb25zdCB7dHlwZX0gPSBzYXZlZExheWVyO1xuICBjb25zdCB7dGhyb3dPbkVycm9yfSA9IG9wdGlvbnM7XG4gIC8vIGxheWVyIGRvZXNudCBoYXZlIGEgdmFsaWQgdHlwZVxuICBpZiAoIXR5cGUgfHwgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChsYXllckNsYXNzZXMsIHR5cGUpIHx8ICFzYXZlZExheWVyLmNvbmZpZykge1xuICAgIGlmICh0aHJvd09uRXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTGF5ZXIgaGFzIGludmFsaWQgdHlwZSBcIiR7dHlwZX1cIiBvciBjb25maWcgaXMgbWlzc2luZ2ApO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGxldCBuZXdMYXllciA9IG5ldyBsYXllckNsYXNzZXNbdHlwZV0oe1xuICAgIGlkOiBzYXZlZExheWVyLmlkLFxuICAgIGRhdGFJZCxcbiAgICBsYWJlbDogc2F2ZWRMYXllci5jb25maWcubGFiZWwsXG4gICAgY29sb3I6IHNhdmVkTGF5ZXIuY29uZmlnLmNvbG9yLFxuICAgIGlzVmlzaWJsZTogc2F2ZWRMYXllci5jb25maWcuaXNWaXNpYmxlLFxuICAgIGhpZGRlbjogc2F2ZWRMYXllci5jb25maWcuaGlkZGVuLFxuICAgIGNvbHVtbk1vZGU6IHNhdmVkTGF5ZXIuY29uZmlnLmNvbHVtbk1vZGUsXG4gICAgaGlnaGxpZ2h0Q29sb3I6IHNhdmVkTGF5ZXIuY29uZmlnLmhpZ2hsaWdodENvbG9yXG4gIH0pO1xuXG4gIGNvbnN0IGNvbHVtbkNvbmZpZyA9IF9nZXRDb2x1bW5Db25maWdGb3JWYWxpZGF0aW9uKG5ld0xheWVyKTtcblxuICBpZiAoT2JqZWN0LmtleXMoY29sdW1uQ29uZmlnKSkge1xuICAgIGNvbnN0IGNvbHVtbnMgPSB2YWxpZGF0ZVNhdmVkTGF5ZXJDb2x1bW5zKFxuICAgICAgZmllbGRzLFxuICAgICAgc2F2ZWRMYXllci5jb25maWcuY29sdW1ucyxcbiAgICAgIGNvbHVtbkNvbmZpZyxcbiAgICAgIG9wdGlvbnNcbiAgICApO1xuICAgIGlmIChjb2x1bW5zKSB7XG4gICAgICBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgIGNvbHVtbnM6IHtcbiAgICAgICAgICAuLi5uZXdMYXllci5jb25maWcuY29sdW1ucyxcbiAgICAgICAgICAuLi5jb2x1bW5zXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoIW9wdGlvbnMuYWxsb3dFbXB0eUNvbHVtbikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgdGV4dExhYmVsID1cbiAgICBzYXZlZExheWVyLmNvbmZpZy50ZXh0TGFiZWwgJiYgbmV3TGF5ZXIuY29uZmlnLnRleHRMYWJlbFxuICAgICAgPyB2YWxpZGF0ZVNhdmVkVGV4dExhYmVsKFxuICAgICAgICAgIGZpZWxkcyxcbiAgICAgICAgICBuZXdMYXllci5jb25maWcudGV4dExhYmVsLFxuICAgICAgICAgIHNhdmVkTGF5ZXIuY29uZmlnLnRleHRMYWJlbCxcbiAgICAgICAgICBvcHRpb25zXG4gICAgICAgIClcbiAgICAgIDogbmV3TGF5ZXIuY29uZmlnLnRleHRMYWJlbDtcblxuICAvLyBjb3B5IHZpc0NvbmZpZyBvdmVyIHRvIGVtcHR5TGF5ZXIgdG8gbWFrZSBzdXJlIGl0IGhhcyBhbGwgdGhlIHByb3BzXG4gIGNvbnN0IGNvcGllZFZpc0NvbmZpZyA9IG5ld0xheWVyLmNvcHlMYXllckNvbmZpZyhcbiAgICBuZXdMYXllci5jb25maWcudmlzQ29uZmlnLFxuICAgIHNhdmVkTGF5ZXIuY29uZmlnLnZpc0NvbmZpZyB8fCB7fSxcbiAgICB7XG4gICAgICBzaGFsbG93Q29weTogWydjb2xvclJhbmdlJywgJ3N0cm9rZUNvbG9yUmFuZ2UnXVxuICAgIH1cbiAgKTtcblxuICAvLyBjYWxsIGxheWVyIG1ldGhvZHMgdG8gdmFsaWRhdGUgdmlzQ29uZmlnIHdoZW4gc3dpdGNoaW5nIGRhdGFzZXRcbiAgY29uc3QgdmlzQ29uZmlnID0gbmV3TGF5ZXIudmFsaWRhdGVWaXNDb25maWdcbiAgICA/IG5ld0xheWVyLnZhbGlkYXRlVmlzQ29uZmlnKGRhdGFzZXQsIGNvcGllZFZpc0NvbmZpZylcbiAgICA6IGNvcGllZFZpc0NvbmZpZztcblxuICBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgdmlzQ29uZmlnLFxuICAgIHRleHRMYWJlbFxuICB9KTtcblxuICAvLyB2aXN1YWwgY2hhbm5lbCBmaWVsZCBpcyBzYXZlZCB0byBiZSB7bmFtZSwgdHlwZX1cbiAgLy8gZmluZCB2aXN1YWwgY2hhbm5lbCBmaWVsZCBieSBtYXRjaGluZyBib3RoIG5hbWUgYW5kIHR5cGVcbiAgLy8gcmVmZXIgdG8gdmlzLXN0YXRlLXNjaGVtYS5qcyBWaXN1YWxDaGFubmVsU2NoZW1hVjFcbiAgbmV3TGF5ZXIgPSB2YWxpZGF0ZVNhdmVkVmlzdWFsQ2hhbm5lbHMoZmllbGRzLCBuZXdMYXllciwgc2F2ZWRMYXllciwgb3B0aW9ucyk7XG5cbiAgaWYgKHRocm93T25FcnJvcikge1xuICAgIGlmICghbmV3TGF5ZXIuaXNWYWxpZFRvU2F2ZSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYExheWVyIGlzIG5vdCB2YWxpZCB0byBzYXZlOiAke25ld0xheWVyLmlkfWApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXdMYXllcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlRWRpdG9yPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFMsIHNhdmVkRWRpdG9yOiBTYXZlZEVkaXRvcikge1xuICBpZiAoIXNhdmVkRWRpdG9yKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBmZWF0dXJlczogWy4uLnN0YXRlLmVkaXRvci5mZWF0dXJlcywgLi4uKHNhdmVkRWRpdG9yLmZlYXR1cmVzIHx8IFtdKV0sXG4gICAgICAvLyBpZiBzYXZlZEVkaXRvci52aXNpYmxlIGlzIHVuZGVmaW5lZCBrZWVwIHN0YXRlLmVkaXRvci52aXNpYmxlXG4gICAgICB2aXNpYmxlOiBzYXZlZEVkaXRvci52aXNpYmxlID8/IHN0YXRlLmVkaXRvci52aXNpYmxlXG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBjb21iaW5lRWRpdG9yQ29uZmlncyhjb25maWdzOiBTYXZlZEVkaXRvcltdKTogU2F2ZWRFZGl0b3Ige1xuICByZXR1cm4gY29uZmlncy5yZWR1Y2UoXG4gICAgKGFjYywgbmV4dENvbmZpZykgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYWNjLFxuICAgICAgICBmZWF0dXJlczogWy4uLmFjYy5mZWF0dXJlcywgLi4uKG5leHRDb25maWcuZmVhdHVyZXMgfHwgW10pXVxuICAgICAgfTtcbiAgICB9LFxuICAgIHtcbiAgICAgIC8vIHN0YXJ0IHdpdGg6XG4gICAgICAvLyAtIGVtcHR5IGFycmF5IGZvciBmZWF0dXJlcyBhY2N1bXVsYXRpb25cbiAgICAgIC8vIC0gYW5kIGFyZSBhbnkgb2YgdGhlIGNvbmZpZ3MnIHZpc2libGUgdmFsdWVzIHRydWU/XG4gICAgICBmZWF0dXJlczogW10sXG4gICAgICB2aXNpYmxlOiBjb25maWdzLnNvbWUoYyA9PiBjPy52aXNpYmxlKVxuICAgIH1cbiAgKTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBzYXZlZCBsYXllciBjb25maWcgd2l0aCBuZXcgZGF0YSxcbiAqIHVwZGF0ZSBmaWVsZElkeCBiYXNlZCBvbiBuZXcgZmllbGRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZURhdGFzZXRzQnlPcmRlcihzdGF0ZTogVmlzU3RhdGUsIG5ld0RhdGFFbnRyaWVzOiBEYXRhc2V0cyk6IERhdGFzZXRzIHtcbiAgY29uc3QgbWVyZ2VkID0ge1xuICAgIC4uLnN0YXRlLmRhdGFzZXRzLFxuICAgIC4uLm5ld0RhdGFFbnRyaWVzXG4gIH07XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoc3RhdGUucHJlc2VydmVEYXRhc2V0T3JkZXIpKSB7XG4gICAgLy8gcHJlc2VydmVEYXRhc2V0T3JkZXIgIG1pZ2h0IG5vdCBpbmNsdWRlIHRoZSAgbmV3IGRhdGFzZXRzXG4gICAgY29uc3QgbmV3RGF0YXNldElkcyA9IE9iamVjdC5rZXlzKG1lcmdlZCkuZmlsdGVyKFxuICAgICAgaWQgPT4gIXN0YXRlLnByZXNlcnZlRGF0YXNldE9yZGVyPy5pbmNsdWRlcyhpZClcbiAgICApO1xuICAgIHJldHVybiBbLi4uc3RhdGUucHJlc2VydmVEYXRhc2V0T3JkZXIsIC4uLm5ld0RhdGFzZXRJZHNdLnJlZHVjZShcbiAgICAgIChhY2N1LCBkYXRhSWQpID0+ICh7XG4gICAgICAgIC4uLmFjY3UsXG4gICAgICAgIC4uLihtZXJnZWRbZGF0YUlkXSA/IHtbZGF0YUlkXTogbWVyZ2VkW2RhdGFJZF19IDoge30pXG4gICAgICB9KSxcbiAgICAgIHt9XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBtZXJnZWQ7XG59XG5cbi8qKlxuICogU2ltbGlhciBwdXJwb3NlIHRvIGFnZ3JlZ2F0aW9uIHV0aWxzIGBnZXRNb2RlYCBmdW5jdGlvbixcbiAqIGJ1dCByZXR1cm5zIHRoZSBtb2RlIGluIHRoZSBzYW1lIHZhbHVlIHR5cGUgd2l0aG91dCBjb2VyY2luZyB0byBhIHN0cmluZy5cbiAqIEl0IGlnbm9yZXMgYHVuZGVmaW5lZGAgb3IgYG51bGxgIHZhbHVlcywgYnV0IHJldHVybnMgYG51bGxgIGlmIG5vIG1vZGUgY291bGQgYmUgY2FsY3VsYXRlZC5cbiAqL1xuZnVuY3Rpb24gZ2V0VmFsdWVXaXRoSGlnaGVzdE9jY3VycmVuY2U8VD4oYXJyOiBUW10pOiBUIHwgbnVsbCB7XG4gIGNvbnN0IHRhbGx5cyA9IG5ldyBNYXAoKTtcbiAgYXJyLmZvckVhY2godmFsdWUgPT4ge1xuICAgIGlmIChub3ROdWxsb3JVbmRlZmluZWQodmFsdWUpKSB7XG4gICAgICBpZiAoIXRhbGx5cy5oYXModmFsdWUpKSB7XG4gICAgICAgIHRhbGx5cy5zZXQodmFsdWUsIDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFsbHlzLnNldCh2YWx1ZSwgdGFsbHlzLmdldCh2YWx1ZSkgKyAxKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICAvLyByZXR1cm4gdGhlIHZhbHVlIHdpdGggdGhlIGhpZ2hlc3QgdG90YWwgb2NjdXJyZW5jZSBjb3VudFxuICBpZiAodGFsbHlzLnNpemUgPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gWy4uLnRhbGx5cy5lbnRyaWVzKCldPy5yZWR1Y2UoKGFjYywgbmV4dCkgPT4gKG5leHRbMV0gPiBhY2NbMV0gPyBuZXh0IDogYWNjKSlbMF07XG59XG5cbmV4cG9ydCBjb25zdCBWSVNfU1RBVEVfTUVSR0VSUzogVmlzU3RhdGVNZXJnZXJzPGFueT4gPSBbXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VMYXllcnMsXG4gICAgcHJvcDogJ2xheWVycycsXG4gICAgdG9NZXJnZVByb3A6ICdsYXllclRvQmVNZXJnZWQnLFxuICAgIHByZXNlcnZlT3JkZXI6ICdwcmVzZXJ2ZUxheWVyT3JkZXInXG4gIH0sXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VMYXllck9yZGVyLFxuICAgIHByb3A6ICdsYXllck9yZGVyJ1xuICB9LFxuICB7XG4gICAgbWVyZ2U6IG1lcmdlRmlsdGVycyxcbiAgICBwcm9wOiAnZmlsdGVycycsXG4gICAgdG9NZXJnZVByb3A6ICdmaWx0ZXJUb0JlTWVyZ2VkJyxcbiAgICBwcmVzZXJ2ZU9yZGVyOiAncHJlc2VydmVGaWx0ZXJPcmRlcicsXG4gICAgcmVwbGFjZVBhcmVudERhdGFzZXRJZHM6IHJlcGxhY2VGaWx0ZXJEYXRhc2V0SWRzXG4gIH0sXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VFZmZlY3RzLFxuICAgIHByb3A6ICdlZmZlY3RzJ1xuICB9LFxuICB7XG4gICAgbWVyZ2U6IG1lcmdlQ2hhcnRzLFxuICAgIHByb3A6ICdjaGFydHMnLFxuICAgIHRvTWVyZ2VQcm9wOiAnY2hhcnRzVG9CZU1lcmdlZCcsXG4gICAgcmVwbGFjZVBhcmVudERhdGFzZXRJZHM6IHJlcGxhY2VDaGFydERhdGFzZXRJZHNcbiAgfSxcbiAge1xuICAgIG1lcmdlOiBtZXJnZUFubm90YXRpb25zLFxuICAgIHByb3A6ICdhbm5vdGF0aW9ucycsXG4gICAgdG9NZXJnZVByb3A6ICdhbm5vdGF0aW9uc1RvQmVNZXJnZWQnXG4gIH0sXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VJbnRlcmFjdGlvbnMsXG4gICAgcHJvcDogJ2ludGVyYWN0aW9uQ29uZmlnJyxcbiAgICB0b01lcmdlUHJvcDogJ2ludGVyYWN0aW9uVG9CZU1lcmdlZCcsXG4gICAgcmVwbGFjZVBhcmVudERhdGFzZXRJZHM6IHJlcGxhY2VJbnRlcmFjdGlvbkRhdGFzZXRJZHMsXG4gICAgc2F2ZVVubWVyZ2VkOiBzYXZlZFVubWVyZ2VkSW50ZXJhY3Rpb24sXG4gICAgY29tYmluZUNvbmZpZ3M6IGNvbWJpbmVJbnRlcmFjdGlvbkNvbmZpZ3NcbiAgfSxcbiAge21lcmdlOiBtZXJnZUxheWVyQmxlbmRpbmcsIHByb3A6ICdsYXllckJsZW5kaW5nJywgY29tYmluZUNvbmZpZ3M6IGNvbWJpbmVMYXllckJsZW5kaW5nQ29uZmlnc30sXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VPdmVybGF5QmxlbmRpbmcsXG4gICAgcHJvcDogJ292ZXJsYXlCbGVuZGluZycsXG4gICAgY29tYmluZUNvbmZpZ3M6IGNvbWJpbmVPdmVybGF5QmxlbmRpbmdDb25maWdzXG4gIH0sXG4gIHttZXJnZTogbWVyZ2VTcGxpdE1hcHMsIHByb3A6ICdzcGxpdE1hcHMnLCB0b01lcmdlUHJvcDogJ3NwbGl0TWFwc1RvQmVNZXJnZWQnfSxcbiAge21lcmdlOiBtZXJnZUFuaW1hdGlvbkNvbmZpZywgcHJvcDogJ2FuaW1hdGlvbkNvbmZpZycsIGNvbWJpbmVDb25maWdzOiBjb21iaW5lQW5pbWF0aW9uQ29uZmlnc30sXG4gIHttZXJnZTogbWVyZ2VFZGl0b3IsIHByb3A6ICdlZGl0b3InLCBjb21iaW5lQ29uZmlnczogY29tYmluZUVkaXRvckNvbmZpZ3N9XG5dO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7O0FBRUEsT0FBT0EsSUFBSSxNQUFNLHdCQUF3QjtBQUN6QyxPQUFPQyxJQUFJLE1BQU0sd0JBQXdCO0FBQ3pDLE9BQU9DLFdBQVcsTUFBTSwrQkFBK0I7QUFDdkQsT0FBT0MsU0FBUyxNQUFNLFdBQVc7QUFDakMsU0FDRUMsV0FBVyxFQUNYQyx1QkFBdUIsRUFDdkJDLDhCQUE4QixFQUM5QkMsc0JBQXNCLEVBQ3RCQyw2QkFBNkIsRUFDN0JDLFFBQVEsRUFDUkMsU0FBUyxFQUNUQyxhQUFhLFFBQ1Isa0JBQWtCO0FBR3pCLFNBQVFDLFlBQVksUUFBTyxvQkFBb0I7QUFDL0MsU0FBUUMsa0JBQWtCLFFBQU8seUJBQXlCO0FBQzFELFNBQ0VDLGlCQUFpQixFQUNqQkMsZUFBZSxFQUNmQyxpQkFBaUIsRUFDakJDLGdCQUFnQixFQUNoQkMsNkJBQTZCLEVBQzdCQyw2QkFBNkIsUUFDeEIsc0JBQXNCO0FBQzdCLFNBQVFDLGVBQWUsUUFBdUQsb0JBQW9CO0FBcUJsRyxTQUErQkMsaUJBQWlCLEVBQUVDLGtCQUFrQixRQUFPLGtCQUFrQjtBQUU3RixTQUFRQyx1QkFBdUIsUUFBTyxlQUFlOztBQUVyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTQyxZQUFZ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
1366
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1bmlxIiwicGljayIsImZsYXR0ZW5EZWVwIiwiZGVlcG1lcmdlIiwiYXJyYXlJbnNlcnQiLCJjb21iaW5lU3BsaXRNYXBzQnlJbmRleCIsImdldEluaXRpYWxNYXBMYXllcnNGb3JTcGxpdE1hcCIsImFwcGx5RmlsdGVyc1RvRGF0YXNldHMiLCJ2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0cyIsImZpbmRCeUlkIiwiYWdncmVnYXRlIiwiaXNQbGFpbk9iamVjdCIsIkFHR1JFR0FUSU9OX0NPVU5UX0xBWUVSX1RZUEVTIiwiY3JlYXRlUG9pbnRDb3VudExhYmVsRmllbGQiLCJtaWdyYXRlTGVnYWN5U2NlbmVncmFwaFZpc0NvbmZpZyIsIlBPSU5UX0NPVU5UX0ZJRUxEX05BTUUiLCJjcmVhdGVFZmZlY3QiLCJub3ROdWxsb3JVbmRlZmluZWQiLCJBR0dSRUdBVElPTl9UWVBFUyIsIkRFRkFVTFRfVEVYVF9MQUJFTCIsIkxBWUVSX0JMRU5ESU5HUyIsIk9WRVJMQVlfQkxFTkRJTkdTIiwiaXNBbm5vdGF0aW9uS2luZCIsIklOSVRJQUxfQU5OT1RBVElPTl9MSU5FX0NPTE9SIiwiSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEgiLCJDVVJSRU5UX1ZFUlNJT04iLCJhc3NpZ25HcHVDaGFubmVscyIsInJlc2V0RmlsdGVyR3B1TW9kZSIsImdldExheWVyT3JkZXJGcm9tTGF5ZXJzIiwiY29tYmluZVpvb21PcGFjaXR5Q29udHJvbGxlcnMiLCJtZXJnZUZpbHRlcnMiLCJzdGF0ZSIsImZpbHRlcnNUb01lcmdlIiwiZnJvbUNvbmZpZyIsInByZXNlcnZlRmlsdGVyT3JkZXIiLCJtYXAiLCJsIiwiaWQiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJfdmFsaWRhdGVGaWx0ZXJzVXBkYXQiLCJ2YWxpZGF0ZWQiLCJmYWlsZWQiLCJ1cGRhdGVkRGF0YXNldHMiLCJ1cGRhdGVkRmlsdGVycyIsImluc2VydEl0ZW1CYXNlZE9uUHJlc2VydmVkT3JkZXIiLCJmaWx0ZXJzIiwiZGF0YXNldHNUb0ZpbHRlciIsImYiLCJkYXRhSWQiLCJmaWx0ZXJlZCIsImxheWVycyIsIl9vYmplY3RTcHJlYWQiLCJkYXRhc2V0cyIsImZpbHRlclRvQmVNZXJnZWQiLCJjb25jYXQiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJyZXBsYWNlRmlsdGVyRGF0YXNldElkcyIsInNhdmVkRmlsdGVyIiwiZGF0YUlkVG9Vc2UiLCJyZXBsYWNlZCIsImZvckVhY2giLCJmaWx0ZXIiLCJpbmNsdWRlcyIsIl9maWx0ZXIkcGxvdFR5cGUiLCJuZXdEYXRhSWQiLCJkIiwicGxvdFR5cGUiLCJjb2xvcnNCeURhdGFJZCIsIl9maWx0ZXIkcGxvdFR5cGUyIiwiX3JlZiIsImNvbG9yIiwicmVzdCIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsIl90b1Byb3BlcnR5S2V5IiwiX2RlZmluZVByb3BlcnR5IiwicHVzaCIsImlzU2F2ZWRMYXllckNvbmZpZ1YxIiwibGF5ZXJDb25maWciLCJ2aXN1YWxDaGFubmVscyIsInBhcnNlTGF5ZXJDb25maWciLCJzY2hlbWEiLCJfc2NoZW1hJHBhcnNlU2F2ZWRDb24iLCJzYXZlZENvbmZpZyIsInZlcnNpb24iLCJjb25maWciLCJ2aXNTdGF0ZSIsImxheWVyT3JkZXIiLCJwYXJzZVNhdmVkQ29uZmlnIiwiY3VycmVudEl0ZW1zIiwiaXRlbXMiLCJwcmVzZXJ2ZWRPcmRlciIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsImRlZmF1bHRTdGFydCIsIm5ld0l0ZW1zIiwiX2l0ZXJhdG9yIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJfc3RlcCIsInMiLCJuIiwiZG9uZSIsIml0ZW0iLCJ2YWx1ZSIsImV4cGVjdGVkSWR4IiwiaW5kZXhPZiIsImluc2VydEF0IiwiaSIsInByZWNlZWRJZHgiLCJfbG9vcCIsInByZWNlZWRJdGVtSWQiLCJmaW5kSW5kZXgiLCJlcnIiLCJlIiwiY3JlYXRlTGF5ZXJGcm9tQ29uZmlnIiwic2F2ZWRMYXllckNvbmZpZyIsInBhcnNlZExheWVyQ29uZmlnIiwiX3ZhbGlkYXRlTGF5ZXJzQnlEYXRhIiwidmFsaWRhdGVMYXllcnNCeURhdGFzZXRzIiwibGF5ZXJDbGFzc2VzIiwiYWxsb3dFbXB0eUNvbHVtbiIsImtlZXBVbmxhYmVsZWRBZ2dyZWdhdGlvblRleHRMYWJlbCIsIm5ld0xheWVyIiwidXBkYXRlTGF5ZXJEb21haW4iLCJzZXJpYWxpemVGaWx0ZXIiLCJuZXdGaWx0ZXIiLCJfc2VyaWFsaXplZFZpc1N0YXRlJGYiLCJzZXJpYWxpemVkVmlzU3RhdGUiLCJzZXJpYWxpemVWaXNTdGF0ZSIsInNlcmlhbGl6ZUxheWVyIiwiX3NlcmlhbGl6ZWRWaXNTdGF0ZSRsIiwic2VyaWFsaXplRWZmZWN0IiwibmV3RWZmZWN0IiwiX3NlcmlhbGl6ZWRWaXNTdGF0ZSRlIiwiZWZmZWN0cyIsImVmZmVjdE9yZGVyIiwiX3NjaGVtYSRwYXJzZVNhdmVkQ29uMiIsInNhdmVkU3RhdGUiLCJnZXRDb25maWdUb1NhdmUiLCJtZXJnZUxheWVycyIsImxheWVyc1RvTWVyZ2UiLCJwcmVzZXJ2ZUxheWVyT3JkZXIiLCJ1bm1lcmdlZCIsInRvTWVyZ2UiLCJfbCRjb25maWciLCJpc01lcmdpbmdEYXRhc2V0cyIsIl92YWxpZGF0ZUxheWVyc0J5RGF0YTIiLCJtZXJnZWRMYXllciIsImFwcGx5IiwiX2luc2VydExheWVyQXRSaWdodE9yIiwiaW5zZXJ0TGF5ZXJBdFJpZ2h0T3JkZXIiLCJuZXdMYXllck9yZGVyIiwibmV3TGF5ZXJzIiwibWVyZ2VkU3RhdGUiLCJsYXllclRvQmVNZXJnZWQiLCJsYXllck9yZGVyVG9CZU1lcmdlZCIsInNhdmVkT3JkZXIiLCJtZXJnZUxheWVyT3JkZXIiLCJjdXJyZW50TGF5ZXJzIiwibGF5ZXJzVG9JbnNlcnQiLCJjdXJyZW50T3JkZXIiLCJjdXJyZW50TGF5ZXJRdWV1ZSIsImVudHJ5IiwibGF5ZXIiLCJCb29sZWFuIiwibmV3TGF5ZXJPcmRlclF1ZXVlIiwibmV3RmxhdExheWVyT3JkZXIiLCJoYXNHcm91cHMiLCJzb21lIiwiZXhpc3RpbmdGbGF0SWRzIiwiU2V0IiwibmV3SW5zZXJ0ZWRJZHMiLCJoYXMiLCJyZXN1bHQiLCJmbGF0UXVldWUiLCJmbGF0SWR4IiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsInNhdmVkTGF5ZXJPcmRlciIsInZhbGlkTGF5ZXJJZHMiLCJmaWx0ZXJMYXllck9yZGVyIiwib3JkZXIiLCJfaXRlcmF0b3IzIiwiX3N0ZXAzIiwiZ3JvdXAiLCJmaWx0ZXJlZEdyb3VwT3JkZXIiLCJyZXN0b3JlZExheWVyT3JkZXIiLCJsYXllcklkc0luUmVzdG9yZWQiLCJjb2xsZWN0SWRzIiwiX2l0ZXJhdG9yNCIsIl9zdGVwNCIsImFkZCIsIm1pc3NpbmdMYXllcnMiLCJtZXJnZUludGVyYWN0aW9ucyIsImludGVyYWN0aW9uVG9CZU1lcmdlZCIsIm1lcmdlZCIsIk9iamVjdCIsImtleXMiLCJrZXkiLCJpbnRlcmFjdGlvbkNvbmZpZyIsImN1cnJlbnRDb25maWciLCJfcmVmMiIsImVuYWJsZWQiLCJjb25maWdTYXZlZCIsIl9leGNsdWRlZCIsImNvbmZpZ1RvTWVyZ2UiLCJzYXZlZFRvb2x0aXBDb25maWciLCJfbWVyZ2VJbnRlcmFjdGlvblRvb2wiLCJtZXJnZUludGVyYWN0aW9uVG9vbHRpcENvbmZpZyIsIm1lcmdlZFRvb2x0aXAiLCJ1bm1lcmdlZFRvb2x0aXAiLCJmaWVsZHNUb1Nob3ciLCJ0aW1lem9uZSIsInRvb2x0aXAiLCJuZXh0U3RhdGUiLCJzYXZlZFVubWVyZ2VkSW50ZXJhY3Rpb24iLCJjb21iaW5lSW50ZXJhY3Rpb25Db25maWdzIiwiY29uZmlncyIsImNvbWJpbmVkIiwibGVnZW5kIiwid2l0aExlZ2VuZCIsImZpbmQiLCJjIiwiem9vbU9wYWNpdHkiLCJ3aXRoWm9vbU9wYWNpdHkiLCJfbG9vcDIiLCJ0b0JlQ29tYmluZWRQcm9wcyIsInAiLCJjb21wYXJlTW9kZSIsImNvbXBhcmVUeXBlIiwiZ2V0VmFsdWVXaXRoSGlnaGVzdE9jY3VycmVuY2UiLCJoYXNUaW1lem9uZSIsInJlZHVjZSIsImFjYyIsIm5leHRGaWVsZHNUb1Nob3ciLCJfbG9vcDMiLCJuZXh0RGF0YUlkS2V5IiwibmV4dFRvb2x0aXBGaWVsZHMiLCJuZXh0VEYiLCJfcmVmMyIsIm5hbWUiLCJfYWdncmVnYXRlIiwic2l6ZSIsIm1heGltdW0iLCJfdG9CZUNvbWJpbmVkUHJvcHMkZmkiLCJsaW1pdFNlYXJjaCIsImhpZGVJbnZpc2libGVMYXllcnMiLCJjb250cm9sbGVycyIsIl91bm1lcmdlZCR0b29sdGlwIiwiX3VubWVyZ2VkJHRvb2x0aXAyIiwiX3N0YXRlJGludGVyYWN0aW9uVG9CIiwiX3VubWVyZ2VkJHRvb2x0aXAzIiwicmVwbGFjZUludGVyYWN0aW9uRGF0YXNldElkcyIsImRhdGFJZFRvUmVwbGFjZSIsIl9pbnRlcmFjdGlvbkNvbmZpZyR0byIsIl9pbnRlcmFjdGlvbkNvbmZpZyR0bzIiLCJtZXJnZVNwbGl0TWFwcyIsInNwbGl0TWFwcyIsImxheWVyRXhpc3RzIiwiY3JlYXRlUGFuZWxzIiwic20iLCJpZHMiLCJlbnRyaWVzIiwicGFuZWwiLCJmcm9tRW50cmllcyIsIl9yZWY0IiwiX3JlZjUiLCJfc2xpY2VkVG9BcnJheSIsIl9yZWY2IiwiX3JlZjciLCJzcGxpdE1hcHNUb0JlTWVyZ2VkIiwibWVyZ2VDaGFydHMiLCJjaGFydHMiLCJpbmNvbWluZ0lkcyIsImNoYXJ0IiwiZXhpc3RpbmdJZHMiLCJuZXh0Q2hhcnRzIiwibm9ybWFsaXplZCIsInBpbm5lZCIsImRpc3BsYXkiLCJpc0NvbmZpZ0FjdGl2ZSIsImlzSnNvbkVkaXRvckFjdGl2ZSIsImNoYXJ0c1RvQmVNZXJnZWQiLCJyZXBsYWNlQ2hhcnREYXRhc2V0SWRzIiwic2F2ZWRDaGFydHMiLCJtZXJnZUVmZmVjdHMiLCJuZXdFZmZlY3RzIiwiZWZmZWN0IiwiYWxsIiwiaXNWYWxpZFRvU2F2ZSIsIm1lcmdlQW5ub3RhdGlvbnMiLCJhbm5vdGF0aW9ucyIsImEiLCJ2YWxpZEFubm90YXRpb25zIiwia2luZCIsImFuY2hvclBvaW50IiwiZXZlcnkiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsImlzVmlzaWJsZSIsImF1dG9TaXplIiwiYXV0b1NpemVZIiwibGFiZWwiLCJsaW5lQ29sb3IiLCJsaW5lV2lkdGgiLCJ0ZXh0V2lkdGgiLCJ0ZXh0SGVpZ2h0IiwidG9vbHRpcENvbmZpZyIsIl9sb29wNCIsImFsbEZpZWxkcyIsImZpZWxkcyIsImZvdW5kRmllbGRzVG9TaG93IiwiZmllbGQiLCJtZXJnZUxheWVyQmxlbmRpbmciLCJsYXllckJsZW5kaW5nIiwiY29tYmluZUxheWVyQmxlbmRpbmdDb25maWdzIiwibWVyZ2VPdmVybGF5QmxlbmRpbmciLCJvdmVybGF5QmxlbmRpbmciLCJjb21iaW5lT3ZlcmxheUJsZW5kaW5nQ29uZmlncyIsIm1lcmdlQW5pbWF0aW9uQ29uZmlnIiwiYW5pbWF0aW9uIiwiY3VycmVudFRpbWUiLCJhbmltYXRpb25Db25maWciLCJkb21haW4iLCJjb21iaW5lQW5pbWF0aW9uQ29uZmlncyIsIl9hZ2dyZWdhdGUyIiwiX2FnZ3JlZ2F0ZTMiLCJtaW5pbXVtIiwic3BlZWQiLCJ0aW1lRm9ybWF0IiwidmFsaWRhdGVTYXZlZExheWVyQ29sdW1ucyIsInNhdmVkQ29scyIsImVtcHR5Q29scyIsIm9wdGlvbnMiLCJjb2x1bW5zIiwiX2xvb3A1IiwiX09iamVjdCRrZXlzIiwiX2kiLCJzYXZlZCIsImZpZWxkSWR4IiwiX3JlZjgiLCJhbGxDb2xGb3VuZCIsInZhbGlkYXRlQ29sdW1uIiwicnYiLCJ0aHJvd09uRXJyb3IiLCJyZXF1aXJlZENvbHVtbnMiLCJrIiwib3B0aW9uYWwiLCJtaXNzaW5nQ29sdW1ucyIsIkVycm9yIiwiam9pbiIsImNvbmZpZ0NvbHVtbnMiLCJpbnZhbGlkQ29sdW1ucyIsIl9jb2x1bW5zJGsiLCJjb2x1bW4iLCJ2YWxpZGF0b3IiLCJ2YWxpZGF0ZVNhdmVkVGV4dExhYmVsIiwibGF5ZXJUZXh0TGFiZWxzIiwic2F2ZWRUZXh0TGFiZWwiLCJsYXllclRleHRMYWJlbCIsInNhdmVkVGV4dExhYmVscyIsImNvdW50TGFiZWxMYXllciIsImxheWVyVHlwZSIsInRleHRMYWJlbCIsImZkIiwiSlNPTiIsInN0cmluZ2lmeSIsImFjY3UiLCJfdGV4dExhYmVsJGtleSIsImZhbGxiYWNrVGV4dExhYmVsRm9yTG9hZGVkTGF5ZXIiLCJuZXdMYXllclRleHRMYWJlbCIsImdldFNhdmVkVmlzdWFsQ2hhbm5lbFZhbHVlIiwic2F2ZWRMYXllciIsImNoYW5uZWxzIiwiX3R5cGVvZiIsInZhbGlkYXRlU2F2ZWRWaXN1YWxDaGFubmVscyIsInZhbHVlcyIsIl9yZWY5Iiwic2NhbGUiLCJzYXZlZEZpZWxkIiwic2F2ZWRTY2FsZSIsImZvdW5kRmllbGQiLCJmb3VuZENoYW5uZWwiLCJ1cGRhdGVMYXllckNvbmZpZyIsInZhbGlkYXRlVmlzdWFsQ2hhbm5lbCIsIl9uZXdMYXllciRjb25maWckZmllbCIsImZpZWxkTmFtZSIsIl9sYXllciRjb25maWciLCJ2YWxpZGF0ZUxheWVyIiwidmFsaWRhdGVMYXllcldpdGhEYXRhIiwiX2dldENvbHVtbkNvbmZpZ0ZvclZhbGlkYXRpb24iLCJjb2x1bW5Db25maWciLCJnZXRMYXllckNvbHVtbnMiLCJjb2xNb2RlQ29uZmlnIiwiY29sdW1uTW9kZSIsInN1cHBvcnRlZENvbHVtbk1vZGVzIiwiY29sTW9kZSIsImdyb3VwQ29sdW1ucyIsImNvbHVtbkdyb3VwcyIsImZsYXRNYXAiLCJyZXF1aXJlZEtleXMiLCJvcHRpb25hbENvbHVtbnMiLCJjb2wiLCJfb3B0aW9uYWwiLCJyZXF1aXJlZENvbCIsIl9leGNsdWRlZDIiLCJkYXRhc2V0IiwidHlwZSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImhpZGRlbiIsImlzSW5jbHVkZWRJbkxlZ2VuZCIsImhpZ2hsaWdodENvbG9yIiwic2F2ZWRWaXNDb25maWciLCJ2aXNDb25maWciLCJjb3BpZWRWaXNDb25maWciLCJjb3B5TGF5ZXJDb25maWciLCJzaGFsbG93Q29weSIsInZhbGlkYXRlVmlzQ29uZmlnIiwibWVyZ2VFZGl0b3IiLCJzYXZlZEVkaXRvciIsIl9zYXZlZEVkaXRvciR2aXNpYmxlIiwiZWRpdG9yIiwiZmVhdHVyZXMiLCJ2aXNpYmxlIiwiY29tYmluZUVkaXRvckNvbmZpZ3MiLCJuZXh0Q29uZmlnIiwibWVyZ2VEYXRhc2V0c0J5T3JkZXIiLCJuZXdEYXRhRW50cmllcyIsInByZXNlcnZlRGF0YXNldE9yZGVyIiwibmV3RGF0YXNldElkcyIsIl9zdGF0ZSRwcmVzZXJ2ZURhdGFzZSIsImFyciIsIl9yZWYxMSIsInRhbGx5cyIsIk1hcCIsInNldCIsImdldCIsIm5leHQiLCJWSVNfU1RBVEVfTUVSR0VSUyIsIm1lcmdlIiwicHJvcCIsInRvTWVyZ2VQcm9wIiwicHJlc2VydmVPcmRlciIsInJlcGxhY2VQYXJlbnREYXRhc2V0SWRzIiwic2F2ZVVubWVyZ2VkIiwiY29tYmluZUNvbmZpZ3MiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdmlzLXN0YXRlLW1lcmdlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgdW5pcSBmcm9tICdlcy10b29sa2l0L2NvbXBhdC91bmlxJztcbmltcG9ydCBwaWNrIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L3BpY2snO1xuaW1wb3J0IGZsYXR0ZW5EZWVwIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L2ZsYXR0ZW5EZWVwJztcbmltcG9ydCBkZWVwbWVyZ2UgZnJvbSAnZGVlcG1lcmdlJztcbmltcG9ydCB7XG4gIGFycmF5SW5zZXJ0LFxuICBjb21iaW5lU3BsaXRNYXBzQnlJbmRleCxcbiAgZ2V0SW5pdGlhbE1hcExheWVyc0ZvclNwbGl0TWFwLFxuICBhcHBseUZpbHRlcnNUb0RhdGFzZXRzLFxuICB2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0cyxcbiAgZmluZEJ5SWQsXG4gIGFnZ3JlZ2F0ZSxcbiAgaXNQbGFpbk9iamVjdFxufSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcblxuaW1wb3J0IHtcbiAgQUdHUkVHQVRJT05fQ09VTlRfTEFZRVJfVFlQRVMsXG4gIExheWVyLFxuICBjcmVhdGVQb2ludENvdW50TGFiZWxGaWVsZCxcbiAgbWlncmF0ZUxlZ2FjeVNjZW5lZ3JhcGhWaXNDb25maWcsXG4gIFBPSU5UX0NPVU5UX0ZJRUxEX05BTUVcbn0gZnJvbSAnQGtlcGxlci5nbC9sYXllcnMnO1xuaW1wb3J0IHtjcmVhdGVFZmZlY3R9IGZyb20gJ0BrZXBsZXIuZ2wvZWZmZWN0cyc7XG5pbXBvcnQge25vdE51bGxvclVuZGVmaW5lZH0gZnJvbSAnQGtlcGxlci5nbC9jb21tb24tdXRpbHMnO1xuaW1wb3J0IHtcbiAgQUdHUkVHQVRJT05fVFlQRVMsXG4gIERFRkFVTFRfVEVYVF9MQUJFTCxcbiAgTEFZRVJfQkxFTkRJTkdTLFxuICBPVkVSTEFZX0JMRU5ESU5HUyxcbiAgaXNBbm5vdGF0aW9uS2luZCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfQ09MT1IsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX1dJRFRIXG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7Q1VSUkVOVF9WRVJTSU9OLCBWaXNTdGF0ZSwgVmlzU3RhdGVNZXJnZXJzLCBLZXBsZXJHTFNjaGVtYUNsYXNzfSBmcm9tICdAa2VwbGVyLmdsL3NjaGVtYXMnO1xuXG5pbXBvcnQge1xuICBQYXJzZWRMYXllcixcbiAgUGFyc2VkVmlzU3RhdGUsXG4gIFNhdmVkSW50ZXJhY3Rpb25Db25maWcsXG4gIFRvb2x0aXBJbmZvLFxuICBTYXZlZEVkaXRvcixcbiAgUGFyc2VkQ29uZmlnLFxuICBGaWx0ZXIsXG4gIEVmZmVjdCBhcyBFZmZlY3RUeXBlLFxuICBQYXJzZWRFZmZlY3QsXG4gIExheWVyQ29sdW1ucyxcbiAgTGF5ZXJDb2x1bW4sXG4gIFBhcnNlZEZpbHRlcixcbiAgTmVzdGVkUGFydGlhbCxcbiAgU2F2ZWRBbmltYXRpb25Db25maWcsXG4gIExheWVyT3JkZXIsXG4gIExheWVyT3JkZXJHcm91cCxcbiAgQ2hhcnRDb25maWdcbn0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge0tlcGxlclRhYmxlLCBEYXRhc2V0cywgYXNzaWduR3B1Q2hhbm5lbHMsIHJlc2V0RmlsdGVyR3B1TW9kZX0gZnJvbSAnQGtlcGxlci5nbC90YWJsZSc7XG5cbmltcG9ydCB7Z2V0TGF5ZXJPcmRlckZyb21MYXllcnN9IGZyb20gJy4vbGF5ZXItdXRpbHMnO1xuaW1wb3J0IHtjb21iaW5lWm9vbU9wYWNpdHlDb250cm9sbGVyc30gZnJvbSAnLi9pbnRlcmFjdGlvbi11dGlscyc7XG5cbi8qKlxuICogTWVyZ2UgbG9hZGVkIGZpbHRlcnMgd2l0aCBjdXJyZW50IHN0YXRlLCBpZiBubyBmaWVsZHMgb3IgZGF0YSBhcmUgbG9hZGVkXG4gKiBzYXZlIGl0IGZvciBsYXRlclxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlRmlsdGVyczxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgZmlsdGVyc1RvTWVyZ2U6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2ZpbHRlcnMnXSxcbiAgZnJvbUNvbmZpZz86IGJvb2xlYW5cbik6IFMge1xuICBjb25zdCBwcmVzZXJ2ZUZpbHRlck9yZGVyID0gZnJvbUNvbmZpZ1xuICAgID8gZmlsdGVyc1RvTWVyZ2U/Lm1hcChsID0+IGwuaWQpXG4gICAgOiBzdGF0ZS5wcmVzZXJ2ZUZpbHRlck9yZGVyO1xuXG4gIGlmICghQXJyYXkuaXNBcnJheShmaWx0ZXJzVG9NZXJnZSkgfHwgIWZpbHRlcnNUb01lcmdlLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHt2YWxpZGF0ZWQsIGZhaWxlZCwgdXBkYXRlZERhdGFzZXRzfSA9IHZhbGlkYXRlRmlsdGVyc1VwZGF0ZURhdGFzZXRzKHN0YXRlLCBmaWx0ZXJzVG9NZXJnZSk7XG4gIGxldCB1cGRhdGVkRmlsdGVycyA9IGluc2VydEl0ZW1CYXNlZE9uUHJlc2VydmVkT3JkZXIoXG4gICAgc3RhdGUuZmlsdGVycyxcbiAgICB2YWxpZGF0ZWQsXG4gICAgcHJlc2VydmVGaWx0ZXJPcmRlclxuICApO1xuXG4gIC8vIG1lcmdlIGZpbHRlciB3aXRoIGV4aXN0aW5nXG4gIHVwZGF0ZWRGaWx0ZXJzID0gcmVzZXRGaWx0ZXJHcHVNb2RlKHVwZGF0ZWRGaWx0ZXJzKTtcbiAgdXBkYXRlZEZpbHRlcnMgPSBhc3NpZ25HcHVDaGFubmVscyh1cGRhdGVkRmlsdGVycyk7XG4gIC8vIGZpbHRlciBkYXRhXG4gIGNvbnN0IGRhdGFzZXRzVG9GaWx0ZXIgPSB1bmlxKGZsYXR0ZW5EZWVwKHZhbGlkYXRlZC5tYXAoZiA9PiBmLmRhdGFJZCkpKTtcblxuICBjb25zdCBmaWx0ZXJlZCA9IGFwcGx5RmlsdGVyc1RvRGF0YXNldHMoXG4gICAgZGF0YXNldHNUb0ZpbHRlcixcbiAgICB1cGRhdGVkRGF0YXNldHMsXG4gICAgdXBkYXRlZEZpbHRlcnMsXG4gICAgc3RhdGUubGF5ZXJzXG4gICk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiB1cGRhdGVkRmlsdGVycyxcbiAgICBkYXRhc2V0czogZmlsdGVyZWQsXG4gICAgcHJlc2VydmVGaWx0ZXJPcmRlcixcbiAgICBmaWx0ZXJUb0JlTWVyZ2VkOiBbLi4uc3RhdGUuZmlsdGVyVG9CZU1lcmdlZCwgLi4uZmFpbGVkXVxuICB9O1xufVxuXG4vLyByZXBsYWNlIGRhdGFJZCBpbiBzYXZlZCBGaWx0ZXJcbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlRmlsdGVyRGF0YXNldElkcyhcbiAgc2F2ZWRGaWx0ZXI6IEZpbHRlcltdLFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgZGF0YUlkVG9Vc2U6IHN0cmluZ1xuKSB7XG4gIGNvbnN0IHJlcGxhY2VkOiBGaWx0ZXJbXSA9IFtdO1xuICBzYXZlZEZpbHRlci5mb3JFYWNoKGZpbHRlciA9PiB7XG4gICAgaWYgKGZpbHRlci5kYXRhSWQuaW5jbHVkZXMoZGF0YUlkKSkge1xuICAgICAgY29uc3QgbmV3RGF0YUlkID0gZmlsdGVyLmRhdGFJZC5tYXAoZCA9PiAoZCA9PT0gZGF0YUlkID8gZGF0YUlkVG9Vc2UgOiBkKSk7XG4gICAgICBsZXQgcGxvdFR5cGU7XG4gICAgICAvLyBUT0RPOiBtb3JlIGdlbmVyaWMgYXBwcm9hY2ggdG8gc2F2ZSBwbG90VHlwZS5jb2xvcnNCeURhdGFJZFxuICAgICAgaWYgKGZpbHRlci5wbG90VHlwZT8uY29sb3JzQnlEYXRhSWQ/LltkYXRhSWRdKSB7XG4gICAgICAgIC8vIHJlcGxhY2UgY29sb3JCeURhdGFJZCBpbiBmaWx0ZXIucGxvdFR5cGVcbiAgICAgICAgY29uc3Qge1tkYXRhSWRdOiBjb2xvciwgLi4ucmVzdH0gPSBmaWx0ZXIucGxvdFR5cGU/LmNvbG9yc0J5RGF0YUlkIHx8IHt9O1xuICAgICAgICBwbG90VHlwZSA9IHtcbiAgICAgICAgICAuLi5maWx0ZXIucGxvdFR5cGUsXG4gICAgICAgICAgY29sb3JzQnlEYXRhSWQ6IHtcbiAgICAgICAgICAgIC4uLnJlc3QsXG4gICAgICAgICAgICBbZGF0YUlkVG9Vc2VdOiBjb2xvclxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJlcGxhY2VkLnB1c2goe1xuICAgICAgICAuLi5maWx0ZXIsXG4gICAgICAgIGRhdGFJZDogbmV3RGF0YUlkLFxuICAgICAgICAuLi4ocGxvdFR5cGUgPyB7cGxvdFR5cGV9IDoge30pXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVwbGFjZWQubGVuZ3RoID8gcmVwbGFjZWQgOiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTYXZlZExheWVyQ29uZmlnVjEobGF5ZXJDb25maWc6IGFueSk6IGJvb2xlYW4ge1xuICAvLyBleHBvcnRlZCBsYXllciBjb25maWd1cmF0aW9uIGNvbnRhaW5zIHZpc3VhbENoYW5uZWxzIHByb3BlcnR5XG4gIHJldHVybiBsYXllckNvbmZpZz8udmlzdWFsQ2hhbm5lbHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUxheWVyQ29uZmlnKFxuICBzY2hlbWE6IEtlcGxlckdMU2NoZW1hQ2xhc3MsXG4gIGxheWVyQ29uZmlnOiBhbnlcbik6IFBhcnNlZExheWVyIHwgdW5kZWZpbmVkIHtcbiAgLy8gYXNzdW1lIHRoZSBsYXllciBjb25maWcgaXMgY3VycmVudCB2ZXJzaW9uXG4gIGNvbnN0IHNhdmVkQ29uZmlnID0ge1xuICAgIHZlcnNpb246IENVUlJFTlRfVkVSU0lPTixcbiAgICBjb25maWc6IHtcbiAgICAgIHZpc1N0YXRlOiB7bGF5ZXJzOiBbbGF5ZXJDb25maWddLCBsYXllck9yZGVyOiBbbGF5ZXJDb25maWcuaWRdfVxuICAgIH1cbiAgfTtcblxuICByZXR1cm4gc2NoZW1hLnBhcnNlU2F2ZWRDb25maWcoc2F2ZWRDb25maWcpPy52aXNTdGF0ZT8ubGF5ZXJzPy5bMF07XG59XG5cbmZ1bmN0aW9uIGluc2VydEl0ZW1CYXNlZE9uUHJlc2VydmVkT3JkZXIoXG4gIGN1cnJlbnRJdGVtczogRmlsdGVyW10sXG4gIGl0ZW1zOiBGaWx0ZXJbXSxcbiAgcHJlc2VydmVkT3JkZXI6IGFueVtdID0gW10sXG4gIGRlZmF1bHRTdGFydD86IGJvb2xlYW5cbikge1xuICBsZXQgbmV3SXRlbXMgPSBbLi4uY3VycmVudEl0ZW1zXTtcblxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICBjb25zdCBleHBlY3RlZElkeCA9IHByZXNlcnZlZE9yZGVyLmluZGV4T2YoaXRlbS5pZCk7XG4gICAgLy8gaW5zZXJ0QXQgdGhlIGVuZCBieSBkZWZhdWx0XG4gICAgbGV0IGluc2VydEF0ID0gZGVmYXVsdFN0YXJ0ID8gMCA6IG5ld0l0ZW1zLmxlbmd0aDtcbiAgICBpZiAoZXhwZWN0ZWRJZHggPiAwKSB7XG4gICAgICAvLyBsb29rIGZvciBsYXllciB0byBpbnNlcnQgYWZ0ZXJcbiAgICAgIGxldCBpID0gZXhwZWN0ZWRJZHggKyAxO1xuICAgICAgbGV0IHByZWNlZWRJZHggPSAtMTtcbiAgICAgIHdoaWxlIChpLS0gPiAwICYmIHByZWNlZWRJZHggPCAwKSB7XG4gICAgICAgIC8vIGtlZXAgbG9va2luZyBmb3IgcHJlY2VlZCBsYXllciB0aGF0IGlzIGFscmVhZHkgbG9hZGVkXG4gICAgICAgIGNvbnN0IHByZWNlZWRJdGVtSWQgPSBwcmVzZXJ2ZWRPcmRlcltpIC0gMV07XG4gICAgICAgIHByZWNlZWRJZHggPSBuZXdJdGVtcy5maW5kSW5kZXgoZCA9PiBkLmlkID09PSBwcmVjZWVkSXRlbUlkKTtcbiAgICAgIH1cbiAgICAgIGlmIChwcmVjZWVkSWR4ID4gLTEpIHtcbiAgICAgICAgLy8gaWYgZm91bmRcbiAgICAgICAgaW5zZXJ0QXQgPSBwcmVjZWVkSWR4ICsgMTtcbiAgICAgIH1cbiAgICB9XG4gICAgbmV3SXRlbXMgPSBhcnJheUluc2VydChuZXdJdGVtcywgaW5zZXJ0QXQsIGl0ZW0pO1xuICB9XG4gIHJldHVybiBuZXdJdGVtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUxheWVyRnJvbUNvbmZpZyhzdGF0ZTogVmlzU3RhdGUsIGxheWVyQ29uZmlnOiBhbnkpOiBMYXllciB8IG51bGwge1xuICAvLyBjaGVjayBpZiB0aGUgbGF5ZXIgY29uZmlnIGlzIHBhcnNlZFxuICBjb25zdCBzYXZlZExheWVyQ29uZmlnID0gaXNTYXZlZExheWVyQ29uZmlnVjEobGF5ZXJDb25maWcpO1xuICBjb25zdCBwYXJzZWRMYXllckNvbmZpZyA9IHNhdmVkTGF5ZXJDb25maWdcbiAgICA/IHBhcnNlTGF5ZXJDb25maWcoc3RhdGUuc2NoZW1hLCBsYXllckNvbmZpZylcbiAgICA6IGxheWVyQ29uZmlnO1xuXG4gIGlmICghcGFyc2VkTGF5ZXJDb25maWcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvLyBmaXJzdCB2YWxpZGF0ZSBjb25maWcgYWdhaW5zdCBkYXRhc2V0XG4gIGNvbnN0IHt2YWxpZGF0ZWQsIGZhaWxlZH0gPSB2YWxpZGF0ZUxheWVyc0J5RGF0YXNldHMoXG4gICAgc3RhdGUuZGF0YXNldHMsXG4gICAgc3RhdGUubGF5ZXJDbGFzc2VzLFxuICAgIFtwYXJzZWRMYXllckNvbmZpZ10sXG4gICAge2FsbG93RW1wdHlDb2x1bW46IHRydWUsIGtlZXBVbmxhYmVsZWRBZ2dyZWdhdGlvblRleHRMYWJlbDogc2F2ZWRMYXllckNvbmZpZ31cbiAgKTtcblxuICBpZiAoZmFpbGVkPy5sZW5ndGggfHwgIXZhbGlkYXRlZC5sZW5ndGgpIHtcbiAgICAvLyBmYWlsZWRcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IG5ld0xheWVyID0gdmFsaWRhdGVkWzBdO1xuICBuZXdMYXllci51cGRhdGVMYXllckRvbWFpbihzdGF0ZS5kYXRhc2V0cyk7XG4gIHJldHVybiBuZXdMYXllcjtcbn1cblxuLyoqXG4gKiBHZXQgbG9hZGVkIGZpbHRlciBmcm9tIHN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVGaWx0ZXIoXG4gIG5ld0ZpbHRlcjogRmlsdGVyLFxuICBzY2hlbWE6IEtlcGxlckdMU2NoZW1hQ2xhc3Ncbik6IFBhcnNlZEZpbHRlciB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRWaXNTdGF0ZSA9IHNlcmlhbGl6ZVZpc1N0YXRlKHtmaWx0ZXJzOiBbbmV3RmlsdGVyXX0sIHNjaGVtYSk7XG4gIHJldHVybiBzZXJpYWxpemVkVmlzU3RhdGU/LmZpbHRlcnM/LlswXTtcbn1cblxuLyoqXG4gKiBHZXQgbG9hZGVkIGxheWVyIGZyb20gc3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZUxheWVyKFxuICBuZXdMYXllcjogTGF5ZXIsXG4gIHNjaGVtYTogS2VwbGVyR0xTY2hlbWFDbGFzc1xuKTogUGFyc2VkTGF5ZXIgfCB1bmRlZmluZWQge1xuICBjb25zdCBzZXJpYWxpemVkVmlzU3RhdGUgPSBzZXJpYWxpemVWaXNTdGF0ZShcbiAgICB7bGF5ZXJzOiBbbmV3TGF5ZXJdLCBsYXllck9yZGVyOiBbbmV3TGF5ZXIuaWRdfSxcbiAgICBzY2hlbWFcbiAgKTtcbiAgcmV0dXJuIHNlcmlhbGl6ZWRWaXNTdGF0ZT8ubGF5ZXJzPy5bMF07XG59XG5cbi8qKlxuICogR2V0IGxvYWRlZCBlZmZlY3QgZnJvbSBzdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplRWZmZWN0KFxuICBuZXdFZmZlY3Q6IEVmZmVjdFR5cGUsXG4gIHNjaGVtYTogS2VwbGVyR0xTY2hlbWFDbGFzc1xuKTogUGFyc2VkRWZmZWN0IHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc2VyaWFsaXplZFZpc1N0YXRlID0gc2VyaWFsaXplVmlzU3RhdGUoXG4gICAge2VmZmVjdHM6IFtuZXdFZmZlY3RdLCBlZmZlY3RPcmRlcjogW25ld0VmZmVjdC5pZF19LFxuICAgIHNjaGVtYVxuICApO1xuICByZXR1cm4gc2VyaWFsaXplZFZpc1N0YXRlPy5lZmZlY3RzPy5bMF07XG59XG5cbi8qKlxuICogR2V0IHZpcyBzdGF0ZSBjb25maWdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZVZpc1N0YXRlKFxuICB2aXNTdGF0ZTogUGFydGlhbDxWaXNTdGF0ZT4sXG4gIHNjaGVtYTogS2VwbGVyR0xTY2hlbWFDbGFzc1xuKTogUGFyc2VkVmlzU3RhdGUgfCB1bmRlZmluZWQge1xuICBjb25zdCBzYXZlZFN0YXRlID0gc2NoZW1hLmdldENvbmZpZ1RvU2F2ZSh7XG4gICAgdmlzU3RhdGVcbiAgfSk7XG4gIHJldHVybiBzYXZlZFN0YXRlID8gc2NoZW1hLnBhcnNlU2F2ZWRDb25maWcoc2F2ZWRTdGF0ZSk/LnZpc1N0YXRlIDogdW5kZWZpbmVkO1xufVxuLyoqXG4gKiBNZXJnZSBsYXllcnMgZnJvbSBkZS1zZXJpYWxpemVkIHN0YXRlLCBpZiBubyBmaWVsZHMgb3IgZGF0YSBhcmUgbG9hZGVkXG4gKiBzYXZlIGl0IGZvciBsYXRlclxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlTGF5ZXJzPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBsYXllcnNUb01lcmdlOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydsYXllcnMnXSA9IFtdLFxuICBmcm9tQ29uZmlnPzogYm9vbGVhblxuKTogUyB7XG4gIGNvbnN0IHByZXNlcnZlTGF5ZXJPcmRlciA9IGZyb21Db25maWdcbiAgICA/IGdldExheWVyT3JkZXJGcm9tTGF5ZXJzKGxheWVyc1RvTWVyZ2UpXG4gICAgOiBzdGF0ZS5wcmVzZXJ2ZUxheWVyT3JkZXI7XG4gIGlmICghQXJyYXkuaXNBcnJheShsYXllcnNUb01lcmdlKSB8fCAhbGF5ZXJzVG9NZXJnZS5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgLy8gZG9uJ3QgbWVyZ2UgbGF5ZXIgaWYgZGF0YXNldCBpcyBiZWluZyBtZXJnZWRcbiAgY29uc3QgdW5tZXJnZWQ6IFBhcnNlZExheWVyW10gPSBbXTtcbiAgY29uc3QgdG9NZXJnZTogUGFyc2VkTGF5ZXJbXSA9IFtdO1xuICBsYXllcnNUb01lcmdlLmZvckVhY2goKGw6IFBhcnNlZExheWVyKSA9PiB7XG4gICAgaWYgKGw/LmNvbmZpZz8uZGF0YUlkICYmIHN0YXRlLmlzTWVyZ2luZ0RhdGFzZXRzW2wuY29uZmlnLmRhdGFJZF0pIHtcbiAgICAgIHVubWVyZ2VkLnB1c2gobCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRvTWVyZ2UucHVzaChsKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IHt2YWxpZGF0ZWQ6IG1lcmdlZExheWVyLCBmYWlsZWR9ID0gdmFsaWRhdGVMYXllcnNCeURhdGFzZXRzKFxuICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgIHN0YXRlLmxheWVyQ2xhc3NlcyxcbiAgICB0b01lcmdlLFxuICAgIHtrZWVwVW5sYWJlbGVkQWdncmVnYXRpb25UZXh0TGFiZWw6IHRydWV9XG4gICk7XG4gIHVubWVyZ2VkLnB1c2goLi4uZmFpbGVkKTtcbiAgLy8gcHV0IG5ldyBsYXllcnMgaW4gZnJvbnQgb2YgY3VycmVudCBsYXllcnNcbiAgY29uc3Qge25ld0xheWVyT3JkZXIsIG5ld0xheWVyc30gPSBpbnNlcnRMYXllckF0UmlnaHRPcmRlcihcbiAgICBzdGF0ZS5sYXllcnMsXG4gICAgbWVyZ2VkTGF5ZXIsXG4gICAgc3RhdGUubGF5ZXJPcmRlcixcbiAgICBwcmVzZXJ2ZUxheWVyT3JkZXJcbiAgKTtcblxuICBsZXQgbWVyZ2VkU3RhdGU6IFMgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBuZXdMYXllcnMsXG4gICAgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlcixcbiAgICBwcmVzZXJ2ZUxheWVyT3JkZXIsXG4gICAgbGF5ZXJUb0JlTWVyZ2VkOiBbLi4uc3RhdGUubGF5ZXJUb0JlTWVyZ2VkLCAuLi51bm1lcmdlZF1cbiAgfTtcblxuICAvLyBBcHBseSBwZW5kaW5nIGxheWVyT3JkZXIgd2l0aCBncm91cHMgaWYgbGF5ZXJzIGFyZSBub3cgYXZhaWxhYmxlXG4gIGlmIChtZXJnZWRTdGF0ZS5sYXllck9yZGVyVG9CZU1lcmdlZCAmJiBtZXJnZWRTdGF0ZS5sYXllcnMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IHNhdmVkT3JkZXIgPSBtZXJnZWRTdGF0ZS5sYXllck9yZGVyVG9CZU1lcmdlZDtcbiAgICBtZXJnZWRTdGF0ZSA9IG1lcmdlTGF5ZXJPcmRlcihtZXJnZWRTdGF0ZSwgc2F2ZWRPcmRlcik7XG4gICAgLy8gS2VlcCBzYXZlZExheWVyT3JkZXIgYXZhaWxhYmxlIGZvciBmdXR1cmUgZGVmZXJyZWQgbGF5ZXJzXG4gICAgaWYgKG1lcmdlZFN0YXRlLmxheWVyVG9CZU1lcmdlZC5sZW5ndGggPiAwKSB7XG4gICAgICBtZXJnZWRTdGF0ZSA9IHsuLi5tZXJnZWRTdGF0ZSwgbGF5ZXJPcmRlclRvQmVNZXJnZWQ6IHNhdmVkT3JkZXJ9O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtZXJnZWRTdGF0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc2VydExheWVyQXRSaWdodE9yZGVyKFxuICBjdXJyZW50TGF5ZXJzLFxuICBsYXllcnNUb0luc2VydCxcbiAgY3VycmVudE9yZGVyLFxuICBwcmVzZXJ2ZWRPcmRlcjogc3RyaW5nW10gPSBbXVxuKSB7XG4gIGlmICghbGF5ZXJzVG9JbnNlcnQ/Lmxlbmd0aCkge1xuICAgIHJldHVybiB7bmV3TGF5ZXJzOiBjdXJyZW50TGF5ZXJzLCBuZXdMYXllck9yZGVyOiBjdXJyZW50T3JkZXJ9O1xuICB9XG5cbiAgY29uc3QgY3VycmVudExheWVyUXVldWUgPSBjdXJyZW50T3JkZXJcbiAgICAuZmlsdGVyKGVudHJ5ID0+IHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpXG4gICAgLm1hcChpZCA9PiBmaW5kQnlJZChpZCkoY3VycmVudExheWVycykpXG4gICAgLmZpbHRlcihsYXllciA9PiBCb29sZWFuKGxheWVyKSk7XG4gIGNvbnN0IG5ld0xheWVycyA9IGN1cnJlbnRMYXllcnMuY29uY2F0KGxheWVyc1RvSW5zZXJ0KTtcbiAgY29uc3QgbmV3TGF5ZXJPcmRlclF1ZXVlID0gaW5zZXJ0SXRlbUJhc2VkT25QcmVzZXJ2ZWRPcmRlcihcbiAgICBjdXJyZW50TGF5ZXJRdWV1ZSxcbiAgICBsYXllcnNUb0luc2VydCxcbiAgICBwcmVzZXJ2ZWRPcmRlcixcbiAgICB0cnVlXG4gICk7XG5cbiAgY29uc3QgbmV3RmxhdExheWVyT3JkZXIgPSBnZXRMYXllck9yZGVyRnJvbUxheWVycyhuZXdMYXllck9yZGVyUXVldWUpO1xuXG4gIC8vIElmIG5vIGdyb3VwcyBleGlzdCBpbiBjdXJyZW50IG9yZGVyLCBqdXN0IHVzZSB0aGUgbmV3IGZsYXQgb3JkZXJcbiAgY29uc3QgaGFzR3JvdXBzID0gY3VycmVudE9yZGVyLnNvbWUoZW50cnkgPT4gaXNQbGFpbk9iamVjdChlbnRyeSkpO1xuICBpZiAoIWhhc0dyb3Vwcykge1xuICAgIHJldHVybiB7XG4gICAgICBuZXdMYXllck9yZGVyOiBuZXdGbGF0TGF5ZXJPcmRlcixcbiAgICAgIG5ld0xheWVyc1xuICAgIH07XG4gIH1cblxuICAvLyBSZWJ1aWxkIGxheWVyT3JkZXIgcHJlc2VydmluZyBncm91cHMgaW4gdGhlaXIgcmVsYXRpdmUgcG9zaXRpb25zLlxuICAvLyBSZXBsYWNlIGVhY2ggc3RyaW5nIGVudHJ5IHdpdGggaXRzIHVwZGF0ZWQgcG9zaXRpb24gZnJvbSBuZXdGbGF0TGF5ZXJPcmRlcixcbiAgLy8gYW5kIGtlZXAgZ3JvdXBzIGFzLWlzLlxuICBjb25zdCBleGlzdGluZ0ZsYXRJZHMgPSBuZXcgU2V0KFxuICAgIGN1cnJlbnRPcmRlci5maWx0ZXIoZW50cnkgPT4gdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykgYXMgc3RyaW5nW11cbiAgKTtcbiAgY29uc3QgbmV3SW5zZXJ0ZWRJZHMgPSBuZXdGbGF0TGF5ZXJPcmRlci5maWx0ZXIoaWQgPT4gIWV4aXN0aW5nRmxhdElkcy5oYXMoaWQpKTtcblxuICAvLyBSZWJ1aWxkOiB3YWxrIHRocm91Z2ggY3VycmVudE9yZGVyLCByZXBsYWNlIHN0cmluZyBlbnRyaWVzIHdpdGggdGhlaXJcbiAgLy8gbmV3IHBvc2l0aW9uIGVxdWl2YWxlbnRzIGZyb20gbmV3RmxhdExheWVyT3JkZXIsIHRoZW4gYXBwZW5kIGFueSBuZXdseSBpbnNlcnRlZCBsYXllcnNcbiAgY29uc3QgcmVzdWx0OiBMYXllck9yZGVyID0gW107XG4gIGNvbnN0IGZsYXRRdWV1ZSA9IFsuLi5uZXdGbGF0TGF5ZXJPcmRlci5maWx0ZXIoaWQgPT4gZXhpc3RpbmdGbGF0SWRzLmhhcyhpZCkpXTtcbiAgbGV0IGZsYXRJZHggPSAwO1xuXG4gIGZvciAoY29uc3QgZW50cnkgb2YgY3VycmVudE9yZGVyKSB7XG4gICAgaWYgKGlzUGxhaW5PYmplY3QoZW50cnkpKSB7XG4gICAgICByZXN1bHQucHVzaChlbnRyeSBhcyBMYXllck9yZGVyR3JvdXApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZXBsYWNlIHdpdGggY29ycmVzcG9uZGluZyBlbnRyeSBmcm9tIHJlb3JkZXJlZCBmbGF0IGxpc3RcbiAgICAgIGlmIChmbGF0SWR4IDwgZmxhdFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICByZXN1bHQucHVzaChmbGF0UXVldWVbZmxhdElkeF0pO1xuICAgICAgICBmbGF0SWR4Kys7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQXBwZW5kIGFueSBuZXdseSBpbnNlcnRlZCBsYXllcnMgYXQgdGhlIGZyb250ICh0aGV5IGFyZSBuZXcpXG4gIHJldHVybiB7XG4gICAgbmV3TGF5ZXJPcmRlcjogWy4uLm5ld0luc2VydGVkSWRzLCAuLi5yZXN1bHRdLFxuICAgIG5ld0xheWVyc1xuICB9O1xufVxuXG4vKipcbiAqIE1lcmdlIHNhdmVkIGxheWVyT3JkZXIgd2l0aCBjdXJyZW50IHN0YXRlIHRvIHJlc3RvcmUgbGF5ZXIgZ3JvdXBzLlxuICogQ2FsbGVkIGFmdGVyIGxheWVycyBoYXZlIGJlZW4gbWVyZ2VkLiBJZiB0aGUgc2F2ZWQgY29uZmlnIGNvbnRhaW5zIGEgbGF5ZXJPcmRlclxuICogd2l0aCBncm91cHMsIHRoaXMgcmVwbGFjZXMgdGhlIGZsYXQgbGF5ZXJPcmRlciB3aXRoIHRoZSBzYXZlZCBoaWVyYXJjaGljYWwgb25lLFxuICogZmlsdGVyaW5nIG91dCBhbnkgbGF5ZXIgSURzIHRoYXQgZG9uJ3QgZXhpc3QgaW4gdGhlIGN1cnJlbnQgc3RhdGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUxheWVyT3JkZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIHNhdmVkTGF5ZXJPcmRlcj86IGFueVtdLFxuICBmcm9tQ29uZmlnPzogYm9vbGVhblxuKTogUyB7XG4gIGlmICghc2F2ZWRMYXllck9yZGVyIHx8ICFBcnJheS5pc0FycmF5KHNhdmVkTGF5ZXJPcmRlcikgfHwgc2F2ZWRMYXllck9yZGVyLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIENoZWNrIGlmIHRoZSBzYXZlZCBsYXllck9yZGVyIGNvbnRhaW5zIGFueSBncm91cHNcbiAgY29uc3QgaGFzR3JvdXBzID0gc2F2ZWRMYXllck9yZGVyLnNvbWUoZW50cnkgPT4gaXNQbGFpbk9iamVjdChlbnRyeSkpO1xuICBpZiAoIWhhc0dyb3Vwcykge1xuICAgIC8vIE5vIGdyb3VwcyAtIHRoZSBsYXllciBtZXJnZXIgYWxyZWFkeSBoYW5kbGVkIG9yZGVyaW5nIHZpYSBwcmVzZXJ2ZUxheWVyT3JkZXJcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyBJZiBsYXllcnMgaGF2ZW4ndCBiZWVuIG1lcmdlZCB5ZXQsIHN0b3JlIGZvciBsYXRlclxuICBpZiAoc3RhdGUubGF5ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGxheWVyT3JkZXJUb0JlTWVyZ2VkOiBzYXZlZExheWVyT3JkZXJcbiAgICB9O1xuICB9XG5cbiAgLy8gQnVpbGQgYSBzZXQgb2YgdmFsaWQgbGF5ZXIgSURzIGZyb20gY3VycmVudCBzdGF0ZVxuICBjb25zdCB2YWxpZExheWVySWRzID0gbmV3IFNldChzdGF0ZS5sYXllcnMubWFwKGwgPT4gbC5pZCkpO1xuXG4gIC8vIFJlY3Vyc2l2ZWx5IGZpbHRlciB0aGUgc2F2ZWQgbGF5ZXJPcmRlciB0byBvbmx5IGluY2x1ZGUgdmFsaWQgbGF5ZXJzXG4gIGZ1bmN0aW9uIGZpbHRlckxheWVyT3JkZXIob3JkZXI6IGFueVtdKTogTGF5ZXJPcmRlciB7XG4gICAgY29uc3QgcmVzdWx0OiBMYXllck9yZGVyID0gW107XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBvcmRlcikge1xuICAgICAgaWYgKGlzUGxhaW5PYmplY3QoZW50cnkpKSB7XG4gICAgICAgIGNvbnN0IGdyb3VwID0gZW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwO1xuICAgICAgICBjb25zdCBmaWx0ZXJlZEdyb3VwT3JkZXIgPSBmaWx0ZXJMYXllck9yZGVyKGdyb3VwLmxheWVyT3JkZXIpO1xuICAgICAgICAvLyBLZWVwIHRoZSBncm91cCBldmVuIGlmIGVtcHR5ICh1c2VyIG1heSB3YW50IHRoZSBlbXB0eSBncm91cClcbiAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgIC4uLmdyb3VwLFxuICAgICAgICAgIGxheWVyT3JkZXI6IGZpbHRlcmVkR3JvdXBPcmRlclxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyAmJiB2YWxpZExheWVySWRzLmhhcyhlbnRyeSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goZW50cnkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgY29uc3QgcmVzdG9yZWRMYXllck9yZGVyID0gZmlsdGVyTGF5ZXJPcmRlcihzYXZlZExheWVyT3JkZXIpO1xuXG4gIC8vIEZpbmQgYW55IGxheWVycyBpbiB0aGUgY3VycmVudCBzdGF0ZSB0aGF0IGFyZW4ndCBpbiB0aGUgcmVzdG9yZWQgb3JkZXJcbiAgLy8gKGNvdWxkIGhhcHBlbiBpZiBsYXllcnMgd2VyZSBhZGRlZCBiZXR3ZWVuIHNhdmUgYW5kIGxvYWQpXG4gIGNvbnN0IGxheWVySWRzSW5SZXN0b3JlZCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBmdW5jdGlvbiBjb2xsZWN0SWRzKG9yZGVyOiBhbnlbXSkge1xuICAgIGZvciAoY29uc3QgZW50cnkgb2Ygb3JkZXIpIHtcbiAgICAgIGlmIChpc1BsYWluT2JqZWN0KGVudHJ5KSkge1xuICAgICAgICBjb2xsZWN0SWRzKChlbnRyeSBhcyBMYXllck9yZGVyR3JvdXApLmxheWVyT3JkZXIpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGxheWVySWRzSW5SZXN0b3JlZC5hZGQoZW50cnkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb2xsZWN0SWRzKHJlc3RvcmVkTGF5ZXJPcmRlcik7XG5cbiAgLy8gQWRkIGFueSBtaXNzaW5nIGxheWVycyBhdCB0aGUgdG9wXG4gIGNvbnN0IG1pc3NpbmdMYXllcnMgPSBzdGF0ZS5sYXllcnMuZmlsdGVyKGwgPT4gIWxheWVySWRzSW5SZXN0b3JlZC5oYXMobC5pZCkpLm1hcChsID0+IGwuaWQpO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJPcmRlcjogWy4uLm1pc3NpbmdMYXllcnMsIC4uLnJlc3RvcmVkTGF5ZXJPcmRlcl0sXG4gICAgbGF5ZXJPcmRlclRvQmVNZXJnZWQ6IG51bGxcbiAgfTtcbn1cblxuLyoqXG4gKiBNZXJnZSBpbnRlcmFjdGlvbnMgd2l0aCBzYXZlZCBjb25maWdcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUludGVyYWN0aW9uczxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkOiBQYXJ0aWFsPFNhdmVkSW50ZXJhY3Rpb25Db25maWc+IHwgdW5kZWZpbmVkXG4pOiBTIHtcbiAgY29uc3QgbWVyZ2VkOiBOZXN0ZWRQYXJ0aWFsPFNhdmVkSW50ZXJhY3Rpb25Db25maWc+ID0ge307XG4gIGNvbnN0IHVubWVyZ2VkOiBQYXJ0aWFsPFNhdmVkSW50ZXJhY3Rpb25Db25maWc+ID0ge307XG5cbiAgaWYgKGludGVyYWN0aW9uVG9CZU1lcmdlZCkge1xuICAgIChPYmplY3Qua2V5cyhpbnRlcmFjdGlvblRvQmVNZXJnZWQpIGFzIEFycmF5PGtleW9mIFNhdmVkSW50ZXJhY3Rpb25Db25maWc+KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAoIXN0YXRlLmludGVyYWN0aW9uQ29uZmlnW2tleV0pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjdXJyZW50Q29uZmlnID1cbiAgICAgICAga2V5ID09PSAndG9vbHRpcCcgfHxcbiAgICAgICAga2V5ID09PSAnYnJ1c2gnIHx8XG4gICAgICAgIGtleSA9PT0gJ2dlb2NvZGVyJyB8fFxuICAgICAgICBrZXkgPT09ICdsZWdlbmQnIHx8XG4gICAgICAgIGtleSA9PT0gJ3pvb21PcGFjaXR5J1xuICAgICAgICAgID8gc3RhdGUuaW50ZXJhY3Rpb25Db25maWdba2V5XS5jb25maWdcbiAgICAgICAgICA6IG51bGw7XG5cbiAgICAgIGNvbnN0IHtlbmFibGVkLCAuLi5jb25maWdTYXZlZH0gPSBpbnRlcmFjdGlvblRvQmVNZXJnZWRba2V5XSB8fCB7fTtcblxuICAgICAgbGV0IGNvbmZpZ1RvTWVyZ2UgPSBjb25maWdTYXZlZDtcblxuICAgICAgaWYgKGtleSA9PT0gJ3Rvb2x0aXAnKSB7XG4gICAgICAgIGNvbnN0IHNhdmVkVG9vbHRpcENvbmZpZyA9IGNvbmZpZ1NhdmVkIGFzIFNhdmVkSW50ZXJhY3Rpb25Db25maWdbJ3Rvb2x0aXAnXTtcbiAgICAgICAgY29uc3Qge21lcmdlZFRvb2x0aXAsIHVubWVyZ2VkVG9vbHRpcH0gPSBtZXJnZUludGVyYWN0aW9uVG9vbHRpcENvbmZpZyhcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICBzYXZlZFRvb2x0aXBDb25maWdcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBtZXJnZSBuZXcgZGF0YXNldCB0b29sdGlwcyB3aXRoIG9yaWdpbmFsIGRhdGFzZXQgdG9vbHRpcHNcbiAgICAgICAgY29uZmlnVG9NZXJnZSA9IHtcbiAgICAgICAgICBmaWVsZHNUb1Nob3c6IHtcbiAgICAgICAgICAgIC4uLihjdXJyZW50Q29uZmlnIGFzIFRvb2x0aXBJbmZvWydjb25maWcnXSkuZmllbGRzVG9TaG93LFxuICAgICAgICAgICAgLi4ubWVyZ2VkVG9vbHRpcFxuICAgICAgICAgIH0sXG4gICAgICAgICAgLi4uKHNhdmVkVG9vbHRpcENvbmZpZy50aW1lem9uZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IHt0aW1lem9uZTogc2F2ZWRUb29sdGlwQ29uZmlnLnRpbWV6b25lfVxuICAgICAgICAgICAgOiB7fSlcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoT2JqZWN0LmtleXModW5tZXJnZWRUb29sdGlwKS5sZW5ndGgpIHtcbiAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgdW5tZXJnZWQudG9vbHRpcCA9IHtmaWVsZHNUb1Nob3c6IHVubWVyZ2VkVG9vbHRpcCwgZW5hYmxlZDogQm9vbGVhbihlbmFibGVkKX07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbWVyZ2VkW2tleV0gPSB7XG4gICAgICAgIC4uLnN0YXRlLmludGVyYWN0aW9uQ29uZmlnW2tleV0sXG4gICAgICAgIGVuYWJsZWQ6IEJvb2xlYW4oZW5hYmxlZCksXG4gICAgICAgIC4uLihjdXJyZW50Q29uZmlnXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGNvbmZpZzogcGljayhcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAuLi5jdXJyZW50Q29uZmlnLFxuICAgICAgICAgICAgICAgICAgLi4uY29uZmlnVG9NZXJnZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoY3VycmVudENvbmZpZylcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge30pXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgbmV4dFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGludGVyYWN0aW9uQ29uZmlnOiB7XG4gICAgICAuLi5zdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgIC4uLm1lcmdlZFxuICAgIH0sXG4gICAgaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkOiBzYXZlZFVubWVyZ2VkSW50ZXJhY3Rpb24oc3RhdGUsIHVubWVyZ2VkKVxuICB9O1xuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG5mdW5jdGlvbiBjb21iaW5lSW50ZXJhY3Rpb25Db25maWdzKGNvbmZpZ3M6IFNhdmVkSW50ZXJhY3Rpb25Db25maWdbXSk6IFNhdmVkSW50ZXJhY3Rpb25Db25maWcge1xuICBjb25zdCBjb21iaW5lZCA9IHsuLi5jb25maWdzWzBdfTtcbiAgLy8gYGxlZ2VuZGAgaXMgb3B0aW9uYWwgb24gb2xkZXIgc2F2ZWQgbWFwczsgc2VlZCBpdCBzbyBhIGxhdGVyIGNvbmZpZyBpcyBub3QgZHJvcHBlZC5cbiAgaWYgKCFjb21iaW5lZC5sZWdlbmQpIHtcbiAgICBjb25zdCB3aXRoTGVnZW5kID0gY29uZmlncy5maW5kKGMgPT4gYy5sZWdlbmQpO1xuICAgIGlmICh3aXRoTGVnZW5kPy5sZWdlbmQpIHtcbiAgICAgIGNvbWJpbmVkLmxlZ2VuZCA9IHdpdGhMZWdlbmQubGVnZW5kO1xuICAgIH1cbiAgfVxuICAvLyBTYW1lIGZvciBmYWRlLW9uLXpvb206IGFuIG9sZGVyIGNvbmZpZyBpbiBmcm9udCBtdXN0IG5vdCBkcm9wIGNvbnRyb2xsZXJzIGZyb20gYSBsYXRlciBvbmUuXG4gIGlmICghY29tYmluZWQuem9vbU9wYWNpdHkpIHtcbiAgICBjb25zdCB3aXRoWm9vbU9wYWNpdHkgPSBjb25maWdzLmZpbmQoYyA9PiBjLnpvb21PcGFjaXR5KTtcbiAgICBpZiAod2l0aFpvb21PcGFjaXR5Py56b29tT3BhY2l0eSkge1xuICAgICAgY29tYmluZWQuem9vbU9wYWNpdHkgPSB3aXRoWm9vbU9wYWNpdHkuem9vbU9wYWNpdHk7XG4gICAgfVxuICB9XG4gIC8vIGhhbmRsZSBlYWNoIHByb3BlcnR5IGtleSBvZiBhbiBgSW50ZXJhY3Rpb25Db25maWdgLCBlLmcuIHRvb2x0aXAsIGdlb2NvZGVyLCBicnVzaCwgY29vcmRpbmF0ZVxuICAvLyBieSBjb21iaW5pbmcgdmFsdWVzIGZvciBlYWNoIGFtb25nIGFsbCBwYXNzZWQgaW4gY29uZmlnc1xuXG4gIGZvciAoY29uc3Qga2V5IGluIGNvbWJpbmVkKSB7XG4gICAgY29uc3QgdG9CZUNvbWJpbmVkUHJvcHMgPSBjb25maWdzLm1hcChjID0+IGNba2V5XSk7XG5cbiAgICAvLyBhbGwgb2YgdGhlc2UgaGF2ZSBhbiBlbmFibGVkIGJvb2xlYW5cbiAgICBjb21iaW5lZFtrZXldID0ge1xuICAgICAgLy8gYXJlIGFueSBvZiB0aGUgY29uZmlncycgZW5hYmxlZCB2YWx1ZXMgdHJ1ZT9cbiAgICAgIGVuYWJsZWQ6IHRvQmVDb21iaW5lZFByb3BzLnNvbWUocCA9PiBwPy5lbmFibGVkKVxuICAgIH07XG5cbiAgICBpZiAoa2V5ID09PSAndG9vbHRpcCcpIHtcbiAgICAgIC8vIGFyZSBhbnkgb2YgdGhlIGNvbmZpZ3MnIGNvbXBhcmVNb2RlIHZhbHVlcyB0cnVlP1xuICAgICAgY29tYmluZWRba2V5XS5jb21wYXJlTW9kZSA9IHRvQmVDb21iaW5lZFByb3BzLnNvbWUocCA9PiBwPy5jb21wYXJlTW9kZSk7XG5cbiAgICAgIC8vIHJldHVybiB0aGUgY29tcGFyZSB0eXBlIG1vZGUsIGl0IHdpbGwgYmUgZWl0aGVyIGFic29sdXRlIG9yIHJlbGF0aXZlXG4gICAgICBjb21iaW5lZFtrZXldLmNvbXBhcmVUeXBlID0gZ2V0VmFsdWVXaXRoSGlnaGVzdE9jY3VycmVuY2UoXG4gICAgICAgIHRvQmVDb21iaW5lZFByb3BzLm1hcChwID0+IHAuY29tcGFyZVR5cGUpXG4gICAgICApO1xuXG4gICAgICBjb25zdCBoYXNUaW1lem9uZSA9IHRvQmVDb21iaW5lZFByb3BzLnNvbWUocCA9PiBwPy50aW1lem9uZSAhPT0gdW5kZWZpbmVkKTtcbiAgICAgIGlmIChoYXNUaW1lem9uZSkge1xuICAgICAgICBjb21iaW5lZFtrZXldLnRpbWV6b25lID0gZ2V0VmFsdWVXaXRoSGlnaGVzdE9jY3VycmVuY2UoXG4gICAgICAgICAgdG9CZUNvbWJpbmVkUHJvcHMubWFwKHAgPT4gcD8udGltZXpvbmUpXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIGNvbWJpbmUgZmllbGRzVG9TaG93IGFtb25nIGFsbCBkYXRhc2V0IGlkc1xuICAgICAgY29tYmluZWRba2V5XS5maWVsZHNUb1Nob3cgPSB0b0JlQ29tYmluZWRQcm9wc1xuICAgICAgICAubWFwKHAgPT4gcC5maWVsZHNUb1Nob3cpXG4gICAgICAgIC5yZWR1Y2UoKGFjYywgbmV4dEZpZWxkc1RvU2hvdykgPT4ge1xuICAgICAgICAgIGZvciAoY29uc3QgbmV4dERhdGFJZEtleSBpbiBuZXh0RmllbGRzVG9TaG93KSB7XG4gICAgICAgICAgICBjb25zdCBuZXh0VG9vbHRpcEZpZWxkcyA9IG5leHRGaWVsZHNUb1Nob3dbbmV4dERhdGFJZEtleV07XG4gICAgICAgICAgICBpZiAoIWFjY1tuZXh0RGF0YUlkS2V5XSkge1xuICAgICAgICAgICAgICAvLyBpZiB0aGUgZGF0YXNldCBpZCBpcyBub3QgcHJlc2VudCBpbiB0aGUgYWNjdW11bGF0b3JcbiAgICAgICAgICAgICAgLy8gdGhlbiBhZGQgaXQgd2l0aCBpdHMgdG9vbHRpcCBmaWVsZHNcbiAgICAgICAgICAgICAgYWNjW25leHREYXRhSWRLZXldID0gbmV4dFRvb2x0aXBGaWVsZHM7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBvdGhlcndpc2UgdGhlIGRhdGFzZXQgaWQgaXMgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBhY2N1bXVsYXRvclxuICAgICAgICAgICAgICAvLyBzbyBvbmx5IGFkZCB0aGUgbmV4dCB0b29sdGlwIGZpZWxkcyBmb3IgdGhpcyBkYXRhc2V0J3MgYXJyYXkgaWYgdGhleSBhcmUgbm90IGFscmVhZHkgcHJlc2VudCxcbiAgICAgICAgICAgICAgLy8gdXNpbmcgdGhlIHRvb2x0aXBGaWVsZC5uYW1lIHByb3BlcnR5IGZvciB1bmlxdWVuZXNzXG4gICAgICAgICAgICAgIG5leHRUb29sdGlwRmllbGRzLmZvckVhY2gobmV4dFRGID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWFjY1tuZXh0RGF0YUlkS2V5XS5maW5kKCh7bmFtZX0pID0+IG5leHRURi5uYW1lID09PSBuYW1lKSkge1xuICAgICAgICAgICAgICAgICAgYWNjW25leHREYXRhSWRLZXldLnB1c2gobmV4dFRGKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LCB7fSk7XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2JydXNoJykge1xuICAgICAgLy8ga2VlcCB0aGUgYmlnZ2VzdCBicnVzaCBzaXplXG4gICAgICBjb21iaW5lZFtrZXldLnNpemUgPVxuICAgICAgICBhZ2dyZWdhdGUodG9CZUNvbWJpbmVkUHJvcHMsIEFHR1JFR0FUSU9OX1RZUEVTLm1heGltdW0sIHAgPT4gcC5zaXplKSA/PyBudWxsO1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdnZW9jb2RlcicpIHtcbiAgICAgIGNvbWJpbmVkW2tleV0ubGltaXRTZWFyY2ggPSB0b0JlQ29tYmluZWRQcm9wcy5zb21lKHAgPT4gcD8ubGltaXRTZWFyY2gpO1xuICAgICAgY29uc3QgY29sb3IgPSB0b0JlQ29tYmluZWRQcm9wcy5maW5kKHAgPT4gcD8uY29sb3IpPy5jb2xvcjtcbiAgICAgIGlmIChjb2xvcikge1xuICAgICAgICBjb21iaW5lZFtrZXldLmNvbG9yID0gY29sb3I7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2xlZ2VuZCcpIHtcbiAgICAgIGNvbWJpbmVkW2tleV0uaGlkZUludmlzaWJsZUxheWVycyA9IHRvQmVDb21iaW5lZFByb3BzLnNvbWUocCA9PiBwPy5oaWRlSW52aXNpYmxlTGF5ZXJzKTtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnem9vbU9wYWNpdHknICYmIGNvbWJpbmVkLnpvb21PcGFjaXR5KSB7XG4gICAgICBjb21iaW5lZC56b29tT3BhY2l0eS5jb250cm9sbGVycyA9IGNvbWJpbmVab29tT3BhY2l0eUNvbnRyb2xsZXJzKHRvQmVDb21iaW5lZFByb3BzKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29tYmluZWQ7XG59XG5cbmZ1bmN0aW9uIHNhdmVkVW5tZXJnZWRJbnRlcmFjdGlvbjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgdW5tZXJnZWQ6IFBhcnRpYWw8U2F2ZWRJbnRlcmFjdGlvbkNvbmZpZz5cbikge1xuICBpZiAoIXVubWVyZ2VkPy50b29sdGlwPy5maWVsZHNUb1Nob3cpIHtcbiAgICByZXR1cm4gc3RhdGUuaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkO1xuICB9XG4gIHJldHVybiB7XG4gICAgdG9vbHRpcDoge1xuICAgICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkLnRvb2x0aXAsXG4gICAgICAuLi4odHlwZW9mIHVubWVyZ2VkPy50b29sdGlwPy5lbmFibGVkID09PSAnYm9vbGVhbidcbiAgICAgICAgPyB7ZW5hYmxlZDogdW5tZXJnZWQudG9vbHRpcC5lbmFibGVkfVxuICAgICAgICA6IHt9KSxcbiAgICAgIGZpZWxkc1RvU2hvdzoge1xuICAgICAgICAuLi5zdGF0ZS5pbnRlcmFjdGlvblRvQmVNZXJnZWQ/LnRvb2x0aXA/LmZpZWxkc1RvU2hvdyxcbiAgICAgICAgLi4udW5tZXJnZWQ/LnRvb2x0aXA/LmZpZWxkc1RvU2hvd1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZUludGVyYWN0aW9uRGF0YXNldElkcyhpbnRlcmFjdGlvbkNvbmZpZywgZGF0YUlkOiBzdHJpbmcsIGRhdGFJZFRvUmVwbGFjZTogc3RyaW5nKSB7XG4gIGlmIChpbnRlcmFjdGlvbkNvbmZpZz8udG9vbHRpcD8uZmllbGRzVG9TaG93W2RhdGFJZF0pIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICB0b29sdGlwOiB7XG4gICAgICAgIC4uLmludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAsXG4gICAgICAgIGZpZWxkc1RvU2hvdzoge1xuICAgICAgICAgIFtkYXRhSWRUb1JlcGxhY2VdOiBpbnRlcmFjdGlvbkNvbmZpZz8udG9vbHRpcD8uZmllbGRzVG9TaG93W2RhdGFJZF1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogTWVyZ2Ugc3BsaXRNYXBzIGNvbmZpZyB3aXRoIGN1cnJlbnQgdmlzU3RldGUuXG4gKiBQYW5lbHMgYXJlIG1hdGNoZWQgYnkgaW5kZXg6IGluZGV4IGkgb2YgYHNwbGl0TWFwc2AsIGBzdGF0ZS5zcGxpdE1hcHNgIGFuZFxuICogYHN0YXRlLnNwbGl0TWFwc1RvQmVNZXJnZWRgIGlzIHRoZSBzYW1lIG1hcCBwYW5lbC5cbiAqIDEuIGlmIGN1cnJlbnQgbWFwIGlzIHNwbGl0LCBidXQgc3BsaXRNYXAgRE9FU05PVCBjb250YWluIG1hcHNcbiAqICAgIDogZG9uJ3QgbWVyZ2UgYW55dGhpbmdcbiAqIDIuIGlmIGN1cnJlbnQgbWFwIGlzIE5PVCBzcGxpdCwgYnV0IHNwbGl0TWFwcyBjb250YWluIG1hcHNcbiAqICAgIDogYWRkIHRvIHNwbGl0TWFwcywgYW5kIGFkZCBjdXJyZW50IGxheWVycyB0byBzcGxpdE1hcHMuXG4gKiAgICAgIFBhbmVscyBhcmUgY3JlYXRlZCBvbmNlIG9uZSBvZiB0aGVtIGNhbiBiZSBtZXJnZWQ6IGl0IGhhcyBubyBsYXllcnMsIG9yIG9uZSBvZiBpdHMgbGF5ZXJzIGV4aXN0c1xuICogMy4gbGF5ZXJzIHRoYXQgZG9uJ3QgZXhpc3QgeWV0XG4gKiAgICA6IHNhdmUgdG8gc3BsaXRNYXBzVG9CZU1lcmdlZCwgaW4gdGhlIHBhbmVsIGF0IHRoZSBzYW1lIGluZGV4XG4gKiBBIGxheWVyIGxpc3RlZCBpbiBzcGxpdE1hcHMgb25seSBzaG93cyBpbiB0aGUgcGFuZWxzIHRoYXQgbGlzdCBpdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlU3BsaXRNYXBzPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBzcGxpdE1hcHM6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ3NwbGl0TWFwcyddID0gW11cbik6IFMge1xuICBjb25zdCBsYXllckV4aXN0cyA9IChpZDogc3RyaW5nKSA9PiBzdGF0ZS5sYXllcnMuc29tZShsID0+IGwuaWQgPT09IGlkKTtcbiAgY29uc3QgY3JlYXRlUGFuZWxzID1cbiAgICBzdGF0ZS5zcGxpdE1hcHMubGVuZ3RoID4gMCB8fFxuICAgIHNwbGl0TWFwcy5zb21lKHNtID0+IHtcbiAgICAgIGNvbnN0IGlkcyA9IE9iamVjdC5rZXlzKHNtLmxheWVycyk7XG4gICAgICByZXR1cm4gIWlkcy5sZW5ndGggfHwgaWRzLnNvbWUobGF5ZXJFeGlzdHMpO1xuICAgIH0pO1xuICBjb25zdCBjdXJyZW50TGF5ZXJzID0gZ2V0SW5pdGlhbE1hcExheWVyc0ZvclNwbGl0TWFwKFxuICAgIHN0YXRlLmxheWVycy5maWx0ZXIobCA9PiAhc3BsaXRNYXBzLnNvbWUoc20gPT4gbC5pZCBpbiBzbS5sYXllcnMpKVxuICApO1xuXG4gIGNvbnN0IG1lcmdlZCA9IFsuLi5zdGF0ZS5zcGxpdE1hcHNdO1xuICBjb25zdCB1bm1lcmdlZDogdHlwZW9mIHNwbGl0TWFwcyA9IFtdO1xuICBzcGxpdE1hcHMuZm9yRWFjaCgoc20sIGkpID0+IHtcbiAgICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXMoc20ubGF5ZXJzKTtcbiAgICBpZiAoY3JlYXRlUGFuZWxzKSB7XG4gICAgICAvLyBjcmVhdGUgbWFwIHBhbmVsIGlmIGN1cnJlbnQgbWFwIGlzIG5vdCBzcGxpdCwga2VlcCBpZFxuICAgICAgY29uc3QgcGFuZWwgPSBtZXJnZWRbaV0gfHwgey4uLnNtLCBsYXllcnM6IGN1cnJlbnRMYXllcnN9O1xuICAgICAgbWVyZ2VkW2ldID0ge1xuICAgICAgICAuLi5wYW5lbCxcbiAgICAgICAgbGF5ZXJzOiB7Li4ucGFuZWwubGF5ZXJzLCAuLi5PYmplY3QuZnJvbUVudHJpZXMoZW50cmllcy5maWx0ZXIoKFtpZF0pID0+IGxheWVyRXhpc3RzKGlkKSkpfVxuICAgICAgfTtcbiAgICB9XG4gICAgdW5tZXJnZWRbaV0gPSB7Li4uc20sIGxheWVyczogT2JqZWN0LmZyb21FbnRyaWVzKGVudHJpZXMuZmlsdGVyKChbaWRdKSA9PiAhbGF5ZXJFeGlzdHMoaWQpKSl9O1xuICB9KTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHNwbGl0TWFwczogbWVyZ2VkLFxuICAgIHNwbGl0TWFwc1RvQmVNZXJnZWQ6IHVubWVyZ2VkLnNvbWUoc20gPT4gT2JqZWN0LmtleXMoc20ubGF5ZXJzKS5sZW5ndGgpXG4gICAgICA/IGNvbWJpbmVTcGxpdE1hcHNCeUluZGV4KHN0YXRlLnNwbGl0TWFwc1RvQmVNZXJnZWQsIHVubWVyZ2VkKVxuICAgICAgOiBzdGF0ZS5zcGxpdE1hcHNUb0JlTWVyZ2VkXG4gIH07XG59XG5cbi8qKlxuICogTWVyZ2UgY2hhcnRzIHdpdGggc2F2ZWQgY29uZmlnLiBDaGFydHMgd2hvc2UgZGF0YXNldCBpcyBub3QgbG9hZGVkIHlldCBhcmVcbiAqIHBhcmtlZCBvbiBgY2hhcnRzVG9CZU1lcmdlZGAgKHNhbWUgYXMgZmlsdGVycykgc28gZGF0YXNldCByZXBsYWNlIGNhbiByZW1hcFxuICogYGRhdGFJZGAgYW5kIHJlc3RvcmUgdGhlbSBhZnRlciB0aGUgbmV3IHRhYmxlIGxhbmRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VDaGFydHM8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGNoYXJ0czogQ2hhcnRDb25maWdbXSB8IHVuZGVmaW5lZCxcbiAgZnJvbUNvbmZpZz86IGJvb2xlYW5cbik6IFMge1xuICBpZiAoIUFycmF5LmlzQXJyYXkoY2hhcnRzKSB8fCAhY2hhcnRzLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBpbmNvbWluZ0lkcyA9IG5ldyBTZXQoXG4gICAgY2hhcnRzLm1hcChjaGFydCA9PiBjaGFydD8uaWQpLmZpbHRlcigoaWQpOiBpZCBpcyBzdHJpbmcgPT4gQm9vbGVhbihpZCkpXG4gICk7XG4gIGNvbnN0IGV4aXN0aW5nSWRzID0gbmV3IFNldCgoc3RhdGUuY2hhcnRzIHx8IFtdKS5tYXAoY2hhcnQgPT4gY2hhcnQuaWQpKTtcbiAgY29uc3QgbmV4dENoYXJ0czogQ2hhcnRDb25maWdbXSA9IFtdO1xuICBjb25zdCBmYWlsZWQ6IENoYXJ0Q29uZmlnW10gPSBbXTtcbiAgY2hhcnRzLmZvckVhY2goY2hhcnQgPT4ge1xuICAgIGlmICghY2hhcnQgfHwgIWNoYXJ0LmlkIHx8IGV4aXN0aW5nSWRzLmhhcyhjaGFydC5pZCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgbm9ybWFsaXplZDogQ2hhcnRDb25maWcgPSBmcm9tQ29uZmlnXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5jaGFydCxcbiAgICAgICAgICAvLyBPbGRlciBjb25maWdzIG9taXQgYHBpbm5lZGA7IGtlZXAgY2hhcnRzIHZpc2libGUgbGlrZSB0aGUgbGVnZW5kLlxuICAgICAgICAgIHBpbm5lZDogY2hhcnQucGlubmVkICE9PSBmYWxzZSxcbiAgICAgICAgICBkaXNwbGF5OiB7XG4gICAgICAgICAgICAuLi5jaGFydC5kaXNwbGF5LFxuICAgICAgICAgICAgaXNDb25maWdBY3RpdmU6IGZhbHNlLFxuICAgICAgICAgICAgaXNKc29uRWRpdG9yQWN0aXZlOiBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgOiBjaGFydDtcbiAgICBpZiAoXG4gICAgICBub3JtYWxpemVkLmRhdGFJZCAmJlxuICAgICAgKCFzdGF0ZS5kYXRhc2V0c1tub3JtYWxpemVkLmRhdGFJZF0gfHwgc3RhdGUuaXNNZXJnaW5nRGF0YXNldHNbbm9ybWFsaXplZC5kYXRhSWRdKVxuICAgICkge1xuICAgICAgZmFpbGVkLnB1c2gobm9ybWFsaXplZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGV4aXN0aW5nSWRzLmFkZChub3JtYWxpemVkLmlkKTtcbiAgICBuZXh0Q2hhcnRzLnB1c2gobm9ybWFsaXplZCk7XG4gIH0pO1xuICBpZiAoIW5leHRDaGFydHMubGVuZ3RoICYmICFmYWlsZWQubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgY2hhcnRzOiBuZXh0Q2hhcnRzLmxlbmd0aCA/IFsuLi4oc3RhdGUuY2hhcnRzIHx8IFtdKSwgLi4ubmV4dENoYXJ0c10gOiBzdGF0ZS5jaGFydHMsXG4gICAgY2hhcnRzVG9CZU1lcmdlZDogW1xuICAgICAgLi4uKHN0YXRlLmNoYXJ0c1RvQmVNZXJnZWQgfHwgW10pLmZpbHRlcihjaGFydCA9PiAhaW5jb21pbmdJZHMuaGFzKGNoYXJ0LmlkKSksXG4gICAgICAuLi5mYWlsZWRcbiAgICBdXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlQ2hhcnREYXRhc2V0SWRzKFxuICBzYXZlZENoYXJ0czogQ2hhcnRDb25maWdbXSB8IHVuZGVmaW5lZCxcbiAgZGF0YUlkOiBzdHJpbmcsXG4gIGRhdGFJZFRvVXNlOiBzdHJpbmdcbik6IENoYXJ0Q29uZmlnW10gfCBudWxsIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHNhdmVkQ2hhcnRzKSB8fCAhc2F2ZWRDaGFydHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgcmVwbGFjZWQgPSBzYXZlZENoYXJ0c1xuICAgIC5maWx0ZXIoY2hhcnQgPT4gY2hhcnQ/LmRhdGFJZCA9PT0gZGF0YUlkKVxuICAgIC5tYXAoY2hhcnQgPT4gKHsuLi5jaGFydCwgZGF0YUlkOiBkYXRhSWRUb1VzZX0pKTtcbiAgcmV0dXJuIHJlcGxhY2VkLmxlbmd0aCA/IHJlcGxhY2VkIDogbnVsbDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUVmZmVjdHM8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGVmZmVjdHM6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2VmZmVjdHMnXSxcbiAgZnJvbUNvbmZpZz86IGJvb2xlYW5cbik6IFMge1xuICBjb25zdCBuZXdFZmZlY3RzID0gW1xuICAgIC4uLnN0YXRlLmVmZmVjdHMsXG4gICAgLi4uKGVmZmVjdHMgfHwgW10pXG4gICAgICAubWFwKGVmZmVjdCA9PiB7XG4gICAgICAgIHJldHVybiBmcm9tQ29uZmlnXG4gICAgICAgICAgPyBjcmVhdGVFZmZlY3QoXG4gICAgICAgICAgICAgIGRlZXBtZXJnZS5hbGwoW1xuICAgICAgICAgICAgICAgIGVmZmVjdCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAvLyBjb2xsYXBzZSBhbGwgcGFuZWxzIHdoZW4gbG9hZGluZyBlZmZlY3RzXG4gICAgICAgICAgICAgICAgICBpc0NvbmZpZ0FjdGl2ZTogZmFsc2VcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiAoZWZmZWN0IGFzIEVmZmVjdFR5cGUpO1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoZWZmZWN0ID0+IHtcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4oZWZmZWN0ICYmIGVmZmVjdC5pc1ZhbGlkVG9TYXZlKCkpO1xuICAgICAgfSlcbiAgXTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZmZlY3RzOiBuZXdFZmZlY3RzLFxuICAgIGVmZmVjdE9yZGVyOiBuZXdFZmZlY3RzLm1hcChlZmZlY3QgPT4gZWZmZWN0LmlkKVxuICB9O1xufVxuXG4vKipcbiAqIE1lcmdlIGFubm90YXRpb25zIHdpdGggc2F2ZWQgY29uZmlnXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUFubm90YXRpb25zPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFMsIGFubm90YXRpb25zOiBhbnlbXSk6IFMge1xuICBpZiAoIWFubm90YXRpb25zIHx8ICFhbm5vdGF0aW9ucy5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgZXhpc3RpbmdJZHMgPSBuZXcgU2V0KHN0YXRlLmFubm90YXRpb25zLm1hcChhID0+IGEuaWQpKTtcbiAgY29uc3QgdmFsaWRBbm5vdGF0aW9ucyA9IGFubm90YXRpb25zXG4gICAgLmZpbHRlcihcbiAgICAgIGEgPT5cbiAgICAgICAgYSAmJlxuICAgICAgICBhLmlkICYmXG4gICAgICAgICFleGlzdGluZ0lkcy5oYXMoYS5pZCkgJiZcbiAgICAgICAgaXNBbm5vdGF0aW9uS2luZChhLmtpbmQpICYmXG4gICAgICAgIEFycmF5LmlzQXJyYXkoYS5hbmNob3JQb2ludCkgJiZcbiAgICAgICAgKGEuYW5jaG9yUG9pbnQubGVuZ3RoID09PSAyIHx8IGEuYW5jaG9yUG9pbnQubGVuZ3RoID09PSAzKSAmJlxuICAgICAgICBhLmFuY2hvclBvaW50LmV2ZXJ5KHZhbHVlID0+IE51bWJlci5pc0Zpbml0ZSh2YWx1ZSkpXG4gICAgKVxuICAgIC5tYXAoYSA9PiAoe1xuICAgICAgaXNWaXNpYmxlOiB0cnVlLFxuICAgICAgYXV0b1NpemU6IHRydWUsXG4gICAgICBhdXRvU2l6ZVk6IHRydWUsXG4gICAgICBsYWJlbDogJycsXG4gICAgICBsaW5lQ29sb3I6IElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX0NPTE9SLFxuICAgICAgbGluZVdpZHRoOiBJTklUSUFMX0FOTk9UQVRJT05fTElORV9XSURUSCxcbiAgICAgIHRleHRXaWR0aDogMCxcbiAgICAgIHRleHRIZWlnaHQ6IDAsXG4gICAgICAuLi5hXG4gICAgfSkpO1xuICBpZiAoIXZhbGlkQW5ub3RhdGlvbnMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5ub3RhdGlvbnM6IFsuLi5zdGF0ZS5hbm5vdGF0aW9ucywgLi4udmFsaWRBbm5vdGF0aW9uc11cbiAgfTtcbn1cblxuLyoqXG4gKiBNZXJnZSBpbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwIHdpdGggc2F2ZWQgY29uZmlnLFxuICogdmFsaWRhdGUgZmllbGRzVG9TaG93XG4gKlxuICogQHBhcmFtIHN0YXRlXG4gKiBAcGFyYW0gdG9vbHRpcENvbmZpZ1xuICogQHJldHVybiAtIHttZXJnZWRUb29sdGlwOiB7fSwgdW5tZXJnZWRUb29sdGlwOiB7fX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlSW50ZXJhY3Rpb25Ub29sdGlwQ29uZmlnKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHRvb2x0aXBDb25maWc6IFBpY2s8VG9vbHRpcEluZm9bJ2NvbmZpZyddLCAnZmllbGRzVG9TaG93Jz4gfCBudWxsID0gbnVsbFxuKSB7XG4gIGNvbnN0IHVubWVyZ2VkVG9vbHRpcDogVG9vbHRpcEluZm9bJ2NvbmZpZyddWydmaWVsZHNUb1Nob3cnXSA9IHt9O1xuICBjb25zdCBtZXJnZWRUb29sdGlwOiBUb29sdGlwSW5mb1snY29uZmlnJ11bJ2ZpZWxkc1RvU2hvdyddID0ge307XG5cbiAgaWYgKFxuICAgICF0b29sdGlwQ29uZmlnIHx8XG4gICAgIXRvb2x0aXBDb25maWcuZmllbGRzVG9TaG93IHx8XG4gICAgIU9iamVjdC5rZXlzKHRvb2x0aXBDb25maWcuZmllbGRzVG9TaG93KS5sZW5ndGhcbiAgKSB7XG4gICAgcmV0dXJuIHttZXJnZWRUb29sdGlwLCB1bm1lcmdlZFRvb2x0aXB9O1xuICB9XG5cbiAgZm9yIChjb25zdCBkYXRhSWQgaW4gdG9vbHRpcENvbmZpZy5maWVsZHNUb1Nob3cpIHtcbiAgICBpZiAoIXN0YXRlLmRhdGFzZXRzW2RhdGFJZF0gfHwgc3RhdGUuaXNNZXJnaW5nRGF0YXNldHNbZGF0YUlkXSkge1xuICAgICAgLy8gaXMgbm90IHlldCBsb2FkZWRcbiAgICAgIHVubWVyZ2VkVG9vbHRpcFtkYXRhSWRdID0gdG9vbHRpcENvbmZpZy5maWVsZHNUb1Nob3dbZGF0YUlkXTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaWYgZGF0YXNldCBpcyBsb2FkZWRcbiAgICAgIGNvbnN0IGFsbEZpZWxkcyA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF0uZmllbGRzLm1hcChkID0+IGQubmFtZSk7XG4gICAgICBjb25zdCBmb3VuZEZpZWxkc1RvU2hvdyA9IHRvb2x0aXBDb25maWcuZmllbGRzVG9TaG93W2RhdGFJZF0uZmlsdGVyKGZpZWxkID0+XG4gICAgICAgIGFsbEZpZWxkcy5pbmNsdWRlcyhmaWVsZC5uYW1lKVxuICAgICAgKTtcblxuICAgICAgbWVyZ2VkVG9vbHRpcFtkYXRhSWRdID0gZm91bmRGaWVsZHNUb1Nob3c7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHttZXJnZWRUb29sdGlwLCB1bm1lcmdlZFRvb2x0aXB9O1xufVxuLyoqXG4gKiBNZXJnZSBsYXllckJsZW5kaW5nIHdpdGggc2F2ZWRcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUxheWVyQmxlbmRpbmc8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGxheWVyQmxlbmRpbmc6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2xheWVyQmxlbmRpbmcnXVxuKTogUyB7XG4gIGlmIChsYXllckJsZW5kaW5nICYmIExBWUVSX0JMRU5ESU5HU1tsYXllckJsZW5kaW5nXSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGxheWVyQmxlbmRpbmdcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG4vKipcbiAqIENvbWJpbmVzIG11bHRpcGxlIGxheWVyIGJsZW5kaW5nIGNvbmZpZ3MgaW50byBhIHNpbmdsZSBzdHJpbmdcbiAqIGJ5IHJldHVybmluZyB0aGUgb25lIHdpdGggdGhlIGhpZ2hlc3Qgb2NjdXJyZW5jZVxuICovXG5mdW5jdGlvbiBjb21iaW5lTGF5ZXJCbGVuZGluZ0NvbmZpZ3MoY29uZmlnczogc3RyaW5nW10pOiBzdHJpbmcgfCBudWxsIHtcbiAgLy8gcmV0dXJuIHRoZSBtb2RlIG9mIHRoZSBsYXllciBibGVuZGluZyB0eXBlXG4gIHJldHVybiBnZXRWYWx1ZVdpdGhIaWdoZXN0T2NjdXJyZW5jZShjb25maWdzKTtcbn1cblxuLyoqXG4gKiBNZXJnZSBvdmVybGF5QmxlbmRpbmcgd2l0aCBzYXZlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VPdmVybGF5QmxlbmRpbmc8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIG92ZXJsYXlCbGVuZGluZzogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnb3ZlcmxheUJsZW5kaW5nJ11cbik6IFMge1xuICBpZiAob3ZlcmxheUJsZW5kaW5nICYmIE9WRVJMQVlfQkxFTkRJTkdTW292ZXJsYXlCbGVuZGluZ10pIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBvdmVybGF5QmxlbmRpbmdcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG4vKipcbiAqIENvbWJpbmVzIG11bHRpcGxlIG92ZXJsYXkgYmxlbmRpbmcgY29uZmlncyBpbnRvIGEgc2luZ2xlIHN0cmluZ1xuICogYnkgcmV0dXJuaW5nIHRoZSBvbmUgd2l0aCB0aGUgaGlnaGVzdCBvY2N1cnJlbmNlXG4gKiovXG5mdW5jdGlvbiBjb21iaW5lT3ZlcmxheUJsZW5kaW5nQ29uZmlncyhjb25maWdzOiBzdHJpbmdbXSk6IHN0cmluZyB8IG51bGwge1xuICAvLyByZXR1cm4gdGhlIG1vZGUgb2YgdGhlIG92ZXJsYXkgYmxlbmRpbmcgdHlwZVxuICByZXR1cm4gZ2V0VmFsdWVXaXRoSGlnaGVzdE9jY3VycmVuY2UoY29uZmlncyk7XG59XG5cbi8qKlxuICogTWVyZ2UgYW5pbWF0aW9uIGNvbmZpZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VBbmltYXRpb25Db25maWc8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFuaW1hdGlvbjogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnYW5pbWF0aW9uQ29uZmlnJ11cbik6IFMge1xuICBpZiAoYW5pbWF0aW9uICYmIGFuaW1hdGlvbi5jdXJyZW50VGltZSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICAgIC4uLmFuaW1hdGlvbixcbiAgICAgICAgZG9tYWluOiBudWxsXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuZnVuY3Rpb24gY29tYmluZUFuaW1hdGlvbkNvbmZpZ3MoY29uZmlnczogU2F2ZWRBbmltYXRpb25Db25maWdbXSk6IFNhdmVkQW5pbWF0aW9uQ29uZmlnIHtcbiAgLy8gZ2V0IHRoZSBzbWFsbGVzdCB2YWx1ZXMgb2YgY3VycmVudFRpbWUgYW5kIHNwZWVkIGFtb25nIGFsbCBjb25maWdzXG4gIHJldHVybiB7XG4gICAgY3VycmVudFRpbWU6IGFnZ3JlZ2F0ZShjb25maWdzLCBBR0dSRUdBVElPTl9UWVBFUy5taW5pbXVtLCBjID0+IGMuY3VycmVudFRpbWUpID8/IG51bGwsXG4gICAgc3BlZWQ6IGFnZ3JlZ2F0ZShjb25maWdzLCBBR0dSRUdBVElPTl9UWVBFUy5taW5pbXVtLCBjID0+IGMuc3BlZWQpID8/IG51bGwsXG4gICAgLy8gYW5kIHRoZSBtb3N0IGNvbW1vbiB0aW1lIGZvcm1hdCBhbmQgdGltZXpvbmUgYW1vbmcgdGhlIGNvbmZpZ3MgdGhhdCBzZXQgb25lXG4gICAgdGltZUZvcm1hdDogZ2V0VmFsdWVXaXRoSGlnaGVzdE9jY3VycmVuY2UoY29uZmlncy5tYXAoYyA9PiBjLnRpbWVGb3JtYXQpKSxcbiAgICB0aW1lem9uZTogZ2V0VmFsdWVXaXRoSGlnaGVzdE9jY3VycmVuY2UoY29uZmlncy5tYXAoYyA9PiBjLnRpbWV6b25lKSlcbiAgfTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBzYXZlZCBsYXllciBjb2x1bW5zIHdpdGggbmV3IGRhdGEsXG4gKiB1cGRhdGUgZmllbGRJZHggYmFzZWQgb24gbmV3IGZpZWxkc1xuICpcbiAqIEBwYXJhbSBmaWVsZHNcbiAqIEBwYXJhbSBzYXZlZENvbHNcbiAqIEBwYXJhbSBlbXB0eUNvbHNcbiAqIEBwYXJhbSBvcHRpb25zXG4gKiBAcmV0dXJuIC0gdmFsaWRhdGVkIGNvbHVtbnMgb3IgbnVsbFxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVNhdmVkTGF5ZXJDb2x1bW5zKFxuICBmaWVsZHM6IEtlcGxlclRhYmxlWydmaWVsZHMnXSxcbiAgc2F2ZWRDb2xzOiB7XG4gICAgW2tleTogc3RyaW5nXTogc3RyaW5nO1xuICB9ID0ge30sXG4gIGVtcHR5Q29sczogTGF5ZXJDb2x1bW5zLFxuICBvcHRpb25zOiB7dGhyb3dPbkVycm9yPzogYm9vbGVhbn0gPSB7fVxuKSB7XG4gIC8vIFByZXBhcmUgY29sdW1ucyBmb3IgdGhlIHZhbGlkYXRvclxuICBjb25zdCBjb2x1bW5zOiB0eXBlb2YgZW1wdHlDb2xzID0ge307XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGVtcHR5Q29scykpIHtcbiAgICBjb2x1bW5zW2tleV0gPSB7Li4uZW1wdHlDb2xzW2tleV19O1xuXG4gICAgY29uc3Qgc2F2ZWQgPSBzYXZlZENvbHNba2V5XTtcbiAgICBpZiAoc2F2ZWQpIHtcbiAgICAgIGNvbnN0IGZpZWxkSWR4ID0gZmllbGRzLmZpbmRJbmRleCgoe25hbWV9KSA9PiBuYW1lID09PSBzYXZlZCk7XG5cbiAgICAgIGlmIChmaWVsZElkeCA+IC0xKSB7XG4gICAgICAgIC8vIHVwZGF0ZSBmb3VuZCBjb2x1bW5zXG4gICAgICAgIGNvbHVtbnNba2V5XS5maWVsZElkeCA9IGZpZWxkSWR4O1xuICAgICAgICBjb2x1bW5zW2tleV0udmFsdWUgPSBzYXZlZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBmaW5kIGFjdHVhbCBjb2x1bW4gZmllbGRJZHgsIGluIGNhc2UgaXQgaGFzIGNoYW5nZWRcbiAgY29uc3QgYWxsQ29sRm91bmQgPSBPYmplY3Qua2V5cyhjb2x1bW5zKS5ldmVyeShrZXkgPT5cbiAgICB2YWxpZGF0ZUNvbHVtbihjb2x1bW5zW2tleV0sIGNvbHVtbnMsIGZpZWxkcylcbiAgKTtcblxuICBjb25zdCBydiA9IGFsbENvbEZvdW5kID8gY29sdW1ucyA6IG51bGw7XG4gIGlmIChvcHRpb25zLnRocm93T25FcnJvcikge1xuICAgIGNvbnN0IHJlcXVpcmVkQ29sdW1ucyA9IE9iamVjdC5rZXlzKGVtcHR5Q29scykuZmlsdGVyKGsgPT4gIWVtcHR5Q29sc1trXS5vcHRpb25hbCk7XG4gICAgY29uc3QgbWlzc2luZ0NvbHVtbnMgPSByZXF1aXJlZENvbHVtbnMuZmlsdGVyKGsgPT4gIWNvbHVtbnM/LltrXS52YWx1ZSk7XG4gICAgaWYgKG1pc3NpbmdDb2x1bW5zLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBMYXllciBoYXMgbWlzc2luZyBvciBpbnZhbGlkIGNvbHVtbnM6ICR7bWlzc2luZ0NvbHVtbnMuam9pbignLCAnKX1gKTtcbiAgICB9XG4gICAgY29uc3QgY29uZmlnQ29sdW1ucyA9IE9iamVjdC5rZXlzKHNhdmVkQ29scyk7XG4gICAgY29uc3QgaW52YWxpZENvbHVtbnMgPSBjb25maWdDb2x1bW5zLmZpbHRlcihrID0+ICFjb2x1bW5zPy5ba10/LnZhbHVlKTtcbiAgICBpZiAoaW52YWxpZENvbHVtbnMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYExheWVyIGhhcyBpbnZhbGlkIGNvbHVtbnM6ICR7aW52YWxpZENvbHVtbnMuam9pbignLCAnKX1gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcnY7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgbGF5ZXIgY29sdW1uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUNvbHVtbihcbiAgY29sdW1uOiBMYXllckNvbHVtbiAmIHt2YWxpZGF0b3I/OiB0eXBlb2YgdmFsaWRhdGVDb2x1bW59LFxuICBjb2x1bW5zOiBMYXllckNvbHVtbnMsXG4gIGFsbEZpZWxkczogS2VwbGVyVGFibGVbJ2ZpZWxkcyddXG4pOiBib29sZWFuIHtcbiAgaWYgKGNvbHVtbi5vcHRpb25hbCB8fCBjb2x1bW4udmFsdWUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoY29sdW1uLnZhbGlkYXRvcikge1xuICAgIHJldHVybiBjb2x1bW4udmFsaWRhdG9yKGNvbHVtbiwgY29sdW1ucywgYWxsRmllbGRzKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgc2F2ZWQgdGV4dCBsYWJlbCBjb25maWcgd2l0aCBuZXcgZGF0YVxuICogcmVmZXIgdG8gdmlzLXN0YXRlLXNjaGVtYS5qcyBUZXh0TGFiZWxTY2hlbWFWMVxuICpcbiAqIEBwYXJhbSB7QXJyYXk8T2JqZWN0Pn0gZmllbGRzXG4gKiBAcGFyYW0ge09iamVjdH0gc2F2ZWRUZXh0TGFiZWxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcmV0dXJuIHtPYmplY3R9IC0gdmFsaWRhdGVkIHRleHRsYWJlbFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVTYXZlZFRleHRMYWJlbChcbiAgZmllbGRzLFxuICBsYXllclRleHRMYWJlbHM6IGFueVtdLFxuICBzYXZlZFRleHRMYWJlbCxcbiAgb3B0aW9uczoge3Rocm93T25FcnJvcj86IGJvb2xlYW47IGxheWVyVHlwZT86IHN0cmluZyB8IG51bGx9ID0ge31cbik6IGFueVtdIHtcbiAgY29uc3QgbGF5ZXJUZXh0TGFiZWwgPSBsYXllclRleHRMYWJlbHNbMF07XG4gIGNvbnN0IHNhdmVkVGV4dExhYmVscyA9IEFycmF5LmlzQXJyYXkoc2F2ZWRUZXh0TGFiZWwpID8gc2F2ZWRUZXh0TGFiZWwgOiBbc2F2ZWRUZXh0TGFiZWxdO1xuICBjb25zdCBjb3VudExhYmVsTGF5ZXIgPSBCb29sZWFuKFxuICAgIG9wdGlvbnMubGF5ZXJUeXBlICYmIEFHR1JFR0FUSU9OX0NPVU5UX0xBWUVSX1RZUEVTLmhhcyhvcHRpb25zLmxheWVyVHlwZSlcbiAgKTtcblxuICAvLyB2YWxpZGF0ZSBmaWVsZFxuICByZXR1cm4gc2F2ZWRUZXh0TGFiZWxzLm1hcCh0ZXh0TGFiZWwgPT4ge1xuICAgIGxldCBmaWVsZCA9IG51bGw7XG4gICAgaWYgKHRleHRMYWJlbC5maWVsZCkge1xuICAgICAgLy8gQ2x1c3RlciwgaGV4YmluLCBhbmQgZ3JpZCBwZXJzaXN0IGEgc3ludGhldGljIHBvaW50LWNvdW50IGZpZWxkIHRoYXRcbiAgICAgIC8vIGlzIG5vdCBvbmUgb2YgdGhlIGRhdGFzZXQgY29sdW1ucy5cbiAgICAgIGZpZWxkID1cbiAgICAgICAgY291bnRMYWJlbExheWVyICYmIHRleHRMYWJlbC5maWVsZC5uYW1lID09PSBQT0lOVF9DT1VOVF9GSUVMRF9OQU1FXG4gICAgICAgICAgPyBjcmVhdGVQb2ludENvdW50TGFiZWxGaWVsZCgpXG4gICAgICAgICAgOiBmaWVsZHMuZmluZChmZCA9PlxuICAgICAgICAgICAgICBPYmplY3Qua2V5cyh0ZXh0TGFiZWwuZmllbGQpLmV2ZXJ5KGtleSA9PiB0ZXh0TGFiZWwuZmllbGRba2V5XSA9PT0gZmRba2V5XSlcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGZpZWxkID09PSB1bmRlZmluZWQgJiYgb3B0aW9ucy50aHJvd09uRXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTGF5ZXIgaGFzIGludmFsaWQgdGV4dCBsYWJlbCBmaWVsZDogJHtKU09OLnN0cmluZ2lmeSh0ZXh0TGFiZWwuZmllbGQpfWApO1xuICAgIH1cblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhsYXllclRleHRMYWJlbCkucmVkdWNlKFxuICAgICAgKGFjY3UsIGtleSkgPT4gKHtcbiAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgLy8gS2VlcCBleHBsaWNpdCBmYWxzZSAvIDAuIGB8fGAgd291bGQgcmVwbGFjZSBhIHNhdmVkIGNvbGxpc2lvbkVuYWJsZWRcbiAgICAgICAgLy8gb2YgZmFsc2Ugd2l0aCB0aGUgYWdncmVnYXRpb24gZGVmYXVsdCBvZiB0cnVlLlxuICAgICAgICBba2V5XToga2V5ID09PSAnZmllbGQnID8gZmllbGQgOiB0ZXh0TGFiZWxba2V5XSA/PyBsYXllclRleHRMYWJlbFtrZXldXG4gICAgICB9KSxcbiAgICAgIHt9XG4gICAgKTtcbiAgfSk7XG59XG5cbi8qKlxuICogTWFwcyBzYXZlZCBiZWZvcmUgY291bnQgbGFiZWxzIG9taXQgYHRleHRMYWJlbGAuIFRob3NlIGNsdXN0ZXIsIGhleGJpbiwgYW5kXG4gKiBncmlkIGxheWVycyBzdGF5IHVubGFiZWxlZC4gTmV3IGxheWVycyBzdGlsbCBnZXQgdGhlIHBvaW50LWNvdW50IGRlZmF1bHRcbiAqIGZyb20gYGdldERlZmF1bHRMYXllckNvbmZpZ2AuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmYWxsYmFja1RleHRMYWJlbEZvckxvYWRlZExheWVyKFxuICBsYXllclR5cGU6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsXG4gIG5ld0xheWVyVGV4dExhYmVsOiBhbnlbXVxuKTogYW55W10ge1xuICBpZiAobGF5ZXJUeXBlICYmIEFHR1JFR0FUSU9OX0NPVU5UX0xBWUVSX1RZUEVTLmhhcyhsYXllclR5cGUpKSB7XG4gICAgcmV0dXJuIFt7Li4uREVGQVVMVF9URVhUX0xBQkVMfV07XG4gIH1cbiAgcmV0dXJuIG5ld0xheWVyVGV4dExhYmVsO1xufVxuXG4vKipcbiAqIFNhdmVkIHZpc3VhbCBjaGFubmVsIGZpZWxkL3NjYWxlIG1heSBsaXZlIGluIGFueSBvZjpcbiAqIC0gYGNvbmZpZ1trZXldYCBhZnRlciBzY2hlbWEgcGFyc2UgKFZpc3VhbENoYW5uZWxTY2hlbWFWMSBmb2xkcyBjaGFubmVscyBpbnRvIGNvbmZpZylcbiAqIC0gYHZpc3VhbENoYW5uZWxzW2tleV1gIGFzIGEgc2libGluZyBvZiBgY29uZmlnYCAodW5wYXJzZWQgYWRkRGF0YVRvTWFwIHBheWxvYWQpXG4gKiAtIGBjb25maWcudmlzdWFsQ2hhbm5lbHNba2V5XWAgKGNvbW1vbiBtaXN0YWtlIG9mIG5lc3RpbmcgdmlzdWFsQ2hhbm5lbHMgaW5zaWRlIGNvbmZpZylcbiAqXG4gKiBXaXRob3V0IHRoaXMgbG9va3VwLCBwcm9ncmFtbWF0aWMgR2VvSlNPTiBzdHJva2VDb2xvckZpZWxkIG5ldmVyIGJpbmRzIGFuZFxuICogc3Ryb2tlQ29sb3JEb21haW4gc3RheXMgYXQgdGhlIGRlZmF1bHQgYFswLCAxXWAgKGtlcGxlci5nbCAjMzA2MSkuXG4gKi9cbmZ1bmN0aW9uIGdldFNhdmVkVmlzdWFsQ2hhbm5lbFZhbHVlKHNhdmVkTGF5ZXI6IFBhcnNlZExheWVyLCBrZXk6IHN0cmluZyk6IGFueSB7XG4gIGNvbnN0IGNvbmZpZyA9IHNhdmVkTGF5ZXIuY29uZmlnIGFzIFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQ7XG4gIGlmIChjb25maWcgJiYgY29uZmlnW2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBjb25maWdba2V5XTtcbiAgfVxuICBjb25zdCBjaGFubmVscyA9XG4gICAgKHNhdmVkTGF5ZXIgYXMge3Zpc3VhbENoYW5uZWxzPzogUmVjb3JkPHN0cmluZywgYW55Pn0pLnZpc3VhbENoYW5uZWxzIHx8XG4gICAgKGNvbmZpZyAmJiBjb25maWcudmlzdWFsQ2hhbm5lbHMpO1xuICBpZiAoY2hhbm5lbHMgJiYgdHlwZW9mIGNoYW5uZWxzID09PSAnb2JqZWN0JyAmJiBjaGFubmVsc1trZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gY2hhbm5lbHNba2V5XTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHNhdmVkIHZpc3VhbCBjaGFubmVscyBjb25maWcgd2l0aCBuZXcgZGF0YSxcbiAqIHJlZmVyIHRvIHZpcy1zdGF0ZS1zY2hlbWEuanMgVmlzdWFsQ2hhbm5lbFNjaGVtYVYxXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVNhdmVkVmlzdWFsQ2hhbm5lbHMoXG4gIGZpZWxkczogS2VwbGVyVGFibGVbJ2ZpZWxkcyddLFxuICBuZXdMYXllcjogTGF5ZXIsXG4gIHNhdmVkTGF5ZXI6IFBhcnNlZExheWVyLFxuICBvcHRpb25zOiB7dGhyb3dPbkVycm9yPzogYm9vbGVhbn0gPSB7fVxuKTogbnVsbCB8IExheWVyIHtcbiAgT2JqZWN0LnZhbHVlcyhuZXdMYXllci52aXN1YWxDaGFubmVscykuZm9yRWFjaCgoe2ZpZWxkLCBzY2FsZSwga2V5fSkgPT4ge1xuICAgIGNvbnN0IHNhdmVkRmllbGQgPSBnZXRTYXZlZFZpc3VhbENoYW5uZWxWYWx1ZShzYXZlZExheWVyLCBmaWVsZCk7XG4gICAgY29uc3Qgc2F2ZWRTY2FsZSA9IGdldFNhdmVkVmlzdWFsQ2hhbm5lbFZhbHVlKHNhdmVkTGF5ZXIsIHNjYWxlKTtcbiAgICBsZXQgZm91bmRGaWVsZDtcbiAgICBpZiAoc2F2ZWRGaWVsZD8ubmFtZSkge1xuICAgICAgZm91bmRGaWVsZCA9IGZpZWxkcy5maW5kKGZkID0+IGZkLm5hbWUgPT09IHNhdmVkRmllbGQubmFtZSk7XG4gICAgfVxuXG4gICAgY29uc3QgZm91bmRDaGFubmVsID0ge1xuICAgICAgLi4uKGZvdW5kRmllbGQgPyB7W2ZpZWxkXTogZm91bmRGaWVsZH0gOiB7fSksXG4gICAgICAuLi4oc2F2ZWRTY2FsZSA/IHtbc2NhbGVdOiBzYXZlZFNjYWxlfSA6IHt9KVxuICAgIH07XG4gICAgaWYgKE9iamVjdC5rZXlzKGZvdW5kQ2hhbm5lbCkubGVuZ3RoKSB7XG4gICAgICBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyhmb3VuZENoYW5uZWwpO1xuICAgIH1cblxuICAgIG5ld0xheWVyLnZhbGlkYXRlVmlzdWFsQ2hhbm5lbChrZXkpO1xuICAgIGlmIChvcHRpb25zLnRocm93T25FcnJvcikge1xuICAgICAgY29uc3QgZmllbGROYW1lID0gc2F2ZWRGaWVsZD8ubmFtZTtcbiAgICAgIGlmIChmaWVsZE5hbWUgJiYgZmllbGROYW1lICE9PSBuZXdMYXllci5jb25maWdbZmllbGRdPy5uYW1lKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTGF5ZXIgaGFzIGludmFsaWQgdmlzdWFsIGNoYW5uZWwgZmllbGQ6ICR7ZmllbGR9YCk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG5ld0xheWVyO1xufVxuXG50eXBlIFZhbGlkYXRlTGF5ZXJPcHRpb24gPSB7XG4gIGFsbG93RW1wdHlDb2x1bW4/OiBib29sZWFuO1xuICB0aHJvd09uRXJyb3I/OiBib29sZWFuO1xuICAvLyBTYXZlZCBtYXBzIHRoYXQgb21pdCB0ZXh0TGFiZWwgcHJlZGF0ZSBjb3VudCBsYWJlbHMgYW5kIHN0YXkgdW5sYWJlbGVkLlxuICAvLyBBIG5ldyBsYXllciBjb25maWcgb21pdHMgaXQgdG9vLCBhbmQgc2hvdWxkIGtlZXAgdGhlIGxheWVyIGRlZmF1bHQuXG4gIGtlZXBVbmxhYmVsZWRBZ2dyZWdhdGlvblRleHRMYWJlbD86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVMYXllcnNCeURhdGFzZXRzKFxuICBkYXRhc2V0czogRGF0YXNldHMsXG4gIGxheWVyQ2xhc3NlczogVmlzU3RhdGVbJ2xheWVyQ2xhc3NlcyddLFxuICBsYXllcnM6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2xheWVycyddID0gW10sXG4gIG9wdGlvbnM/OiBWYWxpZGF0ZUxheWVyT3B0aW9uXG4pIHtcbiAgY29uc3QgdmFsaWRhdGVkOiBMYXllcltdID0gW107XG4gIGNvbnN0IGZhaWxlZDogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnbGF5ZXJzJ10gPSBbXTtcblxuICBsYXllcnMuZm9yRWFjaChsYXllciA9PiB7XG4gICAgbGV0IHZhbGlkYXRlTGF5ZXI6IExheWVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICBpZiAobGF5ZXI/LmNvbmZpZz8uZGF0YUlkKSB7XG4gICAgICBpZiAoZGF0YXNldHNbbGF5ZXIuY29uZmlnLmRhdGFJZF0pIHtcbiAgICAgICAgLy8gZGF0YXNldHMgYXJlIGFscmVhZHkgbG9hZGVkXG4gICAgICAgIHZhbGlkYXRlTGF5ZXIgPSB2YWxpZGF0ZUxheWVyV2l0aERhdGEoXG4gICAgICAgICAgZGF0YXNldHNbbGF5ZXIuY29uZmlnLmRhdGFJZF0sXG4gICAgICAgICAgbGF5ZXIsXG4gICAgICAgICAgbGF5ZXJDbGFzc2VzLFxuICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVMYXllcikge1xuICAgICAgdmFsaWRhdGVkLnB1c2godmFsaWRhdGVMYXllcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGRhdGFzZXRzIG5vdCB5ZXQgbG9hZGVkXG4gICAgICBmYWlsZWQucHVzaChsYXllcik7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4ge3ZhbGlkYXRlZCwgZmFpbGVkfTtcbn1cblxuLyoqXG4gKiBHZXQgcmVxdWlyZWQgY29sdW1ucyBmb3IgdmFsaWRhdGlvbiBiYXNlZCBvbiBjb2x1bW4gbW9kZVxuICovXG5mdW5jdGlvbiBfZ2V0Q29sdW1uQ29uZmlnRm9yVmFsaWRhdGlvbihuZXdMYXllcikge1xuICAvLyBmaW5kIGNvbHVtbiBmaWVsZElkeFxuICBsZXQgY29sdW1uQ29uZmlnID0gbmV3TGF5ZXIuZ2V0TGF5ZXJDb2x1bW5zKCk7XG4gIC8vIGlmIGNvbHVtbk1vZGUgaXMgZGVmaW5lZCwgZmluZCBjb2x1bW4gbW9kZSBjb25maWdcbiAgY29uc3QgY29sTW9kZUNvbmZpZyA9IG5ld0xheWVyLmNvbmZpZy5jb2x1bW5Nb2RlXG4gICAgPyAobmV3TGF5ZXIuc3VwcG9ydGVkQ29sdW1uTW9kZXMgfHwgW10pLmZpbmQoXG4gICAgICAgIGNvbE1vZGUgPT4gY29sTW9kZS5rZXkgPT09IG5ld0xheWVyLmNvbmZpZy5jb2x1bW5Nb2RlXG4gICAgICApXG4gICAgOiBudWxsO1xuXG4gIGlmIChjb2xNb2RlQ29uZmlnKSB7XG4gICAgLy8gb25seSB2YWxpZGF0ZSBjb2x1bW5zIGluIGNvbHVtbiBtb2RlIChpbmNsdWRpbmcgdGFiYmVkIGNvbHVtbkdyb3VwcylcbiAgICBjb25zdCBncm91cENvbHVtbnMgPSAoY29sTW9kZUNvbmZpZy5jb2x1bW5Hcm91cHMgfHwgW10pLmZsYXRNYXAoZ3JvdXAgPT4gZ3JvdXAuY29sdW1ucyB8fCBbXSk7XG4gICAgY29uc3QgcmVxdWlyZWRLZXlzID0gbmV3IFNldChjb2xNb2RlQ29uZmlnLnJlcXVpcmVkQ29sdW1ucyB8fCBbXSk7XG4gICAgY29sdW1uQ29uZmlnID0gW1xuICAgICAgLi4uKGNvbE1vZGVDb25maWcucmVxdWlyZWRDb2x1bW5zIHx8IFtdKSxcbiAgICAgIC4uLihjb2xNb2RlQ29uZmlnLm9wdGlvbmFsQ29sdW1ucyB8fCBbXSksXG4gICAgICAuLi5ncm91cENvbHVtbnNcbiAgICBdLnJlZHVjZSgoYWNjdSwga2V5KSA9PiB7XG4gICAgICBjb25zdCBjb2wgPSBjb2x1bW5Db25maWdba2V5XTtcbiAgICAgIGlmICghY29sKSB7XG4gICAgICAgIHJldHVybiBhY2N1O1xuICAgICAgfVxuICAgICAgLy8gT3B0aW9uYWxpdHkgbXVzdCBmb2xsb3cgdGhlIGFjdGl2ZSBtb2RlOiBhIGZpZWxkIG9wdGlvbmFsIGluIGFub3RoZXIgbW9kZVxuICAgICAgLy8gKGUuZy4gYWx0aXR1ZGUgaW4gVVYpIGlzIHN0aWxsIHJlcXVpcmVkIHdoZW4gdGhpcyBtb2RlIGxpc3RzIGl0IGluIHJlcXVpcmVkQ29sdW1ucy5cbiAgICAgIGlmIChyZXF1aXJlZEtleXMuaGFzKGtleSkpIHtcbiAgICAgICAgY29uc3Qge29wdGlvbmFsOiBfb3B0aW9uYWwsIC4uLnJlcXVpcmVkQ29sfSA9IGNvbDtcbiAgICAgICAgcmV0dXJuIHsuLi5hY2N1LCBba2V5XTogcmVxdWlyZWRDb2x9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsuLi5hY2N1LCBba2V5XTogey4uLmNvbCwgb3B0aW9uYWw6IHRydWV9fTtcbiAgICB9LCB7fSk7XG4gIH1cblxuICByZXR1cm4gY29sdW1uQ29uZmlnO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHNhdmVkIGxheWVyIGNvbmZpZyB3aXRoIG5ldyBkYXRhLFxuICogdXBkYXRlIGZpZWxkSWR4IGJhc2VkIG9uIG5ldyBmaWVsZHNcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUxheWVyV2l0aERhdGEoXG4gIGRhdGFzZXQ6IEtlcGxlclRhYmxlLFxuICBzYXZlZExheWVyOiBQYXJzZWRMYXllcixcbiAgbGF5ZXJDbGFzc2VzOiBWaXNTdGF0ZVsnbGF5ZXJDbGFzc2VzJ10sXG4gIG9wdGlvbnM6IFZhbGlkYXRlTGF5ZXJPcHRpb24gPSB7fVxuKTogTGF5ZXIgfCBudWxsIHtcbiAgY29uc3Qge2ZpZWxkcywgaWQ6IGRhdGFJZH0gPSBkYXRhc2V0O1xuICBjb25zdCB7dHlwZX0gPSBzYXZlZExheWVyO1xuICBjb25zdCB7dGhyb3dPbkVycm9yfSA9IG9wdGlvbnM7XG4gIC8vIGxheWVyIGRvZXNudCBoYXZlIGEgdmFsaWQgdHlwZVxuICBpZiAoIXR5cGUgfHwgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChsYXllckNsYXNzZXMsIHR5cGUpIHx8ICFzYXZlZExheWVyLmNvbmZpZykge1xuICAgIGlmICh0aHJvd09uRXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTGF5ZXIgaGFzIGludmFsaWQgdHlwZSBcIiR7dHlwZX1cIiBvciBjb25maWcgaXMgbWlzc2luZ2ApO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGxldCBuZXdMYXllciA9IG5ldyBsYXllckNsYXNzZXNbdHlwZV0oe1xuICAgIGlkOiBzYXZlZExheWVyLmlkLFxuICAgIGRhdGFJZCxcbiAgICBsYWJlbDogc2F2ZWRMYXllci5jb25maWcubGFiZWwsXG4gICAgY29sb3I6IHNhdmVkTGF5ZXIuY29uZmlnLmNvbG9yLFxuICAgIGlzVmlzaWJsZTogc2F2ZWRMYXllci5jb25maWcuaXNWaXNpYmxlLFxuICAgIGhpZGRlbjogc2F2ZWRMYXllci5jb25maWcuaGlkZGVuLFxuICAgIGlzSW5jbHVkZWRJbkxlZ2VuZDogc2F2ZWRMYXllci5jb25maWcuaXNJbmNsdWRlZEluTGVnZW5kLFxuICAgIGNvbHVtbk1vZGU6IHNhdmVkTGF5ZXIuY29uZmlnLmNvbHVtbk1vZGUsXG4gICAgaGlnaGxpZ2h0Q29sb3I6IHNhdmVkTGF5ZXIuY29uZmlnLmhpZ2hsaWdodENvbG9yXG4gIH0pO1xuXG4gIGNvbnN0IGNvbHVtbkNvbmZpZyA9IF9nZXRDb2x1bW5Db25maWdGb3JWYWxpZGF0aW9uKG5ld0xheWVyKTtcblxuICBpZiAoT2JqZWN0LmtleXMoY29sdW1uQ29uZmlnKSkge1xuICAgIGNvbnN0IGNvbHVtbnMgPSB2YWxpZGF0ZVNhdmVkTGF5ZXJDb2x1bW5zKFxuICAgICAgZmllbGRzLFxuICAgICAgc2F2ZWRMYXllci5jb25maWcuY29sdW1ucyxcbiAgICAgIGNvbHVtbkNvbmZpZyxcbiAgICAgIG9wdGlvbnNcbiAgICApO1xuICAgIGlmIChjb2x1bW5zKSB7XG4gICAgICBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgIGNvbHVtbnM6IHtcbiAgICAgICAgICAuLi5uZXdMYXllci5jb25maWcuY29sdW1ucyxcbiAgICAgICAgICAuLi5jb2x1bW5zXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoIW9wdGlvbnMuYWxsb3dFbXB0eUNvbHVtbikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgdGV4dExhYmVsID1cbiAgICBzYXZlZExheWVyLmNvbmZpZy50ZXh0TGFiZWwgJiYgbmV3TGF5ZXIuY29uZmlnLnRleHRMYWJlbFxuICAgICAgPyB2YWxpZGF0ZVNhdmVkVGV4dExhYmVsKGZpZWxkcywgbmV3TGF5ZXIuY29uZmlnLnRleHRMYWJlbCwgc2F2ZWRMYXllci5jb25maWcudGV4dExhYmVsLCB7XG4gICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICBsYXllclR5cGU6IHNhdmVkTGF5ZXIudHlwZVxuICAgICAgICB9KVxuICAgICAgOiBvcHRpb25zLmtlZXBVbmxhYmVsZWRBZ2dyZWdhdGlvblRleHRMYWJlbFxuICAgICAgPyBmYWxsYmFja1RleHRMYWJlbEZvckxvYWRlZExheWVyKHNhdmVkTGF5ZXIudHlwZSwgbmV3TGF5ZXIuY29uZmlnLnRleHRMYWJlbClcbiAgICAgIDogbmV3TGF5ZXIuY29uZmlnLnRleHRMYWJlbDtcblxuICAvLyBjb3B5IHZpc0NvbmZpZyBvdmVyIHRvIGVtcHR5TGF5ZXIgdG8gbWFrZSBzdXJlIGl0IGhhcyBhbGwgdGhlIHByb3BzXG4gIGNvbnN0IHNhdmVkVmlzQ29uZmlnID1cbiAgICBzYXZlZExheWVyLnR5cGUgPT09ICczRCdcbiAgICAgID8gbWlncmF0ZUxlZ2FjeVNjZW5lZ3JhcGhWaXNDb25maWcoc2F2ZWRMYXllci5jb25maWcudmlzQ29uZmlnKVxuICAgICAgOiBzYXZlZExheWVyLmNvbmZpZy52aXNDb25maWc7XG4gIGNvbnN0IGNvcGllZFZpc0NvbmZpZyA9IG5ld0xheWVyLmNvcHlMYXllckNvbmZpZyhcbiAgICBuZXdMYXllci5jb25maWcudmlzQ29uZmlnLFxuICAgIHNhdmVkVmlzQ29uZmlnIHx8IHt9LFxuICAgIHtcbiAgICAgIHNoYWxsb3dDb3B5OiBbJ2NvbG9yUmFuZ2UnLCAnc3Ryb2tlQ29sb3JSYW5nZSddXG4gICAgfVxuICApO1xuXG4gIC8vIGNhbGwgbGF5ZXIgbWV0aG9kcyB0byB2YWxpZGF0ZSB2aXNDb25maWcgd2hlbiBzd2l0Y2hpbmcgZGF0YXNldFxuICBjb25zdCB2aXNDb25maWcgPSBuZXdMYXllci52YWxpZGF0ZVZpc0NvbmZpZ1xuICAgID8gbmV3TGF5ZXIudmFsaWRhdGVWaXNDb25maWcoZGF0YXNldCwgY29waWVkVmlzQ29uZmlnKVxuICAgIDogY29waWVkVmlzQ29uZmlnO1xuXG4gIG5ld0xheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICB2aXNDb25maWcsXG4gICAgdGV4dExhYmVsXG4gIH0pO1xuXG4gIC8vIHZpc3VhbCBjaGFubmVsIGZpZWxkIGlzIHNhdmVkIHRvIGJlIHtuYW1lLCB0eXBlfVxuICAvLyBmaW5kIHZpc3VhbCBjaGFubmVsIGZpZWxkIGJ5IG1hdGNoaW5nIGJvdGggbmFtZSBhbmQgdHlwZVxuICAvLyByZWZlciB0byB2aXMtc3RhdGUtc2NoZW1hLmpzIFZpc3VhbENoYW5uZWxTY2hlbWFWMVxuICBuZXdMYXllciA9IHZhbGlkYXRlU2F2ZWRWaXN1YWxDaGFubmVscyhmaWVsZHMsIG5ld0xheWVyLCBzYXZlZExheWVyLCBvcHRpb25zKTtcblxuICBpZiAodGhyb3dPbkVycm9yKSB7XG4gICAgaWYgKCFuZXdMYXllci5pc1ZhbGlkVG9TYXZlKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTGF5ZXIgaXMgbm90IHZhbGlkIHRvIHNhdmU6ICR7bmV3TGF5ZXIuaWR9YCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld0xheWVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VFZGl0b3I8UyBleHRlbmRzIFZpc1N0YXRlPihzdGF0ZTogUywgc2F2ZWRFZGl0b3I6IFNhdmVkRWRpdG9yKSB7XG4gIGlmICghc2F2ZWRFZGl0b3IpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIGZlYXR1cmVzOiBbLi4uc3RhdGUuZWRpdG9yLmZlYXR1cmVzLCAuLi4oc2F2ZWRFZGl0b3IuZmVhdHVyZXMgfHwgW10pXSxcbiAgICAgIC8vIGlmIHNhdmVkRWRpdG9yLnZpc2libGUgaXMgdW5kZWZpbmVkIGtlZXAgc3RhdGUuZWRpdG9yLnZpc2libGVcbiAgICAgIHZpc2libGU6IHNhdmVkRWRpdG9yLnZpc2libGUgPz8gc3RhdGUuZWRpdG9yLnZpc2libGVcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbWJpbmVFZGl0b3JDb25maWdzKGNvbmZpZ3M6IFNhdmVkRWRpdG9yW10pOiBTYXZlZEVkaXRvciB7XG4gIHJldHVybiBjb25maWdzLnJlZHVjZShcbiAgICAoYWNjLCBuZXh0Q29uZmlnKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5hY2MsXG4gICAgICAgIGZlYXR1cmVzOiBbLi4uYWNjLmZlYXR1cmVzLCAuLi4obmV4dENvbmZpZy5mZWF0dXJlcyB8fCBbXSldXG4gICAgICB9O1xuICAgIH0sXG4gICAge1xuICAgICAgLy8gc3RhcnQgd2l0aDpcbiAgICAgIC8vIC0gZW1wdHkgYXJyYXkgZm9yIGZlYXR1cmVzIGFjY3VtdWxhdGlvblxuICAgICAgLy8gLSBhbmQgYXJlIGFueSBvZiB0aGUgY29uZmlncycgdmlzaWJsZSB2YWx1ZXMgdHJ1ZT9cbiAgICAgIGZlYXR1cmVzOiBbXSxcbiAgICAgIHZpc2libGU6IGNvbmZpZ3Muc29tZShjID0+IGM/LnZpc2libGUpXG4gICAgfVxuICApO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHNhdmVkIGxheWVyIGNvbmZpZyB3aXRoIG5ldyBkYXRhLFxuICogdXBkYXRlIGZpZWxkSWR4IGJhc2VkIG9uIG5ldyBmaWVsZHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlRGF0YXNldHNCeU9yZGVyKHN0YXRlOiBWaXNTdGF0ZSwgbmV3RGF0YUVudHJpZXM6IERhdGFzZXRzKTogRGF0YXNldHMge1xuICBjb25zdCBtZXJnZWQgPSB7XG4gICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgLi4ubmV3RGF0YUVudHJpZXNcbiAgfTtcblxuICBpZiAoQXJyYXkuaXNBcnJheShzdGF0ZS5wcmVzZXJ2ZURhdGFzZXRPcmRlcikpIHtcbiAgICAvLyBwcmVzZXJ2ZURhdGFzZXRPcmRlciAgbWlnaHQgbm90IGluY2x1ZGUgdGhlICBuZXcgZGF0YXNldHNcbiAgICBjb25zdCBuZXdEYXRhc2V0SWRzID0gT2JqZWN0LmtleXMobWVyZ2VkKS5maWx0ZXIoXG4gICAgICBpZCA9PiAhc3RhdGUucHJlc2VydmVEYXRhc2V0T3JkZXI/LmluY2x1ZGVzKGlkKVxuICAgICk7XG4gICAgcmV0dXJuIFsuLi5zdGF0ZS5wcmVzZXJ2ZURhdGFzZXRPcmRlciwgLi4ubmV3RGF0YXNldElkc10ucmVkdWNlKFxuICAgICAgKGFjY3UsIGRhdGFJZCkgPT4gKHtcbiAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgLi4uKG1lcmdlZFtkYXRhSWRdID8ge1tkYXRhSWRdOiBtZXJnZWRbZGF0YUlkXX0gOiB7fSlcbiAgICAgIH0pLFxuICAgICAge31cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIG1lcmdlZDtcbn1cblxuLyoqXG4gKiBTaW1saWFyIHB1cnBvc2UgdG8gYWdncmVnYXRpb24gdXRpbHMgYGdldE1vZGVgIGZ1bmN0aW9uLFxuICogYnV0IHJldHVybnMgdGhlIG1vZGUgaW4gdGhlIHNhbWUgdmFsdWUgdHlwZSB3aXRob3V0IGNvZXJjaW5nIHRvIGEgc3RyaW5nLlxuICogSXQgaWdub3JlcyBgdW5kZWZpbmVkYCBvciBgbnVsbGAgdmFsdWVzLCBidXQgcmV0dXJucyBgbnVsbGAgaWYgbm8gbW9kZSBjb3VsZCBiZSBjYWxjdWxhdGVkLlxuICovXG5mdW5jdGlvbiBnZXRWYWx1ZVdpdGhIaWdoZXN0T2NjdXJyZW5jZTxUPihhcnI6IFRbXSk6IFQgfCBudWxsIHtcbiAgY29uc3QgdGFsbHlzID0gbmV3IE1hcCgpO1xuICBhcnIuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgaWYgKG5vdE51bGxvclVuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgIGlmICghdGFsbHlzLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgdGFsbHlzLnNldCh2YWx1ZSwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YWxseXMuc2V0KHZhbHVlLCB0YWxseXMuZ2V0KHZhbHVlKSArIDEpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIC8vIHJldHVybiB0aGUgdmFsdWUgd2l0aCB0aGUgaGlnaGVzdCB0b3RhbCBvY2N1cnJlbmNlIGNvdW50XG4gIGlmICh0YWxseXMuc2l6ZSA9PT0gMCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBbLi4udGFsbHlzLmVudHJpZXMoKV0/LnJlZHVjZSgoYWNjLCBuZXh0KSA9PiAobmV4dFsxXSA+IGFjY1sxXSA/IG5leHQgOiBhY2MpKVswXTtcbn1cblxuZXhwb3J0IGNvbnN0IFZJU19TVEFURV9NRVJHRVJTOiBWaXNTdGF0ZU1lcmdlcnM8YW55PiA9IFtcbiAge1xuICAgIG1lcmdlOiBtZXJnZUxheWVycyxcbiAgICBwcm9wOiAnbGF5ZXJzJyxcbiAgICB0b01lcmdlUHJvcDogJ2xheWVyVG9CZU1lcmdlZCcsXG4gICAgcHJlc2VydmVPcmRlcjogJ3ByZXNlcnZlTGF5ZXJPcmRlcidcbiAgfSxcbiAge1xuICAgIG1lcmdlOiBtZXJnZUxheWVyT3JkZXIsXG4gICAgcHJvcDogJ2xheWVyT3JkZXInXG4gIH0sXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VGaWx0ZXJzLFxuICAgIHByb3A6ICdmaWx0ZXJzJyxcbiAgICB0b01lcmdlUHJvcDogJ2ZpbHRlclRvQmVNZXJnZWQnLFxuICAgIHByZXNlcnZlT3JkZXI6ICdwcmVzZXJ2ZUZpbHRlck9yZGVyJyxcbiAgICByZXBsYWNlUGFyZW50RGF0YXNldElkczogcmVwbGFjZUZpbHRlckRhdGFzZXRJZHNcbiAgfSxcbiAge1xuICAgIG1lcmdlOiBtZXJnZUVmZmVjdHMsXG4gICAgcHJvcDogJ2VmZmVjdHMnXG4gIH0sXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VDaGFydHMsXG4gICAgcHJvcDogJ2NoYXJ0cycsXG4gICAgdG9NZXJnZVByb3A6ICdjaGFydHNUb0JlTWVyZ2VkJyxcbiAgICByZXBsYWNlUGFyZW50RGF0YXNldElkczogcmVwbGFjZUNoYXJ0RGF0YXNldElkc1xuICB9LFxuICB7XG4gICAgbWVyZ2U6IG1lcmdlQW5ub3RhdGlvbnMsXG4gICAgcHJvcDogJ2Fubm90YXRpb25zJyxcbiAgICB0b01lcmdlUHJvcDogJ2Fubm90YXRpb25zVG9CZU1lcmdlZCdcbiAgfSxcbiAge1xuICAgIG1lcmdlOiBtZXJnZUludGVyYWN0aW9ucyxcbiAgICBwcm9wOiAnaW50ZXJhY3Rpb25Db25maWcnLFxuICAgIHRvTWVyZ2VQcm9wOiAnaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkJyxcbiAgICByZXBsYWNlUGFyZW50RGF0YXNldElkczogcmVwbGFjZUludGVyYWN0aW9uRGF0YXNldElkcyxcbiAgICBzYXZlVW5tZXJnZWQ6IHNhdmVkVW5tZXJnZWRJbnRlcmFjdGlvbixcbiAgICBjb21iaW5lQ29uZmlnczogY29tYmluZUludGVyYWN0aW9uQ29uZmlnc1xuICB9LFxuICB7bWVyZ2U6IG1lcmdlTGF5ZXJCbGVuZGluZywgcHJvcDogJ2xheWVyQmxlbmRpbmcnLCBjb21iaW5lQ29uZmlnczogY29tYmluZUxheWVyQmxlbmRpbmdDb25maWdzfSxcbiAge1xuICAgIG1lcmdlOiBtZXJnZU92ZXJsYXlCbGVuZGluZyxcbiAgICBwcm9wOiAnb3ZlcmxheUJsZW5kaW5nJyxcbiAgICBjb21iaW5lQ29uZmlnczogY29tYmluZU92ZXJsYXlCbGVuZGluZ0NvbmZpZ3NcbiAgfSxcbiAge21lcmdlOiBtZXJnZVNwbGl0TWFwcywgcHJvcDogJ3NwbGl0TWFwcycsIHRvTWVyZ2VQcm9wOiAnc3BsaXRNYXBzVG9CZU1lcmdlZCd9LFxuICB7bWVyZ2U6IG1lcmdlQW5pbWF0aW9uQ29uZmlnLCBwcm9wOiAnYW5pbWF0aW9uQ29uZmlnJywgY29tYmluZUNvbmZpZ3M6IGNvbWJpbmVBbmltYXRpb25Db25maWdzfSxcbiAge21lcmdlOiBtZXJnZUVkaXRvciwgcHJvcDogJ2VkaXRvcicsIGNvbWJpbmVDb25maWdzOiBjb21iaW5lRWRpdG9yQ29uZmlnc31cbl07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTs7QUFFQSxPQUFPQSxJQUFJLE1BQU0sd0JBQXdCO0FBQ3pDLE9BQU9DLElBQUksTUFBTSx3QkFBd0I7QUFDekMsT0FBT0MsV0FBVyxNQUFNLCtCQUErQjtBQUN2RCxPQUFPQyxTQUFTLE1BQU0sV0FBVztBQUNqQyxTQUNFQyxXQUFXLEVBQ1hDLHVCQUF1QixFQUN2QkMsOEJBQThCLEVBQzlCQyxzQkFBc0IsRUFDdEJDLDZCQUE2QixFQUM3QkMsUUFBUSxFQUNSQyxTQUFTLEVBQ1RDLGFBQWEsUUFDUixrQkFBa0I7QUFFekIsU0FDRUMsNkJBQTZCLEVBRTdCQywwQkFBMEIsRUFDMUJDLGdDQUFnQyxFQUNoQ0Msc0JBQXNCLFFBQ2pCLG1CQUFtQjtBQUMxQixTQUFRQyxZQUFZLFFBQU8sb0JBQW9CO0FBQy9DLFNBQVFDLGtCQUFrQixRQUFPLHlCQUF5QjtBQUMxRCxTQUNFQyxpQkFBaUIsRUFDakJDLGtCQUFrQixFQUNsQkMsZUFBZSxFQUNmQyxpQkFBaUIsRUFDakJDLGdCQUFnQixFQUNoQkMsNkJBQTZCLEVBQzdCQyw2QkFBNkIsUUFDeEIsc0JBQXNCO0FBQzdCLFNBQVFDLGVBQWUsUUFBdUQsb0JBQW9CO0FBcUJsRyxTQUErQkMsaUJBQWlCLEVBQUVDLGtCQUFrQixRQUFPLGtCQUFrQjtBQUU3RixTQUFRQyx1QkFBdUIsUUFBTyxlQUFlO0FBQ3JELFNBQVFDLDZCQUE2QixRQUFPLHFCQUFxQjs7QUFFakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBU0MsWUFBWUEsQ0FDMUJDLEtBQVEsRUFDUkMsY0FBZ0UsRUFDaEVDLFVBQW9CLEVBQ2pCO0VBQ0gsSUFBTUMsbUJBQW1CLEdBQUdELFVBQVUsR0FDbENELGNBQWMsYUFBZEEsY0FBYyx1QkFBZEEsY0FBYyxDQUFFRyxHQUFHLENBQUMsVUFBQUMsQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQ0MsRUFBRTtFQUFBLEVBQUMsR0FDOUJOLEtBQUssQ0FBQ0csbUJBQW1CO0VBRTdCLElBQUksQ0FBQ0ksS0FBSyxDQUFDQyxPQUFPLENBQUNQLGNBQWMsQ0FBQyxJQUFJLENBQUNBLGNBQWMsQ0FBQ1EsTUFBTSxFQUFFO0lBQzVELE9BQU9ULEtBQUs7RUFDZDtFQUVBLElBQUFVLHFCQUFBLEdBQTZDakMsNkJBQTZCLENBQUN1QixLQUFLLEVBQUVDLGNBQWMsQ0FBQztJQUExRlUsU0FBUyxHQUFBRCxxQkFBQSxDQUFUQyxTQUFTO0lBQUVDLE1BQU0sR0FBQUYscUJBQUEsQ0FBTkUsTUFBTTtJQUFFQyxlQUFlLEdBQUFILHFCQUFBLENBQWZHLGVBQWU7RUFDekMsSUFBSUMsY0FBYyxHQUFHQywrQkFBK0IsQ0FDbERmLEtBQUssQ0FBQ2dCLE9BQU8sRUFDYkwsU0FBUyxFQUNUUixtQkFDRixDQUFDOztFQUVEO0VBQ0FXLGNBQWMsR0FBR2xCLGtCQUFrQixDQUFDa0IsY0FBYyxDQUFDO0VBQ25EQSxjQUFjLEdBQUduQixpQkFBaUIsQ0FBQ21CLGNBQWMsQ0FBQztFQUNsRDtFQUNBLElBQU1HLGdCQUFnQixHQUFHaEQsSUFBSSxDQUFDRSxXQUFXLENBQUN3QyxTQUFTLENBQUNQLEdBQUcsQ0FBQyxVQUFBYyxDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDQyxNQUFNO0VBQUEsRUFBQyxDQUFDLENBQUM7RUFFeEUsSUFBTUMsUUFBUSxHQUFHNUMsc0JBQXNCLENBQ3JDeUMsZ0JBQWdCLEVBQ2hCSixlQUFlLEVBQ2ZDLGNBQWMsRUFDZGQsS0FBSyxDQUFDcUIsTUFDUixDQUFDO0VBRUQsT0FBQUMsYUFBQSxDQUFBQSxhQUFBLEtBQ0t0QixLQUFLO0lBQ1JnQixPQUFPLEVBQUVGLGNBQWM7SUFDdkJTLFFBQVEsRUFBRUgsUUFBUTtJQUNsQmpCLG1CQUFtQixFQUFuQkEsbUJBQW1CO0lBQ25CcUIsZ0JBQWdCLEtBQUFDLE1BQUEsQ0FBQUMsa0JBQUEsQ0FBTTFCLEtBQUssQ0FBQ3dCLGdCQUFnQixHQUFBRSxrQkFBQSxDQUFLZCxNQUFNO0VBQUM7QUFFNUQ7O0FBRUE7QUFDQSxPQUFPLFNBQVNlLHVCQUF1QkEsQ0FDckNDLFdBQXFCLEVBQ3JCVCxNQUFjLEVBQ2RVLFdBQW1CLEVBQ25CO0VBQ0EsSUFBTUMsUUFBa0IsR0FBRyxFQUFFO0VBQzdCRixXQUFXLENBQUNHLE9BQU8sQ0FBQyxVQUFBQyxNQUFNLEVBQUk7SUFDNUIsSUFBSUEsTUFBTSxDQUFDYixNQUFNLENBQUNjLFFBQVEsQ0FBQ2QsTUFBTSxDQUFDLEVBQUU7TUFBQSxJQUFBZSxnQkFBQTtNQUNsQyxJQUFNQyxTQUFTLEdBQUdILE1BQU0sQ0FBQ2IsTUFBTSxDQUFDZixHQUFHLENBQUMsVUFBQWdDLENBQUM7UUFBQSxPQUFLQSxDQUFDLEtBQUtqQixNQUFNLEdBQUdVLFdBQVcsR0FBR08sQ0FBQztNQUFBLENBQUMsQ0FBQztNQUMxRSxJQUFJQyxRQUFRO01BQ1o7TUFDQSxLQUFBSCxnQkFBQSxHQUFJRixNQUFNLENBQUNLLFFBQVEsY0FBQUgsZ0JBQUEsZ0JBQUFBLGdCQUFBLEdBQWZBLGdCQUFBLENBQWlCSSxjQUFjLGNBQUFKLGdCQUFBLGVBQS9CQSxnQkFBQSxDQUFrQ2YsTUFBTSxDQUFDLEVBQUU7UUFBQSxJQUFBb0IsaUJBQUE7UUFDN0M7UUFDQSxJQUFBQyxJQUFBLEdBQW1DLEVBQUFELGlCQUFBLEdBQUFQLE1BQU0sQ0FBQ0ssUUFBUSxjQUFBRSxpQkFBQSx1QkFBZkEsaUJBQUEsQ0FBaUJELGNBQWMsS0FBSSxDQUFDLENBQUM7VUFBdkRHLEtBQUssR0FBQUQsSUFBQSxDQUFkckIsTUFBTTtVQUFhdUIsSUFBSSxHQUFBQyx3QkFBQSxDQUFBSCxJQUFBLEdBQXZCckIsTUFBTSxFQUFBZixHQUFBLENBQUF3QyxjQUFBO1FBQ2RQLFFBQVEsR0FBQWYsYUFBQSxDQUFBQSxhQUFBLEtBQ0hVLE1BQU0sQ0FBQ0ssUUFBUTtVQUNsQkMsY0FBYyxFQUFBaEIsYUFBQSxDQUFBQSxhQUFBLEtBQ1RvQixJQUFJLE9BQUFHLGVBQUEsS0FDTmhCLFdBQVcsRUFBR1ksS0FBSztRQUNyQixFQUNGO01BQ0g7TUFDQVgsUUFBUSxDQUFDZ0IsSUFBSSxDQUFBeEIsYUFBQSxDQUFBQSxhQUFBLEtBQ1JVLE1BQU07UUFDVGIsTUFBTSxFQUFFZ0I7TUFBUyxHQUNiRSxRQUFRLEdBQUc7UUFBQ0EsUUFBUSxFQUFSQTtNQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FDL0IsQ0FBQztJQUNKO0VBQ0YsQ0FBQyxDQUFDO0VBQ0YsT0FBT1AsUUFBUSxDQUFDckIsTUFBTSxHQUFHcUIsUUFBUSxHQUFHLElBQUk7QUFDMUM7QUFFQSxPQUFPLFNBQVNpQixvQkFBb0JBLENBQUNDLFdBQWdCLEVBQVc7RUFDOUQ7RUFDQSxPQUFPQSxXQUFXLGFBQVhBLFdBQVcsdUJBQVhBLFdBQVcsQ0FBRUMsY0FBYztBQUNwQztBQUVBLE9BQU8sU0FBU0MsZ0JBQWdCQSxDQUM5QkMsTUFBMkIsRUFDM0JILFdBQWdCLEVBQ1M7RUFBQSxJQUFBSSxxQkFBQTtFQUN6QjtFQUNBLElBQU1DLFdBQVcsR0FBRztJQUNsQkMsT0FBTyxFQUFFNUQsZUFBZTtJQUN4QjZELE1BQU0sRUFBRTtNQUNOQyxRQUFRLEVBQUU7UUFBQ25DLE1BQU0sRUFBRSxDQUFDMkIsV0FBVyxDQUFDO1FBQUVTLFVBQVUsRUFBRSxDQUFDVCxXQUFXLENBQUMxQyxFQUFFO01BQUM7SUFDaEU7RUFDRixDQUFDO0VBRUQsUUFBQThDLHFCQUFBLEdBQU9ELE1BQU0sQ0FBQ08sZ0JBQWdCLENBQUNMLFdBQVcsQ0FBQyxjQUFBRCxxQkFBQSxnQkFBQUEscUJBQUEsR0FBcENBLHFCQUFBLENBQXNDSSxRQUFRLGNBQUFKLHFCQUFBLGdCQUFBQSxxQkFBQSxHQUE5Q0EscUJBQUEsQ0FBZ0QvQixNQUFNLGNBQUErQixxQkFBQSx1QkFBdERBLHFCQUFBLENBQXlELENBQUMsQ0FBQztBQUNwRTtBQUVBLFNBQVNyQywrQkFBK0JBLENBQ3RDNEMsWUFBc0IsRUFDdEJDLEtBQWUsRUFHZjtFQUFBLElBRkFDLGNBQXFCLEdBQUFDLFNBQUEsQ0FBQXJELE1BQUEsUUFBQXFELFNBQUEsUUFBQUMsU0FBQSxHQUFBRCxTQUFBLE1BQUcsRUFBRTtFQUFBLElBQzFCRSxZQUFzQixHQUFBRixTQUFBLENBQUFyRCxNQUFBLE9BQUFxRCxTQUFBLE1BQUFDLFNBQUE7RUFFdEIsSUFBSUUsUUFBUSxHQUFBdkMsa0JBQUEsQ0FBT2lDLFlBQVksQ0FBQztFQUFDLElBQUFPLFNBQUEsR0FBQUMsMEJBQUEsQ0FFZFAsS0FBSztJQUFBUSxLQUFBO0VBQUE7SUFBeEIsS0FBQUYsU0FBQSxDQUFBRyxDQUFBLE1BQUFELEtBQUEsR0FBQUYsU0FBQSxDQUFBSSxDQUFBLElBQUFDLElBQUEsR0FBMEI7TUFBQSxJQUFmQyxJQUFJLEdBQUFKLEtBQUEsQ0FBQUssS0FBQTtNQUNiLElBQU1DLFdBQVcsR0FBR2IsY0FBYyxDQUFDYyxPQUFPLENBQUNILElBQUksQ0FBQ2xFLEVBQUUsQ0FBQztNQUNuRDtNQUNBLElBQUlzRSxRQUFRLEdBQUdaLFlBQVksR0FBRyxDQUFDLEdBQUdDLFFBQVEsQ0FBQ3hELE1BQU07TUFDakQsSUFBSWlFLFdBQVcsR0FBRyxDQUFDLEVBQUU7UUFDbkI7UUFDQSxJQUFJRyxDQUFDLEdBQUdILFdBQVcsR0FBRyxDQUFDO1FBQ3ZCLElBQUlJLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFBQyxJQUFBQyxLQUFBLFlBQUFBLE1BQUEsRUFDYztVQUNoQztVQUNBLElBQU1DLGFBQWEsR0FBR25CLGNBQWMsQ0FBQ2dCLENBQUMsR0FBRyxDQUFDLENBQUM7VUFDM0NDLFVBQVUsR0FBR2IsUUFBUSxDQUFDZ0IsU0FBUyxDQUFDLFVBQUE3QyxDQUFDO1lBQUEsT0FBSUEsQ0FBQyxDQUFDOUIsRUFBRSxLQUFLMEUsYUFBYTtVQUFBLEVBQUM7UUFDOUQsQ0FBQztRQUpELE9BQU9ILENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSUMsVUFBVSxHQUFHLENBQUM7VUFBQUMsS0FBQTtRQUFBO1FBS2hDLElBQUlELFVBQVUsR0FBRyxDQUFDLENBQUMsRUFBRTtVQUNuQjtVQUNBRixRQUFRLEdBQUdFLFVBQVUsR0FBRyxDQUFDO1FBQzNCO01BQ0Y7TUFDQWIsUUFBUSxHQUFHNUYsV0FBVyxDQUFDNEYsUUFBUSxFQUFFVyxRQUFRLEVBQUVKLElBQUksQ0FBQztJQUNsRDtFQUFDLFNBQUFVLEdBQUE7SUFBQWhCLFNBQUEsQ0FBQWlCLENBQUEsQ0FBQUQsR0FBQTtFQUFBO0lBQUFoQixTQUFBLENBQUFoRCxDQUFBO0VBQUE7RUFDRCxPQUFPK0MsUUFBUTtBQUNqQjtBQUVBLE9BQU8sU0FBU21CLHFCQUFxQkEsQ0FBQ3BGLEtBQWUsRUFBRWdELFdBQWdCLEVBQWdCO0VBQ3JGO0VBQ0EsSUFBTXFDLGdCQUFnQixHQUFHdEMsb0JBQW9CLENBQUNDLFdBQVcsQ0FBQztFQUMxRCxJQUFNc0MsaUJBQWlCLEdBQUdELGdCQUFnQixHQUN0Q25DLGdCQUFnQixDQUFDbEQsS0FBSyxDQUFDbUQsTUFBTSxFQUFFSCxXQUFXLENBQUMsR0FDM0NBLFdBQVc7RUFFZixJQUFJLENBQUNzQyxpQkFBaUIsRUFBRTtJQUN0QixPQUFPLElBQUk7RUFDYjtFQUNBO0VBQ0EsSUFBQUMscUJBQUEsR0FBNEJDLHdCQUF3QixDQUNsRHhGLEtBQUssQ0FBQ3VCLFFBQVEsRUFDZHZCLEtBQUssQ0FBQ3lGLFlBQVksRUFDbEIsQ0FBQ0gsaUJBQWlCLENBQUMsRUFDbkI7TUFBQ0ksZ0JBQWdCLEVBQUUsSUFBSTtNQUFFQyxpQ0FBaUMsRUFBRU47SUFBZ0IsQ0FDOUUsQ0FBQztJQUxNMUUsU0FBUyxHQUFBNEUscUJBQUEsQ0FBVDVFLFNBQVM7SUFBRUMsTUFBTSxHQUFBMkUscUJBQUEsQ0FBTjNFLE1BQU07RUFPeEIsSUFBSUEsTUFBTSxhQUFOQSxNQUFNLGVBQU5BLE1BQU0sQ0FBRUgsTUFBTSxJQUFJLENBQUNFLFNBQVMsQ0FBQ0YsTUFBTSxFQUFFO0lBQ3ZDO0lBQ0EsT0FBTyxJQUFJO0VBQ2I7RUFFQSxJQUFNbUYsUUFBUSxHQUFHakYsU0FBUyxDQUFDLENBQUMsQ0FBQztFQUM3QmlGLFFBQVEsQ0FBQ0MsaUJBQWlCLENBQUM3RixLQUFLLENBQUN1QixRQUFRLENBQUM7RUFDMUMsT0FBT3FFLFFBQVE7QUFDakI7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTRSxlQUFlQSxDQUM3QkMsU0FBaUIsRUFDakI1QyxNQUEyQixFQUNEO0VBQUEsSUFBQTZDLHFCQUFBO0VBQzFCLElBQU1DLGtCQUFrQixHQUFHQyxpQkFBaUIsQ0FBQztJQUFDbEYsT0FBTyxFQUFFLENBQUMrRSxTQUFTO0VBQUMsQ0FBQyxFQUFFNUMsTUFBTSxDQUFDO0VBQzVFLE9BQU84QyxrQkFBa0IsYUFBbEJBLGtCQUFrQixnQkFBQUQscUJBQUEsR0FBbEJDLGtCQUFrQixDQUFFakYsT0FBTyxjQUFBZ0YscUJBQUEsdUJBQTNCQSxxQkFBQSxDQUE4QixDQUFDLENBQUM7QUFDekM7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTRyxjQUFjQSxDQUM1QlAsUUFBZSxFQUNmekMsTUFBMkIsRUFDRjtFQUFBLElBQUFpRCxxQkFBQTtFQUN6QixJQUFNSCxrQkFBa0IsR0FBR0MsaUJBQWlCLENBQzFDO0lBQUM3RSxNQUFNLEVBQUUsQ0FBQ3VFLFFBQVEsQ0FBQztJQUFFbkMsVUFBVSxFQUFFLENBQUNtQyxRQUFRLENBQUN0RixFQUFFO0VBQUMsQ0FBQyxFQUMvQzZDLE1BQ0YsQ0FBQztFQUNELE9BQU84QyxrQkFBa0IsYUFBbEJBLGtCQUFrQixnQkFBQUcscUJBQUEsR0FBbEJILGtCQUFrQixDQUFFNUUsTUFBTSxjQUFBK0UscUJBQUEsdUJBQTFCQSxxQkFBQSxDQUE2QixDQUFDLENBQUM7QUFDeEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTQyxlQUFlQSxDQUM3QkMsU0FBcUIsRUFDckJuRCxNQUEyQixFQUNEO0VBQUEsSUFBQW9ELHFCQUFBO0VBQzFCLElBQU1OLGtCQUFrQixHQUFHQyxpQkFBaUIsQ0FDMUM7SUFBQ00sT0FBTyxFQUFFLENBQUNGLFNBQVMsQ0FBQztJQUFFRyxXQUFXLEVBQUUsQ0FBQ0gsU0FBUyxDQUFDaEcsRUFBRTtFQUFDLENBQUMsRUFDbkQ2QyxNQUNGLENBQUM7RUFDRCxPQUFPOEMsa0JBQWtCLGFBQWxCQSxrQkFBa0IsZ0JBQUFNLHFCQUFBLEdBQWxCTixrQkFBa0IsQ0FBRU8sT0FBTyxjQUFBRCxxQkFBQSx1QkFBM0JBLHFCQUFBLENBQThCLENBQUMsQ0FBQztBQUN6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVNMLGlCQUFpQkEsQ0FDL0IxQyxRQUEyQixFQUMzQkwsTUFBMkIsRUFDQztFQUFBLElBQUF1RCxzQkFBQTtFQUM1QixJQUFNQyxVQUFVLEdBQUd4RCxNQUFNLENBQUN5RCxlQUFlLENBQUM7SUFDeENwRCxRQUFRLEVBQVJBO0VBQ0YsQ0FBQyxDQUFDO0VBQ0YsT0FBT21ELFVBQVUsSUFBQUQsc0JBQUEsR0FBR3ZELE1BQU0sQ0FBQ08sZ0JBQWdCLENBQUNpRCxVQUFVLENBQUMsY0FBQUQsc0JBQUEsdUJBQW5DQSxzQkFBQSxDQUFxQ2xELFFBQVEsR0FBR08sU0FBUztBQUMvRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVM4QyxXQUFXQSxDQUN6QjdHLEtBQVEsRUFHTDtFQUFBLElBRkg4RyxhQUE4RCxHQUFBaEQsU0FBQSxDQUFBckQsTUFBQSxRQUFBcUQsU0FBQSxRQUFBQyxTQUFBLEdBQUFELFNBQUEsTUFBRyxFQUFFO0VBQUEsSUFDbkU1RCxVQUFvQixHQUFBNEQsU0FBQSxDQUFBckQsTUFBQSxPQUFBcUQsU0FBQSxNQUFBQyxTQUFBO0VBRXBCLElBQU1nRCxrQkFBa0IsR0FBRzdHLFVBQVUsR0FDakNMLHVCQUF1QixDQUFDaUgsYUFBYSxDQUFDLEdBQ3RDOUcsS0FBSyxDQUFDK0csa0JBQWtCO0VBQzVCLElBQUksQ0FBQ3hHLEtBQUssQ0FBQ0MsT0FBTyxDQUFDc0csYUFBYSxDQUFDLElBQUksQ0FBQ0EsYUFBYSxDQUFDckcsTUFBTSxFQUFFO0lBQzFELE9BQU9ULEtBQUs7RUFDZDtFQUNBO0VBQ0EsSUFBTWdILFFBQXVCLEdBQUcsRUFBRTtFQUNsQyxJQUFNQyxPQUFzQixHQUFHLEVBQUU7RUFDakNILGFBQWEsQ0FBQy9FLE9BQU8sQ0FBQyxVQUFDMUIsQ0FBYyxFQUFLO0lBQUEsSUFBQTZHLFNBQUE7SUFDeEMsSUFBSTdHLENBQUMsYUFBREEsQ0FBQyxnQkFBQTZHLFNBQUEsR0FBRDdHLENBQUMsQ0FBRWtELE1BQU0sY0FBQTJELFNBQUEsZUFBVEEsU0FBQSxDQUFXL0YsTUFBTSxJQUFJbkIsS0FBSyxDQUFDbUgsaUJBQWlCLENBQUM5RyxDQUFDLENBQUNrRCxNQUFNLENBQUNwQyxNQUFNLENBQUMsRUFBRTtNQUNqRTZGLFFBQVEsQ0FBQ2xFLElBQUksQ0FBQ3pDLENBQUMsQ0FBQztJQUNsQixDQUFDLE1BQU07TUFDTDRHLE9BQU8sQ0FBQ25FLElBQUksQ0FBQ3pDLENBQUMsQ0FBQztJQUNqQjtFQUNGLENBQUMsQ0FBQztFQUVGLElBQUErRyxzQkFBQSxHQUF5QzVCLHdCQUF3QixDQUMvRHhGLEtBQUssQ0FBQ3VCLFFBQVEsRUFDZHZCLEtBQUssQ0FBQ3lGLFlBQVksRUFDbEJ3QixPQUFPLEVBQ1A7TUFBQ3RCLGlDQUFpQyxFQUFFO0lBQUksQ0FDMUMsQ0FBQztJQUxpQjBCLFdBQVcsR0FBQUQsc0JBQUEsQ0FBdEJ6RyxTQUFTO0lBQWVDLE1BQU0sR0FBQXdHLHNCQUFBLENBQU54RyxNQUFNO0VBTXJDb0csUUFBUSxDQUFDbEUsSUFBSSxDQUFBd0UsS0FBQSxDQUFiTixRQUFRLEVBQUF0RixrQkFBQSxDQUFTZCxNQUFNLEVBQUM7RUFDeEI7RUFDQSxJQUFBMkcscUJBQUEsR0FBbUNDLHVCQUF1QixDQUN4RHhILEtBQUssQ0FBQ3FCLE1BQU0sRUFDWmdHLFdBQVcsRUFDWHJILEtBQUssQ0FBQ3lELFVBQVUsRUFDaEJzRCxrQkFDRixDQUFDO0lBTE1VLGFBQWEsR0FBQUYscUJBQUEsQ0FBYkUsYUFBYTtJQUFFQyxTQUFTLEdBQUFILHFCQUFBLENBQVRHLFNBQVM7RUFPL0IsSUFBSUMsV0FBYyxHQUFBckcsYUFBQSxDQUFBQSxhQUFBLEtBQ2J0QixLQUFLO0lBQ1JxQixNQUFNLEVBQUVxRyxTQUFTO0lBQ2pCakUsVUFBVSxFQUFFZ0UsYUFBYTtJQUN6QlYsa0JBQWtCLEVBQWxCQSxrQkFBa0I7SUFDbEJhLGVBQWUsS0FBQW5HLE1BQUEsQ0FBQUMsa0JBQUEsQ0FBTTFCLEtBQUssQ0FBQzRILGVBQWUsR0FBS1osUUFBUTtFQUFDLEVBQ3pEOztFQUVEO0VBQ0EsSUFBSVcsV0FBVyxDQUFDRSxvQkFBb0IsSUFBSUYsV0FBVyxDQUFDdEcsTUFBTSxDQUFDWixNQUFNLEdBQUcsQ0FBQyxFQUFFO0lBQ3JFLElBQU1xSCxVQUFVLEdBQUdILFdBQVcsQ0FBQ0Usb0JBQW9CO0lBQ25ERixXQUFXLEdBQUdJLGVBQWUsQ0FBQ0osV0FBVyxFQUFFRyxVQUFVLENBQUM7SUFDdEQ7SUFDQSxJQUFJSCxXQUFXLENBQUNDLGVBQWUsQ0FBQ25ILE1BQU0sR0FBRyxDQUFDLEVBQUU7TUFDMUNrSCxXQUFXLEdBQUFyRyxhQUFBLENBQUFBLGFBQUEsS0FBT3FHLFdBQVc7UUFBRUUsb0JBQW9CLEVBQUVDO01BQVUsRUFBQztJQUNsRTtFQUNGO0VBRUEsT0FBT0gsV0FBVztBQUNwQjtBQUVBLE9BQU8sU0FBU0gsdUJBQXVCQSxDQUNyQ1EsYUFBYSxFQUNiQyxjQUFjLEVBQ2RDLFlBQVksRUFFWjtFQUFBLElBREFyRSxjQUF3QixHQUFBQyxTQUFBLENBQUFyRCxNQUFBLFFBQUFxRCxTQUFBLFFBQUFDLFNBQUEsR0FBQUQsU0FBQSxNQUFHLEVBQUU7RUFFN0IsSUFBSSxFQUFDbUUsY0FBYyxhQUFkQSxjQUFjLGVBQWRBLGNBQWMsQ0FBRXhILE1BQU0sR0FBRTtJQUMzQixPQUFPO01BQUNpSCxTQUFTLEVBQUVNLGFBQWE7TUFBRVAsYUFBYSxFQUFFUztJQUFZLENBQUM7RUFDaEU7RUFFQSxJQUFNQyxpQkFBaUIsR0FBR0QsWUFBWSxDQUNuQ2xHLE1BQU0sQ0FBQyxVQUFBb0csS0FBSztJQUFBLE9BQUksT0FBT0EsS0FBSyxLQUFLLFFBQVE7RUFBQSxFQUFDLENBQzFDaEksR0FBRyxDQUFDLFVBQUFFLEVBQUU7SUFBQSxPQUFJNUIsUUFBUSxDQUFDNEIsRUFBRSxDQUFDLENBQUMwSCxhQUFhLENBQUM7RUFBQSxFQUFDLENBQ3RDaEcsTUFBTSxDQUFDLFVBQUFxRyxLQUFLO0lBQUEsT0FBSUMsT0FBTyxDQUFDRCxLQUFLLENBQUM7RUFBQSxFQUFDO0VBQ2xDLElBQU1YLFNBQVMsR0FBR00sYUFBYSxDQUFDdkcsTUFBTSxDQUFDd0csY0FBYyxDQUFDO0VBQ3RELElBQU1NLGtCQUFrQixHQUFHeEgsK0JBQStCLENBQ3hEb0gsaUJBQWlCLEVBQ2pCRixjQUFjLEVBQ2RwRSxjQUFjLEVBQ2QsSUFDRixDQUFDO0VBRUQsSUFBTTJFLGlCQUFpQixHQUFHM0ksdUJBQXVCLENBQUMwSSxrQkFBa0IsQ0FBQzs7RUFFckU7RUFDQSxJQUFNRSxTQUFTLEdBQUdQLFlBQVksQ0FBQ1EsSUFBSSxDQUFDLFVBQUFOLEtBQUs7SUFBQSxPQUFJeEosYUFBYSxDQUFDd0osS0FBSyxDQUFDO0VBQUEsRUFBQztFQUNsRSxJQUFJLENBQUNLLFNBQVMsRUFBRTtJQUNkLE9BQU87TUFDTGhCLGFBQWEsRUFBRWUsaUJBQWlCO01BQ2hDZCxTQUFTLEVBQVRBO0lBQ0YsQ0FBQztFQUNIOztFQUVBO0VBQ0E7RUFDQTtFQUNBLElBQU1pQixlQUFlLEdBQUcsSUFBSUMsR0FBRyxDQUM3QlYsWUFBWSxDQUFDbEcsTUFBTSxDQUFDLFVBQUFvRyxLQUFLO0lBQUEsT0FBSSxPQUFPQSxLQUFLLEtBQUssUUFBUTtFQUFBLEVBQ3hELENBQUM7RUFDRCxJQUFNUyxjQUFjLEdBQUdMLGlCQUFpQixDQUFDeEcsTUFBTSxDQUFDLFVBQUExQixFQUFFO0lBQUEsT0FBSSxDQUFDcUksZUFBZSxDQUFDRyxHQUFHLENBQUN4SSxFQUFFLENBQUM7RUFBQSxFQUFDOztFQUUvRTtFQUNBO0VBQ0EsSUFBTXlJLE1BQWtCLEdBQUcsRUFBRTtFQUM3QixJQUFNQyxTQUFTLEdBQUF0SCxrQkFBQSxDQUFPOEcsaUJBQWlCLENBQUN4RyxNQUFNLENBQUMsVUFBQTFCLEVBQUU7SUFBQSxPQUFJcUksZUFBZSxDQUFDRyxHQUFHLENBQUN4SSxFQUFFLENBQUM7RUFBQSxFQUFDLENBQUM7RUFDOUUsSUFBSTJJLE9BQU8sR0FBRyxDQUFDO0VBQUMsSUFBQUMsVUFBQSxHQUFBL0UsMEJBQUEsQ0FFSStELFlBQVk7SUFBQWlCLE1BQUE7RUFBQTtJQUFoQyxLQUFBRCxVQUFBLENBQUE3RSxDQUFBLE1BQUE4RSxNQUFBLEdBQUFELFVBQUEsQ0FBQTVFLENBQUEsSUFBQUMsSUFBQSxHQUFrQztNQUFBLElBQXZCNkQsS0FBSyxHQUFBZSxNQUFBLENBQUExRSxLQUFBO01BQ2QsSUFBSTdGLGFBQWEsQ0FBQ3dKLEtBQUssQ0FBQyxFQUFFO1FBQ3hCVyxNQUFNLENBQUNqRyxJQUFJLENBQUNzRixLQUF3QixDQUFDO01BQ3ZDLENBQUMsTUFBTTtRQUNMO1FBQ0EsSUFBSWEsT0FBTyxHQUFHRCxTQUFTLENBQUN2SSxNQUFNLEVBQUU7VUFDOUJzSSxNQUFNLENBQUNqRyxJQUFJLENBQUNrRyxTQUFTLENBQUNDLE9BQU8sQ0FBQyxDQUFDO1VBQy9CQSxPQUFPLEVBQUU7UUFDWDtNQUNGO0lBQ0Y7O0lBRUE7RUFBQSxTQUFBL0QsR0FBQTtJQUFBZ0UsVUFBQSxDQUFBL0QsQ0FBQSxDQUFBRCxHQUFBO0VBQUE7SUFBQWdFLFVBQUEsQ0FBQWhJLENBQUE7RUFBQTtFQUNBLE9BQU87SUFDTHVHLGFBQWEsS0FBQWhHLE1BQUEsQ0FBQUMsa0JBQUEsQ0FBTW1ILGNBQWMsR0FBS0UsTUFBTSxDQUFDO0lBQzdDckIsU0FBUyxFQUFUQTtFQUNGLENBQUM7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVNLLGVBQWVBLENBQzdCL0gsS0FBUSxFQUNSb0osZUFBdUIsRUFDdkJsSixVQUFvQixFQUNqQjtFQUNILElBQUksQ0FBQ2tKLGVBQWUsSUFBSSxDQUFDN0ksS0FBSyxDQUFDQyxPQUFPLENBQUM0SSxlQUFlLENBQUMsSUFBSUEsZUFBZSxDQUFDM0ksTUFBTSxLQUFLLENBQUMsRUFBRTtJQUN2RixPQUFPVCxLQUFLO0VBQ2Q7O0VBRUE7RUFDQSxJQUFNeUksU0FBUyxHQUFHVyxlQUFlLENBQUNWLElBQUksQ0FBQyxVQUFBTixLQUFLO0lBQUEsT0FBSXhKLGFBQWEsQ0FBQ3dKLEtBQUssQ0FBQztFQUFBLEVBQUM7RUFDckUsSUFBSSxDQUFDSyxTQUFTLEVBQUU7SUFDZDtJQUNBLE9BQU96SSxLQUFLO0VBQ2Q7O0VBRUE7RUFDQSxJQUFJQSxLQUFLLENBQUNxQixNQUFNLENBQUNaLE1BQU0sS0FBSyxDQUFDLEVBQUU7SUFDN0IsT0FBQWEsYUFBQSxDQUFBQSxhQUFBLEtBQ0t0QixLQUFLO01BQ1I2SCxvQkFBb0IsRUFBRXVCO0lBQWU7RUFFekM7O0VBRUE7RUFDQSxJQUFNQyxhQUFhLEdBQUcsSUFBSVQsR0FBRyxDQUFDNUksS0FBSyxDQUFDcUIsTUFBTSxDQUFDakIsR0FBRyxDQUFDLFVBQUFDLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUNDLEVBQUU7RUFBQSxFQUFDLENBQUM7O0VBRTFEO0VBQ0EsU0FBU2dKLGdCQUFnQkEsQ0FBQ0MsS0FBWSxFQUFjO0lBQ2xELElBQU1SLE1BQWtCLEdBQUcsRUFBRTtJQUFDLElBQUFTLFVBQUEsR0FBQXJGLDBCQUFBLENBQ1ZvRixLQUFLO01BQUFFLE1BQUE7SUFBQTtNQUF6QixLQUFBRCxVQUFBLENBQUFuRixDQUFBLE1BQUFvRixNQUFBLEdBQUFELFVBQUEsQ0FBQWxGLENBQUEsSUFBQUMsSUFBQSxHQUEyQjtRQUFBLElBQWhCNkQsS0FBSyxHQUFBcUIsTUFBQSxDQUFBaEYsS0FBQTtRQUNkLElBQUk3RixhQUFhLENBQUN3SixLQUFLLENBQUMsRUFBRTtVQUN4QixJQUFNc0IsS0FBSyxHQUFHdEIsS0FBd0I7VUFDdEMsSUFBTXVCLGtCQUFrQixHQUFHTCxnQkFBZ0IsQ0FBQ0ksS0FBSyxDQUFDakcsVUFBVSxDQUFDO1VBQzdEO1VBQ0FzRixNQUFNLENBQUNqRyxJQUFJLENBQUF4QixhQUFBLENBQUFBLGFBQUEsS0FDTm9JLEtBQUs7WUFDUmpHLFVBQVUsRUFBRWtHO1VBQWtCLEVBQy9CLENBQUM7UUFDSixDQUFDLE1BQU0sSUFBSSxPQUFPdkIsS0FBSyxLQUFLLFFBQVEsSUFBSWlCLGFBQWEsQ0FBQ1AsR0FBRyxDQUFDVixLQUFLLENBQUMsRUFBRTtVQUNoRVcsTUFBTSxDQUFDakcsSUFBSSxDQUFDc0YsS0FBSyxDQUFDO1FBQ3BCO01BQ0Y7SUFBQyxTQUFBbEQsR0FBQTtNQUFBc0UsVUFBQSxDQUFBckUsQ0FBQSxDQUFBRCxHQUFBO0lBQUE7TUFBQXNFLFVBQUEsQ0FBQXRJLENBQUE7SUFBQTtJQUNELE9BQU82SCxNQUFNO0VBQ2Y7RUFFQSxJQUFNYSxrQkFBa0IsR0FBR04sZ0JBQWdCLENBQUNGLGVBQWUsQ0FBQzs7RUFFNUQ7RUFDQTtFQUNBLElBQU1TLGtCQUFrQixHQUFHLElBQUlqQixHQUFHLENBQVMsQ0FBQztFQUM1QyxTQUFTa0IsVUFBVUEsQ0FBQ1AsS0FBWSxFQUFFO0lBQUEsSUFBQVEsVUFBQSxHQUFBNUYsMEJBQUEsQ0FDWm9GLEtBQUs7TUFBQVMsTUFBQTtJQUFBO01BQXpCLEtBQUFELFVBQUEsQ0FBQTFGLENBQUEsTUFBQTJGLE1BQUEsR0FBQUQsVUFBQSxDQUFBekYsQ0FBQSxJQUFBQyxJQUFBLEdBQTJCO1FBQUEsSUFBaEI2RCxLQUFLLEdBQUE0QixNQUFBLENBQUF2RixLQUFBO1FBQ2QsSUFBSTdGLGFBQWEsQ0FBQ3dKLEtBQUssQ0FBQyxFQUFFO1VBQ3hCMEIsVUFBVSxDQUFFMUIsS0FBSyxDQUFxQjNFLFVBQVUsQ0FBQztRQUNuRCxDQUFDLE1BQU0sSUFBSSxPQUFPMkUsS0FBSyxLQUFLLFFBQVEsRUFBRTtVQUNwQ3lCLGtCQUFrQixDQUFDSSxHQUFHLENBQUM3QixLQUFLLENBQUM7UUFDL0I7TUFDRjtJQUFDLFNBQUFsRCxHQUFBO01BQUE2RSxVQUFBLENBQUE1RSxDQUFBLENBQUFELEdBQUE7SUFBQTtNQUFBNkUsVUFBQSxDQUFBN0ksQ0FBQTtJQUFBO0VBQ0g7RUFDQTRJLFVBQVUsQ0FBQ0Ysa0JBQWtCLENBQUM7O0VBRTlCO0VBQ0EsSUFBTU0sYUFBYSxHQUFHbEssS0FBSyxDQUFDcUIsTUFBTSxDQUFDVyxNQUFNLENBQUMsVUFBQTNCLENBQUM7SUFBQSxPQUFJLENBQUN3SixrQkFBa0IsQ0FBQ2YsR0FBRyxDQUFDekksQ0FBQyxDQUFDQyxFQUFFLENBQUM7RUFBQSxFQUFDLENBQUNGLEdBQUcsQ0FBQyxVQUFBQyxDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDQyxFQUFFO0VBQUEsRUFBQztFQUU1RixPQUFBZ0IsYUFBQSxDQUFBQSxhQUFBLEtBQ0t0QixLQUFLO0lBQ1J5RCxVQUFVLEtBQUFoQyxNQUFBLENBQUFDLGtCQUFBLENBQU13SSxhQUFhLEdBQUF4SSxrQkFBQSxDQUFLa0ksa0JBQWtCLEVBQUM7SUFDckQvQixvQkFBb0IsRUFBRTtFQUFJO0FBRTlCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTc0MsaUJBQWlCQSxDQUMvQm5LLEtBQVEsRUFDUm9LLHFCQUFrRSxFQUMvRDtFQUNILElBQU1DLE1BQTZDLEdBQUcsQ0FBQyxDQUFDO0VBQ3hELElBQU1yRCxRQUF5QyxHQUFHLENBQUMsQ0FBQztFQUVwRCxJQUFJb0QscUJBQXFCLEVBQUU7SUFDeEJFLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDSCxxQkFBcUIsQ0FBQyxDQUF5Q3JJLE9BQU8sQ0FBQyxVQUFBeUksR0FBRyxFQUFJO01BQ3pGLElBQUksQ0FBQ3hLLEtBQUssQ0FBQ3lLLGlCQUFpQixDQUFDRCxHQUFHLENBQUMsRUFBRTtRQUNqQztNQUNGO01BRUEsSUFBTUUsYUFBYSxHQUNqQkYsR0FBRyxLQUFLLFNBQVMsSUFDakJBLEdBQUcsS0FBSyxPQUFPLElBQ2ZBLEdBQUcsS0FBSyxVQUFVLElBQ2xCQSxHQUFHLEtBQUssUUFBUSxJQUNoQkEsR0FBRyxLQUFLLGFBQWEsR0FDakJ4SyxLQUFLLENBQUN5SyxpQkFBaUIsQ0FBQ0QsR0FBRyxDQUFDLENBQUNqSCxNQUFNLEdBQ25DLElBQUk7TUFFVixJQUFBb0gsS0FBQSxHQUFrQ1AscUJBQXFCLENBQUNJLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUEzREksT0FBTyxHQUFBRCxLQUFBLENBQVBDLE9BQU87UUFBS0MsV0FBVyxHQUFBbEksd0JBQUEsQ0FBQWdJLEtBQUEsRUFBQUcsU0FBQTtNQUU5QixJQUFJQyxhQUFhLEdBQUdGLFdBQVc7TUFFL0IsSUFBSUwsR0FBRyxLQUFLLFNBQVMsRUFBRTtRQUNyQixJQUFNUSxrQkFBa0IsR0FBR0gsV0FBZ0Q7UUFDM0UsSUFBQUkscUJBQUEsR0FBeUNDLDZCQUE2QixDQUNwRWxMLEtBQUssRUFDTGdMLGtCQUNGLENBQUM7VUFITUcsYUFBYSxHQUFBRixxQkFBQSxDQUFiRSxhQUFhO1VBQUVDLGVBQWUsR0FBQUgscUJBQUEsQ0FBZkcsZUFBZTs7UUFLckM7UUFDQUwsYUFBYSxHQUFBekosYUFBQTtVQUNYK0osWUFBWSxFQUFBL0osYUFBQSxDQUFBQSxhQUFBLEtBQ05vSixhQUFhLENBQTJCVyxZQUFZLEdBQ3JERixhQUFhO1FBQ2pCLEdBQ0dILGtCQUFrQixDQUFDTSxRQUFRLEtBQUt2SCxTQUFTLEdBQ3pDO1VBQUN1SCxRQUFRLEVBQUVOLGtCQUFrQixDQUFDTTtRQUFRLENBQUMsR0FDdkMsQ0FBQyxDQUFDLENBQ1A7UUFFRCxJQUFJaEIsTUFBTSxDQUFDQyxJQUFJLENBQUNhLGVBQWUsQ0FBQyxDQUFDM0ssTUFBTSxFQUFFO1VBQ3ZDO1VBQ0F1RyxRQUFRLENBQUN1RSxPQUFPLEdBQUc7WUFBQ0YsWUFBWSxFQUFFRCxlQUFlO1lBQUVSLE9BQU8sRUFBRXRDLE9BQU8sQ0FBQ3NDLE9BQU87VUFBQyxDQUFDO1FBQy9FO01BQ0Y7TUFFQVAsTUFBTSxDQUFDRyxHQUFHLENBQUMsR0FBQWxKLGFBQUEsQ0FBQUEsYUFBQSxLQUNOdEIsS0FBSyxDQUFDeUssaUJBQWlCLENBQUNELEdBQUcsQ0FBQztRQUMvQkksT0FBTyxFQUFFdEMsT0FBTyxDQUFDc0MsT0FBTztNQUFDLEdBQ3JCRixhQUFhLEdBQ2I7UUFDRW5ILE1BQU0sRUFBRXJGLElBQUksQ0FBQW9ELGFBQUEsQ0FBQUEsYUFBQSxLQUVMb0osYUFBYSxHQUNiSyxhQUFhLEdBRWxCVCxNQUFNLENBQUNDLElBQUksQ0FBQ0csYUFBYSxDQUMzQjtNQUNGLENBQUMsR0FDRCxDQUFDLENBQUMsQ0FDUDtJQUNILENBQUMsQ0FBQztFQUNKO0VBRUEsSUFBTWMsU0FBUyxHQUFBbEssYUFBQSxDQUFBQSxhQUFBLEtBQ1Z0QixLQUFLO0lBQ1J5SyxpQkFBaUIsRUFBQW5KLGFBQUEsQ0FBQUEsYUFBQSxLQUNadEIsS0FBSyxDQUFDeUssaUJBQWlCLEdBQ3ZCSixNQUFNLENBQ1Y7SUFDREQscUJBQXFCLEVBQUVxQix3QkFBd0IsQ0FBQ3pMLEtBQUssRUFBRWdILFFBQVE7RUFBQyxFQUNqRTtFQUNELE9BQU93RSxTQUFTO0FBQ2xCO0FBRUEsU0FBU0UseUJBQXlCQSxDQUFDQyxPQUFpQyxFQUEwQjtFQUM1RixJQUFNQyxRQUFRLEdBQUF0SyxhQUFBLEtBQU9xSyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDaEM7RUFDQSxJQUFJLENBQUNDLFFBQVEsQ0FBQ0MsTUFBTSxFQUFFO0lBQ3BCLElBQU1DLFVBQVUsR0FBR0gsT0FBTyxDQUFDSSxJQUFJLENBQUMsVUFBQUMsQ0FBQztNQUFBLE9BQUlBLENBQUMsQ0FBQ0gsTUFBTTtJQUFBLEVBQUM7SUFDOUMsSUFBSUMsVUFBVSxhQUFWQSxVQUFVLGVBQVZBLFVBQVUsQ0FBRUQsTUFBTSxFQUFFO01BQ3RCRCxRQUFRLENBQUNDLE1BQU0sR0FBR0MsVUFBVSxDQUFDRCxNQUFNO0lBQ3JDO0VBQ0Y7RUFDQTtFQUNBLElBQUksQ0FBQ0QsUUFBUSxDQUFDSyxXQUFXLEVBQUU7SUFDekIsSUFBTUMsZUFBZSxHQUFHUCxPQUFPLENBQUNJLElBQUksQ0FBQyxVQUFBQyxDQUFDO01BQUEsT0FBSUEsQ0FBQyxDQUFDQyxXQUFXO0lBQUEsRUFBQztJQUN4RCxJQUFJQyxlQUFlLGFBQWZBLGVBQWUsZUFBZkEsZUFBZSxDQUFFRCxXQUFXLEVBQUU7TUFDaENMLFFBQVEsQ0FBQ0ssV0FBVyxHQUFHQyxlQUFlLENBQUNELFdBQVc7SUFDcEQ7RUFDRjtFQUNBO0VBQ0E7RUFBQSxJQUFBRSxNQUFBLFlBQUFBLE9BQUEzQixHQUFBLEVBRTRCO0lBQzFCLElBQU00QixpQkFBaUIsR0FBR1QsT0FBTyxDQUFDdkwsR0FBRyxDQUFDLFVBQUE0TCxDQUFDO01BQUEsT0FBSUEsQ0FBQyxDQUFDeEIsR0FBRyxDQUFDO0lBQUEsRUFBQzs7SUFFbEQ7SUFDQW9CLFFBQVEsQ0FBQ3BCLEdBQUcsQ0FBQyxHQUFHO01BQ2Q7TUFDQUksT0FBTyxFQUFFd0IsaUJBQWlCLENBQUMxRCxJQUFJLENBQUMsVUFBQTJELENBQUM7UUFBQSxPQUFJQSxDQUFDLGFBQURBLENBQUMsdUJBQURBLENBQUMsQ0FBRXpCLE9BQU87TUFBQTtJQUNqRCxDQUFDO0lBRUQsSUFBSUosR0FBRyxLQUFLLFNBQVMsRUFBRTtNQUNyQjtNQUNBb0IsUUFBUSxDQUFDcEIsR0FBRyxDQUFDLENBQUM4QixXQUFXLEdBQUdGLGlCQUFpQixDQUFDMUQsSUFBSSxDQUFDLFVBQUEyRCxDQUFDO1FBQUEsT0FBSUEsQ0FBQyxhQUFEQSxDQUFDLHVCQUFEQSxDQUFDLENBQUVDLFdBQVc7TUFBQSxFQUFDOztNQUV2RTtNQUNBVixRQUFRLENBQUNwQixHQUFHLENBQUMsQ0FBQytCLFdBQVcsR0FBR0MsNkJBQTZCLENBQ3ZESixpQkFBaUIsQ0FBQ2hNLEdBQUcsQ0FBQyxVQUFBaU0sQ0FBQztRQUFBLE9BQUlBLENBQUMsQ0FBQ0UsV0FBVztNQUFBLEVBQzFDLENBQUM7TUFFRCxJQUFNRSxXQUFXLEdBQUdMLGlCQUFpQixDQUFDMUQsSUFBSSxDQUFDLFVBQUEyRCxDQUFDO1FBQUEsT0FBSSxDQUFBQSxDQUFDLGFBQURBLENBQUMsdUJBQURBLENBQUMsQ0FBRWYsUUFBUSxNQUFLdkgsU0FBUztNQUFBLEVBQUM7TUFDMUUsSUFBSTBJLFdBQVcsRUFBRTtRQUNmYixRQUFRLENBQUNwQixHQUFHLENBQUMsQ0FBQ2MsUUFBUSxHQUFHa0IsNkJBQTZCLENBQ3BESixpQkFBaUIsQ0FBQ2hNLEdBQUcsQ0FBQyxVQUFBaU0sQ0FBQztVQUFBLE9BQUlBLENBQUMsYUFBREEsQ0FBQyx1QkFBREEsQ0FBQyxDQUFFZixRQUFRO1FBQUEsRUFDeEMsQ0FBQztNQUNIOztNQUVBO01BQ0FNLFFBQVEsQ0FBQ3BCLEdBQUcsQ0FBQyxDQUFDYSxZQUFZLEdBQUdlLGlCQUFpQixDQUMzQ2hNLEdBQUcsQ0FBQyxVQUFBaU0sQ0FBQztRQUFBLE9BQUlBLENBQUMsQ0FBQ2hCLFlBQVk7TUFBQSxFQUFDLENBQ3hCcUIsTUFBTSxDQUFDLFVBQUNDLEdBQUcsRUFBRUMsZ0JBQWdCLEVBQUs7UUFBQSxJQUFBQyxNQUFBLFlBQUFBLE9BQUFDLGFBQUEsRUFDYTtVQUM1QyxJQUFNQyxpQkFBaUIsR0FBR0gsZ0JBQWdCLENBQUNFLGFBQWEsQ0FBQztVQUN6RCxJQUFJLENBQUNILEdBQUcsQ0FBQ0csYUFBYSxDQUFDLEVBQUU7WUFDdkI7WUFDQTtZQUNBSCxHQUFHLENBQUNHLGFBQWEsQ0FBQyxHQUFHQyxpQkFBaUI7VUFDeEMsQ0FBQyxNQUFNO1lBQ0w7WUFDQTtZQUNBO1lBQ0FBLGlCQUFpQixDQUFDaEwsT0FBTyxDQUFDLFVBQUFpTCxNQUFNLEVBQUk7Y0FDbEMsSUFBSSxDQUFDTCxHQUFHLENBQUNHLGFBQWEsQ0FBQyxDQUFDZixJQUFJLENBQUMsVUFBQWtCLEtBQUE7Z0JBQUEsSUFBRUMsSUFBSSxHQUFBRCxLQUFBLENBQUpDLElBQUk7Z0JBQUEsT0FBTUYsTUFBTSxDQUFDRSxJQUFJLEtBQUtBLElBQUk7Y0FBQSxFQUFDLEVBQUU7Z0JBQzlEUCxHQUFHLENBQUNHLGFBQWEsQ0FBQyxDQUFDaEssSUFBSSxDQUFDa0ssTUFBTSxDQUFDO2NBQ2pDO1lBQ0YsQ0FBQyxDQUFDO1VBQ0o7UUFDRixDQUFDO1FBaEJELEtBQUssSUFBTUYsYUFBYSxJQUFJRixnQkFBZ0I7VUFBQUMsTUFBQSxDQUFBQyxhQUFBO1FBQUE7UUFpQjVDLE9BQU9ILEdBQUc7TUFDWixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDVjtJQUVBLElBQUluQyxHQUFHLEtBQUssT0FBTyxFQUFFO01BQUEsSUFBQTJDLFVBQUE7TUFDbkI7TUFDQXZCLFFBQVEsQ0FBQ3BCLEdBQUcsQ0FBQyxDQUFDNEMsSUFBSSxJQUFBRCxVQUFBLEdBQ2hCeE8sU0FBUyxDQUFDeU4saUJBQWlCLEVBQUVqTixpQkFBaUIsQ0FBQ2tPLE9BQU8sRUFBRSxVQUFBaEIsQ0FBQztRQUFBLE9BQUlBLENBQUMsQ0FBQ2UsSUFBSTtNQUFBLEVBQUMsY0FBQUQsVUFBQSxjQUFBQSxVQUFBLEdBQUksSUFBSTtJQUNoRjtJQUVBLElBQUkzQyxHQUFHLEtBQUssVUFBVSxFQUFFO01BQUEsSUFBQThDLHFCQUFBO01BQ3RCMUIsUUFBUSxDQUFDcEIsR0FBRyxDQUFDLENBQUMrQyxXQUFXLEdBQUduQixpQkFBaUIsQ0FBQzFELElBQUksQ0FBQyxVQUFBMkQsQ0FBQztRQUFBLE9BQUlBLENBQUMsYUFBREEsQ0FBQyx1QkFBREEsQ0FBQyxDQUFFa0IsV0FBVztNQUFBLEVBQUM7TUFDdkUsSUFBTTlLLEtBQUssSUFBQTZLLHFCQUFBLEdBQUdsQixpQkFBaUIsQ0FBQ0wsSUFBSSxDQUFDLFVBQUFNLENBQUM7UUFBQSxPQUFJQSxDQUFDLGFBQURBLENBQUMsdUJBQURBLENBQUMsQ0FBRTVKLEtBQUs7TUFBQSxFQUFDLGNBQUE2SyxxQkFBQSx1QkFBckNBLHFCQUFBLENBQXVDN0ssS0FBSztNQUMxRCxJQUFJQSxLQUFLLEVBQUU7UUFDVG1KLFFBQVEsQ0FBQ3BCLEdBQUcsQ0FBQyxDQUFDL0gsS0FBSyxHQUFHQSxLQUFLO01BQzdCO0lBQ0Y7SUFFQSxJQUFJK0gsR0FBRyxLQUFLLFFBQVEsRUFBRTtNQUNwQm9CLFFBQVEsQ0FBQ3BCLEdBQUcsQ0FBQyxDQUFDZ0QsbUJBQW1CLEdBQUdwQixpQkFBaUIsQ0FBQzFELElBQUksQ0FBQyxVQUFBMkQsQ0FBQztRQUFBLE9BQUlBLENBQUMsYUFBREEsQ0FBQyx1QkFBREEsQ0FBQyxDQUFFbUIsbUJBQW1CO01BQUEsRUFBQztJQUN6RjtJQUVBLElBQUloRCxHQUFHLEtBQUssYUFBYSxJQUFJb0IsUUFBUSxDQUFDSyxXQUFXLEVBQUU7TUFDakRMLFFBQVEsQ0FBQ0ssV0FBVyxDQUFDd0IsV0FBVyxHQUFHM04sNkJBQTZCLENBQUNzTSxpQkFBaUIsQ0FBQztJQUNyRjtFQUNGLENBQUM7RUF2RUQsS0FBSyxJQUFNNUIsR0FBRyxJQUFJb0IsUUFBUTtJQUFBTyxNQUFBLENBQUEzQixHQUFBO0VBQUE7RUF5RTFCLE9BQU9vQixRQUFRO0FBQ2pCO0FBRUEsU0FBU0gsd0JBQXdCQSxDQUMvQnpMLEtBQVEsRUFDUmdILFFBQXlDLEVBQ3pDO0VBQUEsSUFBQTBHLGlCQUFBLEVBQUFDLGtCQUFBLEVBQUFDLHFCQUFBLEVBQUFDLGtCQUFBO0VBQ0EsSUFBSSxFQUFDN0csUUFBUSxhQUFSQSxRQUFRLGdCQUFBMEcsaUJBQUEsR0FBUjFHLFFBQVEsQ0FBRXVFLE9BQU8sY0FBQW1DLGlCQUFBLGVBQWpCQSxpQkFBQSxDQUFtQnJDLFlBQVksR0FBRTtJQUNwQyxPQUFPckwsS0FBSyxDQUFDb0sscUJBQXFCO0VBQ3BDO0VBQ0EsT0FBTztJQUNMbUIsT0FBTyxFQUFBakssYUFBQSxDQUFBQSxhQUFBLENBQUFBLGFBQUEsS0FDRnRCLEtBQUssQ0FBQ29LLHFCQUFxQixDQUFDbUIsT0FBTyxHQUNsQyxRQUFPdkUsUUFBUSxhQUFSQSxRQUFRLGdCQUFBMkcsa0JBQUEsR0FBUjNHLFFBQVEsQ0FBRXVFLE9BQU8sY0FBQW9DLGtCQUFBLHVCQUFqQkEsa0JBQUEsQ0FBbUIvQyxPQUFPLE1BQUssU0FBUyxHQUMvQztNQUFDQSxPQUFPLEVBQUU1RCxRQUFRLENBQUN1RSxPQUFPLENBQUNYO0lBQU8sQ0FBQyxHQUNuQyxDQUFDLENBQUM7TUFDTlMsWUFBWSxFQUFBL0osYUFBQSxDQUFBQSxhQUFBLE1BQUFzTSxxQkFBQSxHQUNQNU4sS0FBSyxDQUFDb0sscUJBQXFCLGNBQUF3RCxxQkFBQSxnQkFBQUEscUJBQUEsR0FBM0JBLHFCQUFBLENBQTZCckMsT0FBTyxjQUFBcUMscUJBQUEsdUJBQXBDQSxxQkFBQSxDQUFzQ3ZDLFlBQVksR0FDbERyRSxRQUFRLGFBQVJBLFFBQVEsZ0JBQUE2RyxrQkFBQSxHQUFSN0csUUFBUSxDQUFFdUUsT0FBTyxjQUFBc0Msa0JBQUEsdUJBQWpCQSxrQkFBQSxDQUFtQnhDLFlBQVk7SUFDbkM7RUFFTCxDQUFDO0FBQ0g7QUFFQSxTQUFTeUMsNEJBQTRCQSxDQUFDckQsaUJBQWlCLEVBQUV0SixNQUFjLEVBQUU0TSxlQUF1QixFQUFFO0VBQUEsSUFBQUMscUJBQUE7RUFDaEcsSUFBSXZELGlCQUFpQixhQUFqQkEsaUJBQWlCLGdCQUFBdUQscUJBQUEsR0FBakJ2RCxpQkFBaUIsQ0FBRWMsT0FBTyxjQUFBeUMscUJBQUEsZUFBMUJBLHFCQUFBLENBQTRCM0MsWUFBWSxDQUFDbEssTUFBTSxDQUFDLEVBQUU7SUFBQSxJQUFBOE0sc0JBQUE7SUFDcEQsT0FBQTNNLGFBQUEsQ0FBQUEsYUFBQSxLQUNLbUosaUJBQWlCO01BQ3BCYyxPQUFPLEVBQUFqSyxhQUFBLENBQUFBLGFBQUEsS0FDRm1KLGlCQUFpQixDQUFDYyxPQUFPO1FBQzVCRixZQUFZLEVBQUF4SSxlQUFBLEtBQ1RrTCxlQUFlLEVBQUd0RCxpQkFBaUIsYUFBakJBLGlCQUFpQixnQkFBQXdELHNCQUFBLEdBQWpCeEQsaUJBQWlCLENBQUVjLE9BQU8sY0FBQTBDLHNCQUFBLHVCQUExQkEsc0JBQUEsQ0FBNEI1QyxZQUFZLENBQUNsSyxNQUFNLENBQUM7TUFDcEU7SUFDRjtFQUVMO0VBQ0EsT0FBTyxJQUFJO0FBQ2I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVMrTSxjQUFjQSxDQUM1QmxPLEtBQVEsRUFFTDtFQUFBLElBREhtTyxTQUE2RCxHQUFBckssU0FBQSxDQUFBckQsTUFBQSxRQUFBcUQsU0FBQSxRQUFBQyxTQUFBLEdBQUFELFNBQUEsTUFBRyxFQUFFO0VBRWxFLElBQU1zSyxXQUFXLEdBQUcsU0FBZEEsV0FBV0EsQ0FBSTlOLEVBQVU7SUFBQSxPQUFLTixLQUFLLENBQUNxQixNQUFNLENBQUNxSCxJQUFJLENBQUMsVUFBQXJJLENBQUM7TUFBQSxPQUFJQSxDQUFDLENBQUNDLEVBQUUsS0FBS0EsRUFBRTtJQUFBLEVBQUM7RUFBQTtFQUN2RSxJQUFNK04sWUFBWSxHQUNoQnJPLEtBQUssQ0FBQ21PLFNBQVMsQ0FBQzFOLE1BQU0sR0FBRyxDQUFDLElBQzFCME4sU0FBUyxDQUFDekYsSUFBSSxDQUFDLFVBQUE0RixFQUFFLEVBQUk7SUFDbkIsSUFBTUMsR0FBRyxHQUFHakUsTUFBTSxDQUFDQyxJQUFJLENBQUMrRCxFQUFFLENBQUNqTixNQUFNLENBQUM7SUFDbEMsT0FBTyxDQUFDa04sR0FBRyxDQUFDOU4sTUFBTSxJQUFJOE4sR0FBRyxDQUFDN0YsSUFBSSxDQUFDMEYsV0FBVyxDQUFDO0VBQzdDLENBQUMsQ0FBQztFQUNKLElBQU1wRyxhQUFhLEdBQUd6Siw4QkFBOEIsQ0FDbER5QixLQUFLLENBQUNxQixNQUFNLENBQUNXLE1BQU0sQ0FBQyxVQUFBM0IsQ0FBQztJQUFBLE9BQUksQ0FBQzhOLFNBQVMsQ0FBQ3pGLElBQUksQ0FBQyxVQUFBNEYsRUFBRTtNQUFBLE9BQUlqTyxDQUFDLENBQUNDLEVBQUUsSUFBSWdPLEVBQUUsQ0FBQ2pOLE1BQU07SUFBQSxFQUFDO0VBQUEsRUFDbkUsQ0FBQztFQUVELElBQU1nSixNQUFNLEdBQUEzSSxrQkFBQSxDQUFPMUIsS0FBSyxDQUFDbU8sU0FBUyxDQUFDO0VBQ25DLElBQU1uSCxRQUEwQixHQUFHLEVBQUU7RUFDckNtSCxTQUFTLENBQUNwTSxPQUFPLENBQUMsVUFBQ3VNLEVBQUUsRUFBRXpKLENBQUMsRUFBSztJQUMzQixJQUFNMkosT0FBTyxHQUFHbEUsTUFBTSxDQUFDa0UsT0FBTyxDQUFDRixFQUFFLENBQUNqTixNQUFNLENBQUM7SUFDekMsSUFBSWdOLFlBQVksRUFBRTtNQUNoQjtNQUNBLElBQU1JLEtBQUssR0FBR3BFLE1BQU0sQ0FBQ3hGLENBQUMsQ0FBQyxJQUFBdkQsYUFBQSxDQUFBQSxhQUFBLEtBQVFnTixFQUFFO1FBQUVqTixNQUFNLEVBQUUyRztNQUFhLEVBQUM7TUFDekRxQyxNQUFNLENBQUN4RixDQUFDLENBQUMsR0FBQXZELGFBQUEsQ0FBQUEsYUFBQSxLQUNKbU4sS0FBSztRQUNScE4sTUFBTSxFQUFBQyxhQUFBLENBQUFBLGFBQUEsS0FBTW1OLEtBQUssQ0FBQ3BOLE1BQU0sR0FBS2lKLE1BQU0sQ0FBQ29FLFdBQVcsQ0FBQ0YsT0FBTyxDQUFDeE0sTUFBTSxDQUFDLFVBQUEyTSxLQUFBO1VBQUEsSUFBQUMsS0FBQSxHQUFBQyxjQUFBLENBQUFGLEtBQUE7WUFBRXJPLEVBQUUsR0FBQXNPLEtBQUE7VUFBQSxPQUFNUixXQUFXLENBQUM5TixFQUFFLENBQUM7UUFBQSxFQUFDLENBQUM7TUFBQyxFQUM1RjtJQUNIO0lBQ0EwRyxRQUFRLENBQUNuQyxDQUFDLENBQUMsR0FBQXZELGFBQUEsQ0FBQUEsYUFBQSxLQUFPZ04sRUFBRTtNQUFFak4sTUFBTSxFQUFFaUosTUFBTSxDQUFDb0UsV0FBVyxDQUFDRixPQUFPLENBQUN4TSxNQUFNLENBQUMsVUFBQThNLEtBQUE7UUFBQSxJQUFBQyxLQUFBLEdBQUFGLGNBQUEsQ0FBQUMsS0FBQTtVQUFFeE8sRUFBRSxHQUFBeU8sS0FBQTtRQUFBLE9BQU0sQ0FBQ1gsV0FBVyxDQUFDOU4sRUFBRSxDQUFDO01BQUEsRUFBQztJQUFDLEVBQUM7RUFDL0YsQ0FBQyxDQUFDO0VBRUYsT0FBQWdCLGFBQUEsQ0FBQUEsYUFBQSxLQUNLdEIsS0FBSztJQUNSbU8sU0FBUyxFQUFFOUQsTUFBTTtJQUNqQjJFLG1CQUFtQixFQUFFaEksUUFBUSxDQUFDMEIsSUFBSSxDQUFDLFVBQUE0RixFQUFFO01BQUEsT0FBSWhFLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDK0QsRUFBRSxDQUFDak4sTUFBTSxDQUFDLENBQUNaLE1BQU07SUFBQSxFQUFDLEdBQ25FbkMsdUJBQXVCLENBQUMwQixLQUFLLENBQUNnUCxtQkFBbUIsRUFBRWhJLFFBQVEsQ0FBQyxHQUM1RGhILEtBQUssQ0FBQ2dQO0VBQW1CO0FBRWpDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVNDLFdBQVdBLENBQ3pCalAsS0FBUSxFQUNSa1AsTUFBaUMsRUFDakNoUCxVQUFvQixFQUNqQjtFQUNILElBQUksQ0FBQ0ssS0FBSyxDQUFDQyxPQUFPLENBQUMwTyxNQUFNLENBQUMsSUFBSSxDQUFDQSxNQUFNLENBQUN6TyxNQUFNLEVBQUU7SUFDNUMsT0FBT1QsS0FBSztFQUNkO0VBQ0EsSUFBTW1QLFdBQVcsR0FBRyxJQUFJdkcsR0FBRyxDQUN6QnNHLE1BQU0sQ0FBQzlPLEdBQUcsQ0FBQyxVQUFBZ1AsS0FBSztJQUFBLE9BQUlBLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFOU8sRUFBRTtFQUFBLEVBQUMsQ0FBQzBCLE1BQU0sQ0FBQyxVQUFDMUIsRUFBRTtJQUFBLE9BQW1CZ0ksT0FBTyxDQUFDaEksRUFBRSxDQUFDO0VBQUEsRUFDekUsQ0FBQztFQUNELElBQU0rTyxXQUFXLEdBQUcsSUFBSXpHLEdBQUcsQ0FBQyxDQUFDNUksS0FBSyxDQUFDa1AsTUFBTSxJQUFJLEVBQUUsRUFBRTlPLEdBQUcsQ0FBQyxVQUFBZ1AsS0FBSztJQUFBLE9BQUlBLEtBQUssQ0FBQzlPLEVBQUU7RUFBQSxFQUFDLENBQUM7RUFDeEUsSUFBTWdQLFVBQXlCLEdBQUcsRUFBRTtFQUNwQyxJQUFNMU8sTUFBcUIsR0FBRyxFQUFFO0VBQ2hDc08sTUFBTSxDQUFDbk4sT0FBTyxDQUFDLFVBQUFxTixLQUFLLEVBQUk7SUFDdEIsSUFBSSxDQUFDQSxLQUFLLElBQUksQ0FBQ0EsS0FBSyxDQUFDOU8sRUFBRSxJQUFJK08sV0FBVyxDQUFDdkcsR0FBRyxDQUFDc0csS0FBSyxDQUFDOU8sRUFBRSxDQUFDLEVBQUU7TUFDcEQ7SUFDRjtJQUNBLElBQU1pUCxVQUF1QixHQUFHclAsVUFBVSxHQUFBb0IsYUFBQSxDQUFBQSxhQUFBLEtBRWpDOE4sS0FBSztNQUNSO01BQ0FJLE1BQU0sRUFBRUosS0FBSyxDQUFDSSxNQUFNLEtBQUssS0FBSztNQUM5QkMsT0FBTyxFQUFBbk8sYUFBQSxDQUFBQSxhQUFBLEtBQ0Y4TixLQUFLLENBQUNLLE9BQU87UUFDaEJDLGNBQWMsRUFBRSxLQUFLO1FBQ3JCQyxrQkFBa0IsRUFBRTtNQUFLO0lBQzFCLEtBRUhQLEtBQUs7SUFDVCxJQUNFRyxVQUFVLENBQUNwTyxNQUFNLEtBQ2hCLENBQUNuQixLQUFLLENBQUN1QixRQUFRLENBQUNnTyxVQUFVLENBQUNwTyxNQUFNLENBQUMsSUFBSW5CLEtBQUssQ0FBQ21ILGlCQUFpQixDQUFDb0ksVUFBVSxDQUFDcE8sTUFBTSxDQUFDLENBQUMsRUFDbEY7TUFDQVAsTUFBTSxDQUFDa0MsSUFBSSxDQUFDeU0sVUFBVSxDQUFDO01BQ3ZCO0lBQ0Y7SUFDQUYsV0FBVyxDQUFDcEYsR0FBRyxDQUFDc0YsVUFBVSxDQUFDalAsRUFBRSxDQUFDO0lBQzlCZ1AsVUFBVSxDQUFDeE0sSUFBSSxDQUFDeU0sVUFBVSxDQUFDO0VBQzdCLENBQUMsQ0FBQztFQUNGLElBQUksQ0FBQ0QsVUFBVSxDQUFDN08sTUFBTSxJQUFJLENBQUNHLE1BQU0sQ0FBQ0gsTUFBTSxFQUFFO0lBQ3hDLE9BQU9ULEtBQUs7RUFDZDtFQUNBLE9BQUFzQixhQUFBLENBQUFBLGFBQUEsS0FDS3RCLEtBQUs7SUFDUmtQLE1BQU0sRUFBRUksVUFBVSxDQUFDN08sTUFBTSxNQUFBZ0IsTUFBQSxDQUFBQyxrQkFBQSxDQUFRMUIsS0FBSyxDQUFDa1AsTUFBTSxJQUFJLEVBQUUsR0FBTUksVUFBVSxJQUFJdFAsS0FBSyxDQUFDa1AsTUFBTTtJQUNuRlUsZ0JBQWdCLEtBQUFuTyxNQUFBLENBQUFDLGtCQUFBLENBQ1gsQ0FBQzFCLEtBQUssQ0FBQzRQLGdCQUFnQixJQUFJLEVBQUUsRUFBRTVOLE1BQU0sQ0FBQyxVQUFBb04sS0FBSztNQUFBLE9BQUksQ0FBQ0QsV0FBVyxDQUFDckcsR0FBRyxDQUFDc0csS0FBSyxDQUFDOU8sRUFBRSxDQUFDO0lBQUEsRUFBQyxHQUMxRU0sTUFBTTtFQUNWO0FBRUw7QUFFQSxPQUFPLFNBQVNpUCxzQkFBc0JBLENBQ3BDQyxXQUFzQyxFQUN0QzNPLE1BQWMsRUFDZFUsV0FBbUIsRUFDRztFQUN0QixJQUFJLENBQUN0QixLQUFLLENBQUNDLE9BQU8sQ0FBQ3NQLFdBQVcsQ0FBQyxJQUFJLENBQUNBLFdBQVcsQ0FBQ3JQLE1BQU0sRUFBRTtJQUN0RCxPQUFPLElBQUk7RUFDYjtFQUNBLElBQU1xQixRQUFRLEdBQUdnTyxXQUFXLENBQ3pCOU4sTUFBTSxDQUFDLFVBQUFvTixLQUFLO0lBQUEsT0FBSSxDQUFBQSxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRWpPLE1BQU0sTUFBS0EsTUFBTTtFQUFBLEVBQUMsQ0FDekNmLEdBQUcsQ0FBQyxVQUFBZ1AsS0FBSztJQUFBLE9BQUE5TixhQUFBLENBQUFBLGFBQUEsS0FBUzhOLEtBQUs7TUFBRWpPLE1BQU0sRUFBRVU7SUFBVztFQUFBLENBQUUsQ0FBQztFQUNsRCxPQUFPQyxRQUFRLENBQUNyQixNQUFNLEdBQUdxQixRQUFRLEdBQUcsSUFBSTtBQUMxQztBQUNBLE9BQU8sU0FBU2lPLFlBQVlBLENBQzFCL1AsS0FBUSxFQUNSd0csT0FBeUQsRUFDekR0RyxVQUFvQixFQUNqQjtFQUNILElBQU04UCxVQUFVLE1BQUF2TyxNQUFBLENBQUFDLGtCQUFBLENBQ1gxQixLQUFLLENBQUN3RyxPQUFPLEdBQUE5RSxrQkFBQSxDQUNiLENBQUM4RSxPQUFPLElBQUksRUFBRSxFQUNkcEcsR0FBRyxDQUFDLFVBQUE2UCxNQUFNLEVBQUk7SUFDYixPQUFPL1AsVUFBVSxHQUNiakIsWUFBWSxDQUNWYixTQUFTLENBQUM4UixHQUFHLENBQUMsQ0FDWkQsTUFBTSxFQUNOO01BQ0U7TUFDQVAsY0FBYyxFQUFFO0lBQ2xCLENBQUMsQ0FDRixDQUNILENBQUMsR0FDQU8sTUFBcUI7RUFDNUIsQ0FBQyxDQUFDLENBQ0RqTyxNQUFNLENBQUMsVUFBQWlPLE1BQU0sRUFBSTtJQUNoQixPQUFPM0gsT0FBTyxDQUFDMkgsTUFBTSxJQUFJQSxNQUFNLENBQUNFLGFBQWEsQ0FBQyxDQUFDLENBQUM7RUFDbEQsQ0FBQyxDQUFDLEVBQ0w7RUFDRCxPQUFBN08sYUFBQSxDQUFBQSxhQUFBLEtBQ0t0QixLQUFLO0lBQ1J3RyxPQUFPLEVBQUV3SixVQUFVO0lBQ25CdkosV0FBVyxFQUFFdUosVUFBVSxDQUFDNVAsR0FBRyxDQUFDLFVBQUE2UCxNQUFNO01BQUEsT0FBSUEsTUFBTSxDQUFDM1AsRUFBRTtJQUFBO0VBQUM7QUFFcEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTOFAsZ0JBQWdCQSxDQUFxQnBRLEtBQVEsRUFBRXFRLFdBQWtCLEVBQUs7RUFDcEYsSUFBSSxDQUFDQSxXQUFXLElBQUksQ0FBQ0EsV0FBVyxDQUFDNVAsTUFBTSxFQUFFO0lBQ3ZDLE9BQU9ULEtBQUs7RUFDZDtFQUNBLElBQU1xUCxXQUFXLEdBQUcsSUFBSXpHLEdBQUcsQ0FBQzVJLEtBQUssQ0FBQ3FRLFdBQVcsQ0FBQ2pRLEdBQUcsQ0FBQyxVQUFBa1EsQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQ2hRLEVBQUU7RUFBQSxFQUFDLENBQUM7RUFDN0QsSUFBTWlRLGdCQUFnQixHQUFHRixXQUFXLENBQ2pDck8sTUFBTSxDQUNMLFVBQUFzTyxDQUFDO0lBQUEsT0FDQ0EsQ0FBQyxJQUNEQSxDQUFDLENBQUNoUSxFQUFFLElBQ0osQ0FBQytPLFdBQVcsQ0FBQ3ZHLEdBQUcsQ0FBQ3dILENBQUMsQ0FBQ2hRLEVBQUUsQ0FBQyxJQUN0QmYsZ0JBQWdCLENBQUMrUSxDQUFDLENBQUNFLElBQUksQ0FBQyxJQUN4QmpRLEtBQUssQ0FBQ0MsT0FBTyxDQUFDOFAsQ0FBQyxDQUFDRyxXQUFXLENBQUMsS0FDM0JILENBQUMsQ0FBQ0csV0FBVyxDQUFDaFEsTUFBTSxLQUFLLENBQUMsSUFBSTZQLENBQUMsQ0FBQ0csV0FBVyxDQUFDaFEsTUFBTSxLQUFLLENBQUMsQ0FBQyxJQUMxRDZQLENBQUMsQ0FBQ0csV0FBVyxDQUFDQyxLQUFLLENBQUMsVUFBQWpNLEtBQUs7TUFBQSxPQUFJa00sTUFBTSxDQUFDQyxRQUFRLENBQUNuTSxLQUFLLENBQUM7SUFBQSxFQUFDO0VBQUEsQ0FDeEQsQ0FBQyxDQUNBckUsR0FBRyxDQUFDLFVBQUFrUSxDQUFDO0lBQUEsT0FBQWhQLGFBQUE7TUFDSnVQLFNBQVMsRUFBRSxJQUFJO01BQ2ZDLFFBQVEsRUFBRSxJQUFJO01BQ2RDLFNBQVMsRUFBRSxJQUFJO01BQ2ZDLEtBQUssRUFBRSxFQUFFO01BQ1RDLFNBQVMsRUFBRXpSLDZCQUE2QjtNQUN4QzBSLFNBQVMsRUFBRXpSLDZCQUE2QjtNQUN4QzBSLFNBQVMsRUFBRSxDQUFDO01BQ1pDLFVBQVUsRUFBRTtJQUFDLEdBQ1ZkLENBQUM7RUFBQSxDQUNKLENBQUM7RUFDTCxJQUFJLENBQUNDLGdCQUFnQixDQUFDOVAsTUFBTSxFQUFFO0lBQzVCLE9BQU9ULEtBQUs7RUFDZDtFQUNBLE9BQUFzQixhQUFBLENBQUFBLGFBQUEsS0FDS3RCLEtBQUs7SUFDUnFRLFdBQVcsS0FBQTVPLE1BQUEsQ0FBQUMsa0JBQUEsQ0FBTTFCLEtBQUssQ0FBQ3FRLFdBQVcsR0FBQTNPLGtCQUFBLENBQUs2TyxnQkFBZ0I7RUFBQztBQUU1RDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTckYsNkJBQTZCQSxDQUMzQ2xMLEtBQWUsRUFFZjtFQUFBLElBREFxUixhQUFpRSxHQUFBdk4sU0FBQSxDQUFBckQsTUFBQSxRQUFBcUQsU0FBQSxRQUFBQyxTQUFBLEdBQUFELFNBQUEsTUFBRyxJQUFJO0VBRXhFLElBQU1zSCxlQUFzRCxHQUFHLENBQUMsQ0FBQztFQUNqRSxJQUFNRCxhQUFvRCxHQUFHLENBQUMsQ0FBQztFQUUvRCxJQUNFLENBQUNrRyxhQUFhLElBQ2QsQ0FBQ0EsYUFBYSxDQUFDaEcsWUFBWSxJQUMzQixDQUFDZixNQUFNLENBQUNDLElBQUksQ0FBQzhHLGFBQWEsQ0FBQ2hHLFlBQVksQ0FBQyxDQUFDNUssTUFBTSxFQUMvQztJQUNBLE9BQU87TUFBQzBLLGFBQWEsRUFBYkEsYUFBYTtNQUFFQyxlQUFlLEVBQWZBO0lBQWUsQ0FBQztFQUN6QztFQUFDLElBQUFrRyxNQUFBLFlBQUFBLE9BQUEsRUFFZ0Q7SUFDL0MsSUFBSSxDQUFDdFIsS0FBSyxDQUFDdUIsUUFBUSxDQUFDSixNQUFNLENBQUMsSUFBSW5CLEtBQUssQ0FBQ21ILGlCQUFpQixDQUFDaEcsTUFBTSxDQUFDLEVBQUU7TUFDOUQ7TUFDQWlLLGVBQWUsQ0FBQ2pLLE1BQU0sQ0FBQyxHQUFHa1EsYUFBYSxDQUFDaEcsWUFBWSxDQUFDbEssTUFBTSxDQUFDO0lBQzlELENBQUMsTUFBTTtNQUNMO01BQ0EsSUFBTW9RLFNBQVMsR0FBR3ZSLEtBQUssQ0FBQ3VCLFFBQVEsQ0FBQ0osTUFBTSxDQUFDLENBQUNxUSxNQUFNLENBQUNwUixHQUFHLENBQUMsVUFBQWdDLENBQUM7UUFBQSxPQUFJQSxDQUFDLENBQUM4SyxJQUFJO01BQUEsRUFBQztNQUNoRSxJQUFNdUUsaUJBQWlCLEdBQUdKLGFBQWEsQ0FBQ2hHLFlBQVksQ0FBQ2xLLE1BQU0sQ0FBQyxDQUFDYSxNQUFNLENBQUMsVUFBQTBQLEtBQUs7UUFBQSxPQUN2RUgsU0FBUyxDQUFDdFAsUUFBUSxDQUFDeVAsS0FBSyxDQUFDeEUsSUFBSSxDQUFDO01BQUEsQ0FDaEMsQ0FBQztNQUVEL0IsYUFBYSxDQUFDaEssTUFBTSxDQUFDLEdBQUdzUSxpQkFBaUI7SUFDM0M7RUFDRixDQUFDO0VBYkQsS0FBSyxJQUFNdFEsTUFBTSxJQUFJa1EsYUFBYSxDQUFDaEcsWUFBWTtJQUFBaUcsTUFBQTtFQUFBO0VBZS9DLE9BQU87SUFBQ25HLGFBQWEsRUFBYkEsYUFBYTtJQUFFQyxlQUFlLEVBQWZBO0VBQWUsQ0FBQztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTdUcsa0JBQWtCQSxDQUNoQzNSLEtBQVEsRUFDUjRSLGFBQXFFLEVBQ2xFO0VBQ0gsSUFBSUEsYUFBYSxJQUFJdlMsZUFBZSxDQUFDdVMsYUFBYSxDQUFDLEVBQUU7SUFDbkQsT0FBQXRRLGFBQUEsQ0FBQUEsYUFBQSxLQUNLdEIsS0FBSztNQUNSNFIsYUFBYSxFQUFiQTtJQUFhO0VBRWpCO0VBRUEsT0FBTzVSLEtBQUs7QUFDZDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM2UiwyQkFBMkJBLENBQUNsRyxPQUFpQixFQUFpQjtFQUNyRTtFQUNBLE9BQU9hLDZCQUE2QixDQUFDYixPQUFPLENBQUM7QUFDL0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTbUcsb0JBQW9CQSxDQUNsQzlSLEtBQVEsRUFDUitSLGVBQXlFLEVBQ3RFO0VBQ0gsSUFBSUEsZUFBZSxJQUFJelMsaUJBQWlCLENBQUN5UyxlQUFlLENBQUMsRUFBRTtJQUN6RCxPQUFBelEsYUFBQSxDQUFBQSxhQUFBLEtBQ0t0QixLQUFLO01BQ1IrUixlQUFlLEVBQWZBO0lBQWU7RUFFbkI7RUFFQSxPQUFPL1IsS0FBSztBQUNkOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU2dTLDZCQUE2QkEsQ0FBQ3JHLE9BQWlCLEVBQWlCO0VBQ3ZFO0VBQ0EsT0FBT2EsNkJBQTZCLENBQUNiLE9BQU8sQ0FBQztBQUMvQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVNzRyxvQkFBb0JBLENBQ2xDalMsS0FBUSxFQUNSa1MsU0FBbUUsRUFDaEU7RUFDSCxJQUFJQSxTQUFTLElBQUlBLFNBQVMsQ0FBQ0MsV0FBVyxFQUFFO0lBQ3RDLE9BQUE3USxhQUFBLENBQUFBLGFBQUEsS0FDS3RCLEtBQUs7TUFDUm9TLGVBQWUsRUFBQTlRLGFBQUEsQ0FBQUEsYUFBQSxDQUFBQSxhQUFBLEtBQ1Z0QixLQUFLLENBQUNvUyxlQUFlLEdBQ3JCRixTQUFTO1FBQ1pHLE1BQU0sRUFBRTtNQUFJO0lBQ2I7RUFFTDtFQUVBLE9BQU9yUyxLQUFLO0FBQ2Q7QUFFQSxTQUFTc1MsdUJBQXVCQSxDQUFDM0csT0FBK0IsRUFBd0I7RUFBQSxJQUFBNEcsV0FBQSxFQUFBQyxXQUFBO0VBQ3RGO0VBQ0EsT0FBTztJQUNMTCxXQUFXLEdBQUFJLFdBQUEsR0FBRTVULFNBQVMsQ0FBQ2dOLE9BQU8sRUFBRXhNLGlCQUFpQixDQUFDc1QsT0FBTyxFQUFFLFVBQUF6RyxDQUFDO01BQUEsT0FBSUEsQ0FBQyxDQUFDbUcsV0FBVztJQUFBLEVBQUMsY0FBQUksV0FBQSxjQUFBQSxXQUFBLEdBQUksSUFBSTtJQUN0RkcsS0FBSyxHQUFBRixXQUFBLEdBQUU3VCxTQUFTLENBQUNnTixPQUFPLEVBQUV4TSxpQkFBaUIsQ0FBQ3NULE9BQU8sRUFBRSxVQUFBekcsQ0FBQztNQUFBLE9BQUlBLENBQUMsQ0FBQzBHLEtBQUs7SUFBQSxFQUFDLGNBQUFGLFdBQUEsY0FBQUEsV0FBQSxHQUFJLElBQUk7SUFDMUU7SUFDQUcsVUFBVSxFQUFFbkcsNkJBQTZCLENBQUNiLE9BQU8sQ0FBQ3ZMLEdBQUcsQ0FBQyxVQUFBNEwsQ0FBQztNQUFBLE9BQUlBLENBQUMsQ0FBQzJHLFVBQVU7SUFBQSxFQUFDLENBQUM7SUFDekVySCxRQUFRLEVBQUVrQiw2QkFBNkIsQ0FBQ2IsT0FBTyxDQUFDdkwsR0FBRyxDQUFDLFVBQUE0TCxDQUFDO01BQUEsT0FBSUEsQ0FBQyxDQUFDVixRQUFRO0lBQUEsRUFBQztFQUN0RSxDQUFDO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsT0FBTyxTQUFTc0gseUJBQXlCQSxDQUN2Q3BCLE1BQTZCLEVBTTdCO0VBQUEsSUFMQXFCLFNBRUMsR0FBQS9PLFNBQUEsQ0FBQXJELE1BQUEsUUFBQXFELFNBQUEsUUFBQUMsU0FBQSxHQUFBRCxTQUFBLE1BQUcsQ0FBQyxDQUFDO0VBQUEsSUFDTmdQLFNBQXVCLEdBQUFoUCxTQUFBLENBQUFyRCxNQUFBLE9BQUFxRCxTQUFBLE1BQUFDLFNBQUE7RUFBQSxJQUN2QmdQLE9BQWlDLEdBQUFqUCxTQUFBLENBQUFyRCxNQUFBLFFBQUFxRCxTQUFBLFFBQUFDLFNBQUEsR0FBQUQsU0FBQSxNQUFHLENBQUMsQ0FBQztFQUV0QztFQUNBLElBQU1rUCxPQUF5QixHQUFHLENBQUMsQ0FBQztFQUFDLElBQUFDLE1BQUEsWUFBQUEsT0FBQSxFQUNLO0lBQXJDLElBQU16SSxHQUFHLEdBQUEwSSxZQUFBLENBQUFDLEVBQUE7SUFDWkgsT0FBTyxDQUFDeEksR0FBRyxDQUFDLEdBQUFsSixhQUFBLEtBQU93UixTQUFTLENBQUN0SSxHQUFHLENBQUMsQ0FBQztJQUVsQyxJQUFNNEksS0FBSyxHQUFHUCxTQUFTLENBQUNySSxHQUFHLENBQUM7SUFDNUIsSUFBSTRJLEtBQUssRUFBRTtNQUNULElBQU1DLFFBQVEsR0FBRzdCLE1BQU0sQ0FBQ3ZNLFNBQVMsQ0FBQyxVQUFBcU8sS0FBQTtRQUFBLElBQUVwRyxJQUFJLEdBQUFvRyxLQUFBLENBQUpwRyxJQUFJO1FBQUEsT0FBTUEsSUFBSSxLQUFLa0csS0FBSztNQUFBLEVBQUM7TUFFN0QsSUFBSUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxFQUFFO1FBQ2pCO1FBQ0FMLE9BQU8sQ0FBQ3hJLEdBQUcsQ0FBQyxDQUFDNkksUUFBUSxHQUFHQSxRQUFRO1FBQ2hDTCxPQUFPLENBQUN4SSxHQUFHLENBQUMsQ0FBQy9GLEtBQUssR0FBRzJPLEtBQUs7TUFDNUI7SUFDRjtFQUNGLENBQUM7RUFiRCxTQUFBRCxFQUFBLE1BQUFELFlBQUEsR0FBa0I1SSxNQUFNLENBQUNDLElBQUksQ0FBQ3VJLFNBQVMsQ0FBQyxFQUFBSyxFQUFBLEdBQUFELFlBQUEsQ0FBQXpTLE1BQUEsRUFBQTBTLEVBQUE7SUFBQUYsTUFBQTtFQUFBOztFQWV4QztFQUNBLElBQU1NLFdBQVcsR0FBR2pKLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDeUksT0FBTyxDQUFDLENBQUN0QyxLQUFLLENBQUMsVUFBQWxHLEdBQUc7SUFBQSxPQUNoRGdKLGNBQWMsQ0FBQ1IsT0FBTyxDQUFDeEksR0FBRyxDQUFDLEVBQUV3SSxPQUFPLEVBQUV4QixNQUFNLENBQUM7RUFBQSxDQUMvQyxDQUFDO0VBRUQsSUFBTWlDLEVBQUUsR0FBR0YsV0FBVyxHQUFHUCxPQUFPLEdBQUcsSUFBSTtFQUN2QyxJQUFJRCxPQUFPLENBQUNXLFlBQVksRUFBRTtJQUN4QixJQUFNQyxlQUFlLEdBQUdySixNQUFNLENBQUNDLElBQUksQ0FBQ3VJLFNBQVMsQ0FBQyxDQUFDOVEsTUFBTSxDQUFDLFVBQUE0UixDQUFDO01BQUEsT0FBSSxDQUFDZCxTQUFTLENBQUNjLENBQUMsQ0FBQyxDQUFDQyxRQUFRO0lBQUEsRUFBQztJQUNsRixJQUFNQyxjQUFjLEdBQUdILGVBQWUsQ0FBQzNSLE1BQU0sQ0FBQyxVQUFBNFIsQ0FBQztNQUFBLE9BQUksRUFBQ1osT0FBTyxhQUFQQSxPQUFPLGVBQVBBLE9BQU8sQ0FBR1ksQ0FBQyxDQUFDLENBQUNuUCxLQUFLO0lBQUEsRUFBQztJQUN2RSxJQUFJcVAsY0FBYyxDQUFDclQsTUFBTSxFQUFFO01BQ3pCLE1BQU0sSUFBSXNULEtBQUssMENBQUF0UyxNQUFBLENBQTBDcVMsY0FBYyxDQUFDRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUUsQ0FBQztJQUN2RjtJQUNBLElBQU1DLGFBQWEsR0FBRzNKLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDc0ksU0FBUyxDQUFDO0lBQzVDLElBQU1xQixjQUFjLEdBQUdELGFBQWEsQ0FBQ2pTLE1BQU0sQ0FBQyxVQUFBNFIsQ0FBQztNQUFBLElBQUFPLFVBQUE7TUFBQSxPQUFJLEVBQUNuQixPQUFPLGFBQVBBLE9BQU8sZ0JBQUFtQixVQUFBLEdBQVBuQixPQUFPLENBQUdZLENBQUMsQ0FBQyxjQUFBTyxVQUFBLGVBQVpBLFVBQUEsQ0FBYzFQLEtBQUs7SUFBQSxFQUFDO0lBQ3RFLElBQUl5UCxjQUFjLENBQUN6VCxNQUFNLEVBQUU7TUFDekIsTUFBTSxJQUFJc1QsS0FBSywrQkFBQXRTLE1BQUEsQ0FBK0J5UyxjQUFjLENBQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBRSxDQUFDO0lBQzVFO0VBQ0Y7RUFFQSxPQUFPUCxFQUFFO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTRCxjQUFjQSxDQUM1QlksTUFBeUQsRUFDekRwQixPQUFxQixFQUNyQnpCLFNBQWdDLEVBQ3ZCO0VBQ1QsSUFBSTZDLE1BQU0sQ0FBQ1AsUUFBUSxJQUFJTyxNQUFNLENBQUMzUCxLQUFLLEVBQUU7SUFDbkMsT0FBTyxJQUFJO0VBQ2I7RUFDQSxJQUFJMlAsTUFBTSxDQUFDQyxTQUFTLEVBQUU7SUFDcEIsT0FBT0QsTUFBTSxDQUFDQyxTQUFTLENBQUNELE1BQU0sRUFBRXBCLE9BQU8sRUFBRXpCLFNBQVMsQ0FBQztFQUNyRDtFQUNBLE9BQU8sS0FBSztBQUNkOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBUytDLHNCQUFzQkEsQ0FDcEM5QyxNQUFNLEVBQ04rQyxlQUFzQixFQUN0QkMsY0FBYyxFQUVQO0VBQUEsSUFEUHpCLE9BQTRELEdBQUFqUCxTQUFBLENBQUFyRCxNQUFBLFFBQUFxRCxTQUFBLFFBQUFDLFNBQUEsR0FBQUQsU0FBQSxNQUFHLENBQUMsQ0FBQztFQUVqRSxJQUFNMlEsY0FBYyxHQUFHRixlQUFlLENBQUMsQ0FBQyxDQUFDO0VBQ3pDLElBQU1HLGVBQWUsR0FBR25VLEtBQUssQ0FBQ0MsT0FBTyxDQUFDZ1UsY0FBYyxDQUFDLEdBQUdBLGNBQWMsR0FBRyxDQUFDQSxjQUFjLENBQUM7RUFDekYsSUFBTUcsZUFBZSxHQUFHck0sT0FBTyxDQUM3QnlLLE9BQU8sQ0FBQzZCLFNBQVMsSUFBSS9WLDZCQUE2QixDQUFDaUssR0FBRyxDQUFDaUssT0FBTyxDQUFDNkIsU0FBUyxDQUMxRSxDQUFDOztFQUVEO0VBQ0EsT0FBT0YsZUFBZSxDQUFDdFUsR0FBRyxDQUFDLFVBQUF5VSxTQUFTLEVBQUk7SUFDdEMsSUFBSW5ELEtBQUssR0FBRyxJQUFJO0lBQ2hCLElBQUltRCxTQUFTLENBQUNuRCxLQUFLLEVBQUU7TUFDbkI7TUFDQTtNQUNBQSxLQUFLLEdBQ0hpRCxlQUFlLElBQUlFLFNBQVMsQ0FBQ25ELEtBQUssQ0FBQ3hFLElBQUksS0FBS2xPLHNCQUFzQixHQUM5REYsMEJBQTBCLENBQUMsQ0FBQyxHQUM1QjBTLE1BQU0sQ0FBQ3pGLElBQUksQ0FBQyxVQUFBK0ksRUFBRTtRQUFBLE9BQ1p4SyxNQUFNLENBQUNDLElBQUksQ0FBQ3NLLFNBQVMsQ0FBQ25ELEtBQUssQ0FBQyxDQUFDaEIsS0FBSyxDQUFDLFVBQUFsRyxHQUFHO1VBQUEsT0FBSXFLLFNBQVMsQ0FBQ25ELEtBQUssQ0FBQ2xILEdBQUcsQ0FBQyxLQUFLc0ssRUFBRSxDQUFDdEssR0FBRyxDQUFDO1FBQUEsRUFBQztNQUFBLENBQzdFLENBQUM7SUFDVDtJQUVBLElBQUlrSCxLQUFLLEtBQUszTixTQUFTLElBQUlnUCxPQUFPLENBQUNXLFlBQVksRUFBRTtNQUMvQyxNQUFNLElBQUlLLEtBQUssd0NBQUF0UyxNQUFBLENBQXdDc1QsSUFBSSxDQUFDQyxTQUFTLENBQUNILFNBQVMsQ0FBQ25ELEtBQUssQ0FBQyxDQUFFLENBQUM7SUFDM0Y7SUFFQSxPQUFPcEgsTUFBTSxDQUFDQyxJQUFJLENBQUNrSyxjQUFjLENBQUMsQ0FBQy9ILE1BQU0sQ0FDdkMsVUFBQ3VJLElBQUksRUFBRXpLLEdBQUc7TUFBQSxJQUFBMEssY0FBQTtNQUFBLE9BQUE1VCxhQUFBLENBQUFBLGFBQUEsS0FDTDJULElBQUksT0FBQXBTLGVBQUEsS0FHTjJILEdBQUcsRUFBR0EsR0FBRyxLQUFLLE9BQU8sR0FBR2tILEtBQUssSUFBQXdELGNBQUEsR0FBR0wsU0FBUyxDQUFDckssR0FBRyxDQUFDLGNBQUEwSyxjQUFBLGNBQUFBLGNBQUEsR0FBSVQsY0FBYyxDQUFDakssR0FBRyxDQUFDO0lBQUEsQ0FDdEUsRUFDRixDQUFDLENBQ0gsQ0FBQztFQUNILENBQUMsQ0FBQztBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVMySywrQkFBK0JBLENBQzdDUCxTQUFvQyxFQUNwQ1EsaUJBQXdCLEVBQ2pCO0VBQ1AsSUFBSVIsU0FBUyxJQUFJL1YsNkJBQTZCLENBQUNpSyxHQUFHLENBQUM4TCxTQUFTLENBQUMsRUFBRTtJQUM3RCxPQUFPLENBQUF0VCxhQUFBLEtBQUtsQyxrQkFBa0IsRUFBRTtFQUNsQztFQUNBLE9BQU9nVyxpQkFBaUI7QUFDMUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0MsMEJBQTBCQSxDQUFDQyxVQUF1QixFQUFFOUssR0FBVyxFQUFPO0VBQzdFLElBQU1qSCxNQUFNLEdBQUcrUixVQUFVLENBQUMvUixNQUF5QztFQUNuRSxJQUFJQSxNQUFNLElBQUlBLE1BQU0sQ0FBQ2lILEdBQUcsQ0FBQyxLQUFLekcsU0FBUyxFQUFFO0lBQ3ZDLE9BQU9SLE1BQU0sQ0FBQ2lILEdBQUcsQ0FBQztFQUNwQjtFQUNBLElBQU0rSyxRQUFRLEdBQ1hELFVBQVUsQ0FBNENyUyxjQUFjLElBQ3BFTSxNQUFNLElBQUlBLE1BQU0sQ0FBQ04sY0FBZTtFQUNuQyxJQUFJc1MsUUFBUSxJQUFJQyxPQUFBLENBQU9ELFFBQVEsTUFBSyxRQUFRLElBQUlBLFFBQVEsQ0FBQy9LLEdBQUcsQ0FBQyxLQUFLekcsU0FBUyxFQUFFO0lBQzNFLE9BQU93UixRQUFRLENBQUMvSyxHQUFHLENBQUM7RUFDdEI7RUFDQSxPQUFPekcsU0FBUztBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBUzBSLDJCQUEyQkEsQ0FDekNqRSxNQUE2QixFQUM3QjVMLFFBQWUsRUFDZjBQLFVBQXVCLEVBRVQ7RUFBQSxJQURkdkMsT0FBaUMsR0FBQWpQLFNBQUEsQ0FBQXJELE1BQUEsUUFBQXFELFNBQUEsUUFBQUMsU0FBQSxHQUFBRCxTQUFBLE1BQUcsQ0FBQyxDQUFDO0VBRXRDd0csTUFBTSxDQUFDb0wsTUFBTSxDQUFDOVAsUUFBUSxDQUFDM0MsY0FBYyxDQUFDLENBQUNsQixPQUFPLENBQUMsVUFBQTRULEtBQUEsRUFBeUI7SUFBQSxJQUF2QmpFLEtBQUssR0FBQWlFLEtBQUEsQ0FBTGpFLEtBQUs7TUFBRWtFLEtBQUssR0FBQUQsS0FBQSxDQUFMQyxLQUFLO01BQUVwTCxHQUFHLEdBQUFtTCxLQUFBLENBQUhuTCxHQUFHO0lBQ2hFLElBQU1xTCxVQUFVLEdBQUdSLDBCQUEwQixDQUFDQyxVQUFVLEVBQUU1RCxLQUFLLENBQUM7SUFDaEUsSUFBTW9FLFVBQVUsR0FBR1QsMEJBQTBCLENBQUNDLFVBQVUsRUFBRU0sS0FBSyxDQUFDO0lBQ2hFLElBQUlHLFVBQVU7SUFDZCxJQUFJRixVQUFVLGFBQVZBLFVBQVUsZUFBVkEsVUFBVSxDQUFFM0ksSUFBSSxFQUFFO01BQ3BCNkksVUFBVSxHQUFHdkUsTUFBTSxDQUFDekYsSUFBSSxDQUFDLFVBQUErSSxFQUFFO1FBQUEsT0FBSUEsRUFBRSxDQUFDNUgsSUFBSSxLQUFLMkksVUFBVSxDQUFDM0ksSUFBSTtNQUFBLEVBQUM7SUFDN0Q7SUFFQSxJQUFNOEksWUFBWSxHQUFBMVUsYUFBQSxDQUFBQSxhQUFBLEtBQ1p5VSxVQUFVLEdBQUFsVCxlQUFBLEtBQUs2TyxLQUFLLEVBQUdxRSxVQUFVLElBQUksQ0FBQyxDQUFDLEdBQ3ZDRCxVQUFVLEdBQUFqVCxlQUFBLEtBQUsrUyxLQUFLLEVBQUdFLFVBQVUsSUFBSSxDQUFDLENBQUMsQ0FDNUM7SUFDRCxJQUFJeEwsTUFBTSxDQUFDQyxJQUFJLENBQUN5TCxZQUFZLENBQUMsQ0FBQ3ZWLE1BQU0sRUFBRTtNQUNwQ21GLFFBQVEsQ0FBQ3FRLGlCQUFpQixDQUFDRCxZQUFZLENBQUM7SUFDMUM7SUFFQXBRLFFBQVEsQ0FBQ3NRLHFCQUFxQixDQUFDMUwsR0FBRyxDQUFDO0lBQ25DLElBQUl1SSxPQUFPLENBQUNXLFlBQVksRUFBRTtNQUFBLElBQUF5QyxxQkFBQTtNQUN4QixJQUFNQyxTQUFTLEdBQUdQLFVBQVUsYUFBVkEsVUFBVSx1QkFBVkEsVUFBVSxDQUFFM0ksSUFBSTtNQUNsQyxJQUFJa0osU0FBUyxJQUFJQSxTQUFTLE9BQUFELHFCQUFBLEdBQUt2USxRQUFRLENBQUNyQyxNQUFNLENBQUNtTyxLQUFLLENBQUMsY0FBQXlFLHFCQUFBLHVCQUF0QkEscUJBQUEsQ0FBd0JqSixJQUFJLEdBQUU7UUFDM0QsTUFBTSxJQUFJNkcsS0FBSyw0Q0FBQXRTLE1BQUEsQ0FBNENpUSxLQUFLLENBQUUsQ0FBQztNQUNyRTtJQUNGO0VBQ0YsQ0FBQyxDQUFDO0VBQ0YsT0FBTzlMLFFBQVE7QUFDakI7QUFVQSxPQUFPLFNBQVNKLHdCQUF3QkEsQ0FDdENqRSxRQUFrQixFQUNsQmtFLFlBQXNDLEVBR3RDO0VBQUEsSUFGQXBFLE1BQXVELEdBQUF5QyxTQUFBLENBQUFyRCxNQUFBLFFBQUFxRCxTQUFBLFFBQUFDLFNBQUEsR0FBQUQsU0FBQSxNQUFHLEVBQUU7RUFBQSxJQUM1RGlQLE9BQTZCLEdBQUFqUCxTQUFBLENBQUFyRCxNQUFBLE9BQUFxRCxTQUFBLE1BQUFDLFNBQUE7RUFFN0IsSUFBTXBELFNBQWtCLEdBQUcsRUFBRTtFQUM3QixJQUFNQyxNQUF1RCxHQUFHLEVBQUU7RUFFbEVTLE1BQU0sQ0FBQ1UsT0FBTyxDQUFDLFVBQUFzRyxLQUFLLEVBQUk7SUFBQSxJQUFBZ08sYUFBQTtJQUN0QixJQUFJQyxhQUEyQixHQUFHLElBQUk7SUFFdEMsSUFBSWpPLEtBQUssYUFBTEEsS0FBSyxnQkFBQWdPLGFBQUEsR0FBTGhPLEtBQUssQ0FBRTlFLE1BQU0sY0FBQThTLGFBQUEsZUFBYkEsYUFBQSxDQUFlbFYsTUFBTSxFQUFFO01BQ3pCLElBQUlJLFFBQVEsQ0FBQzhHLEtBQUssQ0FBQzlFLE1BQU0sQ0FBQ3BDLE1BQU0sQ0FBQyxFQUFFO1FBQ2pDO1FBQ0FtVixhQUFhLEdBQUdDLHFCQUFxQixDQUNuQ2hWLFFBQVEsQ0FBQzhHLEtBQUssQ0FBQzlFLE1BQU0sQ0FBQ3BDLE1BQU0sQ0FBQyxFQUM3QmtILEtBQUssRUFDTDVDLFlBQVksRUFDWnNOLE9BQ0YsQ0FBQztNQUNIO0lBQ0Y7SUFFQSxJQUFJdUQsYUFBYSxFQUFFO01BQ2pCM1YsU0FBUyxDQUFDbUMsSUFBSSxDQUFDd1QsYUFBYSxDQUFDO0lBQy9CLENBQUMsTUFBTTtNQUNMO01BQ0ExVixNQUFNLENBQUNrQyxJQUFJLENBQUN1RixLQUFLLENBQUM7SUFDcEI7RUFDRixDQUFDLENBQUM7RUFFRixPQUFPO0lBQUMxSCxTQUFTLEVBQVRBLFNBQVM7SUFBRUMsTUFBTSxFQUFOQTtFQUFNLENBQUM7QUFDNUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzRWLDZCQUE2QkEsQ0FBQzVRLFFBQVEsRUFBRTtFQUMvQztFQUNBLElBQUk2USxZQUFZLEdBQUc3USxRQUFRLENBQUM4USxlQUFlLENBQUMsQ0FBQztFQUM3QztFQUNBLElBQU1DLGFBQWEsR0FBRy9RLFFBQVEsQ0FBQ3JDLE1BQU0sQ0FBQ3FULFVBQVUsR0FDNUMsQ0FBQ2hSLFFBQVEsQ0FBQ2lSLG9CQUFvQixJQUFJLEVBQUUsRUFBRTlLLElBQUksQ0FDeEMsVUFBQStLLE9BQU87SUFBQSxPQUFJQSxPQUFPLENBQUN0TSxHQUFHLEtBQUs1RSxRQUFRLENBQUNyQyxNQUFNLENBQUNxVCxVQUFVO0VBQUEsQ0FDdkQsQ0FBQyxHQUNELElBQUk7RUFFUixJQUFJRCxhQUFhLEVBQUU7SUFDakI7SUFDQSxJQUFNSSxZQUFZLEdBQUcsQ0FBQ0osYUFBYSxDQUFDSyxZQUFZLElBQUksRUFBRSxFQUFFQyxPQUFPLENBQUMsVUFBQXZOLEtBQUs7TUFBQSxPQUFJQSxLQUFLLENBQUNzSixPQUFPLElBQUksRUFBRTtJQUFBLEVBQUM7SUFDN0YsSUFBTWtFLFlBQVksR0FBRyxJQUFJdE8sR0FBRyxDQUFDK04sYUFBYSxDQUFDaEQsZUFBZSxJQUFJLEVBQUUsQ0FBQztJQUNqRThDLFlBQVksR0FBRyxHQUFBaFYsTUFBQSxDQUFBQyxrQkFBQSxDQUNUaVYsYUFBYSxDQUFDaEQsZUFBZSxJQUFJLEVBQUUsR0FBQWpTLGtCQUFBLENBQ25DaVYsYUFBYSxDQUFDUSxlQUFlLElBQUksRUFBRSxHQUFBelYsa0JBQUEsQ0FDcENxVixZQUFZLEdBQ2ZySyxNQUFNLENBQUMsVUFBQ3VJLElBQUksRUFBRXpLLEdBQUcsRUFBSztNQUN0QixJQUFNNE0sR0FBRyxHQUFHWCxZQUFZLENBQUNqTSxHQUFHLENBQUM7TUFDN0IsSUFBSSxDQUFDNE0sR0FBRyxFQUFFO1FBQ1IsT0FBT25DLElBQUk7TUFDYjtNQUNBO01BQ0E7TUFDQSxJQUFJaUMsWUFBWSxDQUFDcE8sR0FBRyxDQUFDMEIsR0FBRyxDQUFDLEVBQUU7UUFDekIsSUFBaUI2TSxTQUFTLEdBQW9CRCxHQUFHLENBQTFDdkQsUUFBUTtVQUFnQnlELFdBQVcsR0FBQTNVLHdCQUFBLENBQUl5VSxHQUFHLEVBQUFHLFVBQUE7UUFDakQsT0FBQWpXLGFBQUEsQ0FBQUEsYUFBQSxLQUFXMlQsSUFBSSxPQUFBcFMsZUFBQSxLQUFHMkgsR0FBRyxFQUFHOE0sV0FBVztNQUNyQztNQUNBLE9BQUFoVyxhQUFBLENBQUFBLGFBQUEsS0FBVzJULElBQUksT0FBQXBTLGVBQUEsS0FBRzJILEdBQUcsRUFBQWxKLGFBQUEsQ0FBQUEsYUFBQSxLQUFPOFYsR0FBRztRQUFFdkQsUUFBUSxFQUFFO01BQUk7SUFDakQsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQ1I7RUFFQSxPQUFPNEMsWUFBWTtBQUNyQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTRixxQkFBcUJBLENBQ25DaUIsT0FBb0IsRUFDcEJsQyxVQUF1QixFQUN2QjdQLFlBQXNDLEVBRXhCO0VBQUEsSUFEZHNOLE9BQTRCLEdBQUFqUCxTQUFBLENBQUFyRCxNQUFBLFFBQUFxRCxTQUFBLFFBQUFDLFNBQUEsR0FBQUQsU0FBQSxNQUFHLENBQUMsQ0FBQztFQUVqQyxJQUFPME4sTUFBTSxHQUFnQmdHLE9BQU8sQ0FBN0JoRyxNQUFNO0lBQU1yUSxNQUFNLEdBQUlxVyxPQUFPLENBQXJCbFgsRUFBRTtFQUNqQixJQUFPbVgsSUFBSSxHQUFJbkMsVUFBVSxDQUFsQm1DLElBQUk7RUFDWCxJQUFPL0QsWUFBWSxHQUFJWCxPQUFPLENBQXZCVyxZQUFZO0VBQ25CO0VBQ0EsSUFBSSxDQUFDK0QsSUFBSSxJQUFJLENBQUNuTixNQUFNLENBQUNvTixTQUFTLENBQUNDLGNBQWMsQ0FBQ0MsSUFBSSxDQUFDblMsWUFBWSxFQUFFZ1MsSUFBSSxDQUFDLElBQUksQ0FBQ25DLFVBQVUsQ0FBQy9SLE1BQU0sRUFBRTtJQUM1RixJQUFJbVEsWUFBWSxFQUFFO01BQ2hCLE1BQU0sSUFBSUssS0FBSyw2QkFBQXRTLE1BQUEsQ0FBNEJnVyxJQUFJLDRCQUF3QixDQUFDO0lBQzFFO0lBQ0EsT0FBTyxJQUFJO0VBQ2I7RUFFQSxJQUFJN1IsUUFBUSxHQUFHLElBQUlILFlBQVksQ0FBQ2dTLElBQUksQ0FBQyxDQUFDO0lBQ3BDblgsRUFBRSxFQUFFZ1YsVUFBVSxDQUFDaFYsRUFBRTtJQUNqQmEsTUFBTSxFQUFOQSxNQUFNO0lBQ042UCxLQUFLLEVBQUVzRSxVQUFVLENBQUMvUixNQUFNLENBQUN5TixLQUFLO0lBQzlCdk8sS0FBSyxFQUFFNlMsVUFBVSxDQUFDL1IsTUFBTSxDQUFDZCxLQUFLO0lBQzlCb08sU0FBUyxFQUFFeUUsVUFBVSxDQUFDL1IsTUFBTSxDQUFDc04sU0FBUztJQUN0Q2dILE1BQU0sRUFBRXZDLFVBQVUsQ0FBQy9SLE1BQU0sQ0FBQ3NVLE1BQU07SUFDaENDLGtCQUFrQixFQUFFeEMsVUFBVSxDQUFDL1IsTUFBTSxDQUFDdVUsa0JBQWtCO0lBQ3hEbEIsVUFBVSxFQUFFdEIsVUFBVSxDQUFDL1IsTUFBTSxDQUFDcVQsVUFBVTtJQUN4Q21CLGNBQWMsRUFBRXpDLFVBQVUsQ0FBQy9SLE1BQU0sQ0FBQ3dVO0VBQ3BDLENBQUMsQ0FBQztFQUVGLElBQU10QixZQUFZLEdBQUdELDZCQUE2QixDQUFDNVEsUUFBUSxDQUFDO0VBRTVELElBQUkwRSxNQUFNLENBQUNDLElBQUksQ0FBQ2tNLFlBQVksQ0FBQyxFQUFFO0lBQzdCLElBQU16RCxPQUFPLEdBQUdKLHlCQUF5QixDQUN2Q3BCLE1BQU0sRUFDTjhELFVBQVUsQ0FBQy9SLE1BQU0sQ0FBQ3lQLE9BQU8sRUFDekJ5RCxZQUFZLEVBQ1oxRCxPQUNGLENBQUM7SUFDRCxJQUFJQyxPQUFPLEVBQUU7TUFDWHBOLFFBQVEsQ0FBQ3FRLGlCQUFpQixDQUFDO1FBQ3pCakQsT0FBTyxFQUFBMVIsYUFBQSxDQUFBQSxhQUFBLEtBQ0ZzRSxRQUFRLENBQUNyQyxNQUFNLENBQUN5UCxPQUFPLEdBQ3ZCQSxPQUFPO01BRWQsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxNQUFNLElBQUksQ0FBQ0QsT0FBTyxDQUFDck4sZ0JBQWdCLEVBQUU7TUFDcEMsT0FBTyxJQUFJO0lBQ2I7RUFDRjtFQUVBLElBQU1tUCxTQUFTLEdBQ2JTLFVBQVUsQ0FBQy9SLE1BQU0sQ0FBQ3NSLFNBQVMsSUFBSWpQLFFBQVEsQ0FBQ3JDLE1BQU0sQ0FBQ3NSLFNBQVMsR0FDcERQLHNCQUFzQixDQUFDOUMsTUFBTSxFQUFFNUwsUUFBUSxDQUFDckMsTUFBTSxDQUFDc1IsU0FBUyxFQUFFUyxVQUFVLENBQUMvUixNQUFNLENBQUNzUixTQUFTLEVBQUF2VCxhQUFBLENBQUFBLGFBQUEsS0FDaEZ5UixPQUFPO0lBQ1Y2QixTQUFTLEVBQUVVLFVBQVUsQ0FBQ21DO0VBQUksRUFDM0IsQ0FBQyxHQUNGMUUsT0FBTyxDQUFDcE4saUNBQWlDLEdBQ3pDd1AsK0JBQStCLENBQUNHLFVBQVUsQ0FBQ21DLElBQUksRUFBRTdSLFFBQVEsQ0FBQ3JDLE1BQU0sQ0FBQ3NSLFNBQVMsQ0FBQyxHQUMzRWpQLFFBQVEsQ0FBQ3JDLE1BQU0sQ0FBQ3NSLFNBQVM7O0VBRS9CO0VBQ0EsSUFBTW1ELGNBQWMsR0FDbEIxQyxVQUFVLENBQUNtQyxJQUFJLEtBQUssSUFBSSxHQUNwQjFZLGdDQUFnQyxDQUFDdVcsVUFBVSxDQUFDL1IsTUFBTSxDQUFDMFUsU0FBUyxDQUFDLEdBQzdEM0MsVUFBVSxDQUFDL1IsTUFBTSxDQUFDMFUsU0FBUztFQUNqQyxJQUFNQyxlQUFlLEdBQUd0UyxRQUFRLENBQUN1UyxlQUFlLENBQzlDdlMsUUFBUSxDQUFDckMsTUFBTSxDQUFDMFUsU0FBUyxFQUN6QkQsY0FBYyxJQUFJLENBQUMsQ0FBQyxFQUNwQjtJQUNFSSxXQUFXLEVBQUUsQ0FBQyxZQUFZLEVBQUUsa0JBQWtCO0VBQ2hELENBQ0YsQ0FBQzs7RUFFRDtFQUNBLElBQU1ILFNBQVMsR0FBR3JTLFFBQVEsQ0FBQ3lTLGlCQUFpQixHQUN4Q3pTLFFBQVEsQ0FBQ3lTLGlCQUFpQixDQUFDYixPQUFPLEVBQUVVLGVBQWUsQ0FBQyxHQUNwREEsZUFBZTtFQUVuQnRTLFFBQVEsQ0FBQ3FRLGlCQUFpQixDQUFDO0lBQ3pCZ0MsU0FBUyxFQUFUQSxTQUFTO0lBQ1RwRCxTQUFTLEVBQVRBO0VBQ0YsQ0FBQyxDQUFDOztFQUVGO0VBQ0E7RUFDQTtFQUNBalAsUUFBUSxHQUFHNlAsMkJBQTJCLENBQUNqRSxNQUFNLEVBQUU1TCxRQUFRLEVBQUUwUCxVQUFVLEVBQUV2QyxPQUFPLENBQUM7RUFFN0UsSUFBSVcsWUFBWSxFQUFFO0lBQ2hCLElBQUksQ0FBQzlOLFFBQVEsQ0FBQ3VLLGFBQWEsQ0FBQyxDQUFDLEVBQUU7TUFDN0IsTUFBTSxJQUFJNEQsS0FBSyxnQ0FBQXRTLE1BQUEsQ0FBZ0NtRSxRQUFRLENBQUN0RixFQUFFLENBQUUsQ0FBQztJQUMvRDtFQUNGO0VBRUEsT0FBT3NGLFFBQVE7QUFDakI7QUFFQSxPQUFPLFNBQVMwUyxXQUFXQSxDQUFxQnRZLEtBQVEsRUFBRXVZLFdBQXdCLEVBQUU7RUFBQSxJQUFBQyxvQkFBQTtFQUNsRixJQUFJLENBQUNELFdBQVcsRUFBRTtJQUNoQixPQUFPdlksS0FBSztFQUNkO0VBQ0EsT0FBQXNCLGFBQUEsQ0FBQUEsYUFBQSxLQUNLdEIsS0FBSztJQUNSeVksTUFBTSxFQUFBblgsYUFBQSxDQUFBQSxhQUFBLEtBQ0R0QixLQUFLLENBQUN5WSxNQUFNO01BQ2ZDLFFBQVEsS0FBQWpYLE1BQUEsQ0FBQUMsa0JBQUEsQ0FBTTFCLEtBQUssQ0FBQ3lZLE1BQU0sQ0FBQ0MsUUFBUSxHQUFBaFgsa0JBQUEsQ0FBTTZXLFdBQVcsQ0FBQ0csUUFBUSxJQUFJLEVBQUUsRUFBRTtNQUNyRTtNQUNBQyxPQUFPLEdBQUFILG9CQUFBLEdBQUVELFdBQVcsQ0FBQ0ksT0FBTyxjQUFBSCxvQkFBQSxjQUFBQSxvQkFBQSxHQUFJeFksS0FBSyxDQUFDeVksTUFBTSxDQUFDRTtJQUFPO0VBQ3JEO0FBRUw7QUFFQSxTQUFTQyxvQkFBb0JBLENBQUNqTixPQUFzQixFQUFlO0VBQ2pFLE9BQU9BLE9BQU8sQ0FBQ2UsTUFBTSxDQUNuQixVQUFDQyxHQUFHLEVBQUVrTSxVQUFVLEVBQUs7SUFDbkIsT0FBQXZYLGFBQUEsQ0FBQUEsYUFBQSxLQUNLcUwsR0FBRztNQUNOK0wsUUFBUSxLQUFBalgsTUFBQSxDQUFBQyxrQkFBQSxDQUFNaUwsR0FBRyxDQUFDK0wsUUFBUSxHQUFBaFgsa0JBQUEsQ0FBTW1YLFVBQVUsQ0FBQ0gsUUFBUSxJQUFJLEVBQUU7SUFBRTtFQUUvRCxDQUFDLEVBQ0Q7SUFDRTtJQUNBO0lBQ0E7SUFDQUEsUUFBUSxFQUFFLEVBQUU7SUFDWkMsT0FBTyxFQUFFaE4sT0FBTyxDQUFDakQsSUFBSSxDQUFDLFVBQUFzRCxDQUFDO01BQUEsT0FBSUEsQ0FBQyxhQUFEQSxDQUFDLHVCQUFEQSxDQUFDLENBQUUyTSxPQUFPO0lBQUE7RUFDdkMsQ0FDRixDQUFDO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVNHLG9CQUFvQkEsQ0FBQzlZLEtBQWUsRUFBRStZLGNBQXdCLEVBQVk7RUFDeEYsSUFBTTFPLE1BQU0sR0FBQS9JLGFBQUEsQ0FBQUEsYUFBQSxLQUNQdEIsS0FBSyxDQUFDdUIsUUFBUSxHQUNkd1gsY0FBYyxDQUNsQjtFQUVELElBQUl4WSxLQUFLLENBQUNDLE9BQU8sQ0FBQ1IsS0FBSyxDQUFDZ1osb0JBQW9CLENBQUMsRUFBRTtJQUM3QztJQUNBLElBQU1DLGFBQWEsR0FBRzNPLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDRixNQUFNLENBQUMsQ0FBQ3JJLE1BQU0sQ0FDOUMsVUFBQTFCLEVBQUU7TUFBQSxJQUFBNFkscUJBQUE7TUFBQSxPQUFJLEdBQUFBLHFCQUFBLEdBQUNsWixLQUFLLENBQUNnWixvQkFBb0IsY0FBQUUscUJBQUEsZUFBMUJBLHFCQUFBLENBQTRCalgsUUFBUSxDQUFDM0IsRUFBRSxDQUFDO0lBQUEsQ0FDakQsQ0FBQztJQUNELE9BQU8sR0FBQW1CLE1BQUEsQ0FBQUMsa0JBQUEsQ0FBSTFCLEtBQUssQ0FBQ2daLG9CQUFvQixHQUFBdFgsa0JBQUEsQ0FBS3VYLGFBQWEsR0FBRXZNLE1BQU0sQ0FDN0QsVUFBQ3VJLElBQUksRUFBRTlULE1BQU07TUFBQSxPQUFBRyxhQUFBLENBQUFBLGFBQUEsS0FDUjJULElBQUksR0FDSDVLLE1BQU0sQ0FBQ2xKLE1BQU0sQ0FBQyxHQUFBMEIsZUFBQSxLQUFLMUIsTUFBTSxFQUFHa0osTUFBTSxDQUFDbEosTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQUEsQ0FDcEQsRUFDRixDQUFDLENBQ0gsQ0FBQztFQUNIO0VBRUEsT0FBT2tKLE1BQU07QUFDZjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU21DLDZCQUE2QkEsQ0FBSTJNLEdBQVEsRUFBWTtFQUFBLElBQUFDLE1BQUE7RUFDNUQsSUFBTUMsTUFBTSxHQUFHLElBQUlDLEdBQUcsQ0FBQyxDQUFDO0VBQ3hCSCxHQUFHLENBQUNwWCxPQUFPLENBQUMsVUFBQTBDLEtBQUssRUFBSTtJQUNuQixJQUFJdkYsa0JBQWtCLENBQUN1RixLQUFLLENBQUMsRUFBRTtNQUM3QixJQUFJLENBQUM0VSxNQUFNLENBQUN2USxHQUFHLENBQUNyRSxLQUFLLENBQUMsRUFBRTtRQUN0QjRVLE1BQU0sQ0FBQ0UsR0FBRyxDQUFDOVUsS0FBSyxFQUFFLENBQUMsQ0FBQztNQUN0QixDQUFDLE1BQU07UUFDTDRVLE1BQU0sQ0FBQ0UsR0FBRyxDQUFDOVUsS0FBSyxFQUFFNFUsTUFBTSxDQUFDRyxHQUFHLENBQUMvVSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDMUM7SUFDRjtFQUNGLENBQUMsQ0FBQztFQUNGO0VBQ0EsSUFBSTRVLE1BQU0sQ0FBQ2pNLElBQUksS0FBSyxDQUFDLEVBQUU7SUFDckIsT0FBTyxJQUFJO0VBQ2I7RUFDQSxRQUFBZ00sTUFBQSxHQUFBMVgsa0JBQUEsQ0FBVzJYLE1BQU0sQ0FBQzdLLE9BQU8sQ0FBQyxDQUFDLGVBQUE0SyxNQUFBLHVCQUFwQkEsTUFBQSxDQUF1QjFNLE1BQU0sQ0FBQyxVQUFDQyxHQUFHLEVBQUU4TSxJQUFJO0lBQUEsT0FBTUEsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHOU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHOE0sSUFBSSxHQUFHOU0sR0FBRztFQUFBLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6RjtBQUVBLE9BQU8sSUFBTStNLGlCQUF1QyxHQUFHLENBQ3JEO0VBQ0VDLEtBQUssRUFBRTlTLFdBQVc7RUFDbEIrUyxJQUFJLEVBQUUsUUFBUTtFQUNkQyxXQUFXLEVBQUUsaUJBQWlCO0VBQzlCQyxhQUFhLEVBQUU7QUFDakIsQ0FBQyxFQUNEO0VBQ0VILEtBQUssRUFBRTVSLGVBQWU7RUFDdEI2UixJQUFJLEVBQUU7QUFDUixDQUFDLEVBQ0Q7RUFDRUQsS0FBSyxFQUFFNVosWUFBWTtFQUNuQjZaLElBQUksRUFBRSxTQUFTO0VBQ2ZDLFdBQVcsRUFBRSxrQkFBa0I7RUFDL0JDLGFBQWEsRUFBRSxxQkFBcUI7RUFDcENDLHVCQUF1QixFQUFFcFk7QUFDM0IsQ0FBQyxFQUNEO0VBQ0VnWSxLQUFLLEVBQUU1SixZQUFZO0VBQ25CNkosSUFBSSxFQUFFO0FBQ1IsQ0FBQyxFQUNEO0VBQ0VELEtBQUssRUFBRTFLLFdBQVc7RUFDbEIySyxJQUFJLEVBQUUsUUFBUTtFQUNkQyxXQUFXLEVBQUUsa0JBQWtCO0VBQy9CRSx1QkFBdUIsRUFBRWxLO0FBQzNCLENBQUMsRUFDRDtFQUNFOEosS0FBSyxFQUFFdkosZ0JBQWdCO0VBQ3ZCd0osSUFBSSxFQUFFLGFBQWE7RUFDbkJDLFdBQVcsRUFBRTtBQUNmLENBQUMsRUFDRDtFQUNFRixLQUFLLEVBQUV4UCxpQkFBaUI7RUFDeEJ5UCxJQUFJLEVBQUUsbUJBQW1CO0VBQ3pCQyxXQUFXLEVBQUUsdUJBQXVCO0VBQ3BDRSx1QkFBdUIsRUFBRWpNLDRCQUE0QjtFQUNyRGtNLFlBQVksRUFBRXZPLHdCQUF3QjtFQUN0Q3dPLGNBQWMsRUFBRXZPO0FBQ2xCLENBQUMsRUFDRDtFQUFDaU8sS0FBSyxFQUFFaEksa0JBQWtCO0VBQUVpSSxJQUFJLEVBQUUsZUFBZTtFQUFFSyxjQUFjLEVBQUVwSTtBQUEyQixDQUFDLEVBQy9GO0VBQ0U4SCxLQUFLLEVBQUU3SCxvQkFBb0I7RUFDM0I4SCxJQUFJLEVBQUUsaUJBQWlCO0VBQ3ZCSyxjQUFjLEVBQUVqSTtBQUNsQixDQUFDLEVBQ0Q7RUFBQzJILEtBQUssRUFBRXpMLGNBQWM7RUFBRTBMLElBQUksRUFBRSxXQUFXO0VBQUVDLFdBQVcsRUFBRTtBQUFxQixDQUFDLEVBQzlFO0VBQUNGLEtBQUssRUFBRTFILG9CQUFvQjtFQUFFMkgsSUFBSSxFQUFFLGlCQUFpQjtFQUFFSyxjQUFjLEVBQUUzSDtBQUF1QixDQUFDLEVBQy9GO0VBQUNxSCxLQUFLLEVBQUVyQixXQUFXO0VBQUVzQixJQUFJLEVBQUUsUUFBUTtFQUFFSyxjQUFjLEVBQUVyQjtBQUFvQixDQUFDLENBQzNFIiwiaWdub3JlTGlzdCI6W119