@fundamental-ngx/platform 0.43.38 → 0.43.39

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (25) hide show
  1. package/button/button.component.d.ts +1 -2
  2. package/esm2020/button/button.component.mjs +5 -3
  3. package/esm2020/table/table.component.mjs +3 -3
  4. package/esm2020/table-helpers/directives/table-virtual-scroll.directive.mjs +2 -5
  5. package/esm2020/value-help-dialog/value-help-dialog/value-help-dialog.component.mjs +3 -3
  6. package/fesm2015/fundamental-ngx-platform-button.mjs +4 -2
  7. package/fesm2015/fundamental-ngx-platform-button.mjs.map +1 -1
  8. package/fesm2015/fundamental-ngx-platform-table-helpers.mjs +1 -4
  9. package/fesm2015/fundamental-ngx-platform-table-helpers.mjs.map +1 -1
  10. package/fesm2015/fundamental-ngx-platform-table.mjs +2 -2
  11. package/fesm2015/fundamental-ngx-platform-table.mjs.map +1 -1
  12. package/fesm2015/fundamental-ngx-platform-value-help-dialog.mjs +2 -2
  13. package/fesm2015/fundamental-ngx-platform-value-help-dialog.mjs.map +1 -1
  14. package/fesm2020/fundamental-ngx-platform-button.mjs +4 -2
  15. package/fesm2020/fundamental-ngx-platform-button.mjs.map +1 -1
  16. package/fesm2020/fundamental-ngx-platform-table-helpers.mjs +1 -4
  17. package/fesm2020/fundamental-ngx-platform-table-helpers.mjs.map +1 -1
  18. package/fesm2020/fundamental-ngx-platform-table.mjs +2 -2
  19. package/fesm2020/fundamental-ngx-platform-table.mjs.map +1 -1
  20. package/fesm2020/fundamental-ngx-platform-value-help-dialog.mjs +2 -2
  21. package/fesm2020/fundamental-ngx-platform-value-help-dialog.mjs.map +1 -1
  22. package/fundamental-ngx-platform-v0.43.39.tgz +0 -0
  23. package/package.json +4 -4
  24. package/schematics/ng-add/index.js +1 -1
  25. package/fundamental-ngx-platform-v0.43.38.tgz +0 -0
@@ -537,7 +537,7 @@ PlatformValueHelpDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion:
537
537
  provide: VhdComponent,
538
538
  useExisting: PlatformValueHelpDialogComponent
539
539
  }
540
- ], queries: [{ propertyName: "filters", predicate: VhdFilterComponent }, { propertyName: "columnDef", predicate: ValueHelpColumnDefDirective }], viewQueries: [{ propertyName: "dialogContainer", first: true, predicate: ["container"], descendants: true, read: TemplateRef }], usesInheritance: true, 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 [overrideTabindex]=\"false\" 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>\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 [disabled]=\"loadingState\"\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 fd-dialog-decisive-button\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.searchPlaceholder' | 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 [label]=\"'platformVHD.searchButtonLabel' | fdTranslate\"\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 <ng-container *ngIf=\"filter.filterDef\">\n <ng-template\n [ngTemplateOutlet]=\"filter.filterDef.templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: filter }\"\n ></ng-template>\n </ng-container>\n <ng-container *ngIf=\"!filter.filterDef\">\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 </ng-container>\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]=\"selectTabTitle || ('platformVHD.selectTabTitle' | fdTranslate)\"\n [mobile]=\"mobile\"\n [selection]=\"searchSelection\"\n [emptyTableMessage]=\"searchTableEmptyMessage || ('platformVHD.searchTableEmptyMessage' | fdTranslate)\"\n [uniqueKey]=\"uniqueKey\"\n [pageSize]=\"searchTablePageSize\"\n [defaultMobileHeaders]=\"searchTableMobileHeaders\"\n [filters]=\"_displayedFilters\"\n [allowSelectAll]=\"allowSelectAll\"\n (select)=\"onSelect($event)\"\n ></fdp-select-tab>\n </fd-busy-indicator>\n</ng-template>\n\n<ng-template #defineConditionsContent>\n <div fd-scrollbar [overrideTabindex]=\"false\">\n <fdp-define-tab\n [strategyLabels]=\"defineStrategyLabels\"\n [conditions]=\"conditionItems\"\n [uid]=\"id\"\n [tabTitle]=\"defineTabTitle || ('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>{{ selectTabTitle || ('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>{{ defineTabTitle || ('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 {{ selectTabTitle || ('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\n : { title: selectTabTitle || ('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 {{ defineTabTitle || ('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\n : { title: defineTabTitle || ('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: selectTabTitle || ('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: defineTabTitle || ('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> &lt;{{ 'platformVHD.selectMobileConditionEmpty' | fdTranslate }}&gt; </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:#f7f7f7;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:#fff;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;min-height:20rem}.fdp-value-help-dialog__row{padding:0 2rem 1rem}.fdp-value-help-dialog__row.fdp-value-help-dialog__selection-row{background-color:#f7f7f7;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 #89919a;border-color:var(--sapContent_ForegroundBorderColor, #89919a);margin-right:.5rem;border-radius:.25rem;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: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i5.BarComponent, selector: "[fd-bar]", inputs: ["class", "barDesign", "inPage", "inHomePage", "size"] }, { kind: "directive", type: i5.BarLeftDirective, selector: "[fd-bar-left]" }, { kind: "directive", type: i5.BarRightDirective, selector: "[fd-bar-right]" }, { kind: "directive", type: i5.BarElementDirective, selector: "fd-bar-element", inputs: ["fullWidth", "isTitle"] }, { kind: "component", type: i5.ButtonBarComponent, selector: "fd-button-bar", inputs: ["fullWidth", "fdType", "title", "ariaLabel", "ariaLabelledby", "id"] }, { kind: "component", type: i1.DialogComponent, selector: "fd-dialog", inputs: ["class", "dialogRef", "dialogConfig"] }, { kind: "component", type: i1.DialogBodyComponent, selector: "fd-dialog-body" }, { kind: "component", type: i1.DialogFooterComponent, selector: "fd-dialog-footer" }, { kind: "component", type: i1.DialogHeaderComponent, selector: "fd-dialog-header" }, { kind: "directive", type: i1.DialogDecisiveButtonDirective, selector: "[fd-dialog-decisive-button]" }, { kind: "component", type: i6.TitleComponent, selector: "h1[fd-title], h2[fd-title], h3[fd-title], h4[fd-title], h5[fd-title], h6[fd-title], span[fd-title]", inputs: ["headerSize", "wrap"], exportAs: ["fd-title"] }, { kind: "directive", type: i2.TemplateDirective, selector: "[fdkTemplate], [fdTemplate]", inputs: ["fdkTemplate"] }, { kind: "component", type: i7.TabNavComponent, selector: "[fd-tab-nav]", inputs: ["class", "mode", "size"] }, { kind: "directive", type: i7.TabItemDirective, selector: "[fd-tab-item]", inputs: ["class", "tabItemState", "header", "disabled", "fdTabItemClass"] }, { kind: "directive", type: i7.TabLinkDirective, selector: "[fd-tab-link]", inputs: ["active", "disabled"], outputs: ["keyDown", "focused"] }, { kind: "directive", type: i7.TabTagDirective, selector: "[fdTabTag], [fd-tab-tag]" }, { kind: "component", type: i8.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i9.TokenComponent, selector: "fd-token", inputs: ["disabled", "selected", "readOnly", "deleteButtonLabel", "ariaRoleDescription"], outputs: ["onCloseClick", "onRemove", "onTokenClick", "onTokenKeydown", "elementFocused"] }, { kind: "component", type: i9.TokenizerComponent, selector: "fd-tokenizer", inputs: ["class", "disableKeyboardDeletion", "compactCollapse", "tokenizerFocusable", "inputValue", "glyph", "moreTerm", "open"], outputs: ["moreClickedEvent"] }, { kind: "directive", type: i9.TokenizerInputDirective, selector: "[fd-tokenizer-input]", inputs: ["class"] }, { kind: "component", type: i10.FormControlComponent, selector: "[fd-form-control]", inputs: ["state", "type", "class", "ariaLabel", "ariaLabelledBy"] }, { kind: "directive", type: i10.InputFormControlDirective, selector: "input[fd-form-control]" }, { kind: "component", type: i10.FormLabelComponent, selector: "[fd-form-label]", inputs: ["required", "colon", "checkbox", "radio", "alignLabelEnd", "inlineHelpTitle", "inlineHelpContent", "inlineHelpGlyph", "inlineHelpTriggers", "inlineHelpBodyPlacement", "inlineHelpPlacement", "inlineHelpLabel", "id"] }, { kind: "component", type: i11.BusyIndicatorComponent, selector: "fd-busy-indicator", inputs: ["loading", "size", "block", "ariaLabel", "title", "label", "ariaLive"] }, { kind: "component", type: i12.LayoutGridComponent, selector: "fd-layout-grid, [fdLayoutGrid]", inputs: ["class", "noGap", "noHorizontalGap", "noVerticalGap"] }, { kind: "directive", type: i12.LayoutGridColDirective, selector: "[fd-layout-grid-col], [fdLayoutGridCol]", inputs: ["fdLayoutGridCol", "colGrow", "colMd", "colLg", "colXl", "colOffset", "colOffsetMd", "colOffsetLg", "colOffsetXl", "class"] }, { kind: "directive", type: i12.LayoutGridRowDirective, selector: "[fd-layout-grid-row], [fdLayoutGridRow]" }, { kind: "component", type: i13.ToolbarComponent, selector: "fd-toolbar", inputs: ["titleId", "class", "shouldOverflow", "fdType", "hasTitle", "title", "active", "clearBorder", "forceOverflow", "tabindex"] }, { kind: "directive", type: i13.ToolbarItemDirective, selector: "[fd-toolbar-item], [fdOverflowGroup], [fdOverflowPriority]", inputs: ["fdOverflowPriority", "fdOverflowGroup"] }, { kind: "directive", type: i13.ToolbarSpacerDirective, selector: "fd-toolbar-spacer", inputs: ["width", "class", "fixed"] }, { kind: "directive", type: i14.ListTitleDirective, selector: "[fd-list-title], [fdListTitle]", inputs: ["wrap"] }, { kind: "directive", type: i14.ListIconDirective, selector: "[fdListIcon], [fd-list-icon]", inputs: ["glyph", "class", "role", "ariaHidden"] }, { kind: "directive", type: i14.ListLinkDirective, selector: "[fd-list-link], [fdListLink]", inputs: ["navigationIndicator", "navigated", "focusable"] }, { kind: "component", type: i15.SearchFieldComponent, selector: "fdp-search-field", inputs: ["categoryMode", "appearance", "placeholder", "mobile", "mobileConfig", "disableRefresh", "disableSearch", "suggestions", "dataSource", "inputText", "categories", "currentCategory", "categoryLabel", "hideCategoryLabel", "isLoading", "ariaLabel", "ariaLabelledby", "searchSuggestionMessage", "searchSuggestionNavigateMessage", "forceSearchButton", "disableSuggestionsFoundAnnouncer"], outputs: ["inputChange", "searchSubmit", "cancelSearch", "isOpenChange"] }, { kind: "directive", type: i16.ScrollbarDirective, selector: "[fdScrollbar], [fd-scrollbar]", inputs: ["noHorizontalScroll", "noVerticalScroll", "alwaysVisible", "overrideTabindex"] }, { kind: "component", type: i17.SkeletonComponent, selector: "fd-skeleton", inputs: ["animated", "type", "textLines", "width", "height"] }, { kind: "component", type: i18.SelectTabComponent, selector: "fdp-select-tab", inputs: ["selectTabTitleId", "selectTabCountId", "selected", "loading", "filters", "selection", "emptyTableMessage", "uniqueKey", "pageSize", "defaultMobileHeaders", "displayedData", "allowSelectAll"], outputs: ["select"] }, { kind: "component", type: i19.DefineTabComponent, selector: "fdp-define-tab", inputs: ["titleId", "selectedId", "conditions", "included", "excluded", "strategyLabels"], outputs: ["includeChange", "excludeChange", "conditionChange"] }, { kind: "pipe", type: i3.SlicePipe, name: "slice" }, { kind: "pipe", type: i20.FdTranslatePipe, name: "fdTranslate" }, { kind: "pipe", type: i2.DisplayFnPipe, name: "displayFnPipe" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
540
+ ], queries: [{ propertyName: "filters", predicate: VhdFilterComponent }, { propertyName: "columnDef", predicate: ValueHelpColumnDefDirective }], viewQueries: [{ propertyName: "dialogContainer", first: true, predicate: ["container"], descendants: true, read: TemplateRef }], usesInheritance: true, 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 [overrideTabindex]=\"false\" 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.selectedAndConditionLabel' | 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>\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 [disabled]=\"loadingState\"\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 fd-dialog-decisive-button\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.searchPlaceholder' | 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 [label]=\"'platformVHD.searchButtonLabel' | fdTranslate\"\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 <ng-container *ngIf=\"filter.filterDef\">\n <ng-template\n [ngTemplateOutlet]=\"filter.filterDef.templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: filter }\"\n ></ng-template>\n </ng-container>\n <ng-container *ngIf=\"!filter.filterDef\">\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 </ng-container>\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]=\"selectTabTitle || ('platformVHD.selectTabTitle' | fdTranslate)\"\n [mobile]=\"mobile\"\n [selection]=\"searchSelection\"\n [emptyTableMessage]=\"searchTableEmptyMessage || ('platformVHD.searchTableEmptyMessage' | fdTranslate)\"\n [uniqueKey]=\"uniqueKey\"\n [pageSize]=\"searchTablePageSize\"\n [defaultMobileHeaders]=\"searchTableMobileHeaders\"\n [filters]=\"_displayedFilters\"\n [allowSelectAll]=\"allowSelectAll\"\n (select)=\"onSelect($event)\"\n ></fdp-select-tab>\n </fd-busy-indicator>\n</ng-template>\n\n<ng-template #defineConditionsContent>\n <div fd-scrollbar [overrideTabindex]=\"false\">\n <fdp-define-tab\n [strategyLabels]=\"defineStrategyLabels\"\n [conditions]=\"conditionItems\"\n [uid]=\"id\"\n [tabTitle]=\"defineTabTitle || ('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>{{ selectTabTitle || ('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>{{ defineTabTitle || ('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 {{ selectTabTitle || ('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\n : { title: selectTabTitle || ('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 {{ defineTabTitle || ('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\n : { title: defineTabTitle || ('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: selectTabTitle || ('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: defineTabTitle || ('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> &lt;{{ 'platformVHD.selectMobileConditionEmpty' | fdTranslate }}&gt; </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:#f7f7f7;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:#fff;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;min-height:20rem}.fdp-value-help-dialog__row{padding:0 2rem 1rem}.fdp-value-help-dialog__row.fdp-value-help-dialog__selection-row{background-color:#f7f7f7;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 #89919a;border-color:var(--sapContent_ForegroundBorderColor, #89919a);margin-right:.5rem;border-radius:.25rem;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: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i5.BarComponent, selector: "[fd-bar]", inputs: ["class", "barDesign", "inPage", "inHomePage", "size"] }, { kind: "directive", type: i5.BarLeftDirective, selector: "[fd-bar-left]" }, { kind: "directive", type: i5.BarRightDirective, selector: "[fd-bar-right]" }, { kind: "directive", type: i5.BarElementDirective, selector: "fd-bar-element", inputs: ["fullWidth", "isTitle"] }, { kind: "component", type: i5.ButtonBarComponent, selector: "fd-button-bar", inputs: ["fullWidth", "fdType", "title", "ariaLabel", "ariaLabelledby", "id"] }, { kind: "component", type: i1.DialogComponent, selector: "fd-dialog", inputs: ["class", "dialogRef", "dialogConfig"] }, { kind: "component", type: i1.DialogBodyComponent, selector: "fd-dialog-body" }, { kind: "component", type: i1.DialogFooterComponent, selector: "fd-dialog-footer" }, { kind: "component", type: i1.DialogHeaderComponent, selector: "fd-dialog-header" }, { kind: "directive", type: i1.DialogDecisiveButtonDirective, selector: "[fd-dialog-decisive-button]" }, { kind: "component", type: i6.TitleComponent, selector: "h1[fd-title], h2[fd-title], h3[fd-title], h4[fd-title], h5[fd-title], h6[fd-title], span[fd-title]", inputs: ["headerSize", "wrap"], exportAs: ["fd-title"] }, { kind: "directive", type: i2.TemplateDirective, selector: "[fdkTemplate], [fdTemplate]", inputs: ["fdkTemplate"] }, { kind: "component", type: i7.TabNavComponent, selector: "[fd-tab-nav]", inputs: ["class", "mode", "size"] }, { kind: "directive", type: i7.TabItemDirective, selector: "[fd-tab-item]", inputs: ["class", "tabItemState", "header", "disabled", "fdTabItemClass"] }, { kind: "directive", type: i7.TabLinkDirective, selector: "[fd-tab-link]", inputs: ["active", "disabled"], outputs: ["keyDown", "focused"] }, { kind: "directive", type: i7.TabTagDirective, selector: "[fdTabTag], [fd-tab-tag]" }, { kind: "component", type: i8.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i9.TokenComponent, selector: "fd-token", inputs: ["disabled", "selected", "readOnly", "deleteButtonLabel", "ariaRoleDescription"], outputs: ["onCloseClick", "onRemove", "onTokenClick", "onTokenKeydown", "elementFocused"] }, { kind: "component", type: i9.TokenizerComponent, selector: "fd-tokenizer", inputs: ["class", "disableKeyboardDeletion", "compactCollapse", "tokenizerFocusable", "inputValue", "glyph", "moreTerm", "open"], outputs: ["moreClickedEvent"] }, { kind: "directive", type: i9.TokenizerInputDirective, selector: "[fd-tokenizer-input]", inputs: ["class"] }, { kind: "component", type: i10.FormControlComponent, selector: "[fd-form-control]", inputs: ["state", "type", "class", "ariaLabel", "ariaLabelledBy"] }, { kind: "directive", type: i10.InputFormControlDirective, selector: "input[fd-form-control]" }, { kind: "component", type: i10.FormLabelComponent, selector: "[fd-form-label]", inputs: ["required", "colon", "checkbox", "radio", "alignLabelEnd", "inlineHelpTitle", "inlineHelpContent", "inlineHelpGlyph", "inlineHelpTriggers", "inlineHelpBodyPlacement", "inlineHelpPlacement", "inlineHelpLabel", "id"] }, { kind: "component", type: i11.BusyIndicatorComponent, selector: "fd-busy-indicator", inputs: ["loading", "size", "block", "ariaLabel", "title", "label", "ariaLive"] }, { kind: "component", type: i12.LayoutGridComponent, selector: "fd-layout-grid, [fdLayoutGrid]", inputs: ["class", "noGap", "noHorizontalGap", "noVerticalGap"] }, { kind: "directive", type: i12.LayoutGridColDirective, selector: "[fd-layout-grid-col], [fdLayoutGridCol]", inputs: ["fdLayoutGridCol", "colGrow", "colMd", "colLg", "colXl", "colOffset", "colOffsetMd", "colOffsetLg", "colOffsetXl", "class"] }, { kind: "directive", type: i12.LayoutGridRowDirective, selector: "[fd-layout-grid-row], [fdLayoutGridRow]" }, { kind: "component", type: i13.ToolbarComponent, selector: "fd-toolbar", inputs: ["titleId", "class", "shouldOverflow", "fdType", "hasTitle", "title", "active", "clearBorder", "forceOverflow", "tabindex"] }, { kind: "directive", type: i13.ToolbarItemDirective, selector: "[fd-toolbar-item], [fdOverflowGroup], [fdOverflowPriority]", inputs: ["fdOverflowPriority", "fdOverflowGroup"] }, { kind: "directive", type: i13.ToolbarSpacerDirective, selector: "fd-toolbar-spacer", inputs: ["width", "class", "fixed"] }, { kind: "directive", type: i14.ListTitleDirective, selector: "[fd-list-title], [fdListTitle]", inputs: ["wrap"] }, { kind: "directive", type: i14.ListIconDirective, selector: "[fdListIcon], [fd-list-icon]", inputs: ["glyph", "class", "role", "ariaHidden"] }, { kind: "directive", type: i14.ListLinkDirective, selector: "[fd-list-link], [fdListLink]", inputs: ["navigationIndicator", "navigated", "focusable"] }, { kind: "component", type: i15.SearchFieldComponent, selector: "fdp-search-field", inputs: ["categoryMode", "appearance", "placeholder", "mobile", "mobileConfig", "disableRefresh", "disableSearch", "suggestions", "dataSource", "inputText", "categories", "currentCategory", "categoryLabel", "hideCategoryLabel", "isLoading", "ariaLabel", "ariaLabelledby", "searchSuggestionMessage", "searchSuggestionNavigateMessage", "forceSearchButton", "disableSuggestionsFoundAnnouncer"], outputs: ["inputChange", "searchSubmit", "cancelSearch", "isOpenChange"] }, { kind: "directive", type: i16.ScrollbarDirective, selector: "[fdScrollbar], [fd-scrollbar]", inputs: ["noHorizontalScroll", "noVerticalScroll", "alwaysVisible", "overrideTabindex"] }, { kind: "component", type: i17.SkeletonComponent, selector: "fd-skeleton", inputs: ["animated", "type", "textLines", "width", "height"] }, { kind: "component", type: i18.SelectTabComponent, selector: "fdp-select-tab", inputs: ["selectTabTitleId", "selectTabCountId", "selected", "loading", "filters", "selection", "emptyTableMessage", "uniqueKey", "pageSize", "defaultMobileHeaders", "displayedData", "allowSelectAll"], outputs: ["select"] }, { kind: "component", type: i19.DefineTabComponent, selector: "fdp-define-tab", inputs: ["titleId", "selectedId", "conditions", "included", "excluded", "strategyLabels"], outputs: ["includeChange", "excludeChange", "conditionChange"] }, { kind: "pipe", type: i3.SlicePipe, name: "slice" }, { kind: "pipe", type: i20.FdTranslatePipe, name: "fdTranslate" }, { kind: "pipe", type: i2.DisplayFnPipe, name: "displayFnPipe" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
541
541
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: PlatformValueHelpDialogComponent, decorators: [{
542
542
  type: Component,
543
543
  args: [{ selector: 'fdp-value-help-dialog', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
@@ -545,7 +545,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
545
545
  provide: VhdComponent,
546
546
  useExisting: PlatformValueHelpDialogComponent
547
547
  }
548
- ], 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 [overrideTabindex]=\"false\" 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>\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 [disabled]=\"loadingState\"\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 fd-dialog-decisive-button\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.searchPlaceholder' | 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 [label]=\"'platformVHD.searchButtonLabel' | fdTranslate\"\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 <ng-container *ngIf=\"filter.filterDef\">\n <ng-template\n [ngTemplateOutlet]=\"filter.filterDef.templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: filter }\"\n ></ng-template>\n </ng-container>\n <ng-container *ngIf=\"!filter.filterDef\">\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 </ng-container>\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]=\"selectTabTitle || ('platformVHD.selectTabTitle' | fdTranslate)\"\n [mobile]=\"mobile\"\n [selection]=\"searchSelection\"\n [emptyTableMessage]=\"searchTableEmptyMessage || ('platformVHD.searchTableEmptyMessage' | fdTranslate)\"\n [uniqueKey]=\"uniqueKey\"\n [pageSize]=\"searchTablePageSize\"\n [defaultMobileHeaders]=\"searchTableMobileHeaders\"\n [filters]=\"_displayedFilters\"\n [allowSelectAll]=\"allowSelectAll\"\n (select)=\"onSelect($event)\"\n ></fdp-select-tab>\n </fd-busy-indicator>\n</ng-template>\n\n<ng-template #defineConditionsContent>\n <div fd-scrollbar [overrideTabindex]=\"false\">\n <fdp-define-tab\n [strategyLabels]=\"defineStrategyLabels\"\n [conditions]=\"conditionItems\"\n [uid]=\"id\"\n [tabTitle]=\"defineTabTitle || ('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>{{ selectTabTitle || ('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>{{ defineTabTitle || ('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 {{ selectTabTitle || ('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\n : { title: selectTabTitle || ('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 {{ defineTabTitle || ('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\n : { title: defineTabTitle || ('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: selectTabTitle || ('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: defineTabTitle || ('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> &lt;{{ 'platformVHD.selectMobileConditionEmpty' | fdTranslate }}&gt; </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:#f7f7f7;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:#fff;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;min-height:20rem}.fdp-value-help-dialog__row{padding:0 2rem 1rem}.fdp-value-help-dialog__row.fdp-value-help-dialog__selection-row{background-color:#f7f7f7;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 #89919a;border-color:var(--sapContent_ForegroundBorderColor, #89919a);margin-right:.5rem;border-radius:.25rem;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"] }]
548
+ ], 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 [overrideTabindex]=\"false\" 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.selectedAndConditionLabel' | 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>\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 [disabled]=\"loadingState\"\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 fd-dialog-decisive-button\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.searchPlaceholder' | 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 [label]=\"'platformVHD.searchButtonLabel' | fdTranslate\"\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 <ng-container *ngIf=\"filter.filterDef\">\n <ng-template\n [ngTemplateOutlet]=\"filter.filterDef.templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: filter }\"\n ></ng-template>\n </ng-container>\n <ng-container *ngIf=\"!filter.filterDef\">\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 </ng-container>\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]=\"selectTabTitle || ('platformVHD.selectTabTitle' | fdTranslate)\"\n [mobile]=\"mobile\"\n [selection]=\"searchSelection\"\n [emptyTableMessage]=\"searchTableEmptyMessage || ('platformVHD.searchTableEmptyMessage' | fdTranslate)\"\n [uniqueKey]=\"uniqueKey\"\n [pageSize]=\"searchTablePageSize\"\n [defaultMobileHeaders]=\"searchTableMobileHeaders\"\n [filters]=\"_displayedFilters\"\n [allowSelectAll]=\"allowSelectAll\"\n (select)=\"onSelect($event)\"\n ></fdp-select-tab>\n </fd-busy-indicator>\n</ng-template>\n\n<ng-template #defineConditionsContent>\n <div fd-scrollbar [overrideTabindex]=\"false\">\n <fdp-define-tab\n [strategyLabels]=\"defineStrategyLabels\"\n [conditions]=\"conditionItems\"\n [uid]=\"id\"\n [tabTitle]=\"defineTabTitle || ('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>{{ selectTabTitle || ('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>{{ defineTabTitle || ('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 {{ selectTabTitle || ('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\n : { title: selectTabTitle || ('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 {{ defineTabTitle || ('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\n : { title: defineTabTitle || ('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: selectTabTitle || ('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: defineTabTitle || ('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> &lt;{{ 'platformVHD.selectMobileConditionEmpty' | fdTranslate }}&gt; </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:#f7f7f7;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:#fff;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;min-height:20rem}.fdp-value-help-dialog__row{padding:0 2rem 1rem}.fdp-value-help-dialog__row.fdp-value-help-dialog__selection-row{background-color:#f7f7f7;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 #89919a;border-color:var(--sapContent_ForegroundBorderColor, #89919a);margin-right:.5rem;border-radius:.25rem;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"] }]
549
549
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.DialogService }, { type: i2.RtlService, decorators: [{
550
550
  type: Optional
551
551
  }] }]; }, propDecorators: { id: [{
@@ -616,4 +616,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
616
616
  type: ViewChild,
617
617
  args: ['container', { read: TemplateRef }]
618
618
  }] } });
619
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsdWUtaGVscC1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9zcmMvbGliL3ZhbHVlLWhlbHAtZGlhbG9nL3ZhbHVlLWhlbHAtZGlhbG9nL3ZhbHVlLWhlbHAtZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vc3JjL2xpYi92YWx1ZS1oZWxwLWRpYWxvZy92YWx1ZS1oZWxwLWRpYWxvZy92YWx1ZS1oZWxwLWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUNILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFFVCxXQUFXLEVBQ1gsU0FBUyxFQUNULGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5RCxPQUFPLEVBQUUsWUFBWSxFQUFhLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDaEUsT0FBTyxFQUNILDhCQUE4QixFQUU5QixtQ0FBbUMsRUFHbkMsd0JBQXdCLEVBQ3hCLHdCQUF3QixFQUV4QixNQUFNLEVBR1QsTUFBTSxXQUFXLENBQUM7QUFDbkIsT0FBTyxFQUFFLFlB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c0JBRHJCLEtBQUs7Z0JBS04sT0FBTztzQkFETixLQUFLO2dCQVFOLGNBQWM7c0JBRGIsS0FBSztnQkFLTixjQUFjO3NCQURiLEtBQUs7Z0JBT04sb0JBQW9CO3NCQURuQixLQUFLO2dCQXFCTixXQUFXO3NCQURWLE1BQU07Z0JBS0csZUFBZTtzQkFBeEIsTUFBTTtnQkFJRyxjQUFjO3NCQUF2QixNQUFNO2dCQUlQLE9BQU87c0JBRE4sZUFBZTt1QkFBQyxrQkFBa0I7Z0JBS25DLFNBQVM7c0JBRFIsZUFBZTt1QkFBQywyQkFBMkI7Z0JBSzVDLGVBQWU7c0JBRGQsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L21lbWJlci1vcmRlcmluZyAqL1xuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzT2JzZXJ2YWJsZSwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCB0YWtlLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgRGlhbG9nQ29uZmlnLCBEaWFsb2dSZWYsIERpYWxvZ1NlcnZpY2UgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZGlhbG9nJztcbmltcG9ydCB7IFJ0bFNlcnZpY2UgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBpc0RhdGFTb3VyY2UgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL3NoYXJlZCc7XG5pbXBvcnQge1xuICAgIEFycmF5VmFsdWVIZWxwRGlhbG9nRGF0YVNvdXJjZSxcbiAgICBCYXNlRW50aXR5LFxuICAgIE9ic2VydmFibGVWYWx1ZUhlbHBEaWFsb2dEYXRhU291cmNlLFxuICAgIFZhbHVlSGVscERpYWxvZ0RhdGFTb3VyY2UsXG4gICAgVmRoVGFibGVTZWxlY3Rpb24sXG4gICAgVmhkRGVmaW5lRXhjbHVkZVN0cmF0ZWd5LFxuICAgIFZoZERlZmluZUluY2x1ZGVTdHJhdGVneSxcbiAgICBWaGRGaWx0ZXIsXG4gICAgVmhkVGFiLFxuICAgIFZoZFZhbHVlLFxuICAgIFZoZFZhbHVlQ2hhbmdlRXZlbnRcbn0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IFZoZENvbXBvbmVudCB9IGZyb20gJy4uL21vZGVscy92aGQtY29tcG9uZW50Lm1vZGVsJztcbmltcG9ydCB7IGRlZmF1bHRDb25kaXRpb25EaXNwbGF5Rm4gfSBmcm9tICcuLi9jb25zdGFucy9jb25kaXRpb24tZGlzcGxheS5mdW5jdGlvbic7XG5pbXBvcnQgeyBWaGRGaWx0ZXJDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL3ZhbHVlLWhlbHAtZGlhbG9nLWZpbHRlci92YWx1ZS1oZWxwLWRpYWxvZy1maWx0ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFZhbHVlSGVscENvbHVtbkRlZkRpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvdmFsdWUtaGVscC1jb2x1bW4tZGVmLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBjbG9uZURlZXAgfSBmcm9tICdsb2Rhc2gtZXMnO1xuXG5leHBvcnQgdHlwZSBGZHBWYWx1ZUhlbHBEaWFsb2dEYXRhU291cmNlPFQ+ID1cbiAgICB8IFZhbHVlSGVscERpYWxvZ0RhdGFTb3VyY2U8VD5cbiAgICB8IEFycmF5VmFsdWVIZWxwRGlhbG9nRGF0YVNvdXJjZTxUPlxuICAgIHwgT2JzZXJ2YWJsZVZhbHVlSGVscERpYWxvZ0RhdGFTb3VyY2U8VD47XG5cbmxldCB2aGlVbmlxdWVJZCA9IDA7XG5sZXQgdmhkSGVhZGVyVW5pcXVlSWQgPSAwO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkcC12YWx1ZS1oZWxwLWRpYWxvZycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3ZhbHVlLWhlbHAtZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi92YWx1ZS1oZWxwLWRpYWxvZy5jb21wb25lbnQuc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IFZoZENvbXBvbmVudCxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBQbGF0Zm9ybVZhbHVlSGVscERpYWxvZ0NvbXBvbmVudFxuICAgICAgICB9XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBQbGF0Zm9ybVZhbHVlSGVscERpYWxvZ0NvbXBvbmVudDxUID0gYW55PiBleHRlbmRzIFZoZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgICAvKiogSWQgb2YgdGhlIHBvcG92ZXIgKi9cbiAgICBASW5wdXQoKVxuICAgIGlkOiBzdHJpbmcgPSAnZmRwLXZoZC0nICsgdmhpVW5pcXVlSWQrKztcblxuICAgIC8qKiBJbml0aWFsIHN0YXRlIG9mIFZhbHVlIGhlbHAgZGlhbG9nICovXG4gICAgQElucHV0KClcbiAgICB2YWx1ZTogVmhkVmFsdWU8VD4gPSB7XG4gICAgICAgIHNlbGVjdGVkOiBbXSxcbiAgICAgICAgY29uZGl0aW9uczogW11cbiAgICB9O1xuXG4gICAgLyoqIERpYWxvZyB0aXRsZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlhbG9nVGl0bGU6IHN0cmluZztcblxuICAgIC8qKiBTZWxlY3QgZnJvbSBsaXN0IHRhYiBhY3RpdmF0aW9uICovXG4gICAgQElucHV0KClcbiAgICBpbml0aWFsVGFiID0gVmhkVGFiLnNlbGVjdEZyb21MaXN0O1xuXG4gICAgLyoqIFZpc2libGUgdGFicyAqL1xuICAgIEBJbnB1dCgpXG4gICAgdGFiczogJ2JvdGgnIHwgJ3NlbGVjdCcgfCAnZGVmaW5lJyA9ICdib3RoJztcblxuICAgIC8qKiBJbml0aWFsIGV4cGFuZCBzdGF0ZSBmb3IgYWR2YW5jZWQgc2VhcmNoIHBhbmVsICovXG4gICAgQElucHV0KClcbiAgICBpc09wZW5BZHZhbmNlZCA9IGZhbHNlO1xuXG4gICAgLyoqIERhdGEgc291cmNlICovXG4gICAgQElucHV0KClcbiAgICBzZXQgZGF0YVNvdXJjZSh2YWx1ZTogRmRwVmFsdWVIZWxwRGlhbG9nRGF0YVNvdXJjZTxhbnk+IHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZSA9IHRoaXMudG9EYXRhU3RyZWFtKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgZGF0YVNvdXJjZSgpOiBGZHBWYWx1ZUhlbHBEaWFsb2dEYXRhU291cmNlPGFueT4gfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YVNvdXJjZTtcbiAgICB9XG5cbiAgICAvKiogRGlhbG9nJ3MgY3VzdG9tIGNvbmZpZyAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlhbG9nQ29uZmlnOiBEaWFsb2dDb25maWcgPSB7fTtcblxuICAgIC8qKiBVbmlxdWUga2V5IGZyb20gdGhlIHNvdXJjZSBmaWVsZCBuYW1lcy4gUmVxdWlyZWQgZmllbGQuICovXG4gICAgQElucHV0KClcbiAgICB1bmlxdWVLZXk6IHN0cmluZztcblxuICAgIC8qKiBJZCBhdHRyaWJ1dGUgZm9yIGRpYWxvZyB0aXRsZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgaGVhZGVySWQgPSBgZmQtdmhkLWhlYWRlci1pZC0ke3ZoZEhlYWRlclVuaXF1ZUlkKyt9YDtcblxuICAgIC8qKiBGaWVsZCBuYW1lIGZvciBkZWZhdWx0IHJlbmRlciBmcm9tIGRhdGEuXG4gICAgICogUmVxdWlyZWQgZmllbGQgaWYgdG9rZW5pemVyRm4gaXMgbm90IGV4aXN0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgdG9rZW5WaWV3RmllbGQ6IHN0cmluZztcblxuICAgIC8qKiBUb2tlbml6ZXIgZnVuY3Rpb24gZm9yIGN1c3RvbSB0b2tlbiByZW5kZXIsIGl0IGhhcyBoaWdoZXIgcHJpbyB0aGF0IGB0b2tlblZpZXdGaWVsZGAuXG4gICAgICogUmVxdWlyZWQgZmllbGQgaWYgdG9rZW5WaWV3RmllbGQgaXMgbm90IGV4aXN0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgdG9rZW5pemVyRm46IChpdGVtOiBUKSA9PiBzdHJpbmc7XG5cbiAgICAvKiogV2hldGhlciB0aGUgdmFsdWUgaGVscCBkaWFsb2cgc2hvdWxkIGJlIHZpZXcgaW4gbW9iaWxlIG1vZGUgKi9cbiAgICBASW5wdXQoKVxuICAgIG1vYmlsZSA9IGZhbHNlO1xuXG4gICAgLyoqIEl0IHNob3VsZCBiZSBhYmxlIGlmIHlvdSB1c2UgbXVsdGlwbGUgc2VsZWN0aW9uICovXG4gICAgQElucHV0KClcbiAgICBmb3JtYXRUb2tlbjogKHZhbHVlOiBWaGRWYWx1ZUNoYW5nZUV2ZW50PFQ+KSA9PiB2b2lkO1xuXG4gICAgLyoqIFRva2VuaXplciBmdW5jdGlvbiBmb3IgY29uZGl0aW9uJ3MgdG9rZW4gcmVuZGVyICovXG4gICAgQElucHV0KClcbiAgICBjb25kaXRpb25EaXNwbGF5Rm4gPSBkZWZhdWx0Q29uZGl0aW9uRGlzcGxheUZuO1xuXG4gICAgLyoqIFZhbGlkYXRvciBmdW5jdGlvbi4gQ2FsbGVkIHdoZW4gdXNlciBzdWJtaXRzIFZIRCBkaWFsb2cuICovXG4gICAgQElucHV0KClcbiAgICB0b2tlblZhbGlkYXRvcjogKCh2YWx1ZTogVmhkVmFsdWVDaGFuZ2VFdmVudDxhbnk+KSA9PiBPYnNlcnZhYmxlPGJvb2xlYW4+IHwgYm9vbGVhbikgfCB1bmRlZmluZWQ7XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgaTE4biBjYXBhYmlsaXRpZXMgaW5zdGVhZFxuICAgICAqIFNlbGVjdCBmcm9tIGxpc3QgdGFiJ3MgYW5kIFNlYXJjaCB0YWJsZSBzZXR0aW5nc1xuICAgICAqICovXG4gICAgQElucHV0KClcbiAgICBzZWxlY3RUYWJUaXRsZTogc3RyaW5nO1xuXG4gICAgLyoqIFNlbGVjdGlvbiBtb2RlIGZvciBzZWFyY2ggdGFibGUgKi9cbiAgICBASW5wdXQoKVxuICAgIHNlYXJjaFNlbGVjdGlvbjogVmRoVGFibGVTZWxlY3Rpb24gPSAnbXVsdGknO1xuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIGkxOG4gY2FwYWJpbGl0aWVzIGluc3RlYWRcbiAgICAgKiBUZXh0IGRpc3BsYXllZCB3aGVuIHRhYmxlIGhhcyBubyBpdGVtcy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNlYXJjaFRhYmxlRW1wdHlNZXNzYWdlOiBzdHJpbmc7XG5cbiAgICAvKiogSXRlbXMgcGVyIHBhZ2UgZm9yIHBhZ2luYXRpb24gYmVsb3cgc2VhcmNoIHRhYmxlICovXG4gICAgQElucHV0KClcbiAgICBzZWFyY2hUYWJsZVBhZ2VTaXplID0gMjA7XG5cbiAgICAvKiogQ291bnQgb2YgZGVmYXVsdCBtb2JpbGUgaGVhZGVyIGZyb20gc2VhcmNoIHRhYmxlICovXG4gICAgQElucHV0KClcbiAgICBzZWFyY2hUYWJsZU1vYmlsZUhlYWRlcnMgPSAyO1xuXG4gICAgLyoqIE1heCBzaG93biBpbml0aWFsIGZpbHRlcnMgb24gb3Blbi4gRGVza3RvcCBvbmx5ICovXG4gICAgQElucHV0KClcbiAgICBtYXhTaG93bkluaXRpYWxGaWx0ZXJzID0gNDtcblxuICAgIC8qKiBMb2FkaW5nIHN0YXRlICovXG4gICAgQElucHV0KClcbiAgICBsb2FkaW5nOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIGkxOG4gY2FwYWJpbGl0aWVzIGluc3RlYWRcbiAgICAgKiBEZWZpbmUgY29uZGl0aW9ucyB0YWIncyBzZXR0aW5nc1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGVmaW5lVGFiVGl0bGU6IHN0cmluZztcblxuICAgIC8qKiBXaGV0aGVyIHRvIGFsbG93IHVzZXJzIHRvIHNlbGVjdCBhbGwgdGFibGUgZW50cmllcyB3aXRoIG9uZSBjaGVja2JveC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFsbG93U2VsZWN0QWxsID0gdHJ1ZTtcblxuICAgIC8qKiBDdXN0b20gc3RyYXRlZ2llcyBsYWJlbHNcbiAgICAgKiBBbGxvd2VkIGtleXM6IGNvbnRhaW5zLCBlcXVhbFRvLCBiZXR3ZWVuLCBzdGFydHNXaXRoLCBlbmRzV2l0aCwgbGVzc1RoYW4sIGxlc3NUaGFuRXF1YWwsIGdyZWF0ZXJUaGFuLCBncmVhdGVyVGhhbkVxdWFsLCBlbXB0eVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGVmaW5lU3RyYXRlZ3lMYWJlbHM6IHtcbiAgICAgICAgW2tleSBpbiBrZXlvZiAodHlwZW9mIFZoZERlZmluZUluY2x1ZGVTdHJhdGVneSB8IHR5cGVvZiBWaGREZWZpbmVFeGNsdWRlU3RyYXRlZ3kpXT86IHN0cmluZztcbiAgICB9ID0ge1xuICAgICAgICBjb250YWluczogJ2NvbnRhaW5zJyxcbiAgICAgICAgZXF1YWxUbzogJ2VxdWFsIHRvJyxcbiAgICAgICAgYmV0d2VlbjogJ2JldHdlZW4nLFxuICAgICAgICBzdGFydHNXaXRoOiAnc3RhcnRzIHdpdGgnLFxuICAgICAgICBlbmRzV2l0aDogJ2VuZHMgd2l0aCcsXG4gICAgICAgIGxlc3NUaGFuOiAnbGVzcyB0aGFuJyxcbiAgICAgICAgbGVzc1RoYW5FcXVhbDogJ2xlc3MgdGhhbiBvciBlcXVhbCB0bycsXG4gICAgICAgIGdyZWF0ZXJUaGFuOiAnZ3JlYXRlciB0aGFuJyxcbiAgICAgICAgZ3JlYXRlclRoYW5FcXVhbDogJ2dyZWF0ZXIgdGhhbiBvciBlcXVhbCB0bycsXG4gICAgICAgIGVtcHR5OiAnZW1wdHknLFxuICAgICAgICBub3RfZXF1YWxUbzogJ25vdCBlcXVhbCB0bycsXG4gICAgICAgIG5vdF9lbXB0eTogJ25vdCBlbXB0eSdcbiAgICB9O1xuXG4gICAgLyoqIERpYWxvZyBvdXRwdXRzICovXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiBmaWx0ZXJzL3Rva2VucyB3ZXJlIGNoYW5nZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFZoZFZhbHVlQ2hhbmdlRXZlbnQ8VD4+KCk7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIGRhdGEgbG9hZGluZyBpcyBzdGFydGVkLiAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW9uLXByZWZpeFxuICAgIEBPdXRwdXQoKSBvbkRhdGFSZXF1ZXN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIGRhdGEgbG9hZGluZyBpcyBmaW5pc2hlZC4gKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1vbi1wcmVmaXhcbiAgICBAT3V0cHV0KCkgb25EYXRhUmVjZWl2ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiBGaXRsZXJzIGZvciBzZWFyY2ggdGFibGUgYW5kIGRlZmluY2UgY29uZGl0aW9ucyAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oVmhkRmlsdGVyQ29tcG9uZW50KVxuICAgIGZpbHRlcnM6IFF1ZXJ5TGlzdDxWaGRGaWx0ZXJDb21wb25lbnQ+O1xuXG4gICAgLyoqIENvbHVtbiBkZWZpbml0aW9ucy4gKi9cbiAgICBAQ29udGVudENoaWxkcmVuKFZhbHVlSGVscENvbHVtbkRlZkRpcmVjdGl2ZSlcbiAgICBjb2x1bW5EZWY6IFF1ZXJ5TGlzdDxWYWx1ZUhlbHBDb2x1bW5EZWZEaXJlY3RpdmU+O1xuXG4gICAgLyoqIEBoaWRkZW4gSW50ZXJuYWwgY29udGFpbmVyIGZvciBkaWFsb2cgKi9cbiAgICBAVmlld0NoaWxkKCdjb250YWluZXInLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gICAgZGlhbG9nQ29udGFpbmVyOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBhY3RpdmVEaWFsb2c/OiBEaWFsb2dSZWY7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF90YWJUeXBlcyA9IFZoZFRhYjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2hhc0FkdmFuY2VkID0gdHJ1ZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2hhc0RlZmluZUZpbHRlcnMgPSB0cnVlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZGlzcGxheWVkRmlsdGVyczogVmhkRmlsdGVyW10gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2Rpc3BsYXllZERhdGE6IFRbXSA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfbWFpblNlYXJjaCA9ICcnO1xuXG4gICAgLyoqIGhhbmRsZXMgcnRsIHNlcnZpY2VcbiAgICAgKiBAaGlkZGVuICovXG4gICAgX2RpciA9ICdsdHInO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kZXN0cm95ZWQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kYXRhU291cmNlOiBGZHBWYWx1ZUhlbHBEaWFsb2dEYXRhU291cmNlPGFueT4gfCB1bmRlZmluZWQ7XG5cbiAgICAvKiogQGhpZGRlbiBmb3IgZGF0YSBzb3VyY2UgaGFuZGxpbmcgKi9cbiAgICBwcml2YXRlIF9kc1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbDtcblxuICAgIC8qKiBAaGlkZGVuIFByZXZpb3VzIHN0YXRlICovXG4gICAgcHJpdmF0ZSBfcHJldlN0YXRlOiBWaGRWYWx1ZTxUPiA9IHtcbiAgICAgICAgc2VsZWN0ZWQ6IFtdLFxuICAgICAgICBjb25kaXRpb25zOiBbXVxuICAgIH07XG4gICAgLyoqIEBoaWRkZW4gQ3VycmVudCBkYXRhIGZvciBsb2NhbCBtYW51cHVsYXRpb24gKi9cbiAgICBwcml2YXRlIF9jdXJyZW50VmFsdWU6IFZoZFZhbHVlPFQ+ID0ge1xuICAgICAgICBzZWxlY3RlZDogW10sXG4gICAgICAgIGNvbmRpdGlvbnM6IFtdXG4gICAgfTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgc2VsZWN0ZWRUYWI6IFZoZFRhYiB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBzaG93bkZpbHRlckNvdW50ID0gSW5maW5pdHk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBsb2FkaW5nU3RhdGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvYWRpbmcgPz8gdGhpcy5faW50ZXJuYWxMb2FkaW5nU3RhdGU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW5cbiAgICAgKiBUbyBkaWZmZXJlbnRpYXRlIGJldHdlZW4gZmlyc3QgbG9hZGluZyB3aGVuIHNrZWxldG9ucyBiZSBzaG93biBhbmQgc3Vic2VxdWVudCBsb2FkaW5ncyB3aGVuIGJ1c3kgaW5kaWNhdG9yIGJlIHNob3duXG4gICAgICovXG4gICAgX2ZpcnN0TG9hZGluZ0RvbmUgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaW50ZXJuYWxMb2FkaW5nU3RhdGUgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfb25EZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9kaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHJlYWRvbmx5IF9ydGxTZXJ2aWNlOiBSdGxTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIC8qKiBEZWZhdWx0IGRpc3BsYXkgZnVuY3Rpb24gZm9yIGRlZmluZSBjb25kaXRpb25zICovXG4gICAgICAgIGlmICghdGhpcy5jb25kaXRpb25EaXNwbGF5Rm4gfHwgdHlwZW9mIHRoaXMuY29uZGl0aW9uRGlzcGxheUZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aGlzLmNvbmRpdGlvbkRpc3BsYXlGbiA9IGRlZmF1bHRDb25kaXRpb25EaXNwbGF5Rm47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBpc01vYmlsZUFkdmFuY2VkU2VhcmNoQWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5tb2JpbGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzT3BlbkFkdmFuY2VkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBoYXNTZWxlY3RlZFRhYigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRUYWIgIT0gbnVsbCAmJiB0aGlzLnNlbGVjdGVkVGFiIGluIFZoZFRhYjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBzaG93U2VsZWN0aW9uVGFiKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50YWJzICE9PSAnZGVmaW5lJztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBzaG93RGVmaW5lVGFiKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50YWJzICE9PSAnc2VsZWN0JztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBpc1NlbGVjdGlvblRhYigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRUYWIgPT09IFZoZFRhYi5zZWxlY3RGcm9tTGlzdCB8fCB0aGlzLnNlbGVjdGVkVGFiID09PSBWaGRUYWIuYWR2YW5jZWRTZWFyY2g7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgc2VsZWN0ZWRJdGVtcygpOiBUW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFZhbHVlLnNlbGVjdGVkIHx8IFtdO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IGNvbmRpdGlvbkl0ZW1zKCk6IEJhc2VFbnRpdHlbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50VmFsdWUuY29uZGl0aW9ucyB8fCBbXTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCB2YWxpZENvbmRpdGlvbnMoKTogQmFzZUVudGl0eVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldFZhbGlkQ29uZGl0aW9uKHRoaXMuY29uZGl0aW9uSXRlbXMpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IGhhc1NlbGVjdGVkQW5kQ29uZGl0aW9ucygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4odGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCArIHRoaXMudmFsaWRDb25kaXRpb25zLmxlbmd0aCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgaXNTaG93QWxsRmlsdGVycygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVycy5sZW5ndGggPiB0aGlzLm1heFNob3duSW5pdGlhbEZpbHRlcnMgJiYgdGhpcy5zaG93bkZpbHRlckNvdW50ID4gdGhpcy5tYXhTaG93bkluaXRpYWxGaWx0ZXJzO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IGlzT3BlbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5hY3RpdmVEaWFsb2c7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgaWYgKCdkYXRhU291cmNlJyBpbiBjaGFuZ2VzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faW5pdGlhbGl6ZURTKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9yZXNldFN0YXRlKCk7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveSQubmV4dCgpO1xuICAgIH1cblxuICAgIC8qKiBPcGVuIGRpYWxvZyAqL1xuICAgIG9wZW4oKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkT3B0aW9ucygpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BsZWFzZSBjaGVjayByZXF1aXJlZCBmaWVsZHMnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zYXZlUHJldmlvdXNTdGF0ZSgpO1xuICAgICAgICB0aGlzLl91cGRhdGVGaWx0ZXJzKCk7XG4gICAgICAgIHRoaXMuX2luaXRpYWxpemVEUygpO1xuICAgICAgICB0aGlzLl9pbml0aWFsaXplVGFiKCk7XG4gICAgICAgIGlmICghdGhpcy5kaWFsb2dDb25maWcuYXJpYUxhYmVsbGVkQnkpIHtcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nQ29uZmlnLmFyaWFMYWJlbGxlZEJ5ID0gdGhpcy5oZWFkZXJJZDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFjdGl2ZURpYWxvZyA9IHRoaXMuX2RpYWxvZ1NlcnZpY2Uub3Blbih0aGlzLmRpYWxvZ0NvbnRhaW5lciwge1xuICAgICAgICAgICAgYmFja2Ryb3BDbGlja0Nsb3NlYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcbiAgICAgICAgICAgIHZlcnRpY2FsUGFkZGluZzogZmFsc2UsXG4gICAgICAgICAgICBlc2NLZXlDbG9zZWFibGU6IGZhbHNlLFxuICAgICAgICAgICAgZGlhbG9nUGFuZWxDbGFzczogYGZkcC12YWx1ZS1oZWxwLWRpYWxvZyAke3RoaXMubW9iaWxlID8gJ2ZkcC12YWx1ZS1oZWxwLWRpYWxvZy1tb2JpbGUnIDogJyd9YCxcbiAgICAgICAgICAgIC4uLnRoaXMuZGlhbG9nQ29uZmlnLFxuXG4gICAgICAgICAgICBmdWxsU2NyZWVuOiB0aGlzLm1vYmlsZSxcbiAgICAgICAgICAgIG1heFdpZHRoOiB0aGlzLm1vYmlsZSA/IHVuZGVmaW5lZCA6ICc5MiUnLFxuICAgICAgICAgICAgd2lkdGg6IHRoaXMubW9iaWxlID8gdW5kZWZpbmVkIDogJzEwODBweCcsXG4gICAgICAgICAgICBoZWlnaHQ6IHRoaXMubW9iaWxlID8gdW5kZWZpbmVkIDogJzk4JSdcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2xpc3RlbkRpYWxvZ0V2ZW50cygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvZ2dsZSBhZHZhbmNlZCBzZWFyY2ggcGFuZWxcbiAgICAgKi9cbiAgICB0b2dnbGVBZHZhbmNlZFNlYXJjaChzdGF0ZT86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzdGF0ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuQWR2YW5jZWQgPSBzdGF0ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuQWR2YW5jZWQgPSAhdGhpcy5pc09wZW5BZHZhbmNlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm1vYmlsZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRhYiA9IHRoaXMuaXNPcGVuQWR2YW5jZWQgPyBWaGRUYWIuYWR2YW5jZWRTZWFyY2ggOiBWaGRUYWIuc2VsZWN0RnJvbUxpc3Q7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhciBhbGwgc2VsZWN0ZWQgaXRlbXNcbiAgICAgKi9cbiAgICBjbGVhclNlbGVjdGVkQW5kQ29uZGl0aW9uSXRlbXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRWYWx1ZS5zZWxlY3RlZCA9IFtdO1xuICAgICAgICB0aGlzLl9jdXJyZW50VmFsdWUuY29uZGl0aW9ucyA9IFtdO1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogU2VhcmNoIGJ5IG9ubHkgdGhlIHNlYXJjaCB0ZXJtLiAqL1xuICAgIHNlYXJjaCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5maWx0ZXIodHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VhcmNoIGJ5IGFsbCBmaWxsZWQgZmlsdGVycywgaW5jbHVkaW5nIHRoZSBzZWFyY2ggdGVybS5cbiAgICAgKi9cbiAgICBmaWx0ZXIob25seVNlYXJjaCA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG5vbkVtcHR5RmlsdGVycyA9IG5ldyBNYXAoKTtcblxuICAgICAgICBpZiAoIW9ubHlTZWFyY2gpIHtcbiAgICAgICAgICAgIHRoaXMuX2Rpc3BsYXllZEZpbHRlcnNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKCh7IHZhbHVlIH0pID0+XG4gICAgICAgICAgICAgICAgICAgICEhdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlLnRyaW0oKS5sZW5ndGggOiB2YWx1ZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5mb3JFYWNoKChlKSA9PiBub25FbXB0eUZpbHRlcnMuc2V0KGUua2V5LCBlLnZhbHVlKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fbWFpblNlYXJjaC5sZW5ndGgpIHtcbiAgICAgICAgICAgIG5vbkVtcHR5RmlsdGVycy5zZXQoJyonLCB0aGlzLl9tYWluU2VhcmNoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRhdGFTb3VyY2U/Lm1hdGNoKG5vbkVtcHR5RmlsdGVycyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQXBwbHkgc2VhcmNoIGZyb20gYWR2YW5jZWQgZmlsdGVycyB2aWV3LCB1c2luZyB3aGVuIG1vYmlsZSB2aWV3IGlzIGFjdGl2ZVxuICAgICAqL1xuICAgIHNlYXJjaEFkdmFuY2VkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZpbHRlcigpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkVGFiID0gVmhkVGFiLnNlbGVjdEZyb21MaXN0O1xuICAgICAgICB0aGlzLmlzT3BlbkFkdmFuY2VkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqIFJlbW92ZSBpdGVtIGZyb20gc2VsZWN0ZWQgYXJyYXkgKi9cbiAgICByZW1vdmVTZWxlY3RlZChpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRWYWx1ZS5zZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRJdGVtcy5maWx0ZXIoKF8sIGkpID0+IGkgIT09IGluZGV4KTtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGNvbmRpdGlvbiBpdGVtXG4gICAgICovXG4gICAgcmVtb3ZlQ29uZGl0aW9uKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY3VycmVudFZhbHVlLmNvbmRpdGlvbnMgPSB0aGlzLmNvbmRpdGlvbkl0ZW1zLmZpbHRlcigoXywgaSkgPT4gaSAhPT0gaW5kZXgpO1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTd2l0Y2ggdGFiIGJ5IHR5cGVcbiAgICAgKi9cbiAgICBzd2l0Y2hUYWIodHlwZTogVmhkVGFiIHwgbnVsbCA9IG51bGwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRhYiA9IHR5cGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xvc2UgZGlhbG9nIHdpdGggdmFsdWU7XG4gICAgICovXG4gICAgc3VjY2VzcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmFjdGl2ZURpYWxvZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbHVlOiBWaGRWYWx1ZUNoYW5nZUV2ZW50ID0ge1xuICAgICAgICAgICAgc2VsZWN0ZWQ6IHRoaXMuc2VsZWN0ZWRJdGVtcyxcbiAgICAgICAgICAgIGNvbmRpdGlvbnM6IHRoaXMudmFsaWRDb25kaXRpb25zXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5faW50ZXJuYWxMb2FkaW5nU3RhdGUgPSB0cnVlO1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMuX2dldFZhbGlkYXRvckZ1bmN0aW9uKHZhbHVlKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW50ZXJuYWxMb2FkaW5nU3RhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGZpbHRlcigocikgPT4gciksXG4gICAgICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZvcm1hdFRva2VuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybWF0VG9rZW4odmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZURpYWxvZz8uY2xvc2UodmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGlkZSBhZHZhbmNlZCBzZWFyY2ggb24gbW9iaWxlIHZpZXcgYW5kIGlmIGl0J3Mgb3BlbmVkXG4gICAgICogQ2xvc2UgZGlhbG9nIHdpdGggbnVsbCB2YWx1ZTtcbiAgICAgKi9cbiAgICBkaXNtaXNzKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5tb2JpbGUgJiYgdGhpcy5pc09wZW5BZHZhbmNlZCkge1xuICAgICAgICAgICAgdGhpcy5pc09wZW5BZHZhbmNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zd2l0Y2hUYWIoVmhkVGFiLnNlbGVjdEZyb21MaXN0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRWYWx1ZSA9IHRoaXMuX3ByZXZTdGF0ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZURpYWxvZykge1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlRGlhbG9nLmNsb3NlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF90cmFja0J5U2VsZWN0ZWRGbihfaW5kZXg6IG51bWJlciwgaXRlbTogVCk6IG51bWJlciB8IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBpdGVtICYmIGl0ZW1bdGhpcy51bmlxdWVLZXldO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3RyYWNrQnlGaWx0ZXJGbihfaW5kZXg6IG51bWJlciwgaXRlbTogVmhkRmlsdGVyKTogbnVtYmVyIHwgc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0gJiYgaXRlbS5rZXk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfdHJhY2tCeUNvbmRpdGlvbkZuKF9pbmRleDogbnVtYmVyLCBpdGVtOiBCYXNlRW50aXR5KTogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0gPyBpdGVtLnZhbHVlICsgaXRlbS52YWx1ZVRvICsgaXRlbS5zdHJhdGVneSArIGl0ZW0ua2V5IDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb25TZWxlY3QoJGV2ZW50OiBUW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY3VycmVudFZhbHVlLnNlbGVjdGVkID0gJGV2ZW50O1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgaWYgKHRoaXMuc2VhcmNoU2VsZWN0aW9uID09PSAnb25jZScpIHtcbiAgICAgICAgICAgIHRoaXMuc3VjY2VzcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvbkNvbmRpdGlvbkNoYW5nZSgkZXZlbnQ6IEJhc2VFbnRpdHlbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jdXJyZW50VmFsdWUuY29uZGl0aW9ucyA9ICRldmVudDtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICB0b2dnbGVTaG93bkZpbHRlcnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2hvd25GaWx0ZXJDb3VudCA9XG4gICAgICAgICAgICB0aGlzLm1heFNob3duSW5pdGlhbEZpbHRlcnMgPT09IHRoaXMuc2hvd25GaWx0ZXJDb3VudCA/IEluZmluaXR5IDogdGhpcy5tYXhTaG93bkluaXRpYWxGaWx0ZXJzO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaW5pdFNob3duRmlsdGVycygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zaG93bkZpbHRlckNvdW50ID0gdGhpcy5tYXhTaG93bkluaXRpYWxGaWx0ZXJzIHx8IEluZmluaXR5O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0VmFsaWRDb25kaXRpb24oaXRlbXM6IEJhc2VFbnRpdHlbXSA9IFtdKTogQmFzZUVudGl0eVtdIHtcbiAgICAgICAgcmV0dXJuIGl0ZW1zLmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGl0ZW0uc3RyYXRlZ3kgPT09IFZoZERlZmluZUluY2x1ZGVTdHJhdGVneS5lbXB0eSB8fFxuICAgICAgICAgICAgICAgIGl0ZW0uc3RyYXRlZ3kgPT09IFZoZERlZmluZUV4Y2x1ZGVTdHJhdGVneS5ub3RfZW1wdHlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGl0ZW0uc3RyYXRlZ3kgPT09IFZoZERlZmluZUluY2x1ZGVTdHJhdGVneS5iZXR3ZWVuKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEJvb2xlYW4oaXRlbS52YWx1ZS5sZW5ndGggJiYgaXRlbS52YWx1ZVRvLmxlbmd0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWl0ZW0udmFsaWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gQm9vbGVhbihpdGVtLnZhbHVlLmxlbmd0aCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaW5pdGlhbGl6ZURTKGRzOiBGZHBWYWx1ZUhlbHBEaWFsb2dEYXRhU291cmNlPGFueT4gfCB1bmRlZmluZWQgPSB0aGlzLmRhdGFTb3VyY2UpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcmVzZXRTb3VyY2VTdHJlYW0oKTtcblxuICAgICAgICBpZiAodGhpcy5zaG93U2VsZWN0aW9uVGFiKSB7XG4gICAgICAgICAgICB0aGlzLl9kc1N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgICAgICAgICAgdGhpcy5fZHNTdWJzY3JpcHRpb24uYWRkKFxuICAgICAgICAgICAgICAgIGRzPy5vbkRhdGFSZXF1ZXN0ZWQoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbnRlcm5hbExvYWRpbmdTdGF0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25EYXRhUmVxdWVzdGVkLmVtaXQoKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgdGhpcy5fZHNTdWJzY3JpcHRpb24uYWRkKFxuICAgICAgICAgICAgICAgIGRzPy5vbkRhdGFSZWNlaXZlZCgpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2ludGVybmFsTG9hZGluZ1N0YXRlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZpcnN0TG9hZGluZ0RvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRGF0YVJlY2VpdmVkLmVtaXQoKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgZHNTdWIgPSB0aGlzLm9wZW5EYXRhU3RyZWFtKClcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Rpc3BsYXllZERhdGEgPSBkYXRhLnNsaWNlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLl9kc1N1YnNjcmlwdGlvbi5hZGQoZHNTdWIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gU2F2ZSBwcmV2aW91cyBzdGF0ZSAqL1xuICAgIHByaXZhdGUgX3NhdmVQcmV2aW91c1N0YXRlKCk6IHZvaWQge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGNsb25lRGVlcCh0aGlzLnZhbHVlKTtcbiAgICAgICAgdGhpcy5fY3VycmVudFZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuX3ByZXZTdGF0ZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaW5pdGlhbGl6ZVRhYigpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubW9iaWxlKSB7XG4gICAgICAgICAgICB0aGlzLmlzT3BlbkFkdmFuY2VkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2hvd1NlbGVjdGlvblRhYiAmJiB0aGlzLnNob3dEZWZpbmVUYWIpIHtcbiAgICAgICAgICAgIHRoaXMuc3dpdGNoVGFiKHRoaXMubW9iaWxlID8gdW5kZWZpbmVkIDogdGhpcy5pbml0aWFsVGFiKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNob3dTZWxlY3Rpb25UYWIpIHtcbiAgICAgICAgICAgIHRoaXMuc3dpdGNoVGFiKFZoZFRhYi5zZWxlY3RGcm9tTGlzdCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zaG93RGVmaW5lVGFiKSB7XG4gICAgICAgICAgICB0aGlzLnN3aXRjaFRhYihWaGRUYWIuZGVmaW5lQ29uZGl0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faW5pdFNob3duRmlsdGVycygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuRGlhbG9nRXZlbnRzKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuYWN0aXZlRGlhbG9nKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hY3RpdmVEaWFsb2cuYWZ0ZXJDbG9zZWQucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3Jlc2V0U3RhdGUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZmlsdGVycy5jaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVGaWx0ZXJzKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLl9ydGxTZXJ2aWNlKSB7XG4gICAgICAgICAgICB0aGlzLl9kaXIgPSB0aGlzLl9ydGxTZXJ2aWNlLnJ0bC5nZXRWYWx1ZSgpID8gJ3J0bCcgOiAnbHRyJztcbiAgICAgICAgICAgIHRoaXMuX3J0bFNlcnZpY2UucnRsLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoaXNSdGw6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kaXIgPSBpc1J0bCA/ICdydGwnIDogJ2x0cic7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcmVzZXRTdGF0ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZGVzdHJveWVkLm5leHQoKTtcbiAgICAgICAgdGhpcy5fZGVzdHJveWVkLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuX3Jlc2V0U291cmNlU3RyZWFtKCk7XG4gICAgICAgIHRoaXMuYWN0aXZlRGlhbG9nID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdXBkYXRlRmlsdGVycygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZGlzcGxheWVkRmlsdGVycyA9IHRoaXMuZmlsdGVycy5tYXAoKGUpID0+ICh7XG4gICAgICAgICAgICAuLi5lLFxuICAgICAgICAgICAgbGFiZWw6IGUubGFiZWwgfHwgZS5rZXlcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIHRoaXMuX2hhc0FkdmFuY2VkID0gdGhpcy5fZGlzcGxheWVkRmlsdGVycy5zb21lKChlOiBWaGRGaWx0ZXIpID0+ICEhZS5hZHZhbmNlZCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIG9wZW5EYXRhU3RyZWFtKCk6IE9ic2VydmFibGU8VFtdPiB7XG4gICAgICAgIGlmICh0aGlzLl9kYXRhU291cmNlKSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRhU291cmNlLm1hdGNoKCk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kYXRhU291cmNlLm9wZW4oKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFtkYXRhU291cmNlXSBzb3VyY2UgZGlkIG5vdCBtYXRjaCBhbiBhcnJheSwgT2JzZXJ2YWJsZSwgb3IgRGF0YVNvdXJjZWApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSB0b0RhdGFTdHJlYW0oZHM6IEZkcFZhbHVlSGVscERpYWxvZ0RhdGFTb3VyY2U8VD4pOiBGZHBWYWx1ZUhlbHBEaWFsb2dEYXRhU291cmNlPFQ+IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKGlzRGF0YVNvdXJjZShkcykpIHtcbiAgICAgICAgICAgIHJldHVybiBkcyBhcyBWYWx1ZUhlbHBEaWFsb2dEYXRhU291cmNlPFQ+O1xuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZHMpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEFycmF5VmFsdWVIZWxwRGlhbG9nRGF0YVNvdXJjZTxUPihkcyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNPYnNlcnZhYmxlKGRzKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlVmFsdWVIZWxwRGlhbG9nRGF0YVNvdXJjZTxUPihkcyBhcyBPYnNlcnZhYmxlPFRbXT4pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Jlc2V0U291cmNlU3RyZWFtKCk6IHZvaWQge1xuICAgICAgICBpZiAoaXNEYXRhU291cmNlKHRoaXMuZGF0YVNvdXJjZSkpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9kc1N1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fZHNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBpc1ZhbGlkT3B0aW9ucygpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvd1NlbGVjdGlvblRhYikge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAhIXRoaXMuZGF0YVNvdXJjZSAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiB0aGlzLnVuaXF1ZUtleSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgICAgICAodHlwZW9mIHRoaXMudG9rZW5WaWV3RmllbGQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB0aGlzLnRva2VuaXplckZuID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldFZhbGlkYXRvckZ1bmN0aW9uKHZhbHVlOiBWaGRWYWx1ZUNoYW5nZUV2ZW50KTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRvciA9IHR5cGVvZiB0aGlzLnRva2VuVmFsaWRhdG9yID09PSAnZnVuY3Rpb24nID8gdGhpcy50b2tlblZhbGlkYXRvcih2YWx1ZSkgOiBvZih0cnVlKTtcblxuICAgICAgICByZXR1cm4gaXNPYnNlcnZhYmxlKHZhbGlkYXRvcikgPyB2YWxpZGF0b3IgOiBvZih2YWxpZGF0b3IpO1xuICAgIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSBsZXQtZGlhbG9nIGxldC1kaWFsb2dDb25maWc9XCJkaWFsb2dDb25maWdcIiAjY29udGFpbmVyPlxuICAgIDxmZC1kaWFsb2cgW2RpYWxvZ0NvbmZpZ109XCJkaWFsb2dDb25maWdcIiBbZGlhbG9nUmVmXT1cImRpYWxvZ1wiPlxuICAgICAgICA8ZmQtZGlhbG9nLWhlYWRlciBbZGlyXT1cIl9kaXJcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBmZGtUZW1wbGF0ZT1cImhlYWRlclwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtb2JpbGUgPyBtb2JpbGVEaWFsb2dUaXRsZSA6IGRlc2t0b3BEaWFsb2dUaXRsZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9mZC1kaWFsb2ctaGVhZGVyPlxuICAgICAgICA8ZmQtZGlhbG9nLWJvZHkgW2Rpcl09XCJfZGlyXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIW1vYmlsZVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhZHZhbmNlZFNlYXJjaENvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPGRpdiBmZC1zY3JvbGxiYXIgW292ZXJyaWRlVGFiaW5kZXhdPVwiZmFsc2VcIiBjbGFzcz1cImZkcC12YWx1ZS1oZWxwLWRpYWxvZ19fY29udGVudC1ob2xkZXJcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibW9iaWxlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhZHZhbmNlZFNlYXJjaENvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZFRhYiA9PT0gX3RhYlR5cGVzLnNlbGVjdEZyb21MaXN0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzZWxlY3Rpb25Db250ZW50XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRUYWIgPT09IF90YWJUeXBlcy5kZWZpbmVDb25kaXRpb25zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkZWZpbmVDb25kaXRpb25zQ29udGVudFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZmQtZGlhbG9nLWJvZHk+XG4gICAgICAgIDxmZC1kaWFsb2ctZm9vdGVyIFtkaXJdPVwiX2RpclwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGZka1RlbXBsYXRlPVwiZm9vdGVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkcC12YWx1ZS1oZWxwLWRpYWxvZ19fcm93IGZkcC12YWx1ZS1oZWxwLWRpYWxvZ19fc2VsZWN0aW9uLXJvd1wiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ3BsYXRmb3JtVkhELnNlbGVjdGlvbkJhckxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhaXNNb2JpbGVBZHZhbmNlZFNlYXJjaEFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8aDUgZmQtdGl0bGUgY2xhc3M9XCJzZWxlY3RlZC1hbmQtY29uZGl0aW9uLXRpdGxlXCIgW2lkXT1cImlkICsgJy1zZWxlY3RlZC1pdGVtJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc1NlbGVjdGVkQW5kQ29uZGl0aW9uczsgZWxzZSBub0l0ZW1zUGFuZWxUaXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdwbGF0Zm9ybVZIRC5zZWxlY3RlZEFuZENvbmRpdGlvbkxhYmVsJyB8IGZkVHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHt7IHNlbGVjdGVkSXRlbXMubGVuZ3RoICsgdmFsaWRDb25kaXRpb25zLmxlbmd0aCB9fSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L2g1PlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmZHAtdmFsdWUtaGVscC1kaWFsb2dfX3Rva2Vucy13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmRwLXZhbHVlLWhlbHAtZGlhbG9nX190b2tlbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNlbGVjdGVkIGl0ZW1zIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC10b2tlbml6ZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC10b2tlblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmQtdG9vbGJhci1pdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZE92ZXJmbG93UHJpb3JpdHk9XCJoaWdoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmRwLXZhbHVlLWhlbHAtZGlhbG9nX19zZWxlY3Rpb24tdG9rZW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2xvc2VDbGljayk9XCJyZW1vdmVTZWxlY3RlZChzZWxlY3RlZEluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaXRlbSBvZiBzZWxlY3RlZEl0ZW1zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4IGFzIHNlbGVjdGVkSW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2tCeTogX3RyYWNrQnlTZWxlY3RlZEZuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPnt7ICEhdG9rZW5pemVyRm4gPyAoaXRlbSB8IGRpc3BsYXlGblBpcGUgOiB0b2tlbml6ZXJGbikgOiBpdGVtW3Rva2VuVmlld0ZpZWxkXSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZkLXRva2VuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmQtdG9rZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkLXRvb2xiYXItaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRPdmVyZmxvd1ByaW9yaXR5PVwiaGlnaFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkcC12YWx1ZS1oZWxwLWRpYWxvZ19fc2VsZWN0aW9uLXRva2VuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkNsb3NlQ2xpY2spPVwicmVtb3ZlQ29uZGl0aW9uKGNvbmRpdGlvbkluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaXRlbSBvZiB2YWxpZENvbmRpdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggYXMgY29uZGl0aW9uSW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2tCeTogX3RyYWNrQnlDb25kaXRpb25GblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbmRpdGlvblZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBpdGVtOiBpdGVtIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZkLXRva2VuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZmQtZm9ybS1jb250cm9sIGZkLXRva2VuaXplci1pbnB1dCBbZGlzYWJsZWRdPVwiIWhhc1NlbGVjdGVkQW5kQ29uZGl0aW9uc1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mZC10b2tlbml6ZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJTZWxlY3RlZEFuZENvbmRpdGlvbkl0ZW1zKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmRwLXZhbHVlLWhlbHAtZGlhbG9nX190b2tlbnMtY2xlYXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhaGFzU2VsZWN0ZWRBbmRDb25kaXRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidwbGF0Zm9ybVZIRC5mb290ZXJDbGVhclNlbGVjdGVkVGl0bGUnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoPVwiZGVjbGluZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIncGxhdGZvcm1WSEQuZm9vdGVyQ2xlYXJTZWxlY3RlZEFyaWFMYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmZHAtdmFsdWUtaGVscC1kaWFsb2dfX2FjdGlvbnMtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1nby1hZHZhbmNlZFxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidwbGF0Zm9ybVZIRC5zZWFyY2hCdXR0b25MYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBmZFR5cGU9XCJlbXBoYXNpemVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwibW9iaWxlICYmIGlzT3BlbkFkdmFuY2VkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWFyY2hBZHZhbmNlZCgpXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtc3VjY2VzXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibG9hZGluZ1N0YXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCIncGxhdGZvcm1WSEQuc3VjY2Vzc0J1dHRvbkxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZkVHlwZT1cImVtcGhhc2l6ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3RlZFRhYiAhPT0gX3RhYlR5cGVzLmFkdmFuY2VkU2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzdWNjZXNzKClcIlxuICAgICAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1kaXNtaXNzLWRpYWxvZ1xuICAgICAgICAgICAgICAgICAgICAgICAgZmQtZGlhbG9nLWRlY2lzaXZlLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidwbGF0Zm9ybVZIRC5jYW5jZWxCdXR0b25MYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGlzbWlzcygpXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9mZC1kaWFsb2ctZm9vdGVyPlxuICAgIDwvZmQtZGlhbG9nPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNub0l0ZW1zUGFuZWxUaXRsZT5cbiAgICB7eyAncGxhdGZvcm1WSEQuc2VsZWN0ZWRFbXB0eUxhYmVsJyB8IGZkVHJhbnNsYXRlIH19XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2FkdmFuY2VkU2VhcmNoQ29udGVudD5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNTZWxlY3Rpb25UYWJcIj5cbiAgICAgICAgPGZvcm0gY2xhc3M9XCJmZHAtdmFsdWUtaGVscC1kaWFsb2dfX3JvdyBmZHAtdmFsdWUtaGVscC1kaWFsb2dfX2FkdmFuY2VkLXNlYXJjaFwiIFtpZF09XCInYWR2YW5jZWQtc2VhcmNoLScgKyBpZFwiPlxuICAgICAgICAgICAgPGZkLWxheW91dC1ncmlkICpuZ0lmPVwiIW1vYmlsZSB8fCAobW9iaWxlICYmICFpc09wZW5BZHZhbmNlZClcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGZkTGF5b3V0R3JpZFJvdz5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbZmRMYXlvdXRHcmlkQ29sXT1cIjEyXCIgW2NvbE1kXT1cIjEyXCIgW2NvbExnXT1cIm1vYmlsZSA/IDEyIDogNlwiIFtjb2xYbF09XCJtb2JpbGUgPyAxMiA6IDZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxmZHAtc2VhcmNoLWZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidwbGF0Zm9ybVZIRC5zZWFyY2hQbGFjZWhvbGRlcicgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlYXJjaFN1Ym1pdCk9XCJzZWFyY2goKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0Q2hhbmdlKT1cIl9tYWluU2VhcmNoID0gJGV2ZW50LnRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvZmRwLXNlYXJjaC1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgW2ZkTGF5b3V0R3JpZENvbF09XCIxMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY29sTWRdPVwiMTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NvbExnXT1cIm1vYmlsZSA/IDEyIDogNlwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY29sWGxdPVwibW9iaWxlID8gMTIgOiA2XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiX2hhc0FkdmFuY2VkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmRwLXZhbHVlLWhlbHAtZGlhbG9nX19hZHZhbmNlZC1hY3Rpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGZkLXRvb2xiYXIgW2NsZWFyQm9yZGVyXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmQtdG9vbGJhci1zcGFjZXI+PC9mZC10b29sYmFyLXNwYWNlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkLXRvb2xiYXItaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIl9oYXNBZHZhbmNlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb2JpbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdwbGF0Zm9ybVZIRC5zZWFyY2hBZHZhbmNlZFNlYXJjaExhYmVsJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaXNPcGVuQWR2YW5jZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdwbGF0Zm9ybVZIRC5zZWFyY2hIaWRlQWR2YW5jZWRTZWFyY2hMYWJlbCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdwbGF0Zm9ybVZIRC5zZWFyY2hTaG93QWR2YW5jZWRTZWFyY2hMYWJlbCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgfCBmZFRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQWR2YW5jZWRTZWFyY2goKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmQtdG9vbGJhci1pdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidwbGF0Zm9ybVZIRC5zZWFyY2hCdXR0b25MYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkVHlwZT1cImVtcGhhc2l6ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ3BsYXRmb3JtVkhELnNlYXJjaEJ1dHRvbkxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZpbHRlcigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2ZkLXRvb2xiYXI+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9mZC1sYXlvdXQtZ3JpZD5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBbaWRdPVwiJ2FkdmFuY2VkLXNlYXJjaC1jb250ZW50LScgKyBpZFwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJpc09wZW5BZHZhbmNlZCAmJiBfaGFzQWR2YW5jZWRcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmRwLXZhbHVlLWhlbHAtZGlhbG9nX19hZHZhbmNlZC1maWx0ZXJzXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZmQtYnVzeS1pbmRpY2F0b3IgW2xvYWRpbmddPVwibG9hZGluZ1N0YXRlICYmIF9maXJzdExvYWRpbmdEb25lXCIgW2Jsb2NrXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGZkLWxheW91dC1ncmlkXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIl9maXJzdExvYWRpbmdEb25lOyBlbHNlIGZpbHRlcnNMb2FkaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5mZHAtdmFsdWUtaGVscC1kaWFsb2dfX3dpdGgtdG9nZ2xlLWFsbF09XCJmaWx0ZXJzLmxlbmd0aCA+IG1heFNob3duSW5pdGlhbEZpbHRlcnNcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGZkTGF5b3V0R3JpZFJvdz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZpbHRlciBvZiBfZGlzcGxheWVkRmlsdGVycyB8IHNsaWNlIDogMCA6IHNob3duRmlsdGVyQ291bnQgKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2tCeTogX3RyYWNrQnlGaWx0ZXJGblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlci5hZHZhbmNlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbZmRMYXlvdXRHcmlkQ29sXT1cIjEyXCIgW2NvbE1kXT1cIjEyXCIgW2NvbExnXT1cIjZcIiBbY29sWGxdPVwiM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZkLWZvcm0tZ3JvdXBfX2hlYWRlclwiIGZkLWZvcm0tbGFiZWwgW2Zvcl09XCInaW5wdXQnICsgZmlsdGVyLmtleVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID57eyBmaWx0ZXIubGFiZWwgfX06PC9sYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsdGVyLmZpbHRlckRlZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZpbHRlci5maWx0ZXJEZWYudGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBmaWx0ZXIgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZmlsdGVyLmZpbHRlckRlZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmlsdGVyLnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkLWZvcm0tY29udHJvbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiJ3NlYXJjaC1ieS0nICsgZmlsdGVyLmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCInaW5wdXQnICsgZmlsdGVyLmtleVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbEdyb3dcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZkTGF5b3V0R3JpZENvbF09XCIxMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xNZF09XCIxMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xMZ109XCI2XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbFhsXT1cIjNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZpbHRlcnMubGVuZ3RoID4gbWF4U2hvd25Jbml0aWFsRmlsdGVyc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmRwLXZhbHVlLWhlbHAtZGlhbG9nX190b2dnbGUtZmlsdGVyc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVTaG93bkZpbHRlcnMoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlzU2hvd0FsbEZpbHRlcnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAncGxhdGZvcm1WSEQuc2VhcmNoSGlkZUFsbEFkdmFuY2VkU2VhcmNoTGFiZWwnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ3BsYXRmb3JtVkhELnNlYXJjaFNob3dBbGxBZHZhbmNlZFNlYXJjaExhYmVsJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgfCBmZFRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZmQtbGF5b3V0LWdyaWQ+XG5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNmaWx0ZXJzTG9hZGluZz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1za2VsZXRvbiB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCIxMDBweFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmc6cmVjdCB4PVwiMFwiIHk9XCIwXCIgcng9XCI0XCIgd2lkdGg9XCIxNSVcIiBoZWlnaHQ9XCI4XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnOnJlY3QgeD1cIjBcIiB5PVwiMjBcIiByeD1cIjRcIiB3aWR0aD1cIjI1JVwiIGhlaWdodD1cIjE2XCIgLz5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmc6cmVjdCB4PVwiMzUlXCIgeT1cIjBcIiByeD1cIjRcIiB3aWR0aD1cIjE1JVwiIGhlaWdodD1cIjhcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmc6cmVjdCB4PVwiMzUlXCIgeT1cIjIwXCIgcng9XCI0XCIgd2lkdGg9XCIyNSVcIiBoZWlnaHQ9XCIxNlwiIC8+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnOnJlY3QgeD1cIjBcIiB5PVwiNjBcIiByeD1cIjRcIiB3aWR0aD1cIjE1JVwiIGhlaWdodD1cIjhcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmc6cmVjdCB4PVwiMFwiIHk9XCI4MFwiIHJ4PVwiNFwiIHdpZHRoPVwiMjUlXCIgaGVpZ2h0PVwiMTZcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9mZC1za2VsZXRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L2ZkLWJ1c3ktaW5kaWNhdG9yPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZm9ybT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc2VsZWN0aW9uQ29udGVudD5cbiAgICA8ZmQtYnVzeS1pbmRpY2F0b3JcbiAgICAgICAgW2xvYWRpbmddPVwibG9hZGluZ1N0YXRlICYmIF9maXJzdExvYWRpbmdEb25lXCJcbiAgICAgICAgW2Jsb2NrXT1cInRydWVcIlxuICAgICAgICBjbGFzcz1cImZkcC12YWx1ZS1oZWxwLWRpYWxvZ19fdGFibGUtYnVzeS1pbmRpY2F0b3JcIlxuICAgID5cbiAgICAgICAgPGZkcC1zZWxlY3QtdGFiXG4gICAgICAgICAgICBbc2VsZWN0ZWRdPVwic2VsZWN0ZWRJdGVtc1wiXG4gICAgICAgICAgICBbbG9hZGluZ109XCJsb2FkaW5nU3RhdGUgJiYgIV9maXJzdExvYWRpbmdEb25lXCJcbiAgICAgICAgICAgIFt1aWRdPVwiaWRcIlxuICAgICAgICAgICAgW2Rpc3BsYXllZERhdGFdPVwiX2Rpc3BsYXllZERhdGFcIlxuICAgICAgICAgICAgW3RhYlRpdGxlXT1cInNlbGVjdFRhYlRpdGxlIHx8ICgncGxhdGZvcm1WSEQuc2VsZWN0VGFiVGl0bGUnIHwgZmRUcmFuc2xhdGUpXCJcbiAgICAgICAgICAgIFttb2JpbGVdPVwibW9iaWxlXCJcbiAgICAgICAgICAgIFtzZWxlY3Rpb25dPVwic2VhcmNoU2VsZWN0aW9uXCJcbiAgICAgICAgICAgIFtlbXB0eVRhYmxlTWVzc2FnZV09XCJzZWFyY2hUYWJsZUVtcHR5TWVzc2FnZSB8fCAoJ3BsYXRmb3JtVkhELnNlYXJjaFRhYmxlRW1wdHlNZXNzYWdlJyB8IGZkVHJhbnNsYXRlKVwiXG4gICAgICAgICAgICBbdW5pcXVlS2V5XT1cInVuaXF1ZUtleVwiXG4gICAgICAgICAgICBbcGFnZVNpemVdPVwic2VhcmNoVGFibGVQYWdlU2l6ZVwiXG4gICAgICAgICAgICBbZGVmYXVsdE1vYmlsZUhlYWRlcnNdPVwic2VhcmNoVGFibGVNb2JpbGVIZWFkZXJzXCJcbiAgICAgICAgICAgIFtmaWx0ZXJzXT1cIl9kaXNwbGF5ZWRGaWx0ZXJzXCJcbiAgICAgICAgICAgIFthbGxvd1NlbGVjdEFsbF09XCJhbGxvd1NlbGVjdEFsbFwiXG4gICAgICAgICAgICAoc2VsZWN0KT1cIm9uU2VsZWN0KCRldmVudClcIlxuICAgICAgICA+PC9mZHAtc2VsZWN0LXRhYj5cbiAgICA8L2ZkLWJ1c3ktaW5kaWNhdG9yPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkZWZpbmVDb25kaXRpb25zQ29udGVudD5cbiAgICA8ZGl2IGZkLXNjcm9sbGJhciBbb3ZlcnJpZGVUYWJpbmRleF09XCJmYWxzZVwiPlxuICAgICAgICA8ZmRwLWRlZmluZS10YWJcbiAgICAgICAgICAgIFtzdHJhdGVneUxhYmVsc109XCJkZWZpbmVTdHJhdGVneUxhYmVsc1wiXG4gICAgICAgICAgICBbY29uZGl0aW9uc109XCJjb25kaXRpb25JdGVtc1wiXG4gICAgICAgICAgICBbdWlkXT1cImlkXCJcbiAgICAgICAgICAgIFt0YWJUaXRsZV09XCJkZWZpbmVUYWJUaXRsZSB8fCAoJ3BsYXRmb3JtVkhELmRlZmluZVRhYlRpdGxlJyB8IGZkVHJhbnNsYXRlKVwiXG4gICAgICAgICAgICBbbW9iaWxlXT1cIm1vYmlsZVwiXG4gICAgICAgICAgICAoY29uZGl0aW9uQ2hhbmdlKT1cIm9uQ29uZGl0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICA+PC9mZHAtZGVmaW5lLXRhYj5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGlhbG9nVGl0bGVUZXh0PlxuICAgIDxoNSBbYXR0ci5pZF09XCJoZWFkZXJJZFwiIGZkLXRpdGxlPnt7IGRpYWxvZ1RpdGxlIH19PC9oNT5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjdGFiTGluayBsZXQtdGl0bGU9XCJ0aXRsZVwiIGxldC10eXBlPVwidHlwZVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZFRhYiA9PT0gdHlwZSAmJiBzaG93U2VsZWN0aW9uVGFiICYmIHNob3dEZWZpbmVUYWJcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICBnbHlwaD1cIm5hdmlnYXRpb24tbGVmdC1hcnJvd1wiXG4gICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAoY2xpY2spPVwic3dpdGNoVGFiKClcIlxuICAgICAgICAgICAgW3RpdGxlXT1cIidwbGF0Zm9ybVZIRC5zZWxlY3RNb2JpbGVUYWJCYWNrQnRuVGl0bGUnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICA+PC9idXR0b24+XG4gICAgICAgIDxoNSBmZC10aXRsZT57eyB0aXRsZSB9fTwvaDU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkVGFiICE9PSB0eXBlXCI+XG4gICAgICAgIDxhXG4gICAgICAgICAgICBmZC1saXN0LWxpbmtcbiAgICAgICAgICAgIChjbGljayk9XCJzd2l0Y2hUYWIodHlwZSlcIlxuICAgICAgICAgICAgW3RpdGxlXT1cIidwbGF0Zm9ybVZIRC5zZWxlY3RNb2JpbGVUYWJCdG5PcGVuRGlhbG9nTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBmZC1saXN0LXRpdGxlPnt7IHRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgICAgPGkgZmQtbGlzdC1pY29uIGdseXBoPVwibmF2aWdhdGlvbi1yaWdodC1hcnJvd1wiPjwvaT5cbiAgICAgICAgPC9hPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNhZHZhbmNlZEhlYWRlcj5cbiAgICA8YnV0dG9uIGZkLWJ1dHRvbiBnbHlwaD1cIm5hdmlnYXRpb24tbGVmdC1hcnJvd1wiIGZkVHlwZT1cInRyYW5zcGFyZW50XCIgKGNsaWNrKT1cInRvZ2dsZUFkdmFuY2VkU2VhcmNoKClcIj48L2J1dHRvbj5cbiAgICA8aDUgZmQtdGl0bGU+e3sgJ3BsYXRmb3JtVkhELnNlYXJjaEFkdmFuY2VkU2VhcmNoTGFiZWwnIHwgZmRUcmFuc2xhdGUgfX08L2g1PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkZXNrdG9wRGlhbG9nVGl0bGU+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRpYWxvZ1RpdGxlVGV4dFwiPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkZXNrdG9wVGFic1wiPjwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNtb2JpbGVEaWFsb2dUaXRsZT5cbiAgICA8ZGl2IGNsYXNzPVwiZmRwLXZhbHVlLWhlbHAtZGlhbG9nX19tb2JpbGUtdGl0bGVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc1NlbGVjdGVkVGFiOyBlbHNlIGRpYWxvZ1RpdGxlVGV4dFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNlbGVjdGVkVGFiSGVhZGVyXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtb2JpbGVUYWJzXCI+PC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2Rlc2t0b3BUYWJzPlxuICAgIDxuYXYgZmQtdGFiLW5hdiBjbGFzcz1cImZkcC12YWx1ZS1oZWxwLWRpYWxvZ19fdGFic1wiICpuZ0lmPVwic2hvd1NlbGVjdGlvblRhYiAmJiBzaG93RGVmaW5lVGFiXCI+XG4gICAgICAgIDxkaXYgZmQtdGFiLWl0ZW0gKGNsaWNrKT1cInN3aXRjaFRhYihfdGFiVHlwZXMuc2VsZWN0RnJvbUxpc3QpXCIgKm5nSWY9XCJzaG93U2VsZWN0aW9uVGFiXCI+XG4gICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgIGZkLXRhYi1saW5rXG4gICAgICAgICAgICAgICAgW2FjdGl2ZV09XCJzZWxlY3RlZFRhYiA9PT0gX3RhYlR5cGVzLnNlbGVjdEZyb21MaXN0XCJcbiAgICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwic2VsZWN0ZWRUYWIgPT09IF90YWJUeXBlcy5zZWxlY3RGcm9tTGlzdCA/ICcwJyA6ICctMSdcIlxuICAgICAgICAgICAgICAgID48c3BhbiBmZC10YWItdGFnPnt7IHNlbGVjdFRhYlRpdGxlIHx8ICgncGxhdGZvcm1WSEQuc2VsZWN0VGFiVGl0bGUnIHwgZmRUcmFuc2xhdGUpIH19PC9zcGFuPjwvYVxuICAgICAgICAgICAgPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBmZC10YWItaXRlbSAoY2xpY2spPVwic3dpdGNoVGFiKF90YWJUeXBlcy5kZWZpbmVDb25kaXRpb25zKVwiICpuZ0lmPVwic2hvd0RlZmluZVRhYlwiPlxuICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICBmZC10YWItbGlua1xuICAgICAgICAgICAgICAgIFthY3RpdmVdPVwic2VsZWN0ZWRUYWIgPT09IF90YWJUeXBlcy5kZWZpbmVDb25kaXRpb25zXCJcbiAgICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwic2VsZWN0ZWRUYWIgPT09IF90YWJUeXBlcy5kZWZpbmVDb25kaXRpb25zID8gJzAnIDogJy0xJ1wiXG4gICAgICAgICAgICAgICAgPjxzcGFuIGZkLXRhYi10YWc+e3sgZGVmaW5lVGFiVGl0bGUgfHwgKCdwbGF0Zm9ybVZIRC5kZWZpbmVUYWJUaXRsZScgfCBmZFRyYW5zbGF0ZSkgfX08L3NwYW4+PC9hXG4gICAgICAgICAgICA+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmF2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNtb2JpbGVUYWJzPlxuICAgIDxkaXYgKm5nSWY9XCIhaGFzU2VsZWN0ZWRUYWIgJiYgc2hvd1NlbGVjdGlvblRhYiAmJiBzaG93RGVmaW5lVGFiXCI+XG4gICAgICAgIDxkaXYgZmQtYmFyIFtpblBhZ2VdPVwidHJ1ZVwiICpuZ0lmPVwic2hvd1NlbGVjdGlvblRhYlwiPlxuICAgICAgICAgICAgPGRpdiBmZC1iYXItbGVmdD5cbiAgICAgICAgICAgICAgICA8ZmQtYmFyLWVsZW1lbnQ+XG4gICAgICAgICAgICAgICAgICAgIHt7IHNlbGVjdFRhYlRpdGxlIHx8ICgncGxhdGZvcm1WSEQuc2VsZWN0VGFiVGl0bGUnIHwgZmRUcmFuc2xhdGUpIH19XG4gICAgICAgICAgICAgICAgPC9mZC1iYXItZWxlbWVudD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBmZC1iYXItcmlnaHQ+XG4gICAgICAgICAgICAgICAgPGZkLWJhci1lbGVtZW50PlxuICAgICAgICAgICAgICAgICAgICA8ZmQtYnV0dG9uLWJhclxuICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGg9XCJuYXZpZ2F0aW9uLXJpZ2h0LWFycm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzd2l0Y2hUYWIoX3RhYlR5cGVzLnNlbGVjdEZyb21MaXN0KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BsYXRmb3JtVkhELnNlbGVjdE1vYmlsZVRhYlRpdGxlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGZkVHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHsgdGl0bGU6IHNlbGVjdFRhYlRpdGxlIHx8ICgncGxhdGZvcm1WSEQuc2VsZWN0VGFiVGl0bGUnIHwgZmRUcmFuc2xhdGUpIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgID48L2ZkLWJ1dHRvbi1iYXI+XG4gICAgICAgICAgICAgICAgPC9mZC1iYXItZWxlbWVudD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBmZC1iYXIgW2luUGFnZV09XCJ0cnVlXCIgKm5nSWY9XCJzaG93RGVmaW5lVGFiXCI+XG4gICAgICAgICAgICA8ZGl2IGZkLWJhci1sZWZ0PlxuICAgICAgICAgICAgICAgIDxmZC1iYXItZWxlbWVudD5cbiAgICAgICAgICAgICAgICAgICAge3sgZGVmaW5lVGFiVGl0bGUgfHwgKCdwbGF0Zm9ybVZIRC5kZWZpbmVUYWJUaXRsZScgfCBmZFRyYW5zbGF0ZSkgfX1cbiAgICAgICAgICAgICAgICA8L2ZkLWJhci1lbGVtZW50PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGZkLWJhci1yaWdodD5cbiAgICAgICAgICAgICAgICA8ZmQtYmFyLWVsZW1lbnQ+XG4gICAgICAgICAgICAgICAgICAgIDxmZC1idXR0b24tYmFyXG4gICAgICAgICAgICAgICAgICAgICAgICBnbHlwaD1cIm5hdmlnYXRpb24tcmlnaHQtYXJyb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwbGF0Zm9ybVZIRC5zZWxlY3RNb2JpbGVUYWJUaXRsZSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmZFRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB7IHRpdGxlOiBkZWZpbmVUYWJUaXRsZSB8fCAoJ3BsYXRmb3JtVkhELmRlZmluZVRhYlRpdGxlJyB8IGZkVHJhbnNsYXRlKSB9XG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInN3aXRjaFRhYihfdGFiVHlwZXMuZGVmaW5lQ29uZGl0aW9ucylcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDwvZmQtYnV0dG9uLWJhcj5cbiAgICAgICAgICAgICAgICA8L2ZkLWJhci1lbGVtZW50PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNzZWxlY3RlZFRhYkhlYWRlcj5cbiAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJzZWxlY3RlZFRhYlwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJfdGFiVHlwZXMuc2VsZWN0RnJvbUxpc3RcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICB0YWJMaW5rO1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogc2VsZWN0VGFiVGl0bGUgfHwgKCdwbGF0Zm9ybVZIRC5zZWxlY3RUYWJUaXRsZScgfCBmZFRyYW5zbGF0ZSksXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBzZWxlY3RlZFRhYlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIl90YWJUeXBlcy5hZHZhbmNlZFNlYXJjaFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImFkdmFuY2VkSGVhZGVyXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJfdGFiVHlwZXMuZGVmaW5lQ29uZGl0aW9uc1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgIHRhYkxpbms7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBkZWZpbmVUYWJUaXRsZSB8fCAoJ3BsYXRmb3JtVkhELmRlZmluZVRhYlRpdGxlJyB8IGZkVHJhbnNsYXRlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHNlbGVjdGVkVGFiXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjY29uZGl0aW9uVmFsdWUgbGV0LWl0ZW09XCJpdGVtXCI+XG4gICAgPHNwYW4gKm5nSWY9XCJpdGVtLnN0cmF0ZWd5ICE9PSAnZW1wdHknICYmIGl0ZW0uc3RyYXRlZ3kgIT09ICdub3RfZW1wdHknOyBlbHNlIGVtcHR5Q29uZGl0aW9uXCI+XG4gICAgICAgIHt7IGl0ZW0gfCBkaXNwbGF5Rm5QaXBlIDogY29uZGl0aW9uRGlzcGxheUZuIDogX2Rpc3BsYXllZEZpbHRlcnMgfX1cbiAgICA8L3NwYW4+XG4gICAgPG5nLXRlbXBsYXRlICNlbXB0eUNvbmRpdGlvbj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0uc3RyYXRlZ3kgPT09ICdub3RfZW1wdHknOyBlbHNlIGVtcHR5Q29uZGl0aW9uVGV4dFwiPlxuICAgICAgICAgICAgISg8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZW1wdHlDb25kaXRpb25UZXh0XCI+PC9uZy1jb250YWluZXI+KVxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNlbXB0eUNvbmRpdGlvblRleHQ+ICZsdDt7eyAncGxhdGZvcm1WSEQuc2VsZWN0TW9iaWxlQ29uZGl0aW9uRW1wdHknIHwgZmRUcmFuc2xhdGUgfX0mZ3Q7IDwvbmctdGVtcGxhdGU+XG4iXX0=
619
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsdWUtaGVscC1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9zcmMvbGliL3ZhbHVlLWhlbHAtZGlhbG9nL3ZhbHVlLWhlbHAtZGlhbG9nL3ZhbHVlLWhlbHAtZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vc3JjL2xpYi92YWx1ZS1oZWxwLWRpYWxvZy92YWx1ZS1oZWxwLWRpYWxvZy92YWx1ZS1oZWxwLWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUNILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFFVCxXQUFXLEVBQ1gsU0FBUyxFQUNULGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5RCxPQUFPLEVBQUUsWUFBWSxFQUFhLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDaEUsT0FBTyxFQUNILDhCQUE4QixFQUU5QixtQ0FBbUMsRUFHbkMsd0JBQXdCLEVBQ3hCLHdCQUF3QixFQUV4QixNQUFNLEVBR1QsTUFBTSxXQUFXLENBQUM7QUFDbkIsT0FBTyxFQUFFLFlB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c0JBRHJCLEtBQUs7Z0JBS04sT0FBTztzQkFETixLQUFLO2dCQVFOLGNBQWM7c0JBRGIsS0FBSztnQkFLTixjQUFjO3NCQURiLEtBQUs7Z0JBT04sb0JBQW9CO3NCQURuQixLQUFLO2dCQXFCTixXQUFXO3NCQURWLE1BQU07Z0JBS0csZUFBZTtzQkFBeEIsTUFBTTtnQkFJRyxjQUFjO3NCQUF2QixNQUFNO2dCQUlQLE9BQU87c0JBRE4sZUFBZTt1QkFBQyxrQkFBa0I7Z0JBS25DLFNBQVM7c0JBRFIsZUFBZTt1QkFBQywyQkFBMkI7Z0JBSzVDLGVBQWU7c0JBRGQsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L21lbWJlci1vcmRlcmluZyAqL1xuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzT2JzZXJ2YWJsZSwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCB0YWtlLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgRGlhbG9nQ29uZmlnLCBEaWFsb2dSZWYsIERpYWxvZ1NlcnZpY2UgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZGlhbG9nJztcbmltcG9ydCB7IFJ0bFNlcnZpY2UgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBpc0RhdGFTb3VyY2UgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL3NoYXJlZCc7XG5pbXBvcnQge1xuICAgIEFycmF5VmFsdWVIZWxwRGlhbG9nRGF0YVNvdXJjZSxcbiAgICBCYXNlRW50aXR5LFxuICAgIE9ic2VydmFibGVWYWx1ZUhlbHBEaWFsb2dEYXRhU291cmNlLFxuICAgIFZhbHVlSGVscERpYWxvZ0RhdGFTb3VyY2UsXG4gICAgVmRoVGFibGVTZWxlY3Rpb24sXG4gICAgVmhkRGVmaW5lRXhjbHVkZVN0cmF0ZWd5LFxuICAgIFZoZERlZmluZUluY2x1ZGVTdHJhdGVneSxcbiAgICBWaGRGaWx0ZXIsXG4gICAgVmhkVGFiLFxuICAgIFZoZFZhbHVlLFxuICAgIFZoZFZhbHVlQ2hhbmdlRXZlbnRcbn0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IFZoZENvbXBvbmVudCB9IGZyb20gJy4uL21vZGVscy92aGQtY29tcG9uZW50Lm1vZGVsJztcbmltcG9ydCB7IGRlZmF1bHRDb25kaXRpb25EaXNwbGF5Rm4gfSBmcm9tICcuLi9jb25zdGFucy9jb25kaXRpb24tZGlzcGxheS5mdW5jdGlvbic7XG5pbXBvcnQgeyBWaGRGaWx0ZXJDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL3ZhbHVlLWhlbHAtZGlhbG9nLWZpbHRlci92YWx1ZS1oZWxwLWRpYWxvZy1maWx0ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFZhbHVlSGVscENvbHVtbkRlZkRpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvdmFsdWUtaGVscC1jb2x1bW4tZGVmLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBjbG9uZURlZXAgfSBmcm9tICdsb2Rhc2gtZXMnO1xuXG5leHBvcnQgdHlwZSBGZHBWYWx1ZUhlbHBEaWFsb2dEYXRhU291cmNlPFQ+ID1cbiAgICB8IFZhbHVlSGVscERpYWxvZ0RhdGFTb3VyY2U8VD5cbiAgICB8IEFycmF5VmFsdWVIZWxwRGlhbG9nRGF0YVNvdXJjZTxUPlxuICAgIHwgT2JzZXJ2YWJsZVZhbHVlSGVscERpYWxvZ0RhdGFTb3VyY2U8VD47XG5cbmxldCB2aGlVbmlxdWVJZCA9IDA7XG5sZXQgdmhkSGVhZGVyVW5pcXVlSWQgPSAwO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkcC12YWx1ZS1oZWxwLWRpYWxvZycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3ZhbHVlLWhlbHAtZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi92YWx1ZS1oZWxwLWRpYWxvZy5jb21wb25lbnQuc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IFZoZENvbXBvbmVudCxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBQbGF0Zm9ybVZhbHVlSGVscERpYWxvZ0NvbXBvbmVudFxuICAgICAgICB9XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBQbGF0Zm9ybVZhbHVlSGVscERpYWxvZ0NvbXBvbmVudDxUID0gYW55PiBleHRlbmRzIFZoZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgICAvKiogSWQgb2YgdGhlIHBvcG92ZXIgKi9cbiAgICBASW5wdXQoKVxuICAgIGlkOiBzdHJpbmcgPSAnZmRwLXZoZC0nICsgdmhpVW5pcXVlSWQrKztcblxuICAgIC8qKiBJbml0aWFsIHN0YXRlIG9mIFZhbHVlIGhlbHAgZGlhbG9nICovXG4gICAgQElucHV0KClcbiAgICB2YWx1ZTogVmhkVmFsdWU8VD4gPSB7XG4gICAgICAgIHNlbGVjdGVkOiBbXSxcbiAgICAgICAgY29uZGl0aW9uczogW11cbiAgICB9O1xuXG4gICAgLyoqIERpYWxvZyB0aXRsZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlhbG9nVGl0bGU6IHN0cmluZztcblxuICAgIC8qKiBTZWxlY3QgZnJvbSBsaXN0IHRhYiBhY3RpdmF0aW9uICovXG4gICAgQElucHV0KClcbiAgICBpbml0aWFsVGFiID0gVmhkVGFiLnNlbGVjdEZyb21MaXN0O1xuXG4gICAgLyoqIFZpc2libGUgdGFicyAqL1xuICAgIEBJbnB1dCgpXG4gICAgdGFiczogJ2JvdGgnIHwgJ3NlbGVjdCcgfCAnZGVmaW5lJyA9ICdib3RoJztcblxuICAgIC8qKiBJbml0aWFsIGV4cGFuZCBzdGF0ZSBmb3IgYWR2YW5jZWQgc2VhcmNoIHBhbmVsICovXG4gICAgQElucHV0KClcbiAgICBpc09wZW5BZHZhbmNlZCA9IGZhbHNlO1xuXG4gICAgLyoqIERhdGEgc291cmNlICovXG4gICAgQElucHV0KClcbiAgICBzZXQgZGF0YVNvdXJjZSh2YWx1ZTogRmRwVmFsdWVIZWxwRGlhbG9nRGF0YVNvdXJjZTxhbnk+IHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZSA9IHRoaXMudG9EYXRhU3RyZWFtKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgZGF0YVNvdXJjZSgpOiBGZHBWYWx1ZUhlbHBEaWFsb2dEYXRhU291cmNlPGFueT4gfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YVNvdXJjZTtcbiAgICB9XG5cbiAgICAvKiogRGlhbG9nJ3MgY3VzdG9tIGNvbmZpZyAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlhbG9nQ29uZmlnOiBEaWFsb2dDb25maWcgPSB7fTtcblxuICAgIC8qKiBVbmlxdWUga2V5IGZyb20gdGhlIHNvdXJjZSBmaWVsZCBuYW1lcy4gUmVxdWlyZWQgZmllbGQuICovXG4gICAgQElucHV0KClcbiAgICB1bmlxdWVLZXk6IHN0cmluZztcblxuICAgIC8qKiBJZCBhdHRyaWJ1dGUgZm9yIGRpYWxvZyB0aXRsZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgaGVhZGVySWQgPSBgZmQtdmhkLWhlYWRlci1pZC0ke3ZoZEhlYWRlclVuaXF1ZUlkKyt9YDtcblxuICAgIC8qKiBGaWVsZCBuYW1lIGZvciBkZWZhdWx0IHJlbmRlciBmcm9tIGRhdGEuXG4gICAgICogUmVxdWlyZWQgZmllbGQgaWYgdG9rZW5pemVyRm4gaXMgbm90IGV4aXN0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgdG9rZW5WaWV3RmllbGQ6IHN0cmluZztcblxuICAgIC8qKiBUb2tlbml6ZXIgZnVuY3Rpb24gZm9yIGN1c3RvbSB0b2tlbiByZW5kZXIsIGl0IGhhcyBoaWdoZXIgcHJpbyB0aGF0IGB0b2tlblZpZXdGaWVsZGAuXG4gICAgICogUmVxdWlyZWQgZmllbGQgaWYgdG9rZW5WaWV3RmllbGQgaXMgbm90IGV4aXN0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgdG9rZW5pemVyRm46IChpdGVtOiBUKSA9PiBzdHJpbmc7XG5cbiAgICAvKiogV2hldGhlciB0aGUgdmFsdWUgaGVscCBkaWFsb2cgc2hvdWxkIGJlIHZpZXcgaW4gbW9iaWxlIG1vZGUgKi9cbiAgICBASW5wdXQoKVxuICAgIG1vYmlsZSA9IGZhbHNlO1xuXG4gICAgLyoqIEl0IHNob3VsZCBiZSBhYmxlIGlmIHlvdSB1c2UgbXVsdGlwbGUgc2VsZWN0aW9uICovXG4gICAgQElucHV0KClcbiAgICBmb3JtYXRUb2tlbjogKHZhbHVlOiBWaGRWYWx1ZUNoYW5nZUV2ZW50PFQ+KSA9PiB2b2lkO1xuXG4gICAgLyoqIFRva2VuaXplciBmdW5jdGlvbiBmb3IgY29uZGl0aW9uJ3MgdG9rZW4gcmVuZGVyICovXG4gICAgQElucHV0KClcbiAgICBjb25kaXRpb25EaXNwbGF5Rm4gPSBkZWZhdWx0Q29uZGl0aW9uRGlzcGxheUZuO1xuXG4gICAgLyoqIFZhbGlkYXRvciBmdW5jdGlvbi4gQ2FsbGVkIHdoZW4gdXNlciBzdWJtaXRzIFZIRCBkaWFsb2cuICovXG4gICAgQElucHV0KClcbiAgICB0b2tlblZhbGlkYXRvcjogKCh2YWx1ZTogVmhkVmFsdWVDaGFuZ2VFdmVudDxhbnk+KSA9PiBPYnNlcnZhYmxlPGJvb2xlYW4+IHwgYm9vbGVhbikgfCB1bmRlZmluZWQ7XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgaTE4biBjYXBhYmlsaXRpZXMgaW5zdGVhZFxuICAgICAqIFNlbGVjdCBmcm9tIGxpc3QgdGFiJ3MgYW5kIFNlYXJjaCB0YWJsZSBzZXR0aW5nc1xuICAgICAqICovXG4gICAgQElucHV0KClcbiAgICBzZWxlY3RUYWJUaXRsZTogc3RyaW5nO1xuXG4gICAgLyoqIFNlbGVjdGlvbiBtb2RlIGZvciBzZWFyY2ggdGFibGUgKi9cbiAgICBASW5wdXQoKVxuICAgIHNlYXJjaFNlbGVjdGlvbjogVmRoVGFibGVTZWxlY3Rpb24gPSAnbXVsdGknO1xuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIGkxOG4gY2FwYWJpbGl0aWVzIGluc3RlYWRcbiAgICAgKiBUZXh0IGRpc3BsYXllZCB3aGVuIHRhYmxlIGhhcyBubyBpdGVtcy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNlYXJjaFRhYmxlRW1wdHlNZXNzYWdlOiBzdHJpbmc7XG5cbiAgICAvKiogSXRlbXMgcGVyIHBhZ2UgZm9yIHBhZ2luYXRpb24gYmVsb3cgc2VhcmNoIHRhYmxlICovXG4gICAgQElucHV0KClcbiAgICBzZWFyY2hUYWJsZVBhZ2VTaXplID0gMjA7XG5cbiAgICAvKiogQ291bnQgb2YgZGVmYXVsdCBtb2JpbGUgaGVhZGVyIGZyb20gc2VhcmNoIHRhYmxlICovXG4gICAgQElucHV0KClcbiAgICBzZWFyY2hUYWJsZU1vYmlsZUhlYWRlcnMgPSAyO1xuXG4gICAgLyoqIE1heCBzaG93biBpbml0aWFsIGZpbHRlcnMgb24gb3Blbi4gRGVza3RvcCBvbmx5ICovXG4gICAgQElucHV0KClcbiAgICBtYXhTaG93bkluaXRpYWxGaWx0ZXJzID0gNDtcblxuICAgIC8qKiBMb2FkaW5nIHN0YXRlICovXG4gICAgQElucHV0KClcbiAgICBsb2FkaW5nOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIGkxOG4gY2FwYWJpbGl0aWVzIGluc3RlYWRcbiAgICAgKiBEZWZpbmUgY29uZGl0aW9ucyB0YWIncyBzZXR0aW5nc1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGVmaW5lVGFiVGl0bGU6IHN0cmluZztcblxuICAgIC8qKiBXaGV0aGVyIHRvIGFsbG93IHVzZXJzIHRvIHNlbGVjdCBhbGwgdGFibGUgZW50cmllcyB3aXRoIG9uZSBjaGVja2JveC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFsbG93U2VsZWN0QWxsID0gdHJ1ZTtcblxuICAgIC8qKiBDdXN0b20gc3RyYXRlZ2llcyBsYWJlbHNcbiAgICAgKiBBbGxvd2VkIGtleXM6IGNvbnRhaW5zLCBlcXVhbFRvLCBiZXR3ZWVuLCBzdGFydHNXaXRoLCBlbmRzV2l0aCwgbGVzc1RoYW4sIGxlc3NUaGFuRXF1YWwsIGdyZWF0ZXJUaGFuLCBncmVhdGVyVGhhbkVxdWFsLCBlbXB0eVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGVmaW5lU3RyYXRlZ3lMYWJlbHM6IHtcbiAgICAgICAgW2tleSBpbiBrZXlvZiAodHlwZW9mIFZoZERlZmluZUluY2x1ZGVTdHJhdGVneSB8IHR5cGVvZiBWaGREZWZpbmVFeGNsdWRlU3RyYXRlZ3kpXT86IHN0cmluZztcbiAgICB9ID0ge1xuICAgICAgICBjb250YWluczogJ2NvbnRhaW5zJyxcbiAgICAgICAgZXF1YWxUbzogJ2VxdWFsIHRvJyxcbiAgICAgICAgYmV0d2VlbjogJ2JldHdlZW4nLFxuICAgICAgICBzdGFydHNXaXRoOiAnc3RhcnRzIHdpdGgnLFxuICAgICAgICBlbmRzV2l0aDogJ2VuZHMgd2l0aCcsXG4gICAgICAgIGxlc3NUaGFuOiAnbGVzcyB0aGFuJyxcbiAgICAgICAgbGVzc1RoYW5FcXVhbDogJ2xlc3MgdGhhbiBvciBlcXVhbCB0bycsXG4gICAgICAgIGdyZWF0ZXJUaGFuOiAnZ3JlYXRlciB0aGFuJyxcbiAgICAgICAgZ3JlYXRlclRoYW5FcXVhbDogJ2dyZWF0ZXIgdGhhbiBvciBlcXVhbCB0bycsXG4gICAgICAgIGVtcHR5OiAnZW1wdHknLFxuICAgICAgICBub3RfZXF1YWxUbzogJ25vdCBlcXVhbCB0bycsXG4gICAgICAgIG5vdF9lbXB0eTogJ25vdCBlbXB0eSdcbiAgICB9O1xuXG4gICAgLyoqIERpYWxvZyBvdXRwdXRzICovXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiBmaWx0ZXJzL3Rva2VucyB3ZXJlIGNoYW5nZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFZoZFZhbHVlQ2hhbmdlRXZlbnQ8VD4+KCk7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIGRhdGEgbG9hZGluZyBpcyBzdGFydGVkLiAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW9uLXByZWZpeFxuICAgIEBPdXRwdXQoKSBvbkRhdGFSZXF1ZXN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIGRhdGEgbG9hZGluZyBpcyBmaW5pc2hlZC4gKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1vbi1wcmVmaXhcbiAgICBAT3V0cHV0KCkgb25EYXRhUmVjZWl2ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiBGaXRsZXJzIGZvciBzZWFyY2ggdGFibGUgYW5kIGRlZmluY2UgY29uZGl0aW9ucyAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oVmhkRmlsdGVyQ29tcG9uZW50KVxuICAgIGZpbHRlcnM6IFF1ZXJ5TGlzdDxWaGRGaWx0ZXJDb21wb25lbnQ+O1xuXG4gICAgLyoqIENvbHVtbiBkZWZpbml0aW9ucy4gKi9cbiAgICBAQ29udGVudENoaWxkcmVuKFZhbHVlSGVscENvbHVtbkRlZkRpcmVjdGl2ZSlcbiAgICBjb2x1bW5EZWY6IFF1ZXJ5TGlzdDxWYWx1ZUhlbHBDb2x1bW5EZWZEaXJlY3RpdmU+O1xuXG4gICAgLyoqIEBoaWRkZW4gSW50ZXJuYWwgY29udGFpbmVyIGZvciBkaWFsb2cgKi9cbiAgICBAVmlld0NoaWxkKCdjb250YWluZXInLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gICAgZGlhbG9nQ29udGFpbmVyOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBhY3RpdmVEaWFsb2c/OiBEaWFsb2dSZWY7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF90YWJUeXBlcyA9IFZoZFRhYjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2hhc0FkdmFuY2VkID0gdHJ1ZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2hhc0RlZmluZUZpbHRlcnMgPSB0cnVlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZGlzcGxheWVkRmlsdGVyczogVmhkRmlsdGVyW10gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2Rpc3BsYXllZERhdGE6IFRbXSA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfbWFpblNlYXJjaCA9ICcnO1xuXG4gICAgLyoqIGhhbmRsZXMgcnRsIHNlcnZpY2VcbiAgICAgKiBAaGlkZGVuICovXG4gICAgX2RpciA9ICdsdHInO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kZXN0cm95ZWQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kYXRhU291cmNlOiBGZHBWYWx1ZUhlbHBEaWFsb2dEYXRhU291cmNlPGFueT4gfCB1bmRlZmluZWQ7XG5cbiAgICAvKiogQGhpZGRlbiBmb3IgZGF0YSBzb3VyY2UgaGFuZGxpbmcgKi9cbiAgICBwcml2YXRlIF9kc1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbDtcblxuICAgIC8qKiBAaGlkZGVuIFByZXZpb3VzIHN0YXRlICovXG4gICAgcHJpdmF0ZSBfcHJldlN0YXRlOiBWaGRWYWx1ZTxUPiA9IHtcbiAgICAgICAgc2VsZWN0ZWQ6IFtdLFxuICAgICAgICBjb25kaXRpb25zOiBbXVxuICAgIH07XG4gICAgLyoqIEBoaWRkZW4gQ3VycmVudCBkYXRhIGZvciBsb2NhbCBtYW51cHVsYXRpb24gKi9cbiAgICBwcml2YXRlIF9jdXJyZW50VmFsdWU6IFZoZFZhbHVlPFQ+ID0ge1xuICAgICAgICBzZWxlY3RlZDogW10sXG4gICAgICAgIGNvbmRpdGlvbnM6IFtdXG4gICAgfTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgc2VsZWN0ZWRUYWI6IFZoZFRhYiB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBzaG93bkZpbHRlckNvdW50ID0gSW5maW5pdHk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBsb2FkaW5nU3RhdGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvYWRpbmcgPz8gdGhpcy5faW50ZXJuYWxMb2FkaW5nU3RhdGU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW5cbiAgICAgKiBUbyBkaWZmZXJlbnRpYXRlIGJldHdlZW4gZmlyc3QgbG9hZGluZyB3aGVuIHNrZWxldG9ucyBiZSBzaG93biBhbmQgc3Vic2VxdWVudCBsb2FkaW5ncyB3aGVuIGJ1c3kgaW5kaWNhdG9yIGJlIHNob3duXG4gICAgICovXG4gICAgX2ZpcnN0TG9hZGluZ0RvbmUgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaW50ZXJuYWxMb2FkaW5nU3RhdGUgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfb25EZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9kaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHJlYWRvbmx5IF9ydGxTZXJ2aWNlOiBSdGxTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIC8qKiBEZWZhdWx0IGRpc3BsYXkgZnVuY3Rpb24gZm9yIGRlZmluZSBjb25kaXRpb25zICovXG4gICAgICAgIGlmICghdGhpcy5jb25kaXRpb25EaXNwbGF5Rm4gfHwgdHlwZW9mIHRoaXMuY29uZGl0aW9uRGlzcGxheUZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aGlzLmNvbmRpdGlvbkRpc3BsYXlGbiA9IGRlZmF1bHRDb25kaXRpb25EaXNwbGF5Rm47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBpc01vYmlsZUFkdmFuY2VkU2VhcmNoQWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5tb2JpbGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzT3BlbkFkdmFuY2VkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBoYXNTZWxlY3RlZFRhYigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRUYWIgIT0gbnVsbCAmJiB0aGlzLnNlbGVjdGVkVGFiIGluIFZoZFRhYjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBzaG93U2VsZWN0aW9uVGFiKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50YWJzICE9PSAnZGVmaW5lJztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBzaG93RGVmaW5lVGFiKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50YWJzICE9PSAnc2VsZWN0JztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBpc1NlbGVjdGlvblRhYigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRUYWIgPT09IFZoZFRhYi5zZWxlY3RGcm9tTGlzdCB8fCB0aGlzLnNlbGVjdGVkVGFiID09PSBWaGRUYWIuYWR2YW5jZWRTZWFyY2g7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgc2VsZWN0ZWRJdGVtcygpOiBUW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFZhbHVlLnNlbGVjdGVkIHx8IFtdO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IGNvbmRpdGlvbkl0ZW1zKCk6IEJhc2VFbnRpdHlbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50VmFsdWUuY29uZGl0aW9ucyB8fCBbXTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCB2YWxpZENvbmRpdGlvbnMoKTogQmFzZUVudGl0eVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldFZhbGlkQ29uZGl0aW9uKHRoaXMuY29uZGl0aW9uSXRlbXMpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IGhhc1NlbGVjdGVkQW5kQ29uZGl0aW9ucygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4odGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCArIHRoaXMudmFsaWRDb25kaXRpb25zLmxlbmd0aCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgaXNTaG93QWxsRmlsdGVycygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVycy5sZW5ndGggPiB0aGlzLm1heFNob3duSW5pdGlhbEZpbHRlcnMgJiYgdGhpcy5zaG93bkZpbHRlckNvdW50ID4gdGhpcy5tYXhTaG93bkluaXRpYWxGaWx0ZXJzO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IGlzT3BlbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5hY3RpdmVEaWFsb2c7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgaWYgKCdkYXRhU291cmNlJyBpbiBjaGFuZ2VzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faW5pdGlhbGl6ZURTKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9yZXNldFN0YXRlKCk7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveSQubmV4dCgpO1xuICAgIH1cblxuICAgIC8qKiBPcGVuIGRpYWxvZyAqL1xuICAgIG9wZW4oKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkT3B0aW9ucygpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BsZWFzZSBjaGVjayByZXF1aXJlZCBmaWVsZHMnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zYXZlUHJldmlvdXNTdGF0ZSgpO1xuICAgICAgICB0aGlzLl91cGRhdGVGaWx0ZXJzKCk7XG4gICAgICAgIHRoaXMuX2luaXRpYWxpemVEUygpO1xuICAgICAgICB0aGlzLl9pbml0aWFsaXplVGFiKCk7XG4gICAgICAgIGlmICghdGhpcy5kaWFsb2dDb25maWcuYXJpYUxhYmVsbGVkQnkpIHtcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nQ29uZmlnLmFyaWFMYWJlbGxlZEJ5ID0gdGhpcy5oZWFkZXJJZDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFjdGl2ZURpYWxvZyA9IHRoaXMuX2RpYWxvZ1NlcnZpY2Uub3Blbih0aGlzLmRpYWxvZ0NvbnRhaW5lciwge1xuICAgICAgICAgICAgYmFja2Ryb3BDbGlja0Nsb3NlYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcbiAgICAgICAgICAgIHZlcnRpY2FsUGFkZGluZzogZmFsc2UsXG4gICAgICAgICAgICBlc2NLZXlDbG9zZWFibGU6IGZhbHNlLFxuICAgICAgICAgICAgZGlhbG9nUGFuZWxDbGFzczogYGZkcC12YWx1ZS1oZWxwLWRpYWxvZyAke3RoaXMubW9iaWxlID8gJ2ZkcC12YWx1ZS1oZWxwLWRpYWxvZy1tb2JpbGUnIDogJyd9YCxcbiAgICAgICAgICAgIC4uLnRoaXMuZGlhbG9nQ29uZmlnLFxuXG4gICAgICAgICAgICBmdWxsU2NyZWVuOiB0aGlzLm1vYmlsZSxcbiAgICAgICAgICAgIG1heFdpZHRoOiB0aGlzLm1vYmlsZSA/IHVuZGVmaW5lZCA6ICc5MiUnLFxuICAgICAgICAgICAgd2lkdGg6IHRoaXMubW9iaWxlID8gdW5kZWZpbmVkIDogJzEwODBweCcsXG4gICAgICAgICAgICBoZWlnaHQ6IHRoaXMubW9iaWxlID8gdW5kZWZpbmVkIDogJzk4JSdcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2xpc3RlbkRpYWxvZ0V2ZW50cygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvZ2dsZSBhZHZhbmNlZCBzZWFyY2ggcGFuZWxcbiAgICAgKi9cbiAgICB0b2dnbGVBZHZhbmNlZFNlYXJjaChzdGF0ZT86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzdGF0ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuQWR2YW5jZWQgPSBzdGF0ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuQWR2YW5jZWQgPSAhdGhpcy5pc09wZW5BZHZhbmNlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm1vYmlsZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRhYiA9IHRoaXMuaXNPcGVuQWR2YW5jZWQgPyBWaGRUYWIuYWR2YW5jZWRTZWFyY2ggOiBWaGRUYWIuc2VsZWN0RnJvbUxpc3Q7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhciBhbGwgc2VsZWN0ZWQgaXRlbXNcbiAgICAgKi9cbiAgICBjbGVhclNlbGVjdGVkQW5kQ29uZGl0aW9uSXRlbXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRWYWx1ZS5zZWxlY3RlZCA9IFtdO1xuICAgICAgICB0aGlzLl9jdXJyZW50VmFsdWUuY29uZGl0aW9ucyA9IFtdO1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogU2VhcmNoIGJ5IG9ubHkgdGhlIHNlYXJjaCB0ZXJtLiAqL1xuICAgIHNlYXJjaCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5maWx0ZXIodHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VhcmNoIGJ5IGFsbCBmaWxsZWQgZmlsdGVycywgaW5jbHVkaW5nIHRoZSBzZWFyY2ggdGVybS5cbiAgICAgKi9cbiAgICBmaWx0ZXIob25seVNlYXJjaCA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG5vbkVtcHR5RmlsdGVycyA9IG5ldyBNYXAoKTtcblxuICAgICAgICBpZiAoIW9ubHlTZWFyY2gpIHtcbiAgICAgICAgICAgIHRoaXMuX2Rpc3BsYXllZEZpbHRlcnNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKCh7IHZhbHVlIH0pID0+XG4gICAgICAgICAgICAgICAgICAgICEhdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlLnRyaW0oKS5sZW5ndGggOiB2YWx1ZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5mb3JFYWNoKChlKSA9PiBub25FbXB0eUZpbHRlcnMuc2V0KGUua2V5LCBlLnZhbHVlKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fbWFpblNlYXJjaC5sZW5ndGgpIHtcbiAgICAgICAgICAgIG5vbkVtcHR5RmlsdGVycy5zZXQoJyonLCB0aGlzLl9tYWluU2VhcmNoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRhdGFTb3VyY2U/Lm1hdGNoKG5vbkVtcHR5RmlsdGVycyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQXBwbHkgc2VhcmNoIGZyb20gYWR2YW5jZWQgZmlsdGVycyB2aWV3LCB1c2luZyB3aGVuIG1vYmlsZSB2aWV3IGlzIGFjdGl2ZVxuICAgICAqL1xuICAgIHNlYXJjaEFkdmFuY2VkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZpbHRlcigpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkVGFiID0gVmhkVGFiLnNlbGVjdEZyb21MaXN0O1xuICAgICAgICB0aGlzLmlzT3BlbkFkdmFuY2VkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqIFJlbW92ZSBpdGVtIGZyb20gc2VsZWN0ZWQgYXJyYXkgKi9cbiAgICByZW1vdmVTZWxlY3RlZChpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRWYWx1ZS5zZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRJdGVtcy5maWx0ZXIoKF8sIGkpID0+IGkgIT09IGluZGV4KTtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGNvbmRpdGlvbiBpdGVtXG4gICAgICovXG4gICAgcmVtb3ZlQ29uZGl0aW9uKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY3VycmVudFZhbHVlLmNvbmRpdGlvbnMgPSB0aGlzLmNvbmRpdGlvbkl0ZW1zLmZpbHRlcigoXywgaSkgPT4gaSAhPT0gaW5kZXgpO1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTd2l0Y2ggdGFiIGJ5IHR5cGVcbiAgICAgKi9cbiAgICBzd2l0Y2hUYWIodHlwZTogVmhkVGFiIHwgbnVsbCA9IG51bGwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRhYiA9IHR5cGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xvc2UgZGlhbG9nIHdpdGggdmFsdWU7XG4gICAgICovXG4gICAgc3VjY2VzcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmFjdGl2ZURpYWxvZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbHVlOiBWaGRWYWx1ZUNoYW5nZUV2ZW50ID0ge1xuICAgICAgICAgICAgc2VsZWN0ZWQ6IHRoaXMuc2VsZWN0ZWRJdGVtcyxcbiAgICAgICAgICAgIGNvbmRpdGlvbnM6IHRoaXMudmFsaWRDb25kaXRpb25zXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5faW50ZXJuYWxMb2FkaW5nU3RhdGUgPSB0cnVlO1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMuX2dldFZhbGlkYXRvckZ1bmN0aW9uKHZhbHVlKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW50ZXJuYWxMb2FkaW5nU3RhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGZpbHRlcigocikgPT4gciksXG4gICAgICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZvcm1hdFRva2VuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybWF0VG9rZW4odmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZURpYWxvZz8uY2xvc2UodmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGlkZSBhZHZhbmNlZCBzZWFyY2ggb24gbW9iaWxlIHZpZXcgYW5kIGlmIGl0J3Mgb3BlbmVkXG4gICAgICogQ2xvc2UgZGlhbG9nIHdpdGggbnVsbCB2YWx1ZTtcbiAgICAgKi9cbiAgICBkaXNtaXNzKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5tb2JpbGUgJiYgdGhpcy5pc09wZW5BZHZhbmNlZCkge1xuICAgICAgICAgICAgdGhpcy5pc09wZW5BZHZhbmNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zd2l0Y2hUYWIoVmhkVGFiLnNlbGVjdEZyb21MaXN0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRWYWx1ZSA9IHRoaXMuX3ByZXZTdGF0ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZURpYWxvZykge1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlRGlhbG9nLmNsb3NlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF90cmFja0J5U2VsZWN0ZWRGbihfaW5kZXg6IG51bWJlciwgaXRlbTogVCk6IG51bWJlciB8IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBpdGVtICYmIGl0ZW1bdGhpcy51bmlxdWVLZXldO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3RyYWNrQnlGaWx0ZXJGbihfaW5kZXg6IG51bWJlciwgaXRlbTogVmhkRmlsdGVyKTogbnVtYmVyIHwgc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0gJiYgaXRlbS5rZXk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfdHJhY2tCeUNvbmRpdGlvbkZuKF9pbmRleDogbnVtYmVyLCBpdGVtOiBCYXNlRW50aXR5KTogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0gPyBpdGVtLnZhbHVlICsgaXRlbS52YWx1ZVRvICsgaXRlbS5zdHJhdGVneSArIGl0ZW0ua2V5IDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb25TZWxlY3QoJGV2ZW50OiBUW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY3VycmVudFZhbHVlLnNlbGVjdGVkID0gJGV2ZW50O1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgaWYgKHRoaXMuc2VhcmNoU2VsZWN0aW9uID09PSAnb25jZScpIHtcbiAgICAgICAgICAgIHRoaXMuc3VjY2VzcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvbkNvbmRpdGlvbkNoYW5nZSgkZXZlbnQ6IEJhc2VFbnRpdHlbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jdXJyZW50VmFsdWUuY29uZGl0aW9ucyA9ICRldmVudDtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICB0b2dnbGVTaG93bkZpbHRlcnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2hvd25GaWx0ZXJDb3VudCA9XG4gICAgICAgICAgICB0aGlzLm1heFNob3duSW5pdGlhbEZpbHRlcnMgPT09IHRoaXMuc2hvd25GaWx0ZXJDb3VudCA/IEluZmluaXR5IDogdGhpcy5tYXhTaG93bkluaXRpYWxGaWx0ZXJzO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaW5pdFNob3duRmlsdGVycygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zaG93bkZpbHRlckNvdW50ID0gdGhpcy5tYXhTaG93bkluaXRpYWxGaWx0ZXJzIHx8IEluZmluaXR5O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0VmFsaWRDb25kaXRpb24oaXRlbXM6IEJhc2VFbnRpdHlbXSA9IFtdKTogQmFzZUVudGl0eVtdIHtcbiAgICAgICAgcmV0dXJuIGl0ZW1zLmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGl0ZW0uc3RyYXRlZ3kgPT09IFZoZERlZmluZUluY2x1ZGVTdHJhdGVneS5lbXB0eSB8fFxuICAgICAgICAgICAgICAgIGl0ZW0uc3RyYXRlZ3kgPT09IFZoZERlZmluZUV4Y2x1ZGVTdHJhdGVneS5ub3RfZW1wdHlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGl0ZW0uc3RyYXRlZ3kgPT09IFZoZERlZmluZUluY2x1ZGVTdHJhdGVneS5iZXR3ZWVuKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEJvb2xlYW4oaXRlbS52YWx1ZS5sZW5ndGggJiYgaXRlbS52YWx1ZVRvLmxlbmd0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWl0ZW0udmFsaWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gQm9vbGVhbihpdGVtLnZhbHVlLmxlbmd0aCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaW5pdGlhbGl6ZURTKGRzOiBGZHBWYWx1ZUhlbHBEaWFsb2dEYXRhU291cmNlPGFueT4gfCB1bmRlZmluZWQgPSB0aGlzLmRhdGFTb3VyY2UpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcmVzZXRTb3VyY2VTdHJlYW0oKTtcblxuICAgICAgICBpZiAodGhpcy5zaG93U2VsZWN0aW9uVGFiKSB7XG4gICAgICAgICAgICB0aGlzLl9kc1N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgICAgICAgICAgdGhpcy5fZHNTdWJzY3JpcHRpb24uYWRkKFxuICAgICAgICAgICAgICAgIGRzPy5vbkRhdGFSZXF1ZXN0ZWQoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbnRlcm5hbExvYWRpbmdTdGF0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25EYXRhUmVxdWVzdGVkLmVtaXQoKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgdGhpcy5fZHNTdWJzY3JpcHRpb24uYWRkKFxuICAgICAgICAgICAgICAgIGRzPy5vbkRhdGFSZWNlaXZlZCgpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2ludGVybmFsTG9hZGluZ1N0YXRlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZpcnN0TG9hZGluZ0RvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRGF0YVJlY2VpdmVkLmVtaXQoKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgZHNTdWIgPSB0aGlzLm9wZW5EYXRhU3RyZWFtKClcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Rpc3BsYXllZERhdGEgPSBkYXRhLnNsaWNlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLl9kc1N1YnNjcmlwdGlvbi5hZGQoZHNTdWIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gU2F2ZSBwcmV2aW91cyBzdGF0ZSAqL1xuICAgIHByaXZhdGUgX3NhdmVQcmV2aW91c1N0YXRlKCk6IHZvaWQge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGNsb25lRGVlcCh0aGlzLnZhbHVlKTtcbiAgICAgICAgdGhpcy5fY3VycmVudFZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuX3ByZXZTdGF0ZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaW5pdGlhbGl6ZVRhYigpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubW9iaWxlKSB7XG4gICAgICAgICAgICB0aGlzLmlzT3BlbkFkdmFuY2VkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2hvd1NlbGVjdGlvblRhYiAmJiB0aGlzLnNob3dEZWZpbmVUYWIpIHtcbiAgICAgICAgICAgIHRoaXMuc3dpdGNoVGFiKHRoaXMubW9iaWxlID8gdW5kZWZpbmVkIDogdGhpcy5pbml0aWFsVGFiKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNob3dTZWxlY3Rpb25UYWIpIHtcbiAgICAgICAgICAgIHRoaXMuc3dpdGNoVGFiKFZoZFRhYi5zZWxlY3RGcm9tTGlzdCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zaG93RGVmaW5lVGFiKSB7XG4gICAgICAgICAgICB0aGlzLnN3aXRjaFRhYihWaGRUYWIuZGVmaW5lQ29uZGl0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faW5pdFNob3duRmlsdGVycygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuRGlhbG9nRXZlbnRzKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuYWN0aXZlRGlhbG9nKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hY3RpdmVEaWFsb2cuYWZ0ZXJDbG9zZWQucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3Jlc2V0U3RhdGUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZmlsdGVycy5jaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVGaWx0ZXJzKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLl9ydGxTZXJ2aWNlKSB7XG4gICAgICAgICAgICB0aGlzLl9kaXIgPSB0aGlzLl9ydGxTZXJ2aWNlLnJ0bC5nZXRWYWx1ZSgpID8gJ3J0bCcgOiAnbHRyJztcbiAgICAgICAgICAgIHRoaXMuX3J0bFNlcnZpY2UucnRsLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoaXNSdGw6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kaXIgPSBpc1J0bCA/ICdydGwnIDogJ2x0cic7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcmVzZXRTdGF0ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZGVzdHJveWVkLm5leHQoKTtcbiAgICAgICAgdGhpcy5fZGVzdHJveWVkLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuX3Jlc2V0U291cmNlU3RyZWFtKCk7XG4gICAgICAgIHRoaXMuYWN0aXZlRGlhbG9nID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdXBkYXRlRmlsdGVycygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZGlzcGxheWVkRmlsdGVycyA9IHRoaXMuZmlsdGVycy5tYXAoKGUpID0+ICh7XG4gICAgICAgICAgICAuLi5lLFxuICAgICAgICAgICAgbGFiZWw6IGUubGFiZWwgfHwgZS5rZXlcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIHRoaXMuX2hhc0FkdmFuY2VkID0gdGhpcy5fZGlzcGxheWVkRmlsdGVycy5zb21lKChlOiBWaGRGaWx0ZXIpID0+ICEhZS5hZHZhbmNlZCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIG9wZW5EYXRhU3RyZWFtKCk6IE9ic2VydmFibGU8VFtdPiB7XG4gICAgICAgIGlmICh0aGlzLl9kYXRhU291cmNlKSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRhU291cmNlLm1hdGNoKCk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kYXRhU291cmNlLm9wZW4oKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFtkYXRhU291cmNlXSBzb3VyY2UgZGlkIG5vdCBtYXRjaCBhbiBhcnJheSwgT2JzZXJ2YWJsZSwgb3IgRGF0YVNvdXJjZWApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSB0b0RhdGFTdHJlYW0oZHM6IEZkcFZhbHVlSGVscERpYWxvZ0RhdGFTb3VyY2U8VD4pOiBGZHBWYWx1ZUhlbHBEaWFsb2dEYXRhU291cmNlPFQ+IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKGlzRGF0YVNvdXJjZShkcykpIHtcbiAgICAgICAgICAgIHJldHVybiBkcyBhcyBWYWx1ZUhlbHBEaWFsb2dEYXRhU291cmNlPFQ+O1xuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZHMpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEFycmF5VmFsdWVIZWxwRGlhbG9nRGF0YVNvdXJjZTxUPihkcyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNPYnNlcnZhYmxlKGRzKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlVmFsdWVIZWxwRGlhbG9nRGF0YVNvdXJjZTxUPihkcyBhcyBPYnNlcnZhYmxlPFRbXT4pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Jlc2V0U291cmNlU3RyZWFtKCk6IHZvaWQge1xuICAgICAgICBpZiAoaXNEYXRhU291cmNlKHRoaXMuZGF0YVNvdXJjZSkpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9kc1N1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fZHNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBpc1ZhbGlkT3B0aW9ucygpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvd1NlbGVjdGlvblRhYikge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAhIXRoaXMuZGF0YVNvdXJjZSAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiB0aGlzLnVuaXF1ZUtleSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgICAgICAodHlwZW9mIHRoaXMudG9rZW5WaWV3RmllbGQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB0aGlzLnRva2VuaXplckZuID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldFZhbGlkYXRvckZ1bmN0aW9uKHZhbHVlOiBWaGRWYWx1ZUNoYW5nZUV2ZW50KTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRvciA9IHR5cGVvZiB0aGlzLnRva2VuVmFsaWRhdG9yID09PSAnZnVuY3Rpb24nID8gdGhpcy50b2tlblZhbGlkYXRvcih2YWx1ZSkgOiBvZih0cnVlKTtcblxuICAgICAgICByZXR1cm4gaXNPYnNlcnZhYmxlKHZhbGlkYXRvcikgPyB2YWxpZGF0b3IgOiBvZih2YWxpZGF0b3IpO1xuICAgIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSBsZXQtZGlhbG9nIGxldC1kaWFsb2dDb25maWc9XCJkaWFsb2dDb25maWdcIiAjY29udGFpbmVyPlxuICAgIDxmZC1kaWFsb2cgW2RpYWxvZ0NvbmZpZ109XCJkaWFsb2dDb25maWdcIiBbZGlhbG9nUmVmXT1cImRpYWxvZ1wiPlxuICAgICAgICA8ZmQtZGlhbG9nLWhlYWRlciBbZGlyXT1cIl9kaXJcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBmZGtUZW1wbGF0ZT1cImhlYWRlclwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtb2JpbGUgPyBtb2JpbGVEaWFsb2dUaXRsZSA6IGRlc2t0b3BEaWFsb2dUaXRsZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9mZC1kaWFsb2ctaGVhZGVyPlxuICAgICAgICA8ZmQtZGlhbG9nLWJvZHkgW2Rpcl09XCJfZGlyXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIW1vYmlsZVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhZHZhbmNlZFNlYXJjaENvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPGRpdiBmZC1zY3JvbGxiYXIgW292ZXJyaWRlVGFiaW5kZXhdPVwiZmFsc2VcIiBjbGFzcz1cImZkcC12YWx1ZS1oZWxwLWRpYWxvZ19fY29udGVudC1ob2xkZXJcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibW9iaWxlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhZHZhbmNlZFNlYXJjaENvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZFRhYiA9PT0gX3RhYlR5cGVzLnNlbGVjdEZyb21MaXN0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzZWxlY3Rpb25Db250ZW50XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRUYWIgPT09IF90YWJUeXBlcy5kZWZpbmVDb25kaXRpb25zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkZWZpbmVDb25kaXRpb25zQ29udGVudFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZmQtZGlhbG9nLWJvZHk+XG4gICAgICAgIDxmZC1kaWFsb2ctZm9vdGVyIFtkaXJdPVwiX2RpclwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGZka1RlbXBsYXRlPVwiZm9vdGVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkcC12YWx1ZS1oZWxwLWRpYWxvZ19fcm93IGZkcC12YWx1ZS1oZWxwLWRpYWxvZ19fc2VsZWN0aW9uLXJvd1wiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ3BsYXRmb3JtVkhELnNlbGVjdGVkQW5kQ29uZGl0aW9uTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFpc01vYmlsZUFkdmFuY2VkU2VhcmNoQWN0aXZlXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxoNSBmZC10aXRsZSBjbGFzcz1cInNlbGVjdGVkLWFuZC1jb25kaXRpb24tdGl0bGVcIiBbaWRdPVwiaWQgKyAnLXNlbGVjdGVkLWl0ZW0nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzU2VsZWN0ZWRBbmRDb25kaXRpb25zOyBlbHNlIG5vSXRlbXNQYW5lbFRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ3BsYXRmb3JtVkhELnNlbGVjdGVkQW5kQ29uZGl0aW9uTGFiZWwnIHwgZmRUcmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoe3sgc2VsZWN0ZWRJdGVtcy5sZW5ndGggKyB2YWxpZENvbmRpdGlvbnMubGVuZ3RoIH19KVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvaDU+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZkcC12YWx1ZS1oZWxwLWRpYWxvZ19fdG9rZW5zLXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmZHAtdmFsdWUtaGVscC1kaWFsb2dfX3Rva2Vuc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU2VsZWN0ZWQgaXRlbXMgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZkLXRva2VuaXplcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZkLXRva2VuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZC10b29sYmFyLWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkT3ZlcmZsb3dQcmlvcml0eT1cImhpZ2hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZHAtdmFsdWUtaGVscC1kaWFsb2dfX3NlbGVjdGlvbi10b2tlblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25DbG9zZUNsaWNrKT1cInJlbW92ZVNlbGVjdGVkKHNlbGVjdGVkSW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpdGVtIG9mIHNlbGVjdGVkSXRlbXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggYXMgc2VsZWN0ZWRJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFja0J5OiBfdHJhY2tCeVNlbGVjdGVkRm5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+e3sgISF0b2tlbml6ZXJGbiA/IChpdGVtIHwgZGlzcGxheUZuUGlwZSA6IHRva2VuaXplckZuKSA6IGl0ZW1bdG9rZW5WaWV3RmllbGRdIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmQtdG9rZW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC10b2tlblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmQtdG9vbGJhci1pdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZE92ZXJmbG93UHJpb3JpdHk9XCJoaWdoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmRwLXZhbHVlLWhlbHAtZGlhbG9nX19zZWxlY3Rpb24tdG9rZW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2xvc2VDbGljayk9XCJyZW1vdmVDb25kaXRpb24oY29uZGl0aW9uSW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpdGVtIG9mIHZhbGlkQ29uZGl0aW9ucztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCBhcyBjb25kaXRpb25JbmRleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFja0J5OiBfdHJhY2tCeUNvbmRpdGlvbkZuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29uZGl0aW9uVmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGl0ZW06IGl0ZW0gfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmQtdG9rZW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmZC1mb3JtLWNvbnRyb2wgZmQtdG9rZW5pemVyLWlucHV0IFtkaXNhYmxlZF09XCIhaGFzU2VsZWN0ZWRBbmRDb25kaXRpb25zXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZkLXRva2VuaXplcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGVhclNlbGVjdGVkQW5kQ29uZGl0aW9uSXRlbXMoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZHAtdmFsdWUtaGVscC1kaWFsb2dfX3Rva2Vucy1jbGVhclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFoYXNTZWxlY3RlZEFuZENvbmRpdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ3BsYXRmb3JtVkhELmZvb3RlckNsZWFyU2VsZWN0ZWRUaXRsZScgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGg9XCJkZWNsaW5lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidwbGF0Zm9ybVZIRC5mb290ZXJDbGVhclNlbGVjdGVkQXJpYUxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZkcC12YWx1ZS1oZWxwLWRpYWxvZ19fYWN0aW9ucy1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWdvLWFkdmFuY2VkXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ3BsYXRmb3JtVkhELnNlYXJjaEJ1dHRvbkxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZkVHlwZT1cImVtcGhhc2l6ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJtb2JpbGUgJiYgaXNPcGVuQWR2YW5jZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlYXJjaEFkdmFuY2VkKClcIlxuICAgICAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1zdWNjZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJsb2FkaW5nU3RhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidwbGF0Zm9ybVZIRC5zdWNjZXNzQnV0dG9uTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZmRUeXBlPVwiZW1waGFzaXplZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInNlbGVjdGVkVGFiICE9PSBfdGFiVHlwZXMuYWR2YW5jZWRTZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInN1Y2Nlc3MoKVwiXG4gICAgICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWRpc21pc3MtZGlhbG9nXG4gICAgICAgICAgICAgICAgICAgICAgICBmZC1kaWFsb2ctZGVjaXNpdmUtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ3BsYXRmb3JtVkhELmNhbmNlbEJ1dHRvbkxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkaXNtaXNzKClcIlxuICAgICAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2ZkLWRpYWxvZy1mb290ZXI+XG4gICAgPC9mZC1kaWFsb2c+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI25vSXRlbXNQYW5lbFRpdGxlPlxuICAgIHt7ICdwbGF0Zm9ybVZIRC5zZWxlY3RlZEVtcHR5TGFiZWwnIHwgZmRUcmFuc2xhdGUgfX1cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjYWR2YW5jZWRTZWFyY2hDb250ZW50PlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1NlbGVjdGlvblRhYlwiPlxuICAgICAgICA8Zm9ybSBjbGFzcz1cImZkcC12YWx1ZS1oZWxwLWRpYWxvZ19fcm93IGZkcC12YWx1ZS1oZWxwLWRpYWxvZ19fYWR2YW5jZWQtc2VhcmNoXCIgW2lkXT1cIidhZHZhbmNlZC1zZWFyY2gtJyArIGlkXCI+XG4gICAgICAgICAgICA8ZmQtbGF5b3V0LWdyaWQgKm5nSWY9XCIhbW9iaWxlIHx8IChtb2JpbGUgJiYgIWlzT3BlbkFkdmFuY2VkKVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgZmRMYXlvdXRHcmlkUm93PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IFtmZExheW91dEdyaWRDb2xdPVwiMTJcIiBbY29sTWRdPVwiMTJcIiBbY29sTGddPVwibW9iaWxlID8gMTIgOiA2XCIgW2NvbFhsXT1cIm1vYmlsZSA/IDEyIDogNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGZkcC1zZWFyY2gtZmllbGRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ3BsYXRmb3JtVkhELnNlYXJjaFBsYWNlaG9sZGVyJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VhcmNoU3VibWl0KT1cInNlYXJjaCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXRDaGFuZ2UpPVwiX21haW5TZWFyY2ggPSAkZXZlbnQudGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9mZHAtc2VhcmNoLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBbZmRMYXlvdXRHcmlkQ29sXT1cIjEyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xNZF09XCIxMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY29sTGddPVwibW9iaWxlID8gMTIgOiA2XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xYbF09XCJtb2JpbGUgPyAxMiA6IDZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJfaGFzQWR2YW5jZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZHAtdmFsdWUtaGVscC1kaWFsb2dfX2FkdmFuY2VkLWFjdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZmQtdG9vbGJhciBbY2xlYXJCb3JkZXJdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC10b29sYmFyLXNwYWNlcj48L2ZkLXRvb2xiYXItc3BhY2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmQtdG9vbGJhci1pdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiX2hhc0FkdmFuY2VkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vYmlsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ3BsYXRmb3JtVkhELnNlYXJjaEFkdmFuY2VkU2VhcmNoTGFiZWwnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpc09wZW5BZHZhbmNlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ3BsYXRmb3JtVkhELnNlYXJjaEhpZGVBZHZhbmNlZFNlYXJjaExhYmVsJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ3BsYXRmb3JtVkhELnNlYXJjaFNob3dBZHZhbmNlZFNlYXJjaExhYmVsJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB8IGZkVHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVBZHZhbmNlZFNlYXJjaCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZC10b29sYmFyLWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ3BsYXRmb3JtVkhELnNlYXJjaEJ1dHRvbkxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRUeXBlPVwiZW1waGFzaXplZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCIncGxhdGZvcm1WSEQuc2VhcmNoQnV0dG9uTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZmlsdGVyKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZmQtdG9vbGJhcj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2ZkLWxheW91dC1ncmlkPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIFtpZF09XCInYWR2YW5jZWQtc2VhcmNoLWNvbnRlbnQtJyArIGlkXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImlzT3BlbkFkdmFuY2VkICYmIF9oYXNBZHZhbmNlZFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmZHAtdmFsdWUtaGVscC1kaWFsb2dfX2FkdmFuY2VkLWZpbHRlcnNcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxmZC1idXN5LWluZGljYXRvciBbbG9hZGluZ109XCJsb2FkaW5nU3RhdGUgJiYgX2ZpcnN0TG9hZGluZ0RvbmVcIiBbYmxvY2tdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZmQtbGF5b3V0LWdyaWRcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiX2ZpcnN0TG9hZGluZ0RvbmU7IGVsc2UgZmlsdGVyc0xvYWRpbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZkcC12YWx1ZS1oZWxwLWRpYWxvZ19fd2l0aC10b2dnbGUtYWxsXT1cImZpbHRlcnMubGVuZ3RoID4gbWF4U2hvd25Jbml0aWFsRmlsdGVyc1wiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZmRMYXlvdXRHcmlkUm93PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZmlsdGVyIG9mIF9kaXNwbGF5ZWRGaWx0ZXJzIHwgc2xpY2UgOiAwIDogc2hvd25GaWx0ZXJDb3VudCArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFja0J5OiBfdHJhY2tCeUZpbHRlckZuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsdGVyLmFkdmFuY2VkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtmZExheW91dEdyaWRDb2xdPVwiMTJcIiBbY29sTWRdPVwiMTJcIiBbY29sTGddPVwiNlwiIFtjb2xYbF09XCIzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZmQtZm9ybS1ncm91cF9faGVhZGVyXCIgZmQtZm9ybS1sYWJlbCBbZm9yXT1cIidpbnB1dCcgKyBmaWx0ZXIua2V5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPnt7IGZpbHRlci5sYWJlbCB9fTo8L2xhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWx0ZXIuZmlsdGVyRGVmXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZmlsdGVyLmZpbHRlckRlZi50ZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGZpbHRlciB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFmaWx0ZXIuZmlsdGVyRGVmXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmaWx0ZXIudmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmQtZm9ybS1jb250cm9sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCInc2VhcmNoLWJ5LScgKyBmaWx0ZXIubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cIidpbnB1dCcgKyBmaWx0ZXIua2V5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sR3Jvd1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmRMYXlvdXRHcmlkQ29sXT1cIjEyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbE1kXT1cIjEyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbExnXT1cIjZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sWGxdPVwiM1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZmlsdGVycy5sZW5ndGggPiBtYXhTaG93bkluaXRpYWxGaWx0ZXJzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZHAtdmFsdWUtaGVscC1kaWFsb2dfX3RvZ2dsZS1maWx0ZXJzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNob3duRmlsdGVycygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaXNTaG93QWxsRmlsdGVyc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdwbGF0Zm9ybVZIRC5zZWFyY2hIaWRlQWxsQWR2YW5jZWRTZWFyY2hMYWJlbCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAncGxhdGZvcm1WSEQuc2VhcmNoU2hvd0FsbEFkdmFuY2VkU2VhcmNoTGFiZWwnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB8IGZkVHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9mZC1sYXlvdXQtZ3JpZD5cblxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2ZpbHRlcnNMb2FkaW5nPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGZkLXNrZWxldG9uIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMHB4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZzpyZWN0IHg9XCIwXCIgeT1cIjBcIiByeD1cIjRcIiB3aWR0aD1cIjE1JVwiIGhlaWdodD1cIjhcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmc6cmVjdCB4PVwiMFwiIHk9XCIyMFwiIHJ4PVwiNFwiIHdpZHRoPVwiMjUlXCIgaGVpZ2h0PVwiMTZcIiAvPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZzpyZWN0IHg9XCIzNSVcIiB5PVwiMFwiIHJ4PVwiNFwiIHdpZHRoPVwiMTUlXCIgaGVpZ2h0PVwiOFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZzpyZWN0IHg9XCIzNSVcIiB5PVwiMjBcIiByeD1cIjRcIiB3aWR0aD1cIjI1JVwiIGhlaWdodD1cIjE2XCIgLz5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmc6cmVjdCB4PVwiMFwiIHk9XCI2MFwiIHJ4PVwiNFwiIHdpZHRoPVwiMTUlXCIgaGVpZ2h0PVwiOFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZzpyZWN0IHg9XCIwXCIgeT1cIjgwXCIgcng9XCI0XCIgd2lkdGg9XCIyNSVcIiBoZWlnaHQ9XCIxNlwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2ZkLXNrZWxldG9uPlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvZmQtYnVzeS1pbmRpY2F0b3I+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9mb3JtPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNzZWxlY3Rpb25Db250ZW50PlxuICAgIDxmZC1idXN5LWluZGljYXRvclxuICAgICAgICBbbG9hZGluZ109XCJsb2FkaW5nU3RhdGUgJiYgX2ZpcnN0TG9hZGluZ0RvbmVcIlxuICAgICAgICBbYmxvY2tdPVwidHJ1ZVwiXG4gICAgICAgIGNsYXNzPVwiZmRwLXZhbHVlLWhlbHAtZGlhbG9nX190YWJsZS1idXN5LWluZGljYXRvclwiXG4gICAgPlxuICAgICAgICA8ZmRwLXNlbGVjdC10YWJcbiAgICAgICAgICAgIFtzZWxlY3RlZF09XCJzZWxlY3RlZEl0ZW1zXCJcbiAgICAgICAgICAgIFtsb2FkaW5nXT1cImxvYWRpbmdTdGF0ZSAmJiAhX2ZpcnN0TG9hZGluZ0RvbmVcIlxuICAgICAgICAgICAgW3VpZF09XCJpZFwiXG4gICAgICAgICAgICBbZGlzcGxheWVkRGF0YV09XCJfZGlzcGxheWVkRGF0YVwiXG4gICAgICAgICAgICBbdGFiVGl0bGVdPVwic2VsZWN0VGFiVGl0bGUgfHwgKCdwbGF0Zm9ybVZIRC5zZWxlY3RUYWJUaXRsZScgfCBmZFRyYW5zbGF0ZSlcIlxuICAgICAgICAgICAgW21vYmlsZV09XCJtb2JpbGVcIlxuICAgICAgICAgICAgW3NlbGVjdGlvbl09XCJzZWFyY2hTZWxlY3Rpb25cIlxuICAgICAgICAgICAgW2VtcHR5VGFibGVNZXNzYWdlXT1cInNlYXJjaFRhYmxlRW1wdHlNZXNzYWdlIHx8ICgncGxhdGZvcm1WSEQuc2VhcmNoVGFibGVFbXB0eU1lc3NhZ2UnIHwgZmRUcmFuc2xhdGUpXCJcbiAgICAgICAgICAgIFt1bmlxdWVLZXldPVwidW5pcXVlS2V5XCJcbiAgICAgICAgICAgIFtwYWdlU2l6ZV09XCJzZWFyY2hUYWJsZVBhZ2VTaXplXCJcbiAgICAgICAgICAgIFtkZWZhdWx0TW9iaWxlSGVhZGVyc109XCJzZWFyY2hUYWJsZU1vYmlsZUhlYWRlcnNcIlxuICAgICAgICAgICAgW2ZpbHRlcnNdPVwiX2Rpc3BsYXllZEZpbHRlcnNcIlxuICAgICAgICAgICAgW2FsbG93U2VsZWN0QWxsXT1cImFsbG93U2VsZWN0QWxsXCJcbiAgICAgICAgICAgIChzZWxlY3QpPVwib25TZWxlY3QoJGV2ZW50KVwiXG4gICAgICAgID48L2ZkcC1zZWxlY3QtdGFiPlxuICAgIDwvZmQtYnVzeS1pbmRpY2F0b3I+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RlZmluZUNvbmRpdGlvbnNDb250ZW50PlxuICAgIDxkaXYgZmQtc2Nyb2xsYmFyIFtvdmVycmlkZVRhYmluZGV4XT1cImZhbHNlXCI+XG4gICAgICAgIDxmZHAtZGVmaW5lLXRhYlxuICAgICAgICAgICAgW3N0cmF0ZWd5TGFiZWxzXT1cImRlZmluZVN0cmF0ZWd5TGFiZWxzXCJcbiAgICAgICAgICAgIFtjb25kaXRpb25zXT1cImNvbmRpdGlvbkl0ZW1zXCJcbiAgICAgICAgICAgIFt1aWRdPVwiaWRcIlxuICAgICAgICAgICAgW3RhYlRpdGxlXT1cImRlZmluZVRhYlRpdGxlIHx8ICgncGxhdGZvcm1WSEQuZGVmaW5lVGFiVGl0bGUnIHwgZmRUcmFuc2xhdGUpXCJcbiAgICAgICAgICAgIFttb2JpbGVdPVwibW9iaWxlXCJcbiAgICAgICAgICAgIChjb25kaXRpb25DaGFuZ2UpPVwib25Db25kaXRpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgID48L2ZkcC1kZWZpbmUtdGFiPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkaWFsb2dUaXRsZVRleHQ+XG4gICAgPGg1IFthdHRyLmlkXT1cImhlYWRlcklkXCIgZmQtdGl0bGU+e3sgZGlhbG9nVGl0bGUgfX08L2g1PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN0YWJMaW5rIGxldC10aXRsZT1cInRpdGxlXCIgbGV0LXR5cGU9XCJ0eXBlXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkVGFiID09PSB0eXBlICYmIHNob3dTZWxlY3Rpb25UYWIgJiYgc2hvd0RlZmluZVRhYlwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgIGdseXBoPVwibmF2aWdhdGlvbi1sZWZ0LWFycm93XCJcbiAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgIChjbGljayk9XCJzd2l0Y2hUYWIoKVwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiJ3BsYXRmb3JtVkhELnNlbGVjdE1vYmlsZVRhYkJhY2tCdG5UaXRsZScgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgPGg1IGZkLXRpdGxlPnt7IHRpdGxlIH19PC9oNT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRUYWIgIT09IHR5cGVcIj5cbiAgICAgICAgPGFcbiAgICAgICAgICAgIGZkLWxpc3QtbGlua1xuICAgICAgICAgICAgKGNsaWNrKT1cInN3aXRjaFRhYih0eXBlKVwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiJ3BsYXRmb3JtVkhELnNlbGVjdE1vYmlsZVRhYkJ0bk9wZW5EaWFsb2dMYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIGZkLWxpc3QtdGl0bGU+e3sgdGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgICA8aSBmZC1saXN0LWljb24gZ2x5cGg9XCJuYXZpZ2F0aW9uLXJpZ2h0LWFycm93XCI+PC9pPlxuICAgICAgICA8L2E+XG4gICAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2FkdmFuY2VkSGVhZGVyPlxuICAgIDxidXR0b24gZmQtYnV0dG9uIGdseXBoPVwibmF2aWdhdGlvbi1sZWZ0LWFycm93XCIgZmRUeXBlPVwidHJhbnNwYXJlbnRcIiAoY2xpY2spPVwidG9nZ2xlQWR2YW5jZWRTZWFyY2goKVwiPjwvYnV0dG9uPlxuICAgIDxoNSBmZC10aXRsZT57eyAncGxhdGZvcm1WSEQuc2VhcmNoQWR2YW5jZWRTZWFyY2hMYWJlbCcgfCBmZFRyYW5zbGF0ZSB9fTwvaDU+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2Rlc2t0b3BEaWFsb2dUaXRsZT5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZGlhbG9nVGl0bGVUZXh0XCI+PC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRlc2t0b3BUYWJzXCI+PC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI21vYmlsZURpYWxvZ1RpdGxlPlxuICAgIDxkaXYgY2xhc3M9XCJmZHAtdmFsdWUtaGVscC1kaWFsb2dfX21vYmlsZS10aXRsZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzU2VsZWN0ZWRUYWI7IGVsc2UgZGlhbG9nVGl0bGVUZXh0XCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2VsZWN0ZWRUYWJIZWFkZXJcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1vYmlsZVRhYnNcIj48L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGVza3RvcFRhYnM+XG4gICAgPG5hdiBmZC10YWItbmF2IGNsYXNzPVwiZmRwLXZhbHVlLWhlbHAtZGlhbG9nX190YWJzXCIgKm5nSWY9XCJzaG93U2VsZWN0aW9uVGFiICYmIHNob3dEZWZpbmVUYWJcIj5cbiAgICAgICAgPGRpdiBmZC10YWItaXRlbSAoY2xpY2spPVwic3dpdGNoVGFiKF90YWJUeXBlcy5zZWxlY3RGcm9tTGlzdClcIiAqbmdJZj1cInNob3dTZWxlY3Rpb25UYWJcIj5cbiAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgZmQtdGFiLWxpbmtcbiAgICAgICAgICAgICAgICBbYWN0aXZlXT1cInNlbGVjdGVkVGFiID09PSBfdGFiVHlwZXMuc2VsZWN0RnJvbUxpc3RcIlxuICAgICAgICAgICAgICAgIFt0YWJpbmRleF09XCJzZWxlY3RlZFRhYiA9PT0gX3RhYlR5cGVzLnNlbGVjdEZyb21MaXN0ID8gJzAnIDogJy0xJ1wiXG4gICAgICAgICAgICAgICAgPjxzcGFuIGZkLXRhYi10YWc+e3sgc2VsZWN0VGFiVGl0bGUgfHwgKCdwbGF0Zm9ybVZIRC5zZWxlY3RUYWJUaXRsZScgfCBmZFRyYW5zbGF0ZSkgfX08L3NwYW4+PC9hXG4gICAgICAgICAgICA+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGZkLXRhYi1pdGVtIChjbGljayk9XCJzd2l0Y2hUYWIoX3RhYlR5cGVzLmRlZmluZUNvbmRpdGlvbnMpXCIgKm5nSWY9XCJzaG93RGVmaW5lVGFiXCI+XG4gICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgIGZkLXRhYi1saW5rXG4gICAgICAgICAgICAgICAgW2FjdGl2ZV09XCJzZWxlY3RlZFRhYiA9PT0gX3RhYlR5cGVzLmRlZmluZUNvbmRpdGlvbnNcIlxuICAgICAgICAgICAgICAgIFt0YWJpbmRleF09XCJzZWxlY3RlZFRhYiA9PT0gX3RhYlR5cGVzLmRlZmluZUNvbmRpdGlvbnMgPyAnMCcgOiAnLTEnXCJcbiAgICAgICAgICAgICAgICA+PHNwYW4gZmQtdGFiLXRhZz57eyBkZWZpbmVUYWJUaXRsZSB8fCAoJ3BsYXRmb3JtVkhELmRlZmluZVRhYlRpdGxlJyB8IGZkVHJhbnNsYXRlKSB9fTwvc3Bhbj48L2FcbiAgICAgICAgICAgID5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uYXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI21vYmlsZVRhYnM+XG4gICAgPGRpdiAqbmdJZj1cIiFoYXNTZWxlY3RlZFRhYiAmJiBzaG93U2VsZWN0aW9uVGFiICYmIHNob3dEZWZpbmVUYWJcIj5cbiAgICAgICAgPGRpdiBmZC1iYXIgW2luUGFnZV09XCJ0cnVlXCIgKm5nSWY9XCJzaG93U2VsZWN0aW9uVGFiXCI+XG4gICAgICAgICAgICA8ZGl2IGZkLWJhci1sZWZ0PlxuICAgICAgICAgICAgICAgIDxmZC1iYXItZWxlbWVudD5cbiAgICAgICAgICAgICAgICAgICAge3sgc2VsZWN0VGFiVGl0bGUgfHwgKCdwbGF0Zm9ybVZIRC5zZWxlY3RUYWJUaXRsZScgfCBmZFRyYW5zbGF0ZSkgfX1cbiAgICAgICAgICAgICAgICA8L2ZkLWJhci1lbGVtZW50PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGZkLWJhci1yaWdodD5cbiAgICAgICAgICAgICAgICA8ZmQtYmFyLWVsZW1lbnQ+XG4gICAgICAgICAgICAgICAgICAgIDxmZC1idXR0b24tYmFyXG4gICAgICAgICAgICAgICAgICAgICAgICBnbHlwaD1cIm5hdmlnYXRpb24tcmlnaHQtYXJyb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInN3aXRjaFRhYihfdGFiVHlwZXMuc2VsZWN0RnJvbUxpc3QpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGxhdGZvcm1WSEQuc2VsZWN0TW9iaWxlVGFiVGl0bGUnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZmRUcmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogeyB0aXRsZTogc2VsZWN0VGFiVGl0bGUgfHwgKCdwbGF0Zm9ybVZIRC5zZWxlY3RUYWJUaXRsZScgfCBmZFRyYW5zbGF0ZSkgfVxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvZmQtYnV0dG9uLWJhcj5cbiAgICAgICAgICAgICAgICA8L2ZkLWJhci1lbGVtZW50PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGZkLWJhciBbaW5QYWdlXT1cInRydWVcIiAqbmdJZj1cInNob3dEZWZpbmVUYWJcIj5cbiAgICAgICAgICAgIDxkaXYgZmQtYmFyLWxlZnQ+XG4gICAgICAgICAgICAgICAgPGZkLWJhci1lbGVtZW50PlxuICAgICAgICAgICAgICAgICAgICB7eyBkZWZpbmVUYWJUaXRsZSB8fCAoJ3BsYXRmb3JtVkhELmRlZmluZVRhYlRpdGxlJyB8IGZkVHJhbnNsYXRlKSB9fVxuICAgICAgICAgICAgICAgIDwvZmQtYmFyLWVsZW1lbnQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgZmQtYmFyLXJpZ2h0PlxuICAgICAgICAgICAgICAgIDxmZC1iYXItZWxlbWVudD5cbiAgICAgICAgICAgICAgICAgICAgPGZkLWJ1dHRvbi1iYXJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoPVwibmF2aWdhdGlvbi1yaWdodC1hcnJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BsYXRmb3JtVkhELnNlbGVjdE1vYmlsZVRhYlRpdGxlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGZkVHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHsgdGl0bGU6IGRlZmluZVRhYlRpdGxlIHx8ICgncGxhdGZvcm1WSEQuZGVmaW5lVGFiVGl0bGUnIHwgZmRUcmFuc2xhdGUpIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic3dpdGNoVGFiKF90YWJUeXBlcy5kZWZpbmVDb25kaXRpb25zKVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPC9mZC1idXR0b24tYmFyPlxuICAgICAgICAgICAgICAgIDwvZmQtYmFyLWVsZW1lbnQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3NlbGVjdGVkVGFiSGVhZGVyPlxuICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cInNlbGVjdGVkVGFiXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIl90YWJUeXBlcy5zZWxlY3RGcm9tTGlzdFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgIHRhYkxpbms7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBzZWxlY3RUYWJUaXRsZSB8fCAoJ3BsYXRmb3JtVkhELnNlbGVjdFRhYlRpdGxlJyB8IGZkVHJhbnNsYXRlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHNlbGVjdGVkVGFiXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiX3RhYlR5cGVzLmFkdmFuY2VkU2VhcmNoXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYWR2YW5jZWRIZWFkZXJcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIl90YWJUeXBlcy5kZWZpbmVDb25kaXRpb25zXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgdGFiTGluaztcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGRlZmluZVRhYlRpdGxlIHx8ICgncGxhdGZvcm1WSEQuZGVmaW5lVGFiVGl0bGUnIHwgZmRUcmFuc2xhdGUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogc2VsZWN0ZWRUYWJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjb25kaXRpb25WYWx1ZSBsZXQtaXRlbT1cIml0ZW1cIj5cbiAgICA8c3BhbiAqbmdJZj1cIml0ZW0uc3RyYXRlZ3kgIT09ICdlbXB0eScgJiYgaXRlbS5zdHJhdGVneSAhPT0gJ25vdF9lbXB0eSc7IGVsc2UgZW1wdHlDb25kaXRpb25cIj5cbiAgICAgICAge3sgaXRlbSB8IGRpc3BsYXlGblBpcGUgOiBjb25kaXRpb25EaXNwbGF5Rm4gOiBfZGlzcGxheWVkRmlsdGVycyB9fVxuICAgIDwvc3Bhbj5cbiAgICA8bmctdGVtcGxhdGUgI2VtcHR5Q29uZGl0aW9uPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS5zdHJhdGVneSA9PT0gJ25vdF9lbXB0eSc7IGVsc2UgZW1wdHlDb25kaXRpb25UZXh0XCI+XG4gICAgICAgICAgICAhKDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJlbXB0eUNvbmRpdGlvblRleHRcIj48L25nLWNvbnRhaW5lcj4pXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctdGVtcGxhdGU+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2VtcHR5Q29uZGl0aW9uVGV4dD4gJmx0O3t7ICdwbGF0Zm9ybVZIRC5zZWxlY3RNb2JpbGVDb25kaXRpb25FbXB0eScgfCBmZFRyYW5zbGF0ZSB9fSZndDsgPC9uZy10ZW1wbGF0ZT5cbiJdfQ==