@datorama/core 21.4.0-rc.11 → 21.4.0-rc.14

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.
@@ -28,12 +28,12 @@ var mapToValue = function (_a) {
28
28
  var ɵ0 = mapToValue;
29
29
  var mapToListItem = function (val) { return ({ id: val, label: isNil(val) ? "(Empty)" : ("" + val).trim(), value: val }); };
30
30
  var ɵ1 = mapToListItem;
31
- var mapToListItemWithFormatted = function (_a) {
31
+ var mapToListItemWithFormatted = function (_a, key) {
32
32
  var value = _a.value, formattedValue = _a.formattedValue;
33
33
  return ({
34
- id: value,
35
- label: isNil(formattedValue) ? "(Empty)" : ("" + formattedValue).trim(),
36
- value: value
34
+ id: key && value ? value[key] : value,
35
+ label: isNil(formattedValue) ? "(Empty)" : ("" + (key ? formattedValue[key] : formattedValue)).trim(),
36
+ value: key && value ? value[key] : value
37
37
  });
38
38
  };
39
39
  var ɵ2 = mapToListItemWithFormatted;
@@ -215,9 +215,11 @@ var DatoGridFilterComponent = /** @class */ (function () {
215
215
  var columnValues = this.getColumnValues();
216
216
  this.columnValues = columnValues.map(function (_a) {
217
217
  var value = _a.value;
218
- return value;
218
+ return !isNil(_this.pivotColumn) && value ? value[_this.colField] : value;
219
+ });
220
+ this.listOptions = columnValues.map(function (colValue) {
221
+ return mapToListItemWithFormatted(colValue, !isNil(_this.pivotColumn) && _this.colField);
219
222
  });
220
- this.listOptions = columnValues.map(mapToListItemWithFormatted);
221
223
  }
222
224
  }
223
225
  else {
@@ -312,7 +314,9 @@ var DatoGridFilterComponent = /** @class */ (function () {
312
314
  filter.pivotKeys = this.pivotKeys;
313
315
  if (this.pivotColumn) {
314
316
  filter.pivotFieldsMap = this.getPivotFields(this.pivotColumn.getParent()).reduce(function (fieldMap, field, index) {
315
- fieldMap[field] = _this.pivotKeys[index];
317
+ if (_this.pivotKeys[index]) {
318
+ fieldMap[field] = _this.pivotKeys[index];
319
+ }
316
320
  return fieldMap;
317
321
  }, {});
318
322
  }
@@ -681,4 +685,4 @@ var DatoGridFilterComponent = /** @class */ (function () {
681
685
  }());
682
686
  export { DatoGridFilterComponent };
683
687
  export { ɵ0, ɵ1, ɵ2 };
684
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1maWx0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGRhdG9yYW1hL2NvcmUvIiwic291cmNlcyI6WyJsaWIvZ3JpZC12Mi9ncmlkLWZpbHRlci9ncmlkLWZpbHRlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOztBQUVILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RyxPQUFPLEVBQ0wsb0JBQW9CLEVBR3BCLHdCQUF3QixFQUN4QixzQkFBc0IsRUFDdEIsbUJBQW1CLEVBRW5CLDJCQUEyQixFQUMzQixnQkFBZ0IsRUFFakIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFdkQsT0FBTyxFQUFFLEtBQUssRUFBNEIsTUFBTSxNQUFNLENBQUM7QUFDdkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBTyxNQUFNLGdCQUFnQixDQUFDO0FBQ2hHLE9BQU8sRUFBRSxVQUFVLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDM0UsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTVFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0s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QUF0RCxpQkFFQztRQURDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFBLENBQUMsSUFBSSxPQUFBLENBQUMsS0FBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQTNCLENBQTJCLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxnREFBYyxHQUF0QixVQUF1QixNQUFtQixFQUFFLE1BQVc7UUFBWCx1QkFBQSxFQUFBLFdBQVc7UUFDckQsSUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3ZDLElBQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLGNBQWMsRUFBRSxDQUFDLFdBQVcsQ0FBQztRQUVqRixJQUFJLFdBQVcsRUFBRTtZQUNmLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQzFDO1FBRUQsV0FBVyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFM0MsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQzs7Z0JBNWxCZSxVQUFVO2dCQUNQLFVBQVU7Z0JBQ2YsV0FBVztnQkFDSixvQkFBb0I7Z0JBQzFCLGlCQUFpQjs7SUF4Q3JCLHVCQUF1QjtRQU5uQyxTQUFTLENBQUM7WUFDVCxRQUFRLEVBQUUsa0JBQWtCO1lBQzVCLG10YUFBMkM7WUFFM0MsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07O1NBQ2hELENBQUM7eUNBcUNnQixVQUFVO1lBQ1AsVUFBVTtZQUNmLFdBQVc7WUFDSixvQkFBb0I7WUFDMUIsaUJBQWlCO09BeENyQix1QkFBdUIsQ0Fpb0JuQztJQUFELDhCQUFDO0NBQUEsQUFqb0JELElBaW9CQztTQWpvQlksdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IERhdG9yYW1hLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIEFwYWNoZSBMaWNlbnNlIDIuMCBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRvcmFtYS9jbGllbnQtY29yZS9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKi9cblxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgRGF0b0ZpbHRlckNvbmRpdGlvbnMsXG4gIERhdG9HcmlkRmlsdGVyLFxuICBEYXRvR3JpZEZpbHRlckNvbmRpdGlvbixcbiAgRGF0b0dyaWRGaWx0ZXJPcHRpb25zTWFwLFxuICBEYXRvR3JpZEZpbHRlclNlY3Rpb25zLFxuICBEYXRvR3JpZEZpbHRlclR5cGVzLFxuICBEYXRvR3JpZFJhbmdlRmlsdGVyQ29uZGl0aW9uLFxuICBEYXRvR3JpZFN0cmluZ0ZpbHRlck9wdGlvbnMsXG4gIGlzUmFuZ2VDb25kaXRpb24sXG4gIExpc3RJdGVtXG59IGZyb20gJy4vZ3JpZC1maWx0ZXIudHlwZXMnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQXJyYXksIEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgUG9wb3ZlclJlZiB9IGZyb20gJy4uLy4uL3BvcG92ZXIvcG9wb3Zlci1yZWYnO1xuaW1wb3J0IHsgR3JpZFF1ZXJ5IH0gZnJvbSAnLi4vZ3JpZC1zdG9yZS9ncmlkLnF1ZXJ5JztcbmltcG9ydCB7IG1lcmdlLCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIHBhaXJ3aXNlLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgZGlmZmVyZW5jZSwgaXNBcnJheVZhbHVlc0VxdWFsLCB1bmlxQnkgfSBmcm9tICcuLi8uLi91dGlscy9hcnJheSc7XG5pbXBvcnQgeyBpc0VtcHR5LCBpc05pbCwgaXNPYmplY3QsIGlzU3RyaW5nIH0gZnJvbSAnLi4vLi4vdXRpbHMvdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBHcmlkU2VydmljZSB9IGZyb20gJy4uL2dyaWQtc3RvcmUvZ3JpZC5zZXJ2aWNlJztcbmltcG9ydCB7IE9wZXJhdG9yVHlwZXMgfSBmcm9tICcuLi8uLi9vcGVyYXRvci10b2dnbGVyL29wZXJhdG9yLXRvZ2dsZXIudHlwZXMnO1xuaW1wb3J0IHsgRGF0b1RyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cmFuc2xhdGUuc2VydmljZSc7XG5pbXBvcnQgeyB2YWxpZGF0ZUZpbHRlciB9IGZyb20gJy4vZmlsdGVyLXZhbGlkYXRvcic7XG5pbXBvcnQgeyBEYXRvR3JpZENvbHVtbkRlZiwgRGF0b0dyaWRHZXRSb3dzUGFyYW1zIH0gZnJvbSAnLi4vZ3JpZC9ncmlkLXYyLnR5cGVzJztcbmltcG9ydCB7IHVudGlsRGVzdHJveWVkIH0gZnJvbSAnbmd4LXRha2UtdW50aWwtZGVzdHJveSc7XG5pbXBvcnQgeyBEYXRvQ29sdW1uTWVudURhdGEgfSBmcm9tICcuLi9ncmlkLWNvbHVtbi1oZWFkZXIvZ3JpZC1jb2x1bW4taGVhZGVyLnR5cGVzJztcbmltcG9ydCB7IENvbHVtbiwgQ29sdW1uR3JvdXAsIEdyaWRBcGksIFJvd05vZGUgfSBmcm9tICdhZy1ncmlkLWNvbW11bml0eSc7XG5pbXBvcnQgeyBEYXRlUmFuZ2UgfSBmcm9tICcuLi8uLi9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci50eXBlcyc7XG5pbXBvcnQgeyBjdXJyeSB9IGZyb20gJy4uLy4uL3V0aWxzL2Z1bmN0aW9uJztcbmltcG9ydCB7IFNvcnRMYWJlbFR5cGUgfSBmcm9tICcuLi8uLi9waXBlcy9zZWFyY2gtcmVzdWx0cy5waXBlJztcbmltcG9ydCB7IEhvdEtleUNvbmZpZyB9IGZyb20gJy4uLy4uL2hvdGtleXMvaG90a2V5LnR5cGVzJztcbmltcG9ydCB7IGZvcm1hdEtleXMgfSBmcm9tICcuLi8uLi9ob3RrZXlzL2hvdGtleXMtZm9ybWF0dGVyJztcbmltcG9ydCB7IGdldENvbEZpZWxkIH0gZnJvbSAnLi4vZ3JpZC1zdG9yZS91dGlsJztcblxuY29uc3QgbWFwVG9WYWx1ZSA9ICh7IHZhbHVlIH0pID0+IHZhbHVlO1xuY29uc3QgbWFwVG9MaXN0SXRlbSA9IHZhbCA9PiAoeyBpZDogdmFsLCBsYWJlbDogaXNOaWwodmFsKSA/IGAoRW1wdHkpYCA6IGAke3ZhbH1gLnRyaW0oKSwgdmFsdWU6IHZhbCB9KTtcbmNvbnN0IG1hcFRvTGlzdEl0ZW1XaXRoRm9ybWF0dGVkID0gKHsgdmFsdWUsIGZvcm1hdHRlZFZhbHVlIH0pID0+ICh7XG4gIGlkOiB2YWx1ZSxcbiAgbGFiZWw6IGlzTmlsKGZvcm1hdHRlZFZhbHVlKSA/IGAoRW1wdHkpYCA6IGAke2Zvcm1hdHRlZFZhbHVlfWAudHJpbSgpLFxuICB2YWx1ZVxufSk7XG5cbnR5cGUgQ29uZGl0aW9ucyA9IHtcbiAgdHlwZToge1xuICAgIG9wZXJhbmQ6IEV4Y2x1ZGU8RGF0b0ZpbHRlckNvbmRpdGlvbnMsIERhdG9GaWx0ZXJDb25kaXRpb25zLklOX0xJU1QgfCBEYXRvRmlsdGVyQ29uZGl0aW9ucy5OT1RfSU5fTElTVD47XG4gIH07XG4gIHZhbHVlOiBzdHJpbmcgfCBudW1iZXI7XG4gIHJhbmdlRW5kOiBzdHJpbmcgfCBudW1iZXI7XG59W107XG5cbnR5cGUgQ29uZGl0aW9uT3B0aW9uID0geyBpZDogbnVtYmVyOyBsYWJlbDogc3RyaW5nOyBvcGVyYW5kOiBEYXRvRmlsdGVyQ29uZGl0aW9ucyB9O1xuXG50eXBlIFZhbHVlQW5kRm9ybWF0dGVkVmFsdWUgPSB7IHZhbHVlOiBzdHJpbmcgfCBudW1iZXI7IGZvcm1hdHRlZFZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZGF0by1ncmlkLWZpbHRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9ncmlkLWZpbHRlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2dyaWQtZmlsdGVyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIERhdG9HcmlkRmlsdGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgZ3JpZEZpbHRlclR5cGVzID0gRGF0b0dyaWRGaWx0ZXJUeXBlcztcbiAgZmlsdGVyVHlwZTogRGF0b0dyaWRGaWx0ZXJUeXBlcztcbiAgY29sdW1uVmFsdWVzOiAoc3RyaW5nIHwgbnVtYmVyKVtdID0gW107XG4gIGxpc3RPcHRpb25zOiBMaXN0SXRlbVtdID0gW107XG4gIGNvbmRpdGlvbmFsRmlsdGVyT3B0aW9uczogQ29uZGl0aW9uT3B0aW9uW107XG4gIGhhc0ZpbHRlciQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIGZpbHRlckZvcm06IEZvcm1Hcm91cDtcbiAgZmlsdGVyU2VjdGlvbnM6IHsgW0RhdG9HcmlkRmlsdGVyU2VjdGlvbnMuQnlfVmFsdWVdPzogYm9vbGVhbjsgW0RhdG9HcmlkRmlsdGVyU2VjdGlvbnMuQ29uZGl0aW9uYWxdPzogYm9vbGVhbiB9ID0ge1xuICAgIFtEYXRvR3JpZEZpbHRlclNlY3Rpb25zLkJ5X1ZhbHVlXTogdHJ1ZSxcbiAgICBbRGF0b0dyaWRGaWx0ZXJTZWN0aW9ucy5Db25kaXRpb25hbF06IHRydWVcbiAgfTtcbiAgcmFuZ2VPcGVyYW5kID0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuSU5fUkFOR0U7XG4gIGxpc3RMYWJlbFR5cGU6IFNvcnRMYWJlbFR5cGU7XG4gIGxpc3RTb3J0QnlLZXk6IHN0cmluZztcbiAgaXNDbGllbnRTaWRlR3JpZCA9IGZhbHNlO1xuICBsaXN0U2VhcmNoQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xuICBsb2FkaW5nTGlzdCA9IGZhbHNlO1xuICBzZXJ2ZXJTZWFyY2hFcnJvcmVkID0gZmFsc2U7XG4gIGFwcGx5SG90S2V5Q29uZmlnOiBIb3RLZXlDb25maWcgPSB7XG4gICAga2V5czogJ21ldGEuZW50ZXInLFxuICAgIGhhbmRsZXI6ICgpID0+IHRoaXMuY2xvc2VQb3BVcCgpLFxuICAgIGRlc2NyaXB0aW9uOiAnY29yZS5hcHBseS1maWx0ZXJzJ1xuICB9O1xuICBob3RLZXlUb29sdGlwID0gZm9ybWF0S2V5cyh0aGlzLmFwcGx5SG90S2V5Q29uZmlnLmtleXMpO1xuICBhY3RpdmVBY2NvcmRpb25JZCA9IDA7XG4gIGtlZXBQcmVkZWZpbmVkTGlzdE9yaWdpbmFsT3JkZXI6IGJvb2xlYW47XG5cbiAgcHJpdmF0ZSBncmlkUXVlcnk6IEdyaWRRdWVyeTtcbiAgcHJpdmF0ZSBncmlkU2VydmljZTogR3JpZFNlcnZpY2U7XG4gIHByaXZhdGUgY29sRmllbGQ6IHN0cmluZztcbiAgcHJpdmF0ZSBleGNsdWRlZFZhbHVlcyA9IG5ldyBTZXQ8c3RyaW5nIHwgbnVtYmVyPigpO1xuICBwcml2YXRlIGJ5VmFsdWVTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBwaXZvdENvbHVtbjogQ29sdW1uO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaG9zdDogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIHBvcG92ZXI6IFBvcG92ZXJSZWY8RGF0b0NvbHVtbk1lbnVEYXRhPixcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogRGF0b1RyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmXG4gICkge31cblxuICBnZXQgYnlWYWx1ZUNvbnRyb2woKTogQWJzdHJhY3RDb250cm9sIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJGb3JtLmdldCgnYnlWYWx1ZScpO1xuICB9XG5cbiAgZ2V0IGNvbmRpdGlvbnNDb250cm9scygpOiBBYnN0cmFjdENvbnRyb2xbXSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZGl0aW9ucy5jb250cm9scztcbiAgfVxuXG4gIGdldCBjb25kaXRpb25zT3BlcmF0b3IoKTogT3BlcmF0b3JUeXBlcyB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyRm9ybS5nZXQoJ2NvbmRpdGlvbmFsLm9wZXJhdG9yJykudmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGdldCBkZWZhdWx0T3BlcmFuZCgpOiBGb3JtR3JvdXAge1xuICAgIHJldHVybiB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIHR5cGU6IFt0aGlzLmNvbmRpdGlvbmFsRmlsdGVyT3B0aW9uc1swXV0sXG4gICAgICB2YWx1ZTogW251bGwsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgcmFuZ2VFbmQ6IFtudWxsXVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgaXNQcmVkZWZpbmVkTGlzdEl0ZW1zKCkge1xuICAgIGNvbnN0IHsgZmlsdGVyc0NvbmZpZyA9IHt9IH0gPSB0aGlzLmNvbERlZjtcbiAgICByZXR1cm4gZmlsdGVyc0NvbmZpZy5wcmVkZWZpbmVkTGlzdFZhbHVlcyAmJiB0eXBlb2YgZmlsdGVyc0NvbmZpZy5wcmVkZWZpbmVkTGlzdFZhbHVlc1swXSA9PT0gJ29iamVjdCc7XG4gIH1cblxuICBwcml2YXRlIGdldCBkZWZhdWx0Q29uZGl0aW9uYWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgb3BlcmF0b3I6IFtPcGVyYXRvclR5cGVzLkFORF0sXG4gICAgICBjb25kaXRpb25zOiB0aGlzLmZiLmFycmF5KFt0aGlzLmRlZmF1bHRPcGVyYW5kXSlcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGRlZmF1bHRCeVZhbHVlKCkge1xuICAgIHJldHVybiBbdGhpcy5jb2x1bW5WYWx1ZXNdO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZGVmYXVsdEZvcm0oKTogRm9ybUdyb3VwIHtcbiAgICBjb25zdCBmaWx0ZXJzOiB7IGJ5VmFsdWU/OyBjb25kaXRpb25hbD8gfSA9IHt9O1xuICAgIGlmICh0aGlzLmZpbHRlclNlY3Rpb25zLkJ5X1ZhbHVlKSB7XG4gICAgICBmaWx0ZXJzLmJ5VmFsdWUgPSB0aGlzLmRlZmF1bHRCeVZhbHVlO1xuICAgIH1cbiAgICBpZiAodGhpcy5maWx0ZXJTZWN0aW9ucy5Db25kaXRpb25hbCkge1xuICAgICAgZmlsdGVycy5jb25kaXRpb25hbCA9IHRoaXMuZGVmYXVsdENvbmRpdGlvbmFsO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5mYi5ncm91cChmaWx0ZXJzKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGNvbmRpdGlvbnMoKTogRm9ybUFycmF5IHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJGb3JtLmdldCgnY29uZGl0aW9uYWwuY29uZGl0aW9ucycpIGFzIEZvcm1BcnJheTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGNvbEZpbHRlcigpOiBEYXRvR3JpZEZpbHRlciB7XG4gICAgY29uc3QgZmlsdGVyID0gdGhpcy5ncmlkUXVlcnkuZ2V0RmlsdGVyKClbdGhpcy5jb2xGaWVsZF07XG5cbiAgICByZXR1cm4gZmlsdGVyICYmIGlzQXJyYXlWYWx1ZXNFcXVhbCh0aGlzLnBpdm90S2V5cywgZmlsdGVyLnBpdm90S2V5cykgPyBmaWx0ZXIgOiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgY29sRGVmKCk6IERhdG9HcmlkQ29sdW1uRGVmIHtcbiAgICByZXR1cm4gdGhpcy5wb3BvdmVyLmRhdGEuY29sdW1uLmdldENvbERlZigpIGFzIERhdG9HcmlkQ29sdW1uRGVmO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgcGl2b3RLZXlzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5jb2xEZWYucGl2b3RLZXlzIHx8IFtdO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgY29uc3QgeyBncmlkU2VydmljZSwgZ3JpZFF1ZXJ5IH0gPSB0aGlzLnBvcG92ZXIuZGF0YTtcbiAgICBjb25zdCB7IGZpbHRlciwgZmlsdGVyc0NvbmZpZyA9IHt9LCBwaXZvdFZhbHVlQ29sdW1uLCBwaXZvdEtleXMgfSA9IHRoaXMuY29sRGVmO1xuXG4gICAgdGhpcy5jb2xGaWVsZCA9IGdldENvbEZpZWxkKHRoaXMuY29sRGVmKTtcbiAgICB0aGlzLnBpdm90Q29sdW1uID0gZ3JpZFF1ZXJ5LmFwaS5jb2x1bW5zLmdldFNlY29uZGFyeVBpdm90Q29sdW1uKHBpdm90S2V5cywgcGl2b3RWYWx1ZUNvbHVtbik7XG5cbiAgICBpZiAoZmlsdGVyc0NvbmZpZy5zZWN0aW9ucykge1xuICAgICAgdGhpcy5maWx0ZXJTZWN0aW9ucyA9IHsgW2ZpbHRlcnNDb25maWcuc2VjdGlvbnNdOiB0cnVlIH07XG4gICAgfVxuICAgIHRoaXMua2VlcFByZWRlZmluZWRMaXN0T3JpZ2luYWxPcmRlciA9XG4gICAgICBmaWx0ZXJzQ29uZmlnLmtlZXBQcmVkZWZpbmVkTGlzdE9yaWdpbmFsT3JkZXIgJiYgIWlzRW1wdHkoZmlsdGVyc0NvbmZpZy5wcmVkZWZpbmVkTGlzdFZhbHVlcyk7XG4gICAgY29uc3QgZmlsdGVyT3B0aW9ucyA9IERhdG9HcmlkRmlsdGVyT3B0aW9uc01hcFtmaWx0ZXIgYXMgc3RyaW5nXTtcbiAgICB0aGlzLmZpbHRlclR5cGUgPSBmaWx0ZXJPcHRpb25zID8gKGZpbHRlciBhcyBEYXRvR3JpZEZpbHRlclR5cGVzKSA6IERhdG9HcmlkRmlsdGVyVHlwZXMuU3RyaW5nO1xuICAgIHRoaXMubGlzdExhYmVsVHlwZSA9IHRoaXMuZmlsdGVyVHlwZS50b0xvd2VyQ2FzZSgpIGFzIFNvcnRMYWJlbFR5cGU7XG4gICAgdGhpcy5saXN0U29ydEJ5S2V5ID0gdGhpcy5maWx0ZXJUeXBlID09PSBEYXRvR3JpZEZpbHRlclR5cGVzLk51bWJlciAmJiB0aGlzLmNvbERlZi52YWx1ZUZvcm1hdHRlciA/ICdpZCcgOiAnbGFiZWwnO1xuICAgIHRoaXMuZ3JpZFF1ZXJ5ID0gZ3JpZFF1ZXJ5O1xuICAgIHRoaXMuZ3JpZFNlcnZpY2UgPSBncmlkU2VydmljZTtcbiAgICB0aGlzLmhhc0ZpbHRlciQgPSB0aGlzLmdyaWRRdWVyeVxuICAgICAgLnNlbGVjdChzdGF0ZSA9PiBzdGF0ZS5zZXR0aW5ncy5maWx0ZXJbdGhpcy5jb2xGaWVsZF0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKGZpbHRlciA9PiB7XG4gICAgICAgICAgcmV0dXJuICFpc05pbChmaWx0ZXIpICYmIGlzQXJyYXlWYWx1ZXNFcXVhbChmaWx0ZXIucGl2b3RLZXlzLCB0aGlzLnBpdm90S2V5cyk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIGlmICh0aGlzLmZpbHRlclNlY3Rpb25zLkNvbmRpdGlvbmFsKSB7XG4gICAgICBsZXQgZmlsdGVyQ29uZGl0aW9uczogRGF0b0ZpbHRlckNvbmRpdGlvbnNbXSA9IGZpbHRlck9wdGlvbnMgfHwgRGF0b0dyaWRTdHJpbmdGaWx0ZXJPcHRpb25zO1xuICAgICAgaWYgKGZpbHRlcnNDb25maWcuc2hvd0VtcHR5Q29uZGl0aW9ucykge1xuICAgICAgICBmaWx0ZXJDb25kaXRpb25zID0gWy4uLmZpbHRlckNvbmRpdGlvbnMsIERhdG9GaWx0ZXJDb25kaXRpb25zLklTX0VNUFRZLCBEYXRvRmlsdGVyQ29uZGl0aW9ucy5OT1RfRU1QVFldO1xuICAgICAgfVxuICAgICAgdGhpcy5jb25kaXRpb25hbEZpbHRlck9wdGlvbnMgPSBmaWx0ZXJDb25kaXRpb25zLm1hcCgob3BlcmFuZCwgaWQpID0+ICh7XG4gICAgICAgIGlkLFxuICAgICAgICBvcGVyYW5kLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUudHJhbnNmb3JtKGBjb3JlLiR7dGhpcy5maWx0ZXJUeXBlID09PSBEYXRvR3JpZEZpbHRlclR5cGVzLkRhdGUgPyAnREFURV8nIDogJyd9JHtvcGVyYW5kfWApXG4gICAgICB9KSk7XG4gICAgfVxuICAgIGxldCBvcmlnaW5hbE9wdGlvbnM7XG4gICAgaWYgKHRoaXMuZmlsdGVyU2VjdGlvbnMuQnlfVmFsdWUpIHtcbiAgICAgIGNvbnN0IHsgcHJlZGVmaW5lZExpc3RWYWx1ZXMgfSA9IGZpbHRlcnNDb25maWc7XG4gICAgICB0aGlzLmlzQ2xpZW50U2lkZUdyaWQgPSAhaXNOaWwocHJlZGVmaW5lZExpc3RWYWx1ZXMpIHx8ICFncmlkUXVlcnkuaXNTZXJ2ZXJTaWRlO1xuICAgICAgaWYgKCFwcmVkZWZpbmVkTGlzdFZhbHVlcyB8fCB0aGlzLmlzU3RyaW5nQXJyYXkocHJlZGVmaW5lZExpc3RWYWx1ZXMpKSB7XG4gICAgICAgIGNvbnN0IHJhd1ZhbHVlcyA9IHByZWRlZmluZWRMaXN0VmFsdWVzIGFzIHN0cmluZ1tdO1xuICAgICAgICBpZiAocmF3VmFsdWVzKSB7XG4gICAgICAgICAgdGhpcy5jb2x1bW5WYWx1ZXMgPSByYXdWYWx1ZXM7XG4gICAgICAgICAgdGhpcy5saXN0T3B0aW9ucyA9IHJhd1ZhbHVlcy5tYXAobWFwVG9MaXN0SXRlbSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgY29sdW1uVmFsdWVzID0gdGhpcy5nZXRDb2x1bW5WYWx1ZXMoKTtcbiAgICAgICAgICB0aGlzLmNvbHVtblZhbHVlcyA9IGNvbHVtblZhbHVlcy5tYXAoKHsgdmFsdWUgfSkgPT4gdmFsdWUpO1xuICAgICAgICAgIHRoaXMubGlzdE9wdGlvbnMgPSBjb2x1bW5WYWx1ZXMubWFwKG1hcFRvTGlzdEl0ZW1XaXRoRm9ybWF0dGVkKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcmF3VmFsdWVzID0gcHJlZGVmaW5lZExpc3RWYWx1ZXMgYXMgTGlzdEl0ZW1bXTtcbiAgICAgICAgdGhpcy5jb2x1bW5WYWx1ZXMgPSByYXdWYWx1ZXMubWFwKG1hcFRvVmFsdWUpO1xuICAgICAgICB0aGlzLmxpc3RPcHRpb25zID0gcmF3VmFsdWVzO1xuICAgICAgfVxuICAgICAgb3JpZ2luYWxPcHRpb25zID0gdGhpcy5saXN0T3B0aW9ucztcbiAgICAgIGlmICghdGhpcy5pc0NsaWVudFNpZGVHcmlkKSB7XG4gICAgICAgIHRoaXMubGlzdFNlYXJjaENvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUodW50aWxEZXN0cm95ZWQodGhpcykpLnN1YnNjcmliZSgoc2VhcmNoVGVybTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZXJ2ZXJTZWFyY2hFcnJvcmVkID0gZmFsc2U7XG4gICAgICAgICAgaWYgKHNlYXJjaFRlcm0udHJpbSgpID09PSAnJykge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nTGlzdCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5saXN0T3B0aW9ucyA9IG9yaWdpbmFsT3B0aW9ucztcbiAgICAgICAgICAgIHRoaXMucGF0Y2hBbmRSZVJlZ2lzdGVyKHRoaXMuY29sdW1uVmFsdWVzKTtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5nZXRWYWx1ZXNGcm9tU2VydmVyKHNlYXJjaFRlcm0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5pbml0Rm9ybSgpO1xuICB9XG5cbiAgY2xvc2VQb3BVcCgpIHtcbiAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xuICAgIHRoaXMucG9wb3Zlci5jbG9zZSgpO1xuICB9XG5cbiAgYXBwbHlGaWx0ZXJzKCkge1xuICAgIHRoaXMuZmlsdGVyRm9ybS52YWxpZCAmJiB0aGlzLmZpbHRlckZvcm0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIGlmICh0aGlzLmZpbHRlckZvcm0uZGlydHkgJiYgKHRoaXMuZmlsdGVyRm9ybS52YWxpZCB8fCB0aGlzLmZpbHRlckZvcm0uZ2V0KCdjb25kaXRpb25hbCcpLnByaXN0aW5lKSkge1xuICAgICAgY29uc3QgeyBjb2x1bW4gfSA9IHRoaXMucG9wb3Zlci5kYXRhO1xuICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy5idWlsZEZpbHRlcigpO1xuICAgICAgaXNFbXB0eShmaWx0ZXIpXG4gICAgICAgID8gdGhpcy5ncmlkU2VydmljZS5jbGVhckNvbHVtbkZpbHRlcih0aGlzLmNvbEZpZWxkKVxuICAgICAgICA6IHRoaXMuZ3JpZFNlcnZpY2Uuc2V0Q29sdW1uRmlsdGVyKGNvbHVtbiwgZmlsdGVyKTtcblxuICAgICAgdGhpcy5ncmlkU2VydmljZS5ub3RpZnlGaWx0ZXJVcGRhdGUoKTtcbiAgICB9XG4gIH1cblxuICBjbGVhckZpbHRlcnMoKSB7XG4gICAgdGhpcy5ncmlkU2VydmljZS5jbGVhckNvbHVtbkZpbHRlcih0aGlzLmNvbEZpZWxkKTtcbiAgICB0aGlzLnJlc2V0Rm9ybSgpO1xuICB9XG5cbiAgcmVtb3ZlQ29uZGl0aW9uKGluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLmNvbmRpdGlvbnMucmVtb3ZlQXQoaW5kZXgpO1xuICAgIHRoaXMuZmlsdGVyRm9ybS5tYXJrQXNEaXJ0eSgpO1xuICB9XG5cbiAgYWRkQ29uZGl0aW9uKCkge1xuICAgIHRoaXMuZmlsdGVyRm9ybS5tYXJrQXNQcmlzdGluZSgpO1xuICAgIHRoaXMuY29uZGl0aW9ucy5wdXNoKHRoaXMuZGVmYXVsdE9wZXJhbmQpO1xuICB9XG5cbiAgZ2V0T3BlcmFuZFR5cGUoaTogbnVtYmVyKSB7XG4gICAgY29uc3QgY29uZGl0aW9uVHlwZSA9IHRoaXMuY29uZGl0aW9ucy5hdChpKS52YWx1ZS50eXBlO1xuICAgIHJldHVybiBjb25kaXRpb25UeXBlID8gY29uZGl0aW9uVHlwZS5vcGVyYW5kIDogbnVsbDtcbiAgfVxuXG4gIGlzQ29uZGl0aW9uYWxFbXB0eShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBib29sZWFuIHtcbiAgICBjb25zdCBvcGVyYW5kOiBEYXRvRmlsdGVyQ29uZGl0aW9ucyA9XG4gICAgICBjb250cm9sICYmIGNvbnRyb2wudmFsdWUgJiYgY29udHJvbC52YWx1ZS50eXBlID8gY29udHJvbC52YWx1ZS50eXBlLm9wZXJhbmQgOiBudWxsO1xuICAgIHJldHVybiB0aGlzLmlzRW1wdHlPcGVyYW5kKG9wZXJhbmQpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5ieVZhbHVlU3Vic2NyaXB0aW9uICYmIHRoaXMuYnlWYWx1ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbHRlciB0eXBlOiBcIkV4Y2x1ZGVcIlxuICAgKiBTZWxlY3RlZCB2YWx1ZXM6IEEsIEMsIERcbiAgICogQWxsIGxpc3Q6IEEsIEIsIEMsIERcbiAgICogUmVzdWx0OiBCXG4gICAqIEBwYXJhbSBpbmNsdWRlZEFyciAtVGhlIGxpc3Qgb2YgdmFsdWVzIHRvIGluY2x1ZGVcbiAgICogQHBhcmFtIGFzTGlzdEl0ZW0gLUluZGljYXRlcyBpZiB0aGUgcmVzcG9uc2UgbmVlZHMgdG8gYmUgYXMgc3RyaW5nIG9yIGFzIExpc3RJdGVtXG4gICAqL1xuICBwcml2YXRlIGdldEJ5VmFsdWVFeGNsdWRlVmFsdWVzKGluY2x1ZGVkQXJyOiAoTGlzdEl0ZW0gfCBzdHJpbmcgfCBudW1iZXIpW10sIGFzTGlzdEl0ZW06IHRydWUpOiBMaXN0SXRlbVtdO1xuICBwcml2YXRlIGdldEJ5VmFsdWVFeGNsdWRlVmFsdWVzKGluY2x1ZGVkQXJyOiAoTGlzdEl0ZW0gfCBzdHJpbmcgfCBudW1iZXIpW10pOiAoc3RyaW5nIHwgbnVtYmVyKVtdO1xuICBwcml2YXRlIGdldEJ5VmFsdWVFeGNsdWRlVmFsdWVzKFxuICAgIGluY2x1ZGVkQXJyOiAoTGlzdEl0ZW0gfCBzdHJpbmcgfCBudW1iZXIpW10sXG4gICAgYXNMaXN0SXRlbSA9IGZhbHNlXG4gICk6IChzdHJpbmcgfCBudW1iZXIpW10gfCBMaXN0SXRlbVtdIHtcbiAgICBsZXQgaW5jbHVkZWRTZXQ7XG4gICAgaWYgKHRoaXMuaXNQcmVkZWZpbmVkTGlzdEl0ZW1zKSB7XG4gICAgICBjb25zdCBwcmVkZWZpbmVkTGlzdCA9IHRoaXMuY29sRGVmLmZpbHRlcnNDb25maWcucHJlZGVmaW5lZExpc3RWYWx1ZXMgYXMgTGlzdEl0ZW1bXTtcbiAgICAgIGluY2x1ZGVkU2V0ID0gbmV3IFNldChcbiAgICAgICAgaW5jbHVkZWRBcnIubWFwKHZhbCA9PiB7XG4gICAgICAgICAgY29uc3QgaXRlbSA9IHByZWRlZmluZWRMaXN0LmZpbmQoKHsgdmFsdWUgfSkgPT4gdmFsdWUgPT09IHZhbCk7XG4gICAgICAgICAgcmV0dXJuIGl0ZW0uaWQ7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbmNsdWRlZFNldCA9IG5ldyBTZXQoaW5jbHVkZWRBcnIubWFwKHZhbCA9PiAoaXNPYmplY3Q8TGlzdEl0ZW0+KHZhbCkgPyB2YWwudmFsdWUgOiB2YWwpKSk7XG4gICAgfVxuICAgIGlmIChhc0xpc3RJdGVtKSB7XG4gICAgICByZXR1cm4gdGhpcy5saXN0T3B0aW9ucy5maWx0ZXIoKHsgdmFsdWUgfSkgPT4gIWluY2x1ZGVkU2V0Lmhhcyh2YWx1ZSkpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jb2x1bW5WYWx1ZXMuZmlsdGVyKHZhbHVlID0+ICFpbmNsdWRlZFNldC5oYXModmFsdWUpKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRGaWx0ZXIoKTogRGF0b0dyaWRGaWx0ZXIge1xuICAgIGNvbnN0IHsgYnlWYWx1ZSwgY29uZGl0aW9uYWwgfSA9IHRoaXMuZmlsdGVyRm9ybS52YWx1ZTtcbiAgICBjb25zdCBmaWx0ZXI6IERhdG9HcmlkRmlsdGVyID0geyBjb2xJZDogdGhpcy5jb2xEZWYuY29sSWQgfTtcblxuICAgIGZpbHRlci5waXZvdEtleXMgPSB0aGlzLnBpdm90S2V5cztcblxuICAgIGlmICh0aGlzLnBpdm90Q29sdW1uKSB7XG4gICAgICBmaWx0ZXIucGl2b3RGaWVsZHNNYXAgPSB0aGlzLmdldFBpdm90RmllbGRzKHRoaXMucGl2b3RDb2x1bW4uZ2V0UGFyZW50KCkpLnJlZHVjZSgoZmllbGRNYXAsIGZpZWxkLCBpbmRleCkgPT4ge1xuICAgICAgICBmaWVsZE1hcFtmaWVsZF0gPSB0aGlzLnBpdm90S2V5c1tpbmRleF07XG5cbiAgICAgICAgcmV0dXJuIGZpZWxkTWFwO1xuICAgICAgfSwge30pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmZpbHRlclNlY3Rpb25zLkNvbmRpdGlvbmFsKSB7XG4gICAgICB0aGlzLnNldENvbmRpdGlvbmFsRmlsdGVyKGZpbHRlciwgY29uZGl0aW9uYWwpO1xuICAgIH1cbiAgICBpZiAodGhpcy5maWx0ZXJTZWN0aW9ucy5CeV9WYWx1ZSkge1xuICAgICAgdGhpcy5zZXRCeVZhbHVlRmlsdGVyKGZpbHRlciwgYnlWYWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbHRlcjtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdEZvcm0oKSB7XG4gICAgY29uc3QgZmlsdGVyVmFsdWUgPSB0aGlzLmNvbEZpbHRlcjtcbiAgICB0aGlzLmZpbHRlckZvcm0gPSBmaWx0ZXJWYWx1ZSA/IHRoaXMuYnVpbGRGb3JtRnJvbUZpbHRlcihmaWx0ZXJWYWx1ZSkgOiB0aGlzLmRlZmF1bHRGb3JtO1xuICAgIHRoaXMucmVnaXN0ZXJPcGVyYW5kTGlzdGVuZXJzKCk7XG4gICAgaWYgKCF0aGlzLmlzQ2xpZW50U2lkZUdyaWQgJiYgdGhpcy5maWx0ZXJTZWN0aW9ucy5CeV9WYWx1ZSkge1xuICAgICAgdGhpcy5yZWdpc3RlckJ5VmFsdWVMaXN0ZW5lcigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCB0aGUgZmlsdGVyIHZpZXcgZnJvbSBhIGdpdmVuIGZpbHRlclxuICAgKi9cbiAgcHJpdmF0ZSBidWlsZEZvcm1Gcm9tRmlsdGVyKGZpbHRlcjogRGF0b0dyaWRGaWx0ZXIpOiBGb3JtR3JvdXAge1xuICAgIGNvbnN0IGZpbHRlckdyb3VwID0ge307XG4gICAgaWYgKHRoaXMuZmlsdGVyU2VjdGlvbnMuQ29uZGl0aW9uYWwpIHtcbiAgICAgIGZpbHRlckdyb3VwWydjb25kaXRpb25hbCddID0gdGhpcy5idWlsZENvbmRpdGlvbmFsRmlsdGVyKGZpbHRlci5jb25kaXRpb25hbCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmZpbHRlclNlY3Rpb25zLkJ5X1ZhbHVlKSB7XG4gICAgICBmaWx0ZXJHcm91cFsnYnlWYWx1ZSddID0gdGhpcy5idWlsZEJ5VmFsdWVGaWx0ZXIoZmlsdGVyLmJ5VmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5mYi5ncm91cChmaWx0ZXJHcm91cCk7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgdGhlIGZpbHRlciB2aWV3XG4gICAqL1xuICBwcml2YXRlIHJlc2V0Rm9ybSgpIHtcbiAgICB0aGlzLmZpbHRlckZvcm0uc2V0RXJyb3JzKG51bGwpO1xuICAgIGxldCBvcmlnaW5hbFN0YXRlID0ge307XG4gICAgaWYgKHRoaXMuZmlsdGVyU2VjdGlvbnMuQnlfVmFsdWUpIHtcbiAgICAgIG9yaWdpbmFsU3RhdGUgPSB7IGJ5VmFsdWU6IHRoaXMuY29sdW1uVmFsdWVzIH07XG4gICAgfVxuICAgIGlmICh0aGlzLmZpbHRlclNlY3Rpb25zLkNvbmRpdGlvbmFsKSB7XG4gICAgICBvcmlnaW5hbFN0YXRlID0ge1xuICAgICAgICAuLi5vcmlnaW5hbFN0YXRlLFxuICAgICAgICBjb25kaXRpb25hbDoge1xuICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvclR5cGVzLkFORCxcbiAgICAgICAgICBjb25kaXRpb25zOiBbeyB0eXBlOiB0aGlzLmNvbmRpdGlvbmFsRmlsdGVyT3B0aW9uc1swXSwgdmFsdWU6IG51bGwsIHJhbmdlRW5kOiBudWxsIH1dXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBjb25kaXRpb25hbCA9IHRoaXMuZmlsdGVyRm9ybS5jb250cm9scy5jb25kaXRpb25hbCBhcyBGb3JtR3JvdXA7XG4gICAgICBjb25kaXRpb25hbC5yZW1vdmVDb250cm9sKCdjb25kaXRpb25zJyk7XG4gICAgICBjb25kaXRpb25hbC5hZGRDb250cm9sKCdjb25kaXRpb25zJywgdGhpcy5mYi5hcnJheShbdGhpcy5kZWZhdWx0T3BlcmFuZF0pKTtcbiAgICB9XG4gICAgdGhpcy5maWx0ZXJGb3JtLnJlc2V0KG9yaWdpbmFsU3RhdGUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB0aGlzLmZpbHRlckZvcm0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbGwgdGhlIGNvbHVtbiB2YWx1ZXMgdG8gZGlzcGxheSBvbiB0aGUgbGlzdC5cbiAgICogMS4gSXRlcmF0ZSBvdmVyIHRoZSByb3dzIGFmdGVyIGZpbHRlcmluZyBhbmQgc29ydGluZyB3YXMgYXBwbGllZFxuICAgKiAyLiBTaW5jZSB3ZSBhbHNvIHdhbnQgdG8gc2hvdyB2YWx1ZXMgdGhhdCB3ZXJlIGZpbHRlcmVkIGJ5IHRoaXMgY29sdW1uIGZpbHRlciB3ZSBhcmUgaXRlcmF0aW5nIGFsbCB0aGUgcm93c1xuICAgKiAoYmVmb3JlIHRoZSBmaWx0ZXJpbmcpLCBmaW5kaW5nIHdoaWNoIHdlcmUgcmVtb3ZlZCBieSB0aGlzIGNvbHVtbidzIGZpbHRlciBhbmQgYWRkaW5nIHRoZW0gYmFjay5cbiAgICovXG4gIHByaXZhdGUgZ2V0Q29sdW1uVmFsdWVzKCk6IFZhbHVlQW5kRm9ybWF0dGVkVmFsdWVbXSB7XG4gICAgbGV0IHZhbHVlczogVmFsdWVBbmRGb3JtYXR0ZWRWYWx1ZVtdID0gW107XG4gICAgY29uc3QgZmlsdGVyVmFsdWUgPSB0aGlzLmNvbEZpbHRlcjtcbiAgICBjb25zdCBkaXNwbGF5ZWRSb3cgPSB7fTtcbiAgICBjb25zdCBieVZhbHVlVHlwZSA9IGZpbHRlclZhbHVlICYmIGZpbHRlclZhbHVlLmJ5VmFsdWUgJiYgZmlsdGVyVmFsdWUuYnlWYWx1ZS5jb25kaXRpb247XG4gICAgY29uc3QgYXBpID0gdGhpcy5ncmlkUXVlcnkuYXBpLmdyaWQ7XG4gICAgY29uc3QgZ2V0VmFsdWVDdXJyaWVkID0gY3VycnkodGhpcy5nZXRWYWx1ZUFuZEZvcm1hdHRlZFZhbHVlKSh0aGlzLmNvbEZpZWxkLCBhcGksIHRoaXMuY29sRGVmLnZhbHVlRm9ybWF0dGVyKTtcbiAgICAvKiogMS4gSXRlcmF0ZSBvdmVyIHRoZSByb3dzIGFmdGVyIGZpbHRlcmluZyBhbmQgc29ydGluZyB3YXMgYXBwbGllZCAqL1xuICAgIGlmICh0aGlzLmlzQ2xpZW50U2lkZUdyaWQpIHtcbiAgICAgIGFwaS5mb3JFYWNoTm9kZUFmdGVyRmlsdGVyQW5kU29ydChyb3cgPT4ge1xuICAgICAgICB2YWx1ZXMucHVzaChnZXRWYWx1ZUN1cnJpZWQocm93KSk7XG4gICAgICAgIGRpc3BsYXllZFJvd1tyb3cuaWRdID0gdHJ1ZTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvKiBXZSBvbmx5IGRpc3BsYXkgdGhlIGN1cnJlbnQgcGFnZSBpbiB0aGUgbGlzdCAqL1xuICAgICAgY29uc3QgcGFnZVNpemUgPSBhcGkucGFnaW5hdGlvbkdldFBhZ2VTaXplKCk7XG4gICAgICBjb25zdCBjdXJyZW50UGFnZSA9IGFwaS5wYWdpbmF0aW9uR2V0Q3VycmVudFBhZ2UoKTtcbiAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBwYWdlU2l6ZSAqIGN1cnJlbnRQYWdlO1xuICAgICAgY29uc3QgZW5kSW5kZXggPSBzdGFydEluZGV4ICsgcGFnZVNpemU7XG4gICAgICBhcGkuZm9yRWFjaE5vZGUocm93ID0+IHtcbiAgICAgICAgY29uc3QgeyByb3dJbmRleCB9ID0gcm93O1xuICAgICAgICBpZiAocm93SW5kZXggPj0gc3RhcnRJbmRleCAmJiByb3dJbmRleCA8IGVuZEluZGV4KSB7XG4gICAgICAgICAgdmFsdWVzLnB1c2goZ2V0VmFsdWVDdXJyaWVkKHJvdykpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogMi4gQWRkIGJhY2sgdmFsdWVzIHRoYXQgd2VyZSBmaWx0ZXJlZCBieSB0aGlzIGNvbHVtbiAqL1xuICAgIGlmIChieVZhbHVlVHlwZSkge1xuICAgICAgaWYgKGJ5VmFsdWVUeXBlID09PSBEYXRvRmlsdGVyQ29uZGl0aW9ucy5OT1RfSU5fTElTVCkge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSB0aGlzLmNvbERlZi52YWx1ZUZvcm1hdHRlciBhcyAocGFyYW1zOiBhbnkpID0+IHN0cmluZztcbiAgICAgICAgY29uc3QgY3VyckZpbHRlclZhbHVlcyA9IGZpbHRlclZhbHVlLmJ5VmFsdWUudmFsdWVzLm1hcCgodmFsdWU6IHN0cmluZyB8IG51bWJlcikgPT4ge1xuICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZFZhbHVlID0gZm9ybWF0dGVyID8gZm9ybWF0dGVyKHsgdmFsdWUgfSkgOiB2YWx1ZTtcbiAgICAgICAgICByZXR1cm4geyB2YWx1ZSwgZm9ybWF0dGVkVmFsdWUgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIHZhbHVlcyA9IHZhbHVlcy5jb25jYXQoY3VyckZpbHRlclZhbHVlcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB7IGNvbmRpdGlvbmFsIH0gPSB0aGlzLmNvbEZpbHRlcjtcbiAgICAgICAgY29uc3QgYWN0aXZlRmlsdGVycyA9IHtcbiAgICAgICAgICAuLi50aGlzLmdyaWRRdWVyeS5nZXRGaWx0ZXIoKSxcbiAgICAgICAgICBbdGhpcy5jb2xGaWVsZF06IHsgY29uZGl0aW9uYWwgfVxuICAgICAgICB9O1xuICAgICAgICBhcGkuZm9yRWFjaExlYWZOb2RlKHJvdyA9PiB7XG4gICAgICAgICAgaWYgKCFkaXNwbGF5ZWRSb3cuaGFzT3duUHJvcGVydHkocm93LmlkKSAmJiB2YWxpZGF0ZUZpbHRlcih7IHJvdywgYXBpIH0sIGFjdGl2ZUZpbHRlcnMpKSB7XG4gICAgICAgICAgICB2YWx1ZXMucHVzaChnZXRWYWx1ZUN1cnJpZWQocm93KSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuaXFCeSh2YWx1ZXMsICd2YWx1ZScpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRWYWx1ZUFuZEZvcm1hdHRlZFZhbHVlKFxuICAgIGZpZWxkOiBzdHJpbmcsXG4gICAgYXBpOiBHcmlkQXBpLFxuICAgIC8vIFRPRE86IGZvbGxvd3VwOiBodHRwczovL2FnLWdyaWQuemVuZGVzay5jb20vaGMvZW4tdXMvcmVxdWVzdHMvMTEwMTlcbiAgICBmb3JtYXR0ZXI6IChwYXJhbXM6IGFueSkgPT4gc3RyaW5nLFxuICAgIHJvdzogUm93Tm9kZVxuICApOiBWYWx1ZUFuZEZvcm1hdHRlZFZhbHVlIHtcbiAgICBjb25zdCB2YWx1ZSA9IGFwaS5nZXRWYWx1ZShmaWVsZCwgcm93KTtcbiAgICAvLyBUT0RPOiBmb2xsb3d1cDogaHR0cHM6Ly9hZy1ncmlkLnplbmRlc2suY29tL2hjL2VuLXVzL3JlcXVlc3RzLzEwOTYzP3BhZ2U9MVxuICAgIHJldHVybiB7IHZhbHVlLCBmb3JtYXR0ZWRWYWx1ZTogZm9ybWF0dGVyID8gZm9ybWF0dGVyKHsgdmFsdWUgfSBhcyBhbnkpIDogdmFsdWUgfTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q29uZGl0aW9uYWxGaWx0ZXIoXG4gICAgZmlsdGVyOiBEYXRvR3JpZEZpbHRlcixcbiAgICB7IG9wZXJhdG9yLCBjb25kaXRpb25zIH06IHsgb3BlcmF0b3I6IE9wZXJhdG9yVHlwZXM7IGNvbmRpdGlvbnM6IENvbmRpdGlvbnMgfVxuICApIHtcbiAgICBjb25zdCB2YWxpZENvbmRpdGlvbnMgPSBjb25kaXRpb25zLmZpbHRlcigoeyB2YWx1ZSwgdHlwZSB9KSA9PiAhaXNOaWwodmFsdWUpIHx8IHRoaXMuaXNFbXB0eU9wZXJhbmQodHlwZS5vcGVyYW5kKSk7XG4gICAgaWYgKHZhbGlkQ29uZGl0aW9ucy5sZW5ndGgpIHtcbiAgICAgIGZpbHRlci5jb25kaXRpb25hbCA9IHtcbiAgICAgICAgdHlwZTogKHRoaXMuY29sRGVmLmZpbHRlciBhcyBEYXRvR3JpZEZpbHRlclR5cGVzKSB8fCBEYXRvR3JpZEZpbHRlclR5cGVzLlN0cmluZyxcbiAgICAgICAgb3BlcmF0b3IsXG4gICAgICAgIGNvbmRpdGlvbnM6IGNvbmRpdGlvbnMubWFwKCh7IHZhbHVlLCB0eXBlLCByYW5nZUVuZCB9KSA9PiB7XG4gICAgICAgICAgY29uc3QgYmFzZSA9IHsgY29uZGl0aW9uOiB0eXBlLm9wZXJhbmQsIHZhbHVlIH07XG4gICAgICAgICAgaWYgKHR5cGUub3BlcmFuZCA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuSU5fUkFOR0UpIHtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSB7IC4uLmJhc2UsIHJhbmdlRW5kIH07XG4gICAgICAgICAgICBpZiAodGhpcy5maWx0ZXJUeXBlID09PSBEYXRvR3JpZEZpbHRlclR5cGVzLkRhdGUpIHtcbiAgICAgICAgICAgICAgY29uc3QgeyBmcm9tLCB0byB9ID0gdmFsdWUgYXMgRGF0ZVJhbmdlO1xuICAgICAgICAgICAgICByZXN1bHQgPSB7IGNvbmRpdGlvbjogdHlwZS5vcGVyYW5kLCB2YWx1ZTogZnJvbSBhcyBzdHJpbmcsIHJhbmdlRW5kOiB0byBhcyBzdHJpbmcgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgYXMgRGF0b0dyaWRSYW5nZUZpbHRlckNvbmRpdGlvbjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGJhc2UgYXMgRGF0b0dyaWRGaWx0ZXJDb25kaXRpb247XG4gICAgICAgIH0pXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0QnlWYWx1ZUZpbHRlcihmaWx0ZXI6IERhdG9HcmlkRmlsdGVyLCBieVZhbHVlOiAoc3RyaW5nIHwgbnVtYmVyKVtdKSB7XG4gICAgaWYgKHRoaXMuaXNDbGllbnRTaWRlR3JpZCkge1xuICAgICAgY29uc3QgdmFsdWVzQ291bnQgPSB0aGlzLmNvbHVtblZhbHVlcy5sZW5ndGg7XG4gICAgICBpZiAoYnlWYWx1ZS5sZW5ndGggIT09IHZhbHVlc0NvdW50KSB7XG4gICAgICAgIGNvbnN0IGNvbmRpdGlvbiA9XG4gICAgICAgICAgYnlWYWx1ZS5sZW5ndGggPCB2YWx1ZXNDb3VudCAvIDIgPyBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JTl9MSVNUIDogRGF0b0ZpbHRlckNvbmRpdGlvbnMuTk9UX0lOX0xJU1Q7XG4gICAgICAgIGZpbHRlci5ieVZhbHVlID0ge1xuICAgICAgICAgIGNvbmRpdGlvbixcbiAgICAgICAgICB2YWx1ZXM6IGNvbmRpdGlvbiA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuSU5fTElTVCA/IGJ5VmFsdWUgOiB0aGlzLmdldEJ5VmFsdWVFeGNsdWRlVmFsdWVzKGJ5VmFsdWUpXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IEFycmF5LmZyb20odGhpcy5leGNsdWRlZFZhbHVlcy52YWx1ZXMoKSk7XG4gICAgICBpZiAodmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZmlsdGVyLmJ5VmFsdWUgPSB7XG4gICAgICAgICAgY29uZGl0aW9uOiBEYXRvRmlsdGVyQ29uZGl0aW9ucy5OT1RfSU5fTElTVCxcbiAgICAgICAgICB2YWx1ZXNcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkQnlWYWx1ZUZpbHRlcihieVZhbHVlOiBEYXRvR3JpZEZpbHRlclsnYnlWYWx1ZSddKTogKHN0cmluZyB8IG51bWJlcilbXVtdIHtcbiAgICBpZiAoIWJ5VmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRCeVZhbHVlO1xuICAgIH1cbiAgICBpZiAoYnlWYWx1ZS52YWx1ZXMubGVuZ3RoICYmIHRoaXMuZmlsdGVyU2VjdGlvbnMuQ29uZGl0aW9uYWwpIHtcbiAgICAgIHRoaXMuYWN0aXZlQWNjb3JkaW9uSWQgPSAxO1xuICAgIH1cbiAgICBpZiAoYnlWYWx1ZS5jb25kaXRpb24gPT09IERhdG9GaWx0ZXJDb25kaXRpb25zLk5PVF9JTl9MSVNUKSB7XG4gICAgICBpZiAoIXRoaXMuaXNDbGllbnRTaWRlR3JpZCkge1xuICAgICAgICB0aGlzLmV4Y2x1ZGVkVmFsdWVzID0gbmV3IFNldChieVZhbHVlLnZhbHVlcyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gW3RoaXMuZ2V0QnlWYWx1ZUV4Y2x1ZGVWYWx1ZXMoYnlWYWx1ZS52YWx1ZXMpXTtcbiAgICB9XG4gICAgcmV0dXJuIFtieVZhbHVlLnZhbHVlc107XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkQ29uZGl0aW9uYWxGaWx0ZXIoY29uZGl0aW9uYWw6IERhdG9HcmlkRmlsdGVyWydjb25kaXRpb25hbCddKTogRm9ybUdyb3VwIHtcbiAgICBpZiAoIWNvbmRpdGlvbmFsKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWZhdWx0Q29uZGl0aW9uYWw7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIG9wZXJhdG9yOiBbY29uZGl0aW9uYWwub3BlcmF0b3JdLFxuICAgICAgY29uZGl0aW9uczogdGhpcy5mYi5hcnJheSh0aGlzLmJ1aWxkQ29uZGl0aW9ucyhjb25kaXRpb25hbC5jb25kaXRpb25zKSlcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRDb25kaXRpb25zKGNvbmRpdGlvbnM6IChEYXRvR3JpZEZpbHRlckNvbmRpdGlvbiB8IERhdG9HcmlkUmFuZ2VGaWx0ZXJDb25kaXRpb24pW10pOiBGb3JtR3JvdXBbXSB7XG4gICAgcmV0dXJuIGNvbmRpdGlvbnMubWFwKGNvbmRpdGlvbiA9PiB7XG4gICAgICBjb25zdCB7IGNvbmRpdGlvbjogY3VycmVudE9wZXJhbmQsIHZhbHVlIH0gPSBjb25kaXRpb247XG4gICAgICBjb25zdCBncm91cCA9IHtcbiAgICAgICAgdHlwZTogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiB0aGlzLmNvbmRpdGlvbmFsRmlsdGVyT3B0aW9ucy5maW5kSW5kZXgoKHsgb3BlcmFuZCB9KSA9PiBvcGVyYW5kID09PSBjdXJyZW50T3BlcmFuZCksXG4gICAgICAgICAgICBvcGVyYW5kOiBjdXJyZW50T3BlcmFuZCxcbiAgICAgICAgICAgIGxhYmVsOiBgY29yZS4ke2N1cnJlbnRPcGVyYW5kfWBcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHZhbHVlOiBbdmFsdWUsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgICByYW5nZUVuZDogbnVsbFxuICAgICAgfTtcbiAgICAgIGlmIChpc1JhbmdlQ29uZGl0aW9uPERhdG9HcmlkUmFuZ2VGaWx0ZXJDb25kaXRpb24+KGNvbmRpdGlvbikpIHtcbiAgICAgICAgZ3JvdXAucmFuZ2VFbmQgPSBbY29uZGl0aW9uLnJhbmdlRW5kLCBWYWxpZGF0b3JzLnJlcXVpcmVkXTtcbiAgICAgICAgZ3JvdXAudmFsdWUgPSBbeyBmcm9tOiBjb25kaXRpb24udmFsdWUgYXMgc3RyaW5nLCB0bzogY29uZGl0aW9uLnJhbmdlRW5kIGFzIHN0cmluZyB9LCBWYWxpZGF0b3JzLnJlcXVpcmVkXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmZiLmdyb3VwKGdyb3VwKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiByYW5nZSBpcyBub3QgcmVxdWlyZWQgYnkgZGVmYXVsdCwgd2Ugd2FudCB0byBtYWtlIGl0IHJlcXVpcmVkIG9uY2UgdGhpcyBvcGVyYW5kIGlzIHNlbGVjdGVkLlxuICAgKiAqL1xuICBwcml2YXRlIHJlZ2lzdGVyT3BlcmFuZExpc3RlbmVycygpIHtcbiAgICBpZiAoIXRoaXMuY29uZGl0aW9ucykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNvbmRpdGlvbnMudmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZShcbiAgICAgICAgc3RhcnRXaXRoKHRoaXMuY29uZGl0aW9ucy5sZW5ndGgpLFxuICAgICAgICBtYXAoKCkgPT4gdGhpcy5jb25kaXRpb25zLmxlbmd0aCksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsdWVDaGFuZ2VzID0gdGhpcy5jb25kaXRpb25zLmNvbnRyb2xzLm1hcCgoZ3JvdXA6IEZvcm1Hcm91cCwgaW5kZXgpID0+XG4gICAgICAgICAgICBncm91cC5nZXQoJ3R5cGUnKS52YWx1ZUNoYW5nZXMucGlwZShtYXAoKHZhbHVlOiBDb25kaXRpb25PcHRpb24pID0+ICh7IHZhbHVlLCBpbmRleCB9KSkpXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gbWVyZ2UoLi4udmFsdWVDaGFuZ2VzKTtcbiAgICAgICAgfSksXG4gICAgICAgIHVudGlsRGVzdHJveWVkKHRoaXMpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCh7IHZhbHVlOiB7IG9wZXJhbmQgfSwgaW5kZXggfSkgPT4ge1xuICAgICAgICBjb25zdCBwYXJhbXMgPSB7IGluZGV4LCBpblJhbmdlOiBvcGVyYW5kID09PSBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JTl9SQU5HRSB9O1xuICAgICAgICBpZiAodGhpcy5maWx0ZXJUeXBlID09PSBEYXRvR3JpZEZpbHRlclR5cGVzLkRhdGUpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZURhdGVJbnB1dChwYXJhbXMpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZmlsdGVyVHlwZSA9PT0gRGF0b0dyaWRGaWx0ZXJUeXBlcy5OdW1iZXIpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZU51bWJlcklucHV0KHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVWYWx1ZUNvbnRyb2xWYWxpZGF0b3Iob3BlcmFuZCwgaW5kZXgpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZURhdGVJbnB1dCh7IGluUmFuZ2UsIGluZGV4IH0pIHtcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5jb25kaXRpb25zLmF0KGluZGV4KS5nZXQoJ3ZhbHVlJyk7XG4gICAgaWYgKGNvbnRyb2wuZGlydHkpIHtcbiAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IGNvbnRyb2w7XG4gICAgICBjb25zdCBuZXdWYWx1ZSA9IGluUmFuZ2UgPyB7IGZyb206IHZhbHVlLCB0bzogdmFsdWUgfSA6IHZhbHVlLmZyb207XG4gICAgICBjb250cm9sLnBhdGNoVmFsdWUobmV3VmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTnVtYmVySW5wdXQoeyBpblJhbmdlLCBpbmRleCB9KSB7XG4gICAgY29uc3QgdmFsaWRhdG9yID0gaW5SYW5nZSA/IFZhbGlkYXRvcnMucmVxdWlyZWQgOiBudWxsO1xuICAgIGNvbnN0IHJhbmdlRW5kID0gdGhpcy5jb25kaXRpb25zLmF0KGluZGV4KS5nZXQoJ3JhbmdlRW5kJyk7XG4gICAgcmFuZ2VFbmQuc2V0VmFsaWRhdG9ycyh2YWxpZGF0b3IpO1xuICAgIHJhbmdlRW5kLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVmFsdWVDb250cm9sVmFsaWRhdG9yKG9wZXJhbmQ6IERhdG9GaWx0ZXJDb25kaXRpb25zLCBpbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgdmFsaWRhdG9yID0gIXRoaXMuaXNFbXB0eU9wZXJhbmQob3BlcmFuZCkgPyBWYWxpZGF0b3JzLnJlcXVpcmVkIDogbnVsbDtcbiAgICBjb25zdCB2YWx1ZUNvbnRyb2wgPSB0aGlzLmNvbmRpdGlvbnMuYXQoaW5kZXgpLmdldCgndmFsdWUnKSBhcyBGb3JtQ29udHJvbDtcbiAgICB2YWx1ZUNvbnRyb2wuc2V0VmFsaWRhdG9ycyh2YWxpZGF0b3IpO1xuICAgIHZhbHVlQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gIH1cblxuICBwcml2YXRlIGlzRW1wdHlPcGVyYW5kKG9wZXJhbmQ6IERhdG9GaWx0ZXJDb25kaXRpb25zKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG9wZXJhbmQgPT09IERhdG9GaWx0ZXJDb25kaXRpb25zLklTX0VNUFRZIHx8IG9wZXJhbmQgPT09IERhdG9GaWx0ZXJDb25kaXRpb25zLk5PVF9FTVBUWTtcbiAgfVxuXG4gIHByaXZhdGUgaXNTdHJpbmdBcnJheSh2YWx1ZTogKHN0cmluZyB8IExpc3RJdGVtKVtdKTogdmFsdWUgaXMgc3RyaW5nW10ge1xuICAgIHJldHVybiBpc1N0cmluZyh2YWx1ZVswXSk7XG4gIH1cblxuICBwcml2YXRlIGdldFZhbHVlc0Zyb21TZXJ2ZXIoc2VhcmNoVGVybTogc3RyaW5nKSB7XG4gICAgdGhpcy5sb2FkaW5nTGlzdCA9IHRydWU7XG4gICAgdGhpcy5saXN0T3B0aW9ucyA9IFtdO1xuICAgIGNvbnN0IHBhcmFtczogUGFydGlhbDxEYXRvR3JpZEdldFJvd3NQYXJhbXM+ID0ge1xuICAgICAgZmFpbENhbGxiYWNrOiAoKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZ0xpc3QgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zZXJ2ZXJTZWFyY2hFcnJvcmVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5saXN0T3B0aW9ucyA9IFtdO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9LFxuICAgICAgc3VjY2Vzc0NhbGxiYWNrOiBkYXRhID0+IHtcbiAgICAgICAgdGhpcy5sb2FkaW5nTGlzdCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBmbGF0RGF0YSA9IGRhdGEubWFwKHZhbHVlID0+IHZhbHVlW3RoaXMuY29sRmllbGRdKTtcbiAgICAgICAgdGhpcy5saXN0T3B0aW9ucyA9IGZsYXREYXRhLm1hcChtYXBUb0xpc3RJdGVtKTtcbiAgICAgICAgdGhpcy5wYXRjaEFuZFJlUmVnaXN0ZXIoZmxhdERhdGEpO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9LFxuICAgICAgc2VydmVyQ29uZmlnOiB7XG4gICAgICAgIHBhZ2VTaXplOiAzMCxcbiAgICAgICAgcGFnZU51bWJlcjogMSxcbiAgICAgICAgY29sdW1uRmlsdGVyczoge1xuICAgICAgICAgIFt0aGlzLmNvbEZpZWxkXToge1xuICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yVHlwZXMuQU5ELFxuICAgICAgICAgICAgZmlsdGVyczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29uZGl0aW9uOiBEYXRvRmlsdGVyQ29uZGl0aW9ucy5DT05UQUlOUyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogc2VhcmNoVGVybVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBzb3J0OiBbXSxcbiAgICAgICAgY29sdW1uc1RvUmV0dXJuOiBbdGhpcy5jb2xGaWVsZF0sXG4gICAgICAgIGRpc3RpbmN0UmVzdWx0czogdHJ1ZVxuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5ncmlkU2VydmljZS5fb3JpZ2luYWxHZXRSb3dzKHBhcmFtcyBhcyBhbnkpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIC8qIFdoZW4gc2VhcmNoaW5nIHRoZSBieSB2YWx1ZSBmaWx0ZXIgb24gc2VydmVyIHNpZGUgd2UgbmVlZCB0byB1cGRhdGUgdGhlIGNvbnRyb2wgd2l0aCB0aGUgbmV3IHZhbHVlcyBhbmQgcmUtcmVnaXN0ZXIgdG8gdGhlIGNoYW5nZXMgKi9cbiAgcHJpdmF0ZSBwYXRjaEFuZFJlUmVnaXN0ZXIoZGF0YTogKHN0cmluZyB8IG51bWJlcilbXSkge1xuICAgIHRoaXMuYnlWYWx1ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuYnlWYWx1ZUNvbnRyb2wucGF0Y2hWYWx1ZSh0aGlzLmdldE5vbkV4Y2x1ZGVkVmFsdWVzKGRhdGEpKTtcbiAgICB0aGlzLnJlZ2lzdGVyQnlWYWx1ZUxpc3RlbmVyKCk7XG4gIH1cblxuICBwcml2YXRlIHJlZ2lzdGVyQnlWYWx1ZUxpc3RlbmVyKCkge1xuICAgIGNvbnN0IGJ5VmFsdWUgPSB0aGlzLmJ5VmFsdWVDb250cm9sO1xuICAgIHRoaXMuYnlWYWx1ZVN1YnNjcmlwdGlvbiA9IGJ5VmFsdWUudmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZShcbiAgICAgICAgc3RhcnRXaXRoKGJ5VmFsdWUudmFsdWUpLFxuICAgICAgICBwYWlyd2lzZSgpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChbcHJldiwgY3VycmVudF0pID0+IHtcbiAgICAgICAgY29uc3QgYWRkVG9FeGNsdWRlZCA9IGN1cnJlbnQubGVuZ3RoIDwgcHJldi5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGRpZmYgPSBhZGRUb0V4Y2x1ZGVkID8gZGlmZmVyZW5jZShwcmV2LCBjdXJyZW50KSA6IGRpZmZlcmVuY2UoY3VycmVudCwgcHJldik7XG4gICAgICAgIGRpZmYuZm9yRWFjaCh2ID0+IChhZGRUb0V4Y2x1ZGVkID8gdGhpcy5leGNsdWRlZFZhbHVlcy5hZGQodikgOiB0aGlzLmV4Y2x1ZGVkVmFsdWVzLmRlbGV0ZSh2KSkpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldE5vbkV4Y2x1ZGVkVmFsdWVzKGRhdGE6IChzdHJpbmcgfCBudW1iZXIpW10pOiAoc3RyaW5nIHwgbnVtYmVyKVtdIHtcbiAgICByZXR1cm4gZGF0YS5maWx0ZXIodiA9PiAhdGhpcy5leGNsdWRlZFZhbHVlcy5oYXModikpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBwaXZvdCBkaW1lbnNpb25zIGFzIGRlZmluZWQgaW4gdGhlIHBhcmVudCBncm91cCBjb2x1bW4gaGVhZGVyIGNsYXNzLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRQaXZvdEZpZWxkcyhwYXJlbnQ6IENvbHVtbkdyb3VwLCBmaWVsZHMgPSBbXSk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBncmFuZFBhcmVudCA9IHBhcmVudC5nZXRQYXJlbnQoKTtcbiAgICBjb25zdCBoZWFkZXJDbGFzcyA9IHBhcmVudC5nZXRPcmlnaW5hbENvbHVtbkdyb3VwKCkuZ2V0Q29sR3JvdXBEZWYoKS5oZWFkZXJDbGFzcztcblxuICAgIGlmIChncmFuZFBhcmVudCkge1xuICAgICAgdGhpcy5nZXRQaXZvdEZpZWxkcyhncmFuZFBhcmVudCwgZmllbGRzKTtcbiAgICB9XG5cbiAgICBoZWFkZXJDbGFzcyAmJiBmaWVsZHMucHVzaChoZWFkZXJDbGFzc1swXSk7XG5cbiAgICByZXR1cm4gZmllbGRzO1xuICB9XG59XG4iXX0=
688
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1maWx0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGRhdG9yYW1hL2NvcmUvIiwic291cmNlcyI6WyJsaWIvZ3JpZC12Mi9ncmlkLWZpbHRlci9ncmlkLWZpbHRlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOztBQUVILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RyxPQUFPLEVBQ0wsb0JBQW9CLEVBR3BCLHdCQUF3QixFQUN4QixzQkFBc0IsRUFDdEIsbUJBQW1CLEVBRW5CLDJCQUEyQixFQUMzQixnQkFBZ0IsRUFFakIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFdkQsT0FBTyxFQUFFLEtBQUssRUFBNEIsTUFBTSxNQUFNLENBQUM7QUFDdkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBTyxNQUFNLGdCQUFnQixDQUFDO0FBQ2hHLE9BQU8sRUFBRSxVQUFVLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDM0UsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTVFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0s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LE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFM0MsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQzs7Z0JBbG1CZSxVQUFVO2dCQUNQLFVBQVU7Z0JBQ2YsV0FBVztnQkFDSixvQkFBb0I7Z0JBQzFCLGlCQUFpQjs7SUF4Q3JCLHVCQUF1QjtRQU5uQyxTQUFTLENBQUM7WUFDVCxRQUFRLEVBQUUsa0JBQWtCO1lBQzVCLG10YUFBMkM7WUFFM0MsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07O1NBQ2hELENBQUM7eUNBcUNnQixVQUFVO1lBQ1AsVUFBVTtZQUNmLFdBQVc7WUFDSixvQkFBb0I7WUFDMUIsaUJBQWlCO09BeENyQix1QkFBdUIsQ0F1b0JuQztJQUFELDhCQUFDO0NBQUEsQUF2b0JELElBdW9CQztTQXZvQlksdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IERhdG9yYW1hLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIEFwYWNoZSBMaWNlbnNlIDIuMCBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRvcmFtYS9jbGllbnQtY29yZS9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKi9cblxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgRGF0b0ZpbHRlckNvbmRpdGlvbnMsXG4gIERhdG9HcmlkRmlsdGVyLFxuICBEYXRvR3JpZEZpbHRlckNvbmRpdGlvbixcbiAgRGF0b0dyaWRGaWx0ZXJPcHRpb25zTWFwLFxuICBEYXRvR3JpZEZpbHRlclNlY3Rpb25zLFxuICBEYXRvR3JpZEZpbHRlclR5cGVzLFxuICBEYXRvR3JpZFJhbmdlRmlsdGVyQ29uZGl0aW9uLFxuICBEYXRvR3JpZFN0cmluZ0ZpbHRlck9wdGlvbnMsXG4gIGlzUmFuZ2VDb25kaXRpb24sXG4gIExpc3RJdGVtXG59IGZyb20gJy4vZ3JpZC1maWx0ZXIudHlwZXMnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQXJyYXksIEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgUG9wb3ZlclJlZiB9IGZyb20gJy4uLy4uL3BvcG92ZXIvcG9wb3Zlci1yZWYnO1xuaW1wb3J0IHsgR3JpZFF1ZXJ5IH0gZnJvbSAnLi4vZ3JpZC1zdG9yZS9ncmlkLnF1ZXJ5JztcbmltcG9ydCB7IG1lcmdlLCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIHBhaXJ3aXNlLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgZGlmZmVyZW5jZSwgaXNBcnJheVZhbHVlc0VxdWFsLCB1bmlxQnkgfSBmcm9tICcuLi8uLi91dGlscy9hcnJheSc7XG5pbXBvcnQgeyBpc0VtcHR5LCBpc05pbCwgaXNPYmplY3QsIGlzU3RyaW5nIH0gZnJvbSAnLi4vLi4vdXRpbHMvdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBHcmlkU2VydmljZSB9IGZyb20gJy4uL2dyaWQtc3RvcmUvZ3JpZC5zZXJ2aWNlJztcbmltcG9ydCB7IE9wZXJhdG9yVHlwZXMgfSBmcm9tICcuLi8uLi9vcGVyYXRvci10b2dnbGVyL29wZXJhdG9yLXRvZ2dsZXIudHlwZXMnO1xuaW1wb3J0IHsgRGF0b1RyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cmFuc2xhdGUuc2VydmljZSc7XG5pbXBvcnQgeyB2YWxpZGF0ZUZpbHRlciB9IGZyb20gJy4vZmlsdGVyLXZhbGlkYXRvcic7XG5pbXBvcnQgeyBEYXRvR3JpZENvbHVtbkRlZiwgRGF0b0dyaWRHZXRSb3dzUGFyYW1zIH0gZnJvbSAnLi4vZ3JpZC9ncmlkLXYyLnR5cGVzJztcbmltcG9ydCB7IHVudGlsRGVzdHJveWVkIH0gZnJvbSAnbmd4LXRha2UtdW50aWwtZGVzdHJveSc7XG5pbXBvcnQgeyBEYXRvQ29sdW1uTWVudURhdGEgfSBmcm9tICcuLi9ncmlkLWNvbHVtbi1oZWFkZXIvZ3JpZC1jb2x1bW4taGVhZGVyLnR5cGVzJztcbmltcG9ydCB7IENvbHVtbiwgQ29sdW1uR3JvdXAsIEdyaWRBcGksIFJvd05vZGUgfSBmcm9tICdhZy1ncmlkLWNvbW11bml0eSc7XG5pbXBvcnQgeyBEYXRlUmFuZ2UgfSBmcm9tICcuLi8uLi9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci50eXBlcyc7XG5pbXBvcnQgeyBjdXJyeSB9IGZyb20gJy4uLy4uL3V0aWxzL2Z1bmN0aW9uJztcbmltcG9ydCB7IFNvcnRMYWJlbFR5cGUgfSBmcm9tICcuLi8uLi9waXBlcy9zZWFyY2gtcmVzdWx0cy5waXBlJztcbmltcG9ydCB7IEhvdEtleUNvbmZpZyB9IGZyb20gJy4uLy4uL2hvdGtleXMvaG90a2V5LnR5cGVzJztcbmltcG9ydCB7IGZvcm1hdEtleXMgfSBmcm9tICcuLi8uLi9ob3RrZXlzL2hvdGtleXMtZm9ybWF0dGVyJztcbmltcG9ydCB7IGdldENvbEZpZWxkIH0gZnJvbSAnLi4vZ3JpZC1zdG9yZS91dGlsJztcblxuY29uc3QgbWFwVG9WYWx1ZSA9ICh7IHZhbHVlIH0pID0+IHZhbHVlO1xuY29uc3QgbWFwVG9MaXN0SXRlbSA9IHZhbCA9PiAoeyBpZDogdmFsLCBsYWJlbDogaXNOaWwodmFsKSA/IGAoRW1wdHkpYCA6IGAke3ZhbH1gLnRyaW0oKSwgdmFsdWU6IHZhbCB9KTtcbmNvbnN0IG1hcFRvTGlzdEl0ZW1XaXRoRm9ybWF0dGVkID0gKHsgdmFsdWUsIGZvcm1hdHRlZFZhbHVlIH0sIGtleT8pID0+ICh7XG4gIGlkOiBrZXkgJiYgdmFsdWUgPyB2YWx1ZVtrZXldIDogdmFsdWUsXG4gIGxhYmVsOiBpc05pbChmb3JtYXR0ZWRWYWx1ZSkgPyBgKEVtcHR5KWAgOiBgJHtrZXkgPyBmb3JtYXR0ZWRWYWx1ZVtrZXldIDogZm9ybWF0dGVkVmFsdWV9YC50cmltKCksXG4gIHZhbHVlOiBrZXkgJiYgdmFsdWUgPyB2YWx1ZVtrZXldIDogdmFsdWVcbn0pO1xuXG50eXBlIENvbmRpdGlvbnMgPSB7XG4gIHR5cGU6IHtcbiAgICBvcGVyYW5kOiBFeGNsdWRlPERhdG9GaWx0ZXJDb25kaXRpb25zLCBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JTl9MSVNUIHwgRGF0b0ZpbHRlckNvbmRpdGlvbnMuTk9UX0lOX0xJU1Q+O1xuICB9O1xuICB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyO1xuICByYW5nZUVuZDogc3RyaW5nIHwgbnVtYmVyO1xufVtdO1xuXG50eXBlIENvbmRpdGlvbk9wdGlvbiA9IHsgaWQ6IG51bWJlcjsgbGFiZWw6IHN0cmluZzsgb3BlcmFuZDogRGF0b0ZpbHRlckNvbmRpdGlvbnMgfTtcblxudHlwZSBWYWx1ZUFuZEZvcm1hdHRlZFZhbHVlID0geyB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyOyBmb3JtYXR0ZWRWYWx1ZTogc3RyaW5nIHwgbnVtYmVyIH07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2RhdG8tZ3JpZC1maWx0ZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZ3JpZC1maWx0ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9ncmlkLWZpbHRlci5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBEYXRvR3JpZEZpbHRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIGdyaWRGaWx0ZXJUeXBlcyA9IERhdG9HcmlkRmlsdGVyVHlwZXM7XG4gIGZpbHRlclR5cGU6IERhdG9HcmlkRmlsdGVyVHlwZXM7XG4gIGNvbHVtblZhbHVlczogKHN0cmluZyB8IG51bWJlcilbXSA9IFtdO1xuICBsaXN0T3B0aW9uczogTGlzdEl0ZW1bXSA9IFtdO1xuICBjb25kaXRpb25hbEZpbHRlck9wdGlvbnM6IENvbmRpdGlvbk9wdGlvbltdO1xuICBoYXNGaWx0ZXIkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBmaWx0ZXJGb3JtOiBGb3JtR3JvdXA7XG4gIGZpbHRlclNlY3Rpb25zOiB7IFtEYXRvR3JpZEZpbHRlclNlY3Rpb25zLkJ5X1ZhbHVlXT86IGJvb2xlYW47IFtEYXRvR3JpZEZpbHRlclNlY3Rpb25zLkNvbmRpdGlvbmFsXT86IGJvb2xlYW4gfSA9IHtcbiAgICBbRGF0b0dyaWRGaWx0ZXJTZWN0aW9ucy5CeV9WYWx1ZV06IHRydWUsXG4gICAgW0RhdG9HcmlkRmlsdGVyU2VjdGlvbnMuQ29uZGl0aW9uYWxdOiB0cnVlXG4gIH07XG4gIHJhbmdlT3BlcmFuZCA9IERhdG9GaWx0ZXJDb25kaXRpb25zLklOX1JBTkdFO1xuICBsaXN0TGFiZWxUeXBlOiBTb3J0TGFiZWxUeXBlO1xuICBsaXN0U29ydEJ5S2V5OiBzdHJpbmc7XG4gIGlzQ2xpZW50U2lkZUdyaWQgPSBmYWxzZTtcbiAgbGlzdFNlYXJjaENvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcbiAgbG9hZGluZ0xpc3QgPSBmYWxzZTtcbiAgc2VydmVyU2VhcmNoRXJyb3JlZCA9IGZhbHNlO1xuICBhcHBseUhvdEtleUNvbmZpZzogSG90S2V5Q29uZmlnID0ge1xuICAgIGtleXM6ICdtZXRhLmVudGVyJyxcbiAgICBoYW5kbGVyOiAoKSA9PiB0aGlzLmNsb3NlUG9wVXAoKSxcbiAgICBkZXNjcmlwdGlvbjogJ2NvcmUuYXBwbHktZmlsdGVycydcbiAgfTtcbiAgaG90S2V5VG9vbHRpcCA9IGZvcm1hdEtleXModGhpcy5hcHBseUhvdEtleUNvbmZpZy5rZXlzKTtcbiAgYWN0aXZlQWNjb3JkaW9uSWQgPSAwO1xuICBrZWVwUHJlZGVmaW5lZExpc3RPcmlnaW5hbE9yZGVyOiBib29sZWFuO1xuXG4gIHByaXZhdGUgZ3JpZFF1ZXJ5OiBHcmlkUXVlcnk7XG4gIHByaXZhdGUgZ3JpZFNlcnZpY2U6IEdyaWRTZXJ2aWNlO1xuICBwcml2YXRlIGNvbEZpZWxkOiBzdHJpbmc7XG4gIHByaXZhdGUgZXhjbHVkZWRWYWx1ZXMgPSBuZXcgU2V0PHN0cmluZyB8IG51bWJlcj4oKTtcbiAgcHJpdmF0ZSBieVZhbHVlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgcGl2b3RDb2x1bW46IENvbHVtbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGhvc3Q6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBwb3BvdmVyOiBQb3BvdmVyUmVmPERhdG9Db2x1bW5NZW51RGF0YT4sXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IERhdG9UcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHt9XG5cbiAgZ2V0IGJ5VmFsdWVDb250cm9sKCk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyRm9ybS5nZXQoJ2J5VmFsdWUnKTtcbiAgfVxuXG4gIGdldCBjb25kaXRpb25zQ29udHJvbHMoKTogQWJzdHJhY3RDb250cm9sW10ge1xuICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnMuY29udHJvbHM7XG4gIH1cblxuICBnZXQgY29uZGl0aW9uc09wZXJhdG9yKCk6IE9wZXJhdG9yVHlwZXMge1xuICAgIHJldHVybiB0aGlzLmZpbHRlckZvcm0uZ2V0KCdjb25kaXRpb25hbC5vcGVyYXRvcicpLnZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZGVmYXVsdE9wZXJhbmQoKTogRm9ybUdyb3VwIHtcbiAgICByZXR1cm4gdGhpcy5mYi5ncm91cCh7XG4gICAgICB0eXBlOiBbdGhpcy5jb25kaXRpb25hbEZpbHRlck9wdGlvbnNbMF1dLFxuICAgICAgdmFsdWU6IFtudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIHJhbmdlRW5kOiBbbnVsbF1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGlzUHJlZGVmaW5lZExpc3RJdGVtcygpIHtcbiAgICBjb25zdCB7IGZpbHRlcnNDb25maWcgPSB7fSB9ID0gdGhpcy5jb2xEZWY7XG4gICAgcmV0dXJuIGZpbHRlcnNDb25maWcucHJlZGVmaW5lZExpc3RWYWx1ZXMgJiYgdHlwZW9mIGZpbHRlcnNDb25maWcucHJlZGVmaW5lZExpc3RWYWx1ZXNbMF0gPT09ICdvYmplY3QnO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZGVmYXVsdENvbmRpdGlvbmFsKCkge1xuICAgIHJldHVybiB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIG9wZXJhdG9yOiBbT3BlcmF0b3JUeXBlcy5BTkRdLFxuICAgICAgY29uZGl0aW9uczogdGhpcy5mYi5hcnJheShbdGhpcy5kZWZhdWx0T3BlcmFuZF0pXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldCBkZWZhdWx0QnlWYWx1ZSgpIHtcbiAgICByZXR1cm4gW3RoaXMuY29sdW1uVmFsdWVzXTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGRlZmF1bHRGb3JtKCk6IEZvcm1Hcm91cCB7XG4gICAgY29uc3QgZmlsdGVyczogeyBieVZhbHVlPzsgY29uZGl0aW9uYWw/IH0gPSB7fTtcbiAgICBpZiAodGhpcy5maWx0ZXJTZWN0aW9ucy5CeV9WYWx1ZSkge1xuICAgICAgZmlsdGVycy5ieVZhbHVlID0gdGhpcy5kZWZhdWx0QnlWYWx1ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZmlsdGVyU2VjdGlvbnMuQ29uZGl0aW9uYWwpIHtcbiAgICAgIGZpbHRlcnMuY29uZGl0aW9uYWwgPSB0aGlzLmRlZmF1bHRDb25kaXRpb25hbDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZmIuZ3JvdXAoZmlsdGVycyk7XG4gIH1cblxuICBwcml2YXRlIGdldCBjb25kaXRpb25zKCk6IEZvcm1BcnJheSB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyRm9ybS5nZXQoJ2NvbmRpdGlvbmFsLmNvbmRpdGlvbnMnKSBhcyBGb3JtQXJyYXk7XG4gIH1cblxuICBwcml2YXRlIGdldCBjb2xGaWx0ZXIoKTogRGF0b0dyaWRGaWx0ZXIge1xuICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuZ3JpZFF1ZXJ5LmdldEZpbHRlcigpW3RoaXMuY29sRmllbGRdO1xuXG4gICAgcmV0dXJuIGZpbHRlciAmJiBpc0FycmF5VmFsdWVzRXF1YWwodGhpcy5waXZvdEtleXMsIGZpbHRlci5waXZvdEtleXMpID8gZmlsdGVyIDogbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGNvbERlZigpOiBEYXRvR3JpZENvbHVtbkRlZiB7XG4gICAgcmV0dXJuIHRoaXMucG9wb3Zlci5kYXRhLmNvbHVtbi5nZXRDb2xEZWYoKSBhcyBEYXRvR3JpZENvbHVtbkRlZjtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHBpdm90S2V5cygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuY29sRGVmLnBpdm90S2V5cyB8fCBbXTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGNvbnN0IHsgZ3JpZFNlcnZpY2UsIGdyaWRRdWVyeSB9ID0gdGhpcy5wb3BvdmVyLmRhdGE7XG4gICAgY29uc3QgeyBmaWx0ZXIsIGZpbHRlcnNDb25maWcgPSB7fSwgcGl2b3RWYWx1ZUNvbHVtbiwgcGl2b3RLZXlzIH0gPSB0aGlzLmNvbERlZjtcblxuICAgIHRoaXMuY29sRmllbGQgPSBnZXRDb2xGaWVsZCh0aGlzLmNvbERlZik7XG4gICAgdGhpcy5waXZvdENvbHVtbiA9IGdyaWRRdWVyeS5hcGkuY29sdW1ucy5nZXRTZWNvbmRhcnlQaXZvdENvbHVtbihwaXZvdEtleXMsIHBpdm90VmFsdWVDb2x1bW4pO1xuXG4gICAgaWYgKGZpbHRlcnNDb25maWcuc2VjdGlvbnMpIHtcbiAgICAgIHRoaXMuZmlsdGVyU2VjdGlvbnMgPSB7IFtmaWx0ZXJzQ29uZmlnLnNlY3Rpb25zXTogdHJ1ZSB9O1xuICAgIH1cbiAgICB0aGlzLmtlZXBQcmVkZWZpbmVkTGlzdE9yaWdpbmFsT3JkZXIgPVxuICAgICAgZmlsdGVyc0NvbmZpZy5rZWVwUHJlZGVmaW5lZExpc3RPcmlnaW5hbE9yZGVyICYmICFpc0VtcHR5KGZpbHRlcnNDb25maWcucHJlZGVmaW5lZExpc3RWYWx1ZXMpO1xuICAgIGNvbnN0IGZpbHRlck9wdGlvbnMgPSBEYXRvR3JpZEZpbHRlck9wdGlvbnNNYXBbZmlsdGVyIGFzIHN0cmluZ107XG4gICAgdGhpcy5maWx0ZXJUeXBlID0gZmlsdGVyT3B0aW9ucyA/IChmaWx0ZXIgYXMgRGF0b0dyaWRGaWx0ZXJUeXBlcykgOiBEYXRvR3JpZEZpbHRlclR5cGVzLlN0cmluZztcbiAgICB0aGlzLmxpc3RMYWJlbFR5cGUgPSB0aGlzLmZpbHRlclR5cGUudG9Mb3dlckNhc2UoKSBhcyBTb3J0TGFiZWxUeXBlO1xuICAgIHRoaXMubGlzdFNvcnRCeUtleSA9IHRoaXMuZmlsdGVyVHlwZSA9PT0gRGF0b0dyaWRGaWx0ZXJUeXBlcy5OdW1iZXIgJiYgdGhpcy5jb2xEZWYudmFsdWVGb3JtYXR0ZXIgPyAnaWQnIDogJ2xhYmVsJztcbiAgICB0aGlzLmdyaWRRdWVyeSA9IGdyaWRRdWVyeTtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlID0gZ3JpZFNlcnZpY2U7XG4gICAgdGhpcy5oYXNGaWx0ZXIkID0gdGhpcy5ncmlkUXVlcnlcbiAgICAgIC5zZWxlY3Qoc3RhdGUgPT4gc3RhdGUuc2V0dGluZ3MuZmlsdGVyW3RoaXMuY29sRmllbGRdKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcChmaWx0ZXIgPT4ge1xuICAgICAgICAgIHJldHVybiAhaXNOaWwoZmlsdGVyKSAmJiBpc0FycmF5VmFsdWVzRXF1YWwoZmlsdGVyLnBpdm90S2V5cywgdGhpcy5waXZvdEtleXMpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICBpZiAodGhpcy5maWx0ZXJTZWN0aW9ucy5Db25kaXRpb25hbCkge1xuICAgICAgbGV0IGZpbHRlckNvbmRpdGlvbnM6IERhdG9GaWx0ZXJDb25kaXRpb25zW10gPSBmaWx0ZXJPcHRpb25zIHx8IERhdG9HcmlkU3RyaW5nRmlsdGVyT3B0aW9ucztcbiAgICAgIGlmIChmaWx0ZXJzQ29uZmlnLnNob3dFbXB0eUNvbmRpdGlvbnMpIHtcbiAgICAgICAgZmlsdGVyQ29uZGl0aW9ucyA9IFsuLi5maWx0ZXJDb25kaXRpb25zLCBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JU19FTVBUWSwgRGF0b0ZpbHRlckNvbmRpdGlvbnMuTk9UX0VNUFRZXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY29uZGl0aW9uYWxGaWx0ZXJPcHRpb25zID0gZmlsdGVyQ29uZGl0aW9ucy5tYXAoKG9wZXJhbmQsIGlkKSA9PiAoe1xuICAgICAgICBpZCxcbiAgICAgICAgb3BlcmFuZCxcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLnRyYW5zZm9ybShgY29yZS4ke3RoaXMuZmlsdGVyVHlwZSA9PT0gRGF0b0dyaWRGaWx0ZXJUeXBlcy5EYXRlID8gJ0RBVEVfJyA6ICcnfSR7b3BlcmFuZH1gKVxuICAgICAgfSkpO1xuICAgIH1cbiAgICBsZXQgb3JpZ2luYWxPcHRpb25zO1xuICAgIGlmICh0aGlzLmZpbHRlclNlY3Rpb25zLkJ5X1ZhbHVlKSB7XG4gICAgICBjb25zdCB7IHByZWRlZmluZWRMaXN0VmFsdWVzIH0gPSBmaWx0ZXJzQ29uZmlnO1xuICAgICAgdGhpcy5pc0NsaWVudFNpZGVHcmlkID0gIWlzTmlsKHByZWRlZmluZWRMaXN0VmFsdWVzKSB8fCAhZ3JpZFF1ZXJ5LmlzU2VydmVyU2lkZTtcbiAgICAgIGlmICghcHJlZGVmaW5lZExpc3RWYWx1ZXMgfHwgdGhpcy5pc1N0cmluZ0FycmF5KHByZWRlZmluZWRMaXN0VmFsdWVzKSkge1xuICAgICAgICBjb25zdCByYXdWYWx1ZXMgPSBwcmVkZWZpbmVkTGlzdFZhbHVlcyBhcyBzdHJpbmdbXTtcbiAgICAgICAgaWYgKHJhd1ZhbHVlcykge1xuICAgICAgICAgIHRoaXMuY29sdW1uVmFsdWVzID0gcmF3VmFsdWVzO1xuICAgICAgICAgIHRoaXMubGlzdE9wdGlvbnMgPSByYXdWYWx1ZXMubWFwKG1hcFRvTGlzdEl0ZW0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGNvbHVtblZhbHVlcyA9IHRoaXMuZ2V0Q29sdW1uVmFsdWVzKCk7XG4gICAgICAgICAgdGhpcy5jb2x1bW5WYWx1ZXMgPSBjb2x1bW5WYWx1ZXMubWFwKCh7IHZhbHVlIH0pID0+IHtcbiAgICAgICAgICAgIHJldHVybiAhaXNOaWwodGhpcy5waXZvdENvbHVtbikgJiYgdmFsdWUgPyB2YWx1ZVt0aGlzLmNvbEZpZWxkXSA6IHZhbHVlO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMubGlzdE9wdGlvbnMgPSBjb2x1bW5WYWx1ZXMubWFwKGNvbFZhbHVlID0+XG4gICAgICAgICAgICBtYXBUb0xpc3RJdGVtV2l0aEZvcm1hdHRlZChjb2xWYWx1ZSwgIWlzTmlsKHRoaXMucGl2b3RDb2x1bW4pICYmIHRoaXMuY29sRmllbGQpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcmF3VmFsdWVzID0gcHJlZGVmaW5lZExpc3RWYWx1ZXMgYXMgTGlzdEl0ZW1bXTtcbiAgICAgICAgdGhpcy5jb2x1bW5WYWx1ZXMgPSByYXdWYWx1ZXMubWFwKG1hcFRvVmFsdWUpO1xuICAgICAgICB0aGlzLmxpc3RPcHRpb25zID0gcmF3VmFsdWVzO1xuICAgICAgfVxuICAgICAgb3JpZ2luYWxPcHRpb25zID0gdGhpcy5saXN0T3B0aW9ucztcbiAgICAgIGlmICghdGhpcy5pc0NsaWVudFNpZGVHcmlkKSB7XG4gICAgICAgIHRoaXMubGlzdFNlYXJjaENvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUodW50aWxEZXN0cm95ZWQodGhpcykpLnN1YnNjcmliZSgoc2VhcmNoVGVybTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZXJ2ZXJTZWFyY2hFcnJvcmVkID0gZmFsc2U7XG4gICAgICAgICAgaWYgKHNlYXJjaFRlcm0udHJpbSgpID09PSAnJykge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nTGlzdCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5saXN0T3B0aW9ucyA9IG9yaWdpbmFsT3B0aW9ucztcbiAgICAgICAgICAgIHRoaXMucGF0Y2hBbmRSZVJlZ2lzdGVyKHRoaXMuY29sdW1uVmFsdWVzKTtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5nZXRWYWx1ZXNGcm9tU2VydmVyKHNlYXJjaFRlcm0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5pbml0Rm9ybSgpO1xuICB9XG5cbiAgY2xvc2VQb3BVcCgpIHtcbiAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xuICAgIHRoaXMucG9wb3Zlci5jbG9zZSgpO1xuICB9XG5cbiAgYXBwbHlGaWx0ZXJzKCkge1xuICAgIHRoaXMuZmlsdGVyRm9ybS52YWxpZCAmJiB0aGlzLmZpbHRlckZvcm0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIGlmICh0aGlzLmZpbHRlckZvcm0uZGlydHkgJiYgKHRoaXMuZmlsdGVyRm9ybS52YWxpZCB8fCB0aGlzLmZpbHRlckZvcm0uZ2V0KCdjb25kaXRpb25hbCcpLnByaXN0aW5lKSkge1xuICAgICAgY29uc3QgeyBjb2x1bW4gfSA9IHRoaXMucG9wb3Zlci5kYXRhO1xuICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy5idWlsZEZpbHRlcigpO1xuICAgICAgaXNFbXB0eShmaWx0ZXIpXG4gICAgICAgID8gdGhpcy5ncmlkU2VydmljZS5jbGVhckNvbHVtbkZpbHRlcih0aGlzLmNvbEZpZWxkKVxuICAgICAgICA6IHRoaXMuZ3JpZFNlcnZpY2Uuc2V0Q29sdW1uRmlsdGVyKGNvbHVtbiwgZmlsdGVyKTtcblxuICAgICAgdGhpcy5ncmlkU2VydmljZS5ub3RpZnlGaWx0ZXJVcGRhdGUoKTtcbiAgICB9XG4gIH1cblxuICBjbGVhckZpbHRlcnMoKSB7XG4gICAgdGhpcy5ncmlkU2VydmljZS5jbGVhckNvbHVtbkZpbHRlcih0aGlzLmNvbEZpZWxkKTtcbiAgICB0aGlzLnJlc2V0Rm9ybSgpO1xuICB9XG5cbiAgcmVtb3ZlQ29uZGl0aW9uKGluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLmNvbmRpdGlvbnMucmVtb3ZlQXQoaW5kZXgpO1xuICAgIHRoaXMuZmlsdGVyRm9ybS5tYXJrQXNEaXJ0eSgpO1xuICB9XG5cbiAgYWRkQ29uZGl0aW9uKCkge1xuICAgIHRoaXMuZmlsdGVyRm9ybS5tYXJrQXNQcmlzdGluZSgpO1xuICAgIHRoaXMuY29uZGl0aW9ucy5wdXNoKHRoaXMuZGVmYXVsdE9wZXJhbmQpO1xuICB9XG5cbiAgZ2V0T3BlcmFuZFR5cGUoaTogbnVtYmVyKSB7XG4gICAgY29uc3QgY29uZGl0aW9uVHlwZSA9IHRoaXMuY29uZGl0aW9ucy5hdChpKS52YWx1ZS50eXBlO1xuICAgIHJldHVybiBjb25kaXRpb25UeXBlID8gY29uZGl0aW9uVHlwZS5vcGVyYW5kIDogbnVsbDtcbiAgfVxuXG4gIGlzQ29uZGl0aW9uYWxFbXB0eShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBib29sZWFuIHtcbiAgICBjb25zdCBvcGVyYW5kOiBEYXRvRmlsdGVyQ29uZGl0aW9ucyA9XG4gICAgICBjb250cm9sICYmIGNvbnRyb2wudmFsdWUgJiYgY29udHJvbC52YWx1ZS50eXBlID8gY29udHJvbC52YWx1ZS50eXBlLm9wZXJhbmQgOiBudWxsO1xuICAgIHJldHVybiB0aGlzLmlzRW1wdHlPcGVyYW5kKG9wZXJhbmQpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5ieVZhbHVlU3Vic2NyaXB0aW9uICYmIHRoaXMuYnlWYWx1ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbHRlciB0eXBlOiBcIkV4Y2x1ZGVcIlxuICAgKiBTZWxlY3RlZCB2YWx1ZXM6IEEsIEMsIERcbiAgICogQWxsIGxpc3Q6IEEsIEIsIEMsIERcbiAgICogUmVzdWx0OiBCXG4gICAqIEBwYXJhbSBpbmNsdWRlZEFyciAtVGhlIGxpc3Qgb2YgdmFsdWVzIHRvIGluY2x1ZGVcbiAgICogQHBhcmFtIGFzTGlzdEl0ZW0gLUluZGljYXRlcyBpZiB0aGUgcmVzcG9uc2UgbmVlZHMgdG8gYmUgYXMgc3RyaW5nIG9yIGFzIExpc3RJdGVtXG4gICAqL1xuICBwcml2YXRlIGdldEJ5VmFsdWVFeGNsdWRlVmFsdWVzKGluY2x1ZGVkQXJyOiAoTGlzdEl0ZW0gfCBzdHJpbmcgfCBudW1iZXIpW10sIGFzTGlzdEl0ZW06IHRydWUpOiBMaXN0SXRlbVtdO1xuICBwcml2YXRlIGdldEJ5VmFsdWVFeGNsdWRlVmFsdWVzKGluY2x1ZGVkQXJyOiAoTGlzdEl0ZW0gfCBzdHJpbmcgfCBudW1iZXIpW10pOiAoc3RyaW5nIHwgbnVtYmVyKVtdO1xuICBwcml2YXRlIGdldEJ5VmFsdWVFeGNsdWRlVmFsdWVzKFxuICAgIGluY2x1ZGVkQXJyOiAoTGlzdEl0ZW0gfCBzdHJpbmcgfCBudW1iZXIpW10sXG4gICAgYXNMaXN0SXRlbSA9IGZhbHNlXG4gICk6IChzdHJpbmcgfCBudW1iZXIpW10gfCBMaXN0SXRlbVtdIHtcbiAgICBsZXQgaW5jbHVkZWRTZXQ7XG4gICAgaWYgKHRoaXMuaXNQcmVkZWZpbmVkTGlzdEl0ZW1zKSB7XG4gICAgICBjb25zdCBwcmVkZWZpbmVkTGlzdCA9IHRoaXMuY29sRGVmLmZpbHRlcnNDb25maWcucHJlZGVmaW5lZExpc3RWYWx1ZXMgYXMgTGlzdEl0ZW1bXTtcbiAgICAgIGluY2x1ZGVkU2V0ID0gbmV3IFNldChcbiAgICAgICAgaW5jbHVkZWRBcnIubWFwKHZhbCA9PiB7XG4gICAgICAgICAgY29uc3QgaXRlbSA9IHByZWRlZmluZWRMaXN0LmZpbmQoKHsgdmFsdWUgfSkgPT4gdmFsdWUgPT09IHZhbCk7XG4gICAgICAgICAgcmV0dXJuIGl0ZW0uaWQ7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbmNsdWRlZFNldCA9IG5ldyBTZXQoaW5jbHVkZWRBcnIubWFwKHZhbCA9PiAoaXNPYmplY3Q8TGlzdEl0ZW0+KHZhbCkgPyB2YWwudmFsdWUgOiB2YWwpKSk7XG4gICAgfVxuICAgIGlmIChhc0xpc3RJdGVtKSB7XG4gICAgICByZXR1cm4gdGhpcy5saXN0T3B0aW9ucy5maWx0ZXIoKHsgdmFsdWUgfSkgPT4gIWluY2x1ZGVkU2V0Lmhhcyh2YWx1ZSkpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jb2x1bW5WYWx1ZXMuZmlsdGVyKHZhbHVlID0+ICFpbmNsdWRlZFNldC5oYXModmFsdWUpKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRGaWx0ZXIoKTogRGF0b0dyaWRGaWx0ZXIge1xuICAgIGNvbnN0IHsgYnlWYWx1ZSwgY29uZGl0aW9uYWwgfSA9IHRoaXMuZmlsdGVyRm9ybS52YWx1ZTtcbiAgICBjb25zdCBmaWx0ZXI6IERhdG9HcmlkRmlsdGVyID0geyBjb2xJZDogdGhpcy5jb2xEZWYuY29sSWQgfTtcblxuICAgIGZpbHRlci5waXZvdEtleXMgPSB0aGlzLnBpdm90S2V5cztcblxuICAgIGlmICh0aGlzLnBpdm90Q29sdW1uKSB7XG4gICAgICBmaWx0ZXIucGl2b3RGaWVsZHNNYXAgPSB0aGlzLmdldFBpdm90RmllbGRzKHRoaXMucGl2b3RDb2x1bW4uZ2V0UGFyZW50KCkpLnJlZHVjZSgoZmllbGRNYXAsIGZpZWxkLCBpbmRleCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5waXZvdEtleXNbaW5kZXhdKSB7XG4gICAgICAgICAgZmllbGRNYXBbZmllbGRdID0gdGhpcy5waXZvdEtleXNbaW5kZXhdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZpZWxkTWFwO1xuICAgICAgfSwge30pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmZpbHRlclNlY3Rpb25zLkNvbmRpdGlvbmFsKSB7XG4gICAgICB0aGlzLnNldENvbmRpdGlvbmFsRmlsdGVyKGZpbHRlciwgY29uZGl0aW9uYWwpO1xuICAgIH1cbiAgICBpZiAodGhpcy5maWx0ZXJTZWN0aW9ucy5CeV9WYWx1ZSkge1xuICAgICAgdGhpcy5zZXRCeVZhbHVlRmlsdGVyKGZpbHRlciwgYnlWYWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbHRlcjtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdEZvcm0oKSB7XG4gICAgY29uc3QgZmlsdGVyVmFsdWUgPSB0aGlzLmNvbEZpbHRlcjtcbiAgICB0aGlzLmZpbHRlckZvcm0gPSBmaWx0ZXJWYWx1ZSA/IHRoaXMuYnVpbGRGb3JtRnJvbUZpbHRlcihmaWx0ZXJWYWx1ZSkgOiB0aGlzLmRlZmF1bHRGb3JtO1xuICAgIHRoaXMucmVnaXN0ZXJPcGVyYW5kTGlzdGVuZXJzKCk7XG4gICAgaWYgKCF0aGlzLmlzQ2xpZW50U2lkZUdyaWQgJiYgdGhpcy5maWx0ZXJTZWN0aW9ucy5CeV9WYWx1ZSkge1xuICAgICAgdGhpcy5yZWdpc3RlckJ5VmFsdWVMaXN0ZW5lcigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCB0aGUgZmlsdGVyIHZpZXcgZnJvbSBhIGdpdmVuIGZpbHRlclxuICAgKi9cbiAgcHJpdmF0ZSBidWlsZEZvcm1Gcm9tRmlsdGVyKGZpbHRlcjogRGF0b0dyaWRGaWx0ZXIpOiBGb3JtR3JvdXAge1xuICAgIGNvbnN0IGZpbHRlckdyb3VwID0ge307XG4gICAgaWYgKHRoaXMuZmlsdGVyU2VjdGlvbnMuQ29uZGl0aW9uYWwpIHtcbiAgICAgIGZpbHRlckdyb3VwWydjb25kaXRpb25hbCddID0gdGhpcy5idWlsZENvbmRpdGlvbmFsRmlsdGVyKGZpbHRlci5jb25kaXRpb25hbCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmZpbHRlclNlY3Rpb25zLkJ5X1ZhbHVlKSB7XG4gICAgICBmaWx0ZXJHcm91cFsnYnlWYWx1ZSddID0gdGhpcy5idWlsZEJ5VmFsdWVGaWx0ZXIoZmlsdGVyLmJ5VmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5mYi5ncm91cChmaWx0ZXJHcm91cCk7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgdGhlIGZpbHRlciB2aWV3XG4gICAqL1xuICBwcml2YXRlIHJlc2V0Rm9ybSgpIHtcbiAgICB0aGlzLmZpbHRlckZvcm0uc2V0RXJyb3JzKG51bGwpO1xuICAgIGxldCBvcmlnaW5hbFN0YXRlID0ge307XG4gICAgaWYgKHRoaXMuZmlsdGVyU2VjdGlvbnMuQnlfVmFsdWUpIHtcbiAgICAgIG9yaWdpbmFsU3RhdGUgPSB7IGJ5VmFsdWU6IHRoaXMuY29sdW1uVmFsdWVzIH07XG4gICAgfVxuICAgIGlmICh0aGlzLmZpbHRlclNlY3Rpb25zLkNvbmRpdGlvbmFsKSB7XG4gICAgICBvcmlnaW5hbFN0YXRlID0ge1xuICAgICAgICAuLi5vcmlnaW5hbFN0YXRlLFxuICAgICAgICBjb25kaXRpb25hbDoge1xuICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvclR5cGVzLkFORCxcbiAgICAgICAgICBjb25kaXRpb25zOiBbeyB0eXBlOiB0aGlzLmNvbmRpdGlvbmFsRmlsdGVyT3B0aW9uc1swXSwgdmFsdWU6IG51bGwsIHJhbmdlRW5kOiBudWxsIH1dXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBjb25kaXRpb25hbCA9IHRoaXMuZmlsdGVyRm9ybS5jb250cm9scy5jb25kaXRpb25hbCBhcyBGb3JtR3JvdXA7XG4gICAgICBjb25kaXRpb25hbC5yZW1vdmVDb250cm9sKCdjb25kaXRpb25zJyk7XG4gICAgICBjb25kaXRpb25hbC5hZGRDb250cm9sKCdjb25kaXRpb25zJywgdGhpcy5mYi5hcnJheShbdGhpcy5kZWZhdWx0T3BlcmFuZF0pKTtcbiAgICB9XG4gICAgdGhpcy5maWx0ZXJGb3JtLnJlc2V0KG9yaWdpbmFsU3RhdGUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB0aGlzLmZpbHRlckZvcm0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbGwgdGhlIGNvbHVtbiB2YWx1ZXMgdG8gZGlzcGxheSBvbiB0aGUgbGlzdC5cbiAgICogMS4gSXRlcmF0ZSBvdmVyIHRoZSByb3dzIGFmdGVyIGZpbHRlcmluZyBhbmQgc29ydGluZyB3YXMgYXBwbGllZFxuICAgKiAyLiBTaW5jZSB3ZSBhbHNvIHdhbnQgdG8gc2hvdyB2YWx1ZXMgdGhhdCB3ZXJlIGZpbHRlcmVkIGJ5IHRoaXMgY29sdW1uIGZpbHRlciB3ZSBhcmUgaXRlcmF0aW5nIGFsbCB0aGUgcm93c1xuICAgKiAoYmVmb3JlIHRoZSBmaWx0ZXJpbmcpLCBmaW5kaW5nIHdoaWNoIHdlcmUgcmVtb3ZlZCBieSB0aGlzIGNvbHVtbidzIGZpbHRlciBhbmQgYWRkaW5nIHRoZW0gYmFjay5cbiAgICovXG4gIHByaXZhdGUgZ2V0Q29sdW1uVmFsdWVzKCk6IFZhbHVlQW5kRm9ybWF0dGVkVmFsdWVbXSB7XG4gICAgbGV0IHZhbHVlczogVmFsdWVBbmRGb3JtYXR0ZWRWYWx1ZVtdID0gW107XG4gICAgY29uc3QgZmlsdGVyVmFsdWUgPSB0aGlzLmNvbEZpbHRlcjtcbiAgICBjb25zdCBkaXNwbGF5ZWRSb3cgPSB7fTtcbiAgICBjb25zdCBieVZhbHVlVHlwZSA9IGZpbHRlclZhbHVlICYmIGZpbHRlclZhbHVlLmJ5VmFsdWUgJiYgZmlsdGVyVmFsdWUuYnlWYWx1ZS5jb25kaXRpb247XG4gICAgY29uc3QgYXBpID0gdGhpcy5ncmlkUXVlcnkuYXBpLmdyaWQ7XG4gICAgY29uc3QgZ2V0VmFsdWVDdXJyaWVkID0gY3VycnkodGhpcy5nZXRWYWx1ZUFuZEZvcm1hdHRlZFZhbHVlKSh0aGlzLmNvbEZpZWxkLCBhcGksIHRoaXMuY29sRGVmLnZhbHVlRm9ybWF0dGVyKTtcbiAgICAvKiogMS4gSXRlcmF0ZSBvdmVyIHRoZSByb3dzIGFmdGVyIGZpbHRlcmluZyBhbmQgc29ydGluZyB3YXMgYXBwbGllZCAqL1xuICAgIGlmICh0aGlzLmlzQ2xpZW50U2lkZUdyaWQpIHtcbiAgICAgIGFwaS5mb3JFYWNoTm9kZUFmdGVyRmlsdGVyQW5kU29ydChyb3cgPT4ge1xuICAgICAgICB2YWx1ZXMucHVzaChnZXRWYWx1ZUN1cnJpZWQocm93KSk7XG4gICAgICAgIGRpc3BsYXllZFJvd1tyb3cuaWRdID0gdHJ1ZTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvKiBXZSBvbmx5IGRpc3BsYXkgdGhlIGN1cnJlbnQgcGFnZSBpbiB0aGUgbGlzdCAqL1xuICAgICAgY29uc3QgcGFnZVNpemUgPSBhcGkucGFnaW5hdGlvbkdldFBhZ2VTaXplKCk7XG4gICAgICBjb25zdCBjdXJyZW50UGFnZSA9IGFwaS5wYWdpbmF0aW9uR2V0Q3VycmVudFBhZ2UoKTtcbiAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBwYWdlU2l6ZSAqIGN1cnJlbnRQYWdlO1xuICAgICAgY29uc3QgZW5kSW5kZXggPSBzdGFydEluZGV4ICsgcGFnZVNpemU7XG4gICAgICBhcGkuZm9yRWFjaE5vZGUocm93ID0+IHtcbiAgICAgICAgY29uc3QgeyByb3dJbmRleCB9ID0gcm93O1xuICAgICAgICBpZiAocm93SW5kZXggPj0gc3RhcnRJbmRleCAmJiByb3dJbmRleCA8IGVuZEluZGV4KSB7XG4gICAgICAgICAgdmFsdWVzLnB1c2goZ2V0VmFsdWVDdXJyaWVkKHJvdykpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogMi4gQWRkIGJhY2sgdmFsdWVzIHRoYXQgd2VyZSBmaWx0ZXJlZCBieSB0aGlzIGNvbHVtbiAqL1xuICAgIGlmIChieVZhbHVlVHlwZSkge1xuICAgICAgaWYgKGJ5VmFsdWVUeXBlID09PSBEYXRvRmlsdGVyQ29uZGl0aW9ucy5OT1RfSU5fTElTVCkge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSB0aGlzLmNvbERlZi52YWx1ZUZvcm1hdHRlciBhcyAocGFyYW1zOiBhbnkpID0+IHN0cmluZztcbiAgICAgICAgY29uc3QgY3VyckZpbHRlclZhbHVlcyA9IGZpbHRlclZhbHVlLmJ5VmFsdWUudmFsdWVzLm1hcCgodmFsdWU6IHN0cmluZyB8IG51bWJlcikgPT4ge1xuICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZFZhbHVlID0gZm9ybWF0dGVyID8gZm9ybWF0dGVyKHsgdmFsdWUgfSkgOiB2YWx1ZTtcbiAgICAgICAgICByZXR1cm4geyB2YWx1ZSwgZm9ybWF0dGVkVmFsdWUgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIHZhbHVlcyA9IHZhbHVlcy5jb25jYXQoY3VyckZpbHRlclZhbHVlcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB7IGNvbmRpdGlvbmFsIH0gPSB0aGlzLmNvbEZpbHRlcjtcbiAgICAgICAgY29uc3QgYWN0aXZlRmlsdGVycyA9IHtcbiAgICAgICAgICAuLi50aGlzLmdyaWRRdWVyeS5nZXRGaWx0ZXIoKSxcbiAgICAgICAgICBbdGhpcy5jb2xGaWVsZF06IHsgY29uZGl0aW9uYWwgfVxuICAgICAgICB9O1xuICAgICAgICBhcGkuZm9yRWFjaExlYWZOb2RlKHJvdyA9PiB7XG4gICAgICAgICAgaWYgKCFkaXNwbGF5ZWRSb3cuaGFzT3duUHJvcGVydHkocm93LmlkKSAmJiB2YWxpZGF0ZUZpbHRlcih7IHJvdywgYXBpIH0sIGFjdGl2ZUZpbHRlcnMpKSB7XG4gICAgICAgICAgICB2YWx1ZXMucHVzaChnZXRWYWx1ZUN1cnJpZWQocm93KSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuaXFCeSh2YWx1ZXMsICd2YWx1ZScpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRWYWx1ZUFuZEZvcm1hdHRlZFZhbHVlKFxuICAgIGZpZWxkOiBzdHJpbmcsXG4gICAgYXBpOiBHcmlkQXBpLFxuICAgIC8vIFRPRE86IGZvbGxvd3VwOiBodHRwczovL2FnLWdyaWQuemVuZGVzay5jb20vaGMvZW4tdXMvcmVxdWVzdHMvMTEwMTlcbiAgICBmb3JtYXR0ZXI6IChwYXJhbXM6IGFueSkgPT4gc3RyaW5nLFxuICAgIHJvdzogUm93Tm9kZVxuICApOiBWYWx1ZUFuZEZvcm1hdHRlZFZhbHVlIHtcbiAgICBjb25zdCB2YWx1ZSA9IGFwaS5nZXRWYWx1ZShmaWVsZCwgcm93KTtcbiAgICAvLyBUT0RPOiBmb2xsb3d1cDogaHR0cHM6Ly9hZy1ncmlkLnplbmRlc2suY29tL2hjL2VuLXVzL3JlcXVlc3RzLzEwOTYzP3BhZ2U9MVxuICAgIHJldHVybiB7IHZhbHVlLCBmb3JtYXR0ZWRWYWx1ZTogZm9ybWF0dGVyID8gZm9ybWF0dGVyKHsgdmFsdWUgfSBhcyBhbnkpIDogdmFsdWUgfTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q29uZGl0aW9uYWxGaWx0ZXIoXG4gICAgZmlsdGVyOiBEYXRvR3JpZEZpbHRlcixcbiAgICB7IG9wZXJhdG9yLCBjb25kaXRpb25zIH06IHsgb3BlcmF0b3I6IE9wZXJhdG9yVHlwZXM7IGNvbmRpdGlvbnM6IENvbmRpdGlvbnMgfVxuICApIHtcbiAgICBjb25zdCB2YWxpZENvbmRpdGlvbnMgPSBjb25kaXRpb25zLmZpbHRlcigoeyB2YWx1ZSwgdHlwZSB9KSA9PiAhaXNOaWwodmFsdWUpIHx8IHRoaXMuaXNFbXB0eU9wZXJhbmQodHlwZS5vcGVyYW5kKSk7XG4gICAgaWYgKHZhbGlkQ29uZGl0aW9ucy5sZW5ndGgpIHtcbiAgICAgIGZpbHRlci5jb25kaXRpb25hbCA9IHtcbiAgICAgICAgdHlwZTogKHRoaXMuY29sRGVmLmZpbHRlciBhcyBEYXRvR3JpZEZpbHRlclR5cGVzKSB8fCBEYXRvR3JpZEZpbHRlclR5cGVzLlN0cmluZyxcbiAgICAgICAgb3BlcmF0b3IsXG4gICAgICAgIGNvbmRpdGlvbnM6IGNvbmRpdGlvbnMubWFwKCh7IHZhbHVlLCB0eXBlLCByYW5nZUVuZCB9KSA9PiB7XG4gICAgICAgICAgY29uc3QgYmFzZSA9IHsgY29uZGl0aW9uOiB0eXBlLm9wZXJhbmQsIHZhbHVlIH07XG4gICAgICAgICAgaWYgKHR5cGUub3BlcmFuZCA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuSU5fUkFOR0UpIHtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSB7IC4uLmJhc2UsIHJhbmdlRW5kIH07XG4gICAgICAgICAgICBpZiAodGhpcy5maWx0ZXJUeXBlID09PSBEYXRvR3JpZEZpbHRlclR5cGVzLkRhdGUpIHtcbiAgICAgICAgICAgICAgY29uc3QgeyBmcm9tLCB0byB9ID0gdmFsdWUgYXMgRGF0ZVJhbmdlO1xuICAgICAgICAgICAgICByZXN1bHQgPSB7IGNvbmRpdGlvbjogdHlwZS5vcGVyYW5kLCB2YWx1ZTogZnJvbSBhcyBzdHJpbmcsIHJhbmdlRW5kOiB0byBhcyBzdHJpbmcgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgYXMgRGF0b0dyaWRSYW5nZUZpbHRlckNvbmRpdGlvbjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGJhc2UgYXMgRGF0b0dyaWRGaWx0ZXJDb25kaXRpb247XG4gICAgICAgIH0pXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0QnlWYWx1ZUZpbHRlcihmaWx0ZXI6IERhdG9HcmlkRmlsdGVyLCBieVZhbHVlOiAoc3RyaW5nIHwgbnVtYmVyKVtdKSB7XG4gICAgaWYgKHRoaXMuaXNDbGllbnRTaWRlR3JpZCkge1xuICAgICAgY29uc3QgdmFsdWVzQ291bnQgPSB0aGlzLmNvbHVtblZhbHVlcy5sZW5ndGg7XG4gICAgICBpZiAoYnlWYWx1ZS5sZW5ndGggIT09IHZhbHVlc0NvdW50KSB7XG4gICAgICAgIGNvbnN0IGNvbmRpdGlvbiA9XG4gICAgICAgICAgYnlWYWx1ZS5sZW5ndGggPCB2YWx1ZXNDb3VudCAvIDIgPyBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JTl9MSVNUIDogRGF0b0ZpbHRlckNvbmRpdGlvbnMuTk9UX0lOX0xJU1Q7XG4gICAgICAgIGZpbHRlci5ieVZhbHVlID0ge1xuICAgICAgICAgIGNvbmRpdGlvbixcbiAgICAgICAgICB2YWx1ZXM6IGNvbmRpdGlvbiA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuSU5fTElTVCA/IGJ5VmFsdWUgOiB0aGlzLmdldEJ5VmFsdWVFeGNsdWRlVmFsdWVzKGJ5VmFsdWUpXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IEFycmF5LmZyb20odGhpcy5leGNsdWRlZFZhbHVlcy52YWx1ZXMoKSk7XG4gICAgICBpZiAodmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZmlsdGVyLmJ5VmFsdWUgPSB7XG4gICAgICAgICAgY29uZGl0aW9uOiBEYXRvRmlsdGVyQ29uZGl0aW9ucy5OT1RfSU5fTElTVCxcbiAgICAgICAgICB2YWx1ZXNcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkQnlWYWx1ZUZpbHRlcihieVZhbHVlOiBEYXRvR3JpZEZpbHRlclsnYnlWYWx1ZSddKTogKHN0cmluZyB8IG51bWJlcilbXVtdIHtcbiAgICBpZiAoIWJ5VmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRCeVZhbHVlO1xuICAgIH1cbiAgICBpZiAoYnlWYWx1ZS52YWx1ZXMubGVuZ3RoICYmIHRoaXMuZmlsdGVyU2VjdGlvbnMuQ29uZGl0aW9uYWwpIHtcbiAgICAgIHRoaXMuYWN0aXZlQWNjb3JkaW9uSWQgPSAxO1xuICAgIH1cbiAgICBpZiAoYnlWYWx1ZS5jb25kaXRpb24gPT09IERhdG9GaWx0ZXJDb25kaXRpb25zLk5PVF9JTl9MSVNUKSB7XG4gICAgICBpZiAoIXRoaXMuaXNDbGllbnRTaWRlR3JpZCkge1xuICAgICAgICB0aGlzLmV4Y2x1ZGVkVmFsdWVzID0gbmV3IFNldChieVZhbHVlLnZhbHVlcyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gW3RoaXMuZ2V0QnlWYWx1ZUV4Y2x1ZGVWYWx1ZXMoYnlWYWx1ZS52YWx1ZXMpXTtcbiAgICB9XG4gICAgcmV0dXJuIFtieVZhbHVlLnZhbHVlc107XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkQ29uZGl0aW9uYWxGaWx0ZXIoY29uZGl0aW9uYWw6IERhdG9HcmlkRmlsdGVyWydjb25kaXRpb25hbCddKTogRm9ybUdyb3VwIHtcbiAgICBpZiAoIWNvbmRpdGlvbmFsKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWZhdWx0Q29uZGl0aW9uYWw7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIG9wZXJhdG9yOiBbY29uZGl0aW9uYWwub3BlcmF0b3JdLFxuICAgICAgY29uZGl0aW9uczogdGhpcy5mYi5hcnJheSh0aGlzLmJ1aWxkQ29uZGl0aW9ucyhjb25kaXRpb25hbC5jb25kaXRpb25zKSlcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRDb25kaXRpb25zKGNvbmRpdGlvbnM6IChEYXRvR3JpZEZpbHRlckNvbmRpdGlvbiB8IERhdG9HcmlkUmFuZ2VGaWx0ZXJDb25kaXRpb24pW10pOiBGb3JtR3JvdXBbXSB7XG4gICAgcmV0dXJuIGNvbmRpdGlvbnMubWFwKGNvbmRpdGlvbiA9PiB7XG4gICAgICBjb25zdCB7IGNvbmRpdGlvbjogY3VycmVudE9wZXJhbmQsIHZhbHVlIH0gPSBjb25kaXRpb247XG4gICAgICBjb25zdCBncm91cCA9IHtcbiAgICAgICAgdHlwZTogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiB0aGlzLmNvbmRpdGlvbmFsRmlsdGVyT3B0aW9ucy5maW5kSW5kZXgoKHsgb3BlcmFuZCB9KSA9PiBvcGVyYW5kID09PSBjdXJyZW50T3BlcmFuZCksXG4gICAgICAgICAgICBvcGVyYW5kOiBjdXJyZW50T3BlcmFuZCxcbiAgICAgICAgICAgIGxhYmVsOiBgY29yZS4ke2N1cnJlbnRPcGVyYW5kfWBcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHZhbHVlOiBbdmFsdWUsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgICByYW5nZUVuZDogbnVsbFxuICAgICAgfTtcbiAgICAgIGlmIChpc1JhbmdlQ29uZGl0aW9uPERhdG9HcmlkUmFuZ2VGaWx0ZXJDb25kaXRpb24+KGNvbmRpdGlvbikpIHtcbiAgICAgICAgZ3JvdXAucmFuZ2VFbmQgPSBbY29uZGl0aW9uLnJhbmdlRW5kLCBWYWxpZGF0b3JzLnJlcXVpcmVkXTtcbiAgICAgICAgZ3JvdXAudmFsdWUgPSBbeyBmcm9tOiBjb25kaXRpb24udmFsdWUgYXMgc3RyaW5nLCB0bzogY29uZGl0aW9uLnJhbmdlRW5kIGFzIHN0cmluZyB9LCBWYWxpZGF0b3JzLnJlcXVpcmVkXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmZiLmdyb3VwKGdyb3VwKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiByYW5nZSBpcyBub3QgcmVxdWlyZWQgYnkgZGVmYXVsdCwgd2Ugd2FudCB0byBtYWtlIGl0IHJlcXVpcmVkIG9uY2UgdGhpcyBvcGVyYW5kIGlzIHNlbGVjdGVkLlxuICAgKiAqL1xuICBwcml2YXRlIHJlZ2lzdGVyT3BlcmFuZExpc3RlbmVycygpIHtcbiAgICBpZiAoIXRoaXMuY29uZGl0aW9ucykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNvbmRpdGlvbnMudmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZShcbiAgICAgICAgc3RhcnRXaXRoKHRoaXMuY29uZGl0aW9ucy5sZW5ndGgpLFxuICAgICAgICBtYXAoKCkgPT4gdGhpcy5jb25kaXRpb25zLmxlbmd0aCksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsdWVDaGFuZ2VzID0gdGhpcy5jb25kaXRpb25zLmNvbnRyb2xzLm1hcCgoZ3JvdXA6IEZvcm1Hcm91cCwgaW5kZXgpID0+XG4gICAgICAgICAgICBncm91cC5nZXQoJ3R5cGUnKS52YWx1ZUNoYW5nZXMucGlwZShtYXAoKHZhbHVlOiBDb25kaXRpb25PcHRpb24pID0+ICh7IHZhbHVlLCBpbmRleCB9KSkpXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gbWVyZ2UoLi4udmFsdWVDaGFuZ2VzKTtcbiAgICAgICAgfSksXG4gICAgICAgIHVudGlsRGVzdHJveWVkKHRoaXMpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCh7IHZhbHVlOiB7IG9wZXJhbmQgfSwgaW5kZXggfSkgPT4ge1xuICAgICAgICBjb25zdCBwYXJhbXMgPSB7IGluZGV4LCBpblJhbmdlOiBvcGVyYW5kID09PSBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JTl9SQU5HRSB9O1xuICAgICAgICBpZiAodGhpcy5maWx0ZXJUeXBlID09PSBEYXRvR3JpZEZpbHRlclR5cGVzLkRhdGUpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZURhdGVJbnB1dChwYXJhbXMpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZmlsdGVyVHlwZSA9PT0gRGF0b0dyaWRGaWx0ZXJUeXBlcy5OdW1iZXIpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZU51bWJlcklucHV0KHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVWYWx1ZUNvbnRyb2xWYWxpZGF0b3Iob3BlcmFuZCwgaW5kZXgpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZURhdGVJbnB1dCh7IGluUmFuZ2UsIGluZGV4IH0pIHtcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5jb25kaXRpb25zLmF0KGluZGV4KS5nZXQoJ3ZhbHVlJyk7XG4gICAgaWYgKGNvbnRyb2wuZGlydHkpIHtcbiAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IGNvbnRyb2w7XG4gICAgICBjb25zdCBuZXdWYWx1ZSA9IGluUmFuZ2UgPyB7IGZyb206IHZhbHVlLCB0bzogdmFsdWUgfSA6IHZhbHVlLmZyb207XG4gICAgICBjb250cm9sLnBhdGNoVmFsdWUobmV3VmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTnVtYmVySW5wdXQoeyBpblJhbmdlLCBpbmRleCB9KSB7XG4gICAgY29uc3QgdmFsaWRhdG9yID0gaW5SYW5nZSA/IFZhbGlkYXRvcnMucmVxdWlyZWQgOiBudWxsO1xuICAgIGNvbnN0IHJhbmdlRW5kID0gdGhpcy5jb25kaXRpb25zLmF0KGluZGV4KS5nZXQoJ3JhbmdlRW5kJyk7XG4gICAgcmFuZ2VFbmQuc2V0VmFsaWRhdG9ycyh2YWxpZGF0b3IpO1xuICAgIHJhbmdlRW5kLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVmFsdWVDb250cm9sVmFsaWRhdG9yKG9wZXJhbmQ6IERhdG9GaWx0ZXJDb25kaXRpb25zLCBpbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgdmFsaWRhdG9yID0gIXRoaXMuaXNFbXB0eU9wZXJhbmQob3BlcmFuZCkgPyBWYWxpZGF0b3JzLnJlcXVpcmVkIDogbnVsbDtcbiAgICBjb25zdCB2YWx1ZUNvbnRyb2wgPSB0aGlzLmNvbmRpdGlvbnMuYXQoaW5kZXgpLmdldCgndmFsdWUnKSBhcyBGb3JtQ29udHJvbDtcbiAgICB2YWx1ZUNvbnRyb2wuc2V0VmFsaWRhdG9ycyh2YWxpZGF0b3IpO1xuICAgIHZhbHVlQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gIH1cblxuICBwcml2YXRlIGlzRW1wdHlPcGVyYW5kKG9wZXJhbmQ6IERhdG9GaWx0ZXJDb25kaXRpb25zKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG9wZXJhbmQgPT09IERhdG9GaWx0ZXJDb25kaXRpb25zLklTX0VNUFRZIHx8IG9wZXJhbmQgPT09IERhdG9GaWx0ZXJDb25kaXRpb25zLk5PVF9FTVBUWTtcbiAgfVxuXG4gIHByaXZhdGUgaXNTdHJpbmdBcnJheSh2YWx1ZTogKHN0cmluZyB8IExpc3RJdGVtKVtdKTogdmFsdWUgaXMgc3RyaW5nW10ge1xuICAgIHJldHVybiBpc1N0cmluZyh2YWx1ZVswXSk7XG4gIH1cblxuICBwcml2YXRlIGdldFZhbHVlc0Zyb21TZXJ2ZXIoc2VhcmNoVGVybTogc3RyaW5nKSB7XG4gICAgdGhpcy5sb2FkaW5nTGlzdCA9IHRydWU7XG4gICAgdGhpcy5saXN0T3B0aW9ucyA9IFtdO1xuICAgIGNvbnN0IHBhcmFtczogUGFydGlhbDxEYXRvR3JpZEdldFJvd3NQYXJhbXM+ID0ge1xuICAgICAgZmFpbENhbGxiYWNrOiAoKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZ0xpc3QgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zZXJ2ZXJTZWFyY2hFcnJvcmVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5saXN0T3B0aW9ucyA9IFtdO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9LFxuICAgICAgc3VjY2Vzc0NhbGxiYWNrOiBkYXRhID0+IHtcbiAgICAgICAgdGhpcy5sb2FkaW5nTGlzdCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBmbGF0RGF0YSA9IGRhdGEubWFwKHZhbHVlID0+IHZhbHVlW3RoaXMuY29sRmllbGRdKTtcbiAgICAgICAgdGhpcy5saXN0T3B0aW9ucyA9IGZsYXREYXRhLm1hcChtYXBUb0xpc3RJdGVtKTtcbiAgICAgICAgdGhpcy5wYXRjaEFuZFJlUmVnaXN0ZXIoZmxhdERhdGEpO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9LFxuICAgICAgc2VydmVyQ29uZmlnOiB7XG4gICAgICAgIHBhZ2VTaXplOiAzMCxcbiAgICAgICAgcGFnZU51bWJlcjogMSxcbiAgICAgICAgY29sdW1uRmlsdGVyczoge1xuICAgICAgICAgIFt0aGlzLmNvbEZpZWxkXToge1xuICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yVHlwZXMuQU5ELFxuICAgICAgICAgICAgZmlsdGVyczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29uZGl0aW9uOiBEYXRvRmlsdGVyQ29uZGl0aW9ucy5DT05UQUlOUyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogc2VhcmNoVGVybVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBzb3J0OiBbXSxcbiAgICAgICAgY29sdW1uc1RvUmV0dXJuOiBbdGhpcy5jb2xGaWVsZF0sXG4gICAgICAgIGRpc3RpbmN0UmVzdWx0czogdHJ1ZVxuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5ncmlkU2VydmljZS5fb3JpZ2luYWxHZXRSb3dzKHBhcmFtcyBhcyBhbnkpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIC8qIFdoZW4gc2VhcmNoaW5nIHRoZSBieSB2YWx1ZSBmaWx0ZXIgb24gc2VydmVyIHNpZGUgd2UgbmVlZCB0byB1cGRhdGUgdGhlIGNvbnRyb2wgd2l0aCB0aGUgbmV3IHZhbHVlcyBhbmQgcmUtcmVnaXN0ZXIgdG8gdGhlIGNoYW5nZXMgKi9cbiAgcHJpdmF0ZSBwYXRjaEFuZFJlUmVnaXN0ZXIoZGF0YTogKHN0cmluZyB8IG51bWJlcilbXSkge1xuICAgIHRoaXMuYnlWYWx1ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuYnlWYWx1ZUNvbnRyb2wucGF0Y2hWYWx1ZSh0aGlzLmdldE5vbkV4Y2x1ZGVkVmFsdWVzKGRhdGEpKTtcbiAgICB0aGlzLnJlZ2lzdGVyQnlWYWx1ZUxpc3RlbmVyKCk7XG4gIH1cblxuICBwcml2YXRlIHJlZ2lzdGVyQnlWYWx1ZUxpc3RlbmVyKCkge1xuICAgIGNvbnN0IGJ5VmFsdWUgPSB0aGlzLmJ5VmFsdWVDb250cm9sO1xuICAgIHRoaXMuYnlWYWx1ZVN1YnNjcmlwdGlvbiA9IGJ5VmFsdWUudmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZShcbiAgICAgICAgc3RhcnRXaXRoKGJ5VmFsdWUudmFsdWUpLFxuICAgICAgICBwYWlyd2lzZSgpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChbcHJldiwgY3VycmVudF0pID0+IHtcbiAgICAgICAgY29uc3QgYWRkVG9FeGNsdWRlZCA9IGN1cnJlbnQubGVuZ3RoIDwgcHJldi5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGRpZmYgPSBhZGRUb0V4Y2x1ZGVkID8gZGlmZmVyZW5jZShwcmV2LCBjdXJyZW50KSA6IGRpZmZlcmVuY2UoY3VycmVudCwgcHJldik7XG4gICAgICAgIGRpZmYuZm9yRWFjaCh2ID0+IChhZGRUb0V4Y2x1ZGVkID8gdGhpcy5leGNsdWRlZFZhbHVlcy5hZGQodikgOiB0aGlzLmV4Y2x1ZGVkVmFsdWVzLmRlbGV0ZSh2KSkpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldE5vbkV4Y2x1ZGVkVmFsdWVzKGRhdGE6IChzdHJpbmcgfCBudW1iZXIpW10pOiAoc3RyaW5nIHwgbnVtYmVyKVtdIHtcbiAgICByZXR1cm4gZGF0YS5maWx0ZXIodiA9PiAhdGhpcy5leGNsdWRlZFZhbHVlcy5oYXModikpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBwaXZvdCBkaW1lbnNpb25zIGFzIGRlZmluZWQgaW4gdGhlIHBhcmVudCBncm91cCBjb2x1bW4gaGVhZGVyIGNsYXNzLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRQaXZvdEZpZWxkcyhwYXJlbnQ6IENvbHVtbkdyb3VwLCBmaWVsZHMgPSBbXSk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBncmFuZFBhcmVudCA9IHBhcmVudC5nZXRQYXJlbnQoKTtcbiAgICBjb25zdCBoZWFkZXJDbGFzcyA9IHBhcmVudC5nZXRPcmlnaW5hbENvbHVtbkdyb3VwKCkuZ2V0Q29sR3JvdXBEZWYoKS5oZWFkZXJDbGFzcztcblxuICAgIGlmIChncmFuZFBhcmVudCkge1xuICAgICAgdGhpcy5nZXRQaXZvdEZpZWxkcyhncmFuZFBhcmVudCwgZmllbGRzKTtcbiAgICB9XG5cbiAgICBoZWFkZXJDbGFzcyAmJiBmaWVsZHMucHVzaChoZWFkZXJDbGFzc1swXSk7XG5cbiAgICByZXR1cm4gZmllbGRzO1xuICB9XG59XG4iXX0=
@@ -67,4 +67,4 @@ export var DatoGridFilterOptionsMap = (_a = {},
67
67
  export function isRangeCondition(item) {
68
68
  return item.condition === DatoFilterConditions.IN_RANGE;
69
69
  }
70
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1maWx0ZXIudHlwZXMuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AZGF0b3JhbWEvY29yZS8iLCJzb3VyY2VzIjpbImxpYi9ncmlkLXYyL2dyaWQtZmlsdGVyL2dyaWQtZmlsdGVyLnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7QUFPSCxNQUFNLENBQU4sSUFBWSxtQkFLWDtBQUxELFdBQVksbUJBQW1CO0lBQzdCLHdDQUFpQixDQUFBO0lBQ2pCLHdDQUFpQixDQUFBO0lBQ2pCLG9DQUFhLENBQUE7SUFDYixvQ0FBYSxDQUFBO0FBQ2YsQ0FBQyxFQUxXLG1CQUFtQixLQUFuQixtQkFBbUIsUUFLOUI7QUFFRCxNQUFNLENBQU4sSUFBWSxzQkFHWDtBQUhELFdBQVksc0JBQXNCO0lBQ2hDLCtDQUFxQixDQUFBO0lBQ3JCLHFEQUEyQixDQUFBO0FBQzdCLENBQUMsRUFIVyxzQkFBc0IsS0FBdEIsc0JBQXNCLFFBR2pDO0FBRUQsTUFBTSxDQUFOLElBQVksb0JBZ0JYO0FBaEJELFdBQVksb0JBQW9CO0lBQzlCLHlDQUFpQixDQUFBO0lBQ2pCLGlEQUF5QixDQUFBO0lBQ3pCLHFEQUE2QixDQUFBO0lBQzdCLHlEQUFpQyxDQUFBO0lBQ2pDLCtDQUF1QixDQUFBO0lBQ3ZCLG1EQUEyQixDQUFBO0lBQzNCLDZDQUFxQixDQUFBO0lBQ3JCLDZDQUFxQixDQUFBO0lBQ3JCLHFEQUE2QixDQUFBO0lBQzdCLG1EQUEyQixDQUFBO0lBQzNCLCtDQUF1QixDQUFBO0lBQ3ZCLDJDQUFtQixDQUFBO0lBQ25CLG1EQUEyQixDQUFBO0lBQzNCLDZDQUFxQixDQUFBO0lBQ3JCLCtDQUF1QixDQUFBO0FBQ3pCLENBQUMsRUFoQlcsb0JBQW9CLEtBQXBCLG9CQUFvQixRQWdCL0I7QUFPRCxNQUFNLENBQUMsSUFBTSx5QkFBeUIsR0FBRztJQUN2QyxvQkFBb0IsQ0FBQyxRQUFRO0lBQzdCLG9CQUFvQixDQUFDLE1BQU07SUFDM0Isb0JBQW9CLENBQUMsU0FBUztJQUM5QixvQkFBb0IsQ0FBQyxZQUFZO0NBQ2xDLENBQUM7QUFDRixNQUFNLENBQUMsSUFBTSwyQkFBMkIsR0FBRztJQUN6QyxvQkFBb0IsQ0FBQyxRQUFRO0lBQzdCLG9CQUFvQixDQUFDLFlBQVk7SUFDakMsb0JBQW9CLENBQUMsTUFBTTtJQUMzQixvQkFBb0IsQ0FBQyxVQUFVO0lBQy9CLG9CQUFvQixDQUFDLFdBQVc7SUFDaEMsb0JBQW9CLENBQUMsU0FBUztDQUMvQixDQUFDO0FBQ0YsTUFBTSxDQUFDLElBQU0sMkJBQTJCLEdBQUc7SUFDekMsb0JBQW9CLENBQUMsTUFBTTtJQUMzQixvQkFBb0IsQ0FBQyxVQUFVO0lBQy9CLG9CQUFvQixDQUFDLFNBQVM7SUFDOUIsb0JBQW9CLENBQUMsV0FBVztJQUNoQyxvQkFBb0IsQ0FBQyxZQUFZO0lBQ2pDLG9CQUFvQixDQUFDLGNBQWM7SUFDbkMsb0JBQW9CLENBQUMsUUFBUTtDQUM5QixDQUFDO0FBRUYsTUFBTSxDQUFDLElBQU0sd0JBQXdCO0lBQ25DLEdBQUMsbUJBQW1CLENBQUMsTUFBTSxJQUFHLDJCQUEyQjtJQUN6RCxHQUFDLG1CQUFtQixDQUFDLE1BQU0sSUFBRywyQkFBMkI7SUFDekQsR0FBQyxtQkFBbUIsQ0FBQyxJQUFJLElBQUcseUJBQXlCO09BQ3RELENBQUM7QUFFRixNQUFNLFVBQVUsZ0JBQWdCLENBQUksSUFBSTtJQUN0QyxPQUFPLElBQUksQ0FBQyxTQUFTLEtBQUssb0JBQW9CLENBQUMsUUFBUSxDQUFDO0FBQzFELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgRGF0b3JhbWEuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gQXBhY2hlIExpY2Vuc2UgMi4wIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9naXRodWIuY29tL2RhdG9yYW1hL2NsaWVudC1jb3JlL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAqL1xuXG5pbXBvcnQgeyBIYXNoTWFwIH0gZnJvbSAnQGRhdG9yYW1hL2FraXRhJztcbmltcG9ydCB7IE9wZXJhdG9yVHlwZXMgfSBmcm9tICcuLi8uLi9vcGVyYXRvci10b2dnbGVyL29wZXJhdG9yLXRvZ2dsZXIudHlwZXMnO1xuXG50eXBlIFN0cmluZ09yTnVtYmVyID0gc3RyaW5nIHwgbnVtYmVyO1xuXG5leHBvcnQgZW51bSBEYXRvR3JpZEZpbHRlclR5cGVzIHtcbiAgU3RyaW5nID0gJ1N0cmluZycsXG4gIE51bWJlciA9ICdOdW1iZXInLFxuICBEYXRlID0gJ0RhdGUnLFxuICBOb25lID0gJ05vbmUnXG59XG5cbmV4cG9ydCBlbnVtIERhdG9HcmlkRmlsdGVyU2VjdGlvbnMge1xuICBCeV9WYWx1ZSA9ICdCeV9WYWx1ZScsXG4gIENvbmRpdGlvbmFsID0gJ0NvbmRpdGlvbmFsJ1xufVxuXG5leHBvcnQgZW51bSBEYXRvRmlsdGVyQ29uZGl0aW9ucyB7XG4gIEVRVUFMUyA9ICdFUVVBTFMnLFxuICBOT1RfRVFVQUxTID0gJ05PVF9FUVVBTFMnLFxuICBHUkVBVEVSX1RIQU4gPSAnR1JFQVRFUl9USEFOJyxcbiAgR1JFQVRFUl9FUVVBTFMgPSAnR1JFQVRFUl9FUVVBTFMnLFxuICBMRVNTX1RIQU4gPSAnTEVTU19USEFOJyxcbiAgTEVTU19FUVVBTFMgPSAnTEVTU19FUVVBTFMnLFxuICBJTl9SQU5HRSA9ICdJTl9SQU5HRScsXG4gIENPTlRBSU5TID0gJ0NPTlRBSU5TJyxcbiAgTk9UX0NPTlRBSU5TID0gJ05PVF9DT05UQUlOUycsXG4gIFNUQVJUU19XSVRIID0gJ1NUQVJUU19XSVRIJyxcbiAgRU5EU19XSVRIID0gJ0VORFNfV0lUSCcsXG4gIElOX0xJU1QgPSAnSU5fTElTVCcsXG4gIE5PVF9JTl9MSVNUID0gJ05PVF9JTl9MSVNUJyxcbiAgSVNfRU1QVFkgPSAnSVNfRU1QVFknLFxuICBOT1RfRU1QVFkgPSAnTk9UX0VNUFRZJ1xufVxuXG5leHBvcnQgdHlwZSBTaW5nbGVWYWx1ZUNvbmRpdGlvbnMgPSBFeGNsdWRlPFxuICBEYXRvRmlsdGVyQ29uZGl0aW9ucyxcbiAgRGF0b0ZpbHRlckNvbmRpdGlvbnMuSU5fUkFOR0UgfCBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JTl9MSVNUIHwgRGF0b0ZpbHRlckNvbmRpdGlvbnMuTk9UX0lOX0xJU1Rcbj47XG5cbmV4cG9ydCBjb25zdCBEYXRvR3JpZERhdGVGaWx0ZXJPcHRpb25zID0gW1xuICBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JTl9SQU5HRSxcbiAgRGF0b0ZpbHRlckNvbmRpdGlvbnMuRVFVQUxTLFxuICBEYXRvRmlsdGVyQ29uZGl0aW9ucy5MRVNTX1RIQU4sXG4gIERhdG9GaWx0ZXJDb25kaXRpb25zLkdSRUFURVJfVEhBTlxuXTtcbmV4cG9ydCBjb25zdCBEYXRvR3JpZFN0cmluZ0ZpbHRlck9wdGlvbnMgPSBbXG4gIERhdG9GaWx0ZXJDb25kaXRpb25zLkNPTlRBSU5TLFxuICBEYXRvRmlsdGVyQ29uZGl0aW9ucy5OT1RfQ09OVEFJTlMsXG4gIERhdG9GaWx0ZXJDb25kaXRpb25zLkVRVUFMUyxcbiAgRGF0b0ZpbHRlckNvbmRpdGlvbnMuTk9UX0VRVUFMUyxcbiAgRGF0b0ZpbHRlckNvbmRpdGlvbnMuU1RBUlRTX1dJVEgsXG4gIERhdG9GaWx0ZXJDb25kaXRpb25zLkVORFNfV0lUSFxuXTtcbmV4cG9ydCBjb25zdCBEYXRvR3JpZE51bWJlckZpbHRlck9wdGlvbnMgPSBbXG4gIERhdG9GaWx0ZXJDb25kaXRpb25zLkVRVUFMUyxcbiAgRGF0b0ZpbHRlckNvbmRpdGlvbnMuTk9UX0VRVUFMUyxcbiAgRGF0b0ZpbHRlckNvbmRpdGlvbnMuTEVTU19USEFOLFxuICBEYXRvRmlsdGVyQ29uZGl0aW9ucy5MRVNTX0VRVUFMUyxcbiAgRGF0b0ZpbHRlckNvbmRpdGlvbnMuR1JFQVRFUl9USEFOLFxuICBEYXRvRmlsdGVyQ29uZGl0aW9ucy5HUkVBVEVSX0VRVUFMUyxcbiAgRGF0b0ZpbHRlckNvbmRpdGlvbnMuSU5fUkFOR0Vcbl07XG5cbmV4cG9ydCBjb25zdCBEYXRvR3JpZEZpbHRlck9wdGlvbnNNYXAgPSB7XG4gIFtEYXRvR3JpZEZpbHRlclR5cGVzLlN0cmluZ106IERhdG9HcmlkU3RyaW5nRmlsdGVyT3B0aW9ucyxcbiAgW0RhdG9HcmlkRmlsdGVyVHlwZXMuTnVtYmVyXTogRGF0b0dyaWROdW1iZXJGaWx0ZXJPcHRpb25zLFxuICBbRGF0b0dyaWRGaWx0ZXJUeXBlcy5EYXRlXTogRGF0b0dyaWREYXRlRmlsdGVyT3B0aW9uc1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzUmFuZ2VDb25kaXRpb248VD4oaXRlbSk6IGl0ZW0gaXMgVCB7XG4gIHJldHVybiBpdGVtLmNvbmRpdGlvbiA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuSU5fUkFOR0U7XG59XG5cbmV4cG9ydCB0eXBlIERhdG9HcmlkUmFuZ2VGaWx0ZXJDb25kaXRpb24gPSB7XG4gIGNvbmRpdGlvbjogRGF0b0ZpbHRlckNvbmRpdGlvbnMuSU5fUkFOR0U7XG4gIHZhbHVlOiBTdHJpbmdPck51bWJlciB8IGFueTtcbiAgcmFuZ2VFbmQ6IFN0cmluZ09yTnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgRGF0b0dyaWRGaWx0ZXJDb25kaXRpb24gPSB7XG4gIGNvbmRpdGlvbjogU2luZ2xlVmFsdWVDb25kaXRpb25zO1xuICB2YWx1ZTogU3RyaW5nT3JOdW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBEYXRvR3JpZEZpbHRlciA9IHtcbiAgY29sSWQ/OiBzdHJpbmc7XG4gIGJ5VmFsdWU/OiB7XG4gICAgY29uZGl0aW9uOiBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JTl9MSVNUIHwgRGF0b0ZpbHRlckNvbmRpdGlvbnMuTk9UX0lOX0xJU1Q7XG4gICAgdmFsdWVzOiBTdHJpbmdPck51bWJlcltdO1xuICB9O1xuICBjb25kaXRpb25hbD86IERhdG9HcmlkQ29uZGl0aW9uYWxGaWx0ZXI7XG4gIHBpdm90S2V5cz86IHN0cmluZ1tdO1xuICBwaXZvdEZpZWxkc01hcD86IEhhc2hNYXA8c3RyaW5nPjtcbn07XG5cbmV4cG9ydCB0eXBlIERhdG9HcmlkQ29uZGl0aW9uYWxGaWx0ZXIgPSB7XG4gIHR5cGU6IERhdG9HcmlkRmlsdGVyVHlwZXM7XG4gIG9wZXJhdG9yOiBPcGVyYXRvclR5cGVzO1xuICBjb25kaXRpb25zOiAoRGF0b0dyaWRGaWx0ZXJDb25kaXRpb24gfCBEYXRvR3JpZFJhbmdlRmlsdGVyQ29uZGl0aW9uKVtdO1xufTtcblxuZXhwb3J0IHR5cGUgRGF0b0dyaWRFeHRlcm5hbEZpbHRlciA9IHtcbiAgY29sSWQ6IHN0cmluZztcbiAgZmllbGQ6IHN0cmluZztcbiAgZmlsdGVyOiBEYXRvR3JpZEZpbHRlcjtcbiAgcGl2b3RGaWVsZHNNYXA/OiBIYXNoTWFwPHN0cmluZz47XG59O1xuXG5leHBvcnQgdHlwZSBEYXRvR3JpZEZpbHRlcnNNYXAgPSBIYXNoTWFwPERhdG9HcmlkRmlsdGVyPjtcblxuZXhwb3J0IHR5cGUgU2VydmVyU2lkZVBhZ2luYXRpb25SYW5nZUNvbmRpdGlvbiA9IHtcbiAgY29uZGl0aW9uOiBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JTl9SQU5HRTtcbiAgc3RhcnQ6IFN0cmluZ09yTnVtYmVyO1xuICBlbmQ6IFN0cmluZ09yTnVtYmVyO1xuICBjb2x1bW4/OiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgU2VydmVyU2lkZVBhZ2luYXRpb25MaXN0Q29uZGl0aW9uID0ge1xuICBjb25kaXRpb246IERhdG9GaWx0ZXJDb25kaXRpb25zLklOX0xJU1QgfCBEYXRvRmlsdGVyQ29uZGl0aW9ucy5OT1RfSU5fTElTVDtcbiAgdmFsdWVzOiBTdHJpbmdPck51bWJlcltdO1xuICBjb2x1bW4/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkNvbmRpdGlvbiA9IHtcbiAgY29uZGl0aW9uOiBTaW5nbGVWYWx1ZUNvbmRpdGlvbnM7XG4gIHZhbHVlOiBTdHJpbmdPck51bWJlcjtcbiAgY29sdW1uPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgU2VydmVyU2lkZVBhZ2luYXRpb25GaWx0ZXJzQXJyYXkgPSAoXG4gIHwgU2VydmVyU2lkZVBhZ2luYXRpb25GaWx0ZXJcbiAgfCBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkNvbmRpdGlvblxuICB8IFNlcnZlclNpZGVQYWdpbmF0aW9uUmFuZ2VDb25kaXRpb25cbiAgfCBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkxpc3RDb25kaXRpb24pW107XG5cbmV4cG9ydCB0eXBlIFNlcnZlclNpZGVQYWdpbmF0aW9uRmlsdGVyID0ge1xuICBvcGVyYXRvcjogT3BlcmF0b3JUeXBlcztcbiAgZmlsdGVyczogU2VydmVyU2lkZVBhZ2luYXRpb25GaWx0ZXJzQXJyYXk7XG59O1xuXG5leHBvcnQgdHlwZSBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkZpbHRlcnMgPSBIYXNoTWFwPFNlcnZlclNpZGVQYWdpbmF0aW9uRmlsdGVyPjtcbmV4cG9ydCB0eXBlIExpc3RJdGVtID0geyBpZDogc3RyaW5nOyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIH07XG4iXX0=
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1maWx0ZXIudHlwZXMuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AZGF0b3JhbWEvY29yZS8iLCJzb3VyY2VzIjpbImxpYi9ncmlkLXYyL2dyaWQtZmlsdGVyL2dyaWQtZmlsdGVyLnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7QUFPSCxNQUFNLENBQU4sSUFBWSxtQkFLWDtBQUxELFdBQVksbUJBQW1CO0lBQzdCLHdDQUFpQixDQUFBO0lBQ2pCLHdDQUFpQixDQUFBO0lBQ2pCLG9DQUFhLENBQUE7SUFDYixvQ0FBYSxDQUFBO0FBQ2YsQ0FBQyxFQUxXLG1CQUFtQixLQUFuQixtQkFBbUIsUUFLOUI7QUFFRCxNQUFNLENBQU4sSUFBWSxzQkFHWDtBQUhELFdBQVksc0JBQXNCO0lBQ2hDLCtDQUFxQixDQUFBO0lBQ3JCLHFEQUEyQixDQUFBO0FBQzdCLENBQUMsRUFIVyxzQkFBc0IsS0FBdEIsc0JBQXNCLFFBR2pDO0FBRUQsTUFBTSxDQUFOLElBQVksb0JBZ0JYO0FBaEJELFdBQVksb0JBQW9CO0lBQzlCLHlDQUFpQixDQUFBO0lBQ2pCLGlEQUF5QixDQUFBO0lBQ3pCLHFEQUE2QixDQUFBO0lBQzdCLHlEQUFpQyxDQUFBO0lBQ2pDLCtDQUF1QixDQUFBO0lBQ3ZCLG1EQUEyQixDQUFBO0lBQzNCLDZDQUFxQixDQUFBO0lBQ3JCLDZDQUFxQixDQUFBO0lBQ3JCLHFEQUE2QixDQUFBO0lBQzdCLG1EQUEyQixDQUFBO0lBQzNCLCtDQUF1QixDQUFBO0lBQ3ZCLDJDQUFtQixDQUFBO0lBQ25CLG1EQUEyQixDQUFBO0lBQzNCLDZDQUFxQixDQUFBO0lBQ3JCLCtDQUF1QixDQUFBO0FBQ3pCLENBQUMsRUFoQlcsb0JBQW9CLEtBQXBCLG9CQUFvQixRQWdCL0I7QUFPRCxNQUFNLENBQUMsSUFBTSx5QkFBeUIsR0FBRztJQUN2QyxvQkFBb0IsQ0FBQyxRQUFRO0lBQzdCLG9CQUFvQixDQUFDLE1BQU07SUFDM0Isb0JBQW9CLENBQUMsU0FBUztJQUM5QixvQkFBb0IsQ0FBQyxZQUFZO0NBQ2xDLENBQUM7QUFDRixNQUFNLENBQUMsSUFBTSwyQkFBMkIsR0FBRztJQUN6QyxvQkFBb0IsQ0FBQyxRQUFRO0lBQzdCLG9CQUFvQixDQUFDLFlBQVk7SUFDakMsb0JBQW9CLENBQUMsTUFBTTtJQUMzQixvQkFBb0IsQ0FBQyxVQUFVO0lBQy9CLG9CQUFvQixDQUFDLFdBQVc7SUFDaEMsb0JBQW9CLENBQUMsU0FBUztDQUMvQixDQUFDO0FBQ0YsTUFBTSxDQUFDLElBQU0sMkJBQTJCLEdBQUc7SUFDekMsb0JBQW9CLENBQUMsTUFBTTtJQUMzQixvQkFBb0IsQ0FBQyxVQUFVO0lBQy9CLG9CQUFvQixDQUFDLFNBQVM7SUFDOUIsb0JBQW9CLENBQUMsV0FBVztJQUNoQyxvQkFBb0IsQ0FBQyxZQUFZO0lBQ2pDLG9CQUFvQixDQUFDLGNBQWM7SUFDbkMsb0JBQW9CLENBQUMsUUFBUTtDQUM5QixDQUFDO0FBRUYsTUFBTSxDQUFDLElBQU0sd0JBQXdCO0lBQ25DLEdBQUMsbUJBQW1CLENBQUMsTUFBTSxJQUFHLDJCQUEyQjtJQUN6RCxHQUFDLG1CQUFtQixDQUFDLE1BQU0sSUFBRywyQkFBMkI7SUFDekQsR0FBQyxtQkFBbUIsQ0FBQyxJQUFJLElBQUcseUJBQXlCO09BQ3RELENBQUM7QUFFRixNQUFNLFVBQVUsZ0JBQWdCLENBQUksSUFBSTtJQUN0QyxPQUFPLElBQUksQ0FBQyxTQUFTLEtBQUssb0JBQW9CLENBQUMsUUFBUSxDQUFDO0FBQzFELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgRGF0b3JhbWEuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gQXBhY2hlIExpY2Vuc2UgMi4wIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9naXRodWIuY29tL2RhdG9yYW1hL2NsaWVudC1jb3JlL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAqL1xuXG5pbXBvcnQgeyBIYXNoTWFwIH0gZnJvbSAnQGRhdG9yYW1hL2FraXRhJztcbmltcG9ydCB7IE9wZXJhdG9yVHlwZXMgfSBmcm9tICcuLi8uLi9vcGVyYXRvci10b2dnbGVyL29wZXJhdG9yLXRvZ2dsZXIudHlwZXMnO1xuXG50eXBlIFN0cmluZ09yTnVtYmVyID0gc3RyaW5nIHwgbnVtYmVyO1xuXG5leHBvcnQgZW51bSBEYXRvR3JpZEZpbHRlclR5cGVzIHtcbiAgU3RyaW5nID0gJ1N0cmluZycsXG4gIE51bWJlciA9ICdOdW1iZXInLFxuICBEYXRlID0gJ0RhdGUnLFxuICBOb25lID0gJ05vbmUnXG59XG5cbmV4cG9ydCBlbnVtIERhdG9HcmlkRmlsdGVyU2VjdGlvbnMge1xuICBCeV9WYWx1ZSA9ICdCeV9WYWx1ZScsXG4gIENvbmRpdGlvbmFsID0gJ0NvbmRpdGlvbmFsJ1xufVxuXG5leHBvcnQgZW51bSBEYXRvRmlsdGVyQ29uZGl0aW9ucyB7XG4gIEVRVUFMUyA9ICdFUVVBTFMnLFxuICBOT1RfRVFVQUxTID0gJ05PVF9FUVVBTFMnLFxuICBHUkVBVEVSX1RIQU4gPSAnR1JFQVRFUl9USEFOJyxcbiAgR1JFQVRFUl9FUVVBTFMgPSAnR1JFQVRFUl9FUVVBTFMnLFxuICBMRVNTX1RIQU4gPSAnTEVTU19USEFOJyxcbiAgTEVTU19FUVVBTFMgPSAnTEVTU19FUVVBTFMnLFxuICBJTl9SQU5HRSA9ICdJTl9SQU5HRScsXG4gIENPTlRBSU5TID0gJ0NPTlRBSU5TJyxcbiAgTk9UX0NPTlRBSU5TID0gJ05PVF9DT05UQUlOUycsXG4gIFNUQVJUU19XSVRIID0gJ1NUQVJUU19XSVRIJyxcbiAgRU5EU19XSVRIID0gJ0VORFNfV0lUSCcsXG4gIElOX0xJU1QgPSAnSU5fTElTVCcsXG4gIE5PVF9JTl9MSVNUID0gJ05PVF9JTl9MSVNUJyxcbiAgSVNfRU1QVFkgPSAnSVNfRU1QVFknLFxuICBOT1RfRU1QVFkgPSAnTk9UX0VNUFRZJ1xufVxuXG5leHBvcnQgdHlwZSBTaW5nbGVWYWx1ZUNvbmRpdGlvbnMgPSBFeGNsdWRlPFxuICBEYXRvRmlsdGVyQ29uZGl0aW9ucyxcbiAgRGF0b0ZpbHRlckNvbmRpdGlvbnMuSU5fUkFOR0UgfCBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JTl9MSVNUIHwgRGF0b0ZpbHRlckNvbmRpdGlvbnMuTk9UX0lOX0xJU1Rcbj47XG5cbmV4cG9ydCBjb25zdCBEYXRvR3JpZERhdGVGaWx0ZXJPcHRpb25zID0gW1xuICBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JTl9SQU5HRSxcbiAgRGF0b0ZpbHRlckNvbmRpdGlvbnMuRVFVQUxTLFxuICBEYXRvRmlsdGVyQ29uZGl0aW9ucy5MRVNTX1RIQU4sXG4gIERhdG9GaWx0ZXJDb25kaXRpb25zLkdSRUFURVJfVEhBTlxuXTtcbmV4cG9ydCBjb25zdCBEYXRvR3JpZFN0cmluZ0ZpbHRlck9wdGlvbnMgPSBbXG4gIERhdG9GaWx0ZXJDb25kaXRpb25zLkNPTlRBSU5TLFxuICBEYXRvRmlsdGVyQ29uZGl0aW9ucy5OT1RfQ09OVEFJTlMsXG4gIERhdG9GaWx0ZXJDb25kaXRpb25zLkVRVUFMUyxcbiAgRGF0b0ZpbHRlckNvbmRpdGlvbnMuTk9UX0VRVUFMUyxcbiAgRGF0b0ZpbHRlckNvbmRpdGlvbnMuU1RBUlRTX1dJVEgsXG4gIERhdG9GaWx0ZXJDb25kaXRpb25zLkVORFNfV0lUSFxuXTtcbmV4cG9ydCBjb25zdCBEYXRvR3JpZE51bWJlckZpbHRlck9wdGlvbnMgPSBbXG4gIERhdG9GaWx0ZXJDb25kaXRpb25zLkVRVUFMUyxcbiAgRGF0b0ZpbHRlckNvbmRpdGlvbnMuTk9UX0VRVUFMUyxcbiAgRGF0b0ZpbHRlckNvbmRpdGlvbnMuTEVTU19USEFOLFxuICBEYXRvRmlsdGVyQ29uZGl0aW9ucy5MRVNTX0VRVUFMUyxcbiAgRGF0b0ZpbHRlckNvbmRpdGlvbnMuR1JFQVRFUl9USEFOLFxuICBEYXRvRmlsdGVyQ29uZGl0aW9ucy5HUkVBVEVSX0VRVUFMUyxcbiAgRGF0b0ZpbHRlckNvbmRpdGlvbnMuSU5fUkFOR0Vcbl07XG5cbmV4cG9ydCBjb25zdCBEYXRvR3JpZEZpbHRlck9wdGlvbnNNYXAgPSB7XG4gIFtEYXRvR3JpZEZpbHRlclR5cGVzLlN0cmluZ106IERhdG9HcmlkU3RyaW5nRmlsdGVyT3B0aW9ucyxcbiAgW0RhdG9HcmlkRmlsdGVyVHlwZXMuTnVtYmVyXTogRGF0b0dyaWROdW1iZXJGaWx0ZXJPcHRpb25zLFxuICBbRGF0b0dyaWRGaWx0ZXJUeXBlcy5EYXRlXTogRGF0b0dyaWREYXRlRmlsdGVyT3B0aW9uc1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzUmFuZ2VDb25kaXRpb248VD4oaXRlbSk6IGl0ZW0gaXMgVCB7XG4gIHJldHVybiBpdGVtLmNvbmRpdGlvbiA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuSU5fUkFOR0U7XG59XG5cbmV4cG9ydCB0eXBlIERhdG9HcmlkUmFuZ2VGaWx0ZXJDb25kaXRpb24gPSB7XG4gIGNvbmRpdGlvbjogRGF0b0ZpbHRlckNvbmRpdGlvbnMuSU5fUkFOR0U7XG4gIHZhbHVlOiBTdHJpbmdPck51bWJlciB8IGFueTtcbiAgcmFuZ2VFbmQ6IFN0cmluZ09yTnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgRGF0b0dyaWRGaWx0ZXJDb25kaXRpb24gPSB7XG4gIGNvbmRpdGlvbjogU2luZ2xlVmFsdWVDb25kaXRpb25zO1xuICB2YWx1ZTogU3RyaW5nT3JOdW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBEYXRvR3JpZEZpbHRlciA9IHtcbiAgY29sSWQ/OiBzdHJpbmc7XG4gIGJ5VmFsdWU/OiB7XG4gICAgY29uZGl0aW9uOiBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JTl9MSVNUIHwgRGF0b0ZpbHRlckNvbmRpdGlvbnMuTk9UX0lOX0xJU1Q7XG4gICAgdmFsdWVzOiBTdHJpbmdPck51bWJlcltdO1xuICB9O1xuICBjb25kaXRpb25hbD86IERhdG9HcmlkQ29uZGl0aW9uYWxGaWx0ZXI7XG4gIHBpdm90S2V5cz86IHN0cmluZ1tdO1xuICBwaXZvdEZpZWxkc01hcD86IEhhc2hNYXA8c3RyaW5nPjtcbn07XG5cbmV4cG9ydCB0eXBlIERhdG9HcmlkQ29uZGl0aW9uYWxGaWx0ZXIgPSB7XG4gIHR5cGU6IERhdG9HcmlkRmlsdGVyVHlwZXM7XG4gIG9wZXJhdG9yOiBPcGVyYXRvclR5cGVzO1xuICBjb25kaXRpb25zOiAoRGF0b0dyaWRGaWx0ZXJDb25kaXRpb24gfCBEYXRvR3JpZFJhbmdlRmlsdGVyQ29uZGl0aW9uKVtdO1xufTtcblxuZXhwb3J0IHR5cGUgRGF0b0dyaWRFeHRlcm5hbEZpbHRlciA9IHtcbiAgZmllbGQ6IHN0cmluZztcbiAgZmlsdGVyOiBEYXRvR3JpZEZpbHRlcjtcbiAgcGl2b3RGaWVsZHNNYXA/OiBIYXNoTWFwPHN0cmluZz47XG59O1xuXG5leHBvcnQgdHlwZSBEYXRvR3JpZEZpbHRlcnNNYXAgPSBIYXNoTWFwPERhdG9HcmlkRmlsdGVyPjtcblxuZXhwb3J0IHR5cGUgU2VydmVyU2lkZVBhZ2luYXRpb25SYW5nZUNvbmRpdGlvbiA9IHtcbiAgY29uZGl0aW9uOiBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JTl9SQU5HRTtcbiAgc3RhcnQ6IFN0cmluZ09yTnVtYmVyO1xuICBlbmQ6IFN0cmluZ09yTnVtYmVyO1xuICBjb2x1bW4/OiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgU2VydmVyU2lkZVBhZ2luYXRpb25MaXN0Q29uZGl0aW9uID0ge1xuICBjb25kaXRpb246IERhdG9GaWx0ZXJDb25kaXRpb25zLklOX0xJU1QgfCBEYXRvRmlsdGVyQ29uZGl0aW9ucy5OT1RfSU5fTElTVDtcbiAgdmFsdWVzOiBTdHJpbmdPck51bWJlcltdO1xuICBjb2x1bW4/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkNvbmRpdGlvbiA9IHtcbiAgY29uZGl0aW9uOiBTaW5nbGVWYWx1ZUNvbmRpdGlvbnM7XG4gIHZhbHVlOiBTdHJpbmdPck51bWJlcjtcbiAgY29sdW1uPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgU2VydmVyU2lkZVBhZ2luYXRpb25GaWx0ZXJzQXJyYXkgPSAoXG4gIHwgU2VydmVyU2lkZVBhZ2luYXRpb25GaWx0ZXJcbiAgfCBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkNvbmRpdGlvblxuICB8IFNlcnZlclNpZGVQYWdpbmF0aW9uUmFuZ2VDb25kaXRpb25cbiAgfCBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkxpc3RDb25kaXRpb24pW107XG5cbmV4cG9ydCB0eXBlIFNlcnZlclNpZGVQYWdpbmF0aW9uRmlsdGVyID0ge1xuICBvcGVyYXRvcjogT3BlcmF0b3JUeXBlcztcbiAgZmlsdGVyczogU2VydmVyU2lkZVBhZ2luYXRpb25GaWx0ZXJzQXJyYXk7XG59O1xuXG5leHBvcnQgdHlwZSBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkZpbHRlcnMgPSBIYXNoTWFwPFNlcnZlclNpZGVQYWdpbmF0aW9uRmlsdGVyPjtcbmV4cG9ydCB0eXBlIExpc3RJdGVtID0geyBpZDogc3RyaW5nOyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIH07XG4iXX0=
@@ -151,7 +151,7 @@ var GridQuery = /** @class */ (function (_super) {
151
151
  return Object.keys(filter).reduce(function (filters, field) {
152
152
  var datoFilter = filter[field];
153
153
  if (datoFilter) {
154
- filters.push({ colId: datoFilter.colId, field: field, filter: datoFilter });
154
+ filters.push({ field: field, filter: datoFilter });
155
155
  }
156
156
  return filters;
157
157
  }, []);
@@ -234,4 +234,4 @@ var GridQuery = /** @class */ (function (_super) {
234
234
  return GridQuery;
235
235
  }(Query));
236
236
  export { GridQuery };
237
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5xdWVyeS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BkYXRvcmFtYS9jb3JlLyIsInNvdXJjZXMiOlsibGliL2dyaWQtdjIvZ3JpZC1zdG9yZS9ncmlkLnF1ZXJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUV6QyxPQUFPLEVBQVUsTUFBTSxFQUFXLE1BQU0sbUJBQW1CLENBQUM7QUFHNUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5RSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVN4RCxPQUFPLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUV0RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBR3pDO0lBQStCLDZCQUFxQjtJQTZDbEQsbUJBQXNCLEtBQWdCO1FBQXRDLFlBQ0Usa0JBQU0sS0FBSyxDQUFDLFNBQ2I7UUFGcUIsV0FBSyxHQUFMLEtBQUssQ0FBVztRQTFDdEMsV0FBVztRQUNYLGdCQUFVLEdBQUcsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEMsZ0JBQVUsR0FBRyxLQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBQSxLQUFLLElBQUksT0FBQSxLQUFLLEVBQUwsQ0FBSyxDQUFDLENBQUMsQ0FBQztRQUN6RSxXQUFXO1FBQ1gsdUJBQWlCLEdBQUcs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ZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaXNFbXB0eSwgUXVlcnkgfSBmcm9tICdAZGF0b3JhbWEvYWtpdGEnO1xuaW1wb3J0IHsgR3JpZFN0b3JlIH0gZnJvbSAnLi9ncmlkLnN0b3JlJztcbmltcG9ydCB7IERhdG9HcmlkU2V0dGluZ3MsIEdyaWRTdG9yZVN0YXRlLCBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkNvbmZpZyB9IGZyb20gJy4vZ3JpZC5zdG9yZS50eXBlcyc7XG5pbXBvcnQgeyBDb2x1bW4sIEV2ZW50cywgUm93Tm9kZSB9IGZyb20gJ2FnLWdyaWQtY29tbXVuaXR5JztcbmltcG9ydCB7IERhdG9HcmlkQXBpIH0gZnJvbSAnLi4vZ3JpZC1jb250cm9sbGVyL2dyaWQtY29udHJvbGxlci50eXBlcyc7XG5pbXBvcnQgeyBBZ0dyaWROZzIgfSBmcm9tICdhZy1ncmlkLWFuZ3VsYXInO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmcm9tRXZlbnQsIG1lcmdlLCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgRGF0b0dyaWRBbGlnbm1lbnQsXG4gIERhdG9HcmlkRGF0YUNoYW5nZWRFdmVudCxcbiAgRGF0b0dyaWRPcHRpb25zLFxuICBEYXRvR3JpZFNvcnQsXG4gIEdyaWRSb3dzU2VsZWN0aW9uRGF0YVxufSBmcm9tICcuLi9ncmlkL2dyaWQtdjIudHlwZXMnO1xuaW1wb3J0IHsgRGF0b0dyaWRFeHRlcm5hbEZpbHRlciwgRGF0b0dyaWRGaWx0ZXJzTWFwIH0gZnJvbSAnLi4vZ3JpZC1maWx0ZXIvZ3JpZC1maWx0ZXIudHlwZXMnO1xuaW1wb3J0IHsgZ2V0Q29sRmllbGQsIGdldENvbHVtbnNTaXplcyB9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgeyBIYXNoTWFwIH0gZnJvbSAnLi4vLi4vdXRpbHMvdHlwZXMnO1xuaW1wb3J0IHsgc2l6ZSB9IGZyb20gJy4uLy4uL3V0aWxzL2NvbGxlY3Rpb24nO1xuaW1wb3J0IHsgdW5pcSB9IGZyb20gJy4uLy4uL3V0aWxzL2FycmF5JztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEdyaWRRdWVyeSBleHRlbmRzIFF1ZXJ5PEdyaWRTdG9yZVN0YXRlPiBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIGFwaTogRGF0b0dyaWRBcGk7XG4gIGdyaWRSZWY6IEFnR3JpZE5nMjtcbiAgLy9AaW50ZXJuYWxcbiAgX2dyaWRSZWFkeSA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuICBncmlkUmVhZHkkID0gdGhpcy5fZ3JpZFJlYWR5LmFzT2JzZXJ2YWJsZSgpLnBpcGUoZmlsdGVyKHJlYWR5ID0+IHJlYWR5KSk7XG4gIC8vQGludGVybmFsXG4gIF9zZXJ2ZXJEYXRhTG9hZGVkID0gbmV3IFN1YmplY3Q8RGF0b0dyaWREYXRhQ2hhbmdlZEV2ZW50PigpO1xuICBzZXJ2ZXJEYXRhTG9hZGVkJCA9IHRoaXMuX3NlcnZlckRhdGFMb2FkZWQuYXNPYnNlcnZhYmxlKCk7XG4gIHJvd0RhdGFDaGFuZ2VkJDogT2JzZXJ2YWJsZTxhbnk+ID0gdGhpcy53YWl0Rm9yR3JpZCgoKSA9PlxuICAgIG1lcmdlKHRoaXMuZ3JpZFJlZi5yb3dEYXRhQ2hhbmdlZCwgdGhpcy5ncmlkUmVmLnJvd0RhdGFVcGRhdGVkLCB0aGlzLmdyaWRSZWYuZmlsdGVyQ2hhbmdlZCwgdGhpcy5zZXJ2ZXJEYXRhTG9hZGVkJClcbiAgKTtcbiAgc2VsZWN0ZWRSb3dzQ2hhbmdlJCA9IHRoaXMud2FpdEZvckdyaWQoKCkgPT5cbiAgICBmcm9tRXZlbnQodGhpcy5hcGkuZ3JpZCwgRXZlbnRzLkVWRU5UX1NFTEVDVElPTl9DSEFOR0VEKS5waXBlKG1hcCgoeyBhcGkgfSkgPT4gYXBpLmdldFNlbGVjdGVkUm93cygpKSlcbiAgKTtcblxuICByb3dzU2VsZWN0aW9uRGF0YSQ6IE9ic2VydmFibGU8R3JpZFJvd3NTZWxlY3Rpb25EYXRhPiA9IHRoaXMud2FpdEZvckdyaWQoKCkgPT4ge1xuICAgIHJldHVybiBtZXJnZShcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzQ2hhbmdlJCxcbiAgICAgIHRoaXMucm93RGF0YUNoYW5nZWQkLFxuICAgICAgdGhpcy5zZWxlY3RTZXJ2ZXJQYWdpbmF0aW9uQ29uZmlnKCksXG4gICAgICB0aGlzLndhaXRGb3JHcmlkKCgpID0+IG1lcmdlKHRoaXMuZ3JpZFJlZi5zb3J0Q2hhbmdlZCwgdGhpcy5ncmlkUmVmLnBhZ2luYXRpb25DaGFuZ2VkKSlcbiAgICApLnBpcGUoXG4gICAgICBtYXAoKCkgPT4ge1xuICAgICAgICBjb25zdCB0b3RhbFJvd3NDb3VudCA9IHRoaXMuaXNTZXJ2ZXJTaWRlXG4gICAgICAgICAgPyB0aGlzLnNlcnZlclNpZGVDb25maWcudG90YWxSb3dzXG4gICAgICAgICAgOiB0aGlzLmFwaS5ncmlkLmdldERpc3BsYXllZFJvd0NvdW50KCk7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkUm93c0NvdW50ID0gdGhpcy5nZXRTZWxlY3RlZFJvd3NDb3VudCgpO1xuXG4gICAgICAgIGNvbnN0IGN1cnJlbnRQYWdlUm93cyA9IHRoaXMuZ2V0Q3VycmVudFBhZ2VSb3dzKCk7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkUGFnZVJvd3NDb3VudCA9IHNpemUoY3VycmVudFBhZ2VSb3dzLmZpbHRlcigobm9kZTogUm93Tm9kZSkgPT4gbm9kZS5pc1NlbGVjdGVkKCkpKTtcbiAgICAgICAgY29uc3QgaXNBbGxQYWdlUm93c1NlbGVjdGVkID1cbiAgICAgICAgICAoc2VsZWN0ZWRQYWdlUm93c0NvdW50ID4gMCAmJiBzZWxlY3RlZFBhZ2VSb3dzQ291bnQgPT09IHNpemUoY3VycmVudFBhZ2VSb3dzKSkgfHxcbiAgICAgICAgICAodGhpcy5pc1NlcnZlclNlbGVjdEFsbFJvd3NFbmFibGVkICYmIGlzRW1wdHkodGhpcy5zZXJ2ZXJTaWRlQ29uZmlnLmV4Y2x1ZGVkRnJvbVNlbGVjdEFsbCkpO1xuXG4gICAgICAgIHJldHVybiB7IHRvdGFsUm93c0NvdW50LCBzZWxlY3RlZFJvd3NDb3VudCwgc2VsZWN0ZWRQYWdlUm93c0NvdW50LCBpc0FsbFBhZ2VSb3dzU2VsZWN0ZWQgfTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgZmlsdGVyQWN0aXZlJCA9IHRoaXMuc2VsZWN0KHN0YXRlID0+IHN0YXRlLnNldHRpbmdzKS5waXBlKFxuICAgIG1hcCgoeyBmaWx0ZXIsIHNlYXJjaFRlcm0gfTogRGF0b0dyaWRTZXR0aW5ncykgPT4gc2l6ZShmaWx0ZXIpID4gMCB8fCAhIXNlYXJjaFRlcm0pXG4gICk7XG4gIHNlcnZlclNpZGVFcnJvciQgPSB0aGlzLnNlbGVjdChzdGF0ZSA9PiBzdGF0ZS5zZXJ2ZXJTaWRlUGFnaW5hdGlvbi5oYXNFcnJvcik7XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIHN0b3JlOiBHcmlkU3RvcmUpIHtcbiAgICBzdXBlcihzdG9yZSk7XG4gIH1cblxuICBnZXQgc2VydmVyU2lkZUNvbmZpZygpOiBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkNvbmZpZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWUoKS5zZXJ2ZXJTaWRlUGFnaW5hdGlvbjtcbiAgfVxuXG4gIGdldCBpc1NlcnZlclNpZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VydmVyU2lkZUNvbmZpZy5lbmFibGVkO1xuICB9XG5cbiAgZ2V0IGlzU2VydmVyU2VsZWN0QWxsUm93c0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VydmVyU2lkZUNvbmZpZy5zZWxlY3RBbGxSb3dzRW5hYmxlZDtcbiAgfVxuXG4gIGdldCBncmlkQWxpZ25tZW50KCk6IERhdG9HcmlkQWxpZ25tZW50IHtcbiAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZSgpLnNldHRpbmdzLmdyaWRBbGlnbm1lbnQ7XG4gIH1cblxuICBnZXRDb2x1bW5TaXplcygpOiBIYXNoTWFwPG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLmdldFZhbHVlKCkuc2V0dGluZ3MuY29sdW1uc1NpemVzO1xuICB9XG5cbiAgZ2V0Q3VycmVudEdyaWRTZXR0aW5ncygpOiBEYXRvR3JpZFNldHRpbmdzIHtcbiAgICBjb25zdCB0b0NvbElkID0gY29sdW1uID0+IGNvbHVtbi5nZXRDb2xJZCgpO1xuICAgIGNvbnN0IHsgY29sdW1ucyB9ID0gdGhpcy5hcGk7XG4gICAgY29uc3QgZ3JvdXBlZENvbHVtbnMgPSBjb2x1bW5zLmdldFJvd0dyb3VwQ29sdW1ucygpO1xuICAgIGNvbnN0IGNvbHVtbnNPcmRlciA9IGNvbHVtbnMuZ2V0QWxsQ29sdW1ucygpO1xuICAgIGNvbnN0IGFsbEdyaWRDb2x1bW5zID0gY29sdW1ucy5nZXRBbGxHcmlkQ29sdW1ucygpO1xuICAgIGNvbnN0IGhpZGRlbkNvbHVtbnMgPSBjb2x1bW5zT3JkZXJcbiAgICAgIC5maWx0ZXIoY29sdW1uID0+ICFjb2x1bW4uaXNWaXNpYmxlKCkgJiYgIWdyb3VwZWRDb2x1bW5zLmluY2x1ZGVzKGNvbHVtbikpXG4gICAgICAubWFwKHRvQ29sSWQpO1xuICAgIGNvbnN0IHN0b3JlU2V0dGluZ3MgPSB0aGlzLmdldFZhbHVlKCkuc2V0dGluZ3M7XG4gICAgY29uc3Qgc2V0dGluZ3M6IERhdG9HcmlkU2V0dGluZ3MgPSB7XG4gICAgICBncmlkQWxpZ25tZW50OiBzdG9yZVNldHRpbmdzLmdyaWRBbGlnbm1lbnQsXG4gICAgICBzb3J0OiB0aGlzLmdldFNvcnQoKSxcbiAgICAgIGhpZGRlbkNvbHVtbnMsXG4gICAgICBncm91cGVkQ29sdW1uczogZ3JvdXBlZENvbHVtbnMubWFwKHRvQ29sSWQpLFxuICAgICAgZmlsdGVyOiB0aGlzLmdldEZpbHRlcigpLFxuICAgICAgcGlubmVkQ29sdW1uczogY29sdW1ucy5nZXREaXNwbGF5ZWRMZWZ0Q29sdW1ucygpLm1hcCh0b0NvbElkKSxcbiAgICAgIGNvbHVtbnNPcmRlcjogYWxsR3JpZENvbHVtbnMubWFwKHRvQ29sSWQpLFxuICAgICAgY29sdW1uc1NpemVzOiBudWxsLFxuICAgICAgc2VhcmNoVGVybTogbnVsbFxuICAgIH07XG5cbiAgICBpZiAoc3RvcmVTZXR0aW5ncy5ncmlkQWxpZ25tZW50ID09PSBEYXRvR3JpZEFsaWdubWVudC5DVVNUT00pIHtcbiAgICAgIHNldHRpbmdzLmNvbHVtbnNTaXplcyA9IGdldENvbHVtbnNTaXplcyhhbGxHcmlkQ29sdW1ucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNldHRpbmdzO1xuICB9XG5cbiAgZ2V0U29ydCgpOiBEYXRvR3JpZFNvcnQge1xuICAgIGlmICh0aGlzLmdyaWRSZWYuZ3JpZE9wdGlvbnMucGl2b3RNb2RlKSB7XG4gICAgICBjb25zdCB7IHNvcnQsIGNvbElkIH0gPSAodGhpcy5hcGkuZ3JpZC5nZXRTb3J0TW9kZWwoKS5wb3AoKSBhcyBEYXRvR3JpZFNvcnQpIHx8IHt9O1xuICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5hcGkuY29sdW1ucy5nZXRDb2x1bW4oY29sSWQpO1xuICAgICAgY29uc3QgcGl2b3RlZENvbHVtbiA9IHRoaXMuZ2V0U2Vjb25kYXJ5Q29sdW1uKGNvbElkKTtcblxuICAgICAgaWYgKHBpdm90ZWRDb2x1bW4pIHtcbiAgICAgICAgY29uc3QgdW5pcXVlUGl2b3RQYXJlbnRzID0gdW5pcSh0aGlzLmFwaS5jb2x1bW5zLmdldFNlY29uZGFyeUNvbHVtbnMoKS5tYXAoY29sdW1uID0+IGNvbHVtbi5nZXRQYXJlbnQoKSkpO1xuICAgICAgICBjb25zdCBzZWNvbmRhcnlDb2x1bW4gPSB0aGlzLmdldFNlY29uZGFyeUNvbHVtbihwaXZvdGVkQ29sdW1uLmdldENvbElkKCkpO1xuICAgICAgICBjb25zdCBwaXZvdENvbEluZGV4ID0gdW5pcXVlUGl2b3RQYXJlbnRzLmluZGV4T2Yoc2Vjb25kYXJ5Q29sdW1uLmdldFBhcmVudCgpKTtcblxuICAgICAgICByZXR1cm4geyBjb2xJZDogZ2V0Q29sRmllbGQocGl2b3RlZENvbHVtbi5nZXRDb2xEZWYoKSksIHNvcnQsIHBpdm90Q29sSW5kZXggfTtcbiAgICAgIH0gZWxzZSBpZiAoY29sdW1uKSB7XG4gICAgICAgIHJldHVybiB7IGNvbElkOiBnZXRDb2xGaWVsZChjb2x1bW4uZ2V0Q29sRGVmKCkpLCBzb3J0IH07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmFwaS5ncmlkLmdldFNvcnRNb2RlbCgpLnBvcCgpIGFzIERhdG9HcmlkU29ydDtcbiAgICB9XG4gIH1cblxuICBzZWxlY3RTb3J0KCk6IE9ic2VydmFibGU8RGF0b0dyaWRTb3J0PiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0KHN0YXRlID0+IHN0YXRlLnNldHRpbmdzLnNvcnQpO1xuICB9XG5cbiAgLyogQGludGVybmFsICovXG4gIF9zZXRBcGkoYXBpOiBEYXRvR3JpZEFwaSwgZ3JpZFJlZjogQWdHcmlkTmcyKSB7XG4gICAgdGhpcy5hcGkgPSBhcGk7XG4gICAgdGhpcy5ncmlkUmVmID0gZ3JpZFJlZjtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIGp1c3QgdGhlIHJvd3MgZGF0YSAqL1xuICBnZXRTZWxlY3RlZFJvd3M8VD4oKTogVFtdO1xuICBnZXRTZWxlY3RlZFJvd3M8VD4ob25seUZpcnN0Um93OiB0cnVlKTogVCB8IHVuZGVmaW5lZDtcbiAgZ2V0U2VsZWN0ZWRSb3dzPFQ+KG9ubHlGaXJzdFJvdzogZmFsc2UpOiBUW107XG4gIGdldFNlbGVjdGVkUm93czxUPihvbmx5Rmlyc3RSb3c/OiBib29sZWFuKTogVFtdIHwgVCB7XG4gICAgY29uc3Qgcm93cyA9IHRoaXMuYXBpLmdyaWQuZ2V0U2VsZWN0ZWRSb3dzKCk7XG4gICAgcmV0dXJuIG9ubHlGaXJzdFJvdyA/IHJvd3NbMF0gOiByb3dzO1xuICB9XG5cbiAgLyoqIFJldHVybnMgdGhlIGVudGlyZSByb3cgbm9kZSAqL1xuICBnZXRTZWxlY3RlZFJvd05vZGVzKCk6IFJvd05vZGVbXTtcbiAgZ2V0U2VsZWN0ZWRSb3dOb2Rlcyhvbmx5Rmlyc3RSb3c6IHRydWUpOiBSb3dOb2RlIHwgdW5kZWZpbmVkO1xuICBnZXRTZWxlY3RlZFJvd05vZGVzKG9ubHlGaXJzdFJvdzogZmFsc2UpOiBSb3dOb2RlW107XG4gIGdldFNlbGVjdGVkUm93Tm9kZXMob25seUZpcnN0Um93PzogYm9vbGVhbik6IFJvd05vZGVbXSB8IFJvd05vZGUge1xuICAgIGNvbnN0IHJvd3MgPSB0aGlzLmFwaS5ncmlkLmdldFNlbGVjdGVkTm9kZXMoKTtcbiAgICByZXR1cm4gb25seUZpcnN0Um93ID8gcm93c1swXSA6IHJvd3M7XG4gIH1cblxuICBnZXRGaWx0ZXIoKTogRGF0b0dyaWRGaWx0ZXJzTWFwIHtcbiAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZSgpLnNldHRpbmdzLmZpbHRlcjtcbiAgfVxuXG4gIHNlbGVjdEZpbHRlcigpOiBPYnNlcnZhYmxlPERhdG9HcmlkRmlsdGVyc01hcD4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdChzdGF0ZSA9PiBzdGF0ZS5zZXR0aW5ncy5maWx0ZXIpO1xuICB9XG5cbiAgZmlsdGVyQ2hhbmdlZCgpOiBPYnNlcnZhYmxlPERhdG9HcmlkRXh0ZXJuYWxGaWx0ZXJbXT4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdEZpbHRlcigpLnBpcGUoXG4gICAgICBtYXAoZmlsdGVyID0+IHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGZpbHRlcikucmVkdWNlKChmaWx0ZXJzLCBmaWVsZCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGRhdG9GaWx0ZXIgPSBmaWx0ZXJbZmllbGRdO1xuXG4gICAgICAgICAgaWYgKGRhdG9GaWx0ZXIpIHtcbiAgICAgICAgICAgIGZpbHRlcnMucHVzaCh7IGNvbElkOiBkYXRvRmlsdGVyLmNvbElkLCBmaWVsZCwgZmlsdGVyOiBkYXRvRmlsdGVyIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBmaWx0ZXJzO1xuICAgICAgICB9LCBbXSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRTZWFyY2hUZXJtKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWUoKS5zZXR0aW5ncy5zZWFyY2hUZXJtO1xuICB9XG5cbiAgc2VsZWN0U2VhcmNoVGVybSgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdCgoc3RhdGU6IEdyaWRTdG9yZVN0YXRlKSA9PiBzdGF0ZS5zZXR0aW5ncy5zZWFyY2hUZXJtKTtcbiAgfVxuXG4gIHdhaXRGb3JHcmlkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHdhaXRGb3JHcmlkPFQgPSBhbnk+KHNvdXJjZTogKCkgPT4gT2JzZXJ2YWJsZTxUPik6IE9ic2VydmFibGU8VD47XG4gIHdhaXRGb3JHcmlkPFQgPSBhbnk+KHNvdXJjZT86ICgpID0+IE9ic2VydmFibGU8VD4pOiBPYnNlcnZhYmxlPFQ+IHwgT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHNvdXJjZSA/IHRoaXMuZ3JpZFJlYWR5JC5waXBlKHN3aXRjaE1hcChzb3VyY2UpKSA6IHRoaXMuZ3JpZFJlYWR5JDtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX2dyaWRSZWFkeS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX3NlcnZlckRhdGFMb2FkZWQuY29tcGxldGUoKTtcbiAgfVxuXG4gIGdldEdyaWRPcHRpb25zKCk6IERhdG9HcmlkT3B0aW9ucyB7XG4gICAgcmV0dXJuIHRoaXMuZ3JpZFJlZiA/ICh0aGlzLmdyaWRSZWYuZ3JpZE9wdGlvbnMgYXMgRGF0b0dyaWRPcHRpb25zKSA6IG51bGw7XG4gIH1cblxuICBzZWxlY3RTZXJ2ZXJQYWdpbmF0aW9uQ29uZmlnKCk6IE9ic2VydmFibGU8U2VydmVyU2lkZVBhZ2luYXRpb25Db25maWc+IHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3QoKHN0YXRlOiBHcmlkU3RvcmVTdGF0ZSkgPT4gc3RhdGUuc2VydmVyU2lkZVBhZ2luYXRpb24pO1xuICB9XG5cbiAgZ2V0U2VsZWN0ZWRSb3dzQ291bnQoKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5pc1NlcnZlclNlbGVjdEFsbFJvd3NFbmFibGVkKSB7XG4gICAgICBjb25zdCB7IHRvdGFsUm93cywgZXhjbHVkZWRGcm9tU2VsZWN0QWxsIH0gPSB0aGlzLnNlcnZlclNpZGVDb25maWc7XG4gICAgICByZXR1cm4gdG90YWxSb3dzIC0gc2l6ZShleGNsdWRlZEZyb21TZWxlY3RBbGwpO1xuICAgIH1cbiAgICByZXR1cm4gc2l6ZSh0aGlzLmdldFNlbGVjdGVkUm93cygpKTtcbiAgfVxuXG4gIGdldEN1cnJlbnRQYWdlUm93cygpOiBSb3dOb2RlW10ge1xuICAgIGNvbnN0IHBhZ2VSb3dzOiBSb3dOb2RlW10gPSBbXTtcbiAgICBjb25zdCBwdXNoUGFnZVJvdyA9IChub2RlOiBSb3dOb2RlKSA9PiB7XG4gICAgICBwYWdlUm93cy5wdXNoKG5vZGUpO1xuICAgIH07XG4gICAgY29uc3QgZ3JpZCA9IHRoaXMuYXBpLmdyaWQ7XG4gICAgY29uc3QgcGFnZVNpemUgPSBncmlkLnBhZ2luYXRpb25HZXRQYWdlU2l6ZSgpO1xuICAgIGNvbnN0IGN1cnJlbnRQYWdlID0gZ3JpZC5wYWdpbmF0aW9uR2V0Q3VycmVudFBhZ2UoKTtcbiAgICBjb25zdCB0b3RhbFJvd3MgPSBncmlkLnBhZ2luYXRpb25HZXRSb3dDb3VudCgpO1xuICAgIGNvbnN0IGZpcnN0UGFnZUluZGV4ID0gY3VycmVudFBhZ2UgKiBwYWdlU2l6ZTtcbiAgICBsZXQgbGFzdFBhZ2VJbmRleCA9IGZpcnN0UGFnZUluZGV4ICsgcGFnZVNpemU7XG4gICAgaWYgKGxhc3RQYWdlSW5kZXggPiB0b3RhbFJvd3MpIHtcbiAgICAgIGxhc3RQYWdlSW5kZXggPSB0b3RhbFJvd3M7XG4gICAgfVxuICAgIGNvbnN0IHBlcmZvcm1BY3Rpb24gPSAobm9kZTogUm93Tm9kZSkgPT4ge1xuICAgICAgaWYgKG5vZGUucm93SW5kZXggPCBsYXN0UGFnZUluZGV4ICYmIG5vZGUucm93SW5kZXggPj0gZmlyc3RQYWdlSW5kZXgpIHtcbiAgICAgICAgcHVzaFBhZ2VSb3cobm9kZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLmlzU2VydmVyU2lkZSA/IGdyaWQuZm9yRWFjaE5vZGUocGVyZm9ybUFjdGlvbikgOiBncmlkLmZvckVhY2hOb2RlQWZ0ZXJGaWx0ZXJBbmRTb3J0KHBlcmZvcm1BY3Rpb24pO1xuICAgIHJldHVybiBwYWdlUm93cztcbiAgfVxuXG4gIGdldEFsbENvbHVtbnMoKTogQ29sdW1uW10ge1xuICAgIHJldHVybiB0aGlzLmZpbHRlckNoZWNrYm94U2VsZWN0aW9uQ29sdW1uKHRoaXMuYXBpLmNvbHVtbnMuZ2V0QWxsQ29sdW1ucygpKTtcbiAgfVxuXG4gIGdldEFsbERpc3BsYXllZENvbHVtbnMoKTogQ29sdW1uW10ge1xuICAgIHJldHVybiB0aGlzLmZpbHRlckNoZWNrYm94U2VsZWN0aW9uQ29sdW1uKHRoaXMuYXBpLmNvbHVtbnMuZ2V0QWxsRGlzcGxheWVkQ29sdW1ucygpKTtcbiAgfVxuXG4gIGdldEFsbFBpdm90Q29sdW1ucygpOiBDb2x1bW5bXSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QWxsQ29sdW1ucygpLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLmlzUGl2b3RBY3RpdmUoKSk7XG4gIH1cblxuICBzZWxlY3RJc1NlbGVjdEFsbFJvd3NFbmFibGVkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdChzdGF0ZSA9PiBzdGF0ZS5zZXJ2ZXJTaWRlUGFnaW5hdGlvbi5zZWxlY3RBbGxSb3dzRW5hYmxlZCk7XG4gIH1cblxuICBnZXRTZWNvbmRhcnlDb2x1bW4oY29sSWQ6IHN0cmluZyk6IENvbHVtbiB7XG4gICAgY29uc3Qgc2Vjb25kYXJ5Q29sdW1ucyA9IHRoaXMuYXBpLmNvbHVtbnMuZ2V0U2Vjb25kYXJ5Q29sdW1ucygpO1xuXG4gICAgcmV0dXJuIHNlY29uZGFyeUNvbHVtbnMgJiYgc2Vjb25kYXJ5Q29sdW1ucy5maW5kKGNvbCA9PiBjb2wuZ2V0Q29sSWQoKSA9PT0gY29sSWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBmaWx0ZXJDaGVja2JveFNlbGVjdGlvbkNvbHVtbihjb2x1bW5zOiBDb2x1bW5bXSk6IENvbHVtbltdIHtcbiAgICByZXR1cm4gY29sdW1ucy5maWx0ZXIoXG4gICAgICAoY29sdW1uOiBDb2x1bW4pID0+ICFjb2x1bW4uZ2V0VXNlclByb3ZpZGVkQ29sRGVmKCkgfHwgIWNvbHVtbi5nZXRVc2VyUHJvdmlkZWRDb2xEZWYoKS5jaGVja2JveFNlbGVjdGlvblxuICAgICk7XG4gIH1cbn1cbiJdfQ==
237
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5xdWVyeS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BkYXRvcmFtYS9jb3JlLyIsInNvdXJjZXMiOlsibGliL2dyaWQtdjIvZ3JpZC1zdG9yZS9ncmlkLnF1ZXJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUV6QyxPQUFPLEVBQVUsTUFBTSxFQUFXLE1BQU0sbUJBQW1CLENBQUM7QUFHNUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5RSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVN4RCxPQUFPLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUV0RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBR3pDO0lBQStCLDZCQUFxQjtJQTZDbEQsbUJBQXNCLEtBQWdCO1FBQXRDLFlBQ0Usa0JBQU0sS0FBSyxDQUFDLFNBQ2I7UUFGcUIsV0FBSyxHQUFMLEtBQUssQ0FBVztRQTFDdEMsV0FBVztRQUNYLGdCQUFVLEdBQUcsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEMsZ0JBQVUsR0FBRyxLQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBQSxLQUFLLElBQUksT0FBQSxLQUFLLEVBQUwsQ0FBSyxDQUFDLENBQUMsQ0FBQztRQUN6RSxXQUFXO1FBQ1gsdUJBQWlCLEdBQUcs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bGUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaXNFbXB0eSwgUXVlcnkgfSBmcm9tICdAZGF0b3JhbWEvYWtpdGEnO1xuaW1wb3J0IHsgR3JpZFN0b3JlIH0gZnJvbSAnLi9ncmlkLnN0b3JlJztcbmltcG9ydCB7IERhdG9HcmlkU2V0dGluZ3MsIEdyaWRTdG9yZVN0YXRlLCBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkNvbmZpZyB9IGZyb20gJy4vZ3JpZC5zdG9yZS50eXBlcyc7XG5pbXBvcnQgeyBDb2x1bW4sIEV2ZW50cywgUm93Tm9kZSB9IGZyb20gJ2FnLWdyaWQtY29tbXVuaXR5JztcbmltcG9ydCB7IERhdG9HcmlkQXBpIH0gZnJvbSAnLi4vZ3JpZC1jb250cm9sbGVyL2dyaWQtY29udHJvbGxlci50eXBlcyc7XG5pbXBvcnQgeyBBZ0dyaWROZzIgfSBmcm9tICdhZy1ncmlkLWFuZ3VsYXInO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmcm9tRXZlbnQsIG1lcmdlLCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgRGF0b0dyaWRBbGlnbm1lbnQsXG4gIERhdG9HcmlkRGF0YUNoYW5nZWRFdmVudCxcbiAgRGF0b0dyaWRPcHRpb25zLFxuICBEYXRvR3JpZFNvcnQsXG4gIEdyaWRSb3dzU2VsZWN0aW9uRGF0YVxufSBmcm9tICcuLi9ncmlkL2dyaWQtdjIudHlwZXMnO1xuaW1wb3J0IHsgRGF0b0dyaWRFeHRlcm5hbEZpbHRlciwgRGF0b0dyaWRGaWx0ZXJzTWFwIH0gZnJvbSAnLi4vZ3JpZC1maWx0ZXIvZ3JpZC1maWx0ZXIudHlwZXMnO1xuaW1wb3J0IHsgZ2V0Q29sRmllbGQsIGdldENvbHVtbnNTaXplcyB9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgeyBIYXNoTWFwIH0gZnJvbSAnLi4vLi4vdXRpbHMvdHlwZXMnO1xuaW1wb3J0IHsgc2l6ZSB9IGZyb20gJy4uLy4uL3V0aWxzL2NvbGxlY3Rpb24nO1xuaW1wb3J0IHsgdW5pcSB9IGZyb20gJy4uLy4uL3V0aWxzL2FycmF5JztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEdyaWRRdWVyeSBleHRlbmRzIFF1ZXJ5PEdyaWRTdG9yZVN0YXRlPiBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIGFwaTogRGF0b0dyaWRBcGk7XG4gIGdyaWRSZWY6IEFnR3JpZE5nMjtcbiAgLy9AaW50ZXJuYWxcbiAgX2dyaWRSZWFkeSA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuICBncmlkUmVhZHkkID0gdGhpcy5fZ3JpZFJlYWR5LmFzT2JzZXJ2YWJsZSgpLnBpcGUoZmlsdGVyKHJlYWR5ID0+IHJlYWR5KSk7XG4gIC8vQGludGVybmFsXG4gIF9zZXJ2ZXJEYXRhTG9hZGVkID0gbmV3IFN1YmplY3Q8RGF0b0dyaWREYXRhQ2hhbmdlZEV2ZW50PigpO1xuICBzZXJ2ZXJEYXRhTG9hZGVkJCA9IHRoaXMuX3NlcnZlckRhdGFMb2FkZWQuYXNPYnNlcnZhYmxlKCk7XG4gIHJvd0RhdGFDaGFuZ2VkJDogT2JzZXJ2YWJsZTxhbnk+ID0gdGhpcy53YWl0Rm9yR3JpZCgoKSA9PlxuICAgIG1lcmdlKHRoaXMuZ3JpZFJlZi5yb3dEYXRhQ2hhbmdlZCwgdGhpcy5ncmlkUmVmLnJvd0RhdGFVcGRhdGVkLCB0aGlzLmdyaWRSZWYuZmlsdGVyQ2hhbmdlZCwgdGhpcy5zZXJ2ZXJEYXRhTG9hZGVkJClcbiAgKTtcbiAgc2VsZWN0ZWRSb3dzQ2hhbmdlJCA9IHRoaXMud2FpdEZvckdyaWQoKCkgPT5cbiAgICBmcm9tRXZlbnQodGhpcy5hcGkuZ3JpZCwgRXZlbnRzLkVWRU5UX1NFTEVDVElPTl9DSEFOR0VEKS5waXBlKG1hcCgoeyBhcGkgfSkgPT4gYXBpLmdldFNlbGVjdGVkUm93cygpKSlcbiAgKTtcblxuICByb3dzU2VsZWN0aW9uRGF0YSQ6IE9ic2VydmFibGU8R3JpZFJvd3NTZWxlY3Rpb25EYXRhPiA9IHRoaXMud2FpdEZvckdyaWQoKCkgPT4ge1xuICAgIHJldHVybiBtZXJnZShcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzQ2hhbmdlJCxcbiAgICAgIHRoaXMucm93RGF0YUNoYW5nZWQkLFxuICAgICAgdGhpcy5zZWxlY3RTZXJ2ZXJQYWdpbmF0aW9uQ29uZmlnKCksXG4gICAgICB0aGlzLndhaXRGb3JHcmlkKCgpID0+IG1lcmdlKHRoaXMuZ3JpZFJlZi5zb3J0Q2hhbmdlZCwgdGhpcy5ncmlkUmVmLnBhZ2luYXRpb25DaGFuZ2VkKSlcbiAgICApLnBpcGUoXG4gICAgICBtYXAoKCkgPT4ge1xuICAgICAgICBjb25zdCB0b3RhbFJvd3NDb3VudCA9IHRoaXMuaXNTZXJ2ZXJTaWRlXG4gICAgICAgICAgPyB0aGlzLnNlcnZlclNpZGVDb25maWcudG90YWxSb3dzXG4gICAgICAgICAgOiB0aGlzLmFwaS5ncmlkLmdldERpc3BsYXllZFJvd0NvdW50KCk7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkUm93c0NvdW50ID0gdGhpcy5nZXRTZWxlY3RlZFJvd3NDb3VudCgpO1xuXG4gICAgICAgIGNvbnN0IGN1cnJlbnRQYWdlUm93cyA9IHRoaXMuZ2V0Q3VycmVudFBhZ2VSb3dzKCk7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkUGFnZVJvd3NDb3VudCA9IHNpemUoY3VycmVudFBhZ2VSb3dzLmZpbHRlcigobm9kZTogUm93Tm9kZSkgPT4gbm9kZS5pc1NlbGVjdGVkKCkpKTtcbiAgICAgICAgY29uc3QgaXNBbGxQYWdlUm93c1NlbGVjdGVkID1cbiAgICAgICAgICAoc2VsZWN0ZWRQYWdlUm93c0NvdW50ID4gMCAmJiBzZWxlY3RlZFBhZ2VSb3dzQ291bnQgPT09IHNpemUoY3VycmVudFBhZ2VSb3dzKSkgfHxcbiAgICAgICAgICAodGhpcy5pc1NlcnZlclNlbGVjdEFsbFJvd3NFbmFibGVkICYmIGlzRW1wdHkodGhpcy5zZXJ2ZXJTaWRlQ29uZmlnLmV4Y2x1ZGVkRnJvbVNlbGVjdEFsbCkpO1xuXG4gICAgICAgIHJldHVybiB7IHRvdGFsUm93c0NvdW50LCBzZWxlY3RlZFJvd3NDb3VudCwgc2VsZWN0ZWRQYWdlUm93c0NvdW50LCBpc0FsbFBhZ2VSb3dzU2VsZWN0ZWQgfTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgZmlsdGVyQWN0aXZlJCA9IHRoaXMuc2VsZWN0KHN0YXRlID0+IHN0YXRlLnNldHRpbmdzKS5waXBlKFxuICAgIG1hcCgoeyBmaWx0ZXIsIHNlYXJjaFRlcm0gfTogRGF0b0dyaWRTZXR0aW5ncykgPT4gc2l6ZShmaWx0ZXIpID4gMCB8fCAhIXNlYXJjaFRlcm0pXG4gICk7XG4gIHNlcnZlclNpZGVFcnJvciQgPSB0aGlzLnNlbGVjdChzdGF0ZSA9PiBzdGF0ZS5zZXJ2ZXJTaWRlUGFnaW5hdGlvbi5oYXNFcnJvcik7XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIHN0b3JlOiBHcmlkU3RvcmUpIHtcbiAgICBzdXBlcihzdG9yZSk7XG4gIH1cblxuICBnZXQgc2VydmVyU2lkZUNvbmZpZygpOiBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkNvbmZpZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWUoKS5zZXJ2ZXJTaWRlUGFnaW5hdGlvbjtcbiAgfVxuXG4gIGdldCBpc1NlcnZlclNpZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VydmVyU2lkZUNvbmZpZy5lbmFibGVkO1xuICB9XG5cbiAgZ2V0IGlzU2VydmVyU2VsZWN0QWxsUm93c0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VydmVyU2lkZUNvbmZpZy5zZWxlY3RBbGxSb3dzRW5hYmxlZDtcbiAgfVxuXG4gIGdldCBncmlkQWxpZ25tZW50KCk6IERhdG9HcmlkQWxpZ25tZW50IHtcbiAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZSgpLnNldHRpbmdzLmdyaWRBbGlnbm1lbnQ7XG4gIH1cblxuICBnZXRDb2x1bW5TaXplcygpOiBIYXNoTWFwPG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLmdldFZhbHVlKCkuc2V0dGluZ3MuY29sdW1uc1NpemVzO1xuICB9XG5cbiAgZ2V0Q3VycmVudEdyaWRTZXR0aW5ncygpOiBEYXRvR3JpZFNldHRpbmdzIHtcbiAgICBjb25zdCB0b0NvbElkID0gY29sdW1uID0+IGNvbHVtbi5nZXRDb2xJZCgpO1xuICAgIGNvbnN0IHsgY29sdW1ucyB9ID0gdGhpcy5hcGk7XG4gICAgY29uc3QgZ3JvdXBlZENvbHVtbnMgPSBjb2x1bW5zLmdldFJvd0dyb3VwQ29sdW1ucygpO1xuICAgIGNvbnN0IGNvbHVtbnNPcmRlciA9IGNvbHVtbnMuZ2V0QWxsQ29sdW1ucygpO1xuICAgIGNvbnN0IGFsbEdyaWRDb2x1bW5zID0gY29sdW1ucy5nZXRBbGxHcmlkQ29sdW1ucygpO1xuICAgIGNvbnN0IGhpZGRlbkNvbHVtbnMgPSBjb2x1bW5zT3JkZXJcbiAgICAgIC5maWx0ZXIoY29sdW1uID0+ICFjb2x1bW4uaXNWaXNpYmxlKCkgJiYgIWdyb3VwZWRDb2x1bW5zLmluY2x1ZGVzKGNvbHVtbikpXG4gICAgICAubWFwKHRvQ29sSWQpO1xuICAgIGNvbnN0IHN0b3JlU2V0dGluZ3MgPSB0aGlzLmdldFZhbHVlKCkuc2V0dGluZ3M7XG4gICAgY29uc3Qgc2V0dGluZ3M6IERhdG9HcmlkU2V0dGluZ3MgPSB7XG4gICAgICBncmlkQWxpZ25tZW50OiBzdG9yZVNldHRpbmdzLmdyaWRBbGlnbm1lbnQsXG4gICAgICBzb3J0OiB0aGlzLmdldFNvcnQoKSxcbiAgICAgIGhpZGRlbkNvbHVtbnMsXG4gICAgICBncm91cGVkQ29sdW1uczogZ3JvdXBlZENvbHVtbnMubWFwKHRvQ29sSWQpLFxuICAgICAgZmlsdGVyOiB0aGlzLmdldEZpbHRlcigpLFxuICAgICAgcGlubmVkQ29sdW1uczogY29sdW1ucy5nZXREaXNwbGF5ZWRMZWZ0Q29sdW1ucygpLm1hcCh0b0NvbElkKSxcbiAgICAgIGNvbHVtbnNPcmRlcjogYWxsR3JpZENvbHVtbnMubWFwKHRvQ29sSWQpLFxuICAgICAgY29sdW1uc1NpemVzOiBudWxsLFxuICAgICAgc2VhcmNoVGVybTogbnVsbFxuICAgIH07XG5cbiAgICBpZiAoc3RvcmVTZXR0aW5ncy5ncmlkQWxpZ25tZW50ID09PSBEYXRvR3JpZEFsaWdubWVudC5DVVNUT00pIHtcbiAgICAgIHNldHRpbmdzLmNvbHVtbnNTaXplcyA9IGdldENvbHVtbnNTaXplcyhhbGxHcmlkQ29sdW1ucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNldHRpbmdzO1xuICB9XG5cbiAgZ2V0U29ydCgpOiBEYXRvR3JpZFNvcnQge1xuICAgIGlmICh0aGlzLmdyaWRSZWYuZ3JpZE9wdGlvbnMucGl2b3RNb2RlKSB7XG4gICAgICBjb25zdCB7IHNvcnQsIGNvbElkIH0gPSAodGhpcy5hcGkuZ3JpZC5nZXRTb3J0TW9kZWwoKS5wb3AoKSBhcyBEYXRvR3JpZFNvcnQpIHx8IHt9O1xuICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5hcGkuY29sdW1ucy5nZXRDb2x1bW4oY29sSWQpO1xuICAgICAgY29uc3QgcGl2b3RlZENvbHVtbiA9IHRoaXMuZ2V0U2Vjb25kYXJ5Q29sdW1uKGNvbElkKTtcblxuICAgICAgaWYgKHBpdm90ZWRDb2x1bW4pIHtcbiAgICAgICAgY29uc3QgdW5pcXVlUGl2b3RQYXJlbnRzID0gdW5pcSh0aGlzLmFwaS5jb2x1bW5zLmdldFNlY29uZGFyeUNvbHVtbnMoKS5tYXAoY29sdW1uID0+IGNvbHVtbi5nZXRQYXJlbnQoKSkpO1xuICAgICAgICBjb25zdCBzZWNvbmRhcnlDb2x1bW4gPSB0aGlzLmdldFNlY29uZGFyeUNvbHVtbihwaXZvdGVkQ29sdW1uLmdldENvbElkKCkpO1xuICAgICAgICBjb25zdCBwaXZvdENvbEluZGV4ID0gdW5pcXVlUGl2b3RQYXJlbnRzLmluZGV4T2Yoc2Vjb25kYXJ5Q29sdW1uLmdldFBhcmVudCgpKTtcblxuICAgICAgICByZXR1cm4geyBjb2xJZDogZ2V0Q29sRmllbGQocGl2b3RlZENvbHVtbi5nZXRDb2xEZWYoKSksIHNvcnQsIHBpdm90Q29sSW5kZXggfTtcbiAgICAgIH0gZWxzZSBpZiAoY29sdW1uKSB7XG4gICAgICAgIHJldHVybiB7IGNvbElkOiBnZXRDb2xGaWVsZChjb2x1bW4uZ2V0Q29sRGVmKCkpLCBzb3J0IH07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmFwaS5ncmlkLmdldFNvcnRNb2RlbCgpLnBvcCgpIGFzIERhdG9HcmlkU29ydDtcbiAgICB9XG4gIH1cblxuICBzZWxlY3RTb3J0KCk6IE9ic2VydmFibGU8RGF0b0dyaWRTb3J0PiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0KHN0YXRlID0+IHN0YXRlLnNldHRpbmdzLnNvcnQpO1xuICB9XG5cbiAgLyogQGludGVybmFsICovXG4gIF9zZXRBcGkoYXBpOiBEYXRvR3JpZEFwaSwgZ3JpZFJlZjogQWdHcmlkTmcyKSB7XG4gICAgdGhpcy5hcGkgPSBhcGk7XG4gICAgdGhpcy5ncmlkUmVmID0gZ3JpZFJlZjtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIGp1c3QgdGhlIHJvd3MgZGF0YSAqL1xuICBnZXRTZWxlY3RlZFJvd3M8VD4oKTogVFtdO1xuICBnZXRTZWxlY3RlZFJvd3M8VD4ob25seUZpcnN0Um93OiB0cnVlKTogVCB8IHVuZGVmaW5lZDtcbiAgZ2V0U2VsZWN0ZWRSb3dzPFQ+KG9ubHlGaXJzdFJvdzogZmFsc2UpOiBUW107XG4gIGdldFNlbGVjdGVkUm93czxUPihvbmx5Rmlyc3RSb3c/OiBib29sZWFuKTogVFtdIHwgVCB7XG4gICAgY29uc3Qgcm93cyA9IHRoaXMuYXBpLmdyaWQuZ2V0U2VsZWN0ZWRSb3dzKCk7XG4gICAgcmV0dXJuIG9ubHlGaXJzdFJvdyA/IHJvd3NbMF0gOiByb3dzO1xuICB9XG5cbiAgLyoqIFJldHVybnMgdGhlIGVudGlyZSByb3cgbm9kZSAqL1xuICBnZXRTZWxlY3RlZFJvd05vZGVzKCk6IFJvd05vZGVbXTtcbiAgZ2V0U2VsZWN0ZWRSb3dOb2Rlcyhvbmx5Rmlyc3RSb3c6IHRydWUpOiBSb3dOb2RlIHwgdW5kZWZpbmVkO1xuICBnZXRTZWxlY3RlZFJvd05vZGVzKG9ubHlGaXJzdFJvdzogZmFsc2UpOiBSb3dOb2RlW107XG4gIGdldFNlbGVjdGVkUm93Tm9kZXMob25seUZpcnN0Um93PzogYm9vbGVhbik6IFJvd05vZGVbXSB8IFJvd05vZGUge1xuICAgIGNvbnN0IHJvd3MgPSB0aGlzLmFwaS5ncmlkLmdldFNlbGVjdGVkTm9kZXMoKTtcbiAgICByZXR1cm4gb25seUZpcnN0Um93ID8gcm93c1swXSA6IHJvd3M7XG4gIH1cblxuICBnZXRGaWx0ZXIoKTogRGF0b0dyaWRGaWx0ZXJzTWFwIHtcbiAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZSgpLnNldHRpbmdzLmZpbHRlcjtcbiAgfVxuXG4gIHNlbGVjdEZpbHRlcigpOiBPYnNlcnZhYmxlPERhdG9HcmlkRmlsdGVyc01hcD4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdChzdGF0ZSA9PiBzdGF0ZS5zZXR0aW5ncy5maWx0ZXIpO1xuICB9XG5cbiAgZmlsdGVyQ2hhbmdlZCgpOiBPYnNlcnZhYmxlPERhdG9HcmlkRXh0ZXJuYWxGaWx0ZXJbXT4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdEZpbHRlcigpLnBpcGUoXG4gICAgICBtYXAoZmlsdGVyID0+IHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGZpbHRlcikucmVkdWNlKChmaWx0ZXJzLCBmaWVsZCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGRhdG9GaWx0ZXIgPSBmaWx0ZXJbZmllbGRdO1xuXG4gICAgICAgICAgaWYgKGRhdG9GaWx0ZXIpIHtcbiAgICAgICAgICAgIGZpbHRlcnMucHVzaCh7IGZpZWxkLCBmaWx0ZXI6IGRhdG9GaWx0ZXIgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGZpbHRlcnM7XG4gICAgICAgIH0sIFtdKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldFNlYXJjaFRlcm0oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZSgpLnNldHRpbmdzLnNlYXJjaFRlcm07XG4gIH1cblxuICBzZWxlY3RTZWFyY2hUZXJtKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0KChzdGF0ZTogR3JpZFN0b3JlU3RhdGUpID0+IHN0YXRlLnNldHRpbmdzLnNlYXJjaFRlcm0pO1xuICB9XG5cbiAgd2FpdEZvckdyaWQoKTogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgd2FpdEZvckdyaWQ8VCA9IGFueT4oc291cmNlOiAoKSA9PiBPYnNlcnZhYmxlPFQ+KTogT2JzZXJ2YWJsZTxUPjtcbiAgd2FpdEZvckdyaWQ8VCA9IGFueT4oc291cmNlPzogKCkgPT4gT2JzZXJ2YWJsZTxUPik6IE9ic2VydmFibGU8VD4gfCBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gc291cmNlID8gdGhpcy5ncmlkUmVhZHkkLnBpcGUoc3dpdGNoTWFwKHNvdXJjZSkpIDogdGhpcy5ncmlkUmVhZHkkO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fZ3JpZFJlYWR5LmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fc2VydmVyRGF0YUxvYWRlZC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgZ2V0R3JpZE9wdGlvbnMoKTogRGF0b0dyaWRPcHRpb25zIHtcbiAgICByZXR1cm4gdGhpcy5ncmlkUmVmID8gKHRoaXMuZ3JpZFJlZi5ncmlkT3B0aW9ucyBhcyBEYXRvR3JpZE9wdGlvbnMpIDogbnVsbDtcbiAgfVxuXG4gIHNlbGVjdFNlcnZlclBhZ2luYXRpb25Db25maWcoKTogT2JzZXJ2YWJsZTxTZXJ2ZXJTaWRlUGFnaW5hdGlvbkNvbmZpZz4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdCgoc3RhdGU6IEdyaWRTdG9yZVN0YXRlKSA9PiBzdGF0ZS5zZXJ2ZXJTaWRlUGFnaW5hdGlvbik7XG4gIH1cblxuICBnZXRTZWxlY3RlZFJvd3NDb3VudCgpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLmlzU2VydmVyU2VsZWN0QWxsUm93c0VuYWJsZWQpIHtcbiAgICAgIGNvbnN0IHsgdG90YWxSb3dzLCBleGNsdWRlZEZyb21TZWxlY3RBbGwgfSA9IHRoaXMuc2VydmVyU2lkZUNvbmZpZztcbiAgICAgIHJldHVybiB0b3RhbFJvd3MgLSBzaXplKGV4Y2x1ZGVkRnJvbVNlbGVjdEFsbCk7XG4gICAgfVxuICAgIHJldHVybiBzaXplKHRoaXMuZ2V0U2VsZWN0ZWRSb3dzKCkpO1xuICB9XG5cbiAgZ2V0Q3VycmVudFBhZ2VSb3dzKCk6IFJvd05vZGVbXSB7XG4gICAgY29uc3QgcGFnZVJvd3M6IFJvd05vZGVbXSA9IFtdO1xuICAgIGNvbnN0IHB1c2hQYWdlUm93ID0gKG5vZGU6IFJvd05vZGUpID0+IHtcbiAgICAgIHBhZ2VSb3dzLnB1c2gobm9kZSk7XG4gICAgfTtcbiAgICBjb25zdCBncmlkID0gdGhpcy5hcGkuZ3JpZDtcbiAgICBjb25zdCBwYWdlU2l6ZSA9IGdyaWQucGFnaW5hdGlvbkdldFBhZ2VTaXplKCk7XG4gICAgY29uc3QgY3VycmVudFBhZ2UgPSBncmlkLnBhZ2luYXRpb25HZXRDdXJyZW50UGFnZSgpO1xuICAgIGNvbnN0IHRvdGFsUm93cyA9IGdyaWQucGFnaW5hdGlvbkdldFJvd0NvdW50KCk7XG4gICAgY29uc3QgZmlyc3RQYWdlSW5kZXggPSBjdXJyZW50UGFnZSAqIHBhZ2VTaXplO1xuICAgIGxldCBsYXN0UGFnZUluZGV4ID0gZmlyc3RQYWdlSW5kZXggKyBwYWdlU2l6ZTtcbiAgICBpZiAobGFzdFBhZ2VJbmRleCA+IHRvdGFsUm93cykge1xuICAgICAgbGFzdFBhZ2VJbmRleCA9IHRvdGFsUm93cztcbiAgICB9XG4gICAgY29uc3QgcGVyZm9ybUFjdGlvbiA9IChub2RlOiBSb3dOb2RlKSA9PiB7XG4gICAgICBpZiAobm9kZS5yb3dJbmRleCA8IGxhc3RQYWdlSW5kZXggJiYgbm9kZS5yb3dJbmRleCA+PSBmaXJzdFBhZ2VJbmRleCkge1xuICAgICAgICBwdXNoUGFnZVJvdyhub2RlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuaXNTZXJ2ZXJTaWRlID8gZ3JpZC5mb3JFYWNoTm9kZShwZXJmb3JtQWN0aW9uKSA6IGdyaWQuZm9yRWFjaE5vZGVBZnRlckZpbHRlckFuZFNvcnQocGVyZm9ybUFjdGlvbik7XG4gICAgcmV0dXJuIHBhZ2VSb3dzO1xuICB9XG5cbiAgZ2V0QWxsQ29sdW1ucygpOiBDb2x1bW5bXSB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyQ2hlY2tib3hTZWxlY3Rpb25Db2x1bW4odGhpcy5hcGkuY29sdW1ucy5nZXRBbGxDb2x1bW5zKCkpO1xuICB9XG5cbiAgZ2V0QWxsRGlzcGxheWVkQ29sdW1ucygpOiBDb2x1bW5bXSB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyQ2hlY2tib3hTZWxlY3Rpb25Db2x1bW4odGhpcy5hcGkuY29sdW1ucy5nZXRBbGxEaXNwbGF5ZWRDb2x1bW5zKCkpO1xuICB9XG5cbiAgZ2V0QWxsUGl2b3RDb2x1bW5zKCk6IENvbHVtbltdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRBbGxDb2x1bW5zKCkuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uaXNQaXZvdEFjdGl2ZSgpKTtcbiAgfVxuXG4gIHNlbGVjdElzU2VsZWN0QWxsUm93c0VuYWJsZWQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0KHN0YXRlID0+IHN0YXRlLnNlcnZlclNpZGVQYWdpbmF0aW9uLnNlbGVjdEFsbFJvd3NFbmFibGVkKTtcbiAgfVxuXG4gIGdldFNlY29uZGFyeUNvbHVtbihjb2xJZDogc3RyaW5nKTogQ29sdW1uIHtcbiAgICBjb25zdCBzZWNvbmRhcnlDb2x1bW5zID0gdGhpcy5hcGkuY29sdW1ucy5nZXRTZWNvbmRhcnlDb2x1bW5zKCk7XG5cbiAgICByZXR1cm4gc2Vjb25kYXJ5Q29sdW1ucyAmJiBzZWNvbmRhcnlDb2x1bW5zLmZpbmQoY29sID0+IGNvbC5nZXRDb2xJZCgpID09PSBjb2xJZCk7XG4gIH1cblxuICBwcml2YXRlIGZpbHRlckNoZWNrYm94U2VsZWN0aW9uQ29sdW1uKGNvbHVtbnM6IENvbHVtbltdKTogQ29sdW1uW10ge1xuICAgIHJldHVybiBjb2x1bW5zLmZpbHRlcihcbiAgICAgIChjb2x1bW46IENvbHVtbikgPT4gIWNvbHVtbi5nZXRVc2VyUHJvdmlkZWRDb2xEZWYoKSB8fCAhY29sdW1uLmdldFVzZXJQcm92aWRlZENvbERlZigpLmNoZWNrYm94U2VsZWN0aW9uXG4gICAgKTtcbiAgfVxufVxuIl19