gamma-app-controller 1.1.1 → 1.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/application-controller/application-dataset-component/create-dataset-sql/create-dataset-sql.component.mjs +16 -6
- package/esm2020/lib/application-controller/common.mjs +7 -12
- package/esm2020/lib/application-controller/shared/advanced-component/gamma-advance-operator-table/gamma-advance-operator-table.component.mjs +14 -3
- package/esm2020/lib/application-controller/shared/advanced-component/gamma-table-clumn-bar-chart/gamma-table-clumn-bar-chart.component.mjs +14 -3
- package/esm2020/lib/application-controller/shared/advanced-component/gamma-table-with-percentage/gamma-table-with-percentage.component.mjs +20 -5
- package/esm2020/lib/application-controller/support-components/dash-table/dash-table.component.mjs +4 -3
- package/esm2020/lib/application-controller/support-components/table-with-bar/table-with-bar.component.mjs +4 -3
- package/fesm2015/gamma-app-controller.mjs +72 -28
- package/fesm2015/gamma-app-controller.mjs.map +1 -1
- package/fesm2020/gamma-app-controller.mjs +72 -28
- package/fesm2020/gamma-app-controller.mjs.map +1 -1
- package/lib/application-controller/shared/advanced-component/gamma-advance-operator-table/gamma-advance-operator-table.component.d.ts +2 -0
- package/lib/application-controller/shared/advanced-component/gamma-table-clumn-bar-chart/gamma-table-clumn-bar-chart.component.d.ts +2 -0
- package/lib/application-controller/shared/advanced-component/gamma-table-with-percentage/gamma-table-with-percentage.component.d.ts +2 -0
- package/lib/application-controller/support-components/dash-table/dash-table.component.d.ts +1 -0
- package/lib/application-controller/support-components/table-with-bar/table-with-bar.component.d.ts +1 -0
- package/package.json +1 -1
|
@@ -47,6 +47,7 @@ export class TableWithBarComponent {
|
|
|
47
47
|
"file_name": "",
|
|
48
48
|
"numberOfRow": 10,
|
|
49
49
|
"pageInfo": true,
|
|
50
|
+
"tableHeight": 'auto',
|
|
50
51
|
"allowedPageSizes": [
|
|
51
52
|
10,
|
|
52
53
|
20,
|
|
@@ -257,14 +258,14 @@ export class TableWithBarComponent {
|
|
|
257
258
|
}
|
|
258
259
|
}
|
|
259
260
|
TableWithBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TableWithBarComponent, deps: [{ token: i1.CommonService }, { token: i0.ChangeDetectorRef }, { token: i2.ApplicationContentService }, { token: i3.ToastrService }], target: i0.ɵɵFactoryTarget.Component });
|
|
260
|
-
TableWithBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TableWithBarComponent, selector: "app-table-with-bar", inputs: { chartconfigData: ["datasetmodal", "chartconfigData"] }, outputs: { createOtherComponentView: "createOtherComponentView" }, ngImport: i0, template: "<div class=\"flex flex-wrap\">\n <div class=\"w-full mx-2 border-r\">\n <ng-container *ngIf=\"!isJsonPreview\">\n <pre><code>{{jsaonDatasource | json}}</code></pre>\n </ng-container>\n <ng-container *ngIf=\"isJsonPreview\">\n <!-- <app-gamma-table-with-percentage [chartDataSource]=\"chartDataSourceForMap\"></app-gamma-table-with-percentage> -->\n <app-gamma-table-clumn-bar-chart [chartDataSource]=\"chartDataSourceForMap\"></app-gamma-table-clumn-bar-chart>\n\n <div #dynamicContainer></div>\n\n </ng-container>\n </div>\n <div class=\"w-full mx-2\">\n\n <div class=\"mb-4 border-b border-gray-200 dark:border-gray-700\">\n <ul class=\"flex flex-wrap -mb-px text-sm font-medium text-center\" role=\"tablist\">\n <li class=\"me-2\" role=\"presentation\">\n <button class=\"inline-block p-4 border-b-2 rounded-t-lg\" [ngClass]=\"{ \n 'text-purple-600 border-purple-600 dark:text-purple-500 dark:border-purple-500': activeTab === 'basic',\n 'text-gray-500 dark:text-gray-400 border-transparent': activeTab !== 'basic' \n }\" (click)=\"setActiveTab('basic')\" type=\"button\" role=\"tab\">\n Basic\n </button>\n </li>\n <li class=\"me-2\" role=\"presentation\">\n <button class=\"inline-block p-4 border-b-2 rounded-t-lg\" [ngClass]=\"{ \n 'text-purple-600 border-purple-600 dark:text-purple-500 dark:border-purple-500': activeTab === 'columns',\n 'text-gray-500 dark:text-gray-400 border-transparent': activeTab !== 'columns' \n }\" (click)=\"setActiveTab('columns')\" type=\"button\" role=\"tab\">\n Columns\n </button>\n </li>\n <li class=\"me-2\" role=\"presentation\">\n <button class=\"inline-block p-4 border-b-2 rounded-t-lg\" [ngClass]=\"{\n 'text-purple-600 border-purple-600 dark:text-purple-500 dark:border-purple-500': activeTab === 'properties',\n 'text-gray-500 dark:text-gray-400 border-transparent': activeTab !== 'properties'\n }\" (click)=\"setActiveTab('properties')\" type=\"button\" role=\"tab\">\n Properties\n </button>\n </li>\n\n </ul>\n </div>\n\n <div id=\"default-styled-tab-content\">\n <div *ngIf=\"activeTab === 'basic'\">\n <div class=\"flex flex-col flex-auto min-w-0 my-2\">\n <div class=\"text-sm py-1 font-extrabold border-b bg-gray-700 text-white px-2\"> Filter Title\n Config\n </div>\n <div class=\"pt-2 border-x border-b \">\n <div class=\"my-2 flex justify-between\">\n <div class=\"px-1 mb-1 w-full\">\n <div class=\"text-md mb-1\"> Title</div>\n <dx-text-box [(ngModel)]=\"tableDataConfig.commonConfig.title\"></dx-text-box>\n </div>\n <div class=\"px-1 mb-1 w-full\">\n <div class=\"text-md mb-1\"> Data Field</div>\n <dx-select-box [searchEnabled]=\"true\" [items]=\"configColume\"\n [(ngModel)]=\"tableDataConfig.commonConfig.dataField\"></dx-select-box>\n </div>\n <!-- <div class=\"px-1 mb-1\">\n <div class=\"text-md mb-1\"> Checked Key</div>\n <dx-select-box [searchEnabled]=\"true\" [items]=\"configColume\"\n [(ngModel)]=\"tableDataConfig.commonConfig.dataField\"></dx-select-box>\n </div> -->\n <!-- <div class=\"px-4 mt-6 w-full\">\n <dx-check-box [value]=\"tableDataConfig.commonConfig.isSearchBox\"\n [(ngModel)]=\"tableDataConfig.commonConfig.isSearchBox\"\n text=\"Search Box\"></dx-check-box>\n\n </div> -->\n <div class=\"px-1 mb-1 w-full\">\n <div class=\"text-md mb-2\"> Display Formate </div>\n <dx-select-box [items]=\"['daily','hourly','monthly']\"\n [(ngModel)]=\"table_columns_config.kpiConfig.formate\"\n [readOnly]=\"false\"></dx-select-box>\n </div>\n <div class=\"px-1 mb-1 w-full\">\n <div class=\"text-md mb-2\"> Key To Pass </div>\n <dx-tag-box [items]=\"configColume\"\n [(ngModel)]=\"table_columns_config.kpiConfig.keyToPass\"></dx-tag-box>\n </div>\n </div>\n </div>\n </div>\n <div class=\"flex flex-col flex-auto min-w-0 my-2\">\n <div class=\"text-sm py-1 font-extrabold border-b bg-gray-700 text-white px-2\"> Table Config\n </div>\n <div class=\"flex flse-row py-3 border-x border-b \">\n <div class=\"px-1 mb-2 mt-8 w-full\">\n <dx-check-box [value]=\"tableDataConfig.searchPanel\"\n [(ngModel)]=\"tableDataConfig.searchPanel\" text=\"Search Panel\"></dx-check-box>\n </div>\n <div class=\" px-1 mb-2 w-full\">\n <div class=\"text-md mb-2\">File Name</div>\n <dx-text-box [(ngModel)]=\"tableDataConfig.file_name\"></dx-text-box>\n </div>\n <div class=\"px-1 mb-2 w-full\">\n <div class=\"text-md mb-2\"> Number Of Row</div>\n <dx-number-box [value]=\"tableDataConfig.numberOfRow\"\n [(ngModel)]=\"tableDataConfig.numberOfRow\"></dx-number-box>\n </div>\n <div class=\"px-1 mb-2 mt-8 w-full\">\n <dx-check-box [value]=\"tableDataConfig.pageInfo\" [(ngModel)]=\"tableDataConfig.pageInfo\"\n text=\"Page Info\"></dx-check-box>\n </div>\n\n </div>\n\n </div>\n\n\n </div>\n <div *ngIf=\"activeTab === 'columns'\">\n <div class=\"h-full overflow-x-auto\">\n <div class=\"flex flex-col flex-auto min-w-0\">\n\n <div class=\"pt-2 border-x border-b \">\n <div class=\"my-2 border-b flex flex-row\"\n *ngFor=\"let item of tableDataConfig.columns; let i = index;\">\n <div class=\"px-1 mb-2 mt-6 w-full\">\n <dx-check-box [value]=\"item.visible\" [(ngModel)]=\"item.visible\"\n text=\"Visiblity\"></dx-check-box>\n </div>\n\n <div class=\"px-1 mb-2 w-full\">\n <div class=\"text-md mb-2\"> Value Field</div>\n <dx-select-box [searchEnabled]=\"true\" [items]=\"configColume\"\n [(ngModel)]=\"item.dataField\"></dx-select-box>\n </div>\n <div class=\"px-1 mb-2 w-full\">\n <div class=\"text-md mb-2\"> Caption</div>\n <dx-text-box [(ngModel)]=\"item.caption\"></dx-text-box>\n </div>\n <div class=\"px-2 mb-2 w-full\">\n <div class=\"text-md mb-2\"> UI Function</div>\n <dx-select-box [items]=\"enrichNameList\" [(ngModel)]=\"item.enrichName\"\n [searchEnabled]=\"true\"></dx-select-box>\n </div>\n <div class=\"px-1 mb-2 mt-6 w-full\">\n <dx-check-box [value]=\"item.isShowBar\" [(ngModel)]=\"item.isShowBar\"\n text=\"Allow Bar\"></dx-check-box>\n </div>\n\n <div class=\"px-1 mb-2 w-full\">\n <div class=\"text-md mb-2\">Color</div>\n <dx-color-box [(ngModel)]=\"item.color\"></dx-color-box>\n </div>\n <div class=\"text-center mt-8 w-full\">\n <button *ngIf=\"i !== 0\" class=\"{{commonService.btn_light_sm}} cursor-pointer mx-1\"\n (click)=\"moveItemForColumns(i, 'up')\">\n <i class=\"fa fa-arrow-up\" aria-hidden=\"true\"></i>\n </button>\n\n <button *ngIf=\"i !== tableDataConfig.columns.length - 1\"\n class=\"{{commonService.btn_light_sm}} cursor-pointer mx-1\"\n (click)=\"moveItemForColumns(i, 'down')\">\n <i class=\"fa fa-arrow-down\" aria-hidden=\"true\"></i>\n </button>\n <button class=\"{{commonService.btn_danger_sm}} cursor-pointer\"\n (click)=\"deleteColumns(i)\"><i class=\"fa fa-trash-o\" aria-hidden=\"true\"></i>\n </button>\n </div>\n\n </div>\n </div>\n </div>\n <div class=\"flex flex-row justify-end my-2\">\n <button class=\"{{commonService.btn_primary_sm}} cursor-pointer\" (click)=\"addColumns()\">Add\n Columns</button>\n </div>\n </div>\n </div>\n <div *ngIf=\"activeTab === 'properties'\">\n <div class=\"h-full overflow-x-auto\">\n <app-loader *ngIf=\"isLoader\"></app-loader>\n <ng-container *ngIf=\"!isLoader\">\n <div class=\"flex flex-row justify-between border-b py-3\">\n <div class=\"mx-2\">\n <dx-check-box [value]=\"viewProperties.enableClickEvent\"\n [(ngModel)]=\"viewProperties.enableClickEvent\"\n text=\"Enable Click Event\"></dx-check-box>\n </div>\n <div class=\"mx-2\">\n <dx-check-box [value]=\"viewProperties.enableRightClickEvent\"\n [(ngModel)]=\"viewProperties.enableRightClickEvent\"\n text=\"Enable Right Click\"></dx-check-box>\n </div>\n </div>\n <div class=\"w-full p-2\" *ngIf=\"viewProperties.enableClickEvent\">\n\n <div class=\"flex flex-col flex-auto min-w-0 my-2\">\n <div class=\"text-sm py-1 font-extrabold border-b bg-gray-700 text-white px-2\"> Event\n Type\n Option\n </div>\n <div class=\"w-full p-3 border-x border-b \">\n <div class=\"flex flex-row\">\n <div class=\"w-full\">\n <div class=\"text-md mb-2\"> Event Type</div>\n </div>\n <div class=\"w-full\">\n <dx-select-box [items]=\"['drilldown','optionalDrillDown']\"\n (onValueChanged)=\"getSelectedEventType($event)\"\n [(ngModel)]=\"viewProperties.clickEventOptions.eventType\"></dx-select-box>\n </div>\n </div>\n <ng-container *ngIf=\"viewProperties.clickEventOptions.eventType == 'drilldown'\">\n <div class=\"flex flex-row justify-between mt-3\">\n <div class=\"w-full\">\n <div class=\"text-md mb-2\"> Associated Views</div>\n <dx-tag-box [items]=\"allConfiguredViews\"\n [(ngModel)]=\"viewProperties.clickEventOptions.associatedViews\"\n valueExpr=\"viewId\" displayExpr=\"viewName\"\n [showSelectionControls]=\"true\" [searchEnabled]=\"true\"></dx-tag-box>\n </div>\n </div>\n </ng-container>\n <ng-container\n *ngIf=\"viewProperties.clickEventOptions.eventType == 'optionalDrillDown'\">\n <div class=\"flex flex-row justify-between mt-3\">\n <div class=\"w-full\">\n <ng-container\n *ngFor=\"let item of optionalDrilDownDataSource;let i = index;\">\n\n <div class=\"flex flex-row justify-between\">\n <div class=\"mx-2 w-full\">\n <div class=\"text-md mb-2\"> Associated Views</div>\n <dx-tag-box [items]=\"allConfiguredViews\"\n [(ngModel)]=\"item.viewId\" valueExpr=\"viewId\"\n displayExpr=\"viewName\" [showSelectionControls]=\"true\"\n [maxDisplayedTags]=\"2\"\n [searchEnabled]=\"true\"></dx-tag-box>\n\n </div>\n <div class=\"mx-2\">\n <div class=\"text-md mb-2\"> Associated Params</div>\n <dx-text-box\n [(ngModel)]=\"item.filterCondition\"></dx-text-box>\n </div>\n <div class=\"mx-2\">\n <button\n class=\"{{commonService.btn_danger_sm}} cursor-pointer mt-8\"\n (click)=\"deleteAssociatedParams(i)\"><i\n class=\"fa fa-trash-o\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </ng-container>\n <div class=\"flex flex-row justify-end mt-4\">\n <button class=\"{{commonService.btn_primary_sm}} cursor-pointer\"\n (click)=\"addAssociatedParams()\">Add\n Params</button>\n </div>\n </div>\n </div>\n </ng-container>\n\n </div>\n </div>\n\n </div>\n </ng-container>\n <button class=\"{{commonService.btn_light_md}} cursor-pointer mt-2\"\n (click)=\"resetViewProprstise()\">Reset All</button>\n </div>\n </div>\n\n </div>\n\n\n </div>\n</div>\n\n<div class=\"flex flex-row border-t pl-3\">\n <div class=\"flex justify-start mx-1\">\n <button class=\"{{commonService.btn_warning_md}} cursor-pointer mt-2\" (click)=\"viewMapForTest()\">\n Preview</button>\n <button class=\"{{commonService.btn_primary_md}} cursor-pointer mt-2\" (click)=\"isJsonPreview = false\">Data\n Preview</button>\n </div>\n <div class=\"flex justify-end mx-1 flex-grow\">\n <button class=\"{{commonService.btn_success_md}} cursor-pointer mt-2\"\n (click)=\"getSaveChartConfig()\">Submit</button>\n </div>\n</div>", styles: [""], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.DxCheckBoxComponent, selector: "dx-check-box", inputs: ["accessKey", "activeStateEnabled", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "iconSize", "isValid", "name", "readOnly", "rtlEnabled", "tabIndex", "text", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "visible", "width"], outputs: ["onContentReady", "onDisposing", "onInitialized", "onOptionChanged", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "iconSizeChange", "isValidChange", "nameChange", "readOnlyChange", "rtlEnabledChange", "tabIndexChange", "textChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i6.DxColorBoxComponent, selector: "dx-color-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "applyButtonText", "applyValueMode", "buttons", "cancelButtonText", "deferRendering", "disabled", "dropDownButtonTemplate", "dropDownOptions", "editAlphaChannel", "elementAttr", "fieldTemplate", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "keyStep", "label", "labelMode", "name", "opened", "openOnFieldClick", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showDropDownButton", "stylingMode", "tabIndex", "text", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "visible", "width"], outputs: ["onChange", "onClosed", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOpened", "onOptionChanged", "onPaste", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "applyButtonTextChange", "applyValueModeChange", "buttonsChange", "cancelButtonTextChange", "deferRenderingChange", "disabledChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "editAlphaChannelChange", "elementAttrChange", "fieldTemplateChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "keyStepChange", "labelChange", "labelModeChange", "nameChange", "openedChange", "openOnFieldClickChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showDropDownButtonChange", "stylingModeChange", "tabIndexChange", "textChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i7.DxNumberBoxComponent, selector: "dx-number-box", inputs: ["accessKey", "activeStateEnabled", "buttons", "disabled", "elementAttr", "focusStateEnabled", "format", "height", "hint", "hoverStateEnabled", "inputAttr", "invalidValueMessage", "isValid", "label", "labelMode", "max", "min", "mode", "name", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showSpinButtons", "step", "stylingMode", "tabIndex", "text", "useLargeSpinButtons", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "formatChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "invalidValueMessageChange", "isValidChange", "labelChange", "labelModeChange", "maxChange", "minChange", "modeChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showSpinButtonsChange", "stepChange", "stylingModeChange", "tabIndexChange", "textChange", "useLargeSpinButtonsChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i8.DxSelectBoxComponent, selector: "dx-select-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "buttons", "dataSource", "deferRendering", "disabled", "displayExpr", "displayValue", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "fieldTemplate", "focusStateEnabled", "grouped", "groupTemplate", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "items", "itemTemplate", "label", "labelMode", "maxLength", "minSearchLength", "name", "noDataText", "opened", "openOnFieldClick", "placeholder", "readOnly", "rtlEnabled", "searchEnabled", "searchExpr", "searchMode", "searchTimeout", "selectedItem", "showClearButton", "showDataBeforeSearch", "showDropDownButton", "showSelectionControls", "spellcheck", "stylingMode", "tabIndex", "text", "useItemTextAsTitle", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "valueChangeEvent", "valueExpr", "visible", "width", "wrapItemText"], outputs: ["onChange", "onClosed", "onContentReady", "onCopy", "onCustomItemCreating", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onItemClick", "onKeyDown", "onKeyUp", "onOpened", "onOptionChanged", "onPaste", "onSelectionChanged", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "dataSourceChange", "deferRenderingChange", "disabledChange", "displayExprChange", "displayValueChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "fieldTemplateChange", "focusStateEnabledChange", "groupedChange", "groupTemplateChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "itemsChange", "itemTemplateChange", "labelChange", "labelModeChange", "maxLengthChange", "minSearchLengthChange", "nameChange", "noDataTextChange", "openedChange", "openOnFieldClickChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "searchEnabledChange", "searchExprChange", "searchModeChange", "searchTimeoutChange", "selectedItemChange", "showClearButtonChange", "showDataBeforeSearchChange", "showDropDownButtonChange", "showSelectionControlsChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useItemTextAsTitleChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "valueExprChange", "visibleChange", "widthChange", "wrapItemTextChange", "onBlur"] }, { kind: "component", type: i9.DxTagBoxComponent, selector: "dx-tag-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "applyValueMode", "buttons", "dataSource", "deferRendering", "disabled", "displayExpr", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "fieldTemplate", "focusStateEnabled", "grouped", "groupTemplate", "height", "hideSelectedItems", "hint", "hoverStateEnabled", "inputAttr", "isValid", "items", "itemTemplate", "label", "labelMode", "maxDisplayedTags", "maxFilterQueryLength", "maxLength", "minSearchLength", "multiline", "name", "noDataText", "opened", "openOnFieldClick", "placeholder", "readOnly", "rtlEnabled", "searchEnabled", "searchExpr", "searchMode", "searchTimeout", "selectAllMode", "selectAllText", "selectedItems", "showClearButton", "showDataBeforeSearch", "showDropDownButton", "showMultiTagOnly", "showSelectionControls", "stylingMode", "tabIndex", "tagTemplate", "text", "useItemTextAsTitle", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "valueExpr", "visible", "width", "wrapItemText"], outputs: ["onChange", "onClosed", "onContentReady", "onCustomItemCreating", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onItemClick", "onKeyDown", "onKeyUp", "onMultiTagPreparing", "onOpened", "onOptionChanged", "onSelectAllValueChanged", "onSelectionChanged", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "applyValueModeChange", "buttonsChange", "dataSourceChange", "deferRenderingChange", "disabledChange", "displayExprChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "fieldTemplateChange", "focusStateEnabledChange", "groupedChange", "groupTemplateChange", "heightChange", "hideSelectedItemsChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "itemsChange", "itemTemplateChange", "labelChange", "labelModeChange", "maxDisplayedTagsChange", "maxFilterQueryLengthChange", "maxLengthChange", "minSearchLengthChange", "multilineChange", "nameChange", "noDataTextChange", "openedChange", "openOnFieldClickChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "searchEnabledChange", "searchExprChange", "searchModeChange", "searchTimeoutChange", "selectAllModeChange", "selectAllTextChange", "selectedItemsChange", "showClearButtonChange", "showDataBeforeSearchChange", "showDropDownButtonChange", "showMultiTagOnlyChange", "showSelectionControlsChange", "stylingModeChange", "tabIndexChange", "tagTemplateChange", "textChange", "useItemTextAsTitleChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "valueExprChange", "visibleChange", "widthChange", "wrapItemTextChange", "onBlur"] }, { kind: "component", type: i10.DxTextBoxComponent, selector: "dx-text-box", inputs: ["accessKey", "activeStateEnabled", "buttons", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "label", "labelMode", "mask", "maskChar", "maskInvalidMessage", "maskRules", "maxLength", "mode", "name", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showMaskMode", "spellcheck", "stylingMode", "tabIndex", "text", "useMaskedValue", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "labelChange", "labelModeChange", "maskChange", "maskCharChange", "maskInvalidMessageChange", "maskRulesChange", "maxLengthChange", "modeChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showMaskModeChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useMaskedValueChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "directive", type: i11.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i11.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i12.LoaderComponent, selector: "app-loader" }, { kind: "component", type: i13.GammaTableClumnBarChartComponent, selector: "app-gamma-table-clumn-bar-chart", inputs: ["rightClickEnable", "chartDataSource"], outputs: ["getTableConfigOutPut", "oRowClick", "onrightClickContextSelection"] }, { kind: "pipe", type: i4.JsonPipe, name: "json" }] });
|
|
261
|
+
TableWithBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TableWithBarComponent, selector: "app-table-with-bar", inputs: { chartconfigData: ["datasetmodal", "chartconfigData"] }, outputs: { createOtherComponentView: "createOtherComponentView" }, ngImport: i0, template: "<div class=\"flex flex-wrap\">\n <div class=\"w-full mx-2 border-r\">\n <ng-container *ngIf=\"!isJsonPreview\">\n <pre><code>{{jsaonDatasource | json}}</code></pre>\n </ng-container>\n <ng-container *ngIf=\"isJsonPreview\">\n <!-- <app-gamma-table-with-percentage [chartDataSource]=\"chartDataSourceForMap\"></app-gamma-table-with-percentage> -->\n <app-gamma-table-clumn-bar-chart [chartDataSource]=\"chartDataSourceForMap\"></app-gamma-table-clumn-bar-chart>\n\n <div #dynamicContainer></div>\n\n </ng-container>\n </div>\n <div class=\"w-full mx-2\">\n\n <div class=\"mb-4 border-b border-gray-200 dark:border-gray-700\">\n <ul class=\"flex flex-wrap -mb-px text-sm font-medium text-center\" role=\"tablist\">\n <li class=\"me-2\" role=\"presentation\">\n <button class=\"inline-block p-4 border-b-2 rounded-t-lg\" [ngClass]=\"{ \n 'text-purple-600 border-purple-600 dark:text-purple-500 dark:border-purple-500': activeTab === 'basic',\n 'text-gray-500 dark:text-gray-400 border-transparent': activeTab !== 'basic' \n }\" (click)=\"setActiveTab('basic')\" type=\"button\" role=\"tab\">\n Basic\n </button>\n </li>\n <li class=\"me-2\" role=\"presentation\">\n <button class=\"inline-block p-4 border-b-2 rounded-t-lg\" [ngClass]=\"{ \n 'text-purple-600 border-purple-600 dark:text-purple-500 dark:border-purple-500': activeTab === 'columns',\n 'text-gray-500 dark:text-gray-400 border-transparent': activeTab !== 'columns' \n }\" (click)=\"setActiveTab('columns')\" type=\"button\" role=\"tab\">\n Columns\n </button>\n </li>\n <li class=\"me-2\" role=\"presentation\">\n <button class=\"inline-block p-4 border-b-2 rounded-t-lg\" [ngClass]=\"{\n 'text-purple-600 border-purple-600 dark:text-purple-500 dark:border-purple-500': activeTab === 'properties',\n 'text-gray-500 dark:text-gray-400 border-transparent': activeTab !== 'properties'\n }\" (click)=\"setActiveTab('properties')\" type=\"button\" role=\"tab\">\n Properties\n </button>\n </li>\n\n </ul>\n </div>\n\n <div id=\"default-styled-tab-content\">\n <div *ngIf=\"activeTab === 'basic'\">\n <div class=\"flex flex-col flex-auto min-w-0 my-2\">\n <div class=\"text-sm py-1 font-extrabold border-b bg-gray-700 text-white px-2\"> Filter Title\n Config\n </div>\n <div class=\"pt-2 border-x border-b \">\n <div class=\"my-2 flex justify-between\">\n <div class=\"px-1 mb-1 w-full\">\n <div class=\"text-md mb-1\"> Title</div>\n <dx-text-box [(ngModel)]=\"tableDataConfig.commonConfig.title\"></dx-text-box>\n </div>\n <div class=\"px-1 mb-1 w-full\">\n <div class=\"text-md mb-1\"> Data Field</div>\n <dx-select-box [searchEnabled]=\"true\" [items]=\"configColume\"\n [(ngModel)]=\"tableDataConfig.commonConfig.dataField\"></dx-select-box>\n </div>\n <!-- <div class=\"px-1 mb-1\">\n <div class=\"text-md mb-1\"> Checked Key</div>\n <dx-select-box [searchEnabled]=\"true\" [items]=\"configColume\"\n [(ngModel)]=\"tableDataConfig.commonConfig.dataField\"></dx-select-box>\n </div> -->\n <!-- <div class=\"px-4 mt-6 w-full\">\n <dx-check-box [value]=\"tableDataConfig.commonConfig.isSearchBox\"\n [(ngModel)]=\"tableDataConfig.commonConfig.isSearchBox\"\n text=\"Search Box\"></dx-check-box>\n\n </div> -->\n <div class=\"px-1 mb-1 w-full\">\n <div class=\"text-md mb-2\"> Display Formate </div>\n <dx-select-box [items]=\"['daily','hourly','monthly']\"\n [(ngModel)]=\"table_columns_config.kpiConfig.formate\"\n [readOnly]=\"false\"></dx-select-box>\n </div>\n <div class=\"px-1 mb-1 w-full\">\n <div class=\"text-md mb-2\"> Key To Pass </div>\n <dx-tag-box [items]=\"configColume\"\n [(ngModel)]=\"table_columns_config.kpiConfig.keyToPass\"></dx-tag-box>\n </div>\n </div>\n </div>\n </div>\n <div class=\"flex flex-col flex-auto min-w-0 my-2\">\n <div class=\"text-sm py-1 font-extrabold border-b bg-gray-700 text-white px-2\"> Table Config\n </div>\n <div class=\"flex flse-row py-3 border-x border-b \">\n <div class=\"px-1 mb-2 mt-8 w-full\">\n <dx-check-box [value]=\"tableDataConfig.searchPanel\"\n [(ngModel)]=\"tableDataConfig.searchPanel\" text=\"Search Panel\"></dx-check-box>\n </div>\n <div class=\" px-1 mb-2 w-full\">\n <div class=\"text-md mb-2\">File Name</div>\n <dx-text-box [(ngModel)]=\"tableDataConfig.file_name\"></dx-text-box>\n </div>\n <div class=\"px-1 mb-2 w-full\">\n <div class=\"text-md mb-2\"> Number Of Row</div>\n <dx-number-box [value]=\"tableDataConfig.numberOfRow\"\n [(ngModel)]=\"tableDataConfig.numberOfRow\"></dx-number-box>\n </div>\n <div class=\"px-1 mb-2 w-full\">\n <div class=\"text-md mb-2\"> Table Height</div>\n <dx-text-box [value]=\"tableDataConfig.tableHeight\"\n [(ngModel)]=\"tableDataConfig.tableHeight\"></dx-text-box>\n </div>\n <div class=\"px-1 mb-2 mt-8 w-full\">\n <dx-check-box [value]=\"tableDataConfig.pageInfo\" [(ngModel)]=\"tableDataConfig.pageInfo\"\n text=\"Page Info\"></dx-check-box>\n </div>\n\n </div>\n\n </div>\n\n\n </div>\n <div *ngIf=\"activeTab === 'columns'\">\n <div class=\"h-full overflow-x-auto\">\n <div class=\"flex flex-col flex-auto min-w-0\">\n\n <div class=\"pt-2 border-x border-b \">\n <div class=\"my-2 border-b flex flex-row\"\n *ngFor=\"let item of tableDataConfig.columns; let i = index;\">\n <div class=\"px-1 mb-2 mt-6 w-full\">\n <dx-check-box [value]=\"item.visible\" [(ngModel)]=\"item.visible\"\n text=\"Visiblity\"></dx-check-box>\n </div>\n\n <div class=\"px-1 mb-2 w-full\">\n <div class=\"text-md mb-2\"> Value Field</div>\n <dx-select-box [searchEnabled]=\"true\" [items]=\"configColume\"\n [(ngModel)]=\"item.dataField\"></dx-select-box>\n </div>\n <div class=\"px-1 mb-2 w-full\">\n <div class=\"text-md mb-2\"> Caption</div>\n <dx-text-box [(ngModel)]=\"item.caption\"></dx-text-box>\n </div>\n <div class=\"px-2 mb-2 w-full\">\n <div class=\"text-md mb-2\"> UI Function</div>\n <dx-select-box [items]=\"enrichNameList\" [(ngModel)]=\"item.enrichName\"\n [searchEnabled]=\"true\"></dx-select-box>\n </div>\n <div class=\"px-1 mb-2 mt-6 w-full\">\n <dx-check-box [value]=\"item.isShowBar\" [(ngModel)]=\"item.isShowBar\"\n text=\"Allow Bar\"></dx-check-box>\n </div>\n\n <div class=\"px-1 mb-2 w-full\">\n <div class=\"text-md mb-2\">Color</div>\n <dx-color-box [(ngModel)]=\"item.color\"></dx-color-box>\n </div>\n <div class=\"text-center mt-8 w-full\">\n <button *ngIf=\"i !== 0\" class=\"{{commonService.btn_light_sm}} cursor-pointer mx-1\"\n (click)=\"moveItemForColumns(i, 'up')\">\n <i class=\"fa fa-arrow-up\" aria-hidden=\"true\"></i>\n </button>\n\n <button *ngIf=\"i !== tableDataConfig.columns.length - 1\"\n class=\"{{commonService.btn_light_sm}} cursor-pointer mx-1\"\n (click)=\"moveItemForColumns(i, 'down')\">\n <i class=\"fa fa-arrow-down\" aria-hidden=\"true\"></i>\n </button>\n <button class=\"{{commonService.btn_danger_sm}} cursor-pointer\"\n (click)=\"deleteColumns(i)\"><i class=\"fa fa-trash-o\" aria-hidden=\"true\"></i>\n </button>\n </div>\n\n </div>\n </div>\n </div>\n <div class=\"flex flex-row justify-end my-2\">\n <button class=\"{{commonService.btn_primary_sm}} cursor-pointer\" (click)=\"addColumns()\">Add\n Columns</button>\n </div>\n </div>\n </div>\n <div *ngIf=\"activeTab === 'properties'\">\n <div class=\"h-full overflow-x-auto\">\n <app-loader *ngIf=\"isLoader\"></app-loader>\n <ng-container *ngIf=\"!isLoader\">\n <div class=\"flex flex-row justify-between border-b py-3\">\n <div class=\"mx-2\">\n <dx-check-box [value]=\"viewProperties.enableClickEvent\"\n [(ngModel)]=\"viewProperties.enableClickEvent\"\n text=\"Enable Click Event\"></dx-check-box>\n </div>\n <div class=\"mx-2\">\n <dx-check-box [value]=\"viewProperties.enableRightClickEvent\"\n [(ngModel)]=\"viewProperties.enableRightClickEvent\"\n text=\"Enable Right Click\"></dx-check-box>\n </div>\n </div>\n <div class=\"w-full p-2\" *ngIf=\"viewProperties.enableClickEvent\">\n\n <div class=\"flex flex-col flex-auto min-w-0 my-2\">\n <div class=\"text-sm py-1 font-extrabold border-b bg-gray-700 text-white px-2\"> Event\n Type\n Option\n </div>\n <div class=\"w-full p-3 border-x border-b \">\n <div class=\"flex flex-row\">\n <div class=\"w-full\">\n <div class=\"text-md mb-2\"> Event Type</div>\n </div>\n <div class=\"w-full\">\n <dx-select-box [items]=\"['drilldown','sameViewDrilldown','optionalDrillDown']\"\n (onValueChanged)=\"getSelectedEventType($event)\"\n [(ngModel)]=\"viewProperties.clickEventOptions.eventType\"></dx-select-box>\n </div>\n </div>\n <ng-container *ngIf=\"viewProperties.clickEventOptions.eventType == 'drilldown'\">\n <div class=\"flex flex-row justify-between mt-3\">\n <div class=\"w-full\">\n <div class=\"text-md mb-2\"> Associated Views</div>\n <dx-tag-box [items]=\"allConfiguredViews\"\n [(ngModel)]=\"viewProperties.clickEventOptions.associatedViews\"\n valueExpr=\"viewId\" displayExpr=\"viewName\"\n [showSelectionControls]=\"true\" [searchEnabled]=\"true\"></dx-tag-box>\n </div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"viewProperties.clickEventOptions.eventType == 'sameViewDrilldown'\">\n <div class=\"flex flex-row justify-between mt-3\">\n <div class=\"w-full\">\n <div class=\"text-md mb-2\"> Associated Views</div>\n <dx-tag-box [items]=\"allConfiguredViews\"\n [(ngModel)]=\"viewProperties.clickEventOptions.associatedViews\"\n valueExpr=\"viewId\" displayExpr=\"viewName\"\n [showSelectionControls]=\"true\" [searchEnabled]=\"true\"></dx-tag-box>\n </div>\n </div>\n </ng-container>\n <ng-container\n *ngIf=\"viewProperties.clickEventOptions.eventType == 'optionalDrillDown'\">\n <div class=\"flex flex-row justify-between mt-3\">\n <div class=\"w-full\">\n <ng-container\n *ngFor=\"let item of optionalDrilDownDataSource;let i = index;\">\n\n <div class=\"flex flex-row justify-between\">\n <div class=\"mx-2 w-1/2\">\n <div class=\"text-md mb-2\"> Associated Views</div>\n <dx-tag-box [items]=\"allConfiguredViews\"\n [(ngModel)]=\"item.viewId\" valueExpr=\"viewId\"\n displayExpr=\"viewName\" [showSelectionControls]=\"true\"\n [maxDisplayedTags]=\"2\"\n [searchEnabled]=\"true\"></dx-tag-box>\n\n </div>\n <div class=\"mx-2 w-1/2\">\n <div class=\"text-md mb-2\"> Associated Params</div>\n <dx-text-box\n [(ngModel)]=\"item.filterCondition\"></dx-text-box>\n </div>\n <div class=\"mx-2\">\n <button\n class=\"{{commonService.btn_danger_sm}} cursor-pointer mt-8\"\n (click)=\"deleteAssociatedParams(i)\"><i\n class=\"fa fa-trash-o\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </ng-container>\n <div class=\"flex flex-row justify-end mt-4\">\n <button class=\"{{commonService.btn_primary_sm}} cursor-pointer\"\n (click)=\"addAssociatedParams()\">Add\n Params</button>\n </div>\n </div>\n </div>\n </ng-container>\n <button class=\"{{commonService.btn_light_md}} cursor-pointer mt-4\"\n (click)=\"resetViewProprstise()\">Reset All Event</button>\n </div>\n </div>\n\n </div>\n </ng-container>\n </div>\n </div>\n\n </div>\n\n\n </div>\n</div>\n\n<div class=\"flex flex-row border-t pl-3\">\n <div class=\"flex justify-start mx-1\">\n <button class=\"{{commonService.btn_warning_md}} cursor-pointer mt-2\" (click)=\"viewMapForTest()\">\n Preview</button>\n <button class=\"{{commonService.btn_primary_md}} cursor-pointer mt-2\" (click)=\"isJsonPreview = false\">Data\n Preview</button>\n </div>\n <div class=\"flex justify-end mx-1 flex-grow\">\n <button class=\"{{commonService.btn_success_md}} cursor-pointer mt-2\"\n (click)=\"getSaveChartConfig()\">Submit</button>\n </div>\n</div>", styles: [""], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.DxCheckBoxComponent, selector: "dx-check-box", inputs: ["accessKey", "activeStateEnabled", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "iconSize", "isValid", "name", "readOnly", "rtlEnabled", "tabIndex", "text", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "visible", "width"], outputs: ["onContentReady", "onDisposing", "onInitialized", "onOptionChanged", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "iconSizeChange", "isValidChange", "nameChange", "readOnlyChange", "rtlEnabledChange", "tabIndexChange", "textChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i6.DxColorBoxComponent, selector: "dx-color-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "applyButtonText", "applyValueMode", "buttons", "cancelButtonText", "deferRendering", "disabled", "dropDownButtonTemplate", "dropDownOptions", "editAlphaChannel", "elementAttr", "fieldTemplate", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "keyStep", "label", "labelMode", "name", "opened", "openOnFieldClick", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showDropDownButton", "stylingMode", "tabIndex", "text", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "visible", "width"], outputs: ["onChange", "onClosed", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOpened", "onOptionChanged", "onPaste", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "applyButtonTextChange", "applyValueModeChange", "buttonsChange", "cancelButtonTextChange", "deferRenderingChange", "disabledChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "editAlphaChannelChange", "elementAttrChange", "fieldTemplateChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "keyStepChange", "labelChange", "labelModeChange", "nameChange", "openedChange", "openOnFieldClickChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showDropDownButtonChange", "stylingModeChange", "tabIndexChange", "textChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i7.DxNumberBoxComponent, selector: "dx-number-box", inputs: ["accessKey", "activeStateEnabled", "buttons", "disabled", "elementAttr", "focusStateEnabled", "format", "height", "hint", "hoverStateEnabled", "inputAttr", "invalidValueMessage", "isValid", "label", "labelMode", "max", "min", "mode", "name", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showSpinButtons", "step", "stylingMode", "tabIndex", "text", "useLargeSpinButtons", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "formatChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "invalidValueMessageChange", "isValidChange", "labelChange", "labelModeChange", "maxChange", "minChange", "modeChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showSpinButtonsChange", "stepChange", "stylingModeChange", "tabIndexChange", "textChange", "useLargeSpinButtonsChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i8.DxSelectBoxComponent, selector: "dx-select-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "buttons", "dataSource", "deferRendering", "disabled", "displayExpr", "displayValue", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "fieldTemplate", "focusStateEnabled", "grouped", "groupTemplate", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "items", "itemTemplate", "label", "labelMode", "maxLength", "minSearchLength", "name", "noDataText", "opened", "openOnFieldClick", "placeholder", "readOnly", "rtlEnabled", "searchEnabled", "searchExpr", "searchMode", "searchTimeout", "selectedItem", "showClearButton", "showDataBeforeSearch", "showDropDownButton", "showSelectionControls", "spellcheck", "stylingMode", "tabIndex", "text", "useItemTextAsTitle", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "valueChangeEvent", "valueExpr", "visible", "width", "wrapItemText"], outputs: ["onChange", "onClosed", "onContentReady", "onCopy", "onCustomItemCreating", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onItemClick", "onKeyDown", "onKeyUp", "onOpened", "onOptionChanged", "onPaste", "onSelectionChanged", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "dataSourceChange", "deferRenderingChange", "disabledChange", "displayExprChange", "displayValueChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "fieldTemplateChange", "focusStateEnabledChange", "groupedChange", "groupTemplateChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "itemsChange", "itemTemplateChange", "labelChange", "labelModeChange", "maxLengthChange", "minSearchLengthChange", "nameChange", "noDataTextChange", "openedChange", "openOnFieldClickChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "searchEnabledChange", "searchExprChange", "searchModeChange", "searchTimeoutChange", "selectedItemChange", "showClearButtonChange", "showDataBeforeSearchChange", "showDropDownButtonChange", "showSelectionControlsChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useItemTextAsTitleChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "valueExprChange", "visibleChange", "widthChange", "wrapItemTextChange", "onBlur"] }, { kind: "component", type: i9.DxTagBoxComponent, selector: "dx-tag-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "applyValueMode", "buttons", "dataSource", "deferRendering", "disabled", "displayExpr", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "fieldTemplate", "focusStateEnabled", "grouped", "groupTemplate", "height", "hideSelectedItems", "hint", "hoverStateEnabled", "inputAttr", "isValid", "items", "itemTemplate", "label", "labelMode", "maxDisplayedTags", "maxFilterQueryLength", "maxLength", "minSearchLength", "multiline", "name", "noDataText", "opened", "openOnFieldClick", "placeholder", "readOnly", "rtlEnabled", "searchEnabled", "searchExpr", "searchMode", "searchTimeout", "selectAllMode", "selectAllText", "selectedItems", "showClearButton", "showDataBeforeSearch", "showDropDownButton", "showMultiTagOnly", "showSelectionControls", "stylingMode", "tabIndex", "tagTemplate", "text", "useItemTextAsTitle", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "valueExpr", "visible", "width", "wrapItemText"], outputs: ["onChange", "onClosed", "onContentReady", "onCustomItemCreating", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onItemClick", "onKeyDown", "onKeyUp", "onMultiTagPreparing", "onOpened", "onOptionChanged", "onSelectAllValueChanged", "onSelectionChanged", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "applyValueModeChange", "buttonsChange", "dataSourceChange", "deferRenderingChange", "disabledChange", "displayExprChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "fieldTemplateChange", "focusStateEnabledChange", "groupedChange", "groupTemplateChange", "heightChange", "hideSelectedItemsChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "itemsChange", "itemTemplateChange", "labelChange", "labelModeChange", "maxDisplayedTagsChange", "maxFilterQueryLengthChange", "maxLengthChange", "minSearchLengthChange", "multilineChange", "nameChange", "noDataTextChange", "openedChange", "openOnFieldClickChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "searchEnabledChange", "searchExprChange", "searchModeChange", "searchTimeoutChange", "selectAllModeChange", "selectAllTextChange", "selectedItemsChange", "showClearButtonChange", "showDataBeforeSearchChange", "showDropDownButtonChange", "showMultiTagOnlyChange", "showSelectionControlsChange", "stylingModeChange", "tabIndexChange", "tagTemplateChange", "textChange", "useItemTextAsTitleChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "valueExprChange", "visibleChange", "widthChange", "wrapItemTextChange", "onBlur"] }, { kind: "component", type: i10.DxTextBoxComponent, selector: "dx-text-box", inputs: ["accessKey", "activeStateEnabled", "buttons", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "label", "labelMode", "mask", "maskChar", "maskInvalidMessage", "maskRules", "maxLength", "mode", "name", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showMaskMode", "spellcheck", "stylingMode", "tabIndex", "text", "useMaskedValue", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "labelChange", "labelModeChange", "maskChange", "maskCharChange", "maskInvalidMessageChange", "maskRulesChange", "maxLengthChange", "modeChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showMaskModeChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useMaskedValueChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "directive", type: i11.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i11.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i12.LoaderComponent, selector: "app-loader" }, { kind: "component", type: i13.GammaTableClumnBarChartComponent, selector: "app-gamma-table-clumn-bar-chart", inputs: ["rightClickEnable", "chartDataSource"], outputs: ["getTableConfigOutPut", "oRowClick", "onrightClickContextSelection"] }, { kind: "pipe", type: i4.JsonPipe, name: "json" }] });
|
|
261
262
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TableWithBarComponent, decorators: [{
|
|
262
263
|
type: Component,
|
|
263
|
-
args: [{ selector: 'app-table-with-bar', template: "<div class=\"flex flex-wrap\">\n <div class=\"w-full mx-2 border-r\">\n <ng-container *ngIf=\"!isJsonPreview\">\n <pre><code>{{jsaonDatasource | json}}</code></pre>\n </ng-container>\n <ng-container *ngIf=\"isJsonPreview\">\n <!-- <app-gamma-table-with-percentage [chartDataSource]=\"chartDataSourceForMap\"></app-gamma-table-with-percentage> -->\n <app-gamma-table-clumn-bar-chart [chartDataSource]=\"chartDataSourceForMap\"></app-gamma-table-clumn-bar-chart>\n\n <div #dynamicContainer></div>\n\n </ng-container>\n </div>\n <div class=\"w-full mx-2\">\n\n <div class=\"mb-4 border-b border-gray-200 dark:border-gray-700\">\n <ul class=\"flex flex-wrap -mb-px text-sm font-medium text-center\" role=\"tablist\">\n <li class=\"me-2\" role=\"presentation\">\n <button class=\"inline-block p-4 border-b-2 rounded-t-lg\" [ngClass]=\"{ \n 'text-purple-600 border-purple-600 dark:text-purple-500 dark:border-purple-500': activeTab === 'basic',\n 'text-gray-500 dark:text-gray-400 border-transparent': activeTab !== 'basic' \n }\" (click)=\"setActiveTab('basic')\" type=\"button\" role=\"tab\">\n Basic\n </button>\n </li>\n <li class=\"me-2\" role=\"presentation\">\n <button class=\"inline-block p-4 border-b-2 rounded-t-lg\" [ngClass]=\"{ \n 'text-purple-600 border-purple-600 dark:text-purple-500 dark:border-purple-500': activeTab === 'columns',\n 'text-gray-500 dark:text-gray-400 border-transparent': activeTab !== 'columns' \n }\" (click)=\"setActiveTab('columns')\" type=\"button\" role=\"tab\">\n Columns\n </button>\n </li>\n <li class=\"me-2\" role=\"presentation\">\n <button class=\"inline-block p-4 border-b-2 rounded-t-lg\" [ngClass]=\"{\n 'text-purple-600 border-purple-600 dark:text-purple-500 dark:border-purple-500': activeTab === 'properties',\n 'text-gray-500 dark:text-gray-400 border-transparent': activeTab !== 'properties'\n }\" (click)=\"setActiveTab('properties')\" type=\"button\" role=\"tab\">\n Properties\n </button>\n </li>\n\n </ul>\n </div>\n\n <div id=\"default-styled-tab-content\">\n <div *ngIf=\"activeTab === 'basic'\">\n <div class=\"flex flex-col flex-auto min-w-0 my-2\">\n <div class=\"text-sm py-1 font-extrabold border-b bg-gray-700 text-white px-2\"> Filter Title\n Config\n </div>\n <div class=\"pt-2 border-x border-b \">\n <div class=\"my-2 flex justify-between\">\n <div class=\"px-1 mb-1 w-full\">\n <div class=\"text-md mb-1\"> Title</div>\n <dx-text-box [(ngModel)]=\"tableDataConfig.commonConfig.title\"></dx-text-box>\n </div>\n <div class=\"px-1 mb-1 w-full\">\n <div class=\"text-md mb-1\"> Data Field</div>\n <dx-select-box [searchEnabled]=\"true\" [items]=\"configColume\"\n [(ngModel)]=\"tableDataConfig.commonConfig.dataField\"></dx-select-box>\n </div>\n <!-- <div class=\"px-1 mb-1\">\n <div class=\"text-md mb-1\"> Checked Key</div>\n <dx-select-box [searchEnabled]=\"true\" [items]=\"configColume\"\n [(ngModel)]=\"tableDataConfig.commonConfig.dataField\"></dx-select-box>\n </div> -->\n <!-- <div class=\"px-4 mt-6 w-full\">\n <dx-check-box [value]=\"tableDataConfig.commonConfig.isSearchBox\"\n [(ngModel)]=\"tableDataConfig.commonConfig.isSearchBox\"\n text=\"Search Box\"></dx-check-box>\n\n </div> -->\n <div class=\"px-1 mb-1 w-full\">\n <div class=\"text-md mb-2\"> Display Formate </div>\n <dx-select-box [items]=\"['daily','hourly','monthly']\"\n [(ngModel)]=\"table_columns_config.kpiConfig.formate\"\n [readOnly]=\"false\"></dx-select-box>\n </div>\n <div class=\"px-1 mb-1 w-full\">\n <div class=\"text-md mb-2\"> Key To Pass </div>\n <dx-tag-box [items]=\"configColume\"\n [(ngModel)]=\"table_columns_config.kpiConfig.keyToPass\"></dx-tag-box>\n </div>\n </div>\n </div>\n </div>\n <div class=\"flex flex-col flex-auto min-w-0 my-2\">\n <div class=\"text-sm py-1 font-extrabold border-b bg-gray-700 text-white px-2\"> Table Config\n </div>\n <div class=\"flex flse-row py-3 border-x border-b \">\n <div class=\"px-1 mb-2 mt-8 w-full\">\n <dx-check-box [value]=\"tableDataConfig.searchPanel\"\n [(ngModel)]=\"tableDataConfig.searchPanel\" text=\"Search Panel\"></dx-check-box>\n </div>\n <div class=\" px-1 mb-2 w-full\">\n <div class=\"text-md mb-2\">File Name</div>\n <dx-text-box [(ngModel)]=\"tableDataConfig.file_name\"></dx-text-box>\n </div>\n <div class=\"px-1 mb-2 w-full\">\n <div class=\"text-md mb-2\"> Number Of Row</div>\n <dx-number-box [value]=\"tableDataConfig.numberOfRow\"\n [(ngModel)]=\"tableDataConfig.numberOfRow\"></dx-number-box>\n </div>\n <div class=\"px-1 mb-2 mt-8 w-full\">\n <dx-check-box [value]=\"tableDataConfig.pageInfo\" [(ngModel)]=\"tableDataConfig.pageInfo\"\n text=\"Page Info\"></dx-check-box>\n </div>\n\n </div>\n\n </div>\n\n\n </div>\n <div *ngIf=\"activeTab === 'columns'\">\n <div class=\"h-full overflow-x-auto\">\n <div class=\"flex flex-col flex-auto min-w-0\">\n\n <div class=\"pt-2 border-x border-b \">\n <div class=\"my-2 border-b flex flex-row\"\n *ngFor=\"let item of tableDataConfig.columns; let i = index;\">\n <div class=\"px-1 mb-2 mt-6 w-full\">\n <dx-check-box [value]=\"item.visible\" [(ngModel)]=\"item.visible\"\n text=\"Visiblity\"></dx-check-box>\n </div>\n\n <div class=\"px-1 mb-2 w-full\">\n <div class=\"text-md mb-2\"> Value Field</div>\n <dx-select-box [searchEnabled]=\"true\" [items]=\"configColume\"\n [(ngModel)]=\"item.dataField\"></dx-select-box>\n </div>\n <div class=\"px-1 mb-2 w-full\">\n <div class=\"text-md mb-2\"> Caption</div>\n <dx-text-box [(ngModel)]=\"item.caption\"></dx-text-box>\n </div>\n <div class=\"px-2 mb-2 w-full\">\n <div class=\"text-md mb-2\"> UI Function</div>\n <dx-select-box [items]=\"enrichNameList\" [(ngModel)]=\"item.enrichName\"\n [searchEnabled]=\"true\"></dx-select-box>\n </div>\n <div class=\"px-1 mb-2 mt-6 w-full\">\n <dx-check-box [value]=\"item.isShowBar\" [(ngModel)]=\"item.isShowBar\"\n text=\"Allow Bar\"></dx-check-box>\n </div>\n\n <div class=\"px-1 mb-2 w-full\">\n <div class=\"text-md mb-2\">Color</div>\n <dx-color-box [(ngModel)]=\"item.color\"></dx-color-box>\n </div>\n <div class=\"text-center mt-8 w-full\">\n <button *ngIf=\"i !== 0\" class=\"{{commonService.btn_light_sm}} cursor-pointer mx-1\"\n (click)=\"moveItemForColumns(i, 'up')\">\n <i class=\"fa fa-arrow-up\" aria-hidden=\"true\"></i>\n </button>\n\n <button *ngIf=\"i !== tableDataConfig.columns.length - 1\"\n class=\"{{commonService.btn_light_sm}} cursor-pointer mx-1\"\n (click)=\"moveItemForColumns(i, 'down')\">\n <i class=\"fa fa-arrow-down\" aria-hidden=\"true\"></i>\n </button>\n <button class=\"{{commonService.btn_danger_sm}} cursor-pointer\"\n (click)=\"deleteColumns(i)\"><i class=\"fa fa-trash-o\" aria-hidden=\"true\"></i>\n </button>\n </div>\n\n </div>\n </div>\n </div>\n <div class=\"flex flex-row justify-end my-2\">\n <button class=\"{{commonService.btn_primary_sm}} cursor-pointer\" (click)=\"addColumns()\">Add\n Columns</button>\n </div>\n </div>\n </div>\n <div *ngIf=\"activeTab === 'properties'\">\n <div class=\"h-full overflow-x-auto\">\n <app-loader *ngIf=\"isLoader\"></app-loader>\n <ng-container *ngIf=\"!isLoader\">\n <div class=\"flex flex-row justify-between border-b py-3\">\n <div class=\"mx-2\">\n <dx-check-box [value]=\"viewProperties.enableClickEvent\"\n [(ngModel)]=\"viewProperties.enableClickEvent\"\n text=\"Enable Click Event\"></dx-check-box>\n </div>\n <div class=\"mx-2\">\n <dx-check-box [value]=\"viewProperties.enableRightClickEvent\"\n [(ngModel)]=\"viewProperties.enableRightClickEvent\"\n text=\"Enable Right Click\"></dx-check-box>\n </div>\n </div>\n <div class=\"w-full p-2\" *ngIf=\"viewProperties.enableClickEvent\">\n\n <div class=\"flex flex-col flex-auto min-w-0 my-2\">\n <div class=\"text-sm py-1 font-extrabold border-b bg-gray-700 text-white px-2\"> Event\n Type\n Option\n </div>\n <div class=\"w-full p-3 border-x border-b \">\n <div class=\"flex flex-row\">\n <div class=\"w-full\">\n <div class=\"text-md mb-2\"> Event Type</div>\n </div>\n <div class=\"w-full\">\n <dx-select-box [items]=\"['drilldown','optionalDrillDown']\"\n (onValueChanged)=\"getSelectedEventType($event)\"\n [(ngModel)]=\"viewProperties.clickEventOptions.eventType\"></dx-select-box>\n </div>\n </div>\n <ng-container *ngIf=\"viewProperties.clickEventOptions.eventType == 'drilldown'\">\n <div class=\"flex flex-row justify-between mt-3\">\n <div class=\"w-full\">\n <div class=\"text-md mb-2\"> Associated Views</div>\n <dx-tag-box [items]=\"allConfiguredViews\"\n [(ngModel)]=\"viewProperties.clickEventOptions.associatedViews\"\n valueExpr=\"viewId\" displayExpr=\"viewName\"\n [showSelectionControls]=\"true\" [searchEnabled]=\"true\"></dx-tag-box>\n </div>\n </div>\n </ng-container>\n <ng-container\n *ngIf=\"viewProperties.clickEventOptions.eventType == 'optionalDrillDown'\">\n <div class=\"flex flex-row justify-between mt-3\">\n <div class=\"w-full\">\n <ng-container\n *ngFor=\"let item of optionalDrilDownDataSource;let i = index;\">\n\n <div class=\"flex flex-row justify-between\">\n <div class=\"mx-2 w-full\">\n <div class=\"text-md mb-2\"> Associated Views</div>\n <dx-tag-box [items]=\"allConfiguredViews\"\n [(ngModel)]=\"item.viewId\" valueExpr=\"viewId\"\n displayExpr=\"viewName\" [showSelectionControls]=\"true\"\n [maxDisplayedTags]=\"2\"\n [searchEnabled]=\"true\"></dx-tag-box>\n\n </div>\n <div class=\"mx-2\">\n <div class=\"text-md mb-2\"> Associated Params</div>\n <dx-text-box\n [(ngModel)]=\"item.filterCondition\"></dx-text-box>\n </div>\n <div class=\"mx-2\">\n <button\n class=\"{{commonService.btn_danger_sm}} cursor-pointer mt-8\"\n (click)=\"deleteAssociatedParams(i)\"><i\n class=\"fa fa-trash-o\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </ng-container>\n <div class=\"flex flex-row justify-end mt-4\">\n <button class=\"{{commonService.btn_primary_sm}} cursor-pointer\"\n (click)=\"addAssociatedParams()\">Add\n Params</button>\n </div>\n </div>\n </div>\n </ng-container>\n\n </div>\n </div>\n\n </div>\n </ng-container>\n <button class=\"{{commonService.btn_light_md}} cursor-pointer mt-2\"\n (click)=\"resetViewProprstise()\">Reset All</button>\n </div>\n </div>\n\n </div>\n\n\n </div>\n</div>\n\n<div class=\"flex flex-row border-t pl-3\">\n <div class=\"flex justify-start mx-1\">\n <button class=\"{{commonService.btn_warning_md}} cursor-pointer mt-2\" (click)=\"viewMapForTest()\">\n Preview</button>\n <button class=\"{{commonService.btn_primary_md}} cursor-pointer mt-2\" (click)=\"isJsonPreview = false\">Data\n Preview</button>\n </div>\n <div class=\"flex justify-end mx-1 flex-grow\">\n <button class=\"{{commonService.btn_success_md}} cursor-pointer mt-2\"\n (click)=\"getSaveChartConfig()\">Submit</button>\n </div>\n</div>" }]
|
|
264
|
+
args: [{ selector: 'app-table-with-bar', template: "<div class=\"flex flex-wrap\">\n <div class=\"w-full mx-2 border-r\">\n <ng-container *ngIf=\"!isJsonPreview\">\n <pre><code>{{jsaonDatasource | json}}</code></pre>\n </ng-container>\n <ng-container *ngIf=\"isJsonPreview\">\n <!-- <app-gamma-table-with-percentage [chartDataSource]=\"chartDataSourceForMap\"></app-gamma-table-with-percentage> -->\n <app-gamma-table-clumn-bar-chart [chartDataSource]=\"chartDataSourceForMap\"></app-gamma-table-clumn-bar-chart>\n\n <div #dynamicContainer></div>\n\n </ng-container>\n </div>\n <div class=\"w-full mx-2\">\n\n <div class=\"mb-4 border-b border-gray-200 dark:border-gray-700\">\n <ul class=\"flex flex-wrap -mb-px text-sm font-medium text-center\" role=\"tablist\">\n <li class=\"me-2\" role=\"presentation\">\n <button class=\"inline-block p-4 border-b-2 rounded-t-lg\" [ngClass]=\"{ \n 'text-purple-600 border-purple-600 dark:text-purple-500 dark:border-purple-500': activeTab === 'basic',\n 'text-gray-500 dark:text-gray-400 border-transparent': activeTab !== 'basic' \n }\" (click)=\"setActiveTab('basic')\" type=\"button\" role=\"tab\">\n Basic\n </button>\n </li>\n <li class=\"me-2\" role=\"presentation\">\n <button class=\"inline-block p-4 border-b-2 rounded-t-lg\" [ngClass]=\"{ \n 'text-purple-600 border-purple-600 dark:text-purple-500 dark:border-purple-500': activeTab === 'columns',\n 'text-gray-500 dark:text-gray-400 border-transparent': activeTab !== 'columns' \n }\" (click)=\"setActiveTab('columns')\" type=\"button\" role=\"tab\">\n Columns\n </button>\n </li>\n <li class=\"me-2\" role=\"presentation\">\n <button class=\"inline-block p-4 border-b-2 rounded-t-lg\" [ngClass]=\"{\n 'text-purple-600 border-purple-600 dark:text-purple-500 dark:border-purple-500': activeTab === 'properties',\n 'text-gray-500 dark:text-gray-400 border-transparent': activeTab !== 'properties'\n }\" (click)=\"setActiveTab('properties')\" type=\"button\" role=\"tab\">\n Properties\n </button>\n </li>\n\n </ul>\n </div>\n\n <div id=\"default-styled-tab-content\">\n <div *ngIf=\"activeTab === 'basic'\">\n <div class=\"flex flex-col flex-auto min-w-0 my-2\">\n <div class=\"text-sm py-1 font-extrabold border-b bg-gray-700 text-white px-2\"> Filter Title\n Config\n </div>\n <div class=\"pt-2 border-x border-b \">\n <div class=\"my-2 flex justify-between\">\n <div class=\"px-1 mb-1 w-full\">\n <div class=\"text-md mb-1\"> Title</div>\n <dx-text-box [(ngModel)]=\"tableDataConfig.commonConfig.title\"></dx-text-box>\n </div>\n <div class=\"px-1 mb-1 w-full\">\n <div class=\"text-md mb-1\"> Data Field</div>\n <dx-select-box [searchEnabled]=\"true\" [items]=\"configColume\"\n [(ngModel)]=\"tableDataConfig.commonConfig.dataField\"></dx-select-box>\n </div>\n <!-- <div class=\"px-1 mb-1\">\n <div class=\"text-md mb-1\"> Checked Key</div>\n <dx-select-box [searchEnabled]=\"true\" [items]=\"configColume\"\n [(ngModel)]=\"tableDataConfig.commonConfig.dataField\"></dx-select-box>\n </div> -->\n <!-- <div class=\"px-4 mt-6 w-full\">\n <dx-check-box [value]=\"tableDataConfig.commonConfig.isSearchBox\"\n [(ngModel)]=\"tableDataConfig.commonConfig.isSearchBox\"\n text=\"Search Box\"></dx-check-box>\n\n </div> -->\n <div class=\"px-1 mb-1 w-full\">\n <div class=\"text-md mb-2\"> Display Formate </div>\n <dx-select-box [items]=\"['daily','hourly','monthly']\"\n [(ngModel)]=\"table_columns_config.kpiConfig.formate\"\n [readOnly]=\"false\"></dx-select-box>\n </div>\n <div class=\"px-1 mb-1 w-full\">\n <div class=\"text-md mb-2\"> Key To Pass </div>\n <dx-tag-box [items]=\"configColume\"\n [(ngModel)]=\"table_columns_config.kpiConfig.keyToPass\"></dx-tag-box>\n </div>\n </div>\n </div>\n </div>\n <div class=\"flex flex-col flex-auto min-w-0 my-2\">\n <div class=\"text-sm py-1 font-extrabold border-b bg-gray-700 text-white px-2\"> Table Config\n </div>\n <div class=\"flex flse-row py-3 border-x border-b \">\n <div class=\"px-1 mb-2 mt-8 w-full\">\n <dx-check-box [value]=\"tableDataConfig.searchPanel\"\n [(ngModel)]=\"tableDataConfig.searchPanel\" text=\"Search Panel\"></dx-check-box>\n </div>\n <div class=\" px-1 mb-2 w-full\">\n <div class=\"text-md mb-2\">File Name</div>\n <dx-text-box [(ngModel)]=\"tableDataConfig.file_name\"></dx-text-box>\n </div>\n <div class=\"px-1 mb-2 w-full\">\n <div class=\"text-md mb-2\"> Number Of Row</div>\n <dx-number-box [value]=\"tableDataConfig.numberOfRow\"\n [(ngModel)]=\"tableDataConfig.numberOfRow\"></dx-number-box>\n </div>\n <div class=\"px-1 mb-2 w-full\">\n <div class=\"text-md mb-2\"> Table Height</div>\n <dx-text-box [value]=\"tableDataConfig.tableHeight\"\n [(ngModel)]=\"tableDataConfig.tableHeight\"></dx-text-box>\n </div>\n <div class=\"px-1 mb-2 mt-8 w-full\">\n <dx-check-box [value]=\"tableDataConfig.pageInfo\" [(ngModel)]=\"tableDataConfig.pageInfo\"\n text=\"Page Info\"></dx-check-box>\n </div>\n\n </div>\n\n </div>\n\n\n </div>\n <div *ngIf=\"activeTab === 'columns'\">\n <div class=\"h-full overflow-x-auto\">\n <div class=\"flex flex-col flex-auto min-w-0\">\n\n <div class=\"pt-2 border-x border-b \">\n <div class=\"my-2 border-b flex flex-row\"\n *ngFor=\"let item of tableDataConfig.columns; let i = index;\">\n <div class=\"px-1 mb-2 mt-6 w-full\">\n <dx-check-box [value]=\"item.visible\" [(ngModel)]=\"item.visible\"\n text=\"Visiblity\"></dx-check-box>\n </div>\n\n <div class=\"px-1 mb-2 w-full\">\n <div class=\"text-md mb-2\"> Value Field</div>\n <dx-select-box [searchEnabled]=\"true\" [items]=\"configColume\"\n [(ngModel)]=\"item.dataField\"></dx-select-box>\n </div>\n <div class=\"px-1 mb-2 w-full\">\n <div class=\"text-md mb-2\"> Caption</div>\n <dx-text-box [(ngModel)]=\"item.caption\"></dx-text-box>\n </div>\n <div class=\"px-2 mb-2 w-full\">\n <div class=\"text-md mb-2\"> UI Function</div>\n <dx-select-box [items]=\"enrichNameList\" [(ngModel)]=\"item.enrichName\"\n [searchEnabled]=\"true\"></dx-select-box>\n </div>\n <div class=\"px-1 mb-2 mt-6 w-full\">\n <dx-check-box [value]=\"item.isShowBar\" [(ngModel)]=\"item.isShowBar\"\n text=\"Allow Bar\"></dx-check-box>\n </div>\n\n <div class=\"px-1 mb-2 w-full\">\n <div class=\"text-md mb-2\">Color</div>\n <dx-color-box [(ngModel)]=\"item.color\"></dx-color-box>\n </div>\n <div class=\"text-center mt-8 w-full\">\n <button *ngIf=\"i !== 0\" class=\"{{commonService.btn_light_sm}} cursor-pointer mx-1\"\n (click)=\"moveItemForColumns(i, 'up')\">\n <i class=\"fa fa-arrow-up\" aria-hidden=\"true\"></i>\n </button>\n\n <button *ngIf=\"i !== tableDataConfig.columns.length - 1\"\n class=\"{{commonService.btn_light_sm}} cursor-pointer mx-1\"\n (click)=\"moveItemForColumns(i, 'down')\">\n <i class=\"fa fa-arrow-down\" aria-hidden=\"true\"></i>\n </button>\n <button class=\"{{commonService.btn_danger_sm}} cursor-pointer\"\n (click)=\"deleteColumns(i)\"><i class=\"fa fa-trash-o\" aria-hidden=\"true\"></i>\n </button>\n </div>\n\n </div>\n </div>\n </div>\n <div class=\"flex flex-row justify-end my-2\">\n <button class=\"{{commonService.btn_primary_sm}} cursor-pointer\" (click)=\"addColumns()\">Add\n Columns</button>\n </div>\n </div>\n </div>\n <div *ngIf=\"activeTab === 'properties'\">\n <div class=\"h-full overflow-x-auto\">\n <app-loader *ngIf=\"isLoader\"></app-loader>\n <ng-container *ngIf=\"!isLoader\">\n <div class=\"flex flex-row justify-between border-b py-3\">\n <div class=\"mx-2\">\n <dx-check-box [value]=\"viewProperties.enableClickEvent\"\n [(ngModel)]=\"viewProperties.enableClickEvent\"\n text=\"Enable Click Event\"></dx-check-box>\n </div>\n <div class=\"mx-2\">\n <dx-check-box [value]=\"viewProperties.enableRightClickEvent\"\n [(ngModel)]=\"viewProperties.enableRightClickEvent\"\n text=\"Enable Right Click\"></dx-check-box>\n </div>\n </div>\n <div class=\"w-full p-2\" *ngIf=\"viewProperties.enableClickEvent\">\n\n <div class=\"flex flex-col flex-auto min-w-0 my-2\">\n <div class=\"text-sm py-1 font-extrabold border-b bg-gray-700 text-white px-2\"> Event\n Type\n Option\n </div>\n <div class=\"w-full p-3 border-x border-b \">\n <div class=\"flex flex-row\">\n <div class=\"w-full\">\n <div class=\"text-md mb-2\"> Event Type</div>\n </div>\n <div class=\"w-full\">\n <dx-select-box [items]=\"['drilldown','sameViewDrilldown','optionalDrillDown']\"\n (onValueChanged)=\"getSelectedEventType($event)\"\n [(ngModel)]=\"viewProperties.clickEventOptions.eventType\"></dx-select-box>\n </div>\n </div>\n <ng-container *ngIf=\"viewProperties.clickEventOptions.eventType == 'drilldown'\">\n <div class=\"flex flex-row justify-between mt-3\">\n <div class=\"w-full\">\n <div class=\"text-md mb-2\"> Associated Views</div>\n <dx-tag-box [items]=\"allConfiguredViews\"\n [(ngModel)]=\"viewProperties.clickEventOptions.associatedViews\"\n valueExpr=\"viewId\" displayExpr=\"viewName\"\n [showSelectionControls]=\"true\" [searchEnabled]=\"true\"></dx-tag-box>\n </div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"viewProperties.clickEventOptions.eventType == 'sameViewDrilldown'\">\n <div class=\"flex flex-row justify-between mt-3\">\n <div class=\"w-full\">\n <div class=\"text-md mb-2\"> Associated Views</div>\n <dx-tag-box [items]=\"allConfiguredViews\"\n [(ngModel)]=\"viewProperties.clickEventOptions.associatedViews\"\n valueExpr=\"viewId\" displayExpr=\"viewName\"\n [showSelectionControls]=\"true\" [searchEnabled]=\"true\"></dx-tag-box>\n </div>\n </div>\n </ng-container>\n <ng-container\n *ngIf=\"viewProperties.clickEventOptions.eventType == 'optionalDrillDown'\">\n <div class=\"flex flex-row justify-between mt-3\">\n <div class=\"w-full\">\n <ng-container\n *ngFor=\"let item of optionalDrilDownDataSource;let i = index;\">\n\n <div class=\"flex flex-row justify-between\">\n <div class=\"mx-2 w-1/2\">\n <div class=\"text-md mb-2\"> Associated Views</div>\n <dx-tag-box [items]=\"allConfiguredViews\"\n [(ngModel)]=\"item.viewId\" valueExpr=\"viewId\"\n displayExpr=\"viewName\" [showSelectionControls]=\"true\"\n [maxDisplayedTags]=\"2\"\n [searchEnabled]=\"true\"></dx-tag-box>\n\n </div>\n <div class=\"mx-2 w-1/2\">\n <div class=\"text-md mb-2\"> Associated Params</div>\n <dx-text-box\n [(ngModel)]=\"item.filterCondition\"></dx-text-box>\n </div>\n <div class=\"mx-2\">\n <button\n class=\"{{commonService.btn_danger_sm}} cursor-pointer mt-8\"\n (click)=\"deleteAssociatedParams(i)\"><i\n class=\"fa fa-trash-o\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </ng-container>\n <div class=\"flex flex-row justify-end mt-4\">\n <button class=\"{{commonService.btn_primary_sm}} cursor-pointer\"\n (click)=\"addAssociatedParams()\">Add\n Params</button>\n </div>\n </div>\n </div>\n </ng-container>\n <button class=\"{{commonService.btn_light_md}} cursor-pointer mt-4\"\n (click)=\"resetViewProprstise()\">Reset All Event</button>\n </div>\n </div>\n\n </div>\n </ng-container>\n </div>\n </div>\n\n </div>\n\n\n </div>\n</div>\n\n<div class=\"flex flex-row border-t pl-3\">\n <div class=\"flex justify-start mx-1\">\n <button class=\"{{commonService.btn_warning_md}} cursor-pointer mt-2\" (click)=\"viewMapForTest()\">\n Preview</button>\n <button class=\"{{commonService.btn_primary_md}} cursor-pointer mt-2\" (click)=\"isJsonPreview = false\">Data\n Preview</button>\n </div>\n <div class=\"flex justify-end mx-1 flex-grow\">\n <button class=\"{{commonService.btn_success_md}} cursor-pointer mt-2\"\n (click)=\"getSaveChartConfig()\">Submit</button>\n </div>\n</div>" }]
|
|
264
265
|
}], ctorParameters: function () { return [{ type: i1.CommonService }, { type: i0.ChangeDetectorRef }, { type: i2.ApplicationContentService }, { type: i3.ToastrService }]; }, propDecorators: { createOtherComponentView: [{
|
|
265
266
|
type: Output
|
|
266
267
|
}], chartconfigData: [{
|
|
267
268
|
type: Input,
|
|
268
269
|
args: ['datasetmodal']
|
|
269
270
|
}] } });
|
|
270
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtd2l0aC1iYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2FtbWEtYXBwLWNvbnRyb2xsZXIvc3JjL2xpYi9hcHBsaWNhdGlvbi1jb250cm9sbGVyL3N1cHBvcnQtY29tcG9uZW50cy90YWJsZS13aXRoLWJhci90YWJsZS13aXRoLWJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1tYS1hcHAtY29udHJvbGxlci9zcmMvbGliL2FwcGxpY2F0aW9uLWNvbnRyb2xsZXIvc3VwcG9ydC1jb21wb25lbnRzL3RhYmxlLXdpdGgtYmFyL3RhYmxlLXdpdGgtYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBcUIsU0FBUyxFQUE0QixZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBK0IsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQVV6SixNQUFNLE9BQU8scUJBQXFCO0lBMEQ5QixZQUFtQixhQUE0QixFQUFVLEdBQXNCLEVBQVUsT0FBa0MsRUFBVSxNQUFxQjtRQUF2SSxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUFVLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQVUsWUFBTyxHQUFQLE9BQU8sQ0FBMkI7UUFBVSxXQUFNLEdBQU4sTUFBTSxDQUFlO1FBekQxSiwwQkFBcUIsR0FBUSxFQUFFLENBQUM7UUFFaEMsdUJBQWtCLEdBQVEsRUFBRSxDQUFDO1FBRzdCLHVCQUFrQixHQUFRLEVBQUUsQ0FBQztRQUU3QixtQkFBYyxHQUFRO1lBQ2xCLGdCQUFnQixFQUFFLEtBQUs7WUFDdkIscUJBQXFCLEVBQUUsSUFBSTtZQUMzQixpQkFBaUIsRUFBRTtnQkFDZixlQUFlLEVBQUUsRUFBRTtnQkFDbkIsU0FBUyxFQUFFLEVBQUU7YUFDaEI7U0FDSixDQUFDO1FBQ0YsK0JBQTBCLEdBQVEsRUFBRSxDQUFDO1FBQ3JDLHlCQUFvQixHQUFHO1lBQ25CLFdBQVcsRUFBRTtnQkFDVCxXQUFXLEVBQUUsRUFBRTtnQkFDZixLQUFLLEVBQUUscUNBQXFDO2dCQUM1QyxhQUFhLEVBQUUsT0FBTztnQkFDdEIsU0FBUyxFQUFFLEVBQUU7Z0JBQ2IsV0FBVyxFQUFFLEVBQUU7Z0JBQ2YsZUFBZSxFQUFFLG1DQUFtQztnQkFDcEQsWUFBWSxFQUFFLEVBQUU7YUFDbkI7U0FDSixDQUFDO1FBRUYsb0JBQWUsR0FBRztZQUNkLGFBQWEsRUFBRSxJQUFJO1lBQ25CLFdBQVcsRUFBRSxFQUFFO1lBQ2YsYUFBYSxFQUFFLEVBQUU7WUFDakIsVUFBVSxFQUFFLElBQUk7WUFDaEIsa0JBQWtCLEVBQUU7Z0JBQ2hCLEVBQUU7Z0JBQ0YsRUFBRTtnQkFDRixFQUFFO2dCQUNGLEdBQUc7YUFDTjtZQUNELFNBQVMsRUFBRSxFQUVWO1lBQ0QsY0FBYyxFQUFFO2dCQUNaLE9BQU8sRUFBRSxFQUFFO2dCQUNYLFdBQVcsRUFBRSxFQUFFO2dCQUNmLFlBQVksRUFBRSxFQUFFO2dCQUNoQixhQUFhLEVBQUUsS0FBSzthQUN2QjtTQUNKLENBQUE7UUFFRCxtQkFBYyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUsa0NBQWtDLENBQUMsQ0FBQTtRQUVsSCxhQUFRLEdBQVksSUFBSSxDQUFDO1FBT3pCLGNBQVMsR0FBVyxPQUFPLENBQUM7UUFDWCw2QkFBd0IsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNsRixrQkFBYSxHQUFHLEVBQUUsQ0FBQztJQUoySSxDQUFDO0lBTS9KLElBQ0ksZUFBZSxDQUFDLEtBQUs7UUFDckIsSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQzNDLE9BQU87U0FDVjthQUFNO1lBRUgsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDL0MsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUMsZ0JBQWdCLENBQUM7WUFDcEQsSUFBSSxLQUFLLENBQUMsb0JBQW9CLEVBQUU7Z0JBQzVCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsR0FBRyxLQUFLLENBQUMsb0JBQW9CLENBQUM7Z0JBQ3BFLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQztnQkFDN0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUM7Z0JBQzdFLElBQUksS0FBSyxDQUFDLG9CQUFvQixDQUFDLGNBQWMsSUFBSSxLQUFLLENBQUMsb0JBQW9CLENBQUMsY0FBYyxDQUFDLGlCQUFpQixDQUFDLGVBQWUsRUFBRTtvQkFDMUgsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUMsb0JBQW9CLENBQUMsY0FBYyxDQUFDO29CQUNoRSxJQUFJLENBQUMsY0FBYyxHQUFHO3dCQUNsQixrQkFBa0IsRUFBRSxLQUFLLENBQUMsb0JBQW9CLENBQUMsY0FBYyxDQUFDLGdCQUFnQjt3QkFDOUUsdUJBQXVCLEVBQUUsS0FBSyxDQUFDLG9CQUFvQixDQUFDLGNBQWMsQ0FBQyxxQkFBcUI7cUJBQzNGLENBQUE7b0JBRUQsSUFBSSxLQUFLLENBQUMsb0JBQW9CLENBQUMsY0FBYyxDQUFDLGdCQUFnQixFQUFFO3dCQUM1RCxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLEdBQUc7NEJBQ3ZDLFdBQVcsRUFBRSxLQUFLLENBQUMsb0JBQW9CLENBQUMsY0FBYyxDQUFDLGlCQUFpQixDQUFDLFNBQVM7NEJBQ2xGLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUMsZUFBZTt5QkFDakcsQ0FBQTtxQkFDSjt5QkFBTTt3QkFDSCxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxDQUFBO3FCQUNoRDtpQkFFSjtnQkFFRCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO2FBQzVCO2lCQUFNO2dCQUNILElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUM7Z0JBQ2hELElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUU7b0JBQzlCLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTt3QkFDM0MsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQzt3QkFDdEIsT0FBTyxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQztvQkFDaEMsQ0FBQyxDQUFDLENBQUM7aUJBRU47cUJBQU07b0JBQ0gsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO29CQUNsQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTt3QkFDaEMsSUFBSSxHQUFHLEdBQUc7NEJBQ04sU0FBUyxFQUFFLElBQUk7NEJBQ2YsV0FBVyxFQUFFLElBQUk7NEJBQ2pCLFdBQVcsRUFBRSxPQUFPOzRCQUNwQixTQUFTLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDOzRCQUNwRCxZQUFZLEVBQUUsRUFBRTs0QkFDaEIsT0FBTyxFQUFFLEVBQUU7eUJBQ2QsQ0FBQTt3QkFFRCxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBRTNDLENBQUMsQ0FBQyxDQUFDO29CQUNILE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2lCQUNsQztnQkFFRCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO2FBQzVCO1NBQ0o7SUFDTCxDQUFDO0lBR0QsUUFBUTtRQUNKLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxTQUFTLENBQUM7WUFDdkMsSUFBSSxFQUFFLENBQUMsSUFBUyxFQUFFLEVBQUU7Z0JBQ2hCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7Z0JBRS9CLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1lBQzFCLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDbkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsMkRBQTJELEVBQUUsV0FBVyxDQUFDLENBQUE7WUFDL0YsQ0FBQztTQUNKLENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQywwQkFBMEIsR0FBRztZQUM5QjtnQkFDSSxRQUFRLEVBQUUsRUFBRTtnQkFDWixpQkFBaUIsRUFBRSxFQUFFO2FBQ3hCO1NBQ0osQ0FBQTtJQUNMLENBQUM7SUFDRCxVQUFVO1FBQ04sSUFBSSxHQUFHLEdBQUc7WUFDTixTQUFTLEVBQUUsSUFBSTtZQUNmLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLFdBQVcsRUFBRSxFQUFFO1lBQ2YsU0FBUyxFQUFFLEVBQUU7WUFDYixZQUFZLEVBQUUsRUFBRTtZQUNoQixPQUFPLEVBQUUsRUFBRTtTQUNkLENBQUE7UUFFRCxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELGFBQWEsQ0FBQyxDQUFDO1FBQ1gsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtJQUM3QyxDQUFDO0lBRUQsa0JBQWtCLENBQUMsQ0FBQyxFQUFFLElBQUk7UUFDdEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBRTlCLENBQUM7SUFHRCxrQkFBa0IsQ0FBQyxLQUFhLEVBQUUsU0FBd0I7UUFFdEQsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxNQUFNO1lBQUUsT0FBTztRQUN0RSxNQUFNLFdBQVcsR0FBRyxTQUFTLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBRS9ELElBQUksV0FBVyxHQUFHLENBQUMsSUFBSSxXQUFXLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsTUFBTTtZQUFFLE9BQU87UUFHbEYsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQsYUFBYSxDQUFDLEdBQVE7UUFDbEIsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFDRCxZQUFZLENBQUMsR0FBVztRQUNwQixJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztJQUN6QixDQUFDO0lBRUQsZUFBZSxDQUFDLE9BQU87UUFDbkIsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNsRCxJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sS0FBSyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUQsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDUixLQUFLLEdBQUc7b0JBQ0osT0FBTyxFQUFFLE1BQU0sQ0FBQyxLQUFLO29CQUNyQixPQUFPLEVBQUUsRUFBRTtpQkFDZCxDQUFDO2dCQUNGLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDbkI7WUFDRCxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDZixTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7Z0JBQzNCLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTztnQkFDdkIsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPO2FBQzFCLENBQUMsQ0FBQztZQUNILE9BQU8sR0FBRyxDQUFDO1FBQ2YsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ1AsT0FBTyxjQUFjLENBQUM7SUFDMUIsQ0FBQztJQUNELGtCQUFrQixDQUFDLE9BQU87UUFDdEIsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBRXRCLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDcEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ3hCLFVBQVUsQ0FBQyxJQUFJLENBQUM7b0JBQ1osU0FBUyxFQUFFLEdBQUcsQ0FBQyxTQUFTO29CQUN4QixPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU87b0JBQ3BCLE9BQU8sRUFBRSxHQUFHLENBQUMsT0FBTztpQkFDdkIsQ0FBQyxDQUFDO1lBQ1AsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7SUFHRCxrQkFBa0I7UUFFZCxJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7UUFDekUsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLGlCQUFpQixDQUFDLFNBQVMsSUFBSSxtQkFBbUIsRUFBRTtZQUN4RSxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLENBQUMsaUJBQWlCLENBQUMsR0FBRyxJQUFJLENBQUMsMEJBQTBCLENBQUM7U0FDakc7UUFFRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUM1RSxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVELHNCQUFzQixDQUFDLEtBQUs7UUFDeEIsSUFBSSxDQUFDLDBCQUEwQixDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFDcEQsQ0FBQztJQUVELG1CQUFtQjtRQUNmLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUM7WUFDakMsUUFBUSxFQUFFLEVBQUU7WUFDWixpQkFBaUIsRUFBRSxFQUFFO1NBQ3hCLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxDQUFDO1FBRWxCLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRTtZQUNULElBQUksQ0FBQywwQkFBMEIsR0FBRyxFQUFFLENBQUM7WUFDckMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLGlCQUFpQixDQUFDLFNBQVMsSUFBSSxXQUFXLEVBQUU7Z0JBQ2hFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQzthQUNqRjtTQUNKO0lBR0wsQ0FBQztJQUVELG1CQUFtQjtRQUNmLElBQUksQ0FBQyxjQUFjLEdBQUc7WUFDbEIsZ0JBQWdCLEVBQUUsS0FBSztZQUN2QixxQkFBcUIsRUFBRSxJQUFJO1lBQzNCLGlCQUFpQixFQUFFO2dCQUNmLGVBQWUsRUFBRSxFQUFFO2dCQUNuQixTQUFTLEVBQUUsRUFBRTthQUNoQjtTQUNKLENBQUM7SUFDTixDQUFDO0lBRUQsY0FBYztRQUNWLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUN6RSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUMsU0FBUyxJQUFJLG1CQUFtQixFQUFFO1lBQ3hFLElBQUksQ0FBQyxjQUFjLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FBQztTQUNqRztRQUVELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBRTVFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO1FBQzVFLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUM7UUFDdkQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsMkJBQTJCLENBQUMsQ0FBQztRQUVyRSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztJQUU5QixDQUFDOztrSEEvUlEscUJBQXFCO3NHQUFyQixxQkFBcUIsK0xDWmxDLHFpa0JBK1JNOzJGRG5STyxxQkFBcUI7a0JBTGpDLFNBQVM7K0JBQ0ksb0JBQW9CO3dNQWlFYix3QkFBd0I7c0JBQXhDLE1BQU07Z0JBSUgsZUFBZTtzQkFEbEIsS0FBSzt1QkFBQyxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiXG5cbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIENvbXBvbmVudFJlZiwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXBwbGljYXRpb25Db250ZW50U2VydmljZSB9IGZyb20gJy4uLy4uL2FwcGxpY2F0aW9uLWNvbnRlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBUb2FzdHJTZXJ2aWNlIH0gZnJvbSAnbmd4LXRvYXN0cic7XG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tbW9uJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhcHAtdGFibGUtd2l0aC1iYXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90YWJsZS13aXRoLWJhci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vdGFibGUtd2l0aC1iYXIuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZVdpdGhCYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIGNoYXJ0RGF0YVNvdXJjZUZvck1hcDogYW55ID0ge307XG4gICAgaXNKc29uUHJldmlldzogYm9vbGVhblxuICAgIGRhdGFTb3Vyc2VGb3JUYWJsZTogYW55ID0gW107XG4gICAganNhb25EYXRhc291cmNlOiBhbnk7XG4gICAgY29uZmlnQ29sdW1lOiBhbnk7XG4gICAgYWxsQ29uZmlndXJlZFZpZXdzOiBhbnkgPSBbXTtcbiAgICAvLyBncm91cE9mVmlld3M6IGFueTtcbiAgICB2aWV3UHJvcGVydGllczogYW55ID0ge1xuICAgICAgICBlbmFibGVDbGlja0V2ZW50OiBmYWxzZSxcbiAgICAgICAgZW5hYmxlUmlnaHRDbGlja0V2ZW50OiB0cnVlLFxuICAgICAgICBjbGlja0V2ZW50T3B0aW9uczoge1xuICAgICAgICAgICAgYXNzb2NpYXRlZFZpZXdzOiBbXSxcbiAgICAgICAgICAgIGV2ZW50VHlwZTogXCJcIlxuICAgICAgICB9XG4gICAgfTtcbiAgICBvcHRpb25hbERyaWxEb3duRGF0YVNvdXJjZTogYW55ID0gW107XG4gICAgdGFibGVfY29sdW1uc19jb25maWcgPSB7XG4gICAgICAgIFwia3BpQ29uZmlnXCI6IHtcbiAgICAgICAgICAgIFwic2VydmljZUlkXCI6IFwiXCIsXG4gICAgICAgICAgICBcImFwaVwiOiBcIi9rcGkvdHJlbmRzL25ldHdvcmsvZ2V0LW1ldHJpYy1kYXRhXCIsXG4gICAgICAgICAgICBcImRpc3BsYXlUeXBlXCI6IFwidGFibGVcIixcbiAgICAgICAgICAgIFwiZm9ybWF0ZVwiOiBcIlwiLFxuICAgICAgICAgICAgXCJrZXlUb1Bhc3NcIjogW10sXG4gICAgICAgICAgICBcImNvbXBvbmVudE5hbWVcIjogXCJHYW1tYVRhYmxlV2l0aFBlcmNlbnRhZ2VDb21wb25lbnRcIixcbiAgICAgICAgICAgIFwiZGF0YUNvbmZpZ1wiOiB7fVxuICAgICAgICB9LFxuICAgIH07XG5cbiAgICB0YWJsZURhdGFDb25maWcgPSB7XG4gICAgICAgIFwic2VhcmNoUGFuZWxcIjogdHJ1ZSxcbiAgICAgICAgXCJmaWxlX25hbWVcIjogXCJcIixcbiAgICAgICAgXCJudW1iZXJPZlJvd1wiOiAxMCxcbiAgICAgICAgXCJwYWdlSW5mb1wiOiB0cnVlLFxuICAgICAgICBcImFsbG93ZWRQYWdlU2l6ZXNcIjogW1xuICAgICAgICAgICAgMTAsXG4gICAgICAgICAgICAyMCxcbiAgICAgICAgICAgIDUwLFxuICAgICAgICAgICAgMTAwXG4gICAgICAgIF0sXG4gICAgICAgIFwiY29sdW1uc1wiOiBbXG5cbiAgICAgICAgXSxcbiAgICAgICAgXCJjb21tb25Db25maWdcIjoge1xuICAgICAgICAgICAgXCJ0aXRsZVwiOiBcIlwiLFxuICAgICAgICAgICAgXCJkYXRhRmllbGRcIjogXCJcIixcbiAgICAgICAgICAgIFwiY2hlY2tlZEtleVwiOiBcIlwiLFxuICAgICAgICAgICAgXCJpc1NlYXJjaEJveFwiOiBmYWxzZVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZW5yaWNoTmFtZUxpc3QgPSBbXCJhYmJyZXZpYXRlTnVtYmVyXCIsIFwiZ2V0Q29sb3JDb2RlU3BhblwiLCBcIlRob3VzYW5kU2VwYXJhdG9yXCIsIFwiVGhvdXNhbmRTZXBhcmF0b3JXaXRoVHdvRGVjaW1hbHNcIl1cbiAgICBzZWxlY3RlZFRhYmxlVmlld1R5cGU6IGFueTtcbiAgICBpc0xvYWRlcjogYm9vbGVhbiA9IHRydWU7XG5cbiAgICBzZWxlY3RlZFZpZXdDb25maWdzOiBhbnk7XG5cblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBjb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlLCBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgc2VydmljZTogQXBwbGljYXRpb25Db250ZW50U2VydmljZSwgcHJpdmF0ZSB0YW9zdHI6IFRvYXN0clNlcnZpY2UpIHsgfVxuXG4gICAgYWN0aXZlVGFiOiBzdHJpbmcgPSAnYmFzaWMnO1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgY3JlYXRlT3RoZXJDb21wb25lbnRWaWV3OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBzZWxlY3RlZFZpZXdzID0gW107XG5cbiAgICBASW5wdXQoJ2RhdGFzZXRtb2RhbCcpXG4gICAgc2V0IGNoYXJ0Y29uZmlnRGF0YSh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgdGhpcy5qc2FvbkRhdGFzb3VyY2UgPSB2YWx1ZS5kYXRhWzBdO1xuICAgICAgICAgICAgdGhpcy5jb25maWdDb2x1bWUgPSBPYmplY3Qua2V5cyh2YWx1ZS5kYXRhWzBdKTtcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJzZUZvclRhYmxlID0gdmFsdWUuZGF0YS5zbGljZSgwLCA1KTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWaWV3Q29uZmlncyA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRhYmxlVmlld1R5cGUgPSB2YWx1ZS5zZWxlY3RlZFZpZXdUeXBlO1xuICAgICAgICAgICAgaWYgKHZhbHVlLnNlbGVjdGVkV2lkZ2V0Q29uZmlnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZV9jb2x1bW5zX2NvbmZpZ1sna3BpQ29uZmlnJ10gPSB2YWx1ZS5zZWxlY3RlZFdpZGdldENvbmZpZztcbiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlRGF0YUNvbmZpZyA9IHZhbHVlLnNlbGVjdGVkV2lkZ2V0Q29uZmlnLmRhdGFDb25maWc7XG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZURhdGFDb25maWcuY29sdW1ucyA9IHZhbHVlLnNlbGVjdGVkV2lkZ2V0Q29uZmlnLmRhdGFDb25maWcuY29sdW1ucztcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUuc2VsZWN0ZWRXaWRnZXRDb25maWcudmlld1Byb3BlcnRpZXMgJiYgdmFsdWUuc2VsZWN0ZWRXaWRnZXRDb25maWcudmlld1Byb3BlcnRpZXMuY2xpY2tFdmVudE9wdGlvbnMuYXNzb2NpYXRlZFZpZXdzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmlld1Byb3BlcnRpZXMgPSB2YWx1ZS5zZWxlY3RlZFdpZGdldENvbmZpZy52aWV3UHJvcGVydGllcztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3UHJvcGVydGllcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZW5hYmxlQ2xpY2tFdmVudFwiOiB2YWx1ZS5zZWxlY3RlZFdpZGdldENvbmZpZy52aWV3UHJvcGVydGllcy5lbmFibGVDbGlja0V2ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJlbmFibGVSaWdodENsaWNrRXZlbnRcIjogdmFsdWUuc2VsZWN0ZWRXaWRnZXRDb25maWcudmlld1Byb3BlcnRpZXMuZW5hYmxlUmlnaHRDbGlja0V2ZW50XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUuc2VsZWN0ZWRXaWRnZXRDb25maWcudmlld1Byb3BlcnRpZXMuZW5hYmxlQ2xpY2tFdmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3UHJvcGVydGllc1snY2xpY2tFdmVudE9wdGlvbnMnXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImV2ZW50VHlwZVwiOiB2YWx1ZS5zZWxlY3RlZFdpZGdldENvbmZpZy52aWV3UHJvcGVydGllcy5jbGlja0V2ZW50T3B0aW9ucy5ldmVudFR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhc3NvY2lhdGVkVmlld3NcIjogdmFsdWUuc2VsZWN0ZWRXaWRnZXRDb25maWcudmlld1Byb3BlcnRpZXMuY2xpY2tFdmVudE9wdGlvbnMuYXNzb2NpYXRlZFZpZXdzXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdQcm9wZXJ0aWVzWydjbGlja0V2ZW50T3B0aW9ucyddID0ge31cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlRGF0YUNvbmZpZy5jb2x1bW5zID0gdmFsdWUuY29sdW1uRGF0YTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy50YWJsZURhdGFDb25maWcuY29sdW1ucykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYmxlRGF0YUNvbmZpZy5jb2x1bW5zLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50Wydjb2xvciddID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50Wydpc1Nob3dCYXInXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YWJsZURhdGFDb25maWcuY29sdW1ucyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZ0NvbHVtZS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG9iaiA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInZpc2libGVcIjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImlzU2hvd0JhclwiOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGF0YUZpZWxkXCI6IGVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjYXB0aW9uXCI6IHRoaXMuY29tbW9uU2VydmljZS5jb252ZXJ0U3RyaW5nKGVsZW1lbnQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZW5yaWNoTmFtZVwiOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY29sb3JcIjogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50YWJsZURhdGFDb25maWcuY29sdW1ucy5wdXNoKG9iaik7XG5cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMuY29uZmlnQ29sdW1lKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzTG9hZGVyID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZXJ2aWNlLmdldEFwcFZpZXdDb25maWdzKCkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmFsbENvbmZpZ3VyZWRWaWV3cyA9IGRhdGE7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICAgICAgICB9LCBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50YW9zdHIuZXJyb3IoJ1VuZXhwZWN0ZWQgU2VydmVyIEV4Y2VwdGlvbi4gUGxlYXNlIGNvbnRhY3QgU3lzdGVtIEFkbWluLicsICdBbGwgVmlld3MnKVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICAgIHRoaXMub3B0aW9uYWxEcmlsRG93bkRhdGFTb3VyY2UgPSBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgJ3ZpZXdJZCc6IFwiXCIsXG4gICAgICAgICAgICAgICAgJ2ZpbHRlckNvbmRpdGlvbic6IFwiXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgIH1cbiAgICBhZGRDb2x1bW5zKCkge1xuICAgICAgICBsZXQgb2JqID0ge1xuICAgICAgICAgICAgXCJ2aXNpYmxlXCI6IHRydWUsXG4gICAgICAgICAgICBcImlzU2hvd0JhclwiOiB0cnVlLFxuICAgICAgICAgICAgXCJkYXRhRmllbGRcIjogXCJcIixcbiAgICAgICAgICAgIFwiY2FwdGlvblwiOiBcIlwiLFxuICAgICAgICAgICAgXCJlbnJpY2hOYW1lXCI6IFwiXCIsXG4gICAgICAgICAgICBcImNvbG9yXCI6IFwiXCIsXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRhYmxlRGF0YUNvbmZpZy5jb2x1bW5zLnB1c2gob2JqKTtcbiAgICB9XG5cbiAgICBkZWxldGVDb2x1bW5zKGkpIHtcbiAgICAgICAgdGhpcy50YWJsZURhdGFDb25maWcuY29sdW1ucy5zcGxpY2UoaSwgMSlcbiAgICB9XG5cbiAgICBnZXRFbnJpY2hDbGFzc05hbWUoZSwgaXRlbSkge1xuICAgICAgICBpdGVtLmVucmljaE5hbWUgPSBlLnZhbHVlO1xuXG4gICAgfVxuXG5cbiAgICBtb3ZlSXRlbUZvckNvbHVtbnMoaW5kZXg6IG51bWJlciwgZGlyZWN0aW9uOiAndXAnIHwgJ2Rvd24nKTogdm9pZCB7XG4gICAgICAgIC8vIFByZXZlbnQgbW92aW5nIGJleW9uZCBhcnJheSBib3VuZHNcbiAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLnRhYmxlRGF0YUNvbmZpZy5jb2x1bW5zLmxlbmd0aCkgcmV0dXJuO1xuICAgICAgICBjb25zdCBuZXdQb3NpdGlvbiA9IGRpcmVjdGlvbiA9PT0gJ3VwJyA/IGluZGV4IC0gMSA6IGluZGV4ICsgMTtcbiAgICAgICAgLy8gUHJldmVudCBtb3ZpbmcgYmV5b25kIGFycmF5IGJvdW5kc1xuICAgICAgICBpZiAobmV3UG9zaXRpb24gPCAwIHx8IG5ld1Bvc2l0aW9uID49IHRoaXMudGFibGVEYXRhQ29uZmlnLmNvbHVtbnMubGVuZ3RoKSByZXR1cm47XG5cbiAgICAgICAgLy8gTW92ZSBpdGVtXG4gICAgICAgIGNvbnN0IGl0ZW1Ub01vdmUgPSB0aGlzLnRhYmxlRGF0YUNvbmZpZy5jb2x1bW5zW2luZGV4XTtcbiAgICAgICAgdGhpcy50YWJsZURhdGFDb25maWcuY29sdW1ucy5zcGxpY2UoaW5kZXgsIDEpOyAvLyBSZW1vdmUgaXRlbSBmcm9tIGN1cnJlbnQgcG9zaXRpb25cbiAgICAgICAgdGhpcy50YWJsZURhdGFDb25maWcuY29sdW1ucy5zcGxpY2UobmV3UG9zaXRpb24sIDAsIGl0ZW1Ub01vdmUpOyAvLyBJbnNlcnQgaXRlbSBpbiBuZXcgcG9zaXRpb25cbiAgICB9XG5cbiAgICBnZXRPYmplY3RLZXlzKG9iajogYW55KTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMob2JqKTtcbiAgICB9XG4gICAgc2V0QWN0aXZlVGFiKHRhYjogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlVGFiID0gdGFiO1xuICAgIH1cblxuICAgIGdldEdyb3VwQ29sdW1ucyhjb2x1bW5zKSB7XG4gICAgICAgIGNvbnN0IGdyb3VwZWRDb2x1bW5zID0gY29sdW1ucy5yZWR1Y2UoKGFjYywgY29sdW1uKSA9PiB7XG4gICAgICAgICAgICBsZXQgZ3JvdXAgPSBhY2MuZmluZChpdGVtID0+IGl0ZW0uY2FwdGlvbiA9PT0gY29sdW1uLmdyb3VwKTtcbiAgICAgICAgICAgIGlmICghZ3JvdXApIHtcbiAgICAgICAgICAgICAgICBncm91cCA9IHtcbiAgICAgICAgICAgICAgICAgICAgY2FwdGlvbjogY29sdW1uLmdyb3VwLFxuICAgICAgICAgICAgICAgICAgICBjb2x1bW5zOiBbXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYWNjLnB1c2goZ3JvdXApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ3JvdXAuY29sdW1ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICBkYXRhRmllbGQ6IGNvbHVtbi5kYXRhRmllbGQsXG4gICAgICAgICAgICAgICAgdmlzaWJsZTogY29sdW1uLnZpc2libGUsXG4gICAgICAgICAgICAgICAgY2FwdGlvbjogY29sdW1uLmNhcHRpb25cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSwgW10pO1xuICAgICAgICByZXR1cm4gZ3JvdXBlZENvbHVtbnM7XG4gICAgfVxuICAgIGdlQ29sdW1uc0Zyb21Hcm91cChjb2x1bW5zKSB7XG4gICAgICAgIGNvbnN0IG5ld0NvbHVtbnMgPSBbXTtcblxuICAgICAgICBjb2x1bW5zLmZvckVhY2goZ3JvdXAgPT4ge1xuICAgICAgICAgICAgZ3JvdXAuY29sdW1ucy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgICAgICAgbmV3Q29sdW1ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YUZpZWxkOiBjb2wuZGF0YUZpZWxkLFxuICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiBjb2wudmlzaWJsZSxcbiAgICAgICAgICAgICAgICAgICAgY2FwdGlvbjogY29sLmNhcHRpb24sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBuZXdDb2x1bW5zO1xuICAgIH1cblxuXG4gICAgZ2V0U2F2ZUNoYXJ0Q29uZmlnKCkge1xuXG4gICAgICAgIHRoaXMudGFibGVfY29sdW1uc19jb25maWcua3BpQ29uZmlnWydkYXRhQ29uZmlnJ10gPSB0aGlzLnRhYmxlRGF0YUNvbmZpZztcbiAgICAgICAgaWYgKHRoaXMudmlld1Byb3BlcnRpZXMuY2xpY2tFdmVudE9wdGlvbnMuZXZlbnRUeXBlID09ICdvcHRpb25hbERyaWxsRG93bicpIHtcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BlcnRpZXNbJ2NsaWNrRXZlbnRPcHRpb25zJ11bJ2Fzc29jaWF0ZWRWaWV3cyddID0gdGhpcy5vcHRpb25hbERyaWxEb3duRGF0YVNvdXJjZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudGFibGVfY29sdW1uc19jb25maWcua3BpQ29uZmlnWyd2aWV3UHJvcGVydGllcyddID0gdGhpcy52aWV3UHJvcGVydGllcztcbiAgICAgICAgY29uc29sZS5sb2codGhpcy50YWJsZV9jb2x1bW5zX2NvbmZpZyk7XG4gICAgICAgIHRoaXMuY3JlYXRlT3RoZXJDb21wb25lbnRWaWV3LmVtaXQodGhpcy50YWJsZV9jb2x1bW5zX2NvbmZpZyk7XG4gICAgfVxuXG4gICAgZGVsZXRlQXNzb2NpYXRlZFBhcmFtcyhpbmRleCkge1xuICAgICAgICB0aGlzLm9wdGlvbmFsRHJpbERvd25EYXRhU291cmNlLnNwbGljZShpbmRleCwgMSlcbiAgICB9XG5cbiAgICBhZGRBc3NvY2lhdGVkUGFyYW1zKCkge1xuICAgICAgICB0aGlzLm9wdGlvbmFsRHJpbERvd25EYXRhU291cmNlLnB1c2goe1xuICAgICAgICAgICAgJ3ZpZXdJZCc6IFwiXCIsXG4gICAgICAgICAgICAnZmlsdGVyQ29uZGl0aW9uJzogXCJcIlxuICAgICAgICB9KVxuICAgIH1cblxuICAgIGdldFNlbGVjdGVkRXZlbnRUeXBlKGUpIHtcblxuICAgICAgICBpZiAoZS5ldmVudCkge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25hbERyaWxEb3duRGF0YVNvdXJjZSA9IFtdO1xuICAgICAgICAgICAgaWYgKHRoaXMudmlld1Byb3BlcnRpZXMuY2xpY2tFdmVudE9wdGlvbnMuZXZlbnRUeXBlID09ICdkcmlsbGRvd24nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZV9jb2x1bW5zX2NvbmZpZy5rcGlDb25maWdbJ3ZpZXdQcm9wZXJ0aWVzJ11bJ2Fzc29jaWF0ZWRWaWV3cyddID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuXG4gICAgfVxuXG4gICAgcmVzZXRWaWV3UHJvcHJzdGlzZSgpIHtcbiAgICAgICAgdGhpcy52aWV3UHJvcGVydGllcyA9IHtcbiAgICAgICAgICAgIGVuYWJsZUNsaWNrRXZlbnQ6IGZhbHNlLFxuICAgICAgICAgICAgZW5hYmxlUmlnaHRDbGlja0V2ZW50OiB0cnVlLFxuICAgICAgICAgICAgY2xpY2tFdmVudE9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICBhc3NvY2lhdGVkVmlld3M6IFtdLFxuICAgICAgICAgICAgICAgIGV2ZW50VHlwZTogXCJcIlxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHZpZXdNYXBGb3JUZXN0KCkge1xuICAgICAgICB0aGlzLnRhYmxlX2NvbHVtbnNfY29uZmlnLmtwaUNvbmZpZ1snZGF0YUNvbmZpZyddID0gdGhpcy50YWJsZURhdGFDb25maWc7XG4gICAgICAgIGlmICh0aGlzLnZpZXdQcm9wZXJ0aWVzLmNsaWNrRXZlbnRPcHRpb25zLmV2ZW50VHlwZSA9PSAnb3B0aW9uYWxEcmlsbERvd24nKSB7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wZXJ0aWVzWydjbGlja0V2ZW50T3B0aW9ucyddWydhc3NvY2lhdGVkVmlld3MnXSA9IHRoaXMub3B0aW9uYWxEcmlsRG93bkRhdGFTb3VyY2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRhYmxlX2NvbHVtbnNfY29uZmlnLmtwaUNvbmZpZ1sndmlld1Byb3BlcnRpZXMnXSA9IHRoaXMudmlld1Byb3BlcnRpZXM7XG5cbiAgICAgICAgdGhpcy50YWJsZV9jb2x1bW5zX2NvbmZpZy5rcGlDb25maWdbJ2RhdGFTb3VyY2UnXSA9IHRoaXMuZGF0YVNvdXJzZUZvclRhYmxlO1xuICAgICAgICB0aGlzLmNoYXJ0RGF0YVNvdXJjZUZvck1hcCA9IHRoaXMudGFibGVfY29sdW1uc19jb25maWc7XG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuY2hhcnREYXRhU291cmNlRm9yTWFwLCAndGFibGUgd2l0aCBiYXIgY2hhcnQgZGF0YScpO1xuXG4gICAgICAgIHRoaXMuaXNKc29uUHJldmlldyA9IHRydWU7XG5cbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXdyYXBcIj5cbiAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIG14LTIgYm9yZGVyLXJcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0pzb25QcmV2aWV3XCI+XG4gICAgICAgICAgICA8cHJlPjxjb2RlPnt7anNhb25EYXRhc291cmNlIHwganNvbn19PC9jb2RlPjwvcHJlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzSnNvblByZXZpZXdcIj5cbiAgICAgICAgIDwhLS0gPGFwcC1nYW1tYS10YWJsZS13aXRoLXBlcmNlbnRhZ2UgW2NoYXJ0RGF0YVNvdXJjZV09XCJjaGFydERhdGFTb3VyY2VGb3JNYXBcIj48L2FwcC1nYW1tYS10YWJsZS13aXRoLXBlcmNlbnRhZ2U+IC0tPlxuICAgICAgICAgPGFwcC1nYW1tYS10YWJsZS1jbHVtbi1iYXItY2hhcnQgW2NoYXJ0RGF0YVNvdXJjZV09XCJjaGFydERhdGFTb3VyY2VGb3JNYXBcIj48L2FwcC1nYW1tYS10YWJsZS1jbHVtbi1iYXItY2hhcnQ+XG5cbiAgICAgICAgICAgIDxkaXYgI2R5bmFtaWNDb250YWluZXI+PC9kaXY+XG5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInctZnVsbCBteC0yXCI+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTQgYm9yZGVyLWIgYm9yZGVyLWdyYXktMjAwIGRhcms6Ym9yZGVyLWdyYXktNzAwXCI+XG4gICAgICAgICAgICA8dWwgY2xhc3M9XCJmbGV4IGZsZXgtd3JhcCAtbWItcHggdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWNlbnRlclwiIHJvbGU9XCJ0YWJsaXN0XCI+XG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibWUtMlwiIHJvbGU9XCJwcmVzZW50YXRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImlubGluZS1ibG9jayBwLTQgYm9yZGVyLWItMiByb3VuZGVkLXQtbGdcIiBbbmdDbGFzc109XCJ7IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXh0LXB1cnBsZS02MDAgYm9yZGVyLXB1cnBsZS02MDAgZGFyazp0ZXh0LXB1cnBsZS01MDAgZGFyazpib3JkZXItcHVycGxlLTUwMCc6IGFjdGl2ZVRhYiA9PT0gJ2Jhc2ljJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGV4dC1ncmF5LTUwMCBkYXJrOnRleHQtZ3JheS00MDAgYm9yZGVyLXRyYW5zcGFyZW50JzogYWN0aXZlVGFiICE9PSAnYmFzaWMnIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiIChjbGljayk9XCJzZXRBY3RpdmVUYWIoJ2Jhc2ljJylcIiB0eXBlPVwiYnV0dG9uXCIgcm9sZT1cInRhYlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgQmFzaWNcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJtZS0yXCIgcm9sZT1cInByZXNlbnRhdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiaW5saW5lLWJsb2NrIHAtNCBib3JkZXItYi0yIHJvdW5kZWQtdC1sZ1wiIFtuZ0NsYXNzXT1cInsgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RleHQtcHVycGxlLTYwMCBib3JkZXItcHVycGxlLTYwMCBkYXJrOnRleHQtcHVycGxlLTUwMCBkYXJrOmJvcmRlci1wdXJwbGUtNTAwJzogYWN0aXZlVGFiID09PSAnY29sdW1ucycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RleHQtZ3JheS01MDAgZGFyazp0ZXh0LWdyYXktNDAwIGJvcmRlci10cmFuc3BhcmVudCc6IGFjdGl2ZVRhYiAhPT0gJ2NvbHVtbnMnIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiIChjbGljayk9XCJzZXRBY3RpdmVUYWIoJ2NvbHVtbnMnKVwiIHR5cGU9XCJidXR0b25cIiByb2xlPVwidGFiXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBDb2x1bW5zXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibWUtMlwiIHJvbGU9XCJwcmVzZW50YXRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImlubGluZS1ibG9jayBwLTQgYm9yZGVyLWItMiByb3VuZGVkLXQtbGdcIiBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXh0LXB1cnBsZS02MDAgYm9yZGVyLXB1cnBsZS02MDAgZGFyazp0ZXh0LXB1cnBsZS01MDAgZGFyazpib3JkZXItcHVycGxlLTUwMCc6IGFjdGl2ZVRhYiA9PT0gJ3Byb3BlcnRpZXMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGV4dC1ncmF5LTUwMCBkYXJrOnRleHQtZ3JheS00MDAgYm9yZGVyLXRyYW5zcGFyZW50JzogYWN0aXZlVGFiICE9PSAncHJvcGVydGllcydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCIgKGNsaWNrKT1cInNldEFjdGl2ZVRhYigncHJvcGVydGllcycpXCIgdHlwZT1cImJ1dHRvblwiIHJvbGU9XCJ0YWJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIFByb3BlcnRpZXNcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9saT5cblxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBpZD1cImRlZmF1bHQtc3R5bGVkLXRhYi1jb250ZW50XCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYWN0aXZlVGFiID09PSAnYmFzaWMnXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZmxleC1hdXRvIG1pbi13LTAgbXktMlwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1zbSBweS0xIGZvbnQtZXh0cmFib2xkIGJvcmRlci1iIGJnLWdyYXktNzAwIHRleHQtd2hpdGUgcHgtMlwiPiBGaWx0ZXIgVGl0bGVcbiAgICAgICAgICAgICAgICAgICAgICAgIENvbmZpZ1xuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB0LTIgYm9yZGVyLXggYm9yZGVyLWIgXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXktMiBmbGV4IGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0xIG1iLTEgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW1kIG1iLTFcIj4gVGl0bGU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4LXRleHQtYm94IFsobmdNb2RlbCldPVwidGFibGVEYXRhQ29uZmlnLmNvbW1vbkNvbmZpZy50aXRsZVwiPjwvZHgtdGV4dC1ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTEgbWItMSB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWQgbWItMVwiPiBEYXRhIEZpZWxkPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC1zZWxlY3QtYm94IFtzZWFyY2hFbmFibGVkXT1cInRydWVcIiBbaXRlbXNdPVwiY29uZmlnQ29sdW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidGFibGVEYXRhQ29uZmlnLmNvbW1vbkNvbmZpZy5kYXRhRmllbGRcIj48L2R4LXNlbGVjdC1ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwicHgtMSBtYi0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW1kIG1iLTFcIj4gQ2hlY2tlZCBLZXk8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4LXNlbGVjdC1ib3ggW3NlYXJjaEVuYWJsZWRdPVwidHJ1ZVwiIFtpdGVtc109XCJjb25maWdDb2x1bWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ0YWJsZURhdGFDb25maWcuY29tbW9uQ29uZmlnLmRhdGFGaWVsZFwiPjwvZHgtc2VsZWN0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwicHgtNCBtdC02IHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHgtY2hlY2stYm94IFt2YWx1ZV09XCJ0YWJsZURhdGFDb25maWcuY29tbW9uQ29uZmlnLmlzU2VhcmNoQm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidGFibGVEYXRhQ29uZmlnLmNvbW1vbkNvbmZpZy5pc1NlYXJjaEJveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0PVwiU2VhcmNoIEJveFwiPjwvZHgtY2hlY2stYm94PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0xIG1iLTEgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW1kIG1iLTJcIj4gRGlzcGxheSBGb3JtYXRlIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHgtc2VsZWN0LWJveCBbaXRlbXNdPVwiWydkYWlseScsJ2hvdXJseScsJ21vbnRobHknXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInRhYmxlX2NvbHVtbnNfY29uZmlnLmtwaUNvbmZpZy5mb3JtYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJmYWxzZVwiPjwvZHgtc2VsZWN0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMSBtYi0xIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZCBtYi0yXCI+IEtleSBUbyBQYXNzIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHgtdGFnLWJveCBbaXRlbXNdPVwiY29uZmlnQ29sdW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidGFibGVfY29sdW1uc19jb25maWcua3BpQ29uZmlnLmtleVRvUGFzc1wiPjwvZHgtdGFnLWJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBmbGV4LWF1dG8gbWluLXctMCBteS0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXNtIHB5LTEgZm9udC1leHRyYWJvbGQgYm9yZGVyLWIgYmctZ3JheS03MDAgdGV4dC13aGl0ZSBweC0yXCI+IFRhYmxlIENvbmZpZ1xuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxzZS1yb3cgcHktMyBib3JkZXIteCBib3JkZXItYiBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0xIG1iLTIgbXQtOCB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHgtY2hlY2stYm94IFt2YWx1ZV09XCJ0YWJsZURhdGFDb25maWcuc2VhcmNoUGFuZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInRhYmxlRGF0YUNvbmZpZy5zZWFyY2hQYW5lbFwiIHRleHQ9XCJTZWFyY2ggUGFuZWxcIj48L2R4LWNoZWNrLWJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIiBweC0xIG1iLTIgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWQgbWItMlwiPkZpbGUgTmFtZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveCBbKG5nTW9kZWwpXT1cInRhYmxlRGF0YUNvbmZpZy5maWxlX25hbWVcIj48L2R4LXRleHQtYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMSBtYi0yIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW1kIG1iLTJcIj4gTnVtYmVyIE9mIFJvdzwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC1udW1iZXItYm94IFt2YWx1ZV09XCJ0YWJsZURhdGFDb25maWcubnVtYmVyT2ZSb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInRhYmxlRGF0YUNvbmZpZy5udW1iZXJPZlJvd1wiPjwvZHgtbnVtYmVyLWJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTEgbWItMiBtdC04IHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC1jaGVjay1ib3ggW3ZhbHVlXT1cInRhYmxlRGF0YUNvbmZpZy5wYWdlSW5mb1wiIFsobmdNb2RlbCldPVwidGFibGVEYXRhQ29uZmlnLnBhZ2VJbmZvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dD1cIlBhZ2UgSW5mb1wiPjwvZHgtY2hlY2stYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJhY3RpdmVUYWIgPT09ICdjb2x1bW5zJ1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoLWZ1bGwgb3ZlcmZsb3cteC1hdXRvXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGZsZXgtYXV0byBtaW4tdy0wXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwdC0yIGJvcmRlci14IGJvcmRlci1iIFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteS0yIGJvcmRlci1iIGZsZXggZmxleC1yb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiB0YWJsZURhdGFDb25maWcuY29sdW1uczsgbGV0IGkgPSBpbmRleDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTEgbWItMiBtdC02IHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4LWNoZWNrLWJveCBbdmFsdWVdPVwiaXRlbS52aXNpYmxlXCIgWyhuZ01vZGVsKV09XCJpdGVtLnZpc2libGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ9XCJWaXNpYmxpdHlcIj48L2R4LWNoZWNrLWJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTEgbWItMiB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW1kIG1iLTJcIj4gVmFsdWUgRmllbGQ8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC1zZWxlY3QtYm94IFtzZWFyY2hFbmFibGVkXT1cInRydWVcIiBbaXRlbXNdPVwiY29uZmlnQ29sdW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIml0ZW0uZGF0YUZpZWxkXCI+PC9keC1zZWxlY3QtYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTEgbWItMiB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW1kIG1iLTJcIj4gQ2FwdGlvbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4LXRleHQtYm94IFsobmdNb2RlbCldPVwiaXRlbS5jYXB0aW9uXCI+PC9keC10ZXh0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0yIG1iLTIgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZCBtYi0yXCI+IFVJIEZ1bmN0aW9uPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHgtc2VsZWN0LWJveCBbaXRlbXNdPVwiZW5yaWNoTmFtZUxpc3RcIiBbKG5nTW9kZWwpXT1cIml0ZW0uZW5yaWNoTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaEVuYWJsZWRdPVwidHJ1ZVwiPjwvZHgtc2VsZWN0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0xIG1iLTIgbXQtNiB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC1jaGVjay1ib3ggW3ZhbHVlXT1cIml0ZW0uaXNTaG93QmFyXCIgWyhuZ01vZGVsKV09XCJpdGVtLmlzU2hvd0JhclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dD1cIkFsbG93IEJhclwiPjwvZHgtY2hlY2stYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMSBtYi0yIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWQgbWItMlwiPkNvbG9yPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHgtY29sb3ItYm94IFsobmdNb2RlbCldPVwiaXRlbS5jb2xvclwiPjwvZHgtY29sb3ItYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIG10LTggdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiaSAhPT0gMFwiIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9saWdodF9zbX19IGN1cnNvci1wb2ludGVyIG14LTFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJtb3ZlSXRlbUZvckNvbHVtbnMoaSwgJ3VwJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWFycm93LXVwXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJpICE9PSB0YWJsZURhdGFDb25maWcuY29sdW1ucy5sZW5ndGggLSAxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5fbGlnaHRfc219fSBjdXJzb3ItcG9pbnRlciBteC0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwibW92ZUl0ZW1Gb3JDb2x1bW5zKGksICdkb3duJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWFycm93LWRvd25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYnRuX2Rhbmdlcl9zbX19IGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlQ29sdW1ucyhpKVwiPjxpIGNsYXNzPVwiZmEgZmEtdHJhc2gtb1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWVuZCBteS0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9wcmltYXJ5X3NtfX0gY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwiYWRkQ29sdW1ucygpXCI+QWRkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sdW1uczwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFjdGl2ZVRhYiA9PT0gJ3Byb3BlcnRpZXMnXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImgtZnVsbCBvdmVyZmxvdy14LWF1dG9cIj5cbiAgICAgICAgICAgICAgICAgICAgPGFwcC1sb2FkZXIgKm5nSWY9XCJpc0xvYWRlclwiPjwvYXBwLWxvYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0xvYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1iZXR3ZWVuIGJvcmRlci1iIHB5LTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXgtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHgtY2hlY2stYm94IFt2YWx1ZV09XCJ2aWV3UHJvcGVydGllcy5lbmFibGVDbGlja0V2ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidmlld1Byb3BlcnRpZXMuZW5hYmxlQ2xpY2tFdmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0PVwiRW5hYmxlIENsaWNrIEV2ZW50XCI+PC9keC1jaGVjay1ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm14LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4LWNoZWNrLWJveCBbdmFsdWVdPVwidmlld1Byb3BlcnRpZXMuZW5hYmxlUmlnaHRDbGlja0V2ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidmlld1Byb3BlcnRpZXMuZW5hYmxlUmlnaHRDbGlja0V2ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ9XCJFbmFibGUgUmlnaHQgQ2xpY2tcIj48L2R4LWNoZWNrLWJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBwLTJcIiAqbmdJZj1cInZpZXdQcm9wZXJ0aWVzLmVuYWJsZUNsaWNrRXZlbnRcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGZsZXgtYXV0byBtaW4tdy0wIG15LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtc20gcHktMSBmb250LWV4dHJhYm9sZCBib3JkZXItYiBiZy1ncmF5LTcwMCB0ZXh0LXdoaXRlIHB4LTJcIj4gRXZlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBwLTMgYm9yZGVyLXggYm9yZGVyLWIgXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWQgbWItMlwiPiBFdmVudCBUeXBlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHgtc2VsZWN0LWJveCBbaXRlbXNdPVwiWydkcmlsbGRvd24nLCdvcHRpb25hbERyaWxsRG93biddXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvblZhbHVlQ2hhbmdlZCk9XCJnZXRTZWxlY3RlZEV2ZW50VHlwZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidmlld1Byb3BlcnRpZXMuY2xpY2tFdmVudE9wdGlvbnMuZXZlbnRUeXBlXCI+PC9keC1zZWxlY3QtYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidmlld1Byb3BlcnRpZXMuY2xpY2tFdmVudE9wdGlvbnMuZXZlbnRUeXBlID09ICdkcmlsbGRvd24nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1iZXR3ZWVuIG10LTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWQgbWItMlwiPiBBc3NvY2lhdGVkIFZpZXdzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHgtdGFnLWJveCBbaXRlbXNdPVwiYWxsQ29uZmlndXJlZFZpZXdzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInZpZXdQcm9wZXJ0aWVzLmNsaWNrRXZlbnRPcHRpb25zLmFzc29jaWF0ZWRWaWV3c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVFeHByPVwidmlld0lkXCIgZGlzcGxheUV4cHI9XCJ2aWV3TmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dTZWxlY3Rpb25Db250cm9sc109XCJ0cnVlXCIgW3NlYXJjaEVuYWJsZWRdPVwidHJ1ZVwiPjwvZHgtdGFnLWJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInZpZXdQcm9wZXJ0aWVzLmNsaWNrRXZlbnRPcHRpb25zLmV2ZW50VHlwZSA9PSAnb3B0aW9uYWxEcmlsbERvd24nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1iZXR3ZWVuIG10LTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIG9wdGlvbmFsRHJpbERvd25EYXRhU291cmNlO2xldCBpID0gaW5kZXg7XCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm14LTIgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZCBtYi0yXCI+IEFzc29jaWF0ZWQgVmlld3M8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC10YWctYm94IFtpdGVtc109XCJhbGxDb25maWd1cmVkVmlld3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaXRlbS52aWV3SWRcIiB2YWx1ZUV4cHI9XCJ2aWV3SWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlFeHByPVwidmlld05hbWVcIiBbc2hvd1NlbGVjdGlvbkNvbnRyb2xzXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXhEaXNwbGF5ZWRUYWdzXT1cIjJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hFbmFibGVkXT1cInRydWVcIj48L2R4LXRhZy1ib3g+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZCBtYi0yXCI+IEFzc29jaWF0ZWQgUGFyYW1zPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIml0ZW0uZmlsdGVyQ29uZGl0aW9uXCI+PC9keC10ZXh0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYnRuX2Rhbmdlcl9zbX19IGN1cnNvci1wb2ludGVyIG10LThcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVBc3NvY2lhdGVkUGFyYW1zKGkpXCI+PGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmYSBmYS10cmFzaC1vXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWVuZCBtdC00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5fcHJpbWFyeV9zbX19IGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZEFzc29jaWF0ZWRQYXJhbXMoKVwiPkFkZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXJhbXM8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYnRuX2xpZ2h0X21kfX0gY3Vyc29yLXBvaW50ZXIgbXQtMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVzZXRWaWV3UHJvcHJzdGlzZSgpXCI+UmVzZXQgQWxsPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8L2Rpdj5cblxuXG4gICAgPC9kaXY+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgYm9yZGVyLXQgcGwtM1wiPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktc3RhcnQgbXgtMVwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl93YXJuaW5nX21kfX0gY3Vyc29yLXBvaW50ZXIgbXQtMlwiIChjbGljayk9XCJ2aWV3TWFwRm9yVGVzdCgpXCI+XG4gICAgICAgICAgICBQcmV2aWV3PC9idXR0b24+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYnRuX3ByaW1hcnlfbWR9fSBjdXJzb3ItcG9pbnRlciBtdC0yXCIgKGNsaWNrKT1cImlzSnNvblByZXZpZXcgPSBmYWxzZVwiPkRhdGFcbiAgICAgICAgICAgIFByZXZpZXc8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWVuZCBteC0xIGZsZXgtZ3Jvd1wiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9zdWNjZXNzX21kfX0gY3Vyc29yLXBvaW50ZXIgbXQtMlwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZ2V0U2F2ZUNoYXJ0Q29uZmlnKClcIj5TdWJtaXQ8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbjwvZGl2PiJdfQ==
|
|
271
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtd2l0aC1iYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2FtbWEtYXBwLWNvbnRyb2xsZXIvc3JjL2xpYi9hcHBsaWNhdGlvbi1jb250cm9sbGVyL3N1cHBvcnQtY29tcG9uZW50cy90YWJsZS13aXRoLWJhci90YWJsZS13aXRoLWJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1tYS1hcHAtY29udHJvbGxlci9zcmMvbGliL2FwcGxpY2F0aW9uLWNvbnRyb2xsZXIvc3VwcG9ydC1jb21wb25lbnRzL3RhYmxlLXdpdGgtYmFyL3RhYmxlLXdpdGgtYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBcUIsU0FBUyxFQUE0QixZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBK0IsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQVV6SixNQUFNLE9BQU8scUJBQXFCO0lBMkQ5QixZQUFtQixhQUE0QixFQUFVLEdBQXNCLEVBQVUsT0FBa0MsRUFBVSxNQUFxQjtRQUF2SSxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUFVLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQVUsWUFBTyxHQUFQLE9BQU8sQ0FBMkI7UUFBVSxXQUFNLEdBQU4sTUFBTSxDQUFlO1FBMUQxSiwwQkFBcUIsR0FBUSxFQUFFLENBQUM7UUFFaEMsdUJBQWtCLEdBQVEsRUFBRSxDQUFDO1FBRzdCLHVCQUFrQixHQUFRLEVBQUUsQ0FBQztRQUU3QixtQkFBYyxHQUFRO1lBQ2xCLGdCQUFnQixFQUFFLEtBQUs7WUFDdkIscUJBQXFCLEVBQUUsSUFBSTtZQUMzQixpQkFBaUIsRUFBRTtnQkFDZixlQUFlLEVBQUUsRUFBRTtnQkFDbkIsU0FBUyxFQUFFLEVBQUU7YUFDaEI7U0FDSixDQUFDO1FBQ0YsK0JBQTBCLEdB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WUFDbEIsZ0JBQWdCLEVBQUUsS0FBSztZQUN2QixxQkFBcUIsRUFBRSxJQUFJO1lBQzNCLGlCQUFpQixFQUFFO2dCQUNmLGVBQWUsRUFBRSxFQUFFO2dCQUNuQixTQUFTLEVBQUUsRUFBRTthQUNoQjtTQUNKLENBQUM7SUFDTixDQUFDO0lBRUQsY0FBYztRQUNWLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUN6RSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUMsU0FBUyxJQUFJLG1CQUFtQixFQUFFO1lBQ3hFLElBQUksQ0FBQyxjQUFjLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FBQztTQUNqRztRQUVELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBRTVFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO1FBQzVFLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUM7UUFDdkQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsMkJBQTJCLENBQUMsQ0FBQztRQUVyRSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztJQUU5QixDQUFDOztrSEFoU1EscUJBQXFCO3NHQUFyQixxQkFBcUIsK0xDWmxDLHU0bUJBOFNNOzJGRGxTTyxxQkFBcUI7a0JBTGpDLFNBQVM7K0JBQ0ksb0JBQW9CO3dNQWtFYix3QkFBd0I7c0JBQXhDLE1BQU07Z0JBSUgsZUFBZTtzQkFEbEIsS0FBSzt1QkFBQyxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiXG5cbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIENvbXBvbmVudFJlZiwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXBwbGljYXRpb25Db250ZW50U2VydmljZSB9IGZyb20gJy4uLy4uL2FwcGxpY2F0aW9uLWNvbnRlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBUb2FzdHJTZXJ2aWNlIH0gZnJvbSAnbmd4LXRvYXN0cic7XG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tbW9uJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhcHAtdGFibGUtd2l0aC1iYXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90YWJsZS13aXRoLWJhci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vdGFibGUtd2l0aC1iYXIuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZVdpdGhCYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIGNoYXJ0RGF0YVNvdXJjZUZvck1hcDogYW55ID0ge307XG4gICAgaXNKc29uUHJldmlldzogYm9vbGVhblxuICAgIGRhdGFTb3Vyc2VGb3JUYWJsZTogYW55ID0gW107XG4gICAganNhb25EYXRhc291cmNlOiBhbnk7XG4gICAgY29uZmlnQ29sdW1lOiBhbnk7XG4gICAgYWxsQ29uZmlndXJlZFZpZXdzOiBhbnkgPSBbXTtcbiAgICAvLyBncm91cE9mVmlld3M6IGFueTtcbiAgICB2aWV3UHJvcGVydGllczogYW55ID0ge1xuICAgICAgICBlbmFibGVDbGlja0V2ZW50OiBmYWxzZSxcbiAgICAgICAgZW5hYmxlUmlnaHRDbGlja0V2ZW50OiB0cnVlLFxuICAgICAgICBjbGlja0V2ZW50T3B0aW9uczoge1xuICAgICAgICAgICAgYXNzb2NpYXRlZFZpZXdzOiBbXSxcbiAgICAgICAgICAgIGV2ZW50VHlwZTogXCJcIlxuICAgICAgICB9XG4gICAgfTtcbiAgICBvcHRpb25hbERyaWxEb3duRGF0YVNvdXJjZTogYW55ID0gW107XG4gICAgdGFibGVfY29sdW1uc19jb25maWcgPSB7XG4gICAgICAgIFwia3BpQ29uZmlnXCI6IHtcbiAgICAgICAgICAgIFwic2VydmljZUlkXCI6IFwiXCIsXG4gICAgICAgICAgICBcImFwaVwiOiBcIi9rcGkvdHJlbmRzL25ldHdvcmsvZ2V0LW1ldHJpYy1kYXRhXCIsXG4gICAgICAgICAgICBcImRpc3BsYXlUeXBlXCI6IFwidGFibGVcIixcbiAgICAgICAgICAgIFwiZm9ybWF0ZVwiOiBcIlwiLFxuICAgICAgICAgICAgXCJrZXlUb1Bhc3NcIjogW10sXG4gICAgICAgICAgICBcImNvbXBvbmVudE5hbWVcIjogXCJHYW1tYVRhYmxlV2l0aFBlcmNlbnRhZ2VDb21wb25lbnRcIixcbiAgICAgICAgICAgIFwiZGF0YUNvbmZpZ1wiOiB7fVxuICAgICAgICB9LFxuICAgIH07XG5cbiAgICB0YWJsZURhdGFDb25maWcgPSB7XG4gICAgICAgIFwic2VhcmNoUGFuZWxcIjogdHJ1ZSxcbiAgICAgICAgXCJmaWxlX25hbWVcIjogXCJcIixcbiAgICAgICAgXCJudW1iZXJPZlJvd1wiOiAxMCxcbiAgICAgICAgXCJwYWdlSW5mb1wiOiB0cnVlLFxuICAgICAgICBcInRhYmxlSGVpZ2h0XCI6ICdhdXRvJyxcbiAgICAgICAgXCJhbGxvd2VkUGFnZVNpemVzXCI6IFtcbiAgICAgICAgICAgIDEwLFxuICAgICAgICAgICAgMjAsXG4gICAgICAgICAgICA1MCxcbiAgICAgICAgICAgIDEwMFxuICAgICAgICBdLFxuICAgICAgICBcImNvbHVtbnNcIjogW1xuXG4gICAgICAgIF0sXG4gICAgICAgIFwiY29tbW9uQ29uZmlnXCI6IHtcbiAgICAgICAgICAgIFwidGl0bGVcIjogXCJcIixcbiAgICAgICAgICAgIFwiZGF0YUZpZWxkXCI6IFwiXCIsXG4gICAgICAgICAgICBcImNoZWNrZWRLZXlcIjogXCJcIixcbiAgICAgICAgICAgIFwiaXNTZWFyY2hCb3hcIjogZmFsc2VcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVucmljaE5hbWVMaXN0ID0gW1wiYWJicmV2aWF0ZU51bWJlclwiLCBcImdldENvbG9yQ29kZVNwYW5cIiwgXCJUaG91c2FuZFNlcGFyYXRvclwiLCBcIlRob3VzYW5kU2VwYXJhdG9yV2l0aFR3b0RlY2ltYWxzXCJdXG4gICAgc2VsZWN0ZWRUYWJsZVZpZXdUeXBlOiBhbnk7XG4gICAgaXNMb2FkZXI6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgc2VsZWN0ZWRWaWV3Q29uZmlnczogYW55O1xuXG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZSwgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLCBwcml2YXRlIHNlcnZpY2U6IEFwcGxpY2F0aW9uQ29udGVudFNlcnZpY2UsIHByaXZhdGUgdGFvc3RyOiBUb2FzdHJTZXJ2aWNlKSB7IH1cblxuICAgIGFjdGl2ZVRhYjogc3RyaW5nID0gJ2Jhc2ljJztcbiAgICBAT3V0cHV0KCkgcHVibGljIGNyZWF0ZU90aGVyQ29tcG9uZW50VmlldzogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgc2VsZWN0ZWRWaWV3cyA9IFtdO1xuXG4gICAgQElucHV0KCdkYXRhc2V0bW9kYWwnKVxuICAgIHNldCBjaGFydGNvbmZpZ0RhdGEodmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgIHRoaXMuanNhb25EYXRhc291cmNlID0gdmFsdWUuZGF0YVswXTtcbiAgICAgICAgICAgIHRoaXMuY29uZmlnQ29sdW1lID0gT2JqZWN0LmtleXModmFsdWUuZGF0YVswXSk7XG4gICAgICAgICAgICB0aGlzLmRhdGFTb3Vyc2VGb3JUYWJsZSA9IHZhbHVlLmRhdGEuc2xpY2UoMCwgNSk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmlld0NvbmZpZ3MgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJsZVZpZXdUeXBlID0gdmFsdWUuc2VsZWN0ZWRWaWV3VHlwZTtcbiAgICAgICAgICAgIGlmICh2YWx1ZS5zZWxlY3RlZFdpZGdldENvbmZpZykge1xuICAgICAgICAgICAgICAgIHRoaXMudGFibGVfY29sdW1uc19jb25maWdbJ2twaUNvbmZpZyddID0gdmFsdWUuc2VsZWN0ZWRXaWRnZXRDb25maWc7XG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZURhdGFDb25maWcgPSB2YWx1ZS5zZWxlY3RlZFdpZGdldENvbmZpZy5kYXRhQ29uZmlnO1xuICAgICAgICAgICAgICAgIHRoaXMudGFibGVEYXRhQ29uZmlnLmNvbHVtbnMgPSB2YWx1ZS5zZWxlY3RlZFdpZGdldENvbmZpZy5kYXRhQ29uZmlnLmNvbHVtbnM7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLnNlbGVjdGVkV2lkZ2V0Q29uZmlnLnZpZXdQcm9wZXJ0aWVzICYmIHZhbHVlLnNlbGVjdGVkV2lkZ2V0Q29uZmlnLnZpZXdQcm9wZXJ0aWVzLmNsaWNrRXZlbnRPcHRpb25zLmFzc29jaWF0ZWRWaWV3cykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdQcm9wZXJ0aWVzID0gdmFsdWUuc2VsZWN0ZWRXaWRnZXRDb25maWcudmlld1Byb3BlcnRpZXM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmlld1Byb3BlcnRpZXMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcImVuYWJsZUNsaWNrRXZlbnRcIjogdmFsdWUuc2VsZWN0ZWRXaWRnZXRDb25maWcudmlld1Byb3BlcnRpZXMuZW5hYmxlQ2xpY2tFdmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZW5hYmxlUmlnaHRDbGlja0V2ZW50XCI6IHZhbHVlLnNlbGVjdGVkV2lkZ2V0Q29uZmlnLnZpZXdQcm9wZXJ0aWVzLmVuYWJsZVJpZ2h0Q2xpY2tFdmVudFxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLnNlbGVjdGVkV2lkZ2V0Q29uZmlnLnZpZXdQcm9wZXJ0aWVzLmVuYWJsZUNsaWNrRXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld1Byb3BlcnRpZXNbJ2NsaWNrRXZlbnRPcHRpb25zJ10gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJldmVudFR5cGVcIjogdmFsdWUuc2VsZWN0ZWRXaWRnZXRDb25maWcudmlld1Byb3BlcnRpZXMuY2xpY2tFdmVudE9wdGlvbnMuZXZlbnRUeXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYXNzb2NpYXRlZFZpZXdzXCI6IHZhbHVlLnNlbGVjdGVkV2lkZ2V0Q29uZmlnLnZpZXdQcm9wZXJ0aWVzLmNsaWNrRXZlbnRPcHRpb25zLmFzc29jaWF0ZWRWaWV3c1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3UHJvcGVydGllc1snY2xpY2tFdmVudE9wdGlvbnMnXSA9IHt9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZURhdGFDb25maWcuY29sdW1ucyA9IHZhbHVlLmNvbHVtbkRhdGE7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudGFibGVEYXRhQ29uZmlnLmNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YWJsZURhdGFDb25maWcuY29sdW1ucy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudFsnY29sb3InXSA9ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudFsnaXNTaG93QmFyJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGFibGVEYXRhQ29uZmlnLmNvbHVtbnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maWdDb2x1bWUuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvYmogPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2aXNpYmxlXCI6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJpc1Nob3dCYXJcIjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRhdGFGaWVsZFwiOiBlbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY2FwdGlvblwiOiB0aGlzLmNvbW1vblNlcnZpY2UuY29udmVydFN0cmluZyhlbGVtZW50KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImVucmljaE5hbWVcIjogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvbG9yXCI6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGFibGVEYXRhQ29uZmlnLmNvbHVtbnMucHVzaChvYmopO1xuXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmNvbmZpZ0NvbHVtZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc0xvYWRlciA9IHRydWU7XG4gICAgICAgIHRoaXMuc2VydmljZS5nZXRBcHBWaWV3Q29uZmlncygpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hbGxDb25maWd1cmVkVmlld3MgPSBkYXRhO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgICAgICAgfSwgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudGFvc3RyLmVycm9yKCdVbmV4cGVjdGVkIFNlcnZlciBFeGNlcHRpb24uIFBsZWFzZSBjb250YWN0IFN5c3RlbSBBZG1pbi4nLCAnQWxsIFZpZXdzJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgICAgICB0aGlzLm9wdGlvbmFsRHJpbERvd25EYXRhU291cmNlID0gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICd2aWV3SWQnOiBcIlwiLFxuICAgICAgICAgICAgICAgICdmaWx0ZXJDb25kaXRpb24nOiBcIlwiXG4gICAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICB9XG4gICAgYWRkQ29sdW1ucygpIHtcbiAgICAgICAgbGV0IG9iaiA9IHtcbiAgICAgICAgICAgIFwidmlzaWJsZVwiOiB0cnVlLFxuICAgICAgICAgICAgXCJpc1Nob3dCYXJcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZGF0YUZpZWxkXCI6IFwiXCIsXG4gICAgICAgICAgICBcImNhcHRpb25cIjogXCJcIixcbiAgICAgICAgICAgIFwiZW5yaWNoTmFtZVwiOiBcIlwiLFxuICAgICAgICAgICAgXCJjb2xvclwiOiBcIlwiLFxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50YWJsZURhdGFDb25maWcuY29sdW1ucy5wdXNoKG9iaik7XG4gICAgfVxuXG4gICAgZGVsZXRlQ29sdW1ucyhpKSB7XG4gICAgICAgIHRoaXMudGFibGVEYXRhQ29uZmlnLmNvbHVtbnMuc3BsaWNlKGksIDEpXG4gICAgfVxuXG4gICAgZ2V0RW5yaWNoQ2xhc3NOYW1lKGUsIGl0ZW0pIHtcbiAgICAgICAgaXRlbS5lbnJpY2hOYW1lID0gZS52YWx1ZTtcblxuICAgIH1cblxuXG4gICAgbW92ZUl0ZW1Gb3JDb2x1bW5zKGluZGV4OiBudW1iZXIsIGRpcmVjdGlvbjogJ3VwJyB8ICdkb3duJyk6IHZvaWQge1xuICAgICAgICAvLyBQcmV2ZW50IG1vdmluZyBiZXlvbmQgYXJyYXkgYm91bmRzXG4gICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy50YWJsZURhdGFDb25maWcuY29sdW1ucy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgY29uc3QgbmV3UG9zaXRpb24gPSBkaXJlY3Rpb24gPT09ICd1cCcgPyBpbmRleCAtIDEgOiBpbmRleCArIDE7XG4gICAgICAgIC8vIFByZXZlbnQgbW92aW5nIGJleW9uZCBhcnJheSBib3VuZHNcbiAgICAgICAgaWYgKG5ld1Bvc2l0aW9uIDwgMCB8fCBuZXdQb3NpdGlvbiA+PSB0aGlzLnRhYmxlRGF0YUNvbmZpZy5jb2x1bW5zLmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgICAgIC8vIE1vdmUgaXRlbVxuICAgICAgICBjb25zdCBpdGVtVG9Nb3ZlID0gdGhpcy50YWJsZURhdGFDb25maWcuY29sdW1uc1tpbmRleF07XG4gICAgICAgIHRoaXMudGFibGVEYXRhQ29uZmlnLmNvbHVtbnMuc3BsaWNlKGluZGV4LCAxKTsgLy8gUmVtb3ZlIGl0ZW0gZnJvbSBjdXJyZW50IHBvc2l0aW9uXG4gICAgICAgIHRoaXMudGFibGVEYXRhQ29uZmlnLmNvbHVtbnMuc3BsaWNlKG5ld1Bvc2l0aW9uLCAwLCBpdGVtVG9Nb3ZlKTsgLy8gSW5zZXJ0IGl0ZW0gaW4gbmV3IHBvc2l0aW9uXG4gICAgfVxuXG4gICAgZ2V0T2JqZWN0S2V5cyhvYmo6IGFueSk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaik7XG4gICAgfVxuICAgIHNldEFjdGl2ZVRhYih0YWI6IHN0cmluZykge1xuICAgICAgICB0aGlzLmFjdGl2ZVRhYiA9IHRhYjtcbiAgICB9XG5cbiAgICBnZXRHcm91cENvbHVtbnMoY29sdW1ucykge1xuICAgICAgICBjb25zdCBncm91cGVkQ29sdW1ucyA9IGNvbHVtbnMucmVkdWNlKChhY2MsIGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgbGV0IGdyb3VwID0gYWNjLmZpbmQoaXRlbSA9PiBpdGVtLmNhcHRpb24gPT09IGNvbHVtbi5ncm91cCk7XG4gICAgICAgICAgICBpZiAoIWdyb3VwKSB7XG4gICAgICAgICAgICAgICAgZ3JvdXAgPSB7XG4gICAgICAgICAgICAgICAgICAgIGNhcHRpb246IGNvbHVtbi5ncm91cCxcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uczogW11cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGFjYy5wdXNoKGdyb3VwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGdyb3VwLmNvbHVtbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgZGF0YUZpZWxkOiBjb2x1bW4uZGF0YUZpZWxkLFxuICAgICAgICAgICAgICAgIHZpc2libGU6IGNvbHVtbi52aXNpYmxlLFxuICAgICAgICAgICAgICAgIGNhcHRpb246IGNvbHVtbi5jYXB0aW9uXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIFtdKTtcbiAgICAgICAgcmV0dXJuIGdyb3VwZWRDb2x1bW5zO1xuICAgIH1cbiAgICBnZUNvbHVtbnNGcm9tR3JvdXAoY29sdW1ucykge1xuICAgICAgICBjb25zdCBuZXdDb2x1bW5zID0gW107XG5cbiAgICAgICAgY29sdW1ucy5mb3JFYWNoKGdyb3VwID0+IHtcbiAgICAgICAgICAgIGdyb3VwLmNvbHVtbnMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgICAgICAgIG5ld0NvbHVtbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFGaWVsZDogY29sLmRhdGFGaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogY29sLnZpc2libGUsXG4gICAgICAgICAgICAgICAgICAgIGNhcHRpb246IGNvbC5jYXB0aW9uLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbmV3Q29sdW1ucztcbiAgICB9XG5cblxuICAgIGdldFNhdmVDaGFydENvbmZpZygpIHtcblxuICAgICAgICB0aGlzLnRhYmxlX2NvbHVtbnNfY29uZmlnLmtwaUNvbmZpZ1snZGF0YUNvbmZpZyddID0gdGhpcy50YWJsZURhdGFDb25maWc7XG4gICAgICAgIGlmICh0aGlzLnZpZXdQcm9wZXJ0aWVzLmNsaWNrRXZlbnRPcHRpb25zLmV2ZW50VHlwZSA9PSAnb3B0aW9uYWxEcmlsbERvd24nKSB7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wZXJ0aWVzWydjbGlja0V2ZW50T3B0aW9ucyddWydhc3NvY2lhdGVkVmlld3MnXSA9IHRoaXMub3B0aW9uYWxEcmlsRG93bkRhdGFTb3VyY2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRhYmxlX2NvbHVtbnNfY29uZmlnLmtwaUNvbmZpZ1sndmlld1Byb3BlcnRpZXMnXSA9IHRoaXMudmlld1Byb3BlcnRpZXM7XG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMudGFibGVfY29sdW1uc19jb25maWcpO1xuICAgICAgICB0aGlzLmNyZWF0ZU90aGVyQ29tcG9uZW50Vmlldy5lbWl0KHRoaXMudGFibGVfY29sdW1uc19jb25maWcpO1xuICAgIH1cblxuICAgIGRlbGV0ZUFzc29jaWF0ZWRQYXJhbXMoaW5kZXgpIHtcbiAgICAgICAgdGhpcy5vcHRpb25hbERyaWxEb3duRGF0YVNvdXJjZS5zcGxpY2UoaW5kZXgsIDEpXG4gICAgfVxuXG4gICAgYWRkQXNzb2NpYXRlZFBhcmFtcygpIHtcbiAgICAgICAgdGhpcy5vcHRpb25hbERyaWxEb3duRGF0YVNvdXJjZS5wdXNoKHtcbiAgICAgICAgICAgICd2aWV3SWQnOiBcIlwiLFxuICAgICAgICAgICAgJ2ZpbHRlckNvbmRpdGlvbic6IFwiXCJcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBnZXRTZWxlY3RlZEV2ZW50VHlwZShlKSB7XG5cbiAgICAgICAgaWYgKGUuZXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9uYWxEcmlsRG93bkRhdGFTb3VyY2UgPSBbXTtcbiAgICAgICAgICAgIGlmICh0aGlzLnZpZXdQcm9wZXJ0aWVzLmNsaWNrRXZlbnRPcHRpb25zLmV2ZW50VHlwZSA9PSAnZHJpbGxkb3duJykge1xuICAgICAgICAgICAgICAgIHRoaXMudGFibGVfY29sdW1uc19jb25maWcua3BpQ29uZmlnWyd2aWV3UHJvcGVydGllcyddWydhc3NvY2lhdGVkVmlld3MnXSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cblxuICAgIH1cblxuICAgIHJlc2V0Vmlld1Byb3Byc3Rpc2UoKSB7XG4gICAgICAgIHRoaXMudmlld1Byb3BlcnRpZXMgPSB7XG4gICAgICAgICAgICBlbmFibGVDbGlja0V2ZW50OiBmYWxzZSxcbiAgICAgICAgICAgIGVuYWJsZVJpZ2h0Q2xpY2tFdmVudDogdHJ1ZSxcbiAgICAgICAgICAgIGNsaWNrRXZlbnRPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgYXNzb2NpYXRlZFZpZXdzOiBbXSxcbiAgICAgICAgICAgICAgICBldmVudFR5cGU6IFwiXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2aWV3TWFwRm9yVGVzdCgpIHtcbiAgICAgICAgdGhpcy50YWJsZV9jb2x1bW5zX2NvbmZpZy5rcGlDb25maWdbJ2RhdGFDb25maWcnXSA9IHRoaXMudGFibGVEYXRhQ29uZmlnO1xuICAgICAgICBpZiAodGhpcy52aWV3UHJvcGVydGllcy5jbGlja0V2ZW50T3B0aW9ucy5ldmVudFR5cGUgPT0gJ29wdGlvbmFsRHJpbGxEb3duJykge1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcGVydGllc1snY2xpY2tFdmVudE9wdGlvbnMnXVsnYXNzb2NpYXRlZFZpZXdzJ10gPSB0aGlzLm9wdGlvbmFsRHJpbERvd25EYXRhU291cmNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50YWJsZV9jb2x1bW5zX2NvbmZpZy5rcGlDb25maWdbJ3ZpZXdQcm9wZXJ0aWVzJ10gPSB0aGlzLnZpZXdQcm9wZXJ0aWVzO1xuXG4gICAgICAgIHRoaXMudGFibGVfY29sdW1uc19jb25maWcua3BpQ29uZmlnWydkYXRhU291cmNlJ10gPSB0aGlzLmRhdGFTb3Vyc2VGb3JUYWJsZTtcbiAgICAgICAgdGhpcy5jaGFydERhdGFTb3VyY2VGb3JNYXAgPSB0aGlzLnRhYmxlX2NvbHVtbnNfY29uZmlnO1xuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmNoYXJ0RGF0YVNvdXJjZUZvck1hcCwgJ3RhYmxlIHdpdGggYmFyIGNoYXJ0IGRhdGEnKTtcblxuICAgICAgICB0aGlzLmlzSnNvblByZXZpZXcgPSB0cnVlO1xuXG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZsZXggZmxleC13cmFwXCI+XG4gICAgPGRpdiBjbGFzcz1cInctZnVsbCBteC0yIGJvcmRlci1yXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNKc29uUHJldmlld1wiPlxuICAgICAgICAgICAgPHByZT48Y29kZT57e2pzYW9uRGF0YXNvdXJjZSB8IGpzb259fTwvY29kZT48L3ByZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0pzb25QcmV2aWV3XCI+XG4gICAgICAgICA8IS0tIDxhcHAtZ2FtbWEtdGFibGUtd2l0aC1wZXJjZW50YWdlIFtjaGFydERhdGFTb3VyY2VdPVwiY2hhcnREYXRhU291cmNlRm9yTWFwXCI+PC9hcHAtZ2FtbWEtdGFibGUtd2l0aC1wZXJjZW50YWdlPiAtLT5cbiAgICAgICAgIDxhcHAtZ2FtbWEtdGFibGUtY2x1bW4tYmFyLWNoYXJ0IFtjaGFydERhdGFTb3VyY2VdPVwiY2hhcnREYXRhU291cmNlRm9yTWFwXCI+PC9hcHAtZ2FtbWEtdGFibGUtY2x1bW4tYmFyLWNoYXJ0PlxuXG4gICAgICAgICAgICA8ZGl2ICNkeW5hbWljQ29udGFpbmVyPjwvZGl2PlxuXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgbXgtMlwiPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYi00IGJvcmRlci1iIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1ncmF5LTcwMFwiPlxuICAgICAgICAgICAgPHVsIGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgLW1iLXB4IHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1jZW50ZXJcIiByb2xlPVwidGFibGlzdFwiPlxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm1lLTJcIiByb2xlPVwicHJlc2VudGF0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpbmxpbmUtYmxvY2sgcC00IGJvcmRlci1iLTIgcm91bmRlZC10LWxnXCIgW25nQ2xhc3NdPVwieyBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGV4dC1wdXJwbGUtNjAwIGJvcmRlci1wdXJwbGUtNjAwIGRhcms6dGV4dC1wdXJwbGUtNTAwIGRhcms6Ym9yZGVyLXB1cnBsZS01MDAnOiBhY3RpdmVUYWIgPT09ICdiYXNpYycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RleHQtZ3JheS01MDAgZGFyazp0ZXh0LWdyYXktNDAwIGJvcmRlci10cmFuc3BhcmVudCc6IGFjdGl2ZVRhYiAhPT0gJ2Jhc2ljJyBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIiAoY2xpY2spPVwic2V0QWN0aXZlVGFiKCdiYXNpYycpXCIgdHlwZT1cImJ1dHRvblwiIHJvbGU9XCJ0YWJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEJhc2ljXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibWUtMlwiIHJvbGU9XCJwcmVzZW50YXRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImlubGluZS1ibG9jayBwLTQgYm9yZGVyLWItMiByb3VuZGVkLXQtbGdcIiBbbmdDbGFzc109XCJ7IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXh0LXB1cnBsZS02MDAgYm9yZGVyLXB1cnBsZS02MDAgZGFyazp0ZXh0LXB1cnBsZS01MDAgZGFyazpib3JkZXItcHVycGxlLTUwMCc6IGFjdGl2ZVRhYiA9PT0gJ2NvbHVtbnMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXh0LWdyYXktNTAwIGRhcms6dGV4dC1ncmF5LTQwMCBib3JkZXItdHJhbnNwYXJlbnQnOiBhY3RpdmVUYWIgIT09ICdjb2x1bW5zJyBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIiAoY2xpY2spPVwic2V0QWN0aXZlVGFiKCdjb2x1bW5zJylcIiB0eXBlPVwiYnV0dG9uXCIgcm9sZT1cInRhYlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgQ29sdW1uc1xuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm1lLTJcIiByb2xlPVwicHJlc2VudGF0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpbmxpbmUtYmxvY2sgcC00IGJvcmRlci1iLTIgcm91bmRlZC10LWxnXCIgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGV4dC1wdXJwbGUtNjAwIGJvcmRlci1wdXJwbGUtNjAwIGRhcms6dGV4dC1wdXJwbGUtNTAwIGRhcms6Ym9yZGVyLXB1cnBsZS01MDAnOiBhY3RpdmVUYWIgPT09ICdwcm9wZXJ0aWVzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RleHQtZ3JheS01MDAgZGFyazp0ZXh0LWdyYXktNDAwIGJvcmRlci10cmFuc3BhcmVudCc6IGFjdGl2ZVRhYiAhPT0gJ3Byb3BlcnRpZXMnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiIChjbGljayk9XCJzZXRBY3RpdmVUYWIoJ3Byb3BlcnRpZXMnKVwiIHR5cGU9XCJidXR0b25cIiByb2xlPVwidGFiXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvbGk+XG5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgaWQ9XCJkZWZhdWx0LXN0eWxlZC10YWItY29udGVudFwiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFjdGl2ZVRhYiA9PT0gJ2Jhc2ljJ1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGZsZXgtYXV0byBtaW4tdy0wIG15LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtc20gcHktMSBmb250LWV4dHJhYm9sZCBib3JkZXItYiBiZy1ncmF5LTcwMCB0ZXh0LXdoaXRlIHB4LTJcIj4gRmlsdGVyIFRpdGxlXG4gICAgICAgICAgICAgICAgICAgICAgICBDb25maWdcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwdC0yIGJvcmRlci14IGJvcmRlci1iIFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm15LTIgZmxleCBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMSBtYi0xIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZCBtYi0xXCI+IFRpdGxlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveCBbKG5nTW9kZWwpXT1cInRhYmxlRGF0YUNvbmZpZy5jb21tb25Db25maWcudGl0bGVcIj48L2R4LXRleHQtYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0xIG1iLTEgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW1kIG1iLTFcIj4gRGF0YSBGaWVsZDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHgtc2VsZWN0LWJveCBbc2VhcmNoRW5hYmxlZF09XCJ0cnVlXCIgW2l0ZW1zXT1cImNvbmZpZ0NvbHVtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInRhYmxlRGF0YUNvbmZpZy5jb21tb25Db25maWcuZGF0YUZpZWxkXCI+PC9keC1zZWxlY3QtYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cInB4LTEgbWItMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZCBtYi0xXCI+IENoZWNrZWQgS2V5PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC1zZWxlY3QtYm94IFtzZWFyY2hFbmFibGVkXT1cInRydWVcIiBbaXRlbXNdPVwiY29uZmlnQ29sdW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidGFibGVEYXRhQ29uZmlnLmNvbW1vbkNvbmZpZy5kYXRhRmllbGRcIj48L2R4LXNlbGVjdC1ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cInB4LTQgbXQtNiB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4LWNoZWNrLWJveCBbdmFsdWVdPVwidGFibGVEYXRhQ29uZmlnLmNvbW1vbkNvbmZpZy5pc1NlYXJjaEJveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInRhYmxlRGF0YUNvbmZpZy5jb21tb25Db25maWcuaXNTZWFyY2hCb3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dD1cIlNlYXJjaCBCb3hcIj48L2R4LWNoZWNrLWJveD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMSBtYi0xIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZCBtYi0yXCI+IERpc3BsYXkgRm9ybWF0ZSA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4LXNlbGVjdC1ib3ggW2l0ZW1zXT1cIlsnZGFpbHknLCdob3VybHknLCdtb250aGx5J11cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ0YWJsZV9jb2x1bW5zX2NvbmZpZy5rcGlDb25maWcuZm9ybWF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwiZmFsc2VcIj48L2R4LXNlbGVjdC1ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTEgbWItMSB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWQgbWItMlwiPiBLZXkgVG8gUGFzcyA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4LXRhZy1ib3ggW2l0ZW1zXT1cImNvbmZpZ0NvbHVtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInRhYmxlX2NvbHVtbnNfY29uZmlnLmtwaUNvbmZpZy5rZXlUb1Bhc3NcIj48L2R4LXRhZy1ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZmxleC1hdXRvIG1pbi13LTAgbXktMlwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1zbSBweS0xIGZvbnQtZXh0cmFib2xkIGJvcmRlci1iIGJnLWdyYXktNzAwIHRleHQtd2hpdGUgcHgtMlwiPiBUYWJsZSBDb25maWdcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsc2Utcm93IHB5LTMgYm9yZGVyLXggYm9yZGVyLWIgXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMSBtYi0yIG10LTggdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4LWNoZWNrLWJveCBbdmFsdWVdPVwidGFibGVEYXRhQ29uZmlnLnNlYXJjaFBhbmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ0YWJsZURhdGFDb25maWcuc2VhcmNoUGFuZWxcIiB0ZXh0PVwiU2VhcmNoIFBhbmVsXCI+PC9keC1jaGVjay1ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCIgcHgtMSBtYi0yIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW1kIG1iLTJcIj5GaWxlIE5hbWU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3ggWyhuZ01vZGVsKV09XCJ0YWJsZURhdGFDb25maWcuZmlsZV9uYW1lXCI+PC9keC10ZXh0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTEgbWItMiB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZCBtYi0yXCI+IE51bWJlciBPZiBSb3c8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHgtbnVtYmVyLWJveCBbdmFsdWVdPVwidGFibGVEYXRhQ29uZmlnLm51bWJlck9mUm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ0YWJsZURhdGFDb25maWcubnVtYmVyT2ZSb3dcIj48L2R4LW51bWJlci1ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0xIG1iLTIgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWQgbWItMlwiPiBUYWJsZSBIZWlnaHQ8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3ggW3ZhbHVlXT1cInRhYmxlRGF0YUNvbmZpZy50YWJsZUhlaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidGFibGVEYXRhQ29uZmlnLnRhYmxlSGVpZ2h0XCI+PC9keC10ZXh0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTEgbWItMiBtdC04IHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC1jaGVjay1ib3ggW3ZhbHVlXT1cInRhYmxlRGF0YUNvbmZpZy5wYWdlSW5mb1wiIFsobmdNb2RlbCldPVwidGFibGVEYXRhQ29uZmlnLnBhZ2VJbmZvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dD1cIlBhZ2UgSW5mb1wiPjwvZHgtY2hlY2stYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJhY3RpdmVUYWIgPT09ICdjb2x1bW5zJ1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoLWZ1bGwgb3ZlcmZsb3cteC1hdXRvXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGZsZXgtYXV0byBtaW4tdy0wXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwdC0yIGJvcmRlci14IGJvcmRlci1iIFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteS0yIGJvcmRlci1iIGZsZXggZmxleC1yb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiB0YWJsZURhdGFDb25maWcuY29sdW1uczsgbGV0IGkgPSBpbmRleDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTEgbWItMiBtdC02IHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4LWNoZWNrLWJveCBbdmFsdWVdPVwiaXRlbS52aXNpYmxlXCIgWyhuZ01vZGVsKV09XCJpdGVtLnZpc2libGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ9XCJWaXNpYmxpdHlcIj48L2R4LWNoZWNrLWJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTEgbWItMiB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW1kIG1iLTJcIj4gVmFsdWUgRmllbGQ8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC1zZWxlY3QtYm94IFtzZWFyY2hFbmFibGVkXT1cInRydWVcIiBbaXRlbXNdPVwiY29uZmlnQ29sdW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIml0ZW0uZGF0YUZpZWxkXCI+PC9keC1zZWxlY3QtYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTEgbWItMiB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW1kIG1iLTJcIj4gQ2FwdGlvbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4LXRleHQtYm94IFsobmdNb2RlbCldPVwiaXRlbS5jYXB0aW9uXCI+PC9keC10ZXh0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0yIG1iLTIgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZCBtYi0yXCI+IFVJIEZ1bmN0aW9uPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHgtc2VsZWN0LWJveCBbaXRlbXNdPVwiZW5yaWNoTmFtZUxpc3RcIiBbKG5nTW9kZWwpXT1cIml0ZW0uZW5yaWNoTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaEVuYWJsZWRdPVwidHJ1ZVwiPjwvZHgtc2VsZWN0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0xIG1iLTIgbXQtNiB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC1jaGVjay1ib3ggW3ZhbHVlXT1cIml0ZW0uaXNTaG93QmFyXCIgWyhuZ01vZGVsKV09XCJpdGVtLmlzU2hvd0JhclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dD1cIkFsbG93IEJhclwiPjwvZHgtY2hlY2stYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMSBtYi0yIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWQgbWItMlwiPkNvbG9yPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHgtY29sb3ItYm94IFsobmdNb2RlbCldPVwiaXRlbS5jb2xvclwiPjwvZHgtY29sb3ItYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIG10LTggdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiaSAhPT0gMFwiIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9saWdodF9zbX19IGN1cnNvci1wb2ludGVyIG14LTFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJtb3ZlSXRlbUZvckNvbHVtbnMoaSwgJ3VwJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWFycm93LXVwXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJpICE9PSB0YWJsZURhdGFDb25maWcuY29sdW1ucy5sZW5ndGggLSAxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5fbGlnaHRfc219fSBjdXJzb3ItcG9pbnRlciBteC0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwibW92ZUl0ZW1Gb3JDb2x1bW5zKGksICdkb3duJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWFycm93LWRvd25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYnRuX2Rhbmdlcl9zbX19IGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlQ29sdW1ucyhpKVwiPjxpIGNsYXNzPVwiZmEgZmEtdHJhc2gtb1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWVuZCBteS0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9wcmltYXJ5X3NtfX0gY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwiYWRkQ29sdW1ucygpXCI+QWRkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sdW1uczwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFjdGl2ZVRhYiA9PT0gJ3Byb3BlcnRpZXMnXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImgtZnVsbCBvdmVyZmxvdy14LWF1dG9cIj5cbiAgICAgICAgICAgICAgICAgICAgPGFwcC1sb2FkZXIgKm5nSWY9XCJpc0xvYWRlclwiPjwvYXBwLWxvYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0xvYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1iZXR3ZWVuIGJvcmRlci1iIHB5LTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXgtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHgtY2hlY2stYm94IFt2YWx1ZV09XCJ2aWV3UHJvcGVydGllcy5lbmFibGVDbGlja0V2ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidmlld1Byb3BlcnRpZXMuZW5hYmxlQ2xpY2tFdmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0PVwiRW5hYmxlIENsaWNrIEV2ZW50XCI+PC9keC1jaGVjay1ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm14LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4LWNoZWNrLWJveCBbdmFsdWVdPVwidmlld1Byb3BlcnRpZXMuZW5hYmxlUmlnaHRDbGlja0V2ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidmlld1Byb3BlcnRpZXMuZW5hYmxlUmlnaHRDbGlja0V2ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ9XCJFbmFibGUgUmlnaHQgQ2xpY2tcIj48L2R4LWNoZWNrLWJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBwLTJcIiAqbmdJZj1cInZpZXdQcm9wZXJ0aWVzLmVuYWJsZUNsaWNrRXZlbnRcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGZsZXgtYXV0byBtaW4tdy0wIG15LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtc20gcHktMSBmb250LWV4dHJhYm9sZCBib3JkZXItYiBiZy1ncmF5LTcwMCB0ZXh0LXdoaXRlIHB4LTJcIj4gRXZlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBwLTMgYm9yZGVyLXggYm9yZGVyLWIgXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWQgbWItMlwiPiBFdmVudCBUeXBlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHgtc2VsZWN0LWJveCBbaXRlbXNdPVwiWydkcmlsbGRvd24nLCdzYW1lVmlld0RyaWxsZG93bicsJ29wdGlvbmFsRHJpbGxEb3duJ11cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uVmFsdWVDaGFuZ2VkKT1cImdldFNlbGVjdGVkRXZlbnRUeXBlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ2aWV3UHJvcGVydGllcy5jbGlja0V2ZW50T3B0aW9ucy5ldmVudFR5cGVcIj48L2R4LXNlbGVjdC1ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ2aWV3UHJvcGVydGllcy5jbGlja0V2ZW50T3B0aW9ucy5ldmVudFR5cGUgPT0gJ2RyaWxsZG93bidcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWJldHdlZW4gbXQtM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZCBtYi0yXCI+IEFzc29jaWF0ZWQgVmlld3M8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC10YWctYm94IFtpdGVtc109XCJhbGxDb25maWd1cmVkVmlld3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidmlld1Byb3BlcnRpZXMuY2xpY2tFdmVudE9wdGlvbnMuYXNzb2NpYXRlZFZpZXdzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUV4cHI9XCJ2aWV3SWRcIiBkaXNwbGF5RXhwcj1cInZpZXdOYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1NlbGVjdGlvbkNvbnRyb2xzXT1cInRydWVcIiBbc2VhcmNoRW5hYmxlZF09XCJ0cnVlXCI+PC9keC10YWctYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInZpZXdQcm9wZXJ0aWVzLmNsaWNrRXZlbnRPcHRpb25zLmV2ZW50VHlwZSA9PSAnc2FtZVZpZXdEcmlsbGRvd24nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1iZXR3ZWVuIG10LTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWQgbWItMlwiPiBBc3NvY2lhdGVkIFZpZXdzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHgtdGFnLWJveCBbaXRlbXNdPVwiYWxsQ29uZmlndXJlZFZpZXdzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInZpZXdQcm9wZXJ0aWVzLmNsaWNrRXZlbnRPcHRpb25zLmFzc29jaWF0ZWRWaWV3c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVFeHByPVwidmlld0lkXCIgZGlzcGxheUV4cHI9XCJ2aWV3TmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dTZWxlY3Rpb25Db250cm9sc109XCJ0cnVlXCIgW3NlYXJjaEVuYWJsZWRdPVwidHJ1ZVwiPjwvZHgtdGFnLWJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInZpZXdQcm9wZXJ0aWVzLmNsaWNrRXZlbnRPcHRpb25zLmV2ZW50VHlwZSA9PSAnb3B0aW9uYWxEcmlsbERvd24nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1iZXR3ZWVuIG10LTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIG9wdGlvbmFsRHJpbERvd25EYXRhU291cmNlO2xldCBpID0gaW5kZXg7XCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm14LTIgdy0xLzJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW1kIG1iLTJcIj4gQXNzb2NpYXRlZCBWaWV3czwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4LXRhZy1ib3ggW2l0ZW1zXT1cImFsbENvbmZpZ3VyZWRWaWV3c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJpdGVtLnZpZXdJZFwiIHZhbHVlRXhwcj1cInZpZXdJZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUV4cHI9XCJ2aWV3TmFtZVwiIFtzaG93U2VsZWN0aW9uQ29udHJvbHNdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21heERpc3BsYXllZFRhZ3NdPVwiMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaEVuYWJsZWRdPVwidHJ1ZVwiPjwvZHgtdGFnLWJveD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm14LTIgdy0xLzJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW1kIG1iLTJcIj4gQXNzb2NpYXRlZCBQYXJhbXM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaXRlbS5maWx0ZXJDb25kaXRpb25cIj48L2R4LXRleHQtYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm14LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5fZGFuZ2VyX3NtfX0gY3Vyc29yLXBvaW50ZXIgbXQtOFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZUFzc29jaWF0ZWRQYXJhbXMoaSlcIj48aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZhIGZhLXRyYXNoLW9cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGp1c3RpZnktZW5kIG10LTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9wcmltYXJ5X3NtfX0gY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkQXNzb2NpYXRlZFBhcmFtcygpXCI+QWRkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcmFtczwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9saWdodF9tZH19IGN1cnNvci1wb2ludGVyIG10LTRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZXNldFZpZXdQcm9wcnN0aXNlKClcIj5SZXNldCBBbGwgRXZlbnQ8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwvZGl2PlxuXG5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBib3JkZXItdCBwbC0zXCI+XG4gICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1zdGFydCBteC0xXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYnRuX3dhcm5pbmdfbWR9fSBjdXJzb3ItcG9pbnRlciBtdC0yXCIgKGNsaWNrKT1cInZpZXdNYXBGb3JUZXN0KClcIj5cbiAgICAgICAgICAgIFByZXZpZXc8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5fcHJpbWFyeV9tZH19IGN1cnNvci1wb2ludGVyIG10LTJcIiAoY2xpY2spPVwiaXNKc29uUHJldmlldyA9IGZhbHNlXCI+RGF0YVxuICAgICAgICAgICAgUHJldmlldzwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktZW5kIG14LTEgZmxleC1ncm93XCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYnRuX3N1Y2Nlc3NfbWR9fSBjdXJzb3ItcG9pbnRlciBtdC0yXCJcbiAgICAgICAgICAgIChjbGljayk9XCJnZXRTYXZlQ2hhcnRDb25maWcoKVwiPlN1Ym1pdDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuPC9kaXY+Il19
|