@kepler.gl/utils 3.1.0-alpha.3 → 3.1.0-alpha.4

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.
@@ -39,6 +39,7 @@ exports.isLayerAnimatable = isLayerAnimatable;
39
39
  exports.isSideFilter = isSideFilter;
40
40
  exports.isValidFilterValue = isValidFilterValue;
41
41
  exports.isValidTimeDomain = isValidTimeDomain;
42
+ exports.mergeFilterDomain = mergeFilterDomain;
42
43
  exports.mergeFilterDomainStep = mergeFilterDomainStep;
43
44
  exports.mergeFilterWithTimeline = mergeFilterWithTimeline;
44
45
  exports.mergeTimeDomains = mergeTimeDomains;
@@ -213,12 +214,14 @@ var filterValidators = (0, _defineProperty2["default"])({}, _constants.FILTER_TY
213
214
 
214
215
  /**
215
216
  * Default validate filter function
216
- * @param dataset
217
+ * @param datasets
218
+ * @param datasetId
217
219
  * @param filter
218
220
  * @return - {filter, dataset}
219
221
  */
220
- function validateFilter(dataset, filter) {
222
+ function validateFilter(datasets, datasetId, filter) {
221
223
  var _filter$view;
224
+ var dataset = datasets[datasetId];
222
225
  // match filter.dataId
223
226
  var failed = {
224
227
  dataset: dataset,
@@ -237,7 +240,7 @@ function validateFilter(dataset, filter) {
237
240
  name: (0, _commonUtils.toArray)(filter.name)
238
241
  });
239
242
  var fieldName = initializeFilter.name[filterDatasetIndex];
240
- var _applyFilterFieldName = applyFilterFieldName(initializeFilter, dataset, fieldName, filterDatasetIndex, {
243
+ var _applyFilterFieldName = applyFilterFieldName(initializeFilter, datasets, datasetId, fieldName, filterDatasetIndex, {
241
244
  mergeDomain: true
242
245
  }),
243
246
  updatedFilter = _applyFilterFieldName.filter,
@@ -261,13 +264,14 @@ function validateFilter(dataset, filter) {
261
264
  /**
262
265
  * Validate saved filter config with new data
263
266
  *
264
- * @param dataset
267
+ * @param datasets
268
+ * @param datasetId
265
269
  * @param filter - filter to be validate
266
270
  * @param layers - layers
267
271
  * @return validated filter
268
272
  */
269
- function validateFilterWithData(dataset, filter, layers) {
270
- return filter.type && Object.prototype.hasOwnProperty.call(filterValidators, filter.type) ? filterValidators[filter.type](dataset, filter, layers) : validateFilter(dataset, filter);
273
+ function validateFilterWithData(datasets, datasetId, filter, layers) {
274
+ return filter.type && Object.prototype.hasOwnProperty.call(filterValidators, filter.type) ? filterValidators[filter.type](datasets[datasetId], filter, layers) : validateFilter(datasets, datasetId, filter);
271
275
  }
272
276
 
273
277
  /**
@@ -875,20 +879,22 @@ function applyFiltersToDatasets(datasetIds, datasets, filters, layers) {
875
879
  /**
876
880
  * Applies a new field name value to filter and update both filter and dataset
877
881
  * @param filter - to be applied the new field name on
878
- * @param dataset - dataset the field belongs to
882
+ * @param datasets - All datasets
883
+ * @param datasetId - Id of the dataset the field belongs to
879
884
  * @param fieldName - field.name
880
885
  * @param filterDatasetIndex - field.name
881
886
  * @param option
882
887
  * @return - {filter, datasets}
883
888
  */
884
- function applyFilterFieldName(filter, dataset, fieldName) {
885
- var filterDatasetIndex = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;
886
- var option = arguments.length > 4 ? arguments[4] : undefined;
889
+ function applyFilterFieldName(filter, datasets, datasetId, fieldName) {
890
+ var filterDatasetIndex = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;
891
+ var option = arguments.length > 5 ? arguments[5] : undefined;
887
892
  // using filterDatasetIndex we can filter only the specified dataset
888
893
  var mergeDomain = option && Object.prototype.hasOwnProperty.call(option, 'mergeDomain') ? option.mergeDomain : false;
889
- var fieldIndex = dataset.getColumnFieldIdx(fieldName);
894
+ var dataset = datasets[datasetId];
895
+ var fieldIndex = dataset === null || dataset === void 0 ? void 0 : dataset.getColumnFieldIdx(fieldName);
890
896
  // if no field with same name is found, move to the next datasets
891
- if (fieldIndex === -1) {
897
+ if (!dataset || fieldIndex === -1) {
892
898
  // throw new Error(`fieldIndex not found. Dataset must contain a property with name: ${fieldName}`);
893
899
  return {
894
900
  filter: null,
@@ -898,12 +904,24 @@ function applyFilterFieldName(filter, dataset, fieldName) {
898
904
 
899
905
  // TODO: validate field type
900
906
  var filterProps = dataset.getColumnFilterProps(fieldName);
901
- var newFilter = _objectSpread(_objectSpread({}, mergeDomain ? mergeFilterDomainStep(filter, filterProps) : _objectSpread(_objectSpread({}, filter), filterProps)), {}, {
907
+ var newFilter = _objectSpread(_objectSpread(_objectSpread({}, filter), filterProps), {}, {
902
908
  name: Object.assign((0, _toConsumableArray2["default"])((0, _commonUtils.toArray)(filter.name)), (0, _defineProperty2["default"])({}, filterDatasetIndex, fieldName)),
903
909
  fieldIdx: Object.assign((0, _toConsumableArray2["default"])((0, _commonUtils.toArray)(filter.fieldIdx)), (0, _defineProperty2["default"])({}, filterDatasetIndex, fieldIndex))
904
910
  }, filter.plotType ? {
905
911
  plotType: filter.plotType
906
912
  } : {});
913
+ if (mergeDomain) {
914
+ var _mergeFilterDomain;
915
+ var domainSteps = (_mergeFilterDomain = mergeFilterDomain(newFilter, datasets)) !== null && _mergeFilterDomain !== void 0 ? _mergeFilterDomain : {};
916
+ if (domainSteps) {
917
+ var domain = domainSteps.domain,
918
+ step = domainSteps.step;
919
+ newFilter.domain = domain;
920
+ if (newFilter.step !== step) {
921
+ newFilter.step = step;
922
+ }
923
+ }
924
+ }
907
925
 
908
926
  // TODO: if we don't set filter value in filterProps, we don't need to do this
909
927
  if (filterDatasetIndex > 0) {
@@ -918,6 +936,24 @@ function applyFilterFieldName(filter, dataset, fieldName) {
918
936
  };
919
937
  }
920
938
 
939
+ /**
940
+ * Merge the domains of a filter in case it applies to multiple datasets
941
+ */
942
+ function mergeFilterDomain(filter, datasets) {
943
+ var _filter$dataId;
944
+ var domainSteps = null;
945
+ if (!(filter !== null && filter !== void 0 && (_filter$dataId = filter.dataId) !== null && _filter$dataId !== void 0 && _filter$dataId.length)) {
946
+ return filter;
947
+ }
948
+ filter.dataId.forEach(function (filterDataId, idx) {
949
+ var _domainSteps;
950
+ var dataset = datasets[filterDataId];
951
+ var filterProps = dataset.getColumnFilterProps(filter.name[idx]);
952
+ domainSteps = mergeFilterDomainStep((_domainSteps = domainSteps) !== null && _domainSteps !== void 0 ? _domainSteps : {}, filterProps);
953
+ });
954
+ return domainSteps;
955
+ }
956
+
921
957
  /**
922
958
  * Merge one filter with other filter prop domain
923
959
  */
@@ -1048,7 +1084,7 @@ function validateFiltersUpdateDatasets(state) {
1048
1084
  return l.config.dataId === dataset.id;
1049
1085
  });
1050
1086
  var toValidate = acc.validatedFilter || filterToValidate;
1051
- var _validateFilterWithDa = validateFilterWithData(acc.augmentedDatasets[datasetId] || dataset, toValidate, datasetLayers),
1087
+ var _validateFilterWithDa = validateFilterWithData(_objectSpread(_objectSpread(_objectSpread({}, updatedDatasets), acc.augmentedDatasets), {}, (0, _defineProperty2["default"])({}, datasetId, acc.augmentedDatasets[datasetId] || dataset)), datasetId, toValidate, datasetLayers),
1052
1088
  updatedFilter = _validateFilterWithDa.filter,
1053
1089
  updatedDataset = _validateFilterWithDa.dataset;
1054
1090
  if (updatedFilter) {
@@ -1211,4 +1247,4 @@ function getFilterScaledTimeline(filter, animationConfig) {
1211
1247
  }
1212
1248
  return scaleSourceDomainToDestination(animationConfig.domain, filter.domain);
1213
1249
  }
1214
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfa2V5bWlycm9yIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfbG9kYXNoIiwiX2xvZGFzaDIiLCJfZDNBcnJheSIsIl9ib29sZWFuV2l0aGluIiwiX2hlbHBlcnMiLCJfZGVjaW1hbCIsIl9jb25zdGFudHMiLCJTY2FsZVV0aWxzIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfaDNKcyIsIl9jb21tb25VdGlscyIsIl91dGlscyIsIl9kYXRhVXRpbHMiLCJfcGxvdCIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIl90b1Byb3BlcnR5S2V5IiwiX3RvUHJpbWl0aXZlIiwiU3ltYm9sIiwidG9QcmltaXRpdmUiLCJUeXBlRXJyb3IiLCJTdHJpbmciLCJOdW1iZXIiLCJvd25LZXlzIiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkdXJhdGlvblNlY29uZCIsImV4cG9ydHMiLCJkdXJhdGlvbk1pbnV0ZSIsImR1cmF0aW9uSG91ciIsImR1cmF0aW9uRGF5IiwiZHVyYXRpb25XZWVrIiwiZHVyYXRpb25ZZWFyIiwiVGltZXN0YW1wU3RlcE1hcCIsIm1heCIsInN0ZXAiLCJQT1NJVElWRV9JTkZJTklUWSIsIkZJTFRFUl9VUERBVEVSX1BST1BTIiwia2V5TWlycm9yIiwiZGF0YUlkIiwibmFtZSIsImxheWVySWQiLCJGSUxURVJfQ09NUE9ORU5UUyIsIkZJTFRFUl9UWVBFUyIsInNlbGVjdCIsIm11bHRpU2VsZWN0IiwidGltZVJhbmdlIiwicmFuZ2UiLCJwb2x5Z29uIiwiREVGQVVMVF9GSUxURVJfU1RSVUNUVVJFIiwiaWQiLCJlbmFibGVkIiwiZml4ZWREb21haW4iLCJ2aWV3IiwiRklMVEVSX1ZJRVdfVFlQRVMiLCJzaWRlIiwiaXNBbmltYXRpbmciLCJhbmltYXRpb25XaW5kb3ciLCJBTklNQVRJT05fV0lORE9XIiwiZnJlZSIsInNwZWVkIiwidHlwZSIsImZpZWxkSWR4IiwiZG9tYWluIiwidmFsdWUiLCJwbG90VHlwZSIsIlBMT1RfVFlQRVMiLCJoaXN0b2dyYW0iLCJ5QXhpcyIsImdwdSIsIkZJTFRFUl9JRF9MRU5HVEgiLCJMQVlFUl9GSUxURVJTIiwiZ2V0RGVmYXVsdEZpbHRlciIsIl9yZWYiLCJ1bmRlZmluZWQiLCJ0b0FycmF5IiwiZ2VuZXJhdGVIYXNoSWQiLCJzaG91bGRBcHBseUZpbHRlciIsImRhdGFzZXRJZCIsImRhdGFJZHMiLCJpbmNsdWRlcyIsInZhbGlkYXRlUG9seWdvbkZpbHRlciIsImRhdGFzZXQiLCJsYXllcnMiLCJmYWlsZWQiLCJpc1ZhbGlkRmlsdGVyVmFsdWUiLCJpc1ZhbGlkRGF0YXNldCIsImxheWVyIiwiZmluZCIsImwiLCJmaWx0ZXJWYWxpZGF0b3JzIiwidmFsaWRhdGVGaWx0ZXIiLCJfZmlsdGVyJHZpZXciLCJmaWx0ZXJEYXRhSWQiLCJmaWx0ZXJEYXRhc2V0SW5kZXgiLCJpbmRleE9mIiwiaW5pdGlhbGl6ZUZpbHRlciIsImZpZWxkTmFtZSIsIl9hcHBseUZpbHRlckZpZWxkTmFtZSIsImFwcGx5RmlsdGVyRmllbGROYW1lIiwibWVyZ2VEb21haW4iLCJ1cGRhdGVkRmlsdGVyIiwidXBkYXRlZERhdGFzZXQiLCJ2YWxpZGF0ZUZpbHRlcllBeGlzIiwidmFsaWRhdGVGaWx0ZXJXaXRoRGF0YSIsInByb3RvdHlwZSIsImZpZWxkcyIsIl9maWx0ZXIiLCJtYXRjaGVkQXhpcyIsIl9yZWYyIiwiZ2V0RmlsdGVyUHJvcHMiLCJmaWVsZCIsImZpZWxkRG9tYWluIiwiZmlsdGVyUHJvcHMiLCJmaWVsZFR5cGUiLCJBTExfRklFTERfVFlQRVMiLCJyZWFsIiwiaW50ZWdlciIsInR5cGVPcHRpb25zIiwic3RyaW5nIiwiaDMiLCJkYXRlIiwidGltZXN0YW1wIiwiZW5sYXJnZWQiLCJnZXRQb2x5Z29uRmlsdGVyRnVuY3RvciIsImRhdGFDb250YWluZXIiLCJnZXRQb3NpdGlvbiIsImdldFBvc2l0aW9uQWNjZXNzb3IiLCJMQVlFUl9UWVBFUyIsInBvaW50IiwiaWNvbiIsImRhdGEiLCJwb3MiLCJldmVyeSIsImlzRmluaXRlIiwiaXNJblBvbHlnb24iLCJhcmMiLCJsaW5lIiwiaGV4YWdvbklkIiwiZGF0YVRvRmVhdHVyZSIsImNlbnRyb2lkcyIsImNlbnRyb2lkIiwiaW5kZXgiLCJoM0lzVmFsaWQiLCJnZXRDZW50cm9pZCIsImdlb2pzb24iLCJjYW5BcHBseUZlYXR1cmVGaWx0ZXIiLCJmZWF0dXJlIiwiQm9vbGVhbiIsImdlb21ldHJ5IiwiZ2V0RmlsdGVyRnVuY3Rpb24iLCJ2YWx1ZUFjY2Vzc29yIiwiZGVmYXVsdEZ1bmMiLCJpc0luUmFuZ2UiLCJtYXBwZWRWYWx1ZSIsImFjY2Vzc29yIiwiQXJyYXkiLCJpc0FycmF5IiwidGltZVRvVW5peE1pbGxpIiwiZm9ybWF0IiwibGF5ZXJGaWx0ZXJGdW5jdGlvbnMiLCJtYXAiLCJjb25maWciLCJmaWx0ZXJGdW5jIiwidXBkYXRlRmlsdGVyRGF0YUlkIiwiZmlsdGVyRGF0YUJ5RmlsdGVyVHlwZXMiLCJfcmVmMyIsImR5bmFtaWNEb21haW5GaWx0ZXJzIiwiY3B1RmlsdGVycyIsImZpbHRlckZ1bmNzIiwiZmlsdGVyZWRJbmRleEZvckRvbWFpbiIsImZpbHRlcmVkSW5kZXgiLCJmaWx0ZXJDb250ZXh0IiwiZmlsdGVyRnVuY0NhbGxlciIsIm51bVJvd3MiLCJtYXRjaEZvckRvbWFpbiIsIm1hdGNoRm9yUmVuZGVyIiwiZ2V0RmlsdGVyUmVjb3JkIiwiZmlsdGVycyIsIm9wdCIsImZpbHRlclJlY29yZCIsImR5bmFtaWNEb21haW4iLCJjcHUiLCJmIiwiaWdub3JlRG9tYWluIiwiY3B1T25seSIsImRpZmZGaWx0ZXJzIiwib2xkRmlsdGVyUmVjb3JkIiwiZmlsdGVyQ2hhbmdlZCIsImVudHJpZXMiLCJfcmVmNCIsIl9yZWY1IiwiX3NsaWNlZFRvQXJyYXkyIiwicmVjb3JkIiwiaXRlbXMiLCJvbGRGaWx0ZXIiLCJwcm9wIiwiY29uY2F0IiwiYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbiIsIl9yZWY2IiwiZCIsIm5vdE51bGxvclVuZGVmaW5lZCIsImZpbHRlcmVkVmFsdWUiLCJnZXROdW1lcmljRmllbGREb21haW4iLCJtYXBJbmRleCIsImdldExpbmVhckRvbWFpbiIsImRpZmYiLCJnZXROdW1lcmljU3RlcFNpemUiLCJmb3JtYXROdW1iZXJCeVN0ZXAiLCJNYXRoIiwiYWJzIiwieCIsImV4cG9uZW50aWFsRm9ybSIsInRvRXhwb25lbnRpYWwiLCJleHBvbmVudCIsInBhcnNlRmxvYXQiLCJzcGxpdCIsIkRlY2ltYWwiLCJwb3ciLCJ0b051bWJlciIsImdldFRpbWVzdGFtcEZpZWxkRG9tYWluIiwiZGVmYXVsdFRpbWVGb3JtYXQiLCJnZXRUaW1lV2lkZ2V0VGl0bGVGb3JtYXR0ZXIiLCJlbnRyeSIsInZhbCIsImJvdW5kIiwiZmxvb3IiLCJjZWlsIiwiYm9vbGVhbldpdGhpbiIsInR1cmZQb2ludCIsImlzVmFsaWRUaW1lRG9tYWluIiwiaXNGaWx0ZXJWYWxpZFRvU2F2ZSIsInYiLCJpc05hTiIsImlucHV0IiwiY29vcmRpbmF0ZXMiLCJnZXRDb2x1bW5GaWx0ZXJQcm9wcyIsIl9maWx0ZXIkcGxvdFR5cGUiLCJfZmlsdGVyJG1hcHBlZFZhbHVlIiwiZ2V0Q29sdW1uRmllbGRJZHgiLCJsaW5lQ2hhcnQiLCJzZXJpZXMiLCJyb3ciLCJyb3dJbmRleCIsInkiLCJ2YWx1ZUF0IiwiX3JlZjciLCJzb3J0IiwiYiIsImFzY2VuZGluZyIsInlEb21haW4iLCJleHRlbnQiLCJ4RG9tYWluIiwidXBkYXRlRmlsdGVyUGxvdCIsImRhdGFzZXRzIiwicmVtb3ZlRmlsdGVyUGxvdCIsInVwZGF0ZVRpbWVGaWx0ZXJQbG90VHlwZSIsInVwZGF0ZVJhbmdlRmlsdGVyUGxvdFR5cGUiLCJhcHBseUZpbHRlcnNUb0RhdGFzZXRzIiwiZGF0YXNldElkcyIsInJlZHVjZSIsImFjYyIsImxheWVyc1RvRmlsdGVyIiwiYXBwbGllZEZpbHRlcnMiLCJ0YWJsZSIsImZpbHRlclRhYmxlIiwib3B0aW9uIiwiZmllbGRJbmRleCIsIm5ld0ZpbHRlciIsIm1lcmdlRmlsdGVyRG9tYWluU3RlcCIsImFzc2lnbiIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJzb3J0ZWREb21haW4iLCJ1bmlxdWUiLCJmZWF0dXJlVG9GaWx0ZXJWYWx1ZSIsImZpbHRlcklkIiwicHJvcGVydGllcyIsImdldEZpbHRlcklkSW5GZWF0dXJlIiwiZ2VuZXJhdGVQb2x5Z29uRmlsdGVyIiwibGFiZWwiLCJpc1Zpc2libGUiLCJmaWx0ZXJEYXRhc2V0Q1BVIiwic3RhdGUiLCJkYXRhc2V0RmlsdGVycyIsImNwdUZpbHRlcmVkRGF0YXNldCIsImZpbHRlclRhYmxlQ1BVIiwidmFsaWRhdGVGaWx0ZXJzVXBkYXRlRGF0YXNldHMiLCJmaWx0ZXJzVG9WYWxpZGF0ZSIsInZhbGlkYXRlZCIsInVwZGF0ZWREYXRhc2V0cyIsImZpbHRlclRvVmFsaWRhdGUiLCJpc01lcmdpbmdEYXRhc2V0cyIsIl9kYXRhc2V0SWRzJHJlZHVjZSIsImRhdGFzZXRMYXllcnMiLCJ0b1ZhbGlkYXRlIiwidmFsaWRhdGVkRmlsdGVyIiwiX3ZhbGlkYXRlRmlsdGVyV2l0aERhIiwiYXVnbWVudGVkRGF0YXNldHMiLCJhcHBseVRvRGF0YXNldHMiLCJpc0VxdWFsIiwic3luY2VkV2l0aExheWVyVGltZWxpbmUiLCJhbmltYXRhYmxlTGF5ZXJzIiwiZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMiLCJtZXJnZVRpbWVEb21haW5zIiwiYW5pbWF0aW9uIiwibmV4dEZpbHRlciIsInJhbmdlRmlsdGVyIiwiYmlucyIsIl9yYW5nZUZpbHRlciRiaW5zIiwiX2RlbGV0ZSIsIm5leHRCaW5zIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzMiIsInRpbWVGaWx0ZXIiLCJ0aW1lQmlucyIsIl90aW1lRmlsdGVyJHRpbWVCaW5zIiwiX19kZWxldGUiLCJuZXh0VGltZUJpbnMiLCJnZXRUaW1lV2lkZ2V0SGludEZvcm1hdHRlciIsImlzU2lkZUZpbHRlciIsImRvbWFpbnMiLCJfZG9tYWluJCIsIl9kb21haW4kMiIsIm1pbiIsIkluZmluaXR5IiwiaXNMYXllckFuaW1hdGFibGUiLCJfbGF5ZXIkY29uZmlnJGFuaW1hdGkiLCJnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVyc0J5VHlwZSIsImdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMiLCJfbCRjb25maWckYW5pbWF0aW9uIiwidGltZVN0ZXBzIiwibWVyZ2VGaWx0ZXJXaXRoVGltZWxpbmUiLCJhbmltYXRpb25Db25maWciLCJzY2FsZVNvdXJjZURvbWFpblRvRGVzdGluYXRpb24iLCJzb3VyY2VEb21haW4iLCJkZXN0aW5hdGlvbkRvbWFpbiIsInNvdXJjZURvbWFpblNpemUiLCJkZXN0aW5hdGlvbkRvbWFpblNpemUiLCJzY2FsZWRTb3VyY2VEb21haW5TaXplIiwib2Zmc2V0Iiwic2NhbGVkT2Zmc2V0IiwiZ2V0RmlsdGVyU2NhbGVkVGltZWxpbmUiXSwic291cmNlcyI6WyIuLi9zcmMvZmlsdGVyLXV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBrZXlNaXJyb3IgZnJvbSAna2V5bWlycm9yJztcbmltcG9ydCBnZXQgZnJvbSAnbG9kYXNoLmdldCc7XG5pbXBvcnQgaXNFcXVhbCBmcm9tICdsb2Rhc2guaXNlcXVhbCc7XG5pbXBvcnQge2FzY2VuZGluZywgZXh0ZW50fSBmcm9tICdkMy1hcnJheSc7XG5cbmltcG9ydCBib29sZWFuV2l0aGluIGZyb20gJ0B0dXJmL2Jvb2xlYW4td2l0aGluJztcbmltcG9ydCB7cG9pbnQgYXMgdHVyZlBvaW50fSBmcm9tICdAdHVyZi9oZWxwZXJzJztcbmltcG9ydCB7RGVjaW1hbH0gZnJvbSAnZGVjaW1hbC5qcyc7XG5pbXBvcnQge1xuICBBTExfRklFTERfVFlQRVMsXG4gIEZJTFRFUl9UWVBFUyxcbiAgQU5JTUFUSU9OX1dJTkRPVyxcbiAgUExPVF9UWVBFUyxcbiAgTEFZRVJfVFlQRVMsXG4gIEZJTFRFUl9WSUVXX1RZUEVTXG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbi8vIGltcG9ydCB7VmlzU3RhdGV9IGZyb20gJ0BrZXBsZXIuZ2wvc2NoZW1hcyc7XG5pbXBvcnQgKiBhcyBTY2FsZVV0aWxzIGZyb20gJy4vZGF0YS1zY2FsZS11dGlscyc7XG5pbXBvcnQge2gzSXNWYWxpZH0gZnJvbSAnaDMtanMnO1xuXG5pbXBvcnQge1xuICBFbnRyaWVzLFxuICBGaWVsZCxcbiAgUGFyc2VkRmlsdGVyLFxuICBGaWx0ZXIsXG4gIEZpbHRlckJhc2UsXG4gIFBvbHlnb25GaWx0ZXIsXG4gIEZpZWxkRG9tYWluLFxuICBUaW1lUmFuZ2VGaWVsZERvbWFpbixcbiAgRmVhdHVyZSxcbiAgRmVhdHVyZVZhbHVlLFxuICBMaW5lQ2hhcnQsXG4gIFJhbmdlRmlsdGVyLFxuICBUaW1lUmFuZ2VGaWx0ZXIsXG4gIFJhbmdlRmllbGREb21haW4sXG4gIEZpbHRlckRhdGFzZXRPcHQsXG4gIEZpbHRlclJlY29yZCxcbiAgQW5pbWF0aW9uQ29uZmlnXG59IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuXG5pbXBvcnQge2dlbmVyYXRlSGFzaElkLCB0b0FycmF5LCBub3ROdWxsb3JVbmRlZmluZWQsIGdldENlbnRyb2lkfSBmcm9tICdAa2VwbGVyLmdsL2NvbW1vbi11dGlscyc7XG5pbXBvcnQge0RhdGFDb250YWluZXJJbnRlcmZhY2V9IGZyb20gJy4vZGF0YS1jb250YWluZXItaW50ZXJmYWNlJztcbmltcG9ydCB7c2V0fSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7dGltZVRvVW5peE1pbGxpLCB1bmlxdWV9IGZyb20gJy4vZGF0YS11dGlscyc7XG5pbXBvcnQge3VwZGF0ZVRpbWVGaWx0ZXJQbG90VHlwZSwgdXBkYXRlUmFuZ2VGaWx0ZXJQbG90VHlwZX0gZnJvbSAnLi9wbG90JztcbmltcG9ydCB7S2VwbGVyVGFibGVNb2RlbH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBkdXJhdGlvblNlY29uZCA9IDEwMDA7XG5leHBvcnQgY29uc3QgZHVyYXRpb25NaW51dGUgPSBkdXJhdGlvblNlY29uZCAqIDYwO1xuZXhwb3J0IGNvbnN0IGR1cmF0aW9uSG91ciA9IGR1cmF0aW9uTWludXRlICogNjA7XG5leHBvcnQgY29uc3QgZHVyYXRpb25EYXkgPSBkdXJhdGlvbkhvdXIgKiAyNDtcbmV4cG9ydCBjb25zdCBkdXJhdGlvbldlZWsgPSBkdXJhdGlvbkRheSAqIDc7XG5leHBvcnQgY29uc3QgZHVyYXRpb25ZZWFyID0gZHVyYXRpb25EYXkgKiAzNjU7XG5cbi8vIFRPRE8gaXNvbGF0ZSB0eXBlcyAtIGRlcGVuZHMgb24gQGtlcGxlci5nbC9zY2hlbWFzXG50eXBlIFZpc1N0YXRlID0gYW55O1xuXG5leHBvcnQgdHlwZSBGaWx0ZXJSZXN1bHQgPSB7XG4gIGZpbHRlcmVkSW5kZXhGb3JEb21haW4/OiBudW1iZXJbXTtcbiAgZmlsdGVyZWRJbmRleD86IG51bWJlcltdO1xufTtcblxuZXhwb3J0IHR5cGUgRmlsdGVyQ2hhbmdlZCA9IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIFtrZXkgaW4ga2V5b2YgRmlsdGVyUmVjb3JkXToge1xuICAgIFtrZXk6IHN0cmluZ106ICdhZGRlZCcgfCAnZGVsZXRlZCcgfCAnbmFtZV9jaGFuZ2VkJyB8ICd2YWx1ZV9jaGFuZ2VkJyB8ICdkYXRhSWRfY2hhbmdlZCc7XG4gIH0gfCBudWxsO1xufTtcblxuZXhwb3J0IHR5cGUgZGF0YVZhbHVlQWNjZXNzb3IgPSAoZGF0YToge2luZGV4OiBudW1iZXJ9KSA9PiBudW1iZXIgfCBudWxsO1xuXG5leHBvcnQgY29uc3QgVGltZXN0YW1wU3RlcE1hcCA9IFtcbiAge21heDogMSwgc3RlcDogMC4wNX0sXG4gIHttYXg6IDEwLCBzdGVwOiAwLjF9LFxuICB7bWF4OiAxMDAsIHN0ZXA6IDF9LFxuICB7bWF4OiA1MDAsIHN0ZXA6IDV9LFxuICB7bWF4OiAxMDAwLCBzdGVwOiAxMH0sXG4gIHttYXg6IDUwMDAsIHN0ZXA6IDUwfSxcbiAge21heDogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLCBzdGVwOiAxMDAwfVxuXTtcblxuZXhwb3J0IGNvbnN0IEZJTFRFUl9VUERBVEVSX1BST1BTID0ga2V5TWlycm9yKHtcbiAgZGF0YUlkOiBudWxsLFxuICBuYW1lOiBudWxsLFxuICBsYXllcklkOiBudWxsXG59KTtcblxuZXhwb3J0IGNvbnN0IEZJTFRFUl9DT01QT05FTlRTID0ge1xuICBbRklMVEVSX1RZUEVTLnNlbGVjdF06ICdTaW5nbGVTZWxlY3RGaWx0ZXInLFxuICBbRklMVEVSX1RZUEVTLm11bHRpU2VsZWN0XTogJ011bHRpU2VsZWN0RmlsdGVyJyxcbiAgW0ZJTFRFUl9UWVBFUy50aW1lUmFuZ2VdOiAnVGltZVJhbmdlRmlsdGVyJyxcbiAgW0ZJTFRFUl9UWVBFUy5yYW5nZV06ICdSYW5nZUZpbHRlcicsXG4gIFtGSUxURVJfVFlQRVMucG9seWdvbl06ICdQb2x5Z29uRmlsdGVyJ1xufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfRklMVEVSX1NUUlVDVFVSRSA9IHtcbiAgZGF0YUlkOiBbXSwgLy8gW3N0cmluZ11cbiAgaWQ6IG51bGwsXG4gIGVuYWJsZWQ6IHRydWUsXG5cbiAgLy8gdGltZSByYW5nZSBmaWx0ZXIgc3BlY2lmaWNcbiAgZml4ZWREb21haW46IGZhbHNlLFxuICB2aWV3OiBGSUxURVJfVklFV19UWVBFUy5zaWRlLFxuICBpc0FuaW1hdGluZzogZmFsc2UsXG4gIGFuaW1hdGlvbldpbmRvdzogQU5JTUFUSU9OX1dJTkRPVy5mcmVlLFxuICBzcGVlZDogMSxcblxuICAvLyBmaWVsZCBzcGVjaWZpY1xuICBuYW1lOiBbXSwgLy8gc3RyaW5nXG4gIHR5cGU6IG51bGwsXG4gIGZpZWxkSWR4OiBbXSwgLy8gW2ludGVnZXJdXG4gIGRvbWFpbjogbnVsbCxcbiAgdmFsdWU6IG51bGwsXG5cbiAgLy8gcGxvdFxuICBwbG90VHlwZToge1xuICAgIHR5cGU6IFBMT1RfVFlQRVMuaGlzdG9ncmFtXG4gIH0sXG4gIHlBeGlzOiBudWxsLFxuXG4gIC8vIG1vZGVcbiAgZ3B1OiBmYWxzZVxufTtcblxuZXhwb3J0IGNvbnN0IEZJTFRFUl9JRF9MRU5HVEggPSA0O1xuXG5leHBvcnQgY29uc3QgTEFZRVJfRklMVEVSUyA9IFtGSUxURVJfVFlQRVMucG9seWdvbl07XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgZmlsdGVyIHdpdGggYSBkYXRhc2V0IGlkIGFzIGRhdGFJZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdEZpbHRlcih7XG4gIGRhdGFJZCxcbiAgaWRcbn06IHtcbiAgZGF0YUlkPzogc3RyaW5nIHwgbnVsbCB8IHN0cmluZ1tdO1xuICBpZD86IHN0cmluZztcbn0gPSB7fSk6IEZpbHRlckJhc2U8TGluZUNoYXJ0PiB7XG4gIHJldHVybiB7XG4gICAgLi4uREVGQVVMVF9GSUxURVJfU1RSVUNUVVJFLFxuICAgIC8vIHN0b3JlIGl0IGFzIGRhdGFJZCBhbmQgaXQgY291bGQgYmUgb25lIG9yIG1hbnlcbiAgICBkYXRhSWQ6IGRhdGFJZCA/IHRvQXJyYXkoZGF0YUlkKSA6IFtdLFxuICAgIGlkOiBpZCB8fCBnZW5lcmF0ZUhhc2hJZChGSUxURVJfSURfTEVOR1RIKVxuICB9O1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGEgZmlsdGVyIGlzIHZhbGlkIGJhc2VkIG9uIHRoZSBnaXZlbiBkYXRhSWRcbiAqIEBwYXJhbSAgZmlsdGVyIHRvIHZhbGlkYXRlXG4gKiBAcGFyYW0gIGRhdGFzZXRJZCBpZCB0byB2YWxpZGF0ZSBmaWx0ZXIgYWdhaW5zdFxuICogQHJldHVybiB0cnVlIGlmIGEgZmlsdGVyIGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNob3VsZEFwcGx5RmlsdGVyKGZpbHRlcjogRmlsdGVyLCBkYXRhc2V0SWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBkYXRhSWRzID0gdG9BcnJheShmaWx0ZXIuZGF0YUlkKTtcbiAgcmV0dXJuIGRhdGFJZHMuaW5jbHVkZXMoZGF0YXNldElkKSAmJiBmaWx0ZXIudmFsdWUgIT09IG51bGw7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIGFuZCBtb2RpZmllcyBwb2x5Z29uIGZpbHRlciBzdHJ1Y3R1cmVcbiAqIEBwYXJhbSBkYXRhc2V0XG4gKiBAcGFyYW0gZmlsdGVyXG4gKiBAcGFyYW0gbGF5ZXJzXG4gKiBAcmV0dXJuIC0ge2ZpbHRlciwgZGF0YXNldH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlUG9seWdvbkZpbHRlcjxLIGV4dGVuZHMgS2VwbGVyVGFibGVNb2RlbDxLLCBMPiwgTCBleHRlbmRzIHtpZDogc3RyaW5nfT4oXG4gIGRhdGFzZXQ6IEssXG4gIGZpbHRlcjogUG9seWdvbkZpbHRlcixcbiAgbGF5ZXJzOiBMW11cbik6IHtmaWx0ZXI6IFBvbHlnb25GaWx0ZXIgfCBudWxsOyBkYXRhc2V0OiBLfSB7XG4gIGNvbnN0IGZhaWxlZCA9IHtkYXRhc2V0LCBmaWx0ZXI6IG51bGx9O1xuICBjb25zdCB7dmFsdWUsIGxheWVySWQsIHR5cGUsIGRhdGFJZH0gPSBmaWx0ZXI7XG5cbiAgaWYgKCFsYXllcklkIHx8ICFpc1ZhbGlkRmlsdGVyVmFsdWUodHlwZSwgdmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhaWxlZDtcbiAgfVxuXG4gIGNvbnN0IGlzVmFsaWREYXRhc2V0ID0gZGF0YUlkLmluY2x1ZGVzKGRhdGFzZXQuaWQpO1xuXG4gIGlmICghaXNWYWxpZERhdGFzZXQpIHtcbiAgICByZXR1cm4gZmFpbGVkO1xuICB9XG5cbiAgY29uc3QgbGF5ZXIgPSBsYXllcnMuZmluZChsID0+IGxheWVySWQuaW5jbHVkZXMobC5pZCkpO1xuXG4gIGlmICghbGF5ZXIpIHtcbiAgICByZXR1cm4gZmFpbGVkO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBmaWx0ZXI6IHtcbiAgICAgIC4uLmZpbHRlcixcbiAgICAgIGZpZWxkSWR4OiBbXVxuICAgIH0sXG4gICAgZGF0YXNldFxuICB9O1xufVxuXG4vKipcbiAqIEN1c3RvbSBmaWx0ZXIgdmFsaWRhdG9yc1xuICovXG5jb25zdCBmaWx0ZXJWYWxpZGF0b3JzID0ge1xuICBbRklMVEVSX1RZUEVTLnBvbHlnb25dOiB2YWxpZGF0ZVBvbHlnb25GaWx0ZXJcbn07XG5cbi8qKlxuICogRGVmYXVsdCB2YWxpZGF0ZSBmaWx0ZXIgZnVuY3Rpb25cbiAqIEBwYXJhbSBkYXRhc2V0XG4gKiBAcGFyYW0gZmlsdGVyXG4gKiBAcmV0dXJuIC0ge2ZpbHRlciwgZGF0YXNldH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlRmlsdGVyPEsgZXh0ZW5kcyBLZXBsZXJUYWJsZU1vZGVsPEssIEw+LCBMPihcbiAgZGF0YXNldDogSyxcbiAgZmlsdGVyOiBQYXJzZWRGaWx0ZXJcbik6IHtmaWx0ZXI6IEZpbHRlciB8IG51bGw7IGRhdGFzZXQ6IEt9IHtcbiAgLy8gbWF0Y2ggZmlsdGVyLmRhdGFJZFxuICBjb25zdCBmYWlsZWQgPSB7ZGF0YXNldCwgZmlsdGVyOiBudWxsfTtcbiAgY29uc3QgZmlsdGVyRGF0YUlkID0gdG9BcnJheShmaWx0ZXIuZGF0YUlkKTtcblxuICBjb25zdCBmaWx0ZXJEYXRhc2V0SW5kZXggPSBmaWx0ZXJEYXRhSWQuaW5kZXhPZihkYXRhc2V0LmlkKTtcbiAgaWYgKGZpbHRlckRhdGFzZXRJbmRleCA8IDAgfHwgIXRvQXJyYXkoZmlsdGVyLm5hbWUpW2ZpbHRlckRhdGFzZXRJbmRleF0pIHtcbiAgICAvLyB0aGUgY3VycmVudCBmaWx0ZXIgaXMgbm90IG1hcHBlZCBhZ2FpbnN0IHRoZSBjdXJyZW50IGRhdGFzZXRcbiAgICByZXR1cm4gZmFpbGVkO1xuICB9XG5cbiAgY29uc3QgaW5pdGlhbGl6ZUZpbHRlcjogRmlsdGVyID0ge1xuICAgIC4uLmdldERlZmF1bHRGaWx0ZXIoe2RhdGFJZDogZmlsdGVyLmRhdGFJZH0pLFxuICAgIC4uLmZpbHRlcixcbiAgICBkYXRhSWQ6IGZpbHRlckRhdGFJZCxcbiAgICBuYW1lOiB0b0FycmF5KGZpbHRlci5uYW1lKVxuICB9O1xuXG4gIGNvbnN0IGZpZWxkTmFtZSA9IGluaXRpYWxpemVGaWx0ZXIubmFtZVtmaWx0ZXJEYXRhc2V0SW5kZXhdO1xuICBjb25zdCB7ZmlsdGVyOiB1cGRhdGVkRmlsdGVyLCBkYXRhc2V0OiB1cGRhdGVkRGF0YXNldH0gPSBhcHBseUZpbHRlckZpZWxkTmFtZShcbiAgICBpbml0aWFsaXplRmlsdGVyLFxuICAgIGRhdGFzZXQsXG4gICAgZmllbGROYW1lLFxuICAgIGZpbHRlckRhdGFzZXRJbmRleCxcbiAgICB7bWVyZ2VEb21haW46IHRydWV9XG4gICk7XG5cbiAgaWYgKCF1cGRhdGVkRmlsdGVyKSB7XG4gICAgcmV0dXJuIGZhaWxlZDtcbiAgfVxuXG4gIC8vIGRvbid0IGFkanVzdCB2YWx1ZSB5ZXQgYmVmb3JlIGFsbCBkYXRhc2V0cyBhcmUgbG9hZGVkXG4gIHVwZGF0ZWRGaWx0ZXIudmlldyA9IGZpbHRlci52aWV3ID8/IHVwZGF0ZWRGaWx0ZXIudmlldztcblxuICBpZiAodXBkYXRlZEZpbHRlci52YWx1ZSA9PT0gbnVsbCkge1xuICAgIC8vIGNhbm5vdCBhZGp1c3Qgc2F2ZWQgdmFsdWUgdG8gZmlsdGVyXG4gICAgcmV0dXJuIGZhaWxlZDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZmlsdGVyOiB2YWxpZGF0ZUZpbHRlcllBeGlzKHVwZGF0ZWRGaWx0ZXIsIHVwZGF0ZWREYXRhc2V0KSxcbiAgICBkYXRhc2V0OiB1cGRhdGVkRGF0YXNldFxuICB9O1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHNhdmVkIGZpbHRlciBjb25maWcgd2l0aCBuZXcgZGF0YVxuICpcbiAqIEBwYXJhbSBkYXRhc2V0XG4gKiBAcGFyYW0gZmlsdGVyIC0gZmlsdGVyIHRvIGJlIHZhbGlkYXRlXG4gKiBAcGFyYW0gbGF5ZXJzIC0gbGF5ZXJzXG4gKiBAcmV0dXJuIHZhbGlkYXRlZCBmaWx0ZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlRmlsdGVyV2l0aERhdGE8SyBleHRlbmRzIEtlcGxlclRhYmxlTW9kZWw8SywgTD4sIEw+KFxuICBkYXRhc2V0OiBLLFxuICBmaWx0ZXI6IFBhcnNlZEZpbHRlcixcbiAgbGF5ZXJzOiBMW11cbik6IHtmaWx0ZXI6IEZpbHRlcjsgZGF0YXNldDogS30ge1xuICByZXR1cm4gZmlsdGVyLnR5cGUgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGZpbHRlclZhbGlkYXRvcnMsIGZpbHRlci50eXBlKVxuICAgID8gZmlsdGVyVmFsaWRhdG9yc1tmaWx0ZXIudHlwZV0oZGF0YXNldCwgZmlsdGVyLCBsYXllcnMpXG4gICAgOiB2YWxpZGF0ZUZpbHRlcihkYXRhc2V0LCBmaWx0ZXIpO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIFlBeGlzXG4gKiBAcGFyYW0gZmlsdGVyXG4gKiBAcGFyYW0gZGF0YXNldFxuICogQHJldHVybiB7Kn1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVGaWx0ZXJZQXhpcyhmaWx0ZXIsIGRhdGFzZXQpIHtcbiAgLy8gVE9ETzogdmFsaWRhdGUgeUF4aXMgYWdhaW5zdCBvdGhlciBkYXRhc2V0c1xuXG4gIGNvbnN0IHtmaWVsZHN9ID0gZGF0YXNldDtcbiAgY29uc3Qge3lBeGlzfSA9IGZpbHRlcjtcbiAgLy8gVE9ETzogdmFsaWRhdGUgeUF4aXMgYWdhaW5zdCBvdGhlciBkYXRhc2V0c1xuICBpZiAoeUF4aXMpIHtcbiAgICBjb25zdCBtYXRjaGVkQXhpcyA9IGZpZWxkcy5maW5kKCh7bmFtZSwgdHlwZX0pID0+IG5hbWUgPT09IHlBeGlzLm5hbWUgJiYgdHlwZSA9PT0geUF4aXMudHlwZSk7XG5cbiAgICBmaWx0ZXIgPSBtYXRjaGVkQXhpc1xuICAgICAgPyB7XG4gICAgICAgICAgLi4uZmlsdGVyLFxuICAgICAgICAgIHlBeGlzOiBtYXRjaGVkQXhpc1xuICAgICAgICB9XG4gICAgICA6IGZpbHRlcjtcbiAgfVxuXG4gIHJldHVybiBmaWx0ZXI7XG59XG5cbi8qKlxuICogR2V0IGRlZmF1bHQgZmlsdGVyIHByb3AgYmFzZWQgb24gZmllbGQgdHlwZVxuICpcbiAqIEBwYXJhbSBmaWVsZFxuICogQHBhcmFtIGZpZWxkRG9tYWluXG4gKiBAcmV0dXJucyBkZWZhdWx0IGZpbHRlclxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsdGVyUHJvcHMoXG4gIGZpZWxkOiBGaWVsZCxcbiAgZmllbGREb21haW46IEZpZWxkRG9tYWluXG4pOiBQYXJ0aWFsPEZpbHRlcj4gJiB7ZmllbGRUeXBlOiBzdHJpbmd9IHtcbiAgY29uc3QgZmlsdGVyUHJvcHMgPSB7XG4gICAgLi4uZmllbGREb21haW4sXG4gICAgZmllbGRUeXBlOiBmaWVsZC50eXBlLFxuICAgIHZpZXc6IEZJTFRFUl9WSUVXX1RZUEVTLnNpZGVcbiAgfTtcblxuICBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5yZWFsOlxuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLmludGVnZXI6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5maWx0ZXJQcm9wcyxcbiAgICAgICAgdmFsdWU6IGZpZWxkRG9tYWluLmRvbWFpbixcbiAgICAgICAgdHlwZTogRklMVEVSX1RZUEVTLnJhbmdlLFxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgIHR5cGVPcHRpb25zOiBbRklMVEVSX1RZUEVTLnJhbmdlXSxcbiAgICAgICAgZ3B1OiB0cnVlXG4gICAgICB9O1xuXG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMuYm9vbGVhbjpcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmZpbHRlclByb3BzLFxuICAgICAgICB0eXBlOiBGSUxURVJfVFlQRVMuc2VsZWN0LFxuICAgICAgICB2YWx1ZTogdHJ1ZSxcbiAgICAgICAgZ3B1OiBmYWxzZVxuICAgICAgfTtcblxuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLnN0cmluZzpcbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5oMzpcbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5kYXRlOlxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZmlsdGVyUHJvcHMsXG4gICAgICAgIHR5cGU6IEZJTFRFUl9UWVBFUy5tdWx0aVNlbGVjdCxcbiAgICAgICAgdmFsdWU6IFtdLFxuICAgICAgICBncHU6IGZhbHNlXG4gICAgICB9O1xuXG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMudGltZXN0YW1wOlxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZmlsdGVyUHJvcHMsXG4gICAgICAgIHR5cGU6IEZJTFRFUl9UWVBFUy50aW1lUmFuZ2UsXG4gICAgICAgIHZpZXc6IEZJTFRFUl9WSUVXX1RZUEVTLmVubGFyZ2VkLFxuICAgICAgICBmaXhlZERvbWFpbjogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IGZpbHRlclByb3BzLmRvbWFpbixcbiAgICAgICAgZ3B1OiB0cnVlLFxuICAgICAgICBwbG90VHlwZToge31cbiAgICAgIH07XG5cbiAgICBkZWZhdWx0OlxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgcmV0dXJuIHt9O1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBnZXRQb2x5Z29uRmlsdGVyRnVuY3RvciA9IChsYXllciwgZmlsdGVyLCBkYXRhQ29udGFpbmVyKSA9PiB7XG4gIGNvbnN0IGdldFBvc2l0aW9uID0gbGF5ZXIuZ2V0UG9zaXRpb25BY2Nlc3NvcihkYXRhQ29udGFpbmVyKTtcblxuICBzd2l0Y2ggKGxheWVyLnR5cGUpIHtcbiAgICBjYXNlIExBWUVSX1RZUEVTLnBvaW50OlxuICAgIGNhc2UgTEFZRVJfVFlQRVMuaWNvbjpcbiAgICAgIHJldHVybiBkYXRhID0+IHtcbiAgICAgICAgY29uc3QgcG9zID0gZ2V0UG9zaXRpb24oZGF0YSk7XG4gICAgICAgIHJldHVybiBwb3MuZXZlcnkoTnVtYmVyLmlzRmluaXRlKSAmJiBpc0luUG9seWdvbihwb3MsIGZpbHRlci52YWx1ZSk7XG4gICAgICB9O1xuICAgIGNhc2UgTEFZRVJfVFlQRVMuYXJjOlxuICAgIGNhc2UgTEFZRVJfVFlQRVMubGluZTpcbiAgICAgIHJldHVybiBkYXRhID0+IHtcbiAgICAgICAgY29uc3QgcG9zID0gZ2V0UG9zaXRpb24oZGF0YSk7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgcG9zLmV2ZXJ5KE51bWJlci5pc0Zpbml0ZSkgJiZcbiAgICAgICAgICBbXG4gICAgICAgICAgICBbcG9zWzBdLCBwb3NbMV1dLFxuICAgICAgICAgICAgW3Bvc1szXSwgcG9zWzRdXVxuICAgICAgICAgIF0uZXZlcnkocG9pbnQgPT4gaXNJblBvbHlnb24ocG9pbnQsIGZpbHRlci52YWx1ZSkpXG4gICAgICAgICk7XG4gICAgICB9O1xuICAgIGNhc2UgTEFZRVJfVFlQRVMuaGV4YWdvbklkOlxuICAgICAgaWYgKGxheWVyLmRhdGFUb0ZlYXR1cmUgJiYgbGF5ZXIuZGF0YVRvRmVhdHVyZS5jZW50cm9pZHMpIHtcbiAgICAgICAgcmV0dXJuIGRhdGEgPT4ge1xuICAgICAgICAgIC8vIG51bGwgb3IgZ2V0Q2VudHJvaWQoe2lkfSlcbiAgICAgICAgICBjb25zdCBjZW50cm9pZCA9IGxheWVyLmRhdGFUb0ZlYXR1cmUuY2VudHJvaWRzW2RhdGEuaW5kZXhdO1xuICAgICAgICAgIHJldHVybiBjZW50cm9pZCAmJiBpc0luUG9seWdvbihjZW50cm9pZCwgZmlsdGVyLnZhbHVlKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhID0+IHtcbiAgICAgICAgY29uc3QgaWQgPSBnZXRQb3NpdGlvbihkYXRhKTtcbiAgICAgICAgaWYgKCFoM0lzVmFsaWQoaWQpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBvcyA9IGdldENlbnRyb2lkKHtpZH0pO1xuICAgICAgICByZXR1cm4gcG9zLmV2ZXJ5KE51bWJlci5pc0Zpbml0ZSkgJiYgaXNJblBvbHlnb24ocG9zLCBmaWx0ZXIudmFsdWUpO1xuICAgICAgfTtcbiAgICBjYXNlIExBWUVSX1RZUEVTLmdlb2pzb246XG4gICAgICByZXR1cm4gZGF0YSA9PiB7XG4gICAgICAgIHJldHVybiBsYXllci5pc0luUG9seWdvbihkYXRhLCBkYXRhLmluZGV4LCBmaWx0ZXIudmFsdWUpO1xuICAgICAgfTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICgpID0+IHRydWU7XG4gIH1cbn07XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBHZW9KU09OIGZlYXR1cmUgZmlsdGVyIGNhbiBiZSBhcHBsaWVkIHRvIGEgbGF5ZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbkFwcGx5RmVhdHVyZUZpbHRlcihmZWF0dXJlOiBGZWF0dXJlIHwgbnVsbCk6IGJvb2xlYW4ge1xuICByZXR1cm4gQm9vbGVhbihmZWF0dXJlPy5nZW9tZXRyeSAmJiBbJ1BvbHlnb24nLCAnTXVsdGlQb2x5Z29uJ10uaW5jbHVkZXMoZmVhdHVyZS5nZW9tZXRyeS50eXBlKSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHBhcmFtIEFuIG9iamVjdCB0aGF0IHJlcHJlc2VudHMgYSByb3cgcmVjb3JkLlxuICogQHBhcmFtIHBhcmFtLmluZGV4IEluZGV4IG9mIHRoZSByb3cgaW4gZGF0YSBjb250YWluZXIuXG4gKiBAcmV0dXJucyBSZXR1cm5zIHRydWUgdG8ga2VlcCB0aGUgZWxlbWVudCwgb3IgZmFsc2Ugb3RoZXJ3aXNlLlxuICovXG50eXBlIGZpbHRlckZ1bmN0aW9uID0gKGRhdGE6IHtpbmRleDogbnVtYmVyfSkgPT4gYm9vbGVhbjtcblxuLyoqXG4gKiBAcGFyYW0gZmllbGQgZGF0YXNldCBGaWVsZFxuICogQHBhcmFtIGRhdGFJZCBEYXRhc2V0IGlkXG4gKiBAcGFyYW0gZmlsdGVyIEZpbHRlciBvYmplY3RcbiAqIEBwYXJhbSBsYXllcnMgbGlzdCBvZiBsYXllcnMgdG8gZmlsdGVyIHVwb25cbiAqIEBwYXJhbSBkYXRhQ29udGFpbmVyIERhdGEgY29udGFpbmVyXG4gKiBAcmV0dXJuIGZpbHRlckZ1bmN0aW9uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIGNvbXBsZXhpdHkgKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWx0ZXJGdW5jdGlvbjxMIGV4dGVuZHMge2NvbmZpZzoge2RhdGFJZDogc3RyaW5nIHwgbnVsbH07IGlkOiBzdHJpbmd9PihcbiAgZmllbGQ6IEZpZWxkIHwgbnVsbCxcbiAgZGF0YUlkOiBzdHJpbmcsXG4gIGZpbHRlcjogRmlsdGVyLFxuICBsYXllcnM6IExbXSxcbiAgZGF0YUNvbnRhaW5lcjogRGF0YUNvbnRhaW5lckludGVyZmFjZVxuKTogZmlsdGVyRnVuY3Rpb24ge1xuICAvLyBmaWVsZCBjb3VsZCBiZSBudWxsIGluIHBvbHlnb24gZmlsdGVyXG4gIGNvbnN0IHZhbHVlQWNjZXNzb3IgPSBmaWVsZCA/IGZpZWxkLnZhbHVlQWNjZXNzb3IgOiAoKSA9PiBudWxsO1xuICBjb25zdCBkZWZhdWx0RnVuYyA9ICgpID0+IHRydWU7XG5cbiAgaWYgKGZpbHRlci5lbmFibGVkID09PSBmYWxzZSkge1xuICAgIHJldHVybiBkZWZhdWx0RnVuYztcbiAgfVxuXG4gIHN3aXRjaCAoZmlsdGVyLnR5cGUpIHtcbiAgICBjYXNlIEZJTFRFUl9UWVBFUy5yYW5nZTpcbiAgICAgIHJldHVybiBkYXRhID0+IGlzSW5SYW5nZSh2YWx1ZUFjY2Vzc29yKGRhdGEpLCBmaWx0ZXIudmFsdWUpO1xuICAgIGNhc2UgRklMVEVSX1RZUEVTLm11bHRpU2VsZWN0OlxuICAgICAgcmV0dXJuIGRhdGEgPT4gZmlsdGVyLnZhbHVlLmluY2x1ZGVzKHZhbHVlQWNjZXNzb3IoZGF0YSkpO1xuICAgIGNhc2UgRklMVEVSX1RZUEVTLnNlbGVjdDpcbiAgICAgIHJldHVybiBkYXRhID0+IHZhbHVlQWNjZXNzb3IoZGF0YSkgPT09IGZpbHRlci52YWx1ZTtcbiAgICBjYXNlIEZJTFRFUl9UWVBFUy50aW1lUmFuZ2U6IHtcbiAgICAgIGlmICghZmllbGQpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRGdW5jO1xuICAgICAgfVxuICAgICAgY29uc3QgbWFwcGVkVmFsdWUgPSBnZXQoZmllbGQsIFsnZmlsdGVyUHJvcHMnLCAnbWFwcGVkVmFsdWUnXSk7XG4gICAgICBjb25zdCBhY2Nlc3NvciA9IEFycmF5LmlzQXJyYXkobWFwcGVkVmFsdWUpXG4gICAgICAgID8gZGF0YSA9PiBtYXBwZWRWYWx1ZVtkYXRhLmluZGV4XVxuICAgICAgICA6IGRhdGEgPT4gdGltZVRvVW5peE1pbGxpKHZhbHVlQWNjZXNzb3IoZGF0YSksIGZpZWxkLmZvcm1hdCk7XG4gICAgICByZXR1cm4gZGF0YSA9PiBpc0luUmFuZ2UoYWNjZXNzb3IoZGF0YSksIGZpbHRlci52YWx1ZSk7XG4gICAgfVxuICAgIGNhc2UgRklMVEVSX1RZUEVTLnBvbHlnb246IHtcbiAgICAgIGlmICghbGF5ZXJzIHx8ICFsYXllcnMubGVuZ3RoIHx8ICFmaWx0ZXIubGF5ZXJJZCkge1xuICAgICAgICByZXR1cm4gZGVmYXVsdEZ1bmM7XG4gICAgICB9XG4gICAgICBjb25zdCBsYXllckZpbHRlckZ1bmN0aW9ucyA9IGZpbHRlci5sYXllcklkXG4gICAgICAgIC5tYXAoaWQgPT4gbGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBpZCkpXG4gICAgICAgIC5maWx0ZXIobCA9PiBsICYmIGwuY29uZmlnLmRhdGFJZCA9PT0gZGF0YUlkKVxuICAgICAgICAubWFwKGxheWVyID0+IGdldFBvbHlnb25GaWx0ZXJGdW5jdG9yKGxheWVyLCBmaWx0ZXIsIGRhdGFDb250YWluZXIpKTtcblxuICAgICAgcmV0dXJuIGRhdGEgPT4gbGF5ZXJGaWx0ZXJGdW5jdGlvbnMuZXZlcnkoZmlsdGVyRnVuYyA9PiBmaWx0ZXJGdW5jKGRhdGEpKTtcbiAgICB9XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBkZWZhdWx0RnVuYztcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlRmlsdGVyRGF0YUlkKGRhdGFJZDogc3RyaW5nIHwgc3RyaW5nW10pOiBGaWx0ZXJCYXNlPExpbmVDaGFydD4ge1xuICByZXR1cm4gZ2V0RGVmYXVsdEZpbHRlcih7ZGF0YUlkfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJEYXRhQnlGaWx0ZXJUeXBlcyhcbiAge1xuICAgIGR5bmFtaWNEb21haW5GaWx0ZXJzLFxuICAgIGNwdUZpbHRlcnMsXG4gICAgZmlsdGVyRnVuY3NcbiAgfToge1xuICAgIGR5bmFtaWNEb21haW5GaWx0ZXJzOiBGaWx0ZXJbXSB8IG51bGw7XG4gICAgY3B1RmlsdGVyczogRmlsdGVyW10gfCBudWxsO1xuICAgIGZpbHRlckZ1bmNzOiB7XG4gICAgICBba2V5OiBzdHJpbmddOiBmaWx0ZXJGdW5jdGlvbjtcbiAgICB9O1xuICB9LFxuICBkYXRhQ29udGFpbmVyOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlXG4pOiBGaWx0ZXJSZXN1bHQge1xuICBjb25zdCBmaWx0ZXJlZEluZGV4Rm9yRG9tYWluOiBudW1iZXJbXSA9IFtdO1xuICBjb25zdCBmaWx0ZXJlZEluZGV4OiBudW1iZXJbXSA9IFtdO1xuXG4gIGNvbnN0IGZpbHRlckNvbnRleHQgPSB7aW5kZXg6IC0xLCBkYXRhQ29udGFpbmVyfTtcbiAgY29uc3QgZmlsdGVyRnVuY0NhbGxlciA9IChmaWx0ZXI6IEZpbHRlcikgPT4gZmlsdGVyRnVuY3NbZmlsdGVyLmlkXShmaWx0ZXJDb250ZXh0KTtcblxuICBjb25zdCBudW1Sb3dzID0gZGF0YUNvbnRhaW5lci5udW1Sb3dzKCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtUm93czsgKytpKSB7XG4gICAgZmlsdGVyQ29udGV4dC5pbmRleCA9IGk7XG5cbiAgICBjb25zdCBtYXRjaEZvckRvbWFpbiA9IGR5bmFtaWNEb21haW5GaWx0ZXJzICYmIGR5bmFtaWNEb21haW5GaWx0ZXJzLmV2ZXJ5KGZpbHRlckZ1bmNDYWxsZXIpO1xuICAgIGlmIChtYXRjaEZvckRvbWFpbikge1xuICAgICAgZmlsdGVyZWRJbmRleEZvckRvbWFpbi5wdXNoKGZpbHRlckNvbnRleHQuaW5kZXgpO1xuICAgIH1cblxuICAgIGNvbnN0IG1hdGNoRm9yUmVuZGVyID0gY3B1RmlsdGVycyAmJiBjcHVGaWx0ZXJzLmV2ZXJ5KGZpbHRlckZ1bmNDYWxsZXIpO1xuICAgIGlmIChtYXRjaEZvclJlbmRlcikge1xuICAgICAgZmlsdGVyZWRJbmRleC5wdXNoKGZpbHRlckNvbnRleHQuaW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uKGR5bmFtaWNEb21haW5GaWx0ZXJzID8ge2ZpbHRlcmVkSW5kZXhGb3JEb21haW59IDoge30pLFxuICAgIC4uLihjcHVGaWx0ZXJzID8ge2ZpbHRlcmVkSW5kZXh9IDoge30pXG4gIH07XG59XG5cbi8qKlxuICogR2V0IGEgcmVjb3JkIG9mIGZpbHRlcnMgYmFzZWQgb24gZG9tYWluIHR5cGUgYW5kIGdwdSAvIGNwdVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsdGVyUmVjb3JkKFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgZmlsdGVyczogRmlsdGVyW10sXG4gIG9wdDogRmlsdGVyRGF0YXNldE9wdCA9IHt9XG4pOiBGaWx0ZXJSZWNvcmQge1xuICBjb25zdCBmaWx0ZXJSZWNvcmQ6IEZpbHRlclJlY29yZCA9IHtcbiAgICBkeW5hbWljRG9tYWluOiBbXSxcbiAgICBmaXhlZERvbWFpbjogW10sXG4gICAgY3B1OiBbXSxcbiAgICBncHU6IFtdXG4gIH07XG5cbiAgZmlsdGVycy5mb3JFYWNoKGYgPT4ge1xuICAgIGlmIChpc1ZhbGlkRmlsdGVyVmFsdWUoZi50eXBlLCBmLnZhbHVlKSAmJiB0b0FycmF5KGYuZGF0YUlkKS5pbmNsdWRlcyhkYXRhSWQpKSB7XG4gICAgICAoZi5maXhlZERvbWFpbiB8fCBvcHQuaWdub3JlRG9tYWluXG4gICAgICAgID8gZmlsdGVyUmVjb3JkLmZpeGVkRG9tYWluXG4gICAgICAgIDogZmlsdGVyUmVjb3JkLmR5bmFtaWNEb21haW5cbiAgICAgICkucHVzaChmKTtcblxuICAgICAgKGYuZ3B1ICYmICFvcHQuY3B1T25seSA/IGZpbHRlclJlY29yZC5ncHUgOiBmaWx0ZXJSZWNvcmQuY3B1KS5wdXNoKGYpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGZpbHRlclJlY29yZDtcbn1cblxuLyoqXG4gKiBDb21wYXJlIGZpbHRlciByZWNvcmRzIHRvIGdldCB3aGF0IGhhcyBjaGFuZ2VkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaWZmRmlsdGVycyhcbiAgZmlsdGVyUmVjb3JkOiBGaWx0ZXJSZWNvcmQsXG4gIG9sZEZpbHRlclJlY29yZDogRmlsdGVyUmVjb3JkIHwgUmVjb3JkPHN0cmluZywgbmV2ZXI+ID0ge31cbik6IEZpbHRlckNoYW5nZWQge1xuICBsZXQgZmlsdGVyQ2hhbmdlZDogUGFydGlhbDxGaWx0ZXJDaGFuZ2VkPiA9IHt9O1xuXG4gIChPYmplY3QuZW50cmllcyhmaWx0ZXJSZWNvcmQpIGFzIEVudHJpZXM8RmlsdGVyUmVjb3JkPikuZm9yRWFjaCgoW3JlY29yZCwgaXRlbXNdKSA9PiB7XG4gICAgaXRlbXMuZm9yRWFjaChmaWx0ZXIgPT4ge1xuICAgICAgY29uc3Qgb2xkRmlsdGVyOiBGaWx0ZXIgfCB1bmRlZmluZWQgPSAob2xkRmlsdGVyUmVjb3JkW3JlY29yZF0gfHwgW10pLmZpbmQoXG4gICAgICAgIChmOiBGaWx0ZXIpID0+IGYuaWQgPT09IGZpbHRlci5pZFxuICAgICAgKTtcblxuICAgICAgaWYgKCFvbGRGaWx0ZXIpIHtcbiAgICAgICAgLy8gYWRkZWRcbiAgICAgICAgZmlsdGVyQ2hhbmdlZCA9IHNldChbcmVjb3JkLCBmaWx0ZXIuaWRdLCAnYWRkZWQnLCBmaWx0ZXJDaGFuZ2VkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGNoZWNrICB3aGF0IGhhcyBjaGFuZ2VkXG4gICAgICAgIFsnbmFtZScsICd2YWx1ZScsICdkYXRhSWQnXS5mb3JFYWNoKHByb3AgPT4ge1xuICAgICAgICAgIGlmIChmaWx0ZXJbcHJvcF0gIT09IG9sZEZpbHRlcltwcm9wXSkge1xuICAgICAgICAgICAgZmlsdGVyQ2hhbmdlZCA9IHNldChbcmVjb3JkLCBmaWx0ZXIuaWRdLCBgJHtwcm9wfV9jaGFuZ2VkYCwgZmlsdGVyQ2hhbmdlZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIChvbGRGaWx0ZXJSZWNvcmRbcmVjb3JkXSB8fCBbXSkuZm9yRWFjaCgob2xkRmlsdGVyOiBGaWx0ZXIpID0+IHtcbiAgICAgIC8vIGRlbGV0ZWRcbiAgICAgIGlmICghaXRlbXMuZmluZChmID0+IGYuaWQgPT09IG9sZEZpbHRlci5pZCkpIHtcbiAgICAgICAgZmlsdGVyQ2hhbmdlZCA9IHNldChbcmVjb3JkLCBvbGRGaWx0ZXIuaWRdLCAnZGVsZXRlZCcsIGZpbHRlckNoYW5nZWQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gey4uLntkeW5hbWljRG9tYWluOiBudWxsLCBmaXhlZERvbWFpbjogbnVsbCwgY3B1OiBudWxsLCBncHU6IG51bGx9LCAuLi5maWx0ZXJDaGFuZ2VkfTtcbn1cblxuLyoqXG4gKiBDYWxsIGJ5IHBhcnNpbmcgZmlsdGVycyBmcm9tIFVSTFxuICogQ2hlY2sgaWYgdmFsdWUgb2YgZmlsdGVyIHdpdGhpbiBmaWx0ZXIgZG9tYWluLCBpZiBub3QgYWRqdXN0IGl0IHRvIG1hdGNoXG4gKiBmaWx0ZXIgZG9tYWluXG4gKlxuICogQHJldHVybnMgdmFsdWUgLSBhZGp1c3RlZCB2YWx1ZSB0byBtYXRjaCBmaWx0ZXIgb3IgbnVsbCB0byByZW1vdmUgZmlsdGVyXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5leHBvcnQgZnVuY3Rpb24gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbih2YWx1ZTogRmlsdGVyWyd2YWx1ZSddLCB7ZG9tYWluLCB0eXBlfSkge1xuICBpZiAoIXR5cGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gaWYgdGhlIGN1cnJlbnQgZmlsdGVyIGlzIGEgcG9seWdvbiBpdCB3aWxsIG5vdCBoYXZlIGFueSBkb21haW5cbiAgLy8gYWxsIG90aGVyIGZpbHRlciB0eXBlcyByZXF1aXJlIGRvbWFpblxuICBpZiAodHlwZSAhPT0gRklMVEVSX1RZUEVTLnBvbHlnb24gJiYgIWRvbWFpbikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgRklMVEVSX1RZUEVTLnJhbmdlOlxuICAgIGNhc2UgRklMVEVSX1RZUEVTLnRpbWVSYW5nZTpcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkgfHwgdmFsdWUubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgIHJldHVybiBkb21haW4ubWFwKGQgPT4gZCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB2YWx1ZS5tYXAoKGQsIGkpID0+IChub3ROdWxsb3JVbmRlZmluZWQoZCkgJiYgaXNJblJhbmdlKGQsIGRvbWFpbikgPyBkIDogZG9tYWluW2ldKSk7XG5cbiAgICBjYXNlIEZJTFRFUl9UWVBFUy5tdWx0aVNlbGVjdDoge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBjb25zdCBmaWx0ZXJlZFZhbHVlID0gdmFsdWUuZmlsdGVyKGQgPT4gZG9tYWluLmluY2x1ZGVzKGQpKTtcbiAgICAgIHJldHVybiBmaWx0ZXJlZFZhbHVlLmxlbmd0aCA/IGZpbHRlcmVkVmFsdWUgOiBbXTtcbiAgICB9XG4gICAgY2FzZSBGSUxURVJfVFlQRVMuc2VsZWN0OlxuICAgICAgcmV0dXJuIGRvbWFpbi5pbmNsdWRlcyh2YWx1ZSkgPyB2YWx1ZSA6IHRydWU7XG4gICAgY2FzZSBGSUxURVJfVFlQRVMucG9seWdvbjpcbiAgICAgIHJldHVybiB2YWx1ZTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vKipcbiAqIENhbGN1bGF0ZSBudW1lcmljIGRvbWFpbiBhbmQgc3VpdGFibGUgc3RlcFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TnVtZXJpY0ZpZWxkRG9tYWluKFxuICBkYXRhQ29udGFpbmVyOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlLFxuICB2YWx1ZUFjY2Vzc29yOiBkYXRhVmFsdWVBY2Nlc3NvclxuKTogUmFuZ2VGaWVsZERvbWFpbiB7XG4gIGxldCBkb21haW46IFtudW1iZXIsIG51bWJlcl0gPSBbMCwgMV07XG4gIGxldCBzdGVwID0gMC4xO1xuXG4gIGNvbnN0IG1hcHBlZFZhbHVlID0gZGF0YUNvbnRhaW5lci5tYXBJbmRleCh2YWx1ZUFjY2Vzc29yKTtcblxuICBpZiAoZGF0YUNvbnRhaW5lci5udW1Sb3dzKCkgPiAxKSB7XG4gICAgZG9tYWluID0gU2NhbGVVdGlscy5nZXRMaW5lYXJEb21haW4obWFwcGVkVmFsdWUpO1xuICAgIGNvbnN0IGRpZmYgPSBkb21haW5bMV0gLSBkb21haW5bMF07XG5cbiAgICAvLyBpbiBjYXNlIGVxdWFsIGRvbWFpbiwgWzk2LCA5Nl0sIHdoaWNoIHdpbGwgYnJlYWsgcXVhbnRpemUgc2NhbGVcbiAgICBpZiAoIWRpZmYpIHtcbiAgICAgIGRvbWFpblsxXSA9IGRvbWFpblswXSArIDE7XG4gICAgfVxuXG4gICAgc3RlcCA9IGdldE51bWVyaWNTdGVwU2l6ZShkaWZmKSB8fCBzdGVwO1xuICAgIGRvbWFpblswXSA9IGZvcm1hdE51bWJlckJ5U3RlcChkb21haW5bMF0sIHN0ZXAsICdmbG9vcicpO1xuICAgIGRvbWFpblsxXSA9IGZvcm1hdE51bWJlckJ5U3RlcChkb21haW5bMV0sIHN0ZXAsICdjZWlsJyk7XG4gIH1cblxuICByZXR1cm4ge2RvbWFpbiwgc3RlcH07XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlIHN0ZXAgc2l6ZSBmb3IgcmFuZ2UgYW5kIHRpbWVyYW5nZSBmaWx0ZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE51bWVyaWNTdGVwU2l6ZShkaWZmOiBudW1iZXIpOiBudW1iZXIge1xuICBkaWZmID0gTWF0aC5hYnMoZGlmZik7XG5cbiAgaWYgKGRpZmYgPiAxMDApIHtcbiAgICByZXR1cm4gMTtcbiAgfSBlbHNlIGlmIChkaWZmID4gMykge1xuICAgIHJldHVybiAwLjAxO1xuICB9IGVsc2UgaWYgKGRpZmYgPiAxKSB7XG4gICAgcmV0dXJuIDAuMDAxO1xuICB9XG4gIC8vIFRyeSB0byBnZXQgYXQgbGVhc3QgMTAwMCBzdGVwcyAtIGFuZCBrZWVwIHRoZSBzdGVwIHNpemUgYmVsb3cgdGhhdCBvZlxuICAvLyB0aGUgKGRpZmYgPiAxKSBjYXNlLlxuICBjb25zdCB4ID0gZGlmZiAvIDEwMDA7XG4gIC8vIEZpbmQgdGhlIGV4cG9uZW50IGFuZCB0cnVuY2F0ZSB0byAxMCB0byB0aGUgcG93ZXIgb2YgdGhhdCBleHBvbmVudFxuXG4gIGNvbnN0IGV4cG9uZW50aWFsRm9ybSA9IHgudG9FeHBvbmVudGlhbCgpO1xuICBjb25zdCBleHBvbmVudCA9IHBhcnNlRmxvYXQoZXhwb25lbnRpYWxGb3JtLnNwbGl0KCdlJylbMV0pO1xuXG4gIC8vIEdldHRpbmcgcmVhZHkgZm9yIG5vZGUgMTJcbiAgLy8gdGhpcyBpcyB3aHkgd2UgbmVlZCBkZWNpbWFsLmpzXG4gIC8vIE1hdGgucG93KDEwLCAtNSkgPSAwLjAwMDAwOTk5OTk5OTk5OTk5OTk5OVxuICAvLyB0aGUgYWJvdmUgcmVzdWx0IHNob3dzIGluIGJyb3dzZXIgYW5kIG5vZGUgMTBcbiAgLy8gbm9kZSAxMiBiZWhhdmVzIGNvcnJlY3RseVxuICByZXR1cm4gbmV3IERlY2ltYWwoMTApLnBvdyhleHBvbmVudCkudG9OdW1iZXIoKTtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGUgdGltZXN0YW1wIGRvbWFpbiBhbmQgc3VpdGFibGUgc3RlcFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGltZXN0YW1wRmllbGREb21haW4oXG4gIGRhdGFDb250YWluZXI6IERhdGFDb250YWluZXJJbnRlcmZhY2UsXG4gIHZhbHVlQWNjZXNzb3I6IGRhdGFWYWx1ZUFjY2Vzc29yXG4pOiBUaW1lUmFuZ2VGaWVsZERvbWFpbiB7XG4gIC8vIHRvIGF2b2lkIGNvbnZlcnRpbmcgc3RyaW5nIGZvcm1hdCB0aW1lIHRvIGVwb2NoXG4gIC8vIGV2ZXJ5IHRpbWUgd2UgY29tcGFyZSB3ZSBzdG9yZSBhIHZhbHVlIG1hcHBlZCB0byBpbnQgaW4gZmlsdGVyIGRvbWFpblxuICBjb25zdCBtYXBwZWRWYWx1ZSA9IGRhdGFDb250YWluZXIubWFwSW5kZXgodmFsdWVBY2Nlc3Nvcik7XG5cbiAgY29uc3QgZG9tYWluID0gU2NhbGVVdGlscy5nZXRMaW5lYXJEb21haW4obWFwcGVkVmFsdWUpO1xuICBjb25zdCBkZWZhdWx0VGltZUZvcm1hdCA9IGdldFRpbWVXaWRnZXRUaXRsZUZvcm1hdHRlcihkb21haW4pO1xuXG4gIGxldCBzdGVwID0gMC4wMTtcblxuICBjb25zdCBkaWZmID0gZG9tYWluWzFdIC0gZG9tYWluWzBdO1xuICAvLyBpbiBjYXNlIGVxdWFsIHRpbWVzdGFtcCBhZGQgMSBzZWNvbmQgcGFkZGluZyB0byBwcmV2ZW50IGJyZWFrXG4gIGlmICghZGlmZikge1xuICAgIGRvbWFpblsxXSA9IGRvbWFpblswXSArIDEwMDA7XG4gIH1cbiAgY29uc3QgZW50cnkgPSBUaW1lc3RhbXBTdGVwTWFwLmZpbmQoZiA9PiBmLm1heCA+PSBkaWZmKTtcbiAgaWYgKGVudHJ5KSB7XG4gICAgc3RlcCA9IGVudHJ5LnN0ZXA7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGRvbWFpbixcbiAgICBzdGVwLFxuICAgIG1hcHBlZFZhbHVlLFxuICAgIGRlZmF1bHRUaW1lRm9ybWF0XG4gIH07XG59XG5cbi8qKlxuICogcm91bmQgbnVtYmVyIGJhc2VkIG9uIHN0ZXBcbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gdmFsXG4gKiBAcGFyYW0ge051bWJlcn0gc3RlcFxuICogQHBhcmFtIHtzdHJpbmd9IGJvdW5kXG4gKiBAcmV0dXJucyB7TnVtYmVyfSByb3VuZGVkIG51bWJlclxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0TnVtYmVyQnlTdGVwKHZhbDogbnVtYmVyLCBzdGVwOiBudW1iZXIsIGJvdW5kOiAnZmxvb3InIHwgJ2NlaWwnKTogbnVtYmVyIHtcbiAgaWYgKGJvdW5kID09PSAnZmxvb3InKSB7XG4gICAgcmV0dXJuIE1hdGguZmxvb3IodmFsICogKDEgLyBzdGVwKSkgLyAoMSAvIHN0ZXApO1xuICB9XG5cbiAgcmV0dXJuIE1hdGguY2VpbCh2YWwgKiAoMSAvIHN0ZXApKSAvICgxIC8gc3RlcCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0luUmFuZ2UodmFsOiBhbnksIGRvbWFpbjogbnVtYmVyW10pOiBib29sZWFuIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGRvbWFpbikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgcmV0dXJuIGRvbWFpblswXSA8PSB2YWxbMF0gJiYgdmFsWzFdIDw9IGRvbWFpblsxXTtcbiAgfVxuXG4gIHJldHVybiB2YWwgPj0gZG9tYWluWzBdICYmIHZhbCA8PSBkb21haW5bMV07XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgcG9pbnQgaXMgd2l0aGluIHRoZSBwcm92aWRlZCBwb2x5Z29uXG4gKlxuICogQHBhcmFtIHBvaW50IGFzIGlucHV0IHNlYXJjaCBbbGF0LCBsbmddXG4gKiBAcGFyYW0gcG9seWdvbiBQb2ludHMgbXVzdCBiZSB3aXRoaW4gdGhlc2UgKE11bHRpKVBvbHlnb24ocylcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0luUG9seWdvbihwb2ludDogbnVtYmVyW10sIHBvbHlnb246IGFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gYm9vbGVhbldpdGhpbih0dXJmUG9pbnQocG9pbnQpLCBwb2x5Z29uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRUaW1lV2lkZ2V0VGl0bGVGb3JtYXR0ZXIoZG9tYWluOiBbbnVtYmVyLCBudW1iZXJdKTogc3RyaW5nIHwgbnVsbCB7XG4gIGlmICghaXNWYWxpZFRpbWVEb21haW4oZG9tYWluKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgZGlmZiA9IGRvbWFpblsxXSAtIGRvbWFpblswXTtcblxuICAvLyBMb2NhbCBhd2FyZSBmb3JtYXRzXG4gIC8vIGh0dHBzOi8vbW9tZW50anMuY29tL2RvY3MvIy9wYXJzaW5nL3N0cmluZy1mb3JtYXRcbiAgcmV0dXJuIGRpZmYgPiBkdXJhdGlvblllYXIgPyAnTCcgOiBkaWZmID4gZHVyYXRpb25EYXkgPyAnTCBMVCcgOiAnTCBMVFMnO1xufVxuXG4vKipcbiAqIFNhbml0eSBjaGVjayBvbiBmaWx0ZXJzIHRvIHByZXBhcmUgZm9yIHNhdmVcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL2ZpbHRlci11dGlscycpLmlzRmlsdGVyVmFsaWRUb1NhdmV9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0ZpbHRlclZhbGlkVG9TYXZlKGZpbHRlcjogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgZmlsdGVyPy50eXBlICYmIEFycmF5LmlzQXJyYXkoZmlsdGVyPy5uYW1lKSAmJiAoZmlsdGVyPy5uYW1lLmxlbmd0aCB8fCBmaWx0ZXI/LmxheWVySWQubGVuZ3RoKVxuICApO1xufVxuXG4vKipcbiAqIFNhbml0eSBjaGVjayBvbiBmaWx0ZXJzIHRvIHByZXBhcmUgZm9yIHNhdmVcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL2ZpbHRlci11dGlscycpLmlzVmFsaWRGaWx0ZXJWYWx1ZX1cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgY29tcGxleGl0eSAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRGaWx0ZXJWYWx1ZSh0eXBlOiBzdHJpbmcgfCBudWxsLCB2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gIGlmICghdHlwZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIEZJTFRFUl9UWVBFUy5zZWxlY3Q6XG4gICAgICByZXR1cm4gdmFsdWUgPT09IHRydWUgfHwgdmFsdWUgPT09IGZhbHNlO1xuXG4gICAgY2FzZSBGSUxURVJfVFlQRVMucmFuZ2U6XG4gICAgY2FzZSBGSUxURVJfVFlQRVMudGltZVJhbmdlOlxuICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmV2ZXJ5KHYgPT4gdiAhPT0gbnVsbCAmJiAhaXNOYU4odikpO1xuXG4gICAgY2FzZSBGSUxURVJfVFlQRVMubXVsdGlTZWxlY3Q6XG4gICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgQm9vbGVhbih2YWx1ZS5sZW5ndGgpO1xuXG4gICAgY2FzZSBGSUxURVJfVFlQRVMuaW5wdXQ6XG4gICAgICByZXR1cm4gQm9vbGVhbih2YWx1ZS5sZW5ndGgpO1xuXG4gICAgY2FzZSBGSUxURVJfVFlQRVMucG9seWdvbjoge1xuICAgICAgY29uc3QgY29vcmRpbmF0ZXMgPSBnZXQodmFsdWUsIFsnZ2VvbWV0cnknLCAnY29vcmRpbmF0ZXMnXSk7XG4gICAgICByZXR1cm4gQm9vbGVhbih2YWx1ZSAmJiB2YWx1ZS5pZCAmJiBjb29yZGluYXRlcyk7XG4gICAgfVxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29sdW1uRmlsdGVyUHJvcHM8SyBleHRlbmRzIEtlcGxlclRhYmxlTW9kZWw8SywgTD4sIEw+KFxuICBmaWx0ZXI6IEZpbHRlcixcbiAgZGF0YXNldDogS1xuKToge2xpbmVDaGFydDogTGluZUNoYXJ0OyB5QXhzOiBGaWVsZH0gfCBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgaWYgKGZpbHRlci5wbG90VHlwZT8udHlwZSA9PT0gUExPVF9UWVBFUy5oaXN0b2dyYW0gfHwgIWZpbHRlci55QXhpcykge1xuICAgIC8vIGhpc3RvZ3JhbSBzaG91bGQgYmUgY2FsY3VsYXRlZCB3aGVuIGNyZWF0ZSBmaWx0ZXJcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBjb25zdCB7bWFwcGVkVmFsdWUgPSBbXX0gPSBmaWx0ZXI7XG4gIGNvbnN0IHt5QXhpc30gPSBmaWx0ZXI7XG4gIGNvbnN0IGZpZWxkSWR4ID0gZGF0YXNldC5nZXRDb2x1bW5GaWVsZElkeCh5QXhpcy5uYW1lKTtcbiAgaWYgKGZpZWxkSWR4IDwgMCkge1xuICAgIC8vIENvbnNvbGUud2FybihgeUF4aXMgJHt5QXhpcy5uYW1lfSBkb2VzIG5vdCBleGlzdCBpbiBkYXRhc2V0YCk7XG4gICAgcmV0dXJuIHtsaW5lQ2hhcnQ6IHt9LCB5QXhpc307XG4gIH1cblxuICAvLyByZXR1cm4gbGluZUNoYXJ0XG4gIGNvbnN0IHNlcmllcyA9IGRhdGFzZXQuZGF0YUNvbnRhaW5lclxuICAgIC5tYXAoXG4gICAgICAocm93LCByb3dJbmRleCkgPT4gKHtcbiAgICAgICAgeDogbWFwcGVkVmFsdWVbcm93SW5kZXhdLFxuICAgICAgICB5OiByb3cudmFsdWVBdChmaWVsZElkeClcbiAgICAgIH0pLFxuICAgICAgdHJ1ZVxuICAgIClcbiAgICAuZmlsdGVyKCh7eCwgeX0pID0+IE51bWJlci5pc0Zpbml0ZSh4KSAmJiBOdW1iZXIuaXNGaW5pdGUoeSkpXG4gICAgLnNvcnQoKGEsIGIpID0+IGFzY2VuZGluZyhhLngsIGIueCkpO1xuXG4gIGNvbnN0IHlEb21haW4gPSBleHRlbnQoc2VyaWVzLCBkID0+IGQueSkgYXMgW251bWJlciwgbnVtYmVyXTtcbiAgY29uc3QgeERvbWFpbiA9IFtzZXJpZXNbMF0ueCwgc2VyaWVzW3Nlcmllcy5sZW5ndGggLSAxXS54XSBhcyBbbnVtYmVyLCBudW1iZXJdO1xuXG4gIHJldHVybiB7bGluZUNoYXJ0OiB7c2VyaWVzLCB5RG9tYWluLCB4RG9tYWlufSwgeUF4aXN9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlRmlsdGVyUGxvdDxLIGV4dGVuZHMgS2VwbGVyVGFibGVNb2RlbDxLLCBhbnk+PihcbiAgZGF0YXNldHM6IHtbaWQ6IHN0cmluZ106IEt9LFxuICBmaWx0ZXI6IEZpbHRlcixcbiAgZGF0YUlkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWRcbikge1xuICBpZiAoZGF0YUlkKSB7XG4gICAgZmlsdGVyID0gcmVtb3ZlRmlsdGVyUGxvdChmaWx0ZXIsIGRhdGFJZCk7XG4gIH1cblxuICBpZiAoZmlsdGVyLnR5cGUgPT09IEZJTFRFUl9UWVBFUy50aW1lUmFuZ2UpIHtcbiAgICByZXR1cm4gdXBkYXRlVGltZUZpbHRlclBsb3RUeXBlKGZpbHRlciBhcyBUaW1lUmFuZ2VGaWx0ZXIsIGZpbHRlci5wbG90VHlwZSwgZGF0YXNldHMpO1xuICB9IGVsc2UgaWYgKGZpbHRlci50eXBlID09PSBGSUxURVJfVFlQRVMucmFuZ2UpIHtcbiAgICByZXR1cm4gdXBkYXRlUmFuZ2VGaWx0ZXJQbG90VHlwZShmaWx0ZXIgYXMgUmFuZ2VGaWx0ZXIsIGZpbHRlci5wbG90VHlwZSwgZGF0YXNldHMpO1xuICB9XG4gIHJldHVybiBmaWx0ZXI7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBkYXRhc2V0SWRzIGxpc3Qgb2YgZGF0YXNldCBpZHMgdG8gYmUgZmlsdGVyZWRcbiAqIEBwYXJhbSBkYXRhc2V0cyBhbGwgZGF0YXNldHNcbiAqIEBwYXJhbSBmaWx0ZXJzIGFsbCBmaWx0ZXJzIHRvIGJlIGFwcGxpZWQgdG8gZGF0YXNldHNcbiAqIEByZXR1cm4gZGF0YXNldHMgLSBuZXcgdXBkYXRlZCBkYXRhc2V0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0czxcbiAgSyBleHRlbmRzIEtlcGxlclRhYmxlTW9kZWw8SywgTD4sXG4gIEwgZXh0ZW5kcyB7Y29uZmlnOiB7ZGF0YUlkOiBzdHJpbmcgfCBudWxsfX1cbj4oXG4gIGRhdGFzZXRJZHM6IHN0cmluZ1tdLFxuICBkYXRhc2V0czoge1tpZDogc3RyaW5nXTogS30sXG4gIGZpbHRlcnM6IEZpbHRlcltdLFxuICBsYXllcnM/OiBMW11cbik6IHtbaWQ6IHN0cmluZ106IEt9IHtcbiAgY29uc3QgZGF0YUlkcyA9IHRvQXJyYXkoZGF0YXNldElkcyk7XG4gIHJldHVybiBkYXRhSWRzLnJlZHVjZSgoYWNjLCBkYXRhSWQpID0+IHtcbiAgICBjb25zdCBsYXllcnNUb0ZpbHRlciA9IChsYXllcnMgfHwgW10pLmZpbHRlcihsID0+IGwuY29uZmlnLmRhdGFJZCA9PT0gZGF0YUlkKTtcbiAgICBjb25zdCBhcHBsaWVkRmlsdGVycyA9IGZpbHRlcnMuZmlsdGVyKGQgPT4gc2hvdWxkQXBwbHlGaWx0ZXIoZCwgZGF0YUlkKSk7XG4gICAgY29uc3QgdGFibGUgPSBkYXRhc2V0c1tkYXRhSWRdO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmFjYyxcbiAgICAgIFtkYXRhSWRdOiB0YWJsZS5maWx0ZXJUYWJsZShhcHBsaWVkRmlsdGVycywgbGF5ZXJzVG9GaWx0ZXIsIHt9KVxuICAgIH07XG4gIH0sIGRhdGFzZXRzKTtcbn1cblxuLyoqXG4gKiBBcHBsaWVzIGEgbmV3IGZpZWxkIG5hbWUgdmFsdWUgdG8gZmlsdGVyIGFuZCB1cGRhdGUgYm90aCBmaWx0ZXIgYW5kIGRhdGFzZXRcbiAqIEBwYXJhbSBmaWx0ZXIgLSB0byBiZSBhcHBsaWVkIHRoZSBuZXcgZmllbGQgbmFtZSBvblxuICogQHBhcmFtIGRhdGFzZXQgLSBkYXRhc2V0IHRoZSBmaWVsZCBiZWxvbmdzIHRvXG4gKiBAcGFyYW0gZmllbGROYW1lIC0gZmllbGQubmFtZVxuICogQHBhcmFtIGZpbHRlckRhdGFzZXRJbmRleCAtIGZpZWxkLm5hbWVcbiAqIEBwYXJhbSBvcHRpb25cbiAqIEByZXR1cm4gLSB7ZmlsdGVyLCBkYXRhc2V0c31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5RmlsdGVyRmllbGROYW1lPEsgZXh0ZW5kcyBLZXBsZXJUYWJsZU1vZGVsPEssIEw+LCBMPihcbiAgZmlsdGVyOiBGaWx0ZXIsXG4gIGRhdGFzZXQ6IEssXG4gIGZpZWxkTmFtZTogc3RyaW5nLFxuICBmaWx0ZXJEYXRhc2V0SW5kZXggPSAwLFxuICBvcHRpb24/OiB7bWVyZ2VEb21haW46IGJvb2xlYW59XG4pOiB7XG4gIGZpbHRlcjogRmlsdGVyIHwgbnVsbDtcbiAgZGF0YXNldDogSztcbn0ge1xuICAvLyB1c2luZyBmaWx0ZXJEYXRhc2V0SW5kZXggd2UgY2FuIGZpbHRlciBvbmx5IHRoZSBzcGVjaWZpZWQgZGF0YXNldFxuICBjb25zdCBtZXJnZURvbWFpbiA9XG4gICAgb3B0aW9uICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb24sICdtZXJnZURvbWFpbicpXG4gICAgICA/IG9wdGlvbi5tZXJnZURvbWFpblxuICAgICAgOiBmYWxzZTtcblxuICBjb25zdCBmaWVsZEluZGV4ID0gZGF0YXNldC5nZXRDb2x1bW5GaWVsZElkeChmaWVsZE5hbWUpO1xuICAvLyBpZiBubyBmaWVsZCB3aXRoIHNhbWUgbmFtZSBpcyBmb3VuZCwgbW92ZSB0byB0aGUgbmV4dCBkYXRhc2V0c1xuICBpZiAoZmllbGRJbmRleCA9PT0gLTEpIHtcbiAgICAvLyB0aHJvdyBuZXcgRXJyb3IoYGZpZWxkSW5kZXggbm90IGZvdW5kLiBEYXRhc2V0IG11c3QgY29udGFpbiBhIHByb3BlcnR5IHdpdGggbmFtZTogJHtmaWVsZE5hbWV9YCk7XG4gICAgcmV0dXJuIHtmaWx0ZXI6IG51bGwsIGRhdGFzZXR9O1xuICB9XG5cbiAgLy8gVE9ETzogdmFsaWRhdGUgZmllbGQgdHlwZVxuICBjb25zdCBmaWx0ZXJQcm9wcyA9IGRhdGFzZXQuZ2V0Q29sdW1uRmlsdGVyUHJvcHMoZmllbGROYW1lKTtcblxuICBsZXQgbmV3RmlsdGVyID0ge1xuICAgIC4uLihtZXJnZURvbWFpbiA/IG1lcmdlRmlsdGVyRG9tYWluU3RlcChmaWx0ZXIsIGZpbHRlclByb3BzKSA6IHsuLi5maWx0ZXIsIC4uLmZpbHRlclByb3BzfSksXG4gICAgbmFtZTogT2JqZWN0LmFzc2lnbihbLi4udG9BcnJheShmaWx0ZXIubmFtZSldLCB7W2ZpbHRlckRhdGFzZXRJbmRleF06IGZpZWxkTmFtZX0pLFxuICAgIGZpZWxkSWR4OiBPYmplY3QuYXNzaWduKFsuLi50b0FycmF5KGZpbHRlci5maWVsZElkeCldLCB7XG4gICAgICBbZmlsdGVyRGF0YXNldEluZGV4XTogZmllbGRJbmRleFxuICAgIH0pLFxuICAgIC8vIE1ha2Ugc3VyZSBwbG90VHlwZSBpcyBub3Qgb3ZlcndyaXR0ZW4gYnkgdGhlIGRlZmF1bHQgZW1wdHkgcGxvdFR5cGVcbiAgICAuLi4oZmlsdGVyLnBsb3RUeXBlID8ge3Bsb3RUeXBlOiBmaWx0ZXIucGxvdFR5cGV9IDoge30pXG4gIH07XG5cbiAgLy8gVE9ETzogaWYgd2UgZG9uJ3Qgc2V0IGZpbHRlciB2YWx1ZSBpbiBmaWx0ZXJQcm9wcywgd2UgZG9uJ3QgbmVlZCB0byBkbyB0aGlzXG4gIGlmIChmaWx0ZXJEYXRhc2V0SW5kZXggPiAwKSB7XG4gICAgLy8gZG9uJ3QgcmVzZXQgdGhlIGZpbHRlciB2YWx1ZSBpZiB3ZSBhcmUganVzdCBhZGRpbmcgYSBzeW5jZWQgZGF0YXNldFxuICAgIG5ld0ZpbHRlciA9IHtcbiAgICAgIC4uLm5ld0ZpbHRlcixcbiAgICAgIHZhbHVlOiBmaWx0ZXIudmFsdWVcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBmaWx0ZXI6IG5ld0ZpbHRlcixcbiAgICBkYXRhc2V0XG4gIH07XG59XG5cbi8qKlxuICogTWVyZ2Ugb25lIGZpbHRlciB3aXRoIG90aGVyIGZpbHRlciBwcm9wIGRvbWFpblxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBjb21wbGV4aXR5ICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VGaWx0ZXJEb21haW5TdGVwKFxuICBmaWx0ZXI6IEZpbHRlcixcbiAgZmlsdGVyUHJvcHM/OiBQYXJ0aWFsPEZpbHRlcj5cbik6IChGaWx0ZXIgJiB7c3RlcD86IG51bWJlcn0pIHwgbnVsbCB7XG4gIGlmICghZmlsdGVyKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoIWZpbHRlclByb3BzKSB7XG4gICAgcmV0dXJuIGZpbHRlcjtcbiAgfVxuXG4gIGlmICgoZmlsdGVyLmZpZWxkVHlwZSAmJiBmaWx0ZXIuZmllbGRUeXBlICE9PSBmaWx0ZXJQcm9wcy5maWVsZFR5cGUpIHx8ICFmaWx0ZXJQcm9wcy5kb21haW4pIHtcbiAgICByZXR1cm4gZmlsdGVyO1xuICB9XG5cbiAgY29uc3Qgc29ydGVkRG9tYWluID0gIWZpbHRlci5kb21haW5cbiAgICA/IGZpbHRlclByb3BzLmRvbWFpblxuICAgIDogWy4uLihmaWx0ZXIuZG9tYWluIHx8IFtdKSwgLi4uKGZpbHRlclByb3BzLmRvbWFpbiB8fCBbXSldLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcblxuICBjb25zdCBuZXdGaWx0ZXIgPSB7XG4gICAgLi4uZmlsdGVyLFxuICAgIC4uLmZpbHRlclByb3BzLFxuICAgIC8vIHVzZSBtaW4gbWF4IGFzIGRlZmF1bHQgZG9tYWluXG4gICAgZG9tYWluOiBbc29ydGVkRG9tYWluWzBdLCBzb3J0ZWREb21haW5bc29ydGVkRG9tYWluLmxlbmd0aCAtIDFdXVxuICB9O1xuXG4gIHN3aXRjaCAoZmlsdGVyUHJvcHMuZmllbGRUeXBlKSB7XG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMuc3RyaW5nOlxuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLmgzOlxuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLmRhdGU6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5uZXdGaWx0ZXIsXG4gICAgICAgIGRvbWFpbjogdW5pcXVlKHNvcnRlZERvbWFpbilcbiAgICAgIH07XG5cbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy50aW1lc3RhbXA6IHtcbiAgICAgIGNvbnN0IHN0ZXAgPVxuICAgICAgICAoZmlsdGVyIGFzIFRpbWVSYW5nZUZpbHRlcikuc3RlcCA8IChmaWx0ZXJQcm9wcyBhcyBUaW1lUmFuZ2VGaWVsZERvbWFpbikuc3RlcFxuICAgICAgICAgID8gKGZpbHRlciBhcyBUaW1lUmFuZ2VGaWx0ZXIpLnN0ZXBcbiAgICAgICAgICA6IChmaWx0ZXJQcm9wcyBhcyBUaW1lUmFuZ2VGaWVsZERvbWFpbikuc3RlcDtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubmV3RmlsdGVyLFxuICAgICAgICBzdGVwXG4gICAgICB9O1xuICAgIH1cbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5yZWFsOlxuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLmludGVnZXI6XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBuZXdGaWx0ZXI7XG4gIH1cbn1cbi8qIGVzbGludC1lbmFibGUgY29tcGxleGl0eSAqL1xuXG4vKipcbiAqIEdlbmVyYXRlcyBwb2x5Z29uIGZpbHRlclxuICovXG5leHBvcnQgY29uc3QgZmVhdHVyZVRvRmlsdGVyVmFsdWUgPSAoXG4gIGZlYXR1cmU6IEZlYXR1cmUsXG4gIGZpbHRlcklkOiBzdHJpbmcsXG4gIHByb3BlcnRpZXM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+XG4pOiBGZWF0dXJlVmFsdWUgPT4gKHtcbiAgLi4uZmVhdHVyZSxcbiAgaWQ6IGZlYXR1cmUuaWQsXG4gIHByb3BlcnRpZXM6IHtcbiAgICAuLi5mZWF0dXJlLnByb3BlcnRpZXMsXG4gICAgLi4ucHJvcGVydGllcyxcbiAgICBmaWx0ZXJJZFxuICB9XG59KTtcblxuZXhwb3J0IGNvbnN0IGdldEZpbHRlcklkSW5GZWF0dXJlID0gKGY6IEZlYXR1cmVWYWx1ZSk6IHN0cmluZyA9PiBnZXQoZiwgWydwcm9wZXJ0aWVzJywgJ2ZpbHRlcklkJ10pO1xuXG4vKipcbiAqIEdlbmVyYXRlcyBwb2x5Z29uIGZpbHRlclxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVQb2x5Z29uRmlsdGVyPFxuICBMIGV4dGVuZHMge2NvbmZpZzoge2RhdGFJZDogc3RyaW5nIHwgbnVsbDsgbGFiZWw6IHN0cmluZ307IGlkOiBzdHJpbmd9XG4+KGxheWVyczogTFtdLCBmZWF0dXJlOiBGZWF0dXJlKTogUG9seWdvbkZpbHRlciB7XG4gIGNvbnN0IGRhdGFJZCA9IGxheWVycy5tYXAobCA9PiBsLmNvbmZpZy5kYXRhSWQpLmZpbHRlcihub3ROdWxsb3JVbmRlZmluZWQpO1xuICBjb25zdCBsYXllcklkID0gbGF5ZXJzLm1hcChsID0+IGwuaWQpO1xuICBjb25zdCBuYW1lID0gbGF5ZXJzLm1hcChsID0+IGwuY29uZmlnLmxhYmVsKTtcbiAgY29uc3QgZmlsdGVyID0gZ2V0RGVmYXVsdEZpbHRlcih7ZGF0YUlkfSk7XG4gIHJldHVybiB7XG4gICAgLi4uZmlsdGVyLFxuICAgIGZpeGVkRG9tYWluOiB0cnVlLFxuICAgIHR5cGU6IEZJTFRFUl9UWVBFUy5wb2x5Z29uLFxuICAgIG5hbWUsXG4gICAgbGF5ZXJJZCxcbiAgICB2YWx1ZTogZmVhdHVyZVRvRmlsdGVyVmFsdWUoZmVhdHVyZSwgZmlsdGVyLmlkLCB7aXNWaXNpYmxlOiB0cnVlfSlcbiAgfTtcbn1cblxuLyoqXG4gKiBSdW4gZmlsdGVyIGVudGlyZWx5IG9uIENQVVxuICovXG5pbnRlcmZhY2UgU3RhdGVUeXBlPEsgZXh0ZW5kcyBLZXBsZXJUYWJsZU1vZGVsPEssIEw+LCBMPiB7XG4gIGxheWVyczogTFtdO1xuICBmaWx0ZXJzOiBGaWx0ZXJbXTtcbiAgZGF0YXNldHM6IHtbaWQ6IHN0cmluZ106IEt9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyRGF0YXNldENQVTxUIGV4dGVuZHMgU3RhdGVUeXBlPEssIEw+LCBLIGV4dGVuZHMgS2VwbGVyVGFibGVNb2RlbDxLLCBMPiwgTD4oXG4gIHN0YXRlOiBULFxuICBkYXRhSWQ6IHN0cmluZ1xuKTogVCB7XG4gIGNvbnN0IGRhdGFzZXRGaWx0ZXJzID0gc3RhdGUuZmlsdGVycy5maWx0ZXIoZiA9PiBmLmRhdGFJZC5pbmNsdWRlcyhkYXRhSWQpKTtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG5cbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgY3B1RmlsdGVyZWREYXRhc2V0ID0gZGF0YXNldC5maWx0ZXJUYWJsZUNQVShkYXRhc2V0RmlsdGVycywgc3RhdGUubGF5ZXJzKTtcblxuICByZXR1cm4gc2V0KFsnZGF0YXNldHMnLCBkYXRhSWRdLCBjcHVGaWx0ZXJlZERhdGFzZXQsIHN0YXRlKTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBwYXJzZWQgZmlsdGVycyB3aXRoIGRhdGFzZXRzIGFuZCBhZGQgZmlsdGVyUHJvcHMgdG8gZmllbGRcbiAqL1xudHlwZSBNaW5WaXNTdGF0ZUZvckZpbHRlciA9IFBpY2s8VmlzU3RhdGUsICdsYXllcnMnIHwgJ2RhdGFzZXRzJyB8ICdpc01lcmdpbmdEYXRhc2V0cyc+O1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlRmlsdGVyc1VwZGF0ZURhdGFzZXRzPFxuICBTIGV4dGVuZHMgTWluVmlzU3RhdGVGb3JGaWx0ZXIsXG4gIEsgZXh0ZW5kcyBLZXBsZXJUYWJsZU1vZGVsPEssIEw+LFxuICBMIGV4dGVuZHMge2NvbmZpZzoge2RhdGFJZDogc3RyaW5nIHwgbnVsbDsgbGFiZWw6IHN0cmluZ307IGlkOiBzdHJpbmd9XG4+KFxuICBzdGF0ZTogUyxcbiAgZmlsdGVyc1RvVmFsaWRhdGU6IFBhcnNlZEZpbHRlcltdID0gW11cbik6IHtcbiAgdmFsaWRhdGVkOiBGaWx0ZXJbXTtcbiAgZmFpbGVkOiBGaWx0ZXJbXTtcbiAgdXBkYXRlZERhdGFzZXRzOiBTWydkYXRhc2V0cyddO1xufSB7XG4gIC8vIFRPRE8gQmV0dGVyIFR5cGluZ3MgaGVyZVxuICBjb25zdCB2YWxpZGF0ZWQ6IGFueVtdID0gW107XG4gIGNvbnN0IGZhaWxlZDogYW55W10gPSBbXTtcbiAgY29uc3Qge2RhdGFzZXRzLCBsYXllcnN9ID0gc3RhdGU7XG4gIGxldCB1cGRhdGVkRGF0YXNldHMgPSBkYXRhc2V0cztcblxuICAvLyBtZXJnZSBmaWx0ZXJzXG4gIGZpbHRlcnNUb1ZhbGlkYXRlLmZvckVhY2goZmlsdGVyVG9WYWxpZGF0ZSA9PiB7XG4gICAgLy8gd2UgY2FuIG9ubHkgbG9vayBmb3IgZGF0YXNldHMgZGVmaW5lIGluIHRoZSBmaWx0ZXIgZGF0YUlkXG4gICAgY29uc3QgZGF0YXNldElkcyA9IHRvQXJyYXkoZmlsdGVyVG9WYWxpZGF0ZS5kYXRhSWQpO1xuXG4gICAgLy8gd2UgY2FuIG1lcmdlIGEgZmlsdGVyIG9ubHkgaWYgYWxsIGRhdGFzZXRzIGluIGZpbHRlci5kYXRhSWQgYXJlIGxvYWRlZFxuICAgIGlmIChkYXRhc2V0SWRzLmV2ZXJ5KGQgPT4gZGF0YXNldHNbZF0gJiYgIXN0YXRlLmlzTWVyZ2luZ0RhdGFzZXRzW2RdKSkge1xuICAgICAgLy8gYWxsIGRhdGFzZXRJZHMgaW4gZmlsdGVyIG11c3QgYmUgcHJlc2VudCB0aGUgc3RhdGUgZGF0YXNldHNcbiAgICAgIGNvbnN0IHt2YWxpZGF0ZWRGaWx0ZXIsIGFwcGx5VG9EYXRhc2V0cywgYXVnbWVudGVkRGF0YXNldHN9ID0gZGF0YXNldElkcy5yZWR1Y2U8e1xuICAgICAgICB2YWxpZGF0ZWRGaWx0ZXI6IEZpbHRlciB8IG51bGw7XG4gICAgICAgIGFwcGx5VG9EYXRhc2V0czogc3RyaW5nW107XG4gICAgICAgIGF1Z21lbnRlZERhdGFzZXRzOiB7W2RhdGFzZXRJZDogc3RyaW5nXTogYW55fTtcbiAgICAgIH0+KFxuICAgICAgICAoYWNjLCBkYXRhc2V0SWQpID0+IHtcbiAgICAgICAgICBjb25zdCBkYXRhc2V0ID0gdXBkYXRlZERhdGFzZXRzW2RhdGFzZXRJZF07XG4gICAgICAgICAgY29uc3QgZGF0YXNldExheWVycyA9IGxheWVycy5maWx0ZXIobCA9PiBsLmNvbmZpZy5kYXRhSWQgPT09IGRhdGFzZXQuaWQpO1xuICAgICAgICAgIGNvbnN0IHRvVmFsaWRhdGUgPSBhY2MudmFsaWRhdGVkRmlsdGVyIHx8IGZpbHRlclRvVmFsaWRhdGU7XG5cbiAgICAgICAgICBjb25zdCB7ZmlsdGVyOiB1cGRhdGVkRmlsdGVyLCBkYXRhc2V0OiB1cGRhdGVkRGF0YXNldH0gPSB2YWxpZGF0ZUZpbHRlcldpdGhEYXRhKFxuICAgICAgICAgICAgYWNjLmF1Z21lbnRlZERhdGFzZXRzW2RhdGFzZXRJZF0gfHwgZGF0YXNldCxcbiAgICAgICAgICAgIHRvVmFsaWRhdGUsXG4gICAgICAgICAgICBkYXRhc2V0TGF5ZXJzXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmICh1cGRhdGVkRmlsdGVyKSB7XG4gICAgICAgICAgICAvLyBtZXJnZSBmaWx0ZXIgZG9tYWluIHN0ZXBcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHZhbGlkYXRlZEZpbHRlcjogdXBkYXRlZEZpbHRlcixcblxuICAgICAgICAgICAgICBhcHBseVRvRGF0YXNldHM6IFsuLi5hY2MuYXBwbHlUb0RhdGFzZXRzLCBkYXRhc2V0SWRdLFxuXG4gICAgICAgICAgICAgIGF1Z21lbnRlZERhdGFzZXRzOiB7XG4gICAgICAgICAgICAgICAgLi4uYWNjLmF1Z21lbnRlZERhdGFzZXRzLFxuICAgICAgICAgICAgICAgIFtkYXRhc2V0SWRdOiB1cGRhdGVkRGF0YXNldFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB2YWxpZGF0ZWRGaWx0ZXI6IG51bGwsXG4gICAgICAgICAgYXBwbHlUb0RhdGFzZXRzOiBbXSxcbiAgICAgICAgICBhdWdtZW50ZWREYXRhc2V0czoge31cbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgICAgaWYgKHZhbGlkYXRlZEZpbHRlciAmJiBpc0VxdWFsKGRhdGFzZXRJZHMsIGFwcGx5VG9EYXRhc2V0cykpIHtcbiAgICAgICAgbGV0IGRvbWFpbiA9IHZhbGlkYXRlZEZpbHRlci5kb21haW47XG4gICAgICAgIGlmICgodmFsaWRhdGVkRmlsdGVyIGFzIFRpbWVSYW5nZUZpbHRlcikuc3luY2VkV2l0aExheWVyVGltZWxpbmUpIHtcbiAgICAgICAgICBjb25zdCBhbmltYXRhYmxlTGF5ZXJzID0gZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMobGF5ZXJzKTtcbiAgICAgICAgICBkb21haW4gPSBtZXJnZVRpbWVEb21haW5zKFtcbiAgICAgICAgICAgIC4uLmFuaW1hdGFibGVMYXllcnMubWFwKGwgPT4gbC5jb25maWcuYW5pbWF0aW9uLmRvbWFpbiB8fCBbMCwgMF0pLFxuICAgICAgICAgICAgdmFsaWRhdGVkRmlsdGVyLmRvbWFpblxuICAgICAgICAgIF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFsaWRhdGVkRmlsdGVyLnZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihmaWx0ZXJUb1ZhbGlkYXRlLnZhbHVlLCB7XG4gICAgICAgICAgLi4udmFsaWRhdGVkRmlsdGVyLFxuICAgICAgICAgIGRvbWFpblxuICAgICAgICB9KTtcblxuICAgICAgICB2YWxpZGF0ZWQucHVzaCh1cGRhdGVGaWx0ZXJQbG90KGRhdGFzZXRzLCB2YWxpZGF0ZWRGaWx0ZXIpKTtcbiAgICAgICAgdXBkYXRlZERhdGFzZXRzID0ge1xuICAgICAgICAgIC4uLnVwZGF0ZWREYXRhc2V0cyxcbiAgICAgICAgICAuLi5hdWdtZW50ZWREYXRhc2V0c1xuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmFpbGVkLnB1c2goZmlsdGVyVG9WYWxpZGF0ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZhaWxlZC5wdXNoKGZpbHRlclRvVmFsaWRhdGUpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHt2YWxpZGF0ZWQsIGZhaWxlZCwgdXBkYXRlZERhdGFzZXRzfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUZpbHRlclBsb3QoZmlsdGVyOiBGaWx0ZXIsIGRhdGFJZDogc3RyaW5nKSB7XG4gIGxldCBuZXh0RmlsdGVyID0gZmlsdGVyO1xuXG4gIGNvbnN0IHJhbmdlRmlsdGVyID0gZmlsdGVyIGFzIFJhbmdlRmlsdGVyO1xuICBpZiAocmFuZ2VGaWx0ZXIuYmlucyAmJiByYW5nZUZpbHRlci5iaW5zW2RhdGFJZF0pIHtcbiAgICBjb25zdCB7W2RhdGFJZF06IF9kZWxldGUsIC4uLm5leHRCaW5zfSA9IHJhbmdlRmlsdGVyLmJpbnM7XG4gICAgbmV4dEZpbHRlciA9IHtcbiAgICAgIC4uLnJhbmdlRmlsdGVyLFxuICAgICAgYmluczogbmV4dEJpbnNcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgdGltZUZpbHRlciA9IGZpbHRlciBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG4gIGlmICh0aW1lRmlsdGVyLnRpbWVCaW5zICYmIHRpbWVGaWx0ZXIudGltZUJpbnNbZGF0YUlkXSkge1xuICAgIGNvbnN0IHtbZGF0YUlkXTogX19kZWxldGUsIC4uLm5leHRUaW1lQmluc30gPSB0aW1lRmlsdGVyLnRpbWVCaW5zO1xuICAgIG5leHRGaWx0ZXIgPSB7XG4gICAgICAuLi5uZXh0RmlsdGVyLFxuICAgICAgdGltZUJpbnM6IG5leHRUaW1lQmluc1xuICAgIH0gYXMgRmlsdGVyO1xuICB9XG5cbiAgcmV0dXJuIG5leHRGaWx0ZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkVGltZURvbWFpbihkb21haW4pIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZG9tYWluKSAmJiBkb21haW4uZXZlcnkoTnVtYmVyLmlzRmluaXRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRpbWVXaWRnZXRIaW50Rm9ybWF0dGVyKGRvbWFpbjogW251bWJlciwgbnVtYmVyXSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICghaXNWYWxpZFRpbWVEb21haW4oZG9tYWluKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBkaWZmID0gZG9tYWluWzFdIC0gZG9tYWluWzBdO1xuICByZXR1cm4gZGlmZiA+IGR1cmF0aW9uV2Vla1xuICAgID8gJ0wnXG4gICAgOiBkaWZmID4gZHVyYXRpb25EYXlcbiAgICA/ICdMIExUJ1xuICAgIDogZGlmZiA+IGR1cmF0aW9uSG91clxuICAgID8gJ0xUJ1xuICAgIDogJ0xUUyc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NpZGVGaWx0ZXIoZmlsdGVyOiBGaWx0ZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIGZpbHRlci52aWV3ID09PSBGSUxURVJfVklFV19UWVBFUy5zaWRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VUaW1lRG9tYWlucyhkb21haW5zOiAoW251bWJlciwgbnVtYmVyXSB8IG51bGwpW10pOiBbbnVtYmVyLCBudW1iZXJdIHtcbiAgcmV0dXJuIGRvbWFpbnMucmVkdWNlKFxuICAgIChhY2M6IFtudW1iZXIsIG51bWJlcl0sIGRvbWFpbikgPT4gW1xuICAgICAgTWF0aC5taW4oYWNjWzBdLCBkb21haW4/LlswXSA/PyBJbmZpbml0eSksXG4gICAgICBNYXRoLm1heChhY2NbMV0sIGRvbWFpbj8uWzFdID8/IC1JbmZpbml0eSlcbiAgICBdLFxuICAgIFtOdW1iZXIoSW5maW5pdHkpLCAtSW5maW5pdHldXG4gICkgYXMgW251bWJlciwgbnVtYmVyXTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0xheWVyfSBsYXllclxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNMYXllckFuaW1hdGFibGUobGF5ZXI6IGFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gbGF5ZXIuY29uZmlnLmFuaW1hdGlvbj8uZW5hYmxlZCAmJiBBcnJheS5pc0FycmF5KGxheWVyLmNvbmZpZy5hbmltYXRpb24uZG9tYWluKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0xheWVyW119IGxheWVyc1xuICogQHJldHVybnMge0xheWVyW119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVycyhsYXllcnM6IGFueVtdKTogYW55W10ge1xuICByZXR1cm4gbGF5ZXJzLmZpbHRlcihsID0+IGlzTGF5ZXJBbmltYXRhYmxlKGwpICYmIGwuY29uZmlnLmlzVmlzaWJsZSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtMYXllcltdfSBsYXllcnNcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcmV0dXJucyB7TGF5ZXJbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzQnlUeXBlKGxheWVyczogYW55W10sIHR5cGU6IHN0cmluZyk6IGFueVtdIHtcbiAgcmV0dXJuIGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzKGxheWVycykuZmlsdGVyKGwgPT4gbC50eXBlID09PSB0eXBlKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0xheWVyW119IGxheWVyc1xuICogQHJldHVybnMge0xheWVyW119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzKGxheWVyczogYW55W10pOiBhbnlbXSB7XG4gIC8vIEB0cy1pZ25vcmVcbiAgcmV0dXJuIGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzKGxheWVycykuZmlsdGVyKGwgPT4gbC5jb25maWcuYW5pbWF0aW9uPy50aW1lU3RlcHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VGaWx0ZXJXaXRoVGltZWxpbmUoXG4gIGZpbHRlcjogVGltZVJhbmdlRmlsdGVyLFxuICBhbmltYXRpb25Db25maWc6IEFuaW1hdGlvbkNvbmZpZ1xuKToge2ZpbHRlcjogVGltZVJhbmdlRmlsdGVyOyBhbmltYXRpb25Db25maWc6IEFuaW1hdGlvbkNvbmZpZ30ge1xuICBpZiAoXG4gICAgZmlsdGVyPy50eXBlID09PSBGSUxURVJfVFlQRVMudGltZVJhbmdlICYmXG4gICAgZmlsdGVyLnN5bmNlZFdpdGhMYXllclRpbWVsaW5lICYmXG4gICAgYW5pbWF0aW9uQ29uZmlnICYmXG4gICAgQXJyYXkuaXNBcnJheShhbmltYXRpb25Db25maWcuZG9tYWluKVxuICApIHtcbiAgICBjb25zdCBkb21haW4gPSBtZXJnZVRpbWVEb21haW5zKFtmaWx0ZXIuZG9tYWluLCBhbmltYXRpb25Db25maWcuZG9tYWluIGFzIFtudW1iZXIsIG51bWJlcl1dKTtcbiAgICByZXR1cm4ge1xuICAgICAgZmlsdGVyOiB7XG4gICAgICAgIC4uLmZpbHRlcixcbiAgICAgICAgZG9tYWluXG4gICAgICB9LFxuICAgICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAgIC4uLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgZG9tYWluXG4gICAgICB9XG4gICAgfTtcbiAgfVxuICByZXR1cm4ge2ZpbHRlciwgYW5pbWF0aW9uQ29uZmlnfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNjYWxlU291cmNlRG9tYWluVG9EZXN0aW5hdGlvbihcbiAgc291cmNlRG9tYWluOiBbbnVtYmVyLCBudW1iZXJdLFxuICBkZXN0aW5hdGlvbkRvbWFpbjogW251bWJlciwgbnVtYmVyXVxuKTogW251bWJlciwgbnVtYmVyXSB7XG4gIC8vIDAgLT4gMTAwOiBtZXJnZWQgZG9tYWlucyB0MSAtIHQwID09PSAxMDAlIGZpbHRlciBtYXkgYWxyZWFkeSBoYXZlIHRoaXMgaW5mbyB3aGljaCBpcyBnb29kXG4gIGNvbnN0IHNvdXJjZURvbWFpblNpemUgPSBzb3VyY2VEb21haW5bMV0gLSBzb3VyY2VEb21haW5bMF07XG4gIC8vIDEwIC0+IDIwOiBhbmltYXRpb25Db25maWcgZG9tYWluIGQxIC0gZDAgPT09IGFuaW1hdGlvbkNvbmZpZyBzaXplXG4gIGNvbnN0IGRlc3RpbmF0aW9uRG9tYWluU2l6ZSA9IGRlc3RpbmF0aW9uRG9tYWluWzFdIC0gZGVzdGluYXRpb25Eb21haW5bMF07XG4gIC8vIHNjYWxlIGFuaW1hdGlvbkNvbmZpZyBzaXplIHVzaW5nIGRvbWFpbiBzaXplXG4gIGNvbnN0IHNjYWxlZFNvdXJjZURvbWFpblNpemUgPSAoc291cmNlRG9tYWluU2l6ZSAvIGRlc3RpbmF0aW9uRG9tYWluU2l6ZSkgKiAxMDA7XG4gIC8vIHNjYWxlIGQwIC0gdDAgdXNpbmcgZG9tYWluIHNpemUgdG8gZmluZCBzdGFydGluZyBwb2ludFxuICBjb25zdCBvZmZzZXQgPSBzb3VyY2VEb21haW5bMF0gLSBkZXN0aW5hdGlvbkRvbWFpblswXTtcbiAgY29uc3Qgc2NhbGVkT2Zmc2V0ID0gKG9mZnNldCAvIGRlc3RpbmF0aW9uRG9tYWluU2l6ZSkgKiAxMDA7XG4gIHJldHVybiBbc2NhbGVkT2Zmc2V0LCBzY2FsZWRTb3VyY2VEb21haW5TaXplICsgc2NhbGVkT2Zmc2V0XTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbHRlclNjYWxlZFRpbWVsaW5lKGZpbHRlciwgYW5pbWF0aW9uQ29uZmlnKTogW251bWJlciwgbnVtYmVyXSB8IFtdIHtcbiAgaWYgKCEoZmlsdGVyLnN5bmNlZFdpdGhMYXllclRpbWVsaW5lICYmIGFuaW1hdGlvbkNvbmZpZz8uZG9tYWluKSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHJldHVybiBzY2FsZVNvdXJjZURvbWFpblRvRGVzdGluYXRpb24oYW5pbWF0aW9uQ29uZmlnLmRvbWFpbiwgZmlsdGVyLmRvbWFpbik7XG59XG4iXSwi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
1250
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfa2V5bWlycm9yIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfbG9kYXNoIiwiX2xvZGFzaDIiLCJfZDNBcnJheSIsIl9ib29sZWFuV2l0aGluIiwiX2hlbHBlcnMiLCJfZGVjaW1hbCIsIl9jb25zdGFudHMiLCJTY2FsZVV0aWxzIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfaDNKcyIsIl9jb21tb25VdGlscyIsIl91dGlscyIsIl9kYXRhVXRpbHMiLCJfcGxvdCIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIl90b1Byb3BlcnR5S2V5IiwiX3RvUHJpbWl0aXZlIiwiU3ltYm9sIiwidG9QcmltaXRpdmUiLCJUeXBlRXJyb3IiLCJTdHJpbmciLCJOdW1iZXIiLCJvd25LZXlzIiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkdXJhdGlvblNlY29uZCIsImV4cG9ydHMiLCJkdXJhdGlvbk1pbnV0ZSIsImR1cmF0aW9uSG91ciIsImR1cmF0aW9uRGF5IiwiZHVyYXRpb25XZWVrIiwiZHVyYXRpb25ZZWFyIiwiVGltZXN0YW1wU3RlcE1hcCIsIm1heCIsInN0ZXAiLCJQT1NJVElWRV9JTkZJTklUWSIsIkZJTFRFUl9VUERBVEVSX1BST1BTIiwia2V5TWlycm9yIiwiZGF0YUlkIiwibmFtZSIsImxheWVySWQiLCJGSUxURVJfQ09NUE9ORU5UUyIsIkZJTFRFUl9UWVBFUyIsInNlbGVjdCIsIm11bHRpU2VsZWN0IiwidGltZVJhbmdlIiwicmFuZ2UiLCJwb2x5Z29uIiwiREVGQVVMVF9GSUxURVJfU1RSVUNUVVJFIiwiaWQiLCJlbmFibGVkIiwiZml4ZWREb21haW4iLCJ2aWV3IiwiRklMVEVSX1ZJRVdfVFlQRVMiLCJzaWRlIiwiaXNBbmltYXRpbmciLCJhbmltYXRpb25XaW5kb3ciLCJBTklNQVRJT05fV0lORE9XIiwiZnJlZSIsInNwZWVkIiwidHlwZSIsImZpZWxkSWR4IiwiZG9tYWluIiwidmFsdWUiLCJwbG90VHlwZSIsIlBMT1RfVFlQRVMiLCJoaXN0b2dyYW0iLCJ5QXhpcyIsImdwdSIsIkZJTFRFUl9JRF9MRU5HVEgiLCJMQVlFUl9GSUxURVJTIiwiZ2V0RGVmYXVsdEZpbHRlciIsIl9yZWYiLCJ1bmRlZmluZWQiLCJ0b0FycmF5IiwiZ2VuZXJhdGVIYXNoSWQiLCJzaG91bGRBcHBseUZpbHRlciIsImRhdGFzZXRJZCIsImRhdGFJZHMiLCJpbmNsdWRlcyIsInZhbGlkYXRlUG9seWdvbkZpbHRlciIsImRhdGFzZXQiLCJsYXllcnMiLCJmYWlsZWQiLCJpc1ZhbGlkRmlsdGVyVmFsdWUiLCJpc1ZhbGlkRGF0YXNldCIsImxheWVyIiwiZmluZCIsImwiLCJmaWx0ZXJWYWxpZGF0b3JzIiwidmFsaWRhdGVGaWx0ZXIiLCJkYXRhc2V0cyIsIl9maWx0ZXIkdmlldyIsImZpbHRlckRhdGFJZCIsImZpbHRlckRhdGFzZXRJbmRleCIsImluZGV4T2YiLCJpbml0aWFsaXplRmlsdGVyIiwiZmllbGROYW1lIiwiX2FwcGx5RmlsdGVyRmllbGROYW1lIiwiYXBwbHlGaWx0ZXJGaWVsZE5hbWUiLCJtZXJnZURvbWFpbiIsInVwZGF0ZWRGaWx0ZXIiLCJ1cGRhdGVkRGF0YXNldCIsInZhbGlkYXRlRmlsdGVyWUF4aXMiLCJ2YWxpZGF0ZUZpbHRlcldpdGhEYXRhIiwicHJvdG90eXBlIiwiZmllbGRzIiwiX2ZpbHRlciIsIm1hdGNoZWRBeGlzIiwiX3JlZjIiLCJnZXRGaWx0ZXJQcm9wcyIsImZpZWxkIiwiZmllbGREb21haW4iLCJmaWx0ZXJQcm9wcyIsImZpZWxkVHlwZSIsIkFMTF9GSUVMRF9UWVBFUyIsInJlYWwiLCJpbnRlZ2VyIiwidHlwZU9wdGlvbnMiLCJzdHJpbmciLCJoMyIsImRhdGUiLCJ0aW1lc3RhbXAiLCJlbmxhcmdlZCIsImdldFBvbHlnb25GaWx0ZXJGdW5jdG9yIiwiZGF0YUNvbnRhaW5lciIsImdldFBvc2l0aW9uIiwiZ2V0UG9zaXRpb25BY2Nlc3NvciIsIkxBWUVSX1RZUEVTIiwicG9pbnQiLCJpY29uIiwiZGF0YSIsInBvcyIsImV2ZXJ5IiwiaXNGaW5pdGUiLCJpc0luUG9seWdvbiIsImFyYyIsImxpbmUiLCJoZXhhZ29uSWQiLCJkYXRhVG9GZWF0dXJlIiwiY2VudHJvaWRzIiwiY2VudHJvaWQiLCJpbmRleCIsImgzSXNWYWxpZCIsImdldENlbnRyb2lkIiwiZ2VvanNvbiIsImNhbkFwcGx5RmVhdHVyZUZpbHRlciIsImZlYXR1cmUiLCJCb29sZWFuIiwiZ2VvbWV0cnkiLCJnZXRGaWx0ZXJGdW5jdGlvbiIsInZhbHVlQWNjZXNzb3IiLCJkZWZhdWx0RnVuYyIsImlzSW5SYW5nZSIsIm1hcHBlZFZhbHVlIiwiYWNjZXNzb3IiLCJBcnJheSIsImlzQXJyYXkiLCJ0aW1lVG9Vbml4TWlsbGkiLCJmb3JtYXQiLCJsYXllckZpbHRlckZ1bmN0aW9ucyIsIm1hcCIsImNvbmZpZyIsImZpbHRlckZ1bmMiLCJ1cGRhdGVGaWx0ZXJEYXRhSWQiLCJmaWx0ZXJEYXRhQnlGaWx0ZXJUeXBlcyIsIl9yZWYzIiwiZHluYW1pY0RvbWFpbkZpbHRlcnMiLCJjcHVGaWx0ZXJzIiwiZmlsdGVyRnVuY3MiLCJmaWx0ZXJlZEluZGV4Rm9yRG9tYWluIiwiZmlsdGVyZWRJbmRleCIsImZpbHRlckNvbnRleHQiLCJmaWx0ZXJGdW5jQ2FsbGVyIiwibnVtUm93cyIsIm1hdGNoRm9yRG9tYWluIiwibWF0Y2hGb3JSZW5kZXIiLCJnZXRGaWx0ZXJSZWNvcmQiLCJmaWx0ZXJzIiwib3B0IiwiZmlsdGVyUmVjb3JkIiwiZHluYW1pY0RvbWFpbiIsImNwdSIsImYiLCJpZ25vcmVEb21haW4iLCJjcHVPbmx5IiwiZGlmZkZpbHRlcnMiLCJvbGRGaWx0ZXJSZWNvcmQiLCJmaWx0ZXJDaGFuZ2VkIiwiZW50cmllcyIsIl9yZWY0IiwiX3JlZjUiLCJfc2xpY2VkVG9BcnJheTIiLCJyZWNvcmQiLCJpdGVtcyIsIm9sZEZpbHRlciIsInByb3AiLCJjb25jYXQiLCJhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluIiwiX3JlZjYiLCJkIiwibm90TnVsbG9yVW5kZWZpbmVkIiwiZmlsdGVyZWRWYWx1ZSIsImdldE51bWVyaWNGaWVsZERvbWFpbiIsIm1hcEluZGV4IiwiZ2V0TGluZWFyRG9tYWluIiwiZGlmZiIsImdldE51bWVyaWNTdGVwU2l6ZSIsImZvcm1hdE51bWJlckJ5U3RlcCIsIk1hdGgiLCJhYnMiLCJ4IiwiZXhwb25lbnRpYWxGb3JtIiwidG9FeHBvbmVudGlhbCIsImV4cG9uZW50IiwicGFyc2VGbG9hdCIsInNwbGl0IiwiRGVjaW1hbCIsInBvdyIsInRvTnVtYmVyIiwiZ2V0VGltZXN0YW1wRmllbGREb21haW4iLCJkZWZhdWx0VGltZUZvcm1hdCIsImdldFRpbWVXaWRnZXRUaXRsZUZvcm1hdHRlciIsImVudHJ5IiwidmFsIiwiYm91bmQiLCJmbG9vciIsImNlaWwiLCJib29sZWFuV2l0aGluIiwidHVyZlBvaW50IiwiaXNWYWxpZFRpbWVEb21haW4iLCJpc0ZpbHRlclZhbGlkVG9TYXZlIiwidiIsImlzTmFOIiwiaW5wdXQiLCJjb29yZGluYXRlcyIsImdldENvbHVtbkZpbHRlclByb3BzIiwiX2ZpbHRlciRwbG90VHlwZSIsIl9maWx0ZXIkbWFwcGVkVmFsdWUiLCJnZXRDb2x1bW5GaWVsZElkeCIsImxpbmVDaGFydCIsInNlcmllcyIsInJvdyIsInJvd0luZGV4IiwieSIsInZhbHVlQXQiLCJfcmVmNyIsInNvcnQiLCJiIiwiYXNjZW5kaW5nIiwieURvbWFpbiIsImV4dGVudCIsInhEb21haW4iLCJ1cGRhdGVGaWx0ZXJQbG90IiwicmVtb3ZlRmlsdGVyUGxvdCIsInVwZGF0ZVRpbWVGaWx0ZXJQbG90VHlwZSIsInVwZGF0ZVJhbmdlRmlsdGVyUGxvdFR5cGUiLCJhcHBseUZpbHRlcnNUb0RhdGFzZXRzIiwiZGF0YXNldElkcyIsInJlZHVjZSIsImFjYyIsImxheWVyc1RvRmlsdGVyIiwiYXBwbGllZEZpbHRlcnMiLCJ0YWJsZSIsImZpbHRlclRhYmxlIiwib3B0aW9uIiwiZmllbGRJbmRleCIsIm5ld0ZpbHRlciIsImFzc2lnbiIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJfbWVyZ2VGaWx0ZXJEb21haW4iLCJkb21haW5TdGVwcyIsIm1lcmdlRmlsdGVyRG9tYWluIiwiX2ZpbHRlciRkYXRhSWQiLCJpZHgiLCJfZG9tYWluU3RlcHMiLCJtZXJnZUZpbHRlckRvbWFpblN0ZXAiLCJzb3J0ZWREb21haW4iLCJ1bmlxdWUiLCJmZWF0dXJlVG9GaWx0ZXJWYWx1ZSIsImZpbHRlcklkIiwicHJvcGVydGllcyIsImdldEZpbHRlcklkSW5GZWF0dXJlIiwiZ2VuZXJhdGVQb2x5Z29uRmlsdGVyIiwibGFiZWwiLCJpc1Zpc2libGUiLCJmaWx0ZXJEYXRhc2V0Q1BVIiwic3RhdGUiLCJkYXRhc2V0RmlsdGVycyIsImNwdUZpbHRlcmVkRGF0YXNldCIsImZpbHRlclRhYmxlQ1BVIiwidmFsaWRhdGVGaWx0ZXJzVXBkYXRlRGF0YXNldHMiLCJmaWx0ZXJzVG9WYWxpZGF0ZSIsInZhbGlkYXRlZCIsInVwZGF0ZWREYXRhc2V0cyIsImZpbHRlclRvVmFsaWRhdGUiLCJpc01lcmdpbmdEYXRhc2V0cyIsIl9kYXRhc2V0SWRzJHJlZHVjZSIsImRhdGFzZXRMYXllcnMiLCJ0b1ZhbGlkYXRlIiwidmFsaWRhdGVkRmlsdGVyIiwiX3ZhbGlkYXRlRmlsdGVyV2l0aERhIiwiYXVnbWVudGVkRGF0YXNldHMiLCJhcHBseVRvRGF0YXNldHMiLCJpc0VxdWFsIiwic3luY2VkV2l0aExheWVyVGltZWxpbmUiLCJhbmltYXRhYmxlTGF5ZXJzIiwiZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMiLCJtZXJnZVRpbWVEb21haW5zIiwiYW5pbWF0aW9uIiwibmV4dEZpbHRlciIsInJhbmdlRmlsdGVyIiwiYmlucyIsIl9yYW5nZUZpbHRlciRiaW5zIiwiX2RlbGV0ZSIsIm5leHRCaW5zIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzMiIsInRpbWVGaWx0ZXIiLCJ0aW1lQmlucyIsIl90aW1lRmlsdGVyJHRpbWVCaW5zIiwiX19kZWxldGUiLCJuZXh0VGltZUJpbnMiLCJnZXRUaW1lV2lkZ2V0SGludEZvcm1hdHRlciIsImlzU2lkZUZpbHRlciIsImRvbWFpbnMiLCJfZG9tYWluJCIsIl9kb21haW4kMiIsIm1pbiIsIkluZmluaXR5IiwiaXNMYXllckFuaW1hdGFibGUiLCJfbGF5ZXIkY29uZmlnJGFuaW1hdGkiLCJnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVyc0J5VHlwZSIsImdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMiLCJfbCRjb25maWckYW5pbWF0aW9uIiwidGltZVN0ZXBzIiwibWVyZ2VGaWx0ZXJXaXRoVGltZWxpbmUiLCJhbmltYXRpb25Db25maWciLCJzY2FsZVNvdXJjZURvbWFpblRvRGVzdGluYXRpb24iLCJzb3VyY2VEb21haW4iLCJkZXN0aW5hdGlvbkRvbWFpbiIsInNvdXJjZURvbWFpblNpemUiLCJkZXN0aW5hdGlvbkRvbWFpblNpemUiLCJzY2FsZWRTb3VyY2VEb21haW5TaXplIiwib2Zmc2V0Iiwic2NhbGVkT2Zmc2V0IiwiZ2V0RmlsdGVyU2NhbGVkVGltZWxpbmUiXSwic291cmNlcyI6WyIuLi9zcmMvZmlsdGVyLXV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBrZXlNaXJyb3IgZnJvbSAna2V5bWlycm9yJztcbmltcG9ydCBnZXQgZnJvbSAnbG9kYXNoLmdldCc7XG5pbXBvcnQgaXNFcXVhbCBmcm9tICdsb2Rhc2guaXNlcXVhbCc7XG5pbXBvcnQge2FzY2VuZGluZywgZXh0ZW50fSBmcm9tICdkMy1hcnJheSc7XG5cbmltcG9ydCBib29sZWFuV2l0aGluIGZyb20gJ0B0dXJmL2Jvb2xlYW4td2l0aGluJztcbmltcG9ydCB7cG9pbnQgYXMgdHVyZlBvaW50fSBmcm9tICdAdHVyZi9oZWxwZXJzJztcbmltcG9ydCB7RGVjaW1hbH0gZnJvbSAnZGVjaW1hbC5qcyc7XG5pbXBvcnQge1xuICBBTExfRklFTERfVFlQRVMsXG4gIEZJTFRFUl9UWVBFUyxcbiAgQU5JTUFUSU9OX1dJTkRPVyxcbiAgUExPVF9UWVBFUyxcbiAgTEFZRVJfVFlQRVMsXG4gIEZJTFRFUl9WSUVXX1RZUEVTXG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbi8vIGltcG9ydCB7VmlzU3RhdGV9IGZyb20gJ0BrZXBsZXIuZ2wvc2NoZW1hcyc7XG5pbXBvcnQgKiBhcyBTY2FsZVV0aWxzIGZyb20gJy4vZGF0YS1zY2FsZS11dGlscyc7XG5pbXBvcnQge2gzSXNWYWxpZH0gZnJvbSAnaDMtanMnO1xuXG5pbXBvcnQge1xuICBFbnRyaWVzLFxuICBGaWVsZCxcbiAgUGFyc2VkRmlsdGVyLFxuICBGaWx0ZXIsXG4gIEZpbHRlckJhc2UsXG4gIFBvbHlnb25GaWx0ZXIsXG4gIEZpZWxkRG9tYWluLFxuICBUaW1lUmFuZ2VGaWVsZERvbWFpbixcbiAgRmVhdHVyZSxcbiAgRmVhdHVyZVZhbHVlLFxuICBMaW5lQ2hhcnQsXG4gIFJhbmdlRmlsdGVyLFxuICBUaW1lUmFuZ2VGaWx0ZXIsXG4gIFJhbmdlRmllbGREb21haW4sXG4gIEZpbHRlckRhdGFzZXRPcHQsXG4gIEZpbHRlclJlY29yZCxcbiAgQW5pbWF0aW9uQ29uZmlnXG59IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuXG5pbXBvcnQge2dlbmVyYXRlSGFzaElkLCB0b0FycmF5LCBub3ROdWxsb3JVbmRlZmluZWQsIGdldENlbnRyb2lkfSBmcm9tICdAa2VwbGVyLmdsL2NvbW1vbi11dGlscyc7XG5pbXBvcnQge0RhdGFDb250YWluZXJJbnRlcmZhY2V9IGZyb20gJy4vZGF0YS1jb250YWluZXItaW50ZXJmYWNlJztcbmltcG9ydCB7c2V0fSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7dGltZVRvVW5peE1pbGxpLCB1bmlxdWV9IGZyb20gJy4vZGF0YS11dGlscyc7XG5pbXBvcnQge3VwZGF0ZVRpbWVGaWx0ZXJQbG90VHlwZSwgdXBkYXRlUmFuZ2VGaWx0ZXJQbG90VHlwZX0gZnJvbSAnLi9wbG90JztcbmltcG9ydCB7S2VwbGVyVGFibGVNb2RlbH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBkdXJhdGlvblNlY29uZCA9IDEwMDA7XG5leHBvcnQgY29uc3QgZHVyYXRpb25NaW51dGUgPSBkdXJhdGlvblNlY29uZCAqIDYwO1xuZXhwb3J0IGNvbnN0IGR1cmF0aW9uSG91ciA9IGR1cmF0aW9uTWludXRlICogNjA7XG5leHBvcnQgY29uc3QgZHVyYXRpb25EYXkgPSBkdXJhdGlvbkhvdXIgKiAyNDtcbmV4cG9ydCBjb25zdCBkdXJhdGlvbldlZWsgPSBkdXJhdGlvbkRheSAqIDc7XG5leHBvcnQgY29uc3QgZHVyYXRpb25ZZWFyID0gZHVyYXRpb25EYXkgKiAzNjU7XG5cbi8vIFRPRE8gaXNvbGF0ZSB0eXBlcyAtIGRlcGVuZHMgb24gQGtlcGxlci5nbC9zY2hlbWFzXG50eXBlIFZpc1N0YXRlID0gYW55O1xuXG5leHBvcnQgdHlwZSBGaWx0ZXJSZXN1bHQgPSB7XG4gIGZpbHRlcmVkSW5kZXhGb3JEb21haW4/OiBudW1iZXJbXTtcbiAgZmlsdGVyZWRJbmRleD86IG51bWJlcltdO1xufTtcblxuZXhwb3J0IHR5cGUgRmlsdGVyQ2hhbmdlZCA9IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIFtrZXkgaW4ga2V5b2YgRmlsdGVyUmVjb3JkXToge1xuICAgIFtrZXk6IHN0cmluZ106ICdhZGRlZCcgfCAnZGVsZXRlZCcgfCAnbmFtZV9jaGFuZ2VkJyB8ICd2YWx1ZV9jaGFuZ2VkJyB8ICdkYXRhSWRfY2hhbmdlZCc7XG4gIH0gfCBudWxsO1xufTtcblxuZXhwb3J0IHR5cGUgZGF0YVZhbHVlQWNjZXNzb3IgPSAoZGF0YToge2luZGV4OiBudW1iZXJ9KSA9PiBudW1iZXIgfCBudWxsO1xuXG5leHBvcnQgY29uc3QgVGltZXN0YW1wU3RlcE1hcCA9IFtcbiAge21heDogMSwgc3RlcDogMC4wNX0sXG4gIHttYXg6IDEwLCBzdGVwOiAwLjF9LFxuICB7bWF4OiAxMDAsIHN0ZXA6IDF9LFxuICB7bWF4OiA1MDAsIHN0ZXA6IDV9LFxuICB7bWF4OiAxMDAwLCBzdGVwOiAxMH0sXG4gIHttYXg6IDUwMDAsIHN0ZXA6IDUwfSxcbiAge21heDogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLCBzdGVwOiAxMDAwfVxuXTtcblxuZXhwb3J0IGNvbnN0IEZJTFRFUl9VUERBVEVSX1BST1BTID0ga2V5TWlycm9yKHtcbiAgZGF0YUlkOiBudWxsLFxuICBuYW1lOiBudWxsLFxuICBsYXllcklkOiBudWxsXG59KTtcblxuZXhwb3J0IGNvbnN0IEZJTFRFUl9DT01QT05FTlRTID0ge1xuICBbRklMVEVSX1RZUEVTLnNlbGVjdF06ICdTaW5nbGVTZWxlY3RGaWx0ZXInLFxuICBbRklMVEVSX1RZUEVTLm11bHRpU2VsZWN0XTogJ011bHRpU2VsZWN0RmlsdGVyJyxcbiAgW0ZJTFRFUl9UWVBFUy50aW1lUmFuZ2VdOiAnVGltZVJhbmdlRmlsdGVyJyxcbiAgW0ZJTFRFUl9UWVBFUy5yYW5nZV06ICdSYW5nZUZpbHRlcicsXG4gIFtGSUxURVJfVFlQRVMucG9seWdvbl06ICdQb2x5Z29uRmlsdGVyJ1xufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfRklMVEVSX1NUUlVDVFVSRSA9IHtcbiAgZGF0YUlkOiBbXSwgLy8gW3N0cmluZ11cbiAgaWQ6IG51bGwsXG4gIGVuYWJsZWQ6IHRydWUsXG5cbiAgLy8gdGltZSByYW5nZSBmaWx0ZXIgc3BlY2lmaWNcbiAgZml4ZWREb21haW46IGZhbHNlLFxuICB2aWV3OiBGSUxURVJfVklFV19UWVBFUy5zaWRlLFxuICBpc0FuaW1hdGluZzogZmFsc2UsXG4gIGFuaW1hdGlvbldpbmRvdzogQU5JTUFUSU9OX1dJTkRPVy5mcmVlLFxuICBzcGVlZDogMSxcblxuICAvLyBmaWVsZCBzcGVjaWZpY1xuICBuYW1lOiBbXSwgLy8gc3RyaW5nXG4gIHR5cGU6IG51bGwsXG4gIGZpZWxkSWR4OiBbXSwgLy8gW2ludGVnZXJdXG4gIGRvbWFpbjogbnVsbCxcbiAgdmFsdWU6IG51bGwsXG5cbiAgLy8gcGxvdFxuICBwbG90VHlwZToge1xuICAgIHR5cGU6IFBMT1RfVFlQRVMuaGlzdG9ncmFtXG4gIH0sXG4gIHlBeGlzOiBudWxsLFxuXG4gIC8vIG1vZGVcbiAgZ3B1OiBmYWxzZVxufTtcblxuZXhwb3J0IGNvbnN0IEZJTFRFUl9JRF9MRU5HVEggPSA0O1xuXG5leHBvcnQgY29uc3QgTEFZRVJfRklMVEVSUyA9IFtGSUxURVJfVFlQRVMucG9seWdvbl07XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgZmlsdGVyIHdpdGggYSBkYXRhc2V0IGlkIGFzIGRhdGFJZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdEZpbHRlcih7XG4gIGRhdGFJZCxcbiAgaWRcbn06IHtcbiAgZGF0YUlkPzogc3RyaW5nIHwgbnVsbCB8IHN0cmluZ1tdO1xuICBpZD86IHN0cmluZztcbn0gPSB7fSk6IEZpbHRlckJhc2U8TGluZUNoYXJ0PiB7XG4gIHJldHVybiB7XG4gICAgLi4uREVGQVVMVF9GSUxURVJfU1RSVUNUVVJFLFxuICAgIC8vIHN0b3JlIGl0IGFzIGRhdGFJZCBhbmQgaXQgY291bGQgYmUgb25lIG9yIG1hbnlcbiAgICBkYXRhSWQ6IGRhdGFJZCA/IHRvQXJyYXkoZGF0YUlkKSA6IFtdLFxuICAgIGlkOiBpZCB8fCBnZW5lcmF0ZUhhc2hJZChGSUxURVJfSURfTEVOR1RIKVxuICB9O1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGEgZmlsdGVyIGlzIHZhbGlkIGJhc2VkIG9uIHRoZSBnaXZlbiBkYXRhSWRcbiAqIEBwYXJhbSAgZmlsdGVyIHRvIHZhbGlkYXRlXG4gKiBAcGFyYW0gIGRhdGFzZXRJZCBpZCB0byB2YWxpZGF0ZSBmaWx0ZXIgYWdhaW5zdFxuICogQHJldHVybiB0cnVlIGlmIGEgZmlsdGVyIGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNob3VsZEFwcGx5RmlsdGVyKGZpbHRlcjogRmlsdGVyLCBkYXRhc2V0SWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBkYXRhSWRzID0gdG9BcnJheShmaWx0ZXIuZGF0YUlkKTtcbiAgcmV0dXJuIGRhdGFJZHMuaW5jbHVkZXMoZGF0YXNldElkKSAmJiBmaWx0ZXIudmFsdWUgIT09IG51bGw7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIGFuZCBtb2RpZmllcyBwb2x5Z29uIGZpbHRlciBzdHJ1Y3R1cmVcbiAqIEBwYXJhbSBkYXRhc2V0XG4gKiBAcGFyYW0gZmlsdGVyXG4gKiBAcGFyYW0gbGF5ZXJzXG4gKiBAcmV0dXJuIC0ge2ZpbHRlciwgZGF0YXNldH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlUG9seWdvbkZpbHRlcjxLIGV4dGVuZHMgS2VwbGVyVGFibGVNb2RlbDxLLCBMPiwgTCBleHRlbmRzIHtpZDogc3RyaW5nfT4oXG4gIGRhdGFzZXQ6IEssXG4gIGZpbHRlcjogUG9seWdvbkZpbHRlcixcbiAgbGF5ZXJzOiBMW11cbik6IHtmaWx0ZXI6IFBvbHlnb25GaWx0ZXIgfCBudWxsOyBkYXRhc2V0OiBLfSB7XG4gIGNvbnN0IGZhaWxlZCA9IHtkYXRhc2V0LCBmaWx0ZXI6IG51bGx9O1xuICBjb25zdCB7dmFsdWUsIGxheWVySWQsIHR5cGUsIGRhdGFJZH0gPSBmaWx0ZXI7XG5cbiAgaWYgKCFsYXllcklkIHx8ICFpc1ZhbGlkRmlsdGVyVmFsdWUodHlwZSwgdmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhaWxlZDtcbiAgfVxuXG4gIGNvbnN0IGlzVmFsaWREYXRhc2V0ID0gZGF0YUlkLmluY2x1ZGVzKGRhdGFzZXQuaWQpO1xuXG4gIGlmICghaXNWYWxpZERhdGFzZXQpIHtcbiAgICByZXR1cm4gZmFpbGVkO1xuICB9XG5cbiAgY29uc3QgbGF5ZXIgPSBsYXllcnMuZmluZChsID0+IGxheWVySWQuaW5jbHVkZXMobC5pZCkpO1xuXG4gIGlmICghbGF5ZXIpIHtcbiAgICByZXR1cm4gZmFpbGVkO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBmaWx0ZXI6IHtcbiAgICAgIC4uLmZpbHRlcixcbiAgICAgIGZpZWxkSWR4OiBbXVxuICAgIH0sXG4gICAgZGF0YXNldFxuICB9O1xufVxuXG4vKipcbiAqIEN1c3RvbSBmaWx0ZXIgdmFsaWRhdG9yc1xuICovXG5jb25zdCBmaWx0ZXJWYWxpZGF0b3JzID0ge1xuICBbRklMVEVSX1RZUEVTLnBvbHlnb25dOiB2YWxpZGF0ZVBvbHlnb25GaWx0ZXJcbn07XG5cbi8qKlxuICogRGVmYXVsdCB2YWxpZGF0ZSBmaWx0ZXIgZnVuY3Rpb25cbiAqIEBwYXJhbSBkYXRhc2V0c1xuICogQHBhcmFtIGRhdGFzZXRJZFxuICogQHBhcmFtIGZpbHRlclxuICogQHJldHVybiAtIHtmaWx0ZXIsIGRhdGFzZXR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUZpbHRlcjxLIGV4dGVuZHMgS2VwbGVyVGFibGVNb2RlbDxLLCBMPiwgTD4oXG4gIGRhdGFzZXRzOiBSZWNvcmQ8c3RyaW5nLCBLPixcbiAgZGF0YXNldElkOiBzdHJpbmcsXG4gIGZpbHRlcjogUGFyc2VkRmlsdGVyXG4pOiB7ZmlsdGVyOiBGaWx0ZXIgfCBudWxsOyBkYXRhc2V0OiBLfSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBkYXRhc2V0c1tkYXRhc2V0SWRdO1xuICAvLyBtYXRjaCBmaWx0ZXIuZGF0YUlkXG4gIGNvbnN0IGZhaWxlZCA9IHtkYXRhc2V0LCBmaWx0ZXI6IG51bGx9O1xuICBjb25zdCBmaWx0ZXJEYXRhSWQgPSB0b0FycmF5KGZpbHRlci5kYXRhSWQpO1xuXG4gIGNvbnN0IGZpbHRlckRhdGFzZXRJbmRleCA9IGZpbHRlckRhdGFJZC5pbmRleE9mKGRhdGFzZXQuaWQpO1xuICBpZiAoZmlsdGVyRGF0YXNldEluZGV4IDwgMCB8fCAhdG9BcnJheShmaWx0ZXIubmFtZSlbZmlsdGVyRGF0YXNldEluZGV4XSkge1xuICAgIC8vIHRoZSBjdXJyZW50IGZpbHRlciBpcyBub3QgbWFwcGVkIGFnYWluc3QgdGhlIGN1cnJlbnQgZGF0YXNldFxuICAgIHJldHVybiBmYWlsZWQ7XG4gIH1cblxuICBjb25zdCBpbml0aWFsaXplRmlsdGVyOiBGaWx0ZXIgPSB7XG4gICAgLi4uZ2V0RGVmYXVsdEZpbHRlcih7ZGF0YUlkOiBmaWx0ZXIuZGF0YUlkfSksXG4gICAgLi4uZmlsdGVyLFxuICAgIGRhdGFJZDogZmlsdGVyRGF0YUlkLFxuICAgIG5hbWU6IHRvQXJyYXkoZmlsdGVyLm5hbWUpXG4gIH07XG5cbiAgY29uc3QgZmllbGROYW1lID0gaW5pdGlhbGl6ZUZpbHRlci5uYW1lW2ZpbHRlckRhdGFzZXRJbmRleF07XG4gIGNvbnN0IHtmaWx0ZXI6IHVwZGF0ZWRGaWx0ZXIsIGRhdGFzZXQ6IHVwZGF0ZWREYXRhc2V0fSA9IGFwcGx5RmlsdGVyRmllbGROYW1lKFxuICAgIGluaXRpYWxpemVGaWx0ZXIsXG4gICAgZGF0YXNldHMsXG4gICAgZGF0YXNldElkLFxuICAgIGZpZWxkTmFtZSxcbiAgICBmaWx0ZXJEYXRhc2V0SW5kZXgsXG4gICAge21lcmdlRG9tYWluOiB0cnVlfVxuICApO1xuXG4gIGlmICghdXBkYXRlZEZpbHRlcikge1xuICAgIHJldHVybiBmYWlsZWQ7XG4gIH1cblxuICAvLyBkb24ndCBhZGp1c3QgdmFsdWUgeWV0IGJlZm9yZSBhbGwgZGF0YXNldHMgYXJlIGxvYWRlZFxuICB1cGRhdGVkRmlsdGVyLnZpZXcgPSBmaWx0ZXIudmlldyA/PyB1cGRhdGVkRmlsdGVyLnZpZXc7XG5cbiAgaWYgKHVwZGF0ZWRGaWx0ZXIudmFsdWUgPT09IG51bGwpIHtcbiAgICAvLyBjYW5ub3QgYWRqdXN0IHNhdmVkIHZhbHVlIHRvIGZpbHRlclxuICAgIHJldHVybiBmYWlsZWQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGZpbHRlcjogdmFsaWRhdGVGaWx0ZXJZQXhpcyh1cGRhdGVkRmlsdGVyLCB1cGRhdGVkRGF0YXNldCksXG4gICAgZGF0YXNldDogdXBkYXRlZERhdGFzZXRcbiAgfTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBzYXZlZCBmaWx0ZXIgY29uZmlnIHdpdGggbmV3IGRhdGFcbiAqXG4gKiBAcGFyYW0gZGF0YXNldHNcbiAqIEBwYXJhbSBkYXRhc2V0SWRcbiAqIEBwYXJhbSBmaWx0ZXIgLSBmaWx0ZXIgdG8gYmUgdmFsaWRhdGVcbiAqIEBwYXJhbSBsYXllcnMgLSBsYXllcnNcbiAqIEByZXR1cm4gdmFsaWRhdGVkIGZpbHRlclxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVGaWx0ZXJXaXRoRGF0YTxLIGV4dGVuZHMgS2VwbGVyVGFibGVNb2RlbDxLLCBMPiwgTD4oXG4gIGRhdGFzZXRzOiBSZWNvcmQ8c3RyaW5nLCBLPixcbiAgZGF0YXNldElkOiBzdHJpbmcsXG4gIGZpbHRlcjogUGFyc2VkRmlsdGVyLFxuICBsYXllcnM6IExbXVxuKToge2ZpbHRlcjogRmlsdGVyOyBkYXRhc2V0OiBLfSB7XG4gIHJldHVybiBmaWx0ZXIudHlwZSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZmlsdGVyVmFsaWRhdG9ycywgZmlsdGVyLnR5cGUpXG4gICAgPyBmaWx0ZXJWYWxpZGF0b3JzW2ZpbHRlci50eXBlXShkYXRhc2V0c1tkYXRhc2V0SWRdLCBmaWx0ZXIsIGxheWVycylcbiAgICA6IHZhbGlkYXRlRmlsdGVyKGRhdGFzZXRzLCBkYXRhc2V0SWQsIGZpbHRlcik7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgWUF4aXNcbiAqIEBwYXJhbSBmaWx0ZXJcbiAqIEBwYXJhbSBkYXRhc2V0XG4gKiBAcmV0dXJuIHsqfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUZpbHRlcllBeGlzKGZpbHRlciwgZGF0YXNldCkge1xuICAvLyBUT0RPOiB2YWxpZGF0ZSB5QXhpcyBhZ2FpbnN0IG90aGVyIGRhdGFzZXRzXG5cbiAgY29uc3Qge2ZpZWxkc30gPSBkYXRhc2V0O1xuICBjb25zdCB7eUF4aXN9ID0gZmlsdGVyO1xuICAvLyBUT0RPOiB2YWxpZGF0ZSB5QXhpcyBhZ2FpbnN0IG90aGVyIGRhdGFzZXRzXG4gIGlmICh5QXhpcykge1xuICAgIGNvbnN0IG1hdGNoZWRBeGlzID0gZmllbGRzLmZpbmQoKHtuYW1lLCB0eXBlfSkgPT4gbmFtZSA9PT0geUF4aXMubmFtZSAmJiB0eXBlID09PSB5QXhpcy50eXBlKTtcblxuICAgIGZpbHRlciA9IG1hdGNoZWRBeGlzXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5maWx0ZXIsXG4gICAgICAgICAgeUF4aXM6IG1hdGNoZWRBeGlzXG4gICAgICAgIH1cbiAgICAgIDogZmlsdGVyO1xuICB9XG5cbiAgcmV0dXJuIGZpbHRlcjtcbn1cblxuLyoqXG4gKiBHZXQgZGVmYXVsdCBmaWx0ZXIgcHJvcCBiYXNlZCBvbiBmaWVsZCB0eXBlXG4gKlxuICogQHBhcmFtIGZpZWxkXG4gKiBAcGFyYW0gZmllbGREb21haW5cbiAqIEByZXR1cm5zIGRlZmF1bHQgZmlsdGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWx0ZXJQcm9wcyhcbiAgZmllbGQ6IEZpZWxkLFxuICBmaWVsZERvbWFpbjogRmllbGREb21haW5cbik6IFBhcnRpYWw8RmlsdGVyPiAmIHtmaWVsZFR5cGU6IHN0cmluZ30ge1xuICBjb25zdCBmaWx0ZXJQcm9wcyA9IHtcbiAgICAuLi5maWVsZERvbWFpbixcbiAgICBmaWVsZFR5cGU6IGZpZWxkLnR5cGUsXG4gICAgdmlldzogRklMVEVSX1ZJRVdfVFlQRVMuc2lkZVxuICB9O1xuXG4gIHN3aXRjaCAoZmllbGQudHlwZSkge1xuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLnJlYWw6XG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMuaW50ZWdlcjpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmZpbHRlclByb3BzLFxuICAgICAgICB2YWx1ZTogZmllbGREb21haW4uZG9tYWluLFxuICAgICAgICB0eXBlOiBGSUxURVJfVFlQRVMucmFuZ2UsXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgdHlwZU9wdGlvbnM6IFtGSUxURVJfVFlQRVMucmFuZ2VdLFxuICAgICAgICBncHU6IHRydWVcbiAgICAgIH07XG5cbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5ib29sZWFuOlxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZmlsdGVyUHJvcHMsXG4gICAgICAgIHR5cGU6IEZJTFRFUl9UWVBFUy5zZWxlY3QsXG4gICAgICAgIHZhbHVlOiB0cnVlLFxuICAgICAgICBncHU6IGZhbHNlXG4gICAgICB9O1xuXG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMuc3RyaW5nOlxuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLmgzOlxuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLmRhdGU6XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5maWx0ZXJQcm9wcyxcbiAgICAgICAgdHlwZTogRklMVEVSX1RZUEVTLm11bHRpU2VsZWN0LFxuICAgICAgICB2YWx1ZTogW10sXG4gICAgICAgIGdwdTogZmFsc2VcbiAgICAgIH07XG5cbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy50aW1lc3RhbXA6XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5maWx0ZXJQcm9wcyxcbiAgICAgICAgdHlwZTogRklMVEVSX1RZUEVTLnRpbWVSYW5nZSxcbiAgICAgICAgdmlldzogRklMVEVSX1ZJRVdfVFlQRVMuZW5sYXJnZWQsXG4gICAgICAgIGZpeGVkRG9tYWluOiB0cnVlLFxuICAgICAgICB2YWx1ZTogZmlsdGVyUHJvcHMuZG9tYWluLFxuICAgICAgICBncHU6IHRydWUsXG4gICAgICAgIHBsb3RUeXBlOiB7fVxuICAgICAgfTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICByZXR1cm4ge307XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGdldFBvbHlnb25GaWx0ZXJGdW5jdG9yID0gKGxheWVyLCBmaWx0ZXIsIGRhdGFDb250YWluZXIpID0+IHtcbiAgY29uc3QgZ2V0UG9zaXRpb24gPSBsYXllci5nZXRQb3NpdGlvbkFjY2Vzc29yKGRhdGFDb250YWluZXIpO1xuXG4gIHN3aXRjaCAobGF5ZXIudHlwZSkge1xuICAgIGNhc2UgTEFZRVJfVFlQRVMucG9pbnQ6XG4gICAgY2FzZSBMQVlFUl9UWVBFUy5pY29uOlxuICAgICAgcmV0dXJuIGRhdGEgPT4ge1xuICAgICAgICBjb25zdCBwb3MgPSBnZXRQb3NpdGlvbihkYXRhKTtcbiAgICAgICAgcmV0dXJuIHBvcy5ldmVyeShOdW1iZXIuaXNGaW5pdGUpICYmIGlzSW5Qb2x5Z29uKHBvcywgZmlsdGVyLnZhbHVlKTtcbiAgICAgIH07XG4gICAgY2FzZSBMQVlFUl9UWVBFUy5hcmM6XG4gICAgY2FzZSBMQVlFUl9UWVBFUy5saW5lOlxuICAgICAgcmV0dXJuIGRhdGEgPT4ge1xuICAgICAgICBjb25zdCBwb3MgPSBnZXRQb3NpdGlvbihkYXRhKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBwb3MuZXZlcnkoTnVtYmVyLmlzRmluaXRlKSAmJlxuICAgICAgICAgIFtcbiAgICAgICAgICAgIFtwb3NbMF0sIHBvc1sxXV0sXG4gICAgICAgICAgICBbcG9zWzNdLCBwb3NbNF1dXG4gICAgICAgICAgXS5ldmVyeShwb2ludCA9PiBpc0luUG9seWdvbihwb2ludCwgZmlsdGVyLnZhbHVlKSlcbiAgICAgICAgKTtcbiAgICAgIH07XG4gICAgY2FzZSBMQVlFUl9UWVBFUy5oZXhhZ29uSWQ6XG4gICAgICBpZiAobGF5ZXIuZGF0YVRvRmVhdHVyZSAmJiBsYXllci5kYXRhVG9GZWF0dXJlLmNlbnRyb2lkcykge1xuICAgICAgICByZXR1cm4gZGF0YSA9PiB7XG4gICAgICAgICAgLy8gbnVsbCBvciBnZXRDZW50cm9pZCh7aWR9KVxuICAgICAgICAgIGNvbnN0IGNlbnRyb2lkID0gbGF5ZXIuZGF0YVRvRmVhdHVyZS5jZW50cm9pZHNbZGF0YS5pbmRleF07XG4gICAgICAgICAgcmV0dXJuIGNlbnRyb2lkICYmIGlzSW5Qb2x5Z29uKGNlbnRyb2lkLCBmaWx0ZXIudmFsdWUpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGEgPT4ge1xuICAgICAgICBjb25zdCBpZCA9IGdldFBvc2l0aW9uKGRhdGEpO1xuICAgICAgICBpZiAoIWgzSXNWYWxpZChpZCkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcG9zID0gZ2V0Q2VudHJvaWQoe2lkfSk7XG4gICAgICAgIHJldHVybiBwb3MuZXZlcnkoTnVtYmVyLmlzRmluaXRlKSAmJiBpc0luUG9seWdvbihwb3MsIGZpbHRlci52YWx1ZSk7XG4gICAgICB9O1xuICAgIGNhc2UgTEFZRVJfVFlQRVMuZ2VvanNvbjpcbiAgICAgIHJldHVybiBkYXRhID0+IHtcbiAgICAgICAgcmV0dXJuIGxheWVyLmlzSW5Qb2x5Z29uKGRhdGEsIGRhdGEuaW5kZXgsIGZpbHRlci52YWx1ZSk7XG4gICAgICB9O1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gKCkgPT4gdHJ1ZTtcbiAgfVxufTtcblxuLyoqXG4gKiBDaGVjayBpZiBhIEdlb0pTT04gZmVhdHVyZSBmaWx0ZXIgY2FuIGJlIGFwcGxpZWQgdG8gYSBsYXllclxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FuQXBwbHlGZWF0dXJlRmlsdGVyKGZlYXR1cmU6IEZlYXR1cmUgfCBudWxsKTogYm9vbGVhbiB7XG4gIHJldHVybiBCb29sZWFuKGZlYXR1cmU/Lmdlb21ldHJ5ICYmIFsnUG9seWdvbicsICdNdWx0aVBvbHlnb24nXS5pbmNsdWRlcyhmZWF0dXJlLmdlb21ldHJ5LnR5cGUpKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gcGFyYW0gQW4gb2JqZWN0IHRoYXQgcmVwcmVzZW50cyBhIHJvdyByZWNvcmQuXG4gKiBAcGFyYW0gcGFyYW0uaW5kZXggSW5kZXggb2YgdGhlIHJvdyBpbiBkYXRhIGNvbnRhaW5lci5cbiAqIEByZXR1cm5zIFJldHVybnMgdHJ1ZSB0byBrZWVwIHRoZSBlbGVtZW50LCBvciBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbnR5cGUgZmlsdGVyRnVuY3Rpb24gPSAoZGF0YToge2luZGV4OiBudW1iZXJ9KSA9PiBib29sZWFuO1xuXG4vKipcbiAqIEBwYXJhbSBmaWVsZCBkYXRhc2V0IEZpZWxkXG4gKiBAcGFyYW0gZGF0YUlkIERhdGFzZXQgaWRcbiAqIEBwYXJhbSBmaWx0ZXIgRmlsdGVyIG9iamVjdFxuICogQHBhcmFtIGxheWVycyBsaXN0IG9mIGxheWVycyB0byBmaWx0ZXIgdXBvblxuICogQHBhcmFtIGRhdGFDb250YWluZXIgRGF0YSBjb250YWluZXJcbiAqIEByZXR1cm4gZmlsdGVyRnVuY3Rpb25cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgY29tcGxleGl0eSAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbHRlckZ1bmN0aW9uPEwgZXh0ZW5kcyB7Y29uZmlnOiB7ZGF0YUlkOiBzdHJpbmcgfCBudWxsfTsgaWQ6IHN0cmluZ30+KFxuICBmaWVsZDogRmllbGQgfCBudWxsLFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgZmlsdGVyOiBGaWx0ZXIsXG4gIGxheWVyczogTFtdLFxuICBkYXRhQ29udGFpbmVyOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlXG4pOiBmaWx0ZXJGdW5jdGlvbiB7XG4gIC8vIGZpZWxkIGNvdWxkIGJlIG51bGwgaW4gcG9seWdvbiBmaWx0ZXJcbiAgY29uc3QgdmFsdWVBY2Nlc3NvciA9IGZpZWxkID8gZmllbGQudmFsdWVBY2Nlc3NvciA6ICgpID0+IG51bGw7XG4gIGNvbnN0IGRlZmF1bHRGdW5jID0gKCkgPT4gdHJ1ZTtcblxuICBpZiAoZmlsdGVyLmVuYWJsZWQgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRGdW5jO1xuICB9XG5cbiAgc3dpdGNoIChmaWx0ZXIudHlwZSkge1xuICAgIGNhc2UgRklMVEVSX1RZUEVTLnJhbmdlOlxuICAgICAgcmV0dXJuIGRhdGEgPT4gaXNJblJhbmdlKHZhbHVlQWNjZXNzb3IoZGF0YSksIGZpbHRlci52YWx1ZSk7XG4gICAgY2FzZSBGSUxURVJfVFlQRVMubXVsdGlTZWxlY3Q6XG4gICAgICByZXR1cm4gZGF0YSA9PiBmaWx0ZXIudmFsdWUuaW5jbHVkZXModmFsdWVBY2Nlc3NvcihkYXRhKSk7XG4gICAgY2FzZSBGSUxURVJfVFlQRVMuc2VsZWN0OlxuICAgICAgcmV0dXJuIGRhdGEgPT4gdmFsdWVBY2Nlc3NvcihkYXRhKSA9PT0gZmlsdGVyLnZhbHVlO1xuICAgIGNhc2UgRklMVEVSX1RZUEVTLnRpbWVSYW5nZToge1xuICAgICAgaWYgKCFmaWVsZCkge1xuICAgICAgICByZXR1cm4gZGVmYXVsdEZ1bmM7XG4gICAgICB9XG4gICAgICBjb25zdCBtYXBwZWRWYWx1ZSA9IGdldChmaWVsZCwgWydmaWx0ZXJQcm9wcycsICdtYXBwZWRWYWx1ZSddKTtcbiAgICAgIGNvbnN0IGFjY2Vzc29yID0gQXJyYXkuaXNBcnJheShtYXBwZWRWYWx1ZSlcbiAgICAgICAgPyBkYXRhID0+IG1hcHBlZFZhbHVlW2RhdGEuaW5kZXhdXG4gICAgICAgIDogZGF0YSA9PiB0aW1lVG9Vbml4TWlsbGkodmFsdWVBY2Nlc3NvcihkYXRhKSwgZmllbGQuZm9ybWF0KTtcbiAgICAgIHJldHVybiBkYXRhID0+IGlzSW5SYW5nZShhY2Nlc3NvcihkYXRhKSwgZmlsdGVyLnZhbHVlKTtcbiAgICB9XG4gICAgY2FzZSBGSUxURVJfVFlQRVMucG9seWdvbjoge1xuICAgICAgaWYgKCFsYXllcnMgfHwgIWxheWVycy5sZW5ndGggfHwgIWZpbHRlci5sYXllcklkKSB7XG4gICAgICAgIHJldHVybiBkZWZhdWx0RnVuYztcbiAgICAgIH1cbiAgICAgIGNvbnN0IGxheWVyRmlsdGVyRnVuY3Rpb25zID0gZmlsdGVyLmxheWVySWRcbiAgICAgICAgLm1hcChpZCA9PiBsYXllcnMuZmluZChsID0+IGwuaWQgPT09IGlkKSlcbiAgICAgICAgLmZpbHRlcihsID0+IGwgJiYgbC5jb25maWcuZGF0YUlkID09PSBkYXRhSWQpXG4gICAgICAgIC5tYXAobGF5ZXIgPT4gZ2V0UG9seWdvbkZpbHRlckZ1bmN0b3IobGF5ZXIsIGZpbHRlciwgZGF0YUNvbnRhaW5lcikpO1xuXG4gICAgICByZXR1cm4gZGF0YSA9PiBsYXllckZpbHRlckZ1bmN0aW9ucy5ldmVyeShmaWx0ZXJGdW5jID0+IGZpbHRlckZ1bmMoZGF0YSkpO1xuICAgIH1cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGRlZmF1bHRGdW5jO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVGaWx0ZXJEYXRhSWQoZGF0YUlkOiBzdHJpbmcgfCBzdHJpbmdbXSk6IEZpbHRlckJhc2U8TGluZUNoYXJ0PiB7XG4gIHJldHVybiBnZXREZWZhdWx0RmlsdGVyKHtkYXRhSWR9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlckRhdGFCeUZpbHRlclR5cGVzKFxuICB7XG4gICAgZHluYW1pY0RvbWFpbkZpbHRlcnMsXG4gICAgY3B1RmlsdGVycyxcbiAgICBmaWx0ZXJGdW5jc1xuICB9OiB7XG4gICAgZHluYW1pY0RvbWFpbkZpbHRlcnM6IEZpbHRlcltdIHwgbnVsbDtcbiAgICBjcHVGaWx0ZXJzOiBGaWx0ZXJbXSB8IG51bGw7XG4gICAgZmlsdGVyRnVuY3M6IHtcbiAgICAgIFtrZXk6IHN0cmluZ106IGZpbHRlckZ1bmN0aW9uO1xuICAgIH07XG4gIH0sXG4gIGRhdGFDb250YWluZXI6IERhdGFDb250YWluZXJJbnRlcmZhY2Vcbik6IEZpbHRlclJlc3VsdCB7XG4gIGNvbnN0IGZpbHRlcmVkSW5kZXhGb3JEb21haW46IG51bWJlcltdID0gW107XG4gIGNvbnN0IGZpbHRlcmVkSW5kZXg6IG51bWJlcltdID0gW107XG5cbiAgY29uc3QgZmlsdGVyQ29udGV4dCA9IHtpbmRleDogLTEsIGRhdGFDb250YWluZXJ9O1xuICBjb25zdCBmaWx0ZXJGdW5jQ2FsbGVyID0gKGZpbHRlcjogRmlsdGVyKSA9PiBmaWx0ZXJGdW5jc1tmaWx0ZXIuaWRdKGZpbHRlckNvbnRleHQpO1xuXG4gIGNvbnN0IG51bVJvd3MgPSBkYXRhQ29udGFpbmVyLm51bVJvd3MoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1Sb3dzOyArK2kpIHtcbiAgICBmaWx0ZXJDb250ZXh0LmluZGV4ID0gaTtcblxuICAgIGNvbnN0IG1hdGNoRm9yRG9tYWluID0gZHluYW1pY0RvbWFpbkZpbHRlcnMgJiYgZHluYW1pY0RvbWFpbkZpbHRlcnMuZXZlcnkoZmlsdGVyRnVuY0NhbGxlcik7XG4gICAgaWYgKG1hdGNoRm9yRG9tYWluKSB7XG4gICAgICBmaWx0ZXJlZEluZGV4Rm9yRG9tYWluLnB1c2goZmlsdGVyQ29udGV4dC5pbmRleCk7XG4gICAgfVxuXG4gICAgY29uc3QgbWF0Y2hGb3JSZW5kZXIgPSBjcHVGaWx0ZXJzICYmIGNwdUZpbHRlcnMuZXZlcnkoZmlsdGVyRnVuY0NhbGxlcik7XG4gICAgaWYgKG1hdGNoRm9yUmVuZGVyKSB7XG4gICAgICBmaWx0ZXJlZEluZGV4LnB1c2goZmlsdGVyQ29udGV4dC5pbmRleCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi4oZHluYW1pY0RvbWFpbkZpbHRlcnMgPyB7ZmlsdGVyZWRJbmRleEZvckRvbWFpbn0gOiB7fSksXG4gICAgLi4uKGNwdUZpbHRlcnMgPyB7ZmlsdGVyZWRJbmRleH0gOiB7fSlcbiAgfTtcbn1cblxuLyoqXG4gKiBHZXQgYSByZWNvcmQgb2YgZmlsdGVycyBiYXNlZCBvbiBkb21haW4gdHlwZSBhbmQgZ3B1IC8gY3B1XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWx0ZXJSZWNvcmQoXG4gIGRhdGFJZDogc3RyaW5nLFxuICBmaWx0ZXJzOiBGaWx0ZXJbXSxcbiAgb3B0OiBGaWx0ZXJEYXRhc2V0T3B0ID0ge31cbik6IEZpbHRlclJlY29yZCB7XG4gIGNvbnN0IGZpbHRlclJlY29yZDogRmlsdGVyUmVjb3JkID0ge1xuICAgIGR5bmFtaWNEb21haW46IFtdLFxuICAgIGZpeGVkRG9tYWluOiBbXSxcbiAgICBjcHU6IFtdLFxuICAgIGdwdTogW11cbiAgfTtcblxuICBmaWx0ZXJzLmZvckVhY2goZiA9PiB7XG4gICAgaWYgKGlzVmFsaWRGaWx0ZXJWYWx1ZShmLnR5cGUsIGYudmFsdWUpICYmIHRvQXJyYXkoZi5kYXRhSWQpLmluY2x1ZGVzKGRhdGFJZCkpIHtcbiAgICAgIChmLmZpeGVkRG9tYWluIHx8IG9wdC5pZ25vcmVEb21haW5cbiAgICAgICAgPyBmaWx0ZXJSZWNvcmQuZml4ZWREb21haW5cbiAgICAgICAgOiBmaWx0ZXJSZWNvcmQuZHluYW1pY0RvbWFpblxuICAgICAgKS5wdXNoKGYpO1xuXG4gICAgICAoZi5ncHUgJiYgIW9wdC5jcHVPbmx5ID8gZmlsdGVyUmVjb3JkLmdwdSA6IGZpbHRlclJlY29yZC5jcHUpLnB1c2goZik7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZmlsdGVyUmVjb3JkO1xufVxuXG4vKipcbiAqIENvbXBhcmUgZmlsdGVyIHJlY29yZHMgdG8gZ2V0IHdoYXQgaGFzIGNoYW5nZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpZmZGaWx0ZXJzKFxuICBmaWx0ZXJSZWNvcmQ6IEZpbHRlclJlY29yZCxcbiAgb2xkRmlsdGVyUmVjb3JkOiBGaWx0ZXJSZWNvcmQgfCBSZWNvcmQ8c3RyaW5nLCBuZXZlcj4gPSB7fVxuKTogRmlsdGVyQ2hhbmdlZCB7XG4gIGxldCBmaWx0ZXJDaGFuZ2VkOiBQYXJ0aWFsPEZpbHRlckNoYW5nZWQ+ID0ge307XG5cbiAgKE9iamVjdC5lbnRyaWVzKGZpbHRlclJlY29yZCkgYXMgRW50cmllczxGaWx0ZXJSZWNvcmQ+KS5mb3JFYWNoKChbcmVjb3JkLCBpdGVtc10pID0+IHtcbiAgICBpdGVtcy5mb3JFYWNoKGZpbHRlciA9PiB7XG4gICAgICBjb25zdCBvbGRGaWx0ZXI6IEZpbHRlciB8IHVuZGVmaW5lZCA9IChvbGRGaWx0ZXJSZWNvcmRbcmVjb3JkXSB8fCBbXSkuZmluZChcbiAgICAgICAgKGY6IEZpbHRlcikgPT4gZi5pZCA9PT0gZmlsdGVyLmlkXG4gICAgICApO1xuXG4gICAgICBpZiAoIW9sZEZpbHRlcikge1xuICAgICAgICAvLyBhZGRlZFxuICAgICAgICBmaWx0ZXJDaGFuZ2VkID0gc2V0KFtyZWNvcmQsIGZpbHRlci5pZF0sICdhZGRlZCcsIGZpbHRlckNoYW5nZWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gY2hlY2sgIHdoYXQgaGFzIGNoYW5nZWRcbiAgICAgICAgWyduYW1lJywgJ3ZhbHVlJywgJ2RhdGFJZCddLmZvckVhY2gocHJvcCA9PiB7XG4gICAgICAgICAgaWYgKGZpbHRlcltwcm9wXSAhPT0gb2xkRmlsdGVyW3Byb3BdKSB7XG4gICAgICAgICAgICBmaWx0ZXJDaGFuZ2VkID0gc2V0KFtyZWNvcmQsIGZpbHRlci5pZF0sIGAke3Byb3B9X2NoYW5nZWRgLCBmaWx0ZXJDaGFuZ2VkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgKG9sZEZpbHRlclJlY29yZFtyZWNvcmRdIHx8IFtdKS5mb3JFYWNoKChvbGRGaWx0ZXI6IEZpbHRlcikgPT4ge1xuICAgICAgLy8gZGVsZXRlZFxuICAgICAgaWYgKCFpdGVtcy5maW5kKGYgPT4gZi5pZCA9PT0gb2xkRmlsdGVyLmlkKSkge1xuICAgICAgICBmaWx0ZXJDaGFuZ2VkID0gc2V0KFtyZWNvcmQsIG9sZEZpbHRlci5pZF0sICdkZWxldGVkJywgZmlsdGVyQ2hhbmdlZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJldHVybiB7Li4ue2R5bmFtaWNEb21haW46IG51bGwsIGZpeGVkRG9tYWluOiBudWxsLCBjcHU6IG51bGwsIGdwdTogbnVsbH0sIC4uLmZpbHRlckNoYW5nZWR9O1xufVxuXG4vKipcbiAqIENhbGwgYnkgcGFyc2luZyBmaWx0ZXJzIGZyb20gVVJMXG4gKiBDaGVjayBpZiB2YWx1ZSBvZiBmaWx0ZXIgd2l0aGluIGZpbHRlciBkb21haW4sIGlmIG5vdCBhZGp1c3QgaXQgdG8gbWF0Y2hcbiAqIGZpbHRlciBkb21haW5cbiAqXG4gKiBAcmV0dXJucyB2YWx1ZSAtIGFkanVzdGVkIHZhbHVlIHRvIG1hdGNoIGZpbHRlciBvciBudWxsIHRvIHJlbW92ZSBmaWx0ZXJcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmV4cG9ydCBmdW5jdGlvbiBhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluKHZhbHVlOiBGaWx0ZXJbJ3ZhbHVlJ10sIHtkb21haW4sIHR5cGV9KSB7XG4gIGlmICghdHlwZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBpZiB0aGUgY3VycmVudCBmaWx0ZXIgaXMgYSBwb2x5Z29uIGl0IHdpbGwgbm90IGhhdmUgYW55IGRvbWFpblxuICAvLyBhbGwgb3RoZXIgZmlsdGVyIHR5cGVzIHJlcXVpcmUgZG9tYWluXG4gIGlmICh0eXBlICE9PSBGSUxURVJfVFlQRVMucG9seWdvbiAmJiAhZG9tYWluKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBGSUxURVJfVFlQRVMucmFuZ2U6XG4gICAgY2FzZSBGSUxURVJfVFlQRVMudGltZVJhbmdlOlxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSB8fCB2YWx1ZS5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgcmV0dXJuIGRvbWFpbi5tYXAoZCA9PiBkKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbHVlLm1hcCgoZCwgaSkgPT4gKG5vdE51bGxvclVuZGVmaW5lZChkKSAmJiBpc0luUmFuZ2UoZCwgZG9tYWluKSA/IGQgOiBkb21haW5baV0pKTtcblxuICAgIGNhc2UgRklMVEVSX1RZUEVTLm11bHRpU2VsZWN0OiB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGZpbHRlcmVkVmFsdWUgPSB2YWx1ZS5maWx0ZXIoZCA9PiBkb21haW4uaW5jbHVkZXMoZCkpO1xuICAgICAgcmV0dXJuIGZpbHRlcmVkVmFsdWUubGVuZ3RoID8gZmlsdGVyZWRWYWx1ZSA6IFtdO1xuICAgIH1cbiAgICBjYXNlIEZJTFRFUl9UWVBFUy5zZWxlY3Q6XG4gICAgICByZXR1cm4gZG9tYWluLmluY2x1ZGVzKHZhbHVlKSA/IHZhbHVlIDogdHJ1ZTtcbiAgICBjYXNlIEZJTFRFUl9UWVBFUy5wb2x5Z29uOlxuICAgICAgcmV0dXJuIHZhbHVlO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlIG51bWVyaWMgZG9tYWluIGFuZCBzdWl0YWJsZSBzdGVwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROdW1lcmljRmllbGREb21haW4oXG4gIGRhdGFDb250YWluZXI6IERhdGFDb250YWluZXJJbnRlcmZhY2UsXG4gIHZhbHVlQWNjZXNzb3I6IGRhdGFWYWx1ZUFjY2Vzc29yXG4pOiBSYW5nZUZpZWxkRG9tYWluIHtcbiAgbGV0IGRvbWFpbjogW251bWJlciwgbnVtYmVyXSA9IFswLCAxXTtcbiAgbGV0IHN0ZXAgPSAwLjE7XG5cbiAgY29uc3QgbWFwcGVkVmFsdWUgPSBkYXRhQ29udGFpbmVyLm1hcEluZGV4KHZhbHVlQWNjZXNzb3IpO1xuXG4gIGlmIChkYXRhQ29udGFpbmVyLm51bVJvd3MoKSA+IDEpIHtcbiAgICBkb21haW4gPSBTY2FsZVV0aWxzLmdldExpbmVhckRvbWFpbihtYXBwZWRWYWx1ZSk7XG4gICAgY29uc3QgZGlmZiA9IGRvbWFpblsxXSAtIGRvbWFpblswXTtcblxuICAgIC8vIGluIGNhc2UgZXF1YWwgZG9tYWluLCBbOTYsIDk2XSwgd2hpY2ggd2lsbCBicmVhayBxdWFudGl6ZSBzY2FsZVxuICAgIGlmICghZGlmZikge1xuICAgICAgZG9tYWluWzFdID0gZG9tYWluWzBdICsgMTtcbiAgICB9XG5cbiAgICBzdGVwID0gZ2V0TnVtZXJpY1N0ZXBTaXplKGRpZmYpIHx8IHN0ZXA7XG4gICAgZG9tYWluWzBdID0gZm9ybWF0TnVtYmVyQnlTdGVwKGRvbWFpblswXSwgc3RlcCwgJ2Zsb29yJyk7XG4gICAgZG9tYWluWzFdID0gZm9ybWF0TnVtYmVyQnlTdGVwKGRvbWFpblsxXSwgc3RlcCwgJ2NlaWwnKTtcbiAgfVxuXG4gIHJldHVybiB7ZG9tYWluLCBzdGVwfTtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGUgc3RlcCBzaXplIGZvciByYW5nZSBhbmQgdGltZXJhbmdlIGZpbHRlclxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TnVtZXJpY1N0ZXBTaXplKGRpZmY6IG51bWJlcik6IG51bWJlciB7XG4gIGRpZmYgPSBNYXRoLmFicyhkaWZmKTtcblxuICBpZiAoZGlmZiA+IDEwMCkge1xuICAgIHJldHVybiAxO1xuICB9IGVsc2UgaWYgKGRpZmYgPiAzKSB7XG4gICAgcmV0dXJuIDAuMDE7XG4gIH0gZWxzZSBpZiAoZGlmZiA+IDEpIHtcbiAgICByZXR1cm4gMC4wMDE7XG4gIH1cbiAgLy8gVHJ5IHRvIGdldCBhdCBsZWFzdCAxMDAwIHN0ZXBzIC0gYW5kIGtlZXAgdGhlIHN0ZXAgc2l6ZSBiZWxvdyB0aGF0IG9mXG4gIC8vIHRoZSAoZGlmZiA+IDEpIGNhc2UuXG4gIGNvbnN0IHggPSBkaWZmIC8gMTAwMDtcbiAgLy8gRmluZCB0aGUgZXhwb25lbnQgYW5kIHRydW5jYXRlIHRvIDEwIHRvIHRoZSBwb3dlciBvZiB0aGF0IGV4cG9uZW50XG5cbiAgY29uc3QgZXhwb25lbnRpYWxGb3JtID0geC50b0V4cG9uZW50aWFsKCk7XG4gIGNvbnN0IGV4cG9uZW50ID0gcGFyc2VGbG9hdChleHBvbmVudGlhbEZvcm0uc3BsaXQoJ2UnKVsxXSk7XG5cbiAgLy8gR2V0dGluZyByZWFkeSBmb3Igbm9kZSAxMlxuICAvLyB0aGlzIGlzIHdoeSB3ZSBuZWVkIGRlY2ltYWwuanNcbiAgLy8gTWF0aC5wb3coMTAsIC01KSA9IDAuMDAwMDA5OTk5OTk5OTk5OTk5OTk5XG4gIC8vIHRoZSBhYm92ZSByZXN1bHQgc2hvd3MgaW4gYnJvd3NlciBhbmQgbm9kZSAxMFxuICAvLyBub2RlIDEyIGJlaGF2ZXMgY29ycmVjdGx5XG4gIHJldHVybiBuZXcgRGVjaW1hbCgxMCkucG93KGV4cG9uZW50KS50b051bWJlcigpO1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZSB0aW1lc3RhbXAgZG9tYWluIGFuZCBzdWl0YWJsZSBzdGVwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUaW1lc3RhbXBGaWVsZERvbWFpbihcbiAgZGF0YUNvbnRhaW5lcjogRGF0YUNvbnRhaW5lckludGVyZmFjZSxcbiAgdmFsdWVBY2Nlc3NvcjogZGF0YVZhbHVlQWNjZXNzb3Jcbik6IFRpbWVSYW5nZUZpZWxkRG9tYWluIHtcbiAgLy8gdG8gYXZvaWQgY29udmVydGluZyBzdHJpbmcgZm9ybWF0IHRpbWUgdG8gZXBvY2hcbiAgLy8gZXZlcnkgdGltZSB3ZSBjb21wYXJlIHdlIHN0b3JlIGEgdmFsdWUgbWFwcGVkIHRvIGludCBpbiBmaWx0ZXIgZG9tYWluXG4gIGNvbnN0IG1hcHBlZFZhbHVlID0gZGF0YUNvbnRhaW5lci5tYXBJbmRleCh2YWx1ZUFjY2Vzc29yKTtcblxuICBjb25zdCBkb21haW4gPSBTY2FsZVV0aWxzLmdldExpbmVhckRvbWFpbihtYXBwZWRWYWx1ZSk7XG4gIGNvbnN0IGRlZmF1bHRUaW1lRm9ybWF0ID0gZ2V0VGltZVdpZGdldFRpdGxlRm9ybWF0dGVyKGRvbWFpbik7XG5cbiAgbGV0IHN0ZXAgPSAwLjAxO1xuXG4gIGNvbnN0IGRpZmYgPSBkb21haW5bMV0gLSBkb21haW5bMF07XG4gIC8vIGluIGNhc2UgZXF1YWwgdGltZXN0YW1wIGFkZCAxIHNlY29uZCBwYWRkaW5nIHRvIHByZXZlbnQgYnJlYWtcbiAgaWYgKCFkaWZmKSB7XG4gICAgZG9tYWluWzFdID0gZG9tYWluWzBdICsgMTAwMDtcbiAgfVxuICBjb25zdCBlbnRyeSA9IFRpbWVzdGFtcFN0ZXBNYXAuZmluZChmID0+IGYubWF4ID49IGRpZmYpO1xuICBpZiAoZW50cnkpIHtcbiAgICBzdGVwID0gZW50cnkuc3RlcDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZG9tYWluLFxuICAgIHN0ZXAsXG4gICAgbWFwcGVkVmFsdWUsXG4gICAgZGVmYXVsdFRpbWVGb3JtYXRcbiAgfTtcbn1cblxuLyoqXG4gKiByb3VuZCBudW1iZXIgYmFzZWQgb24gc3RlcFxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSB2YWxcbiAqIEBwYXJhbSB7TnVtYmVyfSBzdGVwXG4gKiBAcGFyYW0ge3N0cmluZ30gYm91bmRcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHJvdW5kZWQgbnVtYmVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXROdW1iZXJCeVN0ZXAodmFsOiBudW1iZXIsIHN0ZXA6IG51bWJlciwgYm91bmQ6ICdmbG9vcicgfCAnY2VpbCcpOiBudW1iZXIge1xuICBpZiAoYm91bmQgPT09ICdmbG9vcicpIHtcbiAgICByZXR1cm4gTWF0aC5mbG9vcih2YWwgKiAoMSAvIHN0ZXApKSAvICgxIC8gc3RlcCk7XG4gIH1cblxuICByZXR1cm4gTWF0aC5jZWlsKHZhbCAqICgxIC8gc3RlcCkpIC8gKDEgLyBzdGVwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSW5SYW5nZSh2YWw6IGFueSwgZG9tYWluOiBudW1iZXJbXSk6IGJvb2xlYW4ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkoZG9tYWluKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICByZXR1cm4gZG9tYWluWzBdIDw9IHZhbFswXSAmJiB2YWxbMV0gPD0gZG9tYWluWzFdO1xuICB9XG5cbiAgcmV0dXJuIHZhbCA+PSBkb21haW5bMF0gJiYgdmFsIDw9IGRvbWFpblsxXTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSBwb2ludCBpcyB3aXRoaW4gdGhlIHByb3ZpZGVkIHBvbHlnb25cbiAqXG4gKiBAcGFyYW0gcG9pbnQgYXMgaW5wdXQgc2VhcmNoIFtsYXQsIGxuZ11cbiAqIEBwYXJhbSBwb2x5Z29uIFBvaW50cyBtdXN0IGJlIHdpdGhpbiB0aGVzZSAoTXVsdGkpUG9seWdvbihzKVxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzSW5Qb2x5Z29uKHBvaW50OiBudW1iZXJbXSwgcG9seWdvbjogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiBib29sZWFuV2l0aGluKHR1cmZQb2ludChwb2ludCksIHBvbHlnb24pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFRpbWVXaWRnZXRUaXRsZUZvcm1hdHRlcihkb21haW46IFtudW1iZXIsIG51bWJlcl0pOiBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKCFpc1ZhbGlkVGltZURvbWFpbihkb21haW4pKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBkaWZmID0gZG9tYWluWzFdIC0gZG9tYWluWzBdO1xuXG4gIC8vIExvY2FsIGF3YXJlIGZvcm1hdHNcbiAgLy8gaHR0cHM6Ly9tb21lbnRqcy5jb20vZG9jcy8jL3BhcnNpbmcvc3RyaW5nLWZvcm1hdFxuICByZXR1cm4gZGlmZiA+IGR1cmF0aW9uWWVhciA/ICdMJyA6IGRpZmYgPiBkdXJhdGlvbkRheSA/ICdMIExUJyA6ICdMIExUUyc7XG59XG5cbi8qKlxuICogU2FuaXR5IGNoZWNrIG9uIGZpbHRlcnMgdG8gcHJlcGFyZSBmb3Igc2F2ZVxuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vZmlsdGVyLXV0aWxzJykuaXNGaWx0ZXJWYWxpZFRvU2F2ZX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRmlsdGVyVmFsaWRUb1NhdmUoZmlsdGVyOiBhbnkpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBmaWx0ZXI/LnR5cGUgJiYgQXJyYXkuaXNBcnJheShmaWx0ZXI/Lm5hbWUpICYmIChmaWx0ZXI/Lm5hbWUubGVuZ3RoIHx8IGZpbHRlcj8ubGF5ZXJJZC5sZW5ndGgpXG4gICk7XG59XG5cbi8qKlxuICogU2FuaXR5IGNoZWNrIG9uIGZpbHRlcnMgdG8gcHJlcGFyZSBmb3Igc2F2ZVxuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vZmlsdGVyLXV0aWxzJykuaXNWYWxpZEZpbHRlclZhbHVlfVxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBjb21wbGV4aXR5ICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZEZpbHRlclZhbHVlKHR5cGU6IHN0cmluZyB8IG51bGwsIHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgaWYgKCF0eXBlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgRklMVEVSX1RZUEVTLnNlbGVjdDpcbiAgICAgIHJldHVybiB2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PT0gZmFsc2U7XG5cbiAgICBjYXNlIEZJTFRFUl9UWVBFUy5yYW5nZTpcbiAgICBjYXNlIEZJTFRFUl9UWVBFUy50aW1lUmFuZ2U6XG4gICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUuZXZlcnkodiA9PiB2ICE9PSBudWxsICYmICFpc05hTih2KSk7XG5cbiAgICBjYXNlIEZJTFRFUl9UWVBFUy5tdWx0aVNlbGVjdDpcbiAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSAmJiBCb29sZWFuKHZhbHVlLmxlbmd0aCk7XG5cbiAgICBjYXNlIEZJTFRFUl9UWVBFUy5pbnB1dDpcbiAgICAgIHJldHVybiBCb29sZWFuKHZhbHVlLmxlbmd0aCk7XG5cbiAgICBjYXNlIEZJTFRFUl9UWVBFUy5wb2x5Z29uOiB7XG4gICAgICBjb25zdCBjb29yZGluYXRlcyA9IGdldCh2YWx1ZSwgWydnZW9tZXRyeScsICdjb29yZGluYXRlcyddKTtcbiAgICAgIHJldHVybiBCb29sZWFuKHZhbHVlICYmIHZhbHVlLmlkICYmIGNvb3JkaW5hdGVzKTtcbiAgICB9XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb2x1bW5GaWx0ZXJQcm9wczxLIGV4dGVuZHMgS2VwbGVyVGFibGVNb2RlbDxLLCBMPiwgTD4oXG4gIGZpbHRlcjogRmlsdGVyLFxuICBkYXRhc2V0OiBLXG4pOiB7bGluZUNoYXJ0OiBMaW5lQ2hhcnQ7IHlBeHM6IEZpZWxkfSB8IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICBpZiAoZmlsdGVyLnBsb3RUeXBlPy50eXBlID09PSBQTE9UX1RZUEVTLmhpc3RvZ3JhbSB8fCAhZmlsdGVyLnlBeGlzKSB7XG4gICAgLy8gaGlzdG9ncmFtIHNob3VsZCBiZSBjYWxjdWxhdGVkIHdoZW4gY3JlYXRlIGZpbHRlclxuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGNvbnN0IHttYXBwZWRWYWx1ZSA9IFtdfSA9IGZpbHRlcjtcbiAgY29uc3Qge3lBeGlzfSA9IGZpbHRlcjtcbiAgY29uc3QgZmllbGRJZHggPSBkYXRhc2V0LmdldENvbHVtbkZpZWxkSWR4KHlBeGlzLm5hbWUpO1xuICBpZiAoZmllbGRJZHggPCAwKSB7XG4gICAgLy8gQ29uc29sZS53YXJuKGB5QXhpcyAke3lBeGlzLm5hbWV9IGRvZXMgbm90IGV4aXN0IGluIGRhdGFzZXRgKTtcbiAgICByZXR1cm4ge2xpbmVDaGFydDoge30sIHlBeGlzfTtcbiAgfVxuXG4gIC8vIHJldHVybiBsaW5lQ2hhcnRcbiAgY29uc3Qgc2VyaWVzID0gZGF0YXNldC5kYXRhQ29udGFpbmVyXG4gICAgLm1hcChcbiAgICAgIChyb3csIHJvd0luZGV4KSA9PiAoe1xuICAgICAgICB4OiBtYXBwZWRWYWx1ZVtyb3dJbmRleF0sXG4gICAgICAgIHk6IHJvdy52YWx1ZUF0KGZpZWxkSWR4KVxuICAgICAgfSksXG4gICAgICB0cnVlXG4gICAgKVxuICAgIC5maWx0ZXIoKHt4LCB5fSkgPT4gTnVtYmVyLmlzRmluaXRlKHgpICYmIE51bWJlci5pc0Zpbml0ZSh5KSlcbiAgICAuc29ydCgoYSwgYikgPT4gYXNjZW5kaW5nKGEueCwgYi54KSk7XG5cbiAgY29uc3QgeURvbWFpbiA9IGV4dGVudChzZXJpZXMsIGQgPT4gZC55KSBhcyBbbnVtYmVyLCBudW1iZXJdO1xuICBjb25zdCB4RG9tYWluID0gW3Nlcmllc1swXS54LCBzZXJpZXNbc2VyaWVzLmxlbmd0aCAtIDFdLnhdIGFzIFtudW1iZXIsIG51bWJlcl07XG5cbiAgcmV0dXJuIHtsaW5lQ2hhcnQ6IHtzZXJpZXMsIHlEb21haW4sIHhEb21haW59LCB5QXhpc307XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVGaWx0ZXJQbG90PEsgZXh0ZW5kcyBLZXBsZXJUYWJsZU1vZGVsPEssIGFueT4+KFxuICBkYXRhc2V0czoge1tpZDogc3RyaW5nXTogS30sXG4gIGZpbHRlcjogRmlsdGVyLFxuICBkYXRhSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxuKSB7XG4gIGlmIChkYXRhSWQpIHtcbiAgICBmaWx0ZXIgPSByZW1vdmVGaWx0ZXJQbG90KGZpbHRlciwgZGF0YUlkKTtcbiAgfVxuXG4gIGlmIChmaWx0ZXIudHlwZSA9PT0gRklMVEVSX1RZUEVTLnRpbWVSYW5nZSkge1xuICAgIHJldHVybiB1cGRhdGVUaW1lRmlsdGVyUGxvdFR5cGUoZmlsdGVyIGFzIFRpbWVSYW5nZUZpbHRlciwgZmlsdGVyLnBsb3RUeXBlLCBkYXRhc2V0cyk7XG4gIH0gZWxzZSBpZiAoZmlsdGVyLnR5cGUgPT09IEZJTFRFUl9UWVBFUy5yYW5nZSkge1xuICAgIHJldHVybiB1cGRhdGVSYW5nZUZpbHRlclBsb3RUeXBlKGZpbHRlciBhcyBSYW5nZUZpbHRlciwgZmlsdGVyLnBsb3RUeXBlLCBkYXRhc2V0cyk7XG4gIH1cbiAgcmV0dXJuIGZpbHRlcjtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIGRhdGFzZXRJZHMgbGlzdCBvZiBkYXRhc2V0IGlkcyB0byBiZSBmaWx0ZXJlZFxuICogQHBhcmFtIGRhdGFzZXRzIGFsbCBkYXRhc2V0c1xuICogQHBhcmFtIGZpbHRlcnMgYWxsIGZpbHRlcnMgdG8gYmUgYXBwbGllZCB0byBkYXRhc2V0c1xuICogQHJldHVybiBkYXRhc2V0cyAtIG5ldyB1cGRhdGVkIGRhdGFzZXRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBseUZpbHRlcnNUb0RhdGFzZXRzPFxuICBLIGV4dGVuZHMgS2VwbGVyVGFibGVNb2RlbDxLLCBMPixcbiAgTCBleHRlbmRzIHtjb25maWc6IHtkYXRhSWQ6IHN0cmluZyB8IG51bGx9fVxuPihcbiAgZGF0YXNldElkczogc3RyaW5nW10sXG4gIGRhdGFzZXRzOiB7W2lkOiBzdHJpbmddOiBLfSxcbiAgZmlsdGVyczogRmlsdGVyW10sXG4gIGxheWVycz86IExbXVxuKToge1tpZDogc3RyaW5nXTogS30ge1xuICBjb25zdCBkYXRhSWRzID0gdG9BcnJheShkYXRhc2V0SWRzKTtcbiAgcmV0dXJuIGRhdGFJZHMucmVkdWNlKChhY2MsIGRhdGFJZCkgPT4ge1xuICAgIGNvbnN0IGxheWVyc1RvRmlsdGVyID0gKGxheWVycyB8fCBbXSkuZmlsdGVyKGwgPT4gbC5jb25maWcuZGF0YUlkID09PSBkYXRhSWQpO1xuICAgIGNvbnN0IGFwcGxpZWRGaWx0ZXJzID0gZmlsdGVycy5maWx0ZXIoZCA9PiBzaG91bGRBcHBseUZpbHRlcihkLCBkYXRhSWQpKTtcbiAgICBjb25zdCB0YWJsZSA9IGRhdGFzZXRzW2RhdGFJZF07XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uYWNjLFxuICAgICAgW2RhdGFJZF06IHRhYmxlLmZpbHRlclRhYmxlKGFwcGxpZWRGaWx0ZXJzLCBsYXllcnNUb0ZpbHRlciwge30pXG4gICAgfTtcbiAgfSwgZGF0YXNldHMpO1xufVxuXG4vKipcbiAqIEFwcGxpZXMgYSBuZXcgZmllbGQgbmFtZSB2YWx1ZSB0byBmaWx0ZXIgYW5kIHVwZGF0ZSBib3RoIGZpbHRlciBhbmQgZGF0YXNldFxuICogQHBhcmFtIGZpbHRlciAtIHRvIGJlIGFwcGxpZWQgdGhlIG5ldyBmaWVsZCBuYW1lIG9uXG4gKiBAcGFyYW0gZGF0YXNldHMgLSBBbGwgZGF0YXNldHNcbiAqIEBwYXJhbSBkYXRhc2V0SWQgLSBJZCBvZiB0aGUgZGF0YXNldCB0aGUgZmllbGQgYmVsb25ncyB0b1xuICogQHBhcmFtIGZpZWxkTmFtZSAtIGZpZWxkLm5hbWVcbiAqIEBwYXJhbSBmaWx0ZXJEYXRhc2V0SW5kZXggLSBmaWVsZC5uYW1lXG4gKiBAcGFyYW0gb3B0aW9uXG4gKiBAcmV0dXJuIC0ge2ZpbHRlciwgZGF0YXNldHN9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBseUZpbHRlckZpZWxkTmFtZTxLIGV4dGVuZHMgS2VwbGVyVGFibGVNb2RlbDxLLCBMPiwgTD4oXG4gIGZpbHRlcjogRmlsdGVyLFxuICBkYXRhc2V0czogUmVjb3JkPHN0cmluZywgSz4sXG4gIGRhdGFzZXRJZDogc3RyaW5nLFxuICBmaWVsZE5hbWU6IHN0cmluZyxcbiAgZmlsdGVyRGF0YXNldEluZGV4ID0gMCxcbiAgb3B0aW9uPzoge21lcmdlRG9tYWluOiBib29sZWFufVxuKToge1xuICBmaWx0ZXI6IEZpbHRlciB8IG51bGw7XG4gIGRhdGFzZXQ6IEs7XG59IHtcbiAgLy8gdXNpbmcgZmlsdGVyRGF0YXNldEluZGV4IHdlIGNhbiBmaWx0ZXIgb25seSB0aGUgc3BlY2lmaWVkIGRhdGFzZXRcbiAgY29uc3QgbWVyZ2VEb21haW4gPVxuICAgIG9wdGlvbiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob3B0aW9uLCAnbWVyZ2VEb21haW4nKVxuICAgICAgPyBvcHRpb24ubWVyZ2VEb21haW5cbiAgICAgIDogZmFsc2U7XG5cbiAgY29uc3QgZGF0YXNldCA9IGRhdGFzZXRzW2RhdGFzZXRJZF07XG4gIGNvbnN0IGZpZWxkSW5kZXggPSBkYXRhc2V0Py5nZXRDb2x1bW5GaWVsZElkeChmaWVsZE5hbWUpO1xuICAvLyBpZiBubyBmaWVsZCB3aXRoIHNhbWUgbmFtZSBpcyBmb3VuZCwgbW92ZSB0byB0aGUgbmV4dCBkYXRhc2V0c1xuICBpZiAoIWRhdGFzZXQgfHwgZmllbGRJbmRleCA9PT0gLTEpIHtcbiAgICAvLyB0aHJvdyBuZXcgRXJyb3IoYGZpZWxkSW5kZXggbm90IGZvdW5kLiBEYXRhc2V0IG11c3QgY29udGFpbiBhIHByb3BlcnR5IHdpdGggbmFtZTogJHtmaWVsZE5hbWV9YCk7XG4gICAgcmV0dXJuIHtmaWx0ZXI6IG51bGwsIGRhdGFzZXR9O1xuICB9XG5cbiAgLy8gVE9ETzogdmFsaWRhdGUgZmllbGQgdHlwZVxuICBjb25zdCBmaWx0ZXJQcm9wcyA9IGRhdGFzZXQuZ2V0Q29sdW1uRmlsdGVyUHJvcHMoZmllbGROYW1lKTtcblxuICBsZXQgbmV3RmlsdGVyID0ge1xuICAgIC4uLmZpbHRlcixcbiAgICAuLi5maWx0ZXJQcm9wcyxcbiAgICBuYW1lOiBPYmplY3QuYXNzaWduKFsuLi50b0FycmF5KGZpbHRlci5uYW1lKV0sIHtbZmlsdGVyRGF0YXNldEluZGV4XTogZmllbGROYW1lfSksXG4gICAgZmllbGRJZHg6IE9iamVjdC5hc3NpZ24oWy4uLnRvQXJyYXkoZmlsdGVyLmZpZWxkSWR4KV0sIHtcbiAgICAgIFtmaWx0ZXJEYXRhc2V0SW5kZXhdOiBmaWVsZEluZGV4XG4gICAgfSksXG4gICAgLy8gTWFrZSBzdXJlIHBsb3RUeXBlIGlzIG5vdCBvdmVyd3JpdHRlbiBieSB0aGUgZGVmYXVsdCBlbXB0eSBwbG90VHlwZVxuICAgIC4uLihmaWx0ZXIucGxvdFR5cGUgPyB7cGxvdFR5cGU6IGZpbHRlci5wbG90VHlwZX0gOiB7fSlcbiAgfTtcblxuICBpZiAobWVyZ2VEb21haW4pIHtcbiAgICBjb25zdCBkb21haW5TdGVwczogKEZpbHRlciAmIHtzdGVwPzogbnVtYmVyfSkgfCBudWxsID1cbiAgICAgIG1lcmdlRmlsdGVyRG9tYWluKG5ld0ZpbHRlciwgZGF0YXNldHMpID8/ICh7fSBhcyBGaWx0ZXIpO1xuICAgIGlmIChkb21haW5TdGVwcykge1xuICAgICAgY29uc3Qge2RvbWFpbiwgc3RlcH0gPSBkb21haW5TdGVwcztcbiAgICAgIG5ld0ZpbHRlci5kb21haW4gPSBkb21haW47XG4gICAgICBpZiAobmV3RmlsdGVyLnN0ZXAgIT09IHN0ZXApIHtcbiAgICAgICAgbmV3RmlsdGVyLnN0ZXAgPSBzdGVwO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFRPRE86IGlmIHdlIGRvbid0IHNldCBmaWx0ZXIgdmFsdWUgaW4gZmlsdGVyUHJvcHMsIHdlIGRvbid0IG5lZWQgdG8gZG8gdGhpc1xuICBpZiAoZmlsdGVyRGF0YXNldEluZGV4ID4gMCkge1xuICAgIC8vIGRvbid0IHJlc2V0IHRoZSBmaWx0ZXIgdmFsdWUgaWYgd2UgYXJlIGp1c3QgYWRkaW5nIGEgc3luY2VkIGRhdGFzZXRcbiAgICBuZXdGaWx0ZXIgPSB7XG4gICAgICAuLi5uZXdGaWx0ZXIsXG4gICAgICB2YWx1ZTogZmlsdGVyLnZhbHVlXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZmlsdGVyOiBuZXdGaWx0ZXIsXG4gICAgZGF0YXNldFxuICB9O1xufVxuXG4vKipcbiAqIE1lcmdlIHRoZSBkb21haW5zIG9mIGEgZmlsdGVyIGluIGNhc2UgaXQgYXBwbGllcyB0byBtdWx0aXBsZSBkYXRhc2V0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VGaWx0ZXJEb21haW4oXG4gIGZpbHRlcjogRmlsdGVyLFxuICBkYXRhc2V0czogUmVjb3JkPHN0cmluZywgS2VwbGVyVGFibGVNb2RlbDxhbnksIGFueT4+XG4pOiAoRmlsdGVyICYge3N0ZXA/OiBudW1iZXJ9KSB8IG51bGwge1xuICBsZXQgZG9tYWluU3RlcHM6IChGaWx0ZXIgJiB7c3RlcD86IG51bWJlcn0pIHwgbnVsbCA9IG51bGw7XG4gIGlmICghZmlsdGVyPy5kYXRhSWQ/Lmxlbmd0aCkge1xuICAgIHJldHVybiBmaWx0ZXI7XG4gIH1cbiAgZmlsdGVyLmRhdGFJZC5mb3JFYWNoKChmaWx0ZXJEYXRhSWQsIGlkeCkgPT4ge1xuICAgIGNvbnN0IGRhdGFzZXQgPSBkYXRhc2V0c1tmaWx0ZXJEYXRhSWRdO1xuICAgIGNvbnN0IGZpbHRlclByb3BzID0gZGF0YXNldC5nZXRDb2x1bW5GaWx0ZXJQcm9wcyhmaWx0ZXIubmFtZVtpZHhdKTtcbiAgICBkb21haW5TdGVwcyA9IG1lcmdlRmlsdGVyRG9tYWluU3RlcChkb21haW5TdGVwcyA/PyAoe30gYXMgRmlsdGVyKSwgZmlsdGVyUHJvcHMpO1xuICB9KTtcbiAgcmV0dXJuIGRvbWFpblN0ZXBzO1xufVxuXG4vKipcbiAqIE1lcmdlIG9uZSBmaWx0ZXIgd2l0aCBvdGhlciBmaWx0ZXIgcHJvcCBkb21haW5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgY29tcGxleGl0eSAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlRmlsdGVyRG9tYWluU3RlcChcbiAgZmlsdGVyOiBGaWx0ZXIgfCBudWxsLFxuICBmaWx0ZXJQcm9wcz86IFBhcnRpYWw8RmlsdGVyPlxuKTogKEZpbHRlciAmIHtzdGVwPzogbnVtYmVyfSkgfCBudWxsIHtcbiAgaWYgKCFmaWx0ZXIpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmICghZmlsdGVyUHJvcHMpIHtcbiAgICByZXR1cm4gZmlsdGVyO1xuICB9XG5cbiAgaWYgKChmaWx0ZXIuZmllbGRUeXBlICYmIGZpbHRlci5maWVsZFR5cGUgIT09IGZpbHRlclByb3BzLmZpZWxkVHlwZSkgfHwgIWZpbHRlclByb3BzLmRvbWFpbikge1xuICAgIHJldHVybiBmaWx0ZXI7XG4gIH1cblxuICBjb25zdCBzb3J0ZWREb21haW4gPSAhZmlsdGVyLmRvbWFpblxuICAgID8gZmlsdGVyUHJvcHMuZG9tYWluXG4gICAgOiBbLi4uKGZpbHRlci5kb21haW4gfHwgW10pLCAuLi4oZmlsdGVyUHJvcHMuZG9tYWluIHx8IFtdKV0uc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuXG4gIGNvbnN0IG5ld0ZpbHRlciA9IHtcbiAgICAuLi5maWx0ZXIsXG4gICAgLi4uZmlsdGVyUHJvcHMsXG4gICAgLy8gdXNlIG1pbiBtYXggYXMgZGVmYXVsdCBkb21haW5cbiAgICBkb21haW46IFtzb3J0ZWREb21haW5bMF0sIHNvcnRlZERvbWFpbltzb3J0ZWREb21haW4ubGVuZ3RoIC0gMV1dXG4gIH07XG5cbiAgc3dpdGNoIChmaWx0ZXJQcm9wcy5maWVsZFR5cGUpIHtcbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5zdHJpbmc6XG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMuaDM6XG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMuZGF0ZTpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm5ld0ZpbHRlcixcbiAgICAgICAgZG9tYWluOiB1bmlxdWUoc29ydGVkRG9tYWluKVxuICAgICAgfTtcblxuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLnRpbWVzdGFtcDoge1xuICAgICAgY29uc3Qgc3RlcCA9XG4gICAgICAgIChmaWx0ZXIgYXMgVGltZVJhbmdlRmlsdGVyKS5zdGVwIDwgKGZpbHRlclByb3BzIGFzIFRpbWVSYW5nZUZpZWxkRG9tYWluKS5zdGVwXG4gICAgICAgICAgPyAoZmlsdGVyIGFzIFRpbWVSYW5nZUZpbHRlcikuc3RlcFxuICAgICAgICAgIDogKGZpbHRlclByb3BzIGFzIFRpbWVSYW5nZUZpZWxkRG9tYWluKS5zdGVwO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5uZXdGaWx0ZXIsXG4gICAgICAgIHN0ZXBcbiAgICAgIH07XG4gICAgfVxuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLnJlYWw6XG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMuaW50ZWdlcjpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG5ld0ZpbHRlcjtcbiAgfVxufVxuLyogZXNsaW50LWVuYWJsZSBjb21wbGV4aXR5ICovXG5cbi8qKlxuICogR2VuZXJhdGVzIHBvbHlnb24gZmlsdGVyXG4gKi9cbmV4cG9ydCBjb25zdCBmZWF0dXJlVG9GaWx0ZXJWYWx1ZSA9IChcbiAgZmVhdHVyZTogRmVhdHVyZSxcbiAgZmlsdGVySWQ6IHN0cmluZyxcbiAgcHJvcGVydGllcz86IFJlY29yZDxzdHJpbmcsIGFueT5cbik6IEZlYXR1cmVWYWx1ZSA9PiAoe1xuICAuLi5mZWF0dXJlLFxuICBpZDogZmVhdHVyZS5pZCxcbiAgcHJvcGVydGllczoge1xuICAgIC4uLmZlYXR1cmUucHJvcGVydGllcyxcbiAgICAuLi5wcm9wZXJ0aWVzLFxuICAgIGZpbHRlcklkXG4gIH1cbn0pO1xuXG5leHBvcnQgY29uc3QgZ2V0RmlsdGVySWRJbkZlYXR1cmUgPSAoZjogRmVhdHVyZVZhbHVlKTogc3RyaW5nID0+IGdldChmLCBbJ3Byb3BlcnRpZXMnLCAnZmlsdGVySWQnXSk7XG5cbi8qKlxuICogR2VuZXJhdGVzIHBvbHlnb24gZmlsdGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVBvbHlnb25GaWx0ZXI8XG4gIEwgZXh0ZW5kcyB7Y29uZmlnOiB7ZGF0YUlkOiBzdHJpbmcgfCBudWxsOyBsYWJlbDogc3RyaW5nfTsgaWQ6IHN0cmluZ31cbj4obGF5ZXJzOiBMW10sIGZlYXR1cmU6IEZlYXR1cmUpOiBQb2x5Z29uRmlsdGVyIHtcbiAgY29uc3QgZGF0YUlkID0gbGF5ZXJzLm1hcChsID0+IGwuY29uZmlnLmRhdGFJZCkuZmlsdGVyKG5vdE51bGxvclVuZGVmaW5lZCk7XG4gIGNvbnN0IGxheWVySWQgPSBsYXllcnMubWFwKGwgPT4gbC5pZCk7XG4gIGNvbnN0IG5hbWUgPSBsYXllcnMubWFwKGwgPT4gbC5jb25maWcubGFiZWwpO1xuICBjb25zdCBmaWx0ZXIgPSBnZXREZWZhdWx0RmlsdGVyKHtkYXRhSWR9KTtcbiAgcmV0dXJuIHtcbiAgICAuLi5maWx0ZXIsXG4gICAgZml4ZWREb21haW46IHRydWUsXG4gICAgdHlwZTogRklMVEVSX1RZUEVTLnBvbHlnb24sXG4gICAgbmFtZSxcbiAgICBsYXllcklkLFxuICAgIHZhbHVlOiBmZWF0dXJlVG9GaWx0ZXJWYWx1ZShmZWF0dXJlLCBmaWx0ZXIuaWQsIHtpc1Zpc2libGU6IHRydWV9KVxuICB9O1xufVxuXG4vKipcbiAqIFJ1biBmaWx0ZXIgZW50aXJlbHkgb24gQ1BVXG4gKi9cbmludGVyZmFjZSBTdGF0ZVR5cGU8SyBleHRlbmRzIEtlcGxlclRhYmxlTW9kZWw8SywgTD4sIEw+IHtcbiAgbGF5ZXJzOiBMW107XG4gIGZpbHRlcnM6IEZpbHRlcltdO1xuICBkYXRhc2V0czoge1tpZDogc3RyaW5nXTogS307XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJEYXRhc2V0Q1BVPFQgZXh0ZW5kcyBTdGF0ZVR5cGU8SywgTD4sIEsgZXh0ZW5kcyBLZXBsZXJUYWJsZU1vZGVsPEssIEw+LCBMPihcbiAgc3RhdGU6IFQsXG4gIGRhdGFJZDogc3RyaW5nXG4pOiBUIHtcbiAgY29uc3QgZGF0YXNldEZpbHRlcnMgPSBzdGF0ZS5maWx0ZXJzLmZpbHRlcihmID0+IGYuZGF0YUlkLmluY2x1ZGVzKGRhdGFJZCkpO1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcblxuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBjcHVGaWx0ZXJlZERhdGFzZXQgPSBkYXRhc2V0LmZpbHRlclRhYmxlQ1BVKGRhdGFzZXRGaWx0ZXJzLCBzdGF0ZS5sYXllcnMpO1xuXG4gIHJldHVybiBzZXQoWydkYXRhc2V0cycsIGRhdGFJZF0sIGNwdUZpbHRlcmVkRGF0YXNldCwgc3RhdGUpO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHBhcnNlZCBmaWx0ZXJzIHdpdGggZGF0YXNldHMgYW5kIGFkZCBmaWx0ZXJQcm9wcyB0byBmaWVsZFxuICovXG50eXBlIE1pblZpc1N0YXRlRm9yRmlsdGVyID0gUGljazxWaXNTdGF0ZSwgJ2xheWVycycgfCAnZGF0YXNldHMnIHwgJ2lzTWVyZ2luZ0RhdGFzZXRzJz47XG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVGaWx0ZXJzVXBkYXRlRGF0YXNldHM8XG4gIFMgZXh0ZW5kcyBNaW5WaXNTdGF0ZUZvckZpbHRlcixcbiAgSyBleHRlbmRzIEtlcGxlclRhYmxlTW9kZWw8SywgTD4sXG4gIEwgZXh0ZW5kcyB7Y29uZmlnOiB7ZGF0YUlkOiBzdHJpbmcgfCBudWxsOyBsYWJlbDogc3RyaW5nfTsgaWQ6IHN0cmluZ31cbj4oXG4gIHN0YXRlOiBTLFxuICBmaWx0ZXJzVG9WYWxpZGF0ZTogUGFyc2VkRmlsdGVyW10gPSBbXVxuKToge1xuICB2YWxpZGF0ZWQ6IEZpbHRlcltdO1xuICBmYWlsZWQ6IEZpbHRlcltdO1xuICB1cGRhdGVkRGF0YXNldHM6IFNbJ2RhdGFzZXRzJ107XG59IHtcbiAgLy8gVE9ETyBCZXR0ZXIgVHlwaW5ncyBoZXJlXG4gIGNvbnN0IHZhbGlkYXRlZDogYW55W10gPSBbXTtcbiAgY29uc3QgZmFpbGVkOiBhbnlbXSA9IFtdO1xuICBjb25zdCB7ZGF0YXNldHMsIGxheWVyc30gPSBzdGF0ZTtcbiAgbGV0IHVwZGF0ZWREYXRhc2V0cyA9IGRhdGFzZXRzO1xuXG4gIC8vIG1lcmdlIGZpbHRlcnNcbiAgZmlsdGVyc1RvVmFsaWRhdGUuZm9yRWFjaChmaWx0ZXJUb1ZhbGlkYXRlID0+IHtcbiAgICAvLyB3ZSBjYW4gb25seSBsb29rIGZvciBkYXRhc2V0cyBkZWZpbmUgaW4gdGhlIGZpbHRlciBkYXRhSWRcbiAgICBjb25zdCBkYXRhc2V0SWRzID0gdG9BcnJheShmaWx0ZXJUb1ZhbGlkYXRlLmRhdGFJZCk7XG5cbiAgICAvLyB3ZSBjYW4gbWVyZ2UgYSBmaWx0ZXIgb25seSBpZiBhbGwgZGF0YXNldHMgaW4gZmlsdGVyLmRhdGFJZCBhcmUgbG9hZGVkXG4gICAgaWYgKGRhdGFzZXRJZHMuZXZlcnkoZCA9PiBkYXRhc2V0c1tkXSAmJiAhc3RhdGUuaXNNZXJnaW5nRGF0YXNldHNbZF0pKSB7XG4gICAgICAvLyBhbGwgZGF0YXNldElkcyBpbiBmaWx0ZXIgbXVzdCBiZSBwcmVzZW50IHRoZSBzdGF0ZSBkYXRhc2V0c1xuICAgICAgY29uc3Qge3ZhbGlkYXRlZEZpbHRlciwgYXBwbHlUb0RhdGFzZXRzLCBhdWdtZW50ZWREYXRhc2V0c30gPSBkYXRhc2V0SWRzLnJlZHVjZTx7XG4gICAgICAgIHZhbGlkYXRlZEZpbHRlcjogRmlsdGVyIHwgbnVsbDtcbiAgICAgICAgYXBwbHlUb0RhdGFzZXRzOiBzdHJpbmdbXTtcbiAgICAgICAgYXVnbWVudGVkRGF0YXNldHM6IHtbZGF0YXNldElkOiBzdHJpbmddOiBhbnl9O1xuICAgICAgfT4oXG4gICAgICAgIChhY2MsIGRhdGFzZXRJZCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGRhdGFzZXQgPSB1cGRhdGVkRGF0YXNldHNbZGF0YXNldElkXTtcbiAgICAgICAgICBjb25zdCBkYXRhc2V0TGF5ZXJzID0gbGF5ZXJzLmZpbHRlcihsID0+IGwuY29uZmlnLmRhdGFJZCA9PT0gZGF0YXNldC5pZCk7XG4gICAgICAgICAgY29uc3QgdG9WYWxpZGF0ZSA9IGFjYy52YWxpZGF0ZWRGaWx0ZXIgfHwgZmlsdGVyVG9WYWxpZGF0ZTtcblxuICAgICAgICAgIGNvbnN0IHtmaWx0ZXI6IHVwZGF0ZWRGaWx0ZXIsIGRhdGFzZXQ6IHVwZGF0ZWREYXRhc2V0fSA9IHZhbGlkYXRlRmlsdGVyV2l0aERhdGEoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIC4uLnVwZGF0ZWREYXRhc2V0cyxcbiAgICAgICAgICAgICAgLi4uYWNjLmF1Z21lbnRlZERhdGFzZXRzLFxuICAgICAgICAgICAgICBbZGF0YXNldElkXTogYWNjLmF1Z21lbnRlZERhdGFzZXRzW2RhdGFzZXRJZF0gfHwgZGF0YXNldFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGFzZXRJZCxcbiAgICAgICAgICAgIHRvVmFsaWRhdGUsXG4gICAgICAgICAgICBkYXRhc2V0TGF5ZXJzXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmICh1cGRhdGVkRmlsdGVyKSB7XG4gICAgICAgICAgICAvLyBtZXJnZSBmaWx0ZXIgZG9tYWluIHN0ZXBcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHZhbGlkYXRlZEZpbHRlcjogdXBkYXRlZEZpbHRlcixcblxuICAgICAgICAgICAgICBhcHBseVRvRGF0YXNldHM6IFsuLi5hY2MuYXBwbHlUb0RhdGFzZXRzLCBkYXRhc2V0SWRdLFxuXG4gICAgICAgICAgICAgIGF1Z21lbnRlZERhdGFzZXRzOiB7XG4gICAgICAgICAgICAgICAgLi4uYWNjLmF1Z21lbnRlZERhdGFzZXRzLFxuICAgICAgICAgICAgICAgIFtkYXRhc2V0SWRdOiB1cGRhdGVkRGF0YXNldFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB2YWxpZGF0ZWRGaWx0ZXI6IG51bGwsXG4gICAgICAgICAgYXBwbHlUb0RhdGFzZXRzOiBbXSxcbiAgICAgICAgICBhdWdtZW50ZWREYXRhc2V0czoge31cbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgICAgaWYgKHZhbGlkYXRlZEZpbHRlciAmJiBpc0VxdWFsKGRhdGFzZXRJZHMsIGFwcGx5VG9EYXRhc2V0cykpIHtcbiAgICAgICAgbGV0IGRvbWFpbiA9IHZhbGlkYXRlZEZpbHRlci5kb21haW47XG4gICAgICAgIGlmICgodmFsaWRhdGVkRmlsdGVyIGFzIFRpbWVSYW5nZUZpbHRlcikuc3luY2VkV2l0aExheWVyVGltZWxpbmUpIHtcbiAgICAgICAgICBjb25zdCBhbmltYXRhYmxlTGF5ZXJzID0gZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMobGF5ZXJzKTtcbiAgICAgICAgICBkb21haW4gPSBtZXJnZVRpbWVEb21haW5zKFtcbiAgICAgICAgICAgIC4uLmFuaW1hdGFibGVMYXllcnMubWFwKGwgPT4gbC5jb25maWcuYW5pbWF0aW9uLmRvbWFpbiB8fCBbMCwgMF0pLFxuICAgICAgICAgICAgdmFsaWRhdGVkRmlsdGVyLmRvbWFpblxuICAgICAgICAgIF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFsaWRhdGVkRmlsdGVyLnZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihmaWx0ZXJUb1ZhbGlkYXRlLnZhbHVlLCB7XG4gICAgICAgICAgLi4udmFsaWRhdGVkRmlsdGVyLFxuICAgICAgICAgIGRvbWFpblxuICAgICAgICB9KTtcblxuICAgICAgICB2YWxpZGF0ZWQucHVzaCh1cGRhdGVGaWx0ZXJQbG90KGRhdGFzZXRzLCB2YWxpZGF0ZWRGaWx0ZXIpKTtcbiAgICAgICAgdXBkYXRlZERhdGFzZXRzID0ge1xuICAgICAgICAgIC4uLnVwZGF0ZWREYXRhc2V0cyxcbiAgICAgICAgICAuLi5hdWdtZW50ZWREYXRhc2V0c1xuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmFpbGVkLnB1c2goZmlsdGVyVG9WYWxpZGF0ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZhaWxlZC5wdXNoKGZpbHRlclRvVmFsaWRhdGUpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHt2YWxpZGF0ZWQsIGZhaWxlZCwgdXBkYXRlZERhdGFzZXRzfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUZpbHRlclBsb3QoZmlsdGVyOiBGaWx0ZXIsIGRhdGFJZDogc3RyaW5nKSB7XG4gIGxldCBuZXh0RmlsdGVyID0gZmlsdGVyO1xuXG4gIGNvbnN0IHJhbmdlRmlsdGVyID0gZmlsdGVyIGFzIFJhbmdlRmlsdGVyO1xuICBpZiAocmFuZ2VGaWx0ZXIuYmlucyAmJiByYW5nZUZpbHRlci5iaW5zW2RhdGFJZF0pIHtcbiAgICBjb25zdCB7W2RhdGFJZF06IF9kZWxldGUsIC4uLm5leHRCaW5zfSA9IHJhbmdlRmlsdGVyLmJpbnM7XG4gICAgbmV4dEZpbHRlciA9IHtcbiAgICAgIC4uLnJhbmdlRmlsdGVyLFxuICAgICAgYmluczogbmV4dEJpbnNcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgdGltZUZpbHRlciA9IGZpbHRlciBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG4gIGlmICh0aW1lRmlsdGVyLnRpbWVCaW5zICYmIHRpbWVGaWx0ZXIudGltZUJpbnNbZGF0YUlkXSkge1xuICAgIGNvbnN0IHtbZGF0YUlkXTogX19kZWxldGUsIC4uLm5leHRUaW1lQmluc30gPSB0aW1lRmlsdGVyLnRpbWVCaW5zO1xuICAgIG5leHRGaWx0ZXIgPSB7XG4gICAgICAuLi5uZXh0RmlsdGVyLFxuICAgICAgdGltZUJpbnM6IG5leHRUaW1lQmluc1xuICAgIH0gYXMgRmlsdGVyO1xuICB9XG5cbiAgcmV0dXJuIG5leHRGaWx0ZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkVGltZURvbWFpbihkb21haW4pIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZG9tYWluKSAmJiBkb21haW4uZXZlcnkoTnVtYmVyLmlzRmluaXRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRpbWVXaWRnZXRIaW50Rm9ybWF0dGVyKGRvbWFpbjogW251bWJlciwgbnVtYmVyXSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICghaXNWYWxpZFRpbWVEb21haW4oZG9tYWluKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBkaWZmID0gZG9tYWluWzFdIC0gZG9tYWluWzBdO1xuICByZXR1cm4gZGlmZiA+IGR1cmF0aW9uV2Vla1xuICAgID8gJ0wnXG4gICAgOiBkaWZmID4gZHVyYXRpb25EYXlcbiAgICA/ICdMIExUJ1xuICAgIDogZGlmZiA+IGR1cmF0aW9uSG91clxuICAgID8gJ0xUJ1xuICAgIDogJ0xUUyc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NpZGVGaWx0ZXIoZmlsdGVyOiBGaWx0ZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIGZpbHRlci52aWV3ID09PSBGSUxURVJfVklFV19UWVBFUy5zaWRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VUaW1lRG9tYWlucyhkb21haW5zOiAoW251bWJlciwgbnVtYmVyXSB8IG51bGwpW10pOiBbbnVtYmVyLCBudW1iZXJdIHtcbiAgcmV0dXJuIGRvbWFpbnMucmVkdWNlKFxuICAgIChhY2M6IFtudW1iZXIsIG51bWJlcl0sIGRvbWFpbikgPT4gW1xuICAgICAgTWF0aC5taW4oYWNjWzBdLCBkb21haW4/LlswXSA/PyBJbmZpbml0eSksXG4gICAgICBNYXRoLm1heChhY2NbMV0sIGRvbWFpbj8uWzFdID8/IC1JbmZpbml0eSlcbiAgICBdLFxuICAgIFtOdW1iZXIoSW5maW5pdHkpLCAtSW5maW5pdHldXG4gICkgYXMgW251bWJlciwgbnVtYmVyXTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0xheWVyfSBsYXllclxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNMYXllckFuaW1hdGFibGUobGF5ZXI6IGFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gbGF5ZXIuY29uZmlnLmFuaW1hdGlvbj8uZW5hYmxlZCAmJiBBcnJheS5pc0FycmF5KGxheWVyLmNvbmZpZy5hbmltYXRpb24uZG9tYWluKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0xheWVyW119IGxheWVyc1xuICogQHJldHVybnMge0xheWVyW119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVycyhsYXllcnM6IGFueVtdKTogYW55W10ge1xuICByZXR1cm4gbGF5ZXJzLmZpbHRlcihsID0+IGlzTGF5ZXJBbmltYXRhYmxlKGwpICYmIGwuY29uZmlnLmlzVmlzaWJsZSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtMYXllcltdfSBsYXllcnNcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcmV0dXJucyB7TGF5ZXJbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzQnlUeXBlKGxheWVyczogYW55W10sIHR5cGU6IHN0cmluZyk6IGFueVtdIHtcbiAgcmV0dXJuIGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzKGxheWVycykuZmlsdGVyKGwgPT4gbC50eXBlID09PSB0eXBlKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0xheWVyW119IGxheWVyc1xuICogQHJldHVybnMge0xheWVyW119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzKGxheWVyczogYW55W10pOiBhbnlbXSB7XG4gIC8vIEB0cy1pZ25vcmVcbiAgcmV0dXJuIGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzKGxheWVycykuZmlsdGVyKGwgPT4gbC5jb25maWcuYW5pbWF0aW9uPy50aW1lU3RlcHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VGaWx0ZXJXaXRoVGltZWxpbmUoXG4gIGZpbHRlcjogVGltZVJhbmdlRmlsdGVyLFxuICBhbmltYXRpb25Db25maWc6IEFuaW1hdGlvbkNvbmZpZ1xuKToge2ZpbHRlcjogVGltZVJhbmdlRmlsdGVyOyBhbmltYXRpb25Db25maWc6IEFuaW1hdGlvbkNvbmZpZ30ge1xuICBpZiAoXG4gICAgZmlsdGVyPy50eXBlID09PSBGSUxURVJfVFlQRVMudGltZVJhbmdlICYmXG4gICAgZmlsdGVyLnN5bmNlZFdpdGhMYXllclRpbWVsaW5lICYmXG4gICAgYW5pbWF0aW9uQ29uZmlnICYmXG4gICAgQXJyYXkuaXNBcnJheShhbmltYXRpb25Db25maWcuZG9tYWluKVxuICApIHtcbiAgICBjb25zdCBkb21haW4gPSBtZXJnZVRpbWVEb21haW5zKFtmaWx0ZXIuZG9tYWluLCBhbmltYXRpb25Db25maWcuZG9tYWluIGFzIFtudW1iZXIsIG51bWJlcl1dKTtcbiAgICByZXR1cm4ge1xuICAgICAgZmlsdGVyOiB7XG4gICAgICAgIC4uLmZpbHRlcixcbiAgICAgICAgZG9tYWluXG4gICAgICB9LFxuICAgICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAgIC4uLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgZG9tYWluXG4gICAgICB9XG4gICAgfTtcbiAgfVxuICByZXR1cm4ge2ZpbHRlciwgYW5pbWF0aW9uQ29uZmlnfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNjYWxlU291cmNlRG9tYWluVG9EZXN0aW5hdGlvbihcbiAgc291cmNlRG9tYWluOiBbbnVtYmVyLCBudW1iZXJdLFxuICBkZXN0aW5hdGlvbkRvbWFpbjogW251bWJlciwgbnVtYmVyXVxuKTogW251bWJlciwgbnVtYmVyXSB7XG4gIC8vIDAgLT4gMTAwOiBtZXJnZWQgZG9tYWlucyB0MSAtIHQwID09PSAxMDAlIGZpbHRlciBtYXkgYWxyZWFkeSBoYXZlIHRoaXMgaW5mbyB3aGljaCBpcyBnb29kXG4gIGNvbnN0IHNvdXJjZURvbWFpblNpemUgPSBzb3VyY2VEb21haW5bMV0gLSBzb3VyY2VEb21haW5bMF07XG4gIC8vIDEwIC0+IDIwOiBhbmltYXRpb25Db25maWcgZG9tYWluIGQxIC0gZDAgPT09IGFuaW1hdGlvbkNvbmZpZyBzaXplXG4gIGNvbnN0IGRlc3RpbmF0aW9uRG9tYWluU2l6ZSA9IGRlc3RpbmF0aW9uRG9tYWluWzFdIC0gZGVzdGluYXRpb25Eb21haW5bMF07XG4gIC8vIHNjYWxlIGFuaW1hdGlvbkNvbmZpZyBzaXplIHVzaW5nIGRvbWFpbiBzaXplXG4gIGNvbnN0IHNjYWxlZFNvdXJjZURvbWFpblNpemUgPSAoc291cmNlRG9tYWluU2l6ZSAvIGRlc3RpbmF0aW9uRG9tYWluU2l6ZSkgKiAxMDA7XG4gIC8vIHNjYWxlIGQwIC0gdDAgdXNpbmcgZG9tYWluIHNpemUgdG8gZmluZCBzdGFydGluZyBwb2ludFxuICBjb25zdCBvZmZzZXQgPSBzb3VyY2VEb21haW5bMF0gLSBkZXN0aW5hdGlvbkRvbWFpblswXTtcbiAgY29uc3Qgc2NhbGVkT2Zmc2V0ID0gKG9mZnNldCAvIGRlc3RpbmF0aW9uRG9tYWluU2l6ZSkgKiAxMDA7XG4gIHJldHVybiBbc2NhbGVkT2Zmc2V0LCBzY2FsZWRTb3VyY2VEb21haW5TaXplICsgc2NhbGVkT2Zmc2V0XTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbHRlclNjYWxlZFRpbWVsaW5lKGZpbHRlciwgYW5pbWF0aW9uQ29uZmlnKTogW251bWJlciwgbnVtYmVyXSB8IFtdIHtcbiAgaWYgKCEoZmlsdGVyLnN5bmNlZFdpdGhMYXllclRpbWVsaW5lICYmIGFuaW1hdGlvbkNvbmZpZz8uZG9tYWluKSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHJldHVybiBzY2FsZVNvdXJjZURvbWFpblRvRGVzdGluYXRpb24oYW5pbWF0aW9uQ29uZmlnLmRvbWFpbiwgZmlsdGVyLmRvbWFpbik7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxVQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxRQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRyxRQUFBLEdBQUFILE9BQUE7QUFFQSxJQUFBSSxjQUFBLEdBQUFMLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSyxRQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFB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