@datorama/core 22.5.1 → 22.5.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/bundles/datorama-core.umd.js +128 -109
  2. package/bundles/datorama-core.umd.js.map +1 -1
  3. package/bundles/datorama-core.umd.min.js +18 -18
  4. package/bundles/datorama-core.umd.min.js.map +1 -1
  5. package/datorama-core.metadata.json +1 -1
  6. package/esm2015/lib/accordion/accordion/accordion.component.js +11 -3
  7. package/esm2015/lib/grid-v2/grid/grid-v2.types.js +1 -1
  8. package/esm2015/lib/grid-v2/grid-filter/grid-filter.component.js +6 -2
  9. package/esm2015/lib/grid-v2/grid-pagination/grid-pagination.component.js +2 -2
  10. package/esm2015/lib/grid-v2/grid-store/grid.service.js +2 -2
  11. package/esm2015/lib/icon/icon.types.js +1 -1
  12. package/esm2015/lib/sortable/sortable.component.js +7 -2
  13. package/esm2015/lib/version.js +2 -2
  14. package/esm5/lib/accordion/accordion/accordion.component.js +15 -3
  15. package/esm5/lib/grid-v2/grid/grid-v2.types.js +1 -1
  16. package/esm5/lib/grid-v2/grid-filter/grid-filter.component.js +6 -2
  17. package/esm5/lib/grid-v2/grid-pagination/grid-pagination.component.js +2 -2
  18. package/esm5/lib/grid-v2/grid-store/grid.service.js +2 -2
  19. package/esm5/lib/icon/icon.types.js +1 -1
  20. package/esm5/lib/sortable/sortable.component.js +7 -2
  21. package/esm5/lib/version.js +2 -2
  22. package/fesm2015/datorama-core.js +118 -103
  23. package/fesm2015/datorama-core.js.map +1 -1
  24. package/fesm5/datorama-core.js +128 -109
  25. package/fesm5/datorama-core.js.map +1 -1
  26. package/i18n/locale-en_US.json +2 -0
  27. package/lib/accordion/accordion/accordion.component.d.ts +4 -1
  28. package/lib/grid-v2/grid/grid-v2.types.d.ts +1 -0
  29. package/lib/grid-v2/grid-filter/grid-filter.component.d.ts +1 -0
  30. package/lib/icon/icon.types.d.ts +1 -1
  31. package/lib/sortable/sortable.component.d.ts +3 -1
  32. package/package.json +1 -1
@@ -65,6 +65,7 @@ var DatoGridFilterComponent = /** @class */ (function () {
65
65
  };
66
66
  this.hotKeyTooltip = formatKeys(this.applyHotKeyConfig.keys);
67
67
  this.activeAccordionId = 0;
68
+ this.showClearFiltersButton = true;
68
69
  this.excludedValues = new Set();
69
70
  }
70
71
  Object.defineProperty(DatoGridFilterComponent.prototype, "byValueControl", {
@@ -179,6 +180,9 @@ var DatoGridFilterComponent = /** @class */ (function () {
179
180
  var colFilter = filter || colDef.filter;
180
181
  var filterOptions = DatoGridFilterOptionsMap[colFilter];
181
182
  this.pivotColumn = gridQuery.api.columns.getSecondaryPivotColumn(pivotKeys, pivotValueColumn);
183
+ if (!isNil(filtersConfig.showClearFiltersButton)) {
184
+ this.showClearFiltersButton = filtersConfig.showClearFiltersButton;
185
+ }
182
186
  if (filtersConfig.sections) {
183
187
  this.filterSections = (_a = {}, _a[filtersConfig.sections] = true, _a);
184
188
  }
@@ -686,7 +690,7 @@ var DatoGridFilterComponent = /** @class */ (function () {
686
690
  DatoGridFilterComponent = __decorate([
687
691
  Component({
688
692
  selector: 'dato-grid-filter',
689
- template: "<form class=\"container primary-0-background-color\" [formGroup]=\"filterForm\" datoForm\n *datoSubscribe=\"hasFilter$ as hasFilter\">\n <ng-container>\n <dato-accordion closeOthers=\"true\" class=\"filter-options\" [activeIds]=\"activeAccordionId\">\n <ng-container *ngIf=\"filterSections.Conditional\">\n\n <dato-accordion-group>\n <dato-accordion-header class=\"dato-note-bold primary-600-color\" data-auto-id=\"conditional-filters\"\n [class.primary-100-background-color]=\"header_1.isOpen\" #header_1>\n <div class=\"px-10 d-flex align-start-center\">\n <div class=\"filter-title d-flex-grow d-flex align-start-center\">{{'core.filterByCondition' | translate}}</div>\n <dato-icon class=\"primary-200-color\" height=\"18px\"\n [icon]=\"header_1.isOpen ? 'collapse' : 'expand'\"></dato-icon>\n </div>\n </dato-accordion-header>\n <dato-accordion-content #conditionalContent>\n <div class=\"conditional-content-container d-flex-column\" formGroupName=\"conditional\"\n [class.multi-conditions]=\"conditionsControls.length > 1\">\n <div class=\"operand d-flex-column mb-10\"\n [attr.data-auto-id]=\"'condition-' + i\"\n *ngFor=\"let operand of conditionsControls; index as i; last as last\">\n <div class=\"d-flex\">\n <div class=\"d-flex-column d-flex-grow min-width-0\">\n <ng-container formArrayName=\"conditions\">\n\n <ng-container [formGroupName]=\"i\">\n <dato-select datoSize=\"sm\" class=\"mb-10\" [attr.data-auto-id]=\"'condition-' + i + '-operand'\" formControlName=\"type\"\n datoSelectClass=\"operand-select\"\n [dataSet]=\"conditionalFilterOptions\"\n [isCombo]=\"false\" #select>\n <dato-option *ngFor=\"let option of select.data; index as index\"\n [option]=\"option\">\n {{ option.label }}\n </dato-option>\n </dato-select>\n <ng-container [ngSwitch]=\"filterType\">\n <div class=\"d-flex\" *ngSwitchCase=\"gridFilterTypes.Date\">\n <dato-date-picker [attr.data-auto-id]=\"'condition-date-' + i + '-value'\"\n formControlName=\"value\" class=\"d-flex-grow range-calendar\">\n <ng-template>\n <dato-date-picker-range *ngIf=\"getOperandType(i) === rangeOperand; else singleDate\"></dato-date-picker-range>\n <ng-template #singleDate>\n <dato-date-picker-single></dato-date-picker-single>\n </ng-template>\n </ng-template>\n </dato-date-picker>\n </div>\n <ng-container *ngIf=\"!isConditionalEmpty(operand)\">\n <dato-input *ngSwitchCase=\"gridFilterTypes.String\" datoSize=\"sm\"\n (keydown.enter.stop.prevent)=\"closePopUp()\"\n datoControlErrors [attr.data-auto-id]=\"'condition-string-' + i + '-value'\"\n [datoControlErrorsOnBlur]=\"false\"\n class=\"condition-value\"\n placeholder=\"core.filter\" formControlName=\"value\"\n [isFocused]=\"conditionalContent._expanded\"\n ></dato-input>\n <div class=\"d-flex\" *ngSwitchCase=\"gridFilterTypes.Number\">\n <dato-input-number (keydown.enter.stop.prevent)=\"closePopUp()\" [showControls]=\"false\"\n class=\"width-100 condition-value\" allowNegative=\"true\">\n <input type=\"number\" formControlName=\"value\" [attr.data-auto-id]=\"'condition-number-' + i + '-value'\"\n datoInputNumber datoSize=\"sm\" datoControlErrors [datoAutoFocus]=\"conditionalContent._expanded\"\n [datoControlErrorsOnBlur]=\"false\"/>\n </dato-input-number>\n <ng-container *ngIf=\"getOperandType(i) === rangeOperand\">\n <div class=\"mx-5\">-</div>\n <dato-input-number (keydown.enter.stop.prevent)=\"closePopUp()\"\n class=\"width-100 condition-value\" allowNegative=\"true\">\n <input type=\"number\" formControlName=\"rangeEnd\" [attr.data-auto-id]=\"'condition-number-' + i + '-range-end'\"\n datoInputNumber datoSize=\"sm\" datoControlErrors\n [datoControlErrorsOnBlur]=\"false\"/>\n </dato-input-number>\n </ng-container>\n </div>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n <div>\n\n <dato-icon-button datoSize=\"md\"\n datoType=\"none\" icon=\"trash\"\n class=\"overflow-hidden delete\"\n datoTooltip=\"core.deleteFilterCondition\"\n [attr.data-auto-id]=\"'condition-' + i + '-remove'\"\n (click)=\"removeCondition(i)\"\n datoTooltipPosition=\"right-start\"></dato-icon-button>\n </div>\n </div>\n <dato-operator-toggler class=\"mt-10 justify-center width-100 d-flex\" data-auto-id=\"operator-toggler\"\n expanded=\"true\" [datoTogglerValue]=\"conditionsOperator\"\n *ngIf=\"conditionsControls.length > 1 && !last\"\n formControlName=\"operator\"></dato-operator-toggler>\n </div>\n <div class=\"d-flex align-center\">\n <dato-link *ngIf=\"conditionsControls.length < 3\" class=\"no-select\" datoSize=\"sm\" data-auto-id=\"add-condition\"\n datoType=\"secondary\" (click)=\"addCondition()\">\n <dato-icon height=\"10px\" width=\"10px\" icon=\"plus-simple\"></dato-icon>\n {{ 'core.condition' | translate }}\n </dato-link>\n </div>\n </div>\n </dato-accordion-content>\n </dato-accordion-group>\n <div class=\"separator\"></div>\n </ng-container>\n <ng-container *ngIf=\"filterSections.By_Value\">\n <dato-accordion-group class=\"list-content\">\n <dato-accordion-header class=\"dato-note-bold primary-600-color\" data-auto-id=\"by-value-filters\"\n [class.primary-100-background-color]=\"header_2.isOpen\" #header_2>\n <div class=\"px-10 d-flex align-start-center\">\n <div class=\"filter-title d-flex d-flex-grow align-start-center\">{{'core.filterByValue' | translate}}</div>\n <dato-icon class=\"primary-200-color\" height=\"18px\"\n [icon]=\"header_2.isOpen ? 'collapse' : 'expand'\"></dato-icon>\n </div>\n </dato-accordion-header>\n <dato-accordion-content #byValueContent>\n <div class=\"value-content-container d-flex-column\">\n <dato-input datoSize=\"sm\" placeholder=\"core.search-all-values\" [debounceTime]=\"300\" #search [formControl]=\"listSearchControl\" [isFocused]=\"byValueContent._expanded\"></dato-input>\n <dato-list-v2 class=\"primary-0-background-color\"\n containerHeight=\"195px\"\n [withSelectAll]=\"true\"\n [clientSearch]=\"isClientSideGrid\"\n [sortByKey]=\"listSortByKey\"\n [labelType]=\"listLabelType\"\n [searchController]=\"search\"\n [options]=\"listOptions\"\n [isSortList]=\"!keepPredefinedListOriginalOrder\"\n [loading]=\"loadingList\"\n [noDataTpl]=\"isClientSideGrid ? null : noData\"\n formControlName=\"byValue\"\n data-auto-id=\"by-value-filters-list\">\n </dato-list-v2>\n <ng-template #noData>\n <div *ngIf=\"serverSearchErrored; else noResults\" class=\"mb-10 d-flex-1 d-flex-column align-center\" data-auto-id=\"by-value-server-error\">\n <img class=\"mt-20\" datoStaticSrc=\"core/grid/filter-server-error.svg\"/>\n <p class=\"dato-note-bold mt-10 mb-10 primary-300-color\">{{ 'core.something-went-wrong' | translate }}</p>\n <p class=\"dato-note-italic primary-300-color\">{{ 'core.try-again-later' | translate }}</p>\n </div>\n <ng-template #noResults>\n <dato-list-no-result class=\"mb-10 block\" data-auto-id=\"by-value-no-results\"></dato-list-no-result>\n </ng-template>\n </ng-template>\n </div>\n </dato-accordion-content>\n </dato-accordion-group>\n <div class=\"separator\"></div>\n </ng-container>\n </dato-accordion>\n </ng-container>\n <div class=\"actions no-select px-10 py-12 d-flex align-end-center\">\n <dato-link class=\"mr-30\" datoType=\"secondary\" datoSize=\"sm\" (click)=\"clearFilters()\" data-auto-id=\"clear-filters\"\n [disabled]=\"!hasFilter\">{{ 'core.clearFilters' | translate }}</dato-link>\n <dato-button datoSize=\"sm\" [datoTooltip]=\"hotKeyTooltip\" [datoHotkeys]=\"applyHotKeyConfig\" (click)=\"closePopUp()\" data-auto-id=\"apply-filters\">{{'core.apply' | translate}}</dato-button>\n </div>\n</form>\n",
693
+ template: "<form class=\"container primary-0-background-color\" [formGroup]=\"filterForm\" datoForm\n *datoSubscribe=\"hasFilter$ as hasFilter\">\n <ng-container>\n <dato-accordion closeOthers=\"true\" class=\"filter-options\" [activeIds]=\"activeAccordionId\">\n <ng-container *ngIf=\"filterSections.Conditional\">\n\n <dato-accordion-group>\n <dato-accordion-header class=\"dato-note-bold primary-600-color\" data-auto-id=\"conditional-filters\"\n [class.primary-100-background-color]=\"header_1.isOpen\" #header_1>\n <div class=\"px-10 d-flex align-start-center\">\n <div class=\"filter-title d-flex-grow d-flex align-start-center\">{{'core.filterByCondition' | translate}}</div>\n <dato-icon class=\"primary-200-color\" height=\"18px\"\n [icon]=\"header_1.isOpen ? 'collapse' : 'expand'\"></dato-icon>\n </div>\n </dato-accordion-header>\n <dato-accordion-content #conditionalContent>\n <div class=\"conditional-content-container d-flex-column\" formGroupName=\"conditional\"\n [class.multi-conditions]=\"conditionsControls.length > 1\">\n <div class=\"operand d-flex-column mb-10\"\n [attr.data-auto-id]=\"'condition-' + i\"\n *ngFor=\"let operand of conditionsControls; index as i; last as last\">\n <div class=\"d-flex\">\n <div class=\"d-flex-column d-flex-grow min-width-0\">\n <ng-container formArrayName=\"conditions\">\n\n <ng-container [formGroupName]=\"i\">\n <dato-select datoSize=\"sm\" class=\"mb-10\" [attr.data-auto-id]=\"'condition-' + i + '-operand'\" formControlName=\"type\"\n datoSelectClass=\"operand-select\"\n [dataSet]=\"conditionalFilterOptions\"\n [isCombo]=\"false\" #select>\n <dato-option *ngFor=\"let option of select.data; index as index\"\n [option]=\"option\">\n {{ option.label }}\n </dato-option>\n </dato-select>\n <ng-container [ngSwitch]=\"filterType\">\n <div class=\"d-flex\" *ngSwitchCase=\"gridFilterTypes.Date\">\n <dato-date-picker [attr.data-auto-id]=\"'condition-date-' + i + '-value'\"\n formControlName=\"value\" class=\"d-flex-grow range-calendar\">\n <ng-template>\n <dato-date-picker-range *ngIf=\"getOperandType(i) === rangeOperand; else singleDate\"></dato-date-picker-range>\n <ng-template #singleDate>\n <dato-date-picker-single></dato-date-picker-single>\n </ng-template>\n </ng-template>\n </dato-date-picker>\n </div>\n <ng-container *ngIf=\"!isConditionalEmpty(operand)\">\n <dato-input *ngSwitchCase=\"gridFilterTypes.String\" datoSize=\"sm\"\n (keydown.enter.stop.prevent)=\"closePopUp()\"\n datoControlErrors [attr.data-auto-id]=\"'condition-string-' + i + '-value'\"\n [datoControlErrorsOnBlur]=\"false\"\n class=\"condition-value\"\n placeholder=\"core.filter\" formControlName=\"value\"\n [isFocused]=\"conditionalContent._expanded\"\n ></dato-input>\n <div class=\"d-flex\" *ngSwitchCase=\"gridFilterTypes.Number\">\n <dato-input-number (keydown.enter.stop.prevent)=\"closePopUp()\" [showControls]=\"false\"\n class=\"width-100 condition-value\" allowNegative=\"true\">\n <input type=\"number\" formControlName=\"value\" [attr.data-auto-id]=\"'condition-number-' + i + '-value'\"\n datoInputNumber datoSize=\"sm\" datoControlErrors [datoAutoFocus]=\"conditionalContent._expanded\"\n [datoControlErrorsOnBlur]=\"false\"/>\n </dato-input-number>\n <ng-container *ngIf=\"getOperandType(i) === rangeOperand\">\n <div class=\"mx-5\">-</div>\n <dato-input-number (keydown.enter.stop.prevent)=\"closePopUp()\"\n class=\"width-100 condition-value\" allowNegative=\"true\">\n <input type=\"number\" formControlName=\"rangeEnd\" [attr.data-auto-id]=\"'condition-number-' + i + '-range-end'\"\n datoInputNumber datoSize=\"sm\" datoControlErrors\n [datoControlErrorsOnBlur]=\"false\"/>\n </dato-input-number>\n </ng-container>\n </div>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n <div>\n\n <dato-icon-button datoSize=\"md\"\n datoType=\"none\" icon=\"trash\"\n class=\"overflow-hidden delete\"\n datoTooltip=\"core.deleteFilterCondition\"\n [attr.data-auto-id]=\"'condition-' + i + '-remove'\"\n (click)=\"removeCondition(i)\"\n datoTooltipPosition=\"right-start\"></dato-icon-button>\n </div>\n </div>\n <dato-operator-toggler class=\"mt-10 justify-center width-100 d-flex\" data-auto-id=\"operator-toggler\"\n expanded=\"true\" [datoTogglerValue]=\"conditionsOperator\"\n *ngIf=\"conditionsControls.length > 1 && !last\"\n formControlName=\"operator\"></dato-operator-toggler>\n </div>\n <div class=\"d-flex align-center\">\n <dato-link *ngIf=\"conditionsControls.length < 3\" class=\"no-select\" datoSize=\"sm\" data-auto-id=\"add-condition\"\n datoType=\"secondary\" (click)=\"addCondition()\">\n <dato-icon height=\"10px\" width=\"10px\" icon=\"plus-simple\"></dato-icon>\n {{ 'core.condition' | translate }}\n </dato-link>\n </div>\n </div>\n </dato-accordion-content>\n </dato-accordion-group>\n <div class=\"separator\"></div>\n </ng-container>\n <ng-container *ngIf=\"filterSections.By_Value\">\n <dato-accordion-group class=\"list-content\">\n <dato-accordion-header class=\"dato-note-bold primary-600-color\" data-auto-id=\"by-value-filters\"\n [class.primary-100-background-color]=\"header_2.isOpen\" #header_2>\n <div class=\"px-10 d-flex align-start-center\">\n <div class=\"filter-title d-flex d-flex-grow align-start-center\">{{'core.filterByValue' | translate}}</div>\n <dato-icon class=\"primary-200-color\" height=\"18px\"\n [icon]=\"header_2.isOpen ? 'collapse' : 'expand'\"></dato-icon>\n </div>\n </dato-accordion-header>\n <dato-accordion-content #byValueContent>\n <div class=\"value-content-container d-flex-column\">\n <dato-input datoSize=\"sm\" placeholder=\"core.search-all-values\" [debounceTime]=\"300\" #search [formControl]=\"listSearchControl\" [isFocused]=\"byValueContent._expanded\"></dato-input>\n <dato-list-v2 class=\"primary-0-background-color\"\n containerHeight=\"195px\"\n [withSelectAll]=\"true\"\n [clientSearch]=\"isClientSideGrid\"\n [sortByKey]=\"listSortByKey\"\n [labelType]=\"listLabelType\"\n [searchController]=\"search\"\n [options]=\"listOptions\"\n [isSortList]=\"!keepPredefinedListOriginalOrder\"\n [loading]=\"loadingList\"\n [noDataTpl]=\"isClientSideGrid ? null : noData\"\n formControlName=\"byValue\"\n data-auto-id=\"by-value-filters-list\">\n </dato-list-v2>\n <ng-template #noData>\n <div *ngIf=\"serverSearchErrored; else noResults\" class=\"mb-10 d-flex-1 d-flex-column align-center\" data-auto-id=\"by-value-server-error\">\n <img class=\"mt-20\" datoStaticSrc=\"core/grid/filter-server-error.svg\"/>\n <p class=\"dato-note-bold mt-10 mb-10 primary-300-color\">{{ 'core.something-went-wrong' | translate }}</p>\n <p class=\"dato-note-italic primary-300-color\">{{ 'core.try-again-later' | translate }}</p>\n </div>\n <ng-template #noResults>\n <dato-list-no-result class=\"mb-10 block\" data-auto-id=\"by-value-no-results\"></dato-list-no-result>\n </ng-template>\n </ng-template>\n </div>\n </dato-accordion-content>\n </dato-accordion-group>\n <div class=\"separator\"></div>\n </ng-container>\n </dato-accordion>\n </ng-container>\n <div class=\"actions no-select px-10 py-12 d-flex align-end-center\">\n <dato-link *ngIf=\"showClearFiltersButton\" class=\"mr-30\" datoType=\"secondary\" datoSize=\"sm\"\n (click)=\"clearFilters()\" data-auto-id=\"clear-filters\" [disabled]=\"!hasFilter\">\n {{ 'core.clearFilters' | translate }}\n </dato-link>\n <dato-button datoSize=\"sm\" [datoTooltip]=\"hotKeyTooltip\" [datoHotkeys]=\"applyHotKeyConfig\" (click)=\"closePopUp()\" data-auto-id=\"apply-filters\">{{'core.apply' | translate}}</dato-button>\n </div>\n</form>\n",
690
694
  changeDetection: ChangeDetectionStrategy.OnPush,
691
695
  styles: [":host dato-accordion-header{transition:background-color .2s ease-in-out}:host>.container{width:242px}:host .value-content-container dato-input{padding:10px}:host .conditional-content-container{padding:10px;transition:padding-right .2s ease-in-out}:host .conditional-content-container.multi-conditions{padding-right:0}:host .conditional-content-container.multi-conditions .delete{width:24px}:host .filter-title{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;height:40px;transition:color .2s ease-in-out}:host .separator{height:1px;width:100%}:host .delete{transition:width .2s ease-in-out;width:0}"]
692
696
  }),
@@ -700,4 +704,4 @@ var DatoGridFilterComponent = /** @class */ (function () {
700
704
  }());
701
705
  export { DatoGridFilterComponent };
702
706
  export { ɵ0, ɵ1, ɵ2 };
703
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1maWx0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGRhdG9yYW1hL2NvcmUvIiwic291cmNlcyI6WyJsaWIvZ3JpZC12Mi9ncmlkLWZpbHRlci9ncmlkLWZpbHRlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOztBQUVILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RyxPQUFPLEVBQ0wsb0JBQW9CLEVBR3BCLHdCQUF3QixFQUN4QixzQkFBc0IsRUFDdEIsbUJBQW1CLEVBRW5CLDJCQUEyQixFQUMzQixnQkFBZ0IsRUFFakIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFdkQsT0FBTyxFQUFFLEtBQUssRUFBNEIsTUFBTSxNQUFNLENBQUM7QUFDdkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNGLE9BQU8sRUFBRSxVQUFVLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDM0UsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTVFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0s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WUFDNUIsbXRhQUEyQztZQUUzQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTs7U0FDaEQsQ0FBQzt5Q0FxQ2dCLFVBQVU7WUFDUCxVQUFVO1lBQ2YsV0FBVztZQUNKLG9CQUFvQjtZQUMxQixpQkFBaUI7T0F4Q3JCLHVCQUF1QixDQWlxQm5DO0lBQUQsOEJBQUM7Q0FBQSxBQWpxQkQsSUFpcUJDO1NBanFCWSx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgRGF0b3JhbWEuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gQXBhY2hlIExpY2Vuc2UgMi4wIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9naXRodWIuY29tL2RhdG9yYW1hL2NsaWVudC1jb3JlL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAqL1xuXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBEYXRvRmlsdGVyQ29uZGl0aW9ucyxcbiAgRGF0b0dyaWRGaWx0ZXIsXG4gIERhdG9HcmlkRmlsdGVyQ29uZGl0aW9uLFxuICBEYXRvR3JpZEZpbHRlck9wdGlvbnNNYXAsXG4gIERhdG9HcmlkRmlsdGVyU2VjdGlvbnMsXG4gIERhdG9HcmlkRmlsdGVyVHlwZXMsXG4gIERhdG9HcmlkUmFuZ2VGaWx0ZXJDb25kaXRpb24sXG4gIERhdG9HcmlkU3RyaW5nRmlsdGVyT3B0aW9ucyxcbiAgaXNSYW5nZUNvbmRpdGlvbixcbiAgTGlzdEl0ZW1cbn0gZnJvbSAnLi9ncmlkLWZpbHRlci50eXBlcyc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1BcnJheSwgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBQb3BvdmVyUmVmIH0gZnJvbSAnLi4vLi4vcG9wb3Zlci9wb3BvdmVyLXJlZic7XG5pbXBvcnQgeyBHcmlkUXVlcnkgfSBmcm9tICcuLi9ncmlkLXN0b3JlL2dyaWQucXVlcnknO1xuaW1wb3J0IHsgbWVyZ2UsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgcGFpcndpc2UsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgZGlmZmVyZW5jZSwgaXNBcnJheVZhbHVlc0VxdWFsLCB1bmlxQnkgfSBmcm9tICcuLi8uLi91dGlscy9hcnJheSc7XG5pbXBvcnQgeyBpc0VtcHR5LCBpc05pbCwgaXNPYmplY3QsIGlzU3RyaW5nIH0gZnJvbSAnLi4vLi4vdXRpbHMvdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBHcmlkU2VydmljZSB9IGZyb20gJy4uL2dyaWQtc3RvcmUvZ3JpZC5zZXJ2aWNlJztcbmltcG9ydCB7IE9wZXJhdG9yVHlwZXMgfSBmcm9tICcuLi8uLi9vcGVyYXRvci10b2dnbGVyL29wZXJhdG9yLXRvZ2dsZXIudHlwZXMnO1xuaW1wb3J0IHsgRGF0b1RyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cmFuc2xhdGUuc2VydmljZSc7XG5pbXBvcnQgeyB2YWxpZGF0ZUZpbHRlciB9IGZyb20gJy4vZmlsdGVyLXZhbGlkYXRvcic7XG5pbXBvcnQgeyBEYXRvR3JpZENvbHVtbkRlZiwgRGF0b0dyaWRHZXRSb3dzUGFyYW1zIH0gZnJvbSAnLi4vZ3JpZC9ncmlkLXYyLnR5cGVzJztcbmltcG9ydCB7IHVudGlsRGVzdHJveWVkIH0gZnJvbSAnbmd4LXRha2UtdW50aWwtZGVzdHJveSc7XG5pbXBvcnQgeyBEYXRvQ29sdW1uTWVudURhdGEgfSBmcm9tICcuLi9ncmlkLWNvbHVtbi1oZWFkZXIvZ3JpZC1jb2x1bW4taGVhZGVyLnR5cGVzJztcbmltcG9ydCB7IENvbHVtbiwgQ29sdW1uR3JvdXAsIEdyaWRBcGksIFJvd05vZGUgfSBmcm9tICdhZy1ncmlkLWNvbW11bml0eSc7XG5pbXBvcnQgeyBEYXRlUmFuZ2UgfSBmcm9tICcuLi8uLi9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci50eXBlcyc7XG5pbXBvcnQgeyBjdXJyeSB9IGZyb20gJy4uLy4uL3V0aWxzL2Z1bmN0aW9uJztcbmltcG9ydCB7IFNvcnRMYWJlbFR5cGUgfSBmcm9tICcuLi8uLi9waXBlcy9zZWFyY2gtcmVzdWx0cy5waXBlJztcbmltcG9ydCB7IEhvdEtleUNvbmZpZyB9IGZyb20gJy4uLy4uL2hvdGtleXMvaG90a2V5LnR5cGVzJztcbmltcG9ydCB7IGZvcm1hdEtleXMgfSBmcm9tICcuLi8uLi9ob3RrZXlzL2hvdGtleXMtZm9ybWF0dGVyJztcbmltcG9ydCB7IGdldENvbEZpZWxkIH0gZnJvbSAnLi4vZ3JpZC1zdG9yZS91dGlsJztcblxuY29uc3QgbWFwVG9WYWx1ZSA9ICh7IHZhbHVlIH0pID0+IHZhbHVlO1xuY29uc3QgbWFwVG9MaXN0SXRlbSA9IHZhbCA9PiAoeyBpZDogdmFsLCBsYWJlbDogaXNOaWwodmFsKSA/IGAoRW1wdHkpYCA6IGAke3ZhbH1gLnRyaW0oKSwgdmFsdWU6IHZhbCB9KTtcbmNvbnN0IG1hcFRvTGlzdEl0ZW1XaXRoRm9ybWF0dGVkID0gKHsgdmFsdWUsIGZvcm1hdHRlZFZhbHVlIH0sIGtleT8pID0+ICh7XG4gIGlkOiBrZXkgJiYgdmFsdWUgPyB2YWx1ZVtrZXldIDogdmFsdWUsXG4gIGxhYmVsOiBpc05pbChmb3JtYXR0ZWRWYWx1ZSkgPyBgKEVtcHR5KWAgOiBgJHtrZXkgPyBmb3JtYXR0ZWRWYWx1ZVtrZXldIDogZm9ybWF0dGVkVmFsdWV9YC50cmltKCksXG4gIHZhbHVlOiBrZXkgJiYgdmFsdWUgPyB2YWx1ZVtrZXldIDogdmFsdWVcbn0pO1xuXG50eXBlIENvbmRpdGlvbnMgPSB7XG4gIHR5cGU6IHtcbiAgICBvcGVyYW5kOiBFeGNsdWRlPERhdG9GaWx0ZXJDb25kaXRpb25zLCBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JTl9MSVNUIHwgRGF0b0ZpbHRlckNvbmRpdGlvbnMuTk9UX0lOX0xJU1Q+O1xuICB9O1xuICB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyO1xuICByYW5nZUVuZDogc3RyaW5nIHwgbnVtYmVyO1xufVtdO1xuXG50eXBlIENvbmRpdGlvbk9wdGlvbiA9IHsgaWQ6IG51bWJlcjsgbGFiZWw6IHN0cmluZzsgb3BlcmFuZDogRGF0b0ZpbHRlckNvbmRpdGlvbnMgfTtcblxudHlwZSBWYWx1ZUFuZEZvcm1hdHRlZFZhbHVlID0geyB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyOyBmb3JtYXR0ZWRWYWx1ZTogc3RyaW5nIHwgbnVtYmVyIH07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2RhdG8tZ3JpZC1maWx0ZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZ3JpZC1maWx0ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9ncmlkLWZpbHRlci5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBEYXRvR3JpZEZpbHRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIGdyaWRGaWx0ZXJUeXBlcyA9IERhdG9HcmlkRmlsdGVyVHlwZXM7XG4gIGZpbHRlclR5cGU6IERhdG9HcmlkRmlsdGVyVHlwZXM7XG4gIGNvbHVtblZhbHVlczogKHN0cmluZyB8IG51bWJlcilbXSA9IFtdO1xuICBsaXN0T3B0aW9uczogTGlzdEl0ZW1bXSA9IFtdO1xuICBjb25kaXRpb25hbEZpbHRlck9wdGlvbnM6IENvbmRpdGlvbk9wdGlvbltdO1xuICBoYXNGaWx0ZXIkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBmaWx0ZXJGb3JtOiBGb3JtR3JvdXA7XG4gIGZpbHRlclNlY3Rpb25zOiB7IFtEYXRvR3JpZEZpbHRlclNlY3Rpb25zLkJ5X1ZhbHVlXT86IGJvb2xlYW47IFtEYXRvR3JpZEZpbHRlclNlY3Rpb25zLkNvbmRpdGlvbmFsXT86IGJvb2xlYW4gfSA9IHtcbiAgICBbRGF0b0dyaWRGaWx0ZXJTZWN0aW9ucy5CeV9WYWx1ZV06IHRydWUsXG4gICAgW0RhdG9HcmlkRmlsdGVyU2VjdGlvbnMuQ29uZGl0aW9uYWxdOiB0cnVlXG4gIH07XG4gIHJhbmdlT3BlcmFuZCA9IERhdG9GaWx0ZXJDb25kaXRpb25zLklOX1JBTkdFO1xuICBsaXN0TGFiZWxUeXBlOiBTb3J0TGFiZWxUeXBlO1xuICBsaXN0U29ydEJ5S2V5OiBzdHJpbmc7XG4gIGlzQ2xpZW50U2lkZUdyaWQgPSBmYWxzZTtcbiAgbGlzdFNlYXJjaENvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcbiAgbG9hZGluZ0xpc3QgPSBmYWxzZTtcbiAgc2VydmVyU2VhcmNoRXJyb3JlZCA9IGZhbHNlO1xuICBhcHBseUhvdEtleUNvbmZpZzogSG90S2V5Q29uZmlnID0ge1xuICAgIGtleXM6ICdtZXRhLmVudGVyJyxcbiAgICBoYW5kbGVyOiAoKSA9PiB0aGlzLmNsb3NlUG9wVXAoKSxcbiAgICBkZXNjcmlwdGlvbjogJ2NvcmUuYXBwbHktZmlsdGVycydcbiAgfTtcbiAgaG90S2V5VG9vbHRpcCA9IGZvcm1hdEtleXModGhpcy5hcHBseUhvdEtleUNvbmZpZy5rZXlzKTtcbiAgYWN0aXZlQWNjb3JkaW9uSWQgPSAwO1xuICBrZWVwUHJlZGVmaW5lZExpc3RPcmlnaW5hbE9yZGVyOiBib29sZWFuO1xuXG4gIHByaXZhdGUgZ3JpZFF1ZXJ5OiBHcmlkUXVlcnk7XG4gIHByaXZhdGUgZ3JpZFNlcnZpY2U6IEdyaWRTZXJ2aWNlO1xuICBwcml2YXRlIGNvbEZpZWxkOiBzdHJpbmc7XG4gIHByaXZhdGUgZXhjbHVkZWRWYWx1ZXMgPSBuZXcgU2V0PHN0cmluZyB8IG51bWJlcj4oKTtcbiAgcHJpdmF0ZSBieVZhbHVlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgcGl2b3RDb2x1bW46IENvbHVtbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGhvc3Q6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBwb3BvdmVyOiBQb3BvdmVyUmVmPERhdG9Db2x1bW5NZW51RGF0YT4sXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IERhdG9UcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHt9XG5cbiAgZ2V0IGJ5VmFsdWVDb250cm9sKCk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyRm9ybS5nZXQoJ2J5VmFsdWUnKTtcbiAgfVxuXG4gIGdldCBjb25kaXRpb25zQ29udHJvbHMoKTogQWJzdHJhY3RDb250cm9sW10ge1xuICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnMuY29udHJvbHM7XG4gIH1cblxuICBnZXQgY29uZGl0aW9uc09wZXJhdG9yKCk6IE9wZXJhdG9yVHlwZXMge1xuICAgIHJldHVybiB0aGlzLmZpbHRlckZvcm0uZ2V0KCdjb25kaXRpb25hbC5vcGVyYXRvcicpLnZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZGVmYXVsdE9wZXJhbmQoKTogRm9ybUdyb3VwIHtcbiAgICByZXR1cm4gdGhpcy5mYi5ncm91cCh7XG4gICAgICB0eXBlOiBbdGhpcy5jb25kaXRpb25hbEZpbHRlck9wdGlvbnNbMF1dLFxuICAgICAgdmFsdWU6IFtudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIHJhbmdlRW5kOiBbbnVsbF1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGlzUHJlZGVmaW5lZExpc3RJdGVtcygpIHtcbiAgICBjb25zdCB7IGZpbHRlcnNDb25maWcgPSB7fSB9ID0gdGhpcy5jb2xEZWY7XG4gICAgcmV0dXJuIGZpbHRlcnNDb25maWcucHJlZGVmaW5lZExpc3RWYWx1ZXMgJiYgdHlwZW9mIGZpbHRlcnNDb25maWcucHJlZGVmaW5lZExpc3RWYWx1ZXNbMF0gPT09ICdvYmplY3QnO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZGVmYXVsdENvbmRpdGlvbmFsKCkge1xuICAgIHJldHVybiB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIG9wZXJhdG9yOiBbT3BlcmF0b3JUeXBlcy5BTkRdLFxuICAgICAgY29uZGl0aW9uczogdGhpcy5mYi5hcnJheShbdGhpcy5kZWZhdWx0T3BlcmFuZF0pXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldCBkZWZhdWx0QnlWYWx1ZSgpIHtcbiAgICByZXR1cm4gW3RoaXMuY29sdW1uVmFsdWVzXTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGRlZmF1bHRGb3JtKCk6IEZvcm1Hcm91cCB7XG4gICAgY29uc3QgZmlsdGVyczogeyBieVZhbHVlPzsgY29uZGl0aW9uYWw/IH0gPSB7fTtcbiAgICBpZiAodGhpcy5maWx0ZXJTZWN0aW9ucy5CeV9WYWx1ZSkge1xuICAgICAgZmlsdGVycy5ieVZhbHVlID0gdGhpcy5kZWZhdWx0QnlWYWx1ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZmlsdGVyU2VjdGlvbnMuQ29uZGl0aW9uYWwpIHtcbiAgICAgIGZpbHRlcnMuY29uZGl0aW9uYWwgPSB0aGlzLmRlZmF1bHRDb25kaXRpb25hbDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZmIuZ3JvdXAoZmlsdGVycyk7XG4gIH1cblxuICBwcml2YXRlIGdldCBjb25kaXRpb25zKCk6IEZvcm1BcnJheSB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyRm9ybS5nZXQoJ2NvbmRpdGlvbmFsLmNvbmRpdGlvbnMnKSBhcyBGb3JtQXJyYXk7XG4gIH1cblxuICBwcml2YXRlIGdldCBjb2xGaWx0ZXIoKTogRGF0b0dyaWRGaWx0ZXIge1xuICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuZ3JpZFF1ZXJ5LmdldEZpbHRlcigpW3RoaXMuY29sRmllbGRdO1xuXG4gICAgcmV0dXJuIGZpbHRlciAmJiBpc0FycmF5VmFsdWVzRXF1YWwodGhpcy5waXZvdEtleXMsIGZpbHRlci5waXZvdEtleXMpID8gZmlsdGVyIDogbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGNvbERlZigpOiBEYXRvR3JpZENvbHVtbkRlZiB7XG4gICAgcmV0dXJuIHRoaXMucG9wb3Zlci5kYXRhLmNvbHVtbi5nZXRDb2xEZWYoKSBhcyBEYXRvR3JpZENvbHVtbkRlZjtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHBpdm90S2V5cygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuY29sRGVmLnBpdm90S2V5cyB8fCBbXTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGNvbnN0IHsgZ3JpZFNlcnZpY2UsIGdyaWRRdWVyeSB9ID0gdGhpcy5wb3BvdmVyLmRhdGE7XG4gICAgY29uc3QgeyBmaWx0ZXIsIHBpdm90VmFsdWVDb2x1bW4sIHBpdm90S2V5cyB9ID0gdGhpcy5jb2xEZWY7XG4gICAgY29uc3QgY29sRGVmcyA9IGdyaWRRdWVyeS5hcGkuY29sdW1ucy5nZXRBbGxDb2x1bW5zKCkubWFwKGNvbHVtbiA9PiBjb2x1bW4uZ2V0Q29sRGVmKCkpO1xuXG4gICAgdGhpcy5jb2xGaWVsZCA9IGdldENvbEZpZWxkKHRoaXMuY29sRGVmKTtcblxuICAgIGNvbnN0IGNvbERlZjogRGF0b0dyaWRDb2x1bW5EZWYgPSBjb2xEZWZzLmZpbmQoY29sRGVmID0+IGNvbERlZi5maWVsZCA9PT0gdGhpcy5jb2xGaWVsZCk7XG4gICAgY29uc3QgZmlsdGVyc0NvbmZpZyA9IGNvbERlZi5maWx0ZXJzQ29uZmlnIHx8IHRoaXMuY29sRGVmLmZpbHRlcnNDb25maWcgfHwge307XG4gICAgY29uc3QgY29sRmlsdGVyID0gZmlsdGVyIHx8IGNvbERlZi5maWx0ZXI7XG4gICAgY29uc3QgZmlsdGVyT3B0aW9ucyA9IERhdG9HcmlkRmlsdGVyT3B0aW9uc01hcFtjb2xGaWx0ZXIgYXMgc3RyaW5nXTtcblxuICAgIHRoaXMucGl2b3RDb2x1bW4gPSBncmlkUXVlcnkuYXBpLmNvbHVtbnMuZ2V0U2Vjb25kYXJ5UGl2b3RDb2x1bW4ocGl2b3RLZXlzLCBwaXZvdFZhbHVlQ29sdW1uKTtcblxuICAgIGlmIChmaWx0ZXJzQ29uZmlnLnNlY3Rpb25zKSB7XG4gICAgICB0aGlzLmZpbHRlclNlY3Rpb25zID0geyBbZmlsdGVyc0NvbmZpZy5zZWN0aW9uc106IHRydWUgfTtcbiAgICB9XG5cbiAgICB0aGlzLmtlZXBQcmVkZWZpbmVkTGlzdE9yaWdpbmFsT3JkZXIgPVxuICAgICAgZmlsdGVyc0NvbmZpZy5rZWVwUHJlZGVmaW5lZExpc3RPcmlnaW5hbE9yZGVyICYmICFpc0VtcHR5KGZpbHRlcnNDb25maWcucHJlZGVmaW5lZExpc3RWYWx1ZXMpO1xuXG4gICAgdGhpcy5maWx0ZXJUeXBlID0gZmlsdGVyT3B0aW9ucyA/IChjb2xGaWx0ZXIgYXMgRGF0b0dyaWRGaWx0ZXJUeXBlcykgOiBEYXRvR3JpZEZpbHRlclR5cGVzLlN0cmluZztcbiAgICB0aGlzLmxpc3RMYWJlbFR5cGUgPSB0aGlzLmZpbHRlclR5cGUudG9Mb3dlckNhc2UoKSBhcyBTb3J0TGFiZWxUeXBlO1xuICAgIHRoaXMubGlzdFNvcnRCeUtleSA9IHRoaXMuZmlsdGVyVHlwZSA9PT0gRGF0b0dyaWRGaWx0ZXJUeXBlcy5OdW1iZXIgJiYgdGhpcy5jb2xEZWYudmFsdWVGb3JtYXR0ZXIgPyAnaWQnIDogJ2xhYmVsJztcbiAgICB0aGlzLmdyaWRRdWVyeSA9IGdyaWRRdWVyeTtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlID0gZ3JpZFNlcnZpY2U7XG4gICAgdGhpcy5oYXNGaWx0ZXIkID0gdGhpcy5ncmlkUXVlcnlcbiAgICAgIC5zZWxlY3Qoc3RhdGUgPT4gc3RhdGUuc2V0dGluZ3MuZmlsdGVyW3RoaXMuY29sRmllbGRdKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcChmaWx0ZXIgPT4ge1xuICAgICAgICAgIHJldHVybiAhaXNOaWwoZmlsdGVyKSAmJiBpc0FycmF5VmFsdWVzRXF1YWwoZmlsdGVyLnBpdm90S2V5cywgdGhpcy5waXZvdEtleXMpO1xuICAgICAgICB9KVxuICAgICAgKTtcblxuICAgIGlmICh0aGlzLmZpbHRlclNlY3Rpb25zLkNvbmRpdGlvbmFsKSB7XG4gICAgICBsZXQgZmlsdGVyQ29uZGl0aW9uczogRGF0b0ZpbHRlckNvbmRpdGlvbnNbXSA9IGZpbHRlck9wdGlvbnMgfHwgRGF0b0dyaWRTdHJpbmdGaWx0ZXJPcHRpb25zO1xuXG4gICAgICBpZiAoZmlsdGVyc0NvbmZpZy5zaG93RW1wdHlDb25kaXRpb25zKSB7XG4gICAgICAgIGxldCBlbXB0eUNvbmRpdGlvbnMgPSBbRGF0b0ZpbHRlckNvbmRpdGlvbnMuSVNfRU1QVFksIERhdG9GaWx0ZXJDb25kaXRpb25zLk5PVF9FTVBUWV07XG5cbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyVHlwZSA9PT0gRGF0b0dyaWRGaWx0ZXJUeXBlcy5OdW1iZXIpIHtcbiAgICAgICAgICBlbXB0eUNvbmRpdGlvbnMgPSBbRGF0b0ZpbHRlckNvbmRpdGlvbnMuSVNfTlVMTCwgRGF0b0ZpbHRlckNvbmRpdGlvbnMuTk9UX05VTExdO1xuICAgICAgICB9XG5cbiAgICAgICAgZmlsdGVyQ29uZGl0aW9ucyA9IFsuLi5maWx0ZXJDb25kaXRpb25zLCAuLi5lbXB0eUNvbmRpdGlvbnNdO1xuICAgICAgfVxuICAgICAgdGhpcy5jb25kaXRpb25hbEZpbHRlck9wdGlvbnMgPSBmaWx0ZXJDb25kaXRpb25zLm1hcCgob3BlcmFuZCwgaWQpID0+ICh7XG4gICAgICAgIGlkLFxuICAgICAgICBvcGVyYW5kLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUudHJhbnNmb3JtKGBjb3JlLiR7dGhpcy5maWx0ZXJUeXBlID09PSBEYXRvR3JpZEZpbHRlclR5cGVzLkRhdGUgPyAnREFURV8nIDogJyd9JHtvcGVyYW5kfWApXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgbGV0IG9yaWdpbmFsT3B0aW9ucztcblxuICAgIGlmICh0aGlzLmZpbHRlclNlY3Rpb25zLkJ5X1ZhbHVlKSB7XG4gICAgICBjb25zdCB7IHByZWRlZmluZWRMaXN0VmFsdWVzIH0gPSBmaWx0ZXJzQ29uZmlnO1xuICAgICAgdGhpcy5pc0NsaWVudFNpZGVHcmlkID0gIWlzTmlsKHByZWRlZmluZWRMaXN0VmFsdWVzKSB8fCAhZ3JpZFF1ZXJ5LmlzU2VydmVyU2lkZTtcbiAgICAgIGlmICghcHJlZGVmaW5lZExpc3RWYWx1ZXMgfHwgdGhpcy5pc1N0cmluZ0FycmF5KHByZWRlZmluZWRMaXN0VmFsdWVzKSkge1xuICAgICAgICBjb25zdCByYXdWYWx1ZXMgPSBwcmVkZWZpbmVkTGlzdFZhbHVlcyBhcyBzdHJpbmdbXTtcbiAgICAgICAgaWYgKHJhd1ZhbHVlcykge1xuICAgICAgICAgIHRoaXMuY29sdW1uVmFsdWVzID0gcmF3VmFsdWVzO1xuICAgICAgICAgIHRoaXMubGlzdE9wdGlvbnMgPSByYXdWYWx1ZXMubWFwKG1hcFRvTGlzdEl0ZW0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGNvbHVtblZhbHVlcyA9IHRoaXMuZ2V0Q29sdW1uVmFsdWVzKCk7XG4gICAgICAgICAgdGhpcy5jb2x1bW5WYWx1ZXMgPSBjb2x1bW5WYWx1ZXMubWFwKCh7IHZhbHVlIH0pID0+IHtcbiAgICAgICAgICAgIHJldHVybiAhaXNOaWwodGhpcy5waXZvdENvbHVtbikgJiYgdmFsdWUgPyB2YWx1ZVt0aGlzLmNvbEZpZWxkXSA6IHZhbHVlO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMubGlzdE9wdGlvbnMgPSBjb2x1bW5WYWx1ZXMubWFwKGNvbFZhbHVlID0+XG4gICAgICAgICAgICBtYXBUb0xpc3RJdGVtV2l0aEZvcm1hdHRlZChjb2xWYWx1ZSwgIWlzTmlsKHRoaXMucGl2b3RDb2x1bW4pICYmIHRoaXMuY29sRmllbGQpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcmF3VmFsdWVzID0gcHJlZGVmaW5lZExpc3RWYWx1ZXMgYXMgTGlzdEl0ZW1bXTtcbiAgICAgICAgdGhpcy5jb2x1bW5WYWx1ZXMgPSByYXdWYWx1ZXMubWFwKG1hcFRvVmFsdWUpO1xuICAgICAgICB0aGlzLmxpc3RPcHRpb25zID0gcmF3VmFsdWVzO1xuICAgICAgfVxuXG4gICAgICBvcmlnaW5hbE9wdGlvbnMgPSB0aGlzLmxpc3RPcHRpb25zO1xuXG4gICAgICBpZiAoIXRoaXMuaXNDbGllbnRTaWRlR3JpZCkge1xuICAgICAgICB0aGlzLmxpc3RTZWFyY2hDb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKHVudGlsRGVzdHJveWVkKHRoaXMpKS5zdWJzY3JpYmUoKHNlYXJjaFRlcm06IHN0cmluZykgPT4ge1xuICAgICAgICAgIHRoaXMuc2VydmVyU2VhcmNoRXJyb3JlZCA9IGZhbHNlO1xuICAgICAgICAgIGlmIChzZWFyY2hUZXJtLnRyaW0oKSA9PT0gJycpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ0xpc3QgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMubGlzdE9wdGlvbnMgPSBvcmlnaW5hbE9wdGlvbnM7XG4gICAgICAgICAgICB0aGlzLnBhdGNoQW5kUmVSZWdpc3Rlcih0aGlzLmNvbHVtblZhbHVlcyk7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0VmFsdWVzRnJvbVNlcnZlcihzZWFyY2hUZXJtKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuaW5pdEZvcm0oKTtcbiAgfVxuXG4gIGNsb3NlUG9wVXAoKSB7XG4gICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcbiAgICB0aGlzLnBvcG92ZXIuY2xvc2UoKTtcbiAgfVxuXG4gIGFwcGx5RmlsdGVycygpIHtcbiAgICB0aGlzLmZpbHRlckZvcm0udmFsaWQgJiYgdGhpcy5maWx0ZXJGb3JtLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICBpZiAodGhpcy5maWx0ZXJGb3JtLmRpcnR5ICYmICh0aGlzLmZpbHRlckZvcm0udmFsaWQgfHwgdGhpcy5maWx0ZXJGb3JtLmdldCgnY29uZGl0aW9uYWwnKS5wcmlzdGluZSkpIHtcbiAgICAgIGNvbnN0IHsgY29sdW1uIH0gPSB0aGlzLnBvcG92ZXIuZGF0YTtcbiAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuYnVpbGRGaWx0ZXIoKTtcbiAgICAgIGlzRW1wdHkoZmlsdGVyKVxuICAgICAgICA/IHRoaXMuZ3JpZFNlcnZpY2UuY2xlYXJDb2x1bW5GaWx0ZXIodGhpcy5jb2xGaWVsZClcbiAgICAgICAgOiB0aGlzLmdyaWRTZXJ2aWNlLnNldENvbHVtbkZpbHRlcihjb2x1bW4sIGZpbHRlcik7XG5cbiAgICAgIHRoaXMuZ3JpZFNlcnZpY2Uubm90aWZ5RmlsdGVyVXBkYXRlKCk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJGaWx0ZXJzKCkge1xuICAgIHRoaXMuZ3JpZFNlcnZpY2UuY2xlYXJDb2x1bW5GaWx0ZXIodGhpcy5jb2xGaWVsZCk7XG4gICAgdGhpcy5yZXNldEZvcm0oKTtcbiAgfVxuXG4gIHJlbW92ZUNvbmRpdGlvbihpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5jb25kaXRpb25zLnJlbW92ZUF0KGluZGV4KTtcbiAgICB0aGlzLmZpbHRlckZvcm0ubWFya0FzRGlydHkoKTtcbiAgfVxuXG4gIGFkZENvbmRpdGlvbigpIHtcbiAgICB0aGlzLmZpbHRlckZvcm0ubWFya0FzUHJpc3RpbmUoKTtcbiAgICB0aGlzLmNvbmRpdGlvbnMucHVzaCh0aGlzLmRlZmF1bHRPcGVyYW5kKTtcbiAgfVxuXG4gIGdldE9wZXJhbmRUeXBlKGk6IG51bWJlcikge1xuICAgIGNvbnN0IGNvbmRpdGlvblR5cGUgPSB0aGlzLmNvbmRpdGlvbnMuYXQoaSkudmFsdWUudHlwZTtcbiAgICByZXR1cm4gY29uZGl0aW9uVHlwZSA/IGNvbmRpdGlvblR5cGUub3BlcmFuZCA6IG51bGw7XG4gIH1cblxuICBpc0NvbmRpdGlvbmFsRW1wdHkoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgb3BlcmFuZDogRGF0b0ZpbHRlckNvbmRpdGlvbnMgPVxuICAgICAgY29udHJvbCAmJiBjb250cm9sLnZhbHVlICYmIGNvbnRyb2wudmFsdWUudHlwZSA/IGNvbnRyb2wudmFsdWUudHlwZS5vcGVyYW5kIDogbnVsbDtcbiAgICByZXR1cm4gdGhpcy5pc0VtcHR5T3BlcmFuZChvcGVyYW5kKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuYnlWYWx1ZVN1YnNjcmlwdGlvbiAmJiB0aGlzLmJ5VmFsdWVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXIgdHlwZTogXCJFeGNsdWRlXCJcbiAgICogU2VsZWN0ZWQgdmFsdWVzOiBBLCBDLCBEXG4gICAqIEFsbCBsaXN0OiBBLCBCLCBDLCBEXG4gICAqIFJlc3VsdDogQlxuICAgKiBAcGFyYW0gaW5jbHVkZWRBcnIgLVRoZSBsaXN0IG9mIHZhbHVlcyB0byBpbmNsdWRlXG4gICAqIEBwYXJhbSBhc0xpc3RJdGVtIC1JbmRpY2F0ZXMgaWYgdGhlIHJlc3BvbnNlIG5lZWRzIHRvIGJlIGFzIHN0cmluZyBvciBhcyBMaXN0SXRlbVxuICAgKi9cbiAgcHJpdmF0ZSBnZXRCeVZhbHVlRXhjbHVkZVZhbHVlcyhpbmNsdWRlZEFycjogKExpc3RJdGVtIHwgc3RyaW5nIHwgbnVtYmVyKVtdLCBhc0xpc3RJdGVtOiB0cnVlKTogTGlzdEl0ZW1bXTtcbiAgcHJpdmF0ZSBnZXRCeVZhbHVlRXhjbHVkZVZhbHVlcyhpbmNsdWRlZEFycjogKExpc3RJdGVtIHwgc3RyaW5nIHwgbnVtYmVyKVtdKTogKHN0cmluZyB8IG51bWJlcilbXTtcbiAgcHJpdmF0ZSBnZXRCeVZhbHVlRXhjbHVkZVZhbHVlcyhcbiAgICBpbmNsdWRlZEFycjogKExpc3RJdGVtIHwgc3RyaW5nIHwgbnVtYmVyKVtdLFxuICAgIGFzTGlzdEl0ZW0gPSBmYWxzZVxuICApOiAoc3RyaW5nIHwgbnVtYmVyKVtdIHwgTGlzdEl0ZW1bXSB7XG4gICAgbGV0IGluY2x1ZGVkU2V0O1xuICAgIGlmICh0aGlzLmlzUHJlZGVmaW5lZExpc3RJdGVtcykge1xuICAgICAgY29uc3QgcHJlZGVmaW5lZExpc3QgPSB0aGlzLmNvbERlZi5maWx0ZXJzQ29uZmlnLnByZWRlZmluZWRMaXN0VmFsdWVzIGFzIExpc3RJdGVtW107XG4gICAgICBpbmNsdWRlZFNldCA9IG5ldyBTZXQoXG4gICAgICAgIGluY2x1ZGVkQXJyLm1hcCh2YWwgPT4ge1xuICAgICAgICAgIGNvbnN0IGl0ZW0gPSBwcmVkZWZpbmVkTGlzdC5maW5kKCh7IHZhbHVlIH0pID0+IHZhbHVlID09PSB2YWwpO1xuICAgICAgICAgIHJldHVybiBpdGVtLmlkO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5jbHVkZWRTZXQgPSBuZXcgU2V0KGluY2x1ZGVkQXJyLm1hcCh2YWwgPT4gKGlzT2JqZWN0PExpc3RJdGVtPih2YWwpID8gdmFsLnZhbHVlIDogdmFsKSkpO1xuICAgIH1cbiAgICBpZiAoYXNMaXN0SXRlbSkge1xuICAgICAgcmV0dXJuIHRoaXMubGlzdE9wdGlvbnMuZmlsdGVyKCh7IHZhbHVlIH0pID0+ICFpbmNsdWRlZFNldC5oYXModmFsdWUpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY29sdW1uVmFsdWVzLmZpbHRlcih2YWx1ZSA9PiAhaW5jbHVkZWRTZXQuaGFzKHZhbHVlKSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRmlsdGVyKCk6IERhdG9HcmlkRmlsdGVyIHtcbiAgICBjb25zdCB7IGJ5VmFsdWUsIGNvbmRpdGlvbmFsIH0gPSB0aGlzLmZpbHRlckZvcm0udmFsdWU7XG4gICAgY29uc3QgZmlsdGVyOiBEYXRvR3JpZEZpbHRlciA9IHt9O1xuXG4gICAgaWYgKHRoaXMuZmlsdGVyU2VjdGlvbnMuQ29uZGl0aW9uYWwpIHtcbiAgICAgIHRoaXMuc2V0Q29uZGl0aW9uYWxGaWx0ZXIoZmlsdGVyLCBjb25kaXRpb25hbCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmZpbHRlclNlY3Rpb25zLkJ5X1ZhbHVlKSB7XG4gICAgICB0aGlzLnNldEJ5VmFsdWVGaWx0ZXIoZmlsdGVyLCBieVZhbHVlKTtcbiAgICB9XG5cbiAgICAvKiogSWYgZmlsdGVycyBhcHBsaWVkLCBhZGQgdGhlIGV4dHJhIHByb3BlcnRpZXMgdG8gYmUgdXNlZCBieSBwaXZvdCBtb2RlICovXG4gICAgaWYgKGZpbHRlci5ieVZhbHVlIHx8IGZpbHRlci5jb25kaXRpb25hbCkge1xuICAgICAgZmlsdGVyLmNvbElkID0gdGhpcy5jb2xEZWYuY29sSWQ7XG4gICAgICBmaWx0ZXIucGl2b3RLZXlzID0gdGhpcy5waXZvdEtleXM7XG5cbiAgICAgIGlmICh0aGlzLnBpdm90Q29sdW1uKSB7XG4gICAgICAgIGZpbHRlci5waXZvdEZpZWxkc01hcCA9IHRoaXMuZ2V0UGl2b3RGaWVsZHModGhpcy5waXZvdENvbHVtbi5nZXRQYXJlbnQoKSkucmVkdWNlKChmaWVsZE1hcCwgZmllbGQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMucGl2b3RLZXlzW2luZGV4XSkge1xuICAgICAgICAgICAgZmllbGRNYXBbZmllbGRdID0gdGhpcy5waXZvdEtleXNbaW5kZXhdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBmaWVsZE1hcDtcbiAgICAgICAgfSwge30pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmaWx0ZXI7XG4gIH1cblxuICBwcml2YXRlIGluaXRGb3JtKCkge1xuICAgIGNvbnN0IGZpbHRlclZhbHVlID0gdGhpcy5jb2xGaWx0ZXI7XG4gICAgdGhpcy5maWx0ZXJGb3JtID0gZmlsdGVyVmFsdWUgPyB0aGlzLmJ1aWxkRm9ybUZyb21GaWx0ZXIoZmlsdGVyVmFsdWUpIDogdGhpcy5kZWZhdWx0Rm9ybTtcbiAgICB0aGlzLnJlZ2lzdGVyT3BlcmFuZExpc3RlbmVycygpO1xuICAgIGlmICghdGhpcy5pc0NsaWVudFNpZGVHcmlkICYmIHRoaXMuZmlsdGVyU2VjdGlvbnMuQnlfVmFsdWUpIHtcbiAgICAgIHRoaXMucmVnaXN0ZXJCeVZhbHVlTGlzdGVuZXIoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgdGhlIGZpbHRlciB2aWV3IGZyb20gYSBnaXZlbiBmaWx0ZXJcbiAgICovXG4gIHByaXZhdGUgYnVpbGRGb3JtRnJvbUZpbHRlcihmaWx0ZXI6IERhdG9HcmlkRmlsdGVyKTogRm9ybUdyb3VwIHtcbiAgICBjb25zdCBmaWx0ZXJHcm91cCA9IHt9O1xuICAgIGlmICh0aGlzLmZpbHRlclNlY3Rpb25zLkNvbmRpdGlvbmFsKSB7XG4gICAgICBmaWx0ZXJHcm91cFsnY29uZGl0aW9uYWwnXSA9IHRoaXMuYnVpbGRDb25kaXRpb25hbEZpbHRlcihmaWx0ZXIuY29uZGl0aW9uYWwpO1xuICAgIH1cbiAgICBpZiAodGhpcy5maWx0ZXJTZWN0aW9ucy5CeV9WYWx1ZSkge1xuICAgICAgZmlsdGVyR3JvdXBbJ2J5VmFsdWUnXSA9IHRoaXMuYnVpbGRCeVZhbHVlRmlsdGVyKGZpbHRlci5ieVZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZmIuZ3JvdXAoZmlsdGVyR3JvdXApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IHRoZSBmaWx0ZXIgdmlld1xuICAgKi9cbiAgcHJpdmF0ZSByZXNldEZvcm0oKSB7XG4gICAgdGhpcy5maWx0ZXJGb3JtLnNldEVycm9ycyhudWxsKTtcbiAgICBsZXQgb3JpZ2luYWxTdGF0ZSA9IHt9O1xuICAgIGlmICh0aGlzLmZpbHRlclNlY3Rpb25zLkJ5X1ZhbHVlKSB7XG4gICAgICBvcmlnaW5hbFN0YXRlID0geyBieVZhbHVlOiB0aGlzLmNvbHVtblZhbHVlcyB9O1xuICAgIH1cbiAgICBpZiAodGhpcy5maWx0ZXJTZWN0aW9ucy5Db25kaXRpb25hbCkge1xuICAgICAgb3JpZ2luYWxTdGF0ZSA9IHtcbiAgICAgICAgLi4ub3JpZ2luYWxTdGF0ZSxcbiAgICAgICAgY29uZGl0aW9uYWw6IHtcbiAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3JUeXBlcy5BTkQsXG4gICAgICAgICAgY29uZGl0aW9uczogW3sgdHlwZTogdGhpcy5jb25kaXRpb25hbEZpbHRlck9wdGlvbnNbMF0sIHZhbHVlOiBudWxsLCByYW5nZUVuZDogbnVsbCB9XVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgY29uZGl0aW9uYWwgPSB0aGlzLmZpbHRlckZvcm0uY29udHJvbHMuY29uZGl0aW9uYWwgYXMgRm9ybUdyb3VwO1xuICAgICAgY29uZGl0aW9uYWwucmVtb3ZlQ29udHJvbCgnY29uZGl0aW9ucycpO1xuICAgICAgY29uZGl0aW9uYWwuYWRkQ29udHJvbCgnY29uZGl0aW9ucycsIHRoaXMuZmIuYXJyYXkoW3RoaXMuZGVmYXVsdE9wZXJhbmRdKSk7XG4gICAgfVxuICAgIHRoaXMuZmlsdGVyRm9ybS5yZXNldChvcmlnaW5hbFN0YXRlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgdGhpcy5maWx0ZXJGb3JtLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWxsIHRoZSBjb2x1bW4gdmFsdWVzIHRvIGRpc3BsYXkgb24gdGhlIGxpc3QuXG4gICAqIDEuIEl0ZXJhdGUgb3ZlciB0aGUgcm93cyBhZnRlciBmaWx0ZXJpbmcgYW5kIHNvcnRpbmcgd2FzIGFwcGxpZWRcbiAgICogMi4gU2luY2Ugd2UgYWxzbyB3YW50IHRvIHNob3cgdmFsdWVzIHRoYXQgd2VyZSBmaWx0ZXJlZCBieSB0aGlzIGNvbHVtbiBmaWx0ZXIgd2UgYXJlIGl0ZXJhdGluZyBhbGwgdGhlIHJvd3NcbiAgICogKGJlZm9yZSB0aGUgZmlsdGVyaW5nKSwgZmluZGluZyB3aGljaCB3ZXJlIHJlbW92ZWQgYnkgdGhpcyBjb2x1bW4ncyBmaWx0ZXIgYW5kIGFkZGluZyB0aGVtIGJhY2suXG4gICAqL1xuICBwcml2YXRlIGdldENvbHVtblZhbHVlcygpOiBWYWx1ZUFuZEZvcm1hdHRlZFZhbHVlW10ge1xuICAgIGxldCB2YWx1ZXM6IFZhbHVlQW5kRm9ybWF0dGVkVmFsdWVbXSA9IFtdO1xuICAgIGNvbnN0IGZpbHRlclZhbHVlID0gdGhpcy5jb2xGaWx0ZXI7XG4gICAgY29uc3QgZGlzcGxheWVkUm93ID0ge307XG4gICAgY29uc3QgYnlWYWx1ZVR5cGUgPSBmaWx0ZXJWYWx1ZSAmJiBmaWx0ZXJWYWx1ZS5ieVZhbHVlICYmIGZpbHRlclZhbHVlLmJ5VmFsdWUuY29uZGl0aW9uO1xuICAgIGNvbnN0IGFwaSA9IHRoaXMuZ3JpZFF1ZXJ5LmFwaS5ncmlkO1xuICAgIGNvbnN0IGdldFZhbHVlQ3VycmllZCA9IGN1cnJ5KHRoaXMuZ2V0VmFsdWVBbmRGb3JtYXR0ZWRWYWx1ZSkodGhpcy5jb2xGaWVsZCwgYXBpLCB0aGlzLmNvbERlZi52YWx1ZUZvcm1hdHRlcik7XG4gICAgLyoqIDEuIEl0ZXJhdGUgb3ZlciB0aGUgcm93cyBhZnRlciBmaWx0ZXJpbmcgYW5kIHNvcnRpbmcgd2FzIGFwcGxpZWQgKi9cbiAgICBpZiAodGhpcy5pc0NsaWVudFNpZGVHcmlkKSB7XG4gICAgICBhcGkuZm9yRWFjaE5vZGVBZnRlckZpbHRlckFuZFNvcnQocm93ID0+IHtcbiAgICAgICAgdmFsdWVzLnB1c2goZ2V0VmFsdWVDdXJyaWVkKHJvdykpO1xuICAgICAgICBkaXNwbGF5ZWRSb3dbcm93LmlkXSA9IHRydWU7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLyogV2Ugb25seSBkaXNwbGF5IHRoZSBjdXJyZW50IHBhZ2UgaW4gdGhlIGxpc3QgKi9cbiAgICAgIGNvbnN0IHBhZ2VTaXplID0gYXBpLnBhZ2luYXRpb25HZXRQYWdlU2l6ZSgpO1xuICAgICAgY29uc3QgY3VycmVudFBhZ2UgPSBhcGkucGFnaW5hdGlvbkdldEN1cnJlbnRQYWdlKCk7XG4gICAgICBjb25zdCBzdGFydEluZGV4ID0gcGFnZVNpemUgKiBjdXJyZW50UGFnZTtcbiAgICAgIGNvbnN0IGVuZEluZGV4ID0gc3RhcnRJbmRleCArIHBhZ2VTaXplO1xuICAgICAgYXBpLmZvckVhY2hOb2RlKHJvdyA9PiB7XG4gICAgICAgIGNvbnN0IHsgcm93SW5kZXggfSA9IHJvdztcbiAgICAgICAgaWYgKHJvd0luZGV4ID49IHN0YXJ0SW5kZXggJiYgcm93SW5kZXggPCBlbmRJbmRleCkge1xuICAgICAgICAgIHZhbHVlcy5wdXNoKGdldFZhbHVlQ3VycmllZChyb3cpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIDIuIEFkZCBiYWNrIHZhbHVlcyB0aGF0IHdlcmUgZmlsdGVyZWQgYnkgdGhpcyBjb2x1bW4gKi9cbiAgICBpZiAoYnlWYWx1ZVR5cGUpIHtcbiAgICAgIGlmIChieVZhbHVlVHlwZSA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuTk9UX0lOX0xJU1QpIHtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gdGhpcy5jb2xEZWYudmFsdWVGb3JtYXR0ZXIgYXMgKHBhcmFtczogYW55KSA9PiBzdHJpbmc7XG4gICAgICAgIGNvbnN0IGN1cnJGaWx0ZXJWYWx1ZXMgPSBmaWx0ZXJWYWx1ZS5ieVZhbHVlLnZhbHVlcy5tYXAoKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpID0+IHtcbiAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRWYWx1ZSA9IGZvcm1hdHRlciA/IGZvcm1hdHRlcih7IHZhbHVlIH0pIDogdmFsdWU7XG4gICAgICAgICAgcmV0dXJuIHsgdmFsdWUsIGZvcm1hdHRlZFZhbHVlIH07XG4gICAgICAgIH0pO1xuICAgICAgICB2YWx1ZXMgPSB2YWx1ZXMuY29uY2F0KGN1cnJGaWx0ZXJWYWx1ZXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgeyBjb25kaXRpb25hbCB9ID0gdGhpcy5jb2xGaWx0ZXI7XG4gICAgICAgIGNvbnN0IGFjdGl2ZUZpbHRlcnMgPSB7XG4gICAgICAgICAgLi4udGhpcy5ncmlkUXVlcnkuZ2V0RmlsdGVyKCksXG4gICAgICAgICAgW3RoaXMuY29sRmllbGRdOiB7IGNvbmRpdGlvbmFsIH1cbiAgICAgICAgfTtcbiAgICAgICAgYXBpLmZvckVhY2hMZWFmTm9kZShyb3cgPT4ge1xuICAgICAgICAgIGlmICghZGlzcGxheWVkUm93Lmhhc093blByb3BlcnR5KHJvdy5pZCkgJiYgdmFsaWRhdGVGaWx0ZXIoeyByb3csIGFwaSB9LCBhY3RpdmVGaWx0ZXJzKSkge1xuICAgICAgICAgICAgdmFsdWVzLnB1c2goZ2V0VmFsdWVDdXJyaWVkKHJvdykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmlxQnkodmFsdWVzLCAndmFsdWUnKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VmFsdWVBbmRGb3JtYXR0ZWRWYWx1ZShcbiAgICBmaWVsZDogc3RyaW5nLFxuICAgIGFwaTogR3JpZEFwaSxcbiAgICAvLyBUT0RPOiBmb2xsb3d1cDogaHR0cHM6Ly9hZy1ncmlkLnplbmRlc2suY29tL2hjL2VuLXVzL3JlcXVlc3RzLzExMDE5XG4gICAgZm9ybWF0dGVyOiAocGFyYW1zOiBhbnkpID0+IHN0cmluZyxcbiAgICByb3c6IFJvd05vZGVcbiAgKTogVmFsdWVBbmRGb3JtYXR0ZWRWYWx1ZSB7XG4gICAgY29uc3QgdmFsdWUgPSBhcGkuZ2V0VmFsdWUoZmllbGQsIHJvdyk7XG4gICAgLy8gVE9ETzogZm9sbG93dXA6IGh0dHBzOi8vYWctZ3JpZC56ZW5kZXNrLmNvbS9oYy9lbi11cy9yZXF1ZXN0cy8xMDk2Mz9wYWdlPTFcbiAgICByZXR1cm4geyB2YWx1ZSwgZm9ybWF0dGVkVmFsdWU6IGZvcm1hdHRlciA/IGZvcm1hdHRlcih7IHZhbHVlIH0gYXMgYW55KSA6IHZhbHVlIH07XG4gIH1cblxuICBwcml2YXRlIHNldENvbmRpdGlvbmFsRmlsdGVyKFxuICAgIGZpbHRlcjogRGF0b0dyaWRGaWx0ZXIsXG4gICAgeyBvcGVyYXRvciwgY29uZGl0aW9ucyB9OiB7IG9wZXJhdG9yOiBPcGVyYXRvclR5cGVzOyBjb25kaXRpb25zOiBDb25kaXRpb25zIH1cbiAgKSB7XG4gICAgY29uc3QgdmFsaWRDb25kaXRpb25zID0gY29uZGl0aW9ucy5maWx0ZXIoKHsgdmFsdWUsIHR5cGUgfSkgPT4gIWlzTmlsKHZhbHVlKSB8fCB0aGlzLmlzRW1wdHlPcGVyYW5kKHR5cGUub3BlcmFuZCkpO1xuICAgIGlmICh2YWxpZENvbmRpdGlvbnMubGVuZ3RoKSB7XG4gICAgICBmaWx0ZXIuY29uZGl0aW9uYWwgPSB7XG4gICAgICAgIHR5cGU6ICh0aGlzLmNvbERlZi5maWx0ZXIgYXMgRGF0b0dyaWRGaWx0ZXJUeXBlcykgfHwgRGF0b0dyaWRGaWx0ZXJUeXBlcy5TdHJpbmcsXG4gICAgICAgIG9wZXJhdG9yLFxuICAgICAgICBjb25kaXRpb25zOiBjb25kaXRpb25zLm1hcCgoeyB2YWx1ZSwgdHlwZSwgcmFuZ2VFbmQgfSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGJhc2UgPSB7IGNvbmRpdGlvbjogdHlwZS5vcGVyYW5kLCB2YWx1ZSB9O1xuICAgICAgICAgIGlmICh0eXBlLm9wZXJhbmQgPT09IERhdG9GaWx0ZXJDb25kaXRpb25zLklOX1JBTkdFKSB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0geyAuLi5iYXNlLCByYW5nZUVuZCB9O1xuICAgICAgICAgICAgaWYgKHRoaXMuZmlsdGVyVHlwZSA9PT0gRGF0b0dyaWRGaWx0ZXJUeXBlcy5EYXRlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHsgZnJvbSwgdG8gfSA9IHZhbHVlIGFzIERhdGVSYW5nZTtcbiAgICAgICAgICAgICAgcmVzdWx0ID0geyBjb25kaXRpb246IHR5cGUub3BlcmFuZCwgdmFsdWU6IGZyb20gYXMgc3RyaW5nLCByYW5nZUVuZDogdG8gYXMgc3RyaW5nIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0IGFzIERhdG9HcmlkUmFuZ2VGaWx0ZXJDb25kaXRpb247XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBiYXNlIGFzIERhdG9HcmlkRmlsdGVyQ29uZGl0aW9uO1xuICAgICAgICB9KVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldEJ5VmFsdWVGaWx0ZXIoZmlsdGVyOiBEYXRvR3JpZEZpbHRlciwgYnlWYWx1ZTogKHN0cmluZyB8IG51bWJlcilbXSkge1xuICAgIGlmICh0aGlzLmlzQ2xpZW50U2lkZUdyaWQpIHtcbiAgICAgIGNvbnN0IHZhbHVlc0NvdW50ID0gdGhpcy5jb2x1bW5WYWx1ZXMubGVuZ3RoO1xuICAgICAgaWYgKGJ5VmFsdWUubGVuZ3RoICE9PSB2YWx1ZXNDb3VudCkge1xuICAgICAgICBjb25zdCBjb25kaXRpb24gPVxuICAgICAgICAgIGJ5VmFsdWUubGVuZ3RoIDwgdmFsdWVzQ291bnQgLyAyID8gRGF0b0ZpbHRlckNvbmRpdGlvbnMuSU5fTElTVCA6IERhdG9GaWx0ZXJDb25kaXRpb25zLk5PVF9JTl9MSVNUO1xuICAgICAgICBmaWx0ZXIuYnlWYWx1ZSA9IHtcbiAgICAgICAgICBjb25kaXRpb24sXG4gICAgICAgICAgdmFsdWVzOiBjb25kaXRpb24gPT09IERhdG9GaWx0ZXJDb25kaXRpb25zLklOX0xJU1QgPyBieVZhbHVlIDogdGhpcy5nZXRCeVZhbHVlRXhjbHVkZVZhbHVlcyhieVZhbHVlKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSBBcnJheS5mcm9tKHRoaXMuZXhjbHVkZWRWYWx1ZXMudmFsdWVzKCkpO1xuICAgICAgaWYgKHZhbHVlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZpbHRlci5ieVZhbHVlID0ge1xuICAgICAgICAgIGNvbmRpdGlvbjogRGF0b0ZpbHRlckNvbmRpdGlvbnMuTk9UX0lOX0xJU1QsXG4gICAgICAgICAgdmFsdWVzXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEJ5VmFsdWVGaWx0ZXIoYnlWYWx1ZTogRGF0b0dyaWRGaWx0ZXJbJ2J5VmFsdWUnXSk6IChzdHJpbmcgfCBudW1iZXIpW11bXSB7XG4gICAgaWYgKCFieVZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWZhdWx0QnlWYWx1ZTtcbiAgICB9XG4gICAgaWYgKGJ5VmFsdWUudmFsdWVzLmxlbmd0aCAmJiB0aGlzLmZpbHRlclNlY3Rpb25zLkNvbmRpdGlvbmFsKSB7XG4gICAgICB0aGlzLmFjdGl2ZUFjY29yZGlvbklkID0gMTtcbiAgICB9XG4gICAgaWYgKGJ5VmFsdWUuY29uZGl0aW9uID09PSBEYXRvRmlsdGVyQ29uZGl0aW9ucy5OT1RfSU5fTElTVCkge1xuICAgICAgaWYgKCF0aGlzLmlzQ2xpZW50U2lkZUdyaWQpIHtcbiAgICAgICAgdGhpcy5leGNsdWRlZFZhbHVlcyA9IG5ldyBTZXQoYnlWYWx1ZS52YWx1ZXMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFt0aGlzLmdldEJ5VmFsdWVFeGNsdWRlVmFsdWVzKGJ5VmFsdWUudmFsdWVzKV07XG4gICAgfVxuICAgIHJldHVybiBbYnlWYWx1ZS52YWx1ZXNdO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZENvbmRpdGlvbmFsRmlsdGVyKGNvbmRpdGlvbmFsOiBEYXRvR3JpZEZpbHRlclsnY29uZGl0aW9uYWwnXSk6IEZvcm1Hcm91cCB7XG4gICAgaWYgKCFjb25kaXRpb25hbCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdENvbmRpdGlvbmFsO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5mYi5ncm91cCh7XG4gICAgICBvcGVyYXRvcjogW2NvbmRpdGlvbmFsLm9wZXJhdG9yXSxcbiAgICAgIGNvbmRpdGlvbnM6IHRoaXMuZmIuYXJyYXkodGhpcy5idWlsZENvbmRpdGlvbnMoY29uZGl0aW9uYWwuY29uZGl0aW9ucykpXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkQ29uZGl0aW9ucyhjb25kaXRpb25zOiAoRGF0b0dyaWRGaWx0ZXJDb25kaXRpb24gfCBEYXRvR3JpZFJhbmdlRmlsdGVyQ29uZGl0aW9uKVtdKTogRm9ybUdyb3VwW10ge1xuICAgIHJldHVybiBjb25kaXRpb25zLm1hcChjb25kaXRpb24gPT4ge1xuICAgICAgY29uc3QgeyBjb25kaXRpb246IGN1cnJlbnRPcGVyYW5kLCB2YWx1ZSB9ID0gY29uZGl0aW9uO1xuICAgICAgY29uc3QgZ3JvdXAgPSB7XG4gICAgICAgIHR5cGU6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogdGhpcy5jb25kaXRpb25hbEZpbHRlck9wdGlvbnMuZmluZEluZGV4KCh7IG9wZXJhbmQgfSkgPT4gb3BlcmFuZCA9PT0gY3VycmVudE9wZXJhbmQpLFxuICAgICAgICAgICAgb3BlcmFuZDogY3VycmVudE9wZXJhbmQsXG4gICAgICAgICAgICBsYWJlbDogYGNvcmUuJHtjdXJyZW50T3BlcmFuZH1gXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB2YWx1ZTogW3ZhbHVlLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgcmFuZ2VFbmQ6IG51bGxcbiAgICAgIH07XG4gICAgICBpZiAoaXNSYW5nZUNvbmRpdGlvbjxEYXRvR3JpZFJhbmdlRmlsdGVyQ29uZGl0aW9uPihjb25kaXRpb24pKSB7XG4gICAgICAgIGdyb3VwLnJhbmdlRW5kID0gW2NvbmRpdGlvbi5yYW5nZUVuZCwgVmFsaWRhdG9ycy5yZXF1aXJlZF07XG4gICAgICAgIGdyb3VwLnZhbHVlID0gW3sgZnJvbTogY29uZGl0aW9uLnZhbHVlIGFzIHN0cmluZywgdG86IGNvbmRpdGlvbi5yYW5nZUVuZCBhcyBzdHJpbmcgfSwgVmFsaWRhdG9ycy5yZXF1aXJlZF07XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5mYi5ncm91cChncm91cCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW4gcmFuZ2UgaXMgbm90IHJlcXVpcmVkIGJ5IGRlZmF1bHQsIHdlIHdhbnQgdG8gbWFrZSBpdCByZXF1aXJlZCBvbmNlIHRoaXMgb3BlcmFuZCBpcyBzZWxlY3RlZC5cbiAgICogKi9cbiAgcHJpdmF0ZSByZWdpc3Rlck9wZXJhbmRMaXN0ZW5lcnMoKSB7XG4gICAgaWYgKCF0aGlzLmNvbmRpdGlvbnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jb25kaXRpb25zLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIHN0YXJ0V2l0aCh0aGlzLmNvbmRpdGlvbnMubGVuZ3RoKSxcbiAgICAgICAgbWFwKCgpID0+IHRoaXMuY29uZGl0aW9ucy5sZW5ndGgpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlQ2hhbmdlcyA9IHRoaXMuY29uZGl0aW9ucy5jb250cm9scy5tYXAoKGdyb3VwOiBGb3JtR3JvdXAsIGluZGV4KSA9PlxuICAgICAgICAgICAgZ3JvdXAuZ2V0KCd0eXBlJykudmFsdWVDaGFuZ2VzLnBpcGUobWFwKCh2YWx1ZTogQ29uZGl0aW9uT3B0aW9uKSA9PiAoeyB2YWx1ZSwgaW5kZXggfSkpKVxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIG1lcmdlKC4uLnZhbHVlQ2hhbmdlcyk7XG4gICAgICAgIH0pLFxuICAgICAgICB1bnRpbERlc3Ryb3llZCh0aGlzKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoeyB2YWx1ZTogeyBvcGVyYW5kIH0sIGluZGV4IH0pID0+IHtcbiAgICAgICAgY29uc3QgcGFyYW1zID0geyBpbmRleCwgaW5SYW5nZTogb3BlcmFuZCA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuSU5fUkFOR0UgfTtcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyVHlwZSA9PT0gRGF0b0dyaWRGaWx0ZXJUeXBlcy5EYXRlKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVEYXRlSW5wdXQocGFyYW1zKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmZpbHRlclR5cGUgPT09IERhdG9HcmlkRmlsdGVyVHlwZXMuTnVtYmVyKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVOdW1iZXJJbnB1dChwYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlVmFsdWVDb250cm9sVmFsaWRhdG9yKG9wZXJhbmQsIGluZGV4KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVEYXRlSW5wdXQoeyBpblJhbmdlLCBpbmRleCB9KSB7XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuY29uZGl0aW9ucy5hdChpbmRleCkuZ2V0KCd2YWx1ZScpO1xuICAgIGlmIChjb250cm9sLmRpcnR5KSB7XG4gICAgICBjb25zdCB7IHZhbHVlIH0gPSBjb250cm9sO1xuICAgICAgY29uc3QgbmV3VmFsdWUgPSBpblJhbmdlID8geyBmcm9tOiB2YWx1ZSwgdG86IHZhbHVlIH0gOiB2YWx1ZS5mcm9tO1xuICAgICAgY29udHJvbC5wYXRjaFZhbHVlKG5ld1ZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU51bWJlcklucHV0KHsgaW5SYW5nZSwgaW5kZXggfSkge1xuICAgIGNvbnN0IHZhbGlkYXRvciA9IGluUmFuZ2UgPyBWYWxpZGF0b3JzLnJlcXVpcmVkIDogbnVsbDtcbiAgICBjb25zdCByYW5nZUVuZCA9IHRoaXMuY29uZGl0aW9ucy5hdChpbmRleCkuZ2V0KCdyYW5nZUVuZCcpO1xuICAgIHJhbmdlRW5kLnNldFZhbGlkYXRvcnModmFsaWRhdG9yKTtcbiAgICByYW5nZUVuZC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVZhbHVlQ29udHJvbFZhbGlkYXRvcihvcGVyYW5kOiBEYXRvRmlsdGVyQ29uZGl0aW9ucywgaW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IHZhbGlkYXRvciA9ICF0aGlzLmlzRW1wdHlPcGVyYW5kKG9wZXJhbmQpID8gVmFsaWRhdG9ycy5yZXF1aXJlZCA6IG51bGw7XG4gICAgY29uc3QgdmFsdWVDb250cm9sID0gdGhpcy5jb25kaXRpb25zLmF0KGluZGV4KS5nZXQoJ3ZhbHVlJykgYXMgRm9ybUNvbnRyb2w7XG4gICAgdmFsdWVDb250cm9sLnNldFZhbGlkYXRvcnModmFsaWRhdG9yKTtcbiAgICB2YWx1ZUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0VtcHR5T3BlcmFuZChvcGVyYW5kOiBEYXRvRmlsdGVyQ29uZGl0aW9ucyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBvcGVyYW5kID09PSBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JU19FTVBUWSB8fFxuICAgICAgb3BlcmFuZCA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuTk9UX0VNUFRZIHx8XG4gICAgICBvcGVyYW5kID09PSBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JU19OVUxMIHx8XG4gICAgICBvcGVyYW5kID09PSBEYXRvRmlsdGVyQ29uZGl0aW9ucy5OT1RfTlVMTFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGlzU3RyaW5nQXJyYXkodmFsdWU6IChzdHJpbmcgfCBMaXN0SXRlbSlbXSk6IHZhbHVlIGlzIHN0cmluZ1tdIHtcbiAgICByZXR1cm4gaXNTdHJpbmcodmFsdWVbMF0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRWYWx1ZXNGcm9tU2VydmVyKHNlYXJjaFRlcm06IHN0cmluZykge1xuICAgIHRoaXMubG9hZGluZ0xpc3QgPSB0cnVlO1xuICAgIHRoaXMubGlzdE9wdGlvbnMgPSBbXTtcbiAgICBjb25zdCBwYXJhbXM6IFBhcnRpYWw8RGF0b0dyaWRHZXRSb3dzUGFyYW1zPiA9IHtcbiAgICAgIGZhaWxDYWxsYmFjazogKCkgPT4ge1xuICAgICAgICB0aGlzLmxvYWRpbmdMaXN0ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2VydmVyU2VhcmNoRXJyb3JlZCA9IHRydWU7XG4gICAgICAgIHRoaXMubGlzdE9wdGlvbnMgPSBbXTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSxcbiAgICAgIHN1Y2Nlc3NDYWxsYmFjazogZGF0YSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZ0xpc3QgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgZmxhdERhdGEgPSBkYXRhLm1hcCh2YWx1ZSA9PiB2YWx1ZVt0aGlzLmNvbEZpZWxkXSk7XG4gICAgICAgIHRoaXMubGlzdE9wdGlvbnMgPSBmbGF0RGF0YS5tYXAobWFwVG9MaXN0SXRlbSk7XG4gICAgICAgIHRoaXMucGF0Y2hBbmRSZVJlZ2lzdGVyKGZsYXREYXRhKTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSxcbiAgICAgIHNlcnZlckNvbmZpZzoge1xuICAgICAgICBwYWdlU2l6ZTogMzAsXG4gICAgICAgIHBhZ2VOdW1iZXI6IDEsXG4gICAgICAgIGNvbHVtbkZpbHRlcnM6IHtcbiAgICAgICAgICBbdGhpcy5jb2xGaWVsZF06IHtcbiAgICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvclR5cGVzLkFORCxcbiAgICAgICAgICAgIGZpbHRlcnM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbmRpdGlvbjogRGF0b0ZpbHRlckNvbmRpdGlvbnMuQ09OVEFJTlMsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHNlYXJjaFRlcm1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgc29ydDogW10sXG4gICAgICAgIGNvbHVtbnNUb1JldHVybjogW3RoaXMuY29sRmllbGRdLFxuICAgICAgICBkaXN0aW5jdFJlc3VsdHM6IHRydWVcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuZ3JpZFNlcnZpY2UuX29yaWdpbmFsR2V0Um93cyhwYXJhbXMgYXMgYW55KTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICAvKiBXaGVuIHNlYXJjaGluZyB0aGUgYnkgdmFsdWUgZmlsdGVyIG9uIHNlcnZlciBzaWRlIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBjb250cm9sIHdpdGggdGhlIG5ldyB2YWx1ZXMgYW5kIHJlLXJlZ2lzdGVyIHRvIHRoZSBjaGFuZ2VzICovXG4gIHByaXZhdGUgcGF0Y2hBbmRSZVJlZ2lzdGVyKGRhdGE6IChzdHJpbmcgfCBudW1iZXIpW10pIHtcbiAgICB0aGlzLmJ5VmFsdWVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmJ5VmFsdWVDb250cm9sLnBhdGNoVmFsdWUodGhpcy5nZXROb25FeGNsdWRlZFZhbHVlcyhkYXRhKSk7XG4gICAgdGhpcy5yZWdpc3RlckJ5VmFsdWVMaXN0ZW5lcigpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWdpc3RlckJ5VmFsdWVMaXN0ZW5lcigpIHtcbiAgICBjb25zdCBieVZhbHVlID0gdGhpcy5ieVZhbHVlQ29udHJvbDtcbiAgICB0aGlzLmJ5VmFsdWVTdWJzY3JpcHRpb24gPSBieVZhbHVlLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoc3RhcnRXaXRoKGJ5VmFsdWUudmFsdWUpLCBwYWlyd2lzZSgpKVxuICAgICAgLnN1YnNjcmliZSgoW3ByZXYsIGN1cnJlbnRdKSA9PiB7XG4gICAgICAgIGNvbnN0IGFkZFRvRXhjbHVkZWQgPSBjdXJyZW50Lmxlbmd0aCA8IHByZXYubGVuZ3RoO1xuICAgICAgICBjb25zdCBkaWZmID0gYWRkVG9FeGNsdWRlZCA/IGRpZmZlcmVuY2UocHJldiwgY3VycmVudCkgOiBkaWZmZXJlbmNlKGN1cnJlbnQsIHByZXYpO1xuICAgICAgICBkaWZmLmZvckVhY2godiA9PiAoYWRkVG9FeGNsdWRlZCA/IHRoaXMuZXhjbHVkZWRWYWx1ZXMuYWRkKHYpIDogdGhpcy5leGNsdWRlZFZhbHVlcy5kZWxldGUodikpKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXROb25FeGNsdWRlZFZhbHVlcyhkYXRhOiAoc3RyaW5nIHwgbnVtYmVyKVtdKTogKHN0cmluZyB8IG51bWJlcilbXSB7XG4gICAgcmV0dXJuIGRhdGEuZmlsdGVyKHYgPT4gIXRoaXMuZXhjbHVkZWRWYWx1ZXMuaGFzKHYpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgcGl2b3QgZGltZW5zaW9ucyBhcyBkZWZpbmVkIGluIHRoZSBwYXJlbnQgZ3JvdXAgY29sdW1uIGhlYWRlciBjbGFzcy5cbiAgICovXG4gIHByaXZhdGUgZ2V0UGl2b3RGaWVsZHMocGFyZW50OiBDb2x1bW5Hcm91cCwgZmllbGRzID0gW10pOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgZ3JhbmRQYXJlbnQgPSBwYXJlbnQuZ2V0UGFyZW50KCk7XG4gICAgY29uc3QgaGVhZGVyQ2xhc3MgPSBwYXJlbnQuZ2V0T3JpZ2luYWxDb2x1bW5Hcm91cCgpLmdldENvbEdyb3VwRGVmKCkuaGVhZGVyQ2xhc3M7XG5cbiAgICBpZiAoZ3JhbmRQYXJlbnQpIHtcbiAgICAgIHRoaXMuZ2V0UGl2b3RGaWVsZHMoZ3JhbmRQYXJlbnQsIGZpZWxkcyk7XG4gICAgfVxuXG4gICAgaGVhZGVyQ2xhc3MgJiYgZmllbGRzLnB1c2goaGVhZGVyQ2xhc3NbMF0pO1xuXG4gICAgcmV0dXJuIGZpZWxkcztcbiAgfVxufVxuIl19
707
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1maWx0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGRhdG9yYW1hL2NvcmUvIiwic291cmNlcyI6WyJsaWIvZ3JpZC12Mi9ncmlkLWZpbHRlci9ncmlkLWZpbHRlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOztBQUVILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RyxPQUFPLEVBQ0wsb0JBQW9CLEVBR3BCLHdCQUF3QixFQUN4QixzQkFBc0IsRUFDdEIsbUJBQW1CLEVBRW5CLDJCQUEyQixFQUMzQixnQkFBZ0IsRUFFakIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFdkQsT0FBTyxFQUFFLEtBQUssRUFBNEIsTUFBTSxNQUFNLENBQUM7QUFDdkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNGLE9BQU8sRUFBRSxVQUFVLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDM0UsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTVFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0s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TUFBTSxDQUFDO0lBQ2hCLENBQUM7O2dCQW5vQmUsVUFBVTtnQkFDUCxVQUFVO2dCQUNmLFdBQVc7Z0JBQ0osb0JBQW9CO2dCQUMxQixpQkFBaUI7O0lBekNyQix1QkFBdUI7UUFObkMsU0FBUyxDQUFDO1lBQ1QsUUFBUSxFQUFFLGtCQUFrQjtZQUM1Qiwwd2FBQTJDO1lBRTNDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNOztTQUNoRCxDQUFDO3lDQXNDZ0IsVUFBVTtZQUNQLFVBQVU7WUFDZixXQUFXO1lBQ0osb0JBQW9CO1lBQzFCLGlCQUFpQjtPQXpDckIsdUJBQXVCLENBeXFCbkM7SUFBRCw4QkFBQztDQUFBLEFBenFCRCxJQXlxQkM7U0F6cUJZLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBEYXRvcmFtYS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBBcGFjaGUgTGljZW5zZSAyLjAgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2dpdGh1Yi5jb20vZGF0b3JhbWEvY2xpZW50LWNvcmUvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICovXG5cbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIERhdG9GaWx0ZXJDb25kaXRpb25zLFxuICBEYXRvR3JpZEZpbHRlcixcbiAgRGF0b0dyaWRGaWx0ZXJDb25kaXRpb24sXG4gIERhdG9HcmlkRmlsdGVyT3B0aW9uc01hcCxcbiAgRGF0b0dyaWRGaWx0ZXJTZWN0aW9ucyxcbiAgRGF0b0dyaWRGaWx0ZXJUeXBlcyxcbiAgRGF0b0dyaWRSYW5nZUZpbHRlckNvbmRpdGlvbixcbiAgRGF0b0dyaWRTdHJpbmdGaWx0ZXJPcHRpb25zLFxuICBpc1JhbmdlQ29uZGl0aW9uLFxuICBMaXN0SXRlbVxufSBmcm9tICcuL2dyaWQtZmlsdGVyLnR5cGVzJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUFycmF5LCBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFBvcG92ZXJSZWYgfSBmcm9tICcuLi8uLi9wb3BvdmVyL3BvcG92ZXItcmVmJztcbmltcG9ydCB7IEdyaWRRdWVyeSB9IGZyb20gJy4uL2dyaWQtc3RvcmUvZ3JpZC5xdWVyeSc7XG5pbXBvcnQgeyBtZXJnZSwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCBwYWlyd2lzZSwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBkaWZmZXJlbmNlLCBpc0FycmF5VmFsdWVzRXF1YWwsIHVuaXFCeSB9IGZyb20gJy4uLy4uL3V0aWxzL2FycmF5JztcbmltcG9ydCB7IGlzRW1wdHksIGlzTmlsLCBpc09iamVjdCwgaXNTdHJpbmcgfSBmcm9tICcuLi8uLi91dGlscy92YWxpZGF0b3JzJztcbmltcG9ydCB7IEdyaWRTZXJ2aWNlIH0gZnJvbSAnLi4vZ3JpZC1zdG9yZS9ncmlkLnNlcnZpY2UnO1xuaW1wb3J0IHsgT3BlcmF0b3JUeXBlcyB9IGZyb20gJy4uLy4uL29wZXJhdG9yLXRvZ2dsZXIvb3BlcmF0b3ItdG9nZ2xlci50eXBlcyc7XG5pbXBvcnQgeyBEYXRvVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RyYW5zbGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IHZhbGlkYXRlRmlsdGVyIH0gZnJvbSAnLi9maWx0ZXItdmFsaWRhdG9yJztcbmltcG9ydCB7IERhdG9HcmlkQ29sdW1uRGVmLCBEYXRvR3JpZEdldFJvd3NQYXJhbXMgfSBmcm9tICcuLi9ncmlkL2dyaWQtdjIudHlwZXMnO1xuaW1wb3J0IHsgdW50aWxEZXN0cm95ZWQgfSBmcm9tICduZ3gtdGFrZS11bnRpbC1kZXN0cm95JztcbmltcG9ydCB7IERhdG9Db2x1bW5NZW51RGF0YSB9IGZyb20gJy4uL2dyaWQtY29sdW1uLWhlYWRlci9ncmlkLWNvbHVtbi1oZWFkZXIudHlwZXMnO1xuaW1wb3J0IHsgQ29sdW1uLCBDb2x1bW5Hcm91cCwgR3JpZEFwaSwgUm93Tm9kZSB9IGZyb20gJ2FnLWdyaWQtY29tbXVuaXR5JztcbmltcG9ydCB7IERhdGVSYW5nZSB9IGZyb20gJy4uLy4uL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLnR5cGVzJztcbmltcG9ydCB7IGN1cnJ5IH0gZnJvbSAnLi4vLi4vdXRpbHMvZnVuY3Rpb24nO1xuaW1wb3J0IHsgU29ydExhYmVsVHlwZSB9IGZyb20gJy4uLy4uL3BpcGVzL3NlYXJjaC1yZXN1bHRzLnBpcGUnO1xuaW1wb3J0IHsgSG90S2V5Q29uZmlnIH0gZnJvbSAnLi4vLi4vaG90a2V5cy9ob3RrZXkudHlwZXMnO1xuaW1wb3J0IHsgZm9ybWF0S2V5cyB9IGZyb20gJy4uLy4uL2hvdGtleXMvaG90a2V5cy1mb3JtYXR0ZXInO1xuaW1wb3J0IHsgZ2V0Q29sRmllbGQgfSBmcm9tICcuLi9ncmlkLXN0b3JlL3V0aWwnO1xuXG5jb25zdCBtYXBUb1ZhbHVlID0gKHsgdmFsdWUgfSkgPT4gdmFsdWU7XG5jb25zdCBtYXBUb0xpc3RJdGVtID0gdmFsID0+ICh7IGlkOiB2YWwsIGxhYmVsOiBpc05pbCh2YWwpID8gYChFbXB0eSlgIDogYCR7dmFsfWAudHJpbSgpLCB2YWx1ZTogdmFsIH0pO1xuY29uc3QgbWFwVG9MaXN0SXRlbVdpdGhGb3JtYXR0ZWQgPSAoeyB2YWx1ZSwgZm9ybWF0dGVkVmFsdWUgfSwga2V5PykgPT4gKHtcbiAgaWQ6IGtleSAmJiB2YWx1ZSA/IHZhbHVlW2tleV0gOiB2YWx1ZSxcbiAgbGFiZWw6IGlzTmlsKGZvcm1hdHRlZFZhbHVlKSA/IGAoRW1wdHkpYCA6IGAke2tleSA/IGZvcm1hdHRlZFZhbHVlW2tleV0gOiBmb3JtYXR0ZWRWYWx1ZX1gLnRyaW0oKSxcbiAgdmFsdWU6IGtleSAmJiB2YWx1ZSA/IHZhbHVlW2tleV0gOiB2YWx1ZVxufSk7XG5cbnR5cGUgQ29uZGl0aW9ucyA9IHtcbiAgdHlwZToge1xuICAgIG9wZXJhbmQ6IEV4Y2x1ZGU8RGF0b0ZpbHRlckNvbmRpdGlvbnMsIERhdG9GaWx0ZXJDb25kaXRpb25zLklOX0xJU1QgfCBEYXRvRmlsdGVyQ29uZGl0aW9ucy5OT1RfSU5fTElTVD47XG4gIH07XG4gIHZhbHVlOiBzdHJpbmcgfCBudW1iZXI7XG4gIHJhbmdlRW5kOiBzdHJpbmcgfCBudW1iZXI7XG59W107XG5cbnR5cGUgQ29uZGl0aW9uT3B0aW9uID0geyBpZDogbnVtYmVyOyBsYWJlbDogc3RyaW5nOyBvcGVyYW5kOiBEYXRvRmlsdGVyQ29uZGl0aW9ucyB9O1xuXG50eXBlIFZhbHVlQW5kRm9ybWF0dGVkVmFsdWUgPSB7IHZhbHVlOiBzdHJpbmcgfCBudW1iZXI7IGZvcm1hdHRlZFZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZGF0by1ncmlkLWZpbHRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9ncmlkLWZpbHRlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2dyaWQtZmlsdGVyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIERhdG9HcmlkRmlsdGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgZ3JpZEZpbHRlclR5cGVzID0gRGF0b0dyaWRGaWx0ZXJUeXBlcztcbiAgZmlsdGVyVHlwZTogRGF0b0dyaWRGaWx0ZXJUeXBlcztcbiAgY29sdW1uVmFsdWVzOiAoc3RyaW5nIHwgbnVtYmVyKVtdID0gW107XG4gIGxpc3RPcHRpb25zOiBMaXN0SXRlbVtdID0gW107XG4gIGNvbmRpdGlvbmFsRmlsdGVyT3B0aW9uczogQ29uZGl0aW9uT3B0aW9uW107XG4gIGhhc0ZpbHRlciQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIGZpbHRlckZvcm06IEZvcm1Hcm91cDtcbiAgZmlsdGVyU2VjdGlvbnM6IHsgW0RhdG9HcmlkRmlsdGVyU2VjdGlvbnMuQnlfVmFsdWVdPzogYm9vbGVhbjsgW0RhdG9HcmlkRmlsdGVyU2VjdGlvbnMuQ29uZGl0aW9uYWxdPzogYm9vbGVhbiB9ID0ge1xuICAgIFtEYXRvR3JpZEZpbHRlclNlY3Rpb25zLkJ5X1ZhbHVlXTogdHJ1ZSxcbiAgICBbRGF0b0dyaWRGaWx0ZXJTZWN0aW9ucy5Db25kaXRpb25hbF06IHRydWVcbiAgfTtcbiAgcmFuZ2VPcGVyYW5kID0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuSU5fUkFOR0U7XG4gIGxpc3RMYWJlbFR5cGU6IFNvcnRMYWJlbFR5cGU7XG4gIGxpc3RTb3J0QnlLZXk6IHN0cmluZztcbiAgaXNDbGllbnRTaWRlR3JpZCA9IGZhbHNlO1xuICBsaXN0U2VhcmNoQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xuICBsb2FkaW5nTGlzdCA9IGZhbHNlO1xuICBzZXJ2ZXJTZWFyY2hFcnJvcmVkID0gZmFsc2U7XG4gIGFwcGx5SG90S2V5Q29uZmlnOiBIb3RLZXlDb25maWcgPSB7XG4gICAga2V5czogJ21ldGEuZW50ZXInLFxuICAgIGhhbmRsZXI6ICgpID0+IHRoaXMuY2xvc2VQb3BVcCgpLFxuICAgIGRlc2NyaXB0aW9uOiAnY29yZS5hcHBseS1maWx0ZXJzJ1xuICB9O1xuICBob3RLZXlUb29sdGlwID0gZm9ybWF0S2V5cyh0aGlzLmFwcGx5SG90S2V5Q29uZmlnLmtleXMpO1xuICBhY3RpdmVBY2NvcmRpb25JZCA9IDA7XG4gIGtlZXBQcmVkZWZpbmVkTGlzdE9yaWdpbmFsT3JkZXI6IGJvb2xlYW47XG4gIHNob3dDbGVhckZpbHRlcnNCdXR0b24gPSB0cnVlO1xuXG4gIHByaXZhdGUgZ3JpZFF1ZXJ5OiBHcmlkUXVlcnk7XG4gIHByaXZhdGUgZ3JpZFNlcnZpY2U6IEdyaWRTZXJ2aWNlO1xuICBwcml2YXRlIGNvbEZpZWxkOiBzdHJpbmc7XG4gIHByaXZhdGUgZXhjbHVkZWRWYWx1ZXMgPSBuZXcgU2V0PHN0cmluZyB8IG51bWJlcj4oKTtcbiAgcHJpdmF0ZSBieVZhbHVlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgcGl2b3RDb2x1bW46IENvbHVtbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGhvc3Q6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBwb3BvdmVyOiBQb3BvdmVyUmVmPERhdG9Db2x1bW5NZW51RGF0YT4sXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IERhdG9UcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHt9XG5cbiAgZ2V0IGJ5VmFsdWVDb250cm9sKCk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyRm9ybS5nZXQoJ2J5VmFsdWUnKTtcbiAgfVxuXG4gIGdldCBjb25kaXRpb25zQ29udHJvbHMoKTogQWJzdHJhY3RDb250cm9sW10ge1xuICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnMuY29udHJvbHM7XG4gIH1cblxuICBnZXQgY29uZGl0aW9uc09wZXJhdG9yKCk6IE9wZXJhdG9yVHlwZXMge1xuICAgIHJldHVybiB0aGlzLmZpbHRlckZvcm0uZ2V0KCdjb25kaXRpb25hbC5vcGVyYXRvcicpLnZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZGVmYXVsdE9wZXJhbmQoKTogRm9ybUdyb3VwIHtcbiAgICByZXR1cm4gdGhpcy5mYi5ncm91cCh7XG4gICAgICB0eXBlOiBbdGhpcy5jb25kaXRpb25hbEZpbHRlck9wdGlvbnNbMF1dLFxuICAgICAgdmFsdWU6IFtudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIHJhbmdlRW5kOiBbbnVsbF1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGlzUHJlZGVmaW5lZExpc3RJdGVtcygpIHtcbiAgICBjb25zdCB7IGZpbHRlcnNDb25maWcgPSB7fSB9ID0gdGhpcy5jb2xEZWY7XG4gICAgcmV0dXJuIGZpbHRlcnNDb25maWcucHJlZGVmaW5lZExpc3RWYWx1ZXMgJiYgdHlwZW9mIGZpbHRlcnNDb25maWcucHJlZGVmaW5lZExpc3RWYWx1ZXNbMF0gPT09ICdvYmplY3QnO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZGVmYXVsdENvbmRpdGlvbmFsKCkge1xuICAgIHJldHVybiB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIG9wZXJhdG9yOiBbT3BlcmF0b3JUeXBlcy5BTkRdLFxuICAgICAgY29uZGl0aW9uczogdGhpcy5mYi5hcnJheShbdGhpcy5kZWZhdWx0T3BlcmFuZF0pXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldCBkZWZhdWx0QnlWYWx1ZSgpIHtcbiAgICByZXR1cm4gW3RoaXMuY29sdW1uVmFsdWVzXTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGRlZmF1bHRGb3JtKCk6IEZvcm1Hcm91cCB7XG4gICAgY29uc3QgZmlsdGVyczogeyBieVZhbHVlPzsgY29uZGl0aW9uYWw/IH0gPSB7fTtcbiAgICBpZiAodGhpcy5maWx0ZXJTZWN0aW9ucy5CeV9WYWx1ZSkge1xuICAgICAgZmlsdGVycy5ieVZhbHVlID0gdGhpcy5kZWZhdWx0QnlWYWx1ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZmlsdGVyU2VjdGlvbnMuQ29uZGl0aW9uYWwpIHtcbiAgICAgIGZpbHRlcnMuY29uZGl0aW9uYWwgPSB0aGlzLmRlZmF1bHRDb25kaXRpb25hbDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZmIuZ3JvdXAoZmlsdGVycyk7XG4gIH1cblxuICBwcml2YXRlIGdldCBjb25kaXRpb25zKCk6IEZvcm1BcnJheSB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyRm9ybS5nZXQoJ2NvbmRpdGlvbmFsLmNvbmRpdGlvbnMnKSBhcyBGb3JtQXJyYXk7XG4gIH1cblxuICBwcml2YXRlIGdldCBjb2xGaWx0ZXIoKTogRGF0b0dyaWRGaWx0ZXIge1xuICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuZ3JpZFF1ZXJ5LmdldEZpbHRlcigpW3RoaXMuY29sRmllbGRdO1xuXG4gICAgcmV0dXJuIGZpbHRlciAmJiBpc0FycmF5VmFsdWVzRXF1YWwodGhpcy5waXZvdEtleXMsIGZpbHRlci5waXZvdEtleXMpID8gZmlsdGVyIDogbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGNvbERlZigpOiBEYXRvR3JpZENvbHVtbkRlZiB7XG4gICAgcmV0dXJuIHRoaXMucG9wb3Zlci5kYXRhLmNvbHVtbi5nZXRDb2xEZWYoKSBhcyBEYXRvR3JpZENvbHVtbkRlZjtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHBpdm90S2V5cygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuY29sRGVmLnBpdm90S2V5cyB8fCBbXTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGNvbnN0IHsgZ3JpZFNlcnZpY2UsIGdyaWRRdWVyeSB9ID0gdGhpcy5wb3BvdmVyLmRhdGE7XG4gICAgY29uc3QgeyBmaWx0ZXIsIHBpdm90VmFsdWVDb2x1bW4sIHBpdm90S2V5cyB9ID0gdGhpcy5jb2xEZWY7XG4gICAgY29uc3QgY29sRGVmcyA9IGdyaWRRdWVyeS5hcGkuY29sdW1ucy5nZXRBbGxDb2x1bW5zKCkubWFwKGNvbHVtbiA9PiBjb2x1bW4uZ2V0Q29sRGVmKCkpO1xuXG4gICAgdGhpcy5jb2xGaWVsZCA9IGdldENvbEZpZWxkKHRoaXMuY29sRGVmKTtcblxuICAgIGNvbnN0IGNvbERlZjogRGF0b0dyaWRDb2x1bW5EZWYgPSBjb2xEZWZzLmZpbmQoY29sRGVmID0+IGNvbERlZi5maWVsZCA9PT0gdGhpcy5jb2xGaWVsZCk7XG4gICAgY29uc3QgZmlsdGVyc0NvbmZpZyA9IGNvbERlZi5maWx0ZXJzQ29uZmlnIHx8IHRoaXMuY29sRGVmLmZpbHRlcnNDb25maWcgfHwge307XG4gICAgY29uc3QgY29sRmlsdGVyID0gZmlsdGVyIHx8IGNvbERlZi5maWx0ZXI7XG4gICAgY29uc3QgZmlsdGVyT3B0aW9ucyA9IERhdG9HcmlkRmlsdGVyT3B0aW9uc01hcFtjb2xGaWx0ZXIgYXMgc3RyaW5nXTtcblxuICAgIHRoaXMucGl2b3RDb2x1bW4gPSBncmlkUXVlcnkuYXBpLmNvbHVtbnMuZ2V0U2Vjb25kYXJ5UGl2b3RDb2x1bW4ocGl2b3RLZXlzLCBwaXZvdFZhbHVlQ29sdW1uKTtcblxuICAgIGlmICghaXNOaWwoZmlsdGVyc0NvbmZpZy5zaG93Q2xlYXJGaWx0ZXJzQnV0dG9uKSkge1xuICAgICAgdGhpcy5zaG93Q2xlYXJGaWx0ZXJzQnV0dG9uID0gZmlsdGVyc0NvbmZpZy5zaG93Q2xlYXJGaWx0ZXJzQnV0dG9uO1xuICAgIH1cblxuICAgIGlmIChmaWx0ZXJzQ29uZmlnLnNlY3Rpb25zKSB7XG4gICAgICB0aGlzLmZpbHRlclNlY3Rpb25zID0geyBbZmlsdGVyc0NvbmZpZy5zZWN0aW9uc106IHRydWUgfTtcbiAgICB9XG5cbiAgICB0aGlzLmtlZXBQcmVkZWZpbmVkTGlzdE9yaWdpbmFsT3JkZXIgPVxuICAgICAgZmlsdGVyc0NvbmZpZy5rZWVwUHJlZGVmaW5lZExpc3RPcmlnaW5hbE9yZGVyICYmICFpc0VtcHR5KGZpbHRlcnNDb25maWcucHJlZGVmaW5lZExpc3RWYWx1ZXMpO1xuXG4gICAgdGhpcy5maWx0ZXJUeXBlID0gZmlsdGVyT3B0aW9ucyA/IChjb2xGaWx0ZXIgYXMgRGF0b0dyaWRGaWx0ZXJUeXBlcykgOiBEYXRvR3JpZEZpbHRlclR5cGVzLlN0cmluZztcbiAgICB0aGlzLmxpc3RMYWJlbFR5cGUgPSB0aGlzLmZpbHRlclR5cGUudG9Mb3dlckNhc2UoKSBhcyBTb3J0TGFiZWxUeXBlO1xuICAgIHRoaXMubGlzdFNvcnRCeUtleSA9IHRoaXMuZmlsdGVyVHlwZSA9PT0gRGF0b0dyaWRGaWx0ZXJUeXBlcy5OdW1iZXIgJiYgdGhpcy5jb2xEZWYudmFsdWVGb3JtYXR0ZXIgPyAnaWQnIDogJ2xhYmVsJztcbiAgICB0aGlzLmdyaWRRdWVyeSA9IGdyaWRRdWVyeTtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlID0gZ3JpZFNlcnZpY2U7XG4gICAgdGhpcy5oYXNGaWx0ZXIkID0gdGhpcy5ncmlkUXVlcnlcbiAgICAgIC5zZWxlY3Qoc3RhdGUgPT4gc3RhdGUuc2V0dGluZ3MuZmlsdGVyW3RoaXMuY29sRmllbGRdKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcChmaWx0ZXIgPT4ge1xuICAgICAgICAgIHJldHVybiAhaXNOaWwoZmlsdGVyKSAmJiBpc0FycmF5VmFsdWVzRXF1YWwoZmlsdGVyLnBpdm90S2V5cywgdGhpcy5waXZvdEtleXMpO1xuICAgICAgICB9KVxuICAgICAgKTtcblxuICAgIGlmICh0aGlzLmZpbHRlclNlY3Rpb25zLkNvbmRpdGlvbmFsKSB7XG4gICAgICBsZXQgZmlsdGVyQ29uZGl0aW9uczogRGF0b0ZpbHRlckNvbmRpdGlvbnNbXSA9IGZpbHRlck9wdGlvbnMgfHwgRGF0b0dyaWRTdHJpbmdGaWx0ZXJPcHRpb25zO1xuXG4gICAgICBpZiAoZmlsdGVyc0NvbmZpZy5zaG93RW1wdHlDb25kaXRpb25zKSB7XG4gICAgICAgIGxldCBlbXB0eUNvbmRpdGlvbnMgPSBbRGF0b0ZpbHRlckNvbmRpdGlvbnMuSVNfRU1QVFksIERhdG9GaWx0ZXJDb25kaXRpb25zLk5PVF9FTVBUWV07XG5cbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyVHlwZSA9PT0gRGF0b0dyaWRGaWx0ZXJUeXBlcy5OdW1iZXIpIHtcbiAgICAgICAgICBlbXB0eUNvbmRpdGlvbnMgPSBbRGF0b0ZpbHRlckNvbmRpdGlvbnMuSVNfTlVMTCwgRGF0b0ZpbHRlckNvbmRpdGlvbnMuTk9UX05VTExdO1xuICAgICAgICB9XG5cbiAgICAgICAgZmlsdGVyQ29uZGl0aW9ucyA9IFsuLi5maWx0ZXJDb25kaXRpb25zLCAuLi5lbXB0eUNvbmRpdGlvbnNdO1xuICAgICAgfVxuICAgICAgdGhpcy5jb25kaXRpb25hbEZpbHRlck9wdGlvbnMgPSBmaWx0ZXJDb25kaXRpb25zLm1hcCgob3BlcmFuZCwgaWQpID0+ICh7XG4gICAgICAgIGlkLFxuICAgICAgICBvcGVyYW5kLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUudHJhbnNmb3JtKGBjb3JlLiR7dGhpcy5maWx0ZXJUeXBlID09PSBEYXRvR3JpZEZpbHRlclR5cGVzLkRhdGUgPyAnREFURV8nIDogJyd9JHtvcGVyYW5kfWApXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgbGV0IG9yaWdpbmFsT3B0aW9ucztcblxuICAgIGlmICh0aGlzLmZpbHRlclNlY3Rpb25zLkJ5X1ZhbHVlKSB7XG4gICAgICBjb25zdCB7IHByZWRlZmluZWRMaXN0VmFsdWVzIH0gPSBmaWx0ZXJzQ29uZmlnO1xuICAgICAgdGhpcy5pc0NsaWVudFNpZGVHcmlkID0gIWlzTmlsKHByZWRlZmluZWRMaXN0VmFsdWVzKSB8fCAhZ3JpZFF1ZXJ5LmlzU2VydmVyU2lkZTtcbiAgICAgIGlmICghcHJlZGVmaW5lZExpc3RWYWx1ZXMgfHwgdGhpcy5pc1N0cmluZ0FycmF5KHByZWRlZmluZWRMaXN0VmFsdWVzKSkge1xuICAgICAgICBjb25zdCByYXdWYWx1ZXMgPSBwcmVkZWZpbmVkTGlzdFZhbHVlcyBhcyBzdHJpbmdbXTtcbiAgICAgICAgaWYgKHJhd1ZhbHVlcykge1xuICAgICAgICAgIHRoaXMuY29sdW1uVmFsdWVzID0gcmF3VmFsdWVzO1xuICAgICAgICAgIHRoaXMubGlzdE9wdGlvbnMgPSByYXdWYWx1ZXMubWFwKG1hcFRvTGlzdEl0ZW0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGNvbHVtblZhbHVlcyA9IHRoaXMuZ2V0Q29sdW1uVmFsdWVzKCk7XG4gICAgICAgICAgdGhpcy5jb2x1bW5WYWx1ZXMgPSBjb2x1bW5WYWx1ZXMubWFwKCh7IHZhbHVlIH0pID0+IHtcbiAgICAgICAgICAgIHJldHVybiAhaXNOaWwodGhpcy5waXZvdENvbHVtbikgJiYgdmFsdWUgPyB2YWx1ZVt0aGlzLmNvbEZpZWxkXSA6IHZhbHVlO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMubGlzdE9wdGlvbnMgPSBjb2x1bW5WYWx1ZXMubWFwKGNvbFZhbHVlID0+XG4gICAgICAgICAgICBtYXBUb0xpc3RJdGVtV2l0aEZvcm1hdHRlZChjb2xWYWx1ZSwgIWlzTmlsKHRoaXMucGl2b3RDb2x1bW4pICYmIHRoaXMuY29sRmllbGQpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcmF3VmFsdWVzID0gcHJlZGVmaW5lZExpc3RWYWx1ZXMgYXMgTGlzdEl0ZW1bXTtcbiAgICAgICAgdGhpcy5jb2x1bW5WYWx1ZXMgPSByYXdWYWx1ZXMubWFwKG1hcFRvVmFsdWUpO1xuICAgICAgICB0aGlzLmxpc3RPcHRpb25zID0gcmF3VmFsdWVzO1xuICAgICAgfVxuXG4gICAgICBvcmlnaW5hbE9wdGlvbnMgPSB0aGlzLmxpc3RPcHRpb25zO1xuXG4gICAgICBpZiAoIXRoaXMuaXNDbGllbnRTaWRlR3JpZCkge1xuICAgICAgICB0aGlzLmxpc3RTZWFyY2hDb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKHVudGlsRGVzdHJveWVkKHRoaXMpKS5zdWJzY3JpYmUoKHNlYXJjaFRlcm06IHN0cmluZykgPT4ge1xuICAgICAgICAgIHRoaXMuc2VydmVyU2VhcmNoRXJyb3JlZCA9IGZhbHNlO1xuICAgICAgICAgIGlmIChzZWFyY2hUZXJtLnRyaW0oKSA9PT0gJycpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ0xpc3QgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMubGlzdE9wdGlvbnMgPSBvcmlnaW5hbE9wdGlvbnM7XG4gICAgICAgICAgICB0aGlzLnBhdGNoQW5kUmVSZWdpc3Rlcih0aGlzLmNvbHVtblZhbHVlcyk7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0VmFsdWVzRnJvbVNlcnZlcihzZWFyY2hUZXJtKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuaW5pdEZvcm0oKTtcbiAgfVxuXG4gIGNsb3NlUG9wVXAoKSB7XG4gICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcbiAgICB0aGlzLnBvcG92ZXIuY2xvc2UoKTtcbiAgfVxuXG4gIGFwcGx5RmlsdGVycygpIHtcbiAgICB0aGlzLmZpbHRlckZvcm0udmFsaWQgJiYgdGhpcy5maWx0ZXJGb3JtLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICBpZiAodGhpcy5maWx0ZXJGb3JtLmRpcnR5ICYmICh0aGlzLmZpbHRlckZvcm0udmFsaWQgfHwgdGhpcy5maWx0ZXJGb3JtLmdldCgnY29uZGl0aW9uYWwnKS5wcmlzdGluZSkpIHtcbiAgICAgIGNvbnN0IHsgY29sdW1uIH0gPSB0aGlzLnBvcG92ZXIuZGF0YTtcbiAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuYnVpbGRGaWx0ZXIoKTtcbiAgICAgIGlzRW1wdHkoZmlsdGVyKVxuICAgICAgICA/IHRoaXMuZ3JpZFNlcnZpY2UuY2xlYXJDb2x1bW5GaWx0ZXIodGhpcy5jb2xGaWVsZClcbiAgICAgICAgOiB0aGlzLmdyaWRTZXJ2aWNlLnNldENvbHVtbkZpbHRlcihjb2x1bW4sIGZpbHRlcik7XG5cbiAgICAgIHRoaXMuZ3JpZFNlcnZpY2Uubm90aWZ5RmlsdGVyVXBkYXRlKCk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJGaWx0ZXJzKCkge1xuICAgIHRoaXMuZ3JpZFNlcnZpY2UuY2xlYXJDb2x1bW5GaWx0ZXIodGhpcy5jb2xGaWVsZCk7XG4gICAgdGhpcy5yZXNldEZvcm0oKTtcbiAgfVxuXG4gIHJlbW92ZUNvbmRpdGlvbihpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5jb25kaXRpb25zLnJlbW92ZUF0KGluZGV4KTtcbiAgICB0aGlzLmZpbHRlckZvcm0ubWFya0FzRGlydHkoKTtcbiAgfVxuXG4gIGFkZENvbmRpdGlvbigpIHtcbiAgICB0aGlzLmZpbHRlckZvcm0ubWFya0FzUHJpc3RpbmUoKTtcbiAgICB0aGlzLmNvbmRpdGlvbnMucHVzaCh0aGlzLmRlZmF1bHRPcGVyYW5kKTtcbiAgfVxuXG4gIGdldE9wZXJhbmRUeXBlKGk6IG51bWJlcikge1xuICAgIGNvbnN0IGNvbmRpdGlvblR5cGUgPSB0aGlzLmNvbmRpdGlvbnMuYXQoaSkudmFsdWUudHlwZTtcbiAgICByZXR1cm4gY29uZGl0aW9uVHlwZSA/IGNvbmRpdGlvblR5cGUub3BlcmFuZCA6IG51bGw7XG4gIH1cblxuICBpc0NvbmRpdGlvbmFsRW1wdHkoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgb3BlcmFuZDogRGF0b0ZpbHRlckNvbmRpdGlvbnMgPVxuICAgICAgY29udHJvbCAmJiBjb250cm9sLnZhbHVlICYmIGNvbnRyb2wudmFsdWUudHlwZSA/IGNvbnRyb2wudmFsdWUudHlwZS5vcGVyYW5kIDogbnVsbDtcbiAgICByZXR1cm4gdGhpcy5pc0VtcHR5T3BlcmFuZChvcGVyYW5kKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuYnlWYWx1ZVN1YnNjcmlwdGlvbiAmJiB0aGlzLmJ5VmFsdWVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXIgdHlwZTogXCJFeGNsdWRlXCJcbiAgICogU2VsZWN0ZWQgdmFsdWVzOiBBLCBDLCBEXG4gICAqIEFsbCBsaXN0OiBBLCBCLCBDLCBEXG4gICAqIFJlc3VsdDogQlxuICAgKiBAcGFyYW0gaW5jbHVkZWRBcnIgLVRoZSBsaXN0IG9mIHZhbHVlcyB0byBpbmNsdWRlXG4gICAqIEBwYXJhbSBhc0xpc3RJdGVtIC1JbmRpY2F0ZXMgaWYgdGhlIHJlc3BvbnNlIG5lZWRzIHRvIGJlIGFzIHN0cmluZyBvciBhcyBMaXN0SXRlbVxuICAgKi9cbiAgcHJpdmF0ZSBnZXRCeVZhbHVlRXhjbHVkZVZhbHVlcyhpbmNsdWRlZEFycjogKExpc3RJdGVtIHwgc3RyaW5nIHwgbnVtYmVyKVtdLCBhc0xpc3RJdGVtOiB0cnVlKTogTGlzdEl0ZW1bXTtcbiAgcHJpdmF0ZSBnZXRCeVZhbHVlRXhjbHVkZVZhbHVlcyhpbmNsdWRlZEFycjogKExpc3RJdGVtIHwgc3RyaW5nIHwgbnVtYmVyKVtdKTogKHN0cmluZyB8IG51bWJlcilbXTtcbiAgcHJpdmF0ZSBnZXRCeVZhbHVlRXhjbHVkZVZhbHVlcyhcbiAgICBpbmNsdWRlZEFycjogKExpc3RJdGVtIHwgc3RyaW5nIHwgbnVtYmVyKVtdLFxuICAgIGFzTGlzdEl0ZW0gPSBmYWxzZVxuICApOiAoc3RyaW5nIHwgbnVtYmVyKVtdIHwgTGlzdEl0ZW1bXSB7XG4gICAgbGV0IGluY2x1ZGVkU2V0O1xuICAgIGlmICh0aGlzLmlzUHJlZGVmaW5lZExpc3RJdGVtcykge1xuICAgICAgY29uc3QgcHJlZGVmaW5lZExpc3QgPSB0aGlzLmNvbERlZi5maWx0ZXJzQ29uZmlnLnByZWRlZmluZWRMaXN0VmFsdWVzIGFzIExpc3RJdGVtW107XG4gICAgICBpbmNsdWRlZFNldCA9IG5ldyBTZXQoXG4gICAgICAgIGluY2x1ZGVkQXJyLm1hcCh2YWwgPT4ge1xuICAgICAgICAgIGNvbnN0IGl0ZW0gPSBwcmVkZWZpbmVkTGlzdC5maW5kKCh7IHZhbHVlIH0pID0+IHZhbHVlID09PSB2YWwpO1xuICAgICAgICAgIHJldHVybiBpdGVtLmlkO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5jbHVkZWRTZXQgPSBuZXcgU2V0KGluY2x1ZGVkQXJyLm1hcCh2YWwgPT4gKGlzT2JqZWN0PExpc3RJdGVtPih2YWwpID8gdmFsLnZhbHVlIDogdmFsKSkpO1xuICAgIH1cbiAgICBpZiAoYXNMaXN0SXRlbSkge1xuICAgICAgcmV0dXJuIHRoaXMubGlzdE9wdGlvbnMuZmlsdGVyKCh7IHZhbHVlIH0pID0+ICFpbmNsdWRlZFNldC5oYXModmFsdWUpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY29sdW1uVmFsdWVzLmZpbHRlcih2YWx1ZSA9PiAhaW5jbHVkZWRTZXQuaGFzKHZhbHVlKSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRmlsdGVyKCk6IERhdG9HcmlkRmlsdGVyIHtcbiAgICBjb25zdCB7IGJ5VmFsdWUsIGNvbmRpdGlvbmFsIH0gPSB0aGlzLmZpbHRlckZvcm0udmFsdWU7XG4gICAgY29uc3QgZmlsdGVyOiBEYXRvR3JpZEZpbHRlciA9IHt9O1xuXG4gICAgaWYgKHRoaXMuZmlsdGVyU2VjdGlvbnMuQ29uZGl0aW9uYWwpIHtcbiAgICAgIHRoaXMuc2V0Q29uZGl0aW9uYWxGaWx0ZXIoZmlsdGVyLCBjb25kaXRpb25hbCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmZpbHRlclNlY3Rpb25zLkJ5X1ZhbHVlKSB7XG4gICAgICB0aGlzLnNldEJ5VmFsdWVGaWx0ZXIoZmlsdGVyLCBieVZhbHVlKTtcbiAgICB9XG5cbiAgICAvKiogSWYgZmlsdGVycyBhcHBsaWVkLCBhZGQgdGhlIGV4dHJhIHByb3BlcnRpZXMgdG8gYmUgdXNlZCBieSBwaXZvdCBtb2RlICovXG4gICAgaWYgKGZpbHRlci5ieVZhbHVlIHx8IGZpbHRlci5jb25kaXRpb25hbCkge1xuICAgICAgZmlsdGVyLmNvbElkID0gdGhpcy5jb2xEZWYuY29sSWQ7XG4gICAgICBmaWx0ZXIucGl2b3RLZXlzID0gdGhpcy5waXZvdEtleXM7XG5cbiAgICAgIGlmICh0aGlzLnBpdm90Q29sdW1uKSB7XG4gICAgICAgIGZpbHRlci5waXZvdEZpZWxkc01hcCA9IHRoaXMuZ2V0UGl2b3RGaWVsZHModGhpcy5waXZvdENvbHVtbi5nZXRQYXJlbnQoKSkucmVkdWNlKChmaWVsZE1hcCwgZmllbGQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMucGl2b3RLZXlzW2luZGV4XSkge1xuICAgICAgICAgICAgZmllbGRNYXBbZmllbGRdID0gdGhpcy5waXZvdEtleXNbaW5kZXhdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBmaWVsZE1hcDtcbiAgICAgICAgfSwge30pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmaWx0ZXI7XG4gIH1cblxuICBwcml2YXRlIGluaXRGb3JtKCkge1xuICAgIGNvbnN0IGZpbHRlclZhbHVlID0gdGhpcy5jb2xGaWx0ZXI7XG4gICAgdGhpcy5maWx0ZXJGb3JtID0gZmlsdGVyVmFsdWUgPyB0aGlzLmJ1aWxkRm9ybUZyb21GaWx0ZXIoZmlsdGVyVmFsdWUpIDogdGhpcy5kZWZhdWx0Rm9ybTtcbiAgICB0aGlzLnJlZ2lzdGVyT3BlcmFuZExpc3RlbmVycygpO1xuICAgIGlmICghdGhpcy5pc0NsaWVudFNpZGVHcmlkICYmIHRoaXMuZmlsdGVyU2VjdGlvbnMuQnlfVmFsdWUpIHtcbiAgICAgIHRoaXMucmVnaXN0ZXJCeVZhbHVlTGlzdGVuZXIoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgdGhlIGZpbHRlciB2aWV3IGZyb20gYSBnaXZlbiBmaWx0ZXJcbiAgICovXG4gIHByaXZhdGUgYnVpbGRGb3JtRnJvbUZpbHRlcihmaWx0ZXI6IERhdG9HcmlkRmlsdGVyKTogRm9ybUdyb3VwIHtcbiAgICBjb25zdCBmaWx0ZXJHcm91cCA9IHt9O1xuICAgIGlmICh0aGlzLmZpbHRlclNlY3Rpb25zLkNvbmRpdGlvbmFsKSB7XG4gICAgICBmaWx0ZXJHcm91cFsnY29uZGl0aW9uYWwnXSA9IHRoaXMuYnVpbGRDb25kaXRpb25hbEZpbHRlcihmaWx0ZXIuY29uZGl0aW9uYWwpO1xuICAgIH1cbiAgICBpZiAodGhpcy5maWx0ZXJTZWN0aW9ucy5CeV9WYWx1ZSkge1xuICAgICAgZmlsdGVyR3JvdXBbJ2J5VmFsdWUnXSA9IHRoaXMuYnVpbGRCeVZhbHVlRmlsdGVyKGZpbHRlci5ieVZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZmIuZ3JvdXAoZmlsdGVyR3JvdXApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IHRoZSBmaWx0ZXIgdmlld1xuICAgKi9cbiAgcHJpdmF0ZSByZXNldEZvcm0oKSB7XG4gICAgdGhpcy5maWx0ZXJGb3JtLnNldEVycm9ycyhudWxsKTtcbiAgICBsZXQgb3JpZ2luYWxTdGF0ZSA9IHt9O1xuICAgIGlmICh0aGlzLmZpbHRlclNlY3Rpb25zLkJ5X1ZhbHVlKSB7XG4gICAgICBvcmlnaW5hbFN0YXRlID0geyBieVZhbHVlOiB0aGlzLmNvbHVtblZhbHVlcyB9O1xuICAgIH1cbiAgICBpZiAodGhpcy5maWx0ZXJTZWN0aW9ucy5Db25kaXRpb25hbCkge1xuICAgICAgb3JpZ2luYWxTdGF0ZSA9IHtcbiAgICAgICAgLi4ub3JpZ2luYWxTdGF0ZSxcbiAgICAgICAgY29uZGl0aW9uYWw6IHtcbiAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3JUeXBlcy5BTkQsXG4gICAgICAgICAgY29uZGl0aW9uczogW3sgdHlwZTogdGhpcy5jb25kaXRpb25hbEZpbHRlck9wdGlvbnNbMF0sIHZhbHVlOiBudWxsLCByYW5nZUVuZDogbnVsbCB9XVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgY29uZGl0aW9uYWwgPSB0aGlzLmZpbHRlckZvcm0uY29udHJvbHMuY29uZGl0aW9uYWwgYXMgRm9ybUdyb3VwO1xuICAgICAgY29uZGl0aW9uYWwucmVtb3ZlQ29udHJvbCgnY29uZGl0aW9ucycpO1xuICAgICAgY29uZGl0aW9uYWwuYWRkQ29udHJvbCgnY29uZGl0aW9ucycsIHRoaXMuZmIuYXJyYXkoW3RoaXMuZGVmYXVsdE9wZXJhbmRdKSk7XG4gICAgfVxuICAgIHRoaXMuZmlsdGVyRm9ybS5yZXNldChvcmlnaW5hbFN0YXRlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgdGhpcy5maWx0ZXJGb3JtLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWxsIHRoZSBjb2x1bW4gdmFsdWVzIHRvIGRpc3BsYXkgb24gdGhlIGxpc3QuXG4gICAqIDEuIEl0ZXJhdGUgb3ZlciB0aGUgcm93cyBhZnRlciBmaWx0ZXJpbmcgYW5kIHNvcnRpbmcgd2FzIGFwcGxpZWRcbiAgICogMi4gU2luY2Ugd2UgYWxzbyB3YW50IHRvIHNob3cgdmFsdWVzIHRoYXQgd2VyZSBmaWx0ZXJlZCBieSB0aGlzIGNvbHVtbiBmaWx0ZXIgd2UgYXJlIGl0ZXJhdGluZyBhbGwgdGhlIHJvd3NcbiAgICogKGJlZm9yZSB0aGUgZmlsdGVyaW5nKSwgZmluZGluZyB3aGljaCB3ZXJlIHJlbW92ZWQgYnkgdGhpcyBjb2x1bW4ncyBmaWx0ZXIgYW5kIGFkZGluZyB0aGVtIGJhY2suXG4gICAqL1xuICBwcml2YXRlIGdldENvbHVtblZhbHVlcygpOiBWYWx1ZUFuZEZvcm1hdHRlZFZhbHVlW10ge1xuICAgIGxldCB2YWx1ZXM6IFZhbHVlQW5kRm9ybWF0dGVkVmFsdWVbXSA9IFtdO1xuICAgIGNvbnN0IGZpbHRlclZhbHVlID0gdGhpcy5jb2xGaWx0ZXI7XG4gICAgY29uc3QgZGlzcGxheWVkUm93ID0ge307XG4gICAgY29uc3QgYnlWYWx1ZVR5cGUgPSBmaWx0ZXJWYWx1ZSAmJiBmaWx0ZXJWYWx1ZS5ieVZhbHVlICYmIGZpbHRlclZhbHVlLmJ5VmFsdWUuY29uZGl0aW9uO1xuICAgIGNvbnN0IGFwaSA9IHRoaXMuZ3JpZFF1ZXJ5LmFwaS5ncmlkO1xuICAgIGNvbnN0IGdldFZhbHVlQ3VycmllZCA9IGN1cnJ5KHRoaXMuZ2V0VmFsdWVBbmRGb3JtYXR0ZWRWYWx1ZSkodGhpcy5jb2xGaWVsZCwgYXBpLCB0aGlzLmNvbERlZi52YWx1ZUZvcm1hdHRlcik7XG4gICAgLyoqIDEuIEl0ZXJhdGUgb3ZlciB0aGUgcm93cyBhZnRlciBmaWx0ZXJpbmcgYW5kIHNvcnRpbmcgd2FzIGFwcGxpZWQgKi9cbiAgICBpZiAodGhpcy5pc0NsaWVudFNpZGVHcmlkKSB7XG4gICAgICBhcGkuZm9yRWFjaE5vZGVBZnRlckZpbHRlckFuZFNvcnQocm93ID0+IHtcbiAgICAgICAgdmFsdWVzLnB1c2goZ2V0VmFsdWVDdXJyaWVkKHJvdykpO1xuICAgICAgICBkaXNwbGF5ZWRSb3dbcm93LmlkXSA9IHRydWU7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLyogV2Ugb25seSBkaXNwbGF5IHRoZSBjdXJyZW50IHBhZ2UgaW4gdGhlIGxpc3QgKi9cbiAgICAgIGNvbnN0IHBhZ2VTaXplID0gYXBpLnBhZ2luYXRpb25HZXRQYWdlU2l6ZSgpO1xuICAgICAgY29uc3QgY3VycmVudFBhZ2UgPSBhcGkucGFnaW5hdGlvbkdldEN1cnJlbnRQYWdlKCk7XG4gICAgICBjb25zdCBzdGFydEluZGV4ID0gcGFnZVNpemUgKiBjdXJyZW50UGFnZTtcbiAgICAgIGNvbnN0IGVuZEluZGV4ID0gc3RhcnRJbmRleCArIHBhZ2VTaXplO1xuICAgICAgYXBpLmZvckVhY2hOb2RlKHJvdyA9PiB7XG4gICAgICAgIGNvbnN0IHsgcm93SW5kZXggfSA9IHJvdztcbiAgICAgICAgaWYgKHJvd0luZGV4ID49IHN0YXJ0SW5kZXggJiYgcm93SW5kZXggPCBlbmRJbmRleCkge1xuICAgICAgICAgIHZhbHVlcy5wdXNoKGdldFZhbHVlQ3VycmllZChyb3cpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIDIuIEFkZCBiYWNrIHZhbHVlcyB0aGF0IHdlcmUgZmlsdGVyZWQgYnkgdGhpcyBjb2x1bW4gKi9cbiAgICBpZiAoYnlWYWx1ZVR5cGUpIHtcbiAgICAgIGlmIChieVZhbHVlVHlwZSA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuTk9UX0lOX0xJU1QpIHtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gdGhpcy5jb2xEZWYudmFsdWVGb3JtYXR0ZXIgYXMgKHBhcmFtczogYW55KSA9PiBzdHJpbmc7XG4gICAgICAgIGNvbnN0IGN1cnJGaWx0ZXJWYWx1ZXMgPSBmaWx0ZXJWYWx1ZS5ieVZhbHVlLnZhbHVlcy5tYXAoKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpID0+IHtcbiAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRWYWx1ZSA9IGZvcm1hdHRlciA/IGZvcm1hdHRlcih7IHZhbHVlIH0pIDogdmFsdWU7XG4gICAgICAgICAgcmV0dXJuIHsgdmFsdWUsIGZvcm1hdHRlZFZhbHVlIH07XG4gICAgICAgIH0pO1xuICAgICAgICB2YWx1ZXMgPSB2YWx1ZXMuY29uY2F0KGN1cnJGaWx0ZXJWYWx1ZXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgeyBjb25kaXRpb25hbCB9ID0gdGhpcy5jb2xGaWx0ZXI7XG4gICAgICAgIGNvbnN0IGFjdGl2ZUZpbHRlcnMgPSB7XG4gICAgICAgICAgLi4udGhpcy5ncmlkUXVlcnkuZ2V0RmlsdGVyKCksXG4gICAgICAgICAgW3RoaXMuY29sRmllbGRdOiB7IGNvbmRpdGlvbmFsIH1cbiAgICAgICAgfTtcbiAgICAgICAgYXBpLmZvckVhY2hMZWFmTm9kZShyb3cgPT4ge1xuICAgICAgICAgIGlmICghZGlzcGxheWVkUm93Lmhhc093blByb3BlcnR5KHJvdy5pZCkgJiYgdmFsaWRhdGVGaWx0ZXIoeyByb3csIGFwaSB9LCBhY3RpdmVGaWx0ZXJzKSkge1xuICAgICAgICAgICAgdmFsdWVzLnB1c2goZ2V0VmFsdWVDdXJyaWVkKHJvdykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmlxQnkodmFsdWVzLCAndmFsdWUnKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VmFsdWVBbmRGb3JtYXR0ZWRWYWx1ZShcbiAgICBmaWVsZDogc3RyaW5nLFxuICAgIGFwaTogR3JpZEFwaSxcbiAgICAvLyBUT0RPOiBmb2xsb3d1cDogaHR0cHM6Ly9hZy1ncmlkLnplbmRlc2suY29tL2hjL2VuLXVzL3JlcXVlc3RzLzExMDE5XG4gICAgZm9ybWF0dGVyOiAocGFyYW1zOiBhbnkpID0+IHN0cmluZyxcbiAgICByb3c6IFJvd05vZGVcbiAgKTogVmFsdWVBbmRGb3JtYXR0ZWRWYWx1ZSB7XG4gICAgY29uc3QgdmFsdWUgPSBhcGkuZ2V0VmFsdWUoZmllbGQsIHJvdyk7XG4gICAgLy8gVE9ETzogZm9sbG93dXA6IGh0dHBzOi8vYWctZ3JpZC56ZW5kZXNrLmNvbS9oYy9lbi11cy9yZXF1ZXN0cy8xMDk2Mz9wYWdlPTFcbiAgICByZXR1cm4geyB2YWx1ZSwgZm9ybWF0dGVkVmFsdWU6IGZvcm1hdHRlciA/IGZvcm1hdHRlcih7IHZhbHVlIH0gYXMgYW55KSA6IHZhbHVlIH07XG4gIH1cblxuICBwcml2YXRlIHNldENvbmRpdGlvbmFsRmlsdGVyKFxuICAgIGZpbHRlcjogRGF0b0dyaWRGaWx0ZXIsXG4gICAgeyBvcGVyYXRvciwgY29uZGl0aW9ucyB9OiB7IG9wZXJhdG9yOiBPcGVyYXRvclR5cGVzOyBjb25kaXRpb25zOiBDb25kaXRpb25zIH1cbiAgKSB7XG4gICAgY29uc3QgdmFsaWRDb25kaXRpb25zID0gY29uZGl0aW9ucy5maWx0ZXIoKHsgdmFsdWUsIHR5cGUgfSkgPT4gIWlzTmlsKHZhbHVlKSB8fCB0aGlzLmlzRW1wdHlPcGVyYW5kKHR5cGUub3BlcmFuZCkpO1xuICAgIGlmICh2YWxpZENvbmRpdGlvbnMubGVuZ3RoKSB7XG4gICAgICBmaWx0ZXIuY29uZGl0aW9uYWwgPSB7XG4gICAgICAgIHR5cGU6ICh0aGlzLmNvbERlZi5maWx0ZXIgYXMgRGF0b0dyaWRGaWx0ZXJUeXBlcykgfHwgRGF0b0dyaWRGaWx0ZXJUeXBlcy5TdHJpbmcsXG4gICAgICAgIG9wZXJhdG9yLFxuICAgICAgICBjb25kaXRpb25zOiBjb25kaXRpb25zLm1hcCgoeyB2YWx1ZSwgdHlwZSwgcmFuZ2VFbmQgfSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGJhc2UgPSB7IGNvbmRpdGlvbjogdHlwZS5vcGVyYW5kLCB2YWx1ZSB9O1xuICAgICAgICAgIGlmICh0eXBlLm9wZXJhbmQgPT09IERhdG9GaWx0ZXJDb25kaXRpb25zLklOX1JBTkdFKSB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0geyAuLi5iYXNlLCByYW5nZUVuZCB9O1xuICAgICAgICAgICAgaWYgKHRoaXMuZmlsdGVyVHlwZSA9PT0gRGF0b0dyaWRGaWx0ZXJUeXBlcy5EYXRlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHsgZnJvbSwgdG8gfSA9IHZhbHVlIGFzIERhdGVSYW5nZTtcbiAgICAgICAgICAgICAgcmVzdWx0ID0geyBjb25kaXRpb246IHR5cGUub3BlcmFuZCwgdmFsdWU6IGZyb20gYXMgc3RyaW5nLCByYW5nZUVuZDogdG8gYXMgc3RyaW5nIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0IGFzIERhdG9HcmlkUmFuZ2VGaWx0ZXJDb25kaXRpb247XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBiYXNlIGFzIERhdG9HcmlkRmlsdGVyQ29uZGl0aW9uO1xuICAgICAgICB9KVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldEJ5VmFsdWVGaWx0ZXIoZmlsdGVyOiBEYXRvR3JpZEZpbHRlciwgYnlWYWx1ZTogKHN0cmluZyB8IG51bWJlcilbXSkge1xuICAgIGlmICh0aGlzLmlzQ2xpZW50U2lkZUdyaWQpIHtcbiAgICAgIGNvbnN0IHZhbHVlc0NvdW50ID0gdGhpcy5jb2x1bW5WYWx1ZXMubGVuZ3RoO1xuICAgICAgaWYgKGJ5VmFsdWUubGVuZ3RoICE9PSB2YWx1ZXNDb3VudCkge1xuICAgICAgICBjb25zdCBjb25kaXRpb24gPVxuICAgICAgICAgIGJ5VmFsdWUubGVuZ3RoIDwgdmFsdWVzQ291bnQgLyAyID8gRGF0b0ZpbHRlckNvbmRpdGlvbnMuSU5fTElTVCA6IERhdG9GaWx0ZXJDb25kaXRpb25zLk5PVF9JTl9MSVNUO1xuICAgICAgICBmaWx0ZXIuYnlWYWx1ZSA9IHtcbiAgICAgICAgICBjb25kaXRpb24sXG4gICAgICAgICAgdmFsdWVzOiBjb25kaXRpb24gPT09IERhdG9GaWx0ZXJDb25kaXRpb25zLklOX0xJU1QgPyBieVZhbHVlIDogdGhpcy5nZXRCeVZhbHVlRXhjbHVkZVZhbHVlcyhieVZhbHVlKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSBBcnJheS5mcm9tKHRoaXMuZXhjbHVkZWRWYWx1ZXMudmFsdWVzKCkpO1xuICAgICAgaWYgKHZhbHVlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZpbHRlci5ieVZhbHVlID0ge1xuICAgICAgICAgIGNvbmRpdGlvbjogRGF0b0ZpbHRlckNvbmRpdGlvbnMuTk9UX0lOX0xJU1QsXG4gICAgICAgICAgdmFsdWVzXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEJ5VmFsdWVGaWx0ZXIoYnlWYWx1ZTogRGF0b0dyaWRGaWx0ZXJbJ2J5VmFsdWUnXSk6IChzdHJpbmcgfCBudW1iZXIpW11bXSB7XG4gICAgaWYgKCFieVZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWZhdWx0QnlWYWx1ZTtcbiAgICB9XG4gICAgaWYgKGJ5VmFsdWUudmFsdWVzLmxlbmd0aCAmJiB0aGlzLmZpbHRlclNlY3Rpb25zLkNvbmRpdGlvbmFsKSB7XG4gICAgICB0aGlzLmFjdGl2ZUFjY29yZGlvbklkID0gMTtcbiAgICB9XG4gICAgaWYgKGJ5VmFsdWUuY29uZGl0aW9uID09PSBEYXRvRmlsdGVyQ29uZGl0aW9ucy5OT1RfSU5fTElTVCkge1xuICAgICAgaWYgKCF0aGlzLmlzQ2xpZW50U2lkZUdyaWQpIHtcbiAgICAgICAgdGhpcy5leGNsdWRlZFZhbHVlcyA9IG5ldyBTZXQoYnlWYWx1ZS52YWx1ZXMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFt0aGlzLmdldEJ5VmFsdWVFeGNsdWRlVmFsdWVzKGJ5VmFsdWUudmFsdWVzKV07XG4gICAgfVxuICAgIHJldHVybiBbYnlWYWx1ZS52YWx1ZXNdO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZENvbmRpdGlvbmFsRmlsdGVyKGNvbmRpdGlvbmFsOiBEYXRvR3JpZEZpbHRlclsnY29uZGl0aW9uYWwnXSk6IEZvcm1Hcm91cCB7XG4gICAgaWYgKCFjb25kaXRpb25hbCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdENvbmRpdGlvbmFsO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5mYi5ncm91cCh7XG4gICAgICBvcGVyYXRvcjogW2NvbmRpdGlvbmFsLm9wZXJhdG9yXSxcbiAgICAgIGNvbmRpdGlvbnM6IHRoaXMuZmIuYXJyYXkodGhpcy5idWlsZENvbmRpdGlvbnMoY29uZGl0aW9uYWwuY29uZGl0aW9ucykpXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkQ29uZGl0aW9ucyhjb25kaXRpb25zOiAoRGF0b0dyaWRGaWx0ZXJDb25kaXRpb24gfCBEYXRvR3JpZFJhbmdlRmlsdGVyQ29uZGl0aW9uKVtdKTogRm9ybUdyb3VwW10ge1xuICAgIHJldHVybiBjb25kaXRpb25zLm1hcChjb25kaXRpb24gPT4ge1xuICAgICAgY29uc3QgeyBjb25kaXRpb246IGN1cnJlbnRPcGVyYW5kLCB2YWx1ZSB9ID0gY29uZGl0aW9uO1xuICAgICAgY29uc3QgZ3JvdXAgPSB7XG4gICAgICAgIHR5cGU6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogdGhpcy5jb25kaXRpb25hbEZpbHRlck9wdGlvbnMuZmluZEluZGV4KCh7IG9wZXJhbmQgfSkgPT4gb3BlcmFuZCA9PT0gY3VycmVudE9wZXJhbmQpLFxuICAgICAgICAgICAgb3BlcmFuZDogY3VycmVudE9wZXJhbmQsXG4gICAgICAgICAgICBsYWJlbDogYGNvcmUuJHtjdXJyZW50T3BlcmFuZH1gXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB2YWx1ZTogW3ZhbHVlLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgcmFuZ2VFbmQ6IG51bGxcbiAgICAgIH07XG4gICAgICBpZiAoaXNSYW5nZUNvbmRpdGlvbjxEYXRvR3JpZFJhbmdlRmlsdGVyQ29uZGl0aW9uPihjb25kaXRpb24pKSB7XG4gICAgICAgIGdyb3VwLnJhbmdlRW5kID0gW2NvbmRpdGlvbi5yYW5nZUVuZCwgVmFsaWRhdG9ycy5yZXF1aXJlZF07XG4gICAgICAgIGdyb3VwLnZhbHVlID0gW3sgZnJvbTogY29uZGl0aW9uLnZhbHVlIGFzIHN0cmluZywgdG86IGNvbmRpdGlvbi5yYW5nZUVuZCBhcyBzdHJpbmcgfSwgVmFsaWRhdG9ycy5yZXF1aXJlZF07XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5mYi5ncm91cChncm91cCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW4gcmFuZ2UgaXMgbm90IHJlcXVpcmVkIGJ5IGRlZmF1bHQsIHdlIHdhbnQgdG8gbWFrZSBpdCByZXF1aXJlZCBvbmNlIHRoaXMgb3BlcmFuZCBpcyBzZWxlY3RlZC5cbiAgICogKi9cbiAgcHJpdmF0ZSByZWdpc3Rlck9wZXJhbmRMaXN0ZW5lcnMoKSB7XG4gICAgaWYgKCF0aGlzLmNvbmRpdGlvbnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jb25kaXRpb25zLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIHN0YXJ0V2l0aCh0aGlzLmNvbmRpdGlvbnMubGVuZ3RoKSxcbiAgICAgICAgbWFwKCgpID0+IHRoaXMuY29uZGl0aW9ucy5sZW5ndGgpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlQ2hhbmdlcyA9IHRoaXMuY29uZGl0aW9ucy5jb250cm9scy5tYXAoKGdyb3VwOiBGb3JtR3JvdXAsIGluZGV4KSA9PlxuICAgICAgICAgICAgZ3JvdXAuZ2V0KCd0eXBlJykudmFsdWVDaGFuZ2VzLnBpcGUobWFwKCh2YWx1ZTogQ29uZGl0aW9uT3B0aW9uKSA9PiAoeyB2YWx1ZSwgaW5kZXggfSkpKVxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIG1lcmdlKC4uLnZhbHVlQ2hhbmdlcyk7XG4gICAgICAgIH0pLFxuICAgICAgICB1bnRpbERlc3Ryb3llZCh0aGlzKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoeyB2YWx1ZTogeyBvcGVyYW5kIH0sIGluZGV4IH0pID0+IHtcbiAgICAgICAgY29uc3QgcGFyYW1zID0geyBpbmRleCwgaW5SYW5nZTogb3BlcmFuZCA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuSU5fUkFOR0UgfTtcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyVHlwZSA9PT0gRGF0b0dyaWRGaWx0ZXJUeXBlcy5EYXRlKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVEYXRlSW5wdXQocGFyYW1zKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmZpbHRlclR5cGUgPT09IERhdG9HcmlkRmlsdGVyVHlwZXMuTnVtYmVyKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVOdW1iZXJJbnB1dChwYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlVmFsdWVDb250cm9sVmFsaWRhdG9yKG9wZXJhbmQsIGluZGV4KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVEYXRlSW5wdXQoeyBpblJhbmdlLCBpbmRleCB9KSB7XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuY29uZGl0aW9ucy5hdChpbmRleCkuZ2V0KCd2YWx1ZScpO1xuICAgIGlmIChjb250cm9sLmRpcnR5KSB7XG4gICAgICBjb25zdCB7IHZhbHVlIH0gPSBjb250cm9sO1xuICAgICAgY29uc3QgbmV3VmFsdWUgPSBpblJhbmdlID8geyBmcm9tOiB2YWx1ZSwgdG86IHZhbHVlIH0gOiB2YWx1ZS5mcm9tO1xuICAgICAgY29udHJvbC5wYXRjaFZhbHVlKG5ld1ZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU51bWJlcklucHV0KHsgaW5SYW5nZSwgaW5kZXggfSkge1xuICAgIGNvbnN0IHZhbGlkYXRvciA9IGluUmFuZ2UgPyBWYWxpZGF0b3JzLnJlcXVpcmVkIDogbnVsbDtcbiAgICBjb25zdCByYW5nZUVuZCA9IHRoaXMuY29uZGl0aW9ucy5hdChpbmRleCkuZ2V0KCdyYW5nZUVuZCcpO1xuICAgIHJhbmdlRW5kLnNldFZhbGlkYXRvcnModmFsaWRhdG9yKTtcbiAgICByYW5nZUVuZC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVZhbHVlQ29udHJvbFZhbGlkYXRvcihvcGVyYW5kOiBEYXRvRmlsdGVyQ29uZGl0aW9ucywgaW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IHZhbGlkYXRvciA9ICF0aGlzLmlzRW1wdHlPcGVyYW5kKG9wZXJhbmQpID8gVmFsaWRhdG9ycy5yZXF1aXJlZCA6IG51bGw7XG4gICAgY29uc3QgdmFsdWVDb250cm9sID0gdGhpcy5jb25kaXRpb25zLmF0KGluZGV4KS5nZXQoJ3ZhbHVlJykgYXMgRm9ybUNvbnRyb2w7XG4gICAgdmFsdWVDb250cm9sLnNldFZhbGlkYXRvcnModmFsaWRhdG9yKTtcbiAgICB2YWx1ZUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0VtcHR5T3BlcmFuZChvcGVyYW5kOiBEYXRvRmlsdGVyQ29uZGl0aW9ucyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBvcGVyYW5kID09PSBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JU19FTVBUWSB8fFxuICAgICAgb3BlcmFuZCA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuTk9UX0VNUFRZIHx8XG4gICAgICBvcGVyYW5kID09PSBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JU19OVUxMIHx8XG4gICAgICBvcGVyYW5kID09PSBEYXRvRmlsdGVyQ29uZGl0aW9ucy5OT1RfTlVMTFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGlzU3RyaW5nQXJyYXkodmFsdWU6IChzdHJpbmcgfCBMaXN0SXRlbSlbXSk6IHZhbHVlIGlzIHN0cmluZ1tdIHtcbiAgICByZXR1cm4gaXNTdHJpbmcodmFsdWVbMF0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRWYWx1ZXNGcm9tU2VydmVyKHNlYXJjaFRlcm06IHN0cmluZykge1xuICAgIHRoaXMubG9hZGluZ0xpc3QgPSB0cnVlO1xuICAgIHRoaXMubGlzdE9wdGlvbnMgPSBbXTtcbiAgICBjb25zdCBwYXJhbXM6IFBhcnRpYWw8RGF0b0dyaWRHZXRSb3dzUGFyYW1zPiA9IHtcbiAgICAgIGZhaWxDYWxsYmFjazogKCkgPT4ge1xuICAgICAgICB0aGlzLmxvYWRpbmdMaXN0ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2VydmVyU2VhcmNoRXJyb3JlZCA9IHRydWU7XG4gICAgICAgIHRoaXMubGlzdE9wdGlvbnMgPSBbXTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSxcbiAgICAgIHN1Y2Nlc3NDYWxsYmFjazogZGF0YSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZ0xpc3QgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgZmxhdERhdGEgPSBkYXRhLm1hcCh2YWx1ZSA9PiB2YWx1ZVt0aGlzLmNvbEZpZWxkXSk7XG4gICAgICAgIHRoaXMubGlzdE9wdGlvbnMgPSBmbGF0RGF0YS5tYXAobWFwVG9MaXN0SXRlbSk7XG4gICAgICAgIHRoaXMucGF0Y2hBbmRSZVJlZ2lzdGVyKGZsYXREYXRhKTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSxcbiAgICAgIHNlcnZlckNvbmZpZzoge1xuICAgICAgICBwYWdlU2l6ZTogMzAsXG4gICAgICAgIHBhZ2VOdW1iZXI6IDEsXG4gICAgICAgIGNvbHVtbkZpbHRlcnM6IHtcbiAgICAgICAgICBbdGhpcy5jb2xGaWVsZF06IHtcbiAgICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvclR5cGVzLkFORCxcbiAgICAgICAgICAgIGZpbHRlcnM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbmRpdGlvbjogRGF0b0ZpbHRlckNvbmRpdGlvbnMuQ09OVEFJTlMsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHNlYXJjaFRlcm1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgc29ydDogW10sXG4gICAgICAgIGNvbHVtbnNUb1JldHVybjogW3RoaXMuY29sRmllbGRdLFxuICAgICAgICBkaXN0aW5jdFJlc3VsdHM6IHRydWVcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuZ3JpZFNlcnZpY2UuX29yaWdpbmFsR2V0Um93cyhwYXJhbXMgYXMgYW55KTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICAvKiBXaGVuIHNlYXJjaGluZyB0aGUgYnkgdmFsdWUgZmlsdGVyIG9uIHNlcnZlciBzaWRlIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBjb250cm9sIHdpdGggdGhlIG5ldyB2YWx1ZXMgYW5kIHJlLXJlZ2lzdGVyIHRvIHRoZSBjaGFuZ2VzICovXG4gIHByaXZhdGUgcGF0Y2hBbmRSZVJlZ2lzdGVyKGRhdGE6IChzdHJpbmcgfCBudW1iZXIpW10pIHtcbiAgICB0aGlzLmJ5VmFsdWVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmJ5VmFsdWVDb250cm9sLnBhdGNoVmFsdWUodGhpcy5nZXROb25FeGNsdWRlZFZhbHVlcyhkYXRhKSk7XG4gICAgdGhpcy5yZWdpc3RlckJ5VmFsdWVMaXN0ZW5lcigpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWdpc3RlckJ5VmFsdWVMaXN0ZW5lcigpIHtcbiAgICBjb25zdCBieVZhbHVlID0gdGhpcy5ieVZhbHVlQ29udHJvbDtcbiAgICB0aGlzLmJ5VmFsdWVTdWJzY3JpcHRpb24gPSBieVZhbHVlLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIHN0YXJ0V2l0aChieVZhbHVlLnZhbHVlKSxcbiAgICAgICAgcGFpcndpc2UoKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoW3ByZXYsIGN1cnJlbnRdKSA9PiB7XG4gICAgICAgIGNvbnN0IGFkZFRvRXhjbHVkZWQgPSBjdXJyZW50Lmxlbmd0aCA8IHByZXYubGVuZ3RoO1xuICAgICAgICBjb25zdCBkaWZmID0gYWRkVG9FeGNsdWRlZCA/IGRpZmZlcmVuY2UocHJldiwgY3VycmVudCkgOiBkaWZmZXJlbmNlKGN1cnJlbnQsIHByZXYpO1xuICAgICAgICBkaWZmLmZvckVhY2godiA9PiAoYWRkVG9FeGNsdWRlZCA/IHRoaXMuZXhjbHVkZWRWYWx1ZXMuYWRkKHYpIDogdGhpcy5leGNsdWRlZFZhbHVlcy5kZWxldGUodikpKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXROb25FeGNsdWRlZFZhbHVlcyhkYXRhOiAoc3RyaW5nIHwgbnVtYmVyKVtdKTogKHN0cmluZyB8IG51bWJlcilbXSB7XG4gICAgcmV0dXJuIGRhdGEuZmlsdGVyKHYgPT4gIXRoaXMuZXhjbHVkZWRWYWx1ZXMuaGFzKHYpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgcGl2b3QgZGltZW5zaW9ucyBhcyBkZWZpbmVkIGluIHRoZSBwYXJlbnQgZ3JvdXAgY29sdW1uIGhlYWRlciBjbGFzcy5cbiAgICovXG4gIHByaXZhdGUgZ2V0UGl2b3RGaWVsZHMocGFyZW50OiBDb2x1bW5Hcm91cCwgZmllbGRzID0gW10pOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgZ3JhbmRQYXJlbnQgPSBwYXJlbnQuZ2V0UGFyZW50KCk7XG4gICAgY29uc3QgaGVhZGVyQ2xhc3MgPSBwYXJlbnQuZ2V0T3JpZ2luYWxDb2x1bW5Hcm91cCgpLmdldENvbEdyb3VwRGVmKCkuaGVhZGVyQ2xhc3M7XG5cbiAgICBpZiAoZ3JhbmRQYXJlbnQpIHtcbiAgICAgIHRoaXMuZ2V0UGl2b3RGaWVsZHMoZ3JhbmRQYXJlbnQsIGZpZWxkcyk7XG4gICAgfVxuXG4gICAgaGVhZGVyQ2xhc3MgJiYgZmllbGRzLnB1c2goaGVhZGVyQ2xhc3NbMF0pO1xuXG4gICAgcmV0dXJuIGZpZWxkcztcbiAgfVxufVxuIl19
@@ -308,7 +308,7 @@ var DatoGridPaginationV2Component = /** @class */ (function () {
308
308
  Component({
309
309
  selector: 'dato-grid-pagination-v2',
310
310
  changeDetection: ChangeDetectionStrategy.OnPush,
311
- template: "<div class=\"d-flex-row d-flex-auto d-flex-wrap container\" [class.small]=\"smallVersion\"\n [attr.data-pages-count]=\"totalPages\"\n [attr.data-current-page]=\"pageNumbersDisplay.currentPage\"\n [attr.data-page-size]=\"rowsPerPage\"\n [attr.data-rows-count]=\"rowCount\">\n <div *ngIf=\"totalPages > 1\" #navigation\n class=\"navigation d-flex-row d-flex-0-0-auto align-center\">\n\n <!-- First Page -->\n <dato-icon-button *ngIf=\"!disableButtons\"\n class=\"mr-4\" data-auto-id=\"pagiantion-first-page\"\n icon=\"chevron-left-double\"\n datoType=\"secondary\"\n datoSize=\"md\"\n [disabled]=\"prevPageDisabled\"\n (click)=\"navigateFirstPage()\">\n </dato-icon-button>\n\n <!-- Previous Page -->\n <dato-icon-button icon=\"arrow-left\" datoType=\"secondary\" datoSize=\"md\"\n [disabled]=\"prevPageDisabled\" data-auto-id=\"pagiantion-previous-page\"\n (click)=\"navigatePrevPage()\">\n </dato-icon-button>\n\n\n <div class=\"d-flex mx-5 align-center number-container\">\n <dato-link class=\"page-number mx-5\" datoType=\"secondary\" datoSize=\"sm\" data-auto-id=\"pagiantion-previous-batch\"\n *ngIf=\"pageNumbersDisplay.showFirstEllipsis && !smallVersion\"\n (click)=\"showPreviousBatch()\">...\n </dato-link>\n <dato-link class=\"page-number mx-5\" [datoType]=\"page === pageNumbersDisplay.currentPage ? 'primary' : 'secondary'\" datoSize=\"sm\"\n *ngFor=\"let page of pageNumbersDisplay.pages; index as i; trackBy: trackByPage;\" [attr.data-auto-id]=\"'pagiantion-page-' + i\"\n (click)=\"navigatePage(page - 1)\">\n {{page}}\n </dato-link>\n\n <div class=\"d-flex\" *ngIf=\"pageNumbersDisplay.showLastPage && !smallVersion\">\n <dato-link class=\"page-number mx-5\" datoType=\"secondary\" datoSize=\"sm\" data-auto-id=\"pagiantion-next-batch\"\n (click)=\"showNextBatch()\">...</dato-link>\n <dato-link class=\"page-number mx-5\" datoType=\"secondary\" datoSize=\"sm\"\n [attr.data-auto-id]=\"'pagiantion-page-' + totalPages\"\n (click)=\"navigatePage(totalPages - 1)\">\n {{totalPages}}\n </dato-link>\n </div>\n\n </div>\n\n <!-- Next Page -->\n <dato-icon-button icon=\"arrow-right\" datoType=\"secondary\" datoSize=\"md\"\n (click)=\"navigateNextPage()\" data-auto-id=\"pagiantion-next-page\"\n [disabled]=\"nextPageDisabled\">\n </dato-icon-button>\n\n <!-- Last Page -->\n <dato-icon-button *ngIf=\"!disableButtons\"\n class=\"ml-4\" icon=\"chevron-right-double\"\n datoType=\"secondary\" datoSize=\"md\" data-auto-id=\"pagiantion-last-page\"\n [disabled]=\"nextPageDisabled\"\n (click)=\"navigatePage(totalPages - 1)\">\n </dato-icon-button>\n\n </div>\n\n <div *ngIf=\"totalPages > 1 && !smallVersion\"\n class=\"separator mx-10 my-auto primary-100-background-color\">\n </div>\n\n <div class=\"total d-flex-0-0-auto d-flex-row align-center\">\n <span class=\"dato-note primary-300-color\">{{rowsRange}}</span>\n </div>\n\n <div *ngIf=\"showBottomControls\" class=\"grid-controls d-flex d-flex-1 justify-end\">\n <dato-icon-button *ngIf=\"hasRowGroupColumns\" [icon]=\"isExpanded ? 'collapse' : 'expand'\" datoType=\"secondary\"\n datoSize=\"md\" (click)=\"toggleGroupsState()\" data-auto-id=\"pagination-expand-collapse\"\n [datoTooltipV2]=\"isExpanded ? 'core.collapse-rows' : 'core.expand-rows'\">\n </dato-icon-button>\n\n <dato-icon-button class=\"mx-4\" icon=\"maximize-horizontal\" datoType=\"secondary\" datoSize=\"md\"\n (click)=\"autoFitGrid('content')\" [datoTooltipV2]=\"'core.fit-to-content'\"\n data-auto-id=\"pagination-fit-to-content\">\n </dato-icon-button>\n\n <dato-icon-button icon=\"minimize-horizontal\" datoType=\"secondary\" datoSize=\"md\"\n (click)=\"autoFitGrid('container')\" [datoTooltipV2]=\"'core.fit-to-container'\"\n data-auto-id=\"pagination-fit-to-container\">\n </dato-icon-button>\n </div>\n</div>\n",
311
+ template: "<div class=\"d-flex-row d-flex-auto d-flex-wrap container\" [class.small]=\"smallVersion\"\n [attr.data-pages-count]=\"totalPages\"\n [attr.data-current-page]=\"pageNumbersDisplay.currentPage\"\n [attr.data-page-size]=\"rowsPerPage\"\n [attr.data-rows-count]=\"rowCount\">\n <div *ngIf=\"totalPages > 1\" #navigation\n class=\"navigation d-flex-row d-flex-0-0-auto align-center\">\n\n <!-- First Page -->\n <dato-icon-button *ngIf=\"!disableButtons\"\n class=\"mr-4\" data-auto-id=\"pagiantion-first-page\"\n icon=\"chevron-left-double\"\n datoType=\"secondary\"\n datoSize=\"md\"\n [disabled]=\"prevPageDisabled\"\n (click)=\"navigateFirstPage()\">\n </dato-icon-button>\n\n <!-- Previous Page -->\n <dato-icon-button icon=\"arrow-left\" datoType=\"secondary\" datoSize=\"md\"\n [disabled]=\"prevPageDisabled\" data-auto-id=\"pagiantion-previous-page\"\n (click)=\"navigatePrevPage()\">\n </dato-icon-button>\n\n\n <div class=\"d-flex mx-5 align-center number-container\">\n <dato-link class=\"page-number mx-5\" datoType=\"secondary\" datoSize=\"sm\" data-auto-id=\"pagiantion-previous-batch\"\n *ngIf=\"pageNumbersDisplay.showFirstEllipsis && !smallVersion\"\n (click)=\"showPreviousBatch()\">...\n </dato-link>\n <dato-link class=\"page-number mx-5\" [datoType]=\"page === pageNumbersDisplay.currentPage ? 'primary' : 'secondary'\" datoSize=\"sm\"\n *ngFor=\"let page of pageNumbersDisplay.pages; index as i; trackBy: trackByPage;\" [attr.data-auto-id]=\"'pagiantion-page-' + i\"\n (click)=\"navigatePage(page - 1)\">\n {{page}}\n </dato-link>\n\n <div class=\"d-flex\" *ngIf=\"pageNumbersDisplay.showLastPage && !smallVersion\">\n <dato-link class=\"page-number mx-5\" datoType=\"secondary\" datoSize=\"sm\" data-auto-id=\"pagiantion-next-batch\"\n (click)=\"showNextBatch()\">...</dato-link>\n <dato-link class=\"page-number mx-5\" datoType=\"secondary\" datoSize=\"sm\"\n [attr.data-auto-id]=\"'pagiantion-page-' + totalPages\"\n (click)=\"navigatePage(totalPages - 1)\">\n {{totalPages}}\n </dato-link>\n </div>\n\n </div>\n\n <!-- Next Page -->\n <dato-icon-button icon=\"arrow-right\" datoType=\"secondary\" datoSize=\"md\"\n (click)=\"navigateNextPage()\" data-auto-id=\"pagiantion-next-page\"\n [disabled]=\"nextPageDisabled\">\n </dato-icon-button>\n\n <!-- Last Page -->\n <dato-icon-button *ngIf=\"!disableButtons\"\n class=\"ml-4\" icon=\"chevron-right-double\"\n datoType=\"secondary\" datoSize=\"md\" data-auto-id=\"pagiantion-last-page\"\n [disabled]=\"nextPageDisabled\"\n (click)=\"navigatePage(totalPages - 1)\">\n </dato-icon-button>\n\n </div>\n\n <div *ngIf=\"totalPages > 1 && !smallVersion\"\n class=\"separator mx-10 my-auto primary-100-background-color\">\n </div>\n\n <div class=\"total d-flex-0-0-auto d-flex-row align-center\">\n <span class=\"dato-note primary-300-color\">{{rowsRange}}</span>\n </div>\n\n <div *ngIf=\"showBottomControls\" class=\"grid-controls d-flex d-flex-1 justify-end\">\n <dato-icon-button *ngIf=\"hasRowGroupColumns\" [icon]=\"isExpanded ? 'collapse' : 'expand'\" datoType=\"secondary\"\n datoSize=\"md\" (click)=\"toggleGroupsState()\" data-auto-id=\"pagination-expand-collapse\"\n [datoTooltipV2]=\"isExpanded ? 'core.collapse-rows' : 'core.expand-rows'\">\n </dato-icon-button>\n\n <dato-icon-button class=\"mx-4\" icon=\"maximize-horizontal\" datoType=\"secondary\" datoSize=\"md\"\n (click)=\"autoFitGrid('content')\" [datoTooltipV2]=\"'core.fit-to-text'\"\n data-auto-id=\"pagination-fit-to-content\">\n </dato-icon-button>\n\n <dato-icon-button icon=\"minimize-horizontal\" datoType=\"secondary\" datoSize=\"md\"\n (click)=\"autoFitGrid('container')\" [datoTooltipV2]=\"'core.revert-to-default-size'\"\n data-auto-id=\"pagination-fit-to-container\">\n </dato-icon-button>\n </div>\n</div>\n",
312
312
  providers: [DecimalPipe],
313
313
  styles: [":host{padding:12px 0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;min-height:25px}:host .container{height:25px}:host .navigation .page-number{transition:color .3s ease-in-out}:host .navigation .page-number:first-of-type{margin-left:7px}:host .navigation .page-number:last-of-type{margin-right:7px}:host .separator{width:1px;height:25px}:host .container.small .navigation,:host .container.small .total{margin-top:8px;margin-left:auto;margin-right:auto}"]
314
314
  }),
@@ -322,4 +322,4 @@ var DatoGridPaginationV2Component = /** @class */ (function () {
322
322
  return DatoGridPaginationV2Component;
323
323
  }());
324
324
  export { DatoGridPaginationV2Component };
325
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1wYWdpbmF0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BkYXRvcmFtYS9jb3JlLyIsInNvdXJjZXMiOlsibGliL2dyaWQtdjIvZ3JpZC1wYWdpbmF0aW9uL2dyaWQtcGFnaW5hdGlvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOztBQUVILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFckgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUMzRixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBU3ZDO0lBdURFLHVDQUNVLEdBQXNCLEVBQ3RCLFNBQStCLEVBQy9CLFNBQW9CLEVBQ3BCLFdBQXdCLEVBQ3hCLFVBQXVDLEVBQ3ZDLFdBQXdCO1FBTHhCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3RCLGNBQVMsR0FBVCxTQUFTLENBQXNCO1FBQy9CLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFDcEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsZUFB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SUFBRCxvQ0FBQztDQUFBLEFBalRELElBaVRDO1NBalRZLDZCQUE2QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBEYXRvcmFtYS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBBcGFjaGUgTGljZW5zZSAyLjAgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2dpdGh1Yi5jb20vZGF0b3JhbWEvY2xpZW50LWNvcmUvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICovXG5cbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgR3JpZEFwaSwgUm93Tm9kZSB9IGZyb20gJ2FnLWdyaWQtY29tbXVuaXR5JztcbmltcG9ydCB7IHVudGlsRGVzdHJveWVkIH0gZnJvbSAnbmd4LXRha2UtdW50aWwtZGVzdHJveSc7XG5pbXBvcnQgeyBEYXRvVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RyYW5zbGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IHN3aXRjaE1hcCwgdGFwLCB0aHJvdHRsZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBHcmlkUXVlcnkgfSBmcm9tICcuLi9ncmlkLXN0b3JlL2dyaWQucXVlcnknO1xuaW1wb3J0IHsgRGF0b0dyaWRDb250cm9sbGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vZ3JpZC1jb250cm9sbGVyL2dyaWQtY29udHJvbGxlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgaXNOaWwgfSBmcm9tICcuLi8uLi91dGlscy92YWxpZGF0b3JzJztcbmltcG9ydCB7IERlY2ltYWxQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEdyaWRTZXJ2aWNlIH0gZnJvbSAnLi4vZ3JpZC1zdG9yZS9ncmlkLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGF0b0dyaWREYXRhQ2hhbmdlZEV2ZW50IH0gZnJvbSAnLi4vZ3JpZC9ncmlkLXYyLnR5cGVzJztcbmltcG9ydCB7IHRhcE9uY2UgfSBmcm9tICcuLi8uLi9yeC90YXAnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkYXRvLWdyaWQtcGFnaW5hdGlvbi12MicsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICB0ZW1wbGF0ZVVybDogJy4vZ3JpZC1wYWdpbmF0aW9uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZ3JpZC1wYWdpbmF0aW9uLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW0RlY2ltYWxQaXBlXVxufSlcbmV4cG9ydCBjbGFzcyBEYXRvR3JpZFBhZ2luYXRpb25WMkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIC8qKlxuICAgKiBUaGlzIHNldHRlciBpcyB1c2VkIHRvIGFzc2lnbiB0aGUgbmF2aWdhdGlvbiBlbGVtZW50IHJlZiBhbmQgdG8gc2V0XG4gICAqIHRoZSBwYWdpbmF0aW9uIHNpemUgd2hlbiB0aGUgY29tcG9uZW50IHN0YXJ0c1xuICAgKiBAcGFyYW0ge0VsZW1lbnRSZWZ9IGNvbnRlbnRcbiAgICovXG4gIEBWaWV3Q2hpbGQoJ25hdmlnYXRpb24nLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBzZXQgY29udGVudChjb250ZW50OiBFbGVtZW50UmVmKSB7XG4gICAgdGhpcy5uYXZpZ2F0aW9uRWxlbWVudCA9IGNvbnRlbnQ7XG4gICAgaWYgKGNvbnRlbnQgJiYgdGhpcy5zbWFsbFZlcnNpb24gPT09IG51bGwpIHtcbiAgICAgIHRoaXMuY2FsY3VsYXRlTmF2aWdhdGlvblNpemUoKTtcbiAgICB9XG4gIH1cblxuICAvLyBudW1iZXIgb2Ygcm93cyBpbiB0aGUgdGFibGVcbiAgcm93Q291bnQ6IG51bWJlcjtcbiAgcm93c1BlclBhZ2U6IG51bWJlcjtcbiAgLy8gd2hlbiB0aGUgd2lkZ2V0J3Mgd2lkdGggaXMgc21hbGxlciB0aGFuIFhTX0RJU1BMQVlfU0laRSBkaXNhYmxlIGdvIHRvIGZpcnN0L2xhc3QgYnV0dG9uc1xuICBkaXNhYmxlQnV0dG9uczogYm9vbGVhbiA9IG51bGw7XG4gIC8vIHdoZW4gdGhlIHdpZGdldCdzIHdpZHRoIGlzIHNtYWxsZXIgdGhhbiBTTUFMTF9ESVNQTEFZX1NJWkUgY2hhbmdlIHRvIHNtYWxsIHBhZ2luYXRpb24gdmlld1xuICBzbWFsbFZlcnNpb246IGJvb2xlYW4gfCBudWxsID0gbnVsbDtcbiAgLy8gbnVtYmVyIG9mIHBhZ2VzIGluIHRoZSB0YWJsZVxuICB0b3RhbFBhZ2VzOiBudW1iZXI7XG4gIC8vIFRoZSBkaXNwbGF5IHJvd3MgcmFuZ2VcbiAgcm93c1JhbmdlOiBzdHJpbmc7XG4gIC8vIG1hbmFnaW5nIG9iamVjdCBmb3IgdGhlIG5hdmlnYXRpb25cbiAgcGFnZU51bWJlcnNEaXNwbGF5ID0ge1xuICAgIGN1cnJlbnRQYWdlOiAxLFxuICAgIHBhZ2VzOiBbXSxcbiAgICBzaG93Rmlyc3RFbGxpcHNpczogZmFsc2UsXG4gICAgc2hvd0xhc3RQYWdlOiBmYWxzZVxuICB9O1xuXG4gIC8vIFNob3cgZml0IGNlbGwgY29udGVudCBhbmQgY29sbGFwc2UvZXhwYW5kIHJvdyBncm91cHMgY29udHJvbHNcbiAgc2hvd0JvdHRvbUNvbnRyb2xzID0gZmFsc2U7XG4gIGlzRXhwYW5kZWQgPSB0cnVlO1xuICBoYXNSb3dHcm91cENvbHVtbnMgPSBmYWxzZTtcblxuICAvLyBob3cgbWFueSBudW1iZXJzIGFyZSBzaG93aW5nIG9uIHRoZSBzYW1lIHRpbWUgYmVzaWRlcyB0aGUgbGFzdCBwYWdlIG51bWJlclxuICBwcml2YXRlIF9wYWdlc0luVmlldzogbnVtYmVyO1xuICAvLyBUaGUgbnVtYmVyIG9mIHBhZ2VzIGRpc3BsYXllZCBvbiBlYWNoIHNpZGUgb2YgdGhlIHNlbGVjdGVkIHBhZ2UuXG4gIHByaXZhdGUgcGFnZXNPblNpZGVzOiBudW1iZXI7XG4gIC8vIGlmIHRoZSBudW1iZXIgb2YgcGFnZXMgaW4gdGhlIHRhYmxlIGZpdHMgdGhlIG51bWJlciBvZiBkaXNwbGF5aW5nIHBhZ2VzXG4gIHByaXZhdGUgcGFnZXNGaXRWaWV3OiBib29sZWFuO1xuICAvLyBob3cgbWFueSBudW1iZXJzIHRvIHNob3cgb24gZWFjaCBzaWRlIGJlc2lkZXMgdGhlIHNlbGVjdGVkIG51bWJlclxuICBwcml2YXRlIG5hdmlnYXRpb25FbGVtZW50OiBFbGVtZW50UmVmO1xuICBwcml2YXRlIGlzU2VydmVyU2lkZVBhZ2luYXRpb24gPSBmYWxzZTtcbiAgcHJpdmF0ZSBncmlkQXBpOiBHcmlkQXBpO1xuICAvLyBUaGUgbnVtYmVyIG9mIHBhZ2VzIGRpc3BsYXllZCBpbiB0aGUgbmF2aWdhdGlvbiBwYW5lbCBmb3IgZWFjaCB2aWV3IGFzIGRlZmluZWQgYnkgcHJvZHVjdC5cbiAgcHJpdmF0ZSByZWFkb25seSBNSU5JX0RJU1BMQVlfTEVOR1RIOiBudW1iZXIgPSAyO1xuICBwcml2YXRlIHJlYWRvbmx5IERJU1BMQVlfTEVOR1RIOiBudW1iZXIgPSA1O1xuICAvLyBXaWRnZXQncyB3aWR0aCB0aGUgZGV0ZXJtaW5lcyB0aGUgcGFnaW5hdGlvbiB2aWV3IHR5cGUgWyBzbWFsbCwgeHNdIGFzIGRlZmluZWQgYnkgcHJvZHVjdC5cbiAgcHJpdmF0ZSByZWFkb25seSBYU19ESVNQTEFZX1NJWkU6IG51bWJlciA9IDE2MDtcbiAgcHJpdmF0ZSByZWFkb25seSBTTUFMTF9ESVNQTEFZX1NJWkU6IG51bWJlciA9IDM5MDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IERhdG9UcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgZ3JpZFF1ZXJ5OiBHcmlkUXVlcnksXG4gICAgcHJpdmF0ZSBncmlkU2VydmljZTogR3JpZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb250cm9sbGVyOiBEYXRvR3JpZENvbnRyb2xsZXJDb21wb25lbnQsXG4gICAgcHJpdmF0ZSBkZWNpbWFsUGlwZTogRGVjaW1hbFBpcGVcbiAgKSB7fVxuXG4gIGdldCBwcmV2UGFnZURpc2FibGVkKCkge1xuICAgIHJldHVybiB0aGlzLnBhZ2VOdW1iZXJzRGlzcGxheS5jdXJyZW50UGFnZSA9PT0gMTtcbiAgfVxuXG4gIGdldCBuZXh0UGFnZURpc2FibGVkKCkge1xuICAgIHJldHVybiB0aGlzLnBhZ2VOdW1iZXJzRGlzcGxheS5jdXJyZW50UGFnZSA9PT0gdGhpcy50b3RhbFBhZ2VzO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5ncmlkUXVlcnlcbiAgICAgIC53YWl0Rm9yR3JpZCgoKSA9PiB0aGlzLmdyaWRRdWVyeS5ncmlkUmVmLmZpbHRlckNoYW5nZWQpXG4gICAgICAucGlwZSh1bnRpbERlc3Ryb3llZCh0aGlzKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmdyaWRBcGkucGFnaW5hdGlvbkdvVG9QYWdlKDApO1xuICAgICAgICB0aGlzLmluaXRQYWdpbmF0aW9uKCk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuZ3JpZFF1ZXJ5LmdyaWRSZWFkeSRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJvd0dyb3VwQ29sdW1ucyA9IHRoaXMuZ3JpZFF1ZXJ5LmFwaS5jb2x1bW5zLmdldFJvd0dyb3VwQ29sdW1ucygpO1xuXG4gICAgICAgICAgdGhpcy5ncmlkQXBpID0gdGhpcy5ncmlkUXVlcnkuYXBpLmdyaWQ7XG4gICAgICAgICAgdGhpcy5zaG93Qm90dG9tQ29udHJvbHMgPSB0aGlzLmdyaWRRdWVyeS5nZXRHcmlkT3B0aW9ucygpLnNob3dCb3R0b21Db250cm9scztcbiAgICAgICAgICB0aGlzLmhhc1Jvd0dyb3VwQ29sdW1ucyA9IHJvd0dyb3VwQ29sdW1ucyAmJiByb3dHcm91cENvbHVtbnMubGVuZ3RoID4gMDtcbiAgICAgICAgfSksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pc1NlcnZlclNpZGVQYWdpbmF0aW9uID0gdGhpcy5ncmlkUXVlcnkuaXNTZXJ2ZXJTaWRlO1xuICAgICAgICAgIHJldHVybiB0aGlzLmlzU2VydmVyU2lkZVBhZ2luYXRpb24gPyB0aGlzLmdyaWRRdWVyeS5zZXJ2ZXJEYXRhTG9hZGVkJCA6IHRoaXMuZ3JpZFF1ZXJ5LnJvd0RhdGFDaGFuZ2VkJDtcbiAgICAgICAgfSksXG4gICAgICAgIHRocm90dGxlVGltZSgxMDApLFxuICAgICAgICB0YXBPbmNlKCgpID0+IHRoaXMuaW5pdFBhZ2luYXRpb24oKSksXG4gICAgICAgIHVudGlsRGVzdHJveWVkKHRoaXMpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCh7IHBhZ2luYXRpb25QYWdlID0gMSB9OiBEYXRvR3JpZERhdGFDaGFuZ2VkRXZlbnQpID0+IHtcbiAgICAgICAgLyoqICBBZyBncmlkIGluZGV4IGlzIGZyb20gMCwgYnV0IHRoZSBpbmRleCBmaXJlZCBmcm9tIHRoZSBldmVudCBzdGFydCBmcm9tIDEqL1xuICAgICAgICB0aGlzLmluaXRQYWdpbmF0aW9uKHBhZ2luYXRpb25QYWdlIC0gMSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNhbGN1bGF0ZSB0aGUgcm93IGNvdW50IGFuZCBwYWdlIGxlbmd0aHNcbiAgICovXG4gIGNhbGN1bGF0ZVJvd3NDb3VudCh0b3RhbFJvd3M6IG51bWJlcikge1xuICAgIHRoaXMudG90YWxQYWdlcyA9IHRvdGFsUm93cyA/IE1hdGguY2VpbCh0b3RhbFJvd3MgLyB0aGlzLnJvd3NQZXJQYWdlKSA6IHRoaXMuZ3JpZEFwaS5wYWdpbmF0aW9uR2V0VG90YWxQYWdlcygpO1xuICAgIHRoaXMucm93Q291bnQgPSB0aGlzLmdyaWRBcGkucGFnaW5hdGlvbkdldFJvd0NvdW50KCk7XG4gICAgdGhpcy5zZXRSb3dzRGlzcGxheVJhbmdlKHRoaXMucGFnZU51bWJlcnNEaXNwbGF5LmN1cnJlbnRQYWdlKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBpbml0UGFnaW5hdGlvbihwYWdlTnVtYmVyID0gMCkge1xuICAgIGNvbnN0IHsgdG90YWxSb3dzLCBlbmFibGVkIH0gPSB0aGlzLmdyaWRRdWVyeS5zZXJ2ZXJTaWRlQ29uZmlnO1xuICAgIGlmIChlbmFibGVkICYmIGlzTmlsKHRvdGFsUm93cykpIHJldHVybjtcbiAgICAvKiogcmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBwYWdlcyBzdGFydGluZyBmcm9tIDEgKi9cbiAgICB0aGlzLnJvd3NQZXJQYWdlID0gdGhpcy5ncmlkQXBpLnBhZ2luYXRpb25HZXRQYWdlU2l6ZSgpO1xuICAgIHRoaXMuY2FsY3VsYXRlUm93c0NvdW50KHRvdGFsUm93cyk7XG4gICAgLyoqIHNldCB0aGUgaW5pdCB2YWx1ZSBvZiB0aGUgcGFnaW5hdGlvbiB2aWV3IHRvIG5vcm1hbCBzaXplICovXG4gICAgdGhpcy5wYWdlc0luVmlldyA9IHRoaXMuRElTUExBWV9MRU5HVEg7XG4gICAgLyoqIGN1cnJlbnQgcGFnZSBpbmRleCBzdGFydHMgZnJvbSAwICovXG4gICAgdGhpcy5uYXZpZ2F0ZVBhZ2UocGFnZU51bWJlcik7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBudW1iZXIgb2YgcGFnZSBudW1iZXJzIHNob3dpbmcgYXQgdGhlIHNhbWUgdGltZSBpbiB0aGUgbmF2aWdhdGlvblxuICAgKiBwYW5lbCAmIHVwZGF0ZSB0aGUgbnVtYmVyIG9mIHBhZ2VzIGRpc3BsYXllZCBvbiBlYWNoIHNpZGUgb2YgdGhlIHNlbGVjdGVkIHBhZ2UuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBuZXdOdW1iZXJzTGVuZ3RoIC0gVGhlIG5ldyBsZW5ndGggb2YgdGhlIGRpc3BsYXlpbmcgbnVtYmVyc1xuICAgKi9cbiAgc2V0IHBhZ2VzSW5WaWV3KG5ld051bWJlcnNMZW5ndGg6IG51bWJlcikge1xuICAgIHRoaXMuX3BhZ2VzSW5WaWV3ID0gbmV3TnVtYmVyc0xlbmd0aDtcbiAgICB0aGlzLnBhZ2VzT25TaWRlcyA9IE1hdGguZmxvb3IodGhpcy5fcGFnZXNJblZpZXcgLyAyKTtcbiAgICB0aGlzLnBhZ2VzRml0VmlldyA9IHRoaXMuX3BhZ2VzSW5WaWV3ICsgMSA+PSB0aGlzLnRvdGFsUGFnZXM7XG4gICAgLy8gaW52YWxpZGF0ZSBkaXNwbGF5aW5nIHBhZ2VzIHVwb24gcmVzaXplXG4gICAgdGhpcy5wYWdlTnVtYmVyc0Rpc3BsYXkucGFnZXMgPSBbXTtcbiAgfVxuXG4gIC8qKiBUT0RPIFRoaXMgaXMgbm90IGxpc3RlbmluZyB0byBzaXplIGNoYW5nZXMgKi9cbiAgY2FsY3VsYXRlTmF2aWdhdGlvblNpemUoKSB7XG4gICAgaWYgKHRoaXMubmF2aWdhdGlvbkVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnRXaWR0aCA9IHRoaXMubmF2aWdhdGlvbkVsZW1lbnQubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50LmNsaWVudFdpZHRoO1xuICAgICAgdGhpcy5kaXNhYmxlQnV0dG9ucyA9IGVsZW1lbnRXaWR0aCA8IHRoaXMuWFNfRElTUExBWV9TSVpFO1xuICAgICAgaWYgKGVsZW1lbnRXaWR0aCA8IHRoaXMuU01BTExfRElTUExBWV9TSVpFKSB7XG4gICAgICAgIGlmICh0aGlzLl9wYWdlc0luVmlldyAhPT0gdGhpcy5NSU5JX0RJU1BMQVlfTEVOR1RIKSB7XG4gICAgICAgICAgdGhpcy5zbWFsbFZlcnNpb24gPSB0cnVlO1xuICAgICAgICAgIHRoaXMucGFnZXNJblZpZXcgPSB0aGlzLk1JTklfRElTUExBWV9MRU5HVEg7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLl9wYWdlc0luVmlldyAhPT0gdGhpcy5ESVNQTEFZX0xFTkdUSCkge1xuICAgICAgICAgIHRoaXMuc21hbGxWZXJzaW9uID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5wYWdlc0luVmlldyA9IHRoaXMuRElTUExBWV9MRU5HVEg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTmF2aWdhdGVzIHRvIGEgZ2l2ZW4gcGFnZS5cbiAgICogdXBkYXRlcyB0aGUgZGlzcGxheWluZyBwYWdlIG51bWJlcnMgYW5kIHRoZSBjdXJyZW50IG51bWJlci5cbiAgICogQHBhcmFtIHBhZ2VOdW1iZXIgLSBUaGUgcGFnZSBudW1iZXIgdG8gbmF2aWdhdGUgdG9cbiAgICovXG4gIG5hdmlnYXRlUGFnZShwYWdlTnVtYmVyOiBudW1iZXIpIHtcbiAgICBpZiAocGFnZU51bWJlciA+PSAwICYmIHBhZ2VOdW1iZXIgPD0gdGhpcy50b3RhbFBhZ2VzIC0gMSkge1xuICAgICAgdGhpcy5zaG91bGRTaG93TG9hZGVyKHBhZ2VOdW1iZXIpICYmIHRoaXMuZ3JpZFNlcnZpY2Uuc2V0TG9hZGluZyh0cnVlKTtcbiAgICAgIHRoaXMuZ3JpZEFwaS5wYWdpbmF0aW9uR29Ub1BhZ2UocGFnZU51bWJlcik7XG4gICAgICAvLyBBZGQgMSBiZWNhdXNlIGFnLWdyaWQgQVBJIHdvcmtzIHdpdGggZmlyc3QgaW5kZXggMFxuICAgICAgY29uc3QgZGlzcGxheU51bWJlciA9IHBhZ2VOdW1iZXIgKyAxO1xuICAgICAgdGhpcy5wYWdlTnVtYmVyc0Rpc3BsYXkuY3VycmVudFBhZ2UgPSBkaXNwbGF5TnVtYmVyO1xuXG4gICAgICBpZiAodGhpcy5wYWdlTnVtYmVyc0Rpc3BsYXkucGFnZXMubGVuZ3RoID09PSAwIHx8ICF0aGlzLnBhZ2VzRml0Vmlldykge1xuICAgICAgICB0aGlzLnBhZ2VOdW1iZXJzRGlzcGxheS5wYWdlcyA9IHRoaXMuZ2V0UGFnZXMoZGlzcGxheU51bWJlcik7XG4gICAgICB9XG5cbiAgICAgIC8vIFNldCB0aGUgZGlzcGxheWluZyByb3dzIHJhbmdlXG4gICAgICB0aGlzLnNldFJvd3NEaXNwbGF5UmFuZ2UoZGlzcGxheU51bWJlcik7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgbmF2aWdhdGVGaXJzdFBhZ2UoKSB7XG4gICAgdGhpcy5uYXZpZ2F0ZVBhZ2UoMCk7XG4gIH1cblxuICBuYXZpZ2F0ZU5leHRQYWdlKCkge1xuICAgIHRoaXMubmF2aWdhdGVQYWdlKHRoaXMucGFnZU51bWJlcnNEaXNwbGF5LmN1cnJlbnRQYWdlKTtcbiAgfVxuXG4gIG5hdmlnYXRlUHJldlBhZ2UoKSB7XG4gICAgLyoqIGFnLWdyaWQgQVBJIHdvcmtzIHdpdGggZmlyc3QgaW5kZXggMCBzbyB3ZSBuZWVkIHRvIHJlZHVjZSAyIGluc3RlYWQgb2Ygb25lICovXG4gICAgY29uc3QgcHJldmlvdXNQYWdlSW5kZXggPSB0aGlzLnBhZ2VOdW1iZXJzRGlzcGxheS5jdXJyZW50UGFnZSAtIDI7XG4gICAgdGhpcy5uYXZpZ2F0ZVBhZ2UocHJldmlvdXNQYWdlSW5kZXgpO1xuICB9XG5cbiAgLyoqXG4gICAqIHVwZGF0ZXMgdGhlIGRpc3BsYXlpbmcgcGFnZSBudW1iZXJzIHRvIHNob3cgdGhlIG5leHQgbnVtYmVycyBzZXRcbiAgICovXG4gIHNob3dOZXh0QmF0Y2goKSB7XG4gICAgY29uc3QgYW5jaG9yID0gdGhpcy5wYWdlTnVtYmVyc0Rpc3BsYXkucGFnZXNbMF0gKyB0aGlzLl9wYWdlc0luVmlldyArIHRoaXMucGFnZXNPblNpZGVzO1xuICAgIHRoaXMucGFnZU51bWJlcnNEaXNwbGF5LnBhZ2VzID0gdGhpcy5nZXRQYWdlcyhhbmNob3IpO1xuICB9XG5cbiAgLyoqXG4gICAqIHVwZGF0ZXMgdGhlIGRpc3BsYXlpbmcgcGFnZSBudW1iZXJzIHRvIHNob3cgdGhlIHByZXZpb3VzIG51bWJlcnMgc2V0XG4gICAqL1xuICBzaG93UHJldmlvdXNCYXRjaCgpIHtcbiAgICBjb25zdCBhbmNob3IgPSB0aGlzLnBhZ2VOdW1iZXJzRGlzcGxheS5wYWdlc1swXSAtIHRoaXMuX3BhZ2VzSW5WaWV3ICsgdGhpcy5wYWdlc09uU2lkZXM7XG4gICAgdGhpcy5wYWdlTnVtYmVyc0Rpc3BsYXkucGFnZXMgPSB0aGlzLmdldFBhZ2VzKGFuY2hvcik7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHRyYWNrQnkgZnVuY3Rpb24gZm9yIHRoZSBuZ0ZvclxuICAgKiBAcGFyYW0gaW5kZXggLSBjdXJyZW50IGl0ZW0gaW5kZXhcbiAgICogQHBhcmFtIHBhZ2UgLSB0aGUgY3VycmVudCBpdGVtJ3MgcGFnZSBudW1iZXJcbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cbiAgdHJhY2tCeVBhZ2UoaW5kZXg6IG51bWJlciwgcGFnZTogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHBhZ2U7XG4gIH1cblxuICB0b2dnbGVHcm91cHNTdGF0ZSgpIHtcbiAgICB0aGlzLmlzRXhwYW5kZWQgPyB0aGlzLmdyaWRBcGkuY29sbGFwc2VBbGwoKSA6IHRoaXMuZ3JpZEFwaS5leHBhbmRBbGwoKTtcbiAgICB0aGlzLmlzRXhwYW5kZWQgPSAhdGhpcy5pc0V4cGFuZGVkO1xuICB9XG5cbiAgYXV0b0ZpdEdyaWQodHlwZTogJ2NvbnRhaW5lcicgfCAnY29udGVudCcpIHtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLmZpdEdyaWQodHlwZSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHt9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHJvd3MgZGlzcGxheSBzdHJpbmdcbiAgICogQHBhcmFtIGRpc3BsYXlOdW1iZXIgLSBUaGUgY3VycmVudCBwYWdlIG51bWJlciAoc3RhcnRpbmcgaW5kZXggMSlcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgc2V0Um93c0Rpc3BsYXlSYW5nZShkaXNwbGF5TnVtYmVyKTogdm9pZCB7XG4gICAgLyoqIERlY3JlYXNlIGJ5IDEgYmVjYXVzZSBhZy1ncmlkIEFQSSB3b3JrcyB3aXRoIGZpcnN0IGluZGV4IDAgKi9cbiAgICBjb25zdCBwYWdlTnVtYmVyID0gZGlzcGxheU51bWJlciAtIDE7XG4gICAgY29uc3QgZmlyc3RSb3dJbmRleCA9IDEgKyBwYWdlTnVtYmVyICogdGhpcy5yb3dzUGVyUGFnZTtcbiAgICBjb25zdCBsYXN0Um93ID0gKHBhZ2VOdW1iZXIgKyAxKSAqIHRoaXMucm93c1BlclBhZ2U7XG4gICAgY29uc3QgbGFzdFJvd0luZGV4ID0gdGhpcy5yb3dDb3VudCA+IGxhc3RSb3cgPyBsYXN0Um93IDogdGhpcy5yb3dDb3VudDtcbiAgICB0aGlzLnJvd3NSYW5nZSA9XG4gICAgICB0aGlzLnJvd0NvdW50ID4gMFxuICAgICAgICA/IHRoaXMudHJhbnNsYXRlLnRyYW5zZm9ybSgnY29yZS5pdGVtc1JhbmdlJywge1xuICAgICAgICAgICAgcmFuZ2U6IGAke3RoaXMuZGVjaW1hbFBpcGUudHJhbnNmb3JtKGZpcnN0Um93SW5kZXgpfSAtICR7dGhpcy5kZWNpbWFsUGlwZS50cmFuc2Zvcm0obGFzdFJvd0luZGV4KX1gLFxuICAgICAgICAgICAgbnVtYmVyOiB0aGlzLmRlY2ltYWxQaXBlLnRyYW5zZm9ybSh0aGlzLnJvd0NvdW50KVxuICAgICAgICAgIH0pXG4gICAgICAgIDogdGhpcy50cmFuc2xhdGUudHJhbnNmb3JtKCdjb3JlLm51bWJlck9mSXRlbXMnLCB7IG51bWJlcjogMCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGEgbnVtYmVyIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIHRoZSBkaXNwbGF5aW5nIG51bWJlcnMuXG4gICAqIEBwYXJhbSBhbmNob3IgLSBUaGUgbnVtYmVyIHRvIHVzZSBhcyBhbiBhbmNob3IgZm9yIHRoZSBjYWxjdWxhdGlvbnMuXG4gICAqIEByZXR1cm4ge251bWJlcltdfSAtIEFuIGFycmF5IG9mIHRoZSBuZXcgbnVtYmVycyB0byBkaXNwbGF5XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGdldFBhZ2VzKGFuY2hvcjogbnVtYmVyKTogbnVtYmVyW10ge1xuICAgIGNvbnN0IHBhZ2VzVG9EaXNwbGF5ID0gW107XG4gICAgLy8gaW5kaWNhdGVzIHJhdGhlciB0aGUgdGFibGUgaGFzIG1vcmUgcGFnZXMgdGhhbiB0aGUgZGlzcGxheSBsZW5ndGgsIHdlIGFkZCAxIGJlY2F1c2Ugb2ZcbiAgICAvLyBhIGxvZ2ljIHRoYXQgc2F5cyB0aGF0IGlmIHlvdXIgY3VycmVudCB2aWV3IGlzIDEgbnVtYmVyIGF3YXkgZnJvbSB0aGUgbGFzdCBwYWdlXG4gICAgLy8gZGlzcGxheSBoaW0gYXMgd2VsbC5cbiAgICB0aGlzLnBhZ2VOdW1iZXJzRGlzcGxheS5zaG93TGFzdFBhZ2UgPSAhdGhpcy5wYWdlc0ZpdFZpZXcgJiYgYW5jaG9yICsgdGhpcy5wYWdlc09uU2lkZXMgPCB0aGlzLnRvdGFsUGFnZXM7XG4gICAgdGhpcy5wYWdlTnVtYmVyc0Rpc3BsYXkuc2hvd0ZpcnN0RWxsaXBzaXMgPSAhdGhpcy5wYWdlc0ZpdFZpZXcgJiYgYW5jaG9yIC0gdGhpcy5wYWdlc09uU2lkZXMgPiAxO1xuXG4gICAgLy8gc2V0IHRoZSBmaXJzdCBudW1iZXIgdG8gYmUgZGlzcGxheWVkXG4gICAgY29uc3QgZmlyc3ROdW1iZXIgPSB0aGlzLmdldEZpcnN0UGFnZU51bWJlcihhbmNob3IpO1xuICAgIGNvbnN0IGxvb3BMZW5ndGggPSB0aGlzLnBhZ2VzRml0VmlldyA/IHRoaXMudG90YWxQYWdlcyA6IHRoaXMuX3BhZ2VzSW5WaWV3O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbG9vcExlbmd0aDsgaSsrKSB7XG4gICAgICBwYWdlc1RvRGlzcGxheS5wdXNoKGZpcnN0TnVtYmVyICsgaSk7XG4gICAgfVxuICAgIC8vIElmIHRoZSBsYXN0IGRpc3BsYXllZCBudW1iZXIgaXMgMSBudW1iZXIgYmVmb3JlIHRoZSBsYXN0IHBhZ2UgZGlzcGxheSBoaW0gYXMgd2VsbFxuICAgIGlmICghdGhpcy5zbWFsbFZlcnNpb24gJiYgcGFnZXNUb0Rpc3BsYXlbbG9vcExlbmd0aCAtIDFdICsgMSA9PT0gdGhpcy50b3RhbFBhZ2VzKSB7XG4gICAgICBwYWdlc1RvRGlzcGxheS5wdXNoKHRoaXMudG90YWxQYWdlcyk7XG4gICAgICB0aGlzLnBhZ2VOdW1iZXJzRGlzcGxheS5zaG93TGFzdFBhZ2UgPSBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHBhZ2VzVG9EaXNwbGF5O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGZpcnN0IG51bWJlciB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHBhZ2luYXRpb24gbmF2aWdhdGlvbiB2aWV3XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhbmNob3IgLSBUaGUgYW5jaG9yIGZvciB0aGUgY2FsY3VsYXRpb25zXG4gICAqIEByZXR1cm4ge251bWJlcn0gLSBUaGUgZmlyc3QgbnVtYmVyIHRvIGJlIGRpc3BsYXllZFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBnZXRGaXJzdFBhZ2VOdW1iZXIoYW5jaG9yOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGxldCBmaXJzdE51bWJlciA9IGFuY2hvciAtIHRoaXMucGFnZXNPblNpZGVzO1xuICAgIC8vIElmIGluIHNtYWxsIHZlcnNpb24gc2hvdyBvbmx5IG5leHQgcGFnZSBzbyBzZXQgZmlyc3QgcGFnZSB0byBhbmNob3JcbiAgICBpZiAodGhpcy5zbWFsbFZlcnNpb24gJiYgYW5jaG9yID4gMSkge1xuICAgICAgaWYgKGFuY2hvciAhPT0gdGhpcy50b3RhbFBhZ2VzKSB7XG4gICAgICAgIGZpcnN0TnVtYmVyID0gYW5jaG9yO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIXRoaXMucGFnZU51bWJlcnNEaXNwbGF5LnNob3dGaXJzdEVsbGlwc2lzKSB7XG4gICAgICBmaXJzdE51bWJlciA9IDE7XG4gICAgfSBlbHNlIGlmICghdGhpcy5wYWdlTnVtYmVyc0Rpc3BsYXkuc2hvd0xhc3RQYWdlKSB7XG4gICAgICBmaXJzdE51bWJlciA9IHRoaXMudG90YWxQYWdlcyAtICh0aGlzLl9wYWdlc0luVmlldyAtIDEpO1xuICAgIH1cbiAgICByZXR1cm4gZmlyc3ROdW1iZXI7XG4gIH1cblxuICBwcml2YXRlIHNob3VsZFNob3dMb2FkZXIocGFnZU51bWJlcjogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNTZXJ2ZXJTaWRlUGFnaW5hdGlvbiAmJiBpc05pbCh0aGlzLmdyaWRBcGkuZ2V0Q2FjaGVCbG9ja1N0YXRlKClbcGFnZU51bWJlcl0pO1xuICB9XG59XG4iXX0=
325
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1wYWdpbmF0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BkYXRvcmFtYS9jb3JlLyIsInNvdXJjZXMiOlsibGliL2dyaWQtdjIvZ3JpZC1wYWdpbmF0aW9uL2dyaWQtcGFnaW5hdGlvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOztBQUVILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFckgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUMzRixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBU3ZDO0lBdURFLHVDQUNVLEdBQXNCLEVBQ3RCLFNBQStCLEVBQy9CLFNBQW9CLEVBQ3BCLFdBQXdCLEVBQ3hCLFVBQXVDLEVBQ3ZDLFdBQXdCO1FBTHhCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3RCLGNBQVMsR0FBVCxTQUFTLENBQXNCO1FBQy9CLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFDcEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsZUFB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SUFBRCxvQ0FBQztDQUFBLEFBalRELElBaVRDO1NBalRZLDZCQUE2QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBEYXRvcmFtYS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBBcGFjaGUgTGljZW5zZSAyLjAgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2dpdGh1Yi5jb20vZGF0b3JhbWEvY2xpZW50LWNvcmUvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICovXG5cbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgR3JpZEFwaSwgUm93Tm9kZSB9IGZyb20gJ2FnLWdyaWQtY29tbXVuaXR5JztcbmltcG9ydCB7IHVudGlsRGVzdHJveWVkIH0gZnJvbSAnbmd4LXRha2UtdW50aWwtZGVzdHJveSc7XG5pbXBvcnQgeyBEYXRvVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RyYW5zbGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IHN3aXRjaE1hcCwgdGFwLCB0aHJvdHRsZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBHcmlkUXVlcnkgfSBmcm9tICcuLi9ncmlkLXN0b3JlL2dyaWQucXVlcnknO1xuaW1wb3J0IHsgRGF0b0dyaWRDb250cm9sbGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vZ3JpZC1jb250cm9sbGVyL2dyaWQtY29udHJvbGxlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgaXNOaWwgfSBmcm9tICcuLi8uLi91dGlscy92YWxpZGF0b3JzJztcbmltcG9ydCB7IERlY2ltYWxQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEdyaWRTZXJ2aWNlIH0gZnJvbSAnLi4vZ3JpZC1zdG9yZS9ncmlkLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGF0b0dyaWREYXRhQ2hhbmdlZEV2ZW50IH0gZnJvbSAnLi4vZ3JpZC9ncmlkLXYyLnR5cGVzJztcbmltcG9ydCB7IHRhcE9uY2UgfSBmcm9tICcuLi8uLi9yeC90YXAnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkYXRvLWdyaWQtcGFnaW5hdGlvbi12MicsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICB0ZW1wbGF0ZVVybDogJy4vZ3JpZC1wYWdpbmF0aW9uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZ3JpZC1wYWdpbmF0aW9uLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW0RlY2ltYWxQaXBlXVxufSlcbmV4cG9ydCBjbGFzcyBEYXRvR3JpZFBhZ2luYXRpb25WMkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIC8qKlxuICAgKiBUaGlzIHNldHRlciBpcyB1c2VkIHRvIGFzc2lnbiB0aGUgbmF2aWdhdGlvbiBlbGVtZW50IHJlZiBhbmQgdG8gc2V0XG4gICAqIHRoZSBwYWdpbmF0aW9uIHNpemUgd2hlbiB0aGUgY29tcG9uZW50IHN0YXJ0c1xuICAgKiBAcGFyYW0ge0VsZW1lbnRSZWZ9IGNvbnRlbnRcbiAgICovXG4gIEBWaWV3Q2hpbGQoJ25hdmlnYXRpb24nLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBzZXQgY29udGVudChjb250ZW50OiBFbGVtZW50UmVmKSB7XG4gICAgdGhpcy5uYXZpZ2F0aW9uRWxlbWVudCA9IGNvbnRlbnQ7XG4gICAgaWYgKGNvbnRlbnQgJiYgdGhpcy5zbWFsbFZlcnNpb24gPT09IG51bGwpIHtcbiAgICAgIHRoaXMuY2FsY3VsYXRlTmF2aWdhdGlvblNpemUoKTtcbiAgICB9XG4gIH1cblxuICAvLyBudW1iZXIgb2Ygcm93cyBpbiB0aGUgdGFibGVcbiAgcm93Q291bnQ6IG51bWJlcjtcbiAgcm93c1BlclBhZ2U6IG51bWJlcjtcbiAgLy8gd2hlbiB0aGUgd2lkZ2V0J3Mgd2lkdGggaXMgc21hbGxlciB0aGFuIFhTX0RJU1BMQVlfU0laRSBkaXNhYmxlIGdvIHRvIGZpcnN0L2xhc3QgYnV0dG9uc1xuICBkaXNhYmxlQnV0dG9uczogYm9vbGVhbiA9IG51bGw7XG4gIC8vIHdoZW4gdGhlIHdpZGdldCdzIHdpZHRoIGlzIHNtYWxsZXIgdGhhbiBTTUFMTF9ESVNQTEFZX1NJWkUgY2hhbmdlIHRvIHNtYWxsIHBhZ2luYXRpb24gdmlld1xuICBzbWFsbFZlcnNpb246IGJvb2xlYW4gfCBudWxsID0gbnVsbDtcbiAgLy8gbnVtYmVyIG9mIHBhZ2VzIGluIHRoZSB0YWJsZVxuICB0b3RhbFBhZ2VzOiBudW1iZXI7XG4gIC8vIFRoZSBkaXNwbGF5IHJvd3MgcmFuZ2VcbiAgcm93c1JhbmdlOiBzdHJpbmc7XG4gIC8vIG1hbmFnaW5nIG9iamVjdCBmb3IgdGhlIG5hdmlnYXRpb25cbiAgcGFnZU51bWJlcnNEaXNwbGF5ID0ge1xuICAgIGN1cnJlbnRQYWdlOiAxLFxuICAgIHBhZ2VzOiBbXSxcbiAgICBzaG93Rmlyc3RFbGxpcHNpczogZmFsc2UsXG4gICAgc2hvd0xhc3RQYWdlOiBmYWxzZVxuICB9O1xuXG4gIC8vIFNob3cgZml0IGNlbGwgY29udGVudCBhbmQgY29sbGFwc2UvZXhwYW5kIHJvdyBncm91cHMgY29udHJvbHNcbiAgc2hvd0JvdHRvbUNvbnRyb2xzID0gZmFsc2U7XG4gIGlzRXhwYW5kZWQgPSB0cnVlO1xuICBoYXNSb3dHcm91cENvbHVtbnMgPSBmYWxzZTtcblxuICAvLyBob3cgbWFueSBudW1iZXJzIGFyZSBzaG93aW5nIG9uIHRoZSBzYW1lIHRpbWUgYmVzaWRlcyB0aGUgbGFzdCBwYWdlIG51bWJlclxuICBwcml2YXRlIF9wYWdlc0luVmlldzogbnVtYmVyO1xuICAvLyBUaGUgbnVtYmVyIG9mIHBhZ2VzIGRpc3BsYXllZCBvbiBlYWNoIHNpZGUgb2YgdGhlIHNlbGVjdGVkIHBhZ2UuXG4gIHByaXZhdGUgcGFnZXNPblNpZGVzOiBudW1iZXI7XG4gIC8vIGlmIHRoZSBudW1iZXIgb2YgcGFnZXMgaW4gdGhlIHRhYmxlIGZpdHMgdGhlIG51bWJlciBvZiBkaXNwbGF5aW5nIHBhZ2VzXG4gIHByaXZhdGUgcGFnZXNGaXRWaWV3OiBib29sZWFuO1xuICAvLyBob3cgbWFueSBudW1iZXJzIHRvIHNob3cgb24gZWFjaCBzaWRlIGJlc2lkZXMgdGhlIHNlbGVjdGVkIG51bWJlclxuICBwcml2YXRlIG5hdmlnYXRpb25FbGVtZW50OiBFbGVtZW50UmVmO1xuICBwcml2YXRlIGlzU2VydmVyU2lkZVBhZ2luYXRpb24gPSBmYWxzZTtcbiAgcHJpdmF0ZSBncmlkQXBpOiBHcmlkQXBpO1xuICAvLyBUaGUgbnVtYmVyIG9mIHBhZ2VzIGRpc3BsYXllZCBpbiB0aGUgbmF2aWdhdGlvbiBwYW5lbCBmb3IgZWFjaCB2aWV3IGFzIGRlZmluZWQgYnkgcHJvZHVjdC5cbiAgcHJpdmF0ZSByZWFkb25seSBNSU5JX0RJU1BMQVlfTEVOR1RIOiBudW1iZXIgPSAyO1xuICBwcml2YXRlIHJlYWRvbmx5IERJU1BMQVlfTEVOR1RIOiBudW1iZXIgPSA1O1xuICAvLyBXaWRnZXQncyB3aWR0aCB0aGUgZGV0ZXJtaW5lcyB0aGUgcGFnaW5hdGlvbiB2aWV3IHR5cGUgWyBzbWFsbCwgeHNdIGFzIGRlZmluZWQgYnkgcHJvZHVjdC5cbiAgcHJpdmF0ZSByZWFkb25seSBYU19ESVNQTEFZX1NJWkU6IG51bWJlciA9IDE2MDtcbiAgcHJpdmF0ZSByZWFkb25seSBTTUFMTF9ESVNQTEFZX1NJWkU6IG51bWJlciA9IDM5MDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IERhdG9UcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgZ3JpZFF1ZXJ5OiBHcmlkUXVlcnksXG4gICAgcHJpdmF0ZSBncmlkU2VydmljZTogR3JpZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb250cm9sbGVyOiBEYXRvR3JpZENvbnRyb2xsZXJDb21wb25lbnQsXG4gICAgcHJpdmF0ZSBkZWNpbWFsUGlwZTogRGVjaW1hbFBpcGVcbiAgKSB7fVxuXG4gIGdldCBwcmV2UGFnZURpc2FibGVkKCkge1xuICAgIHJldHVybiB0aGlzLnBhZ2VOdW1iZXJzRGlzcGxheS5jdXJyZW50UGFnZSA9PT0gMTtcbiAgfVxuXG4gIGdldCBuZXh0UGFnZURpc2FibGVkKCkge1xuICAgIHJldHVybiB0aGlzLnBhZ2VOdW1iZXJzRGlzcGxheS5jdXJyZW50UGFnZSA9PT0gdGhpcy50b3RhbFBhZ2VzO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5ncmlkUXVlcnlcbiAgICAgIC53YWl0Rm9yR3JpZCgoKSA9PiB0aGlzLmdyaWRRdWVyeS5ncmlkUmVmLmZpbHRlckNoYW5nZWQpXG4gICAgICAucGlwZSh1bnRpbERlc3Ryb3llZCh0aGlzKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmdyaWRBcGkucGFnaW5hdGlvbkdvVG9QYWdlKDApO1xuICAgICAgICB0aGlzLmluaXRQYWdpbmF0aW9uKCk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuZ3JpZFF1ZXJ5LmdyaWRSZWFkeSRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJvd0dyb3VwQ29sdW1ucyA9IHRoaXMuZ3JpZFF1ZXJ5LmFwaS5jb2x1bW5zLmdldFJvd0dyb3VwQ29sdW1ucygpO1xuXG4gICAgICAgICAgdGhpcy5ncmlkQXBpID0gdGhpcy5ncmlkUXVlcnkuYXBpLmdyaWQ7XG4gICAgICAgICAgdGhpcy5zaG93Qm90dG9tQ29udHJvbHMgPSB0aGlzLmdyaWRRdWVyeS5nZXRHcmlkT3B0aW9ucygpLnNob3dCb3R0b21Db250cm9scztcbiAgICAgICAgICB0aGlzLmhhc1Jvd0dyb3VwQ29sdW1ucyA9IHJvd0dyb3VwQ29sdW1ucyAmJiByb3dHcm91cENvbHVtbnMubGVuZ3RoID4gMDtcbiAgICAgICAgfSksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pc1NlcnZlclNpZGVQYWdpbmF0aW9uID0gdGhpcy5ncmlkUXVlcnkuaXNTZXJ2ZXJTaWRlO1xuICAgICAgICAgIHJldHVybiB0aGlzLmlzU2VydmVyU2lkZVBhZ2luYXRpb24gPyB0aGlzLmdyaWRRdWVyeS5zZXJ2ZXJEYXRhTG9hZGVkJCA6IHRoaXMuZ3JpZFF1ZXJ5LnJvd0RhdGFDaGFuZ2VkJDtcbiAgICAgICAgfSksXG4gICAgICAgIHRocm90dGxlVGltZSgxMDApLFxuICAgICAgICB0YXBPbmNlKCgpID0+IHRoaXMuaW5pdFBhZ2luYXRpb24oKSksXG4gICAgICAgIHVudGlsRGVzdHJveWVkKHRoaXMpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCh7IHBhZ2luYXRpb25QYWdlID0gMSB9OiBEYXRvR3JpZERhdGFDaGFuZ2VkRXZlbnQpID0+IHtcbiAgICAgICAgLyoqICBBZyBncmlkIGluZGV4IGlzIGZyb20gMCwgYnV0IHRoZSBpbmRleCBmaXJlZCBmcm9tIHRoZSBldmVudCBzdGFydCBmcm9tIDEqL1xuICAgICAgICB0aGlzLmluaXRQYWdpbmF0aW9uKHBhZ2luYXRpb25QYWdlIC0gMSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNhbGN1bGF0ZSB0aGUgcm93IGNvdW50IGFuZCBwYWdlIGxlbmd0aHNcbiAgICovXG4gIGNhbGN1bGF0ZVJvd3NDb3VudCh0b3RhbFJvd3M6IG51bWJlcikge1xuICAgIHRoaXMudG90YWxQYWdlcyA9IHRvdGFsUm93cyA/IE1hdGguY2VpbCh0b3RhbFJvd3MgLyB0aGlzLnJvd3NQZXJQYWdlKSA6IHRoaXMuZ3JpZEFwaS5wYWdpbmF0aW9uR2V0VG90YWxQYWdlcygpO1xuICAgIHRoaXMucm93Q291bnQgPSB0aGlzLmdyaWRBcGkucGFnaW5hdGlvbkdldFJvd0NvdW50KCk7XG4gICAgdGhpcy5zZXRSb3dzRGlzcGxheVJhbmdlKHRoaXMucGFnZU51bWJlcnNEaXNwbGF5LmN1cnJlbnRQYWdlKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBpbml0UGFnaW5hdGlvbihwYWdlTnVtYmVyID0gMCkge1xuICAgIGNvbnN0IHsgdG90YWxSb3dzLCBlbmFibGVkIH0gPSB0aGlzLmdyaWRRdWVyeS5zZXJ2ZXJTaWRlQ29uZmlnO1xuICAgIGlmIChlbmFibGVkICYmIGlzTmlsKHRvdGFsUm93cykpIHJldHVybjtcbiAgICAvKiogcmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBwYWdlcyBzdGFydGluZyBmcm9tIDEgKi9cbiAgICB0aGlzLnJvd3NQZXJQYWdlID0gdGhpcy5ncmlkQXBpLnBhZ2luYXRpb25HZXRQYWdlU2l6ZSgpO1xuICAgIHRoaXMuY2FsY3VsYXRlUm93c0NvdW50KHRvdGFsUm93cyk7XG4gICAgLyoqIHNldCB0aGUgaW5pdCB2YWx1ZSBvZiB0aGUgcGFnaW5hdGlvbiB2aWV3IHRvIG5vcm1hbCBzaXplICovXG4gICAgdGhpcy5wYWdlc0luVmlldyA9IHRoaXMuRElTUExBWV9MRU5HVEg7XG4gICAgLyoqIGN1cnJlbnQgcGFnZSBpbmRleCBzdGFydHMgZnJvbSAwICovXG4gICAgdGhpcy5uYXZpZ2F0ZVBhZ2UocGFnZU51bWJlcik7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBudW1iZXIgb2YgcGFnZSBudW1iZXJzIHNob3dpbmcgYXQgdGhlIHNhbWUgdGltZSBpbiB0aGUgbmF2aWdhdGlvblxuICAgKiBwYW5lbCAmIHVwZGF0ZSB0aGUgbnVtYmVyIG9mIHBhZ2VzIGRpc3BsYXllZCBvbiBlYWNoIHNpZGUgb2YgdGhlIHNlbGVjdGVkIHBhZ2UuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBuZXdOdW1iZXJzTGVuZ3RoIC0gVGhlIG5ldyBsZW5ndGggb2YgdGhlIGRpc3BsYXlpbmcgbnVtYmVyc1xuICAgKi9cbiAgc2V0IHBhZ2VzSW5WaWV3KG5ld051bWJlcnNMZW5ndGg6IG51bWJlcikge1xuICAgIHRoaXMuX3BhZ2VzSW5WaWV3ID0gbmV3TnVtYmVyc0xlbmd0aDtcbiAgICB0aGlzLnBhZ2VzT25TaWRlcyA9IE1hdGguZmxvb3IodGhpcy5fcGFnZXNJblZpZXcgLyAyKTtcbiAgICB0aGlzLnBhZ2VzRml0VmlldyA9IHRoaXMuX3BhZ2VzSW5WaWV3ICsgMSA+PSB0aGlzLnRvdGFsUGFnZXM7XG4gICAgLy8gaW52YWxpZGF0ZSBkaXNwbGF5aW5nIHBhZ2VzIHVwb24gcmVzaXplXG4gICAgdGhpcy5wYWdlTnVtYmVyc0Rpc3BsYXkucGFnZXMgPSBbXTtcbiAgfVxuXG4gIC8qKiBUT0RPIFRoaXMgaXMgbm90IGxpc3RlbmluZyB0byBzaXplIGNoYW5nZXMgKi9cbiAgY2FsY3VsYXRlTmF2aWdhdGlvblNpemUoKSB7XG4gICAgaWYgKHRoaXMubmF2aWdhdGlvbkVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnRXaWR0aCA9IHRoaXMubmF2aWdhdGlvbkVsZW1lbnQubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50LmNsaWVudFdpZHRoO1xuICAgICAgdGhpcy5kaXNhYmxlQnV0dG9ucyA9IGVsZW1lbnRXaWR0aCA8IHRoaXMuWFNfRElTUExBWV9TSVpFO1xuICAgICAgaWYgKGVsZW1lbnRXaWR0aCA8IHRoaXMuU01BTExfRElTUExBWV9TSVpFKSB7XG4gICAgICAgIGlmICh0aGlzLl9wYWdlc0luVmlldyAhPT0gdGhpcy5NSU5JX0RJU1BMQVlfTEVOR1RIKSB7XG4gICAgICAgICAgdGhpcy5zbWFsbFZlcnNpb24gPSB0cnVlO1xuICAgICAgICAgIHRoaXMucGFnZXNJblZpZXcgPSB0aGlzLk1JTklfRElTUExBWV9MRU5HVEg7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLl9wYWdlc0luVmlldyAhPT0gdGhpcy5ESVNQTEFZX0xFTkdUSCkge1xuICAgICAgICAgIHRoaXMuc21hbGxWZXJzaW9uID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5wYWdlc0luVmlldyA9IHRoaXMuRElTUExBWV9MRU5HVEg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTmF2aWdhdGVzIHRvIGEgZ2l2ZW4gcGFnZS5cbiAgICogdXBkYXRlcyB0aGUgZGlzcGxheWluZyBwYWdlIG51bWJlcnMgYW5kIHRoZSBjdXJyZW50IG51bWJlci5cbiAgICogQHBhcmFtIHBhZ2VOdW1iZXIgLSBUaGUgcGFnZSBudW1iZXIgdG8gbmF2aWdhdGUgdG9cbiAgICovXG4gIG5hdmlnYXRlUGFnZShwYWdlTnVtYmVyOiBudW1iZXIpIHtcbiAgICBpZiAocGFnZU51bWJlciA+PSAwICYmIHBhZ2VOdW1iZXIgPD0gdGhpcy50b3RhbFBhZ2VzIC0gMSkge1xuICAgICAgdGhpcy5zaG91bGRTaG93TG9hZGVyKHBhZ2VOdW1iZXIpICYmIHRoaXMuZ3JpZFNlcnZpY2Uuc2V0TG9hZGluZyh0cnVlKTtcbiAgICAgIHRoaXMuZ3JpZEFwaS5wYWdpbmF0aW9uR29Ub1BhZ2UocGFnZU51bWJlcik7XG4gICAgICAvLyBBZGQgMSBiZWNhdXNlIGFnLWdyaWQgQVBJIHdvcmtzIHdpdGggZmlyc3QgaW5kZXggMFxuICAgICAgY29uc3QgZGlzcGxheU51bWJlciA9IHBhZ2VOdW1iZXIgKyAxO1xuICAgICAgdGhpcy5wYWdlTnVtYmVyc0Rpc3BsYXkuY3VycmVudFBhZ2UgPSBkaXNwbGF5TnVtYmVyO1xuXG4gICAgICBpZiAodGhpcy5wYWdlTnVtYmVyc0Rpc3BsYXkucGFnZXMubGVuZ3RoID09PSAwIHx8ICF0aGlzLnBhZ2VzRml0Vmlldykge1xuICAgICAgICB0aGlzLnBhZ2VOdW1iZXJzRGlzcGxheS5wYWdlcyA9IHRoaXMuZ2V0UGFnZXMoZGlzcGxheU51bWJlcik7XG4gICAgICB9XG5cbiAgICAgIC8vIFNldCB0aGUgZGlzcGxheWluZyByb3dzIHJhbmdlXG4gICAgICB0aGlzLnNldFJvd3NEaXNwbGF5UmFuZ2UoZGlzcGxheU51bWJlcik7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgbmF2aWdhdGVGaXJzdFBhZ2UoKSB7XG4gICAgdGhpcy5uYXZpZ2F0ZVBhZ2UoMCk7XG4gIH1cblxuICBuYXZpZ2F0ZU5leHRQYWdlKCkge1xuICAgIHRoaXMubmF2aWdhdGVQYWdlKHRoaXMucGFnZU51bWJlcnNEaXNwbGF5LmN1cnJlbnRQYWdlKTtcbiAgfVxuXG4gIG5hdmlnYXRlUHJldlBhZ2UoKSB7XG4gICAgLyoqIGFnLWdyaWQgQVBJIHdvcmtzIHdpdGggZmlyc3QgaW5kZXggMCBzbyB3ZSBuZWVkIHRvIHJlZHVjZSAyIGluc3RlYWQgb2Ygb25lICovXG4gICAgY29uc3QgcHJldmlvdXNQYWdlSW5kZXggPSB0aGlzLnBhZ2VOdW1iZXJzRGlzcGxheS5jdXJyZW50UGFnZSAtIDI7XG4gICAgdGhpcy5uYXZpZ2F0ZVBhZ2UocHJldmlvdXNQYWdlSW5kZXgpO1xuICB9XG5cbiAgLyoqXG4gICAqIHVwZGF0ZXMgdGhlIGRpc3BsYXlpbmcgcGFnZSBudW1iZXJzIHRvIHNob3cgdGhlIG5leHQgbnVtYmVycyBzZXRcbiAgICovXG4gIHNob3dOZXh0QmF0Y2goKSB7XG4gICAgY29uc3QgYW5jaG9yID0gdGhpcy5wYWdlTnVtYmVyc0Rpc3BsYXkucGFnZXNbMF0gKyB0aGlzLl9wYWdlc0luVmlldyArIHRoaXMucGFnZXNPblNpZGVzO1xuICAgIHRoaXMucGFnZU51bWJlcnNEaXNwbGF5LnBhZ2VzID0gdGhpcy5nZXRQYWdlcyhhbmNob3IpO1xuICB9XG5cbiAgLyoqXG4gICAqIHVwZGF0ZXMgdGhlIGRpc3BsYXlpbmcgcGFnZSBudW1iZXJzIHRvIHNob3cgdGhlIHByZXZpb3VzIG51bWJlcnMgc2V0XG4gICAqL1xuICBzaG93UHJldmlvdXNCYXRjaCgpIHtcbiAgICBjb25zdCBhbmNob3IgPSB0aGlzLnBhZ2VOdW1iZXJzRGlzcGxheS5wYWdlc1swXSAtIHRoaXMuX3BhZ2VzSW5WaWV3ICsgdGhpcy5wYWdlc09uU2lkZXM7XG4gICAgdGhpcy5wYWdlTnVtYmVyc0Rpc3BsYXkucGFnZXMgPSB0aGlzLmdldFBhZ2VzKGFuY2hvcik7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHRyYWNrQnkgZnVuY3Rpb24gZm9yIHRoZSBuZ0ZvclxuICAgKiBAcGFyYW0gaW5kZXggLSBjdXJyZW50IGl0ZW0gaW5kZXhcbiAgICogQHBhcmFtIHBhZ2UgLSB0aGUgY3VycmVudCBpdGVtJ3MgcGFnZSBudW1iZXJcbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cbiAgdHJhY2tCeVBhZ2UoaW5kZXg6IG51bWJlciwgcGFnZTogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHBhZ2U7XG4gIH1cblxuICB0b2dnbGVHcm91cHNTdGF0ZSgpIHtcbiAgICB0aGlzLmlzRXhwYW5kZWQgPyB0aGlzLmdyaWRBcGkuY29sbGFwc2VBbGwoKSA6IHRoaXMuZ3JpZEFwaS5leHBhbmRBbGwoKTtcbiAgICB0aGlzLmlzRXhwYW5kZWQgPSAhdGhpcy5pc0V4cGFuZGVkO1xuICB9XG5cbiAgYXV0b0ZpdEdyaWQodHlwZTogJ2NvbnRhaW5lcicgfCAnY29udGVudCcpIHtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLmZpdEdyaWQodHlwZSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHt9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHJvd3MgZGlzcGxheSBzdHJpbmdcbiAgICogQHBhcmFtIGRpc3BsYXlOdW1iZXIgLSBUaGUgY3VycmVudCBwYWdlIG51bWJlciAoc3RhcnRpbmcgaW5kZXggMSlcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgc2V0Um93c0Rpc3BsYXlSYW5nZShkaXNwbGF5TnVtYmVyKTogdm9pZCB7XG4gICAgLyoqIERlY3JlYXNlIGJ5IDEgYmVjYXVzZSBhZy1ncmlkIEFQSSB3b3JrcyB3aXRoIGZpcnN0IGluZGV4IDAgKi9cbiAgICBjb25zdCBwYWdlTnVtYmVyID0gZGlzcGxheU51bWJlciAtIDE7XG4gICAgY29uc3QgZmlyc3RSb3dJbmRleCA9IDEgKyBwYWdlTnVtYmVyICogdGhpcy5yb3dzUGVyUGFnZTtcbiAgICBjb25zdCBsYXN0Um93ID0gKHBhZ2VOdW1iZXIgKyAxKSAqIHRoaXMucm93c1BlclBhZ2U7XG4gICAgY29uc3QgbGFzdFJvd0luZGV4ID0gdGhpcy5yb3dDb3VudCA+IGxhc3RSb3cgPyBsYXN0Um93IDogdGhpcy5yb3dDb3VudDtcbiAgICB0aGlzLnJvd3NSYW5nZSA9XG4gICAgICB0aGlzLnJvd0NvdW50ID4gMFxuICAgICAgICA/IHRoaXMudHJhbnNsYXRlLnRyYW5zZm9ybSgnY29yZS5pdGVtc1JhbmdlJywge1xuICAgICAgICAgICAgcmFuZ2U6IGAke3RoaXMuZGVjaW1hbFBpcGUudHJhbnNmb3JtKGZpcnN0Um93SW5kZXgpfSAtICR7dGhpcy5kZWNpbWFsUGlwZS50cmFuc2Zvcm0obGFzdFJvd0luZGV4KX1gLFxuICAgICAgICAgICAgbnVtYmVyOiB0aGlzLmRlY2ltYWxQaXBlLnRyYW5zZm9ybSh0aGlzLnJvd0NvdW50KVxuICAgICAgICAgIH0pXG4gICAgICAgIDogdGhpcy50cmFuc2xhdGUudHJhbnNmb3JtKCdjb3JlLm51bWJlck9mSXRlbXMnLCB7IG51bWJlcjogMCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGEgbnVtYmVyIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIHRoZSBkaXNwbGF5aW5nIG51bWJlcnMuXG4gICAqIEBwYXJhbSBhbmNob3IgLSBUaGUgbnVtYmVyIHRvIHVzZSBhcyBhbiBhbmNob3IgZm9yIHRoZSBjYWxjdWxhdGlvbnMuXG4gICAqIEByZXR1cm4ge251bWJlcltdfSAtIEFuIGFycmF5IG9mIHRoZSBuZXcgbnVtYmVycyB0byBkaXNwbGF5XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGdldFBhZ2VzKGFuY2hvcjogbnVtYmVyKTogbnVtYmVyW10ge1xuICAgIGNvbnN0IHBhZ2VzVG9EaXNwbGF5ID0gW107XG4gICAgLy8gaW5kaWNhdGVzIHJhdGhlciB0aGUgdGFibGUgaGFzIG1vcmUgcGFnZXMgdGhhbiB0aGUgZGlzcGxheSBsZW5ndGgsIHdlIGFkZCAxIGJlY2F1c2Ugb2ZcbiAgICAvLyBhIGxvZ2ljIHRoYXQgc2F5cyB0aGF0IGlmIHlvdXIgY3VycmVudCB2aWV3IGlzIDEgbnVtYmVyIGF3YXkgZnJvbSB0aGUgbGFzdCBwYWdlXG4gICAgLy8gZGlzcGxheSBoaW0gYXMgd2VsbC5cbiAgICB0aGlzLnBhZ2VOdW1iZXJzRGlzcGxheS5zaG93TGFzdFBhZ2UgPSAhdGhpcy5wYWdlc0ZpdFZpZXcgJiYgYW5jaG9yICsgdGhpcy5wYWdlc09uU2lkZXMgPCB0aGlzLnRvdGFsUGFnZXM7XG4gICAgdGhpcy5wYWdlTnVtYmVyc0Rpc3BsYXkuc2hvd0ZpcnN0RWxsaXBzaXMgPSAhdGhpcy5wYWdlc0ZpdFZpZXcgJiYgYW5jaG9yIC0gdGhpcy5wYWdlc09uU2lkZXMgPiAxO1xuXG4gICAgLy8gc2V0IHRoZSBmaXJzdCBudW1iZXIgdG8gYmUgZGlzcGxheWVkXG4gICAgY29uc3QgZmlyc3ROdW1iZXIgPSB0aGlzLmdldEZpcnN0UGFnZU51bWJlcihhbmNob3IpO1xuICAgIGNvbnN0IGxvb3BMZW5ndGggPSB0aGlzLnBhZ2VzRml0VmlldyA/IHRoaXMudG90YWxQYWdlcyA6IHRoaXMuX3BhZ2VzSW5WaWV3O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbG9vcExlbmd0aDsgaSsrKSB7XG4gICAgICBwYWdlc1RvRGlzcGxheS5wdXNoKGZpcnN0TnVtYmVyICsgaSk7XG4gICAgfVxuICAgIC8vIElmIHRoZSBsYXN0IGRpc3BsYXllZCBudW1iZXIgaXMgMSBudW1iZXIgYmVmb3JlIHRoZSBsYXN0IHBhZ2UgZGlzcGxheSBoaW0gYXMgd2VsbFxuICAgIGlmICghdGhpcy5zbWFsbFZlcnNpb24gJiYgcGFnZXNUb0Rpc3BsYXlbbG9vcExlbmd0aCAtIDFdICsgMSA9PT0gdGhpcy50b3RhbFBhZ2VzKSB7XG4gICAgICBwYWdlc1RvRGlzcGxheS5wdXNoKHRoaXMudG90YWxQYWdlcyk7XG4gICAgICB0aGlzLnBhZ2VOdW1iZXJzRGlzcGxheS5zaG93TGFzdFBhZ2UgPSBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHBhZ2VzVG9EaXNwbGF5O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGZpcnN0IG51bWJlciB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHBhZ2luYXRpb24gbmF2aWdhdGlvbiB2aWV3XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhbmNob3IgLSBUaGUgYW5jaG9yIGZvciB0aGUgY2FsY3VsYXRpb25zXG4gICAqIEByZXR1cm4ge251bWJlcn0gLSBUaGUgZmlyc3QgbnVtYmVyIHRvIGJlIGRpc3BsYXllZFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBnZXRGaXJzdFBhZ2VOdW1iZXIoYW5jaG9yOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGxldCBmaXJzdE51bWJlciA9IGFuY2hvciAtIHRoaXMucGFnZXNPblNpZGVzO1xuICAgIC8vIElmIGluIHNtYWxsIHZlcnNpb24gc2hvdyBvbmx5IG5leHQgcGFnZSBzbyBzZXQgZmlyc3QgcGFnZSB0byBhbmNob3JcbiAgICBpZiAodGhpcy5zbWFsbFZlcnNpb24gJiYgYW5jaG9yID4gMSkge1xuICAgICAgaWYgKGFuY2hvciAhPT0gdGhpcy50b3RhbFBhZ2VzKSB7XG4gICAgICAgIGZpcnN0TnVtYmVyID0gYW5jaG9yO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIXRoaXMucGFnZU51bWJlcnNEaXNwbGF5LnNob3dGaXJzdEVsbGlwc2lzKSB7XG4gICAgICBmaXJzdE51bWJlciA9IDE7XG4gICAgfSBlbHNlIGlmICghdGhpcy5wYWdlTnVtYmVyc0Rpc3BsYXkuc2hvd0xhc3RQYWdlKSB7XG4gICAgICBmaXJzdE51bWJlciA9IHRoaXMudG90YWxQYWdlcyAtICh0aGlzLl9wYWdlc0luVmlldyAtIDEpO1xuICAgIH1cbiAgICByZXR1cm4gZmlyc3ROdW1iZXI7XG4gIH1cblxuICBwcml2YXRlIHNob3VsZFNob3dMb2FkZXIocGFnZU51bWJlcjogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNTZXJ2ZXJTaWRlUGFnaW5hdGlvbiAmJiBpc05pbCh0aGlzLmdyaWRBcGkuZ2V0Q2FjaGVCbG9ja1N0YXRlKClbcGFnZU51bWJlcl0pO1xuICB9XG59XG4iXX0=