@fundamental-ngx/platform 0.46.2-rc.2 → 0.46.2-rc.21
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/approval-flow/approval-flow-add-node/approval-flow-add-node.component.mjs +2 -2
- package/esm2022/approval-flow/approval-flow-approver-details/approval-flow-approver-details.component.mjs +2 -2
- package/esm2022/approval-flow/approval-flow-node/approval-flow-node.component.mjs +2 -2
- package/esm2022/approval-flow/approval-flow-team-list/approval-flow-team-list.component.mjs +1 -1
- package/esm2022/approval-flow/approval-flow.component.mjs +3 -3
- package/esm2022/dynamic-page/dynamic-page.component.mjs +2 -2
- package/esm2022/feed-input/feed-input.component.mjs +2 -2
- package/esm2022/form/combobox/combobox/combobox.component.mjs +3 -3
- package/esm2022/form/combobox/combobox-mobile/combobox/combobox-mobile.component.mjs +3 -3
- package/esm2022/form/combobox/combobox.module.mjs +20 -4
- package/esm2022/form/combobox/commons/base-combobox.mjs +36 -28
- package/esm2022/form/combobox/directives/combobox-item.directive.mjs +148 -0
- package/esm2022/form/combobox/index.mjs +4 -3
- package/esm2022/form/form-group/form-field/form-field.component.mjs +2 -2
- package/esm2022/form/form-group/form-field-group/form-field-group.component.mjs +2 -2
- package/esm2022/form/form-group/form-group-header/form-group-header.component.mjs +2 -2
- package/esm2022/form/form-group/form-group.component.mjs +3 -3
- package/esm2022/form/index.mjs +37 -36
- package/esm2022/form/input-group/input-group.component.mjs +2 -2
- package/esm2022/form/multi-combobox/commons/base-multi-combobox.mjs +4 -2
- package/esm2022/form/multi-combobox/multi-combobox/multi-combobox.component.mjs +7 -5
- package/esm2022/form/multi-combobox/multi-combobox-mobile/multi-combobox/multi-combobox-mobile.component.mjs +3 -3
- package/esm2022/form/multi-input/multi-input-mobile/multi-input-mobile.component.mjs +3 -3
- package/esm2022/form/multi-input/multi-input.component.mjs +6 -4
- package/esm2022/form/select/select/select.component.mjs +3 -3
- package/esm2022/form/step-input/number/number-step-input.component.mjs +2 -2
- package/esm2022/icon-tab-bar/components/icon-tab-bar-filter-type/icon-tab-bar-filter-type.component.mjs +2 -2
- package/esm2022/icon-tab-bar/components/icon-tab-bar-icon-type/icon-tab-bar-icon-type.component.mjs +2 -2
- package/esm2022/icon-tab-bar/components/icon-tab-bar-process-type/icon-tab-bar-process-type.component.mjs +2 -2
- package/esm2022/icon-tab-bar/components/icon-tab-bar-text-type/icon-tab-bar-text-type.component.mjs +1 -1
- package/esm2022/icon-tab-bar/components/popovers/icon-tab-bar-popover/icon-tab-bar-popover.component.mjs +2 -2
- package/esm2022/icon-tab-bar/components/popovers/text-type-popover/text-type-popover.component.mjs +1 -1
- package/esm2022/icon-tab-bar/icon-tab-bar.component.mjs +2 -2
- package/esm2022/link/link.component.mjs +3 -3
- package/esm2022/list/list.component.mjs +2 -2
- package/esm2022/list/object-list-item/object-list-item-row.component.mjs +2 -2
- package/esm2022/list/object-list-item/object-list-item.component.mjs +2 -2
- package/esm2022/list/standard-list-item/standard-list-item.component.mjs +2 -2
- package/esm2022/menu/menu-item.component.mjs +2 -2
- package/esm2022/menu/menu.component.mjs +2 -2
- package/esm2022/message-popover/components/message-view/message-view.component.mjs +3 -3
- package/esm2022/message-popover/message-popover.component.mjs +2 -2
- package/esm2022/object-attribute/object-attribute.component.mjs +2 -2
- package/esm2022/page-footer/page-footer.component.mjs +2 -2
- package/esm2022/search-field/search-field-mobile/search-field/search-field-mobile.component.mjs +3 -3
- package/esm2022/search-field/search-field.component.mjs +3 -3
- package/esm2022/settings-generator/layouts/settings-generator-sidebar-layout/settings-generator-sidebar-icon/settings-generator-sidebar-icon.component.mjs +2 -2
- package/esm2022/shared/domain/data-source.mjs +3 -2
- package/esm2022/smart-filter-bar/components/smart-filter-bar-settings-dialog/smart-filter-bar-settings-dialog.component.mjs +2 -2
- package/esm2022/split-menu-button/split-menu-button.component.mjs +2 -2
- package/esm2022/table/components/table-header-cell-content/table-header-cell-content.component.mjs +2 -2
- package/esm2022/table/table.component.mjs +13 -12
- package/esm2022/upload-collection/dialogs/move-to/move-to.component.mjs +2 -2
- package/esm2022/upload-collection/upload-collection/upload-collection.component.mjs +2 -2
- package/esm2022/value-help-dialog/components/select-tab/select-tab.component.mjs +2 -2
- package/esm2022/value-help-dialog/value-help-dialog/value-help-dialog.component.mjs +3 -3
- package/esm2022/variant-management/components/manage-variants-dialog/manage-variants-dialog.component.mjs +2 -2
- package/esm2022/variant-management/variant-management.component.mjs +2 -2
- package/esm2022/wizard-generator/components/dialog-wizard-generator/dialog-wizard-generator.component.mjs +3 -3
- package/fesm2022/fundamental-ngx-platform-approval-flow.mjs +6 -6
- package/fesm2022/fundamental-ngx-platform-approval-flow.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-dynamic-page.mjs +2 -2
- package/fesm2022/fundamental-ngx-platform-feed-input.mjs +2 -2
- package/fesm2022/fundamental-ngx-platform-form.mjs +484 -311
- package/fesm2022/fundamental-ngx-platform-form.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-icon-tab-bar.mjs +8 -8
- package/fesm2022/fundamental-ngx-platform-icon-tab-bar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-link.mjs +2 -2
- package/fesm2022/fundamental-ngx-platform-link.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-list.mjs +7 -7
- package/fesm2022/fundamental-ngx-platform-list.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-menu.mjs +4 -4
- package/fesm2022/fundamental-ngx-platform-message-popover.mjs +4 -4
- package/fesm2022/fundamental-ngx-platform-message-popover.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-object-attribute.mjs +2 -2
- package/fesm2022/fundamental-ngx-platform-page-footer.mjs +2 -2
- package/fesm2022/fundamental-ngx-platform-search-field.mjs +4 -4
- package/fesm2022/fundamental-ngx-platform-search-field.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-settings-generator.mjs +1 -1
- package/fesm2022/fundamental-ngx-platform-settings-generator.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-shared.mjs +2 -1
- package/fesm2022/fundamental-ngx-platform-shared.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-smart-filter-bar.mjs +1 -1
- package/fesm2022/fundamental-ngx-platform-smart-filter-bar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-split-menu-button.mjs +2 -2
- package/fesm2022/fundamental-ngx-platform-table.mjs +12 -11
- package/fesm2022/fundamental-ngx-platform-table.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-upload-collection.mjs +2 -2
- package/fesm2022/fundamental-ngx-platform-upload-collection.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-value-help-dialog.mjs +3 -3
- package/fesm2022/fundamental-ngx-platform-value-help-dialog.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-variant-management.mjs +3 -3
- package/fesm2022/fundamental-ngx-platform-variant-management.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-wizard-generator.mjs +2 -2
- package/fesm2022/fundamental-ngx-platform-wizard-generator.mjs.map +1 -1
- package/form/combobox/combobox.module.d.ts +2 -1
- package/form/combobox/commons/base-combobox.d.ts +6 -4
- package/form/combobox/directives/combobox-item.directive.d.ts +86 -0
- package/form/combobox/index.d.ts +3 -2
- package/form/index.d.ts +36 -35
- package/fundamental-ngx-platform-v0.46.2-rc.21.tgz +0 -0
- package/package.json +4 -4
- package/schematics/ng-add/index.js +1 -1
- package/table/table.component.d.ts +4 -3
- package/fundamental-ngx-platform-v0.46.2-rc.2.tgz +0 -0
|
@@ -509,7 +509,7 @@ export class PlatformValueHelpDialogComponent {
|
|
|
509
509
|
return true;
|
|
510
510
|
}
|
|
511
511
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: PlatformValueHelpDialogComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.DialogService }, { token: i2.RtlService, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
512
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.7", type: PlatformValueHelpDialogComponent, isStandalone: true, selector: "fdp-value-help-dialog", inputs: { id: "id", value: "value", dialogTitle: "dialogTitle", initialTab: "initialTab", tabs: "tabs", isOpenAdvanced: "isOpenAdvanced", dataSource: "dataSource", dialogConfig: "dialogConfig", uniqueKey: "uniqueKey", headerId: "headerId", tokenViewField: "tokenViewField", tokenizerFn: "tokenizerFn", mobile: "mobile", formatToken: "formatToken", conditionDisplayFn: "conditionDisplayFn", searchSelection: "searchSelection", searchTablePageSize: "searchTablePageSize", searchTableMobileHeaders: "searchTableMobileHeaders", maxShownInitialFilters: "maxShownInitialFilters", loading: "loading", defineStrategyLabels: "defineStrategyLabels" }, outputs: { valueChange: "valueChange", onDataRequested: "onDataRequested", onDataReceived: "onDataReceived" }, queries: [{ propertyName: "filters", predicate: VhdFilterComponent }], viewQueries: [{ propertyName: "dialogContainer", first: true, predicate: ["container"], descendants: true, read: TemplateRef }], usesOnChanges: true, ngImport: i0, template: "<ng-template let-dialog let-dialogConfig=\"dialogConfig\" #container>\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\n <fd-dialog-header [dir]=\"_dir\">\n <ng-template fdkTemplate=\"header\">\n <ng-container *ngTemplateOutlet=\"mobile ? mobileDialogTitle : desktopDialogTitle\"></ng-container>\n </ng-template>\n </fd-dialog-header>\n <fd-dialog-body [dir]=\"_dir\">\n <ng-container *ngIf=\"!mobile\">\n <ng-container *ngTemplateOutlet=\"advancedSearchContent\"></ng-container>\n </ng-container>\n <div fd-scrollbar class=\"fdp-value-help-dialog__content-holder\">\n <ng-container *ngIf=\"mobile\">\n <ng-container *ngTemplateOutlet=\"advancedSearchContent\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"selectedTab === _tabTypes.selectFromList\">\n <ng-container *ngTemplateOutlet=\"selectionContent\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"selectedTab === _tabTypes.defineConditions\">\n <ng-container *ngTemplateOutlet=\"defineConditionsContent\"></ng-container>\n </ng-container>\n </div>\n </fd-dialog-body>\n <fd-dialog-footer [dir]=\"_dir\">\n <ng-template fdkTemplate=\"footer\">\n <div\n class=\"fdp-value-help-dialog__row fdp-value-help-dialog__selection-row\"\n [attr.aria-label]=\"'platformVHD.selectionBarLabel' | fdTranslate\"\n *ngIf=\"!isMobileAdvancedSearchActive\"\n >\n <h5 fd-title class=\"selected-and-condition-title\" [id]=\"id + '-selected-item'\">\n <ng-container *ngIf=\"hasSelectedAndConditions; else noItemsPanelTitle\">\n {{ 'platformVHD.selectedAndConditionLabel' | fdTranslate }}\n ({{ selectedItems.length + validConditions.length }})\n </ng-container>\n </h5>\n\n <div class=\"fdp-value-help-dialog__tokens-wrapper\">\n <div class=\"fdp-value-help-dialog__tokens\">\n <!-- Selected items -->\n <fd-tokenizer [tokenizerFocusable]=\"false\">\n <fd-token\n fd-toolbar-item\n fdOverflowPriority=\"high\"\n class=\"fdp-value-help-dialog__selection-token\"\n (onCloseClick)=\"removeSelected(selectedIndex)\"\n *ngFor=\"\n let item of selectedItems;\n index as selectedIndex;\n trackBy: _trackBySelectedFn\n \"\n >{{ !!tokenizerFn ? (item | displayFnPipe : tokenizerFn) : item[tokenViewField] }}\n </fd-token>\n <fd-token\n fd-toolbar-item\n fdOverflowPriority=\"high\"\n class=\"fdp-value-help-dialog__selection-token\"\n (onCloseClick)=\"removeCondition(conditionIndex)\"\n *ngFor=\"\n let item of validConditions;\n index as conditionIndex;\n trackBy: _trackByConditionFn\n \"\n >\n <ng-container\n [ngTemplateOutlet]=\"conditionValue\"\n [ngTemplateOutletContext]=\"{ item: item }\"\n ></ng-container>\n </fd-token>\n <input fd-form-control fd-tokenizer-input [disabled]=\"!hasSelectedAndConditions\" />\n </fd-tokenizer>\n </div>\n <button\n (click)=\"clearSelectedAndConditionItems()\"\n class=\"fdp-value-help-dialog__tokens-clear\"\n fd-button\n [disabled]=\"!hasSelectedAndConditions\"\n fdType=\"transparent\"\n [title]=\"'platformVHD.footerClearSelectedTitle' | fdTranslate\"\n glyph=\"decline\"\n [attr.aria-label]=\"'platformVHD.footerClearSelectedAriaLabel' | fdTranslate\"\n ></button>\n </div>\n </div>\n <div class=\"fdp-value-help-dialog__actions-row\">\n <button\n fd-button\n data-go-advanced\n [label]=\"'platformVHD.searchButtonLabel' | fdTranslate\"\n fdType=\"emphasized\"\n *ngIf=\"mobile && isOpenAdvanced\"\n (click)=\"searchAdvanced()\"\n ></button>\n <button\n fd-button\n data-succes\n [label]=\"'platformVHD.successButtonLabel' | fdTranslate\"\n fdType=\"emphasized\"\n *ngIf=\"selectedTab !== _tabTypes.advancedSearch\"\n (click)=\"success()\"\n ></button>\n <button\n fd-button\n data-dismiss-dialog\n [label]=\"'platformVHD.cancelButtonLabel' | fdTranslate\"\n fdType=\"transparent\"\n (click)=\"dismiss()\"\n ></button>\n </div>\n </ng-template>\n </fd-dialog-footer>\n </fd-dialog>\n</ng-template>\n\n<ng-template #noItemsPanelTitle>\n {{ 'platformVHD.selectedEmptyLabel' | fdTranslate }}\n</ng-template>\n\n<ng-template #advancedSearchContent>\n <ng-container *ngIf=\"isSelectionTab\">\n <form class=\"fdp-value-help-dialog__row fdp-value-help-dialog__advanced-search\" [id]=\"'advanced-search-' + id\">\n <fd-layout-grid *ngIf=\"!mobile || (mobile && !isOpenAdvanced)\">\n <div fdLayoutGridRow>\n <div [fdLayoutGridCol]=\"12\" [colMd]=\"12\" [colLg]=\"mobile ? 12 : 6\" [colXl]=\"mobile ? 12 : 6\">\n <fdp-search-field\n [placeholder]=\"'platformVHD.searchButtonLabel' | fdTranslate\"\n (searchSubmit)=\"search()\"\n (inputChange)=\"_mainSearch = $event.text\"\n ></fdp-search-field>\n </div>\n\n <div\n [fdLayoutGridCol]=\"12\"\n [colMd]=\"12\"\n [colLg]=\"mobile ? 12 : 6\"\n [colXl]=\"mobile ? 12 : 6\"\n *ngIf=\"_hasAdvanced\"\n class=\"fdp-value-help-dialog__advanced-actions\"\n >\n <fd-toolbar [clearBorder]=\"true\">\n <fd-toolbar-spacer></fd-toolbar-spacer>\n <button\n fd-toolbar-item\n fd-button\n fdType=\"transparent\"\n *ngIf=\"_hasAdvanced\"\n [label]=\"\n (mobile\n ? 'platformVHD.searchAdvancedSearchLabel'\n : isOpenAdvanced\n ? 'platformVHD.searchHideAdvancedSearchLabel'\n : 'platformVHD.searchShowAdvancedSearchLabel'\n ) | fdTranslate\n \"\n (click)=\"toggleAdvancedSearch()\"\n ></button>\n <button\n fd-toolbar-item\n type=\"submit\"\n fd-button\n fdType=\"emphasized\"\n [label]=\"'platformVHD.searchButtonLabel' | fdTranslate\"\n (click)=\"filter()\"\n ></button>\n </fd-toolbar>\n </div>\n </div>\n </fd-layout-grid>\n <div\n [id]=\"'advanced-search-content-' + id\"\n *ngIf=\"isOpenAdvanced && _hasAdvanced\"\n class=\"fdp-value-help-dialog__advanced-filters\"\n >\n <fd-busy-indicator [loading]=\"loadingState && _firstLoadingDone\" [block]=\"true\">\n <fd-layout-grid\n *ngIf=\"_firstLoadingDone; else filtersLoading\"\n [class.fdp-value-help-dialog__with-toggle-all]=\"filters.length > maxShownInitialFilters\"\n >\n <div fdLayoutGridRow>\n <ng-container\n *ngFor=\"\n let filter of _displayedFilters | slice : 0 : shownFilterCount + 1;\n trackBy: _trackByFilterFn\n \"\n >\n <ng-container *ngIf=\"filter.advanced\">\n <div [fdLayoutGridCol]=\"12\" [colMd]=\"12\" [colLg]=\"6\" [colXl]=\"3\">\n <label class=\"fd-form-group__header\" fd-form-label [for]=\"'input' + filter.key\"\n >{{ filter.label }}:</label\n >\n <input\n [(ngModel)]=\"filter.value\"\n fd-form-control\n type=\"text\"\n [name]=\"'search-by-' + filter.label\"\n [id]=\"'input' + filter.key\"\n />\n </div>\n </ng-container>\n </ng-container>\n\n <div\n colGrow\n [fdLayoutGridCol]=\"12\"\n [colMd]=\"12\"\n [colLg]=\"6\"\n [colXl]=\"3\"\n *ngIf=\"filters.length > maxShownInitialFilters\"\n class=\"fdp-value-help-dialog__toggle-filters\"\n >\n <button\n fd-button\n fdType=\"transparent\"\n (click)=\"toggleShownFilters()\"\n [label]=\"\n (isShowAllFilters\n ? 'platformVHD.searchHideAllAdvancedSearchLabel'\n : 'platformVHD.searchShowAllAdvancedSearchLabel'\n ) | fdTranslate\n \"\n ></button>\n </div>\n </div>\n </fd-layout-grid>\n\n <ng-template #filtersLoading>\n <fd-skeleton width=\"100%\" height=\"100px\">\n <svg:rect x=\"0\" y=\"0\" rx=\"4\" width=\"15%\" height=\"8\" />\n <svg:rect x=\"0\" y=\"20\" rx=\"4\" width=\"25%\" height=\"16\" />\n\n <svg:rect x=\"35%\" y=\"0\" rx=\"4\" width=\"15%\" height=\"8\" />\n <svg:rect x=\"35%\" y=\"20\" rx=\"4\" width=\"25%\" height=\"16\" />\n\n <svg:rect x=\"0\" y=\"60\" rx=\"4\" width=\"15%\" height=\"8\" />\n <svg:rect x=\"0\" y=\"80\" rx=\"4\" width=\"25%\" height=\"16\" />\n </fd-skeleton>\n </ng-template>\n </fd-busy-indicator>\n </div>\n </form>\n </ng-container>\n</ng-template>\n\n<ng-template #selectionContent>\n <fd-busy-indicator\n [loading]=\"loadingState && _firstLoadingDone\"\n [block]=\"true\"\n class=\"fdp-value-help-dialog__table-busy-indicator\"\n >\n <fdp-select-tab\n [selected]=\"selectedItems\"\n [loading]=\"loadingState && !_firstLoadingDone\"\n [uid]=\"id\"\n [displayedData]=\"_displayedData\"\n [tabTitle]=\"'platformVHD.selectTabTitle' | fdTranslate\"\n [mobile]=\"mobile\"\n [selection]=\"searchSelection\"\n [uniqueKey]=\"uniqueKey\"\n [pageSize]=\"searchTablePageSize\"\n [defaultMobileHeaders]=\"searchTableMobileHeaders\"\n [filters]=\"_displayedFilters\"\n (select)=\"onSelect($event)\"\n ></fdp-select-tab>\n </fd-busy-indicator>\n</ng-template>\n\n<ng-template #defineConditionsContent>\n <div fd-scrollbar>\n <fdp-define-tab\n [strategyLabels]=\"defineStrategyLabels\"\n [conditions]=\"conditionItems\"\n [uid]=\"id\"\n [tabTitle]=\"'platformVHD.defineTabTitle' | fdTranslate\"\n [mobile]=\"mobile\"\n (conditionChange)=\"onConditionChange($event)\"\n ></fdp-define-tab>\n </div>\n</ng-template>\n\n<ng-template #dialogTitleText>\n <h5 [attr.id]=\"headerId\" fd-title>{{ dialogTitle }}</h5>\n</ng-template>\n\n<ng-template #tabLink let-title=\"title\" let-type=\"type\">\n <ng-container *ngIf=\"selectedTab === type && showSelectionTab && showDefineTab\">\n <button\n fd-button\n glyph=\"navigation-left-arrow\"\n fdType=\"transparent\"\n (click)=\"switchTab()\"\n [title]=\"'platformVHD.selectMobileTabBackBtnTitle' | fdTranslate\"\n ></button>\n <h5 fd-title>{{ title }}</h5>\n </ng-container>\n <ng-container *ngIf=\"selectedTab !== type\">\n <a\n fd-list-link\n (click)=\"switchTab(type)\"\n [title]=\"'platformVHD.selectMobileTabBtnOpenDialogLabel' | fdTranslate\"\n >\n <span fd-list-title>{{ title }}</span>\n <i fd-list-icon glyph=\"navigation-right-arrow\"></i>\n </a>\n </ng-container>\n</ng-template>\n\n<ng-template #advancedHeader>\n <button fd-button glyph=\"navigation-left-arrow\" fdType=\"transparent\" (click)=\"toggleAdvancedSearch()\"></button>\n <h5 fd-title>{{ 'platformVHD.searchAdvancedSearchLabel' | fdTranslate }}</h5>\n</ng-template>\n\n<ng-template #desktopDialogTitle>\n <ng-container *ngTemplateOutlet=\"dialogTitleText\"></ng-container>\n <ng-container *ngTemplateOutlet=\"desktopTabs\"></ng-container>\n</ng-template>\n\n<ng-template #mobileDialogTitle>\n <div class=\"fdp-value-help-dialog__mobile-title\">\n <ng-container *ngIf=\"hasSelectedTab; else dialogTitleText\">\n <ng-container *ngTemplateOutlet=\"selectedTabHeader\"></ng-container>\n </ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"mobileTabs\"></ng-container>\n</ng-template>\n\n<ng-template #desktopTabs>\n <nav fd-tab-nav class=\"fdp-value-help-dialog__tabs\" *ngIf=\"showSelectionTab && showDefineTab\">\n <div fd-tab-item (click)=\"switchTab(_tabTypes.selectFromList)\" *ngIf=\"showSelectionTab\">\n <a\n fd-tab-link\n [active]=\"selectedTab === _tabTypes.selectFromList\"\n [tabindex]=\"selectedTab === _tabTypes.selectFromList ? '0' : '-1'\"\n ><span fd-tab-tag>{{ 'platformVHD.selectTabTitle' | fdTranslate }}</span></a\n >\n </div>\n <div fd-tab-item (click)=\"switchTab(_tabTypes.defineConditions)\" *ngIf=\"showDefineTab\">\n <a\n fd-tab-link\n [active]=\"selectedTab === _tabTypes.defineConditions\"\n [tabindex]=\"selectedTab === _tabTypes.defineConditions ? '0' : '-1'\"\n ><span fd-tab-tag>{{ 'platformVHD.defineTabTitle' | fdTranslate }}</span></a\n >\n </div>\n </nav>\n</ng-template>\n\n<ng-template #mobileTabs>\n <div *ngIf=\"!hasSelectedTab && showSelectionTab && showDefineTab\">\n <div fd-bar [inPage]=\"true\" *ngIf=\"showSelectionTab\">\n <div fd-bar-left>\n <fd-bar-element>\n {{ 'platformVHD.selectTabTitle' | fdTranslate }}\n </fd-bar-element>\n </div>\n <div fd-bar-right>\n <fd-bar-element>\n <fd-button-bar\n glyph=\"navigation-right-arrow\"\n (click)=\"switchTab(_tabTypes.selectFromList)\"\n [title]=\"\n 'platformVHD.selectMobileTabTitle'\n | fdTranslate : { title: 'platformVHD.selectTabTitle' | fdTranslate }\n \"\n ></fd-button-bar>\n </fd-bar-element>\n </div>\n </div>\n <div fd-bar [inPage]=\"true\" *ngIf=\"showDefineTab\">\n <div fd-bar-left>\n <fd-bar-element>\n {{ 'platformVHD.defineTabTitle' | fdTranslate }}\n </fd-bar-element>\n </div>\n <div fd-bar-right>\n <fd-bar-element>\n <fd-button-bar\n glyph=\"navigation-right-arrow\"\n [title]=\"\n 'platformVHD.selectMobileTabTitle'\n | fdTranslate : { title: 'platformVHD.defineTabTitle' | fdTranslate }\n \"\n (click)=\"switchTab(_tabTypes.defineConditions)\"\n >\n </fd-button-bar>\n </fd-bar-element>\n </div>\n </div>\n </div>\n</ng-template>\n\n<ng-template #selectedTabHeader>\n <ng-container [ngSwitch]=\"selectedTab\">\n <ng-container *ngSwitchCase=\"_tabTypes.selectFromList\">\n <ng-container\n *ngTemplateOutlet=\"\n tabLink;\n context: {\n title: 'platformVHD.selectTabTitle' | fdTranslate,\n type: selectedTab\n }\n \"\n ></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"_tabTypes.advancedSearch\">\n <ng-container *ngTemplateOutlet=\"advancedHeader\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"_tabTypes.defineConditions\">\n <ng-container\n *ngTemplateOutlet=\"\n tabLink;\n context: {\n title: 'platformVHD.defineTabTitle' | fdTranslate,\n type: selectedTab\n }\n \"\n ></ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template #conditionValue let-item=\"item\">\n <span *ngIf=\"item.strategy !== 'empty' && item.strategy !== 'not_empty'; else emptyCondition\">\n {{ item | displayFnPipe : conditionDisplayFn : _displayedFilters }}\n </span>\n <ng-template #emptyCondition>\n <ng-container *ngIf=\"item.strategy === 'not_empty'; else emptyConditionText\">\n !(<ng-container *ngTemplateOutlet=\"emptyConditionText\"></ng-container>)\n </ng-container>\n </ng-template>\n</ng-template>\n\n<ng-template #emptyConditionText> <{{ 'platformVHD.selectMobileConditionEmpty' | fdTranslate }}> </ng-template>\n", styles: [".fdp-value-help-dialog .fd-dialog__body{display:flex;flex-direction:column;overflow:hidden}.fdp-value-help-dialog .fd-title--h5{padding:.5rem 0}.fdp-value-help-dialog .fd-toolbar{background:none;border:none;padding:.1735rem .5rem;height:auto;min-height:1.625rem}.fdp-value-help-dialog__row.fdp-value-help-dialog__advanced-search{padding-top:1rem}.fdp-value-help-dialog__advanced-search,.fdp-value-help-dialog .fd-dialog__body{background-color:var(--sapBackgroundColor, #f7f7f7)}.fdp-value-help-dialog__advanced-filters{padding-top:1rem}.fdp-value-help-dialog__advanced-filters label{height:auto}.fdp-value-help-dialog__toggle-filters{display:flex;justify-content:flex-end;align-items:flex-end}.fdp-value-help-dialog__toggle-filters .fd-button{margin-bottom:.25rem}.fdp-value-help-dialog__advanced-actions{display:flex;align-items:center;justify-content:flex-end}.fdp-value-help-dialog-mobile .fdp-value-help-dialog__advanced-actions{justify-content:flex-start}.fdp-value-help-dialog__advanced-actions .fd-toolbar{padding:0}.fdp-value-help-dialog .fd-bar.fd-bar--cozy{height:auto}.fdp-value-help-dialog .fd-dialog__header{box-shadow:none}.fdp-value-help-dialog .fd-dialog__header .fd-title{display:flex;align-items:center;padding-left:2rem;padding-right:2rem;min-height:2.5rem;box-shadow:none;border-bottom:none;background-color:var(--sapObjectHeader_Background, #fff);position:relative;z-index:2}.fdp-value-help-dialog .fd-dialog__header .fdp-value-help-dialog__mobile-title{display:flex;border-bottom:1px solid #d9d9d9;border-bottom:1px solid var(--sapGroup_TitleBorderColor, #d9d9d9)}.fdp-value-help-dialog .fd-dialog__header .fdp-value-help-dialog__mobile-title .fd-title{flex:1 1 auto;border:none}.fdp-value-help-dialog .fd-dialog__header .fdp-value-help-dialog__tabs{position:relative}.fdp-value-help-dialog .fd-dialog__header,.fdp-value-help-dialog .fd-dialog__footer{height:auto;flex-direction:column}.fdp-value-help-dialog .fd-dialog__header.fd-bar,.fdp-value-help-dialog .fd-dialog__footer.fd-bar{padding:0}.fdp-value-help-dialog .fd-dialog__footer{border-top:none}.fdp-value-help-dialog__content-holder{padding:0 2rem 1rem;display:flex;flex-direction:column;height:100%;width:100%;overflow:hidden}.fdp-value-help-dialog__row{padding:0 2rem 1rem}.fdp-value-help-dialog__row.fdp-value-help-dialog__selection-row{background-color:var(--sapBackgroundColor, #f7f7f7)}.fdp-value-help-dialog__tokens-wrapper{display:flex}.fdp-value-help-dialog__tokens{flex:1 1 auto;overflow:hidden;align-items:center;border:1px solid var(--sapContent_ForegroundBorderColor, #89919a);margin-right:.5rem;border-radius:var(--sapElement_BorderCornerRadius, .25rem);background:none}.fdp-value-help-dialog__tokens fd-toolbar{flex:1 1 auto;overflow:hidden}.fdp-value-help-dialog__tokens-clear{height:auto;min-width:2rem;padding:.125rem 0;justify-content:center}.fdp-value-help-dialog__actions-row{padding:.5rem 1rem;display:flex;align-items:center;justify-content:flex-end;border-top:.0625rem solid #d9d9d9;border-top:.0625rem solid var(--sapPageFooter_BorderColor, #d9d9d9)}.fdp-value-help-dialog__actions-row .fd-button{margin-left:.5rem}.fdp-value-help-dialog .fdp-value-help-dialog__hidden_label{display:none!important}.fdp-value-help-dialog__table-busy-indicator{height:100%}\n"], dependencies: [{ kind: "component", type: DialogComponent, selector: "fd-dialog", inputs: ["class", "dialogRef", "dialogConfig"] }, { kind: "component", type: DialogHeaderComponent, selector: "fd-dialog-header" }, { kind: "directive", type: TemplateDirective, selector: "[fdkTemplate]", inputs: ["fdkTemplate"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: ScrollbarDirective, selector: "[fdScrollbar], [fd-scrollbar]", inputs: ["noHorizontalScroll", "noVerticalScroll", "alwaysVisible", "overrideTabindex"] }, { kind: "component", type: DialogBodyComponent, selector: "fd-dialog-body" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: DialogFooterComponent, selector: "fd-dialog-footer" }, { kind: "component", type: TitleComponent, selector: "h1[fd-title], h2[fd-title], h3[fd-title], h4[fd-title], h5[fd-title], h6[fd-title]", inputs: ["headerSize", "wrap"], exportAs: ["fd-title"] }, { kind: "component", type: TokenizerComponent, selector: "fd-tokenizer", inputs: ["class", "disableKeyboardDeletion", "compactCollapse", "tokenizerFocusable", "inputValue", "glyph", "moreTerm", "open"], outputs: ["moreClickedEvent"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: TokenComponent, selector: "fd-token", inputs: ["disabled", "selected", "readOnly"], outputs: ["onCloseClick", "onRemove", "onTokenClick", "onTokenKeydown", "elementFocused"] }, { kind: "directive", type: ToolbarItemDirective, selector: "[fd-toolbar-item], [fdOverflowGroup], [fdOverflowPriority]", inputs: ["fdOverflowPriority", "fdOverflowGroup"] }, { kind: "component", type: FormControlComponent, selector: "[fd-form-control]", inputs: ["state", "type", "class", "ariaLabel", "ariaLabelledBy"] }, { kind: "directive", type: TokenizerInputDirective, selector: "[fdTokenizerInput], [fd-tokenizer-input]", inputs: ["class"] }, { kind: "component", type: ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: LayoutGridComponent, selector: "fd-layout-grid, [fdLayoutGrid]", inputs: ["class", "noGap", "noHorizontalGap", "noVerticalGap"] }, { kind: "directive", type: LayoutGridRowDirective, selector: "[fd-layout-grid-row], [fdLayoutGridRow]" }, { kind: "directive", type: LayoutGridColDirective, selector: "[fd-layout-grid-col], [fdLayoutGridCol]", inputs: ["fdLayoutGridCol", "colGrow", "colMd", "colLg", "colXl", "colOffset", "colOffsetMd", "colOffsetLg", "colOffsetXl", "class"] }, { kind: "component", type: SearchFieldComponent, selector: "fdp-search-field", inputs: ["categoryMode", "appearance", "placeholder", "mobile", "mobileConfig", "disableRefresh", "disableSearch", "suggestions", "dataSource", "inputText", "categories", "currentCategory", "categoryLabel", "hideCategoryLabel", "isLoading", "ariaLabel", "ariaLabelledby", "forceSearchButton", "disableSuggestionsFoundAnnouncer"], outputs: ["inputChange", "searchSubmit", "cancelSearch", "isOpenChange"] }, { kind: "component", type: ToolbarComponent, selector: "fd-toolbar", inputs: ["titleId", "class", "shouldOverflow", "fdType", "title", "active", "clearBorder", "forceOverflow", "tabindex", "ariaLabel", "ariaLabelledBy"] }, { kind: "directive", type: ToolbarSpacerDirective, selector: "fd-toolbar-spacer", inputs: ["width", "class", "fixed"] }, { kind: "component", type: BusyIndicatorComponent, selector: "fd-busy-indicator", inputs: ["loading", "size", "block", "ariaLabel", "title", "label", "ariaLive"] }, { kind: "component", type: FormLabelComponent, selector: "[fd-form-label]", inputs: ["required", "colon", "alignLabelEnd", "inlineHelpContent", "inlineHelpGlyph", "inlineHelpTriggers", "inlineHelpBodyPlacement", "inlineHelpPlacement", "inlineHelpLabel", "id"] }, { kind: "component", type: SkeletonComponent, selector: "fd-skeleton", inputs: ["animated", "type", "textLines", "width", "height"] }, { kind: "component", type: SelectTabComponent, selector: "fdp-select-tab", inputs: ["selectTabTitleId", "selectTabCountId", "selected", "loading", "filters", "selection", "uniqueKey", "pageSize", "defaultMobileHeaders", "displayedData"], outputs: ["select"] }, { kind: "component", type: DefineTabComponent, selector: "fdp-define-tab", inputs: ["titleId", "selectedId", "conditions", "strategyLabels"], outputs: ["includeChange", "excludeChange", "conditionChange"] }, { kind: "directive", type: ListLinkDirective, selector: "[fd-list-link], [fdListLink]", inputs: ["navigationIndicator", "navigated", "focusable"] }, { kind: "directive", type: ListTitleDirective, selector: "[fd-list-title], [fdListTitle]", inputs: ["wrap"] }, { kind: "directive", type: ListIconDirective, selector: "[fdListIcon], [fd-list-icon]", inputs: ["glyph", "class", "role"] }, { kind: "component", type: TabNavComponent, selector: "[fd-tab-nav]", inputs: ["class", "mode", "size"] }, { kind: "directive", type: TabItemDirective, selector: "[fd-tab-item]", inputs: ["class", "tabItemState", "header", "disabled", "fdTabItemClass"] }, { kind: "directive", type: TabLinkDirective, selector: "[fd-tab-link]", inputs: ["active", "disabled"], outputs: ["keyDown", "focused"] }, { kind: "directive", type: TabTagDirective, selector: "[fdTabTag], [fd-tab-tag]" }, { kind: "component", type: BarComponent, selector: "[fd-bar]", inputs: ["class", "barDesign", "inPage", "inHomePage", "size"] }, { kind: "directive", type: BarLeftDirective, selector: "[fd-bar-left]" }, { kind: "directive", type: BarElementDirective, selector: "fd-bar-element", inputs: ["fullWidth"] }, { kind: "directive", type: BarRightDirective, selector: "[fd-bar-right]" }, { kind: "component", type: ButtonBarComponent, selector: "fd-button-bar", inputs: ["fullWidth", "fdType", "title", "ariaLabel", "ariaLabelledby", "id"] }, { kind: "directive", type: NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "pipe", type: SlicePipe, name: "slice" }, { kind: "pipe", type: FdTranslatePipe, name: "fdTranslate" }, { kind: "pipe", type: DisplayFnPipe, name: "displayFnPipe" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
512
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.7", type: PlatformValueHelpDialogComponent, isStandalone: true, selector: "fdp-value-help-dialog", inputs: { id: "id", value: "value", dialogTitle: "dialogTitle", initialTab: "initialTab", tabs: "tabs", isOpenAdvanced: "isOpenAdvanced", dataSource: "dataSource", dialogConfig: "dialogConfig", uniqueKey: "uniqueKey", headerId: "headerId", tokenViewField: "tokenViewField", tokenizerFn: "tokenizerFn", mobile: "mobile", formatToken: "formatToken", conditionDisplayFn: "conditionDisplayFn", searchSelection: "searchSelection", searchTablePageSize: "searchTablePageSize", searchTableMobileHeaders: "searchTableMobileHeaders", maxShownInitialFilters: "maxShownInitialFilters", loading: "loading", defineStrategyLabels: "defineStrategyLabels" }, outputs: { valueChange: "valueChange", onDataRequested: "onDataRequested", onDataReceived: "onDataReceived" }, queries: [{ propertyName: "filters", predicate: VhdFilterComponent }], viewQueries: [{ propertyName: "dialogContainer", first: true, predicate: ["container"], descendants: true, read: TemplateRef }], usesOnChanges: true, ngImport: i0, template: "<ng-template [fdDialogTemplate] let-dialog let-dialogConfig=\"dialogConfig\" #container>\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\n <fd-dialog-header [dir]=\"_dir\">\n <ng-template fdkTemplate=\"header\">\n <ng-container *ngTemplateOutlet=\"mobile ? mobileDialogTitle : desktopDialogTitle\"></ng-container>\n </ng-template>\n </fd-dialog-header>\n <fd-dialog-body [dir]=\"_dir\">\n <ng-container *ngIf=\"!mobile\">\n <ng-container *ngTemplateOutlet=\"advancedSearchContent\"></ng-container>\n </ng-container>\n <div fd-scrollbar class=\"fdp-value-help-dialog__content-holder\">\n <ng-container *ngIf=\"mobile\">\n <ng-container *ngTemplateOutlet=\"advancedSearchContent\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"selectedTab === _tabTypes.selectFromList\">\n <ng-container *ngTemplateOutlet=\"selectionContent\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"selectedTab === _tabTypes.defineConditions\">\n <ng-container *ngTemplateOutlet=\"defineConditionsContent\"></ng-container>\n </ng-container>\n </div>\n </fd-dialog-body>\n <fd-dialog-footer [dir]=\"_dir\">\n <ng-template fdkTemplate=\"footer\">\n <div\n class=\"fdp-value-help-dialog__row fdp-value-help-dialog__selection-row\"\n [attr.aria-label]=\"'platformVHD.selectionBarLabel' | fdTranslate\"\n *ngIf=\"!isMobileAdvancedSearchActive\"\n >\n <h5 fd-title class=\"selected-and-condition-title\" [id]=\"id + '-selected-item'\">\n <ng-container *ngIf=\"hasSelectedAndConditions; else noItemsPanelTitle\">\n {{ 'platformVHD.selectedAndConditionLabel' | fdTranslate }}\n ({{ selectedItems.length + validConditions.length }})\n </ng-container>\n </h5>\n\n <div class=\"fdp-value-help-dialog__tokens-wrapper\">\n <div class=\"fdp-value-help-dialog__tokens\">\n <!-- Selected items -->\n <fd-tokenizer [tokenizerFocusable]=\"false\">\n <fd-token\n fd-toolbar-item\n fdOverflowPriority=\"high\"\n class=\"fdp-value-help-dialog__selection-token\"\n (onCloseClick)=\"removeSelected(selectedIndex)\"\n *ngFor=\"\n let item of selectedItems;\n index as selectedIndex;\n trackBy: _trackBySelectedFn\n \"\n >{{ !!tokenizerFn ? (item | displayFnPipe : tokenizerFn) : item[tokenViewField] }}\n </fd-token>\n <fd-token\n fd-toolbar-item\n fdOverflowPriority=\"high\"\n class=\"fdp-value-help-dialog__selection-token\"\n (onCloseClick)=\"removeCondition(conditionIndex)\"\n *ngFor=\"\n let item of validConditions;\n index as conditionIndex;\n trackBy: _trackByConditionFn\n \"\n >\n <ng-container\n [ngTemplateOutlet]=\"conditionValue\"\n [ngTemplateOutletContext]=\"{ item: item }\"\n ></ng-container>\n </fd-token>\n <input fd-form-control fd-tokenizer-input [disabled]=\"!hasSelectedAndConditions\" />\n </fd-tokenizer>\n </div>\n <button\n (click)=\"clearSelectedAndConditionItems()\"\n class=\"fdp-value-help-dialog__tokens-clear\"\n fd-button\n [disabled]=\"!hasSelectedAndConditions\"\n fdType=\"transparent\"\n [title]=\"'platformVHD.footerClearSelectedTitle' | fdTranslate\"\n glyph=\"decline\"\n [attr.aria-label]=\"'platformVHD.footerClearSelectedAriaLabel' | fdTranslate\"\n ></button>\n </div>\n </div>\n <div class=\"fdp-value-help-dialog__actions-row\">\n <button\n fd-button\n data-go-advanced\n [label]=\"'platformVHD.searchButtonLabel' | fdTranslate\"\n fdType=\"emphasized\"\n *ngIf=\"mobile && isOpenAdvanced\"\n (click)=\"searchAdvanced()\"\n ></button>\n <button\n fd-button\n data-succes\n [label]=\"'platformVHD.successButtonLabel' | fdTranslate\"\n fdType=\"emphasized\"\n *ngIf=\"selectedTab !== _tabTypes.advancedSearch\"\n (click)=\"success()\"\n ></button>\n <button\n fd-button\n data-dismiss-dialog\n [label]=\"'platformVHD.cancelButtonLabel' | fdTranslate\"\n fdType=\"transparent\"\n (click)=\"dismiss()\"\n ></button>\n </div>\n </ng-template>\n </fd-dialog-footer>\n </fd-dialog>\n</ng-template>\n\n<ng-template #noItemsPanelTitle>\n {{ 'platformVHD.selectedEmptyLabel' | fdTranslate }}\n</ng-template>\n\n<ng-template #advancedSearchContent>\n <ng-container *ngIf=\"isSelectionTab\">\n <form class=\"fdp-value-help-dialog__row fdp-value-help-dialog__advanced-search\" [id]=\"'advanced-search-' + id\">\n <fd-layout-grid *ngIf=\"!mobile || (mobile && !isOpenAdvanced)\">\n <div fdLayoutGridRow>\n <div [fdLayoutGridCol]=\"12\" [colMd]=\"12\" [colLg]=\"mobile ? 12 : 6\" [colXl]=\"mobile ? 12 : 6\">\n <fdp-search-field\n [placeholder]=\"'platformVHD.searchButtonLabel' | fdTranslate\"\n (searchSubmit)=\"search()\"\n (inputChange)=\"_mainSearch = $event.text\"\n ></fdp-search-field>\n </div>\n\n <div\n [fdLayoutGridCol]=\"12\"\n [colMd]=\"12\"\n [colLg]=\"mobile ? 12 : 6\"\n [colXl]=\"mobile ? 12 : 6\"\n *ngIf=\"_hasAdvanced\"\n class=\"fdp-value-help-dialog__advanced-actions\"\n >\n <fd-toolbar [clearBorder]=\"true\">\n <fd-toolbar-spacer></fd-toolbar-spacer>\n <button\n fd-toolbar-item\n fd-button\n fdType=\"transparent\"\n *ngIf=\"_hasAdvanced\"\n [label]=\"\n (mobile\n ? 'platformVHD.searchAdvancedSearchLabel'\n : isOpenAdvanced\n ? 'platformVHD.searchHideAdvancedSearchLabel'\n : 'platformVHD.searchShowAdvancedSearchLabel'\n ) | fdTranslate\n \"\n (click)=\"toggleAdvancedSearch()\"\n ></button>\n <button\n fd-toolbar-item\n type=\"submit\"\n fd-button\n fdType=\"emphasized\"\n [label]=\"'platformVHD.searchButtonLabel' | fdTranslate\"\n (click)=\"filter()\"\n ></button>\n </fd-toolbar>\n </div>\n </div>\n </fd-layout-grid>\n <div\n [id]=\"'advanced-search-content-' + id\"\n *ngIf=\"isOpenAdvanced && _hasAdvanced\"\n class=\"fdp-value-help-dialog__advanced-filters\"\n >\n <fd-busy-indicator [loading]=\"loadingState && _firstLoadingDone\" [block]=\"true\">\n <fd-layout-grid\n *ngIf=\"_firstLoadingDone; else filtersLoading\"\n [class.fdp-value-help-dialog__with-toggle-all]=\"filters.length > maxShownInitialFilters\"\n >\n <div fdLayoutGridRow>\n <ng-container\n *ngFor=\"\n let filter of _displayedFilters | slice : 0 : shownFilterCount + 1;\n trackBy: _trackByFilterFn\n \"\n >\n <ng-container *ngIf=\"filter.advanced\">\n <div [fdLayoutGridCol]=\"12\" [colMd]=\"12\" [colLg]=\"6\" [colXl]=\"3\">\n <label class=\"fd-form-group__header\" fd-form-label [for]=\"'input' + filter.key\"\n >{{ filter.label }}:</label\n >\n <input\n [(ngModel)]=\"filter.value\"\n fd-form-control\n type=\"text\"\n [name]=\"'search-by-' + filter.label\"\n [id]=\"'input' + filter.key\"\n />\n </div>\n </ng-container>\n </ng-container>\n\n <div\n colGrow\n [fdLayoutGridCol]=\"12\"\n [colMd]=\"12\"\n [colLg]=\"6\"\n [colXl]=\"3\"\n *ngIf=\"filters.length > maxShownInitialFilters\"\n class=\"fdp-value-help-dialog__toggle-filters\"\n >\n <button\n fd-button\n fdType=\"transparent\"\n (click)=\"toggleShownFilters()\"\n [label]=\"\n (isShowAllFilters\n ? 'platformVHD.searchHideAllAdvancedSearchLabel'\n : 'platformVHD.searchShowAllAdvancedSearchLabel'\n ) | fdTranslate\n \"\n ></button>\n </div>\n </div>\n </fd-layout-grid>\n\n <ng-template #filtersLoading>\n <fd-skeleton width=\"100%\" height=\"100px\">\n <svg:rect x=\"0\" y=\"0\" rx=\"4\" width=\"15%\" height=\"8\" />\n <svg:rect x=\"0\" y=\"20\" rx=\"4\" width=\"25%\" height=\"16\" />\n\n <svg:rect x=\"35%\" y=\"0\" rx=\"4\" width=\"15%\" height=\"8\" />\n <svg:rect x=\"35%\" y=\"20\" rx=\"4\" width=\"25%\" height=\"16\" />\n\n <svg:rect x=\"0\" y=\"60\" rx=\"4\" width=\"15%\" height=\"8\" />\n <svg:rect x=\"0\" y=\"80\" rx=\"4\" width=\"25%\" height=\"16\" />\n </fd-skeleton>\n </ng-template>\n </fd-busy-indicator>\n </div>\n </form>\n </ng-container>\n</ng-template>\n\n<ng-template #selectionContent>\n <fd-busy-indicator\n [loading]=\"loadingState && _firstLoadingDone\"\n [block]=\"true\"\n class=\"fdp-value-help-dialog__table-busy-indicator\"\n >\n <fdp-select-tab\n [selected]=\"selectedItems\"\n [loading]=\"loadingState && !_firstLoadingDone\"\n [uid]=\"id\"\n [displayedData]=\"_displayedData\"\n [tabTitle]=\"'platformVHD.selectTabTitle' | fdTranslate\"\n [mobile]=\"mobile\"\n [selection]=\"searchSelection\"\n [uniqueKey]=\"uniqueKey\"\n [pageSize]=\"searchTablePageSize\"\n [defaultMobileHeaders]=\"searchTableMobileHeaders\"\n [filters]=\"_displayedFilters\"\n (select)=\"onSelect($event)\"\n ></fdp-select-tab>\n </fd-busy-indicator>\n</ng-template>\n\n<ng-template #defineConditionsContent>\n <div fd-scrollbar>\n <fdp-define-tab\n [strategyLabels]=\"defineStrategyLabels\"\n [conditions]=\"conditionItems\"\n [uid]=\"id\"\n [tabTitle]=\"'platformVHD.defineTabTitle' | fdTranslate\"\n [mobile]=\"mobile\"\n (conditionChange)=\"onConditionChange($event)\"\n ></fdp-define-tab>\n </div>\n</ng-template>\n\n<ng-template #dialogTitleText>\n <h5 [attr.id]=\"headerId\" fd-title>{{ dialogTitle }}</h5>\n</ng-template>\n\n<ng-template #tabLink let-title=\"title\" let-type=\"type\">\n <ng-container *ngIf=\"selectedTab === type && showSelectionTab && showDefineTab\">\n <button\n fd-button\n glyph=\"navigation-left-arrow\"\n fdType=\"transparent\"\n (click)=\"switchTab()\"\n [title]=\"'platformVHD.selectMobileTabBackBtnTitle' | fdTranslate\"\n ></button>\n <h5 fd-title>{{ title }}</h5>\n </ng-container>\n <ng-container *ngIf=\"selectedTab !== type\">\n <a\n fd-list-link\n (click)=\"switchTab(type)\"\n [title]=\"'platformVHD.selectMobileTabBtnOpenDialogLabel' | fdTranslate\"\n >\n <span fd-list-title>{{ title }}</span>\n <i fd-list-icon glyph=\"navigation-right-arrow\"></i>\n </a>\n </ng-container>\n</ng-template>\n\n<ng-template #advancedHeader>\n <button fd-button glyph=\"navigation-left-arrow\" fdType=\"transparent\" (click)=\"toggleAdvancedSearch()\"></button>\n <h5 fd-title>{{ 'platformVHD.searchAdvancedSearchLabel' | fdTranslate }}</h5>\n</ng-template>\n\n<ng-template #desktopDialogTitle>\n <ng-container *ngTemplateOutlet=\"dialogTitleText\"></ng-container>\n <ng-container *ngTemplateOutlet=\"desktopTabs\"></ng-container>\n</ng-template>\n\n<ng-template #mobileDialogTitle>\n <div class=\"fdp-value-help-dialog__mobile-title\">\n <ng-container *ngIf=\"hasSelectedTab; else dialogTitleText\">\n <ng-container *ngTemplateOutlet=\"selectedTabHeader\"></ng-container>\n </ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"mobileTabs\"></ng-container>\n</ng-template>\n\n<ng-template #desktopTabs>\n <nav fd-tab-nav class=\"fdp-value-help-dialog__tabs\" *ngIf=\"showSelectionTab && showDefineTab\">\n <div fd-tab-item (click)=\"switchTab(_tabTypes.selectFromList)\" *ngIf=\"showSelectionTab\">\n <a\n fd-tab-link\n [active]=\"selectedTab === _tabTypes.selectFromList\"\n [tabindex]=\"selectedTab === _tabTypes.selectFromList ? '0' : '-1'\"\n ><span fd-tab-tag>{{ 'platformVHD.selectTabTitle' | fdTranslate }}</span></a\n >\n </div>\n <div fd-tab-item (click)=\"switchTab(_tabTypes.defineConditions)\" *ngIf=\"showDefineTab\">\n <a\n fd-tab-link\n [active]=\"selectedTab === _tabTypes.defineConditions\"\n [tabindex]=\"selectedTab === _tabTypes.defineConditions ? '0' : '-1'\"\n ><span fd-tab-tag>{{ 'platformVHD.defineTabTitle' | fdTranslate }}</span></a\n >\n </div>\n </nav>\n</ng-template>\n\n<ng-template #mobileTabs>\n <div *ngIf=\"!hasSelectedTab && showSelectionTab && showDefineTab\">\n <div fd-bar [inPage]=\"true\" *ngIf=\"showSelectionTab\">\n <div fd-bar-left>\n <fd-bar-element>\n {{ 'platformVHD.selectTabTitle' | fdTranslate }}\n </fd-bar-element>\n </div>\n <div fd-bar-right>\n <fd-bar-element>\n <fd-button-bar\n glyph=\"navigation-right-arrow\"\n (click)=\"switchTab(_tabTypes.selectFromList)\"\n [title]=\"\n 'platformVHD.selectMobileTabTitle'\n | fdTranslate : { title: 'platformVHD.selectTabTitle' | fdTranslate }\n \"\n ></fd-button-bar>\n </fd-bar-element>\n </div>\n </div>\n <div fd-bar [inPage]=\"true\" *ngIf=\"showDefineTab\">\n <div fd-bar-left>\n <fd-bar-element>\n {{ 'platformVHD.defineTabTitle' | fdTranslate }}\n </fd-bar-element>\n </div>\n <div fd-bar-right>\n <fd-bar-element>\n <fd-button-bar\n glyph=\"navigation-right-arrow\"\n [title]=\"\n 'platformVHD.selectMobileTabTitle'\n | fdTranslate : { title: 'platformVHD.defineTabTitle' | fdTranslate }\n \"\n (click)=\"switchTab(_tabTypes.defineConditions)\"\n >\n </fd-button-bar>\n </fd-bar-element>\n </div>\n </div>\n </div>\n</ng-template>\n\n<ng-template #selectedTabHeader>\n <ng-container [ngSwitch]=\"selectedTab\">\n <ng-container *ngSwitchCase=\"_tabTypes.selectFromList\">\n <ng-container\n *ngTemplateOutlet=\"\n tabLink;\n context: {\n title: 'platformVHD.selectTabTitle' | fdTranslate,\n type: selectedTab\n }\n \"\n ></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"_tabTypes.advancedSearch\">\n <ng-container *ngTemplateOutlet=\"advancedHeader\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"_tabTypes.defineConditions\">\n <ng-container\n *ngTemplateOutlet=\"\n tabLink;\n context: {\n title: 'platformVHD.defineTabTitle' | fdTranslate,\n type: selectedTab\n }\n \"\n ></ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template #conditionValue let-item=\"item\">\n <span *ngIf=\"item.strategy !== 'empty' && item.strategy !== 'not_empty'; else emptyCondition\">\n {{ item | displayFnPipe : conditionDisplayFn : _displayedFilters }}\n </span>\n <ng-template #emptyCondition>\n <ng-container *ngIf=\"item.strategy === 'not_empty'; else emptyConditionText\">\n !(<ng-container *ngTemplateOutlet=\"emptyConditionText\"></ng-container>)\n </ng-container>\n </ng-template>\n</ng-template>\n\n<ng-template #emptyConditionText> <{{ 'platformVHD.selectMobileConditionEmpty' | fdTranslate }}> </ng-template>\n", styles: [".fdp-value-help-dialog .fd-dialog__body{display:flex;flex-direction:column;overflow:hidden}.fdp-value-help-dialog .fd-title--h5{padding:.5rem 0}.fdp-value-help-dialog .fd-toolbar{background:none;border:none;padding:.1735rem .5rem;height:auto;min-height:1.625rem}.fdp-value-help-dialog__row.fdp-value-help-dialog__advanced-search{padding-top:1rem}.fdp-value-help-dialog__advanced-search,.fdp-value-help-dialog .fd-dialog__body{background-color:var(--sapBackgroundColor, #f7f7f7)}.fdp-value-help-dialog__advanced-filters{padding-top:1rem}.fdp-value-help-dialog__advanced-filters label{height:auto}.fdp-value-help-dialog__toggle-filters{display:flex;justify-content:flex-end;align-items:flex-end}.fdp-value-help-dialog__toggle-filters .fd-button{margin-bottom:.25rem}.fdp-value-help-dialog__advanced-actions{display:flex;align-items:center;justify-content:flex-end}.fdp-value-help-dialog-mobile .fdp-value-help-dialog__advanced-actions{justify-content:flex-start}.fdp-value-help-dialog__advanced-actions .fd-toolbar{padding:0}.fdp-value-help-dialog .fd-bar.fd-bar--cozy{height:auto}.fdp-value-help-dialog .fd-dialog__header{box-shadow:none}.fdp-value-help-dialog .fd-dialog__header .fd-title{display:flex;align-items:center;padding-left:2rem;padding-right:2rem;min-height:2.5rem;box-shadow:none;border-bottom:none;background-color:var(--sapObjectHeader_Background, #fff);position:relative;z-index:2}.fdp-value-help-dialog .fd-dialog__header .fdp-value-help-dialog__mobile-title{display:flex;border-bottom:1px solid #d9d9d9;border-bottom:1px solid var(--sapGroup_TitleBorderColor, #d9d9d9)}.fdp-value-help-dialog .fd-dialog__header .fdp-value-help-dialog__mobile-title .fd-title{flex:1 1 auto;border:none}.fdp-value-help-dialog .fd-dialog__header .fdp-value-help-dialog__tabs{position:relative}.fdp-value-help-dialog .fd-dialog__header,.fdp-value-help-dialog .fd-dialog__footer{height:auto;flex-direction:column}.fdp-value-help-dialog .fd-dialog__header.fd-bar,.fdp-value-help-dialog .fd-dialog__footer.fd-bar{padding:0}.fdp-value-help-dialog .fd-dialog__footer{border-top:none}.fdp-value-help-dialog__content-holder{padding:0 2rem 1rem;display:flex;flex-direction:column;height:100%;width:100%;overflow:hidden}.fdp-value-help-dialog__row{padding:0 2rem 1rem}.fdp-value-help-dialog__row.fdp-value-help-dialog__selection-row{background-color:var(--sapBackgroundColor, #f7f7f7)}.fdp-value-help-dialog__tokens-wrapper{display:flex}.fdp-value-help-dialog__tokens{flex:1 1 auto;overflow:hidden;align-items:center;border:1px solid var(--sapContent_ForegroundBorderColor, #89919a);margin-right:.5rem;border-radius:var(--sapElement_BorderCornerRadius, .25rem);background:none}.fdp-value-help-dialog__tokens fd-toolbar{flex:1 1 auto;overflow:hidden}.fdp-value-help-dialog__tokens-clear{height:auto;min-width:2rem;padding:.125rem 0;justify-content:center}.fdp-value-help-dialog__actions-row{padding:.5rem 1rem;display:flex;align-items:center;justify-content:flex-end;border-top:.0625rem solid #d9d9d9;border-top:.0625rem solid var(--sapPageFooter_BorderColor, #d9d9d9)}.fdp-value-help-dialog__actions-row .fd-button{margin-left:.5rem}.fdp-value-help-dialog .fdp-value-help-dialog__hidden_label{display:none!important}.fdp-value-help-dialog__table-busy-indicator{height:100%}\n"], dependencies: [{ kind: "component", type: DialogComponent, selector: "fd-dialog", inputs: ["class", "dialogRef", "dialogConfig"] }, { kind: "component", type: DialogHeaderComponent, selector: "fd-dialog-header" }, { kind: "directive", type: TemplateDirective, selector: "[fdkTemplate]", inputs: ["fdkTemplate"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: ScrollbarDirective, selector: "[fdScrollbar], [fd-scrollbar]", inputs: ["noHorizontalScroll", "noVerticalScroll", "alwaysVisible"] }, { kind: "component", type: DialogBodyComponent, selector: "fd-dialog-body" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: DialogFooterComponent, selector: "fd-dialog-footer" }, { kind: "component", type: TitleComponent, selector: "h1[fd-title], h2[fd-title], h3[fd-title], h4[fd-title], h5[fd-title], h6[fd-title]", inputs: ["headerSize", "wrap"], exportAs: ["fd-title"] }, { kind: "component", type: TokenizerComponent, selector: "fd-tokenizer", inputs: ["class", "disableKeyboardDeletion", "compactCollapse", "tokenizerFocusable", "inputValue", "glyph", "moreTerm", "open"], outputs: ["moreClickedEvent"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: TokenComponent, selector: "fd-token", inputs: ["disabled", "selected", "readOnly"], outputs: ["onCloseClick", "onRemove", "onTokenClick", "onTokenKeydown", "elementFocused"] }, { kind: "directive", type: ToolbarItemDirective, selector: "[fd-toolbar-item], [fdOverflowGroup], [fdOverflowPriority]", inputs: ["fdOverflowPriority", "fdOverflowGroup"] }, { kind: "component", type: FormControlComponent, selector: "[fd-form-control]", inputs: ["state", "type", "class", "ariaLabel", "ariaLabelledBy"] }, { kind: "directive", type: TokenizerInputDirective, selector: "[fdTokenizerInput], [fd-tokenizer-input]", inputs: ["class"] }, { kind: "component", type: ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: LayoutGridComponent, selector: "fd-layout-grid, [fdLayoutGrid]", inputs: ["class", "noGap", "noHorizontalGap", "noVerticalGap"] }, { kind: "directive", type: LayoutGridRowDirective, selector: "[fd-layout-grid-row], [fdLayoutGridRow]" }, { kind: "directive", type: LayoutGridColDirective, selector: "[fd-layout-grid-col], [fdLayoutGridCol]", inputs: ["fdLayoutGridCol", "colGrow", "colMd", "colLg", "colXl", "colOffset", "colOffsetMd", "colOffsetLg", "colOffsetXl", "class"] }, { kind: "component", type: SearchFieldComponent, selector: "fdp-search-field", inputs: ["categoryMode", "appearance", "placeholder", "mobile", "mobileConfig", "disableRefresh", "disableSearch", "suggestions", "dataSource", "inputText", "categories", "currentCategory", "categoryLabel", "hideCategoryLabel", "isLoading", "ariaLabel", "ariaLabelledby", "forceSearchButton", "disableSuggestionsFoundAnnouncer"], outputs: ["inputChange", "searchSubmit", "cancelSearch", "isOpenChange"] }, { kind: "component", type: ToolbarComponent, selector: "fd-toolbar", inputs: ["titleId", "class", "shouldOverflow", "fdType", "title", "active", "clearBorder", "forceOverflow", "tabindex", "ariaLabel", "ariaLabelledBy"] }, { kind: "directive", type: ToolbarSpacerDirective, selector: "fd-toolbar-spacer", inputs: ["width", "class", "fixed"] }, { kind: "component", type: BusyIndicatorComponent, selector: "fd-busy-indicator", inputs: ["loading", "size", "block", "ariaLabel", "title", "label", "ariaLive"] }, { kind: "component", type: FormLabelComponent, selector: "[fd-form-label]", inputs: ["required", "colon", "alignLabelEnd", "inlineHelpContent", "inlineHelpGlyph", "inlineHelpTriggers", "inlineHelpBodyPlacement", "inlineHelpPlacement", "inlineHelpLabel", "id"] }, { kind: "component", type: SkeletonComponent, selector: "fd-skeleton", inputs: ["animated", "type", "textLines", "width", "height"] }, { kind: "component", type: SelectTabComponent, selector: "fdp-select-tab", inputs: ["selectTabTitleId", "selectTabCountId", "selected", "loading", "filters", "selection", "uniqueKey", "pageSize", "defaultMobileHeaders", "displayedData"], outputs: ["select"] }, { kind: "component", type: DefineTabComponent, selector: "fdp-define-tab", inputs: ["titleId", "selectedId", "conditions", "strategyLabels"], outputs: ["includeChange", "excludeChange", "conditionChange"] }, { kind: "directive", type: ListLinkDirective, selector: "[fd-list-link], [fdListLink]", inputs: ["navigationIndicator", "navigated", "focusable"] }, { kind: "directive", type: ListTitleDirective, selector: "[fd-list-title], [fdListTitle]", inputs: ["wrap"] }, { kind: "directive", type: ListIconDirective, selector: "[fdListIcon], [fd-list-icon]", inputs: ["glyph", "class", "role"] }, { kind: "component", type: TabNavComponent, selector: "[fd-tab-nav]", inputs: ["class", "mode", "size"] }, { kind: "directive", type: TabItemDirective, selector: "[fd-tab-item]", inputs: ["class", "tabItemState", "header", "disabled", "fdTabItemClass"] }, { kind: "directive", type: TabLinkDirective, selector: "[fd-tab-link]", inputs: ["active", "disabled"], outputs: ["keyDown", "focused"] }, { kind: "directive", type: TabTagDirective, selector: "[fdTabTag], [fd-tab-tag]" }, { kind: "component", type: BarComponent, selector: "[fd-bar]", inputs: ["class", "barDesign", "inPage", "inHomePage", "size"] }, { kind: "directive", type: BarLeftDirective, selector: "[fd-bar-left]" }, { kind: "directive", type: BarElementDirective, selector: "fd-bar-element", inputs: ["fullWidth"] }, { kind: "directive", type: BarRightDirective, selector: "[fd-bar-right]" }, { kind: "component", type: ButtonBarComponent, selector: "fd-button-bar", inputs: ["fullWidth", "fdType", "title", "ariaLabel", "ariaLabelledby", "id"] }, { kind: "directive", type: NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "pipe", type: SlicePipe, name: "slice" }, { kind: "pipe", type: FdTranslatePipe, name: "fdTranslate" }, { kind: "pipe", type: DisplayFnPipe, name: "displayFnPipe" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
513
513
|
}
|
|
514
514
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: PlatformValueHelpDialogComponent, decorators: [{
|
|
515
515
|
type: Component,
|
|
@@ -560,7 +560,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImpor
|
|
|
560
560
|
SlicePipe,
|
|
561
561
|
FdTranslatePipe,
|
|
562
562
|
DisplayFnPipe
|
|
563
|
-
], template: "<ng-template let-dialog let-dialogConfig=\"dialogConfig\" #container>\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\n <fd-dialog-header [dir]=\"_dir\">\n <ng-template fdkTemplate=\"header\">\n <ng-container *ngTemplateOutlet=\"mobile ? mobileDialogTitle : desktopDialogTitle\"></ng-container>\n </ng-template>\n </fd-dialog-header>\n <fd-dialog-body [dir]=\"_dir\">\n <ng-container *ngIf=\"!mobile\">\n <ng-container *ngTemplateOutlet=\"advancedSearchContent\"></ng-container>\n </ng-container>\n <div fd-scrollbar class=\"fdp-value-help-dialog__content-holder\">\n <ng-container *ngIf=\"mobile\">\n <ng-container *ngTemplateOutlet=\"advancedSearchContent\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"selectedTab === _tabTypes.selectFromList\">\n <ng-container *ngTemplateOutlet=\"selectionContent\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"selectedTab === _tabTypes.defineConditions\">\n <ng-container *ngTemplateOutlet=\"defineConditionsContent\"></ng-container>\n </ng-container>\n </div>\n </fd-dialog-body>\n <fd-dialog-footer [dir]=\"_dir\">\n <ng-template fdkTemplate=\"footer\">\n <div\n class=\"fdp-value-help-dialog__row fdp-value-help-dialog__selection-row\"\n [attr.aria-label]=\"'platformVHD.selectionBarLabel' | fdTranslate\"\n *ngIf=\"!isMobileAdvancedSearchActive\"\n >\n <h5 fd-title class=\"selected-and-condition-title\" [id]=\"id + '-selected-item'\">\n <ng-container *ngIf=\"hasSelectedAndConditions; else noItemsPanelTitle\">\n {{ 'platformVHD.selectedAndConditionLabel' | fdTranslate }}\n ({{ selectedItems.length + validConditions.length }})\n </ng-container>\n </h5>\n\n <div class=\"fdp-value-help-dialog__tokens-wrapper\">\n <div class=\"fdp-value-help-dialog__tokens\">\n <!-- Selected items -->\n <fd-tokenizer [tokenizerFocusable]=\"false\">\n <fd-token\n fd-toolbar-item\n fdOverflowPriority=\"high\"\n class=\"fdp-value-help-dialog__selection-token\"\n (onCloseClick)=\"removeSelected(selectedIndex)\"\n *ngFor=\"\n let item of selectedItems;\n index as selectedIndex;\n trackBy: _trackBySelectedFn\n \"\n >{{ !!tokenizerFn ? (item | displayFnPipe : tokenizerFn) : item[tokenViewField] }}\n </fd-token>\n <fd-token\n fd-toolbar-item\n fdOverflowPriority=\"high\"\n class=\"fdp-value-help-dialog__selection-token\"\n (onCloseClick)=\"removeCondition(conditionIndex)\"\n *ngFor=\"\n let item of validConditions;\n index as conditionIndex;\n trackBy: _trackByConditionFn\n \"\n >\n <ng-container\n [ngTemplateOutlet]=\"conditionValue\"\n [ngTemplateOutletContext]=\"{ item: item }\"\n ></ng-container>\n </fd-token>\n <input fd-form-control fd-tokenizer-input [disabled]=\"!hasSelectedAndConditions\" />\n </fd-tokenizer>\n </div>\n <button\n (click)=\"clearSelectedAndConditionItems()\"\n class=\"fdp-value-help-dialog__tokens-clear\"\n fd-button\n [disabled]=\"!hasSelectedAndConditions\"\n fdType=\"transparent\"\n [title]=\"'platformVHD.footerClearSelectedTitle' | fdTranslate\"\n glyph=\"decline\"\n [attr.aria-label]=\"'platformVHD.footerClearSelectedAriaLabel' | fdTranslate\"\n ></button>\n </div>\n </div>\n <div class=\"fdp-value-help-dialog__actions-row\">\n <button\n fd-button\n data-go-advanced\n [label]=\"'platformVHD.searchButtonLabel' | fdTranslate\"\n fdType=\"emphasized\"\n *ngIf=\"mobile && isOpenAdvanced\"\n (click)=\"searchAdvanced()\"\n ></button>\n <button\n fd-button\n data-succes\n [label]=\"'platformVHD.successButtonLabel' | fdTranslate\"\n fdType=\"emphasized\"\n *ngIf=\"selectedTab !== _tabTypes.advancedSearch\"\n (click)=\"success()\"\n ></button>\n <button\n fd-button\n data-dismiss-dialog\n [label]=\"'platformVHD.cancelButtonLabel' | fdTranslate\"\n fdType=\"transparent\"\n (click)=\"dismiss()\"\n ></button>\n </div>\n </ng-template>\n </fd-dialog-footer>\n </fd-dialog>\n</ng-template>\n\n<ng-template #noItemsPanelTitle>\n {{ 'platformVHD.selectedEmptyLabel' | fdTranslate }}\n</ng-template>\n\n<ng-template #advancedSearchContent>\n <ng-container *ngIf=\"isSelectionTab\">\n <form class=\"fdp-value-help-dialog__row fdp-value-help-dialog__advanced-search\" [id]=\"'advanced-search-' + id\">\n <fd-layout-grid *ngIf=\"!mobile || (mobile && !isOpenAdvanced)\">\n <div fdLayoutGridRow>\n <div [fdLayoutGridCol]=\"12\" [colMd]=\"12\" [colLg]=\"mobile ? 12 : 6\" [colXl]=\"mobile ? 12 : 6\">\n <fdp-search-field\n [placeholder]=\"'platformVHD.searchButtonLabel' | fdTranslate\"\n (searchSubmit)=\"search()\"\n (inputChange)=\"_mainSearch = $event.text\"\n ></fdp-search-field>\n </div>\n\n <div\n [fdLayoutGridCol]=\"12\"\n [colMd]=\"12\"\n [colLg]=\"mobile ? 12 : 6\"\n [colXl]=\"mobile ? 12 : 6\"\n *ngIf=\"_hasAdvanced\"\n class=\"fdp-value-help-dialog__advanced-actions\"\n >\n <fd-toolbar [clearBorder]=\"true\">\n <fd-toolbar-spacer></fd-toolbar-spacer>\n <button\n fd-toolbar-item\n fd-button\n fdType=\"transparent\"\n *ngIf=\"_hasAdvanced\"\n [label]=\"\n (mobile\n ? 'platformVHD.searchAdvancedSearchLabel'\n : isOpenAdvanced\n ? 'platformVHD.searchHideAdvancedSearchLabel'\n : 'platformVHD.searchShowAdvancedSearchLabel'\n ) | fdTranslate\n \"\n (click)=\"toggleAdvancedSearch()\"\n ></button>\n <button\n fd-toolbar-item\n type=\"submit\"\n fd-button\n fdType=\"emphasized\"\n [label]=\"'platformVHD.searchButtonLabel' | fdTranslate\"\n (click)=\"filter()\"\n ></button>\n </fd-toolbar>\n </div>\n </div>\n </fd-layout-grid>\n <div\n [id]=\"'advanced-search-content-' + id\"\n *ngIf=\"isOpenAdvanced && _hasAdvanced\"\n class=\"fdp-value-help-dialog__advanced-filters\"\n >\n <fd-busy-indicator [loading]=\"loadingState && _firstLoadingDone\" [block]=\"true\">\n <fd-layout-grid\n *ngIf=\"_firstLoadingDone; else filtersLoading\"\n [class.fdp-value-help-dialog__with-toggle-all]=\"filters.length > maxShownInitialFilters\"\n >\n <div fdLayoutGridRow>\n <ng-container\n *ngFor=\"\n let filter of _displayedFilters | slice : 0 : shownFilterCount + 1;\n trackBy: _trackByFilterFn\n \"\n >\n <ng-container *ngIf=\"filter.advanced\">\n <div [fdLayoutGridCol]=\"12\" [colMd]=\"12\" [colLg]=\"6\" [colXl]=\"3\">\n <label class=\"fd-form-group__header\" fd-form-label [for]=\"'input' + filter.key\"\n >{{ filter.label }}:</label\n >\n <input\n [(ngModel)]=\"filter.value\"\n fd-form-control\n type=\"text\"\n [name]=\"'search-by-' + filter.label\"\n [id]=\"'input' + filter.key\"\n />\n </div>\n </ng-container>\n </ng-container>\n\n <div\n colGrow\n [fdLayoutGridCol]=\"12\"\n [colMd]=\"12\"\n [colLg]=\"6\"\n [colXl]=\"3\"\n *ngIf=\"filters.length > maxShownInitialFilters\"\n class=\"fdp-value-help-dialog__toggle-filters\"\n >\n <button\n fd-button\n fdType=\"transparent\"\n (click)=\"toggleShownFilters()\"\n [label]=\"\n (isShowAllFilters\n ? 'platformVHD.searchHideAllAdvancedSearchLabel'\n : 'platformVHD.searchShowAllAdvancedSearchLabel'\n ) | fdTranslate\n \"\n ></button>\n </div>\n </div>\n </fd-layout-grid>\n\n <ng-template #filtersLoading>\n <fd-skeleton width=\"100%\" height=\"100px\">\n <svg:rect x=\"0\" y=\"0\" rx=\"4\" width=\"15%\" height=\"8\" />\n <svg:rect x=\"0\" y=\"20\" rx=\"4\" width=\"25%\" height=\"16\" />\n\n <svg:rect x=\"35%\" y=\"0\" rx=\"4\" width=\"15%\" height=\"8\" />\n <svg:rect x=\"35%\" y=\"20\" rx=\"4\" width=\"25%\" height=\"16\" />\n\n <svg:rect x=\"0\" y=\"60\" rx=\"4\" width=\"15%\" height=\"8\" />\n <svg:rect x=\"0\" y=\"80\" rx=\"4\" width=\"25%\" height=\"16\" />\n </fd-skeleton>\n </ng-template>\n </fd-busy-indicator>\n </div>\n </form>\n </ng-container>\n</ng-template>\n\n<ng-template #selectionContent>\n <fd-busy-indicator\n [loading]=\"loadingState && _firstLoadingDone\"\n [block]=\"true\"\n class=\"fdp-value-help-dialog__table-busy-indicator\"\n >\n <fdp-select-tab\n [selected]=\"selectedItems\"\n [loading]=\"loadingState && !_firstLoadingDone\"\n [uid]=\"id\"\n [displayedData]=\"_displayedData\"\n [tabTitle]=\"'platformVHD.selectTabTitle' | fdTranslate\"\n [mobile]=\"mobile\"\n [selection]=\"searchSelection\"\n [uniqueKey]=\"uniqueKey\"\n [pageSize]=\"searchTablePageSize\"\n [defaultMobileHeaders]=\"searchTableMobileHeaders\"\n [filters]=\"_displayedFilters\"\n (select)=\"onSelect($event)\"\n ></fdp-select-tab>\n </fd-busy-indicator>\n</ng-template>\n\n<ng-template #defineConditionsContent>\n <div fd-scrollbar>\n <fdp-define-tab\n [strategyLabels]=\"defineStrategyLabels\"\n [conditions]=\"conditionItems\"\n [uid]=\"id\"\n [tabTitle]=\"'platformVHD.defineTabTitle' | fdTranslate\"\n [mobile]=\"mobile\"\n (conditionChange)=\"onConditionChange($event)\"\n ></fdp-define-tab>\n </div>\n</ng-template>\n\n<ng-template #dialogTitleText>\n <h5 [attr.id]=\"headerId\" fd-title>{{ dialogTitle }}</h5>\n</ng-template>\n\n<ng-template #tabLink let-title=\"title\" let-type=\"type\">\n <ng-container *ngIf=\"selectedTab === type && showSelectionTab && showDefineTab\">\n <button\n fd-button\n glyph=\"navigation-left-arrow\"\n fdType=\"transparent\"\n (click)=\"switchTab()\"\n [title]=\"'platformVHD.selectMobileTabBackBtnTitle' | fdTranslate\"\n ></button>\n <h5 fd-title>{{ title }}</h5>\n </ng-container>\n <ng-container *ngIf=\"selectedTab !== type\">\n <a\n fd-list-link\n (click)=\"switchTab(type)\"\n [title]=\"'platformVHD.selectMobileTabBtnOpenDialogLabel' | fdTranslate\"\n >\n <span fd-list-title>{{ title }}</span>\n <i fd-list-icon glyph=\"navigation-right-arrow\"></i>\n </a>\n </ng-container>\n</ng-template>\n\n<ng-template #advancedHeader>\n <button fd-button glyph=\"navigation-left-arrow\" fdType=\"transparent\" (click)=\"toggleAdvancedSearch()\"></button>\n <h5 fd-title>{{ 'platformVHD.searchAdvancedSearchLabel' | fdTranslate }}</h5>\n</ng-template>\n\n<ng-template #desktopDialogTitle>\n <ng-container *ngTemplateOutlet=\"dialogTitleText\"></ng-container>\n <ng-container *ngTemplateOutlet=\"desktopTabs\"></ng-container>\n</ng-template>\n\n<ng-template #mobileDialogTitle>\n <div class=\"fdp-value-help-dialog__mobile-title\">\n <ng-container *ngIf=\"hasSelectedTab; else dialogTitleText\">\n <ng-container *ngTemplateOutlet=\"selectedTabHeader\"></ng-container>\n </ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"mobileTabs\"></ng-container>\n</ng-template>\n\n<ng-template #desktopTabs>\n <nav fd-tab-nav class=\"fdp-value-help-dialog__tabs\" *ngIf=\"showSelectionTab && showDefineTab\">\n <div fd-tab-item (click)=\"switchTab(_tabTypes.selectFromList)\" *ngIf=\"showSelectionTab\">\n <a\n fd-tab-link\n [active]=\"selectedTab === _tabTypes.selectFromList\"\n [tabindex]=\"selectedTab === _tabTypes.selectFromList ? '0' : '-1'\"\n ><span fd-tab-tag>{{ 'platformVHD.selectTabTitle' | fdTranslate }}</span></a\n >\n </div>\n <div fd-tab-item (click)=\"switchTab(_tabTypes.defineConditions)\" *ngIf=\"showDefineTab\">\n <a\n fd-tab-link\n [active]=\"selectedTab === _tabTypes.defineConditions\"\n [tabindex]=\"selectedTab === _tabTypes.defineConditions ? '0' : '-1'\"\n ><span fd-tab-tag>{{ 'platformVHD.defineTabTitle' | fdTranslate }}</span></a\n >\n </div>\n </nav>\n</ng-template>\n\n<ng-template #mobileTabs>\n <div *ngIf=\"!hasSelectedTab && showSelectionTab && showDefineTab\">\n <div fd-bar [inPage]=\"true\" *ngIf=\"showSelectionTab\">\n <div fd-bar-left>\n <fd-bar-element>\n {{ 'platformVHD.selectTabTitle' | fdTranslate }}\n </fd-bar-element>\n </div>\n <div fd-bar-right>\n <fd-bar-element>\n <fd-button-bar\n glyph=\"navigation-right-arrow\"\n (click)=\"switchTab(_tabTypes.selectFromList)\"\n [title]=\"\n 'platformVHD.selectMobileTabTitle'\n | fdTranslate : { title: 'platformVHD.selectTabTitle' | fdTranslate }\n \"\n ></fd-button-bar>\n </fd-bar-element>\n </div>\n </div>\n <div fd-bar [inPage]=\"true\" *ngIf=\"showDefineTab\">\n <div fd-bar-left>\n <fd-bar-element>\n {{ 'platformVHD.defineTabTitle' | fdTranslate }}\n </fd-bar-element>\n </div>\n <div fd-bar-right>\n <fd-bar-element>\n <fd-button-bar\n glyph=\"navigation-right-arrow\"\n [title]=\"\n 'platformVHD.selectMobileTabTitle'\n | fdTranslate : { title: 'platformVHD.defineTabTitle' | fdTranslate }\n \"\n (click)=\"switchTab(_tabTypes.defineConditions)\"\n >\n </fd-button-bar>\n </fd-bar-element>\n </div>\n </div>\n </div>\n</ng-template>\n\n<ng-template #selectedTabHeader>\n <ng-container [ngSwitch]=\"selectedTab\">\n <ng-container *ngSwitchCase=\"_tabTypes.selectFromList\">\n <ng-container\n *ngTemplateOutlet=\"\n tabLink;\n context: {\n title: 'platformVHD.selectTabTitle' | fdTranslate,\n type: selectedTab\n }\n \"\n ></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"_tabTypes.advancedSearch\">\n <ng-container *ngTemplateOutlet=\"advancedHeader\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"_tabTypes.defineConditions\">\n <ng-container\n *ngTemplateOutlet=\"\n tabLink;\n context: {\n title: 'platformVHD.defineTabTitle' | fdTranslate,\n type: selectedTab\n }\n \"\n ></ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template #conditionValue let-item=\"item\">\n <span *ngIf=\"item.strategy !== 'empty' && item.strategy !== 'not_empty'; else emptyCondition\">\n {{ item | displayFnPipe : conditionDisplayFn : _displayedFilters }}\n </span>\n <ng-template #emptyCondition>\n <ng-container *ngIf=\"item.strategy === 'not_empty'; else emptyConditionText\">\n !(<ng-container *ngTemplateOutlet=\"emptyConditionText\"></ng-container>)\n </ng-container>\n </ng-template>\n</ng-template>\n\n<ng-template #emptyConditionText> <{{ 'platformVHD.selectMobileConditionEmpty' | fdTranslate }}> </ng-template>\n", styles: [".fdp-value-help-dialog .fd-dialog__body{display:flex;flex-direction:column;overflow:hidden}.fdp-value-help-dialog .fd-title--h5{padding:.5rem 0}.fdp-value-help-dialog .fd-toolbar{background:none;border:none;padding:.1735rem .5rem;height:auto;min-height:1.625rem}.fdp-value-help-dialog__row.fdp-value-help-dialog__advanced-search{padding-top:1rem}.fdp-value-help-dialog__advanced-search,.fdp-value-help-dialog .fd-dialog__body{background-color:var(--sapBackgroundColor, #f7f7f7)}.fdp-value-help-dialog__advanced-filters{padding-top:1rem}.fdp-value-help-dialog__advanced-filters label{height:auto}.fdp-value-help-dialog__toggle-filters{display:flex;justify-content:flex-end;align-items:flex-end}.fdp-value-help-dialog__toggle-filters .fd-button{margin-bottom:.25rem}.fdp-value-help-dialog__advanced-actions{display:flex;align-items:center;justify-content:flex-end}.fdp-value-help-dialog-mobile .fdp-value-help-dialog__advanced-actions{justify-content:flex-start}.fdp-value-help-dialog__advanced-actions .fd-toolbar{padding:0}.fdp-value-help-dialog .fd-bar.fd-bar--cozy{height:auto}.fdp-value-help-dialog .fd-dialog__header{box-shadow:none}.fdp-value-help-dialog .fd-dialog__header .fd-title{display:flex;align-items:center;padding-left:2rem;padding-right:2rem;min-height:2.5rem;box-shadow:none;border-bottom:none;background-color:var(--sapObjectHeader_Background, #fff);position:relative;z-index:2}.fdp-value-help-dialog .fd-dialog__header .fdp-value-help-dialog__mobile-title{display:flex;border-bottom:1px solid #d9d9d9;border-bottom:1px solid var(--sapGroup_TitleBorderColor, #d9d9d9)}.fdp-value-help-dialog .fd-dialog__header .fdp-value-help-dialog__mobile-title .fd-title{flex:1 1 auto;border:none}.fdp-value-help-dialog .fd-dialog__header .fdp-value-help-dialog__tabs{position:relative}.fdp-value-help-dialog .fd-dialog__header,.fdp-value-help-dialog .fd-dialog__footer{height:auto;flex-direction:column}.fdp-value-help-dialog .fd-dialog__header.fd-bar,.fdp-value-help-dialog .fd-dialog__footer.fd-bar{padding:0}.fdp-value-help-dialog .fd-dialog__footer{border-top:none}.fdp-value-help-dialog__content-holder{padding:0 2rem 1rem;display:flex;flex-direction:column;height:100%;width:100%;overflow:hidden}.fdp-value-help-dialog__row{padding:0 2rem 1rem}.fdp-value-help-dialog__row.fdp-value-help-dialog__selection-row{background-color:var(--sapBackgroundColor, #f7f7f7)}.fdp-value-help-dialog__tokens-wrapper{display:flex}.fdp-value-help-dialog__tokens{flex:1 1 auto;overflow:hidden;align-items:center;border:1px solid var(--sapContent_ForegroundBorderColor, #89919a);margin-right:.5rem;border-radius:var(--sapElement_BorderCornerRadius, .25rem);background:none}.fdp-value-help-dialog__tokens fd-toolbar{flex:1 1 auto;overflow:hidden}.fdp-value-help-dialog__tokens-clear{height:auto;min-width:2rem;padding:.125rem 0;justify-content:center}.fdp-value-help-dialog__actions-row{padding:.5rem 1rem;display:flex;align-items:center;justify-content:flex-end;border-top:.0625rem solid #d9d9d9;border-top:.0625rem solid var(--sapPageFooter_BorderColor, #d9d9d9)}.fdp-value-help-dialog__actions-row .fd-button{margin-left:.5rem}.fdp-value-help-dialog .fdp-value-help-dialog__hidden_label{display:none!important}.fdp-value-help-dialog__table-busy-indicator{height:100%}\n"] }]
|
|
563
|
+
], template: "<ng-template [fdDialogTemplate] let-dialog let-dialogConfig=\"dialogConfig\" #container>\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\n <fd-dialog-header [dir]=\"_dir\">\n <ng-template fdkTemplate=\"header\">\n <ng-container *ngTemplateOutlet=\"mobile ? mobileDialogTitle : desktopDialogTitle\"></ng-container>\n </ng-template>\n </fd-dialog-header>\n <fd-dialog-body [dir]=\"_dir\">\n <ng-container *ngIf=\"!mobile\">\n <ng-container *ngTemplateOutlet=\"advancedSearchContent\"></ng-container>\n </ng-container>\n <div fd-scrollbar class=\"fdp-value-help-dialog__content-holder\">\n <ng-container *ngIf=\"mobile\">\n <ng-container *ngTemplateOutlet=\"advancedSearchContent\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"selectedTab === _tabTypes.selectFromList\">\n <ng-container *ngTemplateOutlet=\"selectionContent\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"selectedTab === _tabTypes.defineConditions\">\n <ng-container *ngTemplateOutlet=\"defineConditionsContent\"></ng-container>\n </ng-container>\n </div>\n </fd-dialog-body>\n <fd-dialog-footer [dir]=\"_dir\">\n <ng-template fdkTemplate=\"footer\">\n <div\n class=\"fdp-value-help-dialog__row fdp-value-help-dialog__selection-row\"\n [attr.aria-label]=\"'platformVHD.selectionBarLabel' | fdTranslate\"\n *ngIf=\"!isMobileAdvancedSearchActive\"\n >\n <h5 fd-title class=\"selected-and-condition-title\" [id]=\"id + '-selected-item'\">\n <ng-container *ngIf=\"hasSelectedAndConditions; else noItemsPanelTitle\">\n {{ 'platformVHD.selectedAndConditionLabel' | fdTranslate }}\n ({{ selectedItems.length + validConditions.length }})\n </ng-container>\n </h5>\n\n <div class=\"fdp-value-help-dialog__tokens-wrapper\">\n <div class=\"fdp-value-help-dialog__tokens\">\n <!-- Selected items -->\n <fd-tokenizer [tokenizerFocusable]=\"false\">\n <fd-token\n fd-toolbar-item\n fdOverflowPriority=\"high\"\n class=\"fdp-value-help-dialog__selection-token\"\n (onCloseClick)=\"removeSelected(selectedIndex)\"\n *ngFor=\"\n let item of selectedItems;\n index as selectedIndex;\n trackBy: _trackBySelectedFn\n \"\n >{{ !!tokenizerFn ? (item | displayFnPipe : tokenizerFn) : item[tokenViewField] }}\n </fd-token>\n <fd-token\n fd-toolbar-item\n fdOverflowPriority=\"high\"\n class=\"fdp-value-help-dialog__selection-token\"\n (onCloseClick)=\"removeCondition(conditionIndex)\"\n *ngFor=\"\n let item of validConditions;\n index as conditionIndex;\n trackBy: _trackByConditionFn\n \"\n >\n <ng-container\n [ngTemplateOutlet]=\"conditionValue\"\n [ngTemplateOutletContext]=\"{ item: item }\"\n ></ng-container>\n </fd-token>\n <input fd-form-control fd-tokenizer-input [disabled]=\"!hasSelectedAndConditions\" />\n </fd-tokenizer>\n </div>\n <button\n (click)=\"clearSelectedAndConditionItems()\"\n class=\"fdp-value-help-dialog__tokens-clear\"\n fd-button\n [disabled]=\"!hasSelectedAndConditions\"\n fdType=\"transparent\"\n [title]=\"'platformVHD.footerClearSelectedTitle' | fdTranslate\"\n glyph=\"decline\"\n [attr.aria-label]=\"'platformVHD.footerClearSelectedAriaLabel' | fdTranslate\"\n ></button>\n </div>\n </div>\n <div class=\"fdp-value-help-dialog__actions-row\">\n <button\n fd-button\n data-go-advanced\n [label]=\"'platformVHD.searchButtonLabel' | fdTranslate\"\n fdType=\"emphasized\"\n *ngIf=\"mobile && isOpenAdvanced\"\n (click)=\"searchAdvanced()\"\n ></button>\n <button\n fd-button\n data-succes\n [label]=\"'platformVHD.successButtonLabel' | fdTranslate\"\n fdType=\"emphasized\"\n *ngIf=\"selectedTab !== _tabTypes.advancedSearch\"\n (click)=\"success()\"\n ></button>\n <button\n fd-button\n data-dismiss-dialog\n [label]=\"'platformVHD.cancelButtonLabel' | fdTranslate\"\n fdType=\"transparent\"\n (click)=\"dismiss()\"\n ></button>\n </div>\n </ng-template>\n </fd-dialog-footer>\n </fd-dialog>\n</ng-template>\n\n<ng-template #noItemsPanelTitle>\n {{ 'platformVHD.selectedEmptyLabel' | fdTranslate }}\n</ng-template>\n\n<ng-template #advancedSearchContent>\n <ng-container *ngIf=\"isSelectionTab\">\n <form class=\"fdp-value-help-dialog__row fdp-value-help-dialog__advanced-search\" [id]=\"'advanced-search-' + id\">\n <fd-layout-grid *ngIf=\"!mobile || (mobile && !isOpenAdvanced)\">\n <div fdLayoutGridRow>\n <div [fdLayoutGridCol]=\"12\" [colMd]=\"12\" [colLg]=\"mobile ? 12 : 6\" [colXl]=\"mobile ? 12 : 6\">\n <fdp-search-field\n [placeholder]=\"'platformVHD.searchButtonLabel' | fdTranslate\"\n (searchSubmit)=\"search()\"\n (inputChange)=\"_mainSearch = $event.text\"\n ></fdp-search-field>\n </div>\n\n <div\n [fdLayoutGridCol]=\"12\"\n [colMd]=\"12\"\n [colLg]=\"mobile ? 12 : 6\"\n [colXl]=\"mobile ? 12 : 6\"\n *ngIf=\"_hasAdvanced\"\n class=\"fdp-value-help-dialog__advanced-actions\"\n >\n <fd-toolbar [clearBorder]=\"true\">\n <fd-toolbar-spacer></fd-toolbar-spacer>\n <button\n fd-toolbar-item\n fd-button\n fdType=\"transparent\"\n *ngIf=\"_hasAdvanced\"\n [label]=\"\n (mobile\n ? 'platformVHD.searchAdvancedSearchLabel'\n : isOpenAdvanced\n ? 'platformVHD.searchHideAdvancedSearchLabel'\n : 'platformVHD.searchShowAdvancedSearchLabel'\n ) | fdTranslate\n \"\n (click)=\"toggleAdvancedSearch()\"\n ></button>\n <button\n fd-toolbar-item\n type=\"submit\"\n fd-button\n fdType=\"emphasized\"\n [label]=\"'platformVHD.searchButtonLabel' | fdTranslate\"\n (click)=\"filter()\"\n ></button>\n </fd-toolbar>\n </div>\n </div>\n </fd-layout-grid>\n <div\n [id]=\"'advanced-search-content-' + id\"\n *ngIf=\"isOpenAdvanced && _hasAdvanced\"\n class=\"fdp-value-help-dialog__advanced-filters\"\n >\n <fd-busy-indicator [loading]=\"loadingState && _firstLoadingDone\" [block]=\"true\">\n <fd-layout-grid\n *ngIf=\"_firstLoadingDone; else filtersLoading\"\n [class.fdp-value-help-dialog__with-toggle-all]=\"filters.length > maxShownInitialFilters\"\n >\n <div fdLayoutGridRow>\n <ng-container\n *ngFor=\"\n let filter of _displayedFilters | slice : 0 : shownFilterCount + 1;\n trackBy: _trackByFilterFn\n \"\n >\n <ng-container *ngIf=\"filter.advanced\">\n <div [fdLayoutGridCol]=\"12\" [colMd]=\"12\" [colLg]=\"6\" [colXl]=\"3\">\n <label class=\"fd-form-group__header\" fd-form-label [for]=\"'input' + filter.key\"\n >{{ filter.label }}:</label\n >\n <input\n [(ngModel)]=\"filter.value\"\n fd-form-control\n type=\"text\"\n [name]=\"'search-by-' + filter.label\"\n [id]=\"'input' + filter.key\"\n />\n </div>\n </ng-container>\n </ng-container>\n\n <div\n colGrow\n [fdLayoutGridCol]=\"12\"\n [colMd]=\"12\"\n [colLg]=\"6\"\n [colXl]=\"3\"\n *ngIf=\"filters.length > maxShownInitialFilters\"\n class=\"fdp-value-help-dialog__toggle-filters\"\n >\n <button\n fd-button\n fdType=\"transparent\"\n (click)=\"toggleShownFilters()\"\n [label]=\"\n (isShowAllFilters\n ? 'platformVHD.searchHideAllAdvancedSearchLabel'\n : 'platformVHD.searchShowAllAdvancedSearchLabel'\n ) | fdTranslate\n \"\n ></button>\n </div>\n </div>\n </fd-layout-grid>\n\n <ng-template #filtersLoading>\n <fd-skeleton width=\"100%\" height=\"100px\">\n <svg:rect x=\"0\" y=\"0\" rx=\"4\" width=\"15%\" height=\"8\" />\n <svg:rect x=\"0\" y=\"20\" rx=\"4\" width=\"25%\" height=\"16\" />\n\n <svg:rect x=\"35%\" y=\"0\" rx=\"4\" width=\"15%\" height=\"8\" />\n <svg:rect x=\"35%\" y=\"20\" rx=\"4\" width=\"25%\" height=\"16\" />\n\n <svg:rect x=\"0\" y=\"60\" rx=\"4\" width=\"15%\" height=\"8\" />\n <svg:rect x=\"0\" y=\"80\" rx=\"4\" width=\"25%\" height=\"16\" />\n </fd-skeleton>\n </ng-template>\n </fd-busy-indicator>\n </div>\n </form>\n </ng-container>\n</ng-template>\n\n<ng-template #selectionContent>\n <fd-busy-indicator\n [loading]=\"loadingState && _firstLoadingDone\"\n [block]=\"true\"\n class=\"fdp-value-help-dialog__table-busy-indicator\"\n >\n <fdp-select-tab\n [selected]=\"selectedItems\"\n [loading]=\"loadingState && !_firstLoadingDone\"\n [uid]=\"id\"\n [displayedData]=\"_displayedData\"\n [tabTitle]=\"'platformVHD.selectTabTitle' | fdTranslate\"\n [mobile]=\"mobile\"\n [selection]=\"searchSelection\"\n [uniqueKey]=\"uniqueKey\"\n [pageSize]=\"searchTablePageSize\"\n [defaultMobileHeaders]=\"searchTableMobileHeaders\"\n [filters]=\"_displayedFilters\"\n (select)=\"onSelect($event)\"\n ></fdp-select-tab>\n </fd-busy-indicator>\n</ng-template>\n\n<ng-template #defineConditionsContent>\n <div fd-scrollbar>\n <fdp-define-tab\n [strategyLabels]=\"defineStrategyLabels\"\n [conditions]=\"conditionItems\"\n [uid]=\"id\"\n [tabTitle]=\"'platformVHD.defineTabTitle' | fdTranslate\"\n [mobile]=\"mobile\"\n (conditionChange)=\"onConditionChange($event)\"\n ></fdp-define-tab>\n </div>\n</ng-template>\n\n<ng-template #dialogTitleText>\n <h5 [attr.id]=\"headerId\" fd-title>{{ dialogTitle }}</h5>\n</ng-template>\n\n<ng-template #tabLink let-title=\"title\" let-type=\"type\">\n <ng-container *ngIf=\"selectedTab === type && showSelectionTab && showDefineTab\">\n <button\n fd-button\n glyph=\"navigation-left-arrow\"\n fdType=\"transparent\"\n (click)=\"switchTab()\"\n [title]=\"'platformVHD.selectMobileTabBackBtnTitle' | fdTranslate\"\n ></button>\n <h5 fd-title>{{ title }}</h5>\n </ng-container>\n <ng-container *ngIf=\"selectedTab !== type\">\n <a\n fd-list-link\n (click)=\"switchTab(type)\"\n [title]=\"'platformVHD.selectMobileTabBtnOpenDialogLabel' | fdTranslate\"\n >\n <span fd-list-title>{{ title }}</span>\n <i fd-list-icon glyph=\"navigation-right-arrow\"></i>\n </a>\n </ng-container>\n</ng-template>\n\n<ng-template #advancedHeader>\n <button fd-button glyph=\"navigation-left-arrow\" fdType=\"transparent\" (click)=\"toggleAdvancedSearch()\"></button>\n <h5 fd-title>{{ 'platformVHD.searchAdvancedSearchLabel' | fdTranslate }}</h5>\n</ng-template>\n\n<ng-template #desktopDialogTitle>\n <ng-container *ngTemplateOutlet=\"dialogTitleText\"></ng-container>\n <ng-container *ngTemplateOutlet=\"desktopTabs\"></ng-container>\n</ng-template>\n\n<ng-template #mobileDialogTitle>\n <div class=\"fdp-value-help-dialog__mobile-title\">\n <ng-container *ngIf=\"hasSelectedTab; else dialogTitleText\">\n <ng-container *ngTemplateOutlet=\"selectedTabHeader\"></ng-container>\n </ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"mobileTabs\"></ng-container>\n</ng-template>\n\n<ng-template #desktopTabs>\n <nav fd-tab-nav class=\"fdp-value-help-dialog__tabs\" *ngIf=\"showSelectionTab && showDefineTab\">\n <div fd-tab-item (click)=\"switchTab(_tabTypes.selectFromList)\" *ngIf=\"showSelectionTab\">\n <a\n fd-tab-link\n [active]=\"selectedTab === _tabTypes.selectFromList\"\n [tabindex]=\"selectedTab === _tabTypes.selectFromList ? '0' : '-1'\"\n ><span fd-tab-tag>{{ 'platformVHD.selectTabTitle' | fdTranslate }}</span></a\n >\n </div>\n <div fd-tab-item (click)=\"switchTab(_tabTypes.defineConditions)\" *ngIf=\"showDefineTab\">\n <a\n fd-tab-link\n [active]=\"selectedTab === _tabTypes.defineConditions\"\n [tabindex]=\"selectedTab === _tabTypes.defineConditions ? '0' : '-1'\"\n ><span fd-tab-tag>{{ 'platformVHD.defineTabTitle' | fdTranslate }}</span></a\n >\n </div>\n </nav>\n</ng-template>\n\n<ng-template #mobileTabs>\n <div *ngIf=\"!hasSelectedTab && showSelectionTab && showDefineTab\">\n <div fd-bar [inPage]=\"true\" *ngIf=\"showSelectionTab\">\n <div fd-bar-left>\n <fd-bar-element>\n {{ 'platformVHD.selectTabTitle' | fdTranslate }}\n </fd-bar-element>\n </div>\n <div fd-bar-right>\n <fd-bar-element>\n <fd-button-bar\n glyph=\"navigation-right-arrow\"\n (click)=\"switchTab(_tabTypes.selectFromList)\"\n [title]=\"\n 'platformVHD.selectMobileTabTitle'\n | fdTranslate : { title: 'platformVHD.selectTabTitle' | fdTranslate }\n \"\n ></fd-button-bar>\n </fd-bar-element>\n </div>\n </div>\n <div fd-bar [inPage]=\"true\" *ngIf=\"showDefineTab\">\n <div fd-bar-left>\n <fd-bar-element>\n {{ 'platformVHD.defineTabTitle' | fdTranslate }}\n </fd-bar-element>\n </div>\n <div fd-bar-right>\n <fd-bar-element>\n <fd-button-bar\n glyph=\"navigation-right-arrow\"\n [title]=\"\n 'platformVHD.selectMobileTabTitle'\n | fdTranslate : { title: 'platformVHD.defineTabTitle' | fdTranslate }\n \"\n (click)=\"switchTab(_tabTypes.defineConditions)\"\n >\n </fd-button-bar>\n </fd-bar-element>\n </div>\n </div>\n </div>\n</ng-template>\n\n<ng-template #selectedTabHeader>\n <ng-container [ngSwitch]=\"selectedTab\">\n <ng-container *ngSwitchCase=\"_tabTypes.selectFromList\">\n <ng-container\n *ngTemplateOutlet=\"\n tabLink;\n context: {\n title: 'platformVHD.selectTabTitle' | fdTranslate,\n type: selectedTab\n }\n \"\n ></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"_tabTypes.advancedSearch\">\n <ng-container *ngTemplateOutlet=\"advancedHeader\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"_tabTypes.defineConditions\">\n <ng-container\n *ngTemplateOutlet=\"\n tabLink;\n context: {\n title: 'platformVHD.defineTabTitle' | fdTranslate,\n type: selectedTab\n }\n \"\n ></ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template #conditionValue let-item=\"item\">\n <span *ngIf=\"item.strategy !== 'empty' && item.strategy !== 'not_empty'; else emptyCondition\">\n {{ item | displayFnPipe : conditionDisplayFn : _displayedFilters }}\n </span>\n <ng-template #emptyCondition>\n <ng-container *ngIf=\"item.strategy === 'not_empty'; else emptyConditionText\">\n !(<ng-container *ngTemplateOutlet=\"emptyConditionText\"></ng-container>)\n </ng-container>\n </ng-template>\n</ng-template>\n\n<ng-template #emptyConditionText> <{{ 'platformVHD.selectMobileConditionEmpty' | fdTranslate }}> </ng-template>\n", styles: [".fdp-value-help-dialog .fd-dialog__body{display:flex;flex-direction:column;overflow:hidden}.fdp-value-help-dialog .fd-title--h5{padding:.5rem 0}.fdp-value-help-dialog .fd-toolbar{background:none;border:none;padding:.1735rem .5rem;height:auto;min-height:1.625rem}.fdp-value-help-dialog__row.fdp-value-help-dialog__advanced-search{padding-top:1rem}.fdp-value-help-dialog__advanced-search,.fdp-value-help-dialog .fd-dialog__body{background-color:var(--sapBackgroundColor, #f7f7f7)}.fdp-value-help-dialog__advanced-filters{padding-top:1rem}.fdp-value-help-dialog__advanced-filters label{height:auto}.fdp-value-help-dialog__toggle-filters{display:flex;justify-content:flex-end;align-items:flex-end}.fdp-value-help-dialog__toggle-filters .fd-button{margin-bottom:.25rem}.fdp-value-help-dialog__advanced-actions{display:flex;align-items:center;justify-content:flex-end}.fdp-value-help-dialog-mobile .fdp-value-help-dialog__advanced-actions{justify-content:flex-start}.fdp-value-help-dialog__advanced-actions .fd-toolbar{padding:0}.fdp-value-help-dialog .fd-bar.fd-bar--cozy{height:auto}.fdp-value-help-dialog .fd-dialog__header{box-shadow:none}.fdp-value-help-dialog .fd-dialog__header .fd-title{display:flex;align-items:center;padding-left:2rem;padding-right:2rem;min-height:2.5rem;box-shadow:none;border-bottom:none;background-color:var(--sapObjectHeader_Background, #fff);position:relative;z-index:2}.fdp-value-help-dialog .fd-dialog__header .fdp-value-help-dialog__mobile-title{display:flex;border-bottom:1px solid #d9d9d9;border-bottom:1px solid var(--sapGroup_TitleBorderColor, #d9d9d9)}.fdp-value-help-dialog .fd-dialog__header .fdp-value-help-dialog__mobile-title .fd-title{flex:1 1 auto;border:none}.fdp-value-help-dialog .fd-dialog__header .fdp-value-help-dialog__tabs{position:relative}.fdp-value-help-dialog .fd-dialog__header,.fdp-value-help-dialog .fd-dialog__footer{height:auto;flex-direction:column}.fdp-value-help-dialog .fd-dialog__header.fd-bar,.fdp-value-help-dialog .fd-dialog__footer.fd-bar{padding:0}.fdp-value-help-dialog .fd-dialog__footer{border-top:none}.fdp-value-help-dialog__content-holder{padding:0 2rem 1rem;display:flex;flex-direction:column;height:100%;width:100%;overflow:hidden}.fdp-value-help-dialog__row{padding:0 2rem 1rem}.fdp-value-help-dialog__row.fdp-value-help-dialog__selection-row{background-color:var(--sapBackgroundColor, #f7f7f7)}.fdp-value-help-dialog__tokens-wrapper{display:flex}.fdp-value-help-dialog__tokens{flex:1 1 auto;overflow:hidden;align-items:center;border:1px solid var(--sapContent_ForegroundBorderColor, #89919a);margin-right:.5rem;border-radius:var(--sapElement_BorderCornerRadius, .25rem);background:none}.fdp-value-help-dialog__tokens fd-toolbar{flex:1 1 auto;overflow:hidden}.fdp-value-help-dialog__tokens-clear{height:auto;min-width:2rem;padding:.125rem 0;justify-content:center}.fdp-value-help-dialog__actions-row{padding:.5rem 1rem;display:flex;align-items:center;justify-content:flex-end;border-top:.0625rem solid #d9d9d9;border-top:.0625rem solid var(--sapPageFooter_BorderColor, #d9d9d9)}.fdp-value-help-dialog__actions-row .fd-button{margin-left:.5rem}.fdp-value-help-dialog .fdp-value-help-dialog__hidden_label{display:none!important}.fdp-value-help-dialog__table-busy-indicator{height:100%}\n"] }]
|
|
564
564
|
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.DialogService }, { type: i2.RtlService, decorators: [{
|
|
565
565
|
type: Optional
|
|
566
566
|
}] }]; }, propDecorators: { id: [{
|
|
@@ -618,4 +618,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImpor
|
|
|
618
618
|
type: ViewChild,
|
|
619
619
|
args: ['container', { read: TemplateRef }]
|
|
620
620
|
}] } });
|
|
621
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsdWUtaGVscC1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9zcmMvbGliL3ZhbHVlLWhlbHAtZGlhbG9nL3ZhbHVlLWhlbHAtZGlhbG9nL3ZhbHVlLWhlbHAtZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vc3JjL2xpYi92YWx1ZS1oZWxwLWRpYWxvZy92YWx1ZS1oZWxwLWRpYWxvZy92YWx1ZS1oZWxwLWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUdMLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUVULFdBQVcsRUFDWCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBYyxPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUYsT0FBTyxFQUNILFlBQVksRUFDWixtQkFBbUIsRUFDbkIsZ0JBQWdCLEVBQ2hCLGlCQUFp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QUs7Z0JBS04sTUFBTTtzQkFETCxLQUFLO2dCQUtOLFdBQVc7c0JBRFYsS0FBSztnQkFLTixrQkFBa0I7c0JBRGpCLEtBQUs7Z0JBS04sZUFBZTtzQkFEZCxLQUFLO2dCQUtOLG1CQUFtQjtzQkFEbEIsS0FBSztnQkFLTix3QkFBd0I7c0JBRHZCLEtBQUs7Z0JBS04sc0JBQXNCO3NCQURyQixLQUFLO2dCQUtOLE9BQU87c0JBRE4sS0FBSztnQkFPTixvQkFBb0I7c0JBRG5CLEtBQUs7Z0JBcUJOLFdBQVc7c0JBRFYsTUFBTTtnQkFLRyxlQUFlO3NCQUF4QixNQUFNO2dCQUlHLGNBQWM7c0JBQXZCLE1BQU07Z0JBSVAsT0FBTztzQkFETixlQUFlO3VCQUFDLGtCQUFrQjtnQkFLbkMsZUFBZTtzQkFEZCxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBpc09ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQ2RrU2Nyb2xsYWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IE5nRm9yLCBOZ0lmLCBOZ1N3aXRjaCwgTmdTd2l0Y2hDYXNlLCBOZ1RlbXBsYXRlT3V0bGV0LCBTbGljZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBEaXNwbGF5Rm5QaXBlLCBSdGxTZXJ2aWNlLCBUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7XG4gICAgQmFyQ29tcG9uZW50LFxuICAgIEJhckVsZW1lbnREaXJlY3RpdmUsXG4gICAgQmFyTGVmdERpcmVjdGl2ZSxcbiAgICBCYXJSaWdodERpcmVjdGl2ZSxcbiAgICBCdXR0b25CYXJDb21wb25lbnRcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2Jhcic7XG5pbXBvcnQgeyBCdXN5SW5kaWNhdG9yQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2J1c3ktaW5kaWNhdG9yJztcbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9idXR0b24nO1xuaW1wb3J0IHtcbiAgICBEaWFsb2dCb2R5Q29tcG9uZW50LFxuICAgIERpYWxvZ0NvbXBvbmVudCxcbiAgICBEaWFsb2dDb25maWcsXG4gICAgRGlhbG9nRm9vdGVyQ29tcG9uZW50LFxuICAgIERpYWxvZ0hlYWRlckNvbXBvbmVudCxcbiAgICBEaWFsb2dSZWYsXG4gICAgRGlhbG9nU2VydmljZVxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZGlhbG9nJztcbmltcG9ydCB7IEZvcm1Db250cm9sQ29tcG9uZW50LCBGb3JtTGFiZWxDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZm9ybSc7XG5pbXBvcnQgeyBMYXlvdXRHcmlkQ29sRGlyZWN0aXZlLCBMYXlvdXRHcmlkQ29tcG9uZW50LCBMYXlvdXRHcmlkUm93RGlyZWN0aXZlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2xheW91dC1ncmlkJztcbmltcG9ydCB7IExpc3RJY29uRGlyZWN0aXZlLCBMaXN0TGlua0RpcmVjdGl2ZSwgTGlzdFRpdGxlRGlyZWN0aXZlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2xpc3QnO1xuaW1wb3J0IHsgU2Nyb2xsYmFyRGlyZWN0aXZlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3Njcm9sbGJhcic7XG5pbXBvcnQgeyBTa2VsZXRvbkNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9za2VsZXRvbic7XG5pbXBvcnQgeyBUYWJJdGVtRGlyZWN0aXZlLCBUYWJMaW5rRGlyZWN0aXZlLCBUYWJOYXZDb21wb25lbnQsIFRhYlRhZ0RpcmVjdGl2ZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS90YWJzJztcbmltcG9ydCB7IFRpdGxlQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3RpdGxlJztcbmltcG9ydCB7IFRva2VuQ29tcG9uZW50LCBUb2tlbml6ZXJDb21wb25lbnQsIFRva2VuaXplcklucHV0RGlyZWN0aXZlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3Rva2VuJztcbmltcG9ydCB7IFRvb2xiYXJDb21wb25lbnQsIFRvb2xiYXJJdGVtRGlyZWN0aXZlLCBUb29sYmFyU3BhY2VyRGlyZWN0aXZlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3Rvb2xiYXInO1xuaW1wb3J0IHsgRmRUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9pMThuJztcbmltcG9ydCB7IFNlYXJjaEZpZWxkQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9wbGF0Zm9ybS9zZWFyY2gtZmllbGQnO1xuaW1wb3J0IHsgaXNEYXRhU291cmNlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9wbGF0Zm9ybS9zaGFyZWQnO1xuaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IERlZmluZVRhYkNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvZGVmaW5lLXRhYi9kZWZpbmUtdGFiLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTZWxlY3RUYWJDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL3NlbGVjdC10YWIvc2VsZWN0LXRhYi5jb21wb25lbnQnO1xuaW1wb3J0IHsgVmhkRmlsdGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy92YWx1ZS1oZWxwLWRpYWxvZy1maWx0ZXIvdmFsdWUtaGVscC1kaWFsb2ctZmlsdGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBkZWZhdWx0Q29uZGl0aW9uRGlzcGxheUZuIH0gZnJvbSAnLi4vY29uc3RhbnMvY29uZGl0aW9uLWRpc3BsYXkuZnVuY3Rpb24nO1xuaW1wb3J0IHtcbiAgICBBcnJheVZhbHVlSGVscERpYWxvZ0RhdGFTb3VyY2UsXG4gICAgQmFzZUVudGl0eSxcbiAgICBPYnNlcnZhYmxlVmFsdWVIZWxwRGlhbG9nRGF0YVNvdXJjZSxcbiAgICBWYWx1ZUhlbHBEaWFsb2dEYXRhU291cmNlLFxuICAgIFZkaFRhYmxlU2VsZWN0aW9uLFxuICAgIFZoZERlZmluZUV4Y2x1ZGVTdHJhdGVneSxcbiAgICBWaGREZWZpbmVJbmNsdWRlU3RyYXRlZ3ksXG4gICAgVmhkRmlsdGVyLFxuICAgIFZoZFRhYixcbiAgICBWaGRWYWx1ZSxcbiAgICBWaGRWYWx1ZUNoYW5nZUV2ZW50XG59IGZyb20gJy4uL21vZGVscyc7XG5cbmV4cG9ydCB0eXBlIEZkcFZhbHVlSGVscERpYWxvZ0RhdGFTb3VyY2U8VD4gPVxuICAgIHwgVmFsdWVIZWxwRGlhbG9nRGF0YVNvdXJjZTxUPlxuICAgIHwgQXJyYXlWYWx1ZUhlbHBEaWFsb2dEYXRhU291cmNlPFQ+XG4gICAgfCBPYnNlcnZhYmxlVmFsdWVIZWxwRGlhbG9nRGF0YVNvdXJjZTxUPjtcblxubGV0IHZoaVVuaXF1ZUlkID0gMDtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZHAtdmFsdWUtaGVscC1kaWFsb2cnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi92YWx1ZS1oZWxwLWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vdmFsdWUtaGVscC1kaWFsb2cuY29tcG9uZW50LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBEaWFsb2dDb21wb25lbnQsXG4gICAgICAgIERpYWxvZ0hlYWRlckNvbXBvbmVudCxcbiAgICAgICAgVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgICAgIENka1Njcm9sbGFibGUsXG4gICAgICAgIFNjcm9sbGJhckRpcmVjdGl2ZSxcbiAgICAgICAgRGlhbG9nQm9keUNvbXBvbmVudCxcbiAgICAgICAgTmdJZixcbiAgICAgICAgRGlhbG9nRm9vdGVyQ29tcG9uZW50LFxuICAgICAgICBUaXRsZUNvbXBvbmVudCxcbiAgICAgICAgVG9rZW5pemVyQ29tcG9uZW50LFxuICAgICAgICBOZ0ZvcixcbiAgICAgICAgVG9rZW5Db21wb25lbnQsXG4gICAgICAgIFRvb2xiYXJJdGVtRGlyZWN0aXZlLFxuICAgICAgICBGb3JtQ29udHJvbENvbXBvbmVudCxcbiAgICAgICAgVG9rZW5pemVySW5wdXREaXJlY3RpdmUsXG4gICAgICAgIEJ1dHRvbkNvbXBvbmVudCxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIExheW91dEdyaWRDb21wb25lbnQsXG4gICAgICAgIExheW91dEdyaWRSb3dEaXJlY3RpdmUsXG4gICAgICAgIExheW91dEdyaWRDb2xEaXJlY3RpdmUsXG4gICAgICAgIFNlYXJjaEZpZWxkQ29tcG9uZW50LFxuICAgICAgICBUb29sYmFyQ29tcG9uZW50LFxuICAgICAgICBUb29sYmFyU3BhY2VyRGlyZWN0aXZlLFxuICAgICAgICBCdXN5SW5kaWNhdG9yQ29tcG9uZW50LFxuICAgICAgICBGb3JtTGFiZWxDb21wb25lbnQsXG4gICAgICAgIFNrZWxldG9uQ29tcG9uZW50LFxuICAgICAgICBTZWxlY3RUYWJDb21wb25lbnQsXG4gICAgICAgIERlZmluZVRhYkNvbXBvbmVudCxcbiAgICAgICAgTGlzdExpbmtEaXJlY3RpdmUsXG4gICAgICAgIExpc3RUaXRsZURpcmVjdGl2ZSxcbiAgICAgICAgTGlzdEljb25EaXJlY3RpdmUsXG4gICAgICAgIFRhYk5hdkNvbXBvbmVudCxcbiAgICAgICAgVGFiSXRlbURpcmVjdGl2ZSxcbiAgICAgICAgVGFiTGlua0RpcmVjdGl2ZSxcbiAgICAgICAgVGFiVGFnRGlyZWN0aXZlLFxuICAgICAgICBCYXJDb21wb25lbnQsXG4gICAgICAgIEJhckxlZnREaXJlY3RpdmUsXG4gICAgICAgIEJhckVsZW1lbnREaXJlY3RpdmUsXG4gICAgICAgIEJhclJpZ2h0RGlyZWN0aXZlLFxuICAgICAgICBCdXR0b25CYXJDb21wb25lbnQsXG4gICAgICAgIE5nU3dpdGNoLFxuICAgICAgICBOZ1N3aXRjaENhc2UsXG4gICAgICAgIFNsaWNlUGlwZSxcbiAgICAgICAgRmRUcmFuc2xhdGVQaXBlLFxuICAgICAgICBEaXNwbGF5Rm5QaXBlXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBQbGF0Zm9ybVZhbHVlSGVscERpYWxvZ0NvbXBvbmVudDxUID0gYW55PiBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgICAvKiogSWQgb2YgdGhlIHBvcG92ZXIgKi9cbiAgICBASW5wdXQoKVxuICAgIGlkOiBzdHJpbmcgPSAnZmRwLXZoZC0nICsgdmhpVW5pcXVlSWQrKztcblxuICAgIC8qKiBJbml0aWFsIHN0YXRlIG9mIFZhbHVlIGhlbHAgZGlhbG9nICovXG4gICAgQElucHV0KClcbiAgICB2YWx1ZTogVmhkVmFsdWU8VD4gPSB7XG4gICAgICAgIHNlbGVjdGVkOiBbXSxcbiAgICAgICAgY29uZGl0aW9uczogW11cbiAgICB9O1xuXG4gICAgLyoqIERpYWxvZyB0aXRsZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlhbG9nVGl0bGU6IHN0cmluZztcblxuICAgIC8qKiBTZWxlY3QgZnJvbSBsaXN0IHRhYiBhY3RpdmF0aW9uICovXG4gICAgQElucHV0KClcbiAgICBpbml0aWFsVGFiID0gVmhkVGFiLnNlbGVjdEZyb21MaXN0O1xuXG4gICAgLyoqIFZpc2libGUgdGFicyAqL1xuICAgIEBJbnB1dCgpXG4gICAgdGFiczogJ2JvdGgnIHwgJ3NlbGVjdCcgfCAnZGVmaW5lJyA9ICdib3RoJztcblxuICAgIC8qKiBJbml0aWFsIGV4cGFuZCBzdGF0ZSBmb3IgYWR2YW5jZWQgc2VhcmNoIHBhbmVsICovXG4gICAgQElucHV0KClcbiAgICBpc09wZW5BZHZhbmNlZCA9IGZhbHNlO1xuXG4gICAgLyoqIERhdGEgc291cmNlICovXG4gICAgQElucHV0KClcbiAgICBzZXQgZGF0YVNvdXJjZSh2YWx1ZTogRmRwVmFsdWVIZWxwRGlhbG9nRGF0YVNvdXJjZTxhbnk+IHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZSA9IHRoaXMudG9EYXRhU3RyZWFtKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgZGF0YVNvdXJjZSgpOiBGZHBWYWx1ZUhlbHBEaWFsb2dEYXRhU291cmNlPGFueT4gfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YVNvdXJjZTtcbiAgICB9XG5cbiAgICAvKiogRGlhbG9nJ3MgY3VzdG9tIGNvbmZpZyAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlhbG9nQ29uZmlnOiBEaWFsb2dDb25maWcgPSB7fTtcblxuICAgIC8qKiBVbmlxdWUga2V5IGZyb20gdGhlIHNvdXJjZSBmaWVsZCBuYW1lcy4gUmVxdWlyZWQgZmllbGQuICovXG4gICAgQElucHV0KClcbiAgICB1bmlxdWVLZXk6IHN0cmluZztcblxuICAgIC8qKiBJZCBhdHRyaWJ1dGUgZm9yIGRpYWxvZyB0aXRsZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgaGVhZGVySWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqIEZpZWxkIG5hbWUgZm9yIGRlZmF1bHQgcmVuZGVyIGZyb20gZGF0YS5cbiAgICAgKiBSZXF1aXJlZCBmaWVsZCBpZiB0b2tlbml6ZXJGbiBpcyBub3QgZXhpc3QuICovXG4gICAgQElucHV0KClcbiAgICB0b2tlblZpZXdGaWVsZDogc3RyaW5nO1xuXG4gICAgLyoqIFRva2VuaXplciBmdW5jdGlvbiBmb3IgY3VzdG9tIHRva2VuIHJlbmRlciwgaXQgaGFzIGhpZ2hlciBwcmlvIHRoYXQgYHRva2VuVmlld0ZpZWxkYC5cbiAgICAgKiBSZXF1aXJlZCBmaWVsZCBpZiB0b2tlblZpZXdGaWVsZCBpcyBub3QgZXhpc3QuICovXG4gICAgQElucHV0KClcbiAgICB0b2tlbml6ZXJGbjogKGl0ZW06IFQpID0+IHN0cmluZztcblxuICAgIC8qKiBXaGV0aGVyIHRoZSB2YWx1ZSBoZWxwIGRpYWxvZyBzaG91bGQgYmUgdmlldyBpbiBtb2JpbGUgbW9kZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgbW9iaWxlID0gZmFsc2U7XG5cbiAgICAvKiogSXQgc2hvdWxkIGJlIGFibGUgaWYgeW91IHVzZSBtdWx0aXBsZSBzZWxlY3Rpb24gKi9cbiAgICBASW5wdXQoKVxuICAgIGZvcm1hdFRva2VuOiAodmFsdWU6IFZoZFZhbHVlQ2hhbmdlRXZlbnQ8VD4pID0+IHZvaWQ7XG5cbiAgICAvKiogVG9rZW5pemVyIGZ1bmN0aW9uIGZvciBjb25kaXRpb24ncyB0b2tlbiByZW5kZXIgKi9cbiAgICBASW5wdXQoKVxuICAgIGNvbmRpdGlvbkRpc3BsYXlGbiA9IGRlZmF1bHRDb25kaXRpb25EaXNwbGF5Rm47XG5cbiAgICAvKiogU2VsZWN0aW9uIG1vZGUgZm9yIHNlYXJjaCB0YWJsZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2VhcmNoU2VsZWN0aW9uOiBWZGhUYWJsZVNlbGVjdGlvbiA9ICdtdWx0aSc7XG5cbiAgICAvKiogSXRlbXMgcGVyIHBhZ2UgZm9yIHBhZ2luYXRpb24gYmVsb3cgc2VhcmNoIHRhYmxlICovXG4gICAgQElucHV0KClcbiAgICBzZWFyY2hUYWJsZVBhZ2VTaXplID0gMjA7XG5cbiAgICAvKiogQ291bnQgb2YgZGVmYXVsdCBtb2JpbGUgaGVhZGVyIGZyb20gc2VhcmNoIHRhYmxlICovXG4gICAgQElucHV0KClcbiAgICBzZWFyY2hUYWJsZU1vYmlsZUhlYWRlcnMgPSAyO1xuXG4gICAgLyoqIE1heCBzaG93biBpbml0aWFsIGZpbHRlcnMgb24gb3Blbi4gRGVza3RvcCBvbmx5ICovXG4gICAgQElucHV0KClcbiAgICBtYXhTaG93bkluaXRpYWxGaWx0ZXJzID0gNDtcblxuICAgIC8qKiBMb2FkaW5nIHN0YXRlICovXG4gICAgQElucHV0KClcbiAgICBsb2FkaW5nOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gICAgLyoqIEN1c3RvbSBzdHJhdGVnaWVzIGxhYmVsc1xuICAgICAqIEFsbG93ZWQga2V5czogY29udGFpbnMsIGVxdWFsVG8sIGJldHdlZW4sIHN0YXJ0c1dpdGgsIGVuZHNXaXRoLCBsZXNzVGhhbiwgbGVzc1RoYW5FcXVhbCwgZ3JlYXRlclRoYW4sIGdyZWF0ZXJUaGFuRXF1YWwsIGVtcHR5XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBkZWZpbmVTdHJhdGVneUxhYmVsczoge1xuICAgICAgICBba2V5IGluIGtleW9mICh0eXBlb2YgVmhkRGVmaW5lSW5jbHVkZVN0cmF0ZWd5IHwgdHlwZW9mIFZoZERlZmluZUV4Y2x1ZGVTdHJhdGVneSldPzogc3RyaW5nO1xuICAgIH0gPSB7XG4gICAgICAgIGNvbnRhaW5zOiAnY29udGFpbnMnLFxuICAgICAgICBlcXVhbFRvOiAnZXF1YWwgdG8nLFxuICAgICAgICBiZXR3ZWVuOiAnYmV0d2VlbicsXG4gICAgICAgIHN0YXJ0c1dpdGg6ICdzdGFydHMgd2l0aCcsXG4gICAgICAgIGVuZHNXaXRoOiAnZW5kcyB3aXRoJyxcbiAgICAgICAgbGVzc1RoYW46ICdsZXNzIHRoYW4nLFxuICAgICAgICBsZXNzVGhhbkVxdWFsOiAnbGVzcyB0aGFuIG9yIGVxdWFsIHRvJyxcbiAgICAgICAgZ3JlYXRlclRoYW46ICdncmVhdGVyIHRoYW4nLFxuICAgICAgICBncmVhdGVyVGhhbkVxdWFsOiAnZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvJyxcbiAgICAgICAgZW1wdHk6ICdlbXB0eScsXG4gICAgICAgIG5vdF9lcXVhbFRvOiAnbm90IGVxdWFsIHRvJyxcbiAgICAgICAgbm90X2VtcHR5OiAnbm90IGVtcHR5J1xuICAgIH07XG5cbiAgICAvKiogRGlhbG9nIG91dHB1dHMgKi9cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIGZpbHRlcnMvdG9rZW5zIHdlcmUgY2hhbmdlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VmhkVmFsdWVDaGFuZ2VFdmVudDxUPj4oKTtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gZGF0YSBsb2FkaW5nIGlzIHN0YXJ0ZWQuICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtb24tcHJlZml4XG4gICAgQE91dHB1dCgpIG9uRGF0YVJlcXVlc3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gZGF0YSBsb2FkaW5nIGlzIGZpbmlzaGVkLiAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW9uLXByZWZpeFxuICAgIEBPdXRwdXQoKSBvbkRhdGFSZWNlaXZlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuIEZpdGxlcnMgZm9yIHNlYXJjaCB0YWJsZSBhbmQgZGVmaW5jZSBjb25kaXRpb25zICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihWaGRGaWx0ZXJDb21wb25lbnQpXG4gICAgZmlsdGVyczogUXVlcnlMaXN0PFZoZEZpbHRlckNvbXBvbmVudD47XG5cbiAgICAvKiogQGhpZGRlbiBJbnRlcm5hbCBjb250YWluZXIgZm9yIGRpYWxvZyAqL1xuICAgIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgICBkaWFsb2dDb250YWluZXI6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGFjdGl2ZURpYWxvZz86IERpYWxvZ1JlZjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3RhYlR5cGVzID0gVmhkVGFiO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfaGFzQWR2YW5jZWQgPSB0cnVlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfaGFzRGVmaW5lRmlsdGVycyA9IHRydWU7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9kaXNwbGF5ZWRGaWx0ZXJzOiBWaGRGaWx0ZXJbXSA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZGlzcGxheWVkRGF0YTogVFtdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9tYWluU2VhcmNoID0gJyc7XG5cbiAgICAvKiogaGFuZGxlcyBydGwgc2VydmljZVxuICAgICAqIEBoaWRkZW4gKi9cbiAgICBfZGlyID0gJ2x0cic7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NlbGVjdFRhYlRpdGxlOiBzdHJpbmc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2RlZmluZVRhYlRpdGxlOiBzdHJpbmc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2Rlc3Ryb3llZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2RhdGFTb3VyY2U6IEZkcFZhbHVlSGVscERpYWxvZ0RhdGFTb3VyY2U8YW55PiB8IHVuZGVmaW5lZDtcblxuICAgIC8qKiBAaGlkZGVuIGZvciBkYXRhIHNvdXJjZSBoYW5kbGluZyAqL1xuICAgIHByaXZhdGUgX2RzU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsO1xuXG4gICAgLyoqIEBoaWRkZW4gUHJldmlvdXMgc3RhdGUgKi9cbiAgICBwcml2YXRlIF9wcmV2U3RhdGU6IFZoZFZhbHVlPFQ+ID0ge1xuICAgICAgICBzZWxlY3RlZDogW10sXG4gICAgICAgIGNvbmRpdGlvbnM6IFtdXG4gICAgfTtcbiAgICAvKiogQGhpZGRlbiBDdXJyZW50IGRhdGEgZm9yIGxvY2FsIG1hbnVwdWxhdGlvbiAqL1xuICAgIHByaXZhdGUgX2N1cnJlbnRWYWx1ZTogVmhkVmFsdWU8VD4gPSB7XG4gICAgICAgIHNlbGVjdGVkOiBbXSxcbiAgICAgICAgY29uZGl0aW9uczogW11cbiAgICB9O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBzZWxlY3RlZFRhYjogVmhkVGFiIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHNob3duRmlsdGVyQ291bnQgPSBJbmZpbml0eTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IGxvYWRpbmdTdGF0ZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9hZGluZyA/PyB0aGlzLl9pbnRlcm5hbExvYWRpbmdTdGF0ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlblxuICAgICAqIFRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBmaXJzdCBsb2FkaW5nIHdoZW4gc2tlbGV0b25zIGJlIHNob3duIGFuZCBzdWJzZXF1ZW50IGxvYWRpbmdzIHdoZW4gYnVzeSBpbmRpY2F0b3IgYmUgc2hvd25cbiAgICAgKi9cbiAgICBfZmlyc3RMb2FkaW5nRG9uZSA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbnRlcm5hbExvYWRpbmdTdGF0ZSA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9vbkRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2RpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgcmVhZG9ubHkgX3J0bFNlcnZpY2U6IFJ0bFNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgLyoqIERlZmF1bHQgZGlzcGxheSBmdW5jdGlvbiBmb3IgZGVmaW5lIGNvbmRpdGlvbnMgKi9cbiAgICAgICAgaWYgKCF0aGlzLmNvbmRpdGlvbkRpc3BsYXlGbiB8fCB0eXBlb2YgdGhpcy5jb25kaXRpb25EaXNwbGF5Rm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uRGlzcGxheUZuID0gZGVmYXVsdENvbmRpdGlvbkRpc3BsYXlGbjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IGlzTW9iaWxlQWR2YW5jZWRTZWFyY2hBY3RpdmUoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLm1vYmlsZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNPcGVuQWR2YW5jZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IGhhc1NlbGVjdGVkVGFiKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFRhYiAhPSBudWxsICYmIHRoaXMuc2VsZWN0ZWRUYWIgaW4gVmhkVGFiO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IHNob3dTZWxlY3Rpb25UYWIoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhYnMgIT09ICdkZWZpbmUnO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IHNob3dEZWZpbmVUYWIoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhYnMgIT09ICdzZWxlY3QnO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IGlzU2VsZWN0aW9uVGFiKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFRhYiA9PT0gVmhkVGFiLnNlbGVjdEZyb21MaXN0IHx8IHRoaXMuc2VsZWN0ZWRUYWIgPT09IFZoZFRhYi5hZHZhbmNlZFNlYXJjaDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBzZWxlY3RlZEl0ZW1zKCk6IFRbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50VmFsdWUuc2VsZWN0ZWQgfHwgW107XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgY29uZGl0aW9uSXRlbXMoKTogQmFzZUVudGl0eVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRWYWx1ZS5jb25kaXRpb25zIHx8IFtdO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IHZhbGlkQ29uZGl0aW9ucygpOiBCYXNlRW50aXR5W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0VmFsaWRDb25kaXRpb24odGhpcy5jb25kaXRpb25JdGVtcyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgaGFzU2VsZWN0ZWRBbmRDb25kaXRpb25zKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gQm9vbGVhbih0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoICsgdGhpcy52YWxpZENvbmRpdGlvbnMubGVuZ3RoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBpc1Nob3dBbGxGaWx0ZXJzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXJzLmxlbmd0aCA+IHRoaXMubWF4U2hvd25Jbml0aWFsRmlsdGVycyAmJiB0aGlzLnNob3duRmlsdGVyQ291bnQgPiB0aGlzLm1heFNob3duSW5pdGlhbEZpbHRlcnM7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgaXNPcGVuKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLmFjdGl2ZURpYWxvZztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICBpZiAoJ2RhdGFTb3VyY2UnIGluIGNoYW5nZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pbml0aWFsaXplRFMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Jlc2V0U3RhdGUoKTtcbiAgICAgICAgdGhpcy5fb25EZXN0cm95JC5uZXh0KCk7XG4gICAgfVxuXG4gICAgLyoqIE9wZW4gZGlhbG9nICovXG4gICAgb3BlbigpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWRPcHRpb25zKCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUGxlYXNlIGNoZWNrIHJlcXVpcmVkIGZpZWxkcycpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NhdmVQcmV2aW91c1N0YXRlKCk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUZpbHRlcnMoKTtcbiAgICAgICAgdGhpcy5faW5pdGlhbGl6ZURTKCk7XG4gICAgICAgIHRoaXMuX2luaXRpYWxpemVUYWIoKTtcbiAgICAgICAgdGhpcy5hY3RpdmVEaWFsb2cgPSB0aGlzLl9kaWFsb2dTZXJ2aWNlLm9wZW4odGhpcy5kaWFsb2dDb250YWluZXIsIHtcbiAgICAgICAgICAgIGJhY2tkcm9wQ2xpY2tDbG9zZWFibGU6IGZhbHNlLFxuICAgICAgICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXG4gICAgICAgICAgICB2ZXJ0aWNhbFBhZGRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgZXNjS2V5Q2xvc2VhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGRpYWxvZ1BhbmVsQ2xhc3M6IGBmZHAtdmFsdWUtaGVscC1kaWFsb2cgJHt0aGlzLm1vYmlsZSA/ICdmZHAtdmFsdWUtaGVscC1kaWFsb2ctbW9iaWxlJyA6ICcnfWAsXG4gICAgICAgICAgICAuLi50aGlzLmRpYWxvZ0NvbmZpZyxcblxuICAgICAgICAgICAgbW9iaWxlOiB0aGlzLm1vYmlsZSxcbiAgICAgICAgICAgIG1heFdpZHRoOiB0aGlzLm1vYmlsZSA/IHVuZGVmaW5lZCA6ICc5MiUnLFxuICAgICAgICAgICAgd2lkdGg6IHRoaXMubW9iaWxlID8gdW5kZWZpbmVkIDogJzEwODBweCcsXG4gICAgICAgICAgICBoZWlnaHQ6IHRoaXMubW9iaWxlID8gdW5kZWZpbmVkIDogJzk4JSdcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2xpc3RlbkRpYWxvZ0V2ZW50cygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvZ2dsZSBhZHZhbmNlZCBzZWFyY2ggcGFuZWxcbiAgICAgKi9cbiAgICB0b2dnbGVBZHZhbmNlZFNlYXJjaChzdGF0ZT86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzdGF0ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuQWR2YW5jZWQgPSBzdGF0ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuQWR2YW5jZWQgPSAhdGhpcy5pc09wZW5BZHZhbmNlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm1vYmlsZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRhYiA9IHRoaXMuaXNPcGVuQWR2YW5jZWQgPyBWaGRUYWIuYWR2YW5jZWRTZWFyY2ggOiBWaGRUYWIuc2VsZWN0RnJvbUxpc3Q7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhciBhbGwgc2VsZWN0ZWQgaXRlbXNcbiAgICAgKi9cbiAgICBjbGVhclNlbGVjdGVkQW5kQ29uZGl0aW9uSXRlbXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRWYWx1ZS5zZWxlY3RlZCA9IFtdO1xuICAgICAgICB0aGlzLl9jdXJyZW50VmFsdWUuY29uZGl0aW9ucyA9IFtdO1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogU2VhcmNoIGJ5IG9ubHkgdGhlIHNlYXJjaCB0ZXJtLiAqL1xuICAgIHNlYXJjaCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5maWx0ZXIodHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VhcmNoIGJ5IGFsbCBmaWxsZWQgZmlsdGVycywgaW5jbHVkaW5nIHRoZSBzZWFyY2ggdGVybS5cbiAgICAgKi9cbiAgICBmaWx0ZXIob25seVNlYXJjaCA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG5vbkVtcHR5RmlsdGVycyA9IG5ldyBNYXAoKTtcblxuICAgICAgICBpZiAoIW9ubHlTZWFyY2gpIHtcbiAgICAgICAgICAgIHRoaXMuX2Rpc3BsYXllZEZpbHRlcnNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKCh7IHZhbHVlIH0pID0+ICEhdmFsdWUgJiYgdmFsdWUudHJpbSgpLmxlbmd0aClcbiAgICAgICAgICAgICAgICAuZm9yRWFjaCgoZSkgPT4gbm9uRW1wdHlGaWx0ZXJzLnNldChlLmtleSwgZS52YWx1ZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX21haW5TZWFyY2gubGVuZ3RoKSB7XG4gICAgICAgICAgICBub25FbXB0eUZpbHRlcnMuc2V0KCcqJywgdGhpcy5fbWFpblNlYXJjaCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYXRhU291cmNlPy5tYXRjaChub25FbXB0eUZpbHRlcnMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFwcGx5IHNlYXJjaCBmcm9tIGFkdmFuY2VkIGZpbHRlcnMgdmlldywgdXNpbmcgd2hlbiBtb2JpbGUgdmlldyBpcyBhY3RpdmVcbiAgICAgKi9cbiAgICBzZWFyY2hBZHZhbmNlZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5maWx0ZXIoKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRhYiA9IFZoZFRhYi5zZWxlY3RGcm9tTGlzdDtcbiAgICAgICAgdGhpcy5pc09wZW5BZHZhbmNlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKiBSZW1vdmUgaXRlbSBmcm9tIHNlbGVjdGVkIGFycmF5ICovXG4gICAgcmVtb3ZlU2VsZWN0ZWQoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl9jdXJyZW50VmFsdWUuc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKChfLCBpKSA9PiBpICE9PSBpbmRleCk7XG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSBjb25kaXRpb24gaXRlbVxuICAgICAqL1xuICAgIHJlbW92ZUNvbmRpdGlvbihpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRWYWx1ZS5jb25kaXRpb25zID0gdGhpcy5jb25kaXRpb25JdGVtcy5maWx0ZXIoKF8sIGkpID0+IGkgIT09IGluZGV4KTtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU3dpdGNoIHRhYiBieSB0eXBlXG4gICAgICovXG4gICAgc3dpdGNoVGFiKHR5cGU6IFZoZFRhYiB8IG51bGwgPSBudWxsKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUYWIgPSB0eXBlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsb3NlIGRpYWxvZyB3aXRoIHZhbHVlO1xuICAgICAqL1xuICAgIHN1Y2Nlc3MoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZURpYWxvZykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWU6IFZoZFZhbHVlQ2hhbmdlRXZlbnQgPSB7XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IHRoaXMuc2VsZWN0ZWRJdGVtcyxcbiAgICAgICAgICAgICAgICBjb25kaXRpb25zOiB0aGlzLnZhbGlkQ29uZGl0aW9uc1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5mb3JtYXRUb2tlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybWF0VG9rZW4odmFsdWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFjdGl2ZURpYWxvZy5jbG9zZSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZURpYWxvZy5jbG9zZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIaWRlIGFkdmFuY2VkIHNlYXJjaCBvbiBtb2JpbGUgdmlldyBhbmQgaWYgaXQncyBvcGVuZWRcbiAgICAgKiBDbG9zZSBkaWFsb2cgd2l0aCBudWxsIHZhbHVlO1xuICAgICAqL1xuICAgIGRpc21pc3MoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLm1vYmlsZSAmJiB0aGlzLmlzT3BlbkFkdmFuY2VkKSB7XG4gICAgICAgICAgICB0aGlzLmlzT3BlbkFkdmFuY2VkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnN3aXRjaFRhYihWaGRUYWIuc2VsZWN0RnJvbUxpc3QpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudFZhbHVlID0gdGhpcy5fcHJldlN0YXRlO1xuICAgICAgICAgICAgaWYgKHRoaXMuYWN0aXZlRGlhbG9nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVEaWFsb2cuY2xvc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3RyYWNrQnlTZWxlY3RlZEZuKF9pbmRleDogbnVtYmVyLCBpdGVtOiBUKTogbnVtYmVyIHwgc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0gJiYgaXRlbVt0aGlzLnVuaXF1ZUtleV07XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfdHJhY2tCeUZpbHRlckZuKF9pbmRleDogbnVtYmVyLCBpdGVtOiBWaGRGaWx0ZXIpOiBudW1iZXIgfCBzdHJpbmcge1xuICAgICAgICByZXR1cm4gaXRlbSAmJiBpdGVtLmtleTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF90cmFja0J5Q29uZGl0aW9uRm4oX2luZGV4OiBudW1iZXIsIGl0ZW06IEJhc2VFbnRpdHkpOiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gaXRlbSA/IGl0ZW0udmFsdWUgKyBpdGVtLnZhbHVlVG8gKyBpdGVtLnN0cmF0ZWd5ICsgaXRlbS5rZXkgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvblNlbGVjdCgkZXZlbnQ6IFRbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jdXJyZW50VmFsdWUuc2VsZWN0ZWQgPSAkZXZlbnQ7XG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICBpZiAodGhpcy5zZWFyY2hTZWxlY3Rpb24gPT09ICdvbmNlJykge1xuICAgICAgICAgICAgdGhpcy5zdWNjZXNzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uQ29uZGl0aW9uQ2hhbmdlKCRldmVudDogQmFzZUVudGl0eVtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRWYWx1ZS5jb25kaXRpb25zID0gJGV2ZW50O1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHRvZ2dsZVNob3duRmlsdGVycygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zaG93bkZpbHRlckNvdW50ID1cbiAgICAgICAgICAgIHRoaXMubWF4U2hvd25Jbml0aWFsRmlsdGVycyA9PT0gdGhpcy5zaG93bkZpbHRlckNvdW50ID8gSW5maW5pdHkgOiB0aGlzLm1heFNob3duSW5pdGlhbEZpbHRlcnM7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbml0U2hvd25GaWx0ZXJzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNob3duRmlsdGVyQ291bnQgPSB0aGlzLm1heFNob3duSW5pdGlhbEZpbHRlcnMgfHwgSW5maW5pdHk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRWYWxpZENvbmRpdGlvbihpdGVtczogQmFzZUVudGl0eVtdID0gW10pOiBCYXNlRW50aXR5W10ge1xuICAgICAgICByZXR1cm4gaXRlbXMuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgaXRlbS5zdHJhdGVneSA9PT0gVmhkRGVmaW5lSW5jbHVkZVN0cmF0ZWd5LmVtcHR5IHx8XG4gICAgICAgICAgICAgICAgaXRlbS5zdHJhdGVneSA9PT0gVmhkRGVmaW5lRXhjbHVkZVN0cmF0ZWd5Lm5vdF9lbXB0eVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXRlbS5zdHJhdGVneSA9PT0gVmhkRGVmaW5lSW5jbHVkZVN0cmF0ZWd5LmJldHdlZW4pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gQm9vbGVhbihpdGVtLnZhbHVlLmxlbmd0aCAmJiBpdGVtLnZhbHVlVG8ubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaXRlbS52YWxpZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBCb29sZWFuKGl0ZW0udmFsdWUubGVuZ3RoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbml0aWFsaXplRFMoZHM6IEZkcFZhbHVlSGVscERpYWxvZ0RhdGFTb3VyY2U8YW55PiB8IHVuZGVmaW5lZCA9IHRoaXMuZGF0YVNvdXJjZSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9yZXNldFNvdXJjZVN0cmVhbSgpO1xuXG4gICAgICAgIGlmICh0aGlzLnNob3dTZWxlY3Rpb25UYWIpIHtcbiAgICAgICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gICAgICAgICAgICB0aGlzLl9kc1N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICAgICAgICAgICAgZHM/Lm9uRGF0YVJlcXVlc3RlZCgpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2ludGVybmFsTG9hZGluZ1N0YXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkRhdGFSZXF1ZXN0ZWQuZW1pdCgpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB0aGlzLl9kc1N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICAgICAgICAgICAgZHM/Lm9uRGF0YVJlY2VpdmVkKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW50ZXJuYWxMb2FkaW5nU3RhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmlyc3RMb2FkaW5nRG9uZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25EYXRhUmVjZWl2ZWQuZW1pdCgpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBjb25zdCBkc1N1YiA9IHRoaXMub3BlbkRhdGFTdHJlYW0oKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGlzcGxheWVkRGF0YSA9IGRhdGEuc2xpY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uLmFkZChkc1N1Yik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBTYXZlIHByZXZpb3VzIHN0YXRlICovXG4gICAgcHJpdmF0ZSBfc2F2ZVByZXZpb3VzU3RhdGUoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gY2xvbmVEZWVwKHRoaXMudmFsdWUpO1xuICAgICAgICB0aGlzLl9jdXJyZW50VmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5fcHJldlN0YXRlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbml0aWFsaXplVGFiKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5tb2JpbGUpIHtcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuQWR2YW5jZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zaG93U2VsZWN0aW9uVGFiICYmIHRoaXMuc2hvd0RlZmluZVRhYikge1xuICAgICAgICAgICAgdGhpcy5zd2l0Y2hUYWIodGhpcy5tb2JpbGUgPyB1bmRlZmluZWQgOiB0aGlzLmluaXRpYWxUYWIpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2hvd1NlbGVjdGlvblRhYikge1xuICAgICAgICAgICAgdGhpcy5zd2l0Y2hUYWIoVmhkVGFiLnNlbGVjdEZyb21MaXN0KTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNob3dEZWZpbmVUYWIpIHtcbiAgICAgICAgICAgIHRoaXMuc3dpdGNoVGFiKFZoZFRhYi5kZWZpbmVDb25kaXRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9pbml0U2hvd25GaWx0ZXJzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5EaWFsb2dFdmVudHMoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5hY3RpdmVEaWFsb2cpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFjdGl2ZURpYWxvZy5hZnRlckNsb3NlZC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fcmVzZXRTdGF0ZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5maWx0ZXJzLmNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUZpbHRlcnMoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMuX3J0bFNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2RpciA9IHRoaXMuX3J0bFNlcnZpY2UucnRsLmdldFZhbHVlKCkgPyAncnRsJyA6ICdsdHInO1xuICAgICAgICAgICAgdGhpcy5fcnRsU2VydmljZS5ydGwucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKChpc1J0bDogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RpciA9IGlzUnRsID8gJ3J0bCcgOiAnbHRyJztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yZXNldFN0YXRlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9kZXN0cm95ZWQubmV4dCgpO1xuICAgICAgICB0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5fcmVzZXRTb3VyY2VTdHJlYW0oKTtcbiAgICAgICAgdGhpcy5hY3RpdmVEaWFsb2cgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF91cGRhdGVGaWx0ZXJzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9kaXNwbGF5ZWRGaWx0ZXJzID0gdGhpcy5maWx0ZXJzLm1hcCgoZSkgPT4gKHtcbiAgICAgICAgICAgIC4uLmUsXG4gICAgICAgICAgICBsYWJlbDogZS5sYWJlbCB8fCBlLmtleVxuICAgICAgICB9KSk7XG5cbiAgICAgICAgdGhpcy5faGFzQWR2YW5jZWQgPSB0aGlzLl9kaXNwbGF5ZWRGaWx0ZXJzLnNvbWUoKGU6IFZoZEZpbHRlcikgPT4gISFlLmFkdmFuY2VkKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgb3BlbkRhdGFTdHJlYW0oKTogT2JzZXJ2YWJsZTxUW10+IHtcbiAgICAgICAgaWYgKHRoaXMuX2RhdGFTb3VyY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGFTb3VyY2UubWF0Y2goKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFTb3VyY2Uub3BlbigpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgW2RhdGFTb3VyY2VdIHNvdXJjZSBkaWQgbm90IG1hdGNoIGFuIGFycmF5LCBPYnNlcnZhYmxlLCBvciBEYXRhU291cmNlYCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHRvRGF0YVN0cmVhbShkczogRmRwVmFsdWVIZWxwRGlhbG9nRGF0YVNvdXJjZTxUPik6IEZkcFZhbHVlSGVscERpYWxvZ0RhdGFTb3VyY2U8VD4gfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoaXNEYXRhU291cmNlKGRzKSkge1xuICAgICAgICAgICAgcmV0dXJuIGRzIGFzIFZhbHVlSGVscERpYWxvZ0RhdGFTb3VyY2U8VD47XG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShkcykpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQXJyYXlWYWx1ZUhlbHBEaWFsb2dEYXRhU291cmNlPFQ+KGRzKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc09ic2VydmFibGUoZHMpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGVWYWx1ZUhlbHBEaWFsb2dEYXRhU291cmNlPFQ+KGRzIGFzIE9ic2VydmFibGU8VFtdPik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcmVzZXRTb3VyY2VTdHJlYW0oKTogdm9pZCB7XG4gICAgICAgIGlmIChpc0RhdGFTb3VyY2UodGhpcy5kYXRhU291cmNlKSkge1xuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2RzU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9kc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5fZHNTdWJzY3JpcHRpb24gPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIGlzVmFsaWRPcHRpb25zKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5zaG93U2VsZWN0aW9uVGFiKSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICEhdGhpcy5kYXRhU291cmNlICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIHRoaXMudW5pcXVlS2V5ID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgICAgICh0eXBlb2YgdGhpcy50b2tlblZpZXdGaWVsZCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHRoaXMudG9rZW5pemVyRm4gPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSBsZXQtZGlhbG9nIGxldC1kaWFsb2dDb25maWc9XCJkaWFsb2dDb25maWdcIiAjY29udGFpbmVyPlxuICAgIDxmZC1kaWFsb2cgW2RpYWxvZ0NvbmZpZ109XCJkaWFsb2dDb25maWdcIiBbZGlhbG9nUmVmXT1cImRpYWxvZ1wiPlxuICAgICAgICA8ZmQtZGlhbG9nLWhlYWRlciBbZGlyXT1cIl9kaXJcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBmZGtUZW1wbGF0ZT1cImhlYWRlclwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtb2JpbGUgPyBtb2JpbGVEaWFsb2dUaXRsZSA6IGRlc2t0b3BEaWFsb2dUaXRsZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9mZC1kaWFsb2ctaGVhZGVyPlxuICAgICAgICA8ZmQtZGlhbG9nLWJvZHkgW2Rpcl09XCJfZGlyXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIW1vYmlsZVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhZHZhbmNlZFNlYXJjaENvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPGRpdiBmZC1zY3JvbGxiYXIgY2xhc3M9XCJmZHAtdmFsdWUtaGVscC1kaWFsb2dfX2NvbnRlbnQtaG9sZGVyXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1vYmlsZVwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYWR2YW5jZWRTZWFyY2hDb250ZW50XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRUYWIgPT09IF90YWJUeXBlcy5zZWxlY3RGcm9tTGlzdFwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2VsZWN0aW9uQ29udGVudFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkVGFiID09PSBfdGFiVHlwZXMuZGVmaW5lQ29uZGl0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZGVmaW5lQ29uZGl0aW9uc0NvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2ZkLWRpYWxvZy1ib2R5PlxuICAgICAgICA8ZmQtZGlhbG9nLWZvb3RlciBbZGlyXT1cIl9kaXJcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBmZGtUZW1wbGF0ZT1cImZvb3RlclwiPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZHAtdmFsdWUtaGVscC1kaWFsb2dfX3JvdyBmZHAtdmFsdWUtaGVscC1kaWFsb2dfX3NlbGVjdGlvbi1yb3dcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidwbGF0Zm9ybVZIRC5zZWxlY3Rpb25CYXJMYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWlzTW9iaWxlQWR2YW5jZWRTZWFyY2hBY3RpdmVcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGg1IGZkLXRpdGxlIGNsYXNzPVwic2VsZWN0ZWQtYW5kLWNvbmRpdGlvbi10aXRsZVwiIFtpZF09XCJpZCArICctc2VsZWN0ZWQtaXRlbSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoYXNTZWxlY3RlZEFuZENvbmRpdGlvbnM7IGVsc2Ugbm9JdGVtc1BhbmVsVGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAncGxhdGZvcm1WSEQuc2VsZWN0ZWRBbmRDb25kaXRpb25MYWJlbCcgfCBmZFRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICh7eyBzZWxlY3RlZEl0ZW1zLmxlbmd0aCArIHZhbGlkQ29uZGl0aW9ucy5sZW5ndGggfX0pXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9oNT5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmRwLXZhbHVlLWhlbHAtZGlhbG9nX190b2tlbnMtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZkcC12YWx1ZS1oZWxwLWRpYWxvZ19fdG9rZW5zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTZWxlY3RlZCBpdGVtcyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmQtdG9rZW5pemVyIFt0b2tlbml6ZXJGb2N1c2FibGVdPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZkLXRva2VuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZC10b29sYmFyLWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkT3ZlcmZsb3dQcmlvcml0eT1cImhpZ2hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZHAtdmFsdWUtaGVscC1kaWFsb2dfX3NlbGVjdGlvbi10b2tlblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25DbG9zZUNsaWNrKT1cInJlbW92ZVNlbGVjdGVkKHNlbGVjdGVkSW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpdGVtIG9mIHNlbGVjdGVkSXRlbXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggYXMgc2VsZWN0ZWRJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFja0J5OiBfdHJhY2tCeVNlbGVjdGVkRm5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+e3sgISF0b2tlbml6ZXJGbiA/IChpdGVtIHwgZGlzcGxheUZuUGlwZSA6IHRva2VuaXplckZuKSA6IGl0ZW1bdG9rZW5WaWV3RmllbGRdIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmQtdG9rZW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC10b2tlblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmQtdG9vbGJhci1pdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZE92ZXJmbG93UHJpb3JpdHk9XCJoaWdoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmRwLXZhbHVlLWhlbHAtZGlhbG9nX19zZWxlY3Rpb24tdG9rZW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2xvc2VDbGljayk9XCJyZW1vdmVDb25kaXRpb24oY29uZGl0aW9uSW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpdGVtIG9mIHZhbGlkQ29uZGl0aW9ucztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCBhcyBjb25kaXRpb25JbmRleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFja0J5OiBfdHJhY2tCeUNvbmRpdGlvbkZuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29uZGl0aW9uVmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGl0ZW06IGl0ZW0gfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmQtdG9rZW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmZC1mb3JtLWNvbnRyb2wgZmQtdG9rZW5pemVyLWlucHV0IFtkaXNhYmxlZF09XCIhaGFzU2VsZWN0ZWRBbmRDb25kaXRpb25zXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZkLXRva2VuaXplcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGVhclNlbGVjdGVkQW5kQ29uZGl0aW9uSXRlbXMoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZHAtdmFsdWUtaGVscC1kaWFsb2dfX3Rva2Vucy1jbGVhclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFoYXNTZWxlY3RlZEFuZENvbmRpdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ3BsYXRmb3JtVkhELmZvb3RlckNsZWFyU2VsZWN0ZWRUaXRsZScgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGg9XCJkZWNsaW5lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidwbGF0Zm9ybVZIRC5mb290ZXJDbGVhclNlbGVjdGVkQXJpYUxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZkcC12YWx1ZS1oZWxwLWRpYWxvZ19fYWN0aW9ucy1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWdvLWFkdmFuY2VkXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ3BsYXRmb3JtVkhELnNlYXJjaEJ1dHRvbkxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZkVHlwZT1cImVtcGhhc2l6ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJtb2JpbGUgJiYgaXNPcGVuQWR2YW5jZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlYXJjaEFkdmFuY2VkKClcIlxuICAgICAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1zdWNjZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCIncGxhdGZvcm1WSEQuc3VjY2Vzc0J1dHRvbkxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZkVHlwZT1cImVtcGhhc2l6ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3RlZFRhYiAhPT0gX3RhYlR5cGVzLmFkdmFuY2VkU2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzdWNjZXNzKClcIlxuICAgICAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1kaXNtaXNzLWRpYWxvZ1xuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidwbGF0Zm9ybVZIRC5jYW5jZWxCdXR0b25MYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGlzbWlzcygpXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9mZC1kaWFsb2ctZm9vdGVyPlxuICAgIDwvZmQtZGlhbG9nPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNub0l0ZW1zUGFuZWxUaXRsZT5cbiAgICB7eyAncGxhdGZvcm1WSEQuc2VsZWN0ZWRFbXB0eUxhYmVsJyB8IGZkVHJhbnNsYXRlIH19XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2FkdmFuY2VkU2VhcmNoQ29udGVudD5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNTZWxlY3Rpb25UYWJcIj5cbiAgICAgICAgPGZvcm0gY2xhc3M9XCJmZHAtdmFsdWUtaGVscC1kaWFsb2dfX3JvdyBmZHAtdmFsdWUtaGVscC1kaWFsb2dfX2FkdmFuY2VkLXNlYXJjaFwiIFtpZF09XCInYWR2YW5jZWQtc2VhcmNoLScgKyBpZFwiPlxuICAgICAgICAgICAgPGZkLWxheW91dC1ncmlkICpuZ0lmPVwiIW1vYmlsZSB8fCAobW9iaWxlICYmICFpc09wZW5BZHZhbmNlZClcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGZkTGF5b3V0R3JpZFJvdz5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbZmRMYXlvdXRHcmlkQ29sXT1cIjEyXCIgW2NvbE1kXT1cIjEyXCIgW2NvbExnXT1cIm1vYmlsZSA/IDEyIDogNlwiIFtjb2xYbF09XCJtb2JpbGUgPyAxMiA6IDZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxmZHAtc2VhcmNoLWZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidwbGF0Zm9ybVZIRC5zZWFyY2hCdXR0b25MYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlYXJjaFN1Ym1pdCk9XCJzZWFyY2goKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0Q2hhbmdlKT1cIl9tYWluU2VhcmNoID0gJGV2ZW50LnRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvZmRwLXNlYXJjaC1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgW2ZkTGF5b3V0R3JpZENvbF09XCIxMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY29sTWRdPVwiMTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NvbExnXT1cIm1vYmlsZSA/IDEyIDogNlwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY29sWGxdPVwibW9iaWxlID8gMTIgOiA2XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiX2hhc0FkdmFuY2VkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmRwLXZhbHVlLWhlbHAtZGlhbG9nX19hZHZhbmNlZC1hY3Rpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGZkLXRvb2xiYXIgW2NsZWFyQm9yZGVyXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmQtdG9vbGJhci1zcGFjZXI+PC9mZC10b29sYmFyLXNwYWNlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkLXRvb2xiYXItaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIl9oYXNBZHZhbmNlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb2JpbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdwbGF0Zm9ybVZIRC5zZWFyY2hBZHZhbmNlZFNlYXJjaExhYmVsJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaXNPcGVuQWR2YW5jZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdwbGF0Zm9ybVZIRC5zZWFyY2hIaWRlQWR2YW5jZWRTZWFyY2hMYWJlbCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdwbGF0Zm9ybVZIRC5zZWFyY2hTaG93QWR2YW5jZWRTZWFyY2hMYWJlbCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgfCBmZFRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQWR2YW5jZWRTZWFyY2goKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmQtdG9vbGJhci1pdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRUeXBlPVwiZW1waGFzaXplZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCIncGxhdGZvcm1WSEQuc2VhcmNoQnV0dG9uTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZmlsdGVyKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZmQtdG9vbGJhcj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2ZkLWxheW91dC1ncmlkPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIFtpZF09XCInYWR2YW5jZWQtc2VhcmNoLWNvbnRlbnQtJyArIGlkXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImlzT3BlbkFkdmFuY2VkICYmIF9oYXNBZHZhbmNlZFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmZHAtdmFsdWUtaGVscC1kaWFsb2dfX2FkdmFuY2VkLWZpbHRlcnNcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxmZC1idXN5LWluZGljYXRvciBbbG9hZGluZ109XCJsb2FkaW5nU3RhdGUgJiYgX2ZpcnN0TG9hZGluZ0RvbmVcIiBbYmxvY2tdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZmQtbGF5b3V0LWdyaWRcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiX2ZpcnN0TG9hZGluZ0RvbmU7IGVsc2UgZmlsdGVyc0xvYWRpbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZkcC12YWx1ZS1oZWxwLWRpYWxvZ19fd2l0aC10b2dnbGUtYWxsXT1cImZpbHRlcnMubGVuZ3RoID4gbWF4U2hvd25Jbml0aWFsRmlsdGVyc1wiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZmRMYXlvdXRHcmlkUm93PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZmlsdGVyIG9mIF9kaXNwbGF5ZWRGaWx0ZXJzIHwgc2xpY2UgOiAwIDogc2hvd25GaWx0ZXJDb3VudCArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFja0J5OiBfdHJhY2tCeUZpbHRlckZuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsdGVyLmFkdmFuY2VkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtmZExheW91dEdyaWRDb2xdPVwiMTJcIiBbY29sTWRdPVwiMTJcIiBbY29sTGddPVwiNlwiIFtjb2xYbF09XCIzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZmQtZm9ybS1ncm91cF9faGVhZGVyXCIgZmQtZm9ybS1sYWJlbCBbZm9yXT1cIidpbnB1dCcgKyBmaWx0ZXIua2V5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPnt7IGZpbHRlci5sYWJlbCB9fTo8L2xhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpbHRlci52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkLWZvcm0tY29udHJvbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cIidzZWFyY2gtYnktJyArIGZpbHRlci5sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCInaW5wdXQnICsgZmlsdGVyLmtleVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sR3Jvd1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmRMYXlvdXRHcmlkQ29sXT1cIjEyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbE1kXT1cIjEyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbExnXT1cIjZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sWGxdPVwiM1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZmlsdGVycy5sZW5ndGggPiBtYXhTaG93bkluaXRpYWxGaWx0ZXJzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZHAtdmFsdWUtaGVscC1kaWFsb2dfX3RvZ2dsZS1maWx0ZXJzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNob3duRmlsdGVycygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaXNTaG93QWxsRmlsdGVyc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdwbGF0Zm9ybVZIRC5zZWFyY2hIaWRlQWxsQWR2YW5jZWRTZWFyY2hMYWJlbCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAncGxhdGZvcm1WSEQuc2VhcmNoU2hvd0FsbEFkdmFuY2VkU2VhcmNoTGFiZWwnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB8IGZkVHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9mZC1sYXlvdXQtZ3JpZD5cblxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2ZpbHRlcnNMb2FkaW5nPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGZkLXNrZWxldG9uIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMHB4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZzpyZWN0IHg9XCIwXCIgeT1cIjBcIiByeD1cIjRcIiB3aWR0aD1cIjE1JVwiIGhlaWdodD1cIjhcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmc6cmVjdCB4PVwiMFwiIHk9XCIyMFwiIHJ4PVwiNFwiIHdpZHRoPVwiMjUlXCIgaGVpZ2h0PVwiMTZcIiAvPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZzpyZWN0IHg9XCIzNSVcIiB5PVwiMFwiIHJ4PVwiNFwiIHdpZHRoPVwiMTUlXCIgaGVpZ2h0PVwiOFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZzpyZWN0IHg9XCIzNSVcIiB5PVwiMjBcIiByeD1cIjRcIiB3aWR0aD1cIjI1JVwiIGhlaWdodD1cIjE2XCIgLz5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmc6cmVjdCB4PVwiMFwiIHk9XCI2MFwiIHJ4PVwiNFwiIHdpZHRoPVwiMTUlXCIgaGVpZ2h0PVwiOFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZzpyZWN0IHg9XCIwXCIgeT1cIjgwXCIgcng9XCI0XCIgd2lkdGg9XCIyNSVcIiBoZWlnaHQ9XCIxNlwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2ZkLXNrZWxldG9uPlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvZmQtYnVzeS1pbmRpY2F0b3I+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9mb3JtPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNzZWxlY3Rpb25Db250ZW50PlxuICAgIDxmZC1idXN5LWluZGljYXRvclxuICAgICAgICBbbG9hZGluZ109XCJsb2FkaW5nU3RhdGUgJiYgX2ZpcnN0TG9hZGluZ0RvbmVcIlxuICAgICAgICBbYmxvY2tdPVwidHJ1ZVwiXG4gICAgICAgIGNsYXNzPVwiZmRwLXZhbHVlLWhlbHAtZGlhbG9nX190YWJsZS1idXN5LWluZGljYXRvclwiXG4gICAgPlxuICAgICAgICA8ZmRwLXNlbGVjdC10YWJcbiAgICAgICAgICAgIFtzZWxlY3RlZF09XCJzZWxlY3RlZEl0ZW1zXCJcbiAgICAgICAgICAgIFtsb2FkaW5nXT1cImxvYWRpbmdTdGF0ZSAmJiAhX2ZpcnN0TG9hZGluZ0RvbmVcIlxuICAgICAgICAgICAgW3VpZF09XCJpZFwiXG4gICAgICAgICAgICBbZGlzcGxheWVkRGF0YV09XCJfZGlzcGxheWVkRGF0YVwiXG4gICAgICAgICAgICBbdGFiVGl0bGVdPVwiJ3BsYXRmb3JtVkhELnNlbGVjdFRhYlRpdGxlJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFttb2JpbGVdPVwibW9iaWxlXCJcbiAgICAgICAgICAgIFtzZWxlY3Rpb25dPVwic2VhcmNoU2VsZWN0aW9uXCJcbiAgICAgICAgICAgIFt1bmlxdWVLZXldPVwidW5pcXVlS2V5XCJcbiAgICAgICAgICAgIFtwYWdlU2l6ZV09XCJzZWFyY2hUYWJsZVBhZ2VTaXplXCJcbiAgICAgICAgICAgIFtkZWZhdWx0TW9iaWxlSGVhZGVyc109XCJzZWFyY2hUYWJsZU1vYmlsZUhlYWRlcnNcIlxuICAgICAgICAgICAgW2ZpbHRlcnNdPVwiX2Rpc3BsYXllZEZpbHRlcnNcIlxuICAgICAgICAgICAgKHNlbGVjdCk9XCJvblNlbGVjdCgkZXZlbnQpXCJcbiAgICAgICAgPjwvZmRwLXNlbGVjdC10YWI+XG4gICAgPC9mZC1idXN5LWluZGljYXRvcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmaW5lQ29uZGl0aW9uc0NvbnRlbnQ+XG4gICAgPGRpdiBmZC1zY3JvbGxiYXI+XG4gICAgICAgIDxmZHAtZGVmaW5lLXRhYlxuICAgICAgICAgICAgW3N0cmF0ZWd5TGFiZWxzXT1cImRlZmluZVN0cmF0ZWd5TGFiZWxzXCJcbiAgICAgICAgICAgIFtjb25kaXRpb25zXT1cImNvbmRpdGlvbkl0ZW1zXCJcbiAgICAgICAgICAgIFt1aWRdPVwiaWRcIlxuICAgICAgICAgICAgW3RhYlRpdGxlXT1cIidwbGF0Zm9ybVZIRC5kZWZpbmVUYWJUaXRsZScgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBbbW9iaWxlXT1cIm1vYmlsZVwiXG4gICAgICAgICAgICAoY29uZGl0aW9uQ2hhbmdlKT1cIm9uQ29uZGl0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICA+PC9mZHAtZGVmaW5lLXRhYj5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGlhbG9nVGl0bGVUZXh0PlxuICAgIDxoNSBbYXR0ci5pZF09XCJoZWFkZXJJZFwiIGZkLXRpdGxlPnt7IGRpYWxvZ1RpdGxlIH19PC9oNT5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjdGFiTGluayBsZXQtdGl0bGU9XCJ0aXRsZVwiIGxldC10eXBlPVwidHlwZVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZFRhYiA9PT0gdHlwZSAmJiBzaG93U2VsZWN0aW9uVGFiICYmIHNob3dEZWZpbmVUYWJcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICBnbHlwaD1cIm5hdmlnYXRpb24tbGVmdC1hcnJvd1wiXG4gICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAoY2xpY2spPVwic3dpdGNoVGFiKClcIlxuICAgICAgICAgICAgW3RpdGxlXT1cIidwbGF0Zm9ybVZIRC5zZWxlY3RNb2JpbGVUYWJCYWNrQnRuVGl0bGUnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICA+PC9idXR0b24+XG4gICAgICAgIDxoNSBmZC10aXRsZT57eyB0aXRsZSB9fTwvaDU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkVGFiICE9PSB0eXBlXCI+XG4gICAgICAgIDxhXG4gICAgICAgICAgICBmZC1saXN0LWxpbmtcbiAgICAgICAgICAgIChjbGljayk9XCJzd2l0Y2hUYWIodHlwZSlcIlxuICAgICAgICAgICAgW3RpdGxlXT1cIidwbGF0Zm9ybVZIRC5zZWxlY3RNb2JpbGVUYWJCdG5PcGVuRGlhbG9nTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBmZC1saXN0LXRpdGxlPnt7IHRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgICAgPGkgZmQtbGlzdC1pY29uIGdseXBoPVwibmF2aWdhdGlvbi1yaWdodC1hcnJvd1wiPjwvaT5cbiAgICAgICAgPC9hPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNhZHZhbmNlZEhlYWRlcj5cbiAgICA8YnV0dG9uIGZkLWJ1dHRvbiBnbHlwaD1cIm5hdmlnYXRpb24tbGVmdC1hcnJvd1wiIGZkVHlwZT1cInRyYW5zcGFyZW50XCIgKGNsaWNrKT1cInRvZ2dsZUFkdmFuY2VkU2VhcmNoKClcIj48L2J1dHRvbj5cbiAgICA8aDUgZmQtdGl0bGU+e3sgJ3BsYXRmb3JtVkhELnNlYXJjaEFkdmFuY2VkU2VhcmNoTGFiZWwnIHwgZmRUcmFuc2xhdGUgfX08L2g1PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkZXNrdG9wRGlhbG9nVGl0bGU+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRpYWxvZ1RpdGxlVGV4dFwiPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkZXNrdG9wVGFic1wiPjwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNtb2JpbGVEaWFsb2dUaXRsZT5cbiAgICA8ZGl2IGNsYXNzPVwiZmRwLXZhbHVlLWhlbHAtZGlhbG9nX19tb2JpbGUtdGl0bGVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc1NlbGVjdGVkVGFiOyBlbHNlIGRpYWxvZ1RpdGxlVGV4dFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNlbGVjdGVkVGFiSGVhZGVyXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtb2JpbGVUYWJzXCI+PC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2Rlc2t0b3BUYWJzPlxuICAgIDxuYXYgZmQtdGFiLW5hdiBjbGFzcz1cImZkcC12YWx1ZS1oZWxwLWRpYWxvZ19fdGFic1wiICpuZ0lmPVwic2hvd1NlbGVjdGlvblRhYiAmJiBzaG93RGVmaW5lVGFiXCI+XG4gICAgICAgIDxkaXYgZmQtdGFiLWl0ZW0gKGNsaWNrKT1cInN3aXRjaFRhYihfdGFiVHlwZXMuc2VsZWN0RnJvbUxpc3QpXCIgKm5nSWY9XCJzaG93U2VsZWN0aW9uVGFiXCI+XG4gICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgIGZkLXRhYi1saW5rXG4gICAgICAgICAgICAgICAgW2FjdGl2ZV09XCJzZWxlY3RlZFRhYiA9PT0gX3RhYlR5cGVzLnNlbGVjdEZyb21MaXN0XCJcbiAgICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwic2VsZWN0ZWRUYWIgPT09IF90YWJUeXBlcy5zZWxlY3RGcm9tTGlzdCA/ICcwJyA6ICctMSdcIlxuICAgICAgICAgICAgICAgID48c3BhbiBmZC10YWItdGFnPnt7ICdwbGF0Zm9ybVZIRC5zZWxlY3RUYWJUaXRsZScgfCBmZFRyYW5zbGF0ZSB9fTwvc3Bhbj48L2FcbiAgICAgICAgICAgID5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgZmQtdGFiLWl0ZW0gKGNsaWNrKT1cInN3aXRjaFRhYihfdGFiVHlwZXMuZGVmaW5lQ29uZGl0aW9ucylcIiAqbmdJZj1cInNob3dEZWZpbmVUYWJcIj5cbiAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgZmQtdGFiLWxpbmtcbiAgICAgICAgICAgICAgICBbYWN0aXZlXT1cInNlbGVjdGVkVGFiID09PSBfdGFiVHlwZXMuZGVmaW5lQ29uZGl0aW9uc1wiXG4gICAgICAgICAgICAgICAgW3RhYmluZGV4XT1cInNlbGVjdGVkVGFiID09PSBfdGFiVHlwZXMuZGVmaW5lQ29uZGl0aW9ucyA/ICcwJyA6ICctMSdcIlxuICAgICAgICAgICAgICAgID48c3BhbiBmZC10YWItdGFnPnt7ICdwbGF0Zm9ybVZIRC5kZWZpbmVUYWJUaXRsZScgfCBmZFRyYW5zbGF0ZSB9fTwvc3Bhbj48L2FcbiAgICAgICAgICAgID5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uYXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI21vYmlsZVRhYnM+XG4gICAgPGRpdiAqbmdJZj1cIiFoYXNTZWxlY3RlZFRhYiAmJiBzaG93U2VsZWN0aW9uVGFiICYmIHNob3dEZWZpbmVUYWJcIj5cbiAgICAgICAgPGRpdiBmZC1iYXIgW2luUGFnZV09XCJ0cnVlXCIgKm5nSWY9XCJzaG93U2VsZWN0aW9uVGFiXCI+XG4gICAgICAgICAgICA8ZGl2IGZkLWJhci1sZWZ0PlxuICAgICAgICAgICAgICAgIDxmZC1iYXItZWxlbWVudD5cbiAgICAgICAgICAgICAgICAgICAge3sgJ3BsYXRmb3JtVkhELnNlbGVjdFRhYlRpdGxlJyB8IGZkVHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9mZC1iYXItZWxlbWVudD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBmZC1iYXItcmlnaHQ+XG4gICAgICAgICAgICAgICAgPGZkLWJhci1lbGVtZW50PlxuICAgICAgICAgICAgICAgICAgICA8ZmQtYnV0dG9uLWJhclxuICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGg9XCJuYXZpZ2F0aW9uLXJpZ2h0LWFycm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzd2l0Y2hUYWIoX3RhYlR5cGVzLnNlbGVjdEZyb21MaXN0KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BsYXRmb3JtVkhELnNlbGVjdE1vYmlsZVRhYlRpdGxlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGZkVHJhbnNsYXRlIDogeyB0aXRsZTogJ3BsYXRmb3JtVkhELnNlbGVjdFRhYlRpdGxlJyB8IGZkVHJhbnNsYXRlIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgID48L2ZkLWJ1dHRvbi1iYXI+XG4gICAgICAgICAgICAgICAgPC9mZC1iYXItZWxlbWVudD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBmZC1iYXIgW2luUGFnZV09XCJ0cnVlXCIgKm5nSWY9XCJzaG93RGVmaW5lVGFiXCI+XG4gICAgICAgICAgICA8ZGl2IGZkLWJhci1sZWZ0PlxuICAgICAgICAgICAgICAgIDxmZC1iYXItZWxlbWVudD5cbiAgICAgICAgICAgICAgICAgICAge3sgJ3BsYXRmb3JtVkhELmRlZmluZVRhYlRpdGxlJyB8IGZkVHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9mZC1iYXItZWxlbWVudD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBmZC1iYXItcmlnaHQ+XG4gICAgICAgICAgICAgICAgPGZkLWJhci1lbGVtZW50PlxuICAgICAgICAgICAgICAgICAgICA8ZmQtYnV0dG9uLWJhclxuICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGg9XCJuYXZpZ2F0aW9uLXJpZ2h0LWFycm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGxhdGZvcm1WSEQuc2VsZWN0TW9iaWxlVGFiVGl0bGUnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZmRUcmFuc2xhdGUgOiB7IHRpdGxlOiAncGxhdGZvcm1WSEQuZGVmaW5lVGFiVGl0bGUnIHwgZmRUcmFuc2xhdGUgfVxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzd2l0Y2hUYWIoX3RhYlR5cGVzLmRlZmluZUNvbmRpdGlvbnMpXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8L2ZkLWJ1dHRvbi1iYXI+XG4gICAgICAgICAgICAgICAgPC9mZC1iYXItZWxlbWVudD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc2VsZWN0ZWRUYWJIZWFkZXI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwic2VsZWN0ZWRUYWJcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiX3RhYlR5cGVzLnNlbGVjdEZyb21MaXN0XCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgdGFiTGluaztcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICdwbGF0Zm9ybVZIRC5zZWxlY3RUYWJUaXRsZScgfCBmZFRyYW5zbGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHNlbGVjdGVkVGFiXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiX3RhYlR5cGVzLmFkdmFuY2VkU2VhcmNoXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYWR2YW5jZWRIZWFkZXJcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIl90YWJUeXBlcy5kZWZpbmVDb25kaXRpb25zXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgdGFiTGluaztcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICdwbGF0Zm9ybVZIRC5kZWZpbmVUYWJUaXRsZScgfCBmZFRyYW5zbGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHNlbGVjdGVkVGFiXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjY29uZGl0aW9uVmFsdWUgbGV0LWl0ZW09XCJpdGVtXCI+XG4gICAgPHNwYW4gKm5nSWY9XCJpdGVtLnN0cmF0ZWd5ICE9PSAnZW1wdHknICYmIGl0ZW0uc3RyYXRlZ3kgIT09ICdub3RfZW1wdHknOyBlbHNlIGVtcHR5Q29uZGl0aW9uXCI+XG4gICAgICAgIHt7IGl0ZW0gfCBkaXNwbGF5Rm5QaXBlIDogY29uZGl0aW9uRGlzcGxheUZuIDogX2Rpc3BsYXllZEZpbHRlcnMgfX1cbiAgICA8L3NwYW4+XG4gICAgPG5nLXRlbXBsYXRlICNlbXB0eUNvbmRpdGlvbj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0uc3RyYXRlZ3kgPT09ICdub3RfZW1wdHknOyBlbHNlIGVtcHR5Q29uZGl0aW9uVGV4dFwiPlxuICAgICAgICAgICAgISg8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZW1wdHlDb25kaXRpb25UZXh0XCI+PC9uZy1jb250YWluZXI+KVxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNlbXB0eUNvbmRpdGlvblRleHQ+ICZsdDt7eyAncGxhdGZvcm1WSEQuc2VsZWN0TW9iaWxlQ29uZGl0aW9uRW1wdHknIHwgZmRUcmFuc2xhdGUgfX0mZ3Q7IDwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
621
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsdWUtaGVscC1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9zcmMvbGliL3ZhbHVlLWhlbHAtZGlhbG9nL3ZhbHVlLWhlbHAtZGlhbG9nL3ZhbHVlLWhlbHAtZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vc3JjL2xpYi92YWx1ZS1oZWxwLWRpYWxvZy92YWx1ZS1oZWxwLWRpYWxvZy92YWx1ZS1oZWxwLWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUdMLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUVULFdBQVcsRUFDWCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBYyxPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUYsT0FBTyxFQUNILFlBQVksRUFDWixtQkFBbUIsRUFDbkIsZ0JBQWdCLEVBQ2hCLGlCQUFp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QUs7Z0JBS04sTUFBTTtzQkFETCxLQUFLO2dCQUtOLFdBQVc7c0JBRFYsS0FBSztnQkFLTixrQkFBa0I7c0JBRGpCLEtBQUs7Z0JBS04sZUFBZTtzQkFEZCxLQUFLO2dCQUtOLG1CQUFtQjtzQkFEbEIsS0FBSztnQkFLTix3QkFBd0I7c0JBRHZCLEtBQUs7Z0JBS04sc0JBQXNCO3NCQURyQixLQUFLO2dCQUtOLE9BQU87c0JBRE4sS0FBSztnQkFPTixvQkFBb0I7c0JBRG5CLEtBQUs7Z0JBcUJOLFdBQVc7c0JBRFYsTUFBTTtnQkFLRyxlQUFlO3NCQUF4QixNQUFNO2dCQUlHLGNBQWM7c0JBQXZCLE1BQU07Z0JBSVAsT0FBTztzQkFETixlQUFlO3VCQUFDLGtCQUFrQjtnQkFLbkMsZUFBZTtzQkFEZCxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBpc09ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQ2RrU2Nyb2xsYWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IE5nRm9yLCBOZ0lmLCBOZ1N3aXRjaCwgTmdTd2l0Y2hDYXNlLCBOZ1RlbXBsYXRlT3V0bGV0LCBTbGljZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBEaXNwbGF5Rm5QaXBlLCBSdGxTZXJ2aWNlLCBUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7XG4gICAgQmFyQ29tcG9uZW50LFxuICAgIEJhckVsZW1lbnREaXJlY3RpdmUsXG4gICAgQmFyTGVmdERpcmVjdGl2ZSxcbiAgICBCYXJSaWdodERpcmVjdGl2ZSxcbiAgICBCdXR0b25CYXJDb21wb25lbnRcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2Jhcic7XG5pbXBvcnQgeyBCdXN5SW5kaWNhdG9yQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2J1c3ktaW5kaWNhdG9yJztcbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9idXR0b24nO1xuaW1wb3J0IHtcbiAgICBEaWFsb2dCb2R5Q29tcG9uZW50LFxuICAgIERpYWxvZ0NvbXBvbmVudCxcbiAgICBEaWFsb2dDb25maWcsXG4gICAgRGlhbG9nRm9vdGVyQ29tcG9uZW50LFxuICAgIERpYWxvZ0hlYWRlckNvbXBvbmVudCxcbiAgICBEaWFsb2dSZWYsXG4gICAgRGlhbG9nU2VydmljZVxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZGlhbG9nJztcbmltcG9ydCB7IEZvcm1Db250cm9sQ29tcG9uZW50LCBGb3JtTGFiZWxDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZm9ybSc7XG5pbXBvcnQgeyBMYXlvdXRHcmlkQ29sRGlyZWN0aXZlLCBMYXlvdXRHcmlkQ29tcG9uZW50LCBMYXlvdXRHcmlkUm93RGlyZWN0aXZlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2xheW91dC1ncmlkJztcbmltcG9ydCB7IExpc3RJY29uRGlyZWN0aXZlLCBMaXN0TGlua0RpcmVjdGl2ZSwgTGlzdFRpdGxlRGlyZWN0aXZlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2xpc3QnO1xuaW1wb3J0IHsgU2Nyb2xsYmFyRGlyZWN0aXZlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3Njcm9sbGJhcic7XG5pbXBvcnQgeyBTa2VsZXRvbkNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9za2VsZXRvbic7XG5pbXBvcnQgeyBUYWJJdGVtRGlyZWN0aXZlLCBUYWJMaW5rRGlyZWN0aXZlLCBUYWJOYXZDb21wb25lbnQsIFRhYlRhZ0RpcmVjdGl2ZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS90YWJzJztcbmltcG9ydCB7IFRpdGxlQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3RpdGxlJztcbmltcG9ydCB7IFRva2VuQ29tcG9uZW50LCBUb2tlbml6ZXJDb21wb25lbnQsIFRva2VuaXplcklucHV0RGlyZWN0aXZlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3Rva2VuJztcbmltcG9ydCB7IFRvb2xiYXJDb21wb25lbnQsIFRvb2xiYXJJdGVtRGlyZWN0aXZlLCBUb29sYmFyU3BhY2VyRGlyZWN0aXZlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3Rvb2xiYXInO1xuaW1wb3J0IHsgRmRUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9pMThuJztcbmltcG9ydCB7IFNlYXJjaEZpZWxkQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9wbGF0Zm9ybS9zZWFyY2gtZmllbGQnO1xuaW1wb3J0IHsgaXNEYXRhU291cmNlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9wbGF0Zm9ybS9zaGFyZWQnO1xuaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IERlZmluZVRhYkNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvZGVmaW5lLXRhYi9kZWZpbmUtdGFiLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTZWxlY3RUYWJDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL3NlbGVjdC10YWIvc2VsZWN0LXRhYi5jb21wb25lbnQnO1xuaW1wb3J0IHsgVmhkRmlsdGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy92YWx1ZS1oZWxwLWRpYWxvZy1maWx0ZXIvdmFsdWUtaGVscC1kaWFsb2ctZmlsdGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBkZWZhdWx0Q29uZGl0aW9uRGlzcGxheUZuIH0gZnJvbSAnLi4vY29uc3RhbnMvY29uZGl0aW9uLWRpc3BsYXkuZnVuY3Rpb24nO1xuaW1wb3J0IHtcbiAgICBBcnJheVZhbHVlSGVscERpYWxvZ0RhdGFTb3VyY2UsXG4gICAgQmFzZUVudGl0eSxcbiAgICBPYnNlcnZhYmxlVmFsdWVIZWxwRGlhbG9nRGF0YVNvdXJjZSxcbiAgICBWYWx1ZUhlbHBEaWFsb2dEYXRhU291cmNlLFxuICAgIFZkaFRhYmxlU2VsZWN0aW9uLFxuICAgIFZoZERlZmluZUV4Y2x1ZGVTdHJhdGVneSxcbiAgICBWaGREZWZpbmVJbmNsdWRlU3RyYXRlZ3ksXG4gICAgVmhkRmlsdGVyLFxuICAgIFZoZFRhYixcbiAgICBWaGRWYWx1ZSxcbiAgICBWaGRWYWx1ZUNoYW5nZUV2ZW50XG59IGZyb20gJy4uL21vZGVscyc7XG5cbmV4cG9ydCB0eXBlIEZkcFZhbHVlSGVscERpYWxvZ0RhdGFTb3VyY2U8VD4gPVxuICAgIHwgVmFsdWVIZWxwRGlhbG9nRGF0YVNvdXJjZTxUPlxuICAgIHwgQXJyYXlWYWx1ZUhlbHBEaWFsb2dEYXRhU291cmNlPFQ+XG4gICAgfCBPYnNlcnZhYmxlVmFsdWVIZWxwRGlhbG9nRGF0YVNvdXJjZTxUPjtcblxubGV0IHZoaVVuaXF1ZUlkID0gMDtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZHAtdmFsdWUtaGVscC1kaWFsb2cnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi92YWx1ZS1oZWxwLWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vdmFsdWUtaGVscC1kaWFsb2cuY29tcG9uZW50LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBEaWFsb2dDb21wb25lbnQsXG4gICAgICAgIERpYWxvZ0hlYWRlckNvbXBvbmVudCxcbiAgICAgICAgVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgICAgIENka1Njcm9sbGFibGUsXG4gICAgICAgIFNjcm9sbGJhckRpcmVjdGl2ZSxcbiAgICAgICAgRGlhbG9nQm9keUNvbXBvbmVudCxcbiAgICAgICAgTmdJZixcbiAgICAgICAgRGlhbG9nRm9vdGVyQ29tcG9uZW50LFxuICAgICAgICBUaXRsZUNvbXBvbmVudCxcbiAgICAgICAgVG9rZW5pemVyQ29tcG9uZW50LFxuICAgICAgICBOZ0ZvcixcbiAgICAgICAgVG9rZW5Db21wb25lbnQsXG4gICAgICAgIFRvb2xiYXJJdGVtRGlyZWN0aXZlLFxuICAgICAgICBGb3JtQ29udHJvbENvbXBvbmVudCxcbiAgICAgICAgVG9rZW5pemVySW5wdXREaXJlY3RpdmUsXG4gICAgICAgIEJ1dHRvbkNvbXBvbmVudCxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIExheW91dEdyaWRDb21wb25lbnQsXG4gICAgICAgIExheW91dEdyaWRSb3dEaXJlY3RpdmUsXG4gICAgICAgIExheW91dEdyaWRDb2xEaXJlY3RpdmUsXG4gICAgICAgIFNlYXJjaEZpZWxkQ29tcG9uZW50LFxuICAgICAgICBUb29sYmFyQ29tcG9uZW50LFxuICAgICAgICBUb29sYmFyU3BhY2VyRGlyZWN0aXZlLFxuICAgICAgICBCdXN5SW5kaWNhdG9yQ29tcG9uZW50LFxuICAgICAgICBGb3JtTGFiZWxDb21wb25lbnQsXG4gICAgICAgIFNrZWxldG9uQ29tcG9uZW50LFxuICAgICAgICBTZWxlY3RUYWJDb21wb25lbnQsXG4gICAgICAgIERlZmluZVRhYkNvbXBvbmVudCxcbiAgICAgICAgTGlzdExpbmtEaXJlY3RpdmUsXG4gICAgICAgIExpc3RUaXRsZURpcmVjdGl2ZSxcbiAgICAgICAgTGlzdEljb25EaXJlY3RpdmUsXG4gICAgICAgIFRhYk5hdkNvbXBvbmVudCxcbiAgICAgICAgVGFiSXRlbURpcmVjdGl2ZSxcbiAgICAgICAgVGFiTGlua0RpcmVjdGl2ZSxcbiAgICAgICAgVGFiVGFnRGlyZWN0aXZlLFxuICAgICAgICBCYXJDb21wb25lbnQsXG4gICAgICAgIEJhckxlZnREaXJlY3RpdmUsXG4gICAgICAgIEJhckVsZW1lbnREaXJlY3RpdmUsXG4gICAgICAgIEJhclJpZ2h0RGlyZWN0aXZlLFxuICAgICAgICBCdXR0b25CYXJDb21wb25lbnQsXG4gICAgICAgIE5nU3dpdGNoLFxuICAgICAgICBOZ1N3aXRjaENhc2UsXG4gICAgICAgIFNsaWNlUGlwZSxcbiAgICAgICAgRmRUcmFuc2xhdGVQaXBlLFxuICAgICAgICBEaXNwbGF5Rm5QaXBlXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBQbGF0Zm9ybVZhbHVlSGVscERpYWxvZ0NvbXBvbmVudDxUID0gYW55PiBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgICAvKiogSWQgb2YgdGhlIHBvcG92ZXIgKi9cbiAgICBASW5wdXQoKVxuICAgIGlkOiBzdHJpbmcgPSAnZmRwLXZoZC0nICsgdmhpVW5pcXVlSWQrKztcblxuICAgIC8qKiBJbml0aWFsIHN0YXRlIG9mIFZhbHVlIGhlbHAgZGlhbG9nICovXG4gICAgQElucHV0KClcbiAgICB2YWx1ZTogVmhkVmFsdWU8VD4gPSB7XG4gICAgICAgIHNlbGVjdGVkOiBbXSxcbiAgICAgICAgY29uZGl0aW9uczogW11cbiAgICB9O1xuXG4gICAgLyoqIERpYWxvZyB0aXRsZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlhbG9nVGl0bGU6IHN0cmluZztcblxuICAgIC8qKiBTZWxlY3QgZnJvbSBsaXN0IHRhYiBhY3RpdmF0aW9uICovXG4gICAgQElucHV0KClcbiAgICBpbml0aWFsVGFiID0gVmhkVGFiLnNlbGVjdEZyb21MaXN0O1xuXG4gICAgLyoqIFZpc2libGUgdGFicyAqL1xuICAgIEBJbnB1dCgpXG4gICAgdGFiczogJ2JvdGgnIHwgJ3NlbGVjdCcgfCAnZGVmaW5lJyA9ICdib3RoJztcblxuICAgIC8qKiBJbml0aWFsIGV4cGFuZCBzdGF0ZSBmb3IgYWR2YW5jZWQgc2VhcmNoIHBhbmVsICovXG4gICAgQElucHV0KClcbiAgICBpc09wZW5BZHZhbmNlZCA9IGZhbHNlO1xuXG4gICAgLyoqIERhdGEgc291cmNlICovXG4gICAgQElucHV0KClcbiAgICBzZXQgZGF0YVNvdXJjZSh2YWx1ZTogRmRwVmFsdWVIZWxwRGlhbG9nRGF0YVNvdXJjZTxhbnk+IHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZSA9IHRoaXMudG9EYXRhU3RyZWFtKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgZGF0YVNvdXJjZSgpOiBGZHBWYWx1ZUhlbHBEaWFsb2dEYXRhU291cmNlPGFueT4gfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YVNvdXJjZTtcbiAgICB9XG5cbiAgICAvKiogRGlhbG9nJ3MgY3VzdG9tIGNvbmZpZyAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlhbG9nQ29uZmlnOiBEaWFsb2dDb25maWcgPSB7fTtcblxuICAgIC8qKiBVbmlxdWUga2V5IGZyb20gdGhlIHNvdXJjZSBmaWVsZCBuYW1lcy4gUmVxdWlyZWQgZmllbGQuICovXG4gICAgQElucHV0KClcbiAgICB1bmlxdWVLZXk6IHN0cmluZztcblxuICAgIC8qKiBJZCBhdHRyaWJ1dGUgZm9yIGRpYWxvZyB0aXRsZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgaGVhZGVySWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqIEZpZWxkIG5hbWUgZm9yIGRlZmF1bHQgcmVuZGVyIGZyb20gZGF0YS5cbiAgICAgKiBSZXF1aXJlZCBmaWVsZCBpZiB0b2tlbml6ZXJGbiBpcyBub3QgZXhpc3QuICovXG4gICAgQElucHV0KClcbiAgICB0b2tlblZpZXdGaWVsZDogc3RyaW5nO1xuXG4gICAgLyoqIFRva2VuaXplciBmdW5jdGlvbiBmb3IgY3VzdG9tIHRva2VuIHJlbmRlciwgaXQgaGFzIGhpZ2hlciBwcmlvIHRoYXQgYHRva2VuVmlld0ZpZWxkYC5cbiAgICAgKiBSZXF1aXJlZCBmaWVsZCBpZiB0b2tlblZpZXdGaWVsZCBpcyBub3QgZXhpc3QuICovXG4gICAgQElucHV0KClcbiAgICB0b2tlbml6ZXJGbjogKGl0ZW06IFQpID0+IHN0cmluZztcblxuICAgIC8qKiBXaGV0aGVyIHRoZSB2YWx1ZSBoZWxwIGRpYWxvZyBzaG91bGQgYmUgdmlldyBpbiBtb2JpbGUgbW9kZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgbW9iaWxlID0gZmFsc2U7XG5cbiAgICAvKiogSXQgc2hvdWxkIGJlIGFibGUgaWYgeW91IHVzZSBtdWx0aXBsZSBzZWxlY3Rpb24gKi9cbiAgICBASW5wdXQoKVxuICAgIGZvcm1hdFRva2VuOiAodmFsdWU6IFZoZFZhbHVlQ2hhbmdlRXZlbnQ8VD4pID0+IHZvaWQ7XG5cbiAgICAvKiogVG9rZW5pemVyIGZ1bmN0aW9uIGZvciBjb25kaXRpb24ncyB0b2tlbiByZW5kZXIgKi9cbiAgICBASW5wdXQoKVxuICAgIGNvbmRpdGlvbkRpc3BsYXlGbiA9IGRlZmF1bHRDb25kaXRpb25EaXNwbGF5Rm47XG5cbiAgICAvKiogU2VsZWN0aW9uIG1vZGUgZm9yIHNlYXJjaCB0YWJsZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2VhcmNoU2VsZWN0aW9uOiBWZGhUYWJsZVNlbGVjdGlvbiA9ICdtdWx0aSc7XG5cbiAgICAvKiogSXRlbXMgcGVyIHBhZ2UgZm9yIHBhZ2luYXRpb24gYmVsb3cgc2VhcmNoIHRhYmxlICovXG4gICAgQElucHV0KClcbiAgICBzZWFyY2hUYWJsZVBhZ2VTaXplID0gMjA7XG5cbiAgICAvKiogQ291bnQgb2YgZGVmYXVsdCBtb2JpbGUgaGVhZGVyIGZyb20gc2VhcmNoIHRhYmxlICovXG4gICAgQElucHV0KClcbiAgICBzZWFyY2hUYWJsZU1vYmlsZUhlYWRlcnMgPSAyO1xuXG4gICAgLyoqIE1heCBzaG93biBpbml0aWFsIGZpbHRlcnMgb24gb3Blbi4gRGVza3RvcCBvbmx5ICovXG4gICAgQElucHV0KClcbiAgICBtYXhTaG93bkluaXRpYWxGaWx0ZXJzID0gNDtcblxuICAgIC8qKiBMb2FkaW5nIHN0YXRlICovXG4gICAgQElucHV0KClcbiAgICBsb2FkaW5nOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gICAgLyoqIEN1c3RvbSBzdHJhdGVnaWVzIGxhYmVsc1xuICAgICAqIEFsbG93ZWQga2V5czogY29udGFpbnMsIGVxdWFsVG8sIGJldHdlZW4sIHN0YXJ0c1dpdGgsIGVuZHNXaXRoLCBsZXNzVGhhbiwgbGVzc1RoYW5FcXVhbCwgZ3JlYXRlclRoYW4sIGdyZWF0ZXJUaGFuRXF1YWwsIGVtcHR5XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBkZWZpbmVTdHJhdGVneUxhYmVsczoge1xuICAgICAgICBba2V5IGluIGtleW9mICh0eXBlb2YgVmhkRGVmaW5lSW5jbHVkZVN0cmF0ZWd5IHwgdHlwZW9mIFZoZERlZmluZUV4Y2x1ZGVTdHJhdGVneSldPzogc3RyaW5nO1xuICAgIH0gPSB7XG4gICAgICAgIGNvbnRhaW5zOiAnY29udGFpbnMnLFxuICAgICAgICBlcXVhbFRvOiAnZXF1YWwgdG8nLFxuICAgICAgICBiZXR3ZWVuOiAnYmV0d2VlbicsXG4gICAgICAgIHN0YXJ0c1dpdGg6ICdzdGFydHMgd2l0aCcsXG4gICAgICAgIGVuZHNXaXRoOiAnZW5kcyB3aXRoJyxcbiAgICAgICAgbGVzc1RoYW46ICdsZXNzIHRoYW4nLFxuICAgICAgICBsZXNzVGhhbkVxdWFsOiAnbGVzcyB0aGFuIG9yIGVxdWFsIHRvJyxcbiAgICAgICAgZ3JlYXRlclRoYW46ICdncmVhdGVyIHRoYW4nLFxuICAgICAgICBncmVhdGVyVGhhbkVxdWFsOiAnZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvJyxcbiAgICAgICAgZW1wdHk6ICdlbXB0eScsXG4gICAgICAgIG5vdF9lcXVhbFRvOiAnbm90IGVxdWFsIHRvJyxcbiAgICAgICAgbm90X2VtcHR5OiAnbm90IGVtcHR5J1xuICAgIH07XG5cbiAgICAvKiogRGlhbG9nIG91dHB1dHMgKi9cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIGZpbHRlcnMvdG9rZW5zIHdlcmUgY2hhbmdlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VmhkVmFsdWVDaGFuZ2VFdmVudDxUPj4oKTtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gZGF0YSBsb2FkaW5nIGlzIHN0YXJ0ZWQuICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtb24tcHJlZml4XG4gICAgQE91dHB1dCgpIG9uRGF0YVJlcXVlc3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gZGF0YSBsb2FkaW5nIGlzIGZpbmlzaGVkLiAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW9uLXByZWZpeFxuICAgIEBPdXRwdXQoKSBvbkRhdGFSZWNlaXZlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuIEZpdGxlcnMgZm9yIHNlYXJjaCB0YWJsZSBhbmQgZGVmaW5jZSBjb25kaXRpb25zICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihWaGRGaWx0ZXJDb21wb25lbnQpXG4gICAgZmlsdGVyczogUXVlcnlMaXN0PFZoZEZpbHRlckNvbXBvbmVudD47XG5cbiAgICAvKiogQGhpZGRlbiBJbnRlcm5hbCBjb250YWluZXIgZm9yIGRpYWxvZyAqL1xuICAgIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgICBkaWFsb2dDb250YWluZXI6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGFjdGl2ZURpYWxvZz86IERpYWxvZ1JlZjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3RhYlR5cGVzID0gVmhkVGFiO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfaGFzQWR2YW5jZWQgPSB0cnVlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfaGFzRGVmaW5lRmlsdGVycyA9IHRydWU7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9kaXNwbGF5ZWRGaWx0ZXJzOiBWaGRGaWx0ZXJbXSA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZGlzcGxheWVkRGF0YTogVFtdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9tYWluU2VhcmNoID0gJyc7XG5cbiAgICAvKiogaGFuZGxlcyBydGwgc2VydmljZVxuICAgICAqIEBoaWRkZW4gKi9cbiAgICBfZGlyID0gJ2x0cic7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NlbGVjdFRhYlRpdGxlOiBzdHJpbmc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2RlZmluZVRhYlRpdGxlOiBzdHJpbmc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2Rlc3Ryb3llZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2RhdGFTb3VyY2U6IEZkcFZhbHVlSGVscERpYWxvZ0RhdGFTb3VyY2U8YW55PiB8IHVuZGVmaW5lZDtcblxuICAgIC8qKiBAaGlkZGVuIGZvciBkYXRhIHNvdXJjZSBoYW5kbGluZyAqL1xuICAgIHByaXZhdGUgX2RzU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsO1xuXG4gICAgLyoqIEBoaWRkZW4gUHJldmlvdXMgc3RhdGUgKi9cbiAgICBwcml2YXRlIF9wcmV2U3RhdGU6IFZoZFZhbHVlPFQ+ID0ge1xuICAgICAgICBzZWxlY3RlZDogW10sXG4gICAgICAgIGNvbmRpdGlvbnM6IFtdXG4gICAgfTtcbiAgICAvKiogQGhpZGRlbiBDdXJyZW50IGRhdGEgZm9yIGxvY2FsIG1hbnVwdWxhdGlvbiAqL1xuICAgIHByaXZhdGUgX2N1cnJlbnRWYWx1ZTogVmhkVmFsdWU8VD4gPSB7XG4gICAgICAgIHNlbGVjdGVkOiBbXSxcbiAgICAgICAgY29uZGl0aW9uczogW11cbiAgICB9O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBzZWxlY3RlZFRhYjogVmhkVGFiIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHNob3duRmlsdGVyQ291bnQgPSBJbmZpbml0eTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IGxvYWRpbmdTdGF0ZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9hZGluZyA/PyB0aGlzLl9pbnRlcm5hbExvYWRpbmdTdGF0ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlblxuICAgICAqIFRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBmaXJzdCBsb2FkaW5nIHdoZW4gc2tlbGV0b25zIGJlIHNob3duIGFuZCBzdWJzZXF1ZW50IGxvYWRpbmdzIHdoZW4gYnVzeSBpbmRpY2F0b3IgYmUgc2hvd25cbiAgICAgKi9cbiAgICBfZmlyc3RMb2FkaW5nRG9uZSA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbnRlcm5hbExvYWRpbmdTdGF0ZSA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9vbkRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2RpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgcmVhZG9ubHkgX3J0bFNlcnZpY2U6IFJ0bFNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgLyoqIERlZmF1bHQgZGlzcGxheSBmdW5jdGlvbiBmb3IgZGVmaW5lIGNvbmRpdGlvbnMgKi9cbiAgICAgICAgaWYgKCF0aGlzLmNvbmRpdGlvbkRpc3BsYXlGbiB8fCB0eXBlb2YgdGhpcy5jb25kaXRpb25EaXNwbGF5Rm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uRGlzcGxheUZuID0gZGVmYXVsdENvbmRpdGlvbkRpc3BsYXlGbjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IGlzTW9iaWxlQWR2YW5jZWRTZWFyY2hBY3RpdmUoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLm1vYmlsZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNPcGVuQWR2YW5jZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IGhhc1NlbGVjdGVkVGFiKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFRhYiAhPSBudWxsICYmIHRoaXMuc2VsZWN0ZWRUYWIgaW4gVmhkVGFiO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IHNob3dTZWxlY3Rpb25UYWIoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhYnMgIT09ICdkZWZpbmUnO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IHNob3dEZWZpbmVUYWIoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhYnMgIT09ICdzZWxlY3QnO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IGlzU2VsZWN0aW9uVGFiKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFRhYiA9PT0gVmhkVGFiLnNlbGVjdEZyb21MaXN0IHx8IHRoaXMuc2VsZWN0ZWRUYWIgPT09IFZoZFRhYi5hZHZhbmNlZFNlYXJjaDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBzZWxlY3RlZEl0ZW1zKCk6IFRbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50VmFsdWUuc2VsZWN0ZWQgfHwgW107XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgY29uZGl0aW9uSXRlbXMoKTogQmFzZUVudGl0eVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRWYWx1ZS5jb25kaXRpb25zIHx8IFtdO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IHZhbGlkQ29uZGl0aW9ucygpOiBCYXNlRW50aXR5W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0VmFsaWRDb25kaXRpb24odGhpcy5jb25kaXRpb25JdGVtcyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgaGFzU2VsZWN0ZWRBbmRDb25kaXRpb25zKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gQm9vbGVhbih0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoICsgdGhpcy52YWxpZENvbmRpdGlvbnMubGVuZ3RoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBpc1Nob3dBbGxGaWx0ZXJzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXJzLmxlbmd0aCA+IHRoaXMubWF4U2hvd25Jbml0aWFsRmlsdGVycyAmJiB0aGlzLnNob3duRmlsdGVyQ291bnQgPiB0aGlzLm1heFNob3duSW5pdGlhbEZpbHRlcnM7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgaXNPcGVuKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLmFjdGl2ZURpYWxvZztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICBpZiAoJ2RhdGFTb3VyY2UnIGluIGNoYW5nZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pbml0aWFsaXplRFMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Jlc2V0U3RhdGUoKTtcbiAgICAgICAgdGhpcy5fb25EZXN0cm95JC5uZXh0KCk7XG4gICAgfVxuXG4gICAgLyoqIE9wZW4gZGlhbG9nICovXG4gICAgb3BlbigpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWRPcHRpb25zKCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUGxlYXNlIGNoZWNrIHJlcXVpcmVkIGZpZWxkcycpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NhdmVQcmV2aW91c1N0YXRlKCk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUZpbHRlcnMoKTtcbiAgICAgICAgdGhpcy5faW5pdGlhbGl6ZURTKCk7XG4gICAgICAgIHRoaXMuX2luaXRpYWxpemVUYWIoKTtcbiAgICAgICAgdGhpcy5hY3RpdmVEaWFsb2cgPSB0aGlzLl9kaWFsb2dTZXJ2aWNlLm9wZW4odGhpcy5kaWFsb2dDb250YWluZXIsIHtcbiAgICAgICAgICAgIGJhY2tkcm9wQ2xpY2tDbG9zZWFibGU6IGZhbHNlLFxuICAgICAgICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXG4gICAgICAgICAgICB2ZXJ0aWNhbFBhZGRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgZXNjS2V5Q2xvc2VhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGRpYWxvZ1BhbmVsQ2xhc3M6IGBmZHAtdmFsdWUtaGVscC1kaWFsb2cgJHt0aGlzLm1vYmlsZSA/ICdmZHAtdmFsdWUtaGVscC1kaWFsb2ctbW9iaWxlJyA6ICcnfWAsXG4gICAgICAgICAgICAuLi50aGlzLmRpYWxvZ0NvbmZpZyxcblxuICAgICAgICAgICAgbW9iaWxlOiB0aGlzLm1vYmlsZSxcbiAgICAgICAgICAgIG1heFdpZHRoOiB0aGlzLm1vYmlsZSA/IHVuZGVmaW5lZCA6ICc5MiUnLFxuICAgICAgICAgICAgd2lkdGg6IHRoaXMubW9iaWxlID8gdW5kZWZpbmVkIDogJzEwODBweCcsXG4gICAgICAgICAgICBoZWlnaHQ6IHRoaXMubW9iaWxlID8gdW5kZWZpbmVkIDogJzk4JSdcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2xpc3RlbkRpYWxvZ0V2ZW50cygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvZ2dsZSBhZHZhbmNlZCBzZWFyY2ggcGFuZWxcbiAgICAgKi9cbiAgICB0b2dnbGVBZHZhbmNlZFNlYXJjaChzdGF0ZT86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzdGF0ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuQWR2YW5jZWQgPSBzdGF0ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuQWR2YW5jZWQgPSAhdGhpcy5pc09wZW5BZHZhbmNlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm1vYmlsZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRhYiA9IHRoaXMuaXNPcGVuQWR2YW5jZWQgPyBWaGRUYWIuYWR2YW5jZWRTZWFyY2ggOiBWaGRUYWIuc2VsZWN0RnJvbUxpc3Q7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhciBhbGwgc2VsZWN0ZWQgaXRlbXNcbiAgICAgKi9cbiAgICBjbGVhclNlbGVjdGVkQW5kQ29uZGl0aW9uSXRlbXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRWYWx1ZS5zZWxlY3RlZCA9IFtdO1xuICAgICAgICB0aGlzLl9jdXJyZW50VmFsdWUuY29uZGl0aW9ucyA9IFtdO1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogU2VhcmNoIGJ5IG9ubHkgdGhlIHNlYXJjaCB0ZXJtLiAqL1xuICAgIHNlYXJjaCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5maWx0ZXIodHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VhcmNoIGJ5IGFsbCBmaWxsZWQgZmlsdGVycywgaW5jbHVkaW5nIHRoZSBzZWFyY2ggdGVybS5cbiAgICAgKi9cbiAgICBmaWx0ZXIob25seVNlYXJjaCA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG5vbkVtcHR5RmlsdGVycyA9IG5ldyBNYXAoKTtcblxuICAgICAgICBpZiAoIW9ubHlTZWFyY2gpIHtcbiAgICAgICAgICAgIHRoaXMuX2Rpc3BsYXllZEZpbHRlcnNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKCh7IHZhbHVlIH0pID0+ICEhdmFsdWUgJiYgdmFsdWUudHJpbSgpLmxlbmd0aClcbiAgICAgICAgICAgICAgICAuZm9yRWFjaCgoZSkgPT4gbm9uRW1wdHlGaWx0ZXJzLnNldChlLmtleSwgZS52YWx1ZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX21haW5TZWFyY2gubGVuZ3RoKSB7XG4gICAgICAgICAgICBub25FbXB0eUZpbHRlcnMuc2V0KCcqJywgdGhpcy5fbWFpblNlYXJjaCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYXRhU291cmNlPy5tYXRjaChub25FbXB0eUZpbHRlcnMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFwcGx5IHNlYXJjaCBmcm9tIGFkdmFuY2VkIGZpbHRlcnMgdmlldywgdXNpbmcgd2hlbiBtb2JpbGUgdmlldyBpcyBhY3RpdmVcbiAgICAgKi9cbiAgICBzZWFyY2hBZHZhbmNlZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5maWx0ZXIoKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRhYiA9IFZoZFRhYi5zZWxlY3RGcm9tTGlzdDtcbiAgICAgICAgdGhpcy5pc09wZW5BZHZhbmNlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKiBSZW1vdmUgaXRlbSBmcm9tIHNlbGVjdGVkIGFycmF5ICovXG4gICAgcmVtb3ZlU2VsZWN0ZWQoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl9jdXJyZW50VmFsdWUuc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKChfLCBpKSA9PiBpICE9PSBpbmRleCk7XG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSBjb25kaXRpb24gaXRlbVxuICAgICAqL1xuICAgIHJlbW92ZUNvbmRpdGlvbihpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRWYWx1ZS5jb25kaXRpb25zID0gdGhpcy5jb25kaXRpb25JdGVtcy5maWx0ZXIoKF8sIGkpID0+IGkgIT09IGluZGV4KTtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU3dpdGNoIHRhYiBieSB0eXBlXG4gICAgICovXG4gICAgc3dpdGNoVGFiKHR5cGU6IFZoZFRhYiB8IG51bGwgPSBudWxsKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUYWIgPSB0eXBlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsb3NlIGRpYWxvZyB3aXRoIHZhbHVlO1xuICAgICAqL1xuICAgIHN1Y2Nlc3MoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZURpYWxvZykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWU6IFZoZFZhbHVlQ2hhbmdlRXZlbnQgPSB7XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IHRoaXMuc2VsZWN0ZWRJdGVtcyxcbiAgICAgICAgICAgICAgICBjb25kaXRpb25zOiB0aGlzLnZhbGlkQ29uZGl0aW9uc1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5mb3JtYXRUb2tlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybWF0VG9rZW4odmFsdWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFjdGl2ZURpYWxvZy5jbG9zZSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZURpYWxvZy5jbG9zZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIaWRlIGFkdmFuY2VkIHNlYXJjaCBvbiBtb2JpbGUgdmlldyBhbmQgaWYgaXQncyBvcGVuZWRcbiAgICAgKiBDbG9zZSBkaWFsb2cgd2l0aCBudWxsIHZhbHVlO1xuICAgICAqL1xuICAgIGRpc21pc3MoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLm1vYmlsZSAmJiB0aGlzLmlzT3BlbkFkdmFuY2VkKSB7XG4gICAgICAgICAgICB0aGlzLmlzT3BlbkFkdmFuY2VkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnN3aXRjaFRhYihWaGRUYWIuc2VsZWN0RnJvbUxpc3QpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudFZhbHVlID0gdGhpcy5fcHJldlN0YXRlO1xuICAgICAgICAgICAgaWYgKHRoaXMuYWN0aXZlRGlhbG9nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVEaWFsb2cuY2xvc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3RyYWNrQnlTZWxlY3RlZEZuKF9pbmRleDogbnVtYmVyLCBpdGVtOiBUKTogbnVtYmVyIHwgc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0gJiYgaXRlbVt0aGlzLnVuaXF1ZUtleV07XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfdHJhY2tCeUZpbHRlckZuKF9pbmRleDogbnVtYmVyLCBpdGVtOiBWaGRGaWx0ZXIpOiBudW1iZXIgfCBzdHJpbmcge1xuICAgICAgICByZXR1cm4gaXRlbSAmJiBpdGVtLmtleTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF90cmFja0J5Q29uZGl0aW9uRm4oX2luZGV4OiBudW1iZXIsIGl0ZW06IEJhc2VFbnRpdHkpOiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gaXRlbSA/IGl0ZW0udmFsdWUgKyBpdGVtLnZhbHVlVG8gKyBpdGVtLnN0cmF0ZWd5ICsgaXRlbS5rZXkgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvblNlbGVjdCgkZXZlbnQ6IFRbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jdXJyZW50VmFsdWUuc2VsZWN0ZWQgPSAkZXZlbnQ7XG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICBpZiAodGhpcy5zZWFyY2hTZWxlY3Rpb24gPT09ICdvbmNlJykge1xuICAgICAgICAgICAgdGhpcy5zdWNjZXNzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uQ29uZGl0aW9uQ2hhbmdlKCRldmVudDogQmFzZUVudGl0eVtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRWYWx1ZS5jb25kaXRpb25zID0gJGV2ZW50O1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHRvZ2dsZVNob3duRmlsdGVycygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zaG93bkZpbHRlckNvdW50ID1cbiAgICAgICAgICAgIHRoaXMubWF4U2hvd25Jbml0aWFsRmlsdGVycyA9PT0gdGhpcy5zaG93bkZpbHRlckNvdW50ID8gSW5maW5pdHkgOiB0aGlzLm1heFNob3duSW5pdGlhbEZpbHRlcnM7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbml0U2hvd25GaWx0ZXJzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNob3duRmlsdGVyQ291bnQgPSB0aGlzLm1heFNob3duSW5pdGlhbEZpbHRlcnMgfHwgSW5maW5pdHk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRWYWxpZENvbmRpdGlvbihpdGVtczogQmFzZUVudGl0eVtdID0gW10pOiBCYXNlRW50aXR5W10ge1xuICAgICAgICByZXR1cm4gaXRlbXMuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgaXRlbS5zdHJhdGVneSA9PT0gVmhkRGVmaW5lSW5jbHVkZVN0cmF0ZWd5LmVtcHR5IHx8XG4gICAgICAgICAgICAgICAgaXRlbS5zdHJhdGVneSA9PT0gVmhkRGVmaW5lRXhjbHVkZVN0cmF0ZWd5Lm5vdF9lbXB0eVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXRlbS5zdHJhdGVneSA9PT0gVmhkRGVmaW5lSW5jbHVkZVN0cmF0ZWd5LmJldHdlZW4pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gQm9vbGVhbihpdGVtLnZhbHVlLmxlbmd0aCAmJiBpdGVtLnZhbHVlVG8ubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaXRlbS52YWxpZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBCb29sZWFuKGl0ZW0udmFsdWUubGVuZ3RoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbml0aWFsaXplRFMoZHM6IEZkcFZhbHVlSGVscERpYWxvZ0RhdGFTb3VyY2U8YW55PiB8IHVuZGVmaW5lZCA9IHRoaXMuZGF0YVNvdXJjZSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9yZXNldFNvdXJjZVN0cmVhbSgpO1xuXG4gICAgICAgIGlmICh0aGlzLnNob3dTZWxlY3Rpb25UYWIpIHtcbiAgICAgICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gICAgICAgICAgICB0aGlzLl9kc1N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICAgICAgICAgICAgZHM/Lm9uRGF0YVJlcXVlc3RlZCgpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2ludGVybmFsTG9hZGluZ1N0YXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkRhdGFSZXF1ZXN0ZWQuZW1pdCgpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB0aGlzLl9kc1N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICAgICAgICAgICAgZHM/Lm9uRGF0YVJlY2VpdmVkKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW50ZXJuYWxMb2FkaW5nU3RhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmlyc3RMb2FkaW5nRG9uZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25EYXRhUmVjZWl2ZWQuZW1pdCgpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBjb25zdCBkc1N1YiA9IHRoaXMub3BlbkRhdGFTdHJlYW0oKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGlzcGxheWVkRGF0YSA9IGRhdGEuc2xpY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uLmFkZChkc1N1Yik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBTYXZlIHByZXZpb3VzIHN0YXRlICovXG4gICAgcHJpdmF0ZSBfc2F2ZVByZXZpb3VzU3RhdGUoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gY2xvbmVEZWVwKHRoaXMudmFsdWUpO1xuICAgICAgICB0aGlzLl9jdXJyZW50VmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5fcHJldlN0YXRlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbml0aWFsaXplVGFiKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5tb2JpbGUpIHtcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuQWR2YW5jZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zaG93U2VsZWN0aW9uVGFiICYmIHRoaXMuc2hvd0RlZmluZVRhYikge1xuICAgICAgICAgICAgdGhpcy5zd2l0Y2hUYWIodGhpcy5tb2JpbGUgPyB1bmRlZmluZWQgOiB0aGlzLmluaXRpYWxUYWIpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2hvd1NlbGVjdGlvblRhYikge1xuICAgICAgICAgICAgdGhpcy5zd2l0Y2hUYWIoVmhkVGFiLnNlbGVjdEZyb21MaXN0KTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNob3dEZWZpbmVUYWIpIHtcbiAgICAgICAgICAgIHRoaXMuc3dpdGNoVGFiKFZoZFRhYi5kZWZpbmVDb25kaXRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9pbml0U2hvd25GaWx0ZXJzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5EaWFsb2dFdmVudHMoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5hY3RpdmVEaWFsb2cpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFjdGl2ZURpYWxvZy5hZnRlckNsb3NlZC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fcmVzZXRTdGF0ZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5maWx0ZXJzLmNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUZpbHRlcnMoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMuX3J0bFNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2RpciA9IHRoaXMuX3J0bFNlcnZpY2UucnRsLmdldFZhbHVlKCkgPyAncnRsJyA6ICdsdHInO1xuICAgICAgICAgICAgdGhpcy5fcnRsU2VydmljZS5ydGwucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKChpc1J0bDogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RpciA9IGlzUnRsID8gJ3J0bCcgOiAnbHRyJztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yZXNldFN0YXRlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9kZXN0cm95ZWQubmV4dCgpO1xuICAgICAgICB0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5fcmVzZXRTb3VyY2VTdHJlYW0oKTtcbiAgICAgICAgdGhpcy5hY3RpdmVEaWFsb2cgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF91cGRhdGVGaWx0ZXJzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9kaXNwbGF5ZWRGaWx0ZXJzID0gdGhpcy5maWx0ZXJzLm1hcCgoZSkgPT4gKHtcbiAgICAgICAgICAgIC4uLmUsXG4gICAgICAgICAgICBsYWJlbDogZS5sYWJlbCB8fCBlLmtleVxuICAgICAgICB9KSk7XG5cbiAgICAgICAgdGhpcy5faGFzQWR2YW5jZWQgPSB0aGlzLl9kaXNwbGF5ZWRGaWx0ZXJzLnNvbWUoKGU6IFZoZEZpbHRlcikgPT4gISFlLmFkdmFuY2VkKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgb3BlbkRhdGFTdHJlYW0oKTogT2JzZXJ2YWJsZTxUW10+IHtcbiAgICAgICAgaWYgKHRoaXMuX2RhdGFTb3VyY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGFTb3VyY2UubWF0Y2goKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFTb3VyY2Uub3BlbigpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgW2RhdGFTb3VyY2VdIHNvdXJjZSBkaWQgbm90IG1hdGNoIGFuIGFycmF5LCBPYnNlcnZhYmxlLCBvciBEYXRhU291cmNlYCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHRvRGF0YVN0cmVhbShkczogRmRwVmFsdWVIZWxwRGlhbG9nRGF0YVNvdXJjZTxUPik6IEZkcFZhbHVlSGVscERpYWxvZ0RhdGFTb3VyY2U8VD4gfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoaXNEYXRhU291cmNlKGRzKSkge1xuICAgICAgICAgICAgcmV0dXJuIGRzIGFzIFZhbHVlSGVscERpYWxvZ0RhdGFTb3VyY2U8VD47XG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShkcykpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQXJyYXlWYWx1ZUhlbHBEaWFsb2dEYXRhU291cmNlPFQ+KGRzKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc09ic2VydmFibGUoZHMpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGVWYWx1ZUhlbHBEaWFsb2dEYXRhU291cmNlPFQ+KGRzIGFzIE9ic2VydmFibGU8VFtdPik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcmVzZXRTb3VyY2VTdHJlYW0oKTogdm9pZCB7XG4gICAgICAgIGlmIChpc0RhdGFTb3VyY2UodGhpcy5kYXRhU291cmNlKSkge1xuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2RzU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9kc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5fZHNTdWJzY3JpcHRpb24gPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIGlzVmFsaWRPcHRpb25zKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5zaG93U2VsZWN0aW9uVGFiKSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICEhdGhpcy5kYXRhU291cmNlICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIHRoaXMudW5pcXVlS2V5ID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgICAgICh0eXBlb2YgdGhpcy50b2tlblZpZXdGaWVsZCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHRoaXMudG9rZW5pemVyRm4gPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSBbZmREaWFsb2dUZW1wbGF0ZV0gbGV0LWRpYWxvZyBsZXQtZGlhbG9nQ29uZmlnPVwiZGlhbG9nQ29uZmlnXCIgI2NvbnRhaW5lcj5cbiAgICA8ZmQtZGlhbG9nIFtkaWFsb2dDb25maWddPVwiZGlhbG9nQ29uZmlnXCIgW2RpYWxvZ1JlZl09XCJkaWFsb2dcIj5cbiAgICAgICAgPGZkLWRpYWxvZy1oZWFkZXIgW2Rpcl09XCJfZGlyXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgZmRrVGVtcGxhdGU9XCJoZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibW9iaWxlID8gbW9iaWxlRGlhbG9nVGl0bGUgOiBkZXNrdG9wRGlhbG9nVGl0bGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZmQtZGlhbG9nLWhlYWRlcj5cbiAgICAgICAgPGZkLWRpYWxvZy1ib2R5IFtkaXJdPVwiX2RpclwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFtb2JpbGVcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYWR2YW5jZWRTZWFyY2hDb250ZW50XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxkaXYgZmQtc2Nyb2xsYmFyIGNsYXNzPVwiZmRwLXZhbHVlLWhlbHAtZGlhbG9nX19jb250ZW50LWhvbGRlclwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtb2JpbGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImFkdmFuY2VkU2VhcmNoQ29udGVudFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkVGFiID09PSBfdGFiVHlwZXMuc2VsZWN0RnJvbUxpc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNlbGVjdGlvbkNvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZFRhYiA9PT0gX3RhYlR5cGVzLmRlZmluZUNvbmRpdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRlZmluZUNvbmRpdGlvbnNDb250ZW50XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9mZC1kaWFsb2ctYm9keT5cbiAgICAgICAgPGZkLWRpYWxvZy1mb290ZXIgW2Rpcl09XCJfZGlyXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgZmRrVGVtcGxhdGU9XCJmb290ZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmRwLXZhbHVlLWhlbHAtZGlhbG9nX19yb3cgZmRwLXZhbHVlLWhlbHAtZGlhbG9nX19zZWxlY3Rpb24tcm93XCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIncGxhdGZvcm1WSEQuc2VsZWN0aW9uQmFyTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFpc01vYmlsZUFkdmFuY2VkU2VhcmNoQWN0aXZlXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxoNSBmZC10aXRsZSBjbGFzcz1cInNlbGVjdGVkLWFuZC1jb25kaXRpb24tdGl0bGVcIiBbaWRdPVwiaWQgKyAnLXNlbGVjdGVkLWl0ZW0nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzU2VsZWN0ZWRBbmRDb25kaXRpb25zOyBlbHNlIG5vSXRlbXNQYW5lbFRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ3BsYXRmb3JtVkhELnNlbGVjdGVkQW5kQ29uZGl0aW9uTGFiZWwnIHwgZmRUcmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoe3sgc2VsZWN0ZWRJdGVtcy5sZW5ndGggKyB2YWxpZENvbmRpdGlvbnMubGVuZ3RoIH19KVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvaDU+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZkcC12YWx1ZS1oZWxwLWRpYWxvZ19fdG9rZW5zLXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmZHAtdmFsdWUtaGVscC1kaWFsb2dfX3Rva2Vuc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU2VsZWN0ZWQgaXRlbXMgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZkLXRva2VuaXplciBbdG9rZW5pemVyRm9jdXNhYmxlXT1cImZhbHNlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC10b2tlblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmQtdG9vbGJhci1pdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZE92ZXJmbG93UHJpb3JpdHk9XCJoaWdoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmRwLXZhbHVlLWhlbHAtZGlhbG9nX19zZWxlY3Rpb24tdG9rZW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2xvc2VDbGljayk9XCJyZW1vdmVTZWxlY3RlZChzZWxlY3RlZEluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaXRlbSBvZiBzZWxlY3RlZEl0ZW1zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4IGFzIHNlbGVjdGVkSW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2tCeTogX3RyYWNrQnlTZWxlY3RlZEZuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPnt7ICEhdG9rZW5pemVyRm4gPyAoaXRlbSB8IGRpc3BsYXlGblBpcGUgOiB0b2tlbml6ZXJGbikgOiBpdGVtW3Rva2VuVmlld0ZpZWxkXSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZkLXRva2VuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmQtdG9rZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkLXRvb2xiYXItaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRPdmVyZmxvd1ByaW9yaXR5PVwiaGlnaFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkcC12YWx1ZS1oZWxwLWRpYWxvZ19fc2VsZWN0aW9uLXRva2VuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkNsb3NlQ2xpY2spPVwicmVtb3ZlQ29uZGl0aW9uKGNvbmRpdGlvbkluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaXRlbSBvZiB2YWxpZENvbmRpdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggYXMgY29uZGl0aW9uSW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2tCeTogX3RyYWNrQnlDb25kaXRpb25GblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbmRpdGlvblZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBpdGVtOiBpdGVtIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZkLXRva2VuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZmQtZm9ybS1jb250cm9sIGZkLXRva2VuaXplci1pbnB1dCBbZGlzYWJsZWRdPVwiIWhhc1NlbGVjdGVkQW5kQ29uZGl0aW9uc1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mZC10b2tlbml6ZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJTZWxlY3RlZEFuZENvbmRpdGlvbkl0ZW1zKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmRwLXZhbHVlLWhlbHAtZGlhbG9nX190b2tlbnMtY2xlYXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhaGFzU2VsZWN0ZWRBbmRDb25kaXRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidwbGF0Zm9ybVZIRC5mb290ZXJDbGVhclNlbGVjdGVkVGl0bGUnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoPVwiZGVjbGluZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIncGxhdGZvcm1WSEQuZm9vdGVyQ2xlYXJTZWxlY3RlZEFyaWFMYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmZHAtdmFsdWUtaGVscC1kaWFsb2dfX2FjdGlvbnMtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1nby1hZHZhbmNlZFxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidwbGF0Zm9ybVZIRC5zZWFyY2hCdXR0b25MYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBmZFR5cGU9XCJlbXBoYXNpemVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwibW9iaWxlICYmIGlzT3BlbkFkdmFuY2VkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWFyY2hBZHZhbmNlZCgpXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtc3VjY2VzXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ3BsYXRmb3JtVkhELnN1Y2Nlc3NCdXR0b25MYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBmZFR5cGU9XCJlbXBoYXNpemVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0ZWRUYWIgIT09IF90YWJUeXBlcy5hZHZhbmNlZFNlYXJjaFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic3VjY2VzcygpXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZGlzbWlzcy1kaWFsb2dcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCIncGxhdGZvcm1WSEQuY2FuY2VsQnV0dG9uTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRpc21pc3MoKVwiXG4gICAgICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZmQtZGlhbG9nLWZvb3Rlcj5cbiAgICA8L2ZkLWRpYWxvZz5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbm9JdGVtc1BhbmVsVGl0bGU+XG4gICAge3sgJ3BsYXRmb3JtVkhELnNlbGVjdGVkRW1wdHlMYWJlbCcgfCBmZFRyYW5zbGF0ZSB9fVxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNhZHZhbmNlZFNlYXJjaENvbnRlbnQ+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzU2VsZWN0aW9uVGFiXCI+XG4gICAgICAgIDxmb3JtIGNsYXNzPVwiZmRwLXZhbHVlLWhlbHAtZGlhbG9nX19yb3cgZmRwLXZhbHVlLWhlbHAtZGlhbG9nX19hZHZhbmNlZC1zZWFyY2hcIiBbaWRdPVwiJ2FkdmFuY2VkLXNlYXJjaC0nICsgaWRcIj5cbiAgICAgICAgICAgIDxmZC1sYXlvdXQtZ3JpZCAqbmdJZj1cIiFtb2JpbGUgfHwgKG1vYmlsZSAmJiAhaXNPcGVuQWR2YW5jZWQpXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBmZExheW91dEdyaWRSb3c+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW2ZkTGF5b3V0R3JpZENvbF09XCIxMlwiIFtjb2xNZF09XCIxMlwiIFtjb2xMZ109XCJtb2JpbGUgPyAxMiA6IDZcIiBbY29sWGxdPVwibW9iaWxlID8gMTIgOiA2XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZmRwLXNlYXJjaC1maWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCIncGxhdGZvcm1WSEQuc2VhcmNoQnV0dG9uTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWFyY2hTdWJtaXQpPVwic2VhcmNoKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dENoYW5nZSk9XCJfbWFpblNlYXJjaCA9ICRldmVudC50ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L2ZkcC1zZWFyY2gtZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmZExheW91dEdyaWRDb2xdPVwiMTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NvbE1kXT1cIjEyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xMZ109XCJtb2JpbGUgPyAxMiA6IDZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NvbFhsXT1cIm1vYmlsZSA/IDEyIDogNlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIl9oYXNBZHZhbmNlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkcC12YWx1ZS1oZWxwLWRpYWxvZ19fYWR2YW5jZWQtYWN0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxmZC10b29sYmFyIFtjbGVhckJvcmRlcl09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZkLXRvb2xiYXItc3BhY2VyPjwvZmQtdG9vbGJhci1zcGFjZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZC10b29sYmFyLWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJfaGFzQWR2YW5jZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW9iaWxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAncGxhdGZvcm1WSEQuc2VhcmNoQWR2YW5jZWRTZWFyY2hMYWJlbCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGlzT3BlbkFkdmFuY2VkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAncGxhdGZvcm1WSEQuc2VhcmNoSGlkZUFkdmFuY2VkU2VhcmNoTGFiZWwnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAncGxhdGZvcm1WSEQuc2VhcmNoU2hvd0FkdmFuY2VkU2VhcmNoTGFiZWwnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHwgZmRUcmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUFkdmFuY2VkU2VhcmNoKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkLXRvb2xiYXItaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkVHlwZT1cImVtcGhhc2l6ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ3BsYXRmb3JtVkhELnNlYXJjaEJ1dHRvbkxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZpbHRlcigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2ZkLXRvb2xiYXI+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9mZC1sYXlvdXQtZ3JpZD5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBbaWRdPVwiJ2FkdmFuY2VkLXNlYXJjaC1jb250ZW50LScgKyBpZFwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJpc09wZW5BZHZhbmNlZCAmJiBfaGFzQWR2YW5jZWRcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmRwLXZhbHVlLWhlbHAtZGlhbG9nX19hZHZhbmNlZC1maWx0ZXJzXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZmQtYnVzeS1pbmRpY2F0b3IgW2xvYWRpbmddPVwibG9hZGluZ1N0YXRlICYmIF9maXJzdExvYWRpbmdEb25lXCIgW2Jsb2NrXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGZkLWxheW91dC1ncmlkXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIl9maXJzdExvYWRpbmdEb25lOyBlbHNlIGZpbHRlcnNMb2FkaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5mZHAtdmFsdWUtaGVscC1kaWFsb2dfX3dpdGgtdG9nZ2xlLWFsbF09XCJmaWx0ZXJzLmxlbmd0aCA+IG1heFNob3duSW5pdGlhbEZpbHRlcnNcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGZkTGF5b3V0R3JpZFJvdz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZpbHRlciBvZiBfZGlzcGxheWVkRmlsdGVycyB8IHNsaWNlIDogMCA6IHNob3duRmlsdGVyQ291bnQgKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2tCeTogX3RyYWNrQnlGaWx0ZXJGblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlci5hZHZhbmNlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbZmRMYXlvdXRHcmlkQ29sXT1cIjEyXCIgW2NvbE1kXT1cIjEyXCIgW2NvbExnXT1cIjZcIiBbY29sWGxdPVwiM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZkLWZvcm0tZ3JvdXBfX2hlYWRlclwiIGZkLWZvcm0tbGFiZWwgW2Zvcl09XCInaW5wdXQnICsgZmlsdGVyLmtleVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID57eyBmaWx0ZXIubGFiZWwgfX06PC9sYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmaWx0ZXIudmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZC1mb3JtLWNvbnRyb2xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCInc2VhcmNoLWJ5LScgKyBmaWx0ZXIubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiJ2lucHV0JyArIGZpbHRlci5rZXlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbEdyb3dcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZkTGF5b3V0R3JpZENvbF09XCIxMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xNZF09XCIxMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xMZ109XCI2XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbFhsXT1cIjNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZpbHRlcnMubGVuZ3RoID4gbWF4U2hvd25Jbml0aWFsRmlsdGVyc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmRwLXZhbHVlLWhlbHAtZGlhbG9nX190b2dnbGUtZmlsdGVyc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVTaG93bkZpbHRlcnMoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlzU2hvd0FsbEZpbHRlcnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAncGxhdGZvcm1WSEQuc2VhcmNoSGlkZUFsbEFkdmFuY2VkU2VhcmNoTGFiZWwnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ3BsYXRmb3JtVkhELnNlYXJjaFNob3dBbGxBZHZhbmNlZFNlYXJjaExhYmVsJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgfCBmZFRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZmQtbGF5b3V0LWdyaWQ+XG5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNmaWx0ZXJzTG9hZGluZz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1za2VsZXRvbiB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCIxMDBweFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmc6cmVjdCB4PVwiMFwiIHk9XCIwXCIgcng9XCI0XCIgd2lkdGg9XCIxNSVcIiBoZWlnaHQ9XCI4XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnOnJlY3QgeD1cIjBcIiB5PVwiMjBcIiByeD1cIjRcIiB3aWR0aD1cIjI1JVwiIGhlaWdodD1cIjE2XCIgLz5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmc6cmVjdCB4PVwiMzUlXCIgeT1cIjBcIiByeD1cIjRcIiB3aWR0aD1cIjE1JVwiIGhlaWdodD1cIjhcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmc6cmVjdCB4PVwiMzUlXCIgeT1cIjIwXCIgcng9XCI0XCIgd2lkdGg9XCIyNSVcIiBoZWlnaHQ9XCIxNlwiIC8+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnOnJlY3QgeD1cIjBcIiB5PVwiNjBcIiByeD1cIjRcIiB3aWR0aD1cIjE1JVwiIGhlaWdodD1cIjhcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmc6cmVjdCB4PVwiMFwiIHk9XCI4MFwiIHJ4PVwiNFwiIHdpZHRoPVwiMjUlXCIgaGVpZ2h0PVwiMTZcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9mZC1za2VsZXRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L2ZkLWJ1c3ktaW5kaWNhdG9yPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZm9ybT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc2VsZWN0aW9uQ29udGVudD5cbiAgICA8ZmQtYnVzeS1pbmRpY2F0b3JcbiAgICAgICAgW2xvYWRpbmddPVwibG9hZGluZ1N0YXRlICYmIF9maXJzdExvYWRpbmdEb25lXCJcbiAgICAgICAgW2Jsb2NrXT1cInRydWVcIlxuICAgICAgICBjbGFzcz1cImZkcC12YWx1ZS1oZWxwLWRpYWxvZ19fdGFibGUtYnVzeS1pbmRpY2F0b3JcIlxuICAgID5cbiAgICAgICAgPGZkcC1zZWxlY3QtdGFiXG4gICAgICAgICAgICBbc2VsZWN0ZWRdPVwic2VsZWN0ZWRJdGVtc1wiXG4gICAgICAgICAgICBbbG9hZGluZ109XCJsb2FkaW5nU3RhdGUgJiYgIV9maXJzdExvYWRpbmdEb25lXCJcbiAgICAgICAgICAgIFt1aWRdPVwiaWRcIlxuICAgICAgICAgICAgW2Rpc3BsYXllZERhdGFdPVwiX2Rpc3BsYXllZERhdGFcIlxuICAgICAgICAgICAgW3RhYlRpdGxlXT1cIidwbGF0Zm9ybVZIRC5zZWxlY3RUYWJUaXRsZScgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBbbW9iaWxlXT1cIm1vYmlsZVwiXG4gICAgICAgICAgICBbc2VsZWN0aW9uXT1cInNlYXJjaFNlbGVjdGlvblwiXG4gICAgICAgICAgICBbdW5pcXVlS2V5XT1cInVuaXF1ZUtleVwiXG4gICAgICAgICAgICBbcGFnZVNpemVdPVwic2VhcmNoVGFibGVQYWdlU2l6ZVwiXG4gICAgICAgICAgICBbZGVmYXVsdE1vYmlsZUhlYWRlcnNdPVwic2VhcmNoVGFibGVNb2JpbGVIZWFkZXJzXCJcbiAgICAgICAgICAgIFtmaWx0ZXJzXT1cIl9kaXNwbGF5ZWRGaWx0ZXJzXCJcbiAgICAgICAgICAgIChzZWxlY3QpPVwib25TZWxlY3QoJGV2ZW50KVwiXG4gICAgICAgID48L2ZkcC1zZWxlY3QtdGFiPlxuICAgIDwvZmQtYnVzeS1pbmRpY2F0b3I+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RlZmluZUNvbmRpdGlvbnNDb250ZW50PlxuICAgIDxkaXYgZmQtc2Nyb2xsYmFyPlxuICAgICAgICA8ZmRwLWRlZmluZS10YWJcbiAgICAgICAgICAgIFtzdHJhdGVneUxhYmVsc109XCJkZWZpbmVTdHJhdGVneUxhYmVsc1wiXG4gICAgICAgICAgICBbY29uZGl0aW9uc109XCJjb25kaXRpb25JdGVtc1wiXG4gICAgICAgICAgICBbdWlkXT1cImlkXCJcbiAgICAgICAgICAgIFt0YWJUaXRsZV09XCIncGxhdGZvcm1WSEQuZGVmaW5lVGFiVGl0bGUnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgW21vYmlsZV09XCJtb2JpbGVcIlxuICAgICAgICAgICAgKGNvbmRpdGlvbkNoYW5nZSk9XCJvbkNvbmRpdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgPjwvZmRwLWRlZmluZS10YWI+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RpYWxvZ1RpdGxlVGV4dD5cbiAgICA8aDUgW2F0dHIuaWRdPVwiaGVhZGVySWRcIiBmZC10aXRsZT57eyBkaWFsb2dUaXRsZSB9fTwvaDU+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3RhYkxpbmsgbGV0LXRpdGxlPVwidGl0bGVcIiBsZXQtdHlwZT1cInR5cGVcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRUYWIgPT09IHR5cGUgJiYgc2hvd1NlbGVjdGlvblRhYiAmJiBzaG93RGVmaW5lVGFiXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgZ2x5cGg9XCJuYXZpZ2F0aW9uLWxlZnQtYXJyb3dcIlxuICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInN3aXRjaFRhYigpXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCIncGxhdGZvcm1WSEQuc2VsZWN0TW9iaWxlVGFiQmFja0J0blRpdGxlJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICA8aDUgZmQtdGl0bGU+e3sgdGl0bGUgfX08L2g1PlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZFRhYiAhPT0gdHlwZVwiPlxuICAgICAgICA8YVxuICAgICAgICAgICAgZmQtbGlzdC1saW5rXG4gICAgICAgICAgICAoY2xpY2spPVwic3dpdGNoVGFiKHR5cGUpXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCIncGxhdGZvcm1WSEQuc2VsZWN0TW9iaWxlVGFiQnRuT3BlbkRpYWxvZ0xhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gZmQtbGlzdC10aXRsZT57eyB0aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxpIGZkLWxpc3QtaWNvbiBnbHlwaD1cIm5hdmlnYXRpb24tcmlnaHQtYXJyb3dcIj48L2k+XG4gICAgICAgIDwvYT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjYWR2YW5jZWRIZWFkZXI+XG4gICAgPGJ1dHRvbiBmZC1idXR0b24gZ2x5cGg9XCJuYXZpZ2F0aW9uLWxlZnQtYXJyb3dcIiBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiIChjbGljayk9XCJ0b2dnbGVBZHZhbmNlZFNlYXJjaCgpXCI+PC9idXR0b24+XG4gICAgPGg1IGZkLXRpdGxlPnt7ICdwbGF0Zm9ybVZIRC5zZWFyY2hBZHZhbmNlZFNlYXJjaExhYmVsJyB8IGZkVHJhbnNsYXRlIH19PC9oNT5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGVza3RvcERpYWxvZ1RpdGxlPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkaWFsb2dUaXRsZVRleHRcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZGVza3RvcFRhYnNcIj48L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbW9iaWxlRGlhbG9nVGl0bGU+XG4gICAgPGRpdiBjbGFzcz1cImZkcC12YWx1ZS1oZWxwLWRpYWxvZ19fbW9iaWxlLXRpdGxlXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoYXNTZWxlY3RlZFRhYjsgZWxzZSBkaWFsb2dUaXRsZVRleHRcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzZWxlY3RlZFRhYkhlYWRlclwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibW9iaWxlVGFic1wiPjwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkZXNrdG9wVGFicz5cbiAgICA8bmF2IGZkLXRhYi1uYXYgY2xhc3M9XCJmZHAtdmFsdWUtaGVscC1kaWFsb2dfX3RhYnNcIiAqbmdJZj1cInNob3dTZWxlY3Rpb25UYWIgJiYgc2hvd0RlZmluZVRhYlwiPlxuICAgICAgICA8ZGl2IGZkLXRhYi1pdGVtIChjbGljayk9XCJzd2l0Y2hUYWIoX3RhYlR5cGVzLnNlbGVjdEZyb21MaXN0KVwiICpuZ0lmPVwic2hvd1NlbGVjdGlvblRhYlwiPlxuICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICBmZC10YWItbGlua1xuICAgICAgICAgICAgICAgIFthY3RpdmVdPVwic2VsZWN0ZWRUYWIgPT09IF90YWJUeXBlcy5zZWxlY3RGcm9tTGlzdFwiXG4gICAgICAgICAgICAgICAgW3RhYmluZGV4XT1cInNlbGVjdGVkVGFiID09PSBfdGFiVHlwZXMuc2VsZWN0RnJvbUxpc3QgPyAnMCcgOiAnLTEnXCJcbiAgICAgICAgICAgICAgICA+PHNwYW4gZmQtdGFiLXRhZz57eyAncGxhdGZvcm1WSEQuc2VsZWN0VGFiVGl0bGUnIHwgZmRUcmFuc2xhdGUgfX08L3NwYW4+PC9hXG4gICAgICAgICAgICA+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGZkLXRhYi1pdGVtIChjbGljayk9XCJzd2l0Y2hUYWIoX3RhYlR5cGVzLmRlZmluZUNvbmRpdGlvbnMpXCIgKm5nSWY9XCJzaG93RGVmaW5lVGFiXCI+XG4gICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgIGZkLXRhYi1saW5rXG4gICAgICAgICAgICAgICAgW2FjdGl2ZV09XCJzZWxlY3RlZFRhYiA9PT0gX3RhYlR5cGVzLmRlZmluZUNvbmRpdGlvbnNcIlxuICAgICAgICAgICAgICAgIFt0YWJpbmRleF09XCJzZWxlY3RlZFRhYiA9PT0gX3RhYlR5cGVzLmRlZmluZUNvbmRpdGlvbnMgPyAnMCcgOiAnLTEnXCJcbiAgICAgICAgICAgICAgICA+PHNwYW4gZmQtdGFiLXRhZz57eyAncGxhdGZvcm1WSEQuZGVmaW5lVGFiVGl0bGUnIHwgZmRUcmFuc2xhdGUgfX08L3NwYW4+PC9hXG4gICAgICAgICAgICA+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmF2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNtb2JpbGVUYWJzPlxuICAgIDxkaXYgKm5nSWY9XCIhaGFzU2VsZWN0ZWRUYWIgJiYgc2hvd1NlbGVjdGlvblRhYiAmJiBzaG93RGVmaW5lVGFiXCI+XG4gICAgICAgIDxkaXYgZmQtYmFyIFtpblBhZ2VdPVwidHJ1ZVwiICpuZ0lmPVwic2hvd1NlbGVjdGlvblRhYlwiPlxuICAgICAgICAgICAgPGRpdiBmZC1iYXItbGVmdD5cbiAgICAgICAgICAgICAgICA8ZmQtYmFyLWVsZW1lbnQ+XG4gICAgICAgICAgICAgICAgICAgIHt7ICdwbGF0Zm9ybVZIRC5zZWxlY3RUYWJUaXRsZScgfCBmZFRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvZmQtYmFyLWVsZW1lbnQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgZmQtYmFyLXJpZ2h0PlxuICAgICAgICAgICAgICAgIDxmZC1iYXItZWxlbWVudD5cbiAgICAgICAgICAgICAgICAgICAgPGZkLWJ1dHRvbi1iYXJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoPVwibmF2aWdhdGlvbi1yaWdodC1hcnJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic3dpdGNoVGFiKF90YWJUeXBlcy5zZWxlY3RGcm9tTGlzdClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwbGF0Zm9ybVZIRC5zZWxlY3RNb2JpbGVUYWJUaXRsZSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmZFRyYW5zbGF0ZSA6IHsgdGl0bGU6ICdwbGF0Zm9ybVZIRC5zZWxlY3RUYWJUaXRsZScgfCBmZFRyYW5zbGF0ZSB9XG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICA+PC9mZC1idXR0b24tYmFyPlxuICAgICAgICAgICAgICAgIDwvZmQtYmFyLWVsZW1lbnQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgZmQtYmFyIFtpblBhZ2VdPVwidHJ1ZVwiICpuZ0lmPVwic2hvd0RlZmluZVRhYlwiPlxuICAgICAgICAgICAgPGRpdiBmZC1iYXItbGVmdD5cbiAgICAgICAgICAgICAgICA8ZmQtYmFyLWVsZW1lbnQ+XG4gICAgICAgICAgICAgICAgICAgIHt7ICdwbGF0Zm9ybVZIRC5kZWZpbmVUYWJUaXRsZScgfCBmZFRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvZmQtYmFyLWVsZW1lbnQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgZmQtYmFyLXJpZ2h0PlxuICAgICAgICAgICAgICAgIDxmZC1iYXItZWxlbWVudD5cbiAgICAgICAgICAgICAgICAgICAgPGZkLWJ1dHRvbi1iYXJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoPVwibmF2aWdhdGlvbi1yaWdodC1hcnJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BsYXRmb3JtVkhELnNlbGVjdE1vYmlsZVRhYlRpdGxlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGZkVHJhbnNsYXRlIDogeyB0aXRsZTogJ3BsYXRmb3JtVkhELmRlZmluZVRhYlRpdGxlJyB8IGZkVHJhbnNsYXRlIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic3dpdGNoVGFiKF90YWJUeXBlcy5kZWZpbmVDb25kaXRpb25zKVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPC9mZC1idXR0b24tYmFyPlxuICAgICAgICAgICAgICAgIDwvZmQtYmFyLWVsZW1lbnQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3NlbGVjdGVkVGFiSGVhZGVyPlxuICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cInNlbGVjdGVkVGFiXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIl90YWJUeXBlcy5zZWxlY3RGcm9tTGlzdFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgIHRhYkxpbms7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAncGxhdGZvcm1WSEQuc2VsZWN0VGFiVGl0bGUnIHwgZmRUcmFuc2xhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBzZWxlY3RlZFRhYlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIl90YWJUeXBlcy5hZHZhbmNlZFNlYXJjaFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImFkdmFuY2VkSGVhZGVyXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJfdGFiVHlwZXMuZGVmaW5lQ29uZGl0aW9uc1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgIHRhYkxpbms7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAncGxhdGZvcm1WSEQuZGVmaW5lVGFiVGl0bGUnIHwgZmRUcmFuc2xhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBzZWxlY3RlZFRhYlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2NvbmRpdGlvblZhbHVlIGxldC1pdGVtPVwiaXRlbVwiPlxuICAgIDxzcGFuICpuZ0lmPVwiaXRlbS5zdHJhdGVneSAhPT0gJ2VtcHR5JyAmJiBpdGVtLnN0cmF0ZWd5ICE9PSAnbm90X2VtcHR5JzsgZWxzZSBlbXB0eUNvbmRpdGlvblwiPlxuICAgICAgICB7eyBpdGVtIHwgZGlzcGxheUZuUGlwZSA6IGNvbmRpdGlvbkRpc3BsYXlGbiA6IF9kaXNwbGF5ZWRGaWx0ZXJzIH19XG4gICAgPC9zcGFuPlxuICAgIDxuZy10ZW1wbGF0ZSAjZW1wdHlDb25kaXRpb24+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtLnN0cmF0ZWd5ID09PSAnbm90X2VtcHR5JzsgZWxzZSBlbXB0eUNvbmRpdGlvblRleHRcIj5cbiAgICAgICAgICAgICEoPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImVtcHR5Q29uZGl0aW9uVGV4dFwiPjwvbmctY29udGFpbmVyPilcbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZW1wdHlDb25kaXRpb25UZXh0PiAmbHQ7e3sgJ3BsYXRmb3JtVkhELnNlbGVjdE1vYmlsZUNvbmRpdGlvbkVtcHR5JyB8IGZkVHJhbnNsYXRlIH19Jmd0OyA8L25nLXRlbXBsYXRlPlxuIl19
|