general-library-union 2.4.49 → 2.4.50

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/README.md CHANGED
@@ -1,27 +1,27 @@
1
- # generalLibraryUnion
2
-
3
- This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 13.1.3.
4
-
5
- ## Development server
6
-
7
- Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files.
8
-
9
- ## Code scaffolding
10
-
11
- Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`.
12
-
13
- ## Build
14
-
15
- Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory.
16
-
17
- ## Running unit tests
18
-
19
- Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io).
20
-
21
- ## Running end-to-end tests
22
-
23
- Run `ng e2e` to execute the end-to-end tests via a platform of your choice. To use this command, you need to first add a package that implements end-to-end testing capabilities.
24
-
25
- ## Further help
26
-
27
- To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
1
+ # generalLibraryUnion
2
+
3
+ This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 13.1.3.
4
+
5
+ ## Development server
6
+
7
+ Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files.
8
+
9
+ ## Code scaffolding
10
+
11
+ Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`.
12
+
13
+ ## Build
14
+
15
+ Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory.
16
+
17
+ ## Running unit tests
18
+
19
+ Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io).
20
+
21
+ ## Running end-to-end tests
22
+
23
+ Run `ng e2e` to execute the end-to-end tests via a platform of your choice. To use this command, you need to first add a package that implements end-to-end testing capabilities.
24
+
25
+ ## Further help
26
+
27
+ To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
@@ -176,12 +176,12 @@ export class DetalleCampoReporteComponent {
176
176
  return this.reporteFuente.origenFuente == tipo;
177
177
  }
178
178
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: DetalleCampoReporteComponent, deps: [{ token: i1.FormBuilder }, { token: i2.ToastService }, { token: i3.GeneralService }, { token: i4.ConfirmationService }, { token: i5.EjecucionReporteService }, { token: i6.GeneralPipe }, { token: i7.TranslateService }, { token: i8.ReporteFuentePipe }], target: i0.ɵɵFactoryTarget.Component });
179
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.4", type: DetalleCampoReporteComponent, isStandalone: true, selector: "detalle-campo-reporte", inputs: { reporteFuente: "reporteFuente" }, providers: [ConfirmationService, MessageService], ngImport: i0, template: "<p-confirmPopup></p-confirmPopup>\r\n<div class=\"flex justify-content-between align-items-center mb-3\">\r\n <h1 class=\"text-xl mb-1\">{{'campo' | translate}}</h1>\r\n <div class=\"flex justify-content-end mb-3\" *ngIf=\"vistaVisualizar != 'detalle'\">\r\n <button pButton pRipple (click)=\"nuevaColumna()\" label=\"{{'link_nuevo' | translate}}\"\r\n icon=\"pi pi-plus\" class=\"p-button-secondary font-semibold flex-shrink-0 ml-4 mr-2\"></button>\r\n <button pButton pRipple class=\"p-button p-button-outlined\" label=\"{{'link_importar' | translate}}\" *ngIf=\"isFuente()\"\r\n (click)=\"importar()\"><i class=\"glyphicons glyphicons-restart\"></i></button>\r\n <button pButton pRipple class=\"p-button p-button-outlined\" label=\"{{'link_generar' | translate}}\" *ngIf=\"isSql()\"\r\n (click)=\"generar()\"><i class=\"glyphicons glyphicons-restart\"></i></button>\r\n </div>\r\n <div class=\"flex justify-content-end mb-1\" *ngIf=\"vistaVisualizar =='detalle'\">\r\n <button pButton pRipple (click)=\"vistaVisualizar = null\" label= \"{{'listado' | translate}} {{'campo' | translate}}\" \r\n icon=\"pi pi-chevron-left\" class=\"p-button-text font-semibold flex-shrink-0 \"></button>\r\n </div>\r\n</div>\r\n\r\n<p-table [value]=\"listaColumna\" responsiveLayout=\"scroll\" [scrollable]=\"true\" selectionMode=\"single\" dataKey=\"llave\"\r\n [showCurrentPageReport]=\"true\" currentPageReportTemplate=\"{first} al {last} de {totalRecords} registros\" *ngIf=\"vistaVisualizar != 'detalle'\"\r\n (onRowSelect)=\"verAction($event)\" (onRowUnselect)=\"verAction($event)\" [rows]=\"paginador.rows\" [totalRecords]=\"paginador.totalRecords\" [paginator]=\"paginador.totalRecords > paginador.rows\"\r\n [lazy]=\"true\" (onLazyLoad)=\"cargarListaColumna($event)\">\r\n <ng-template pTemplate=\"header\">\r\n \r\n <tr class=\"fondoTablaPincipal\">\r\n <th>{{'nombre' | translate}} </th>\r\n <th>{{'sintaxis' | translate}} </th>\r\n <th>{{'tipo' | translate}} </th>\r\n </tr>\r\n <th>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-campo>\r\n <tr [pSelectableRow]=\"campo\">\r\n <td>{{campo.nombre}}</td>\r\n <td>{{campo.sintaxis}}</td>\r\n <td>{{campo.tipoDato | reporteFuentePipe : 'listaTipoDatoColumna'}}</td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td colspan=\"100\" class=\"p-3 font-medium emptymessage\">{{'mensajetablavacia' | translate}}</td>\r\n </tr>\r\n </ng-template>\r\n</p-table>\r\n\r\n<div class=\"card mt-3\" *ngIf=\"vistaVisualizar == 'detalle'\">\r\n <h5 class=\"mt-3\"><i class=\"glyphicons glyphicons-notes\"></i>{{'detalle' | translate}}</h5>\r\n <div class=\"col-md-12\">\r\n <div class=\"Detallereporte mt-2\">\r\n <form [formGroup]=\"formReporteColumna\" #formulario=\"ngForm\">\r\n <div class=\"p-fluid p-formgrid grid\">\r\n <div class=\"field col-12 md:col-6\">\r\n <span class=\"p-float-label\">\r\n <span class=\"p-float-label\">\r\n <input pInputText id=\"nombre\" type=\"text\" formControlName=\"nombre\" size=\"40\">\r\n <label htmlFor=\"nombre\">{{'nombre' | translate}} *</label>\r\n </span>\r\n </span>\r\n </div>\r\n <div class=\"field col-12 md:col-6\">\r\n <span class=\"p-float-label\">\r\n <p-dropdown [options]=\"listaTipoDato\" [autoDisplayFirst]=\"false\" formControlName=\"tipoDato\"\r\n optionLabel=\"nombre\" optionValue=\"codigo\"></p-dropdown>\r\n <label htmlFor=\"tipoDato\">{{'tipo' | translate}} *</label>\r\n </span>\r\n </div>\r\n <div class=\"field col-12 md:col-12\">\r\n <span class=\"p-float-label\">\r\n <textarea class=\"w-full min-h-150\" pInputTextarea formControlName=\"sintaxis\"></textarea>\r\n <label htmlFor=\"sintaxis\">{{'sintaxis' | translate}} *</label>\r\n </span>\r\n </div>\r\n \r\n </div>\r\n <!--BOTONES-->\r\n <div class=\"flex justify-content-end mb-3\">\r\n <button pButton pRipple class=\"ml-2 p-button p-button-raised\" (click)=\"actualizar()\"\r\n icon=\"glyphicons {{reporteColumna.llaveTabla ? 'glyphicons-refresh' : 'glyphicons-floppy-save' }}\" \r\n label=\"{{reporteColumna.llaveTabla ? ('link_actualizar' | translate) : ('link_guardar' | translate)}}\" >\r\n </button>\r\n <button pButton pRipple class=\"ml-2 p-button-outlined\" icon=\"glyphicons glyphicons-bin\" *ngIf=\"reporteColumna.llaveTabla\"\r\n label=\"{{'link_eliminar' | translate}}\" (click)=\"eliminar($event)\">\r\n </button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n</div>", styles: [""], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i10.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "directive", type: i4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: DropdownModule }, { kind: "component", type: i11.Dropdown, selector: "p-dropdown", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "pipe", type: ReporteFuentePipe, name: "reporteFuentePipe" }, { kind: "ngmodule", type: ConfirmPopupModule }, { kind: "component", type: i12.ConfirmPopup, selector: "p-confirmPopup", inputs: ["key", "defaultFocus", "showTransitionOptions", "hideTransitionOptions", "autoZIndex", "baseZIndex", "style", "styleClass", "visible"] }, { kind: "ngmodule", type: TableModule }, { kind: "component", type: i13.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i13.SelectableRow, selector: "[pSelectableRow]", inputs: ["pSelectableRow", "pSelectableRowIndex", "pSelectableRowDisabled"] }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i14.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "ngmodule", type: InputTextareaModule }, { kind: "directive", type: i15.InputTextarea, selector: "[pInputTextarea]", inputs: ["autoResize", "variant"], outputs: ["onResize"] }] });
179
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.4", type: DetalleCampoReporteComponent, isStandalone: true, selector: "detalle-campo-reporte", inputs: { reporteFuente: "reporteFuente" }, providers: [ConfirmationService, MessageService], ngImport: i0, template: "<p-confirmPopup></p-confirmPopup>\r\n<div class=\"flex justify-content-between align-items-center mb-3\">\r\n <h1 class=\"text-xl mb-1\">{{'campo' | translate}}</h1>\r\n <div class=\"flex justify-content-end mb-3\" *ngIf=\"vistaVisualizar != 'detalle'\">\r\n <button pButton pRipple (click)=\"nuevaColumna()\" label=\"{{'link_nuevo' | translate}}\"\r\n icon=\"pi pi-plus\" class=\"p-button-secondary font-semibold flex-shrink-0 ml-4 mr-2\"></button>\r\n <button pButton pRipple class=\"p-button p-button-outlined\" label=\"{{'link_importar' | translate}}\" *ngIf=\"isFuente()\"\r\n (click)=\"importar()\"><i class=\"glyphicons glyphicons-restart\"></i></button>\r\n <button pButton pRipple class=\"p-button p-button-outlined\" label=\"{{'link_generar' | translate}}\" *ngIf=\"isSql()\"\r\n (click)=\"generar()\"><i class=\"glyphicons glyphicons-restart\"></i></button>\r\n </div>\r\n <div class=\"flex justify-content-end mb-1\" *ngIf=\"vistaVisualizar =='detalle'\">\r\n <button pButton pRipple (click)=\"vistaVisualizar = null\" label= \"{{'listado' | translate}} {{'campo' | translate}}\" \r\n icon=\"pi pi-chevron-left\" class=\"p-button-text font-semibold flex-shrink-0 \"></button>\r\n </div>\r\n</div>\r\n\r\n<p-table [value]=\"listaColumna\" responsiveLayout=\"scroll\" [scrollable]=\"true\" selectionMode=\"single\" dataKey=\"llave\"\r\n [showCurrentPageReport]=\"true\" currentPageReportTemplate=\"{first} al {last} de {totalRecords} registros\" *ngIf=\"vistaVisualizar != 'detalle'\"\r\n (onRowSelect)=\"verAction($event)\" (onRowUnselect)=\"verAction($event)\" [rows]=\"paginador.rows\" [totalRecords]=\"paginador.totalRecords\" [paginator]=\"paginador.totalRecords > paginador.rows\"\r\n [lazy]=\"true\" (onLazyLoad)=\"cargarListaColumna($event)\">\r\n <ng-template pTemplate=\"header\">\r\n \r\n <tr class=\"fondoTablaPincipal\">\r\n <th>{{'nombre' | translate}} </th>\r\n <th>{{'sintaxis' | translate}} </th>\r\n <th>{{'tipo' | translate}} </th>\r\n </tr>\r\n <th>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-campo>\r\n <tr [pSelectableRow]=\"campo\">\r\n <td>{{campo.nombre}}</td>\r\n <td>{{campo.sintaxis}}</td>\r\n <td>{{campo.tipoDato | reporteFuentePipe : 'listaTipoDatoColumna'}}</td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td colspan=\"100\" class=\"p-3 font-medium emptymessage\">{{'mensajetablavacia' | translate}}</td>\r\n </tr>\r\n </ng-template>\r\n</p-table>\r\n\r\n<div class=\"card mt-3\" *ngIf=\"vistaVisualizar == 'detalle'\">\r\n <h5 class=\"mt-3\"><i class=\"glyphicons glyphicons-notes\"></i>{{'detalle' | translate}}</h5>\r\n <div class=\"col-md-12\">\r\n <div class=\"Detallereporte mt-2\">\r\n <form [formGroup]=\"formReporteColumna\" #formulario=\"ngForm\">\r\n <div class=\"p-fluid p-formgrid grid\">\r\n <div class=\"field col-12 md:col-6\">\r\n <span class=\"p-float-label\">\r\n <span class=\"p-float-label\">\r\n <input pInputText id=\"nombre\" type=\"text\" formControlName=\"nombre\" size=\"40\">\r\n <label htmlFor=\"nombre\">{{'nombre' | translate}} *</label>\r\n </span>\r\n </span>\r\n </div>\r\n <div class=\"field col-12 md:col-6\">\r\n <span class=\"p-float-label\">\r\n <p-dropdown [options]=\"listaTipoDato\" [autoDisplayFirst]=\"false\" formControlName=\"tipoDato\"\r\n optionLabel=\"nombre\" optionValue=\"codigo\"></p-dropdown>\r\n <label htmlFor=\"tipoDato\">{{'tipo' | translate}} *</label>\r\n </span>\r\n </div>\r\n <div class=\"field col-12 md:col-12\">\r\n <span class=\"p-float-label\">\r\n <textarea class=\"w-full min-h-150 max-h-200\" pInputTextarea formControlName=\"sintaxis\"></textarea>\r\n <label htmlFor=\"sintaxis\">{{'sintaxis' | translate}} *</label>\r\n </span>\r\n </div>\r\n \r\n </div>\r\n <!--BOTONES-->\r\n <div class=\"flex justify-content-end mb-3\">\r\n <button pButton pRipple class=\"ml-2 p-button p-button-raised\" (click)=\"actualizar()\"\r\n icon=\"glyphicons {{reporteColumna.llaveTabla ? 'glyphicons-refresh' : 'glyphicons-floppy-save' }}\" \r\n label=\"{{reporteColumna.llaveTabla ? ('link_actualizar' | translate) : ('link_guardar' | translate)}}\" >\r\n </button>\r\n <button pButton pRipple class=\"ml-2 p-button-outlined\" icon=\"glyphicons glyphicons-bin\" *ngIf=\"reporteColumna.llaveTabla\"\r\n label=\"{{'link_eliminar' | translate}}\" (click)=\"eliminar($event)\">\r\n </button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n</div>", styles: [""], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i10.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "directive", type: i4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: DropdownModule }, { kind: "component", type: i11.Dropdown, selector: "p-dropdown", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "pipe", type: ReporteFuentePipe, name: "reporteFuentePipe" }, { kind: "ngmodule", type: ConfirmPopupModule }, { kind: "component", type: i12.ConfirmPopup, selector: "p-confirmPopup", inputs: ["key", "defaultFocus", "showTransitionOptions", "hideTransitionOptions", "autoZIndex", "baseZIndex", "style", "styleClass", "visible"] }, { kind: "ngmodule", type: TableModule }, { kind: "component", type: i13.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i13.SelectableRow, selector: "[pSelectableRow]", inputs: ["pSelectableRow", "pSelectableRowIndex", "pSelectableRowDisabled"] }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i14.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "ngmodule", type: InputTextareaModule }, { kind: "directive", type: i15.InputTextarea, selector: "[pInputTextarea]", inputs: ["autoResize", "variant"], outputs: ["onResize"] }] });
180
180
  }
181
181
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: DetalleCampoReporteComponent, decorators: [{
182
182
  type: Component,
183
- args: [{ selector: 'detalle-campo-reporte', imports: [TranslateModule, CommonModule, ButtonModule, FormsModule, ReactiveFormsModule, DropdownModule, ReporteFuentePipe, ConfirmPopupModule, TableModule, InputTextModule, InputTextareaModule], standalone: true, providers: [ConfirmationService, MessageService], template: "<p-confirmPopup></p-confirmPopup>\r\n<div class=\"flex justify-content-between align-items-center mb-3\">\r\n <h1 class=\"text-xl mb-1\">{{'campo' | translate}}</h1>\r\n <div class=\"flex justify-content-end mb-3\" *ngIf=\"vistaVisualizar != 'detalle'\">\r\n <button pButton pRipple (click)=\"nuevaColumna()\" label=\"{{'link_nuevo' | translate}}\"\r\n icon=\"pi pi-plus\" class=\"p-button-secondary font-semibold flex-shrink-0 ml-4 mr-2\"></button>\r\n <button pButton pRipple class=\"p-button p-button-outlined\" label=\"{{'link_importar' | translate}}\" *ngIf=\"isFuente()\"\r\n (click)=\"importar()\"><i class=\"glyphicons glyphicons-restart\"></i></button>\r\n <button pButton pRipple class=\"p-button p-button-outlined\" label=\"{{'link_generar' | translate}}\" *ngIf=\"isSql()\"\r\n (click)=\"generar()\"><i class=\"glyphicons glyphicons-restart\"></i></button>\r\n </div>\r\n <div class=\"flex justify-content-end mb-1\" *ngIf=\"vistaVisualizar =='detalle'\">\r\n <button pButton pRipple (click)=\"vistaVisualizar = null\" label= \"{{'listado' | translate}} {{'campo' | translate}}\" \r\n icon=\"pi pi-chevron-left\" class=\"p-button-text font-semibold flex-shrink-0 \"></button>\r\n </div>\r\n</div>\r\n\r\n<p-table [value]=\"listaColumna\" responsiveLayout=\"scroll\" [scrollable]=\"true\" selectionMode=\"single\" dataKey=\"llave\"\r\n [showCurrentPageReport]=\"true\" currentPageReportTemplate=\"{first} al {last} de {totalRecords} registros\" *ngIf=\"vistaVisualizar != 'detalle'\"\r\n (onRowSelect)=\"verAction($event)\" (onRowUnselect)=\"verAction($event)\" [rows]=\"paginador.rows\" [totalRecords]=\"paginador.totalRecords\" [paginator]=\"paginador.totalRecords > paginador.rows\"\r\n [lazy]=\"true\" (onLazyLoad)=\"cargarListaColumna($event)\">\r\n <ng-template pTemplate=\"header\">\r\n \r\n <tr class=\"fondoTablaPincipal\">\r\n <th>{{'nombre' | translate}} </th>\r\n <th>{{'sintaxis' | translate}} </th>\r\n <th>{{'tipo' | translate}} </th>\r\n </tr>\r\n <th>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-campo>\r\n <tr [pSelectableRow]=\"campo\">\r\n <td>{{campo.nombre}}</td>\r\n <td>{{campo.sintaxis}}</td>\r\n <td>{{campo.tipoDato | reporteFuentePipe : 'listaTipoDatoColumna'}}</td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td colspan=\"100\" class=\"p-3 font-medium emptymessage\">{{'mensajetablavacia' | translate}}</td>\r\n </tr>\r\n </ng-template>\r\n</p-table>\r\n\r\n<div class=\"card mt-3\" *ngIf=\"vistaVisualizar == 'detalle'\">\r\n <h5 class=\"mt-3\"><i class=\"glyphicons glyphicons-notes\"></i>{{'detalle' | translate}}</h5>\r\n <div class=\"col-md-12\">\r\n <div class=\"Detallereporte mt-2\">\r\n <form [formGroup]=\"formReporteColumna\" #formulario=\"ngForm\">\r\n <div class=\"p-fluid p-formgrid grid\">\r\n <div class=\"field col-12 md:col-6\">\r\n <span class=\"p-float-label\">\r\n <span class=\"p-float-label\">\r\n <input pInputText id=\"nombre\" type=\"text\" formControlName=\"nombre\" size=\"40\">\r\n <label htmlFor=\"nombre\">{{'nombre' | translate}} *</label>\r\n </span>\r\n </span>\r\n </div>\r\n <div class=\"field col-12 md:col-6\">\r\n <span class=\"p-float-label\">\r\n <p-dropdown [options]=\"listaTipoDato\" [autoDisplayFirst]=\"false\" formControlName=\"tipoDato\"\r\n optionLabel=\"nombre\" optionValue=\"codigo\"></p-dropdown>\r\n <label htmlFor=\"tipoDato\">{{'tipo' | translate}} *</label>\r\n </span>\r\n </div>\r\n <div class=\"field col-12 md:col-12\">\r\n <span class=\"p-float-label\">\r\n <textarea class=\"w-full min-h-150\" pInputTextarea formControlName=\"sintaxis\"></textarea>\r\n <label htmlFor=\"sintaxis\">{{'sintaxis' | translate}} *</label>\r\n </span>\r\n </div>\r\n \r\n </div>\r\n <!--BOTONES-->\r\n <div class=\"flex justify-content-end mb-3\">\r\n <button pButton pRipple class=\"ml-2 p-button p-button-raised\" (click)=\"actualizar()\"\r\n icon=\"glyphicons {{reporteColumna.llaveTabla ? 'glyphicons-refresh' : 'glyphicons-floppy-save' }}\" \r\n label=\"{{reporteColumna.llaveTabla ? ('link_actualizar' | translate) : ('link_guardar' | translate)}}\" >\r\n </button>\r\n <button pButton pRipple class=\"ml-2 p-button-outlined\" icon=\"glyphicons glyphicons-bin\" *ngIf=\"reporteColumna.llaveTabla\"\r\n label=\"{{'link_eliminar' | translate}}\" (click)=\"eliminar($event)\">\r\n </button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n</div>" }]
183
+ args: [{ selector: 'detalle-campo-reporte', imports: [TranslateModule, CommonModule, ButtonModule, FormsModule, ReactiveFormsModule, DropdownModule, ReporteFuentePipe, ConfirmPopupModule, TableModule, InputTextModule, InputTextareaModule], standalone: true, providers: [ConfirmationService, MessageService], template: "<p-confirmPopup></p-confirmPopup>\r\n<div class=\"flex justify-content-between align-items-center mb-3\">\r\n <h1 class=\"text-xl mb-1\">{{'campo' | translate}}</h1>\r\n <div class=\"flex justify-content-end mb-3\" *ngIf=\"vistaVisualizar != 'detalle'\">\r\n <button pButton pRipple (click)=\"nuevaColumna()\" label=\"{{'link_nuevo' | translate}}\"\r\n icon=\"pi pi-plus\" class=\"p-button-secondary font-semibold flex-shrink-0 ml-4 mr-2\"></button>\r\n <button pButton pRipple class=\"p-button p-button-outlined\" label=\"{{'link_importar' | translate}}\" *ngIf=\"isFuente()\"\r\n (click)=\"importar()\"><i class=\"glyphicons glyphicons-restart\"></i></button>\r\n <button pButton pRipple class=\"p-button p-button-outlined\" label=\"{{'link_generar' | translate}}\" *ngIf=\"isSql()\"\r\n (click)=\"generar()\"><i class=\"glyphicons glyphicons-restart\"></i></button>\r\n </div>\r\n <div class=\"flex justify-content-end mb-1\" *ngIf=\"vistaVisualizar =='detalle'\">\r\n <button pButton pRipple (click)=\"vistaVisualizar = null\" label= \"{{'listado' | translate}} {{'campo' | translate}}\" \r\n icon=\"pi pi-chevron-left\" class=\"p-button-text font-semibold flex-shrink-0 \"></button>\r\n </div>\r\n</div>\r\n\r\n<p-table [value]=\"listaColumna\" responsiveLayout=\"scroll\" [scrollable]=\"true\" selectionMode=\"single\" dataKey=\"llave\"\r\n [showCurrentPageReport]=\"true\" currentPageReportTemplate=\"{first} al {last} de {totalRecords} registros\" *ngIf=\"vistaVisualizar != 'detalle'\"\r\n (onRowSelect)=\"verAction($event)\" (onRowUnselect)=\"verAction($event)\" [rows]=\"paginador.rows\" [totalRecords]=\"paginador.totalRecords\" [paginator]=\"paginador.totalRecords > paginador.rows\"\r\n [lazy]=\"true\" (onLazyLoad)=\"cargarListaColumna($event)\">\r\n <ng-template pTemplate=\"header\">\r\n \r\n <tr class=\"fondoTablaPincipal\">\r\n <th>{{'nombre' | translate}} </th>\r\n <th>{{'sintaxis' | translate}} </th>\r\n <th>{{'tipo' | translate}} </th>\r\n </tr>\r\n <th>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-campo>\r\n <tr [pSelectableRow]=\"campo\">\r\n <td>{{campo.nombre}}</td>\r\n <td>{{campo.sintaxis}}</td>\r\n <td>{{campo.tipoDato | reporteFuentePipe : 'listaTipoDatoColumna'}}</td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td colspan=\"100\" class=\"p-3 font-medium emptymessage\">{{'mensajetablavacia' | translate}}</td>\r\n </tr>\r\n </ng-template>\r\n</p-table>\r\n\r\n<div class=\"card mt-3\" *ngIf=\"vistaVisualizar == 'detalle'\">\r\n <h5 class=\"mt-3\"><i class=\"glyphicons glyphicons-notes\"></i>{{'detalle' | translate}}</h5>\r\n <div class=\"col-md-12\">\r\n <div class=\"Detallereporte mt-2\">\r\n <form [formGroup]=\"formReporteColumna\" #formulario=\"ngForm\">\r\n <div class=\"p-fluid p-formgrid grid\">\r\n <div class=\"field col-12 md:col-6\">\r\n <span class=\"p-float-label\">\r\n <span class=\"p-float-label\">\r\n <input pInputText id=\"nombre\" type=\"text\" formControlName=\"nombre\" size=\"40\">\r\n <label htmlFor=\"nombre\">{{'nombre' | translate}} *</label>\r\n </span>\r\n </span>\r\n </div>\r\n <div class=\"field col-12 md:col-6\">\r\n <span class=\"p-float-label\">\r\n <p-dropdown [options]=\"listaTipoDato\" [autoDisplayFirst]=\"false\" formControlName=\"tipoDato\"\r\n optionLabel=\"nombre\" optionValue=\"codigo\"></p-dropdown>\r\n <label htmlFor=\"tipoDato\">{{'tipo' | translate}} *</label>\r\n </span>\r\n </div>\r\n <div class=\"field col-12 md:col-12\">\r\n <span class=\"p-float-label\">\r\n <textarea class=\"w-full min-h-150 max-h-200\" pInputTextarea formControlName=\"sintaxis\"></textarea>\r\n <label htmlFor=\"sintaxis\">{{'sintaxis' | translate}} *</label>\r\n </span>\r\n </div>\r\n \r\n </div>\r\n <!--BOTONES-->\r\n <div class=\"flex justify-content-end mb-3\">\r\n <button pButton pRipple class=\"ml-2 p-button p-button-raised\" (click)=\"actualizar()\"\r\n icon=\"glyphicons {{reporteColumna.llaveTabla ? 'glyphicons-refresh' : 'glyphicons-floppy-save' }}\" \r\n label=\"{{reporteColumna.llaveTabla ? ('link_actualizar' | translate) : ('link_guardar' | translate)}}\" >\r\n </button>\r\n <button pButton pRipple class=\"ml-2 p-button-outlined\" icon=\"glyphicons glyphicons-bin\" *ngIf=\"reporteColumna.llaveTabla\"\r\n label=\"{{'link_eliminar' | translate}}\" (click)=\"eliminar($event)\">\r\n </button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n</div>" }]
184
184
  }], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.ToastService }, { type: i3.GeneralService }, { type: i4.ConfirmationService }, { type: i5.EjecucionReporteService }, { type: i6.GeneralPipe }, { type: i7.TranslateService }, { type: i8.ReporteFuentePipe }], propDecorators: { reporteFuente: [{
185
185
  type: Input
186
186
  }] } });
187
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0YWxsZS1jYW1wby1yZXBvcnRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvd2ViY29tbW9uL3BhZ2VzL2VqZWN1Y2lvbi1yZXBvcnRlL2RldGFsbGUtY2FtcG8tcmVwb3J0ZS9kZXRhbGxlLWNhbXBvLXJlcG9ydGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC93ZWJjb21tb24vcGFnZXMvZWplY3VjaW9uLXJlcG9ydGUvZGV0YWxsZS1jYW1wby1yZXBvcnRlL2RldGFsbGUtY2FtcG8tcmVwb3J0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQWUsV0FBVyxFQUFhLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUduSCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDMUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUV2RSxPQUFPLEVBQUUsZUFBZSxFQUFvQixNQUFNLHFCQUFxQixDQUFDO0FBRXhFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBRW5GLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzFELE9BQU8s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aUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRU0sa0JBQWtCLENBQUMsSUFBVztRQUNuQyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQztJQUNqRCxDQUFDO3VHQTVKVSw0QkFBNEI7MkZBQTVCLDRCQUE0QixnSEFGNUIsQ0FBQyxtQkFBbUIsRUFBRSxjQUFjLENBQUMsMEJDMUJsRCx5ektBc0ZNLHlERGhFUSxlQUFlLDJGQUFFLFlBQVksa0lBQUUsWUFBWSxvVkFBRSxXQUFXLDJwQkFBRSxtQkFBbUIsK1VBQUUsY0FBYyx3cUNBQUUsaUJBQWlCLHlEQUFFLGtCQUFrQiwwUEFBRSxXQUFXLCtsRUFBRSxlQUFlLHlIQUFFLG1CQUFtQjs7MkZBTXhMLDRCQUE0QjtrQkFSeEMsU0FBUzsrQkFDRSx1QkFBdUIsV0FDdEIsQ0FBQyxlQUFlLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsbUJBQW1CLENBQUMsY0FDdEwsSUFBSSxhQUdQLENBQUMsbUJBQW1CLEVBQUUsY0FBYyxDQUFDO3lTQUtoQyxhQUFhO3NCQUE1QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgR2VuZXJhbFBpcGUgfSBmcm9tICcuLi8uLi8uLi9waXBlcy9nZW5lcmFsLnBpcGUnO1xyXG5pbXBvcnQgeyBHZW5lcmFsU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9zZXJ2aWNpb3MvZ2VuZXJhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgR2VuZXJhbE1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VndXJpZGFkL21vZGVsb3MvR2VuZXJhbE1vZGVsJztcclxuaW1wb3J0IHsgQ29uZmlybWF0aW9uU2VydmljZSwgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IFJlcG9ydGVGdWVudGVQaXBlIH0gZnJvbSAnLi4vLi4vLi4vcGlwZXMvcmVwb3J0ZS1mdWVudGUucGlwZSc7XHJcbmltcG9ydCB7IEVqZWN1Y2lvblJlcG9ydGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZWplY3VjaW9ucmVwb3J0ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IFJlcG9ydGVGdWVudGVNb2RlbCB9IGZyb20gJy4uLy4uLy4uLy4uL3NlZ3VyaWRhZC9tb2RlbG9zL1JlcG9ydGVGdWVudGVNb2RlbCc7XHJcbmltcG9ydCB7IFJlcG9ydGVDb2x1bW5hTW9kZWwgfSBmcm9tICcuLi8uLi8uLi8uLi9zZWd1cmlkYWQvbW9kZWxvcy9SZXBvcnRlQ29sdW1uYSc7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvc2VydmljaW9zL3RvYXN0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBCdXR0b25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL2J1dHRvbic7XHJcbmltcG9ydCB7IERyb3Bkb3duTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9kcm9wZG93bic7XHJcbmltcG9ydCB7IENvbmZpcm1Qb3B1cE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvY29uZmlybXBvcHVwJztcclxuaW1wb3J0IHsgVGFibGVNb2R1bGUgfSBmcm9tICdwcmltZW5nL3RhYmxlJztcclxuaW1wb3J0IHsgSW5wdXRUZXh0TW9kdWxlIH0gZnJvbSAncHJpbWVuZy9pbnB1dHRleHQnO1xyXG5pbXBvcnQgeyBJbnB1dFRleHRhcmVhTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9pbnB1dHRleHRhcmVhJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZGV0YWxsZS1jYW1wby1yZXBvcnRlJyxcclxuICAgIGltcG9ydHM6IFtUcmFuc2xhdGVNb2R1bGUsIENvbW1vbk1vZHVsZSwgQnV0dG9uTW9kdWxlLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgRHJvcGRvd25Nb2R1bGUsIFJlcG9ydGVGdWVudGVQaXBlLCBDb25maXJtUG9wdXBNb2R1bGUsIFRhYmxlTW9kdWxlLCBJbnB1dFRleHRNb2R1bGUsIElucHV0VGV4dGFyZWFNb2R1bGVdLFxyXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9kZXRhbGxlLWNhbXBvLXJlcG9ydGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2RldGFsbGUtY2FtcG8tcmVwb3J0ZS5jb21wb25lbnQuc2NzcyddLFxyXG4gIHByb3ZpZGVyczogW0NvbmZpcm1hdGlvblNlcnZpY2UsIE1lc3NhZ2VTZXJ2aWNlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRGV0YWxsZUNhbXBvUmVwb3J0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIHB1YmxpYyBsaXN0YUNvbHVtbmE6IFJlcG9ydGVDb2x1bW5hTW9kZWxbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyByZXBvcnRlRnVlbnRlOiBSZXBvcnRlRnVlbnRlTW9kZWw7XHJcbiAgXHJcbiAgcHVibGljIHJlcG9ydGVDb2x1bW5hOiBSZXBvcnRlQ29sdW1uYU1vZGVsO1xyXG4gIHB1YmxpYyBmb3JtUmVwb3J0ZUNvbHVtbmE6IEZvcm1Hcm91cDtcclxuICBwdWJsaWMgdmlzdGFWaXN1YWxpemFyOiBzdHJpbmc7XHJcbiAgcHVibGljIG51ZXZvOiBib29sZWFuO1xyXG4gIHB1YmxpYyBzdWJtaXR0ZWQ6IGJvb2xlYW47XHJcbiAgaXRlbXM6ICh7IGxhYmVsOiBzdHJpbmc7IGljb246IHN0cmluZzsgY29tbWFuZDogKCkgPT4gdm9pZDsgdXJsPzogdW5kZWZpbmVkOyBzZXBhcmF0b3I/OiB1bmRlZmluZWQ7IHJvdXRlckxpbms/OiB1bmRlZmluZWQ7IH0gfCB7IGxhYmVsOiBzdHJpbmc7IGljb246IHN0cmluZzsgdXJsOiBzdHJpbmc7IGNvbW1hbmQ/OiB1bmRlZmluZWQ7IHNlcGFyYXRvcj86IHVuZGVmaW5lZDsgcm91dGVyTGluaz86IHVuZGVmaW5lZDsgfSB8IHsgc2VwYXJhdG9yOiBib29sZWFuOyBsYWJlbD86IHVuZGVmaW5lZDsgaWNvbj86IHVuZGVmaW5lZDsgY29tbWFuZD86IHVuZGVmaW5lZDsgdXJsPzogdW5kZWZpbmVkOyByb3V0ZXJMaW5rPzogdW5kZWZpbmVkOyB9IHwgeyBsYWJlbDogc3RyaW5nOyBpY29uOiBzdHJpbmc7IHJvdXRlckxpbms6IHN0cmluZ1tdOyBjb21tYW5kPzogdW5kZWZpbmVkOyB1cmw/OiB1bmRlZmluZWQ7IHNlcGFyYXRvcj86IHVuZGVmaW5lZDsgfSlbXTtcclxuXHJcblxyXG4gIHBhZ2luYWRvciA9IHtcclxuICAgIHJvd3M6IDEwLFxyXG4gICAgdG90YWxSZWNvcmRzOiAwXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbGlzdGFUaXBvRGF0bztcclxuXHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgbm90aWZpY2FjaW9uZXNCdXNTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSBnZW5lcmFsU2VydmljZTogR2VuZXJhbFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSBjb25maXJtYXRpb25TZXJ2aWNlOiBDb25maXJtYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgcmVwb3J0ZVNlcnZpY2U6IEVqZWN1Y2lvblJlcG9ydGVTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgZ2VuZXJhbFBpcGU6IEdlbmVyYWxQaXBlLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgICAgICAgICAgICBwcml2YXRlIHJlcG9ydGVGdWVudGVQaXBlOiBSZXBvcnRlRnVlbnRlUGlwZSkge1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmxpc3RhVGlwb0RhdG8gPSB0aGlzLnJlcG9ydGVGdWVudGVQaXBlLlRJUE9TX0RBVE9fQ09MVU1OQTtcclxuICAgIHRoaXMuaXRlbXMgPSBbXVxyXG4gICAgaWYgKHRoaXMuaXNGdWVudGUoKSl7XHJcbiAgICB0aGlzLml0ZW1zLnB1c2goXHJcbiAgICAgIHtsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ2xpbmtfaW1wb3J0YXInKSwgIGljb246ICdwaSBwaS1yZWZyZXNoJywgY29tbWFuZDogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pbXBvcnRhcigpO1xyXG4gICAgICB9fSlcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pc1NxbCl7XHJcbiAgICAgIHRoaXMuaXRlbXMucHVzaChcclxuICAgICAgICB7bGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdsaW5rX2dlbmVyYXInKSwgIGljb246ICdwaSBwaS1yZWZyZXNoJywgY29tbWFuZDogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmdlbmVyYXIoKTtcclxuICAgICAgICB9fSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNhcmdhckxpc3RhQ29sdW1uYShldmVudCl7XHJcbiAgICB0aGlzLmdlbmVyYWxTZXJ2aWNlLnF1ZXJ5Rm9yTGlzdChuZXcgR2VuZXJhbE1vZGVsKCdSZXBvcnRlQ29sdW1uYURUTycsIG51bGwsIGZhbHNlLCB7XHJcbiAgICAgIHJlcG9ydGVGdWVudGU6IHRoaXMucmVwb3J0ZUZ1ZW50ZS5sbGF2ZSxcclxuICAgICAgcGFnaW5hY2lvblJlZ2lzdHJvSW5pY2lhbDogZXZlbnQuZmlyc3QsXHJcbiAgICAgIHBhZ2luYWNpb25SZWdpc3Ryb0ZpbmFsOiBldmVudC5yb3dzXHJcbiAgICB9KSkuc3Vic2NyaWJlKGRhdGEgPT4ge1xyXG4gICAgICB0aGlzLmxpc3RhQ29sdW1uYSA9IGRhdGE7XHJcbiAgICAgIHRoaXMuZ2VuZXJhbFNlcnZpY2UuY2FudGlkYWRSZWdpc3Ryb3MobmV3IEdlbmVyYWxNb2RlbCgnUmVwb3J0ZUNvbHVtbmFEVE8nLCBudWxsLCBmYWxzZSwge3JlcG9ydGVGdWVudGU6IHRoaXMucmVwb3J0ZUZ1ZW50ZS5sbGF2ZX0pKS5zdWJzY3JpYmUoZGF0YSA9PiB7XHJcbiAgICAgICAgdGhpcy5wYWdpbmFkb3IudG90YWxSZWNvcmRzID0gZGF0YTtcclxuICAgICAgfSlcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2FyZ2FyRm9ybXVsYXJpbygpe1xyXG4gICAgdGhpcy5mb3JtUmVwb3J0ZUNvbHVtbmEgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgbm9tYnJlOiBuZXcgRm9ybUNvbnRyb2wodGhpcy5yZXBvcnRlQ29sdW1uYS5ub21icmUsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSksXHJcbiAgICAgIHNpbnRheGlzOiBuZXcgRm9ybUNvbnRyb2wodGhpcy5yZXBvcnRlQ29sdW1uYS5zaW50YXhpcywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSxcclxuICAgICAgdGlwb0RhdG86IG5ldyBGb3JtQ29udHJvbCh0aGlzLnJlcG9ydGVDb2x1bW5hLnRpcG9EYXRvLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pLFxyXG4gICAgICBsbGF2ZVRhYmxhOiBuZXcgRm9ybUNvbnRyb2wodGhpcy5yZXBvcnRlQ29sdW1uYS5sbGF2ZVRhYmxhKSxcclxuICAgICAgcmVwb3J0ZUZ1ZW50ZTogbmV3IEZvcm1Db250cm9sKHRoaXMucmVwb3J0ZUZ1ZW50ZS5sbGF2ZSlcclxuICAgIH0pO1xyXG4gIH1cclxuICBwdWJsaWMgdmVyQWN0aW9uKGV2ZW50KXtcclxuICAgIHRoaXMucmVwb3J0ZUNvbHVtbmEgPSBldmVudC5kYXRhO1xyXG4gICAgdGhpcy52aXN0YVZpc3VhbGl6YXIgPSAnZGV0YWxsZSc7XHJcbiAgICB0aGlzLm51ZXZvID0gZmFsc2U7XHJcbiAgICB0aGlzLmNhcmdhckZvcm11bGFyaW8oKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBudWV2YUNvbHVtbmEoKXtcclxuICAgIHRoaXMudmlzdGFWaXN1YWxpemFyID0gJ2RldGFsbGUnO1xyXG4gICAgdGhpcy5udWV2byA9IHRydWU7XHJcbiAgICB0aGlzLnJlcG9ydGVDb2x1bW5hID0gbmV3IFJlcG9ydGVDb2x1bW5hTW9kZWwoKTtcclxuICAgIHRoaXMuY2FyZ2FyRm9ybXVsYXJpbygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFjdHVhbGl6YXIoKXtcclxuICAgIHRoaXMuc3VibWl0dGVkID0gdHJ1ZTtcclxuICAgIGlmICghdGhpcy5mb3JtUmVwb3J0ZUNvbHVtbmEudmFsaWQpe1xyXG4gICAgICB0aGlzLm5vdGlmaWNhY2lvbmVzQnVzU2VydmljZS5zaG93RXJyb3IoJ0ZhbHRhbiBjYW1wb3Mgb2JsaWdhdG9yaW9zJyk7XHJcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5mb3JtUmVwb3J0ZUNvbHVtbmEuY29udHJvbHMpLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMuZm9ybVJlcG9ydGVDb2x1bW5hLmdldChrZXkpLmVycm9ycykge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1SZXBvcnRlQ29sdW1uYS5nZXQoa2V5KS5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5udWV2byl7XHJcbiAgICAgIHRoaXMuZ2VuZXJhbFNlcnZpY2UuY3JlYXJSZWdpc3RybyhuZXcgR2VuZXJhbE1vZGVsKCdSZXBvcnRlQ29sdW1uYURUTycsIG51bGwsIGZhbHNlLCB0aGlzLmZvcm1SZXBvcnRlQ29sdW1uYS52YWx1ZSkpLnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgICB0aGlzLnZpc3RhVmlzdWFsaXphciA9IG51bGw7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5nZW5lcmFsU2VydmljZS51cGRhdGUobmV3IEdlbmVyYWxNb2RlbCgnUmVwb3J0ZUNvbHVtbmFEVE8nLCBudWxsLCBmYWxzZSwgdGhpcy5mb3JtUmVwb3J0ZUNvbHVtbmEudmFsdWUpKS5zdWJzY3JpYmUoZGF0YSA9PiB7XHJcbiAgICAgICAgdGhpcy52aXN0YVZpc3VhbGl6YXIgPSBudWxsO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMuY2FyZ2FyTGlzdGFDb2x1bW5hKHtmaXJzdDogMCwgcm93czogMTB9KVxyXG4gICAgdGhpcy5ub3RpZmljYWNpb25lc0J1c1NlcnZpY2Uuc2hvd1N1Y2Nlc3MoIHRoaXMuZ2VuZXJhbFBpcGUuTUVOU0FKRV9BQ1RVQUxJWkFSKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBpbXBvcnRhcigpe1xyXG4gICAgdGhpcy5yZXBvcnRlU2VydmljZS5jYXJnYXJDYW1wb3ModGhpcy5yZXBvcnRlRnVlbnRlKS5zdWJzY3JpYmUoZGF0YSA9PiB7XHJcbiAgICAgIHRoaXMuY2FyZ2FyTGlzdGFDb2x1bW5hKHtmaXJzdDogMCwgcm93czogMTB9KVxyXG4gICAgICB0aGlzLm5vdGlmaWNhY2lvbmVzQnVzU2VydmljZS5zaG93SW5mbygnU2UgaW1wb3J0YXJvbiBsYXMgY29sdW1uYXMnKVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHVibGljIGdlbmVyYXIoKXtcclxuICAgIHRoaXMucmVwb3J0ZVNlcnZpY2UuY29uc3RydWlyQ29sdW1uYXModGhpcy5yZXBvcnRlRnVlbnRlKS5zdWJzY3JpYmUoZGF0YSA9PiB7XHJcbiAgICAgIHRoaXMuY2FyZ2FyTGlzdGFDb2x1bW5hKHtmaXJzdDogMCwgcm93czogMTB9KVxyXG4gICAgICB0aGlzLm5vdGlmaWNhY2lvbmVzQnVzU2VydmljZS5zaG93SW5mbygnU2UgZ2VuZXJhcm9uIGxhcyBjb2x1bW5hcycpXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBlbGltaW5hcihldmVudDogRXZlbnQpe1xyXG4gICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0oe1xyXG4gICAgICB0YXJnZXQ6IGV2ZW50LnRhcmdldCxcclxuICAgICAgbWVzc2FnZTogIHRoaXMuZ2VuZXJhbFBpcGUuTUVOU0FKRV9FTElNSU5BUl9DT05GSVJNQVIsXHJcbiAgICAgIGFjY2VwdExhYmVsOiB0aGlzLmdlbmVyYWxQaXBlLlNJX0RFU0MsXHJcbiAgICAgIGhlYWRlcjogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ2NvbmZpcm1hcicpLFxyXG4gICAgICBhY2NlcHQ6ICgpID0+IHtcclxuICAgICAgICBsZXQgZW50cmFkYUVsaW1pbmFyOlJlcG9ydGVDb2x1bW5hTW9kZWwgPSB0aGlzLmZvcm1SZXBvcnRlQ29sdW1uYS52YWx1ZTtcclxuICAgICAgICB0aGlzLmdlbmVyYWxTZXJ2aWNlLmRlbGV0ZShuZXcgR2VuZXJhbE1vZGVsKCdSZXBvcnRlQ29sdW1uYURUTycsIG51bGwsIGZhbHNlLCBlbnRyYWRhRWxpbWluYXIpKS5zdWJzY3JpYmUoZGF0YSA9PiB7XHJcbiAgICAgICAgICBpZiAoZGF0YSA9PSAxKSB7XHJcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2FjaW9uZXNCdXNTZXJ2aWNlLnNob3dTdWNjZXNzKCB0aGlzLmdlbmVyYWxQaXBlLk1FTlNBSkVfRUxJTUlOQVIpO1xyXG4gICAgICAgICAgICB0aGlzLnZpc3RhVmlzdWFsaXphciA9IG51bGw7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhY2lvbmVzQnVzU2VydmljZS5zaG93U3VjY2VzcyggdGhpcy5nZW5lcmFsUGlwZS5NRU5TQUpFX0VMSU1JTkFSX05PKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaXNGaWpvKCk6Ym9vbGVhbntcclxuICAgIHJldHVybiB0aGlzLmZpbHRyb09yaWdlbkZ1ZW50ZSh0aGlzLnJlcG9ydGVGdWVudGVQaXBlLkZJSk8pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGlzU3FsKCk6Ym9vbGVhbntcclxuICAgIHJldHVybiB0aGlzLmZpbHRyb09yaWdlbkZ1ZW50ZSh0aGlzLnJlcG9ydGVGdWVudGVQaXBlLlNRTCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaXNGdWVudGUoKTpib29sZWFue1xyXG4gICAgcmV0dXJuIHRoaXMuZmlsdHJvT3JpZ2VuRnVlbnRlKHRoaXMucmVwb3J0ZUZ1ZW50ZVBpcGUuRlVFTlRFKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBmaWx0cm9PcmlnZW5GdWVudGUodGlwbzpzdHJpbmcpOmJvb2xlYW57XHJcbiAgICByZXR1cm4gdGhpcy5yZXBvcnRlRnVlbnRlLm9yaWdlbkZ1ZW50ZSA9PSB0aXBvO1xyXG4gIH1cclxuXHJcblxyXG5cclxufVxyXG4iLCI8cC1jb25maXJtUG9wdXA+PC9wLWNvbmZpcm1Qb3B1cD5cclxuPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG1iLTNcIj5cclxuICAgIDxoMSBjbGFzcz1cInRleHQteGwgbWItMVwiPnt7J2NhbXBvJyB8IHRyYW5zbGF0ZX19PC9oMT5cclxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1lbmQgbWItM1wiICpuZ0lmPVwidmlzdGFWaXN1YWxpemFyICE9ICdkZXRhbGxlJ1wiPlxyXG4gICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIChjbGljayk9XCJudWV2YUNvbHVtbmEoKVwiIGxhYmVsPVwie3snbGlua19udWV2bycgfCB0cmFuc2xhdGV9fVwiXHJcbiAgICAgICAgICAgIGljb249XCJwaSBwaS1wbHVzXCIgY2xhc3M9XCJwLWJ1dHRvbi1zZWNvbmRhcnkgZm9udC1zZW1pYm9sZCBmbGV4LXNocmluay0wIG1sLTQgbXItMlwiPjwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIGNsYXNzPVwicC1idXR0b24gcC1idXR0b24tb3V0bGluZWRcIiBsYWJlbD1cInt7J2xpbmtfaW1wb3J0YXInIHwgdHJhbnNsYXRlfX1cIiAqbmdJZj1cImlzRnVlbnRlKClcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiaW1wb3J0YXIoKVwiPjxpIGNsYXNzPVwiZ2x5cGhpY29ucyBnbHlwaGljb25zLXJlc3RhcnRcIj48L2k+PC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHBSaXBwbGUgY2xhc3M9XCJwLWJ1dHRvbiBwLWJ1dHRvbi1vdXRsaW5lZFwiIGxhYmVsPVwie3snbGlua19nZW5lcmFyJyB8IHRyYW5zbGF0ZX19XCIgKm5nSWY9XCJpc1NxbCgpXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImdlbmVyYXIoKVwiPjxpIGNsYXNzPVwiZ2x5cGhpY29ucyBnbHlwaGljb25zLXJlc3RhcnRcIj48L2k+PC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1lbmQgIG1iLTFcIiAqbmdJZj1cInZpc3RhVmlzdWFsaXphciA9PSdkZXRhbGxlJ1wiPlxyXG4gICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIChjbGljayk9XCJ2aXN0YVZpc3VhbGl6YXIgPSBudWxsXCIgbGFiZWw9IFwie3snbGlzdGFkbycgfCB0cmFuc2xhdGV9fSB7eydjYW1wbycgfCB0cmFuc2xhdGV9fVwiIFxyXG4gICAgICAgICAgICBpY29uPVwicGkgcGktY2hldnJvbi1sZWZ0XCIgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0IGZvbnQtc2VtaWJvbGQgZmxleC1zaHJpbmstMCBcIj48L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxwLXRhYmxlIFt2YWx1ZV09XCJsaXN0YUNvbHVtbmFcIiByZXNwb25zaXZlTGF5b3V0PVwic2Nyb2xsXCIgW3Njcm9sbGFibGVdPVwidHJ1ZVwiIHNlbGVjdGlvbk1vZGU9XCJzaW5nbGVcIiBkYXRhS2V5PVwibGxhdmVcIlxyXG4gICAgW3Nob3dDdXJyZW50UGFnZVJlcG9ydF09XCJ0cnVlXCIgY3VycmVudFBhZ2VSZXBvcnRUZW1wbGF0ZT1cIntmaXJzdH0gYWwge2xhc3R9IGRlIHt0b3RhbFJlY29yZHN9IHJlZ2lzdHJvc1wiICpuZ0lmPVwidmlzdGFWaXN1YWxpemFyICE9ICdkZXRhbGxlJ1wiXHJcbiAgICAob25Sb3dTZWxlY3QpPVwidmVyQWN0aW9uKCRldmVudClcIiAob25Sb3dVbnNlbGVjdCk9XCJ2ZXJBY3Rpb24oJGV2ZW50KVwiIFtyb3dzXT1cInBhZ2luYWRvci5yb3dzXCIgW3RvdGFsUmVjb3Jkc109XCJwYWdpbmFkb3IudG90YWxSZWNvcmRzXCIgW3BhZ2luYXRvcl09XCJwYWdpbmFkb3IudG90YWxSZWNvcmRzID4gcGFnaW5hZG9yLnJvd3NcIlxyXG4gICAgW2xhenldPVwidHJ1ZVwiIChvbkxhenlMb2FkKT1cImNhcmdhckxpc3RhQ29sdW1uYSgkZXZlbnQpXCI+XHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XHJcbiAgICAgICAgIFxyXG4gICAgICAgIDx0ciBjbGFzcz1cImZvbmRvVGFibGFQaW5jaXBhbFwiPlxyXG4gICAgICAgICAgICA8dGg+e3snbm9tYnJlJyB8IHRyYW5zbGF0ZX19IDwvdGg+XHJcbiAgICAgICAgICAgIDx0aD57eydzaW50YXhpcycgfCB0cmFuc2xhdGV9fSA8L3RoPlxyXG4gICAgICAgICAgICA8dGg+e3sndGlwbycgfCB0cmFuc2xhdGV9fSA8L3RoPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICAgICAgPHRoPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCIgbGV0LWNhbXBvPlxyXG4gICAgICAgIDx0ciBbcFNlbGVjdGFibGVSb3ddPVwiY2FtcG9cIj5cclxuICAgICAgICAgICAgPHRkPnt7Y2FtcG8ubm9tYnJlfX08L3RkPlxyXG4gICAgICAgICAgICA8dGQ+e3tjYW1wby5zaW50YXhpc319PC90ZD5cclxuICAgICAgICAgICAgPHRkPnt7Y2FtcG8udGlwb0RhdG8gfCByZXBvcnRlRnVlbnRlUGlwZSA6ICdsaXN0YVRpcG9EYXRvQ29sdW1uYSd9fTwvdGQ+XHJcbiAgICAgICAgPC90cj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZW1wdHltZXNzYWdlXCI+XHJcbiAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjEwMFwiIGNsYXNzPVwicC0zIGZvbnQtbWVkaXVtIGVtcHR5bWVzc2FnZVwiPnt7J21lbnNhamV0YWJsYXZhY2lhJyB8IHRyYW5zbGF0ZX19PC90ZD5cclxuICAgICAgICA8L3RyPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuPC9wLXRhYmxlPlxyXG5cclxuPGRpdiBjbGFzcz1cImNhcmQgbXQtM1wiICpuZ0lmPVwidmlzdGFWaXN1YWxpemFyID09ICdkZXRhbGxlJ1wiPlxyXG4gICAgPGg1IGNsYXNzPVwibXQtM1wiPjxpIGNsYXNzPVwiZ2x5cGhpY29ucyBnbHlwaGljb25zLW5vdGVzXCI+PC9pPnt7J2RldGFsbGUnIHwgdHJhbnNsYXRlfX08L2g1PlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJEZXRhbGxlcmVwb3J0ZSBtdC0yXCI+XHJcbiAgICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVJlcG9ydGVDb2x1bW5hXCIgI2Zvcm11bGFyaW89XCJuZ0Zvcm1cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLWZsdWlkIHAtZm9ybWdyaWQgZ3JpZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBjb2wtMTIgbWQ6Y29sLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwLWZsb2F0LWxhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtZmxvYXQtbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgcElucHV0VGV4dCBpZD1cIm5vbWJyZVwiIHR5cGU9XCJ0ZXh0XCIgZm9ybUNvbnRyb2xOYW1lPVwibm9tYnJlXCIgc2l6ZT1cIjQwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGh0bWxGb3I9XCJub21icmVcIj57eydub21icmUnIHwgdHJhbnNsYXRlfX0gKjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGQgY29sLTEyIG1kOmNvbC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1mbG9hdC1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAtZHJvcGRvd24gW29wdGlvbnNdPVwibGlzdGFUaXBvRGF0b1wiIFthdXRvRGlzcGxheUZpcnN0XT1cImZhbHNlXCIgZm9ybUNvbnRyb2xOYW1lPVwidGlwb0RhdG9cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbkxhYmVsPVwibm9tYnJlXCIgb3B0aW9uVmFsdWU9XCJjb2RpZ29cIj48L3AtZHJvcGRvd24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgaHRtbEZvcj1cInRpcG9EYXRvXCI+e3sndGlwbycgfCB0cmFuc2xhdGV9fSAqPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBjb2wtMTIgbWQ6Y29sLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1mbG9hdC1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwidy1mdWxsIG1pbi1oLTE1MFwiICBwSW5wdXRUZXh0YXJlYSBmb3JtQ29udHJvbE5hbWU9XCJzaW50YXhpc1wiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgaHRtbEZvcj1cInNpbnRheGlzXCI+e3snc2ludGF4aXMnIHwgdHJhbnNsYXRlfX0gKjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPCEtLUJPVE9ORVMtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1lbmQgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIGNsYXNzPVwibWwtMiBwLWJ1dHRvbiBwLWJ1dHRvbi1yYWlzZWRcIiAoY2xpY2spPVwiYWN0dWFsaXphcigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cImdseXBoaWNvbnMge3tyZXBvcnRlQ29sdW1uYS5sbGF2ZVRhYmxhID8gJ2dseXBoaWNvbnMtcmVmcmVzaCcgOiAnZ2x5cGhpY29ucy1mbG9wcHktc2F2ZScgfX1cIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJ7e3JlcG9ydGVDb2x1bW5hLmxsYXZlVGFibGEgPyAoJ2xpbmtfYWN0dWFsaXphcicgfCB0cmFuc2xhdGUpIDogKCdsaW5rX2d1YXJkYXInIHwgdHJhbnNsYXRlKX19XCIgPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIGNsYXNzPVwibWwtMiBwLWJ1dHRvbi1vdXRsaW5lZFwiIGljb249XCJnbHlwaGljb25zIGdseXBoaWNvbnMtYmluXCIgKm5nSWY9XCJyZXBvcnRlQ29sdW1uYS5sbGF2ZVRhYmxhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJ7eydsaW5rX2VsaW1pbmFyJyB8IHRyYW5zbGF0ZX19XCIgKGNsaWNrKT1cImVsaW1pbmFyKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Zvcm0+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+Il19
187
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0YWxsZS1jYW1wby1yZXBvcnRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvd2ViY29tbW9uL3BhZ2VzL2VqZWN1Y2lvbi1yZXBvcnRlL2RldGFsbGUtY2FtcG8tcmVwb3J0ZS9kZXRhbGxlLWNhbXBvLXJlcG9ydGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC93ZWJjb21tb24vcGFnZXMvZWplY3VjaW9uLXJlcG9ydGUvZGV0YWxsZS1jYW1wby1yZXBvcnRlL2RldGFsbGUtY2FtcG8tcmVwb3J0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQWUsV0FBVyxFQUFhLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUduSCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDMUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUV2RSxPQUFPLEVBQUUsZUFBZSxFQUFvQixNQUFNLHFCQUFxQixDQUFDO0FBRXhFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBRW5GLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzFELE9BQU8s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aUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRU0sa0JBQWtCLENBQUMsSUFBVztRQUNuQyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQztJQUNqRCxDQUFDO3VHQTVKVSw0QkFBNEI7MkZBQTVCLDRCQUE0QixnSEFGNUIsQ0FBQyxtQkFBbUIsRUFBRSxjQUFjLENBQUMsMEJDMUJsRCxtMEtBc0ZNLHlERGhFUSxlQUFlLDJGQUFFLFlBQVksa0lBQUUsWUFBWSxvVkFBRSxXQUFXLDJwQkFBRSxtQkFBbUIsK1VBQUUsY0FBYyx3cUNBQUUsaUJBQWlCLHlEQUFFLGtCQUFrQiwwUEFBRSxXQUFXLCtsRUFBRSxlQUFlLHlIQUFFLG1CQUFtQjs7MkZBTXhMLDRCQUE0QjtrQkFSeEMsU0FBUzsrQkFDRSx1QkFBdUIsV0FDdEIsQ0FBQyxlQUFlLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsbUJBQW1CLENBQUMsY0FDdEwsSUFBSSxhQUdQLENBQUMsbUJBQW1CLEVBQUUsY0FBYyxDQUFDO3lTQUtoQyxhQUFhO3NCQUE1QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgR2VuZXJhbFBpcGUgfSBmcm9tICcuLi8uLi8uLi9waXBlcy9nZW5lcmFsLnBpcGUnO1xyXG5pbXBvcnQgeyBHZW5lcmFsU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9zZXJ2aWNpb3MvZ2VuZXJhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgR2VuZXJhbE1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VndXJpZGFkL21vZGVsb3MvR2VuZXJhbE1vZGVsJztcclxuaW1wb3J0IHsgQ29uZmlybWF0aW9uU2VydmljZSwgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IFJlcG9ydGVGdWVudGVQaXBlIH0gZnJvbSAnLi4vLi4vLi4vcGlwZXMvcmVwb3J0ZS1mdWVudGUucGlwZSc7XHJcbmltcG9ydCB7IEVqZWN1Y2lvblJlcG9ydGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZWplY3VjaW9ucmVwb3J0ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IFJlcG9ydGVGdWVudGVNb2RlbCB9IGZyb20gJy4uLy4uLy4uLy4uL3NlZ3VyaWRhZC9tb2RlbG9zL1JlcG9ydGVGdWVudGVNb2RlbCc7XHJcbmltcG9ydCB7IFJlcG9ydGVDb2x1bW5hTW9kZWwgfSBmcm9tICcuLi8uLi8uLi8uLi9zZWd1cmlkYWQvbW9kZWxvcy9SZXBvcnRlQ29sdW1uYSc7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvc2VydmljaW9zL3RvYXN0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBCdXR0b25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL2J1dHRvbic7XHJcbmltcG9ydCB7IERyb3Bkb3duTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9kcm9wZG93bic7XHJcbmltcG9ydCB7IENvbmZpcm1Qb3B1cE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvY29uZmlybXBvcHVwJztcclxuaW1wb3J0IHsgVGFibGVNb2R1bGUgfSBmcm9tICdwcmltZW5nL3RhYmxlJztcclxuaW1wb3J0IHsgSW5wdXRUZXh0TW9kdWxlIH0gZnJvbSAncHJpbWVuZy9pbnB1dHRleHQnO1xyXG5pbXBvcnQgeyBJbnB1dFRleHRhcmVhTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9pbnB1dHRleHRhcmVhJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZGV0YWxsZS1jYW1wby1yZXBvcnRlJyxcclxuICAgIGltcG9ydHM6IFtUcmFuc2xhdGVNb2R1bGUsIENvbW1vbk1vZHVsZSwgQnV0dG9uTW9kdWxlLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgRHJvcGRvd25Nb2R1bGUsIFJlcG9ydGVGdWVudGVQaXBlLCBDb25maXJtUG9wdXBNb2R1bGUsIFRhYmxlTW9kdWxlLCBJbnB1dFRleHRNb2R1bGUsIElucHV0VGV4dGFyZWFNb2R1bGVdLFxyXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9kZXRhbGxlLWNhbXBvLXJlcG9ydGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2RldGFsbGUtY2FtcG8tcmVwb3J0ZS5jb21wb25lbnQuc2NzcyddLFxyXG4gIHByb3ZpZGVyczogW0NvbmZpcm1hdGlvblNlcnZpY2UsIE1lc3NhZ2VTZXJ2aWNlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRGV0YWxsZUNhbXBvUmVwb3J0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIHB1YmxpYyBsaXN0YUNvbHVtbmE6IFJlcG9ydGVDb2x1bW5hTW9kZWxbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyByZXBvcnRlRnVlbnRlOiBSZXBvcnRlRnVlbnRlTW9kZWw7XHJcbiAgXHJcbiAgcHVibGljIHJlcG9ydGVDb2x1bW5hOiBSZXBvcnRlQ29sdW1uYU1vZGVsO1xyXG4gIHB1YmxpYyBmb3JtUmVwb3J0ZUNvbHVtbmE6IEZvcm1Hcm91cDtcclxuICBwdWJsaWMgdmlzdGFWaXN1YWxpemFyOiBzdHJpbmc7XHJcbiAgcHVibGljIG51ZXZvOiBib29sZWFuO1xyXG4gIHB1YmxpYyBzdWJtaXR0ZWQ6IGJvb2xlYW47XHJcbiAgaXRlbXM6ICh7IGxhYmVsOiBzdHJpbmc7IGljb246IHN0cmluZzsgY29tbWFuZDogKCkgPT4gdm9pZDsgdXJsPzogdW5kZWZpbmVkOyBzZXBhcmF0b3I/OiB1bmRlZmluZWQ7IHJvdXRlckxpbms/OiB1bmRlZmluZWQ7IH0gfCB7IGxhYmVsOiBzdHJpbmc7IGljb246IHN0cmluZzsgdXJsOiBzdHJpbmc7IGNvbW1hbmQ/OiB1bmRlZmluZWQ7IHNlcGFyYXRvcj86IHVuZGVmaW5lZDsgcm91dGVyTGluaz86IHVuZGVmaW5lZDsgfSB8IHsgc2VwYXJhdG9yOiBib29sZWFuOyBsYWJlbD86IHVuZGVmaW5lZDsgaWNvbj86IHVuZGVmaW5lZDsgY29tbWFuZD86IHVuZGVmaW5lZDsgdXJsPzogdW5kZWZpbmVkOyByb3V0ZXJMaW5rPzogdW5kZWZpbmVkOyB9IHwgeyBsYWJlbDogc3RyaW5nOyBpY29uOiBzdHJpbmc7IHJvdXRlckxpbms6IHN0cmluZ1tdOyBjb21tYW5kPzogdW5kZWZpbmVkOyB1cmw/OiB1bmRlZmluZWQ7IHNlcGFyYXRvcj86IHVuZGVmaW5lZDsgfSlbXTtcclxuXHJcblxyXG4gIHBhZ2luYWRvciA9IHtcclxuICAgIHJvd3M6IDEwLFxyXG4gICAgdG90YWxSZWNvcmRzOiAwXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbGlzdGFUaXBvRGF0bztcclxuXHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgbm90aWZpY2FjaW9uZXNCdXNTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSBnZW5lcmFsU2VydmljZTogR2VuZXJhbFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSBjb25maXJtYXRpb25TZXJ2aWNlOiBDb25maXJtYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgcmVwb3J0ZVNlcnZpY2U6IEVqZWN1Y2lvblJlcG9ydGVTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgZ2VuZXJhbFBpcGU6IEdlbmVyYWxQaXBlLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgICAgICAgICAgICBwcml2YXRlIHJlcG9ydGVGdWVudGVQaXBlOiBSZXBvcnRlRnVlbnRlUGlwZSkge1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmxpc3RhVGlwb0RhdG8gPSB0aGlzLnJlcG9ydGVGdWVudGVQaXBlLlRJUE9TX0RBVE9fQ09MVU1OQTtcclxuICAgIHRoaXMuaXRlbXMgPSBbXVxyXG4gICAgaWYgKHRoaXMuaXNGdWVudGUoKSl7XHJcbiAgICB0aGlzLml0ZW1zLnB1c2goXHJcbiAgICAgIHtsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ2xpbmtfaW1wb3J0YXInKSwgIGljb246ICdwaSBwaS1yZWZyZXNoJywgY29tbWFuZDogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pbXBvcnRhcigpO1xyXG4gICAgICB9fSlcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pc1NxbCl7XHJcbiAgICAgIHRoaXMuaXRlbXMucHVzaChcclxuICAgICAgICB7bGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdsaW5rX2dlbmVyYXInKSwgIGljb246ICdwaSBwaS1yZWZyZXNoJywgY29tbWFuZDogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmdlbmVyYXIoKTtcclxuICAgICAgICB9fSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNhcmdhckxpc3RhQ29sdW1uYShldmVudCl7XHJcbiAgICB0aGlzLmdlbmVyYWxTZXJ2aWNlLnF1ZXJ5Rm9yTGlzdChuZXcgR2VuZXJhbE1vZGVsKCdSZXBvcnRlQ29sdW1uYURUTycsIG51bGwsIGZhbHNlLCB7XHJcbiAgICAgIHJlcG9ydGVGdWVudGU6IHRoaXMucmVwb3J0ZUZ1ZW50ZS5sbGF2ZSxcclxuICAgICAgcGFnaW5hY2lvblJlZ2lzdHJvSW5pY2lhbDogZXZlbnQuZmlyc3QsXHJcbiAgICAgIHBhZ2luYWNpb25SZWdpc3Ryb0ZpbmFsOiBldmVudC5yb3dzXHJcbiAgICB9KSkuc3Vic2NyaWJlKGRhdGEgPT4ge1xyXG4gICAgICB0aGlzLmxpc3RhQ29sdW1uYSA9IGRhdGE7XHJcbiAgICAgIHRoaXMuZ2VuZXJhbFNlcnZpY2UuY2FudGlkYWRSZWdpc3Ryb3MobmV3IEdlbmVyYWxNb2RlbCgnUmVwb3J0ZUNvbHVtbmFEVE8nLCBudWxsLCBmYWxzZSwge3JlcG9ydGVGdWVudGU6IHRoaXMucmVwb3J0ZUZ1ZW50ZS5sbGF2ZX0pKS5zdWJzY3JpYmUoZGF0YSA9PiB7XHJcbiAgICAgICAgdGhpcy5wYWdpbmFkb3IudG90YWxSZWNvcmRzID0gZGF0YTtcclxuICAgICAgfSlcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2FyZ2FyRm9ybXVsYXJpbygpe1xyXG4gICAgdGhpcy5mb3JtUmVwb3J0ZUNvbHVtbmEgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgbm9tYnJlOiBuZXcgRm9ybUNvbnRyb2wodGhpcy5yZXBvcnRlQ29sdW1uYS5ub21icmUsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSksXHJcbiAgICAgIHNpbnRheGlzOiBuZXcgRm9ybUNvbnRyb2wodGhpcy5yZXBvcnRlQ29sdW1uYS5zaW50YXhpcywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSxcclxuICAgICAgdGlwb0RhdG86IG5ldyBGb3JtQ29udHJvbCh0aGlzLnJlcG9ydGVDb2x1bW5hLnRpcG9EYXRvLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pLFxyXG4gICAgICBsbGF2ZVRhYmxhOiBuZXcgRm9ybUNvbnRyb2wodGhpcy5yZXBvcnRlQ29sdW1uYS5sbGF2ZVRhYmxhKSxcclxuICAgICAgcmVwb3J0ZUZ1ZW50ZTogbmV3IEZvcm1Db250cm9sKHRoaXMucmVwb3J0ZUZ1ZW50ZS5sbGF2ZSlcclxuICAgIH0pO1xyXG4gIH1cclxuICBwdWJsaWMgdmVyQWN0aW9uKGV2ZW50KXtcclxuICAgIHRoaXMucmVwb3J0ZUNvbHVtbmEgPSBldmVudC5kYXRhO1xyXG4gICAgdGhpcy52aXN0YVZpc3VhbGl6YXIgPSAnZGV0YWxsZSc7XHJcbiAgICB0aGlzLm51ZXZvID0gZmFsc2U7XHJcbiAgICB0aGlzLmNhcmdhckZvcm11bGFyaW8oKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBudWV2YUNvbHVtbmEoKXtcclxuICAgIHRoaXMudmlzdGFWaXN1YWxpemFyID0gJ2RldGFsbGUnO1xyXG4gICAgdGhpcy5udWV2byA9IHRydWU7XHJcbiAgICB0aGlzLnJlcG9ydGVDb2x1bW5hID0gbmV3IFJlcG9ydGVDb2x1bW5hTW9kZWwoKTtcclxuICAgIHRoaXMuY2FyZ2FyRm9ybXVsYXJpbygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFjdHVhbGl6YXIoKXtcclxuICAgIHRoaXMuc3VibWl0dGVkID0gdHJ1ZTtcclxuICAgIGlmICghdGhpcy5mb3JtUmVwb3J0ZUNvbHVtbmEudmFsaWQpe1xyXG4gICAgICB0aGlzLm5vdGlmaWNhY2lvbmVzQnVzU2VydmljZS5zaG93RXJyb3IoJ0ZhbHRhbiBjYW1wb3Mgb2JsaWdhdG9yaW9zJyk7XHJcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5mb3JtUmVwb3J0ZUNvbHVtbmEuY29udHJvbHMpLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMuZm9ybVJlcG9ydGVDb2x1bW5hLmdldChrZXkpLmVycm9ycykge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1SZXBvcnRlQ29sdW1uYS5nZXQoa2V5KS5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5udWV2byl7XHJcbiAgICAgIHRoaXMuZ2VuZXJhbFNlcnZpY2UuY3JlYXJSZWdpc3RybyhuZXcgR2VuZXJhbE1vZGVsKCdSZXBvcnRlQ29sdW1uYURUTycsIG51bGwsIGZhbHNlLCB0aGlzLmZvcm1SZXBvcnRlQ29sdW1uYS52YWx1ZSkpLnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgICB0aGlzLnZpc3RhVmlzdWFsaXphciA9IG51bGw7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5nZW5lcmFsU2VydmljZS51cGRhdGUobmV3IEdlbmVyYWxNb2RlbCgnUmVwb3J0ZUNvbHVtbmFEVE8nLCBudWxsLCBmYWxzZSwgdGhpcy5mb3JtUmVwb3J0ZUNvbHVtbmEudmFsdWUpKS5zdWJzY3JpYmUoZGF0YSA9PiB7XHJcbiAgICAgICAgdGhpcy52aXN0YVZpc3VhbGl6YXIgPSBudWxsO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMuY2FyZ2FyTGlzdGFDb2x1bW5hKHtmaXJzdDogMCwgcm93czogMTB9KVxyXG4gICAgdGhpcy5ub3RpZmljYWNpb25lc0J1c1NlcnZpY2Uuc2hvd1N1Y2Nlc3MoIHRoaXMuZ2VuZXJhbFBpcGUuTUVOU0FKRV9BQ1RVQUxJWkFSKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBpbXBvcnRhcigpe1xyXG4gICAgdGhpcy5yZXBvcnRlU2VydmljZS5jYXJnYXJDYW1wb3ModGhpcy5yZXBvcnRlRnVlbnRlKS5zdWJzY3JpYmUoZGF0YSA9PiB7XHJcbiAgICAgIHRoaXMuY2FyZ2FyTGlzdGFDb2x1bW5hKHtmaXJzdDogMCwgcm93czogMTB9KVxyXG4gICAgICB0aGlzLm5vdGlmaWNhY2lvbmVzQnVzU2VydmljZS5zaG93SW5mbygnU2UgaW1wb3J0YXJvbiBsYXMgY29sdW1uYXMnKVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHVibGljIGdlbmVyYXIoKXtcclxuICAgIHRoaXMucmVwb3J0ZVNlcnZpY2UuY29uc3RydWlyQ29sdW1uYXModGhpcy5yZXBvcnRlRnVlbnRlKS5zdWJzY3JpYmUoZGF0YSA9PiB7XHJcbiAgICAgIHRoaXMuY2FyZ2FyTGlzdGFDb2x1bW5hKHtmaXJzdDogMCwgcm93czogMTB9KVxyXG4gICAgICB0aGlzLm5vdGlmaWNhY2lvbmVzQnVzU2VydmljZS5zaG93SW5mbygnU2UgZ2VuZXJhcm9uIGxhcyBjb2x1bW5hcycpXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBlbGltaW5hcihldmVudDogRXZlbnQpe1xyXG4gICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0oe1xyXG4gICAgICB0YXJnZXQ6IGV2ZW50LnRhcmdldCxcclxuICAgICAgbWVzc2FnZTogIHRoaXMuZ2VuZXJhbFBpcGUuTUVOU0FKRV9FTElNSU5BUl9DT05GSVJNQVIsXHJcbiAgICAgIGFjY2VwdExhYmVsOiB0aGlzLmdlbmVyYWxQaXBlLlNJX0RFU0MsXHJcbiAgICAgIGhlYWRlcjogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ2NvbmZpcm1hcicpLFxyXG4gICAgICBhY2NlcHQ6ICgpID0+IHtcclxuICAgICAgICBsZXQgZW50cmFkYUVsaW1pbmFyOlJlcG9ydGVDb2x1bW5hTW9kZWwgPSB0aGlzLmZvcm1SZXBvcnRlQ29sdW1uYS52YWx1ZTtcclxuICAgICAgICB0aGlzLmdlbmVyYWxTZXJ2aWNlLmRlbGV0ZShuZXcgR2VuZXJhbE1vZGVsKCdSZXBvcnRlQ29sdW1uYURUTycsIG51bGwsIGZhbHNlLCBlbnRyYWRhRWxpbWluYXIpKS5zdWJzY3JpYmUoZGF0YSA9PiB7XHJcbiAgICAgICAgICBpZiAoZGF0YSA9PSAxKSB7XHJcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2FjaW9uZXNCdXNTZXJ2aWNlLnNob3dTdWNjZXNzKCB0aGlzLmdlbmVyYWxQaXBlLk1FTlNBSkVfRUxJTUlOQVIpO1xyXG4gICAgICAgICAgICB0aGlzLnZpc3RhVmlzdWFsaXphciA9IG51bGw7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhY2lvbmVzQnVzU2VydmljZS5zaG93U3VjY2VzcyggdGhpcy5nZW5lcmFsUGlwZS5NRU5TQUpFX0VMSU1JTkFSX05PKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaXNGaWpvKCk6Ym9vbGVhbntcclxuICAgIHJldHVybiB0aGlzLmZpbHRyb09yaWdlbkZ1ZW50ZSh0aGlzLnJlcG9ydGVGdWVudGVQaXBlLkZJSk8pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGlzU3FsKCk6Ym9vbGVhbntcclxuICAgIHJldHVybiB0aGlzLmZpbHRyb09yaWdlbkZ1ZW50ZSh0aGlzLnJlcG9ydGVGdWVudGVQaXBlLlNRTCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaXNGdWVudGUoKTpib29sZWFue1xyXG4gICAgcmV0dXJuIHRoaXMuZmlsdHJvT3JpZ2VuRnVlbnRlKHRoaXMucmVwb3J0ZUZ1ZW50ZVBpcGUuRlVFTlRFKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBmaWx0cm9PcmlnZW5GdWVudGUodGlwbzpzdHJpbmcpOmJvb2xlYW57XHJcbiAgICByZXR1cm4gdGhpcy5yZXBvcnRlRnVlbnRlLm9yaWdlbkZ1ZW50ZSA9PSB0aXBvO1xyXG4gIH1cclxuXHJcblxyXG5cclxufVxyXG4iLCI8cC1jb25maXJtUG9wdXA+PC9wLWNvbmZpcm1Qb3B1cD5cclxuPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG1iLTNcIj5cclxuICAgIDxoMSBjbGFzcz1cInRleHQteGwgbWItMVwiPnt7J2NhbXBvJyB8IHRyYW5zbGF0ZX19PC9oMT5cclxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1lbmQgbWItM1wiICpuZ0lmPVwidmlzdGFWaXN1YWxpemFyICE9ICdkZXRhbGxlJ1wiPlxyXG4gICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIChjbGljayk9XCJudWV2YUNvbHVtbmEoKVwiIGxhYmVsPVwie3snbGlua19udWV2bycgfCB0cmFuc2xhdGV9fVwiXHJcbiAgICAgICAgICAgIGljb249XCJwaSBwaS1wbHVzXCIgY2xhc3M9XCJwLWJ1dHRvbi1zZWNvbmRhcnkgZm9udC1zZW1pYm9sZCBmbGV4LXNocmluay0wIG1sLTQgbXItMlwiPjwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIGNsYXNzPVwicC1idXR0b24gcC1idXR0b24tb3V0bGluZWRcIiBsYWJlbD1cInt7J2xpbmtfaW1wb3J0YXInIHwgdHJhbnNsYXRlfX1cIiAqbmdJZj1cImlzRnVlbnRlKClcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiaW1wb3J0YXIoKVwiPjxpIGNsYXNzPVwiZ2x5cGhpY29ucyBnbHlwaGljb25zLXJlc3RhcnRcIj48L2k+PC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHBSaXBwbGUgY2xhc3M9XCJwLWJ1dHRvbiBwLWJ1dHRvbi1vdXRsaW5lZFwiIGxhYmVsPVwie3snbGlua19nZW5lcmFyJyB8IHRyYW5zbGF0ZX19XCIgKm5nSWY9XCJpc1NxbCgpXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImdlbmVyYXIoKVwiPjxpIGNsYXNzPVwiZ2x5cGhpY29ucyBnbHlwaGljb25zLXJlc3RhcnRcIj48L2k+PC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1lbmQgIG1iLTFcIiAqbmdJZj1cInZpc3RhVmlzdWFsaXphciA9PSdkZXRhbGxlJ1wiPlxyXG4gICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIChjbGljayk9XCJ2aXN0YVZpc3VhbGl6YXIgPSBudWxsXCIgbGFiZWw9IFwie3snbGlzdGFkbycgfCB0cmFuc2xhdGV9fSB7eydjYW1wbycgfCB0cmFuc2xhdGV9fVwiIFxyXG4gICAgICAgICAgICBpY29uPVwicGkgcGktY2hldnJvbi1sZWZ0XCIgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0IGZvbnQtc2VtaWJvbGQgZmxleC1zaHJpbmstMCBcIj48L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxwLXRhYmxlIFt2YWx1ZV09XCJsaXN0YUNvbHVtbmFcIiByZXNwb25zaXZlTGF5b3V0PVwic2Nyb2xsXCIgW3Njcm9sbGFibGVdPVwidHJ1ZVwiIHNlbGVjdGlvbk1vZGU9XCJzaW5nbGVcIiBkYXRhS2V5PVwibGxhdmVcIlxyXG4gICAgW3Nob3dDdXJyZW50UGFnZVJlcG9ydF09XCJ0cnVlXCIgY3VycmVudFBhZ2VSZXBvcnRUZW1wbGF0ZT1cIntmaXJzdH0gYWwge2xhc3R9IGRlIHt0b3RhbFJlY29yZHN9IHJlZ2lzdHJvc1wiICpuZ0lmPVwidmlzdGFWaXN1YWxpemFyICE9ICdkZXRhbGxlJ1wiXHJcbiAgICAob25Sb3dTZWxlY3QpPVwidmVyQWN0aW9uKCRldmVudClcIiAob25Sb3dVbnNlbGVjdCk9XCJ2ZXJBY3Rpb24oJGV2ZW50KVwiIFtyb3dzXT1cInBhZ2luYWRvci5yb3dzXCIgW3RvdGFsUmVjb3Jkc109XCJwYWdpbmFkb3IudG90YWxSZWNvcmRzXCIgW3BhZ2luYXRvcl09XCJwYWdpbmFkb3IudG90YWxSZWNvcmRzID4gcGFnaW5hZG9yLnJvd3NcIlxyXG4gICAgW2xhenldPVwidHJ1ZVwiIChvbkxhenlMb2FkKT1cImNhcmdhckxpc3RhQ29sdW1uYSgkZXZlbnQpXCI+XHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XHJcbiAgICAgICAgIFxyXG4gICAgICAgIDx0ciBjbGFzcz1cImZvbmRvVGFibGFQaW5jaXBhbFwiPlxyXG4gICAgICAgICAgICA8dGg+e3snbm9tYnJlJyB8IHRyYW5zbGF0ZX19IDwvdGg+XHJcbiAgICAgICAgICAgIDx0aD57eydzaW50YXhpcycgfCB0cmFuc2xhdGV9fSA8L3RoPlxyXG4gICAgICAgICAgICA8dGg+e3sndGlwbycgfCB0cmFuc2xhdGV9fSA8L3RoPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICAgICAgPHRoPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCIgbGV0LWNhbXBvPlxyXG4gICAgICAgIDx0ciBbcFNlbGVjdGFibGVSb3ddPVwiY2FtcG9cIj5cclxuICAgICAgICAgICAgPHRkPnt7Y2FtcG8ubm9tYnJlfX08L3RkPlxyXG4gICAgICAgICAgICA8dGQ+e3tjYW1wby5zaW50YXhpc319PC90ZD5cclxuICAgICAgICAgICAgPHRkPnt7Y2FtcG8udGlwb0RhdG8gfCByZXBvcnRlRnVlbnRlUGlwZSA6ICdsaXN0YVRpcG9EYXRvQ29sdW1uYSd9fTwvdGQ+XHJcbiAgICAgICAgPC90cj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZW1wdHltZXNzYWdlXCI+XHJcbiAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjEwMFwiIGNsYXNzPVwicC0zIGZvbnQtbWVkaXVtIGVtcHR5bWVzc2FnZVwiPnt7J21lbnNhamV0YWJsYXZhY2lhJyB8IHRyYW5zbGF0ZX19PC90ZD5cclxuICAgICAgICA8L3RyPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuPC9wLXRhYmxlPlxyXG5cclxuPGRpdiBjbGFzcz1cImNhcmQgbXQtM1wiICpuZ0lmPVwidmlzdGFWaXN1YWxpemFyID09ICdkZXRhbGxlJ1wiPlxyXG4gICAgPGg1IGNsYXNzPVwibXQtM1wiPjxpIGNsYXNzPVwiZ2x5cGhpY29ucyBnbHlwaGljb25zLW5vdGVzXCI+PC9pPnt7J2RldGFsbGUnIHwgdHJhbnNsYXRlfX08L2g1PlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJEZXRhbGxlcmVwb3J0ZSBtdC0yXCI+XHJcbiAgICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVJlcG9ydGVDb2x1bW5hXCIgI2Zvcm11bGFyaW89XCJuZ0Zvcm1cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLWZsdWlkIHAtZm9ybWdyaWQgZ3JpZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBjb2wtMTIgbWQ6Y29sLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwLWZsb2F0LWxhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtZmxvYXQtbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgcElucHV0VGV4dCBpZD1cIm5vbWJyZVwiIHR5cGU9XCJ0ZXh0XCIgZm9ybUNvbnRyb2xOYW1lPVwibm9tYnJlXCIgc2l6ZT1cIjQwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGh0bWxGb3I9XCJub21icmVcIj57eydub21icmUnIHwgdHJhbnNsYXRlfX0gKjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGQgY29sLTEyIG1kOmNvbC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1mbG9hdC1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAtZHJvcGRvd24gW29wdGlvbnNdPVwibGlzdGFUaXBvRGF0b1wiIFthdXRvRGlzcGxheUZpcnN0XT1cImZhbHNlXCIgZm9ybUNvbnRyb2xOYW1lPVwidGlwb0RhdG9cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbkxhYmVsPVwibm9tYnJlXCIgb3B0aW9uVmFsdWU9XCJjb2RpZ29cIj48L3AtZHJvcGRvd24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgaHRtbEZvcj1cInRpcG9EYXRvXCI+e3sndGlwbycgfCB0cmFuc2xhdGV9fSAqPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBjb2wtMTIgbWQ6Y29sLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1mbG9hdC1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwidy1mdWxsIG1pbi1oLTE1MCBtYXgtaC0yMDBcIiAgcElucHV0VGV4dGFyZWEgZm9ybUNvbnRyb2xOYW1lPVwic2ludGF4aXNcIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGh0bWxGb3I9XCJzaW50YXhpc1wiPnt7J3NpbnRheGlzJyB8IHRyYW5zbGF0ZX19ICo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwhLS1CT1RPTkVTLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSBjbGFzcz1cIm1sLTIgcC1idXR0b24gcC1idXR0b24tcmFpc2VkXCIgKGNsaWNrKT1cImFjdHVhbGl6YXIoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJnbHlwaGljb25zIHt7cmVwb3J0ZUNvbHVtbmEubGxhdmVUYWJsYSA/ICdnbHlwaGljb25zLXJlZnJlc2gnIDogJ2dseXBoaWNvbnMtZmxvcHB5LXNhdmUnIH19XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPVwie3tyZXBvcnRlQ29sdW1uYS5sbGF2ZVRhYmxhID8gKCdsaW5rX2FjdHVhbGl6YXInIHwgdHJhbnNsYXRlKSA6ICgnbGlua19ndWFyZGFyJyB8IHRyYW5zbGF0ZSl9fVwiID5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSBjbGFzcz1cIm1sLTIgcC1idXR0b24tb3V0bGluZWRcIiBpY29uPVwiZ2x5cGhpY29ucyBnbHlwaGljb25zLWJpblwiICpuZ0lmPVwicmVwb3J0ZUNvbHVtbmEubGxhdmVUYWJsYVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPVwie3snbGlua19lbGltaW5hcicgfCB0cmFuc2xhdGV9fVwiIChjbGljayk9XCJlbGltaW5hcigkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==