ngx-wapp-components 1.0.87 → 1.0.89
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/misc/w-chip/w-chip.component.mjs +11 -3
- package/esm2020/lib/shared/enums/enum.mjs +1 -1
- package/esm2020/lib/shared/models/enums.model.mjs +12 -1
- package/esm2020/lib/shared/pipes/w-date.pipe.mjs +30 -5
- package/esm2020/lib/tables/w-table/w-table.component.mjs +19 -7
- package/esm2020/lib/tables/w-table-lazy/w-table-lazy.component.mjs +20 -9
- package/fesm2015/ngx-wapp-components.mjs +88 -21
- package/fesm2015/ngx-wapp-components.mjs.map +1 -1
- package/fesm2020/ngx-wapp-components.mjs +85 -20
- package/fesm2020/ngx-wapp-components.mjs.map +1 -1
- package/lib/misc/w-chip/w-chip.component.d.ts +3 -1
- package/lib/shared/models/enums.model.d.ts +11 -1
- package/lib/shared/pipes/w-date.pipe.d.ts +2 -1
- package/lib/tables/w-table/w-table.component.d.ts +3 -4
- package/lib/tables/w-table-lazy/w-table-lazy.component.d.ts +3 -4
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
|
2
2
|
import { ConfirmationService } from 'primeng/api';
|
|
3
|
-
import { TableColumnFilterTypes, TableColumnTypes, WappTableColumnAlignTypes } from '../../shared/models/enums.model';
|
|
3
|
+
import { TableColumnFilterTypes, TableColumnTypes, WDatePipeFormatType, WappTableColumnAlignTypes } from '../../shared/models/enums.model';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
import * as i1 from "primeng/api";
|
|
6
6
|
import * as i2 from "primeng/inputtext";
|
|
@@ -24,6 +24,7 @@ export class WTableComponent {
|
|
|
24
24
|
this.tableMinWidth = 70;
|
|
25
25
|
this.tableSkeletons = [{ name: '' }, { name: '' }, { name: '' }, { name: '' }];
|
|
26
26
|
this._totalRecords = 0;
|
|
27
|
+
this.wappDateFormat = WDatePipeFormatType;
|
|
27
28
|
this.rowsPerPage = 0;
|
|
28
29
|
this.loading = true;
|
|
29
30
|
this.onElementSelect = new EventEmitter();
|
|
@@ -145,9 +146,20 @@ export class WTableComponent {
|
|
|
145
146
|
return TableColumnTypes;
|
|
146
147
|
}
|
|
147
148
|
getBooleanColumnClass(index, valueProperty) {
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
149
|
+
const booleanIconClasses = [];
|
|
150
|
+
if (valueProperty == true) {
|
|
151
|
+
booleanIconClasses.push(this.wappTableObject.columnBooleanTypeIcons[index].trueIcon ?? '');
|
|
152
|
+
booleanIconClasses.push(this.wappTableObject.columnBooleanTypeIcons[index].trueIconColor ?? '');
|
|
153
|
+
}
|
|
154
|
+
else if (valueProperty == false) {
|
|
155
|
+
booleanIconClasses.push(this.wappTableObject.columnBooleanTypeIcons[index].falseIcon ?? '');
|
|
156
|
+
booleanIconClasses.push(this.wappTableObject.columnBooleanTypeIcons[index].falseIconColor ?? '');
|
|
157
|
+
}
|
|
158
|
+
else if (valueProperty == null) {
|
|
159
|
+
booleanIconClasses.push(this.wappTableObject.columnBooleanTypeIcons[index].nullIcon ?? '');
|
|
160
|
+
booleanIconClasses.push(this.wappTableObject.columnBooleanTypeIcons[index].nullIconColor ?? '');
|
|
161
|
+
}
|
|
162
|
+
return booleanIconClasses;
|
|
151
163
|
}
|
|
152
164
|
clearFilters() {
|
|
153
165
|
this.dataTable.clear();
|
|
@@ -180,10 +192,10 @@ export class WTableComponent {
|
|
|
180
192
|
}
|
|
181
193
|
}
|
|
182
194
|
WTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: WTableComponent, deps: [{ token: i1.ConfirmationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
183
|
-
WTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: WTableComponent, selector: "w-table", inputs: { elements: "elements", rowsPerPage: "rowsPerPage", loading: "loading", wappTableObject: "wappTableObject" }, outputs: { onElementSelect: "onElementSelect", onViewElementSelect: "onViewElementSelect", onCopyElementSelect: "onCopyElementSelect", onEditElementSelect: "onEditElementSelect", onCustomElementSelect: "onCustomElementSelect", onDeleteElementSelect: "onDeleteElementSelect", onNewElementSelect: "onNewElementSelect" }, providers: [ConfirmationService], viewQueries: [{ propertyName: "filter", first: true, predicate: ["filter"], descendants: true }, { propertyName: "dataTable", first: true, predicate: ["table"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-content select=\".filter-panel\"></ng-content>\r\n<div *ngIf=\"wappTableObject\" [class.table-container]=\"wappTableObject.tableContainer\">\r\n <p-table class=\"w-table-styles\" \r\n *ngIf=\"!loading; else loadingTable\" #table \r\n [value]=\"elements\" dataKey=\"{{wappTableObject.identificator}}\" \r\n [paginator]=\"wappTableObject.hasPaginator\"\r\n [selection]=\"selectedElements\" (selectionChange)=\"onSelectionChange($event)\"\r\n [selectAll]=\"selectAll\" (selectAllChange)=\"onSelectAllChange($event)\"\r\n [totalRecords]=\"totalRecords\" [showCurrentPageReport]=\"true\" \r\n [rows]=\"rowsPerPage\"\r\n [currentPageReportTemplate]=\"wappTableObject.currentPageReportTemplate ? wappTableObject.currentPageReportTemplate + ' ' + rowsPerPage + ' de ' + totalRecords! : 'Showing ' + rowsPerPage + ' of ' + totalRecords!\"\r\n [globalFilterFields]=\"wappTableObject.globalFilterFields!\" responsiveLayout=\"scroll\"\r\n [rowHover]=\"true\" [tableStyle]=\"{'min-width': wappTableObject.tableMinWidth!}\"\r\n styleClass=\"p-datatable-striped\">\r\n <ng-template pTemplate=\"caption\" *ngIf=\"wappTableObject?.hasClearButton || wappTableObject.hasGlobalSearch\">\r\n <span class=\"flex align-items-center table-paginator p-0\">\r\n <span *ngIf=\"wappTableObject.hasTotalPagingSelector\" class=\"showing-per-page\"> {{wappTableObject.currentPageReportTemplate}} </span>\r\n <p-inputNumber *ngIf=\"wappTableObject.hasTotalPagingSelector\"\r\n class=\"pl-2 showing-per-page\" [size]=\"1\" [(ngModel)]=\"rowsPerPage\" [showButtons]=\"true\" \r\n buttonLayout=\"horizontal\" inputId=\"horizontal\" spinnerMode=\"horizontal\" [step]=\"1\" [min]=\"1\" [max]=\"totalRecords!\"\r\n decrementButtonClass=\"p-button-outlined\" \r\n incrementButtonClass=\"p-button-outlined\" \r\n incrementButtonIcon=\"pi pi-plus\" \r\n decrementButtonIcon=\"pi pi-minus\" \r\n mode=\"decimal\">\r\n </p-inputNumber>\r\n <span *ngIf=\"wappTableObject?.hasGlobalSearch\" class=\"p-input-icon-left ml-auto\">\r\n <i class=\"pi pi-search\"></i>\r\n <input pInputText type=\"text\" #filter (input)=\"onGlobalFilter(table, $event)\" \r\n [placeholder]=\"wappTableObject.searchPlaceholder\" class=\"w-full height-input w-input\"/>\r\n </span>\r\n </span>\r\n </ng-template>\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th *ngIf=\"wappTableObject.hasCheckbox\" \r\n [ngClass]=\"wappTableObject.columnAlign ? getTableColumnAlignClass(wappTableObject.columnAlign[0]) : 'text-left'\">\r\n <p-tableHeaderCheckbox></p-tableHeaderCheckbox>\r\n </th>\r\n <ng-container *ngIf=\"!wappTableObject.hasSortableColumns; else sortableColumns\">\r\n <th *ngFor=\"let header of wappTableObject?.headers; index as i\" [class]=\"header == ('Imagen' || 'Image') ? 'image-header': ''\" \r\n [ngClass]=\"wappTableObject.columnAlign ? getTableColumnAlignClass(wappTableObject.columnAlign[wappTableObject.hasCheckbox ? i+1 : i]) : getTableColumnAlignClassDefaultByColumnType(wappTableObject.columnTypes[wappTableObject.hasCheckbox ? i+1 : i])\">\r\n {{header}}\r\n </th>\r\n </ng-container>\r\n <ng-template #sortableColumns>\r\n <ng-template ngFor let-filterType [ngForOf]=\"wappTableObject.headers\" let-i=\"index\"> \r\n <th [pSortableColumn]=\"wappTableObject.sortableNames[i]\" \r\n [class]=\"wappTableObject.headers[i] == ('Imagen' || 'Image') ? 'image-header': ''\" \r\n [ngClass]=\"wappTableObject.columnAlign ? getTableColumnAlignClass(wappTableObject.columnAlign[wappTableObject.hasCheckbox ? i+1 : i]) : getTableColumnAlignClassDefaultByColumnType(wappTableObject.columnTypes[wappTableObject.hasCheckbox ? i+1 : i])\">\r\n {{wappTableObject.headers[i]}} \r\n <p-sortIcon *ngIf=\"wappTableObject.sortableNames[i] != null\" [field]=\"wappTableObject.sortableNames[i]\"></p-sortIcon>\r\n </th>\r\n </ng-template>\r\n </ng-template>\r\n <th *ngIf=\"wappTableObject.hasDeleteButton || wappTableObject.hasEditButton\"></th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-element>\r\n <tr [ngClass]=\"wappTableObject.hasSelectableRow ? 'p-selectable-row' : ''\" (click)=\"wappTableObject.hasSelectableRow ? onElement(element) : ''\">\r\n <ng-template ngFor let-columnType [ngForOf]=\"wappTableObject.columnTypes!\" let-i=\"index\">\r\n <td *ngIf=\"columnType == tableColumnTypes?.Checkbox! && wappTableObject.hasCheckbox\" [style]=\"'width: '+wappTableObject.columnWidths![i]\"\r\n [ngClass]=\"wappTableObject.columnAlign ? getTableColumnAlignClass(wappTableObject.columnAlign[i]) : 'text-center'\">\r\n <div *ngIf=\"wappTableObject.disableCheckbox; else activeCheckbox\">\r\n <p-tableCheckbox [value]=\"element\" [disabled]=\"readProperty(element, wappTableObject.disableCheckbox)\"></p-tableCheckbox>\r\n </div>\r\n <ng-template #activeCheckbox>\r\n <p-tableCheckbox [value]=\"element\"></p-tableCheckbox>\r\n </ng-template>\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Image\" [style]=\"'width: '+wappTableObject.columnWidths[i]\" \r\n [ngClass]=\"wappTableObject.columnAlign ? getTableColumnAlignClass(wappTableObject.columnAlign[i]) : 'text-center'\">\r\n <img *ngIf=\"readProperty(element, wappTableObject.columns[i])\" \r\n [src]=\"readProperty(element, wappTableObject.columns[i])\" \r\n class=\"element-image-width\"/>\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Text\" [style]=\"'width: '+wappTableObject.columnWidths[i]\" \r\n [ngClass]=\"wappTableObject.columnAlign ? getTableColumnAlignClass(wappTableObject.columnAlign[i]) : 'text-left'\">\r\n {{ readProperty(element, wappTableObject.columns[i]) }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Number\" [style]=\"'width: '+wappTableObject.columnWidths[i]\" \r\n [ngClass]=\"wappTableObject.columnAlign ? getTableColumnAlignClass(wappTableObject.columnAlign[i]) : 'text-right'\">\r\n {{ readProperty(element, wappTableObject.columns[i]) }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Currency\" [style]=\"'width: '+wappTableObject.columnWidths[i]\" \r\n [ngClass]=\"wappTableObject.columnAlign ? getTableColumnAlignClass(wappTableObject.columnAlign[i]) : 'text-right'\">\r\n {{ readProperty(element, wappTableObject.columns[i]) | currency }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Badge\" [style]=\"'width: '+wappTableObject.columnWidths[i]\" \r\n [ngClass]=\"wappTableObject.columnAlign ? getTableColumnAlignClass(wappTableObject.columnAlign[i]) : 'text-center'\">\r\n <w-badge [label]=\"readProperty(element, wappTableObject.columns[i])\" [color]=\"'info'\"></w-badge> \r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Boolean\" \r\n [ngClass]=\"wappTableObject.columnAlign ? getTableColumnAlignClass(wappTableObject.columnAlign[i]) : 'text-center'\">\r\n <i class=\"pi\" [ngClass]=\"getBooleanColumnClass(i, readProperty(element, wappTableObject.columns[i]))\"></i>\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Date\" \r\n [ngClass]=\"wappTableObject.columnAlign ? getTableColumnAlignClass(wappTableObject.columnAlign[i]) : 'text-left'\">\r\n {{ readProperty(element, wappTableObject.columns[i]) | wappDate }}\r\n </td>\r\n </ng-template>\r\n <td *ngIf=\"wappTableObject?.hasViewButton || wappTableObject.customButtonConfig?.hasCustomButton || wappTableObject?.hasEditButton || wappTableObject?.hasCopyButton || wappTableObject?.hasDeleteButton\">\r\n <div class=\"flex justify-content-end\">\r\n <button *ngIf=\"wappTableObject?.hasViewButton\" \r\n [pTooltip]=\"wappTableObject.buttonTooltips?.viewTooltip!\"\r\n [tooltipPosition]=\"wappTableObject.buttonTooltips?.position!\"\r\n pButton pRipple (click)=\"viewElement(element)\" \r\n icon=\"pi pi-eye\" class=\"p-button-text p-button-info mr-2\">\r\n </button>\r\n <button *ngIf=\"wappTableObject.customButtonConfig?.hasCustomButton\"\r\n pButton pRipple (click)=\"customElement(element)\"\r\n [pTooltip]=\"wappTableObject.buttonTooltips?.customTooltip!\"\r\n [tooltipPosition]=\"wappTableObject.buttonTooltips?.position!\"\r\n [icon]=\"wappTableObject.customButtonConfig?.icon!\"\r\n class=\"p-button-text p-button-info mr-2\">\r\n </button>\r\n <button *ngIf=\"wappTableObject?.hasEditButton && !wappTableObject.disableEditProperty\" \r\n [pTooltip]=\"wappTableObject.buttonTooltips?.editTooltip!\"\r\n [tooltipPosition]=\"wappTableObject.buttonTooltips?.position!\"\r\n pButton pRipple (click)=\"editElement(element)\"\r\n icon=\"pi pi-pencil\" class=\"p-button-text p-button-success mr-2\">\r\n </button>\r\n <button *ngIf=\"wappTableObject.disableEditProperty\" \r\n pButton pRipple (click)=\"editElement(element)\" [disabled]=\"readProperty(element, wappTableObject.disableEditProperty)\"\r\n [pTooltip]=\"wappTableObject.buttonTooltips?.editTooltip!\"\r\n [tooltipPosition]=\"wappTableObject.buttonTooltips?.position!\"\r\n icon=\"pi pi-pencil\" class=\"p-button-text p-button-success mr-2\">\r\n </button>\r\n <button *ngIf=\"wappTableObject?.hasCopyButton\" \r\n pButton pRipple (click)=\"confirmCopy($event, element)\" \r\n [pTooltip]=\"wappTableObject.buttonTooltips?.copyTooltip!\"\r\n [tooltipPosition]=\"wappTableObject.buttonTooltips?.position!\"\r\n icon=\"pi pi-copy\" class=\"p-button-text p-button-help mr-2\">\r\n </button>\r\n <span *ngIf=\"wappTableObject?.hasDeleteButton\">\r\n <button *ngIf=\"wappTableObject.disableDeleteProperty; else noDisableDelete\" \r\n pButton pRipple (click)=\"confirmDelete($event, element)\" [disabled]=\"readProperty(element, wappTableObject.disableDeleteProperty)\"\r\n [pTooltip]=\"wappTableObject.buttonTooltips?.deleteTooltip!\"\r\n [tooltipPosition]=\"wappTableObject.buttonTooltips?.position!\"\r\n icon=\"pi pi-trash\" class=\"p-button-text p-button-danger\">\r\n </button>\r\n <ng-template #noDisableDelete>\r\n <button *ngIf=\"!wappTableObject?.disableDelete && !wappTableObject.disableDeleteProperty\" \r\n [pTooltip]=\"wappTableObject.buttonTooltips?.deleteTooltip!\"\r\n [tooltipPosition]=\"wappTableObject.buttonTooltips?.position!\"\r\n pButton pRipple (click)=\"confirmDelete($event, element)\"\r\n icon=\"pi pi-trash\" class=\"p-button-text p-button-danger\">\r\n </button>\r\n </ng-template>\r\n </span>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td colspan=\"8\">No elements.</td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"loadingbody\">\r\n <tr>\r\n <td colspan=\"8\">Loading elements.</td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n \r\n <ng-template #loadingTable>\r\n <p-table class=\"w-table-styles\" [value]=\"tableSkeletons\" responsiveLayout=\"scroll\" [paginator]=\"wappTableObject.hasPaginator\" [rows]=\"rowsPerPage\" [totalRecords]=\"totalRecords\"\r\n [showCurrentPageReport]=\"true\" \r\n [currentPageReportTemplate]=\"wappTableObject.currentPageReportTemplate ? wappTableObject.currentPageReportTemplate + ' ' + rowsPerPage + ' de ' + totalRecords : 'Showing ' + rowsPerPage + ' of ' + totalRecords\"\r\n styleClass=\"p-datatable-striped\">\r\n <ng-template *ngIf=\"wappTableObject?.hasClearButton || wappTableObject.hasGlobalSearch\" pTemplate=\"caption\">\r\n <span class=\"flex align-items-center table-paginator p-0\">\r\n <!-- <button *ngIf=\"wappTableObject.hasClearButton\" pButton label=\"Clear\" class=\"p-button-outlined\" icon=\"pi pi-filter-slash\"></button> -->\r\n <span *ngIf=\"wappTableObject.hasTotalPagingSelector\" class=\"showing-per-page\"> {{wappTableObject.currentPageReportTemplate}} </span>\r\n <p-inputNumber *ngIf=\"wappTableObject.hasTotalPagingSelector\"\r\n class=\"pl-2 showing-per-page\" [size]=\"1\" [(ngModel)]=\"rowsPerPage\" [showButtons]=\"true\" \r\n buttonLayout=\"horizontal\" inputId=\"horizontal\" spinnerMode=\"horizontal\" [step]=\"1\" [min]=\"1\" [max]=\"totalRecords\"\r\n decrementButtonClass=\"p-button-outlined\" \r\n incrementButtonClass=\"p-button-outlined\" \r\n incrementButtonIcon=\"pi pi-plus\" \r\n decrementButtonIcon=\"pi pi-minus\" \r\n mode=\"decimal\">\r\n </p-inputNumber>\r\n <span *ngIf=\"wappTableObject?.hasGlobalSearch\" class=\"p-input-icon-left ml-auto\">\r\n <i class=\"pi pi-search\"></i>\r\n <input pInputText type=\"text\" #filter \r\n [placeholder]=\"wappTableObject.searchPlaceholder\" class=\"w-full height-input w-input\"/>\r\n </span>\r\n </span>\r\n </ng-template>\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th *ngIf=\"!wappTableObject.hasColumnFilters && wappTableObject.hasCheckbox; else selectAllCheckbox\">\r\n <p-tableHeaderCheckbox></p-tableHeaderCheckbox>\r\n </th>\r\n <ng-template #selectAllCheckbox><th></th></ng-template>\r\n <th *ngFor=\"let header of wappTableObject?.headers\">\r\n {{header}}\r\n </th>\r\n <th *ngIf=\"wappTableObject.hasDeleteButton || wappTableObject.hasEditButton\"></th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\">\r\n <tr height=\"70px\">\r\n <td *ngFor=\"let item of wappTableObject.columnTypes\" [style.width]=\"item == tableColumnTypes.Checkbox ? '8rem' : ''\" >\r\n <p-tableCheckbox *ngIf=\"item == tableColumnTypes.Checkbox && wappTableObject.hasCheckbox\"></p-tableCheckbox>\r\n <p-skeleton *ngIf=\"item != tableColumnTypes.Checkbox\"></p-skeleton>\r\n </td>\r\n <td *ngIf=\"wappTableObject.hasEditButton || wappTableObject.hasDeleteButton\">\r\n <div class=\"flex justify-content-end\">\r\n <button *ngIf=\"wappTableObject?.hasViewButton\" \r\n pButton pRipple \r\n [pTooltip]=\"wappTableObject.buttonTooltips?.viewTooltip!\"\r\n icon=\"pi pi-eye\" class=\"p-button-text p-button-info mr-2\">\r\n </button>\r\n <button *ngIf=\"wappTableObject.customButtonConfig?.hasCustomButton\"\r\n pButton pRipple\r\n [pTooltip]=\"wappTableObject.buttonTooltips?.customTooltip!\"\r\n [icon]=\"wappTableObject.customButtonConfig?.icon!\"\r\n class=\"p-button-text p-button-info mr-2\">\r\n </button>\r\n <button *ngIf=\"wappTableObject?.hasEditButton\" \r\n pButton pRipple\r\n [pTooltip]=\"wappTableObject.buttonTooltips?.editTooltip!\"\r\n icon=\"pi pi-pencil\" class=\"p-button-text p-button-success mr-2\">\r\n </button>\r\n <button *ngIf=\"wappTableObject?.hasCopyButton\" \r\n pButton pRipple \r\n [pTooltip]=\"wappTableObject.buttonTooltips?.copyTooltip!\"\r\n icon=\"pi pi-copy\" class=\"p-button-text p-button-help mr-2\">\r\n </button>\r\n <button *ngIf=\"wappTableObject?.hasDeleteButton\" \r\n pButton pRipple\r\n [pTooltip]=\"wappTableObject.buttonTooltips?.deleteTooltip!\"\r\n icon=\"pi pi-trash\" class=\"p-button-text p-button-danger\">\r\n </button>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </ng-template>\r\n</div>\r\n<p-confirmPopup></p-confirmPopup>", styles: [".heading1{font-size:3.1428571429rem;line-height:3.4285714286rem;font-weight:700}.heading2{font-size:2.8571428571rem;line-height:3.1428571429rem;font-weight:700}.heading3{font-size:2.5714285714rem;line-height:2.8571428571rem;font-weight:700}.heading4{font-size:2.2857142857rem;line-height:2.5714285714rem;font-weight:700}.heading5{font-size:2rem;line-height:2.2857142857rem;font-weight:700}.heading6{font-size:1.7142857143rem;line-height:2rem;font-weight:700}.subtitle1{font-size:1.4285714286rem;line-height:1.7142857143rem;font-weight:700}.subtitle2{font-size:1.1428571429rem;line-height:1.4285714286rem;font-weight:700}.body,.input-generic-placeholder-small,.input-generic-small{font-size:1rem;line-height:1.1428571429rem;font-weight:600}.caption{font-size:.8571428571rem;line-height:1.1428571429rem;font-weight:600}.select-option-text{font-size:16;line-height:24px;font-weight:600}.icon-small-size{font-size:8px}.icon-small-x-size{font-size:12px}.icon-medium-size{font-size:16px}.icon-large-size{font-size:24px}.spacingXXS{padding:4px}.spacingXSM{padding:6px}.spacingXS{padding:8px}.spacingS{padding:12px}.spacingM{padding:16px}.spacingL{padding:20px}.spacingXL{padding:24px}.spacingXXL{padding:28px}.spacingXXXL{padding:32px}.focus,::ng-deep .w-table-styles .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box.p-focus{box-shadow:0 0 8px #00a6e980}.hover{border-radius:8px;border:1px solid #00b2eb}.button-large-typography{font-size:20px;line-height:24px;font-weight:700}.button-medium-typography{font-size:16px;line-height:16px;font-weight:700}.button-small-typography{font-size:12px;line-height:16px;font-weight:700}.button-text-typography,.input-generic-label{font-size:14px;line-height:16px;font-weight:700}.input-generic-placeholder{font-size:16px;line-height:24px;font-weight:600;color:#9aa0a6!important;opacity:unset!important}.input-generic{font-size:16px;line-height:24px;font-weight:600}.input-generic-placeholder-small{padding:8px 12px 12px;color:#9aa0a6!important}.input-generic-valid{border-radius:8px;border:1px solid #B3FFD3}.input-generic-valid-focus{border-radius:8px;border:1px solid #B3FFD3!important;box-shadow:0 0 8px #46ff9b80!important;padding-left:16px}.input-generic-warning{border-radius:8px;border:1px solid #FFECB8!important}.input-generic-warning-focus{border-radius:8px;border:1px solid #FFECB8!important;box-shadow:0 0 8px #ffcd4680!important;padding-left:16px}.input-generic-error-focus{border-radius:8px;border:1px solid #FFBDBD!important;box-shadow:0 0 8px #ff555580!important;padding-left:16px}.input-generic-error{border-radius:8px;border:1px solid #FFBDBD}.tag-generic{font-size:14px;line-height:16px;font-weight:700}.tag-generic-small{font-size:12px;line-height:16px;font-weight:700}.toggle-small-typography{font-size:12px;line-height:16px;font-weight:600}.w-generic-input-no-label-height{height:36px}.table-container{padding:16px 20px 20px;background-color:#fff;border-radius:8px;box-shadow:0 4px 8px #0000001a}.showing-per-page{color:#9aa0a6;font-weight:600}::ng-deep .w-table-styles .p-paginator-bottom>span:first-child{margin-right:auto}::ng-deep .w-table-styles .p-paginator .p-paginator-pages .p-paginator-page{color:#9aa0a6;border-radius:8px;height:32px;width:32px;max-width:32px;min-width:32px}::ng-deep .w-table-styles .p-paginator{border-width:0;padding:16px 20px 0}::ng-deep .w-table-styles .p-paginator .p-paginator-pages .p-paginator-page.p-highlight{background-color:#d6f2ff;color:#2e3134;height:32px;width:32px;max-width:32px;min-width:32px}::ng-deep .w-table-styles .p-paginator .p-paginator-pages .p-paginator-page:not(.p-highlight):hover{background:#f1f5f9;border-color:transparent;color:#2e3134;height:32px;width:32px;max-width:32px;min-width:32px}::ng-deep .w-table-styles .p-paginator .p-paginator-current{color:#9aa0a6;padding:0}::ng-deep .w-table-styles .p-datatable .p-sortable-column .p-sortable-column-icon{color:#000;margin-left:.5rem}::ng-deep .w-table-styles .p-datatable .p-sortable-column.p-highlight:hover .p-sortable-column-icon{color:#3c4043}::ng-deep .w-table-styles .p-datatable .p-sortable-column:focus{box-shadow:inset 0 0;outline:0 none}::ng-deep .w-table-styles .p-datatable .p-datatable-thead>tr>th{color:#000;background:#ffffff}::ng-deep .w-table-styles .p-datatable.p-datatable-striped .p-datatable-tbody>tr:nth-child(even){background:#f8f9fa}::ng-deep .w-table-styles .p-datatable .p-paginator-bottom{justify-content:normal!important}::ng-deep .w-table-styles .p-datatable .p-paginator-bottom>button{color:#9aa0a6}::ng-deep .w-table-styles .p-datatable .p-datatable-header{background:#ffffff;border-width:0px;padding:0 0 16px!important;font-weight:600}::ng-deep .w-table-styles p-inputnumber,.p-inputnumber{height:32px}::ng-deep .w-table-styles .p-inputnumber-buttons-horizontal .p-button.p-inputnumber-button-up{width:32px}::ng-deep .w-table-styles .p-inputnumber-buttons-horizontal .p-button.p-inputnumber-button-down{width:32px}::ng-deep .wapp-table-styles .showing-per-page .p-button.p-inputnumber-button-up{border-radius:8px;border-top-left-radius:0!important;border-bottom-left-radius:0!important;border-top-right-radius:8px;border-bottom-right-radius:8px}::ng-deep .wapp-table-styles .showing-per-page .p-button.p-inputnumber-button-down{border-radius:8px;border-top-right-radius:0!important;border-bottom-right-radius:0!important;border-top-left-radius:8px;border-bottom-left-radius:8px}::ng-deep .w-table-styles .p-inputnumber-buttons-horizontal .p-inputnumber-input{border-width:1px 0px 1px 0px;border-color:#e8eaed;color:#dadce0;text-align:center}::ng-deep .w-table-styles .p-button.p-button-outlined{color:#e8eaed;border-width:1px}::ng-deep .w-table-styles .p-datatable .p-datatable-tbody>tr>td{columns:#2E3134;font-weight:600;border:1px solid #e2e8f0;border-width:0 0 1px 0;padding:4px 8px 3px}::ng-deep .w-table-styles .p-checkbox{height:16px;width:16px;border-width:1px}::ng-deep .w-table-styles .p-checkbox .p-checkbox-box{height:16px;width:16px;border-radius:4px;border:1px solid #dadce0}::ng-deep .w-table-styles .p-checkbox .p-checkbox-box .p-checkbox-icon{font-size:8px;font-weight:700}::ng-deep .w-table-styles .p-checkbox .p-checkbox-box.p-highlight{border-color:#00b2eb;background:#00b2eb}::ng-deep .w-table-styles .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box:hover{background-color:#dadce0;border:1px solid #dadce0}::ng-deep .w-table-styles .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box.p-focus{background-color:#00b2eb;border:1px solid #d6f2ff}::ng-deep .w-table-styles .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box:not(.p-highlight).p-focus{background-color:#dadce0;border:1px solid #dadce0}::ng-deep .w-table-styles .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box.p-highlight:hover{border-color:#00b2eb;background:#00b2eb}::ng-deep .w-table-styles .p-inputtext:enabled:focus{outline:0 none;outline-offset:0;box-shadow:0 0 #000;background-color:#f1f3f4;border-color:#f1f3f4;color:#000}::ng-deep .w-table-styles .p-inputtext:enabled:hover{border-color:#e8eaed}::ng-deep .w-table-styles .p-button.p-button-outlined:enabled:hover{color:#e8eaed;border:1px solid;background-color:#f1f3f4}::ng-deep .w-table-styles .p-button.p-button-outlined:enabled:hover>.p-button-icon{color:#2e3134}::ng-deep .w-table-styles .p-button.p-button-outlined>.pi{font-size:.7rem;font-weight:bolder}::ng-deep .w-table-styles .p-datatable .p-datatable-thead>tr>th:hover{color:#3c4043;background:#ffffff}.element-image-width{max-height:32px;width:auto;vertical-align:middle}.height-input{height:32px}.w-input{border-radius:8px;border-width:1px;border-color:#e8eaed;font-size:16px;line-height:5px;font-weight:100;gap:16px}::-webkit-input-placeholder{font-size:1rem;line-height:1.1428571429rem;font-weight:600;color:#9aa0a6}::-moz-placeholder{font-size:1rem;line-height:1.1428571429rem;font-weight:600;color:#9aa0a6}:-ms-input-placeholder{font-size:1rem;line-height:1.1428571429rem;font-weight:600;color:#9aa0a6}:-moz-placeholder{font-size:1rem;line-height:1.1428571429rem;font-weight:600;color:#9aa0a6}.w-input:hover{border:1px solid #1f5b72!important}.w-input:focus{box-shadow:0 0 3px 3px #d6f2ff!important;background-color:transparent!important}.pi-search{left:.75rem;color:#bdc1c6!important}.image-header{text-align:center!important}::ng-deep .w-table-styles .p-avatar img{width:32px!important;height:32px!important}:host ::ng-deep .w-table-styles .p-avatar{border:1px solid #e8eaed}::ng-deep .p-datatable .p-datatable-thead>tr>th{padding:16px 8px;border:1px solid #e8eaed;border-width:0px 0px 1px 0px;font-weight:700;color:#000;background:#ffffff;transition:box-shadow .2s}::ng-deep .p-datatable .p-datatable-tbody>tr{color:#9aa0a6}::ng-deep .p-sortable-column:not(.p-highlight):hover .p-sortable-column-icon{color:#3c4043}\n"], dependencies: [{ kind: "directive", type: i2.InputText, selector: "[pInputText]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { 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: "directive", type: i5.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "directive", type: i1.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i6.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "directive", type: i7.Ripple, selector: "[pRipple]" }, { kind: "component", type: i8.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "style", "shape", "animation", "borderRadius", "size", "width", "height"] }, { kind: "component", type: i9.InputNumber, selector: "p-inputNumber", inputs: ["showButtons", "format", "buttonLayout", "inputId", "styleClass", "style", "placeholder", "size", "maxlength", "tabindex", "title", "ariaLabel", "ariaRequired", "name", "required", "autocomplete", "min", "max", "incrementButtonClass", "decrementButtonClass", "incrementButtonIcon", "decrementButtonIcon", "readonly", "step", "allowEmpty", "locale", "localeMatcher", "mode", "currency", "currencyDisplay", "useGrouping", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "inputStyle", "inputStyleClass", "showClear", "disabled"], outputs: ["onInput", "onFocus", "onBlur", "onKeyDown", "onClear"] }, { kind: "component", type: i10.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "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", "virtualRowHeight", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll"], outputs: ["selectAllChange", "selectionChange", "contextMenuSelectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i10.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "component", type: i10.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i10.TableCheckbox, selector: "p-tableCheckbox", inputs: ["disabled", "value", "index", "inputId", "name", "required", "ariaLabel"] }, { kind: "component", type: i10.TableHeaderCheckbox, selector: "p-tableHeaderCheckbox", inputs: ["disabled", "inputId", "name", "ariaLabel"] }, { kind: "component", type: i11.ConfirmPopup, selector: "p-confirmPopup", inputs: ["key", "defaultFocus", "showTransitionOptions", "hideTransitionOptions", "autoZIndex", "baseZIndex", "style", "styleClass", "visible"] }, { kind: "component", type: i12.WBadgeComponent, selector: "w-badge", inputs: ["label", "color", "tooltip", "maxWidthOverflow"] }, { kind: "pipe", type: i4.CurrencyPipe, name: "currency" }, { kind: "pipe", type: i13.WDatePipe, name: "wappDate" }] });
|
|
195
|
+
WTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: WTableComponent, selector: "w-table", inputs: { elements: "elements", rowsPerPage: "rowsPerPage", loading: "loading", wappTableObject: "wappTableObject" }, outputs: { onElementSelect: "onElementSelect", onViewElementSelect: "onViewElementSelect", onCopyElementSelect: "onCopyElementSelect", onEditElementSelect: "onEditElementSelect", onCustomElementSelect: "onCustomElementSelect", onDeleteElementSelect: "onDeleteElementSelect", onNewElementSelect: "onNewElementSelect" }, providers: [ConfirmationService], viewQueries: [{ propertyName: "filter", first: true, predicate: ["filter"], descendants: true }, { propertyName: "dataTable", first: true, predicate: ["table"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-content select=\".filter-panel\"></ng-content>\r\n<div *ngIf=\"wappTableObject\" [class.table-container]=\"wappTableObject.tableContainer\">\r\n <p-table class=\"w-table-styles\" \r\n *ngIf=\"!loading; else loadingTable\" #table \r\n [value]=\"elements\" dataKey=\"{{wappTableObject.identificator}}\" \r\n [paginator]=\"wappTableObject.hasPaginator\"\r\n [selection]=\"selectedElements\" (selectionChange)=\"onSelectionChange($event)\"\r\n [selectAll]=\"selectAll\" (selectAllChange)=\"onSelectAllChange($event)\"\r\n [totalRecords]=\"totalRecords\" [showCurrentPageReport]=\"true\" \r\n [rows]=\"rowsPerPage\"\r\n [currentPageReportTemplate]=\"wappTableObject.currentPageReportTemplate ? wappTableObject.currentPageReportTemplate + ' ' + rowsPerPage + ' de ' + totalRecords! : 'Showing ' + rowsPerPage + ' of ' + totalRecords!\"\r\n [globalFilterFields]=\"wappTableObject.globalFilterFields!\" responsiveLayout=\"scroll\"\r\n [rowHover]=\"true\" [tableStyle]=\"{'min-width': wappTableObject.tableMinWidth!}\"\r\n styleClass=\"p-datatable-striped\">\r\n <ng-template pTemplate=\"caption\" *ngIf=\"wappTableObject?.hasClearButton || wappTableObject.hasGlobalSearch\">\r\n <span class=\"flex align-items-center table-paginator p-0\">\r\n <span *ngIf=\"wappTableObject.hasTotalPagingSelector\" class=\"showing-per-page\"> {{wappTableObject.currentPageReportTemplate}} </span>\r\n <p-inputNumber *ngIf=\"wappTableObject.hasTotalPagingSelector\"\r\n class=\"pl-2 showing-per-page\" [size]=\"1\" [(ngModel)]=\"rowsPerPage\" [showButtons]=\"true\" \r\n buttonLayout=\"horizontal\" inputId=\"horizontal\" spinnerMode=\"horizontal\" [step]=\"1\" [min]=\"1\" [max]=\"totalRecords!\"\r\n decrementButtonClass=\"p-button-outlined\" \r\n incrementButtonClass=\"p-button-outlined\" \r\n incrementButtonIcon=\"pi pi-plus\" \r\n decrementButtonIcon=\"pi pi-minus\" \r\n mode=\"decimal\">\r\n </p-inputNumber>\r\n <span *ngIf=\"wappTableObject?.hasGlobalSearch\" class=\"p-input-icon-left ml-auto\">\r\n <i class=\"pi pi-search\"></i>\r\n <input pInputText type=\"text\" #filter (input)=\"onGlobalFilter(table, $event)\" \r\n [placeholder]=\"wappTableObject.searchPlaceholder\" class=\"w-full height-input w-input\"/>\r\n </span>\r\n </span>\r\n </ng-template>\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th *ngIf=\"wappTableObject.hasCheckbox\" \r\n [ngClass]=\"wappTableObject.columnAlign ? getTableColumnAlignClass(wappTableObject.columnAlign[0]) : 'text-left'\">\r\n <p-tableHeaderCheckbox></p-tableHeaderCheckbox>\r\n </th>\r\n <ng-container *ngIf=\"!wappTableObject.hasSortableColumns; else sortableColumns\">\r\n <th *ngFor=\"let header of wappTableObject?.headers; index as i\" [class]=\"header == ('Imagen' || 'Image') ? 'image-header': ''\" \r\n [ngClass]=\"wappTableObject.columnAlign ? getTableColumnAlignClass(wappTableObject.columnAlign[wappTableObject.hasCheckbox ? i+1 : i]) : getTableColumnAlignClassDefaultByColumnType(wappTableObject.columnTypes[wappTableObject.hasCheckbox ? i+1 : i])\">\r\n {{header}}\r\n </th>\r\n </ng-container>\r\n <ng-template #sortableColumns>\r\n <ng-template ngFor let-filterType [ngForOf]=\"wappTableObject.headers\" let-i=\"index\"> \r\n <th [pSortableColumn]=\"wappTableObject.sortableNames[i]\" \r\n [class]=\"wappTableObject.headers[i] == ('Imagen' || 'Image') ? 'image-header': ''\" \r\n [ngClass]=\"wappTableObject.columnAlign ? getTableColumnAlignClass(wappTableObject.columnAlign[wappTableObject.hasCheckbox ? i+1 : i]) : getTableColumnAlignClassDefaultByColumnType(wappTableObject.columnTypes[wappTableObject.hasCheckbox ? i+1 : i])\">\r\n {{wappTableObject.headers[i]}} \r\n <p-sortIcon *ngIf=\"wappTableObject.sortableNames[i] != null\" [field]=\"wappTableObject.sortableNames[i]\"></p-sortIcon>\r\n </th>\r\n </ng-template>\r\n </ng-template>\r\n <th *ngIf=\"wappTableObject.hasDeleteButton || wappTableObject.hasEditButton\"></th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-element>\r\n <tr [ngClass]=\"wappTableObject.hasSelectableRow ? 'p-selectable-row' : ''\" (click)=\"wappTableObject.hasSelectableRow ? onElement(element) : ''\">\r\n <ng-template ngFor let-columnType [ngForOf]=\"wappTableObject.columnTypes!\" let-i=\"index\">\r\n <td *ngIf=\"columnType == tableColumnTypes?.Checkbox! && wappTableObject.hasCheckbox\" [style]=\"'width: '+wappTableObject.columnWidths![i]\"\r\n [ngClass]=\"wappTableObject.columnAlign ? getTableColumnAlignClass(wappTableObject.columnAlign[i]) : 'text-center'\">\r\n <div *ngIf=\"wappTableObject.disableCheckbox; else activeCheckbox\">\r\n <p-tableCheckbox [value]=\"element\" [disabled]=\"readProperty(element, wappTableObject.disableCheckbox)\"></p-tableCheckbox>\r\n </div>\r\n <ng-template #activeCheckbox>\r\n <p-tableCheckbox [value]=\"element\"></p-tableCheckbox>\r\n </ng-template>\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Image\" [style]=\"'width: '+wappTableObject.columnWidths[i]\" \r\n [ngClass]=\"wappTableObject.columnAlign ? getTableColumnAlignClass(wappTableObject.columnAlign[i]) : 'text-center'\">\r\n <img *ngIf=\"readProperty(element, wappTableObject.columns[i])\" \r\n [src]=\"readProperty(element, wappTableObject.columns[i])\" \r\n class=\"element-image-width\"/>\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Text\" [style]=\"'width: '+wappTableObject.columnWidths[i]\" \r\n [ngClass]=\"wappTableObject.columnAlign ? getTableColumnAlignClass(wappTableObject.columnAlign[i]) : 'text-left'\">\r\n {{ readProperty(element, wappTableObject.columns[i]) }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Number\" [style]=\"'width: '+wappTableObject.columnWidths[i]\" \r\n [ngClass]=\"wappTableObject.columnAlign ? getTableColumnAlignClass(wappTableObject.columnAlign[i]) : 'text-right'\">\r\n {{ readProperty(element, wappTableObject.columns[i]) }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Currency\" [style]=\"'width: '+wappTableObject.columnWidths[i]\" \r\n [ngClass]=\"wappTableObject.columnAlign ? getTableColumnAlignClass(wappTableObject.columnAlign[i]) : 'text-right'\">\r\n {{ readProperty(element, wappTableObject.columns[i]) | currency }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Badge\" [style]=\"'width: '+wappTableObject.columnWidths[i]\" \r\n [ngClass]=\"wappTableObject.columnAlign ? getTableColumnAlignClass(wappTableObject.columnAlign[i]) : 'text-center'\">\r\n <w-badge [label]=\"readProperty(element, wappTableObject.columns[i])\" [color]=\"'info'\"></w-badge> \r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Boolean\" \r\n [ngClass]=\"wappTableObject.columnAlign ? getTableColumnAlignClass(wappTableObject.columnAlign[i]) : 'text-center'\">\r\n <i class=\"pi\" [ngClass]=\"getBooleanColumnClass(i, readProperty(element, wappTableObject.columns[i]))\"></i>\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Date\" \r\n [ngClass]=\"wappTableObject.columnAlign ? getTableColumnAlignClass(wappTableObject.columnAlign[i]) : 'text-left'\">\r\n {{ readProperty(element, wappTableObject.columns[i]) | wappDate }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.ShortDate\" \r\n [ngClass]=\"wappTableObject.columnAlign ? getTableColumnAlignClass(wappTableObject.columnAlign[i]) : 'text-left'\">\r\n {{ readProperty(element, wappTableObject.columns[i]) | wappDate : wappDateFormat.d }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.LongDate\" \r\n [ngClass]=\"wappTableObject.columnAlign ? getTableColumnAlignClass(wappTableObject.columnAlign[i]) : 'text-left'\">\r\n {{ readProperty(element, wappTableObject.columns[i]) | wappDate : wappDateFormat.D }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.GeneralDateTimeShortTime\" \r\n [ngClass]=\"wappTableObject.columnAlign ? getTableColumnAlignClass(wappTableObject.columnAlign[i]) : 'text-left'\">\r\n {{ readProperty(element, wappTableObject.columns[i]) | wappDate : wappDateFormat.g }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.GeneralDateTimeLongTime\" \r\n [ngClass]=\"wappTableObject.columnAlign ? getTableColumnAlignClass(wappTableObject.columnAlign[i]) : 'text-left'\">\r\n {{ readProperty(element, wappTableObject.columns[i]) | wappDate : wappDateFormat.G }}\r\n </td>\r\n </ng-template>\r\n <td *ngIf=\"wappTableObject?.hasViewButton || wappTableObject.customButtonConfig?.hasCustomButton || wappTableObject?.hasEditButton || wappTableObject?.hasCopyButton || wappTableObject?.hasDeleteButton\">\r\n <div class=\"flex justify-content-end\">\r\n <button *ngIf=\"wappTableObject?.hasViewButton\" \r\n [pTooltip]=\"wappTableObject.buttonTooltips?.viewTooltip!\"\r\n [tooltipPosition]=\"wappTableObject.buttonTooltips?.position!\"\r\n pButton pRipple (click)=\"viewElement(element)\" \r\n icon=\"pi pi-eye\" class=\"p-button-text p-button-info mr-2\">\r\n </button>\r\n <button *ngIf=\"wappTableObject.customButtonConfig?.hasCustomButton\"\r\n pButton pRipple (click)=\"customElement(element)\"\r\n [pTooltip]=\"wappTableObject.buttonTooltips?.customTooltip!\"\r\n [tooltipPosition]=\"wappTableObject.buttonTooltips?.position!\"\r\n [icon]=\"wappTableObject.customButtonConfig?.icon!\"\r\n class=\"p-button-text p-button-info mr-2\">\r\n </button>\r\n <button *ngIf=\"wappTableObject?.hasEditButton && !wappTableObject.disableEditProperty\" \r\n [pTooltip]=\"wappTableObject.buttonTooltips?.editTooltip!\"\r\n [tooltipPosition]=\"wappTableObject.buttonTooltips?.position!\"\r\n pButton pRipple (click)=\"editElement(element)\"\r\n icon=\"pi pi-pencil\" class=\"p-button-text p-button-success mr-2\">\r\n </button>\r\n <button *ngIf=\"wappTableObject.disableEditProperty\" \r\n pButton pRipple (click)=\"editElement(element)\" [disabled]=\"readProperty(element, wappTableObject.disableEditProperty)\"\r\n [pTooltip]=\"wappTableObject.buttonTooltips?.editTooltip!\"\r\n [tooltipPosition]=\"wappTableObject.buttonTooltips?.position!\"\r\n icon=\"pi pi-pencil\" class=\"p-button-text p-button-success mr-2\">\r\n </button>\r\n <button *ngIf=\"wappTableObject?.hasCopyButton\" \r\n pButton pRipple (click)=\"confirmCopy($event, element)\" \r\n [pTooltip]=\"wappTableObject.buttonTooltips?.copyTooltip!\"\r\n [tooltipPosition]=\"wappTableObject.buttonTooltips?.position!\"\r\n icon=\"pi pi-copy\" class=\"p-button-text p-button-help mr-2\">\r\n </button>\r\n <span *ngIf=\"wappTableObject?.hasDeleteButton\">\r\n <button *ngIf=\"wappTableObject.disableDeleteProperty; else noDisableDelete\" \r\n pButton pRipple (click)=\"confirmDelete($event, element)\" [disabled]=\"readProperty(element, wappTableObject.disableDeleteProperty)\"\r\n [pTooltip]=\"wappTableObject.buttonTooltips?.deleteTooltip!\"\r\n [tooltipPosition]=\"wappTableObject.buttonTooltips?.position!\"\r\n icon=\"pi pi-trash\" class=\"p-button-text p-button-danger\">\r\n </button>\r\n <ng-template #noDisableDelete>\r\n <button *ngIf=\"!wappTableObject?.disableDelete && !wappTableObject.disableDeleteProperty\" \r\n [pTooltip]=\"wappTableObject.buttonTooltips?.deleteTooltip!\"\r\n [tooltipPosition]=\"wappTableObject.buttonTooltips?.position!\"\r\n pButton pRipple (click)=\"confirmDelete($event, element)\"\r\n icon=\"pi pi-trash\" class=\"p-button-text p-button-danger\">\r\n </button>\r\n </ng-template>\r\n </span>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td colspan=\"8\">No elements.</td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"loadingbody\">\r\n <tr>\r\n <td colspan=\"8\">Loading elements.</td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n \r\n <ng-template #loadingTable>\r\n <p-table class=\"w-table-styles\" [value]=\"tableSkeletons\" responsiveLayout=\"scroll\" [paginator]=\"wappTableObject.hasPaginator\" [rows]=\"rowsPerPage\" [totalRecords]=\"totalRecords\"\r\n [showCurrentPageReport]=\"true\" \r\n [currentPageReportTemplate]=\"wappTableObject.currentPageReportTemplate ? wappTableObject.currentPageReportTemplate + ' ' + rowsPerPage + ' de ' + totalRecords : 'Showing ' + rowsPerPage + ' of ' + totalRecords\"\r\n styleClass=\"p-datatable-striped\">\r\n <ng-template *ngIf=\"wappTableObject?.hasClearButton || wappTableObject.hasGlobalSearch\" pTemplate=\"caption\">\r\n <span class=\"flex align-items-center table-paginator p-0\">\r\n <!-- <button *ngIf=\"wappTableObject.hasClearButton\" pButton label=\"Clear\" class=\"p-button-outlined\" icon=\"pi pi-filter-slash\"></button> -->\r\n <span *ngIf=\"wappTableObject.hasTotalPagingSelector\" class=\"showing-per-page\"> {{wappTableObject.currentPageReportTemplate}} </span>\r\n <p-inputNumber *ngIf=\"wappTableObject.hasTotalPagingSelector\"\r\n class=\"pl-2 showing-per-page\" [size]=\"1\" [(ngModel)]=\"rowsPerPage\" [showButtons]=\"true\" \r\n buttonLayout=\"horizontal\" inputId=\"horizontal\" spinnerMode=\"horizontal\" [step]=\"1\" [min]=\"1\" [max]=\"totalRecords\"\r\n decrementButtonClass=\"p-button-outlined\" \r\n incrementButtonClass=\"p-button-outlined\" \r\n incrementButtonIcon=\"pi pi-plus\" \r\n decrementButtonIcon=\"pi pi-minus\" \r\n mode=\"decimal\">\r\n </p-inputNumber>\r\n <span *ngIf=\"wappTableObject?.hasGlobalSearch\" class=\"p-input-icon-left ml-auto\">\r\n <i class=\"pi pi-search\"></i>\r\n <input pInputText type=\"text\" #filter \r\n [placeholder]=\"wappTableObject.searchPlaceholder\" class=\"w-full height-input w-input\"/>\r\n </span>\r\n </span>\r\n </ng-template>\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th *ngIf=\"!wappTableObject.hasColumnFilters && wappTableObject.hasCheckbox; else selectAllCheckbox\">\r\n <p-tableHeaderCheckbox></p-tableHeaderCheckbox>\r\n </th>\r\n <ng-template #selectAllCheckbox><th></th></ng-template>\r\n <th *ngFor=\"let header of wappTableObject?.headers\">\r\n {{header}}\r\n </th>\r\n <th *ngIf=\"wappTableObject.hasDeleteButton || wappTableObject.hasEditButton\"></th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\">\r\n <tr height=\"70px\">\r\n <td *ngFor=\"let item of wappTableObject.columnTypes\" [style.width]=\"item == tableColumnTypes.Checkbox ? '8rem' : ''\" >\r\n <p-tableCheckbox *ngIf=\"item == tableColumnTypes.Checkbox && wappTableObject.hasCheckbox\"></p-tableCheckbox>\r\n <p-skeleton *ngIf=\"item != tableColumnTypes.Checkbox\"></p-skeleton>\r\n </td>\r\n <td *ngIf=\"wappTableObject.hasEditButton || wappTableObject.hasDeleteButton\">\r\n <div class=\"flex justify-content-end\">\r\n <button *ngIf=\"wappTableObject?.hasViewButton\" \r\n pButton pRipple \r\n [pTooltip]=\"wappTableObject.buttonTooltips?.viewTooltip!\"\r\n icon=\"pi pi-eye\" class=\"p-button-text p-button-info mr-2\">\r\n </button>\r\n <button *ngIf=\"wappTableObject.customButtonConfig?.hasCustomButton\"\r\n pButton pRipple\r\n [pTooltip]=\"wappTableObject.buttonTooltips?.customTooltip!\"\r\n [icon]=\"wappTableObject.customButtonConfig?.icon!\"\r\n class=\"p-button-text p-button-info mr-2\">\r\n </button>\r\n <button *ngIf=\"wappTableObject?.hasEditButton\" \r\n pButton pRipple\r\n [pTooltip]=\"wappTableObject.buttonTooltips?.editTooltip!\"\r\n icon=\"pi pi-pencil\" class=\"p-button-text p-button-success mr-2\">\r\n </button>\r\n <button *ngIf=\"wappTableObject?.hasCopyButton\" \r\n pButton pRipple \r\n [pTooltip]=\"wappTableObject.buttonTooltips?.copyTooltip!\"\r\n icon=\"pi pi-copy\" class=\"p-button-text p-button-help mr-2\">\r\n </button>\r\n <button *ngIf=\"wappTableObject?.hasDeleteButton\" \r\n pButton pRipple\r\n [pTooltip]=\"wappTableObject.buttonTooltips?.deleteTooltip!\"\r\n icon=\"pi pi-trash\" class=\"p-button-text p-button-danger\">\r\n </button>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </ng-template>\r\n</div>\r\n<p-confirmPopup></p-confirmPopup>", styles: [".heading1{font-size:3.1428571429rem;line-height:3.4285714286rem;font-weight:700}.heading2{font-size:2.8571428571rem;line-height:3.1428571429rem;font-weight:700}.heading3{font-size:2.5714285714rem;line-height:2.8571428571rem;font-weight:700}.heading4{font-size:2.2857142857rem;line-height:2.5714285714rem;font-weight:700}.heading5{font-size:2rem;line-height:2.2857142857rem;font-weight:700}.heading6{font-size:1.7142857143rem;line-height:2rem;font-weight:700}.subtitle1{font-size:1.4285714286rem;line-height:1.7142857143rem;font-weight:700}.subtitle2{font-size:1.1428571429rem;line-height:1.4285714286rem;font-weight:700}.body,.input-generic-placeholder-small,.input-generic-small{font-size:1rem;line-height:1.1428571429rem;font-weight:600}.caption{font-size:.8571428571rem;line-height:1.1428571429rem;font-weight:600}.select-option-text{font-size:16;line-height:24px;font-weight:600}.icon-small-size{font-size:8px}.icon-small-x-size{font-size:12px}.icon-medium-size{font-size:16px}.icon-large-size{font-size:24px}.spacingXXS{padding:4px}.spacingXSM{padding:6px}.spacingXS{padding:8px}.spacingS{padding:12px}.spacingM{padding:16px}.spacingL{padding:20px}.spacingXL{padding:24px}.spacingXXL{padding:28px}.spacingXXXL{padding:32px}.focus,::ng-deep .w-table-styles .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box.p-focus{box-shadow:0 0 8px #00a6e980}.hover{border-radius:8px;border:1px solid #00b2eb}.button-large-typography{font-size:20px;line-height:24px;font-weight:700}.button-medium-typography{font-size:16px;line-height:16px;font-weight:700}.button-small-typography{font-size:12px;line-height:16px;font-weight:700}.button-text-typography,.input-generic-label{font-size:14px;line-height:16px;font-weight:700}.input-generic-placeholder{font-size:16px;line-height:24px;font-weight:600;color:#9aa0a6!important;opacity:unset!important}.input-generic{font-size:16px;line-height:24px;font-weight:600}.input-generic-placeholder-small{padding:8px 12px 12px;color:#9aa0a6!important}.input-generic-valid{border-radius:8px;border:1px solid #B3FFD3}.input-generic-valid-focus{border-radius:8px;border:1px solid #B3FFD3!important;box-shadow:0 0 8px #46ff9b80!important;padding-left:16px}.input-generic-warning{border-radius:8px;border:1px solid #FFECB8!important}.input-generic-warning-focus{border-radius:8px;border:1px solid #FFECB8!important;box-shadow:0 0 8px #ffcd4680!important;padding-left:16px}.input-generic-error-focus{border-radius:8px;border:1px solid #FFBDBD!important;box-shadow:0 0 8px #ff555580!important;padding-left:16px}.input-generic-error{border-radius:8px;border:1px solid #FFBDBD}.tag-generic{font-size:14px;line-height:16px;font-weight:700}.tag-generic-small{font-size:12px;line-height:16px;font-weight:700}.toggle-small-typography{font-size:12px;line-height:16px;font-weight:600}.w-generic-input-no-label-height{height:36px}.table-container{padding:16px 20px 20px;background-color:#fff;border-radius:8px;box-shadow:0 4px 8px #0000001a}.showing-per-page{color:#9aa0a6;font-weight:600}::ng-deep .w-table-styles .p-paginator-bottom>span:first-child{margin-right:auto}::ng-deep .w-table-styles .p-paginator .p-paginator-pages .p-paginator-page{color:#9aa0a6;border-radius:8px;height:32px;width:32px;max-width:32px;min-width:32px}::ng-deep .w-table-styles .p-paginator{border-width:0;padding:16px 20px 0}::ng-deep .w-table-styles .p-paginator .p-paginator-pages .p-paginator-page.p-highlight{background-color:#d6f2ff;color:#2e3134;height:32px;width:32px;max-width:32px;min-width:32px}::ng-deep .w-table-styles .p-paginator .p-paginator-pages .p-paginator-page:not(.p-highlight):hover{background:#f1f5f9;border-color:transparent;color:#2e3134;height:32px;width:32px;max-width:32px;min-width:32px}::ng-deep .w-table-styles .p-paginator .p-paginator-current{color:#9aa0a6;padding:0}::ng-deep .w-table-styles .p-datatable .p-sortable-column .p-sortable-column-icon{color:#000;margin-left:.5rem}::ng-deep .w-table-styles .p-datatable .p-sortable-column.p-highlight:hover .p-sortable-column-icon{color:#3c4043}::ng-deep .w-table-styles .p-datatable .p-sortable-column:focus{box-shadow:inset 0 0;outline:0 none}::ng-deep .w-table-styles .p-datatable .p-datatable-thead>tr>th{color:#000;background:#ffffff}::ng-deep .w-table-styles .p-datatable.p-datatable-striped .p-datatable-tbody>tr:nth-child(even){background:#f8f9fa}::ng-deep .w-table-styles .p-datatable .p-paginator-bottom{justify-content:normal!important}::ng-deep .w-table-styles .p-datatable .p-paginator-bottom>button{color:#9aa0a6}::ng-deep .w-table-styles .p-datatable .p-datatable-header{background:#ffffff;border-width:0px;padding:0 0 16px!important;font-weight:600}::ng-deep .w-table-styles p-inputnumber,.p-inputnumber{height:32px}::ng-deep .w-table-styles .p-inputnumber-buttons-horizontal .p-button.p-inputnumber-button-up{width:32px}::ng-deep .w-table-styles .p-inputnumber-buttons-horizontal .p-button.p-inputnumber-button-down{width:32px}::ng-deep .wapp-table-styles .showing-per-page .p-button.p-inputnumber-button-up{border-radius:8px;border-top-left-radius:0!important;border-bottom-left-radius:0!important;border-top-right-radius:8px;border-bottom-right-radius:8px}::ng-deep .wapp-table-styles .showing-per-page .p-button.p-inputnumber-button-down{border-radius:8px;border-top-right-radius:0!important;border-bottom-right-radius:0!important;border-top-left-radius:8px;border-bottom-left-radius:8px}::ng-deep .w-table-styles .p-inputnumber-buttons-horizontal .p-inputnumber-input{border-width:1px 0px 1px 0px;border-color:#e8eaed;color:#dadce0;text-align:center}::ng-deep .w-table-styles .p-button.p-button-outlined{color:#e8eaed;border-width:1px}::ng-deep .w-table-styles .p-datatable .p-datatable-tbody>tr>td{columns:#2E3134;font-weight:600;border:1px solid #e2e8f0;border-width:0 0 1px 0;padding:4px 8px 3px}::ng-deep .w-table-styles .p-checkbox{height:16px;width:16px;border-width:1px}::ng-deep .w-table-styles .p-checkbox .p-checkbox-box{height:16px;width:16px;border-radius:4px;border:1px solid #dadce0}::ng-deep .w-table-styles .p-checkbox .p-checkbox-box .p-checkbox-icon{font-size:8px;font-weight:700}::ng-deep .w-table-styles .p-checkbox .p-checkbox-box.p-highlight{border-color:#00b2eb;background:#00b2eb}::ng-deep .w-table-styles .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box:hover{background-color:#dadce0;border:1px solid #dadce0}::ng-deep .w-table-styles .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box.p-focus{background-color:#00b2eb;border:1px solid #d6f2ff}::ng-deep .w-table-styles .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box:not(.p-highlight).p-focus{background-color:#dadce0;border:1px solid #dadce0}::ng-deep .w-table-styles .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box.p-highlight:hover{border-color:#00b2eb;background:#00b2eb}::ng-deep .w-table-styles .p-inputtext:enabled:focus{outline:0 none;outline-offset:0;box-shadow:0 0 #000;background-color:#f1f3f4;border-color:#f1f3f4;color:#000}::ng-deep .w-table-styles .p-inputtext:enabled:hover{border-color:#e8eaed}::ng-deep .w-table-styles .p-button.p-button-outlined:enabled:hover{color:#e8eaed;border:1px solid;background-color:#f1f3f4}::ng-deep .w-table-styles .p-button.p-button-outlined:enabled:hover>.p-button-icon{color:#2e3134}::ng-deep .w-table-styles .p-button.p-button-outlined>.pi{font-size:.7rem;font-weight:bolder}::ng-deep .w-table-styles .p-datatable .p-datatable-thead>tr>th:hover{color:#3c4043;background:#ffffff}.element-image-width{max-height:32px;width:auto;vertical-align:middle}.height-input{height:32px}.w-input{border-radius:8px;border-width:1px;border-color:#e8eaed;font-size:16px;line-height:5px;font-weight:100;gap:16px}::-webkit-input-placeholder{font-size:1rem;line-height:1.1428571429rem;font-weight:600;color:#9aa0a6}::-moz-placeholder{font-size:1rem;line-height:1.1428571429rem;font-weight:600;color:#9aa0a6}:-ms-input-placeholder{font-size:1rem;line-height:1.1428571429rem;font-weight:600;color:#9aa0a6}:-moz-placeholder{font-size:1rem;line-height:1.1428571429rem;font-weight:600;color:#9aa0a6}.w-input:hover{border:1px solid #1f5b72!important}.w-input:focus{box-shadow:0 0 3px 3px #d6f2ff!important;background-color:transparent!important}.pi-search{left:.75rem;color:#bdc1c6!important}.image-header{text-align:center!important}::ng-deep .w-table-styles .p-avatar img{width:32px!important;height:32px!important}:host ::ng-deep .w-table-styles .p-avatar{border:1px solid #e8eaed}::ng-deep .p-datatable .p-datatable-thead>tr>th{padding:16px 8px;border:1px solid #e8eaed;border-width:0px 0px 1px 0px;font-weight:700;color:#000;background:#ffffff;transition:box-shadow .2s}::ng-deep .p-datatable .p-datatable-tbody>tr{color:#9aa0a6}::ng-deep .p-sortable-column:not(.p-highlight):hover .p-sortable-column-icon{color:#3c4043}\n"], dependencies: [{ kind: "directive", type: i2.InputText, selector: "[pInputText]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { 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: "directive", type: i5.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "directive", type: i1.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i6.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "directive", type: i7.Ripple, selector: "[pRipple]" }, { kind: "component", type: i8.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "style", "shape", "animation", "borderRadius", "size", "width", "height"] }, { kind: "component", type: i9.InputNumber, selector: "p-inputNumber", inputs: ["showButtons", "format", "buttonLayout", "inputId", "styleClass", "style", "placeholder", "size", "maxlength", "tabindex", "title", "ariaLabel", "ariaRequired", "name", "required", "autocomplete", "min", "max", "incrementButtonClass", "decrementButtonClass", "incrementButtonIcon", "decrementButtonIcon", "readonly", "step", "allowEmpty", "locale", "localeMatcher", "mode", "currency", "currencyDisplay", "useGrouping", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "inputStyle", "inputStyleClass", "showClear", "disabled"], outputs: ["onInput", "onFocus", "onBlur", "onKeyDown", "onClear"] }, { kind: "component", type: i10.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "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", "virtualRowHeight", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll"], outputs: ["selectAllChange", "selectionChange", "contextMenuSelectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i10.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "component", type: i10.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i10.TableCheckbox, selector: "p-tableCheckbox", inputs: ["disabled", "value", "index", "inputId", "name", "required", "ariaLabel"] }, { kind: "component", type: i10.TableHeaderCheckbox, selector: "p-tableHeaderCheckbox", inputs: ["disabled", "inputId", "name", "ariaLabel"] }, { kind: "component", type: i11.ConfirmPopup, selector: "p-confirmPopup", inputs: ["key", "defaultFocus", "showTransitionOptions", "hideTransitionOptions", "autoZIndex", "baseZIndex", "style", "styleClass", "visible"] }, { kind: "component", type: i12.WBadgeComponent, selector: "w-badge", inputs: ["label", "color", "tooltip", "maxWidthOverflow"] }, { kind: "pipe", type: i4.CurrencyPipe, name: "currency" }, { kind: "pipe", type: i13.WDatePipe, name: "wappDate" }] });
|
|
184
196
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: WTableComponent, decorators: [{
|
|
185
197
|
type: Component,
|
|
186
|
-
args: [{ selector: 'w-table', providers: [ConfirmationService], template: "<ng-content select=\".filter-panel\"></ng-content>\r\n<div *ngIf=\"wappTableObject\" [class.table-container]=\"wappTableObject.tableContainer\">\r\n <p-table class=\"w-table-styles\" \r\n *ngIf=\"!loading; else loadingTable\" #table \r\n [value]=\"elements\" dataKey=\"{{wappTableObject.identificator}}\" \r\n [paginator]=\"wappTableObject.hasPaginator\"\r\n [selection]=\"selectedElements\" (selectionChange)=\"onSelectionChange($event)\"\r\n [selectAll]=\"selectAll\" (selectAllChange)=\"onSelectAllChange($event)\"\r\n [totalRecords]=\"totalRecords\" [showCurrentPageReport]=\"true\" \r\n [rows]=\"rowsPerPage\"\r\n [currentPageReportTemplate]=\"wappTableObject.currentPageReportTemplate ? wappTableObject.currentPageReportTemplate + ' ' + rowsPerPage + ' de ' + totalRecords! : 'Showing ' + rowsPerPage + ' of ' + totalRecords!\"\r\n [globalFilterFields]=\"wappTableObject.globalFilterFields!\" responsiveLayout=\"scroll\"\r\n [rowHover]=\"true\" [tableStyle]=\"{'min-width': wappTableObject.tableMinWidth!}\"\r\n styleClass=\"p-datatable-striped\">\r\n <ng-template pTemplate=\"caption\" *ngIf=\"wappTableObject?.hasClearButton || wappTableObject.hasGlobalSearch\">\r\n <span class=\"flex align-items-center table-paginator p-0\">\r\n <span *ngIf=\"wappTableObject.hasTotalPagingSelector\" class=\"showing-per-page\"> {{wappTableObject.currentPageReportTemplate}} </span>\r\n <p-inputNumber *ngIf=\"wappTableObject.hasTotalPagingSelector\"\r\n class=\"pl-2 showing-per-page\" [size]=\"1\" [(ngModel)]=\"rowsPerPage\" [showButtons]=\"true\" \r\n buttonLayout=\"horizontal\" inputId=\"horizontal\" spinnerMode=\"horizontal\" [step]=\"1\" [min]=\"1\" [max]=\"totalRecords!\"\r\n decrementButtonClass=\"p-button-outlined\" \r\n incrementButtonClass=\"p-button-outlined\" \r\n incrementButtonIcon=\"pi pi-plus\" \r\n decrementButtonIcon=\"pi pi-minus\" \r\n mode=\"decimal\">\r\n </p-inputNumber>\r\n <span *ngIf=\"wappTableObject?.hasGlobalSearch\" class=\"p-input-icon-left ml-auto\">\r\n <i class=\"pi pi-search\"></i>\r\n <input pInputText type=\"text\" #filter (input)=\"onGlobalFilter(table, $event)\" \r\n [placeholder]=\"wappTableObject.searchPlaceholder\" class=\"w-full height-input w-input\"/>\r\n </span>\r\n </span>\r\n </ng-template>\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th *ngIf=\"wappTableObject.hasCheckbox\" \r\n [ngClass]=\"wappTableObject.columnAlign ? getTableColumnAlignClass(wappTableObject.columnAlign[0]) : 'text-left'\">\r\n <p-tableHeaderCheckbox></p-tableHeaderCheckbox>\r\n </th>\r\n <ng-container *ngIf=\"!wappTableObject.hasSortableColumns; else sortableColumns\">\r\n <th *ngFor=\"let header of wappTableObject?.headers; index as i\" [class]=\"header == ('Imagen' || 'Image') ? 'image-header': ''\" \r\n [ngClass]=\"wappTableObject.columnAlign ? getTableColumnAlignClass(wappTableObject.columnAlign[wappTableObject.hasCheckbox ? i+1 : i]) : getTableColumnAlignClassDefaultByColumnType(wappTableObject.columnTypes[wappTableObject.hasCheckbox ? i+1 : i])\">\r\n {{header}}\r\n </th>\r\n </ng-container>\r\n <ng-template #sortableColumns>\r\n <ng-template ngFor let-filterType [ngForOf]=\"wappTableObject.headers\" let-i=\"index\"> \r\n <th [pSortableColumn]=\"wappTableObject.sortableNames[i]\" \r\n [class]=\"wappTableObject.headers[i] == ('Imagen' || 'Image') ? 'image-header': ''\" \r\n [ngClass]=\"wappTableObject.columnAlign ? getTableColumnAlignClass(wappTableObject.columnAlign[wappTableObject.hasCheckbox ? i+1 : i]) : getTableColumnAlignClassDefaultByColumnType(wappTableObject.columnTypes[wappTableObject.hasCheckbox ? i+1 : i])\">\r\n {{wappTableObject.headers[i]}} \r\n <p-sortIcon *ngIf=\"wappTableObject.sortableNames[i] != null\" [field]=\"wappTableObject.sortableNames[i]\"></p-sortIcon>\r\n </th>\r\n </ng-template>\r\n </ng-template>\r\n <th *ngIf=\"wappTableObject.hasDeleteButton || wappTableObject.hasEditButton\"></th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-element>\r\n <tr [ngClass]=\"wappTableObject.hasSelectableRow ? 'p-selectable-row' : ''\" (click)=\"wappTableObject.hasSelectableRow ? onElement(element) : ''\">\r\n <ng-template ngFor let-columnType [ngForOf]=\"wappTableObject.columnTypes!\" let-i=\"index\">\r\n <td *ngIf=\"columnType == tableColumnTypes?.Checkbox! && wappTableObject.hasCheckbox\" [style]=\"'width: '+wappTableObject.columnWidths![i]\"\r\n [ngClass]=\"wappTableObject.columnAlign ? getTableColumnAlignClass(wappTableObject.columnAlign[i]) : 'text-center'\">\r\n <div *ngIf=\"wappTableObject.disableCheckbox; else activeCheckbox\">\r\n <p-tableCheckbox [value]=\"element\" [disabled]=\"readProperty(element, wappTableObject.disableCheckbox)\"></p-tableCheckbox>\r\n </div>\r\n <ng-template #activeCheckbox>\r\n <p-tableCheckbox [value]=\"element\"></p-tableCheckbox>\r\n </ng-template>\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Image\" [style]=\"'width: '+wappTableObject.columnWidths[i]\" \r\n [ngClass]=\"wappTableObject.columnAlign ? getTableColumnAlignClass(wappTableObject.columnAlign[i]) : 'text-center'\">\r\n <img *ngIf=\"readProperty(element, wappTableObject.columns[i])\" \r\n [src]=\"readProperty(element, wappTableObject.columns[i])\" \r\n class=\"element-image-width\"/>\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Text\" [style]=\"'width: '+wappTableObject.columnWidths[i]\" \r\n [ngClass]=\"wappTableObject.columnAlign ? getTableColumnAlignClass(wappTableObject.columnAlign[i]) : 'text-left'\">\r\n {{ readProperty(element, wappTableObject.columns[i]) }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Number\" [style]=\"'width: '+wappTableObject.columnWidths[i]\" \r\n [ngClass]=\"wappTableObject.columnAlign ? getTableColumnAlignClass(wappTableObject.columnAlign[i]) : 'text-right'\">\r\n {{ readProperty(element, wappTableObject.columns[i]) }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Currency\" [style]=\"'width: '+wappTableObject.columnWidths[i]\" \r\n [ngClass]=\"wappTableObject.columnAlign ? getTableColumnAlignClass(wappTableObject.columnAlign[i]) : 'text-right'\">\r\n {{ readProperty(element, wappTableObject.columns[i]) | currency }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Badge\" [style]=\"'width: '+wappTableObject.columnWidths[i]\" \r\n [ngClass]=\"wappTableObject.columnAlign ? getTableColumnAlignClass(wappTableObject.columnAlign[i]) : 'text-center'\">\r\n <w-badge [label]=\"readProperty(element, wappTableObject.columns[i])\" [color]=\"'info'\"></w-badge> \r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Boolean\" \r\n [ngClass]=\"wappTableObject.columnAlign ? getTableColumnAlignClass(wappTableObject.columnAlign[i]) : 'text-center'\">\r\n <i class=\"pi\" [ngClass]=\"getBooleanColumnClass(i, readProperty(element, wappTableObject.columns[i]))\"></i>\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Date\" \r\n [ngClass]=\"wappTableObject.columnAlign ? getTableColumnAlignClass(wappTableObject.columnAlign[i]) : 'text-left'\">\r\n {{ readProperty(element, wappTableObject.columns[i]) | wappDate }}\r\n </td>\r\n </ng-template>\r\n <td *ngIf=\"wappTableObject?.hasViewButton || wappTableObject.customButtonConfig?.hasCustomButton || wappTableObject?.hasEditButton || wappTableObject?.hasCopyButton || wappTableObject?.hasDeleteButton\">\r\n <div class=\"flex justify-content-end\">\r\n <button *ngIf=\"wappTableObject?.hasViewButton\" \r\n [pTooltip]=\"wappTableObject.buttonTooltips?.viewTooltip!\"\r\n [tooltipPosition]=\"wappTableObject.buttonTooltips?.position!\"\r\n pButton pRipple (click)=\"viewElement(element)\" \r\n icon=\"pi pi-eye\" class=\"p-button-text p-button-info mr-2\">\r\n </button>\r\n <button *ngIf=\"wappTableObject.customButtonConfig?.hasCustomButton\"\r\n pButton pRipple (click)=\"customElement(element)\"\r\n [pTooltip]=\"wappTableObject.buttonTooltips?.customTooltip!\"\r\n [tooltipPosition]=\"wappTableObject.buttonTooltips?.position!\"\r\n [icon]=\"wappTableObject.customButtonConfig?.icon!\"\r\n class=\"p-button-text p-button-info mr-2\">\r\n </button>\r\n <button *ngIf=\"wappTableObject?.hasEditButton && !wappTableObject.disableEditProperty\" \r\n [pTooltip]=\"wappTableObject.buttonTooltips?.editTooltip!\"\r\n [tooltipPosition]=\"wappTableObject.buttonTooltips?.position!\"\r\n pButton pRipple (click)=\"editElement(element)\"\r\n icon=\"pi pi-pencil\" class=\"p-button-text p-button-success mr-2\">\r\n </button>\r\n <button *ngIf=\"wappTableObject.disableEditProperty\" \r\n pButton pRipple (click)=\"editElement(element)\" [disabled]=\"readProperty(element, wappTableObject.disableEditProperty)\"\r\n [pTooltip]=\"wappTableObject.buttonTooltips?.editTooltip!\"\r\n [tooltipPosition]=\"wappTableObject.buttonTooltips?.position!\"\r\n icon=\"pi pi-pencil\" class=\"p-button-text p-button-success mr-2\">\r\n </button>\r\n <button *ngIf=\"wappTableObject?.hasCopyButton\" \r\n pButton pRipple (click)=\"confirmCopy($event, element)\" \r\n [pTooltip]=\"wappTableObject.buttonTooltips?.copyTooltip!\"\r\n [tooltipPosition]=\"wappTableObject.buttonTooltips?.position!\"\r\n icon=\"pi pi-copy\" class=\"p-button-text p-button-help mr-2\">\r\n </button>\r\n <span *ngIf=\"wappTableObject?.hasDeleteButton\">\r\n <button *ngIf=\"wappTableObject.disableDeleteProperty; else noDisableDelete\" \r\n pButton pRipple (click)=\"confirmDelete($event, element)\" [disabled]=\"readProperty(element, wappTableObject.disableDeleteProperty)\"\r\n [pTooltip]=\"wappTableObject.buttonTooltips?.deleteTooltip!\"\r\n [tooltipPosition]=\"wappTableObject.buttonTooltips?.position!\"\r\n icon=\"pi pi-trash\" class=\"p-button-text p-button-danger\">\r\n </button>\r\n <ng-template #noDisableDelete>\r\n <button *ngIf=\"!wappTableObject?.disableDelete && !wappTableObject.disableDeleteProperty\" \r\n [pTooltip]=\"wappTableObject.buttonTooltips?.deleteTooltip!\"\r\n [tooltipPosition]=\"wappTableObject.buttonTooltips?.position!\"\r\n pButton pRipple (click)=\"confirmDelete($event, element)\"\r\n icon=\"pi pi-trash\" class=\"p-button-text p-button-danger\">\r\n </button>\r\n </ng-template>\r\n </span>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td colspan=\"8\">No elements.</td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"loadingbody\">\r\n <tr>\r\n <td colspan=\"8\">Loading elements.</td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n \r\n <ng-template #loadingTable>\r\n <p-table class=\"w-table-styles\" [value]=\"tableSkeletons\" responsiveLayout=\"scroll\" [paginator]=\"wappTableObject.hasPaginator\" [rows]=\"rowsPerPage\" [totalRecords]=\"totalRecords\"\r\n [showCurrentPageReport]=\"true\" \r\n [currentPageReportTemplate]=\"wappTableObject.currentPageReportTemplate ? wappTableObject.currentPageReportTemplate + ' ' + rowsPerPage + ' de ' + totalRecords : 'Showing ' + rowsPerPage + ' of ' + totalRecords\"\r\n styleClass=\"p-datatable-striped\">\r\n <ng-template *ngIf=\"wappTableObject?.hasClearButton || wappTableObject.hasGlobalSearch\" pTemplate=\"caption\">\r\n <span class=\"flex align-items-center table-paginator p-0\">\r\n <!-- <button *ngIf=\"wappTableObject.hasClearButton\" pButton label=\"Clear\" class=\"p-button-outlined\" icon=\"pi pi-filter-slash\"></button> -->\r\n <span *ngIf=\"wappTableObject.hasTotalPagingSelector\" class=\"showing-per-page\"> {{wappTableObject.currentPageReportTemplate}} </span>\r\n <p-inputNumber *ngIf=\"wappTableObject.hasTotalPagingSelector\"\r\n class=\"pl-2 showing-per-page\" [size]=\"1\" [(ngModel)]=\"rowsPerPage\" [showButtons]=\"true\" \r\n buttonLayout=\"horizontal\" inputId=\"horizontal\" spinnerMode=\"horizontal\" [step]=\"1\" [min]=\"1\" [max]=\"totalRecords\"\r\n decrementButtonClass=\"p-button-outlined\" \r\n incrementButtonClass=\"p-button-outlined\" \r\n incrementButtonIcon=\"pi pi-plus\" \r\n decrementButtonIcon=\"pi pi-minus\" \r\n mode=\"decimal\">\r\n </p-inputNumber>\r\n <span *ngIf=\"wappTableObject?.hasGlobalSearch\" class=\"p-input-icon-left ml-auto\">\r\n <i class=\"pi pi-search\"></i>\r\n <input pInputText type=\"text\" #filter \r\n [placeholder]=\"wappTableObject.searchPlaceholder\" class=\"w-full height-input w-input\"/>\r\n </span>\r\n </span>\r\n </ng-template>\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th *ngIf=\"!wappTableObject.hasColumnFilters && wappTableObject.hasCheckbox; else selectAllCheckbox\">\r\n <p-tableHeaderCheckbox></p-tableHeaderCheckbox>\r\n </th>\r\n <ng-template #selectAllCheckbox><th></th></ng-template>\r\n <th *ngFor=\"let header of wappTableObject?.headers\">\r\n {{header}}\r\n </th>\r\n <th *ngIf=\"wappTableObject.hasDeleteButton || wappTableObject.hasEditButton\"></th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\">\r\n <tr height=\"70px\">\r\n <td *ngFor=\"let item of wappTableObject.columnTypes\" [style.width]=\"item == tableColumnTypes.Checkbox ? '8rem' : ''\" >\r\n <p-tableCheckbox *ngIf=\"item == tableColumnTypes.Checkbox && wappTableObject.hasCheckbox\"></p-tableCheckbox>\r\n <p-skeleton *ngIf=\"item != tableColumnTypes.Checkbox\"></p-skeleton>\r\n </td>\r\n <td *ngIf=\"wappTableObject.hasEditButton || wappTableObject.hasDeleteButton\">\r\n <div class=\"flex justify-content-end\">\r\n <button *ngIf=\"wappTableObject?.hasViewButton\" \r\n pButton pRipple \r\n [pTooltip]=\"wappTableObject.buttonTooltips?.viewTooltip!\"\r\n icon=\"pi pi-eye\" class=\"p-button-text p-button-info mr-2\">\r\n </button>\r\n <button *ngIf=\"wappTableObject.customButtonConfig?.hasCustomButton\"\r\n pButton pRipple\r\n [pTooltip]=\"wappTableObject.buttonTooltips?.customTooltip!\"\r\n [icon]=\"wappTableObject.customButtonConfig?.icon!\"\r\n class=\"p-button-text p-button-info mr-2\">\r\n </button>\r\n <button *ngIf=\"wappTableObject?.hasEditButton\" \r\n pButton pRipple\r\n [pTooltip]=\"wappTableObject.buttonTooltips?.editTooltip!\"\r\n icon=\"pi pi-pencil\" class=\"p-button-text p-button-success mr-2\">\r\n </button>\r\n <button *ngIf=\"wappTableObject?.hasCopyButton\" \r\n pButton pRipple \r\n [pTooltip]=\"wappTableObject.buttonTooltips?.copyTooltip!\"\r\n icon=\"pi pi-copy\" class=\"p-button-text p-button-help mr-2\">\r\n </button>\r\n <button *ngIf=\"wappTableObject?.hasDeleteButton\" \r\n pButton pRipple\r\n [pTooltip]=\"wappTableObject.buttonTooltips?.deleteTooltip!\"\r\n icon=\"pi pi-trash\" class=\"p-button-text p-button-danger\">\r\n </button>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </ng-template>\r\n</div>\r\n<p-confirmPopup></p-confirmPopup>", styles: [".heading1{font-size:3.1428571429rem;line-height:3.4285714286rem;font-weight:700}.heading2{font-size:2.8571428571rem;line-height:3.1428571429rem;font-weight:700}.heading3{font-size:2.5714285714rem;line-height:2.8571428571rem;font-weight:700}.heading4{font-size:2.2857142857rem;line-height:2.5714285714rem;font-weight:700}.heading5{font-size:2rem;line-height:2.2857142857rem;font-weight:700}.heading6{font-size:1.7142857143rem;line-height:2rem;font-weight:700}.subtitle1{font-size:1.4285714286rem;line-height:1.7142857143rem;font-weight:700}.subtitle2{font-size:1.1428571429rem;line-height:1.4285714286rem;font-weight:700}.body,.input-generic-placeholder-small,.input-generic-small{font-size:1rem;line-height:1.1428571429rem;font-weight:600}.caption{font-size:.8571428571rem;line-height:1.1428571429rem;font-weight:600}.select-option-text{font-size:16;line-height:24px;font-weight:600}.icon-small-size{font-size:8px}.icon-small-x-size{font-size:12px}.icon-medium-size{font-size:16px}.icon-large-size{font-size:24px}.spacingXXS{padding:4px}.spacingXSM{padding:6px}.spacingXS{padding:8px}.spacingS{padding:12px}.spacingM{padding:16px}.spacingL{padding:20px}.spacingXL{padding:24px}.spacingXXL{padding:28px}.spacingXXXL{padding:32px}.focus,::ng-deep .w-table-styles .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box.p-focus{box-shadow:0 0 8px #00a6e980}.hover{border-radius:8px;border:1px solid #00b2eb}.button-large-typography{font-size:20px;line-height:24px;font-weight:700}.button-medium-typography{font-size:16px;line-height:16px;font-weight:700}.button-small-typography{font-size:12px;line-height:16px;font-weight:700}.button-text-typography,.input-generic-label{font-size:14px;line-height:16px;font-weight:700}.input-generic-placeholder{font-size:16px;line-height:24px;font-weight:600;color:#9aa0a6!important;opacity:unset!important}.input-generic{font-size:16px;line-height:24px;font-weight:600}.input-generic-placeholder-small{padding:8px 12px 12px;color:#9aa0a6!important}.input-generic-valid{border-radius:8px;border:1px solid #B3FFD3}.input-generic-valid-focus{border-radius:8px;border:1px solid #B3FFD3!important;box-shadow:0 0 8px #46ff9b80!important;padding-left:16px}.input-generic-warning{border-radius:8px;border:1px solid #FFECB8!important}.input-generic-warning-focus{border-radius:8px;border:1px solid #FFECB8!important;box-shadow:0 0 8px #ffcd4680!important;padding-left:16px}.input-generic-error-focus{border-radius:8px;border:1px solid #FFBDBD!important;box-shadow:0 0 8px #ff555580!important;padding-left:16px}.input-generic-error{border-radius:8px;border:1px solid #FFBDBD}.tag-generic{font-size:14px;line-height:16px;font-weight:700}.tag-generic-small{font-size:12px;line-height:16px;font-weight:700}.toggle-small-typography{font-size:12px;line-height:16px;font-weight:600}.w-generic-input-no-label-height{height:36px}.table-container{padding:16px 20px 20px;background-color:#fff;border-radius:8px;box-shadow:0 4px 8px #0000001a}.showing-per-page{color:#9aa0a6;font-weight:600}::ng-deep .w-table-styles .p-paginator-bottom>span:first-child{margin-right:auto}::ng-deep .w-table-styles .p-paginator .p-paginator-pages .p-paginator-page{color:#9aa0a6;border-radius:8px;height:32px;width:32px;max-width:32px;min-width:32px}::ng-deep .w-table-styles .p-paginator{border-width:0;padding:16px 20px 0}::ng-deep .w-table-styles .p-paginator .p-paginator-pages .p-paginator-page.p-highlight{background-color:#d6f2ff;color:#2e3134;height:32px;width:32px;max-width:32px;min-width:32px}::ng-deep .w-table-styles .p-paginator .p-paginator-pages .p-paginator-page:not(.p-highlight):hover{background:#f1f5f9;border-color:transparent;color:#2e3134;height:32px;width:32px;max-width:32px;min-width:32px}::ng-deep .w-table-styles .p-paginator .p-paginator-current{color:#9aa0a6;padding:0}::ng-deep .w-table-styles .p-datatable .p-sortable-column .p-sortable-column-icon{color:#000;margin-left:.5rem}::ng-deep .w-table-styles .p-datatable .p-sortable-column.p-highlight:hover .p-sortable-column-icon{color:#3c4043}::ng-deep .w-table-styles .p-datatable .p-sortable-column:focus{box-shadow:inset 0 0;outline:0 none}::ng-deep .w-table-styles .p-datatable .p-datatable-thead>tr>th{color:#000;background:#ffffff}::ng-deep .w-table-styles .p-datatable.p-datatable-striped .p-datatable-tbody>tr:nth-child(even){background:#f8f9fa}::ng-deep .w-table-styles .p-datatable .p-paginator-bottom{justify-content:normal!important}::ng-deep .w-table-styles .p-datatable .p-paginator-bottom>button{color:#9aa0a6}::ng-deep .w-table-styles .p-datatable .p-datatable-header{background:#ffffff;border-width:0px;padding:0 0 16px!important;font-weight:600}::ng-deep .w-table-styles p-inputnumber,.p-inputnumber{height:32px}::ng-deep .w-table-styles .p-inputnumber-buttons-horizontal .p-button.p-inputnumber-button-up{width:32px}::ng-deep .w-table-styles .p-inputnumber-buttons-horizontal .p-button.p-inputnumber-button-down{width:32px}::ng-deep .wapp-table-styles .showing-per-page .p-button.p-inputnumber-button-up{border-radius:8px;border-top-left-radius:0!important;border-bottom-left-radius:0!important;border-top-right-radius:8px;border-bottom-right-radius:8px}::ng-deep .wapp-table-styles .showing-per-page .p-button.p-inputnumber-button-down{border-radius:8px;border-top-right-radius:0!important;border-bottom-right-radius:0!important;border-top-left-radius:8px;border-bottom-left-radius:8px}::ng-deep .w-table-styles .p-inputnumber-buttons-horizontal .p-inputnumber-input{border-width:1px 0px 1px 0px;border-color:#e8eaed;color:#dadce0;text-align:center}::ng-deep .w-table-styles .p-button.p-button-outlined{color:#e8eaed;border-width:1px}::ng-deep .w-table-styles .p-datatable .p-datatable-tbody>tr>td{columns:#2E3134;font-weight:600;border:1px solid #e2e8f0;border-width:0 0 1px 0;padding:4px 8px 3px}::ng-deep .w-table-styles .p-checkbox{height:16px;width:16px;border-width:1px}::ng-deep .w-table-styles .p-checkbox .p-checkbox-box{height:16px;width:16px;border-radius:4px;border:1px solid #dadce0}::ng-deep .w-table-styles .p-checkbox .p-checkbox-box .p-checkbox-icon{font-size:8px;font-weight:700}::ng-deep .w-table-styles .p-checkbox .p-checkbox-box.p-highlight{border-color:#00b2eb;background:#00b2eb}::ng-deep .w-table-styles .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box:hover{background-color:#dadce0;border:1px solid #dadce0}::ng-deep .w-table-styles .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box.p-focus{background-color:#00b2eb;border:1px solid #d6f2ff}::ng-deep .w-table-styles .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box:not(.p-highlight).p-focus{background-color:#dadce0;border:1px solid #dadce0}::ng-deep .w-table-styles .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box.p-highlight:hover{border-color:#00b2eb;background:#00b2eb}::ng-deep .w-table-styles .p-inputtext:enabled:focus{outline:0 none;outline-offset:0;box-shadow:0 0 #000;background-color:#f1f3f4;border-color:#f1f3f4;color:#000}::ng-deep .w-table-styles .p-inputtext:enabled:hover{border-color:#e8eaed}::ng-deep .w-table-styles .p-button.p-button-outlined:enabled:hover{color:#e8eaed;border:1px solid;background-color:#f1f3f4}::ng-deep .w-table-styles .p-button.p-button-outlined:enabled:hover>.p-button-icon{color:#2e3134}::ng-deep .w-table-styles .p-button.p-button-outlined>.pi{font-size:.7rem;font-weight:bolder}::ng-deep .w-table-styles .p-datatable .p-datatable-thead>tr>th:hover{color:#3c4043;background:#ffffff}.element-image-width{max-height:32px;width:auto;vertical-align:middle}.height-input{height:32px}.w-input{border-radius:8px;border-width:1px;border-color:#e8eaed;font-size:16px;line-height:5px;font-weight:100;gap:16px}::-webkit-input-placeholder{font-size:1rem;line-height:1.1428571429rem;font-weight:600;color:#9aa0a6}::-moz-placeholder{font-size:1rem;line-height:1.1428571429rem;font-weight:600;color:#9aa0a6}:-ms-input-placeholder{font-size:1rem;line-height:1.1428571429rem;font-weight:600;color:#9aa0a6}:-moz-placeholder{font-size:1rem;line-height:1.1428571429rem;font-weight:600;color:#9aa0a6}.w-input:hover{border:1px solid #1f5b72!important}.w-input:focus{box-shadow:0 0 3px 3px #d6f2ff!important;background-color:transparent!important}.pi-search{left:.75rem;color:#bdc1c6!important}.image-header{text-align:center!important}::ng-deep .w-table-styles .p-avatar img{width:32px!important;height:32px!important}:host ::ng-deep .w-table-styles .p-avatar{border:1px solid #e8eaed}::ng-deep .p-datatable .p-datatable-thead>tr>th{padding:16px 8px;border:1px solid #e8eaed;border-width:0px 0px 1px 0px;font-weight:700;color:#000;background:#ffffff;transition:box-shadow .2s}::ng-deep .p-datatable .p-datatable-tbody>tr{color:#9aa0a6}::ng-deep .p-sortable-column:not(.p-highlight):hover .p-sortable-column-icon{color:#3c4043}\n"] }]
|
|
198
|
+
args: [{ selector: 'w-table', providers: [ConfirmationService], template: "<ng-content select=\".filter-panel\"></ng-content>\r\n<div *ngIf=\"wappTableObject\" [class.table-container]=\"wappTableObject.tableContainer\">\r\n <p-table class=\"w-table-styles\" \r\n *ngIf=\"!loading; else loadingTable\" #table \r\n [value]=\"elements\" dataKey=\"{{wappTableObject.identificator}}\" \r\n [paginator]=\"wappTableObject.hasPaginator\"\r\n [selection]=\"selectedElements\" (selectionChange)=\"onSelectionChange($event)\"\r\n [selectAll]=\"selectAll\" (selectAllChange)=\"onSelectAllChange($event)\"\r\n [totalRecords]=\"totalRecords\" [showCurrentPageReport]=\"true\" \r\n [rows]=\"rowsPerPage\"\r\n [currentPageReportTemplate]=\"wappTableObject.currentPageReportTemplate ? wappTableObject.currentPageReportTemplate + ' ' + rowsPerPage + ' de ' + totalRecords! : 'Showing ' + rowsPerPage + ' of ' + totalRecords!\"\r\n [globalFilterFields]=\"wappTableObject.globalFilterFields!\" responsiveLayout=\"scroll\"\r\n [rowHover]=\"true\" [tableStyle]=\"{'min-width': wappTableObject.tableMinWidth!}\"\r\n styleClass=\"p-datatable-striped\">\r\n <ng-template pTemplate=\"caption\" *ngIf=\"wappTableObject?.hasClearButton || wappTableObject.hasGlobalSearch\">\r\n <span class=\"flex align-items-center table-paginator p-0\">\r\n <span *ngIf=\"wappTableObject.hasTotalPagingSelector\" class=\"showing-per-page\"> {{wappTableObject.currentPageReportTemplate}} </span>\r\n <p-inputNumber *ngIf=\"wappTableObject.hasTotalPagingSelector\"\r\n class=\"pl-2 showing-per-page\" [size]=\"1\" [(ngModel)]=\"rowsPerPage\" [showButtons]=\"true\" \r\n buttonLayout=\"horizontal\" inputId=\"horizontal\" spinnerMode=\"horizontal\" [step]=\"1\" [min]=\"1\" [max]=\"totalRecords!\"\r\n decrementButtonClass=\"p-button-outlined\" \r\n incrementButtonClass=\"p-button-outlined\" \r\n incrementButtonIcon=\"pi pi-plus\" \r\n decrementButtonIcon=\"pi pi-minus\" \r\n mode=\"decimal\">\r\n </p-inputNumber>\r\n <span *ngIf=\"wappTableObject?.hasGlobalSearch\" class=\"p-input-icon-left ml-auto\">\r\n <i class=\"pi pi-search\"></i>\r\n <input pInputText type=\"text\" #filter (input)=\"onGlobalFilter(table, $event)\" \r\n [placeholder]=\"wappTableObject.searchPlaceholder\" class=\"w-full height-input w-input\"/>\r\n </span>\r\n </span>\r\n </ng-template>\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th *ngIf=\"wappTableObject.hasCheckbox\" \r\n [ngClass]=\"wappTableObject.columnAlign ? getTableColumnAlignClass(wappTableObject.columnAlign[0]) : 'text-left'\">\r\n <p-tableHeaderCheckbox></p-tableHeaderCheckbox>\r\n </th>\r\n <ng-container *ngIf=\"!wappTableObject.hasSortableColumns; else sortableColumns\">\r\n <th *ngFor=\"let header of wappTableObject?.headers; index as i\" [class]=\"header == ('Imagen' || 'Image') ? 'image-header': ''\" \r\n [ngClass]=\"wappTableObject.columnAlign ? getTableColumnAlignClass(wappTableObject.columnAlign[wappTableObject.hasCheckbox ? i+1 : i]) : getTableColumnAlignClassDefaultByColumnType(wappTableObject.columnTypes[wappTableObject.hasCheckbox ? i+1 : i])\">\r\n {{header}}\r\n </th>\r\n </ng-container>\r\n <ng-template #sortableColumns>\r\n <ng-template ngFor let-filterType [ngForOf]=\"wappTableObject.headers\" let-i=\"index\"> \r\n <th [pSortableColumn]=\"wappTableObject.sortableNames[i]\" \r\n [class]=\"wappTableObject.headers[i] == ('Imagen' || 'Image') ? 'image-header': ''\" \r\n [ngClass]=\"wappTableObject.columnAlign ? getTableColumnAlignClass(wappTableObject.columnAlign[wappTableObject.hasCheckbox ? i+1 : i]) : getTableColumnAlignClassDefaultByColumnType(wappTableObject.columnTypes[wappTableObject.hasCheckbox ? i+1 : i])\">\r\n {{wappTableObject.headers[i]}} \r\n <p-sortIcon *ngIf=\"wappTableObject.sortableNames[i] != null\" [field]=\"wappTableObject.sortableNames[i]\"></p-sortIcon>\r\n </th>\r\n </ng-template>\r\n </ng-template>\r\n <th *ngIf=\"wappTableObject.hasDeleteButton || wappTableObject.hasEditButton\"></th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-element>\r\n <tr [ngClass]=\"wappTableObject.hasSelectableRow ? 'p-selectable-row' : ''\" (click)=\"wappTableObject.hasSelectableRow ? onElement(element) : ''\">\r\n <ng-template ngFor let-columnType [ngForOf]=\"wappTableObject.columnTypes!\" let-i=\"index\">\r\n <td *ngIf=\"columnType == tableColumnTypes?.Checkbox! && wappTableObject.hasCheckbox\" [style]=\"'width: '+wappTableObject.columnWidths![i]\"\r\n [ngClass]=\"wappTableObject.columnAlign ? getTableColumnAlignClass(wappTableObject.columnAlign[i]) : 'text-center'\">\r\n <div *ngIf=\"wappTableObject.disableCheckbox; else activeCheckbox\">\r\n <p-tableCheckbox [value]=\"element\" [disabled]=\"readProperty(element, wappTableObject.disableCheckbox)\"></p-tableCheckbox>\r\n </div>\r\n <ng-template #activeCheckbox>\r\n <p-tableCheckbox [value]=\"element\"></p-tableCheckbox>\r\n </ng-template>\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Image\" [style]=\"'width: '+wappTableObject.columnWidths[i]\" \r\n [ngClass]=\"wappTableObject.columnAlign ? getTableColumnAlignClass(wappTableObject.columnAlign[i]) : 'text-center'\">\r\n <img *ngIf=\"readProperty(element, wappTableObject.columns[i])\" \r\n [src]=\"readProperty(element, wappTableObject.columns[i])\" \r\n class=\"element-image-width\"/>\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Text\" [style]=\"'width: '+wappTableObject.columnWidths[i]\" \r\n [ngClass]=\"wappTableObject.columnAlign ? getTableColumnAlignClass(wappTableObject.columnAlign[i]) : 'text-left'\">\r\n {{ readProperty(element, wappTableObject.columns[i]) }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Number\" [style]=\"'width: '+wappTableObject.columnWidths[i]\" \r\n [ngClass]=\"wappTableObject.columnAlign ? getTableColumnAlignClass(wappTableObject.columnAlign[i]) : 'text-right'\">\r\n {{ readProperty(element, wappTableObject.columns[i]) }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Currency\" [style]=\"'width: '+wappTableObject.columnWidths[i]\" \r\n [ngClass]=\"wappTableObject.columnAlign ? getTableColumnAlignClass(wappTableObject.columnAlign[i]) : 'text-right'\">\r\n {{ readProperty(element, wappTableObject.columns[i]) | currency }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Badge\" [style]=\"'width: '+wappTableObject.columnWidths[i]\" \r\n [ngClass]=\"wappTableObject.columnAlign ? getTableColumnAlignClass(wappTableObject.columnAlign[i]) : 'text-center'\">\r\n <w-badge [label]=\"readProperty(element, wappTableObject.columns[i])\" [color]=\"'info'\"></w-badge> \r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Boolean\" \r\n [ngClass]=\"wappTableObject.columnAlign ? getTableColumnAlignClass(wappTableObject.columnAlign[i]) : 'text-center'\">\r\n <i class=\"pi\" [ngClass]=\"getBooleanColumnClass(i, readProperty(element, wappTableObject.columns[i]))\"></i>\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.Date\" \r\n [ngClass]=\"wappTableObject.columnAlign ? getTableColumnAlignClass(wappTableObject.columnAlign[i]) : 'text-left'\">\r\n {{ readProperty(element, wappTableObject.columns[i]) | wappDate }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.ShortDate\" \r\n [ngClass]=\"wappTableObject.columnAlign ? getTableColumnAlignClass(wappTableObject.columnAlign[i]) : 'text-left'\">\r\n {{ readProperty(element, wappTableObject.columns[i]) | wappDate : wappDateFormat.d }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.LongDate\" \r\n [ngClass]=\"wappTableObject.columnAlign ? getTableColumnAlignClass(wappTableObject.columnAlign[i]) : 'text-left'\">\r\n {{ readProperty(element, wappTableObject.columns[i]) | wappDate : wappDateFormat.D }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.GeneralDateTimeShortTime\" \r\n [ngClass]=\"wappTableObject.columnAlign ? getTableColumnAlignClass(wappTableObject.columnAlign[i]) : 'text-left'\">\r\n {{ readProperty(element, wappTableObject.columns[i]) | wappDate : wappDateFormat.g }}\r\n </td>\r\n <td *ngIf=\"columnType == tableColumnTypes.GeneralDateTimeLongTime\" \r\n [ngClass]=\"wappTableObject.columnAlign ? getTableColumnAlignClass(wappTableObject.columnAlign[i]) : 'text-left'\">\r\n {{ readProperty(element, wappTableObject.columns[i]) | wappDate : wappDateFormat.G }}\r\n </td>\r\n </ng-template>\r\n <td *ngIf=\"wappTableObject?.hasViewButton || wappTableObject.customButtonConfig?.hasCustomButton || wappTableObject?.hasEditButton || wappTableObject?.hasCopyButton || wappTableObject?.hasDeleteButton\">\r\n <div class=\"flex justify-content-end\">\r\n <button *ngIf=\"wappTableObject?.hasViewButton\" \r\n [pTooltip]=\"wappTableObject.buttonTooltips?.viewTooltip!\"\r\n [tooltipPosition]=\"wappTableObject.buttonTooltips?.position!\"\r\n pButton pRipple (click)=\"viewElement(element)\" \r\n icon=\"pi pi-eye\" class=\"p-button-text p-button-info mr-2\">\r\n </button>\r\n <button *ngIf=\"wappTableObject.customButtonConfig?.hasCustomButton\"\r\n pButton pRipple (click)=\"customElement(element)\"\r\n [pTooltip]=\"wappTableObject.buttonTooltips?.customTooltip!\"\r\n [tooltipPosition]=\"wappTableObject.buttonTooltips?.position!\"\r\n [icon]=\"wappTableObject.customButtonConfig?.icon!\"\r\n class=\"p-button-text p-button-info mr-2\">\r\n </button>\r\n <button *ngIf=\"wappTableObject?.hasEditButton && !wappTableObject.disableEditProperty\" \r\n [pTooltip]=\"wappTableObject.buttonTooltips?.editTooltip!\"\r\n [tooltipPosition]=\"wappTableObject.buttonTooltips?.position!\"\r\n pButton pRipple (click)=\"editElement(element)\"\r\n icon=\"pi pi-pencil\" class=\"p-button-text p-button-success mr-2\">\r\n </button>\r\n <button *ngIf=\"wappTableObject.disableEditProperty\" \r\n pButton pRipple (click)=\"editElement(element)\" [disabled]=\"readProperty(element, wappTableObject.disableEditProperty)\"\r\n [pTooltip]=\"wappTableObject.buttonTooltips?.editTooltip!\"\r\n [tooltipPosition]=\"wappTableObject.buttonTooltips?.position!\"\r\n icon=\"pi pi-pencil\" class=\"p-button-text p-button-success mr-2\">\r\n </button>\r\n <button *ngIf=\"wappTableObject?.hasCopyButton\" \r\n pButton pRipple (click)=\"confirmCopy($event, element)\" \r\n [pTooltip]=\"wappTableObject.buttonTooltips?.copyTooltip!\"\r\n [tooltipPosition]=\"wappTableObject.buttonTooltips?.position!\"\r\n icon=\"pi pi-copy\" class=\"p-button-text p-button-help mr-2\">\r\n </button>\r\n <span *ngIf=\"wappTableObject?.hasDeleteButton\">\r\n <button *ngIf=\"wappTableObject.disableDeleteProperty; else noDisableDelete\" \r\n pButton pRipple (click)=\"confirmDelete($event, element)\" [disabled]=\"readProperty(element, wappTableObject.disableDeleteProperty)\"\r\n [pTooltip]=\"wappTableObject.buttonTooltips?.deleteTooltip!\"\r\n [tooltipPosition]=\"wappTableObject.buttonTooltips?.position!\"\r\n icon=\"pi pi-trash\" class=\"p-button-text p-button-danger\">\r\n </button>\r\n <ng-template #noDisableDelete>\r\n <button *ngIf=\"!wappTableObject?.disableDelete && !wappTableObject.disableDeleteProperty\" \r\n [pTooltip]=\"wappTableObject.buttonTooltips?.deleteTooltip!\"\r\n [tooltipPosition]=\"wappTableObject.buttonTooltips?.position!\"\r\n pButton pRipple (click)=\"confirmDelete($event, element)\"\r\n icon=\"pi pi-trash\" class=\"p-button-text p-button-danger\">\r\n </button>\r\n </ng-template>\r\n </span>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td colspan=\"8\">No elements.</td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"loadingbody\">\r\n <tr>\r\n <td colspan=\"8\">Loading elements.</td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n \r\n <ng-template #loadingTable>\r\n <p-table class=\"w-table-styles\" [value]=\"tableSkeletons\" responsiveLayout=\"scroll\" [paginator]=\"wappTableObject.hasPaginator\" [rows]=\"rowsPerPage\" [totalRecords]=\"totalRecords\"\r\n [showCurrentPageReport]=\"true\" \r\n [currentPageReportTemplate]=\"wappTableObject.currentPageReportTemplate ? wappTableObject.currentPageReportTemplate + ' ' + rowsPerPage + ' de ' + totalRecords : 'Showing ' + rowsPerPage + ' of ' + totalRecords\"\r\n styleClass=\"p-datatable-striped\">\r\n <ng-template *ngIf=\"wappTableObject?.hasClearButton || wappTableObject.hasGlobalSearch\" pTemplate=\"caption\">\r\n <span class=\"flex align-items-center table-paginator p-0\">\r\n <!-- <button *ngIf=\"wappTableObject.hasClearButton\" pButton label=\"Clear\" class=\"p-button-outlined\" icon=\"pi pi-filter-slash\"></button> -->\r\n <span *ngIf=\"wappTableObject.hasTotalPagingSelector\" class=\"showing-per-page\"> {{wappTableObject.currentPageReportTemplate}} </span>\r\n <p-inputNumber *ngIf=\"wappTableObject.hasTotalPagingSelector\"\r\n class=\"pl-2 showing-per-page\" [size]=\"1\" [(ngModel)]=\"rowsPerPage\" [showButtons]=\"true\" \r\n buttonLayout=\"horizontal\" inputId=\"horizontal\" spinnerMode=\"horizontal\" [step]=\"1\" [min]=\"1\" [max]=\"totalRecords\"\r\n decrementButtonClass=\"p-button-outlined\" \r\n incrementButtonClass=\"p-button-outlined\" \r\n incrementButtonIcon=\"pi pi-plus\" \r\n decrementButtonIcon=\"pi pi-minus\" \r\n mode=\"decimal\">\r\n </p-inputNumber>\r\n <span *ngIf=\"wappTableObject?.hasGlobalSearch\" class=\"p-input-icon-left ml-auto\">\r\n <i class=\"pi pi-search\"></i>\r\n <input pInputText type=\"text\" #filter \r\n [placeholder]=\"wappTableObject.searchPlaceholder\" class=\"w-full height-input w-input\"/>\r\n </span>\r\n </span>\r\n </ng-template>\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th *ngIf=\"!wappTableObject.hasColumnFilters && wappTableObject.hasCheckbox; else selectAllCheckbox\">\r\n <p-tableHeaderCheckbox></p-tableHeaderCheckbox>\r\n </th>\r\n <ng-template #selectAllCheckbox><th></th></ng-template>\r\n <th *ngFor=\"let header of wappTableObject?.headers\">\r\n {{header}}\r\n </th>\r\n <th *ngIf=\"wappTableObject.hasDeleteButton || wappTableObject.hasEditButton\"></th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\">\r\n <tr height=\"70px\">\r\n <td *ngFor=\"let item of wappTableObject.columnTypes\" [style.width]=\"item == tableColumnTypes.Checkbox ? '8rem' : ''\" >\r\n <p-tableCheckbox *ngIf=\"item == tableColumnTypes.Checkbox && wappTableObject.hasCheckbox\"></p-tableCheckbox>\r\n <p-skeleton *ngIf=\"item != tableColumnTypes.Checkbox\"></p-skeleton>\r\n </td>\r\n <td *ngIf=\"wappTableObject.hasEditButton || wappTableObject.hasDeleteButton\">\r\n <div class=\"flex justify-content-end\">\r\n <button *ngIf=\"wappTableObject?.hasViewButton\" \r\n pButton pRipple \r\n [pTooltip]=\"wappTableObject.buttonTooltips?.viewTooltip!\"\r\n icon=\"pi pi-eye\" class=\"p-button-text p-button-info mr-2\">\r\n </button>\r\n <button *ngIf=\"wappTableObject.customButtonConfig?.hasCustomButton\"\r\n pButton pRipple\r\n [pTooltip]=\"wappTableObject.buttonTooltips?.customTooltip!\"\r\n [icon]=\"wappTableObject.customButtonConfig?.icon!\"\r\n class=\"p-button-text p-button-info mr-2\">\r\n </button>\r\n <button *ngIf=\"wappTableObject?.hasEditButton\" \r\n pButton pRipple\r\n [pTooltip]=\"wappTableObject.buttonTooltips?.editTooltip!\"\r\n icon=\"pi pi-pencil\" class=\"p-button-text p-button-success mr-2\">\r\n </button>\r\n <button *ngIf=\"wappTableObject?.hasCopyButton\" \r\n pButton pRipple \r\n [pTooltip]=\"wappTableObject.buttonTooltips?.copyTooltip!\"\r\n icon=\"pi pi-copy\" class=\"p-button-text p-button-help mr-2\">\r\n </button>\r\n <button *ngIf=\"wappTableObject?.hasDeleteButton\" \r\n pButton pRipple\r\n [pTooltip]=\"wappTableObject.buttonTooltips?.deleteTooltip!\"\r\n icon=\"pi pi-trash\" class=\"p-button-text p-button-danger\">\r\n </button>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </ng-template>\r\n</div>\r\n<p-confirmPopup></p-confirmPopup>", styles: [".heading1{font-size:3.1428571429rem;line-height:3.4285714286rem;font-weight:700}.heading2{font-size:2.8571428571rem;line-height:3.1428571429rem;font-weight:700}.heading3{font-size:2.5714285714rem;line-height:2.8571428571rem;font-weight:700}.heading4{font-size:2.2857142857rem;line-height:2.5714285714rem;font-weight:700}.heading5{font-size:2rem;line-height:2.2857142857rem;font-weight:700}.heading6{font-size:1.7142857143rem;line-height:2rem;font-weight:700}.subtitle1{font-size:1.4285714286rem;line-height:1.7142857143rem;font-weight:700}.subtitle2{font-size:1.1428571429rem;line-height:1.4285714286rem;font-weight:700}.body,.input-generic-placeholder-small,.input-generic-small{font-size:1rem;line-height:1.1428571429rem;font-weight:600}.caption{font-size:.8571428571rem;line-height:1.1428571429rem;font-weight:600}.select-option-text{font-size:16;line-height:24px;font-weight:600}.icon-small-size{font-size:8px}.icon-small-x-size{font-size:12px}.icon-medium-size{font-size:16px}.icon-large-size{font-size:24px}.spacingXXS{padding:4px}.spacingXSM{padding:6px}.spacingXS{padding:8px}.spacingS{padding:12px}.spacingM{padding:16px}.spacingL{padding:20px}.spacingXL{padding:24px}.spacingXXL{padding:28px}.spacingXXXL{padding:32px}.focus,::ng-deep .w-table-styles .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box.p-focus{box-shadow:0 0 8px #00a6e980}.hover{border-radius:8px;border:1px solid #00b2eb}.button-large-typography{font-size:20px;line-height:24px;font-weight:700}.button-medium-typography{font-size:16px;line-height:16px;font-weight:700}.button-small-typography{font-size:12px;line-height:16px;font-weight:700}.button-text-typography,.input-generic-label{font-size:14px;line-height:16px;font-weight:700}.input-generic-placeholder{font-size:16px;line-height:24px;font-weight:600;color:#9aa0a6!important;opacity:unset!important}.input-generic{font-size:16px;line-height:24px;font-weight:600}.input-generic-placeholder-small{padding:8px 12px 12px;color:#9aa0a6!important}.input-generic-valid{border-radius:8px;border:1px solid #B3FFD3}.input-generic-valid-focus{border-radius:8px;border:1px solid #B3FFD3!important;box-shadow:0 0 8px #46ff9b80!important;padding-left:16px}.input-generic-warning{border-radius:8px;border:1px solid #FFECB8!important}.input-generic-warning-focus{border-radius:8px;border:1px solid #FFECB8!important;box-shadow:0 0 8px #ffcd4680!important;padding-left:16px}.input-generic-error-focus{border-radius:8px;border:1px solid #FFBDBD!important;box-shadow:0 0 8px #ff555580!important;padding-left:16px}.input-generic-error{border-radius:8px;border:1px solid #FFBDBD}.tag-generic{font-size:14px;line-height:16px;font-weight:700}.tag-generic-small{font-size:12px;line-height:16px;font-weight:700}.toggle-small-typography{font-size:12px;line-height:16px;font-weight:600}.w-generic-input-no-label-height{height:36px}.table-container{padding:16px 20px 20px;background-color:#fff;border-radius:8px;box-shadow:0 4px 8px #0000001a}.showing-per-page{color:#9aa0a6;font-weight:600}::ng-deep .w-table-styles .p-paginator-bottom>span:first-child{margin-right:auto}::ng-deep .w-table-styles .p-paginator .p-paginator-pages .p-paginator-page{color:#9aa0a6;border-radius:8px;height:32px;width:32px;max-width:32px;min-width:32px}::ng-deep .w-table-styles .p-paginator{border-width:0;padding:16px 20px 0}::ng-deep .w-table-styles .p-paginator .p-paginator-pages .p-paginator-page.p-highlight{background-color:#d6f2ff;color:#2e3134;height:32px;width:32px;max-width:32px;min-width:32px}::ng-deep .w-table-styles .p-paginator .p-paginator-pages .p-paginator-page:not(.p-highlight):hover{background:#f1f5f9;border-color:transparent;color:#2e3134;height:32px;width:32px;max-width:32px;min-width:32px}::ng-deep .w-table-styles .p-paginator .p-paginator-current{color:#9aa0a6;padding:0}::ng-deep .w-table-styles .p-datatable .p-sortable-column .p-sortable-column-icon{color:#000;margin-left:.5rem}::ng-deep .w-table-styles .p-datatable .p-sortable-column.p-highlight:hover .p-sortable-column-icon{color:#3c4043}::ng-deep .w-table-styles .p-datatable .p-sortable-column:focus{box-shadow:inset 0 0;outline:0 none}::ng-deep .w-table-styles .p-datatable .p-datatable-thead>tr>th{color:#000;background:#ffffff}::ng-deep .w-table-styles .p-datatable.p-datatable-striped .p-datatable-tbody>tr:nth-child(even){background:#f8f9fa}::ng-deep .w-table-styles .p-datatable .p-paginator-bottom{justify-content:normal!important}::ng-deep .w-table-styles .p-datatable .p-paginator-bottom>button{color:#9aa0a6}::ng-deep .w-table-styles .p-datatable .p-datatable-header{background:#ffffff;border-width:0px;padding:0 0 16px!important;font-weight:600}::ng-deep .w-table-styles p-inputnumber,.p-inputnumber{height:32px}::ng-deep .w-table-styles .p-inputnumber-buttons-horizontal .p-button.p-inputnumber-button-up{width:32px}::ng-deep .w-table-styles .p-inputnumber-buttons-horizontal .p-button.p-inputnumber-button-down{width:32px}::ng-deep .wapp-table-styles .showing-per-page .p-button.p-inputnumber-button-up{border-radius:8px;border-top-left-radius:0!important;border-bottom-left-radius:0!important;border-top-right-radius:8px;border-bottom-right-radius:8px}::ng-deep .wapp-table-styles .showing-per-page .p-button.p-inputnumber-button-down{border-radius:8px;border-top-right-radius:0!important;border-bottom-right-radius:0!important;border-top-left-radius:8px;border-bottom-left-radius:8px}::ng-deep .w-table-styles .p-inputnumber-buttons-horizontal .p-inputnumber-input{border-width:1px 0px 1px 0px;border-color:#e8eaed;color:#dadce0;text-align:center}::ng-deep .w-table-styles .p-button.p-button-outlined{color:#e8eaed;border-width:1px}::ng-deep .w-table-styles .p-datatable .p-datatable-tbody>tr>td{columns:#2E3134;font-weight:600;border:1px solid #e2e8f0;border-width:0 0 1px 0;padding:4px 8px 3px}::ng-deep .w-table-styles .p-checkbox{height:16px;width:16px;border-width:1px}::ng-deep .w-table-styles .p-checkbox .p-checkbox-box{height:16px;width:16px;border-radius:4px;border:1px solid #dadce0}::ng-deep .w-table-styles .p-checkbox .p-checkbox-box .p-checkbox-icon{font-size:8px;font-weight:700}::ng-deep .w-table-styles .p-checkbox .p-checkbox-box.p-highlight{border-color:#00b2eb;background:#00b2eb}::ng-deep .w-table-styles .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box:hover{background-color:#dadce0;border:1px solid #dadce0}::ng-deep .w-table-styles .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box.p-focus{background-color:#00b2eb;border:1px solid #d6f2ff}::ng-deep .w-table-styles .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box:not(.p-highlight).p-focus{background-color:#dadce0;border:1px solid #dadce0}::ng-deep .w-table-styles .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box.p-highlight:hover{border-color:#00b2eb;background:#00b2eb}::ng-deep .w-table-styles .p-inputtext:enabled:focus{outline:0 none;outline-offset:0;box-shadow:0 0 #000;background-color:#f1f3f4;border-color:#f1f3f4;color:#000}::ng-deep .w-table-styles .p-inputtext:enabled:hover{border-color:#e8eaed}::ng-deep .w-table-styles .p-button.p-button-outlined:enabled:hover{color:#e8eaed;border:1px solid;background-color:#f1f3f4}::ng-deep .w-table-styles .p-button.p-button-outlined:enabled:hover>.p-button-icon{color:#2e3134}::ng-deep .w-table-styles .p-button.p-button-outlined>.pi{font-size:.7rem;font-weight:bolder}::ng-deep .w-table-styles .p-datatable .p-datatable-thead>tr>th:hover{color:#3c4043;background:#ffffff}.element-image-width{max-height:32px;width:auto;vertical-align:middle}.height-input{height:32px}.w-input{border-radius:8px;border-width:1px;border-color:#e8eaed;font-size:16px;line-height:5px;font-weight:100;gap:16px}::-webkit-input-placeholder{font-size:1rem;line-height:1.1428571429rem;font-weight:600;color:#9aa0a6}::-moz-placeholder{font-size:1rem;line-height:1.1428571429rem;font-weight:600;color:#9aa0a6}:-ms-input-placeholder{font-size:1rem;line-height:1.1428571429rem;font-weight:600;color:#9aa0a6}:-moz-placeholder{font-size:1rem;line-height:1.1428571429rem;font-weight:600;color:#9aa0a6}.w-input:hover{border:1px solid #1f5b72!important}.w-input:focus{box-shadow:0 0 3px 3px #d6f2ff!important;background-color:transparent!important}.pi-search{left:.75rem;color:#bdc1c6!important}.image-header{text-align:center!important}::ng-deep .w-table-styles .p-avatar img{width:32px!important;height:32px!important}:host ::ng-deep .w-table-styles .p-avatar{border:1px solid #e8eaed}::ng-deep .p-datatable .p-datatable-thead>tr>th{padding:16px 8px;border:1px solid #e8eaed;border-width:0px 0px 1px 0px;font-weight:700;color:#000;background:#ffffff;transition:box-shadow .2s}::ng-deep .p-datatable .p-datatable-tbody>tr{color:#9aa0a6}::ng-deep .p-sortable-column:not(.p-highlight):hover .p-sortable-column-icon{color:#3c4043}\n"] }]
|
|
187
199
|
}], ctorParameters: function () { return [{ type: i1.ConfirmationService }]; }, propDecorators: { elements: [{
|
|
188
200
|
type: Input,
|
|
189
201
|
args: ['elements']
|
|
@@ -224,4 +236,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
|
|
|
224
236
|
type: ViewChild,
|
|
225
237
|
args: ['table']
|
|
226
238
|
}] } });
|
|
227
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidy10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy93YXBwLWNvbXBvbmVudHMvc3JjL2xpYi90YWJsZXMvdy10YWJsZS93LXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3dhcHAtY29tcG9uZW50cy9zcmMvbGliL3RhYmxlcy93LXRhYmxlL3ctdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQWlCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoSSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFJbEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLGdCQUFnQixFQUFFLHlCQUF5QixFQUFFLE1BQU0saUNBQWlDLENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQVN0SCxNQUFNLE9BQU8sZUFBZTtJQW1DMUIsWUFDVSxtQkFBd0M7UUFBeEMsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQW5DbEQscUJBQWdCLEdBQVUsRUFBRSxDQUFDO1FBRTdCLHdCQUFtQixHQUFXLFFBQVEsQ0FBQTtRQUN0QyxjQUFTLEdBQVksS0FBSyxDQUFDO1FBQzNCLGtCQUFhLEdBQVcsRUFBRSxDQUFDO1FBRTNCLG1CQUFjLEdBQVEsQ0FBQyxFQUFDLElBQUksRUFBRSxFQUFFLEVBQUMsRUFBRSxFQUFDLElBQUksRUFBRSxFQUFFLEVBQUMsRUFBRSxFQUFDLElBQUksRUFBRSxFQUFFLEVBQUMsRUFBRSxFQUFDLElBQUksRUFBRSxFQUFFLEVBQUMsQ0FBQyxDQUFDO1FBRS9ELGtCQUFhLEdBQVcsQ0FBQyxDQUFDO1FBV1osZ0JBQVcsR0FBVyxDQUFDLENBQUM7UUFDNUIsWUFBTyxHQUFZLElBQUksQ0FBQztRQUdmLG9CQUFl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QyxvQkFBb0I7Z0JBRVAsTUFBTTtzQkFBMUIsU0FBUzt1QkFBQyxRQUFRO2dCQUNDLFNBQVM7c0JBQTVCLFNBQVM7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbmZpcm1hdGlvblNlcnZpY2UgfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IER5bmFtaWNEaWFsb2dSZWYgfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xyXG5pbXBvcnQgeyBUYWJsZSB9IGZyb20gJ3ByaW1lbmcvdGFibGUnO1xyXG5pbXBvcnQgeyBXYXBwVGFibGUgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL3dhcHAtdGFibGUubW9kZWwnO1xyXG5pbXBvcnQgeyBUYWJsZUNvbHVtbkZpbHRlclR5cGVzLCBUYWJsZUNvbHVtblR5cGVzLCBXYXBwVGFibGVDb2x1bW5BbGlnblR5cGVzIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9lbnVtcy5tb2RlbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3ctdGFibGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi93LXRhYmxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi93LXRhYmxlLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbQ29uZmlybWF0aW9uU2VydmljZV1cclxuXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBXVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlc3tcclxuICBzZWxlY3RlZEVsZW1lbnRzOiBhbnlbXSA9IFtdO1xyXG4gIHRyYW5zbGF0aW9uczogYW55O1xyXG4gIHRyYW5zbGF0ZU9iamVjdE5hbWU6IHN0cmluZyA9IFwib2JqZWN0XCJcclxuICBzZWxlY3RBbGw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICB0YWJsZU1pbldpZHRoOiBudW1iZXIgPSA3MDtcclxuXHJcbiAgdGFibGVTa2VsZXRvbnM6IGFueSA9IFt7bmFtZTogJyd9LCB7bmFtZTogJyd9LCB7bmFtZTogJyd9LCB7bmFtZTogJyd9XTtcclxuICBcclxuICBwcml2YXRlIF90b3RhbFJlY29yZHM6IG51bWJlciA9IDA7XHJcblxyXG4gIHNldCB0b3RhbFJlY29yZHModmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy5fdG90YWxSZWNvcmRzID0gdmFsdWU7XHJcbiAgfSAgXHJcblxyXG4gIGdldCB0b3RhbFJlY29yZHMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fdG90YWxSZWNvcmRzO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KCdlbGVtZW50cycpIGVsZW1lbnRzITogYW55W107XHJcbiAgQElucHV0KCdyb3dzUGVyUGFnZScpIHJvd3NQZXJQYWdlOiBudW1iZXIgPSAwO1xyXG4gIEBJbnB1dCgnbG9hZGluZycpIGxvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgnd2FwcFRhYmxlT2JqZWN0Jykgd2FwcFRhYmxlT2JqZWN0ITogV2FwcFRhYmxlO1xyXG5cclxuICBAT3V0cHV0KCdvbkVsZW1lbnRTZWxlY3QnKSBvbkVsZW1lbnRTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCdvblZpZXdFbGVtZW50U2VsZWN0Jykgb25WaWV3RWxlbWVudFNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoJ29uQ29weUVsZW1lbnRTZWxlY3QnKSBvbkNvcHlFbGVtZW50U2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgnb25FZGl0RWxlbWVudFNlbGVjdCcpIG9uRWRpdEVsZW1lbnRTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCdvbkN1c3RvbUVsZW1lbnRTZWxlY3QnKSBvbkN1c3RvbUVsZW1lbnRTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCdvbkRlbGV0ZUVsZW1lbnRTZWxlY3QnKSBvbkRlbGV0ZUVsZW1lbnRTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xyXG4gIEBPdXRwdXQoJ29uTmV3RWxlbWVudFNlbGVjdCcpIG9uTmV3RWxlbWVudFNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnZmlsdGVyJykgZmlsdGVyITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCd0YWJsZScpIGRhdGFUYWJsZSE6IFRhYmxlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgY29uZmlybWF0aW9uU2VydmljZTogQ29uZmlybWF0aW9uU2VydmljZSxcclxuICApIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHsgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZihjaGFuZ2VzPy5bJ2VsZW1lbnRzJ10gJiYgY2hhbmdlcz8uWydlbGVtZW50cyddPy5jdXJyZW50VmFsdWUubGVuZ3RoICE9IDApIHtcclxuICAgICAgdGhpcy50b3RhbFJlY29yZHMgPSBjaGFuZ2VzPy5bJ2VsZW1lbnRzJ10/LmN1cnJlbnRWYWx1ZS5sZW5ndGg7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjcmVhdGUoKSB7XHJcbiAgICB0aGlzLm9uTmV3RWxlbWVudFNlbGVjdC5lbWl0KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgb25FbGVtZW50KGVsZW1lbnQ6IGFueSl7XHJcbiAgICB0aGlzLm9uRWxlbWVudFNlbGVjdC5lbWl0KGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgdmlld0VsZW1lbnQoZWxlbWVudDogYW55KXtcclxuICAgIHRoaXMub25WaWV3RWxlbWVudFNlbGVjdC5lbWl0KGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgZWRpdEVsZW1lbnQoZWxlbWVudDphbnkpIHtcclxuICAgIHRoaXMub25FZGl0RWxlbWVudFNlbGVjdC5lbWl0KGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgY3VzdG9tRWxlbWVudChlbGVtZW50OmFueSl7XHJcbiAgICB0aGlzLm9uQ3VzdG9tRWxlbWVudFNlbGVjdC5lbWl0KGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgcmVhZFByb3BlcnR5KG9iajogYW55LCBwcm9wOnN0cmluZyk6YW55IHtcclxuICAgIGlmKHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgdmFyIF9pbmRleCA9IHByb3AuaW5kZXhPZignLicpXHJcbiAgICBpZihfaW5kZXggPiAtMSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRQcm9wZXJ0eShvYmpbcHJvcC5zdWJzdHJpbmcoMCwgX2luZGV4KV0sIHByb3Auc3Vic3RyKF9pbmRleCArIDEpKTtcclxuICAgIH1cclxuICAgIHJldHVybiBvYmpbcHJvcF07XHJcbiAgfVxyXG5cclxuICBjb25maXJtRGVsZXRlU2VsZWN0ZWQoZXZlbnQ6YW55KSB7XHJcbiAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XHJcbiAgICAgIHRhcmdldDogZXZlbnQudGFyZ2V0IGFzIEV2ZW50VGFyZ2V0LFxyXG4gICAgICBtZXNzYWdlOiB0aGlzLndhcHBUYWJsZU9iamVjdC5jb25maXJtTXVsdGlwbGVEZWxldGVMYWJlbCxcclxuICAgICAgaWNvbjogXCJwaSBwaS1leGNsYW1hdGlvbi10cmlhbmdsZVwiLFxyXG4gICAgICBhY2NlcHRMYWJlbDogdGhpcy53YXBwVGFibGVPYmplY3QuY29uZmlybURlbGV0ZUJ0bkxhYmVsLFxyXG4gICAgICBhY2NlcHQ6ICgpID0+IHtcclxuICAgICAgICB0aGlzLmRlbGV0ZVNlbGVjdGVkRWxlbWVudHMoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVTZWxlY3RlZEVsZW1lbnRzKCkge1xyXG4gICAgdGhpcy5vbkRlbGV0ZUVsZW1lbnRTZWxlY3QuZW1pdCh0aGlzLnNlbGVjdGVkRWxlbWVudHMpXHJcbiAgICB0aGlzLnNlbGVjdGVkRWxlbWVudHMgPSBbXTtcclxuICB9XHJcblxyXG4gIGNvbmZpcm1EZWxldGUoZXZlbnQ6IEV2ZW50LCBlbGVtZW50OiBhbnkpIHtcclxuICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKHtcclxuICAgICAgdGFyZ2V0OiBldmVudC50YXJnZXQgYXMgRXZlbnRUYXJnZXQsXHJcbiAgICAgIG1lc3NhZ2U6IHRoaXMud2FwcFRhYmxlT2JqZWN0LmNvbmZpcm1TaW5nbGVEZWxldGVMYWJlbCxcclxuICAgICAgaWNvbjogXCJwaSBwaS1leGNsYW1hdGlvbi10cmlhbmdsZVwiLFxyXG4gICAgICBhY2NlcHRMYWJlbDogdGhpcy53YXBwVGFibGVPYmplY3QuY29uZmlybURlbGV0ZUJ0bkxhYmVsLFxyXG4gICAgICBhY2NlcHQ6ICgpID0+IHtcclxuICAgICAgICB0aGlzLmRlbGV0ZVNpbmdsZUVsZW1lbnQoZWxlbWVudCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlU2luZ2xlRWxlbWVudChlbGVtZW50OiBhbnkpIHtcclxuICAgIHRoaXMub25EZWxldGVFbGVtZW50U2VsZWN0LmVtaXQoW2VsZW1lbnRdKVxyXG4gIH1cclxuXHJcbiAgY29weUVsZW1lbnQoZWxlbWVudDogYW55KXtcclxuICAgIHRoaXMub25Db3B5RWxlbWVudFNlbGVjdC5lbWl0KGVsZW1lbnQpO1xyXG4gIH1cclxuICBcclxuICBjb25maXJtQ29weShldmVudDogRXZlbnQsIGVsZW1lbnQ6IGFueSkge1xyXG4gICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0oe1xyXG4gICAgICB0YXJnZXQ6IGV2ZW50LnRhcmdldCBhcyBFdmVudFRhcmdldCxcclxuICAgICAgbWVzc2FnZTogdGhpcy53YXBwVGFibGVPYmplY3QuY29uZmlybUNvcHlMYWJlbCxcclxuICAgICAgaWNvbjogXCJwaSBwaS1leGNsYW1hdGlvbi10cmlhbmdsZVwiLFxyXG4gICAgICBhY2NlcHRMYWJlbDogdGhpcy53YXBwVGFibGVPYmplY3QuY29uZmlybUNvcHlCdG5MYWJlbCxcclxuICAgICAgYWNjZXB0OiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jb3B5RWxlbWVudChlbGVtZW50KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvblNlbGVjdGlvbkNoYW5nZSh2YWx1ZSA9IFtdKSB7XHJcbiAgICB0aGlzLnNlbGVjdEFsbCA9IHZhbHVlLmxlbmd0aCA9PT0gdGhpcy5lbGVtZW50cy5sZW5ndGg7XHJcbiAgICB0aGlzLnNlbGVjdGVkRWxlbWVudHMgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIG9uU2VsZWN0QWxsQ2hhbmdlKGV2ZW50OmFueSkge1xyXG4gICAgY29uc3QgY2hlY2tlZCA9IGV2ZW50LmNoZWNrZWQ7XHJcblxyXG4gICAgaWYgKGNoZWNrZWQpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudHMgPSAgdGhpcy53YXBwVGFibGVPYmplY3QuZGlzYWJsZUNoZWNrYm94ID8gdGhpcy5nZXRTZWxlY3RhYmxlRWxlbWVudHModGhpcy5lbGVtZW50cykgOiB0aGlzLmVsZW1lbnRzO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0QWxsID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50cyA9IFtdO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0QWxsID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRTZWxlY3RhYmxlRWxlbWVudHMoYWxsRWxlbWVudHM6IGFueVtdKSB7XHJcbiAgICByZXR1cm4gYWxsRWxlbWVudHMuZmlsdGVyKChlbGVtZW50OmFueSkgPT4gIXRoaXMucmVhZFByb3BlcnR5KGVsZW1lbnQsIHRoaXMud2FwcFRhYmxlT2JqZWN0LmRpc2FibGVDaGVja2JveCEpKTtcclxuICB9XHJcblxyXG4gIG9uR2xvYmFsRmlsdGVyKHRhYmxlOiBUYWJsZSwgZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICB0YWJsZS5maWx0ZXJHbG9iYWwoKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSwgJ2NvbnRhaW5zJyk7XHJcbiAgfVxyXG5cclxuICBjbGVhcih0YWJsZTogVGFibGUpIHtcclxuICAgIHRhYmxlLmNsZWFyKCk7XHJcbiAgfVxyXG4gIFxyXG4gIHB1YmxpYyBnZXQgdGFibGVDb2x1bW5GaWx0ZXJUeXBlcygpOiB0eXBlb2YgVGFibGVDb2x1bW5GaWx0ZXJUeXBlcyB7XHJcbiAgICByZXR1cm4gVGFibGVDb2x1bW5GaWx0ZXJUeXBlcztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgdGFibGVDb2x1bW5UeXBlcygpOiB0eXBlb2YgVGFibGVDb2x1bW5UeXBlcyB7XHJcbiAgICByZXR1cm4gVGFibGVDb2x1bW5UeXBlcztcclxuICB9XHJcblxyXG4gIGdldEJvb2xlYW5Db2x1bW5DbGFzcyhpbmRleDogbnVtYmVyLCB2YWx1ZVByb3BlcnR5OiBib29sZWFuKXtcclxuICAgIHJldHVybiB7IFtgJHt0aGlzLndhcHBUYWJsZU9iamVjdC5jb2x1bW5Cb29sZWFuVHlwZUljb25zW2luZGV4XS50cnVlSWNvbkNvbG9yfSAke3RoaXMud2FwcFRhYmxlT2JqZWN0LmNvbHVtbkJvb2xlYW5UeXBlSWNvbnNbaW5kZXhdLnRydWVJY29ufWBdOiB2YWx1ZVByb3BlcnR5ID09IHRydWUsIFxyXG4gICAgICAgICAgICAgW2Ake3RoaXMud2FwcFRhYmxlT2JqZWN0LmNvbHVtbkJvb2xlYW5UeXBlSWNvbnNbaW5kZXhdLmZhbHNlSWNvbkNvbG9yfSAke3RoaXMud2FwcFRhYmxlT2JqZWN0LmNvbHVtbkJvb2xlYW5UeXBlSWNvbnNbaW5kZXhdLmZhbHNlSWNvbn1gXTogdmFsdWVQcm9wZXJ0eSA9PSBmYWxzZSxcclxuICAgICAgICAgICAgIFtgJHt0aGlzLndhcHBUYWJsZU9iamVjdC5jb2x1bW5Cb29sZWFuVHlwZUljb25zW2luZGV4XS5udWxsSWNvbkNvbG9yfSAke3RoaXMud2FwcFRhYmxlT2JqZWN0LmNvbHVtbkJvb2xlYW5UeXBlSWNvbnNbaW5kZXhdLm51bGxJY29ufWBdOiB2YWx1ZVByb3BlcnR5ID09IG51bGwgfSBcclxuICB9XHJcblxyXG4gIGNsZWFyRmlsdGVycygpIHtcclxuICAgIHRoaXMuZGF0YVRhYmxlLmNsZWFyKCk7XHJcbiAgfVxyXG5cclxuICBnZXRUYWJsZUNvbHVtbkFsaWduQ2xhc3MoYWxpZ25tZW50OiBudW1iZXIpIHtcclxuICAgIGlmKGFsaWdubWVudCA9PSBXYXBwVGFibGVDb2x1bW5BbGlnblR5cGVzLlJpZ2h0KSByZXR1cm4gJ3RleHQtcmlnaHQnO1xyXG4gICAgaWYoYWxpZ25tZW50ID09IFdhcHBUYWJsZUNvbHVtbkFsaWduVHlwZXMuTGVmdCkgcmV0dXJuICd0ZXh0LWxlZnQnO1xyXG4gICAgaWYoYWxpZ25tZW50ID09IFdhcHBUYWJsZUNvbHVtbkFsaWduVHlwZXMuQ2VudGVyKSByZXR1cm4gJ3RleHQtY2VudGVyJztcclxuICAgIHJldHVybiAndGV4dC1sZWZ0J1xyXG4gIH1cclxuXHJcbiAgZ2V0VGFibGVDb2x1bW5BbGlnbkNsYXNzRGVmYXVsdEJ5Q29sdW1uVHlwZShjb2x1bW5UeXBlOiBUYWJsZUNvbHVtblR5cGVzKSB7XHJcbiAgICBpZihjb2x1bW5UeXBlID09IFRhYmxlQ29sdW1uVHlwZXMuVGV4dCkgcmV0dXJuICd0ZXh0LWxlZnQnO1xyXG4gICAgaWYoY29sdW1uVHlwZSA9PSBUYWJsZUNvbHVtblR5cGVzLkN1cnJlbmN5KSByZXR1cm4gJ3RleHQtbGVmdCc7XHJcbiAgICBpZihjb2x1bW5UeXBlID09IFRhYmxlQ29sdW1uVHlwZXMuRGF0ZSkgcmV0dXJuICd0ZXh0LWxlZnQnO1xyXG4gICAgaWYoY29sdW1uVHlwZSA9PSBUYWJsZUNvbHVtblR5cGVzLkJhZGdlKSByZXR1cm4gJ3RleHQtY2VudGVyJztcclxuICAgIGlmKGNvbHVtblR5cGUgPT0gVGFibGVDb2x1bW5UeXBlcy5Cb29sZWFuKSByZXR1cm4gJ3RleHQtY2VudGVyJztcclxuICAgIGlmKGNvbHVtblR5cGUgPT0gVGFibGVDb2x1bW5UeXBlcy5JbWFnZSkgcmV0dXJuICd0ZXh0LWNlbnRlcic7XHJcbiAgICBpZihjb2x1bW5UeXBlID09IFRhYmxlQ29sdW1uVHlwZXMuTnVtYmVyKSByZXR1cm4gJ3RleHQtcmlnaHQnO1xyXG4gICAgcmV0dXJuICd0ZXh0LWxlZnQnXHJcbiAgfVxyXG59XHJcbiIsIjxuZy1jb250ZW50IHNlbGVjdD1cIi5maWx0ZXItcGFuZWxcIj48L25nLWNvbnRlbnQ+XHJcbjxkaXYgKm5nSWY9XCJ3YXBwVGFibGVPYmplY3RcIiBbY2xhc3MudGFibGUtY29udGFpbmVyXT1cIndhcHBUYWJsZU9iamVjdC50YWJsZUNvbnRhaW5lclwiPlxyXG4gICAgPHAtdGFibGUgY2xhc3M9XCJ3LXRhYmxlLXN0eWxlc1wiIFxyXG4gICAgICAgICAgICAqbmdJZj1cIiFsb2FkaW5nOyBlbHNlIGxvYWRpbmdUYWJsZVwiICN0YWJsZSBcclxuICAgICAgICAgICAgW3ZhbHVlXT1cImVsZW1lbnRzXCIgZGF0YUtleT1cInt7d2FwcFRhYmxlT2JqZWN0LmlkZW50aWZpY2F0b3J9fVwiIFxyXG4gICAgICAgICAgICBbcGFnaW5hdG9yXT1cIndhcHBUYWJsZU9iamVjdC5oYXNQYWdpbmF0b3JcIlxyXG4gICAgICAgICAgICBbc2VsZWN0aW9uXT1cInNlbGVjdGVkRWxlbWVudHNcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICBbc2VsZWN0QWxsXT1cInNlbGVjdEFsbFwiIChzZWxlY3RBbGxDaGFuZ2UpPVwib25TZWxlY3RBbGxDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIFt0b3RhbFJlY29yZHNdPVwidG90YWxSZWNvcmRzXCIgW3Nob3dDdXJyZW50UGFnZVJlcG9ydF09XCJ0cnVlXCIgXHJcbiAgICAgICAgICAgIFtyb3dzXT1cInJvd3NQZXJQYWdlXCJcclxuICAgICAgICAgICAgW2N1cnJlbnRQYWdlUmVwb3J0VGVtcGxhdGVdPVwid2FwcFRhYmxlT2JqZWN0LmN1cnJlbnRQYWdlUmVwb3J0VGVtcGxhdGUgPyB3YXBwVGFibGVPYmplY3QuY3VycmVudFBhZ2VSZXBvcnRUZW1wbGF0ZSArICcgJyArICByb3dzUGVyUGFnZSArICcgZGUgJyArIHRvdGFsUmVjb3JkcyEgOiAnU2hvd2luZyAnICsgcm93c1BlclBhZ2UgKyAnIG9mICcgKyB0b3RhbFJlY29yZHMhXCJcclxuICAgICAgICAgICAgW2dsb2JhbEZpbHRlckZpZWxkc109XCJ3YXBwVGFibGVPYmplY3QuZ2xvYmFsRmlsdGVyRmllbGRzIVwiIHJlc3BvbnNpdmVMYXlvdXQ9XCJzY3JvbGxcIlxyXG4gICAgICAgICAgICBbcm93SG92ZXJdPVwidHJ1ZVwiIFt0YWJsZVN0eWxlXT1cInsnbWluLXdpZHRoJzogd2FwcFRhYmxlT2JqZWN0LnRhYmxlTWluV2lkdGghfVwiXHJcbiAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJwLWRhdGF0YWJsZS1zdHJpcGVkXCI+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImNhcHRpb25cIiAqbmdJZj1cIndhcHBUYWJsZU9iamVjdD8uaGFzQ2xlYXJCdXR0b24gfHwgd2FwcFRhYmxlT2JqZWN0Lmhhc0dsb2JhbFNlYXJjaFwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIHRhYmxlLXBhZ2luYXRvciBwLTBcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwid2FwcFRhYmxlT2JqZWN0Lmhhc1RvdGFsUGFnaW5nU2VsZWN0b3JcIiBjbGFzcz1cInNob3dpbmctcGVyLXBhZ2VcIj4ge3t3YXBwVGFibGVPYmplY3QuY3VycmVudFBhZ2VSZXBvcnRUZW1wbGF0ZX19IDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxwLWlucHV0TnVtYmVyICpuZ0lmPVwid2FwcFRhYmxlT2JqZWN0Lmhhc1RvdGFsUGFnaW5nU2VsZWN0b3JcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicGwtMiBzaG93aW5nLXBlci1wYWdlXCIgW3NpemVdPVwiMVwiIFsobmdNb2RlbCldPVwicm93c1BlclBhZ2VcIiBbc2hvd0J1dHRvbnNdPVwidHJ1ZVwiIFxyXG4gICAgICAgICAgICAgICAgICAgIGJ1dHRvbkxheW91dD1cImhvcml6b250YWxcIiBpbnB1dElkPVwiaG9yaXpvbnRhbFwiIHNwaW5uZXJNb2RlPVwiaG9yaXpvbnRhbFwiIFtzdGVwXT1cIjFcIiBbbWluXT1cIjFcIiBbbWF4XT1cInRvdGFsUmVjb3JkcyFcIlxyXG4gICAgICAgICAgICAgICAgICAgIGRlY3JlbWVudEJ1dHRvbkNsYXNzPVwicC1idXR0b24tb3V0bGluZWRcIiBcclxuICAgICAgICAgICAgICAgICAgICBpbmNyZW1lbnRCdXR0b25DbGFzcz1cInAtYnV0dG9uLW91dGxpbmVkXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgaW5jcmVtZW50QnV0dG9uSWNvbj1cInBpIHBpLXBsdXNcIiBcclxuICAgICAgICAgICAgICAgICAgICBkZWNyZW1lbnRCdXR0b25JY29uPVwicGkgcGktbWludXNcIiBcclxuICAgICAgICAgICAgICAgICAgICBtb2RlPVwiZGVjaW1hbFwiPlxyXG4gICAgICAgICAgICAgICAgPC9wLWlucHV0TnVtYmVyPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ3YXBwVGFibGVPYmplY3Q/Lmhhc0dsb2JhbFNlYXJjaFwiIGNsYXNzPVwicC1pbnB1dC1pY29uLWxlZnQgbWwtYXV0b1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktc2VhcmNoXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBwSW5wdXRUZXh0IHR5cGU9XCJ0ZXh0XCIgI2ZpbHRlciAoaW5wdXQpPVwib25HbG9iYWxGaWx0ZXIodGFibGUsICRldmVudClcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIndhcHBUYWJsZU9iamVjdC5zZWFyY2hQbGFjZWhvbGRlclwiIGNsYXNzPVwidy1mdWxsIGhlaWdodC1pbnB1dCB3LWlucHV0XCIvPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoICpuZ0lmPVwid2FwcFRhYmxlT2JqZWN0Lmhhc0NoZWNrYm94XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIndhcHBUYWJsZU9iamVjdC5jb2x1bW5BbGlnbiA/IGdldFRhYmxlQ29sdW1uQWxpZ25DbGFzcyh3YXBwVGFibGVPYmplY3QuY29sdW1uQWxpZ25bMF0pIDogJ3RleHQtbGVmdCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHAtdGFibGVIZWFkZXJDaGVja2JveD48L3AtdGFibGVIZWFkZXJDaGVja2JveD5cclxuICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhd2FwcFRhYmxlT2JqZWN0Lmhhc1NvcnRhYmxlQ29sdW1uczsgZWxzZSBzb3J0YWJsZUNvbHVtbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBoZWFkZXIgb2Ygd2FwcFRhYmxlT2JqZWN0Py5oZWFkZXJzOyBpbmRleCBhcyBpXCIgW2NsYXNzXT1cImhlYWRlciA9PSAoJ0ltYWdlbicgfHwgJ0ltYWdlJykgPyAnaW1hZ2UtaGVhZGVyJzogJydcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIndhcHBUYWJsZU9iamVjdC5jb2x1bW5BbGlnbiA/IGdldFRhYmxlQ29sdW1uQWxpZ25DbGFzcyh3YXBwVGFibGVPYmplY3QuY29sdW1uQWxpZ25bd2FwcFRhYmxlT2JqZWN0Lmhhc0NoZWNrYm94ID8gaSsxIDogaV0pIDogZ2V0VGFibGVDb2x1bW5BbGlnbkNsYXNzRGVmYXVsdEJ5Q29sdW1uVHlwZSh3YXBwVGFibGVPYmplY3QuY29sdW1uVHlwZXNbd2FwcFRhYmxlT2JqZWN0Lmhhc0NoZWNrYm94ID8gaSsxIDogaV0pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7aGVhZGVyfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3NvcnRhYmxlQ29sdW1ucz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nRm9yIGxldC1maWx0ZXJUeXBlIFtuZ0Zvck9mXT1cIndhcHBUYWJsZU9iamVjdC5oZWFkZXJzXCIgbGV0LWk9XCJpbmRleFwiPiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBbcFNvcnRhYmxlQ29sdW1uXT1cIndhcHBUYWJsZU9iamVjdC5zb3J0YWJsZU5hbWVzW2ldXCIgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJ3YXBwVGFibGVPYmplY3QuaGVhZGVyc1tpXSA9PSAoJ0ltYWdlbicgfHwgJ0ltYWdlJykgPyAnaW1hZ2UtaGVhZGVyJzogJydcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ3YXBwVGFibGVPYmplY3QuY29sdW1uQWxpZ24gPyBnZXRUYWJsZUNvbHVtbkFsaWduQ2xhc3Mod2FwcFRhYmxlT2JqZWN0LmNvbHVtbkFsaWduW3dhcHBUYWJsZU9iamVjdC5oYXNDaGVja2JveCA/IGkrMSA6IGldKSA6IGdldFRhYmxlQ29sdW1uQWxpZ25DbGFzc0RlZmF1bHRCeUNvbHVtblR5cGUod2FwcFRhYmxlT2JqZWN0LmNvbHVtblR5cGVzW3dhcHBUYWJsZU9iamVjdC5oYXNDaGVja2JveCA/IGkrMSA6IGldKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3dhcHBUYWJsZU9iamVjdC5oZWFkZXJzW2ldfX0gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cC1zb3J0SWNvbiAqbmdJZj1cIndhcHBUYWJsZU9iamVjdC5zb3J0YWJsZU5hbWVzW2ldICE9IG51bGxcIiBbZmllbGRdPVwid2FwcFRhYmxlT2JqZWN0LnNvcnRhYmxlTmFtZXNbaV1cIj48L3Atc29ydEljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoICpuZ0lmPVwid2FwcFRhYmxlT2JqZWN0Lmhhc0RlbGV0ZUJ1dHRvbiB8fCB3YXBwVGFibGVPYmplY3QuaGFzRWRpdEJ1dHRvblwiPjwvdGg+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImJvZHlcIiBsZXQtZWxlbWVudD5cclxuICAgICAgICAgICAgPHRyIFtuZ0NsYXNzXT1cIndhcHBUYWJsZU9iamVjdC5oYXNTZWxlY3RhYmxlUm93ID8gJ3Atc2VsZWN0YWJsZS1yb3cnIDogJydcIiAoY2xpY2spPVwid2FwcFRhYmxlT2JqZWN0Lmhhc1NlbGVjdGFibGVSb3cgPyBvbkVsZW1lbnQoZWxlbWVudCkgOiAnJ1wiPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nRm9yIGxldC1jb2x1bW5UeXBlIFtuZ0Zvck9mXT1cIndhcHBUYWJsZU9iamVjdC5jb2x1bW5UeXBlcyFcIiBsZXQtaT1cImluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwiY29sdW1uVHlwZSA9PSB0YWJsZUNvbHVtblR5cGVzPy5DaGVja2JveCEgJiYgIHdhcHBUYWJsZU9iamVjdC5oYXNDaGVja2JveFwiIFtzdHlsZV09XCInd2lkdGg6ICcrd2FwcFRhYmxlT2JqZWN0LmNvbHVtbldpZHRocyFbaV1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ3YXBwVGFibGVPYmplY3QuY29sdW1uQWxpZ24gPyBnZXRUYWJsZUNvbHVtbkFsaWduQ2xhc3Mod2FwcFRhYmxlT2JqZWN0LmNvbHVtbkFsaWduW2ldKSA6ICd0ZXh0LWNlbnRlcidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIndhcHBUYWJsZU9iamVjdC5kaXNhYmxlQ2hlY2tib3g7IGVsc2UgYWN0aXZlQ2hlY2tib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwLXRhYmxlQ2hlY2tib3ggW3ZhbHVlXT1cImVsZW1lbnRcIiBbZGlzYWJsZWRdPVwicmVhZFByb3BlcnR5KGVsZW1lbnQsIHdhcHBUYWJsZU9iamVjdC5kaXNhYmxlQ2hlY2tib3gpXCI+PC9wLXRhYmxlQ2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2FjdGl2ZUNoZWNrYm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAtdGFibGVDaGVja2JveCBbdmFsdWVdPVwiZWxlbWVudFwiPjwvcC10YWJsZUNoZWNrYm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwiY29sdW1uVHlwZSA9PSB0YWJsZUNvbHVtblR5cGVzLkltYWdlXCIgW3N0eWxlXT1cIid3aWR0aDogJyt3YXBwVGFibGVPYmplY3QuY29sdW1uV2lkdGhzW2ldXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIndhcHBUYWJsZU9iamVjdC5jb2x1bW5BbGlnbiA/IGdldFRhYmxlQ29sdW1uQWxpZ25DbGFzcyh3YXBwVGFibGVPYmplY3QuY29sdW1uQWxpZ25baV0pIDogJ3RleHQtY2VudGVyJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW1nICpuZ0lmPVwicmVhZFByb3BlcnR5KGVsZW1lbnQsIHdhcHBUYWJsZU9iamVjdC5jb2x1bW5zW2ldKVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwicmVhZFByb3BlcnR5KGVsZW1lbnQsIHdhcHBUYWJsZU9iamVjdC5jb2x1bW5zW2ldKVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZWxlbWVudC1pbWFnZS13aWR0aFwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cImNvbHVtblR5cGUgPT0gdGFibGVDb2x1bW5UeXBlcy5UZXh0XCIgIFtzdHlsZV09XCInd2lkdGg6ICcrd2FwcFRhYmxlT2JqZWN0LmNvbHVtbldpZHRoc1tpXVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ3YXBwVGFibGVPYmplY3QuY29sdW1uQWxpZ24gPyBnZXRUYWJsZUNvbHVtbkFsaWduQ2xhc3Mod2FwcFRhYmxlT2JqZWN0LmNvbHVtbkFsaWduW2ldKSA6ICd0ZXh0LWxlZnQnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyByZWFkUHJvcGVydHkoZWxlbWVudCwgd2FwcFRhYmxlT2JqZWN0LmNvbHVtbnNbaV0pIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJjb2x1bW5UeXBlID09IHRhYmxlQ29sdW1uVHlwZXMuTnVtYmVyXCIgIFtzdHlsZV09XCInd2lkdGg6ICcrd2FwcFRhYmxlT2JqZWN0LmNvbHVtbldpZHRoc1tpXVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ3YXBwVGFibGVPYmplY3QuY29sdW1uQWxpZ24gPyBnZXRUYWJsZUNvbHVtbkFsaWduQ2xhc3Mod2FwcFRhYmxlT2JqZWN0LmNvbHVtbkFsaWduW2ldKSA6ICd0ZXh0LXJpZ2h0J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgcmVhZFByb3BlcnR5KGVsZW1lbnQsIHdhcHBUYWJsZU9iamVjdC5jb2x1bW5zW2ldKSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwiY29sdW1uVHlwZSA9PSB0YWJsZUNvbHVtblR5cGVzLkN1cnJlbmN5XCIgW3N0eWxlXT1cIid3aWR0aDogJyt3YXBwVGFibGVPYmplY3QuY29sdW1uV2lkdGhzW2ldXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIndhcHBUYWJsZU9iamVjdC5jb2x1bW5BbGlnbiA/IGdldFRhYmxlQ29sdW1uQWxpZ25DbGFzcyh3YXBwVGFibGVPYmplY3QuY29sdW1uQWxpZ25baV0pIDogJ3RleHQtcmlnaHQnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyByZWFkUHJvcGVydHkoZWxlbWVudCwgd2FwcFRhYmxlT2JqZWN0LmNvbHVtbnNbaV0pIHwgY3VycmVuY3kgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cImNvbHVtblR5cGUgPT0gdGFibGVDb2x1bW5UeXBlcy5CYWRnZVwiIFtzdHlsZV09XCInd2lkdGg6ICcrd2FwcFRhYmxlT2JqZWN0LmNvbHVtbldpZHRoc1tpXVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ3YXBwVGFibGVPYmplY3QuY29sdW1uQWxpZ24gPyBnZXRUYWJsZUNvbHVtbkFsaWduQ2xhc3Mod2FwcFRhYmxlT2JqZWN0LmNvbHVtbkFsaWduW2ldKSA6ICd0ZXh0LWNlbnRlcidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3LWJhZGdlIFtsYWJlbF09XCJyZWFkUHJvcGVydHkoZWxlbWVudCwgd2FwcFRhYmxlT2JqZWN0LmNvbHVtbnNbaV0pXCIgW2NvbG9yXT1cIidpbmZvJ1wiPjwvdy1iYWRnZT4gICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cImNvbHVtblR5cGUgPT0gdGFibGVDb2x1bW5UeXBlcy5Cb29sZWFuXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIndhcHBUYWJsZU9iamVjdC5jb2x1bW5BbGlnbiA/IGdldFRhYmxlQ29sdW1uQWxpZ25DbGFzcyh3YXBwVGFibGVPYmplY3QuY29sdW1uQWxpZ25baV0pIDogJ3RleHQtY2VudGVyJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJwaVwiIFtuZ0NsYXNzXT1cImdldEJvb2xlYW5Db2x1bW5DbGFzcyhpLCByZWFkUHJvcGVydHkoZWxlbWVudCwgd2FwcFRhYmxlT2JqZWN0LmNvbHVtbnNbaV0pKVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cImNvbHVtblR5cGUgPT0gdGFibGVDb2x1bW5UeXBlcy5EYXRlXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIndhcHBUYWJsZU9iamVjdC5jb2x1bW5BbGlnbiA/IGdldFRhYmxlQ29sdW1uQWxpZ25DbGFzcyh3YXBwVGFibGVPYmplY3QuY29sdW1uQWxpZ25baV0pIDogJ3RleHQtbGVmdCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHJlYWRQcm9wZXJ0eShlbGVtZW50LCB3YXBwVGFibGVPYmplY3QuY29sdW1uc1tpXSkgfCB3YXBwRGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwid2FwcFRhYmxlT2JqZWN0Py5oYXNWaWV3QnV0dG9uIHx8IHdhcHBUYWJsZU9iamVjdC5jdXN0b21CdXR0b25Db25maWc/Lmhhc0N1c3RvbUJ1dHRvbiB8fCB3YXBwVGFibGVPYmplY3Q/Lmhhc0VkaXRCdXR0b24gfHwgd2FwcFRhYmxlT2JqZWN0Py5oYXNDb3B5QnV0dG9uIHx8IHdhcHBUYWJsZU9iamVjdD8uaGFzRGVsZXRlQnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwid2FwcFRhYmxlT2JqZWN0Py5oYXNWaWV3QnV0dG9uXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cIndhcHBUYWJsZU9iamVjdC5idXR0b25Ub29sdGlwcz8udmlld1Rvb2x0aXAhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cIndhcHBUYWJsZU9iamVjdC5idXR0b25Ub29sdGlwcz8ucG9zaXRpb24hXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQnV0dG9uIHBSaXBwbGUgKGNsaWNrKT1cInZpZXdFbGVtZW50KGVsZW1lbnQpXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLWV5ZVwiIGNsYXNzPVwicC1idXR0b24tdGV4dCBwLWJ1dHRvbi1pbmZvIG1yLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJ3YXBwVGFibGVPYmplY3QuY3VzdG9tQnV0dG9uQ29uZmlnPy5oYXNDdXN0b21CdXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBCdXR0b24gcFJpcHBsZSAoY2xpY2spPVwiY3VzdG9tRWxlbWVudChlbGVtZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cIndhcHBUYWJsZU9iamVjdC5idXR0b25Ub29sdGlwcz8uY3VzdG9tVG9vbHRpcCFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwid2FwcFRhYmxlT2JqZWN0LmJ1dHRvblRvb2x0aXBzPy5wb3NpdGlvbiFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uXT1cIndhcHBUYWJsZU9iamVjdC5jdXN0b21CdXR0b25Db25maWc/Lmljb24hXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInAtYnV0dG9uLXRleHQgcC1idXR0b24taW5mbyBtci0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIndhcHBUYWJsZU9iamVjdD8uaGFzRWRpdEJ1dHRvbiAmJiAhd2FwcFRhYmxlT2JqZWN0LmRpc2FibGVFZGl0UHJvcGVydHlcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwid2FwcFRhYmxlT2JqZWN0LmJ1dHRvblRvb2x0aXBzPy5lZGl0VG9vbHRpcCFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwid2FwcFRhYmxlT2JqZWN0LmJ1dHRvblRvb2x0aXBzPy5wb3NpdGlvbiFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBCdXR0b24gcFJpcHBsZSAoY2xpY2spPVwiZWRpdEVsZW1lbnQoZWxlbWVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJwaSBwaS1wZW5jaWxcIiBjbGFzcz1cInAtYnV0dG9uLXRleHQgcC1idXR0b24tc3VjY2VzcyBtci0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwid2FwcFRhYmxlT2JqZWN0LmRpc2FibGVFZGl0UHJvcGVydHlcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQnV0dG9uIHBSaXBwbGUgKGNsaWNrKT1cImVkaXRFbGVtZW50KGVsZW1lbnQpXCIgW2Rpc2FibGVkXT1cInJlYWRQcm9wZXJ0eShlbGVtZW50LCB3YXBwVGFibGVPYmplY3QuZGlzYWJsZUVkaXRQcm9wZXJ0eSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJ3YXBwVGFibGVPYmplY3QuYnV0dG9uVG9vbHRpcHM/LmVkaXRUb29sdGlwIVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCJ3YXBwVGFibGVPYmplY3QuYnV0dG9uVG9vbHRpcHM/LnBvc2l0aW9uIVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLXBlbmNpbFwiIGNsYXNzPVwicC1idXR0b24tdGV4dCBwLWJ1dHRvbi1zdWNjZXNzIG1yLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJ3YXBwVGFibGVPYmplY3Q/Lmhhc0NvcHlCdXR0b25cIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQnV0dG9uIHBSaXBwbGUgKGNsaWNrKT1cImNvbmZpcm1Db3B5KCRldmVudCwgZWxlbWVudClcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwid2FwcFRhYmxlT2JqZWN0LmJ1dHRvblRvb2x0aXBzPy5jb3B5VG9vbHRpcCFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwid2FwcFRhYmxlT2JqZWN0LmJ1dHRvblRvb2x0aXBzPy5wb3NpdGlvbiFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJwaSBwaS1jb3B5XCIgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLWhlbHAgbXItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ3YXBwVGFibGVPYmplY3Q/Lmhhc0RlbGV0ZUJ1dHRvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIndhcHBUYWJsZU9iamVjdC5kaXNhYmxlRGVsZXRlUHJvcGVydHk7IGVsc2Ugbm9EaXNhYmxlRGVsZXRlXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBCdXR0b24gcFJpcHBsZSAoY2xpY2spPVwiY29uZmlybURlbGV0ZSgkZXZlbnQsIGVsZW1lbnQpXCIgW2Rpc2FibGVkXT1cInJlYWRQcm9wZXJ0eShlbGVtZW50LCB3YXBwVGFibGVPYmplY3QuZGlzYWJsZURlbGV0ZVByb3BlcnR5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJ3YXBwVGFibGVPYmplY3QuYnV0dG9uVG9vbHRpcHM/LmRlbGV0ZVRvb2x0aXAhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCJ3YXBwVGFibGVPYmplY3QuYnV0dG9uVG9vbHRpcHM/LnBvc2l0aW9uIVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJwaSBwaS10cmFzaFwiIGNsYXNzPVwicC1idXR0b24tdGV4dCBwLWJ1dHRvbi1kYW5nZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub0Rpc2FibGVEZWxldGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiF3YXBwVGFibGVPYmplY3Q/LmRpc2FibGVEZWxldGUgJiYgIXdhcHBUYWJsZU9iamVjdC5kaXNhYmxlRGVsZXRlUHJvcGVydHlcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJ3YXBwVGFibGVPYmplY3QuYnV0dG9uVG9vbHRpcHM/LmRlbGV0ZVRvb2x0aXAhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwid2FwcFRhYmxlT2JqZWN0LmJ1dHRvblRvb2x0aXBzPy5wb3NpdGlvbiFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEJ1dHRvbiBwUmlwcGxlIChjbGljayk9XCJjb25maXJtRGVsZXRlKCRldmVudCwgZWxlbWVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLXRyYXNoXCIgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLWRhbmdlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJlbXB0eW1lc3NhZ2VcIj5cclxuICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI4XCI+Tm8gZWxlbWVudHMuPC90ZD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJsb2FkaW5nYm9keVwiPlxyXG4gICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjhcIj5Mb2FkaW5nIGVsZW1lbnRzLjwvdGQ+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvcC10YWJsZT5cclxuICAgIFxyXG4gICAgPG5nLXRlbXBsYXRlICNsb2FkaW5nVGFibGU+XHJcbiAgICA8cC10YWJsZSBjbGFzcz1cInctdGFibGUtc3R5bGVzXCIgW3ZhbHVlXT1cInRhYmxlU2tlbGV0b25zXCIgcmVzcG9uc2l2ZUxheW91dD1cInNjcm9sbFwiIFtwYWdpbmF0b3JdPVwid2FwcFRhYmxlT2JqZWN0Lmhhc1BhZ2luYXRvclwiIFtyb3dzXT1cInJvd3NQZXJQYWdlXCIgW3RvdGFsUmVjb3Jkc109XCJ0b3RhbFJlY29yZHNcIlxyXG4gICAgICAgICAgICBbc2hvd0N1cnJlbnRQYWdlUmVwb3J0XT1cInRydWVcIiBcclxuICAgICAgICAgICAgW2N1cnJlbnRQYWdlUmVwb3J0VGVtcGxhdGVdPVwid2FwcFRhYmxlT2JqZWN0LmN1cnJlbnRQYWdlUmVwb3J0VGVtcGxhdGUgPyB3YXBwVGFibGVPYmplY3QuY3VycmVudFBhZ2VSZXBvcnRUZW1wbGF0ZSArICcgJyArICByb3dzUGVyUGFnZSArICcgZGUgJyArIHRvdGFsUmVjb3JkcyA6ICdTaG93aW5nICcgKyByb3dzUGVyUGFnZSArICcgb2YgJyArIHRvdGFsUmVjb3Jkc1wiXHJcbiAgICAgICAgICAgICBzdHlsZUNsYXNzPVwicC1kYXRhdGFibGUtc3RyaXBlZFwiPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cIndhcHBUYWJsZU9iamVjdD8uaGFzQ2xlYXJCdXR0b24gfHwgd2FwcFRhYmxlT2JqZWN0Lmhhc0dsb2JhbFNlYXJjaFwiIHBUZW1wbGF0ZT1cImNhcHRpb25cIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciB0YWJsZS1wYWdpbmF0b3IgcC0wXCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIDxidXR0b24gKm5nSWY9XCJ3YXBwVGFibGVPYmplY3QuaGFzQ2xlYXJCdXR0b25cIiBwQnV0dG9uIGxhYmVsPVwiQ2xlYXJcIiBjbGFzcz1cInAtYnV0dG9uLW91dGxpbmVkXCIgaWNvbj1cInBpIHBpLWZpbHRlci1zbGFzaFwiPjwvYnV0dG9uPiAtLT5cclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwid2FwcFRhYmxlT2JqZWN0Lmhhc1RvdGFsUGFnaW5nU2VsZWN0b3JcIiBjbGFzcz1cInNob3dpbmctcGVyLXBhZ2VcIj4ge3t3YXBwVGFibGVPYmplY3QuY3VycmVudFBhZ2VSZXBvcnRUZW1wbGF0ZX19IDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxwLWlucHV0TnVtYmVyICpuZ0lmPVwid2FwcFRhYmxlT2JqZWN0Lmhhc1RvdGFsUGFnaW5nU2VsZWN0b3JcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicGwtMiBzaG93aW5nLXBlci1wYWdlXCIgW3NpemVdPVwiMVwiIFsobmdNb2RlbCldPVwicm93c1BlclBhZ2VcIiBbc2hvd0J1dHRvbnNdPVwidHJ1ZVwiIFxyXG4gICAgICAgICAgICAgICAgICAgIGJ1dHRvbkxheW91dD1cImhvcml6b250YWxcIiBpbnB1dElkPVwiaG9yaXpvbnRhbFwiIHNwaW5uZXJNb2RlPVwiaG9yaXpvbnRhbFwiIFtzdGVwXT1cIjFcIiBbbWluXT1cIjFcIiBbbWF4XT1cInRvdGFsUmVjb3Jkc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgZGVjcmVtZW50QnV0dG9uQ2xhc3M9XCJwLWJ1dHRvbi1vdXRsaW5lZFwiIFxyXG4gICAgICAgICAgICAgICAgICAgIGluY3JlbWVudEJ1dHRvbkNsYXNzPVwicC1idXR0b24tb3V0bGluZWRcIiBcclxuICAgICAgICAgICAgICAgICAgICBpbmNyZW1lbnRCdXR0b25JY29uPVwicGkgcGktcGx1c1wiIFxyXG4gICAgICAgICAgICAgICAgICAgIGRlY3JlbWVudEJ1dHRvbkljb249XCJwaSBwaS1taW51c1wiIFxyXG4gICAgICAgICAgICAgICAgICAgIG1vZGU9XCJkZWNpbWFsXCI+XHJcbiAgICAgICAgICAgICAgICA8L3AtaW5wdXROdW1iZXI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIndhcHBUYWJsZU9iamVjdD8uaGFzR2xvYmFsU2VhcmNoXCIgY2xhc3M9XCJwLWlucHV0LWljb24tbGVmdCBtbC1hdXRvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1zZWFyY2hcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHBJbnB1dFRleHQgdHlwZT1cInRleHRcIiAjZmlsdGVyIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwid2FwcFRhYmxlT2JqZWN0LnNlYXJjaFBsYWNlaG9sZGVyXCIgY2xhc3M9XCJ3LWZ1bGwgaGVpZ2h0LWlucHV0IHctaW5wdXRcIi8+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cclxuICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgIDx0aCAqbmdJZj1cIiF3YXBwVGFibGVPYmplY3QuaGFzQ29sdW1uRmlsdGVycyAmJiB3YXBwVGFibGVPYmplY3QuaGFzQ2hlY2tib3g7IGVsc2Ugc2VsZWN0QWxsQ2hlY2tib3hcIj5cclxuICAgICAgICAgICAgICAgIDxwLXRhYmxlSGVhZGVyQ2hlY2tib3g+PC9wLXRhYmxlSGVhZGVyQ2hlY2tib3g+XHJcbiAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2VsZWN0QWxsQ2hlY2tib3g+PHRoPjwvdGg+PC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBoZWFkZXIgb2Ygd2FwcFRhYmxlT2JqZWN0Py5oZWFkZXJzXCI+XHJcbiAgICAgICAgICAgIHt7aGVhZGVyfX1cclxuICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgPHRoICpuZ0lmPVwid2FwcFRhYmxlT2JqZWN0Lmhhc0RlbGV0ZUJ1dHRvbiB8fCB3YXBwVGFibGVPYmplY3QuaGFzRWRpdEJ1dHRvblwiPjwvdGg+XHJcbiAgICAgICAgPC90cj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCI+XHJcbiAgICAgICAgICAgIDx0ciBoZWlnaHQ9XCI3MHB4XCI+XHJcbiAgICAgICAgICAgICAgICA8dGQgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygd2FwcFRhYmxlT2JqZWN0LmNvbHVtblR5cGVzXCIgW3N0eWxlLndpZHRoXT1cIml0ZW0gPT0gdGFibGVDb2x1bW5UeXBlcy5DaGVja2JveCA/ICc4cmVtJyA6ICcnXCIgPlxyXG4gICAgICAgICAgICAgICAgPHAtdGFibGVDaGVja2JveCAqbmdJZj1cIml0ZW0gPT0gdGFibGVDb2x1bW5UeXBlcy5DaGVja2JveCAmJiAgd2FwcFRhYmxlT2JqZWN0Lmhhc0NoZWNrYm94XCI+PC9wLXRhYmxlQ2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICA8cC1za2VsZXRvbiAqbmdJZj1cIml0ZW0gIT0gdGFibGVDb2x1bW5UeXBlcy5DaGVja2JveFwiPjwvcC1za2VsZXRvbj5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJ3YXBwVGFibGVPYmplY3QuaGFzRWRpdEJ1dHRvbiB8fCB3YXBwVGFibGVPYmplY3QuaGFzRGVsZXRlQnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIndhcHBUYWJsZU9iamVjdD8uaGFzVmlld0J1dHRvblwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwQnV0dG9uIHBSaXBwbGUgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJ3YXBwVGFibGVPYmplY3QuYnV0dG9uVG9vbHRpcHM/LnZpZXdUb29sdGlwIVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJwaSBwaS1leWVcIiBjbGFzcz1cInAtYnV0dG9uLXRleHQgcC1idXR0b24taW5mbyBtci0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIndhcHBUYWJsZU9iamVjdC5jdXN0b21CdXR0b25Db25maWc/Lmhhc0N1c3RvbUJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBCdXR0b24gcFJpcHBsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwid2FwcFRhYmxlT2JqZWN0LmJ1dHRvblRvb2x0aXBzPy5jdXN0b21Ub29sdGlwIVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uXT1cIndhcHBUYWJsZU9iamVjdC5jdXN0b21CdXR0b25Db25maWc/Lmljb24hXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLWluZm8gbXItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJ3YXBwVGFibGVPYmplY3Q/Lmhhc0VkaXRCdXR0b25cIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBCdXR0b24gcFJpcHBsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cIndhcHBUYWJsZU9iamVjdC5idXR0b25Ub29sdGlwcz8uZWRpdFRvb2x0aXAhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJwaSBwaS1wZW5jaWxcIiBjbGFzcz1cInAtYnV0dG9uLXRleHQgcC1idXR0b24tc3VjY2VzcyBtci0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIndhcHBUYWJsZU9iamVjdD8uaGFzQ29weUJ1dHRvblwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwQnV0dG9uIHBSaXBwbGUgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJ3YXBwVGFibGVPYmplY3QuYnV0dG9uVG9vbHRpcHM/LmNvcHlUb29sdGlwIVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJwaSBwaS1jb3B5XCIgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLWhlbHAgbXItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJ3YXBwVGFibGVPYmplY3Q/Lmhhc0RlbGV0ZUJ1dHRvblwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcEJ1dHRvbiBwUmlwcGxlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwid2FwcFRhYmxlT2JqZWN0LmJ1dHRvblRvb2x0aXBzPy5kZWxldGVUb29sdGlwIVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uPVwicGkgcGktdHJhc2hcIiBjbGFzcz1cInAtYnV0dG9uLXRleHQgcC1idXR0b24tZGFuZ2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvcC10YWJsZT5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbjwvZGl2PlxyXG48cC1jb25maXJtUG9wdXA+PC9wLWNvbmZpcm1Qb3B1cD4iXX0=
|
|
239
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidy10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy93YXBwLWNvbXBvbmVudHMvc3JjL2xpYi90YWJsZXMvdy10YWJsZS93LXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3dhcHAtY29tcG9uZW50cy9zcmMvbGliL3RhYmxlcy93LXRhYmxlL3ctdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQWlCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoSSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHbEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLGdCQUFnQixFQUFFLG1CQUFtQixFQUFFLHlCQUF5QixFQUFFLE1BQU0saUNBQWlDLENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQVMzSSxNQUFNLE9BQU8sZUFBZTtJQXFDMUIsWUFDVSxtQkFBd0M7UUFBeEMsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQXJDbEQscUJBQWdCLEdBQVUsRUFBRSxDQUFDO1FBRTdCLHdCQUFtQixHQUFXLFFBQVEsQ0FBQTtRQUN0QyxjQUFTLEdBQVksS0FBSyxDQUFDO1FBQzNCLGtCQUFhLEdBQVcsRUFBRSxDQUFDO1FBRTNCLG1CQUFjLEdBQVEsQ0FBQyxFQUFDLElBQUksRUFBRSxFQUFFLEVBQUMsRUFBRSxFQUFDLElBQUksRUFBRSxFQUFFLEVBQUMsRUFBRSxFQUFDLElBQUksRUFBRSxFQUFFLEVBQUMsRUFBRSxFQUFDLElBQUksRUFBRSxFQUFFLEVBQUMsQ0FBQyxDQUFDO1FBRS9ELGtCQUFhLEdBQVcsQ0FBQyxDQUFDO1FBVWxDLG1CQUFjLEdBQStCLG1CQUFtQixDQUFDO1FBRzNDLGdCQUFXLEdBQVcsQ0FB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Q0YsT0FBTztzQkFBeEIsS0FBSzt1QkFBQyxTQUFTO2dCQUNVLGVBQWU7c0JBQXhDLEtBQUs7dUJBQUMsaUJBQWlCO2dCQUVHLGVBQWU7c0JBQXpDLE1BQU07dUJBQUMsaUJBQWlCO2dCQUNNLG1CQUFtQjtzQkFBakQsTUFBTTt1QkFBQyxxQkFBcUI7Z0JBQ0UsbUJBQW1CO3NCQUFqRCxNQUFNO3VCQUFDLHFCQUFxQjtnQkFDRSxtQkFBbUI7c0JBQWpELE1BQU07dUJBQUMscUJBQXFCO2dCQUNJLHFCQUFxQjtzQkFBckQsTUFBTTt1QkFBQyx1QkFBdUI7Z0JBQ0UscUJBQXFCO3NCQUFyRCxNQUFNO3VCQUFDLHVCQUF1QjtnQkFDRCxrQkFBa0I7c0JBQS9DLE1BQU07dUJBQUMsb0JBQW9CO2dCQUVQLE1BQU07c0JBQTFCLFNBQVM7dUJBQUMsUUFBUTtnQkFDQyxTQUFTO3NCQUE1QixTQUFTO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb25maXJtYXRpb25TZXJ2aWNlIH0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBUYWJsZSB9IGZyb20gJ3ByaW1lbmcvdGFibGUnO1xyXG5pbXBvcnQgeyBXYXBwVGFibGUgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL3dhcHAtdGFibGUubW9kZWwnO1xyXG5pbXBvcnQgeyBUYWJsZUNvbHVtbkZpbHRlclR5cGVzLCBUYWJsZUNvbHVtblR5cGVzLCBXRGF0ZVBpcGVGb3JtYXRUeXBlLCBXYXBwVGFibGVDb2x1bW5BbGlnblR5cGVzIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9lbnVtcy5tb2RlbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3ctdGFibGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi93LXRhYmxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi93LXRhYmxlLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbQ29uZmlybWF0aW9uU2VydmljZV1cclxuXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBXVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlc3tcclxuICBzZWxlY3RlZEVsZW1lbnRzOiBhbnlbXSA9IFtdO1xyXG4gIHRyYW5zbGF0aW9uczogYW55O1xyXG4gIHRyYW5zbGF0ZU9iamVjdE5hbWU6IHN0cmluZyA9IFwib2JqZWN0XCJcclxuICBzZWxlY3RBbGw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICB0YWJsZU1pbldpZHRoOiBudW1iZXIgPSA3MDtcclxuXHJcbiAgdGFibGVTa2VsZXRvbnM6IGFueSA9IFt7bmFtZTogJyd9LCB7bmFtZTogJyd9LCB7bmFtZTogJyd9LCB7bmFtZTogJyd9XTtcclxuICBcclxuICBwcml2YXRlIF90b3RhbFJlY29yZHM6IG51bWJlciA9IDA7XHJcblxyXG4gIHNldCB0b3RhbFJlY29yZHModmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy5fdG90YWxSZWNvcmRzID0gdmFsdWU7XHJcbiAgfSAgXHJcblxyXG4gIGdldCB0b3RhbFJlY29yZHMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fdG90YWxSZWNvcmRzO1xyXG4gIH1cclxuICBcclxuICB3YXBwRGF0ZUZvcm1hdDogdHlwZW9mIFdEYXRlUGlwZUZvcm1hdFR5cGUgPSBXRGF0ZVBpcGVGb3JtYXRUeXBlO1xyXG5cclxuICBASW5wdXQoJ2VsZW1lbnRzJykgZWxlbWVudHMhOiBhbnlbXTtcclxuICBASW5wdXQoJ3Jvd3NQZXJQYWdlJykgcm93c1BlclBhZ2U6IG51bWJlciA9IDA7XHJcbiAgQElucHV0KCdsb2FkaW5nJykgbG9hZGluZzogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCd3YXBwVGFibGVPYmplY3QnKSB3YXBwVGFibGVPYmplY3QhOiBXYXBwVGFibGU7XHJcblxyXG4gIEBPdXRwdXQoJ29uRWxlbWVudFNlbGVjdCcpIG9uRWxlbWVudFNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoJ29uVmlld0VsZW1lbnRTZWxlY3QnKSBvblZpZXdFbGVtZW50U2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgnb25Db3B5RWxlbWVudFNlbGVjdCcpIG9uQ29weUVsZW1lbnRTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCdvbkVkaXRFbGVtZW50U2VsZWN0Jykgb25FZGl0RWxlbWVudFNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoJ29uQ3VzdG9tRWxlbWVudFNlbGVjdCcpIG9uQ3VzdG9tRWxlbWVudFNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoJ29uRGVsZXRlRWxlbWVudFNlbGVjdCcpIG9uRGVsZXRlRWxlbWVudFNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XHJcbiAgQE91dHB1dCgnb25OZXdFbGVtZW50U2VsZWN0Jykgb25OZXdFbGVtZW50U2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG5cclxuICBAVmlld0NoaWxkKCdmaWx0ZXInKSBmaWx0ZXIhOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ3RhYmxlJykgZGF0YVRhYmxlITogVGFibGU7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBjb25maXJtYXRpb25TZXJ2aWNlOiBDb25maXJtYXRpb25TZXJ2aWNlLFxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQgeyB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmKGNoYW5nZXM/LlsnZWxlbWVudHMnXSAmJiBjaGFuZ2VzPy5bJ2VsZW1lbnRzJ10/LmN1cnJlbnRWYWx1ZS5sZW5ndGggIT0gMCkge1xyXG4gICAgICB0aGlzLnRvdGFsUmVjb3JkcyA9IGNoYW5nZXM/LlsnZWxlbWVudHMnXT8uY3VycmVudFZhbHVlLmxlbmd0aDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNyZWF0ZSgpIHtcclxuICAgIHRoaXMub25OZXdFbGVtZW50U2VsZWN0LmVtaXQodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBvbkVsZW1lbnQoZWxlbWVudDogYW55KXtcclxuICAgIHRoaXMub25FbGVtZW50U2VsZWN0LmVtaXQoZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICB2aWV3RWxlbWVudChlbGVtZW50OiBhbnkpe1xyXG4gICAgdGhpcy5vblZpZXdFbGVtZW50U2VsZWN0LmVtaXQoZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBlZGl0RWxlbWVudChlbGVtZW50OmFueSkge1xyXG4gICAgdGhpcy5vbkVkaXRFbGVtZW50U2VsZWN0LmVtaXQoZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBjdXN0b21FbGVtZW50KGVsZW1lbnQ6YW55KXtcclxuICAgIHRoaXMub25DdXN0b21FbGVtZW50U2VsZWN0LmVtaXQoZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICByZWFkUHJvcGVydHkob2JqOiBhbnksIHByb3A6c3RyaW5nKTphbnkge1xyXG4gICAgaWYodHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICB2YXIgX2luZGV4ID0gcHJvcC5pbmRleE9mKCcuJylcclxuICAgIGlmKF9pbmRleCA+IC0xKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVhZFByb3BlcnR5KG9ialtwcm9wLnN1YnN0cmluZygwLCBfaW5kZXgpXSwgcHJvcC5zdWJzdHIoX2luZGV4ICsgMSkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG9ialtwcm9wXTtcclxuICB9XHJcblxyXG4gIGNvbmZpcm1EZWxldGVTZWxlY3RlZChldmVudDphbnkpIHtcclxuICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKHtcclxuICAgICAgdGFyZ2V0OiBldmVudC50YXJnZXQgYXMgRXZlbnRUYXJnZXQsXHJcbiAgICAgIG1lc3NhZ2U6IHRoaXMud2FwcFRhYmxlT2JqZWN0LmNvbmZpcm1NdWx0aXBsZURlbGV0ZUxhYmVsLFxyXG4gICAgICBpY29uOiBcInBpIHBpLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlXCIsXHJcbiAgICAgIGFjY2VwdExhYmVsOiB0aGlzLndhcHBUYWJsZU9iamVjdC5jb25maXJtRGVsZXRlQnRuTGFiZWwsXHJcbiAgICAgIGFjY2VwdDogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuZGVsZXRlU2VsZWN0ZWRFbGVtZW50cygpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZVNlbGVjdGVkRWxlbWVudHMoKSB7XHJcbiAgICB0aGlzLm9uRGVsZXRlRWxlbWVudFNlbGVjdC5lbWl0KHRoaXMuc2VsZWN0ZWRFbGVtZW50cylcclxuICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50cyA9IFtdO1xyXG4gIH1cclxuXHJcbiAgY29uZmlybURlbGV0ZShldmVudDogRXZlbnQsIGVsZW1lbnQ6IGFueSkge1xyXG4gICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0oe1xyXG4gICAgICB0YXJnZXQ6IGV2ZW50LnRhcmdldCBhcyBFdmVudFRhcmdldCxcclxuICAgICAgbWVzc2FnZTogdGhpcy53YXBwVGFibGVPYmplY3QuY29uZmlybVNpbmdsZURlbGV0ZUxhYmVsLFxyXG4gICAgICBpY29uOiBcInBpIHBpLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlXCIsXHJcbiAgICAgIGFjY2VwdExhYmVsOiB0aGlzLndhcHBUYWJsZU9iamVjdC5jb25maXJtRGVsZXRlQnRuTGFiZWwsXHJcbiAgICAgIGFjY2VwdDogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuZGVsZXRlU2luZ2xlRWxlbWVudChlbGVtZW50KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVTaW5nbGVFbGVtZW50KGVsZW1lbnQ6IGFueSkge1xyXG4gICAgdGhpcy5vbkRlbGV0ZUVsZW1lbnRTZWxlY3QuZW1pdChbZWxlbWVudF0pXHJcbiAgfVxyXG5cclxuICBjb3B5RWxlbWVudChlbGVtZW50OiBhbnkpe1xyXG4gICAgdGhpcy5vbkNvcHlFbGVtZW50U2VsZWN0LmVtaXQoZWxlbWVudCk7XHJcbiAgfVxyXG4gIFxyXG4gIGNvbmZpcm1Db3B5KGV2ZW50OiBFdmVudCwgZWxlbWVudDogYW55KSB7XHJcbiAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XHJcbiAgICAgIHRhcmdldDogZXZlbnQudGFyZ2V0IGFzIEV2ZW50VGFyZ2V0LFxyXG4gICAgICBtZXNzYWdlOiB0aGlzLndhcHBUYWJsZU9iamVjdC5jb25maXJtQ29weUxhYmVsLFxyXG4gICAgICBpY29uOiBcInBpIHBpLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlXCIsXHJcbiAgICAgIGFjY2VwdExhYmVsOiB0aGlzLndhcHBUYWJsZU9iamVjdC5jb25maXJtQ29weUJ0bkxhYmVsLFxyXG4gICAgICBhY2NlcHQ6ICgpID0+IHtcclxuICAgICAgICB0aGlzLmNvcHlFbGVtZW50KGVsZW1lbnQpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uU2VsZWN0aW9uQ2hhbmdlKHZhbHVlID0gW10pIHtcclxuICAgIHRoaXMuc2VsZWN0QWxsID0gdmFsdWUubGVuZ3RoID09PSB0aGlzLmVsZW1lbnRzLmxlbmd0aDtcclxuICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50cyA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgb25TZWxlY3RBbGxDaGFuZ2UoZXZlbnQ6YW55KSB7XHJcbiAgICBjb25zdCBjaGVja2VkID0gZXZlbnQuY2hlY2tlZDtcclxuXHJcbiAgICBpZiAoY2hlY2tlZCkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50cyA9ICB0aGlzLndhcHBUYWJsZU9iamVjdC5kaXNhYmxlQ2hlY2tib3ggPyB0aGlzLmdldFNlbGVjdGFibGVFbGVtZW50cyh0aGlzLmVsZW1lbnRzKSA6IHRoaXMuZWxlbWVudHM7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RBbGwgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEVsZW1lbnRzID0gW107XHJcbiAgICAgICAgdGhpcy5zZWxlY3RBbGwgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFNlbGVjdGFibGVFbGVtZW50cyhhbGxFbGVtZW50czogYW55W10pIHtcclxuICAgIHJldHVybiBhbGxFbGVtZW50cy5maWx0ZXIoKGVsZW1lbnQ6YW55KSA9PiAhdGhpcy5yZWFkUHJvcGVydHkoZWxlbWVudCwgdGhpcy53YXBwVGFibGVPYmplY3QuZGlzYWJsZUNoZWNrYm94ISkpO1xyXG4gIH1cclxuXHJcbiAgb25HbG9iYWxGaWx0ZXIodGFibGU6IFRhYmxlLCBldmVudDogRXZlbnQpIHtcclxuICAgIHRhYmxlLmZpbHRlckdsb2JhbCgoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlLCAnY29udGFpbnMnKTtcclxuICB9XHJcblxyXG4gIGNsZWFyKHRhYmxlOiBUYWJsZSkge1xyXG4gICAgdGFibGUuY2xlYXIoKTtcclxuICB9XHJcbiAgXHJcbiAgcHVibGljIGdldCB0YWJsZUNvbHVtbkZpbHRlclR5cGVzKCk6IHR5cGVvZiBUYWJsZUNvbHVtbkZpbHRlclR5cGVzIHtcclxuICAgIHJldHVybiBUYWJsZUNvbHVtbkZpbHRlclR5cGVzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCB0YWJsZUNvbHVtblR5cGVzKCk6IHR5cGVvZiBUYWJsZUNvbHVtblR5cGVzIHtcclxuICAgIHJldHVybiBUYWJsZUNvbHVtblR5cGVzO1xyXG4gIH1cclxuXHJcbiAgZ2V0Qm9vbGVhbkNvbHVtbkNsYXNzKGluZGV4OiBudW1iZXIsIHZhbHVlUHJvcGVydHk6IGJvb2xlYW4pe1xyXG4gICAgY29uc3QgYm9vbGVhbkljb25DbGFzc2VzID0gW107XHJcblxyXG4gICAgaWYgKHZhbHVlUHJvcGVydHkgPT0gdHJ1ZSkge1xyXG4gICAgICBib29sZWFuSWNvbkNsYXNzZXMucHVzaCh0aGlzLndhcHBUYWJsZU9iamVjdC5jb2x1bW5Cb29sZWFuVHlwZUljb25zW2luZGV4XS50cnVlSWNvbiA/PyAnJyk7XHJcbiAgICAgIGJvb2xlYW5JY29uQ2xhc3Nlcy5wdXNoKHRoaXMud2FwcFRhYmxlT2JqZWN0LmNvbHVtbkJvb2xlYW5UeXBlSWNvbnNbaW5kZXhdLnRydWVJY29uQ29sb3IgPz8gJycpO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZVByb3BlcnR5ID09IGZhbHNlKSB7XHJcbiAgICAgIGJvb2xlYW5JY29uQ2xhc3Nlcy5wdXNoKHRoaXMud2FwcFRhYmxlT2JqZWN0LmNvbHVtbkJvb2xlYW5UeXBlSWNvbnNbaW5kZXhdLmZhbHNlSWNvbiA/PyAnJyk7XHJcbiAgICAgIGJvb2xlYW5JY29uQ2xhc3Nlcy5wdXNoKHRoaXMud2FwcFRhYmxlT2JqZWN0LmNvbHVtbkJvb2xlYW5UeXBlSWNvbnNbaW5kZXhdLmZhbHNlSWNvbkNvbG9yID8/ICcnKTtcclxuICAgIH0gZWxzZSBpZiAodmFsdWVQcm9wZXJ0eSA9PSBudWxsKSB7XHJcbiAgICAgIGJvb2xlYW5JY29uQ2xhc3Nlcy5wdXNoKHRoaXMud2FwcFRhYmxlT2JqZWN0LmNvbHVtbkJvb2xlYW5UeXBlSWNvbnNbaW5kZXhdLm51bGxJY29uID8/ICcnKTtcclxuICAgICAgYm9vbGVhbkljb25DbGFzc2VzLnB1c2godGhpcy53YXBwVGFibGVPYmplY3QuY29sdW1uQm9vbGVhblR5cGVJY29uc1tpbmRleF0ubnVsbEljb25Db2xvciA/PyAnJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGJvb2xlYW5JY29uQ2xhc3NlcztcclxuICB9XHJcblxyXG4gIGNsZWFyRmlsdGVycygpIHtcclxuICAgIHRoaXMuZGF0YVRhYmxlLmNsZWFyKCk7XHJcbiAgfVxyXG5cclxuICBnZXRUYWJsZUNvbHVtbkFsaWduQ2xhc3MoYWxpZ25tZW50OiBudW1iZXIpIHtcclxuICAgIGlmKGFsaWdubWVudCA9PSBXYXBwVGFibGVDb2x1bW5BbGlnblR5cGVzLlJpZ2h0KSByZXR1cm4gJ3RleHQtcmlnaHQnO1xyXG4gICAgaWYoYWxpZ25tZW50ID09IFdhcHBUYWJsZUNvbHVtbkFsaWduVHlwZXMuTGVmdCkgcmV0dXJuICd0ZXh0LWxlZnQnO1xyXG4gICAgaWYoYWxpZ25tZW50ID09IFdhcHBUYWJsZUNvbHVtbkFsaWduVHlwZXMuQ2VudGVyKSByZXR1cm4gJ3RleHQtY2VudGVyJztcclxuICAgIHJldHVybiAndGV4dC1sZWZ0J1xyXG4gIH1cclxuXHJcbiAgZ2V0VGFibGVDb2x1bW5BbGlnbkNsYXNzRGVmYXVsdEJ5Q29sdW1uVHlwZShjb2x1bW5UeXBlOiBUYWJsZUNvbHVtblR5cGVzKSB7XHJcbiAgICBpZihjb2x1bW5UeXBlID09IFRhYmxlQ29sdW1uVHlwZXMuVGV4dCkgcmV0dXJuICd0ZXh0LWxlZnQnO1xyXG4gICAgaWYoY29sdW1uVHlwZSA9PSBUYWJsZUNvbHVtblR5cGVzLkN1cnJlbmN5KSByZXR1cm4gJ3RleHQtbGVmdCc7XHJcbiAgICBpZihjb2x1bW5UeXBlID09IFRhYmxlQ29sdW1uVHlwZXMuRGF0ZSkgcmV0dXJuICd0ZXh0LWxlZnQnO1xyXG4gICAgaWYoY29sdW1uVHlwZSA9PSBUYWJsZUNvbHVtblR5cGVzLkJhZGdlKSByZXR1cm4gJ3RleHQtY2VudGVyJztcclxuICAgIGlmKGNvbHVtblR5cGUgPT0gVGFibGVDb2x1bW5UeXBlcy5Cb29sZWFuKSByZXR1cm4gJ3RleHQtY2VudGVyJztcclxuICAgIGlmKGNvbHVtblR5cGUgPT0gVGFibGVDb2x1bW5UeXBlcy5JbWFnZSkgcmV0dXJuICd0ZXh0LWNlbnRlcic7XHJcbiAgICBpZihjb2x1bW5UeXBlID09IFRhYmxlQ29sdW1uVHlwZXMuTnVtYmVyKSByZXR1cm4gJ3RleHQtcmlnaHQnO1xyXG4gICAgcmV0dXJuICd0ZXh0LWxlZnQnXHJcbiAgfVxyXG59XHJcbiIsIjxuZy1jb250ZW50IHNlbGVjdD1cIi5maWx0ZXItcGFuZWxcIj48L25nLWNvbnRlbnQ+XHJcbjxkaXYgKm5nSWY9XCJ3YXBwVGFibGVPYmplY3RcIiBbY2xhc3MudGFibGUtY29udGFpbmVyXT1cIndhcHBUYWJsZU9iamVjdC50YWJsZUNvbnRhaW5lclwiPlxyXG4gICAgPHAtdGFibGUgY2xhc3M9XCJ3LXRhYmxlLXN0eWxlc1wiIFxyXG4gICAgICAgICAgICAqbmdJZj1cIiFsb2FkaW5nOyBlbHNlIGxvYWRpbmdUYWJsZVwiICN0YWJsZSBcclxuICAgICAgICAgICAgW3ZhbHVlXT1cImVsZW1lbnRzXCIgZGF0YUtleT1cInt7d2FwcFRhYmxlT2JqZWN0LmlkZW50aWZpY2F0b3J9fVwiIFxyXG4gICAgICAgICAgICBbcGFnaW5hdG9yXT1cIndhcHBUYWJsZU9iamVjdC5oYXNQYWdpbmF0b3JcIlxyXG4gICAgICAgICAgICBbc2VsZWN0aW9uXT1cInNlbGVjdGVkRWxlbWVudHNcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICBbc2VsZWN0QWxsXT1cInNlbGVjdEFsbFwiIChzZWxlY3RBbGxDaGFuZ2UpPVwib25TZWxlY3RBbGxDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIFt0b3RhbFJlY29yZHNdPVwidG90YWxSZWNvcmRzXCIgW3Nob3dDdXJyZW50UGFnZVJlcG9ydF09XCJ0cnVlXCIgXHJcbiAgICAgICAgICAgIFtyb3dzXT1cInJvd3NQZXJQYWdlXCJcclxuICAgICAgICAgICAgW2N1cnJlbnRQYWdlUmVwb3J0VGVtcGxhdGVdPVwid2FwcFRhYmxlT2JqZWN0LmN1cnJlbnRQYWdlUmVwb3J0VGVtcGxhdGUgPyB3YXBwVGFibGVPYmplY3QuY3VycmVudFBhZ2VSZXBvcnRUZW1wbGF0ZSArICcgJyArICByb3dzUGVyUGFnZSArICcgZGUgJyArIHRvdGFsUmVjb3JkcyEgOiAnU2hvd2luZyAnICsgcm93c1BlclBhZ2UgKyAnIG9mICcgKyB0b3RhbFJlY29yZHMhXCJcclxuICAgICAgICAgICAgW2dsb2JhbEZpbHRlckZpZWxkc109XCJ3YXBwVGFibGVPYmplY3QuZ2xvYmFsRmlsdGVyRmllbGRzIVwiIHJlc3BvbnNpdmVMYXlvdXQ9XCJzY3JvbGxcIlxyXG4gICAgICAgICAgICBbcm93SG92ZXJdPVwidHJ1ZVwiIFt0YWJsZVN0eWxlXT1cInsnbWluLXdpZHRoJzogd2FwcFRhYmxlT2JqZWN0LnRhYmxlTWluV2lkdGghfVwiXHJcbiAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJwLWRhdGF0YWJsZS1zdHJpcGVkXCI+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImNhcHRpb25cIiAqbmdJZj1cIndhcHBUYWJsZU9iamVjdD8uaGFzQ2xlYXJCdXR0b24gfHwgd2FwcFRhYmxlT2JqZWN0Lmhhc0dsb2JhbFNlYXJjaFwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIHRhYmxlLXBhZ2luYXRvciBwLTBcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwid2FwcFRhYmxlT2JqZWN0Lmhhc1RvdGFsUGFnaW5nU2VsZWN0b3JcIiBjbGFzcz1cInNob3dpbmctcGVyLXBhZ2VcIj4ge3t3YXBwVGFibGVPYmplY3QuY3VycmVudFBhZ2VSZXBvcnRUZW1wbGF0ZX19IDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxwLWlucHV0TnVtYmVyICpuZ0lmPVwid2FwcFRhYmxlT2JqZWN0Lmhhc1RvdGFsUGFnaW5nU2VsZWN0b3JcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicGwtMiBzaG93aW5nLXBlci1wYWdlXCIgW3NpemVdPVwiMVwiIFsobmdNb2RlbCldPVwicm93c1BlclBhZ2VcIiBbc2hvd0J1dHRvbnNdPVwidHJ1ZVwiIFxyXG4gICAgICAgICAgICAgICAgICAgIGJ1dHRvbkxheW91dD1cImhvcml6b250YWxcIiBpbnB1dElkPVwiaG9yaXpvbnRhbFwiIHNwaW5uZXJNb2RlPVwiaG9yaXpvbnRhbFwiIFtzdGVwXT1cIjFcIiBbbWluXT1cIjFcIiBbbWF4XT1cInRvdGFsUmVjb3JkcyFcIlxyXG4gICAgICAgICAgICAgICAgICAgIGRlY3JlbWVudEJ1dHRvbkNsYXNzPVwicC1idXR0b24tb3V0bGluZWRcIiBcclxuICAgICAgICAgICAgICAgICAgICBpbmNyZW1lbnRCdXR0b25DbGFzcz1cInAtYnV0dG9uLW91dGxpbmVkXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgaW5jcmVtZW50QnV0dG9uSWNvbj1cInBpIHBpLXBsdXNcIiBcclxuICAgICAgICAgICAgICAgICAgICBkZWNyZW1lbnRCdXR0b25JY29uPVwicGkgcGktbWludXNcIiBcclxuICAgICAgICAgICAgICAgICAgICBtb2RlPVwiZGVjaW1hbFwiPlxyXG4gICAgICAgICAgICAgICAgPC9wLWlucHV0TnVtYmVyPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ3YXBwVGFibGVPYmplY3Q/Lmhhc0dsb2JhbFNlYXJjaFwiIGNsYXNzPVwicC1pbnB1dC1pY29uLWxlZnQgbWwtYXV0b1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktc2VhcmNoXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBwSW5wdXRUZXh0IHR5cGU9XCJ0ZXh0XCIgI2ZpbHRlciAoaW5wdXQpPVwib25HbG9iYWxGaWx0ZXIodGFibGUsICRldmVudClcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIndhcHBUYWJsZU9iamVjdC5zZWFyY2hQbGFjZWhvbGRlclwiIGNsYXNzPVwidy1mdWxsIGhlaWdodC1pbnB1dCB3LWlucHV0XCIvPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoICpuZ0lmPVwid2FwcFRhYmxlT2JqZWN0Lmhhc0NoZWNrYm94XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIndhcHBUYWJsZU9iamVjdC5jb2x1bW5BbGlnbiA/IGdldFRhYmxlQ29sdW1uQWxpZ25DbGFzcyh3YXBwVGFibGVPYmplY3QuY29sdW1uQWxpZ25bMF0pIDogJ3RleHQtbGVmdCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHAtdGFibGVIZWFkZXJDaGVja2JveD48L3AtdGFibGVIZWFkZXJDaGVja2JveD5cclxuICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhd2FwcFRhYmxlT2JqZWN0Lmhhc1NvcnRhYmxlQ29sdW1uczsgZWxzZSBzb3J0YWJsZUNvbHVtbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBoZWFkZXIgb2Ygd2FwcFRhYmxlT2JqZWN0Py5oZWFkZXJzOyBpbmRleCBhcyBpXCIgW2NsYXNzXT1cImhlYWRlciA9PSAoJ0ltYWdlbicgfHwgJ0ltYWdlJykgPyAnaW1hZ2UtaGVhZGVyJzogJydcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIndhcHBUYWJsZU9iamVjdC5jb2x1bW5BbGlnbiA/IGdldFRhYmxlQ29sdW1uQWxpZ25DbGFzcyh3YXBwVGFibGVPYmplY3QuY29sdW1uQWxpZ25bd2FwcFRhYmxlT2JqZWN0Lmhhc0NoZWNrYm94ID8gaSsxIDogaV0pIDogZ2V0VGFibGVDb2x1bW5BbGlnbkNsYXNzRGVmYXVsdEJ5Q29sdW1uVHlwZSh3YXBwVGFibGVPYmplY3QuY29sdW1uVHlwZXNbd2FwcFRhYmxlT2JqZWN0Lmhhc0NoZWNrYm94ID8gaSsxIDogaV0pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7aGVhZGVyfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3NvcnRhYmxlQ29sdW1ucz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nRm9yIGxldC1maWx0ZXJUeXBlIFtuZ0Zvck9mXT1cIndhcHBUYWJsZU9iamVjdC5oZWFkZXJzXCIgbGV0LWk9XCJpbmRleFwiPiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBbcFNvcnRhYmxlQ29sdW1uXT1cIndhcHBUYWJsZU9iamVjdC5zb3J0YWJsZU5hbWVzW2ldXCIgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJ3YXBwVGFibGVPYmplY3QuaGVhZGVyc1tpXSA9PSAoJ0ltYWdlbicgfHwgJ0ltYWdlJykgPyAnaW1hZ2UtaGVhZGVyJzogJydcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ3YXBwVGFibGVPYmplY3QuY29sdW1uQWxpZ24gPyBnZXRUYWJsZUNvbHVtbkFsaWduQ2xhc3Mod2FwcFRhYmxlT2JqZWN0LmNvbHVtbkFsaWduW3dhcHBUYWJsZU9iamVjdC5oYXNDaGVja2JveCA/IGkrMSA6IGldKSA6IGdldFRhYmxlQ29sdW1uQWxpZ25DbGFzc0RlZmF1bHRCeUNvbHVtblR5cGUod2FwcFRhYmxlT2JqZWN0LmNvbHVtblR5cGVzW3dhcHBUYWJsZU9iamVjdC5oYXNDaGVja2JveCA/IGkrMSA6IGldKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3dhcHBUYWJsZU9iamVjdC5oZWFkZXJzW2ldfX0gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cC1zb3J0SWNvbiAqbmdJZj1cIndhcHBUYWJsZU9iamVjdC5zb3J0YWJsZU5hbWVzW2ldICE9IG51bGxcIiBbZmllbGRdPVwid2FwcFRhYmxlT2JqZWN0LnNvcnRhYmxlTmFtZXNbaV1cIj48L3Atc29ydEljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoICpuZ0lmPVwid2FwcFRhYmxlT2JqZWN0Lmhhc0RlbGV0ZUJ1dHRvbiB8fCB3YXBwVGFibGVPYmplY3QuaGFzRWRpdEJ1dHRvblwiPjwvdGg+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImJvZHlcIiBsZXQtZWxlbWVudD5cclxuICAgICAgICAgICAgPHRyIFtuZ0NsYXNzXT1cIndhcHBUYWJsZU9iamVjdC5oYXNTZWxlY3RhYmxlUm93ID8gJ3Atc2VsZWN0YWJsZS1yb3cnIDogJydcIiAoY2xpY2spPVwid2FwcFRhYmxlT2JqZWN0Lmhhc1NlbGVjdGFibGVSb3cgPyBvbkVsZW1lbnQoZWxlbWVudCkgOiAnJ1wiPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nRm9yIGxldC1jb2x1bW5UeXBlIFtuZ0Zvck9mXT1cIndhcHBUYWJsZU9iamVjdC5jb2x1bW5UeXBlcyFcIiBsZXQtaT1cImluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwiY29sdW1uVHlwZSA9PSB0YWJsZUNvbHVtblR5cGVzPy5DaGVja2JveCEgJiYgIHdhcHBUYWJsZU9iamVjdC5oYXNDaGVja2JveFwiIFtzdHlsZV09XCInd2lkdGg6ICcrd2FwcFRhYmxlT2JqZWN0LmNvbHVtbldpZHRocyFbaV1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ3YXBwVGFibGVPYmplY3QuY29sdW1uQWxpZ24gPyBnZXRUYWJsZUNvbHVtbkFsaWduQ2xhc3Mod2FwcFRhYmxlT2JqZWN0LmNvbHVtbkFsaWduW2ldKSA6ICd0ZXh0LWNlbnRlcidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIndhcHBUYWJsZU9iamVjdC5kaXNhYmxlQ2hlY2tib3g7IGVsc2UgYWN0aXZlQ2hlY2tib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwLXRhYmxlQ2hlY2tib3ggW3ZhbHVlXT1cImVsZW1lbnRcIiBbZGlzYWJsZWRdPVwicmVhZFByb3BlcnR5KGVsZW1lbnQsIHdhcHBUYWJsZU9iamVjdC5kaXNhYmxlQ2hlY2tib3gpXCI+PC9wLXRhYmxlQ2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2FjdGl2ZUNoZWNrYm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAtdGFibGVDaGVja2JveCBbdmFsdWVdPVwiZWxlbWVudFwiPjwvcC10YWJsZUNoZWNrYm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwiY29sdW1uVHlwZSA9PSB0YWJsZUNvbHVtblR5cGVzLkltYWdlXCIgW3N0eWxlXT1cIid3aWR0aDogJyt3YXBwVGFibGVPYmplY3QuY29sdW1uV2lkdGhzW2ldXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIndhcHBUYWJsZU9iamVjdC5jb2x1bW5BbGlnbiA/IGdldFRhYmxlQ29sdW1uQWxpZ25DbGFzcyh3YXBwVGFibGVPYmplY3QuY29sdW1uQWxpZ25baV0pIDogJ3RleHQtY2VudGVyJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW1nICpuZ0lmPVwicmVhZFByb3BlcnR5KGVsZW1lbnQsIHdhcHBUYWJsZU9iamVjdC5jb2x1bW5zW2ldKVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwicmVhZFByb3BlcnR5KGVsZW1lbnQsIHdhcHBUYWJsZU9iamVjdC5jb2x1bW5zW2ldKVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZWxlbWVudC1pbWFnZS13aWR0aFwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cImNvbHVtblR5cGUgPT0gdGFibGVDb2x1bW5UeXBlcy5UZXh0XCIgIFtzdHlsZV09XCInd2lkdGg6ICcrd2FwcFRhYmxlT2JqZWN0LmNvbHVtbldpZHRoc1tpXVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ3YXBwVGFibGVPYmplY3QuY29sdW1uQWxpZ24gPyBnZXRUYWJsZUNvbHVtbkFsaWduQ2xhc3Mod2FwcFRhYmxlT2JqZWN0LmNvbHVtbkFsaWduW2ldKSA6ICd0ZXh0LWxlZnQnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyByZWFkUHJvcGVydHkoZWxlbWVudCwgd2FwcFRhYmxlT2JqZWN0LmNvbHVtbnNbaV0pIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJjb2x1bW5UeXBlID09IHRhYmxlQ29sdW1uVHlwZXMuTnVtYmVyXCIgIFtzdHlsZV09XCInd2lkdGg6ICcrd2FwcFRhYmxlT2JqZWN0LmNvbHVtbldpZHRoc1tpXVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ3YXBwVGFibGVPYmplY3QuY29sdW1uQWxpZ24gPyBnZXRUYWJsZUNvbHVtbkFsaWduQ2xhc3Mod2FwcFRhYmxlT2JqZWN0LmNvbHVtbkFsaWduW2ldKSA6ICd0ZXh0LXJpZ2h0J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgcmVhZFByb3BlcnR5KGVsZW1lbnQsIHdhcHBUYWJsZU9iamVjdC5jb2x1bW5zW2ldKSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwiY29sdW1uVHlwZSA9PSB0YWJsZUNvbHVtblR5cGVzLkN1cnJlbmN5XCIgW3N0eWxlXT1cIid3aWR0aDogJyt3YXBwVGFibGVPYmplY3QuY29sdW1uV2lkdGhzW2ldXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIndhcHBUYWJsZU9iamVjdC5jb2x1bW5BbGlnbiA/IGdldFRhYmxlQ29sdW1uQWxpZ25DbGFzcyh3YXBwVGFibGVPYmplY3QuY29sdW1uQWxpZ25baV0pIDogJ3RleHQtcmlnaHQnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyByZWFkUHJvcGVydHkoZWxlbWVudCwgd2FwcFRhYmxlT2JqZWN0LmNvbHVtbnNbaV0pIHwgY3VycmVuY3kgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cImNvbHVtblR5cGUgPT0gdGFibGVDb2x1bW5UeXBlcy5CYWRnZVwiIFtzdHlsZV09XCInd2lkdGg6ICcrd2FwcFRhYmxlT2JqZWN0LmNvbHVtbldpZHRoc1tpXVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ3YXBwVGFibGVPYmplY3QuY29sdW1uQWxpZ24gPyBnZXRUYWJsZUNvbHVtbkFsaWduQ2xhc3Mod2FwcFRhYmxlT2JqZWN0LmNvbHVtbkFsaWduW2ldKSA6ICd0ZXh0LWNlbnRlcidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3LWJhZGdlIFtsYWJlbF09XCJyZWFkUHJvcGVydHkoZWxlbWVudCwgd2FwcFRhYmxlT2JqZWN0LmNvbHVtbnNbaV0pXCIgW2NvbG9yXT1cIidpbmZvJ1wiPjwvdy1iYWRnZT4gICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cImNvbHVtblR5cGUgPT0gdGFibGVDb2x1bW5UeXBlcy5Cb29sZWFuXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIndhcHBUYWJsZU9iamVjdC5jb2x1bW5BbGlnbiA/IGdldFRhYmxlQ29sdW1uQWxpZ25DbGFzcyh3YXBwVGFibGVPYmplY3QuY29sdW1uQWxpZ25baV0pIDogJ3RleHQtY2VudGVyJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJwaVwiIFtuZ0NsYXNzXT1cImdldEJvb2xlYW5Db2x1bW5DbGFzcyhpLCByZWFkUHJvcGVydHkoZWxlbWVudCwgd2FwcFRhYmxlT2JqZWN0LmNvbHVtbnNbaV0pKVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cImNvbHVtblR5cGUgPT0gdGFibGVDb2x1bW5UeXBlcy5EYXRlXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIndhcHBUYWJsZU9iamVjdC5jb2x1bW5BbGlnbiA/IGdldFRhYmxlQ29sdW1uQWxpZ25DbGFzcyh3YXBwVGFibGVPYmplY3QuY29sdW1uQWxpZ25baV0pIDogJ3RleHQtbGVmdCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHJlYWRQcm9wZXJ0eShlbGVtZW50LCB3YXBwVGFibGVPYmplY3QuY29sdW1uc1tpXSkgfCB3YXBwRGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwiY29sdW1uVHlwZSA9PSB0YWJsZUNvbHVtblR5cGVzLlNob3J0RGF0ZVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ3YXBwVGFibGVPYmplY3QuY29sdW1uQWxpZ24gPyBnZXRUYWJsZUNvbHVtbkFsaWduQ2xhc3Mod2FwcFRhYmxlT2JqZWN0LmNvbHVtbkFsaWduW2ldKSA6ICd0ZXh0LWxlZnQnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyByZWFkUHJvcGVydHkoZWxlbWVudCwgd2FwcFRhYmxlT2JqZWN0LmNvbHVtbnNbaV0pIHwgd2FwcERhdGUgOiB3YXBwRGF0ZUZvcm1hdC5kIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJjb2x1bW5UeXBlID09IHRhYmxlQ29sdW1uVHlwZXMuTG9uZ0RhdGVcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwid2FwcFRhYmxlT2JqZWN0LmNvbHVtbkFsaWduID8gZ2V0VGFibGVDb2x1bW5BbGlnbkNsYXNzKHdhcHBUYWJsZU9iamVjdC5jb2x1bW5BbGlnbltpXSkgOiAndGV4dC1sZWZ0J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgcmVhZFByb3BlcnR5KGVsZW1lbnQsIHdhcHBUYWJsZU9iamVjdC5jb2x1bW5zW2ldKSB8IHdhcHBEYXRlIDogd2FwcERhdGVGb3JtYXQuRCB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwiY29sdW1uVHlwZSA9PSB0YWJsZUNvbHVtblR5cGVzLkdlbmVyYWxEYXRlVGltZVNob3J0VGltZVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ3YXBwVGFibGVPYmplY3QuY29sdW1uQWxpZ24gPyBnZXRUYWJsZUNvbHVtbkFsaWduQ2xhc3Mod2FwcFRhYmxlT2JqZWN0LmNvbHVtbkFsaWduW2ldKSA6ICd0ZXh0LWxlZnQnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyByZWFkUHJvcGVydHkoZWxlbWVudCwgd2FwcFRhYmxlT2JqZWN0LmNvbHVtbnNbaV0pIHwgd2FwcERhdGUgOiB3YXBwRGF0ZUZvcm1hdC5nIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJjb2x1bW5UeXBlID09IHRhYmxlQ29sdW1uVHlwZXMuR2VuZXJhbERhdGVUaW1lTG9uZ1RpbWVcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwid2FwcFRhYmxlT2JqZWN0LmNvbHVtbkFsaWduID8gZ2V0VGFibGVDb2x1bW5BbGlnbkNsYXNzKHdhcHBUYWJsZU9iamVjdC5jb2x1bW5BbGlnbltpXSkgOiAndGV4dC1sZWZ0J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgcmVhZFByb3BlcnR5KGVsZW1lbnQsIHdhcHBUYWJsZU9iamVjdC5jb2x1bW5zW2ldKSB8IHdhcHBEYXRlIDogd2FwcERhdGVGb3JtYXQuRyB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwid2FwcFRhYmxlT2JqZWN0Py5oYXNWaWV3QnV0dG9uIHx8IHdhcHBUYWJsZU9iamVjdC5jdXN0b21CdXR0b25Db25maWc/Lmhhc0N1c3RvbUJ1dHRvbiB8fCB3YXBwVGFibGVPYmplY3Q/Lmhhc0VkaXRCdXR0b24gfHwgd2FwcFRhYmxlT2JqZWN0Py5oYXNDb3B5QnV0dG9uIHx8IHdhcHBUYWJsZU9iamVjdD8uaGFzRGVsZXRlQnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwid2FwcFRhYmxlT2JqZWN0Py5oYXNWaWV3QnV0dG9uXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cIndhcHBUYWJsZU9iamVjdC5idXR0b25Ub29sdGlwcz8udmlld1Rvb2x0aXAhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cIndhcHBUYWJsZU9iamVjdC5idXR0b25Ub29sdGlwcz8ucG9zaXRpb24hXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQnV0dG9uIHBSaXBwbGUgKGNsaWNrKT1cInZpZXdFbGVtZW50KGVsZW1lbnQpXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLWV5ZVwiIGNsYXNzPVwicC1idXR0b24tdGV4dCBwLWJ1dHRvbi1pbmZvIG1yLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJ3YXBwVGFibGVPYmplY3QuY3VzdG9tQnV0dG9uQ29uZmlnPy5oYXNDdXN0b21CdXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBCdXR0b24gcFJpcHBsZSAoY2xpY2spPVwiY3VzdG9tRWxlbWVudChlbGVtZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cIndhcHBUYWJsZU9iamVjdC5idXR0b25Ub29sdGlwcz8uY3VzdG9tVG9vbHRpcCFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwid2FwcFRhYmxlT2JqZWN0LmJ1dHRvblRvb2x0aXBzPy5wb3NpdGlvbiFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uXT1cIndhcHBUYWJsZU9iamVjdC5jdXN0b21CdXR0b25Db25maWc/Lmljb24hXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInAtYnV0dG9uLXRleHQgcC1idXR0b24taW5mbyBtci0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIndhcHBUYWJsZU9iamVjdD8uaGFzRWRpdEJ1dHRvbiAmJiAhd2FwcFRhYmxlT2JqZWN0LmRpc2FibGVFZGl0UHJvcGVydHlcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwid2FwcFRhYmxlT2JqZWN0LmJ1dHRvblRvb2x0aXBzPy5lZGl0VG9vbHRpcCFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwid2FwcFRhYmxlT2JqZWN0LmJ1dHRvblRvb2x0aXBzPy5wb3NpdGlvbiFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBCdXR0b24gcFJpcHBsZSAoY2xpY2spPVwiZWRpdEVsZW1lbnQoZWxlbWVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJwaSBwaS1wZW5jaWxcIiBjbGFzcz1cInAtYnV0dG9uLXRleHQgcC1idXR0b24tc3VjY2VzcyBtci0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwid2FwcFRhYmxlT2JqZWN0LmRpc2FibGVFZGl0UHJvcGVydHlcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQnV0dG9uIHBSaXBwbGUgKGNsaWNrKT1cImVkaXRFbGVtZW50KGVsZW1lbnQpXCIgW2Rpc2FibGVkXT1cInJlYWRQcm9wZXJ0eShlbGVtZW50LCB3YXBwVGFibGVPYmplY3QuZGlzYWJsZUVkaXRQcm9wZXJ0eSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJ3YXBwVGFibGVPYmplY3QuYnV0dG9uVG9vbHRpcHM/LmVkaXRUb29sdGlwIVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCJ3YXBwVGFibGVPYmplY3QuYnV0dG9uVG9vbHRpcHM/LnBvc2l0aW9uIVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLXBlbmNpbFwiIGNsYXNzPVwicC1idXR0b24tdGV4dCBwLWJ1dHRvbi1zdWNjZXNzIG1yLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJ3YXBwVGFibGVPYmplY3Q/Lmhhc0NvcHlCdXR0b25cIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQnV0dG9uIHBSaXBwbGUgKGNsaWNrKT1cImNvbmZpcm1Db3B5KCRldmVudCwgZWxlbWVudClcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwid2FwcFRhYmxlT2JqZWN0LmJ1dHRvblRvb2x0aXBzPy5jb3B5VG9vbHRpcCFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwid2FwcFRhYmxlT2JqZWN0LmJ1dHRvblRvb2x0aXBzPy5wb3NpdGlvbiFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJwaSBwaS1jb3B5XCIgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLWhlbHAgbXItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ3YXBwVGFibGVPYmplY3Q/Lmhhc0RlbGV0ZUJ1dHRvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIndhcHBUYWJsZU9iamVjdC5kaXNhYmxlRGVsZXRlUHJvcGVydHk7IGVsc2Ugbm9EaXNhYmxlRGVsZXRlXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBCdXR0b24gcFJpcHBsZSAoY2xpY2spPVwiY29uZmlybURlbGV0ZSgkZXZlbnQsIGVsZW1lbnQpXCIgW2Rpc2FibGVkXT1cInJlYWRQcm9wZXJ0eShlbGVtZW50LCB3YXBwVGFibGVPYmplY3QuZGlzYWJsZURlbGV0ZVByb3BlcnR5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJ3YXBwVGFibGVPYmplY3QuYnV0dG9uVG9vbHRpcHM/LmRlbGV0ZVRvb2x0aXAhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCJ3YXBwVGFibGVPYmplY3QuYnV0dG9uVG9vbHRpcHM/LnBvc2l0aW9uIVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJwaSBwaS10cmFzaFwiIGNsYXNzPVwicC1idXR0b24tdGV4dCBwLWJ1dHRvbi1kYW5nZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub0Rpc2FibGVEZWxldGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiF3YXBwVGFibGVPYmplY3Q/LmRpc2FibGVEZWxldGUgJiYgIXdhcHBUYWJsZU9iamVjdC5kaXNhYmxlRGVsZXRlUHJvcGVydHlcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJ3YXBwVGFibGVPYmplY3QuYnV0dG9uVG9vbHRpcHM/LmRlbGV0ZVRvb2x0aXAhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwid2FwcFRhYmxlT2JqZWN0LmJ1dHRvblRvb2x0aXBzPy5wb3NpdGlvbiFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEJ1dHRvbiBwUmlwcGxlIChjbGljayk9XCJjb25maXJtRGVsZXRlKCRldmVudCwgZWxlbWVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLXRyYXNoXCIgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLWRhbmdlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJlbXB0eW1lc3NhZ2VcIj5cclxuICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI4XCI+Tm8gZWxlbWVudHMuPC90ZD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJsb2FkaW5nYm9keVwiPlxyXG4gICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjhcIj5Mb2FkaW5nIGVsZW1lbnRzLjwvdGQ+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvcC10YWJsZT5cclxuICAgIFxyXG4gICAgPG5nLXRlbXBsYXRlICNsb2FkaW5nVGFibGU+XHJcbiAgICA8cC10YWJsZSBjbGFzcz1cInctdGFibGUtc3R5bGVzXCIgW3ZhbHVlXT1cInRhYmxlU2tlbGV0b25zXCIgcmVzcG9uc2l2ZUxheW91dD1cInNjcm9sbFwiIFtwYWdpbmF0b3JdPVwid2FwcFRhYmxlT2JqZWN0Lmhhc1BhZ2luYXRvclwiIFtyb3dzXT1cInJvd3NQZXJQYWdlXCIgW3RvdGFsUmVjb3Jkc109XCJ0b3RhbFJlY29yZHNcIlxyXG4gICAgICAgICAgICBbc2hvd0N1cnJlbnRQYWdlUmVwb3J0XT1cInRydWVcIiBcclxuICAgICAgICAgICAgW2N1cnJlbnRQYWdlUmVwb3J0VGVtcGxhdGVdPVwid2FwcFRhYmxlT2JqZWN0LmN1cnJlbnRQYWdlUmVwb3J0VGVtcGxhdGUgPyB3YXBwVGFibGVPYmplY3QuY3VycmVudFBhZ2VSZXBvcnRUZW1wbGF0ZSArICcgJyArICByb3dzUGVyUGFnZSArICcgZGUgJyArIHRvdGFsUmVjb3JkcyA6ICdTaG93aW5nICcgKyByb3dzUGVyUGFnZSArICcgb2YgJyArIHRvdGFsUmVjb3Jkc1wiXHJcbiAgICAgICAgICAgICBzdHlsZUNsYXNzPVwicC1kYXRhdGFibGUtc3RyaXBlZFwiPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cIndhcHBUYWJsZU9iamVjdD8uaGFzQ2xlYXJCdXR0b24gfHwgd2FwcFRhYmxlT2JqZWN0Lmhhc0dsb2JhbFNlYXJjaFwiIHBUZW1wbGF0ZT1cImNhcHRpb25cIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciB0YWJsZS1wYWdpbmF0b3IgcC0wXCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIDxidXR0b24gKm5nSWY9XCJ3YXBwVGFibGVPYmplY3QuaGFzQ2xlYXJCdXR0b25cIiBwQnV0dG9uIGxhYmVsPVwiQ2xlYXJcIiBjbGFzcz1cInAtYnV0dG9uLW91dGxpbmVkXCIgaWNvbj1cInBpIHBpLWZpbHRlci1zbGFzaFwiPjwvYnV0dG9uPiAtLT5cclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwid2FwcFRhYmxlT2JqZWN0Lmhhc1RvdGFsUGFnaW5nU2VsZWN0b3JcIiBjbGFzcz1cInNob3dpbmctcGVyLXBhZ2VcIj4ge3t3YXBwVGFibGVPYmplY3QuY3VycmVudFBhZ2VSZXBvcnRUZW1wbGF0ZX19IDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxwLWlucHV0TnVtYmVyICpuZ0lmPVwid2FwcFRhYmxlT2JqZWN0Lmhhc1RvdGFsUGFnaW5nU2VsZWN0b3JcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicGwtMiBzaG93aW5nLXBlci1wYWdlXCIgW3NpemVdPVwiMVwiIFsobmdNb2RlbCldPVwicm93c1BlclBhZ2VcIiBbc2hvd0J1dHRvbnNdPVwidHJ1ZVwiIFxyXG4gICAgICAgICAgICAgICAgICAgIGJ1dHRvbkxheW91dD1cImhvcml6b250YWxcIiBpbnB1dElkPVwiaG9yaXpvbnRhbFwiIHNwaW5uZXJNb2RlPVwiaG9yaXpvbnRhbFwiIFtzdGVwXT1cIjFcIiBbbWluXT1cIjFcIiBbbWF4XT1cInRvdGFsUmVjb3Jkc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgZGVjcmVtZW50QnV0dG9uQ2xhc3M9XCJwLWJ1dHRvbi1vdXRsaW5lZFwiIFxyXG4gICAgICAgICAgICAgICAgICAgIGluY3JlbWVudEJ1dHRvbkNsYXNzPVwicC1idXR0b24tb3V0bGluZWRcIiBcclxuICAgICAgICAgICAgICAgICAgICBpbmNyZW1lbnRCdXR0b25JY29uPVwicGkgcGktcGx1c1wiIFxyXG4gICAgICAgICAgICAgICAgICAgIGRlY3JlbWVudEJ1dHRvbkljb249XCJwaSBwaS1taW51c1wiIFxyXG4gICAgICAgICAgICAgICAgICAgIG1vZGU9XCJkZWNpbWFsXCI+XHJcbiAgICAgICAgICAgICAgICA8L3AtaW5wdXROdW1iZXI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIndhcHBUYWJsZU9iamVjdD8uaGFzR2xvYmFsU2VhcmNoXCIgY2xhc3M9XCJwLWlucHV0LWljb24tbGVmdCBtbC1hdXRvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1zZWFyY2hcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHBJbnB1dFRleHQgdHlwZT1cInRleHRcIiAjZmlsdGVyIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwid2FwcFRhYmxlT2JqZWN0LnNlYXJjaFBsYWNlaG9sZGVyXCIgY2xhc3M9XCJ3LWZ1bGwgaGVpZ2h0LWlucHV0IHctaW5wdXRcIi8+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cclxuICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgIDx0aCAqbmdJZj1cIiF3YXBwVGFibGVPYmplY3QuaGFzQ29sdW1uRmlsdGVycyAmJiB3YXBwVGFibGVPYmplY3QuaGFzQ2hlY2tib3g7IGVsc2Ugc2VsZWN0QWxsQ2hlY2tib3hcIj5cclxuICAgICAgICAgICAgICAgIDxwLXRhYmxlSGVhZGVyQ2hlY2tib3g+PC9wLXRhYmxlSGVhZGVyQ2hlY2tib3g+XHJcbiAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2VsZWN0QWxsQ2hlY2tib3g+PHRoPjwvdGg+PC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBoZWFkZXIgb2Ygd2FwcFRhYmxlT2JqZWN0Py5oZWFkZXJzXCI+XHJcbiAgICAgICAgICAgIHt7aGVhZGVyfX1cclxuICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgPHRoICpuZ0lmPVwid2FwcFRhYmxlT2JqZWN0Lmhhc0RlbGV0ZUJ1dHRvbiB8fCB3YXBwVGFibGVPYmplY3QuaGFzRWRpdEJ1dHRvblwiPjwvdGg+XHJcbiAgICAgICAgPC90cj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCI+XHJcbiAgICAgICAgICAgIDx0ciBoZWlnaHQ9XCI3MHB4XCI+XHJcbiAgICAgICAgICAgICAgICA8dGQgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygd2FwcFRhYmxlT2JqZWN0LmNvbHVtblR5cGVzXCIgW3N0eWxlLndpZHRoXT1cIml0ZW0gPT0gdGFibGVDb2x1bW5UeXBlcy5DaGVja2JveCA/ICc4cmVtJyA6ICcnXCIgPlxyXG4gICAgICAgICAgICAgICAgPHAtdGFibGVDaGVja2JveCAqbmdJZj1cIml0ZW0gPT0gdGFibGVDb2x1bW5UeXBlcy5DaGVja2JveCAmJiAgd2FwcFRhYmxlT2JqZWN0Lmhhc0NoZWNrYm94XCI+PC9wLXRhYmxlQ2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICA8cC1za2VsZXRvbiAqbmdJZj1cIml0ZW0gIT0gdGFibGVDb2x1bW5UeXBlcy5DaGVja2JveFwiPjwvcC1za2VsZXRvbj5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJ3YXBwVGFibGVPYmplY3QuaGFzRWRpdEJ1dHRvbiB8fCB3YXBwVGFibGVPYmplY3QuaGFzRGVsZXRlQnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIndhcHBUYWJsZU9iamVjdD8uaGFzVmlld0J1dHRvblwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwQnV0dG9uIHBSaXBwbGUgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJ3YXBwVGFibGVPYmplY3QuYnV0dG9uVG9vbHRpcHM/LnZpZXdUb29sdGlwIVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJwaSBwaS1leWVcIiBjbGFzcz1cInAtYnV0dG9uLXRleHQgcC1idXR0b24taW5mbyBtci0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIndhcHBUYWJsZU9iamVjdC5jdXN0b21CdXR0b25Db25maWc/Lmhhc0N1c3RvbUJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBCdXR0b24gcFJpcHBsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwid2FwcFRhYmxlT2JqZWN0LmJ1dHRvblRvb2x0aXBzPy5jdXN0b21Ub29sdGlwIVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uXT1cIndhcHBUYWJsZU9iamVjdC5jdXN0b21CdXR0b25Db25maWc/Lmljb24hXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLWluZm8gbXItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJ3YXBwVGFibGVPYmplY3Q/Lmhhc0VkaXRCdXR0b25cIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBCdXR0b24gcFJpcHBsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cIndhcHBUYWJsZU9iamVjdC5idXR0b25Ub29sdGlwcz8uZWRpdFRvb2x0aXAhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJwaSBwaS1wZW5jaWxcIiBjbGFzcz1cInAtYnV0dG9uLXRleHQgcC1idXR0b24tc3VjY2VzcyBtci0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIndhcHBUYWJsZU9iamVjdD8uaGFzQ29weUJ1dHRvblwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwQnV0dG9uIHBSaXBwbGUgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJ3YXBwVGFibGVPYmplY3QuYnV0dG9uVG9vbHRpcHM/LmNvcHlUb29sdGlwIVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJwaSBwaS1jb3B5XCIgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLWhlbHAgbXItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJ3YXBwVGFibGVPYmplY3Q/Lmhhc0RlbGV0ZUJ1dHRvblwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcEJ1dHRvbiBwUmlwcGxlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwid2FwcFRhYmxlT2JqZWN0LmJ1dHRvblRvb2x0aXBzPy5kZWxldGVUb29sdGlwIVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uPVwicGkgcGktdHJhc2hcIiBjbGFzcz1cInAtYnV0dG9uLXRleHQgcC1idXR0b24tZGFuZ2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvcC10YWJsZT5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbjwvZGl2PlxyXG48cC1jb25maXJtUG9wdXA+PC9wLWNvbmZpcm1Qb3B1cD4iXX0=
|