igniteui-angular 17.2.24 → 17.2.26
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.
- package/esm2022/lib/avatar/avatar.component.mjs +17 -2
- package/esm2022/lib/combo/combo.common.mjs +8 -17
- package/esm2022/lib/combo/combo.component.mjs +3 -3
- package/esm2022/lib/core/utils.mjs +8 -1
- package/esm2022/lib/date-picker/date-picker.component.mjs +7 -3
- package/esm2022/lib/date-range-picker/date-range-picker.component.mjs +2 -2
- package/esm2022/lib/grids/filtering/excel-style/excel-style-filtering.component.mjs +14 -1
- package/esm2022/lib/navigation-drawer/navigation-drawer.component.mjs +3 -3
- package/esm2022/lib/query-builder/query-builder.component.mjs +11 -6
- package/esm2022/lib/slider/slider.component.mjs +4 -4
- package/fesm2022/igniteui-angular.mjs +65 -30
- package/fesm2022/igniteui-angular.mjs.map +1 -1
- package/lib/avatar/avatar.component.d.ts +3 -1
- package/lib/combo/combo.common.d.ts +1 -3
- package/lib/core/styles/components/action-strip/_action-strip-component.scss +1 -1
- package/lib/core/styles/components/dialog/_dialog-theme.scss +5 -12
- package/lib/core/styles/components/drop-down/_drop-down-theme.scss +10 -4
- package/lib/core/styles/components/grid/_grid-component.scss +1 -0
- package/lib/core/styles/components/paginator/_paginator-component.scss +1 -1
- package/lib/core/styles/components/query-builder/_query-builder-component.scss +9 -1
- package/lib/core/styles/typography/_bootstrap.scss +3 -3
- package/lib/core/styles/typography/_fluent.scss +9 -2
- package/lib/core/utils.d.ts +5 -0
- package/lib/date-picker/date-picker.component.d.ts +2 -1
- package/lib/grids/filtering/excel-style/excel-style-filtering.component.d.ts +1 -0
- package/package.json +1 -1
- package/styles/igniteui-angular-dark.css +1 -1
- package/styles/igniteui-angular.css +1 -1
- package/styles/igniteui-bootstrap-dark.css +1 -1
- package/styles/igniteui-bootstrap-light.css +1 -1
- package/styles/igniteui-dark-green.css +1 -1
- package/styles/igniteui-fluent-dark-excel.css +1 -1
- package/styles/igniteui-fluent-dark-word.css +1 -1
- package/styles/igniteui-fluent-dark.css +1 -1
- package/styles/igniteui-fluent-light-excel.css +1 -1
- package/styles/igniteui-fluent-light-word.css +1 -1
- package/styles/igniteui-fluent-light.css +1 -1
- package/styles/igniteui-indigo-dark.css +1 -1
- package/styles/igniteui-indigo-light.css +1 -1
- package/styles/maps/igniteui-angular-dark.css.map +1 -1
- package/styles/maps/igniteui-angular.css.map +1 -1
- package/styles/maps/igniteui-bootstrap-dark.css.map +1 -1
- package/styles/maps/igniteui-bootstrap-light.css.map +1 -1
- package/styles/maps/igniteui-dark-green.css.map +1 -1
- package/styles/maps/igniteui-fluent-dark-excel.css.map +1 -1
- package/styles/maps/igniteui-fluent-dark-word.css.map +1 -1
- package/styles/maps/igniteui-fluent-dark.css.map +1 -1
- package/styles/maps/igniteui-fluent-light-excel.css.map +1 -1
- package/styles/maps/igniteui-fluent-light-word.css.map +1 -1
- package/styles/maps/igniteui-fluent-light.css.map +1 -1
- package/styles/maps/igniteui-indigo-dark.css.map +1 -1
- package/styles/maps/igniteui-indigo-light.css.map +1 -1
|
@@ -369,7 +369,7 @@ export class IgxComboComponent extends IgxComboBaseDirective {
|
|
|
369
369
|
IgxComboAPIService,
|
|
370
370
|
{ provide: IGX_COMBO_COMPONENT, useExisting: IgxComboComponent },
|
|
371
371
|
{ provide: NG_VALUE_ACCESSOR, useExisting: IgxComboComponent, multi: true }
|
|
372
|
-
], viewQueries: [{ propertyName: "dropdown", first: true, predicate: IgxComboDropDownComponent, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<igx-input-group #inputGroup [displayDensity]=\"displayDensity\" [type]=\"type\" (click)=\"onClick($event)\">\n <ng-container ngProjectAs=\"[igxLabel]\">\n <ng-content select=\"[igxLabel]\"></ng-content>\n </ng-container>\n <ng-container ngProjectAs=\"igx-prefix\">\n <ng-content select=\"igx-prefix\"></ng-content>\n </ng-container>\n <ng-container ngProjectAs=\"igx-hint, [igxHint]\">\n <ng-content select=\"igx-hint, [igxHint]\"></ng-content>\n </ng-container>\n <input igxInput #comboInput name=\"comboInput\" type=\"text\" [value]=\"displayValue\" readonly\n [attr.placeholder]=\"placeholder\" [disabled]=\"disabled\"\n role=\"combobox\" aria-haspopup=\"listbox\"\n [attr.aria-expanded]=\"!dropdown.collapsed\" [attr.aria-controls]=\"dropdown.listId\"\n [attr.aria-labelledby]=\"ariaLabelledBy || label?.id || placeholder\"\n (blur)=\"onBlur()\"
|
|
372
|
+
], viewQueries: [{ propertyName: "dropdown", first: true, predicate: IgxComboDropDownComponent, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<igx-input-group #inputGroup [displayDensity]=\"displayDensity\" [type]=\"type\" (click)=\"onClick($event)\">\n <ng-container ngProjectAs=\"[igxLabel]\">\n <ng-content select=\"[igxLabel]\"></ng-content>\n </ng-container>\n <ng-container ngProjectAs=\"igx-prefix\">\n <ng-content select=\"igx-prefix\"></ng-content>\n </ng-container>\n <ng-container ngProjectAs=\"igx-hint, [igxHint]\">\n <ng-content select=\"igx-hint, [igxHint]\"></ng-content>\n </ng-container>\n <input igxInput #comboInput name=\"comboInput\" type=\"text\" [value]=\"displayValue\" readonly\n [attr.placeholder]=\"placeholder\" [disabled]=\"disabled\"\n role=\"combobox\" aria-haspopup=\"listbox\"\n [attr.aria-expanded]=\"!dropdown.collapsed\" [attr.aria-controls]=\"dropdown.listId\"\n [attr.aria-labelledby]=\"ariaLabelledBy || label?.id || placeholder\"\n (blur)=\"onBlur()\" />\n <ng-container ngProjectAs=\"igx-suffix\">\n <ng-content select=\"igx-suffix\"></ng-content>\n </ng-container>\n <igx-suffix *ngIf=\"displayValue\" [attr.aria-label]=\"resourceStrings.igx_combo_clearItems_placeholder\" class=\"igx-combo__clear-button\"\n (click)=\"handleClearItems($event)\">\n <ng-container *ngIf=\"clearIconTemplate\">\n <ng-container *ngTemplateOutlet=\"clearIconTemplate\"></ng-container>\n </ng-container>\n <igx-icon *ngIf=\"!clearIconTemplate\">\n {{ clearIcon }}\n </igx-icon>\n </igx-suffix>\n <igx-suffix class=\"igx-combo__toggle-button\">\n <ng-container *ngIf=\"toggleIconTemplate\">\n <ng-container *ngTemplateOutlet=\"toggleIconTemplate; context: {$implicit: collapsed}\"></ng-container>\n </ng-container>\n <igx-icon *ngIf=\"!toggleIconTemplate\">\n {{ toggleIcon }}\n </igx-icon>\n </igx-suffix>\n</igx-input-group>\n<igx-combo-drop-down #igxComboDropDown class=\"igx-combo__drop-down\" [displayDensity]=\"displayDensity\"\n [labelledBy]=\"ariaLabelledBy || label?.id || placeholder || ''\"\n [width]=\"itemsWidth || '100%'\" (opening)=\"handleOpening($event)\" (closing)=\"handleClosing($event)\"\n (opened)=\"handleOpened()\" (closed)=\"handleClosed()\">\n <div class=\"igx-combo__search\">\n <igx-input-group *ngIf=\"displaySearchInput\" [displayDensity]=\"displayDensity\" theme=\"material\" >\n <input igxInput #searchInput name=\"searchInput\" autocomplete=\"off\" type=\"text\"\n [(ngModel)]=\"searchValue\" (ngModelChange)=\"handleInputChange($event)\" (keyup)=\"handleKeyUp($event)\"\n (keydown)=\"handleKeyDown($event)\" (focus)=\"dropdown.onBlur($event)\" [attr.placeholder]=\"searchPlaceholder\"\n aria-autocomplete=\"list\" role=\"searchbox\" aria-label=\"search\"/>\n <igx-suffix *ngIf=\"showSearchCaseIcon\" (click)=\"toggleCaseSensitive()\">\n <span [ngClass]=\"filteringOptions.caseSensitive? 'igx-combo__case-icon--active' : 'igx-combo__case-icon'\">\n <igx-icon family=\"imx-icons\" name=\"case-sensitive\" [active]=\"filteringOptions.caseSensitive\"></igx-icon>\n </span>\n </igx-suffix>\n </igx-input-group>\n </div>\n <ng-container *ngTemplateOutlet=\"headerTemplate\">\n </ng-container>\n <div #dropdownItemContainer class=\"igx-combo__content\" [style.overflow]=\"'hidden'\"\n [style.maxHeight.rem]=\"itemsMaxHeightInRem\" [igxDropDownItemNavigation]=\"dropdown\" (focus)=\"dropdown.onFocus()\"\n [tabindex]=\"dropdown.collapsed ? -1 : 0\" [attr.id]=\"dropdown.id\" aria-multiselectable=\"true\"\n [attr.aria-activedescendant]=\"activeDescendant\">\n <igx-combo-item [itemHeight]=\"itemHeight\" *igxFor=\"let item of data\n | comboFiltering:filterValue:displayKey:filteringOptions:filterFunction\n | comboGrouping:groupKey:valueKey:groupSortingDirection:compareCollator;\n index as rowIndex; containerSize: itemsMaxHeight; scrollOrientation: 'vertical'; itemSize: itemHeight\"\n [value]=\"item\" [isHeader]=\"item?.isHeader\" [index]=\"rowIndex\" [role]=\"item?.isHeader? 'group' : 'option'\">\n <ng-container *ngIf=\"item?.isHeader\">\n <ng-container\n *ngTemplateOutlet=\"headerItemTemplate ? headerItemTemplate : headerItemBase;\n context: {$implicit: item, data: data, valueKey: valueKey, groupKey: groupKey, displayKey: displayKey}\">\n </ng-container>\n </ng-container>\n <!-- if item is 'null' it should be displayed and !!(item?.isHeader) would resolve it to 'false' and not display it -->\n <ng-container *ngIf=\"!item?.isHeader\">\n <ng-container #listItem\n *ngTemplateOutlet=\"template; context: {$implicit: item, data: data, valueKey: valueKey, displayKey: displayKey};\">\n </ng-container>\n </ng-container>\n </igx-combo-item>\n </div>\n <div class=\"igx-combo__add\" *ngIf=\"filteredData.length === 0 || isAddButtonVisible()\">\n <div class=\"igx-combo__empty\" *ngIf=\"filteredData.length === 0\">\n <ng-container *ngTemplateOutlet=\"emptyTemplate ? emptyTemplate : empty\">\n </ng-container>\n </div>\n <igx-combo-add-item [itemHeight]=\"itemHeight\" *ngIf=\"isAddButtonVisible()\"\n [tabindex]=\"dropdown.collapsed ? -1 : customValueFlag ? 1 : -1\" class=\"igx-combo__add-item\" role=\"button\"\n [attr.aria-label]=\"resourceStrings.igx_combo_addCustomValues_placeholder\" [index]=\"virtualScrollContainer.igxForOf.length\">\n <ng-container *ngTemplateOutlet=\"addItemTemplate ? addItemTemplate : addItemDefault\">\n </ng-container>\n </igx-combo-add-item>\n </div>\n <ng-container *ngTemplateOutlet=\"footerTemplate\">\n </ng-container>\n</igx-combo-drop-down>\n<ng-template #complex let-display let-data=\"data\" let-key=\"displayKey\">\n {{display[key]}}\n</ng-template>\n<ng-template #primitive let-display>\n {{display}}\n</ng-template>\n<ng-template #empty>\n <span>{{resourceStrings.igx_combo_empty_message}}</span>\n</ng-template>\n<ng-template #addItemDefault let-control>\n <button type=\"button\" igxButton=\"flat\" igxRipple>{{ resourceStrings.igx_combo_addCustomValues_placeholder }}</button>\n</ng-template>\n<ng-template #headerItemBase let-item let-key=\"valueKey\" let-groupKey=\"groupKey\">\n {{ item[key] }}\n</ng-template>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: IgxInputGroupComponent, selector: "igx-input-group", inputs: ["resourceStrings", "suppressInputAutofocus", "type", "theme"] }, { kind: "directive", type: IgxInputDirective, selector: "[igxInput]", inputs: ["value", "disabled", "required"], exportAs: ["igxInput"] }, { kind: "directive", type: IgxSuffixDirective, selector: "igx-suffix,[igxSuffix],[igxEnd]" }, { kind: "component", type: IgxIconComponent, selector: "igx-icon", inputs: ["family", "active", "name"] }, { kind: "component", type: IgxComboDropDownComponent, selector: "igx-combo-drop-down", inputs: ["singleMode"] }, { kind: "directive", type: IgxDropDownItemNavigationDirective, selector: "[igxDropDownItemNavigation]", inputs: ["igxDropDownItemNavigation"] }, { kind: "directive", type: IgxForOfDirective, selector: "[igxFor][igxForOf]", inputs: ["igxForOf", "igxForSizePropName", "igxForScrollOrientation", "igxForScrollContainer", "igxForContainerSize", "igxForItemSize", "igxForTotalItemCount", "igxForTrackBy"], outputs: ["chunkLoad", "scrollbarVisibilityChanged", "contentSizeChange", "dataChanged", "beforeViewDestroyed", "chunkPreload"] }, { kind: "component", type: IgxComboItemComponent, selector: "igx-combo-item", inputs: ["itemHeight", "ariaLabel", "singleMode"] }, { kind: "component", type: IgxComboAddItemComponent, selector: "igx-combo-add-item" }, { kind: "directive", type: IgxButtonDirective, selector: "[igxButton]", inputs: ["selected", "igxButton", "igxLabel"], outputs: ["buttonSelected"] }, { kind: "directive", type: IgxRippleDirective, selector: "[igxRipple]", inputs: ["igxRippleTarget", "igxRipple", "igxRippleDuration", "igxRippleCentered", "igxRippleDisabled"] }, { kind: "pipe", type: IgxComboFilteringPipe, name: "comboFiltering" }, { kind: "pipe", type: IgxComboGroupingPipe, name: "comboGrouping" }] }); }
|
|
373
373
|
}
|
|
374
374
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IgxComboComponent, decorators: [{
|
|
375
375
|
type: Component,
|
|
@@ -395,7 +395,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
|
|
|
395
395
|
IgxRippleDirective,
|
|
396
396
|
IgxComboFilteringPipe,
|
|
397
397
|
IgxComboGroupingPipe
|
|
398
|
-
], template: "<igx-input-group #inputGroup [displayDensity]=\"displayDensity\" [type]=\"type\" (click)=\"onClick($event)\">\n <ng-container ngProjectAs=\"[igxLabel]\">\n <ng-content select=\"[igxLabel]\"></ng-content>\n </ng-container>\n <ng-container ngProjectAs=\"igx-prefix\">\n <ng-content select=\"igx-prefix\"></ng-content>\n </ng-container>\n <ng-container ngProjectAs=\"igx-hint, [igxHint]\">\n <ng-content select=\"igx-hint, [igxHint]\"></ng-content>\n </ng-container>\n <input igxInput #comboInput name=\"comboInput\" type=\"text\" [value]=\"displayValue\" readonly\n [attr.placeholder]=\"placeholder\" [disabled]=\"disabled\"\n role=\"combobox\" aria-haspopup=\"listbox\"\n [attr.aria-expanded]=\"!dropdown.collapsed\" [attr.aria-controls]=\"dropdown.listId\"\n [attr.aria-labelledby]=\"ariaLabelledBy || label?.id || placeholder\"\n (blur)=\"onBlur()\"
|
|
398
|
+
], template: "<igx-input-group #inputGroup [displayDensity]=\"displayDensity\" [type]=\"type\" (click)=\"onClick($event)\">\n <ng-container ngProjectAs=\"[igxLabel]\">\n <ng-content select=\"[igxLabel]\"></ng-content>\n </ng-container>\n <ng-container ngProjectAs=\"igx-prefix\">\n <ng-content select=\"igx-prefix\"></ng-content>\n </ng-container>\n <ng-container ngProjectAs=\"igx-hint, [igxHint]\">\n <ng-content select=\"igx-hint, [igxHint]\"></ng-content>\n </ng-container>\n <input igxInput #comboInput name=\"comboInput\" type=\"text\" [value]=\"displayValue\" readonly\n [attr.placeholder]=\"placeholder\" [disabled]=\"disabled\"\n role=\"combobox\" aria-haspopup=\"listbox\"\n [attr.aria-expanded]=\"!dropdown.collapsed\" [attr.aria-controls]=\"dropdown.listId\"\n [attr.aria-labelledby]=\"ariaLabelledBy || label?.id || placeholder\"\n (blur)=\"onBlur()\" />\n <ng-container ngProjectAs=\"igx-suffix\">\n <ng-content select=\"igx-suffix\"></ng-content>\n </ng-container>\n <igx-suffix *ngIf=\"displayValue\" [attr.aria-label]=\"resourceStrings.igx_combo_clearItems_placeholder\" class=\"igx-combo__clear-button\"\n (click)=\"handleClearItems($event)\">\n <ng-container *ngIf=\"clearIconTemplate\">\n <ng-container *ngTemplateOutlet=\"clearIconTemplate\"></ng-container>\n </ng-container>\n <igx-icon *ngIf=\"!clearIconTemplate\">\n {{ clearIcon }}\n </igx-icon>\n </igx-suffix>\n <igx-suffix class=\"igx-combo__toggle-button\">\n <ng-container *ngIf=\"toggleIconTemplate\">\n <ng-container *ngTemplateOutlet=\"toggleIconTemplate; context: {$implicit: collapsed}\"></ng-container>\n </ng-container>\n <igx-icon *ngIf=\"!toggleIconTemplate\">\n {{ toggleIcon }}\n </igx-icon>\n </igx-suffix>\n</igx-input-group>\n<igx-combo-drop-down #igxComboDropDown class=\"igx-combo__drop-down\" [displayDensity]=\"displayDensity\"\n [labelledBy]=\"ariaLabelledBy || label?.id || placeholder || ''\"\n [width]=\"itemsWidth || '100%'\" (opening)=\"handleOpening($event)\" (closing)=\"handleClosing($event)\"\n (opened)=\"handleOpened()\" (closed)=\"handleClosed()\">\n <div class=\"igx-combo__search\">\n <igx-input-group *ngIf=\"displaySearchInput\" [displayDensity]=\"displayDensity\" theme=\"material\" >\n <input igxInput #searchInput name=\"searchInput\" autocomplete=\"off\" type=\"text\"\n [(ngModel)]=\"searchValue\" (ngModelChange)=\"handleInputChange($event)\" (keyup)=\"handleKeyUp($event)\"\n (keydown)=\"handleKeyDown($event)\" (focus)=\"dropdown.onBlur($event)\" [attr.placeholder]=\"searchPlaceholder\"\n aria-autocomplete=\"list\" role=\"searchbox\" aria-label=\"search\"/>\n <igx-suffix *ngIf=\"showSearchCaseIcon\" (click)=\"toggleCaseSensitive()\">\n <span [ngClass]=\"filteringOptions.caseSensitive? 'igx-combo__case-icon--active' : 'igx-combo__case-icon'\">\n <igx-icon family=\"imx-icons\" name=\"case-sensitive\" [active]=\"filteringOptions.caseSensitive\"></igx-icon>\n </span>\n </igx-suffix>\n </igx-input-group>\n </div>\n <ng-container *ngTemplateOutlet=\"headerTemplate\">\n </ng-container>\n <div #dropdownItemContainer class=\"igx-combo__content\" [style.overflow]=\"'hidden'\"\n [style.maxHeight.rem]=\"itemsMaxHeightInRem\" [igxDropDownItemNavigation]=\"dropdown\" (focus)=\"dropdown.onFocus()\"\n [tabindex]=\"dropdown.collapsed ? -1 : 0\" [attr.id]=\"dropdown.id\" aria-multiselectable=\"true\"\n [attr.aria-activedescendant]=\"activeDescendant\">\n <igx-combo-item [itemHeight]=\"itemHeight\" *igxFor=\"let item of data\n | comboFiltering:filterValue:displayKey:filteringOptions:filterFunction\n | comboGrouping:groupKey:valueKey:groupSortingDirection:compareCollator;\n index as rowIndex; containerSize: itemsMaxHeight; scrollOrientation: 'vertical'; itemSize: itemHeight\"\n [value]=\"item\" [isHeader]=\"item?.isHeader\" [index]=\"rowIndex\" [role]=\"item?.isHeader? 'group' : 'option'\">\n <ng-container *ngIf=\"item?.isHeader\">\n <ng-container\n *ngTemplateOutlet=\"headerItemTemplate ? headerItemTemplate : headerItemBase;\n context: {$implicit: item, data: data, valueKey: valueKey, groupKey: groupKey, displayKey: displayKey}\">\n </ng-container>\n </ng-container>\n <!-- if item is 'null' it should be displayed and !!(item?.isHeader) would resolve it to 'false' and not display it -->\n <ng-container *ngIf=\"!item?.isHeader\">\n <ng-container #listItem\n *ngTemplateOutlet=\"template; context: {$implicit: item, data: data, valueKey: valueKey, displayKey: displayKey};\">\n </ng-container>\n </ng-container>\n </igx-combo-item>\n </div>\n <div class=\"igx-combo__add\" *ngIf=\"filteredData.length === 0 || isAddButtonVisible()\">\n <div class=\"igx-combo__empty\" *ngIf=\"filteredData.length === 0\">\n <ng-container *ngTemplateOutlet=\"emptyTemplate ? emptyTemplate : empty\">\n </ng-container>\n </div>\n <igx-combo-add-item [itemHeight]=\"itemHeight\" *ngIf=\"isAddButtonVisible()\"\n [tabindex]=\"dropdown.collapsed ? -1 : customValueFlag ? 1 : -1\" class=\"igx-combo__add-item\" role=\"button\"\n [attr.aria-label]=\"resourceStrings.igx_combo_addCustomValues_placeholder\" [index]=\"virtualScrollContainer.igxForOf.length\">\n <ng-container *ngTemplateOutlet=\"addItemTemplate ? addItemTemplate : addItemDefault\">\n </ng-container>\n </igx-combo-add-item>\n </div>\n <ng-container *ngTemplateOutlet=\"footerTemplate\">\n </ng-container>\n</igx-combo-drop-down>\n<ng-template #complex let-display let-data=\"data\" let-key=\"displayKey\">\n {{display[key]}}\n</ng-template>\n<ng-template #primitive let-display>\n {{display}}\n</ng-template>\n<ng-template #empty>\n <span>{{resourceStrings.igx_combo_empty_message}}</span>\n</ng-template>\n<ng-template #addItemDefault let-control>\n <button type=\"button\" igxButton=\"flat\" igxRipple>{{ resourceStrings.igx_combo_addCustomValues_placeholder }}</button>\n</ng-template>\n<ng-template #headerItemBase let-item let-key=\"valueKey\" let-groupKey=\"groupKey\">\n {{ item[key] }}\n</ng-template>\n" }]
|
|
399
399
|
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.IgxSelectionAPIService }, { type: i2.IgxComboAPIService }, { type: i3.IgxIconService }, { type: undefined, decorators: [{
|
|
400
400
|
type: Optional
|
|
401
401
|
}, {
|
|
@@ -428,4 +428,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
|
|
|
428
428
|
type: HostListener,
|
|
429
429
|
args: ['keydown.Alt.ArrowDown', ['$event']]
|
|
430
430
|
}] } });
|
|
431
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2NvbWJvL2NvbWJvLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9jb21iby9jb21iby5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xFLE9BQU8sRUFDK0IsU0FBUyxFQUMzQyxRQUFRLEVBQUUsTUFBTSxFQUFZLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQVcsZ0JBQWdCLEVBQzlHLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBd0IsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJdEYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLDBCQUEwQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDL0csT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ25GLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBRTFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQy9ELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxvQkFBb0IsRUFB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Qjt3QkFDbEIsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxtQkFBbUIsRUFBRTt3QkFDaEUsRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxtQkFBbUIsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO3FCQUM5RSxjQUNXLElBQUksV0FDUDt3QkFDTCxJQUFJO3dCQUNKLGdCQUFnQjt3QkFDaEIsT0FBTzt3QkFDUCxXQUFXO3dCQUNYLHNCQUFzQjt3QkFDdEIsaUJBQWlCO3dCQUNqQixrQkFBa0I7d0JBQ2xCLGdCQUFnQjt3QkFDaEIseUJBQXlCO3dCQUN6QixrQ0FBa0M7d0JBQ2xDLGlCQUFpQjt3QkFDakIscUJBQXFCO3dCQUNyQix3QkFBd0I7d0JBQ3hCLGtCQUFrQjt3QkFDbEIsa0JBQWtCO3dCQUNsQixxQkFBcUI7d0JBQ3JCLG9CQUFvQjtxQkFDdkI7OzBCQWlGSSxRQUFROzswQkFBSSxNQUFNOzJCQUFDLG1CQUFtQjs7MEJBQ3RDLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsb0JBQW9COzswQkFDdkMsUUFBUTt5Q0ExRU4sZUFBZTtzQkFEckIsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFTM0IsVUFBVTtzQkFEcEIsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFzQi9CLGlCQUFpQjtzQkFEdkIsS0FBSztnQkFXQyxpQkFBaUI7c0JBRHZCLE1BQU07Z0JBS0EsUUFBUTtzQkFEZCxTQUFTO3VCQUFDLHlCQUF5QixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkF1Qy9DLFdBQVc7c0JBRmpCLFlBQVk7dUJBQUMsbUJBQW1CLEVBQUUsQ0FBQyxRQUFRLENBQUM7O3NCQUM1QyxZQUFZO3VCQUFDLHVCQUF1QixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdDbGFzcywgTmdJZiwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uSW5pdCwgT25EZXN0cm95LFxuICAgIE9wdGlvbmFsLCBJbmplY3QsIEluamVjdG9yLCBWaWV3Q2hpbGQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBEb0NoZWNrLCBib29sZWFuQXR0cmlidXRlXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybXNNb2R1bGUsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBJZ3hTZWxlY3Rpb25BUElTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9zZWxlY3Rpb24nO1xuaW1wb3J0IHsgSUJhc2VFdmVudEFyZ3MsIElCYXNlQ2FuY2VsYWJsZUV2ZW50QXJncywgQ2FuY2VsYWJsZUV2ZW50QXJncyB9IGZyb20gJy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgSWd4U3RyaW5nRmlsdGVyaW5nT3BlcmFuZCwgSWd4Qm9vbGVhbkZpbHRlcmluZ09wZXJhbmQgfSBmcm9tICcuLi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLWNvbmRpdGlvbic7XG5pbXBvcnQgeyBGaWx0ZXJpbmdMb2dpYyB9IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9maWx0ZXJpbmctZXhwcmVzc2lvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSWd4Rm9yT2ZEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2Zvci1vZi9mb3Jfb2YuZGlyZWN0aXZlJztcbmltcG9ydCB7IElneEljb25TZXJ2aWNlIH0gZnJvbSAnLi4vaWNvbi9pY29uLnNlcnZpY2UnO1xuaW1wb3J0IHsgSWd4UmlwcGxlRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9yaXBwbGUvcmlwcGxlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hCdXR0b25EaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2J1dHRvbi9idXR0b24uZGlyZWN0aXZlJztcbmltcG9ydCB7IElneElucHV0R3JvdXBDb21wb25lbnQgfSBmcm9tICcuLi9pbnB1dC1ncm91cC9pbnB1dC1ncm91cC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4Q29tYm9JdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9jb21iby1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hDb21ib0Ryb3BEb3duQ29tcG9uZW50IH0gZnJvbSAnLi9jb21iby1kcm9wZG93bi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4Q29tYm9GaWx0ZXJpbmdQaXBlLCBJZ3hDb21ib0dyb3VwaW5nUGlwZSB9IGZyb20gJy4vY29tYm8ucGlwZXMnO1xuaW1wb3J0IHsgRGlzcGxheURlbnNpdHlUb2tlbiwgSURpc3BsYXlEZW5zaXR5T3B0aW9ucyB9IGZyb20gJy4uL2NvcmUvZGVuc2l0eSc7XG5pbXBvcnQgeyBJR1hfQ09NQk9fQ09NUE9ORU5ULCBJZ3hDb21ib0Jhc2VEaXJlY3RpdmUgfSBmcm9tICcuL2NvbWJvLmNvbW1vbic7XG5pbXBvcnQgeyBJZ3hDb21ib0FkZEl0ZW1Db21wb25lbnQgfSBmcm9tICcuL2NvbWJvLWFkZC1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hDb21ib0FQSVNlcnZpY2UgfSBmcm9tICcuL2NvbWJvLmFwaSc7XG5pbXBvcnQgeyBFZGl0b3JQcm92aWRlciB9IGZyb20gJy4uL2NvcmUvZWRpdC1wcm92aWRlcic7XG5pbXBvcnQgeyBJZ3hJbnB1dEdyb3VwVHlwZSwgSUdYX0lOUFVUX0dST1VQX1RZUEUgfSBmcm9tICcuLi9pbnB1dC1ncm91cC9wdWJsaWNfYXBpJztcbmltcG9ydCB7IElneERyb3BEb3duSXRlbU5hdmlnYXRpb25EaXJlY3RpdmUgfSBmcm9tICcuLi9kcm9wLWRvd24vZHJvcC1kb3duLW5hdmlnYXRpb24uZGlyZWN0aXZlJztcbmltcG9ydCB7IElneEljb25Db21wb25lbnQgfSBmcm9tICcuLi9pY29uL2ljb24uY29tcG9uZW50JztcbmltcG9ydCB7IElneFN1ZmZpeERpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvc3VmZml4L3N1ZmZpeC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4SW5wdXREaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2lucHV0L2lucHV0LmRpcmVjdGl2ZSc7XG5cbi8qKiBFdmVudCBlbWl0dGVkIHdoZW4gYW4gaWd4LWNvbWJvJ3Mgc2VsZWN0aW9uIGlzIGNoYW5naW5nICovXG5leHBvcnQgaW50ZXJmYWNlIElDb21ib1NlbGVjdGlvbkNoYW5naW5nRXZlbnRBcmdzIGV4dGVuZHMgSUJhc2VDYW5jZWxhYmxlRXZlbnRBcmdzIHtcbiAgICAvKiogQW4gYXJyYXkgY29udGFpbmluZyB0aGUgdmFsdWVzIHRoYXQgYXJlIGN1cnJlbnRseSBzZWxlY3RlZCAqL1xuICAgIG9sZFZhbHVlOiBhbnlbXTtcbiAgICAvKiogQW4gYXJyYXkgY29udGFpbmluZyB0aGUgdmFsdWVzIHRoYXQgd2lsbCBiZSBzZWxlY3RlZCBhZnRlciB0aGlzIGV2ZW50ICovXG4gICAgbmV3VmFsdWU6IGFueVtdO1xuICAgIC8qKiBBbiBhcnJheSBjb250YWluaW5nIHRoZSBpdGVtcyB0aGF0IGFyZSBjdXJyZW50bHkgc2VsZWN0ZWQgKi9cbiAgICBvbGRTZWxlY3Rpb246IGFueVtdO1xuICAgIC8qKiBBbiBhcnJheSBjb250YWluaW5nIHRoZSBpdGVtcyB0aGF0IHdpbGwgYmUgc2VsZWN0ZWQgYWZ0ZXIgdGhpcyBldmVudCAqL1xuICAgIG5ld1NlbGVjdGlvbjogYW55W107XG4gICAgLyoqIEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGl0ZW1zIHRoYXQgd2lsbCBiZSBhZGRlZCB0byB0aGUgc2VsZWN0aW9uIChpZiBhbnkpICovXG4gICAgYWRkZWQ6IGFueVtdO1xuICAgIC8qKiBBbiBhcnJheSBjb250YWluaW5nIHRoZSBpdGVtcyB0aGF0IHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBzZWxlY3Rpb24gKGlmIGFueSkgKi9cbiAgICByZW1vdmVkOiBhbnlbXTtcbiAgICAvKiogVGhlIHRleHQgdGhhdCB3aWxsIGJlIGRpc3BsYXllZCBpbiB0aGUgY29tYm8gdGV4dCBib3ggKi9cbiAgICBkaXNwbGF5VGV4dDogc3RyaW5nO1xuICAgIC8qKiBUaGUgdXNlciBpbnRlcmFjdGlvbiB0aGF0IHRyaWdnZXJlZCB0aGUgc2VsZWN0aW9uIGNoYW5nZSAqL1xuICAgIGV2ZW50PzogRXZlbnQ7XG59XG5cbi8qKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIGlneC1jb21ibydzIHNlYXJjaCBpbnB1dCBjaGFuZ2VzICovXG5leHBvcnQgaW50ZXJmYWNlIElDb21ib1NlYXJjaElucHV0RXZlbnRBcmdzIGV4dGVuZHMgSUJhc2VDYW5jZWxhYmxlRXZlbnRBcmdzIHtcbiAgICAvKiogVGhlIHRleHQgdGhhdCBoYXMgYmVlbiB0eXBlZCBpbnRvIHRoZSBzZWFyY2ggaW5wdXQgKi9cbiAgICBzZWFyY2hUZXh0OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbWJvSXRlbUFkZGl0aW9uRXZlbnQgZXh0ZW5kcyBJQmFzZUV2ZW50QXJncywgQ2FuY2VsYWJsZUV2ZW50QXJncyB7XG4gICAgb2xkQ29sbGVjdGlvbjogYW55W107XG4gICAgYWRkZWRJdGVtOiBhbnk7XG4gICAgbmV3Q29sbGVjdGlvbjogYW55W107XG59XG5cbi8qKlxuICogV2hlbiBjYWxsZWQgd2l0aCBzZXRzIEEgJiBCLCByZXR1cm5zIEEgLSBCIChhcyBhcnJheSk7XG4gKlxuICogQGhpZGRlblxuICovXG5jb25zdCBkaWZmSW5TZXRzID0gKHNldDE6IFNldDxhbnk+LCBzZXQyOiBTZXQ8YW55Pik6IGFueVtdID0+IHtcbiAgICBjb25zdCByZXN1bHRzID0gW107XG4gICAgc2V0MS5mb3JFYWNoKGVudHJ5ID0+IHtcbiAgICAgICAgaWYgKCFzZXQyLmhhcyhlbnRyeSkpIHtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaChlbnRyeSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0cztcbn07XG5cbi8qKlxuICogIFJlcHJlc2VudHMgYSBkcm9wLWRvd24gbGlzdCB0aGF0IHByb3ZpZGVzIGVkaXRhYmxlIGZ1bmN0aW9uYWxpdGllcywgYWxsb3dpbmcgdXNlcnMgdG8gY2hvb3NlIGFuIG9wdGlvbiBmcm9tIGEgcHJlZGVmaW5lZCBsaXN0LlxuICpcbiAqIEBpZ3hNb2R1bGUgSWd4Q29tYm9Nb2R1bGVcbiAqIEBpZ3hUaGVtZSBpZ3gtY29tYm8tdGhlbWVcbiAqIEBpZ3hLZXl3b3JkcyBjb21ib2JveCwgY29tYm8gc2VsZWN0aW9uXG4gKiBAaWd4R3JvdXAgR3JpZHMgJiBMaXN0c1xuICpcbiAqIEByZW1hcmtzXG4gKiBJdCBwcm92aWRlcyB0aGUgYWJpbGl0eSB0byBmaWx0ZXIgaXRlbXMgYXMgd2VsbCBhcyBwZXJmb3JtIHNlbGVjdGlvbiB3aXRoIHRoZSBwcm92aWRlZCBkYXRhLlxuICogQWRkaXRpb25hbGx5LCBpdCBleHBvc2VzIGtleWJvYXJkIG5hdmlnYXRpb24gYW5kIGN1c3RvbSBzdHlsaW5nIGNhcGFiaWxpdGllcy5cbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8aWd4LWNvbWJvIFtpdGVtc01heEhlaWdodF09XCIyNTBcIiBbZGF0YV09XCJsb2NhdGlvbkRhdGFcIlxuICogIFtkaXNwbGF5S2V5XT1cIidmaWVsZCdcIiBbdmFsdWVLZXldPVwiJ2ZpZWxkJ1wiXG4gKiAgcGxhY2Vob2xkZXI9XCJMb2NhdGlvbihzKVwiIHNlYXJjaFBsYWNlaG9sZGVyPVwiU2VhcmNoLi4uXCI+XG4gKiA8L2lneC1jb21ibz5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2lneC1jb21ibycsXG4gICAgdGVtcGxhdGVVcmw6ICdjb21iby5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIElneENvbWJvQVBJU2VydmljZSxcbiAgICAgICAgeyBwcm92aWRlOiBJR1hfQ09NQk9fQ09NUE9ORU5ULCB1c2VFeGlzdGluZzogSWd4Q29tYm9Db21wb25lbnQgfSxcbiAgICAgICAgeyBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUiwgdXNlRXhpc3Rpbmc6IElneENvbWJvQ29tcG9uZW50LCBtdWx0aTogdHJ1ZSB9XG4gICAgXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgTmdJZixcbiAgICAgICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICAgICAgTmdDbGFzcyxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIElneElucHV0R3JvdXBDb21wb25lbnQsXG4gICAgICAgIElneElucHV0RGlyZWN0aXZlLFxuICAgICAgICBJZ3hTdWZmaXhEaXJlY3RpdmUsXG4gICAgICAgIElneEljb25Db21wb25lbnQsXG4gICAgICAgIElneENvbWJvRHJvcERvd25Db21wb25lbnQsXG4gICAgICAgIElneERyb3BEb3duSXRlbU5hdmlnYXRpb25EaXJlY3RpdmUsXG4gICAgICAgIElneEZvck9mRGlyZWN0aXZlLFxuICAgICAgICBJZ3hDb21ib0l0ZW1Db21wb25lbnQsXG4gICAgICAgIElneENvbWJvQWRkSXRlbUNvbXBvbmVudCxcbiAgICAgICAgSWd4QnV0dG9uRGlyZWN0aXZlLFxuICAgICAgICBJZ3hSaXBwbGVEaXJlY3RpdmUsXG4gICAgICAgIElneENvbWJvRmlsdGVyaW5nUGlwZSxcbiAgICAgICAgSWd4Q29tYm9Hcm91cGluZ1BpcGVcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIElneENvbWJvQ29tcG9uZW50IGV4dGVuZHMgSWd4Q29tYm9CYXNlRGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCxcbiAgICBPbkRlc3Ryb3ksIERvQ2hlY2ssIEVkaXRvclByb3ZpZGVyIHtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBjb21ibydzIHNlYXJjaCBib3ggc2hvdWxkIGJlIGZvY3VzZWQgYWZ0ZXIgdGhlIGRyb3Bkb3duIGlzIG9wZW5lZC5cbiAgICAgKiBXaGVuIGBmYWxzZWAsIHRoZSBjb21ibydzIGxpc3QgaXRlbSBjb250YWluZXIgd2lsbCBiZSBmb2N1c2VkIGluc3RlYWRcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBwdWJsaWMgYXV0b0ZvY3VzU2VhcmNoID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMvZGlzYWJsZXMgZmlsdGVyaW5nIGluIHRoZSBsaXN0LiBUaGUgZGVmYXVsdCBpcyBgdHJ1ZWAuXG4gICAgICpcbiAgICAgKiBAZGVwcmVjYXRlZCBpbiB2ZXJzaW9uIDE0LjAuMC4gVXNlIHRoZSBgZmlsdGVyaW5nT3B0aW9ucy5maWx0ZXJhYmxlYCBwcm9wZXJ0eSBpbnN0ZWFkLlxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHB1YmxpYyBnZXQgZmlsdGVyYWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyaW5nT3B0aW9ucy5maWx0ZXJhYmxlO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IGZpbHRlcmFibGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5maWx0ZXJpbmdPcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5maWx0ZXJpbmdPcHRpb25zLCB7IGZpbHRlcmFibGU6IHZhbHVlIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlZmluZXMgdGhlIHBsYWNlaG9sZGVyIHZhbHVlIGZvciB0aGUgY29tYm8gZHJvcGRvd24gc2VhcmNoIGZpZWxkXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogLy8gZ2V0XG4gICAgICogbGV0IG15Q29tYm9TZWFyY2hQbGFjZWhvbGRlciA9IHRoaXMuY29tYm8uc2VhcmNoUGxhY2Vob2xkZXI7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPCEtLXNldC0tPlxuICAgICAqIDxpZ3gtY29tYm8gW3NlYXJjaFBsYWNlaG9sZGVyXT0nbmV3UGxhY2VIb2xkZXInPjwvaWd4LWNvbWJvPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNlYXJjaFBsYWNlaG9sZGVyID0gJ0VudGVyIGEgU2VhcmNoIFRlcm0nO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIGl0ZW0gc2VsZWN0aW9uIGlzIGNoYW5naW5nLCBiZWZvcmUgdGhlIHNlbGVjdGlvbiBjb21wbGV0ZXNcbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNvbWJvIChzZWxlY3Rpb25DaGFuZ2luZyk9J2hhbmRsZVNlbGVjdGlvbigpJz48L2lneC1jb21ibz5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgc2VsZWN0aW9uQ2hhbmdpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPElDb21ib1NlbGVjdGlvbkNoYW5naW5nRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQFZpZXdDaGlsZChJZ3hDb21ib0Ryb3BEb3duQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIHB1YmxpYyBkcm9wZG93bjogSWd4Q29tYm9Ecm9wRG93bkNvbXBvbmVudDtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgZmlsdGVyZWREYXRhKCk6IGFueVtdIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbHRlcmluZ09wdGlvbnMuZmlsdGVyYWJsZSA/IHRoaXMuX2ZpbHRlcmVkRGF0YSA6IHRoaXMuZGF0YTtcbiAgICB9XG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHNldCBmaWx0ZXJlZERhdGEodmFsOiBhbnlbXSB8IG51bGwpIHtcbiAgICAgICAgdGhpcy5fZmlsdGVyZWREYXRhID0gdGhpcy5ncm91cEtleSA/ICh2YWwgfHwgW10pLmZpbHRlcigoZSkgPT4gZS5pc0hlYWRlciAhPT0gdHJ1ZSkgOiB2YWw7XG4gICAgICAgIHRoaXMuY2hlY2tNYXRjaCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGZpbHRlcmluZ0xvZ2ljID0gRmlsdGVyaW5nTG9naWMuT3I7XG5cbiAgICBwcm90ZWN0ZWQgc3RyaW5nRmlsdGVycyA9IElneFN0cmluZ0ZpbHRlcmluZ09wZXJhbmQ7XG4gICAgcHJvdGVjdGVkIGJvb2xlYW5GaWx0ZXJzID0gSWd4Qm9vbGVhbkZpbHRlcmluZ09wZXJhbmQ7XG4gICAgcHJvdGVjdGVkIF9wcmV2SW5wdXRWYWx1ZSA9ICcnO1xuXG4gICAgcHJpdmF0ZSBfZGlzcGxheVRleHQ6IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBzZWxlY3Rpb25TZXJ2aWNlOiBJZ3hTZWxlY3Rpb25BUElTZXJ2aWNlLFxuICAgICAgICBjb21ib0FQSTogSWd4Q29tYm9BUElTZXJ2aWNlLFxuICAgICAgICBfaWNvblNlcnZpY2U6IElneEljb25TZXJ2aWNlLFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KERpc3BsYXlEZW5zaXR5VG9rZW4pIF9kaXNwbGF5RGVuc2l0eU9wdGlvbnM6IElEaXNwbGF5RGVuc2l0eU9wdGlvbnMsXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoSUdYX0lOUFVUX0dST1VQX1RZUEUpIF9pbnB1dEdyb3VwVHlwZTogSWd4SW5wdXRHcm91cFR5cGUsXG4gICAgICAgIEBPcHRpb25hbCgpIF9pbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICAgICAgc3VwZXIoZWxlbWVudFJlZiwgY2RyLCBzZWxlY3Rpb25TZXJ2aWNlLCBjb21ib0FQSSwgX2ljb25TZXJ2aWNlLCBfZGlzcGxheURlbnNpdHlPcHRpb25zLCBfaW5wdXRHcm91cFR5cGUsIF9pbmplY3Rvcik7XG4gICAgICAgIHRoaXMuY29tYm9BUEkucmVnaXN0ZXIodGhpcyk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5BcnJvd0Rvd24nLCBbJyRldmVudCddKVxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uQWx0LkFycm93RG93bicsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uQXJyb3dEb3duKGV2ZW50OiBFdmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5vcGVuKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCBkaXNwbGF5U2VhcmNoSW5wdXQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbHRlcmluZ09wdGlvbnMuZmlsdGVyYWJsZSB8fCB0aGlzLmFsbG93Q3VzdG9tVmFsdWVzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGhhbmRsZUtleVVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIC8vIFRPRE86IHVzZSBQbGF0Zm9ybVV0aWwgZm9yIGtleWJvYXJkIG5hdmlnYXRpb25cbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicgfHwgZXZlbnQua2V5ID09PSAnRG93bicpIHtcbiAgICAgICAgICAgIHRoaXMuZHJvcGRvd24uZm9jdXNlZEl0ZW0gPSB0aGlzLmRyb3Bkb3duLml0ZW1zWzBdO1xuICAgICAgICAgICAgdGhpcy5kcm9wZG93bkNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnRXNjYXBlJyB8fCBldmVudC5rZXkgPT09ICdFc2MnKSB7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgaGFuZGxlU2VsZWN0QWxsKGV2dCkge1xuICAgICAgICBpZiAoZXZ0LmNoZWNrZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0QWxsSXRlbXMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGVzZWxlY3RBbGxJdGVtcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogYW55W10pOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5maWx0ZXIoeCA9PiB4ICE9PSB1bmRlZmluZWQpIDogW107XG4gICAgICAgIGNvbnN0IG9sZFNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uO1xuICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0X2l0ZW1zKHRoaXMuaWQsIHNlbGVjdGlvbiwgdHJ1ZSk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB0aGlzLl9kaXNwbGF5VmFsdWUgPSB0aGlzLmNyZWF0ZURpc3BsYXlUZXh0KHRoaXMuc2VsZWN0aW9uLCBvbGRTZWxlY3Rpb24pO1xuICAgICAgICB0aGlzLl92YWx1ZSA9IHRoaXMudmFsdWVLZXkgPyB0aGlzLnNlbGVjdGlvbi5tYXAoaXRlbSA9PiBpdGVtW3RoaXMudmFsdWVLZXldKSA6IHRoaXMuc2VsZWN0aW9uO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBuZ0RvQ2hlY2soKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRhdGE/Lmxlbmd0aCAmJiB0aGlzLnNlbGVjdGlvbi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuX2Rpc3BsYXlWYWx1ZSA9IHRoaXMuX2Rpc3BsYXlUZXh0IHx8IHRoaXMuY3JlYXRlRGlzcGxheVRleHQodGhpcy5zZWxlY3Rpb24sIFtdKTtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gdGhpcy52YWx1ZUtleSA/IHRoaXMuc2VsZWN0aW9uLm1hcChpdGVtID0+IGl0ZW1bdGhpcy52YWx1ZUtleV0pIDogdGhpcy5zZWxlY3Rpb247XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIubmdEb0NoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRFZGl0RWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbWJvSW5wdXQubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgY29udGV4dCgpOiBhbnkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJGltcGxpY2l0OiB0aGlzXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgaGFuZGxlQ2xlYXJJdGVtcyhldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRlc2VsZWN0QWxsSXRlbXModHJ1ZSwgZXZlbnQpO1xuICAgICAgICBpZiAodGhpcy5jb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0RWRpdEVsZW1lbnQoKS5mb2N1cygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5mb2N1c1NlYXJjaElucHV0KHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlbGVjdCBkZWZpbmVkIGl0ZW1zXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmV3SXRlbXMgbmV3IGl0ZW1zIHRvIGJlIHNlbGVjdGVkXG4gICAgICogQHBhcmFtIGNsZWFyQ3VycmVudFNlbGVjdGlvbiBpZiB0cnVlIGNsZWFyIHByZXZpb3VzIHNlbGVjdGVkIGl0ZW1zXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuY29tYm8uc2VsZWN0KFtcIk5ldyBZb3JrXCIsIFwiTmV3IEplcnNleVwiXSk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHNlbGVjdChuZXdJdGVtczogQXJyYXk8YW55PiwgY2xlYXJDdXJyZW50U2VsZWN0aW9uPzogYm9vbGVhbiwgZXZlbnQ/OiBFdmVudCkge1xuICAgICAgICBpZiAobmV3SXRlbXMpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uU2VydmljZS5hZGRfaXRlbXModGhpcy5pZCwgbmV3SXRlbXMsIGNsZWFyQ3VycmVudFNlbGVjdGlvbik7XG4gICAgICAgICAgICB0aGlzLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24sIGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlc2VsZWN0IGRlZmluZWQgaXRlbXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBpdGVtcyBpdGVtcyB0byBkZXNlbGVjdGVkXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuY29tYm8uZGVzZWxlY3QoW1wiTmV3IFlvcmtcIiwgXCJOZXcgSmVyc2V5XCJdKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZGVzZWxlY3QoaXRlbXM6IEFycmF5PGFueT4sIGV2ZW50PzogRXZlbnQpIHtcbiAgICAgICAgaWYgKGl0ZW1zKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdTZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvblNlcnZpY2UuZGVsZXRlX2l0ZW1zKHRoaXMuaWQsIGl0ZW1zKTtcbiAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbiwgZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VsZWN0IGFsbCAoZmlsdGVyZWQpIGl0ZW1zXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaWdub3JlRmlsdGVyIGlmIHNldCB0byB0cnVlLCBzZWxlY3RzIGFsbCBpdGVtcywgb3RoZXJ3aXNlIHNlbGVjdHMgb25seSB0aGUgZmlsdGVyZWQgb25lcy5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5jb21iby5zZWxlY3RBbGxJdGVtcygpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBzZWxlY3RBbGxJdGVtcyhpZ25vcmVGaWx0ZXI/OiBib29sZWFuLCBldmVudD86IEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGFsbFZpc2libGUgPSB0aGlzLnNlbGVjdGlvblNlcnZpY2UuZ2V0X2FsbF9pZHMoaWdub3JlRmlsdGVyID8gdGhpcy5kYXRhIDogdGhpcy5maWx0ZXJlZERhdGEsIHRoaXMudmFsdWVLZXkpO1xuICAgICAgICBjb25zdCBuZXdTZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvblNlcnZpY2UuYWRkX2l0ZW1zKHRoaXMuaWQsIGFsbFZpc2libGUpO1xuICAgICAgICB0aGlzLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24sIGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXNlbGVjdCBhbGwgKGZpbHRlcmVkKSBpdGVtc1xuICAgICAqXG4gICAgICogQHBhcmFtIGlnbm9yZUZpbHRlciBpZiBzZXQgdG8gdHJ1ZSwgZGVzZWxlY3RzIGFsbCBpdGVtcywgb3RoZXJ3aXNlIGRlc2VsZWN0cyBvbmx5IHRoZSBmaWx0ZXJlZCBvbmVzLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmNvbWJvLmRlc2VsZWN0QWxsSXRlbXMoKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZGVzZWxlY3RBbGxJdGVtcyhpZ25vcmVGaWx0ZXI/OiBib29sZWFuLCBldmVudD86IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGxldCBuZXdTZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvblNlcnZpY2UuZ2V0X2VtcHR5KCk7XG4gICAgICAgIGlmICh0aGlzLmZpbHRlcmVkRGF0YS5sZW5ndGggIT09IHRoaXMuZGF0YS5sZW5ndGggJiYgIWlnbm9yZUZpbHRlcikge1xuICAgICAgICAgICAgbmV3U2VsZWN0aW9uID0gdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmRlbGV0ZV9pdGVtcyh0aGlzLmlkLCB0aGlzLnNlbGVjdGlvblNlcnZpY2UuZ2V0X2FsbF9pZHModGhpcy5maWx0ZXJlZERhdGEsIHRoaXMudmFsdWVLZXkpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24sIGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZWxlY3RzL0Rlc2VsZWN0cyBhIHNpbmdsZSBpdGVtXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaXRlbUlEIHRoZSBpdGVtSUQgb2YgdGhlIHNwZWNpZmljIGl0ZW1cbiAgICAgKiBAcGFyYW0gc2VsZWN0IElmIHRoZSBpdGVtIHNob3VsZCBiZSBzZWxlY3RlZCAodHJ1ZSkgb3IgZGVzZWxlY3RlZCAoZmFsc2UpXG4gICAgICpcbiAgICAgKiBXaXRob3V0IHNwZWNpZmllZCB2YWx1ZUtleTtcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5jb21iby52YWx1ZUtleSA9IG51bGw7XG4gICAgICogY29uc3QgaXRlbXM6IHsgZmllbGQ6IHN0cmluZywgcmVnaW9uOiBzdHJpbmd9W10gPSBkYXRhO1xuICAgICAqIHRoaXMuY29tYm8uc2V0U2VsZWN0ZWRJdGVtKGl0ZW1zWzBdLCB0cnVlKTtcbiAgICAgKiBgYGBcbiAgICAgKiBXaXRoIHNwZWNpZmllZCB2YWx1ZUtleTtcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5jb21iby52YWx1ZUtleSA9ICdmaWVsZCc7XG4gICAgICogY29uc3QgaXRlbXM6IHsgZmllbGQ6IHN0cmluZywgcmVnaW9uOiBzdHJpbmd9W10gPSBkYXRhO1xuICAgICAqIHRoaXMuY29tYm8uc2V0U2VsZWN0ZWRJdGVtKCdDb25uZWN0aWN1dCcsIHRydWUpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXRTZWxlY3RlZEl0ZW0oaXRlbUlEOiBhbnksIHNlbGVjdCA9IHRydWUsIGV2ZW50PzogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKGl0ZW1JRCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlbGVjdCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3QoW2l0ZW1JRF0sIGZhbHNlLCBldmVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRlc2VsZWN0KFtpdGVtSURdLCBldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgaGFuZGxlT3BlbmVkKCkge1xuICAgICAgICB0aGlzLnRyaWdnZXJDaGVjaygpO1xuXG4gICAgICAgIC8vIERpc2FibGluZyBmb2N1cyBvZiB0aGUgc2VhcmNoIGlucHV0IHNob3VsZCBoYXBwZW4gb25seSB3aGVuIGRyb3AgZG93biBvcGVucy5cbiAgICAgICAgLy8gRHVyaW5nIGtleWJvYXJkIG5hdmlnYXRpb24gaW5wdXQgc2hvdWxkIHJlY2VpdmUgZm9jdXMsIGV2ZW4gdGhlIGF1dG9Gb2N1c1NlYXJjaCBpcyBkaXNhYmxlZC5cbiAgICAgICAgLy8gVGhhdCBpcyB3aHkgaW4gc3VjaCBjYXNlcyBmb2N1c2luZyBvZiB0aGUgZHJvcGRvd25Db250YWluZXIgaGFwcGVucyBvdXRzaWRlIGZvY3VzU2VhcmNoSW5wdXQgbWV0aG9kLlxuICAgICAgICBpZiAodGhpcy5hdXRvRm9jdXNTZWFyY2gpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNTZWFyY2hJbnB1dCh0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZHJvcGRvd25Db250YWluZXIubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub3BlbmVkLmVtaXQoeyBvd25lcjogdGhpcyB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZm9jdXNTZWFyY2hJbnB1dChvcGVuaW5nPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNwbGF5U2VhcmNoSW5wdXQgJiYgdGhpcy5zZWFyY2hJbnB1dCkge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hJbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAob3BlbmluZykge1xuICAgICAgICAgICAgICAgIHRoaXMuZHJvcGRvd25Db250YWluZXIubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbWJvSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgc2V0U2VsZWN0aW9uKHNlbGVjdGlvbjogU2V0PGFueT4sIGV2ZW50PzogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY3VycmVudFNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uU2VydmljZS5nZXQodGhpcy5pZCk7XG4gICAgICAgIGNvbnN0IHJlbW92ZWQgPSB0aGlzLmNvbnZlcnRLZXlzVG9JdGVtcyhkaWZmSW5TZXRzKGN1cnJlbnRTZWxlY3Rpb24sIHNlbGVjdGlvbikpO1xuICAgICAgICBjb25zdCBhZGRlZCA9IHRoaXMuY29udmVydEtleXNUb0l0ZW1zKGRpZmZJblNldHMoc2VsZWN0aW9uLCBjdXJyZW50U2VsZWN0aW9uKSk7XG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gQXJyYXkuZnJvbShzZWxlY3Rpb24pO1xuICAgICAgICBjb25zdCBvbGRWYWx1ZSA9IEFycmF5LmZyb20oY3VycmVudFNlbGVjdGlvbiB8fCBbXSk7XG4gICAgICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IHRoaXMuY29udmVydEtleXNUb0l0ZW1zKG5ld1ZhbHVlKTtcbiAgICAgICAgY29uc3Qgb2xkU2VsZWN0aW9uID0gdGhpcy5jb252ZXJ0S2V5c1RvSXRlbXMob2xkVmFsdWUpO1xuICAgICAgICBjb25zdCBkaXNwbGF5VGV4dCA9IHRoaXMuY3JlYXRlRGlzcGxheVRleHQodGhpcy5jb252ZXJ0S2V5c1RvSXRlbXMobmV3VmFsdWUpLCBvbGRWYWx1ZSk7XG4gICAgICAgIGNvbnN0IGFyZ3M6IElDb21ib1NlbGVjdGlvbkNoYW5naW5nRXZlbnRBcmdzID0ge1xuICAgICAgICAgICAgbmV3VmFsdWUsXG4gICAgICAgICAgICBvbGRWYWx1ZSxcbiAgICAgICAgICAgIG5ld1NlbGVjdGlvbixcbiAgICAgICAgICAgIG9sZFNlbGVjdGlvbixcbiAgICAgICAgICAgIGFkZGVkLFxuICAgICAgICAgICAgcmVtb3ZlZCxcbiAgICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgICAgb3duZXI6IHRoaXMsXG4gICAgICAgICAgICBkaXNwbGF5VGV4dCxcbiAgICAgICAgICAgIGNhbmNlbDogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2luZy5lbWl0KGFyZ3MpO1xuICAgICAgICBpZiAoIWFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0X2l0ZW1zKHRoaXMuaWQsIGFyZ3MubmV3VmFsdWUsIHRydWUpO1xuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBhcmdzLm5ld1ZhbHVlO1xuICAgICAgICAgICAgaWYgKGRpc3BsYXlUZXh0ICE9PSBhcmdzLmRpc3BsYXlUZXh0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGlzcGxheVZhbHVlID0gdGhpcy5fZGlzcGxheVRleHQgPSBhcmdzLmRpc3BsYXlUZXh0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kaXNwbGF5VmFsdWUgPSB0aGlzLmNyZWF0ZURpc3BsYXlUZXh0KHRoaXMuc2VsZWN0aW9uLCBhcmdzLm9sZFNlbGVjdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKGFyZ3MubmV3VmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNSZW1vdGUpIHtcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJSZW1vdGVFbnRyaWVzKGRpZmZJblNldHMoc2VsZWN0aW9uLCBjdXJyZW50U2VsZWN0aW9uKSwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNyZWF0ZURpc3BsYXlUZXh0KG5ld1NlbGVjdGlvbjogYW55W10sIG9sZFNlbGVjdGlvbjogYW55W10pIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy52YWx1ZUtleSA/IG5ld1NlbGVjdGlvbi5tYXAoaXRlbSA9PiBpdGVtW3RoaXMudmFsdWVLZXldKSA6IG5ld1NlbGVjdGlvbjtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNSZW1vdGVcbiAgICAgICAgICAgID8gdGhpcy5nZXRSZW1vdGVTZWxlY3Rpb24oc2VsZWN0aW9uLCBvbGRTZWxlY3Rpb24pXG4gICAgICAgICAgICA6IHRoaXMuY29uY2F0RGlzcGxheVRleHQobmV3U2VsZWN0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogUmV0dXJucyBhIHN0cmluZyB0aGF0IHNob3VsZCBiZSBwb3B1bGF0ZWQgaW4gdGhlIGNvbWJvJ3MgdGV4dCBib3ggKi9cbiAgICBwcml2YXRlIGNvbmNhdERpc3BsYXlUZXh0KHNlbGVjdGlvbjogYW55W10pOiBzdHJpbmcge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZGlzcGxheUtleSAhPT0gbnVsbCAmJiB0aGlzLmRpc3BsYXlLZXkgIT09IHVuZGVmaW5lZCA/XG4gICAgICAgICAgICBzZWxlY3Rpb24ubWFwKGVudHJ5ID0+IGVudHJ5W3RoaXMuZGlzcGxheUtleV0pLmpvaW4oJywgJykgOlxuICAgICAgICAgICAgc2VsZWN0aW9uLmpvaW4oJywgJyk7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG59XG4iLCI8aWd4LWlucHV0LWdyb3VwICNpbnB1dEdyb3VwIFtkaXNwbGF5RGVuc2l0eV09XCJkaXNwbGF5RGVuc2l0eVwiIFt0eXBlXT1cInR5cGVcIiAoY2xpY2spPVwib25DbGljaygkZXZlbnQpXCI+XG4gICAgPG5nLWNvbnRhaW5lciBuZ1Byb2plY3RBcz1cIltpZ3hMYWJlbF1cIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2lneExhYmVsXVwiPjwvbmctY29udGVudD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyIG5nUHJvamVjdEFzPVwiaWd4LXByZWZpeFwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJpZ3gtcHJlZml4XCI+PC9uZy1jb250ZW50PlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgbmdQcm9qZWN0QXM9XCJpZ3gtaGludCwgW2lneEhpbnRdXCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImlneC1oaW50LCBbaWd4SGludF1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPGlucHV0IGlneElucHV0ICNjb21ib0lucHV0IG5hbWU9XCJjb21ib0lucHV0XCIgdHlwZT1cInRleHRcIiBbdmFsdWVdPVwiZGlzcGxheVZhbHVlXCIgcmVhZG9ubHlcbiAgICAgICAgICAgIFthdHRyLnBsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIHJvbGU9XCJjb21ib2JveFwiIGFyaWEtaGFzcG9wdXA9XCJsaXN0Ym94XCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiIWRyb3Bkb3duLmNvbGxhcHNlZFwiIFthdHRyLmFyaWEtY29udHJvbHNdPVwiZHJvcGRvd24ubGlzdElkXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJhcmlhTGFiZWxsZWRCeSB8fCBsYWJlbD8uaWQgfHwgcGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgKGJsdXIpPVwib25CbHVyKClcIlxuICAgICAgICAgICAgKGZvY3VzKT1cIm9uRm9jdXMoKVwiIC8+XG4gICAgPG5nLWNvbnRhaW5lciBuZ1Byb2plY3RBcz1cImlneC1zdWZmaXhcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiaWd4LXN1ZmZpeFwiPjwvbmctY29udGVudD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8aWd4LXN1ZmZpeCAqbmdJZj1cImRpc3BsYXlWYWx1ZVwiIFthdHRyLmFyaWEtbGFiZWxdPVwicmVzb3VyY2VTdHJpbmdzLmlneF9jb21ib19jbGVhckl0ZW1zX3BsYWNlaG9sZGVyXCIgY2xhc3M9XCJpZ3gtY29tYm9fX2NsZWFyLWJ1dHRvblwiXG4gICAgICAgIChjbGljayk9XCJoYW5kbGVDbGVhckl0ZW1zKCRldmVudClcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNsZWFySWNvblRlbXBsYXRlXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2xlYXJJY29uVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxpZ3gtaWNvbiAqbmdJZj1cIiFjbGVhckljb25UZW1wbGF0ZVwiPlxuICAgICAgICAgICAge3sgY2xlYXJJY29uIH19XG4gICAgICAgIDwvaWd4LWljb24+XG4gICAgPC9pZ3gtc3VmZml4PlxuICAgIDxpZ3gtc3VmZml4IGNsYXNzPVwiaWd4LWNvbWJvX190b2dnbGUtYnV0dG9uXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0b2dnbGVJY29uVGVtcGxhdGVcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0b2dnbGVJY29uVGVtcGxhdGU7IGNvbnRleHQ6IHskaW1wbGljaXQ6IGNvbGxhcHNlZH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxpZ3gtaWNvbiAqbmdJZj1cIiF0b2dnbGVJY29uVGVtcGxhdGVcIj5cbiAgICAgICAgICAgIHt7IHRvZ2dsZUljb24gfX1cbiAgICAgICAgPC9pZ3gtaWNvbj5cbiAgICA8L2lneC1zdWZmaXg+XG48L2lneC1pbnB1dC1ncm91cD5cbjxpZ3gtY29tYm8tZHJvcC1kb3duICNpZ3hDb21ib0Ryb3BEb3duIGNsYXNzPVwiaWd4LWNvbWJvX19kcm9wLWRvd25cIiBbZGlzcGxheURlbnNpdHldPVwiZGlzcGxheURlbnNpdHlcIlxuICAgIFtsYWJlbGxlZEJ5XT1cImFyaWFMYWJlbGxlZEJ5IHx8IGxhYmVsPy5pZCB8fCBwbGFjZWhvbGRlciB8fCAnJ1wiXG4gICAgW3dpZHRoXT1cIml0ZW1zV2lkdGggfHwgJzEwMCUnXCIgKG9wZW5pbmcpPVwiaGFuZGxlT3BlbmluZygkZXZlbnQpXCIgKGNsb3NpbmcpPVwiaGFuZGxlQ2xvc2luZygkZXZlbnQpXCJcbiAgICAob3BlbmVkKT1cImhhbmRsZU9wZW5lZCgpXCIgKGNsb3NlZCk9XCJoYW5kbGVDbG9zZWQoKVwiPlxuICAgIDxkaXYgY2xhc3M9XCJpZ3gtY29tYm9fX3NlYXJjaFwiPlxuICAgICAgICA8aWd4LWlucHV0LWdyb3VwICpuZ0lmPVwiZGlzcGxheVNlYXJjaElucHV0XCIgW2Rpc3BsYXlEZW5zaXR5XT1cImRpc3BsYXlEZW5zaXR5XCIgdGhlbWU9XCJtYXRlcmlhbFwiID5cbiAgICAgICAgICAgIDxpbnB1dCBpZ3hJbnB1dCAjc2VhcmNoSW5wdXQgbmFtZT1cInNlYXJjaElucHV0XCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoVmFsdWVcIiAobmdNb2RlbENoYW5nZSk9XCJoYW5kbGVJbnB1dENoYW5nZSgkZXZlbnQpXCIgKGtleXVwKT1cImhhbmRsZUtleVVwKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImhhbmRsZUtleURvd24oJGV2ZW50KVwiIChmb2N1cyk9XCJkcm9wZG93bi5vbkJsdXIoJGV2ZW50KVwiIFthdHRyLnBsYWNlaG9sZGVyXT1cInNlYXJjaFBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgICAgICBhcmlhLWF1dG9jb21wbGV0ZT1cImxpc3RcIiByb2xlPVwic2VhcmNoYm94XCIgYXJpYS1sYWJlbD1cInNlYXJjaFwiLz5cbiAgICAgICAgICAgIDxpZ3gtc3VmZml4ICpuZ0lmPVwic2hvd1NlYXJjaENhc2VJY29uXCIgKGNsaWNrKT1cInRvZ2dsZUNhc2VTZW5zaXRpdmUoKVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIFtuZ0NsYXNzXT1cImZpbHRlcmluZ09wdGlvbnMuY2FzZVNlbnNpdGl2ZT8gJ2lneC1jb21ib19fY2FzZS1pY29uLS1hY3RpdmUnIDogJ2lneC1jb21ib19fY2FzZS1pY29uJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8aWd4LWljb24gZmFtaWx5PVwiaW14LWljb25zXCIgbmFtZT1cImNhc2Utc2Vuc2l0aXZlXCIgW2FjdGl2ZV09XCJmaWx0ZXJpbmdPcHRpb25zLmNhc2VTZW5zaXRpdmVcIj48L2lneC1pY29uPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvaWd4LXN1ZmZpeD5cbiAgICAgICAgPC9pZ3gtaW5wdXQtZ3JvdXA+XG4gICAgPC9kaXY+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlclRlbXBsYXRlXCI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPGRpdiAjZHJvcGRvd25JdGVtQ29udGFpbmVyIGNsYXNzPVwiaWd4LWNvbWJvX19jb250ZW50XCIgW3N0eWxlLm92ZXJmbG93XT1cIidoaWRkZW4nXCJcbiAgICAgICAgW3N0eWxlLm1heEhlaWdodC5yZW1dPVwiaXRlbXNNYXhIZWlnaHRJblJlbVwiIFtpZ3hEcm9wRG93bkl0ZW1OYXZpZ2F0aW9uXT1cImRyb3Bkb3duXCIgKGZvY3VzKT1cImRyb3Bkb3duLm9uRm9jdXMoKVwiXG4gICAgICAgIFt0YWJpbmRleF09XCJkcm9wZG93bi5jb2xsYXBzZWQgPyAtMSA6IDBcIiBbYXR0ci5pZF09XCJkcm9wZG93bi5pZFwiIGFyaWEtbXVsdGlzZWxlY3RhYmxlPVwidHJ1ZVwiXG4gICAgICAgIFthdHRyLmFyaWEtYWN0aXZlZGVzY2VuZGFudF09XCJhY3RpdmVEZXNjZW5kYW50XCI+XG4gICAgICAgIDxpZ3gtY29tYm8taXRlbSBbaXRlbUhlaWdodF09XCJpdGVtSGVpZ2h0XCIgKmlneEZvcj1cImxldCBpdGVtIG9mIGRhdGFcbiAgICAgICAgICAgIHwgY29tYm9GaWx0ZXJpbmc6ZmlsdGVyVmFsdWU6ZGlzcGxheUtleTpmaWx0ZXJpbmdPcHRpb25zOmZpbHRlckZ1bmN0aW9uXG4gICAgICAgICAgICB8IGNvbWJvR3JvdXBpbmc6Z3JvdXBLZXk6dmFsdWVLZXk6Z3JvdXBTb3J0aW5nRGlyZWN0aW9uOmNvbXBhcmVDb2xsYXRvcjtcbiAgICAgICAgICAgIGluZGV4IGFzIHJvd0luZGV4OyBjb250YWluZXJTaXplOiBpdGVtc01heEhlaWdodDsgc2Nyb2xsT3JpZW50YXRpb246ICd2ZXJ0aWNhbCc7IGl0ZW1TaXplOiBpdGVtSGVpZ2h0XCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJpdGVtXCIgW2lzSGVhZGVyXT1cIml0ZW0/LmlzSGVhZGVyXCIgW2luZGV4XT1cInJvd0luZGV4XCIgW3JvbGVdPVwiaXRlbT8uaXNIZWFkZXI/ICdncm91cCcgOiAnb3B0aW9uJ1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0/LmlzSGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlckl0ZW1UZW1wbGF0ZSA/IGhlYWRlckl0ZW1UZW1wbGF0ZSA6IGhlYWRlckl0ZW1CYXNlO1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7JGltcGxpY2l0OiBpdGVtLCBkYXRhOiBkYXRhLCB2YWx1ZUtleTogdmFsdWVLZXksIGdyb3VwS2V5OiBncm91cEtleSwgZGlzcGxheUtleTogZGlzcGxheUtleX1cIj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPCEtLSBpZiBpdGVtIGlzICdudWxsJyBpdCBzaG91bGQgYmUgZGlzcGxheWVkIGFuZCAhIShpdGVtPy5pc0hlYWRlcikgd291bGQgcmVzb2x2ZSBpdCB0byAnZmFsc2UnIGFuZCBub3QgZGlzcGxheSBpdCAtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXRlbT8uaXNIZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICNsaXN0SXRlbVxuICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlOyBjb250ZXh0OiB7JGltcGxpY2l0OiBpdGVtLCBkYXRhOiBkYXRhLCB2YWx1ZUtleTogdmFsdWVLZXksIGRpc3BsYXlLZXk6IGRpc3BsYXlLZXl9O1wiPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvaWd4LWNvbWJvLWl0ZW0+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImlneC1jb21ib19fYWRkXCIgKm5nSWY9XCJmaWx0ZXJlZERhdGEubGVuZ3RoID09PSAwIHx8IGlzQWRkQnV0dG9uVmlzaWJsZSgpXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtY29tYm9fX2VtcHR5XCIgKm5nSWY9XCJmaWx0ZXJlZERhdGEubGVuZ3RoID09PSAwXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZW1wdHlUZW1wbGF0ZSA/IGVtcHR5VGVtcGxhdGUgOiBlbXB0eVwiPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8aWd4LWNvbWJvLWFkZC1pdGVtIFtpdGVtSGVpZ2h0XT1cIml0ZW1IZWlnaHRcIiAqbmdJZj1cImlzQWRkQnV0dG9uVmlzaWJsZSgpXCJcbiAgICAgICAgICAgIFt0YWJpbmRleF09XCJkcm9wZG93bi5jb2xsYXBzZWQgPyAtMSA6IGN1c3RvbVZhbHVlRmxhZyA/IDEgOiAtMVwiIGNsYXNzPVwiaWd4LWNvbWJvX19hZGQtaXRlbVwiIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJyZXNvdXJjZVN0cmluZ3MuaWd4X2NvbWJvX2FkZEN1c3RvbVZhbHVlc19wbGFjZWhvbGRlclwiIFtpbmRleF09XCJ2aXJ0dWFsU2Nyb2xsQ29udGFpbmVyLmlneEZvck9mLmxlbmd0aFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImFkZEl0ZW1UZW1wbGF0ZSA/IGFkZEl0ZW1UZW1wbGF0ZSA6IGFkZEl0ZW1EZWZhdWx0XCI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9pZ3gtY29tYm8tYWRkLWl0ZW0+XG4gICAgPC9kaXY+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZvb3RlclRlbXBsYXRlXCI+XG4gICAgPC9uZy1jb250YWluZXI+XG48L2lneC1jb21iby1kcm9wLWRvd24+XG48bmctdGVtcGxhdGUgI2NvbXBsZXggbGV0LWRpc3BsYXkgbGV0LWRhdGE9XCJkYXRhXCIgbGV0LWtleT1cImRpc3BsYXlLZXlcIj5cbiAgICB7e2Rpc3BsYXlba2V5XX19XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNwcmltaXRpdmUgbGV0LWRpc3BsYXk+XG4gICAge3tkaXNwbGF5fX1cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2VtcHR5PlxuICAgIDxzcGFuPnt7cmVzb3VyY2VTdHJpbmdzLmlneF9jb21ib19lbXB0eV9tZXNzYWdlfX08L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNhZGRJdGVtRGVmYXVsdCBsZXQtY29udHJvbD5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZ3hCdXR0b249XCJmbGF0XCIgaWd4UmlwcGxlPnt7IHJlc291cmNlU3RyaW5ncy5pZ3hfY29tYm9fYWRkQ3VzdG9tVmFsdWVzX3BsYWNlaG9sZGVyIH19PC9idXR0b24+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNoZWFkZXJJdGVtQmFzZSBsZXQtaXRlbSBsZXQta2V5PVwidmFsdWVLZXlcIiBsZXQtZ3JvdXBLZXk9XCJncm91cEtleVwiPlxuICAgIHt7IGl0ZW1ba2V5XSB9fVxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
431
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2NvbWJvL2NvbWJvLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9jb21iby9jb21iby5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xFLE9BQU8sRUFDK0IsU0FBUyxFQUMzQyxRQUFRLEVBQUUsTUFBTSxFQUFZLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQVcsZ0JBQWdCLEVBQzlHLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBd0IsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJdEYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLDBCQUEwQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDL0csT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ25GLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBRTFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQy9ELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxvQkFBb0IsRUFB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Qjt3QkFDbEIsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxtQkFBbUIsRUFBRTt3QkFDaEUsRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxtQkFBbUIsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO3FCQUM5RSxjQUNXLElBQUksV0FDUDt3QkFDTCxJQUFJO3dCQUNKLGdCQUFnQjt3QkFDaEIsT0FBTzt3QkFDUCxXQUFXO3dCQUNYLHNCQUFzQjt3QkFDdEIsaUJBQWlCO3dCQUNqQixrQkFBa0I7d0JBQ2xCLGdCQUFnQjt3QkFDaEIseUJBQXlCO3dCQUN6QixrQ0FBa0M7d0JBQ2xDLGlCQUFpQjt3QkFDakIscUJBQXFCO3dCQUNyQix3QkFBd0I7d0JBQ3hCLGtCQUFrQjt3QkFDbEIsa0JBQWtCO3dCQUNsQixxQkFBcUI7d0JBQ3JCLG9CQUFvQjtxQkFDdkI7OzBCQWlGSSxRQUFROzswQkFBSSxNQUFNOzJCQUFDLG1CQUFtQjs7MEJBQ3RDLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsb0JBQW9COzswQkFDdkMsUUFBUTt5Q0ExRU4sZUFBZTtzQkFEckIsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFTM0IsVUFBVTtzQkFEcEIsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFzQi9CLGlCQUFpQjtzQkFEdkIsS0FBSztnQkFXQyxpQkFBaUI7c0JBRHZCLE1BQU07Z0JBS0EsUUFBUTtzQkFEZCxTQUFTO3VCQUFDLHlCQUF5QixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkF1Qy9DLFdBQVc7c0JBRmpCLFlBQVk7dUJBQUMsbUJBQW1CLEVBQUUsQ0FBQyxRQUFRLENBQUM7O3NCQUM1QyxZQUFZO3VCQUFDLHVCQUF1QixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdDbGFzcywgTmdJZiwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uSW5pdCwgT25EZXN0cm95LFxuICAgIE9wdGlvbmFsLCBJbmplY3QsIEluamVjdG9yLCBWaWV3Q2hpbGQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBEb0NoZWNrLCBib29sZWFuQXR0cmlidXRlXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybXNNb2R1bGUsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBJZ3hTZWxlY3Rpb25BUElTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9zZWxlY3Rpb24nO1xuaW1wb3J0IHsgSUJhc2VFdmVudEFyZ3MsIElCYXNlQ2FuY2VsYWJsZUV2ZW50QXJncywgQ2FuY2VsYWJsZUV2ZW50QXJncyB9IGZyb20gJy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgSWd4U3RyaW5nRmlsdGVyaW5nT3BlcmFuZCwgSWd4Qm9vbGVhbkZpbHRlcmluZ09wZXJhbmQgfSBmcm9tICcuLi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLWNvbmRpdGlvbic7XG5pbXBvcnQgeyBGaWx0ZXJpbmdMb2dpYyB9IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9maWx0ZXJpbmctZXhwcmVzc2lvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSWd4Rm9yT2ZEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2Zvci1vZi9mb3Jfb2YuZGlyZWN0aXZlJztcbmltcG9ydCB7IElneEljb25TZXJ2aWNlIH0gZnJvbSAnLi4vaWNvbi9pY29uLnNlcnZpY2UnO1xuaW1wb3J0IHsgSWd4UmlwcGxlRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9yaXBwbGUvcmlwcGxlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hCdXR0b25EaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2J1dHRvbi9idXR0b24uZGlyZWN0aXZlJztcbmltcG9ydCB7IElneElucHV0R3JvdXBDb21wb25lbnQgfSBmcm9tICcuLi9pbnB1dC1ncm91cC9pbnB1dC1ncm91cC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4Q29tYm9JdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9jb21iby1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hDb21ib0Ryb3BEb3duQ29tcG9uZW50IH0gZnJvbSAnLi9jb21iby1kcm9wZG93bi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4Q29tYm9GaWx0ZXJpbmdQaXBlLCBJZ3hDb21ib0dyb3VwaW5nUGlwZSB9IGZyb20gJy4vY29tYm8ucGlwZXMnO1xuaW1wb3J0IHsgRGlzcGxheURlbnNpdHlUb2tlbiwgSURpc3BsYXlEZW5zaXR5T3B0aW9ucyB9IGZyb20gJy4uL2NvcmUvZGVuc2l0eSc7XG5pbXBvcnQgeyBJR1hfQ09NQk9fQ09NUE9ORU5ULCBJZ3hDb21ib0Jhc2VEaXJlY3RpdmUgfSBmcm9tICcuL2NvbWJvLmNvbW1vbic7XG5pbXBvcnQgeyBJZ3hDb21ib0FkZEl0ZW1Db21wb25lbnQgfSBmcm9tICcuL2NvbWJvLWFkZC1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hDb21ib0FQSVNlcnZpY2UgfSBmcm9tICcuL2NvbWJvLmFwaSc7XG5pbXBvcnQgeyBFZGl0b3JQcm92aWRlciB9IGZyb20gJy4uL2NvcmUvZWRpdC1wcm92aWRlcic7XG5pbXBvcnQgeyBJZ3hJbnB1dEdyb3VwVHlwZSwgSUdYX0lOUFVUX0dST1VQX1RZUEUgfSBmcm9tICcuLi9pbnB1dC1ncm91cC9wdWJsaWNfYXBpJztcbmltcG9ydCB7IElneERyb3BEb3duSXRlbU5hdmlnYXRpb25EaXJlY3RpdmUgfSBmcm9tICcuLi9kcm9wLWRvd24vZHJvcC1kb3duLW5hdmlnYXRpb24uZGlyZWN0aXZlJztcbmltcG9ydCB7IElneEljb25Db21wb25lbnQgfSBmcm9tICcuLi9pY29uL2ljb24uY29tcG9uZW50JztcbmltcG9ydCB7IElneFN1ZmZpeERpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvc3VmZml4L3N1ZmZpeC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4SW5wdXREaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2lucHV0L2lucHV0LmRpcmVjdGl2ZSc7XG5cbi8qKiBFdmVudCBlbWl0dGVkIHdoZW4gYW4gaWd4LWNvbWJvJ3Mgc2VsZWN0aW9uIGlzIGNoYW5naW5nICovXG5leHBvcnQgaW50ZXJmYWNlIElDb21ib1NlbGVjdGlvbkNoYW5naW5nRXZlbnRBcmdzIGV4dGVuZHMgSUJhc2VDYW5jZWxhYmxlRXZlbnRBcmdzIHtcbiAgICAvKiogQW4gYXJyYXkgY29udGFpbmluZyB0aGUgdmFsdWVzIHRoYXQgYXJlIGN1cnJlbnRseSBzZWxlY3RlZCAqL1xuICAgIG9sZFZhbHVlOiBhbnlbXTtcbiAgICAvKiogQW4gYXJyYXkgY29udGFpbmluZyB0aGUgdmFsdWVzIHRoYXQgd2lsbCBiZSBzZWxlY3RlZCBhZnRlciB0aGlzIGV2ZW50ICovXG4gICAgbmV3VmFsdWU6IGFueVtdO1xuICAgIC8qKiBBbiBhcnJheSBjb250YWluaW5nIHRoZSBpdGVtcyB0aGF0IGFyZSBjdXJyZW50bHkgc2VsZWN0ZWQgKi9cbiAgICBvbGRTZWxlY3Rpb246IGFueVtdO1xuICAgIC8qKiBBbiBhcnJheSBjb250YWluaW5nIHRoZSBpdGVtcyB0aGF0IHdpbGwgYmUgc2VsZWN0ZWQgYWZ0ZXIgdGhpcyBldmVudCAqL1xuICAgIG5ld1NlbGVjdGlvbjogYW55W107XG4gICAgLyoqIEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGl0ZW1zIHRoYXQgd2lsbCBiZSBhZGRlZCB0byB0aGUgc2VsZWN0aW9uIChpZiBhbnkpICovXG4gICAgYWRkZWQ6IGFueVtdO1xuICAgIC8qKiBBbiBhcnJheSBjb250YWluaW5nIHRoZSBpdGVtcyB0aGF0IHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBzZWxlY3Rpb24gKGlmIGFueSkgKi9cbiAgICByZW1vdmVkOiBhbnlbXTtcbiAgICAvKiogVGhlIHRleHQgdGhhdCB3aWxsIGJlIGRpc3BsYXllZCBpbiB0aGUgY29tYm8gdGV4dCBib3ggKi9cbiAgICBkaXNwbGF5VGV4dDogc3RyaW5nO1xuICAgIC8qKiBUaGUgdXNlciBpbnRlcmFjdGlvbiB0aGF0IHRyaWdnZXJlZCB0aGUgc2VsZWN0aW9uIGNoYW5nZSAqL1xuICAgIGV2ZW50PzogRXZlbnQ7XG59XG5cbi8qKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIGlneC1jb21ibydzIHNlYXJjaCBpbnB1dCBjaGFuZ2VzICovXG5leHBvcnQgaW50ZXJmYWNlIElDb21ib1NlYXJjaElucHV0RXZlbnRBcmdzIGV4dGVuZHMgSUJhc2VDYW5jZWxhYmxlRXZlbnRBcmdzIHtcbiAgICAvKiogVGhlIHRleHQgdGhhdCBoYXMgYmVlbiB0eXBlZCBpbnRvIHRoZSBzZWFyY2ggaW5wdXQgKi9cbiAgICBzZWFyY2hUZXh0OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbWJvSXRlbUFkZGl0aW9uRXZlbnQgZXh0ZW5kcyBJQmFzZUV2ZW50QXJncywgQ2FuY2VsYWJsZUV2ZW50QXJncyB7XG4gICAgb2xkQ29sbGVjdGlvbjogYW55W107XG4gICAgYWRkZWRJdGVtOiBhbnk7XG4gICAgbmV3Q29sbGVjdGlvbjogYW55W107XG59XG5cbi8qKlxuICogV2hlbiBjYWxsZWQgd2l0aCBzZXRzIEEgJiBCLCByZXR1cm5zIEEgLSBCIChhcyBhcnJheSk7XG4gKlxuICogQGhpZGRlblxuICovXG5jb25zdCBkaWZmSW5TZXRzID0gKHNldDE6IFNldDxhbnk+LCBzZXQyOiBTZXQ8YW55Pik6IGFueVtdID0+IHtcbiAgICBjb25zdCByZXN1bHRzID0gW107XG4gICAgc2V0MS5mb3JFYWNoKGVudHJ5ID0+IHtcbiAgICAgICAgaWYgKCFzZXQyLmhhcyhlbnRyeSkpIHtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaChlbnRyeSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0cztcbn07XG5cbi8qKlxuICogIFJlcHJlc2VudHMgYSBkcm9wLWRvd24gbGlzdCB0aGF0IHByb3ZpZGVzIGVkaXRhYmxlIGZ1bmN0aW9uYWxpdGllcywgYWxsb3dpbmcgdXNlcnMgdG8gY2hvb3NlIGFuIG9wdGlvbiBmcm9tIGEgcHJlZGVmaW5lZCBsaXN0LlxuICpcbiAqIEBpZ3hNb2R1bGUgSWd4Q29tYm9Nb2R1bGVcbiAqIEBpZ3hUaGVtZSBpZ3gtY29tYm8tdGhlbWVcbiAqIEBpZ3hLZXl3b3JkcyBjb21ib2JveCwgY29tYm8gc2VsZWN0aW9uXG4gKiBAaWd4R3JvdXAgR3JpZHMgJiBMaXN0c1xuICpcbiAqIEByZW1hcmtzXG4gKiBJdCBwcm92aWRlcyB0aGUgYWJpbGl0eSB0byBmaWx0ZXIgaXRlbXMgYXMgd2VsbCBhcyBwZXJmb3JtIHNlbGVjdGlvbiB3aXRoIHRoZSBwcm92aWRlZCBkYXRhLlxuICogQWRkaXRpb25hbGx5LCBpdCBleHBvc2VzIGtleWJvYXJkIG5hdmlnYXRpb24gYW5kIGN1c3RvbSBzdHlsaW5nIGNhcGFiaWxpdGllcy5cbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8aWd4LWNvbWJvIFtpdGVtc01heEhlaWdodF09XCIyNTBcIiBbZGF0YV09XCJsb2NhdGlvbkRhdGFcIlxuICogIFtkaXNwbGF5S2V5XT1cIidmaWVsZCdcIiBbdmFsdWVLZXldPVwiJ2ZpZWxkJ1wiXG4gKiAgcGxhY2Vob2xkZXI9XCJMb2NhdGlvbihzKVwiIHNlYXJjaFBsYWNlaG9sZGVyPVwiU2VhcmNoLi4uXCI+XG4gKiA8L2lneC1jb21ibz5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2lneC1jb21ibycsXG4gICAgdGVtcGxhdGVVcmw6ICdjb21iby5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIElneENvbWJvQVBJU2VydmljZSxcbiAgICAgICAgeyBwcm92aWRlOiBJR1hfQ09NQk9fQ09NUE9ORU5ULCB1c2VFeGlzdGluZzogSWd4Q29tYm9Db21wb25lbnQgfSxcbiAgICAgICAgeyBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUiwgdXNlRXhpc3Rpbmc6IElneENvbWJvQ29tcG9uZW50LCBtdWx0aTogdHJ1ZSB9XG4gICAgXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgTmdJZixcbiAgICAgICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICAgICAgTmdDbGFzcyxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIElneElucHV0R3JvdXBDb21wb25lbnQsXG4gICAgICAgIElneElucHV0RGlyZWN0aXZlLFxuICAgICAgICBJZ3hTdWZmaXhEaXJlY3RpdmUsXG4gICAgICAgIElneEljb25Db21wb25lbnQsXG4gICAgICAgIElneENvbWJvRHJvcERvd25Db21wb25lbnQsXG4gICAgICAgIElneERyb3BEb3duSXRlbU5hdmlnYXRpb25EaXJlY3RpdmUsXG4gICAgICAgIElneEZvck9mRGlyZWN0aXZlLFxuICAgICAgICBJZ3hDb21ib0l0ZW1Db21wb25lbnQsXG4gICAgICAgIElneENvbWJvQWRkSXRlbUNvbXBvbmVudCxcbiAgICAgICAgSWd4QnV0dG9uRGlyZWN0aXZlLFxuICAgICAgICBJZ3hSaXBwbGVEaXJlY3RpdmUsXG4gICAgICAgIElneENvbWJvRmlsdGVyaW5nUGlwZSxcbiAgICAgICAgSWd4Q29tYm9Hcm91cGluZ1BpcGVcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIElneENvbWJvQ29tcG9uZW50IGV4dGVuZHMgSWd4Q29tYm9CYXNlRGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCxcbiAgICBPbkRlc3Ryb3ksIERvQ2hlY2ssIEVkaXRvclByb3ZpZGVyIHtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBjb21ibydzIHNlYXJjaCBib3ggc2hvdWxkIGJlIGZvY3VzZWQgYWZ0ZXIgdGhlIGRyb3Bkb3duIGlzIG9wZW5lZC5cbiAgICAgKiBXaGVuIGBmYWxzZWAsIHRoZSBjb21ibydzIGxpc3QgaXRlbSBjb250YWluZXIgd2lsbCBiZSBmb2N1c2VkIGluc3RlYWRcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBwdWJsaWMgYXV0b0ZvY3VzU2VhcmNoID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMvZGlzYWJsZXMgZmlsdGVyaW5nIGluIHRoZSBsaXN0LiBUaGUgZGVmYXVsdCBpcyBgdHJ1ZWAuXG4gICAgICpcbiAgICAgKiBAZGVwcmVjYXRlZCBpbiB2ZXJzaW9uIDE0LjAuMC4gVXNlIHRoZSBgZmlsdGVyaW5nT3B0aW9ucy5maWx0ZXJhYmxlYCBwcm9wZXJ0eSBpbnN0ZWFkLlxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHB1YmxpYyBnZXQgZmlsdGVyYWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyaW5nT3B0aW9ucy5maWx0ZXJhYmxlO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IGZpbHRlcmFibGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5maWx0ZXJpbmdPcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5maWx0ZXJpbmdPcHRpb25zLCB7IGZpbHRlcmFibGU6IHZhbHVlIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlZmluZXMgdGhlIHBsYWNlaG9sZGVyIHZhbHVlIGZvciB0aGUgY29tYm8gZHJvcGRvd24gc2VhcmNoIGZpZWxkXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogLy8gZ2V0XG4gICAgICogbGV0IG15Q29tYm9TZWFyY2hQbGFjZWhvbGRlciA9IHRoaXMuY29tYm8uc2VhcmNoUGxhY2Vob2xkZXI7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPCEtLXNldC0tPlxuICAgICAqIDxpZ3gtY29tYm8gW3NlYXJjaFBsYWNlaG9sZGVyXT0nbmV3UGxhY2VIb2xkZXInPjwvaWd4LWNvbWJvPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNlYXJjaFBsYWNlaG9sZGVyID0gJ0VudGVyIGEgU2VhcmNoIFRlcm0nO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIGl0ZW0gc2VsZWN0aW9uIGlzIGNoYW5naW5nLCBiZWZvcmUgdGhlIHNlbGVjdGlvbiBjb21wbGV0ZXNcbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNvbWJvIChzZWxlY3Rpb25DaGFuZ2luZyk9J2hhbmRsZVNlbGVjdGlvbigpJz48L2lneC1jb21ibz5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgc2VsZWN0aW9uQ2hhbmdpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPElDb21ib1NlbGVjdGlvbkNoYW5naW5nRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQFZpZXdDaGlsZChJZ3hDb21ib0Ryb3BEb3duQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIHB1YmxpYyBkcm9wZG93bjogSWd4Q29tYm9Ecm9wRG93bkNvbXBvbmVudDtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgZmlsdGVyZWREYXRhKCk6IGFueVtdIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbHRlcmluZ09wdGlvbnMuZmlsdGVyYWJsZSA/IHRoaXMuX2ZpbHRlcmVkRGF0YSA6IHRoaXMuZGF0YTtcbiAgICB9XG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHNldCBmaWx0ZXJlZERhdGEodmFsOiBhbnlbXSB8IG51bGwpIHtcbiAgICAgICAgdGhpcy5fZmlsdGVyZWREYXRhID0gdGhpcy5ncm91cEtleSA/ICh2YWwgfHwgW10pLmZpbHRlcigoZSkgPT4gZS5pc0hlYWRlciAhPT0gdHJ1ZSkgOiB2YWw7XG4gICAgICAgIHRoaXMuY2hlY2tNYXRjaCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGZpbHRlcmluZ0xvZ2ljID0gRmlsdGVyaW5nTG9naWMuT3I7XG5cbiAgICBwcm90ZWN0ZWQgc3RyaW5nRmlsdGVycyA9IElneFN0cmluZ0ZpbHRlcmluZ09wZXJhbmQ7XG4gICAgcHJvdGVjdGVkIGJvb2xlYW5GaWx0ZXJzID0gSWd4Qm9vbGVhbkZpbHRlcmluZ09wZXJhbmQ7XG4gICAgcHJvdGVjdGVkIF9wcmV2SW5wdXRWYWx1ZSA9ICcnO1xuXG4gICAgcHJpdmF0ZSBfZGlzcGxheVRleHQ6IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBzZWxlY3Rpb25TZXJ2aWNlOiBJZ3hTZWxlY3Rpb25BUElTZXJ2aWNlLFxuICAgICAgICBjb21ib0FQSTogSWd4Q29tYm9BUElTZXJ2aWNlLFxuICAgICAgICBfaWNvblNlcnZpY2U6IElneEljb25TZXJ2aWNlLFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KERpc3BsYXlEZW5zaXR5VG9rZW4pIF9kaXNwbGF5RGVuc2l0eU9wdGlvbnM6IElEaXNwbGF5RGVuc2l0eU9wdGlvbnMsXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoSUdYX0lOUFVUX0dST1VQX1RZUEUpIF9pbnB1dEdyb3VwVHlwZTogSWd4SW5wdXRHcm91cFR5cGUsXG4gICAgICAgIEBPcHRpb25hbCgpIF9pbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICAgICAgc3VwZXIoZWxlbWVudFJlZiwgY2RyLCBzZWxlY3Rpb25TZXJ2aWNlLCBjb21ib0FQSSwgX2ljb25TZXJ2aWNlLCBfZGlzcGxheURlbnNpdHlPcHRpb25zLCBfaW5wdXRHcm91cFR5cGUsIF9pbmplY3Rvcik7XG4gICAgICAgIHRoaXMuY29tYm9BUEkucmVnaXN0ZXIodGhpcyk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5BcnJvd0Rvd24nLCBbJyRldmVudCddKVxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uQWx0LkFycm93RG93bicsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uQXJyb3dEb3duKGV2ZW50OiBFdmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5vcGVuKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCBkaXNwbGF5U2VhcmNoSW5wdXQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbHRlcmluZ09wdGlvbnMuZmlsdGVyYWJsZSB8fCB0aGlzLmFsbG93Q3VzdG9tVmFsdWVzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGhhbmRsZUtleVVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIC8vIFRPRE86IHVzZSBQbGF0Zm9ybVV0aWwgZm9yIGtleWJvYXJkIG5hdmlnYXRpb25cbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicgfHwgZXZlbnQua2V5ID09PSAnRG93bicpIHtcbiAgICAgICAgICAgIHRoaXMuZHJvcGRvd24uZm9jdXNlZEl0ZW0gPSB0aGlzLmRyb3Bkb3duLml0ZW1zWzBdO1xuICAgICAgICAgICAgdGhpcy5kcm9wZG93bkNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnRXNjYXBlJyB8fCBldmVudC5rZXkgPT09ICdFc2MnKSB7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgaGFuZGxlU2VsZWN0QWxsKGV2dCkge1xuICAgICAgICBpZiAoZXZ0LmNoZWNrZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0QWxsSXRlbXMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGVzZWxlY3RBbGxJdGVtcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogYW55W10pOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5maWx0ZXIoeCA9PiB4ICE9PSB1bmRlZmluZWQpIDogW107XG4gICAgICAgIGNvbnN0IG9sZFNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uO1xuICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0X2l0ZW1zKHRoaXMuaWQsIHNlbGVjdGlvbiwgdHJ1ZSk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB0aGlzLl9kaXNwbGF5VmFsdWUgPSB0aGlzLmNyZWF0ZURpc3BsYXlUZXh0KHRoaXMuc2VsZWN0aW9uLCBvbGRTZWxlY3Rpb24pO1xuICAgICAgICB0aGlzLl92YWx1ZSA9IHRoaXMudmFsdWVLZXkgPyB0aGlzLnNlbGVjdGlvbi5tYXAoaXRlbSA9PiBpdGVtW3RoaXMudmFsdWVLZXldKSA6IHRoaXMuc2VsZWN0aW9uO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBuZ0RvQ2hlY2soKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRhdGE/Lmxlbmd0aCAmJiB0aGlzLnNlbGVjdGlvbi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuX2Rpc3BsYXlWYWx1ZSA9IHRoaXMuX2Rpc3BsYXlUZXh0IHx8IHRoaXMuY3JlYXRlRGlzcGxheVRleHQodGhpcy5zZWxlY3Rpb24sIFtdKTtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gdGhpcy52YWx1ZUtleSA/IHRoaXMuc2VsZWN0aW9uLm1hcChpdGVtID0+IGl0ZW1bdGhpcy52YWx1ZUtleV0pIDogdGhpcy5zZWxlY3Rpb247XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIubmdEb0NoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRFZGl0RWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbWJvSW5wdXQubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgY29udGV4dCgpOiBhbnkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJGltcGxpY2l0OiB0aGlzXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgaGFuZGxlQ2xlYXJJdGVtcyhldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRlc2VsZWN0QWxsSXRlbXModHJ1ZSwgZXZlbnQpO1xuICAgICAgICBpZiAodGhpcy5jb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0RWRpdEVsZW1lbnQoKS5mb2N1cygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5mb2N1c1NlYXJjaElucHV0KHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlbGVjdCBkZWZpbmVkIGl0ZW1zXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmV3SXRlbXMgbmV3IGl0ZW1zIHRvIGJlIHNlbGVjdGVkXG4gICAgICogQHBhcmFtIGNsZWFyQ3VycmVudFNlbGVjdGlvbiBpZiB0cnVlIGNsZWFyIHByZXZpb3VzIHNlbGVjdGVkIGl0ZW1zXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuY29tYm8uc2VsZWN0KFtcIk5ldyBZb3JrXCIsIFwiTmV3IEplcnNleVwiXSk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHNlbGVjdChuZXdJdGVtczogQXJyYXk8YW55PiwgY2xlYXJDdXJyZW50U2VsZWN0aW9uPzogYm9vbGVhbiwgZXZlbnQ/OiBFdmVudCkge1xuICAgICAgICBpZiAobmV3SXRlbXMpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uU2VydmljZS5hZGRfaXRlbXModGhpcy5pZCwgbmV3SXRlbXMsIGNsZWFyQ3VycmVudFNlbGVjdGlvbik7XG4gICAgICAgICAgICB0aGlzLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24sIGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlc2VsZWN0IGRlZmluZWQgaXRlbXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBpdGVtcyBpdGVtcyB0byBkZXNlbGVjdGVkXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuY29tYm8uZGVzZWxlY3QoW1wiTmV3IFlvcmtcIiwgXCJOZXcgSmVyc2V5XCJdKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZGVzZWxlY3QoaXRlbXM6IEFycmF5PGFueT4sIGV2ZW50PzogRXZlbnQpIHtcbiAgICAgICAgaWYgKGl0ZW1zKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdTZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvblNlcnZpY2UuZGVsZXRlX2l0ZW1zKHRoaXMuaWQsIGl0ZW1zKTtcbiAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbiwgZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VsZWN0IGFsbCAoZmlsdGVyZWQpIGl0ZW1zXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaWdub3JlRmlsdGVyIGlmIHNldCB0byB0cnVlLCBzZWxlY3RzIGFsbCBpdGVtcywgb3RoZXJ3aXNlIHNlbGVjdHMgb25seSB0aGUgZmlsdGVyZWQgb25lcy5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5jb21iby5zZWxlY3RBbGxJdGVtcygpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBzZWxlY3RBbGxJdGVtcyhpZ25vcmVGaWx0ZXI/OiBib29sZWFuLCBldmVudD86IEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGFsbFZpc2libGUgPSB0aGlzLnNlbGVjdGlvblNlcnZpY2UuZ2V0X2FsbF9pZHMoaWdub3JlRmlsdGVyID8gdGhpcy5kYXRhIDogdGhpcy5maWx0ZXJlZERhdGEsIHRoaXMudmFsdWVLZXkpO1xuICAgICAgICBjb25zdCBuZXdTZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvblNlcnZpY2UuYWRkX2l0ZW1zKHRoaXMuaWQsIGFsbFZpc2libGUpO1xuICAgICAgICB0aGlzLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24sIGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXNlbGVjdCBhbGwgKGZpbHRlcmVkKSBpdGVtc1xuICAgICAqXG4gICAgICogQHBhcmFtIGlnbm9yZUZpbHRlciBpZiBzZXQgdG8gdHJ1ZSwgZGVzZWxlY3RzIGFsbCBpdGVtcywgb3RoZXJ3aXNlIGRlc2VsZWN0cyBvbmx5IHRoZSBmaWx0ZXJlZCBvbmVzLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmNvbWJvLmRlc2VsZWN0QWxsSXRlbXMoKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZGVzZWxlY3RBbGxJdGVtcyhpZ25vcmVGaWx0ZXI/OiBib29sZWFuLCBldmVudD86IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGxldCBuZXdTZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvblNlcnZpY2UuZ2V0X2VtcHR5KCk7XG4gICAgICAgIGlmICh0aGlzLmZpbHRlcmVkRGF0YS5sZW5ndGggIT09IHRoaXMuZGF0YS5sZW5ndGggJiYgIWlnbm9yZUZpbHRlcikge1xuICAgICAgICAgICAgbmV3U2VsZWN0aW9uID0gdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmRlbGV0ZV9pdGVtcyh0aGlzLmlkLCB0aGlzLnNlbGVjdGlvblNlcnZpY2UuZ2V0X2FsbF9pZHModGhpcy5maWx0ZXJlZERhdGEsIHRoaXMudmFsdWVLZXkpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24sIGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZWxlY3RzL0Rlc2VsZWN0cyBhIHNpbmdsZSBpdGVtXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaXRlbUlEIHRoZSBpdGVtSUQgb2YgdGhlIHNwZWNpZmljIGl0ZW1cbiAgICAgKiBAcGFyYW0gc2VsZWN0IElmIHRoZSBpdGVtIHNob3VsZCBiZSBzZWxlY3RlZCAodHJ1ZSkgb3IgZGVzZWxlY3RlZCAoZmFsc2UpXG4gICAgICpcbiAgICAgKiBXaXRob3V0IHNwZWNpZmllZCB2YWx1ZUtleTtcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5jb21iby52YWx1ZUtleSA9IG51bGw7XG4gICAgICogY29uc3QgaXRlbXM6IHsgZmllbGQ6IHN0cmluZywgcmVnaW9uOiBzdHJpbmd9W10gPSBkYXRhO1xuICAgICAqIHRoaXMuY29tYm8uc2V0U2VsZWN0ZWRJdGVtKGl0ZW1zWzBdLCB0cnVlKTtcbiAgICAgKiBgYGBcbiAgICAgKiBXaXRoIHNwZWNpZmllZCB2YWx1ZUtleTtcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5jb21iby52YWx1ZUtleSA9ICdmaWVsZCc7XG4gICAgICogY29uc3QgaXRlbXM6IHsgZmllbGQ6IHN0cmluZywgcmVnaW9uOiBzdHJpbmd9W10gPSBkYXRhO1xuICAgICAqIHRoaXMuY29tYm8uc2V0U2VsZWN0ZWRJdGVtKCdDb25uZWN0aWN1dCcsIHRydWUpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXRTZWxlY3RlZEl0ZW0oaXRlbUlEOiBhbnksIHNlbGVjdCA9IHRydWUsIGV2ZW50PzogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKGl0ZW1JRCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlbGVjdCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3QoW2l0ZW1JRF0sIGZhbHNlLCBldmVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRlc2VsZWN0KFtpdGVtSURdLCBldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgaGFuZGxlT3BlbmVkKCkge1xuICAgICAgICB0aGlzLnRyaWdnZXJDaGVjaygpO1xuXG4gICAgICAgIC8vIERpc2FibGluZyBmb2N1cyBvZiB0aGUgc2VhcmNoIGlucHV0IHNob3VsZCBoYXBwZW4gb25seSB3aGVuIGRyb3AgZG93biBvcGVucy5cbiAgICAgICAgLy8gRHVyaW5nIGtleWJvYXJkIG5hdmlnYXRpb24gaW5wdXQgc2hvdWxkIHJlY2VpdmUgZm9jdXMsIGV2ZW4gdGhlIGF1dG9Gb2N1c1NlYXJjaCBpcyBkaXNhYmxlZC5cbiAgICAgICAgLy8gVGhhdCBpcyB3aHkgaW4gc3VjaCBjYXNlcyBmb2N1c2luZyBvZiB0aGUgZHJvcGRvd25Db250YWluZXIgaGFwcGVucyBvdXRzaWRlIGZvY3VzU2VhcmNoSW5wdXQgbWV0aG9kLlxuICAgICAgICBpZiAodGhpcy5hdXRvRm9jdXNTZWFyY2gpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNTZWFyY2hJbnB1dCh0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZHJvcGRvd25Db250YWluZXIubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub3BlbmVkLmVtaXQoeyBvd25lcjogdGhpcyB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZm9jdXNTZWFyY2hJbnB1dChvcGVuaW5nPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNwbGF5U2VhcmNoSW5wdXQgJiYgdGhpcy5zZWFyY2hJbnB1dCkge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hJbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAob3BlbmluZykge1xuICAgICAgICAgICAgICAgIHRoaXMuZHJvcGRvd25Db250YWluZXIubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbWJvSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgc2V0U2VsZWN0aW9uKHNlbGVjdGlvbjogU2V0PGFueT4sIGV2ZW50PzogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY3VycmVudFNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uU2VydmljZS5nZXQodGhpcy5pZCk7XG4gICAgICAgIGNvbnN0IHJlbW92ZWQgPSB0aGlzLmNvbnZlcnRLZXlzVG9JdGVtcyhkaWZmSW5TZXRzKGN1cnJlbnRTZWxlY3Rpb24sIHNlbGVjdGlvbikpO1xuICAgICAgICBjb25zdCBhZGRlZCA9IHRoaXMuY29udmVydEtleXNUb0l0ZW1zKGRpZmZJblNldHMoc2VsZWN0aW9uLCBjdXJyZW50U2VsZWN0aW9uKSk7XG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gQXJyYXkuZnJvbShzZWxlY3Rpb24pO1xuICAgICAgICBjb25zdCBvbGRWYWx1ZSA9IEFycmF5LmZyb20oY3VycmVudFNlbGVjdGlvbiB8fCBbXSk7XG4gICAgICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IHRoaXMuY29udmVydEtleXNUb0l0ZW1zKG5ld1ZhbHVlKTtcbiAgICAgICAgY29uc3Qgb2xkU2VsZWN0aW9uID0gdGhpcy5jb252ZXJ0S2V5c1RvSXRlbXMob2xkVmFsdWUpO1xuICAgICAgICBjb25zdCBkaXNwbGF5VGV4dCA9IHRoaXMuY3JlYXRlRGlzcGxheVRleHQodGhpcy5jb252ZXJ0S2V5c1RvSXRlbXMobmV3VmFsdWUpLCBvbGRWYWx1ZSk7XG4gICAgICAgIGNvbnN0IGFyZ3M6IElDb21ib1NlbGVjdGlvbkNoYW5naW5nRXZlbnRBcmdzID0ge1xuICAgICAgICAgICAgbmV3VmFsdWUsXG4gICAgICAgICAgICBvbGRWYWx1ZSxcbiAgICAgICAgICAgIG5ld1NlbGVjdGlvbixcbiAgICAgICAgICAgIG9sZFNlbGVjdGlvbixcbiAgICAgICAgICAgIGFkZGVkLFxuICAgICAgICAgICAgcmVtb3ZlZCxcbiAgICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgICAgb3duZXI6IHRoaXMsXG4gICAgICAgICAgICBkaXNwbGF5VGV4dCxcbiAgICAgICAgICAgIGNhbmNlbDogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2luZy5lbWl0KGFyZ3MpO1xuICAgICAgICBpZiAoIWFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0X2l0ZW1zKHRoaXMuaWQsIGFyZ3MubmV3VmFsdWUsIHRydWUpO1xuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBhcmdzLm5ld1ZhbHVlO1xuICAgICAgICAgICAgaWYgKGRpc3BsYXlUZXh0ICE9PSBhcmdzLmRpc3BsYXlUZXh0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGlzcGxheVZhbHVlID0gdGhpcy5fZGlzcGxheVRleHQgPSBhcmdzLmRpc3BsYXlUZXh0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kaXNwbGF5VmFsdWUgPSB0aGlzLmNyZWF0ZURpc3BsYXlUZXh0KHRoaXMuc2VsZWN0aW9uLCBhcmdzLm9sZFNlbGVjdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKGFyZ3MubmV3VmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNSZW1vdGUpIHtcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJSZW1vdGVFbnRyaWVzKGRpZmZJblNldHMoc2VsZWN0aW9uLCBjdXJyZW50U2VsZWN0aW9uKSwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNyZWF0ZURpc3BsYXlUZXh0KG5ld1NlbGVjdGlvbjogYW55W10sIG9sZFNlbGVjdGlvbjogYW55W10pIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy52YWx1ZUtleSA/IG5ld1NlbGVjdGlvbi5tYXAoaXRlbSA9PiBpdGVtW3RoaXMudmFsdWVLZXldKSA6IG5ld1NlbGVjdGlvbjtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNSZW1vdGVcbiAgICAgICAgICAgID8gdGhpcy5nZXRSZW1vdGVTZWxlY3Rpb24oc2VsZWN0aW9uLCBvbGRTZWxlY3Rpb24pXG4gICAgICAgICAgICA6IHRoaXMuY29uY2F0RGlzcGxheVRleHQobmV3U2VsZWN0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogUmV0dXJucyBhIHN0cmluZyB0aGF0IHNob3VsZCBiZSBwb3B1bGF0ZWQgaW4gdGhlIGNvbWJvJ3MgdGV4dCBib3ggKi9cbiAgICBwcml2YXRlIGNvbmNhdERpc3BsYXlUZXh0KHNlbGVjdGlvbjogYW55W10pOiBzdHJpbmcge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZGlzcGxheUtleSAhPT0gbnVsbCAmJiB0aGlzLmRpc3BsYXlLZXkgIT09IHVuZGVmaW5lZCA/XG4gICAgICAgICAgICBzZWxlY3Rpb24ubWFwKGVudHJ5ID0+IGVudHJ5W3RoaXMuZGlzcGxheUtleV0pLmpvaW4oJywgJykgOlxuICAgICAgICAgICAgc2VsZWN0aW9uLmpvaW4oJywgJyk7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG59XG4iLCI8aWd4LWlucHV0LWdyb3VwICNpbnB1dEdyb3VwIFtkaXNwbGF5RGVuc2l0eV09XCJkaXNwbGF5RGVuc2l0eVwiIFt0eXBlXT1cInR5cGVcIiAoY2xpY2spPVwib25DbGljaygkZXZlbnQpXCI+XG4gICAgPG5nLWNvbnRhaW5lciBuZ1Byb2plY3RBcz1cIltpZ3hMYWJlbF1cIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2lneExhYmVsXVwiPjwvbmctY29udGVudD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyIG5nUHJvamVjdEFzPVwiaWd4LXByZWZpeFwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJpZ3gtcHJlZml4XCI+PC9uZy1jb250ZW50PlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgbmdQcm9qZWN0QXM9XCJpZ3gtaGludCwgW2lneEhpbnRdXCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImlneC1oaW50LCBbaWd4SGludF1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPGlucHV0IGlneElucHV0ICNjb21ib0lucHV0IG5hbWU9XCJjb21ib0lucHV0XCIgdHlwZT1cInRleHRcIiBbdmFsdWVdPVwiZGlzcGxheVZhbHVlXCIgcmVhZG9ubHlcbiAgICAgICAgICAgIFthdHRyLnBsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIHJvbGU9XCJjb21ib2JveFwiIGFyaWEtaGFzcG9wdXA9XCJsaXN0Ym94XCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiIWRyb3Bkb3duLmNvbGxhcHNlZFwiIFthdHRyLmFyaWEtY29udHJvbHNdPVwiZHJvcGRvd24ubGlzdElkXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJhcmlhTGFiZWxsZWRCeSB8fCBsYWJlbD8uaWQgfHwgcGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgKGJsdXIpPVwib25CbHVyKClcIiAvPlxuICAgIDxuZy1jb250YWluZXIgbmdQcm9qZWN0QXM9XCJpZ3gtc3VmZml4XCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImlneC1zdWZmaXhcIj48L25nLWNvbnRlbnQ+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPGlneC1zdWZmaXggKm5nSWY9XCJkaXNwbGF5VmFsdWVcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInJlc291cmNlU3RyaW5ncy5pZ3hfY29tYm9fY2xlYXJJdGVtc19wbGFjZWhvbGRlclwiIGNsYXNzPVwiaWd4LWNvbWJvX19jbGVhci1idXR0b25cIlxuICAgICAgICAoY2xpY2spPVwiaGFuZGxlQ2xlYXJJdGVtcygkZXZlbnQpXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjbGVhckljb25UZW1wbGF0ZVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNsZWFySWNvblRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8aWd4LWljb24gKm5nSWY9XCIhY2xlYXJJY29uVGVtcGxhdGVcIj5cbiAgICAgICAgICAgIHt7IGNsZWFySWNvbiB9fVxuICAgICAgICA8L2lneC1pY29uPlxuICAgIDwvaWd4LXN1ZmZpeD5cbiAgICA8aWd4LXN1ZmZpeCBjbGFzcz1cImlneC1jb21ib19fdG9nZ2xlLWJ1dHRvblwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidG9nZ2xlSWNvblRlbXBsYXRlXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidG9nZ2xlSWNvblRlbXBsYXRlOyBjb250ZXh0OiB7JGltcGxpY2l0OiBjb2xsYXBzZWR9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8aWd4LWljb24gKm5nSWY9XCIhdG9nZ2xlSWNvblRlbXBsYXRlXCI+XG4gICAgICAgICAgICB7eyB0b2dnbGVJY29uIH19XG4gICAgICAgIDwvaWd4LWljb24+XG4gICAgPC9pZ3gtc3VmZml4PlxuPC9pZ3gtaW5wdXQtZ3JvdXA+XG48aWd4LWNvbWJvLWRyb3AtZG93biAjaWd4Q29tYm9Ecm9wRG93biBjbGFzcz1cImlneC1jb21ib19fZHJvcC1kb3duXCIgW2Rpc3BsYXlEZW5zaXR5XT1cImRpc3BsYXlEZW5zaXR5XCJcbiAgICBbbGFiZWxsZWRCeV09XCJhcmlhTGFiZWxsZWRCeSB8fCBsYWJlbD8uaWQgfHwgcGxhY2Vob2xkZXIgfHwgJydcIlxuICAgIFt3aWR0aF09XCJpdGVtc1dpZHRoIHx8ICcxMDAlJ1wiIChvcGVuaW5nKT1cImhhbmRsZU9wZW5pbmcoJGV2ZW50KVwiIChjbG9zaW5nKT1cImhhbmRsZUNsb3NpbmcoJGV2ZW50KVwiXG4gICAgKG9wZW5lZCk9XCJoYW5kbGVPcGVuZWQoKVwiIChjbG9zZWQpPVwiaGFuZGxlQ2xvc2VkKClcIj5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWNvbWJvX19zZWFyY2hcIj5cbiAgICAgICAgPGlneC1pbnB1dC1ncm91cCAqbmdJZj1cImRpc3BsYXlTZWFyY2hJbnB1dFwiIFtkaXNwbGF5RGVuc2l0eV09XCJkaXNwbGF5RGVuc2l0eVwiIHRoZW1lPVwibWF0ZXJpYWxcIiA+XG4gICAgICAgICAgICA8aW5wdXQgaWd4SW5wdXQgI3NlYXJjaElucHV0IG5hbWU9XCJzZWFyY2hJbnB1dFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlYXJjaFZhbHVlXCIgKG5nTW9kZWxDaGFuZ2UpPVwiaGFuZGxlSW5wdXRDaGFuZ2UoJGV2ZW50KVwiIChrZXl1cCk9XCJoYW5kbGVLZXlVcCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJoYW5kbGVLZXlEb3duKCRldmVudClcIiAoZm9jdXMpPVwiZHJvcGRvd24ub25CbHVyKCRldmVudClcIiBbYXR0ci5wbGFjZWhvbGRlcl09XCJzZWFyY2hQbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgICAgYXJpYS1hdXRvY29tcGxldGU9XCJsaXN0XCIgcm9sZT1cInNlYXJjaGJveFwiIGFyaWEtbGFiZWw9XCJzZWFyY2hcIi8+XG4gICAgICAgICAgICA8aWd4LXN1ZmZpeCAqbmdJZj1cInNob3dTZWFyY2hDYXNlSWNvblwiIChjbGljayk9XCJ0b2dnbGVDYXNlU2Vuc2l0aXZlKClcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBbbmdDbGFzc109XCJmaWx0ZXJpbmdPcHRpb25zLmNhc2VTZW5zaXRpdmU/ICdpZ3gtY29tYm9fX2Nhc2UtaWNvbi0tYWN0aXZlJyA6ICdpZ3gtY29tYm9fX2Nhc2UtaWNvbidcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlneC1pY29uIGZhbWlseT1cImlteC1pY29uc1wiIG5hbWU9XCJjYXNlLXNlbnNpdGl2ZVwiIFthY3RpdmVdPVwiZmlsdGVyaW5nT3B0aW9ucy5jYXNlU2Vuc2l0aXZlXCI+PC9pZ3gtaWNvbj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2lneC1zdWZmaXg+XG4gICAgICAgIDwvaWd4LWlucHV0LWdyb3VwPlxuICAgIDwvZGl2PlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJUZW1wbGF0ZVwiPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxkaXYgI2Ryb3Bkb3duSXRlbUNvbnRhaW5lciBjbGFzcz1cImlneC1jb21ib19fY29udGVudFwiIFtzdHlsZS5vdmVyZmxvd109XCInaGlkZGVuJ1wiXG4gICAgICAgIFtzdHlsZS5tYXhIZWlnaHQucmVtXT1cIml0ZW1zTWF4SGVpZ2h0SW5SZW1cIiBbaWd4RHJvcERvd25JdGVtTmF2aWdhdGlvbl09XCJkcm9wZG93blwiIChmb2N1cyk9XCJkcm9wZG93bi5vbkZvY3VzKClcIlxuICAgICAgICBbdGFiaW5kZXhdPVwiZHJvcGRvd24uY29sbGFwc2VkID8gLTEgOiAwXCIgW2F0dHIuaWRdPVwiZHJvcGRvd24uaWRcIiBhcmlhLW11bHRpc2VsZWN0YWJsZT1cInRydWVcIlxuICAgICAgICBbYXR0ci5hcmlhLWFjdGl2ZWRlc2NlbmRhbnRdPVwiYWN0aXZlRGVzY2VuZGFudFwiPlxuICAgICAgICA8aWd4LWNvbWJvLWl0ZW0gW2l0ZW1IZWlnaHRdPVwiaXRlbUhlaWdodFwiICppZ3hGb3I9XCJsZXQgaXRlbSBvZiBkYXRhXG4gICAgICAgICAgICB8IGNvbWJvRmlsdGVyaW5nOmZpbHRlclZhbHVlOmRpc3BsYXlLZXk6ZmlsdGVyaW5nT3B0aW9uczpmaWx0ZXJGdW5jdGlvblxuICAgICAgICAgICAgfCBjb21ib0dyb3VwaW5nOmdyb3VwS2V5OnZhbHVlS2V5Omdyb3VwU29ydGluZ0RpcmVjdGlvbjpjb21wYXJlQ29sbGF0b3I7XG4gICAgICAgICAgICBpbmRleCBhcyByb3dJbmRleDsgY29udGFpbmVyU2l6ZTogaXRlbXNNYXhIZWlnaHQ7IHNjcm9sbE9yaWVudGF0aW9uOiAndmVydGljYWwnOyBpdGVtU2l6ZTogaXRlbUhlaWdodFwiXG4gICAgICAgICAgICBbdmFsdWVdPVwiaXRlbVwiIFtpc0hlYWRlcl09XCJpdGVtPy5pc0hlYWRlclwiIFtpbmRleF09XCJyb3dJbmRleFwiIFtyb2xlXT1cIml0ZW0/LmlzSGVhZGVyPyAnZ3JvdXAnIDogJ29wdGlvbidcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtPy5pc0hlYWRlclwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJJdGVtVGVtcGxhdGUgPyBoZWFkZXJJdGVtVGVtcGxhdGUgOiBoZWFkZXJJdGVtQmFzZTtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDogeyRpbXBsaWNpdDogaXRlbSwgZGF0YTogZGF0YSwgdmFsdWVLZXk6IHZhbHVlS2V5LCBncm91cEtleTogZ3JvdXBLZXksIGRpc3BsYXlLZXk6IGRpc3BsYXlLZXl9XCI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwhLS0gaWYgaXRlbSBpcyAnbnVsbCcgaXQgc2hvdWxkIGJlIGRpc3BsYXllZCBhbmQgISEoaXRlbT8uaXNIZWFkZXIpIHdvdWxkIHJlc29sdmUgaXQgdG8gJ2ZhbHNlJyBhbmQgbm90IGRpc3BsYXkgaXQgLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWl0ZW0/LmlzSGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAjbGlzdEl0ZW1cbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZTsgY29udGV4dDogeyRpbXBsaWNpdDogaXRlbSwgZGF0YTogZGF0YSwgdmFsdWVLZXk6IHZhbHVlS2V5LCBkaXNwbGF5S2V5OiBkaXNwbGF5S2V5fTtcIj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2lneC1jb21iby1pdGVtPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJpZ3gtY29tYm9fX2FkZFwiICpuZ0lmPVwiZmlsdGVyZWREYXRhLmxlbmd0aCA9PT0gMCB8fCBpc0FkZEJ1dHRvblZpc2libGUoKVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWNvbWJvX19lbXB0eVwiICpuZ0lmPVwiZmlsdGVyZWREYXRhLmxlbmd0aCA9PT0gMFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImVtcHR5VGVtcGxhdGUgPyBlbXB0eVRlbXBsYXRlIDogZW1wdHlcIj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGlneC1jb21iby1hZGQtaXRlbSBbaXRlbUhlaWdodF09XCJpdGVtSGVpZ2h0XCIgKm5nSWY9XCJpc0FkZEJ1dHRvblZpc2libGUoKVwiXG4gICAgICAgICAgICBbdGFiaW5kZXhdPVwiZHJvcGRvd24uY29sbGFwc2VkID8gLTEgOiBjdXN0b21WYWx1ZUZsYWcgPyAxIDogLTFcIiBjbGFzcz1cImlneC1jb21ib19fYWRkLWl0ZW1cIiByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwicmVzb3VyY2VTdHJpbmdzLmlneF9jb21ib19hZGRDdXN0b21WYWx1ZXNfcGxhY2Vob2xkZXJcIiBbaW5kZXhdPVwidmlydHVhbFNjcm9sbENvbnRhaW5lci5pZ3hGb3JPZi5sZW5ndGhcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhZGRJdGVtVGVtcGxhdGUgPyBhZGRJdGVtVGVtcGxhdGUgOiBhZGRJdGVtRGVmYXVsdFwiPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvaWd4LWNvbWJvLWFkZC1pdGVtPlxuICAgIDwvZGl2PlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmb290ZXJUZW1wbGF0ZVwiPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9pZ3gtY29tYm8tZHJvcC1kb3duPlxuPG5nLXRlbXBsYXRlICNjb21wbGV4IGxldC1kaXNwbGF5IGxldC1kYXRhPVwiZGF0YVwiIGxldC1rZXk9XCJkaXNwbGF5S2V5XCI+XG4gICAge3tkaXNwbGF5W2tleV19fVxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjcHJpbWl0aXZlIGxldC1kaXNwbGF5PlxuICAgIHt7ZGlzcGxheX19XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNlbXB0eT5cbiAgICA8c3Bhbj57e3Jlc291cmNlU3RyaW5ncy5pZ3hfY29tYm9fZW1wdHlfbWVzc2FnZX19PC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjYWRkSXRlbURlZmF1bHQgbGV0LWNvbnRyb2w+XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWd4QnV0dG9uPVwiZmxhdFwiIGlneFJpcHBsZT57eyByZXNvdXJjZVN0cmluZ3MuaWd4X2NvbWJvX2FkZEN1c3RvbVZhbHVlc19wbGFjZWhvbGRlciB9fTwvYnV0dG9uPlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjaGVhZGVySXRlbUJhc2UgbGV0LWl0ZW0gbGV0LWtleT1cInZhbHVlS2V5XCIgbGV0LWdyb3VwS2V5PVwiZ3JvdXBLZXlcIj5cbiAgICB7eyBpdGVtW2tleV0gfX1cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
@@ -537,4 +537,11 @@ export function* intoChunks(arr, size) {
|
|
|
537
537
|
yield arr.slice(i, i + size);
|
|
538
538
|
}
|
|
539
539
|
}
|
|
540
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvY29yZS91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLFVBQVUsSUFBSSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3RixPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN0QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUUxQzs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxDQUFDLE9BQWUsRUFBRSxjQUF1QixFQUFXLEVBQUU7SUFDN0UsSUFBSSxDQUFDLGNBQWMsSUFBSSxTQUFTLEVBQUUsRUFBRTtRQUNoQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQ3pCO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLENBQXFELENBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBRXRGOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDO0FBRXpFOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLENBQUMsS0FBWSxFQUFFLElBQWMsRUFBRSxFQUFFO0lBQ3ZELE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQztJQUNmLElBQUksQ0FBQyxLQUFLLEVBQUU7UUFDUixPQUFPLEdBQUcsQ0FBQztLQUNkO0lBQ0QsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUNyQixPQUFPLENBQUMsRUFBRSxFQUFFO1FBQ1IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDbkQ7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNmLENBQUMsQ0FBQztBQUVGOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLEtBQVksRUFBRSxZQUFpQixFQUFTLEVBQUU7SUFDN0UsTUFBTSxNQUFNLEdBQVUsRUFBRSxDQUFDO0lBQ3pCLElBQUksQ0FBQyxLQUFLLEVBQUU7UUFDUixPQUFPLE1BQU0sQ0FBQztLQUNqQjtJQUVELEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFO1FBQ3RCLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUU7WUFDbkMsVUFBVSxDQUFDLFlBQVksQ0FBQyxHQUFHLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztTQUM3RjtRQUNELE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7S0FDM0I7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDLENBQUM7QUFFRjs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFO0lBQ25DLElBQUksR0FBRyxFQUFFO1FBQ0wsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUNoQixNQUFNLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUMxQixNQUFNLENBQUMseUJBQXlCLENBQUMsR0FBRyxDQUFDLENBQ3hDLENBQUM7S0FDTDtBQUNMLENBQUMsQ0FBQTtBQUdEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxJQUFTLEVBQUUsSUFBUyxFQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsRUFBRTtJQUNwRyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7UUFDekIsT0FBTyxRQUFRLEdBQUcsUUFBUSxDQUFDO0tBQzlCO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFFSDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUFDLEtBQVUsRUFBTyxFQUFFO0lBQzFDLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ2YsT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztLQUNwQztJQUNELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUN0QixPQUFPLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztLQUNyQjtJQUVELElBQUksS0FBSyxZQUFZLEdBQUcsSUFBSSxLQUFLLFlBQVksR0FBRyxFQUFFO1FBQzlDLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0lBRUQsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDakIsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBRWxCLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNsQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ3hDO1FBQ0QsT0FBTyxNQUFNLENBQUM7S0FDakI7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNqQixDQUFDLENBQUM7QUFFRjs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsS0FBVSxFQUFFLEtBQW9CLEVBQU8sRUFBRTtJQUN0RSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUNmLE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7S0FDcEM7SUFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDdEIsT0FBTyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7S0FDckI7SUFFRCxJQUFJLEtBQUssWUFBWSxHQUFHLElBQUksS0FBSyxZQUFZLEdBQUcsRUFBRTtRQUM5QyxPQUFPLEtBQUssQ0FBQztLQUNoQjtJQUVELElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ2pCLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNsQixPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDM0I7UUFFRCxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDbEIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFekIsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2xDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDckQ7UUFDRCxPQUFPLE1BQU0sQ0FBQztLQUNqQjtJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUMsQ0FBQztBQUVGOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxDQUFDLEtBQVUsRUFBZSxFQUFFO0lBQ2pELHVDQUF1QztJQUN2QyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0tBQ2pEO0lBQ0QsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDMUMsQ0FBQyxDQUFDO0FBRUY7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQUMsWUFBbUIsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUM3RSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDbkIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDcEI7SUFDRCxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDeEIsT0FBTyxDQUFDLENBQUM7QUFDYixDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUVyQzs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxLQUFVLEVBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssaUJBQWlCLENBQUMsQ0FBQztBQUVyRzs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxLQUFVLEVBQWlCLEVBQUUsQ0FBQyxLQUFLLFlBQVksSUFBSSxDQUFDO0FBRTNFOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksRUFBVyxFQUFFO0lBQzNDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUM5QixPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7S0FDNUM7SUFDRCxPQUFPLElBQUksS0FBSyxJQUFJLENBQUM7QUFDekIsQ0FBQyxDQUFDO0FBRUY7Ozs7O0dBS0c7QUFFSCxNQUFNLE9BQU8sWUFBWTtJQWtDckIsWUFBeUMsVUFBZTtRQUFmLGVBQVUsR0FBVixVQUFVLENBQUs7UUFqQ2pELGNBQVMsR0FBWSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDeEQsVUFBSyxHQUFHLElBQUksQ0FBQyxTQUFTLElBQUksa0JBQWtCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxJQUFJLE1BQU0sQ0FBQyxDQUFDO1FBQ2xHLGFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxJQUFJLHdCQUF3QixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDaEYsY0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLElBQUkseUJBQXlCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNsRixXQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsSUFBSSxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzVFLGVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDO1lBQzNFLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6RSxtQkFBYyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFeEcsV0FBTSxHQUFHLE1BQU0sQ0FBQztZQUNuQixLQUFLLEVBQUUsT0FBTztZQUNkLEtBQUssRUFBRSxHQUFHO1lBQ1YsTUFBTSxFQUFFLFFBQVE7WUFDaEIsVUFBVSxFQUFFLFdBQVc7WUFDdkIsUUFBUSxFQUFFLFNBQVM7WUFDbkIsVUFBVSxFQUFFLFdBQVc7WUFDdkIsV0FBVyxFQUFFLFlBQVk7WUFDekIsR0FBRyxFQUFFLEtBQUs7WUFDVixJQUFJLEVBQUUsTUFBTTtZQUNaLFNBQVMsRUFBRSxVQUFVO1lBQ3JCLE9BQU8sRUFBRSxRQUFRO1lBQ2pCLEVBQUUsRUFBRSxJQUFJO1lBQ1IsR0FBRyxFQUFFLEtBQUs7WUFDVixTQUFTLEVBQUUsR0FBRztZQUNkLDZGQUE2RjtZQUM3RixNQUFNLEVBQUUsUUFBUTtZQUNoQixTQUFTLEVBQUUsV0FBVztZQUN0QixPQUFPLEVBQUUsU0FBUztZQUNsQixDQUFDLEVBQUUsR0FBRztZQUNOLENBQUMsRUFBRSxHQUFHO1lBQ04sQ0FBQyxFQUFFLEdBQUc7U0FDVCxDQUFDLENBQUM7SUFFeUQsQ0FBQztJQUU3RDs7Ozs7Ozs7Ozs7Ozs7T0FjRztJQUNJLG1CQUFtQixDQUFDLEtBQVksRUFBRSxJQUFpQixFQUFFLGVBQTZCO1FBQ3JGLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLFVBQVUsQ0FBQztRQUVmLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2pCLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztZQUMvQiwrRUFBK0U7WUFDL0UsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDO1NBQ25DO1FBRUQsSUFBSSxlQUFlLEVBQUU7WUFDakIsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQztZQUNwQyxVQUFVLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzVELEtBQUssQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ2pCLEtBQUssQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1lBQ3BCLEtBQUssQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1NBQ3hCO1FBRUQsS0FBSyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9CLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ3BFLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFFMUQsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDakIsK0VBQStFO1lBQy9FLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztTQUNsQztRQUVELElBQUksZUFBZSxFQUFFO1lBQ2pCLGVBQWUsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1QyxlQUFlLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDL0MsZUFBZSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ25EO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUdEOzs7Ozs7O09BT0c7SUFDSSxlQUFlLENBQUMsS0FBb0I7UUFDdkMsT0FBTyxLQUFLLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDOUUsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSSxtQkFBbUIsQ0FBQyxLQUFvQjtRQUMzQyxPQUFPLEtBQUssQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQztJQUNwSCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxXQUFXLENBQUMsS0FBZ0M7UUFDL0MsT0FBTyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxlQUFlLENBQUMsR0FBVztRQUM5QixPQUFPO1lBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLO1lBQ3BELElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUTtTQUNoRyxDQUFDLFFBQVEsQ0FBQyxHQUFVLENBQUMsQ0FBQztJQUMzQixDQUFDOzhHQS9IUSxZQUFZLGtCQWtDRCxXQUFXO2tIQWxDdEIsWUFBWSxjQURDLE1BQU07OzJGQUNuQixZQUFZO2tCQUR4QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7MEJBbUNqQixNQUFNOzJCQUFDLFdBQVc7O0FBZ0duQzs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxDQUFDLEdBQVUsRUFBRSxFQUFFO0lBQ2xDLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUVoQixHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFO1FBQ2IsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQixJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7WUFDYixNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsRixNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztTQUM3QztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxNQUFNLENBQUM7QUFDbEIsQ0FBQyxDQUFDO0FBeUJGLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBRXhHLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNuQyxNQUFNO0lBQ04sSUFBSTtJQUNKLE1BQU07SUFDTixPQUFPO0lBQ1AsV0FBVztJQUNYLFNBQVM7SUFDVCxXQUFXO0lBQ1gsWUFBWTtJQUNaLE1BQU07SUFDTixLQUFLO0lBQ0wsT0FBTztJQUNQLFVBQVU7SUFDVixHQUFHO0NBQ04sQ0FBQyxDQUFDO0FBQ0gsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsSUFBSSxHQUFHLENBQUMsb0NBQW9DLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbEcsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLElBQUksR0FBRyxDQUFDLGlDQUFpQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3JGLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLElBQUksR0FBRyxDQUFDLDJCQUEyQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2pGLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2pFLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDckUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUNwRixNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxHQUFHO0lBQ3BGLG9FQUFvRTtJQUNwRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBRVY7Ozs7Ozs7R0FPRztBQUNILE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsTUFBbUIsRUFBcUMsRUFBRSxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7SUFDcEgsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQThCLEVBQUUsRUFBRTtRQUMxRSxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNCLENBQUMsQ0FBQyxDQUFDO0lBQ0gsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6QixNQUFNLFdBQVcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDaEQsT0FBTyxXQUFXLENBQUM7QUFDdkIsQ0FBQyxDQUFDLENBQUM7QUFFSDs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxDQUFDLElBQW1CLEVBQUUsSUFBbUIsRUFBVyxFQUFFO0lBQzdFLElBQUksQ0FBQyxJQUFJLEVBQUU7UUFDUCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztLQUMvQjtJQUNELElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxFQUFFO1FBQ3pCLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0lBQ0QsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDO0lBQ2pCLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDckMsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUU7UUFDcEIsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2YsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUMzQzthQUFNO1lBQ0gsS0FBSyxHQUFHLEtBQUssQ0FBQztTQUNqQjtRQUNELElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDUixNQUFNO1NBQ1Q7S0FDSjtJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUMsQ0FBQztBQUVGOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLEdBQVEsRUFBRSxJQUFZLEVBQUUsRUFBRTtJQUN4RCxNQUFNLEtBQUssR0FBRyxJQUFJLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNyQyxJQUFJLE9BQU8sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFFakMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUNqQixJQUFJLE9BQU8sRUFBRTtZQUNULE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDM0I7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sT0FBTyxDQUFDO0FBQ25CLENBQUMsQ0FBQztBQUVGOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxJQUFZLEVBQUUsS0FBVSxFQUFFLEVBQUU7SUFDdEQsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDO0lBQ2YsTUFBTSxLQUFLLEdBQUcsSUFBSSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7SUFFckMsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzFCLElBQUksT0FBWSxDQUFDO0lBRWpCLDJDQUEyQztJQUMzQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQ25CLE9BQU8sR0FBRyxHQUFHLENBQUM7SUFFZCxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ2pCLCtCQUErQjtRQUMvQixPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLGtCQUFrQjtRQUNsQixPQUFPLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLGtDQUFrQztRQUNsQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLEtBQUssR0FBRyxJQUFJLENBQUM7SUFDakIsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLEdBQUcsQ0FBQztBQUNmLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLEtBQWEsRUFBRSxTQUFpQixFQUFFLFFBQWlDLEVBQUUsSUFBZ0IsRUFBRSxFQUFFO0lBQ2xILElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNWLE1BQU0sS0FBSyxHQUFHLEdBQUcsRUFBRTtRQUNmLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMzQyxPQUFPLENBQUMsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUU7WUFDakIsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2Y7UUFDRCxJQUFJLENBQUMsR0FBRyxLQUFLLEVBQUU7WUFDWCxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDdkI7YUFBTTtZQUNILElBQUksRUFBRSxDQUFDO1NBQ1Y7SUFDTCxDQUFDLENBQUM7SUFDRixLQUFLLEVBQUUsQ0FBQztBQUNaLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsT0FBTyxHQUFHLEtBQUssVUFBVSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7QUFFckk7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLENBQUMsS0FBNkIsRUFBRSxNQUFjLEVBQUUsTUFBYyxFQUFFLFFBQWlCLEVBQVUsRUFBRTtJQUNuSCxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssRUFBRSxFQUFFO1FBQ3ZELE9BQU8sRUFBRSxDQUFDO0tBQ2I7SUFDRCxPQUFPLFdBQVcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztBQUN4RCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsSUFBSSxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBRXBFLHVFQUF1RTtBQUN2RSxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUFzQixFQUFFLEVBQUU7SUFDMUMsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxlQUFlLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUE7SUFDMUksT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hDLENBQUMsQ0FBQTtBQUVELDBFQUEwRTtBQUMxRSxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsRUFBVztJQUN4QyxPQUFPLFVBQVUsQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUN4RixDQUFDO0FBRUQscUNBQXFDO0FBQ3JDLE1BQU0sVUFBVSxLQUFLLENBQUksR0FBUTtJQUM3QixPQUFPLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFNLENBQUM7QUFDMUIsQ0FBQztBQUVELG9DQUFvQztBQUNwQyxNQUFNLFVBQVUsSUFBSSxDQUFJLEdBQVE7SUFDNUIsT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFNLENBQUM7QUFDM0IsQ0FBQztBQUVELDRFQUE0RTtBQUM1RSxNQUFNLFVBQVUsTUFBTSxDQUFDLENBQVMsRUFBRSxDQUFTO0lBQ3ZDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0IsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsTUFBTSxTQUFTLENBQUMsQ0FBQyxVQUFVLENBQUksR0FBUSxFQUFFLElBQVk7SUFDbkQsSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFO1FBQ1osTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO0tBQ2pEO0lBQ0QsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLElBQUksRUFBRTtRQUN6QyxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztLQUM5QjtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDdXJyZW5jeVBpcGUsIGZvcm1hdERhdGUgYXMgX2Zvcm1hdERhdGUsIGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgUExBVEZPUk1fSUQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG1lcmdlV2l0aCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBzZXRJbW1lZGlhdGUgfSBmcm9tICcuL3NldEltbWVkaWF0ZSc7XG5pbXBvcnQgeyBpc0Rldk1vZGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBjb25zdCBzaG93TWVzc2FnZSA9IChtZXNzYWdlOiBzdHJpbmcsIGlzTWVzc2FnZVNob3duOiBib29sZWFuKTogYm9vbGVhbiA9PiB7XG4gICAgaWYgKCFpc01lc3NhZ2VTaG93biAmJiBpc0Rldk1vZGUoKSkge1xuICAgICAgICBjb25zb2xlLndhcm4obWVzc2FnZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG5leHBvcnQgY29uc3QgbWtlbnVtID0gPFQgZXh0ZW5kcyB7IFtpbmRleDogc3RyaW5nXTogVSB9LCBVIGV4dGVuZHMgc3RyaW5nPih4OiBUKSA9PiB4O1xuXG4vKipcbiAqXG4gKiBAaGlkZGVuIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgZ2V0UmVzaXplT2JzZXJ2ZXIgPSAoKSA9PiBnbG9iYWxUaGlzLndpbmRvdz8uUmVzaXplT2JzZXJ2ZXI7XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgY29uc3QgY2xvbmVBcnJheSA9IChhcnJheTogYW55W10sIGRlZXA/OiBib29sZWFuKSA9PiB7XG4gICAgY29uc3QgYXJyID0gW107XG4gICAgaWYgKCFhcnJheSkge1xuICAgICAgICByZXR1cm4gYXJyO1xuICAgIH1cbiAgICBsZXQgaSA9IGFycmF5Lmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgIGFycltpXSA9IGRlZXAgPyBjbG9uZVZhbHVlKGFycmF5W2ldKSA6IGFycmF5W2ldO1xuICAgIH1cbiAgICByZXR1cm4gYXJyO1xufTtcblxuLyoqXG4gKiBEb2Vzbid0IGNsb25lIGxlYWYgaXRlbXNcbiAqXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBjb25zdCBjbG9uZUhpZXJhcmNoaWNhbEFycmF5ID0gKGFycmF5OiBhbnlbXSwgY2hpbGREYXRhS2V5OiBhbnkpOiBhbnlbXSA9PiB7XG4gICAgY29uc3QgcmVzdWx0OiBhbnlbXSA9IFtdO1xuICAgIGlmICghYXJyYXkpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgYXJyYXkpIHtcbiAgICAgICAgY29uc3QgY2xvbmVkSXRlbSA9IGNsb25lVmFsdWUoaXRlbSk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGl0ZW1bY2hpbGREYXRhS2V5XSkpIHtcbiAgICAgICAgICAgIGNsb25lZEl0ZW1bY2hpbGREYXRhS2V5XSA9IGNsb25lSGllcmFyY2hpY2FsQXJyYXkoY2xvbmVkSXRlbVtjaGlsZERhdGFLZXldLCBjaGlsZERhdGFLZXkpO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5wdXNoKGNsb25lZEl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCB3aXRoIHByb3RvdHlwZSBmcm9tIHByb3ZpZGVkIHNvdXJjZSBhbmQgY29waWVzXG4gKiBhbGwgcHJvcGVydGllcyBkZXNjcmlwdG9ycyBmcm9tIHByb3ZpZGVkIHNvdXJjZVxuICogQHBhcmFtIG9iaiBTb3VyY2UgdG8gY29weSBwcm90b3R5cGUgYW5kIGRlc2NyaXB0b3JzIGZyb21cbiAqIEByZXR1cm5zIE5ldyBvYmplY3Qgd2l0aCBjbG9uZWQgcHJvdG90eXBlIGFuZCBwcm9wZXJ0eSBkZXNjcmlwdG9yc1xuICovXG5leHBvcnQgY29uc3QgY29weURlc2NyaXB0b3JzID0gKG9iaikgPT4ge1xuICAgIGlmIChvYmopIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5jcmVhdGUoXG4gICAgICAgICAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKSxcbiAgICAgICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG9iailcbiAgICAgICAgKTtcbiAgICB9XG59XG5cblxuLyoqXG4gKiBEZWVwIGNsb25lcyBhbGwgZmlyc3QgbGV2ZWwga2V5cyBvZiBPYmoyIGFuZCBtZXJnZXMgdGhlbSB0byBPYmoxXG4gKlxuICogQHBhcmFtIG9iajEgT2JqZWN0IHRvIG1lcmdlIGludG9cbiAqIEBwYXJhbSBvYmoyIE9iamVjdCB0byBtZXJnZSBmcm9tXG4gKiBAcmV0dXJucyBPYmoxIHdpdGggbWVyZ2VkIGNsb25lZCBrZXlzIGZyb20gT2JqMlxuICogQGhpZGRlblxuICovXG5leHBvcnQgY29uc3QgbWVyZ2VPYmplY3RzID0gKG9iajE6IGFueSwgb2JqMjogYW55KTogYW55ID0+IG1lcmdlV2l0aChvYmoxLCBvYmoyLCAob2JqVmFsdWUsIHNyY1ZhbHVlKSA9PiB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc3JjVmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBvYmpWYWx1ZSA9IHNyY1ZhbHVlO1xuICAgIH1cbn0pO1xuXG4vKipcbiAqIENyZWF0ZXMgZGVlcCBjbG9uZSBvZiBwcm92aWRlZCB2YWx1ZS5cbiAqIFN1cHBvcnRzIHByaW1pdGl2ZSB2YWx1ZXMsIGRhdGVzIGFuZCBvYmplY3RzLlxuICogSWYgcGFzc2VkIHZhbHVlIGlzIGFycmF5IHJldHVybnMgc2hhbGxvdyBjb3B5IG9mIHRoZSBhcnJheS5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgdmFsdWUgdG8gY2xvbmVcbiAqIEByZXR1cm5zIERlZXAgY29weSBvZiBwcm92aWRlZCB2YWx1ZVxuICogQGhpZGRlblxuICovXG5leHBvcnQgY29uc3QgY2xvbmVWYWx1ZSA9ICh2YWx1ZTogYW55KTogYW55ID0+IHtcbiAgICBpZiAoaXNEYXRlKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUodmFsdWUuZ2V0VGltZSgpKTtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBbLi4udmFsdWVdO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIE1hcCB8fCB2YWx1ZSBpbnN0YW5jZW9mIFNldCkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB7fTtcblxuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJlc3VsdFtrZXldID0gY2xvbmVWYWx1ZSh2YWx1ZVtrZXldKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgZGVlcCBjbG9uZSBvZiBwcm92aWRlZCB2YWx1ZS5cbiAqIFN1cHBvcnRzIHByaW1pdGl2ZSB2YWx1ZXMsIGRhdGVzIGFuZCBvYmplY3RzLlxuICogSWYgcGFzc2VkIHZhbHVlIGlzIGFycmF5IHJldHVybnMgc2hhbGxvdyBjb3B5IG9mIHRoZSBhcnJheS5cbiAqIEZvciBPYmplY3RzIHByb3BlcnR5IHZhbHVlcyBhbmQgcmVmZXJlbmNlcyBhcmUgY2FjaGVkIGFuZCByZXVzZWQuXG4gKiBUaGlzIGFsbG93cyBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlcyB0byBzYW1lIG9iamVjdHMuXG4gKlxuICogQHBhcmFtIHZhbHVlIHZhbHVlIHRvIGNsb25lXG4gKiBAcGFyYW0gY2FjaGUgbWFwIG9mIGNhY2hlZCB2YWx1ZXMgYWxyZWFkeSBwYXJzZWRcbiAqIEByZXR1cm5zIERlZXAgY29weSBvZiBwcm92aWRlZCB2YWx1ZVxuICogQGhpZGRlblxuICovXG5leHBvcnQgY29uc3QgY2xvbmVWYWx1ZUNhY2hlZCA9ICh2YWx1ZTogYW55LCBjYWNoZTogTWFwPGFueSwgYW55Pik6IGFueSA9PiB7XG4gICAgaWYgKGlzRGF0ZSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlLmdldFRpbWUoKSk7XG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gWy4uLnZhbHVlXTtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBNYXAgfHwgdmFsdWUgaW5zdGFuY2VvZiBTZXQpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgaWYgKGNhY2hlLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWNoZS5nZXQodmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgICAgIGNhY2hlLnNldCh2YWx1ZSwgcmVzdWx0KTtcblxuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJlc3VsdFtrZXldID0gY2xvbmVWYWx1ZUNhY2hlZCh2YWx1ZVtrZXldLCBjYWNoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xufTtcblxuLyoqXG4gKiBQYXJzZSBwcm92aWRlZCBpbnB1dCB0byBEYXRlLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSBpbnB1dCB0byBwYXJzZVxuICogQHJldHVybnMgRGF0ZSBpZiBwYXJzZSBzdWNjZWVkIG9yIG51bGxcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGNvbnN0IHBhcnNlRGF0ZSA9ICh2YWx1ZTogYW55KTogRGF0ZSB8IG51bGwgPT4ge1xuICAgIC8vIGlmIHZhbHVlIGlzIEludmFsaWQgRGF0ZSByZXR1cm4gbnVsbFxuICAgIGlmIChpc0RhdGUodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiAhaXNOYU4odmFsdWUuZ2V0VGltZSgpKSA/IHZhbHVlIDogbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlID8gbmV3IERhdGUodmFsdWUpIDogbnVsbDtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhbiBhcnJheSB3aXRoIHVuaXF1ZSBkYXRlcyBvbmx5LlxuICpcbiAqIEBwYXJhbSBjb2x1bW5WYWx1ZXMgY29sbGVjdGlvbiBvZiBkYXRlIHZhbHVlcyAobWlnaHQgYmUgbnVtYmVycyBvciBJU08gODYwMSBzdHJpbmdzKVxuICogQHJldHVybnMgY29sbGVjdGlvbiBvZiB1bmlxdWUgZGF0ZXMuXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBjb25zdCB1bmlxdWVEYXRlcyA9IChjb2x1bW5WYWx1ZXM6IGFueVtdKSA9PiBjb2x1bW5WYWx1ZXMucmVkdWNlKChhLCBjKSA9PiB7XG4gICAgaWYgKCFhLmNhY2hlW2MubGFiZWxdKSB7XG4gICAgICAgIGEucmVzdWx0LnB1c2goYyk7XG4gICAgfVxuICAgIGEuY2FjaGVbYy5sYWJlbF0gPSB0cnVlO1xuICAgIHJldHVybiBhO1xufSwgeyByZXN1bHQ6IFtdLCBjYWNoZToge30gfSkucmVzdWx0O1xuXG4vKipcbiAqIENoZWNrcyBpZiBwcm92aWRlZCB2YXJpYWJsZSBpcyBPYmplY3RcbiAqXG4gKiBAcGFyYW0gdmFsdWUgVmFsdWUgdG8gY2hlY2tcbiAqIEByZXR1cm5zIHRydWUgaWYgcHJvdmlkZWQgdmFyaWFibGUgaXMgT2JqZWN0XG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBjb25zdCBpc09iamVjdCA9ICh2YWx1ZTogYW55KTogYm9vbGVhbiA9PiAhISh2YWx1ZSAmJiB2YWx1ZS50b1N0cmluZygpID09PSAnW29iamVjdCBPYmplY3RdJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIHByb3ZpZGVkIHZhcmlhYmxlIGlzIERhdGVcbiAqXG4gKiBAcGFyYW0gdmFsdWUgVmFsdWUgdG8gY2hlY2tcbiAqIEByZXR1cm5zIHRydWUgaWYgcHJvdmlkZWQgdmFyaWFibGUgaXMgRGF0ZVxuICogQGhpZGRlblxuICovXG5leHBvcnQgY29uc3QgaXNEYXRlID0gKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBEYXRlID0+IHZhbHVlIGluc3RhbmNlb2YgRGF0ZTtcblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIHR3byBwYXNzZWQgYXJndW1lbnRzIGFyZSBlcXVhbFxuICogQ3VycmVudGx5IHN1cHBvcnRzIGRhdGUgb2JqZWN0c1xuICpcbiAqIEBwYXJhbSBvYmoxXG4gKiBAcGFyYW0gb2JqMlxuICogQHJldHVybnM6IGBib29sZWFuYFxuICogQGhpZGRlblxuICovXG5leHBvcnQgY29uc3QgaXNFcXVhbCA9IChvYmoxLCBvYmoyKTogYm9vbGVhbiA9PiB7XG4gICAgaWYgKGlzRGF0ZShvYmoxKSAmJiBpc0RhdGUob2JqMikpIHtcbiAgICAgICAgcmV0dXJuIG9iajEuZ2V0VGltZSgpID09PSBvYmoyLmdldFRpbWUoKTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajEgPT09IG9iajI7XG59O1xuXG4vKipcbiAqIFV0aWxpdHkgc2VydmljZSB0YWtpbmcgY2FyZSBvZiB2YXJpb3VzIHV0aWxpdHkgZnVuY3Rpb25zIHN1Y2ggYXNcbiAqIGRldGVjdGluZyBicm93c2VyIGZlYXR1cmVzLCBnZW5lcmFsIGNyb3NzIGJyb3dzZXIgRE9NIG1hbmlwdWxhdGlvbiwgZXRjLlxuICpcbiAqIEBoaWRkZW4gQGludGVybmFsXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgUGxhdGZvcm1VdGlsIHtcbiAgICBwdWJsaWMgaXNCcm93c2VyOiBib29sZWFuID0gaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKTtcbiAgICBwdWJsaWMgaXNJT1MgPSB0aGlzLmlzQnJvd3NlciAmJiAvaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSAmJiAhKCdNU1N0cmVhbScgaW4gd2luZG93KTtcbiAgICBwdWJsaWMgaXNTYWZhcmkgPSB0aGlzLmlzQnJvd3NlciAmJiAvU2FmYXJpW1xcL1xcc10oXFxkK1xcLlxcZCspLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuICAgIHB1YmxpYyBpc0ZpcmVmb3ggPSB0aGlzLmlzQnJvd3NlciAmJiAvRmlyZWZveFtcXC9cXHNdKFxcZCtcXC5cXGQrKS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgICBwdWJsaWMgaXNFZGdlID0gdGhpcy5pc0Jyb3dzZXIgJiYgL0VkZ2VbXFwvXFxzXShcXGQrXFwuXFxkKykvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gICAgcHVibGljIGlzQ2hyb21pdW0gPSB0aGlzLmlzQnJvd3NlciAmJiAoL0Nocm9tfGU/aXVtL2cudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSB8fFxuICAgICAgICAvR29vZ2xlIEluYy9nLnRlc3QobmF2aWdhdG9yLnZlbmRvcikpICYmICEvRWRnZS9nLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gICAgcHVibGljIGJyb3dzZXJWZXJzaW9uID0gdGhpcy5pc0Jyb3dzZXIgPyBwYXJzZUZsb2F0KG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL1ZlcnNpb25cXC8oW1xcZC5dKykvKT8uYXQoMSkpIDogMDtcblxuICAgIHB1YmxpYyBLRVlNQVAgPSBta2VudW0oe1xuICAgICAgICBFTlRFUjogJ0VudGVyJyxcbiAgICAgICAgU1BBQ0U6ICcgJyxcbiAgICAgICAgRVNDQVBFOiAnRXNjYXBlJyxcbiAgICAgICAgQVJST1dfRE9XTjogJ0Fycm93RG93bicsXG4gICAgICAgIEFSUk9XX1VQOiAnQXJyb3dVcCcsXG4gICAgICAgIEFSUk9XX0xFRlQ6ICdBcnJvd0xlZnQnLFxuICAgICAgICBBUlJPV19SSUdIVDogJ0Fycm93UmlnaHQnLFxuICAgICAgICBFTkQ6ICdFbmQnLFxuICAgICAgICBIT01FOiAnSG9tZScsXG4gICAgICAgIFBBR0VfRE9XTjogJ1BhZ2VEb3duJyxcbiAgICAgICAgUEFHRV9VUDogJ1BhZ2VVcCcsXG4gICAgICAgIEYyOiAnRjInLFxuICAgICAgICBUQUI6ICdUYWInLFxuICAgICAgICBTRU1JQ09MT046ICc7JyxcbiAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0tleWJvYXJkRXZlbnQva2V5L0tleV9WYWx1ZXMjZWRpdGluZ19rZXlzXG4gICAgICAgIERFTEVURTogJ0RlbGV0ZScsXG4gICAgICAgIEJBQ0tTUEFDRTogJ0JhY2tzcGFjZScsXG4gICAgICAgIENPTlRST0w6ICdDb250cm9sJyxcbiAgICAgICAgWDogJ3gnLFxuICAgICAgICBZOiAneScsXG4gICAgICAgIFo6ICd6J1xuICAgIH0pO1xuXG4gICAgY29uc3RydWN0b3IoQEluamVjdChQTEFURk9STV9JRCkgcHJpdmF0ZSBwbGF0Zm9ybUlkOiBhbnkpIHsgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKiBSZXR1cm5zIHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUgbm9kZSBjb250ZW50LCB1c2luZyBSYW5nZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgICAqIGxldCBjb2x1bW4gPSB0aGlzLmdyaWQuY29sdW1uTGlzdC5maWx0ZXIoYyA9PiBjLmZpZWxkID09PSAnSUQnKVswXTtcbiAgICAgKlxuICAgICAqIGxldCBzaXplID0gZ2V0Tm9kZVNpemVWaWFSYW5nZShyYW5nZSwgY29sdW1uLmNlbGxzWzBdLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBUaGUgbGFzdCBwYXJhbWV0ZXIgaXMgdXNlZnVsIHdoZW4gdGhlIHNpemUgb2YgdGhlIGVsZW1lbnQgdG8gbWVhc3VyZSBpcyBtb2RpZmllZCBieSBhXG4gICAgICogcGFyZW50IGVsZW1lbnQgdGhhdCBoYXMgZXhwbGljaXQgc2l6ZS4gSW4gc3VjaCBjYXNlcyB0aGUgY2FsY3VsYXRlZCBzaXplIGlzIG5ldmVyIGxvd2VyXG4gICAgICogYW5kIHRoZSBmdW5jdGlvbiBtYXkgaW5zdGVhZCByZW1vdmUgdGhlIHBhcmVudCBzaXplIHdoaWxlIG1lYXN1cmluZyB0byBnZXQgdGhlIGNvcnJlY3QgdmFsdWUuXG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldE5vZGVTaXplVmlhUmFuZ2UocmFuZ2U6IFJhbmdlLCBub2RlOiBIVE1MRWxlbWVudCwgc2l6ZUhvbGRpbmdOb2RlPzogSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgbGV0IG92ZXJmbG93ID0gbnVsbDtcbiAgICAgICAgbGV0IG5vZGVTdHlsZXM7XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzRmlyZWZveCkge1xuICAgICAgICAgICAgb3ZlcmZsb3cgPSBub2RlLnN0eWxlLm92ZXJmbG93O1xuICAgICAgICAgICAgLy8gd2UgbmVlZCB0aGF0IGhhY2sgLSBvdGhlcndpc2UgY29udGVudCB3b24ndCBiZSBtZWFzdXJlZCBjb3JyZWN0bHkgaW4gSUUvRWRnZVxuICAgICAgICAgICAgbm9kZS5zdHlsZS5vdmVyZmxvdyA9ICd2aXNpYmxlJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzaXplSG9sZGluZ05vZGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0eWxlID0gc2l6ZUhvbGRpbmdOb2RlLnN0eWxlO1xuICAgICAgICAgICAgbm9kZVN0eWxlcyA9IFtzdHlsZS53aWR0aCwgc3R5bGUubWluV2lkdGgsIHN0eWxlLmZsZXhCYXNpc107XG4gICAgICAgICAgICBzdHlsZS53aWR0aCA9ICcnO1xuICAgICAgICAgICAgc3R5bGUubWluV2lkdGggPSAnJztcbiAgICAgICAgICAgIHN0eWxlLmZsZXhCYXNpcyA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKG5vZGUpO1xuICAgICAgICBjb25zdCBzY2FsZSA9IG5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggLyBub2RlLm9mZnNldFdpZHRoO1xuICAgICAgICBjb25zdCB3aWR0aCA9IHJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIC8gc2NhbGU7XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzRmlyZWZveCkge1xuICAgICAgICAgICAgLy8gd2UgbmVlZCB0aGF0IGhhY2sgLSBvdGhlcndpc2UgY29udGVudCB3b24ndCBiZSBtZWFzdXJlZCBjb3JyZWN0bHkgaW4gSUUvRWRnZVxuICAgICAgICAgICAgbm9kZS5zdHlsZS5vdmVyZmxvdyA9IG92ZXJmbG93O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNpemVIb2xkaW5nTm9kZSkge1xuICAgICAgICAgICAgc2l6ZUhvbGRpbmdOb2RlLnN0eWxlLndpZHRoID0gbm9kZVN0eWxlc1swXTtcbiAgICAgICAgICAgIHNpemVIb2xkaW5nTm9kZS5zdHlsZS5taW5XaWR0aCA9IG5vZGVTdHlsZXNbMV07XG4gICAgICAgICAgICBzaXplSG9sZGluZ05vZGUuc3R5bGUuZmxleEJhc2lzID0gbm9kZVN0eWxlc1syXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB3aWR0aDtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgY3VycmVudCBrZXlib2FyZCBldmVudCBpcyBhbiBhY3RpdmF0aW9uIGtleSAoRW50ZXIvU3BhY2UgYmFyKVxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIFBsYXRmb3JtVXRpbFxuICAgICAqL1xuICAgIHB1YmxpYyBpc0FjdGl2YXRpb25LZXkoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgcmV0dXJuIGV2ZW50LmtleSA9PT0gdGhpcy5LRVlNQVAuRU5URVIgfHwgZXZlbnQua2V5ID09PSB0aGlzLktFWU1BUC5TUEFDRTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGN1cnJlbnQga2V5Ym9hcmQgZXZlbnQgaXMgYSBjb21iaW5hdGlvbiB0aGF0IGNsb3NlcyB0aGUgZmlsdGVyaW5nIFVJIG9mIHRoZSBncmlkLiAoRXNjYXBlL0N0cmwrU2hpZnQrTClcbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKiBAcGFyYW0gZXZlbnRcbiAgICAgKiBAbWVtYmVyb2YgUGxhdGZvcm1VdGlsXG4gICAgICovXG4gICAgcHVibGljIGlzRmlsdGVyaW5nS2V5Q29tYm8oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgcmV0dXJuIGV2ZW50LmtleSA9PT0gdGhpcy5LRVlNQVAuRVNDQVBFIHx8IChldmVudC5jdHJsS2V5ICYmIGV2ZW50LnNoaWZ0S2V5ICYmIGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAnbCcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGlzTGVmdENsaWNrKGV2ZW50OiBQb2ludGVyRXZlbnQgfCBNb3VzZUV2ZW50KSB7XG4gICAgICAgIHJldHVybiBldmVudC5idXR0b24gPT09IDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgaXNOYXZpZ2F0aW9uS2V5KGtleTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB0aGlzLktFWU1BUC5IT01FLCB0aGlzLktFWU1BUC5FTkQsIHRoaXMuS0VZTUFQLlNQQUNFLFxuICAgICAgICAgICAgdGhpcy5LRVlNQVAuQVJST1dfRE9XTiwgdGhpcy5LRVlNQVAuQVJST1dfTEVGVCwgdGhpcy5LRVlNQVAuQVJST1dfUklHSFQsIHRoaXMuS0VZTUFQLkFSUk9XX1VQXG4gICAgICAgIF0uaW5jbHVkZXMoa2V5IGFzIGFueSk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGNvbnN0IGZsYXR0ZW4gPSAoYXJyOiBhbnlbXSkgPT4ge1xuICAgIGxldCByZXN1bHQgPSBbXTtcblxuICAgIGFyci5mb3JFYWNoKGVsID0+IHtcbiAgICAgICAgcmVzdWx0LnB1c2goZWwpO1xuICAgICAgICBpZiAoZWwuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gQXJyYXkuaXNBcnJheShlbC5jaGlsZHJlbikgPyBlbC5jaGlsZHJlbiA6IGVsLmNoaWxkcmVuLnRvQXJyYXkoKTtcbiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoZmxhdHRlbihjaGlsZHJlbikpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FuY2VsYWJsZUV2ZW50QXJncyB7XG4gICAgLyoqXG4gICAgICogUHJvdmlkZXMgdGhlIGFiaWxpdHkgdG8gY2FuY2VsIHRoZSBldmVudC5cbiAgICAgKi9cbiAgICBjYW5jZWw6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUJhc2VFdmVudEFyZ3Mge1xuICAgIC8qKlxuICAgICAqIFByb3ZpZGVzIHJlZmVyZW5jZSB0byB0aGUgb3duZXIgY29tcG9uZW50LlxuICAgICAqL1xuICAgIG93bmVyPzogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhbmNlbGFibGVCcm93c2VyRXZlbnRBcmdzIGV4dGVuZHMgQ2FuY2VsYWJsZUV2ZW50QXJncyB7XG4gICAgLyoqIEJyb3dzZXIgZXZlbnQgKi9cbiAgICBldmVudD86IEV2ZW50O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElCYXNlQ2FuY2VsYWJsZUJyb3dzZXJFdmVudEFyZ3MgZXh0ZW5kcyBDYW5jZWxhYmxlQnJvd3NlckV2ZW50QXJncywgSUJhc2VFdmVudEFyZ3MgeyB9XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUJhc2VDYW5jZWxhYmxlRXZlbnRBcmdzIGV4dGVuZHMgQ2FuY2VsYWJsZUV2ZW50QXJncywgSUJhc2VFdmVudEFyZ3MgeyB9XG5cbmV4cG9ydCBjb25zdCBIT1JJWk9OVEFMX05BVl9LRVlTID0gbmV3IFNldChbJ2Fycm93bGVmdCcsICdsZWZ0JywgJ2Fycm93cmlnaHQnLCAncmlnaHQnLCAnaG9tZScsICdlbmQnXSk7XG5cbmV4cG9ydCBjb25zdCBOQVZJR0FUSU9OX0tFWVMgPSBuZXcgU2V0KFtcbiAgICAnZG93bicsXG4gICAgJ3VwJyxcbiAgICAnbGVmdCcsXG4gICAgJ3JpZ2h0JyxcbiAgICAnYXJyb3dkb3duJyxcbiAgICAnYXJyb3d1cCcsXG4gICAgJ2Fycm93bGVmdCcsXG4gICAgJ2Fycm93cmlnaHQnLFxuICAgICdob21lJyxcbiAgICAnZW5kJyxcbiAgICAnc3BhY2UnLFxuICAgICdzcGFjZWJhcicsXG4gICAgJyAnXG5dKTtcbmV4cG9ydCBjb25zdCBBQ0NPUkRJT05fTkFWSUdBVElPTl9LRVlTID0gbmV3IFNldCgndXAgZG93biBhcnJvd3VwIGFycm93ZG93biBob21lIGVuZCcuc3BsaXQoJyAnKSk7XG5leHBvcnQgY29uc3QgUk9XX0VYUEFORF9LRVlTID0gbmV3IFNldCgncmlnaHQgZG93biBhcnJvd3JpZ2h0IGFycm93ZG93bicuc3BsaXQoJyAnKSk7XG5leHBvcnQgY29uc3QgUk9XX0NPTExBUFNFX0tFWVMgPSBuZXcgU2V0KCdsZWZ0IHVwIGFycm93bGVmdCBhcnJvd3VwJy5zcGxpdCgnICcpKTtcbmV4cG9ydCBjb25zdCBST1dfQUREX0tFWVMgPSBuZXcgU2V0KFsnKycsICdhZGQnLCAn4omgJywgJ8KxJywgJz0nXSk7XG5leHBvcnQgY29uc3QgU1VQUE9SVEVEX0tFWVMgPSBuZXcgU2V0KFsuLi5BcnJheS5mcm9tKE5BVklHQVRJT05fS0VZUyksXG4uLi5BcnJheS5mcm9tKFJPV19BRERfS0VZUyksICdlbnRlcicsICdmMicsICdlc2NhcGUnLCAnZXNjJywgJ3BhZ2Vkb3duJywgJ3BhZ2V1cCddKTtcbmV4cG9ydCBjb25zdCBIRUFERVJfS0VZUyA9IG5ldyBTZXQoWy4uLkFycmF5LmZyb20oTkFWSUdBVElPTl9LRVlTKSwgJ2VzY2FwZScsICdlc2MnLCAnbCcsXG4gICAgLyoqIFRoaXMgc3ltYm9sIGNvcnJlc3BvbmRzIHRvIHRoZSBBbHQgKyBMIGNvbWJpbmF0aW9uIHVuZGVyIE1BQy4gKi9cbiAgICAnwqwnXSk7XG5cbi8qKlxuICogQGhpZGRlblxuICogQGludGVybmFsXG4gKlxuICogQ3JlYXRlcyBhIG5ldyBSZXNpemVPYnNlcnZlciBvbiBgdGFyZ2V0YCBhbmQgcmV0dXJucyBpdCBhcyBhbiBPYnNlcnZhYmxlLlxuICogUnVuIHRoZSByZXNpemVPYnNlcnZhYmxlIG91dHNpZGUgYW5ndWxhciB6b25lLCBiZWNhdXNlIGl0IHBhdGNoZXMgdGhlIE11dGF0aW9uT2JzZXJ2ZXIgd2hpY2ggY2F1c2VzIGFuIGluZmluaXRlIGxvb3AuXG4gKiBSZWxhdGVkIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8zMTcxMlxuICovXG5leHBvcnQgY29uc3QgcmVzaXplT2JzZXJ2YWJsZSA9ICh0YXJnZXQ6IEhUTUxFbGVtZW50KTogT2JzZXJ2YWJsZTxSZXNpemVPYnNlcnZlckVudHJ5W10+ID0+IG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcikgPT4ge1xuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IChnZXRSZXNpemVPYnNlcnZlcigpKSgoZW50cmllczogUmVzaXplT2JzZXJ2ZXJFbnRyeVtdKSA9PiB7XG4gICAgICAgIG9ic2VydmVyLm5leHQoZW50cmllcyk7XG4gICAgfSk7XG4gICAgaW5zdGFuY2Uub2JzZXJ2ZSh0YXJnZXQpO1xuICAgIGNvbnN0IHVuc3Vic2NyaWJlID0gKCkgPT4gaW5zdGFuY2UuZGlzY29ubmVjdCgpO1xuICAgIHJldHVybiB1bnN1YnNjcmliZTtcbn0pO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqIEBpbnRlcm5hbFxuICpcbiAqIENvbXBhcmVzIHR3byBtYXBzLlxuICovXG5leHBvcnQgY29uc3QgY29tcGFyZU1hcHMgPSAobWFwMTogTWFwPGFueSwgYW55PiwgbWFwMjogTWFwPGFueSwgYW55Pik6IGJvb2xlYW4gPT4ge1xuICAgIGlmICghbWFwMikge1xuICAgICAgICByZXR1cm4gIW1hcDEgPyB0cnVlIDogZmFsc2U7XG4gICAgfVxuICAgIGlmIChtYXAxLnNpemUgIT09IG1hcDIuc2l6ZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGxldCBtYXRjaCA9IHRydWU7XG4gICAgY29uc3Qga2V5cyA9IEFycmF5LmZyb20obWFwMi5rZXlzKCkpO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgaWYgKG1hcDEuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIG1hdGNoID0gbWFwMS5nZXQoa2V5KSA9PT0gbWFwMi5nZXQoa2V5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1hdGNoID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtYXRjaCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hdGNoO1xufTtcblxuLyoqXG4gKlxuICogR2l2ZW4gYSBwcm9wZXJ0eSBhY2Nlc3MgcGF0aCBpbiB0aGUgZm9ybWF0IGB4LnkuemAgcmVzb2x2ZXMgYW5kIHJldHVybnNcbiAqIHRoZSB2YWx1ZSBvZiB0aGUgYHpgIHByb3BlcnR5IGluIHRoZSBwYXNzZWQgb2JqZWN0LlxuICpcbiAqIEBoaWRkZW5cbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcmVzb2x2ZU5lc3RlZFBhdGggPSAob2JqOiBhbnksIHBhdGg6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IHBhcnRzID0gcGF0aD8uc3BsaXQoJy4nKSA/PyBbXTtcbiAgICBsZXQgY3VycmVudCA9IG9ialtwYXJ0cy5zaGlmdCgpXTtcblxuICAgIHBhcnRzLmZvckVhY2gocHJvcCA9PiB7XG4gICAgICAgIGlmIChjdXJyZW50KSB7XG4gICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudFtwcm9wXTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGN1cnJlbnQ7XG59O1xuXG4vKipcbiAqXG4gKiBHaXZlbiBhIHByb3BlcnR5IGFjY2VzcyBwYXRoIGluIHRoZSBmb3JtYXQgYHgueS56YCBhbmQgYSB2YWx1ZVxuICogdGhpcyBmdW5jdGlvbnMgYnVpbGRzIGFuZCByZXR1cm5zIGFuIG9iamVjdCBmb2xsb3dpbmcgdGhlIGFjY2VzcyBwYXRoLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zb2xlLmxvZygneC55LnouJywgNDIpO1xuICogPj4geyB4OiB7IHk6IHsgejogNDIgfSB9IH1cbiAqIGBgYFxuICpcbiAqIEBoaWRkZW5cbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcmV2ZXJzZU1hcHBlciA9IChwYXRoOiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IHtcbiAgICBjb25zdCBvYmogPSB7fTtcbiAgICBjb25zdCBwYXJ0cyA9IHBhdGg/LnNwbGl0KCcuJykgPz8gW107XG5cbiAgICBsZXQgX3Byb3AgPSBwYXJ0cy5zaGlmdCgpO1xuICAgIGxldCBtYXBwaW5nOiBhbnk7XG5cbiAgICAvLyBJbml0aWFsIGJpbmRpbmcgZm9yIGZpcnN0IGxldmVsIGJpbmRpbmdzXG4gICAgb2JqW19wcm9wXSA9IHZhbHVlO1xuICAgIG1hcHBpbmcgPSBvYmo7XG5cbiAgICBwYXJ0cy5mb3JFYWNoKHByb3AgPT4ge1xuICAgICAgICAvLyBTdGFydCBidWlsZGluZyB0aGUgaGllcmFyY2h5XG4gICAgICAgIG1hcHBpbmdbX3Byb3BdID0ge307XG4gICAgICAgIC8vIEdvIGRvd24gYSBsZXZlbFxuICAgICAgICBtYXBwaW5nID0gbWFwcGluZ1tfcHJvcF07XG4gICAgICAgIC8vIEJpbmQgdGhlIHZhbHVlIGFuZCBtb3ZlIHRoZSBrZXlcbiAgICAgICAgbWFwcGluZ1twcm9wXSA9IHZhbHVlO1xuICAgICAgICBfcHJvcCA9IHByb3A7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb2JqO1xufTtcblxuZXhwb3J0IGNvbnN0IHlpZWxkaW5nTG9vcCA9IChjb3VudDogbnVtYmVyLCBjaHVua1NpemU6IG51bWJlciwgY2FsbGJhY2s6IChpbmRleDogbnVtYmVyKSA9PiB2b2lkLCBkb25lOiAoKSA9PiB2b2lkKSA9PiB7XG4gICAgbGV0IGkgPSAwO1xuICAgIGNvbnN0IGNodW5rID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBlbmQgPSBNYXRoLm1pbihpICsgY2h1bmtTaXplLCBjb3VudCk7XG4gICAgICAgIGZvciAoOyBpIDwgZW5kOyArK2kpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpIDwgY291bnQpIHtcbiAgICAgICAgICAgIHNldEltbWVkaWF0ZShjaHVuayk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGNodW5rKCk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNDb25zdHJ1Y3RvciA9IChyZWY6IGFueSkgPT4gdHlwZW9mIHJlZiA9PT0gJ2Z1bmN0aW9uJyAmJiBCb29sZWFuKHJlZi5wcm90b3R5cGUpICYmIEJvb2xlYW4ocmVmLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcik7XG5cbi8qKlxuICogU2ltaWxhciB0byBBbmd1bGFyJ3MgZm9ybWF0RGF0ZS4gSG93ZXZlciBpdCB3aWxsIG5vdCB0aHJvdyBvbiBgdW5kZWZpbmVkIHwgbnVsbCB8ICcnYCBpbnN0ZWFkXG4gKiBjb2FsZXNjaW5nIHRvIGFuIGVtcHR5IHN0cmluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IGZvcm1hdERhdGUgPSAodmFsdWU6IHN0cmluZyB8IG51bWJlciB8IERhdGUsIGZvcm1hdDogc3RyaW5nLCBsb2NhbGU6IHN0cmluZywgdGltZXpvbmU/OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSAnJykge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHJldHVybiBfZm9ybWF0RGF0ZSh2YWx1ZSwgZm9ybWF0LCBsb2NhbGUsIHRpbWV6b25lKTtcbn07XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRDdXJyZW5jeSA9IG5ldyBDdXJyZW5jeVBpcGUodW5kZWZpbmVkKS50cmFuc2Zvcm07XG5cbi8qKiBDb252ZXJ0cyBwaXhlbCB2YWx1ZXMgdG8gdGhlaXIgcmVtIGNvdW50ZXJwYXJ0cyBmb3IgYSBiYXNlIHZhbHVlICovXG5leHBvcnQgY29uc3QgcmVtID0gKHZhbHVlOiBudW1iZXIgfCBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBiYXNlID0gcGFyc2VGbG9hdChnbG9iYWxUaGlzLndpbmRvdz8uZ2V0Q29tcHV0ZWRTdHlsZShnbG9iYWxUaGlzLmRvY3VtZW50Py5kb2N1bWVudEVsZW1lbnQpLmdldFByb3BlcnR5VmFsdWUoJy0taWctYmFzZS1mb250LXNpemUnKSlcbiAgICByZXR1cm4gTnVtYmVyKHZhbHVlKSAvIGJhc2U7XG59XG5cbi8qKiBHZXQgdGhlIHNpemUgb2YgdGhlIGNvbXBvbmVudCBhcyBkZXJpdmVkIGZyb20gdGhlIENTUyBzaXplIHZhcmlhYmxlICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29tcG9uZW50U2l6ZShlbDogRWxlbWVudCkge1xuICAgIHJldHVybiBnbG9iYWxUaGlzLndpbmRvdz8uZ2V0Q29tcHV0ZWRTdHlsZShlbCkuZ2V0UHJvcGVydHlWYWx1ZSgnLS1jb21wb25lbnQtc2l6ZScpO1xufVxuXG4vKiogR2V0IHRoZSBmaXJzdCBpdGVtIGluIGFuIGFycmF5ICovXG5leHBvcnQgZnVuY3Rpb24gZmlyc3Q8VD4oYXJyOiBUW10pIHtcbiAgICByZXR1cm4gYXJyLmF0KDApIGFzIFQ7XG59XG5cbi8qKiBHZXQgdGhlIGxhc3QgaXRlbSBpbiBhbiBhcnJheSAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxhc3Q8VD4oYXJyOiBUW10pIHtcbiAgICByZXR1cm4gYXJyLmF0KC0xKSBhcyBUO1xufVxuXG4vKiogQ2FsY3VsYXRlcyB0aGUgbW9kdWxvIG9mIHR3byBudW1iZXJzLCBlbnN1cmluZyBhIG5vbi1uZWdhdGl2ZSByZXN1bHQuICovXG5leHBvcnQgZnVuY3Rpb24gbW9kdWxvKG46IG51bWJlciwgZDogbnVtYmVyKSB7XG4gICAgcmV0dXJuICgobiAlIGQpICsgZCkgJSBkO1xufVxuXG4vKipcbiAqIFNwbGl0cyBhbiBhcnJheSBpbnRvIGNodW5rcyBvZiBsZW5ndGggYHNpemVgIGFuZCByZXR1cm5zIGEgZ2VuZXJhdG9yXG4gKiB5aWVsZGluZyBlYWNoIGNodW5rLlxuICogVGhlIGxhc3QgY2h1bmsgbWF5IGNvbnRhaW4gbGVzcyB0aGFuIGBzaXplYCBlbGVtZW50cy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgYXJyID0gWzAsMSwyLDMsNCw1LDYsNyw4LDldO1xuICpcbiAqIEFycmF5LmZyb20oY2h1bmsoYXJyLCAyKSkgLy8gW1swLCAxXSwgWzIsIDNdLCBbNCwgNV0sIFs2LCA3XSwgWzgsIDldXVxuICogQXJyYXkuZnJvbShjaHVuayhhcnIsIDMpKSAvLyBbWzAsIDEsIDJdLCBbMywgNCwgNV0sIFs2LCA3LCA4XSwgWzldXVxuICogQXJyYXkuZnJvbShjaHVuayhbXSwgMykpIC8vIFtdXG4gKiBBcnJheS5mcm9tKGNodW5rKGFyciwgLTMpKSAvLyBFcnJvclxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiogaW50b0NodW5rczxUPihhcnI6IFRbXSwgc2l6ZTogbnVtYmVyKSB7XG4gIGlmIChzaXplIDwgMSkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2l6ZSBtdXN0IGJlIGFuIGludGVnZXIgPj0gMScpO1xuICB9XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSArPSBzaXplKSB7XG4gICAgeWllbGQgYXJyLnNsaWNlKGksIGkgKyBzaXplKTtcbiAgfVxufVxuIl19
|
|
540
|
+
/**
|
|
541
|
+
* @param path - The URI path to be normalized.
|
|
542
|
+
* @returns string encoded using the encodeURI function.
|
|
543
|
+
*/
|
|
544
|
+
export function normalizeURI(path) {
|
|
545
|
+
return path.split('/').map(encodeURI).join('/');
|
|
546
|
+
}
|
|
547
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvY29yZS91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLFVBQVUsSUFBSSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3RixPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN0QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUUxQzs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxDQUFDLE9BQWUsRUFBRSxjQUF1QixFQUFXLEVBQUU7SUFDN0UsSUFBSSxDQUFDLGNBQWMsSUFBSSxTQUFTLEVBQUUsRUFBRTtRQUNoQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQ3pCO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLENBQXFELENBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBRXRGOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDO0FBRXpFOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLENBQUMsS0FBWSxFQUFFLElBQWMsRUFBRSxFQUFFO0lBQ3ZELE1BQU0sR0FBRyxHQUFHLEVBQUUs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QUFDLElBQVk7SUFDckMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEN1cnJlbmN5UGlwZSwgZm9ybWF0RGF0ZSBhcyBfZm9ybWF0RGF0ZSwgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBQTEFURk9STV9JRCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgbWVyZ2VXaXRoIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHNldEltbWVkaWF0ZSB9IGZyb20gJy4vc2V0SW1tZWRpYXRlJztcbmltcG9ydCB7IGlzRGV2TW9kZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGNvbnN0IHNob3dNZXNzYWdlID0gKG1lc3NhZ2U6IHN0cmluZywgaXNNZXNzYWdlU2hvd246IGJvb2xlYW4pOiBib29sZWFuID0+IHtcbiAgICBpZiAoIWlzTWVzc2FnZVNob3duICYmIGlzRGV2TW9kZSgpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihtZXNzYWdlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBta2VudW0gPSA8VCBleHRlbmRzIHsgW2luZGV4OiBzdHJpbmddOiBVIH0sIFUgZXh0ZW5kcyBzdHJpbmc+KHg6IFQpID0+IHg7XG5cbi8qKlxuICpcbiAqIEBoaWRkZW4gQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRSZXNpemVPYnNlcnZlciA9ICgpID0+IGdsb2JhbFRoaXMud2luZG93Py5SZXNpemVPYnNlcnZlcjtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBjb25zdCBjbG9uZUFycmF5ID0gKGFycmF5OiBhbnlbXSwgZGVlcD86IGJvb2xlYW4pID0+IHtcbiAgICBjb25zdCBhcnIgPSBbXTtcbiAgICBpZiAoIWFycmF5KSB7XG4gICAgICAgIHJldHVybiBhcnI7XG4gICAgfVxuICAgIGxldCBpID0gYXJyYXkubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgYXJyW2ldID0gZGVlcCA/IGNsb25lVmFsdWUoYXJyYXlbaV0pIDogYXJyYXlbaV07XG4gICAgfVxuICAgIHJldHVybiBhcnI7XG59O1xuXG4vKipcbiAqIERvZXNuJ3QgY2xvbmUgbGVhZiBpdGVtc1xuICpcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGNvbnN0IGNsb25lSGllcmFyY2hpY2FsQXJyYXkgPSAoYXJyYXk6IGFueVtdLCBjaGlsZERhdGFLZXk6IGFueSk6IGFueVtdID0+IHtcbiAgICBjb25zdCByZXN1bHQ6IGFueVtdID0gW107XG4gICAgaWYgKCFhcnJheSkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBhcnJheSkge1xuICAgICAgICBjb25zdCBjbG9uZWRJdGVtID0gY2xvbmVWYWx1ZShpdGVtKTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbVtjaGlsZERhdGFLZXldKSkge1xuICAgICAgICAgICAgY2xvbmVkSXRlbVtjaGlsZERhdGFLZXldID0gY2xvbmVIaWVyYXJjaGljYWxBcnJheShjbG9uZWRJdGVtW2NoaWxkRGF0YUtleV0sIGNoaWxkRGF0YUtleSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnB1c2goY2xvbmVkSXRlbSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHdpdGggcHJvdG90eXBlIGZyb20gcHJvdmlkZWQgc291cmNlIGFuZCBjb3BpZXNcbiAqIGFsbCBwcm9wZXJ0aWVzIGRlc2NyaXB0b3JzIGZyb20gcHJvdmlkZWQgc291cmNlXG4gKiBAcGFyYW0gb2JqIFNvdXJjZSB0byBjb3B5IHByb3RvdHlwZSBhbmQgZGVzY3JpcHRvcnMgZnJvbVxuICogQHJldHVybnMgTmV3IG9iamVjdCB3aXRoIGNsb25lZCBwcm90b3R5cGUgYW5kIHByb3BlcnR5IGRlc2NyaXB0b3JzXG4gKi9cbmV4cG9ydCBjb25zdCBjb3B5RGVzY3JpcHRvcnMgPSAob2JqKSA9PiB7XG4gICAgaWYgKG9iaikge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmNyZWF0ZShcbiAgICAgICAgICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmopLFxuICAgICAgICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob2JqKVxuICAgICAgICApO1xuICAgIH1cbn1cblxuXG4vKipcbiAqIERlZXAgY2xvbmVzIGFsbCBmaXJzdCBsZXZlbCBrZXlzIG9mIE9iajIgYW5kIG1lcmdlcyB0aGVtIHRvIE9iajFcbiAqXG4gKiBAcGFyYW0gb2JqMSBPYmplY3QgdG8gbWVyZ2UgaW50b1xuICogQHBhcmFtIG9iajIgT2JqZWN0IHRvIG1lcmdlIGZyb21cbiAqIEByZXR1cm5zIE9iajEgd2l0aCBtZXJnZWQgY2xvbmVkIGtleXMgZnJvbSBPYmoyXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBjb25zdCBtZXJnZU9iamVjdHMgPSAob2JqMTogYW55LCBvYmoyOiBhbnkpOiBhbnkgPT4gbWVyZ2VXaXRoKG9iajEsIG9iajIsIChvYmpWYWx1ZSwgc3JjVmFsdWUpID0+IHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShzcmNWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIG9ialZhbHVlID0gc3JjVmFsdWU7XG4gICAgfVxufSk7XG5cbi8qKlxuICogQ3JlYXRlcyBkZWVwIGNsb25lIG9mIHByb3ZpZGVkIHZhbHVlLlxuICogU3VwcG9ydHMgcHJpbWl0aXZlIHZhbHVlcywgZGF0ZXMgYW5kIG9iamVjdHMuXG4gKiBJZiBwYXNzZWQgdmFsdWUgaXMgYXJyYXkgcmV0dXJucyBzaGFsbG93IGNvcHkgb2YgdGhlIGFycmF5LlxuICpcbiAqIEBwYXJhbSB2YWx1ZSB2YWx1ZSB0byBjbG9uZVxuICogQHJldHVybnMgRGVlcCBjb3B5IG9mIHByb3ZpZGVkIHZhbHVlXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBjb25zdCBjbG9uZVZhbHVlID0gKHZhbHVlOiBhbnkpOiBhbnkgPT4ge1xuICAgIGlmIChpc0RhdGUodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSh2YWx1ZS5nZXRUaW1lKCkpO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIFsuLi52YWx1ZV07XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgTWFwIHx8IHZhbHVlIGluc3RhbmNlb2YgU2V0KSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAoaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuXG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHZhbHVlKSkge1xuICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBjbG9uZVZhbHVlKHZhbHVlW2tleV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBkZWVwIGNsb25lIG9mIHByb3ZpZGVkIHZhbHVlLlxuICogU3VwcG9ydHMgcHJpbWl0aXZlIHZhbHVlcywgZGF0ZXMgYW5kIG9iamVjdHMuXG4gKiBJZiBwYXNzZWQgdmFsdWUgaXMgYXJyYXkgcmV0dXJucyBzaGFsbG93IGNvcHkgb2YgdGhlIGFycmF5LlxuICogRm9yIE9iamVjdHMgcHJvcGVydHkgdmFsdWVzIGFuZCByZWZlcmVuY2VzIGFyZSBjYWNoZWQgYW5kIHJldXNlZC5cbiAqIFRoaXMgYWxsb3dzIGZvciBjaXJjdWxhciByZWZlcmVuY2VzIHRvIHNhbWUgb2JqZWN0cy5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgdmFsdWUgdG8gY2xvbmVcbiAqIEBwYXJhbSBjYWNoZSBtYXAgb2YgY2FjaGVkIHZhbHVlcyBhbHJlYWR5IHBhcnNlZFxuICogQHJldHVybnMgRGVlcCBjb3B5IG9mIHByb3ZpZGVkIHZhbHVlXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBjb25zdCBjbG9uZVZhbHVlQ2FjaGVkID0gKHZhbHVlOiBhbnksIGNhY2hlOiBNYXA8YW55LCBhbnk+KTogYW55ID0+IHtcbiAgICBpZiAoaXNEYXRlKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUodmFsdWUuZ2V0VGltZSgpKTtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBbLi4udmFsdWVdO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIE1hcCB8fCB2YWx1ZSBpbnN0YW5jZW9mIFNldCkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICBpZiAoY2FjaGUuaGFzKHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNhY2hlLmdldCh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICAgICAgY2FjaGUuc2V0KHZhbHVlLCByZXN1bHQpO1xuXG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHZhbHVlKSkge1xuICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBjbG9uZVZhbHVlQ2FjaGVkKHZhbHVlW2tleV0sIGNhY2hlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59O1xuXG4vKipcbiAqIFBhcnNlIHByb3ZpZGVkIGlucHV0IHRvIERhdGUuXG4gKlxuICogQHBhcmFtIHZhbHVlIGlucHV0IHRvIHBhcnNlXG4gKiBAcmV0dXJucyBEYXRlIGlmIHBhcnNlIHN1Y2NlZWQgb3IgbnVsbFxuICogQGhpZGRlblxuICovXG5leHBvcnQgY29uc3QgcGFyc2VEYXRlID0gKHZhbHVlOiBhbnkpOiBEYXRlIHwgbnVsbCA9PiB7XG4gICAgLy8gaWYgdmFsdWUgaXMgSW52YWxpZCBEYXRlIHJldHVybiBudWxsXG4gICAgaWYgKGlzRGF0ZSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuICFpc05hTih2YWx1ZS5nZXRUaW1lKCkpID8gdmFsdWUgOiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWUgPyBuZXcgRGF0ZSh2YWx1ZSkgOiBudWxsO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGFuIGFycmF5IHdpdGggdW5pcXVlIGRhdGVzIG9ubHkuXG4gKlxuICogQHBhcmFtIGNvbHVtblZhbHVlcyBjb2xsZWN0aW9uIG9mIGRhdGUgdmFsdWVzIChtaWdodCBiZSBudW1iZXJzIG9yIElTTyA4NjAxIHN0cmluZ3MpXG4gKiBAcmV0dXJucyBjb2xsZWN0aW9uIG9mIHVuaXF1ZSBkYXRlcy5cbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGNvbnN0IHVuaXF1ZURhdGVzID0gKGNvbHVtblZhbHVlczogYW55W10pID0+IGNvbHVtblZhbHVlcy5yZWR1Y2UoKGEsIGMpID0+IHtcbiAgICBpZiAoIWEuY2FjaGVbYy5sYWJlbF0pIHtcbiAgICAgICAgYS5yZXN1bHQucHVzaChjKTtcbiAgICB9XG4gICAgYS5jYWNoZVtjLmxhYmVsXSA9IHRydWU7XG4gICAgcmV0dXJuIGE7XG59LCB7IHJlc3VsdDogW10sIGNhY2hlOiB7fSB9KS5yZXN1bHQ7XG5cbi8qKlxuICogQ2hlY2tzIGlmIHByb3ZpZGVkIHZhcmlhYmxlIGlzIE9iamVjdFxuICpcbiAqIEBwYXJhbSB2YWx1ZSBWYWx1ZSB0byBjaGVja1xuICogQHJldHVybnMgdHJ1ZSBpZiBwcm92aWRlZCB2YXJpYWJsZSBpcyBPYmplY3RcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGNvbnN0IGlzT2JqZWN0ID0gKHZhbHVlOiBhbnkpOiBib29sZWFuID0+ICEhKHZhbHVlICYmIHZhbHVlLnRvU3RyaW5nKCkgPT09ICdbb2JqZWN0IE9iamVjdF0nKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgcHJvdmlkZWQgdmFyaWFibGUgaXMgRGF0ZVxuICpcbiAqIEBwYXJhbSB2YWx1ZSBWYWx1ZSB0byBjaGVja1xuICogQHJldHVybnMgdHJ1ZSBpZiBwcm92aWRlZCB2YXJpYWJsZSBpcyBEYXRlXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBjb25zdCBpc0RhdGUgPSAodmFsdWU6IGFueSk6IHZhbHVlIGlzIERhdGUgPT4gdmFsdWUgaW5zdGFuY2VvZiBEYXRlO1xuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgdHdvIHBhc3NlZCBhcmd1bWVudHMgYXJlIGVxdWFsXG4gKiBDdXJyZW50bHkgc3VwcG9ydHMgZGF0ZSBvYmplY3RzXG4gKlxuICogQHBhcmFtIG9iajFcbiAqIEBwYXJhbSBvYmoyXG4gKiBAcmV0dXJuczogYGJvb2xlYW5gXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBjb25zdCBpc0VxdWFsID0gKG9iajEsIG9iajIpOiBib29sZWFuID0+IHtcbiAgICBpZiAoaXNEYXRlKG9iajEpICYmIGlzRGF0ZShvYmoyKSkge1xuICAgICAgICByZXR1cm4gb2JqMS5nZXRUaW1lKCkgPT09IG9iajIuZ2V0VGltZSgpO1xuICAgIH1cbiAgICByZXR1cm4gb2JqMSA9PT0gb2JqMjtcbn07XG5cbi8qKlxuICogVXRpbGl0eSBzZXJ2aWNlIHRha2luZyBjYXJlIG9mIHZhcmlvdXMgdXRpbGl0eSBmdW5jdGlvbnMgc3VjaCBhc1xuICogZGV0ZWN0aW5nIGJyb3dzZXIgZmVhdHVyZXMsIGdlbmVyYWwgY3Jvc3MgYnJvd3NlciBET00gbWFuaXB1bGF0aW9uLCBldGMuXG4gKlxuICogQGhpZGRlbiBAaW50ZXJuYWxcbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBQbGF0Zm9ybVV0aWwge1xuICAgIHB1YmxpYyBpc0Jyb3dzZXI6IGJvb2xlYW4gPSBpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpO1xuICAgIHB1YmxpYyBpc0lPUyA9IHRoaXMuaXNCcm93c2VyICYmIC9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpICYmICEoJ01TU3RyZWFtJyBpbiB3aW5kb3cpO1xuICAgIHB1YmxpYyBpc1NhZmFyaSA9IHRoaXMuaXNCcm93c2VyICYmIC9TYWZhcmlbXFwvXFxzXShcXGQrXFwuXFxkKykvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gICAgcHVibGljIGlzRmlyZWZveCA9IHRoaXMuaXNCcm93c2VyICYmIC9GaXJlZm94W1xcL1xcc10oXFxkK1xcLlxcZCspLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuICAgIHB1YmxpYyBpc0VkZ2UgPSB0aGlzLmlzQnJvd3NlciAmJiAvRWRnZVtcXC9cXHNdKFxcZCtcXC5cXGQrKS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgICBwdWJsaWMgaXNDaHJvbWl1bSA9IHRoaXMuaXNCcm93c2VyICYmICgvQ2hyb218ZT9pdW0vZy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpIHx8XG4gICAgICAgIC9Hb29nbGUgSW5jL2cudGVzdChuYXZpZ2F0b3IudmVuZG9yKSkgJiYgIS9FZGdlL2cudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgICBwdWJsaWMgYnJvd3NlclZlcnNpb24gPSB0aGlzLmlzQnJvd3NlciA/IHBhcnNlRmxvYXQobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvVmVyc2lvblxcLyhbXFxkLl0rKS8pPy5hdCgxKSkgOiAwO1xuXG4gICAgcHVibGljIEtFWU1BUCA9IG1rZW51bSh7XG4gICAgICAgIEVOVEVSOiAnRW50ZXInLFxuICAgICAgICBTUEFDRTogJyAnLFxuICAgICAgICBFU0NBUEU6ICdFc2NhcGUnLFxuICAgICAgICBBUlJPV19ET1dOOiAnQXJyb3dEb3duJyxcbiAgICAgICAgQVJST1dfVVA6ICdBcnJvd1VwJyxcbiAgICAgICAgQVJST1dfTEVGVDogJ0Fycm93TGVmdCcsXG4gICAgICAgIEFSUk9XX1JJR0hUOiAnQXJyb3dSaWdodCcsXG4gICAgICAgIEVORDogJ0VuZCcsXG4gICAgICAgIEhPTUU6ICdIb21lJyxcbiAgICAgICAgUEFHRV9ET1dOOiAnUGFnZURvd24nLFxuICAgICAgICBQQUdFX1VQOiAnUGFnZVVwJyxcbiAgICAgICAgRjI6ICdGMicsXG4gICAgICAgIFRBQjogJ1RhYicsXG4gICAgICAgIFNFTUlDT0xPTjogJzsnLFxuICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvS2V5Ym9hcmRFdmVudC9rZXkvS2V5X1ZhbHVlcyNlZGl0aW5nX2tleXNcbiAgICAgICAgREVMRVRFOiAnRGVsZXRlJyxcbiAgICAgICAgQkFDS1NQQUNFOiAnQmFja3NwYWNlJyxcbiAgICAgICAgQ09OVFJPTDogJ0NvbnRyb2wnLFxuICAgICAgICBYOiAneCcsXG4gICAgICAgIFk6ICd5JyxcbiAgICAgICAgWjogJ3onXG4gICAgfSk7XG5cbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KFBMQVRGT1JNX0lEKSBwcml2YXRlIHBsYXRmb3JtSWQ6IGFueSkgeyB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqIFJldHVybnMgdGhlIGFjdHVhbCBzaXplIG9mIHRoZSBub2RlIGNvbnRlbnQsIHVzaW5nIFJhbmdlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgICogbGV0IGNvbHVtbiA9IHRoaXMuZ3JpZC5jb2x1bW5MaXN0LmZpbHRlcihjID0+IGMuZmllbGQgPT09ICdJRCcpWzBdO1xuICAgICAqXG4gICAgICogbGV0IHNpemUgPSBnZXROb2RlU2l6ZVZpYVJhbmdlKHJhbmdlLCBjb2x1bW4uY2VsbHNbMF0ubmF0aXZlRWxlbWVudCk7XG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFRoZSBsYXN0IHBhcmFtZXRlciBpcyB1c2VmdWwgd2hlbiB0aGUgc2l6ZSBvZiB0aGUgZWxlbWVudCB0byBtZWFzdXJlIGlzIG1vZGlmaWVkIGJ5IGFcbiAgICAgKiBwYXJlbnQgZWxlbWVudCB0aGF0IGhhcyBleHBsaWNpdCBzaXplLiBJbiBzdWNoIGNhc2VzIHRoZSBjYWxjdWxhdGVkIHNpemUgaXMgbmV2ZXIgbG93ZXJcbiAgICAgKiBhbmQgdGhlIGZ1bmN0aW9uIG1heSBpbnN0ZWFkIHJlbW92ZSB0aGUgcGFyZW50IHNpemUgd2hpbGUgbWVhc3VyaW5nIHRvIGdldCB0aGUgY29ycmVjdCB2YWx1ZS5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Tm9kZVNpemVWaWFSYW5nZShyYW5nZTogUmFuZ2UsIG5vZGU6IEhUTUxFbGVtZW50LCBzaXplSG9sZGluZ05vZGU/OiBIVE1MRWxlbWVudCkge1xuICAgICAgICBsZXQgb3ZlcmZsb3cgPSBudWxsO1xuICAgICAgICBsZXQgbm9kZVN0eWxlcztcblxuICAgICAgICBpZiAoIXRoaXMuaXNGaXJlZm94KSB7XG4gICAgICAgICAgICBvdmVyZmxvdyA9IG5vZGUuc3R5bGUub3ZlcmZsb3c7XG4gICAgICAgICAgICAvLyB3ZSBuZWVkIHRoYXQgaGFjayAtIG90aGVyd2lzZSBjb250ZW50IHdvbid0IGJlIG1lYXN1cmVkIGNvcnJlY3RseSBpbiBJRS9FZGdlXG4gICAgICAgICAgICBub2RlLnN0eWxlLm92ZXJmbG93ID0gJ3Zpc2libGUnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNpemVIb2xkaW5nTm9kZSkge1xuICAgICAgICAgICAgY29uc3Qgc3R5bGUgPSBzaXplSG9sZGluZ05vZGUuc3R5bGU7XG4gICAgICAgICAgICBub2RlU3R5bGVzID0gW3N0eWxlLndpZHRoLCBzdHlsZS5taW5XaWR0aCwgc3R5bGUuZmxleEJhc2lzXTtcbiAgICAgICAgICAgIHN0eWxlLndpZHRoID0gJyc7XG4gICAgICAgICAgICBzdHlsZS5taW5XaWR0aCA9ICcnO1xuICAgICAgICAgICAgc3R5bGUuZmxleEJhc2lzID0gJyc7XG4gICAgICAgIH1cblxuICAgICAgICByYW5nZS5zZWxlY3ROb2RlQ29udGVudHMobm9kZSk7XG4gICAgICAgIGNvbnN0IHNjYWxlID0gbm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCAvIG5vZGUub2Zmc2V0V2lkdGg7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gcmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggLyBzY2FsZTtcblxuICAgICAgICBpZiAoIXRoaXMuaXNGaXJlZm94KSB7XG4gICAgICAgICAgICAvLyB3ZSBuZWVkIHRoYXQgaGFjayAtIG90aGVyd2lzZSBjb250ZW50IHdvbid0IGJlIG1lYXN1cmVkIGNvcnJlY3RseSBpbiBJRS9FZGdlXG4gICAgICAgICAgICBub2RlLnN0eWxlLm92ZXJmbG93ID0gb3ZlcmZsb3c7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2l6ZUhvbGRpbmdOb2RlKSB7XG4gICAgICAgICAgICBzaXplSG9sZGluZ05vZGUuc3R5bGUud2lkdGggPSBub2RlU3R5bGVzWzBdO1xuICAgICAgICAgICAgc2l6ZUhvbGRpbmdOb2RlLnN0eWxlLm1pbldpZHRoID0gbm9kZVN0eWxlc1sxXTtcbiAgICAgICAgICAgIHNpemVIb2xkaW5nTm9kZS5zdHlsZS5mbGV4QmFzaXMgPSBub2RlU3R5bGVzWzJdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHdpZHRoO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBjdXJyZW50IGtleWJvYXJkIGV2ZW50IGlzIGFuIGFjdGl2YXRpb24ga2V5IChFbnRlci9TcGFjZSBiYXIpXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgUGxhdGZvcm1VdGlsXG4gICAgICovXG4gICAgcHVibGljIGlzQWN0aXZhdGlvbktleShldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICByZXR1cm4gZXZlbnQua2V5ID09PSB0aGlzLktFWU1BUC5FTlRFUiB8fCBldmVudC5rZXkgPT09IHRoaXMuS0VZTUFQLlNQQUNFO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgY3VycmVudCBrZXlib2FyZCBldmVudCBpcyBhIGNvbWJpbmF0aW9uIHRoYXQgY2xvc2VzIHRoZSBmaWx0ZXJpbmcgVUkgb2YgdGhlIGdyaWQuIChFc2NhcGUvQ3RybCtTaGlmdCtMKVxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqIEBwYXJhbSBldmVudFxuICAgICAqIEBtZW1iZXJvZiBQbGF0Zm9ybVV0aWxcbiAgICAgKi9cbiAgICBwdWJsaWMgaXNGaWx0ZXJpbmdLZXlDb21ibyhldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICByZXR1cm4gZXZlbnQua2V5ID09PSB0aGlzLktFWU1BUC5FU0NBUEUgfHwgKGV2ZW50LmN0cmxLZXkgJiYgZXZlbnQuc2hpZnRLZXkgJiYgZXZlbnQua2V5LnRvTG93ZXJDYXNlKCkgPT09ICdsJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgaXNMZWZ0Q2xpY2soZXZlbnQ6IFBvaW50ZXJFdmVudCB8IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgcmV0dXJuIGV2ZW50LmJ1dHRvbiA9PT0gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBpc05hdmlnYXRpb25LZXkoa2V5OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHRoaXMuS0VZTUFQLkhPTUUsIHRoaXMuS0VZTUFQLkVORCwgdGhpcy5LRVlNQVAuU1BBQ0UsXG4gICAgICAgICAgICB0aGlzLktFWU1BUC5BUlJPV19ET1dOLCB0aGlzLktFWU1BUC5BUlJPV19MRUZULCB0aGlzLktFWU1BUC5BUlJPV19SSUdIVCwgdGhpcy5LRVlNQVAuQVJST1dfVVBcbiAgICAgICAgXS5pbmNsdWRlcyhrZXkgYXMgYW55KTtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgY29uc3QgZmxhdHRlbiA9IChhcnI6IGFueVtdKSA9PiB7XG4gICAgbGV0IHJlc3VsdCA9IFtdO1xuXG4gICAgYXJyLmZvckVhY2goZWwgPT4ge1xuICAgICAgICByZXN1bHQucHVzaChlbCk7XG4gICAgICAgIGlmIChlbC5jaGlsZHJlbikge1xuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBBcnJheS5pc0FycmF5KGVsLmNoaWxkcmVuKSA/IGVsLmNoaWxkcmVuIDogZWwuY2hpbGRyZW4udG9BcnJheSgpO1xuICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChmbGF0dGVuKGNoaWxkcmVuKSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBDYW5jZWxhYmxlRXZlbnRBcmdzIHtcbiAgICAvKipcbiAgICAgKiBQcm92aWRlcyB0aGUgYWJpbGl0eSB0byBjYW5jZWwgdGhlIGV2ZW50LlxuICAgICAqL1xuICAgIGNhbmNlbDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQmFzZUV2ZW50QXJncyB7XG4gICAgLyoqXG4gICAgICogUHJvdmlkZXMgcmVmZXJlbmNlIHRvIHRoZSBvd25lciBjb21wb25lbnQuXG4gICAgICovXG4gICAgb3duZXI/OiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FuY2VsYWJsZUJyb3dzZXJFdmVudEFyZ3MgZXh0ZW5kcyBDYW5jZWxhYmxlRXZlbnRBcmdzIHtcbiAgICAvKiogQnJvd3NlciBldmVudCAqL1xuICAgIGV2ZW50PzogRXZlbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUJhc2VDYW5jZWxhYmxlQnJvd3NlckV2ZW50QXJncyBleHRlbmRzIENhbmNlbGFibGVCcm93c2VyRXZlbnRBcmdzLCBJQmFzZUV2ZW50QXJncyB7IH1cblxuZXhwb3J0IGludGVyZmFjZSBJQmFzZUNhbmNlbGFibGVFdmVudEFyZ3MgZXh0ZW5kcyBDYW5jZWxhYmxlRXZlbnRBcmdzLCBJQmFzZUV2ZW50QXJncyB7IH1cblxuZXhwb3J0IGNvbnN0IEhPUklaT05UQUxfTkFWX0tFWVMgPSBuZXcgU2V0KFsnYXJyb3dsZWZ0JywgJ2xlZnQnLCAnYXJyb3dyaWdodCcsICdyaWdodCcsICdob21lJywgJ2VuZCddKTtcblxuZXhwb3J0IGNvbnN0IE5BVklHQVRJT05fS0VZUyA9IG5ldyBTZXQoW1xuICAgICdkb3duJyxcbiAgICAndXAnLFxuICAgICdsZWZ0JyxcbiAgICAncmlnaHQnLFxuICAgICdhcnJvd2Rvd24nLFxuICAgICdhcnJvd3VwJyxcbiAgICAnYXJyb3dsZWZ0JyxcbiAgICAnYXJyb3dyaWdodCcsXG4gICAgJ2hvbWUnLFxuICAgICdlbmQnLFxuICAgICdzcGFjZScsXG4gICAgJ3NwYWNlYmFyJyxcbiAgICAnICdcbl0pO1xuZXhwb3J0IGNvbnN0IEFDQ09SRElPTl9OQVZJR0FUSU9OX0tFWVMgPSBuZXcgU2V0KCd1cCBkb3duIGFycm93dXAgYXJyb3dkb3duIGhvbWUgZW5kJy5zcGxpdCgnICcpKTtcbmV4cG9ydCBjb25zdCBST1dfRVhQQU5EX0tFWVMgPSBuZXcgU2V0KCdyaWdodCBkb3duIGFycm93cmlnaHQgYXJyb3dkb3duJy5zcGxpdCgnICcpKTtcbmV4cG9ydCBjb25zdCBST1dfQ09MTEFQU0VfS0VZUyA9IG5ldyBTZXQoJ2xlZnQgdXAgYXJyb3dsZWZ0IGFycm93dXAnLnNwbGl0KCcgJykpO1xuZXhwb3J0IGNvbnN0IFJPV19BRERfS0VZUyA9IG5ldyBTZXQoWycrJywgJ2FkZCcsICfiiaAnLCAnwrEnLCAnPSddKTtcbmV4cG9ydCBjb25zdCBTVVBQT1JURURfS0VZUyA9IG5ldyBTZXQoWy4uLkFycmF5LmZyb20oTkFWSUdBVElPTl9LRVlTKSxcbi4uLkFycmF5LmZyb20oUk9XX0FERF9LRVlTKSwgJ2VudGVyJywgJ2YyJywgJ2VzY2FwZScsICdlc2MnLCAncGFnZWRvd24nLCAncGFnZXVwJ10pO1xuZXhwb3J0IGNvbnN0IEhFQURFUl9LRVlTID0gbmV3IFNldChbLi4uQXJyYXkuZnJvbShOQVZJR0FUSU9OX0tFWVMpLCAnZXNjYXBlJywgJ2VzYycsICdsJyxcbiAgICAvKiogVGhpcyBzeW1ib2wgY29ycmVzcG9uZHMgdG8gdGhlIEFsdCArIEwgY29tYmluYXRpb24gdW5kZXIgTUFDLiAqL1xuICAgICfCrCddKTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKiBAaW50ZXJuYWxcbiAqXG4gKiBDcmVhdGVzIGEgbmV3IFJlc2l6ZU9ic2VydmVyIG9uIGB0YXJnZXRgIGFuZCByZXR1cm5zIGl0IGFzIGFuIE9ic2VydmFibGUuXG4gKiBSdW4gdGhlIHJlc2l6ZU9ic2VydmFibGUgb3V0c2lkZSBhbmd1bGFyIHpvbmUsIGJlY2F1c2UgaXQgcGF0Y2hlcyB0aGUgTXV0YXRpb25PYnNlcnZlciB3aGljaCBjYXVzZXMgYW4gaW5maW5pdGUgbG9vcC5cbiAqIFJlbGF0ZWQgaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzMxNzEyXG4gKi9cbmV4cG9ydCBjb25zdCByZXNpemVPYnNlcnZhYmxlID0gKHRhcmdldDogSFRNTEVsZW1lbnQpOiBPYnNlcnZhYmxlPFJlc2l6ZU9ic2VydmVyRW50cnlbXT4gPT4gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyKSA9PiB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgKGdldFJlc2l6ZU9ic2VydmVyKCkpKChlbnRyaWVzOiBSZXNpemVPYnNlcnZlckVudHJ5W10pID0+IHtcbiAgICAgICAgb2JzZXJ2ZXIubmV4dChlbnRyaWVzKTtcbiAgICB9KTtcbiAgICBpbnN0YW5jZS5vYnNlcnZlKHRhcmdldCk7XG4gICAgY29uc3QgdW5zdWJzY3JpYmUgPSAoKSA9PiBpbnN0YW5jZS5kaXNjb25uZWN0KCk7XG4gICAgcmV0dXJuIHVuc3Vic2NyaWJlO1xufSk7XG5cbi8qKlxuICogQGhpZGRlblxuICogQGludGVybmFsXG4gKlxuICogQ29tcGFyZXMgdHdvIG1hcHMuXG4gKi9cbmV4cG9ydCBjb25zdCBjb21wYXJlTWFwcyA9IChtYXAxOiBNYXA8YW55LCBhbnk+LCBtYXAyOiBNYXA8YW55LCBhbnk+KTogYm9vbGVhbiA9PiB7XG4gICAgaWYgKCFtYXAyKSB7XG4gICAgICAgIHJldHVybiAhbWFwMSA/IHRydWUgOiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKG1hcDEuc2l6ZSAhPT0gbWFwMi5zaXplKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgbGV0IG1hdGNoID0gdHJ1ZTtcbiAgICBjb25zdCBrZXlzID0gQXJyYXkuZnJvbShtYXAyLmtleXMoKSk7XG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgICBpZiAobWFwMS5oYXMoa2V5KSkge1xuICAgICAgICAgICAgbWF0Y2ggPSBtYXAxLmdldChrZXkpID09PSBtYXAyLmdldChrZXkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWF0Y2g7XG59O1xuXG4vKipcbiAqXG4gKiBHaXZlbiBhIHByb3BlcnR5IGFjY2VzcyBwYXRoIGluIHRoZSBmb3JtYXQgYHgueS56YCByZXNvbHZlcyBhbmQgcmV0dXJuc1xuICogdGhlIHZhbHVlIG9mIHRoZSBgemAgcHJvcGVydHkgaW4gdGhlIHBhc3NlZCBvYmplY3QuXG4gKlxuICogQGhpZGRlblxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCByZXNvbHZlTmVzdGVkUGF0aCA9IChvYmo6IGFueSwgcGF0aDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgcGFydHMgPSBwYXRoPy5zcGxpdCgnLicpID8/IFtdO1xuICAgIGxldCBjdXJyZW50ID0gb2JqW3BhcnRzLnNoaWZ0KCldO1xuXG4gICAgcGFydHMuZm9yRWFjaChwcm9wID0+IHtcbiAgICAgICAgaWYgKGN1cnJlbnQpIHtcbiAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50W3Byb3BdO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY3VycmVudDtcbn07XG5cbi8qKlxuICpcbiAqIEdpdmVuIGEgcHJvcGVydHkgYWNjZXNzIHBhdGggaW4gdGhlIGZvcm1hdCBgeC55LnpgIGFuZCBhIHZhbHVlXG4gKiB0aGlzIGZ1bmN0aW9ucyBidWlsZHMgYW5kIHJldHVybnMgYW4gb2JqZWN0IGZvbGxvd2luZyB0aGUgYWNjZXNzIHBhdGguXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnNvbGUubG9nKCd4Lnkuei4nLCA0Mik7XG4gKiA+PiB7IHg6IHsgeTogeyB6OiA0MiB9IH0gfVxuICogYGBgXG4gKlxuICogQGhpZGRlblxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCByZXZlcnNlTWFwcGVyID0gKHBhdGg6IHN0cmluZywgdmFsdWU6IGFueSkgPT4ge1xuICAgIGNvbnN0IG9iaiA9IHt9O1xuICAgIGNvbnN0IHBhcnRzID0gcGF0aD8uc3BsaXQoJy4nKSA/PyBbXTtcblxuICAgIGxldCBfcHJvcCA9IHBhcnRzLnNoaWZ0KCk7XG4gICAgbGV0IG1hcHBpbmc6IGFueTtcblxuICAgIC8vIEluaXRpYWwgYmluZGluZyBmb3IgZmlyc3QgbGV2ZWwgYmluZGluZ3NcbiAgICBvYmpbX3Byb3BdID0gdmFsdWU7XG4gICAgbWFwcGluZyA9IG9iajtcblxuICAgIHBhcnRzLmZvckVhY2gocHJvcCA9PiB7XG4gICAgICAgIC8vIFN0YXJ0IGJ1aWxkaW5nIHRoZSBoaWVyYXJjaHlcbiAgICAgICAgbWFwcGluZ1tfcHJvcF0gPSB7fTtcbiAgICAgICAgLy8gR28gZG93biBhIGxldmVsXG4gICAgICAgIG1hcHBpbmcgPSBtYXBwaW5nW19wcm9wXTtcbiAgICAgICAgLy8gQmluZCB0aGUgdmFsdWUgYW5kIG1vdmUgdGhlIGtleVxuICAgICAgICBtYXBwaW5nW3Byb3BdID0gdmFsdWU7XG4gICAgICAgIF9wcm9wID0gcHJvcDtcbiAgICB9KTtcblxuICAgIHJldHVybiBvYmo7XG59O1xuXG5leHBvcnQgY29uc3QgeWllbGRpbmdMb29wID0gKGNvdW50OiBudW1iZXIsIGNodW5rU2l6ZTogbnVtYmVyLCBjYWxsYmFjazogKGluZGV4OiBudW1iZXIpID0+IHZvaWQsIGRvbmU6ICgpID0+IHZvaWQpID0+IHtcbiAgICBsZXQgaSA9IDA7XG4gICAgY29uc3QgY2h1bmsgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGVuZCA9IE1hdGgubWluKGkgKyBjaHVua1NpemUsIGNvdW50KTtcbiAgICAgICAgZm9yICg7IGkgPCBlbmQ7ICsraSkge1xuICAgICAgICAgICAgY2FsbGJhY2soaSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGkgPCBjb3VudCkge1xuICAgICAgICAgICAgc2V0SW1tZWRpYXRlKGNodW5rKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgY2h1bmsoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0NvbnN0cnVjdG9yID0gKHJlZjogYW55KSA9PiB0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nICYmIEJvb2xlYW4ocmVmLnByb3RvdHlwZSkgJiYgQm9vbGVhbihyZWYucHJvdG90eXBlLmNvbnN0cnVjdG9yKTtcblxuLyoqXG4gKiBTaW1pbGFyIHRvIEFuZ3VsYXIncyBmb3JtYXREYXRlLiBIb3dldmVyIGl0IHdpbGwgbm90IHRocm93IG9uIGB1bmRlZmluZWQgfCBudWxsIHwgJydgIGluc3RlYWRcbiAqIGNvYWxlc2NpbmcgdG8gYW4gZW1wdHkgc3RyaW5nLlxuICovXG5leHBvcnQgY29uc3QgZm9ybWF0RGF0ZSA9ICh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgRGF0ZSwgZm9ybWF0OiBzdHJpbmcsIGxvY2FsZTogc3RyaW5nLCB0aW1lem9uZT86IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09ICcnKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIF9mb3JtYXREYXRlKHZhbHVlLCBmb3JtYXQsIGxvY2FsZSwgdGltZXpvbmUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdEN1cnJlbmN5ID0gbmV3IEN1cnJlbmN5UGlwZSh1bmRlZmluZWQpLnRyYW5zZm9ybTtcblxuLyoqIENvbnZlcnRzIHBpeGVsIHZhbHVlcyB0byB0aGVpciByZW0gY291bnRlcnBhcnRzIGZvciBhIGJhc2UgdmFsdWUgKi9cbmV4cG9ydCBjb25zdCByZW0gPSAodmFsdWU6IG51bWJlciB8IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGJhc2UgPSBwYXJzZUZsb2F0KGdsb2JhbFRoaXMud2luZG93Py5nZXRDb21wdXRlZFN0eWxlKGdsb2JhbFRoaXMuZG9jdW1lbnQ/LmRvY3VtZW50RWxlbWVudCkuZ2V0UHJvcGVydHlWYWx1ZSgnLS1pZy1iYXNlLWZvbnQtc2l6ZScpKVxuICAgIHJldHVybiBOdW1iZXIodmFsdWUpIC8gYmFzZTtcbn1cblxuLyoqIEdldCB0aGUgc2l6ZSBvZiB0aGUgY29tcG9uZW50IGFzIGRlcml2ZWQgZnJvbSB0aGUgQ1NTIHNpemUgdmFyaWFibGUgKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb21wb25lbnRTaXplKGVsOiBFbGVtZW50KSB7XG4gICAgcmV0dXJuIGdsb2JhbFRoaXMud2luZG93Py5nZXRDb21wdXRlZFN0eWxlKGVsKS5nZXRQcm9wZXJ0eVZhbHVlKCctLWNvbXBvbmVudC1zaXplJyk7XG59XG5cbi8qKiBHZXQgdGhlIGZpcnN0IGl0ZW0gaW4gYW4gYXJyYXkgKi9cbmV4cG9ydCBmdW5jdGlvbiBmaXJzdDxUPihhcnI6IFRbXSkge1xuICAgIHJldHVybiBhcnIuYXQoMCkgYXMgVDtcbn1cblxuLyoqIEdldCB0aGUgbGFzdCBpdGVtIGluIGFuIGFycmF5ICovXG5leHBvcnQgZnVuY3Rpb24gbGFzdDxUPihhcnI6IFRbXSkge1xuICAgIHJldHVybiBhcnIuYXQoLTEpIGFzIFQ7XG59XG5cbi8qKiBDYWxjdWxhdGVzIHRoZSBtb2R1bG8gb2YgdHdvIG51bWJlcnMsIGVuc3VyaW5nIGEgbm9uLW5lZ2F0aXZlIHJlc3VsdC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb2R1bG8objogbnVtYmVyLCBkOiBudW1iZXIpIHtcbiAgICByZXR1cm4gKChuICUgZCkgKyBkKSAlIGQ7XG59XG5cbi8qKlxuICogU3BsaXRzIGFuIGFycmF5IGludG8gY2h1bmtzIG9mIGxlbmd0aCBgc2l6ZWAgYW5kIHJldHVybnMgYSBnZW5lcmF0b3JcbiAqIHlpZWxkaW5nIGVhY2ggY2h1bmsuXG4gKiBUaGUgbGFzdCBjaHVuayBtYXkgY29udGFpbiBsZXNzIHRoYW4gYHNpemVgIGVsZW1lbnRzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBhcnIgPSBbMCwxLDIsMyw0LDUsNiw3LDgsOV07XG4gKlxuICogQXJyYXkuZnJvbShjaHVuayhhcnIsIDIpKSAvLyBbWzAsIDFdLCBbMiwgM10sIFs0LCA1XSwgWzYsIDddLCBbOCwgOV1dXG4gKiBBcnJheS5mcm9tKGNodW5rKGFyciwgMykpIC8vIFtbMCwgMSwgMl0sIFszLCA0LCA1XSwgWzYsIDcsIDhdLCBbOV1dXG4gKiBBcnJheS5mcm9tKGNodW5rKFtdLCAzKSkgLy8gW11cbiAqIEFycmF5LmZyb20oY2h1bmsoYXJyLCAtMykpIC8vIEVycm9yXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uKiBpbnRvQ2h1bmtzPFQ+KGFycjogVFtdLCBzaXplOiBudW1iZXIpIHtcbiAgaWYgKHNpemUgPCAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzaXplIG11c3QgYmUgYW4gaW50ZWdlciA+PSAxJyk7XG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpICs9IHNpemUpIHtcbiAgICB5aWVsZCBhcnIuc2xpY2UoaSwgaSArIHNpemUpO1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHBhdGggLSBUaGUgVVJJIHBhdGggdG8gYmUgbm9ybWFsaXplZC5cbiAqIEByZXR1cm5zIHN0cmluZyBlbmNvZGVkIHVzaW5nIHRoZSBlbmNvZGVVUkkgZnVuY3Rpb24uXG4gKi9cbiBleHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplVVJJKHBhdGg6IHN0cmluZykge1xuICAgICByZXR1cm4gcGF0aC5zcGxpdCgnLycpLm1hcChlbmNvZGVVUkkpLmpvaW4oJy8nKTtcbiB9XG4iXX0=
|