bpm-core 0.0.76 → 0.0.78
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/shared-components/form-field/attachment-section/attachment-section.component.mjs +3 -3
- package/esm2022/lib/components/shared-components/form-field/checkbox/checkbox.component.mjs +3 -3
- package/esm2022/lib/components/shared-components/form-field/info-item/info-item.component.mjs +3 -3
- package/esm2022/lib/components/shared-components/table/table.component.mjs +3 -3
- package/fesm2022/bpm-core.mjs +8 -8
- package/fesm2022/bpm-core.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -170,11 +170,11 @@ export class TableComponent {
|
|
|
170
170
|
}
|
|
171
171
|
}
|
|
172
172
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: TableComponent, deps: [{ token: i1.MatDialog }, { token: i2.TranslateService }, { token: i3.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
|
|
173
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.8", type: TableComponent, isStandalone: true, selector: "app-table", inputs: { columns: "columns", isError: "isError", isLoading: "isLoading", customMessage: "customMessage", columnsConfig: "columnsConfig", loadData: "loadData", actions: "actions", className: "className", totalElements: "totalElements", showPagination: "showPagination", pageIndex: "pageIndex", pageSize: "pageSize", sortDisabled: "sortDisabled", useScroll: "useScroll", hasPaginator: "hasPaginator", currentPage: "currentPage", keyWord: "keyWord", rows: "rows" }, outputs: { serviceRowSelect: "serviceRowSelect", selectPage: "selectPage", rowClicked: "rowClicked", autoCompleteValueSelected: "autoCompleteValueSelected", selectValueSelected: "selectValueSelected", sortChanged: "sortChanged", inputCellChanged: "inputCellChanged", pageScroll: "pageScroll", toggleChanged: "toggleChanged", eventClicked: "eventClicked", pageChange: "pageChange" }, viewQueries: [{ propertyName: "matTableRef", first: true, predicate: ["table"], descendants: true, read: ElementRef }, { propertyName: "tableSort", first: true, predicate: ["tableSort"], descendants: true }], ngImport: i0, template: "<div #table class=\"table-container table-responsive sticky-table\">\r\n @if(!isLoading){\r\n <ng-container>\r\n @if(dataSource.filteredData?.length! > 0){\r\n <table\r\n #tableSort=\"matSort\"\r\n (matSortChange)=\"sortChange($event)\"\r\n [dataSource]=\"dataSource\"\r\n class=\"primary-table {{ className }}\"\r\n mat-table\r\n matSort\r\n >\r\n @for(column of columns; track $index; let i =$index){\r\n <ng-container>\r\n <!-- Add a check to ensure 'columnsConfig' and 'columnsConfig[i]' are defined before using them -->\r\n\r\n @if(columnsConfig && columnsConfig[i]){\r\n <ng-container>\r\n <ng-container\r\n [matColumnDef]=\"column\"\r\n [stickyEnd]=\"!!columnsConfig[i].stickyEnd!\"\r\n >\r\n @if(!columnsConfig[i].notSortable){\r\n <ng-container>\r\n <th\r\n *matHeaderCellDef\r\n [ngClass]=\"{ 'text-end': columnsConfig[i].type === 'actions' }\"\r\n mat-header-cell\r\n mat-sort-header\r\n >\r\n @if(columnsConfig[i].type !== 'checkbox' || (\r\n this.columnsConfig[i]?.type! == 'actions' &&\r\n this.columnsConfig[i]?.actions?.length === 0) ){\r\n <ng-container>\r\n @if(!( this.columnsConfig[i].type == 'actions' &&\r\n this.columnsConfig[i].actions.length === 0)){\r\n <div class=\"d-flex align-items-center\">\r\n <div class=\"mx-1 fc-{{ columnsConfig[i].fontColor }}\">\r\n {{ columnsConfig[i].label | translate }}\r\n </div>\r\n @if(columnsConfig[i].slaMax){\r\n <ds-sla\r\n [canvasScale]=\"'40'\"\r\n [innerLineWidth]=\"'3'\"\r\n [maxValue]=\"columnsConfig[i].slaMax\"\r\n [outerLineColor]=\"'limegreen'\"\r\n [outerLineWidth]=\"'3'\"\r\n [value]=\"columnsConfig[i].slaValue\"\r\n class=\"table-header-sla my-1\"\r\n ></ds-sla>\r\n }\r\n </div>\r\n }\r\n </ng-container>\r\n } @if(columnsConfig[i].type == 'checkbox' ){\r\n <mat-checkbox class=\"checkbox\"> </mat-checkbox>\r\n }\r\n </th>\r\n </ng-container>\r\n } @if(columnsConfig[i].notSortable){\r\n <ng-container>\r\n <th\r\n *matHeaderCellDef\r\n [ngClass]=\"{ 'text-end': columnsConfig[i].type === 'actions' }\"\r\n mat-header-cell\r\n >\r\n <div class=\"d-flex align-items-center\">\r\n <div class=\"mx-1\">\r\n {{ columnsConfig[i].label | translate }}\r\n </div>\r\n @if(columnsConfig[i].slaMax){\r\n <ds-sla\r\n [canvasScale]=\"'50'\"\r\n [innerLineWidth]=\"'3'\"\r\n [maxValue]=\"columnsConfig[i].slaMax\"\r\n [outerLineColor]=\"'limegreen'\"\r\n [outerLineWidth]=\"'3'\"\r\n [value]=\"columnsConfig[i].slaValue\"\r\n class=\"table-header-sla my-1\"\r\n ></ds-sla>\r\n }\r\n </div>\r\n </th>\r\n </ng-container>\r\n }\r\n\r\n <td *matCellDef=\"let element; let j = index\" mat-cell>\r\n <ng-container [ngSwitch]=\"columnsConfig[i].type\">\r\n <!-- <a target=\"_blank\"-->\r\n <!-- routerLink=\"/inbox\" [queryParams]=\"{ id: element[column] }\"-->\r\n <!-- class=\"fc-black text-decoration-underline fw-medium\" [ngClass]=\"columnsConfig[i].type\" *ngSwitchCase=\"'link'\">-->\r\n <!-- {{ element[column] }}-->\r\n <!-- </a>-->\r\n <span *ngSwitchCase=\"'formId'\"\r\n (click)=\"viewForm(element[column])\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"fc-coral text-decoration-underline fw-medium\">\r\n {{ element[column] }}\r\n </span>\r\n <!-- <span\r\n *ngSwitchCase=\"'link'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"fc-black text-decoration-underline fw-medium\"\r\n >\r\n {{ element[column] }}\r\n </span>-->\r\n\r\n <span\r\n *ngSwitchCase=\"'linkWithIcon'\"\r\n [appSkipLocation]=\"columnsConfig[i].link\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"fc-black text-decoration-underline fw-medium\"\r\n >\r\n <ds-icon\r\n class=\"fs-20 fc-black\"\r\n icon=\" {{ columnsConfig[i].icon }}\"\r\n ></ds-icon>\r\n <span class=\"fs-13 fc-coral px-1 text-decoration-underline\">{{\r\n element[column]\r\n }}</span>\r\n </span>\r\n <span\r\n *ngSwitchCase=\"'underLineWithIcon'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"fc-black text-decoration-underline fw-medium\"\r\n >\r\n <ds-icon\r\n class=\"fs-20 fc-black\"\r\n icon=\" {{ columnsConfig[i].icon }}\"\r\n ></ds-icon>\r\n <span class=\"fs-13 fc-coral px-1 text-decoration-underline\">{{\r\n element[column]\r\n }}</span>\r\n </span>\r\n <mat-checkbox\r\n *ngSwitchCase=\"'checkbox'\"\r\n checked=\"{{ columnsConfig[i].checked }}\"\r\n class=\"checkbox\"\r\n disabled=\"{{ columnsConfig[i].disabled }}\"\r\n >\r\n </mat-checkbox>\r\n <span\r\n *ngSwitchCase=\"'ServiceDetails'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"cursor-pointer\"\r\n >\r\n {{ element[column] }}\r\n </span>\r\n <span\r\n *ngSwitchCase=\"'dateOnly'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-inline-flex align-items-center gap-2 text-nowrap\"\r\n >\r\n <span class=\"sfi sfi-calendar-o fc-coral fs-18\"></span>\r\n {{ element[column] | date : \"MMM d, y\" }}\r\n </span>\r\n <span\r\n *ngSwitchCase=\"'Search'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-inline-flex align-items-center\"\r\n >\r\n <app-input\r\n [formControl]=\"ctrl\"\r\n [placeholder]=\"'Search for item '\"\r\n [showLabel]=\"false\"\r\n class=\"\"\r\n className=\"no-padding \"\r\n prefix=\"sfi-search fs-16\"\r\n type=\"text\"\r\n >\r\n </app-input>\r\n </span>\r\n <span\r\n *ngSwitchCase=\"'Number'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-inline-flex align-items-center\"\r\n >\r\n <app-input\r\n [formControl]=\"ctrl\"\r\n [placeholder]=\"'number'\"\r\n [showLabel]=\"false\"\r\n class=\"\"\r\n className=\"no-padding\"\r\n type=\"text\"\r\n >\r\n </app-input>\r\n </span>\r\n <span\r\n *ngSwitchCase=\"'dateFromTo'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-inline-flex align-items-center\"\r\n >\r\n <span class=\"sfi sfi-clock fc-coral\"></span>\r\n <span class=\"mx-2\">\r\n {{ element?.date.from }}\r\n @if(element?.date.to){\r\n <ng-container> : {{ element?.date.to }} </ng-container>\r\n }\r\n </span>\r\n </span>\r\n\r\n <span\r\n *ngSwitchCase=\"'dateTime'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-inline-flex align-items-center gap-1 flex-wrap\"\r\n >\r\n <span class=\"sfi sfi-calendar-o fc-dark-gray fs-20\"></span>\r\n {{ element[column] | date : \"MMM d, y, h:mm a\" }}\r\n </span>\r\n\r\n <span\r\n *ngSwitchCase=\"'singleTimeOnly'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-inline-flex align-items-center gap-1 flex-wrap\"\r\n >\r\n {{ element[column] | date : \"h:mm a\" }}\r\n </span>\r\n <!--dir=\"ltr\" and text-left for English text on ar page -->\r\n <span\r\n *ngSwitchCase=\"'timeOnly'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-inline-flex align-items-center gap-1 flex-wrap text-nowrap text-left\"\r\n dir=\"ltr\"\r\n >\r\n <!-- -->\r\n {{\r\n mapText(columnsConfig[i].firstVal, element[column])\r\n | date : \"h:mm a\"\r\n }}\r\n @if(mapText(columnsConfig[i].secondVal, element[column] )){\r\n <ng-container>\r\n -\r\n {{\r\n mapText(columnsConfig[i].secondVal, element[column])\r\n | date : \"h:mm a\"\r\n }}\r\n </ng-container>\r\n }\r\n </span>\r\n\r\n <span\r\n *ngSwitchCase=\"'multipleRows'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-inline-flex align-items-center gap-1 flex-wrap\"\r\n >\r\n <!-- -->\r\n @if(!element[column].monthlyFineEscalation){\r\n <div>\r\n {{ element[column].fixedFineValue }}\r\n {{ \"global.SAR\" | translate }}\r\n </div>\r\n } @if(element[column].monthlyFineEscalation){\r\n <div>\r\n <br />\r\n {{ element[column].firstTimeFine }}\r\n {{ \"global.SAR\" | translate }} <br /><br />\r\n {{ element[column].secondTimeFine }}\r\n {{ \"global.SAR\" | translate }} <br /><br />\r\n {{ element[column].thirdTimeFine }}\r\n {{ \"global.SAR\" | translate }} <br /><br />\r\n </div>\r\n }\r\n </span>\r\n\r\n <div\r\n *ngSwitchCase=\"'sla'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-inline-flex align-items-center\"\r\n >\r\n <!-- <app-sla [value]=\"element?.SLA.value\" [maxValue]=\"element?.SLA.max\" [canvasScale]=\"38\" -->\r\n <!-- class=\"font-9 fw-medium\" [outerLineColor]=\"getSlaColor(element?.SLA.value, element?.SLA.max)\">-->\r\n <!-- </app-sla>-->\r\n\r\n <ds-sla\r\n [attr.outerLineColor]=\"\r\n getSlaColor(element?.SLA.value, element?.SLA.max)\r\n \"\r\n [canvasScale]=\"'55'\"\r\n [innerLineWidth]=\"'3'\"\r\n [maxValue]=\"element?.SLA?.max\"\r\n [outerLineWidth]=\"'3'\"\r\n [value]=\"element?.SLA?.value\"\r\n ></ds-sla>\r\n </div>\r\n <div *ngSwitchCase=\"'slaProgress'\">\r\n <!-- <mat-sp-->\r\n\r\n @if(element[column]?.percentage >= 0){\r\n <ds-sla\r\n [canvasScale]=\"'55'\"\r\n [customValue]=\"element[column]?.percentage + '%'\"\r\n [innerLineWidth]=\"'3'\"\r\n [maxValue]=\"'100'\"\r\n [outerLineColor]=\"\r\n getSlaColor(element[column]?.percentage, 100)\r\n \"\r\n [outerLineWidth]=\"'3'\"\r\n [value]=\"element[column]?.percentage\"\r\n ></ds-sla>\r\n } @else {\r\n <ng-template>Not started</ng-template>\r\n }\r\n </div>\r\n <div\r\n *ngSwitchCase=\"'Priority'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"{{ element[column] }}\"\r\n >\r\n {{ element[column] }}\r\n </div>\r\n\r\n <div\r\n *ngSwitchCase=\"'serviceStatus'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"{{ element[column] }}\"\r\n >\r\n <span\r\n [ngClass]=\"element[column] == 'FALSE' ? 'green' : 'red'\"\r\n class=\"dot-status\"\r\n ></span>\r\n </div>\r\n\r\n <div\r\n *ngSwitchCase=\"'image'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"img-card table-img\"\r\n >\r\n <img\r\n [src]=\"element?.image\"\r\n alt=\"\"\r\n onerror=\"this.onerror=null;this.src='assets/images/user.svg';\"\r\n />\r\n </div>\r\n\r\n <div\r\n *ngSwitchCase=\"'employee'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-flex align-items-center gap-2 text-nowrap\"\r\n >\r\n <ds-avatar\r\n [image]=\"'https://igateapp.stc.com.sa'+element[column]?.['imageUrl']\"\r\n size=\"x-small\"\r\n >\r\n </ds-avatar>\r\n <span>{{ (element[column]?.['name']) }}</span>\r\n </div>\r\n\r\n <div\r\n *ngSwitchCase=\"'progress_group'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-flex gap-1\"\r\n >\r\n <ng-container *ngFor=\"let item of element[column]\">\r\n <div\r\n class=\"progress-container default-progress medium radius-0\"\r\n matTooltip=\"Team assignment {{ item.value }}%\"\r\n matTooltipPosition=\"below\"\r\n >\r\n <div\r\n [style.width.%]=\"item.value\"\r\n class=\"progress-bar bg-color-{{ item.color }}\"\r\n ></div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div\r\n *ngSwitchCase=\"'input'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"\"\r\n >\r\n <app-input\r\n (input)=\"inputCellChanged.emit({element,column,i})\"\r\n [(ngModel)]=\"element[column]\"\r\n [min]=\"0\"\r\n [placeholder]=\"element[column]\"\r\n class=\"w-100\"\r\n className=\" no-padding w-100\"\r\n type=\"number\"\r\n value=\"{{ element[column] }}\"\r\n >\r\n </app-input>\r\n </div>\r\n <div *ngSwitchCase=\"'autoComplete'\"></div>\r\n <div\r\n *ngSwitchCase=\"'select'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"\"\r\n >\r\n <app-custom-searchable\r\n (selectedValue)=\"selectValueSelected.emit($event)\"\r\n [isSearchable]=\"columnsConfig[i].config?.isSearchable\"\r\n [key]=\"columnsConfig[i]?.key\"\r\n [displayedLabel]=\"columnsConfig[i]?.displayedLable\"\r\n [options]=\"columnsConfig[i]?.options\"\r\n [postKey]=\"columnsConfig[i]?.postKey\"\r\n [showLabel]=\"false\"\r\n className=\"no-padding w-100\"\r\n >\r\n </app-custom-searchable>\r\n </div>\r\n\r\n <div\r\n *ngSwitchCase=\"'status'\"\r\n [ngClass]=\"'New' + columnsConfig[i].type\"\r\n class=\"d-flex align-items-center gap-2\"\r\n >\r\n @if(element[column]){\r\n <ds-status [status]=\"element[column]?.status\" class=\"fs-12\">\r\n {{ element[column]?.title | translate }}\r\n </ds-status>\r\n } @if(element[column]?.reason){\r\n <span\r\n (click)=\"$event.stopPropagation()\"\r\n [matMenuTriggerFor]=\"reasonMenu\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"{{\r\n columnsConfig[i].type\r\n }} fc-red underline cursor-pointer\"\r\n >\r\n Show reason\r\n </span>\r\n }\r\n\r\n <mat-menu #reasonMenu=\"matMenu\" class=\"p-4 text-center\">\r\n <span class=\"fs-14\">\r\n {{ element[column]?.reason }}\r\n </span>\r\n </mat-menu>\r\n </div>\r\n <div *ngSwitchCase=\"'toggle'\" [ngClass]=\"columnsConfig[i].type\">\r\n <mat-slide-toggle\r\n (change)=\"toggleValueChange($event, element)\"\r\n [checked]=\"element[column] == 1\"\r\n [disabled]=\"false\"\r\n ></mat-slide-toggle>\r\n </div>\r\n\r\n <div\r\n *ngSwitchCase=\"'customToggle'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n >\r\n <mat-slide-toggle\r\n (change)=\"toggleValueChange($event, element)\"\r\n [checked]=\"element[column] == 7\"\r\n [disabled]=\"element[column] != 1\"\r\n ></mat-slide-toggle>\r\n </div>\r\n <div\r\n *ngSwitchCase=\"'meetingStatus'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"{{ columnsConfig[i].type }}\"\r\n >\r\n @if(element[column].label == 'Finished'){\r\n <span class=\" {{ element[column].label }} status \">\r\n {{ element[column].label }}\r\n </span>\r\n } @if(element[column].label != 'Finished'){\r\n <div class=\"d-flex align-items-center gap-2\">\r\n <div\r\n class=\"Finished d-flex flex-column align-items-center justify-content-center py-1 fc-black\"\r\n >\r\n <span class=\"fs-11 fw-medium mb-1\">\r\n {{ element[column].hours }}</span\r\n >\r\n <span class=\"fs-10 fw-light\">HRS</span>\r\n </div>\r\n <div\r\n class=\"Finished d-flex flex-column align-items-center justify-content-center py-1 fc-black\"\r\n >\r\n <span class=\"fs-11 fw-medium mb-1\">\r\n {{ element[column].min }}</span\r\n >\r\n <span class=\"fs-10 fw-light\">MINS</span>\r\n </div>\r\n <div\r\n class=\"Finished d-flex flex-column align-items-center justify-content-center py-1 fc-black\"\r\n >\r\n <span class=\"fs-11 fw-medium mb-1\">\r\n {{ element[column].sec }}</span\r\n >\r\n <span class=\"fs-10 fw-light\">SECS</span>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n <span\r\n *ngSwitchCase=\"'number'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"{{ columnsConfig[i].type }} {{\r\n element[column] ? 'underline' : ''\r\n }}\"\r\n >\r\n {{ element[column] ? element[column] : 0 }}\r\n </span>\r\n\r\n <span\r\n *ngSwitchCase=\"'currency'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"{{ columnsConfig[i].type }}\"\r\n >\r\n {{\r\n element[column]\r\n ? parseInt(element[column]).toFixed(2) +\r\n (columnsConfig[i].currency | translate)\r\n : \"-\"\r\n }}\r\n </span>\r\n <span\r\n *ngSwitchCase=\"'active'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"{{ columnsConfig[i].type }}\"\r\n >\r\n <ds-icon\r\n [ngClass]=\"element[column] ? 'fc-green' : 'fc-gray'\"\r\n icon=\"check-circle-f fs-30\"\r\n ></ds-icon>\r\n </span>\r\n <div\r\n *ngSwitchCase=\"'sync'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"{{\r\n columnsConfig[i].type\r\n }} d-flex align-items-center gap-2\"\r\n >\r\n <svg\r\n fill=\"none\"\r\n height=\"19\"\r\n viewBox=\"0 0 18 19\"\r\n width=\"18\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M14.25 13.2604C13.9425 13.2604 13.6875 12.9913 13.6875 12.6667V5.14583C13.6875 4.59958 13.2675 4.15625 12.75 4.15625H8.625C8.3175 4.15625 8.0625 3.88708 8.0625 3.5625C8.0625 3.23792 8.3175 2.96875 8.625 2.96875H12.75C13.89 2.96875 14.8125 3.9425 14.8125 5.14583V12.6667C14.8125 12.9913 14.5575 13.2604 14.25 13.2604Z\"\r\n fill=\"#FF375E\"\r\n />\r\n <path\r\n d=\"M10.5 6.13549C10.3725 6.13549 10.245 6.088 10.14 6.00092L7.88999 4.02175C7.76249 3.91092 7.6875 3.74465 7.6875 3.56257C7.6875 3.38048 7.76249 3.22214 7.88999 3.10339L10.14 1.12422C10.38 0.910471 10.7325 0.950084 10.935 1.20342C11.1375 1.45675 11.1 1.82883 10.86 2.04258L9.12751 3.56257L10.86 5.08255C11.1 5.29631 11.13 5.66839 10.935 5.92172C10.8225 6.06422 10.6575 6.13549 10.5 6.13549Z\"\r\n fill=\"#FF375E\"\r\n />\r\n <path\r\n d=\"M14.25 18.0105C12.6975 18.0105 11.4375 16.6805 11.4375 15.0417C11.4375 13.403 12.6975 12.073 14.25 12.073C15.8025 12.073 17.0625 13.403 17.0625 15.0417C17.0625 16.6805 15.8025 18.0105 14.25 18.0105ZM14.25 13.2605C13.32 13.2605 12.5625 14.0601 12.5625 15.0417C12.5625 16.0234 13.32 16.823 14.25 16.823C15.18 16.823 15.9375 16.0234 15.9375 15.0417C15.9375 14.0601 15.18 13.2605 14.25 13.2605Z\"\r\n fill=\"#FF375E\"\r\n />\r\n <path\r\n d=\"M9.375 16.0312H5.25C4.11 16.0312 3.1875 15.0574 3.1875 13.8541V6.33325C3.1875 6.00867 3.4425 5.7395 3.75 5.7395C4.0575 5.7395 4.3125 6.00867 4.3125 6.33325V13.8541C4.3125 14.4003 4.7325 14.8437 5.25 14.8437H9.375C9.6825 14.8437 9.9375 15.1128 9.9375 15.4374C9.9375 15.762 9.6825 16.0312 9.375 16.0312Z\"\r\n fill=\"#FF375E\"\r\n />\r\n <path\r\n d=\"M7.4997 18.0104C7.3422 18.0104 7.17721 17.9391 7.06471 17.7966C6.86221 17.5433 6.89969 17.1712 7.13969 16.9574L8.87219 15.4375L7.13969 13.9175C6.89969 13.7037 6.86971 13.3316 7.06471 13.0783C7.26721 12.825 7.61971 12.7933 7.85971 12.9991L10.1097 14.9783C10.2372 15.0891 10.3122 15.2554 10.3122 15.4375C10.3122 15.6195 10.2372 15.7779 10.1097 15.8966L7.85971 17.8758C7.75471 17.9629 7.6272 18.0104 7.4997 18.0104Z\"\r\n fill=\"#FF375E\"\r\n />\r\n <path\r\n d=\"M3.75 6.927C2.1975 6.927 0.9375 5.597 0.9375 3.95825C0.9375 2.3195 2.1975 0.989502 3.75 0.989502C5.3025 0.989502 6.5625 2.3195 6.5625 3.95825C6.5625 5.597 5.3025 6.927 3.75 6.927ZM3.75 2.177C2.82 2.177 2.0625 2.97659 2.0625 3.95825C2.0625 4.93992 2.82 5.7395 3.75 5.7395C4.68 5.7395 5.4375 4.93992 5.4375 3.95825C5.4375 2.97659 4.68 2.177 3.75 2.177Z\"\r\n fill=\"#FF375E\"\r\n />\r\n </svg>\r\n {{ element[column] }}\r\n </div>\r\n\r\n <ng-container *ngSwitchCase=\"'clickable'\">\r\n @if(element?.[column]){\r\n <span\r\n #statusMenuTrigger=\"matMenuTrigger\"\r\n (click)=\"$event.stopPropagation()\"\r\n [matMenuTriggerFor]=\"descMenu\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"{{\r\n columnsConfig[i].type\r\n }} fc-coral underline cursor-pointer\"\r\n >\r\n {{ columnsConfig[i].clickableText | translate }}\r\n </span>\r\n }\r\n\r\n <mat-menu #descMenu=\"matMenu\" class=\"p-4 text-center\">\r\n <span class=\"fs-14\">\r\n {{ element[column] }}\r\n </span>\r\n </mat-menu>\r\n </ng-container>\r\n\r\n <span\r\n #statusMenuTrigger=\"matMenuTrigger\"\r\n (click)=\"$event.stopPropagation()\"\r\n *ngSwitchCase=\"'translatedClickable'\"\r\n [matMenuTriggerFor]=\"descMenuTranslated\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"{{\r\n columnsConfig[i].type\r\n }} fc-coral underline cursor-pointer\"\r\n >\r\n {{ columnsConfig[i].clickableText | translate }}\r\n <!-- {{ 'global.view' | translate}} -->\r\n </span>\r\n\r\n <mat-menu #descMenuTranslated=\"matMenu\" class=\"p-4 text-center\">\r\n <span class=\"fs-14\">\r\n {{\r\n columnsConfig[i].arKey\r\n ? translateService.currentLang == \"ar\"\r\n ? mapText(columnsConfig[i].arKey, element[column])\r\n : mapText(columnsConfig[i].enKey, element[column])\r\n : element[column]\r\n ? element[column]\r\n : \"-\"\r\n }}\r\n </span>\r\n </mat-menu>\r\n\r\n <span\r\n #statusMenuTrigger=\"matMenuTrigger\"\r\n (click)=\"$event.stopPropagation()\"\r\n *ngSwitchCase=\"'conditionalClickable'\"\r\n [matMenuTriggerFor]=\"descConditionalMenu\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"{{\r\n columnsConfig[i].type\r\n }} fc-coral underline cursor-pointer\"\r\n >\r\n @if(element[column] && element[column] != 'null'){\r\n <span>{{ columnsConfig[i].clickableText | translate }}</span>\r\n }\r\n <!-- {{ 'global.view' | translate}} -->\r\n </span>\r\n\r\n <mat-menu\r\n #descConditionalMenu=\"matMenu\"\r\n class=\"p-4 text-center\"\r\n >\r\n <span class=\"fs-14\">\r\n {{ element[column] }}\r\n </span>\r\n </mat-menu>\r\n\r\n <span\r\n (click)=\"$event.stopPropagation()\"\r\n *ngSwitchCase=\"'dropdown'\"\r\n [matMenuTriggerFor]=\"dropdownMenu\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"{{ columnsConfig[i].type }} cursor-pointer\"\r\n >\r\n {{\r\n columnsConfig[i].arKey\r\n ? translateService.currentLang == \"ar\"\r\n ? mapText(columnsConfig[i].arKey, element[column])\r\n : mapText(columnsConfig[i].enKey, element[column])\r\n : element[column]\r\n ? element[column]\r\n : \"-\"\r\n }}\r\n <!-- <span *ngFor=\"let item of element[column]\">\r\n {{item.id}}\r\n </span> -->\r\n\r\n <ds-icon class=\"fc-black fw-medium\" icon=\"arrow\"></ds-icon>\r\n </span>\r\n\r\n <mat-menu #dropdownMenu=\"matMenu\" class=\"p-4 text-center\">\r\n <ng-container *ngSwitchCase=\"'dropdown'\">\r\n <span class=\"fs-12 fc-black\" mat-menu-item>\r\n <!-- {{translateService.currentLang == 'ar' ? item.groupNameAr : item.groupNameEn}} -->\r\n {{\r\n columnsConfig[i].arKey\r\n ? translateService.currentLang == \"ar\"\r\n ? mapText(columnsConfig[i].arKey, element[column])\r\n : mapText(columnsConfig[i].enKey, element[column])\r\n : element[column]\r\n ? element[column]\r\n : \"-\"\r\n }}\r\n </span>\r\n </ng-container>\r\n </mat-menu>\r\n\r\n <span\r\n *ngSwitchCase=\"'formatNumber'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n matTooltip=\"{{\r\n element[column] > 1000 ? element[column] : ''\r\n }}\"\r\n >\r\n {{ element[column] }}\r\n </span>\r\n\r\n <div\r\n *ngSwitchCase=\"'group'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"text-nowrap d-flex align-items-center\"\r\n ></div>\r\n\r\n <div\r\n *ngSwitchCase=\"'company'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-flex align-items-center\"\r\n >\r\n <span class=\"img-card circled-img\">\r\n <img\r\n [src]=\"element?.image\"\r\n alt=\"\"\r\n onerror=\"this.onerror=null;this.src='assets/images/user.svg';\"\r\n />\r\n </span>\r\n <span class=\"mx-1\"></span>\r\n <span class=\"full-name\">{{ element[column] }}</span>\r\n </div>\r\n\r\n <span\r\n *ngSwitchCase=\"'translated'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"text-nowrap\"\r\n >\r\n {{ element[column] }}\r\n </span>\r\n <span\r\n *ngSwitchCase=\"'title'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"text-nowrap\"\r\n >\r\n {{ element[column]?.title }}\r\n </span>\r\n\r\n <span\r\n *ngSwitchCase=\"'maxWidth'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n >\r\n {{ element[column]?.title }}\r\n </span>\r\n\r\n <span\r\n *ngSwitchCase=\"'progress'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n >\r\n <div class=\"Progress\">\r\n <div class=\"progress-container default-progress\">\r\n <div\r\n [style.width.%]=\"\r\n (element[column].consumed! / element[column].total!) *\r\n 100\r\n \"\r\n class=\"progress-bar\"\r\n ></div>\r\n </div>\r\n <div class=\"Progress__footer\">\r\n <div></div>\r\n <div>\r\n <span class=\"fs-12\">\r\n <span>{{ element[column].consumed }}</span>\r\n <span>/</span>\r\n <span class=\"fc-silver\">{{\r\n element[column].total\r\n }}</span>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </span>\r\n\r\n <div\r\n *ngSwitchCase=\"'subsidiary'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-flex align-items-center gap-2\"\r\n >\r\n <img\r\n [alt]=\"element[column]?.title\"\r\n src=\"assets/subsidiaries/ids/{{ element[column]?.id }}.png\"\r\n />\r\n <!-- <span class=\"full-name\">{{element[column]}}</span>-->\r\n </div>\r\n\r\n <div\r\n *ngSwitchCase=\"'Service'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-flex align-items-center gap-2\"\r\n >\r\n <svg\r\n fill=\"none\"\r\n height=\"35\"\r\n viewBox=\"0 0 34 35\"\r\n width=\"34\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <rect\r\n fill=\"#FF375E\"\r\n fill-opacity=\"0.1\"\r\n height=\"33.5\"\r\n rx=\"4\"\r\n width=\"33.5\"\r\n y=\"0.75\"\r\n />\r\n <path\r\n d=\"M24.213 17.0338H22.1448L21.4532 15.1884C21.2221 14.5845 20.649 14.1622 19.9761 14.1592H13.5315C12.8586 14.1622 12.2847 14.5838 12.0582 15.1771L12.0544 15.1876L11.3628 17.033H9.29312C9.05532 17.033 8.86328 17.2258 8.86328 17.4629V19.1845C8.86328 19.4223 9.05607 19.6143 9.29312 19.6143H10.2076L9.69896 20.378C9.53242 20.6233 9.4334 20.9263 9.4334 21.2519C9.4334 21.2527 9.4334 21.2527 9.4334 21.2534V26.0702C9.4334 26.308 9.62619 26.5 9.86324 26.5H12.1595C12.3973 26.5 12.5893 26.3072 12.5893 26.0702V24.7791H20.91V26.0702C20.91 26.308 21.1028 26.5 21.3399 26.5H23.6361C23.8739 26.5 24.066 26.3072 24.066 26.0702V21.2519C24.066 21.2512 24.066 21.2512 24.066 21.2504C24.066 20.9248 23.9669 20.6218 23.7974 20.3705L23.8011 20.3757L23.2925 19.6121H24.207C24.4448 19.6121 24.6368 19.4193 24.6368 19.1822V17.4606C24.6361 17.2258 24.4478 17.036 24.2145 17.0315L24.213 17.0338ZM12.8654 15.4915C12.9711 15.2176 13.2314 15.0271 13.5368 15.0264H19.9798C20.2852 15.0271 20.5455 15.2184 20.649 15.487L20.6505 15.4922L21.8747 18.7569H11.6359L12.8654 15.4915ZM23.2138 23.9202H10.2983V21.2542C10.2983 21.2534 10.2983 21.2534 10.2983 21.2527C10.2983 21.1049 10.3433 20.9676 10.4199 20.8536L10.4184 20.8558L11.245 19.6151H22.2618L23.0885 20.8558C23.1635 20.9668 23.2085 21.1049 23.2085 21.2519C23.2085 21.2527 23.2085 21.2527 23.2085 21.2534L23.2138 23.9202ZM9.72896 17.895H11.0357L10.7132 18.7561H9.72071L9.72896 17.895ZM11.7379 25.6411H10.2983V24.7799H11.7334L11.7379 25.6411ZM23.2153 25.6411H21.775V24.7799H23.21L23.2153 25.6411ZM23.7869 18.7546H22.7899L22.4674 17.8935H23.7831L23.7869 18.7546ZM12.1632 20.4762C11.2915 20.4762 10.5856 21.1829 10.5856 22.0538C10.5856 22.9248 11.2923 23.6314 12.1632 23.6314C13.0349 23.6314 13.7408 22.9248 13.7408 22.0538C13.7408 21.1821 13.0342 20.4762 12.1632 20.4762V20.4762ZM12.1632 22.7725C11.7671 22.7725 11.4461 22.4514 11.4461 22.0553C11.4461 21.6592 11.7671 21.3382 12.1632 21.3382C12.5593 21.3382 12.8804 21.6592 12.8804 22.0553C12.8804 22.4514 12.5593 22.7725 12.1632 22.7725V22.7725ZM21.3444 20.4762C20.4727 20.4762 19.7668 21.1829 19.7668 22.0538C19.7668 22.9248 20.4735 23.6314 21.3444 23.6314C22.2161 23.6314 22.922 22.9248 22.922 22.0538C22.922 21.1821 22.2153 20.4762 21.3444 20.4762ZM21.3444 22.7725C20.9483 22.7725 20.6272 22.4514 20.6272 22.0553C20.6272 21.6592 20.9483 21.3382 21.3444 21.3382C21.7405 21.3382 22.0615 21.6592 22.0615 22.0553C22.0615 22.4514 21.7405 22.7725 21.3444 22.7725ZM19.0489 21.0509H14.4579C14.2201 21.0509 14.0274 21.2437 14.0274 21.4815C14.0274 21.7193 14.2201 21.912 14.4579 21.912H19.0489C19.2867 21.912 19.4795 21.7193 19.4795 21.4815C19.4795 21.2437 19.2867 21.0509 19.0489 21.0509ZM19.0489 22.1986H14.4579C14.2201 22.1986 14.0274 22.3914 14.0274 22.6292C14.0274 22.867 14.2201 23.0598 14.4579 23.0598H19.0489C19.2867 23.0598 19.4795 22.867 19.4795 22.6292C19.4795 22.3914 19.2867 22.1986 19.0489 22.1986ZM15.2321 12.5703C15.1541 12.6484 15.1061 12.7556 15.1061 12.8742C15.1061 13.112 15.2989 13.304 15.5359 13.304C15.6544 13.304 15.7625 13.256 15.8397 13.178C16.0738 12.9439 16.3971 12.7991 16.7542 12.7991C17.1113 12.7991 17.4346 12.9439 17.6686 13.178C17.7466 13.256 17.8539 13.304 17.9724 13.304C18.2102 13.304 18.4023 13.1112 18.4023 12.8742C18.4023 12.7556 18.3543 12.6476 18.2762 12.5703C17.8862 12.181 17.3483 11.9395 16.7534 11.9395C16.1586 11.9395 15.6199 12.1803 15.2306 12.5703H15.2321ZM19.1877 12.0865C19.1884 12.0865 19.1884 12.0865 19.1892 12.0865C19.427 12.0865 19.619 11.8937 19.619 11.6567C19.619 11.5374 19.5703 11.4294 19.4915 11.3513C18.7909 10.6507 17.8224 10.2171 16.7527 10.2171C15.683 10.2171 14.7145 10.6507 14.0139 11.3513C13.9358 11.4294 13.8878 11.5366 13.8878 11.6552C13.8878 11.893 14.0806 12.085 14.3177 12.085C14.4362 12.085 14.5442 12.037 14.6215 11.959C15.1668 11.4136 15.92 11.0768 16.7519 11.0768C17.5838 11.0768 18.337 11.4136 18.8824 11.959C18.9604 12.037 19.0677 12.0857 19.1869 12.0857H19.1877V12.0865ZM13.4062 10.743C14.2637 9.88704 15.4467 9.35818 16.7542 9.35818C18.0617 9.35818 19.2447 9.88704 20.1021 10.743C20.1801 10.821 20.2874 10.869 20.4059 10.869C20.6437 10.869 20.8358 10.6762 20.8358 10.4392C20.8358 10.3206 20.7878 10.2126 20.7098 10.1353C19.6963 9.12488 18.298 8.5 16.7534 8.5C15.2089 8.5 13.8106 9.12488 12.7971 10.1353C12.7191 10.2134 12.6711 10.3206 12.6711 10.4392C12.6711 10.677 12.8639 10.869 13.1009 10.869C13.2194 10.869 13.3275 10.821 13.4047 10.743H13.4062Z\"\r\n fill=\"#FF375E\"\r\n />\r\n </svg>\r\n\r\n <span class=\"fs-12 fw-normal fc-black\">{{\r\n element?.Service.name\r\n }}</span>\r\n </div>\r\n <div\r\n *ngSwitchCase=\"'Color'\"\r\n class=\"d-flex align-items-center gap-2\"\r\n >\r\n <span\r\n [ngClass]=\"columnsConfig[i].type\"\r\n [style.background]=\"\r\n element[column]?.colorCode\r\n ? element[column]?.colorCode\r\n : element[column]\r\n \"\r\n ></span>\r\n {{ element[column].title }}\r\n </div>\r\n <div\r\n *ngSwitchCase=\"'colorBg'\"\r\n [style.background]=\"\r\n 'rgba(var(--rgb-' + element[column]?.colorName + '), 0.1)'\r\n \"\r\n class=\"d-flex align-items-center gap-2 Colorbg p-2\"\r\n >\r\n <span class=\"bc-{{ element[column]?.colorName }}\"></span>\r\n {{ element[column].title }}\r\n </div>\r\n <div\r\n *ngSwitchCase=\"'assigned'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"delegate d-flex align-items-center\"\r\n >\r\n <div class=\"img-card x-small circled-img\">\r\n <img\r\n [src]=\"element?.AssignedTo.image\"\r\n alt=\"\"\r\n onerror=\"this.onerror=null;this.src='assets/images/user.svg';\"\r\n />\r\n </div>\r\n <span class=\"mx-1\"></span>\r\n <span class=\"fs-12 fc-black\">{{\r\n element?.AssignedTo.name\r\n }}</span>\r\n <!--\r\n <span class=\"sfi sfi-close fc-coral\"></span>\r\n -->\r\n </div>\r\n\r\n <span\r\n *ngSwitchCase=\"'coloredText'\"\r\n [style.color]=\"element[column]?.['color']\"\r\n >{{\r\n element[column]?.['title']\r\n }}</span\r\n >\r\n <div\r\n *ngSwitchCase=\"'survey'\"\r\n [style.color]=\"element[column]?.['color']\"\r\n class=\"d-flex align-items-center gap-1 text-nowrap\"\r\n >\r\n <span\r\n class=\"fs-20 sfi sfi-emoji-{{(element[column]?.['title']['en'].toLowerCase()) }}\"\r\n ></span>\r\n {{ element[column]?.['title'] }}\r\n </div>\r\n\r\n <div\r\n *ngSwitchCase=\"'Satisfaction'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"delegate d-flex gap-2 align-items-center\"\r\n >\r\n <!--\r\n <ds-icon icon=\"star-f\" class=\"fc-dark-gray\"></ds-icon>\r\n -->\r\n\r\n <span class=\"fs-12 fc-black\"\r\n >{{ element[column].percentage }}%</span\r\n >\r\n <ds-status\r\n class=\"auto-status\"\r\n size=\"small\"\r\n status=\"{{ element[column].status }}\"\r\n >\r\n <span class=\"fs-10\">\r\n {{ element[column].percentageTrend }}%\r\n </span>\r\n @if(element[column].trendStatus == 'up'){\r\n <ds-icon class=\"fs-13 mx-1 growthIcon\" icon=\"up-growth\">\r\n </ds-icon>\r\n } @if(element[column].trendStatus != 'up'){\r\n <ds-icon class=\"fs-13 mx-1 downIcon\" icon=\"down-growth\">\r\n </ds-icon>\r\n }\r\n </ds-status>\r\n </div>\r\n\r\n <ng-container *ngSwitchCase=\"'actions'\">\r\n <div class=\"d-flex justify-content-start gap-2\">\r\n <ng-container\r\n *ngIf=\"columnsConfig[i]?.actions?.length <= 6\"\r\n >\r\n <ng-container\r\n *ngFor=\"let action of columnsConfig[i]?.actions\"\r\n >\r\n <ds-button\r\n (click)=\"$event.stopPropagation()\"\r\n *ngIf=\"action.viewMode === Actions.ALLOCATE\"\r\n shape=\"outline\"\r\n size=\"small\"\r\n >\r\n <span class=\"fs-12 fc-{{ action?.actionFontColor }}\">\r\n {{ action?.actionName | translate }}\r\n </span>\r\n </ds-button>\r\n\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n *ngIf=\"action === Actions.ALLOCATE\"\r\n icon\r\n size=\"small\"\r\n >\r\n <ds-icon class=\"fs-15\" icon=\"pen\"></ds-icon>\r\n </ds-button>\r\n <ng-container\r\n *ngIf=\"\r\n action.viewMode != Actions.VIEW ||\r\n action.viewMode != Actions.COPY\r\n \"\r\n >\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n *ngIf=\"\r\n action?.action === Actions.VIEW &&\r\n !action?.isHidden\r\n \"\r\n icon\r\n size=\"small\"\r\n >\r\n <ds-icon class=\"fs-15\" icon=\"eye\"></ds-icon>\r\n </ds-button>\r\n\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n *ngIf=\"\r\n action?.action === Actions.COPY &&\r\n !action?.isHidden\r\n \"\r\n icon\r\n size=\"small\"\r\n >\r\n <ds-icon class=\"fs-15\" icon=\"files-copy\"></ds-icon>\r\n </ds-button>\r\n <!-- @if(element.hasOwnProperty('canUpdate')){\r\n <ds-button (click)=\"$event.stopPropagation();action?.onClick(element)\" icon size=\"small\"\r\n *ngIf=\"action?.action === 'edit' && !action?.isHidden && element.canUpdate == true\">\r\n <ds-icon icon=\"pen\" class=\"fs-15\"></ds-icon>\r\n </ds-button>\r\n }@else { -->\r\n\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\"\r\n *ngIf=\"\r\n action?.action === Actions.EDIT &&\r\n ![4, 7].includes(element?.contractStatus?.id)\"\r\n icon\r\n size=\"small\"\r\n >\r\n <ds-icon class=\"fs-15\" icon=\"pen\"></ds-icon>\r\n </ds-button>\r\n <!-- } -->\r\n\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n *ngIf=\"\r\n action?.action === Actions.DELETE &&\r\n !action?.isHidden &&\r\n ![4, 7].includes(element?.contractStatus?.id)\r\n \"\r\n icon\r\n size=\"small\"\r\n >\r\n <ds-icon\r\n class=\"fc-coral fs-15\"\r\n icon=\"trash\"\r\n ></ds-icon>\r\n </ds-button>\r\n\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n *ngIf=\"\r\n action?.action === Actions.DELETEPENDING &&\r\n !action?.isHidden &&\r\n element?.contractStatus?.id == 1\r\n \"\r\n icon\r\n size=\"small\"\r\n >\r\n <ds-icon\r\n class=\"fc-coral fs-15\"\r\n icon=\"trash\"\r\n ></ds-icon>\r\n </ds-button>\r\n\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n *ngIf=\"action?.action === Actions.CHART\"\r\n color=\"transparent\"\r\n size=\"small\"\r\n >\r\n <ds-icon\r\n class=\"fc-coral fs-15\"\r\n icon=\"chart-o\"\r\n ></ds-icon>\r\n </ds-button>\r\n\r\n @if (element.hasOwnProperty('canTakeAction')) {\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n size=\"small\"\r\n *ngIf=\"\r\n action?.action === Actions.APPROVE &&\r\n element.canTakeAction == true\r\n \"\r\n >\r\n <span class=\"fs-12\">\r\n {{ \"global.approve\" | translate }}\r\n </span>\r\n </ds-button>\r\n <ds-button\r\n shape=\"outline\"\r\n color=\"dark-gray\"\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n size=\"small\"\r\n *ngIf=\"\r\n action?.action === Actions.REJECT &&\r\n element.canTakeAction == true\r\n \"\r\n shape=\"outline\"\r\n >\r\n <span class=\"fs-12\">\r\n {{ \"global.reject\" | translate }}\r\n </span>\r\n </ds-button>\r\n } @else {\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n size=\"small\"\r\n *ngIf=\"action?.action === Actions.APPROVE\"\r\n >\r\n <span class=\"fs-12\">\r\n {{ \"global.approve\" | translate }}\r\n </span>\r\n </ds-button>\r\n <ds-button\r\n shape=\"outline\"\r\n color=\"dark-gray\"\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n size=\"small\"\r\n *ngIf=\"action?.action === Actions.REJECT\"\r\n shape=\"outline\"\r\n >\r\n <span class=\"fs-12\">\r\n {{ \"global.reject\" | translate }}\r\n </span>\r\n </ds-button>\r\n }\r\n\r\n <ds-button\r\n *ngIf=\"action?.action === Actions.DETAILS\"\r\n shape=\"text\"\r\n size=\"small\"\r\n >\r\n <span class=\"fs-12 underline\"> View Details </span>\r\n </ds-button>\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n *ngIf=\"\r\n action?.action === Actions.START &&\r\n element?.isFinalize\r\n \"\r\n size=\"small\"\r\n >\r\n <span class=\"fs-12\">\r\n {{ action?.actionName | translate }}\r\n </span>\r\n <ds-icon\r\n class=\"fs-16\"\r\n icon=\"media-play\"\r\n slot=\"prefix\"\r\n ></ds-icon>\r\n </ds-button>\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n *ngIf=\"action?.action === Actions.PREPARE\"\r\n color=\"light-gray\"\r\n size=\"small\"\r\n >\r\n <span class=\"fs-12 fc-black\">\r\n {{ action?.actionName | translate }}\r\n </span>\r\n <ds-icon\r\n class=\"fs-12 fc-black\"\r\n icon=\"settings\"\r\n slot=\"prefix\"\r\n ></ds-icon>\r\n </ds-button>\r\n\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n *ngIf=\"\r\n action?.action === Actions.START &&\r\n element?.isFinalize\r\n \"\r\n size=\"small\"\r\n >\r\n <span class=\"fs-12\">\r\n {{ action?.actionName | translate }}\r\n </span>\r\n <ds-icon\r\n class=\"fs-16\"\r\n icon=\"media-play\"\r\n slot=\"prefix\"\r\n ></ds-icon>\r\n </ds-button>\r\n\r\n <!-- <ds-button [color]=\"action?.actionColor\" size=\"small\"\r\n *ngIf=\"action?.action === 'customAction'\"\r\n (click)=\"$event.stopPropagation();action?.onClick(element)\" shape=\"{{action?.actionShape}}\" [class]=\"action?.actionColor\"\r\n ></ds-button> -->\r\n\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n *ngIf=\"action?.action === Actions.CUSTOMACTION\"\r\n [class]=\"action?.actionColor\"\r\n [color]=\"action?.actionColor\"\r\n shape=\"{{ action?.actionShape }}\"\r\n size=\"small\"\r\n >\r\n <span\r\n class=\"fs-12 fc-{{ action?.actionFontColor }}\"\r\n >\r\n {{ action?.actionName | translate }}\r\n </span>\r\n </ds-button>\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n *ngIf=\"\r\n action?.action === Actions.CUSTOMACTIONMANAGE &&\r\n (element.contractStatus.id == 7 ||\r\n element.contractStatus.id == 1)\r\n \"\r\n [class]=\"action?.actionColor\"\r\n [color]=\"action?.actionColor\"\r\n shape=\"{{ action?.actionShape }}\"\r\n size=\"small\"\r\n >\r\n <span\r\n class=\"fs-12 fc-{{ action?.actionFontColor }}\"\r\n >\r\n {{ action?.actionName | translate }}\r\n </span>\r\n </ds-button>\r\n\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n *ngIf=\"\r\n action?.action === Actions.CUSTOMACTIONEXTEND &&\r\n element.contractStatus.id == 7\r\n \"\r\n [class]=\"action?.actionColor\"\r\n [color]=\"action?.actionColor\"\r\n shape=\"{{ action?.actionShape }}\"\r\n size=\"small\"\r\n >\r\n <span\r\n class=\"fs-12 fc-{{ action?.actionFontColor }}\"\r\n >\r\n {{ action?.actionName | translate }}\r\n </span>\r\n </ds-button>\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n *ngIf=\"\r\n action?.action === Actions.CUSTOMACTIONDETAILS\r\n \"\r\n [class]=\"action?.actionColor\"\r\n [color]=\"action?.actionColor\"\r\n shape=\"{{ action?.actionShape }}\"\r\n size=\"small\"\r\n >\r\n <span\r\n class=\"fs-12 fc-{{ action?.actionFontColor }}\"\r\n >\r\n {{ action?.actionName | translate }}\r\n </span>\r\n </ds-button>\r\n <ds-status\r\n *ngIf=\"action?.action === Actions.STATUS\"\r\n [status]=\"action?.Status.status\"\r\n class=\"fs-12 statusAction w-100\"\r\n >\r\n <span class=\"fc-black\">\r\n {{ action?.Status.title | translate }}\r\n </span>\r\n </ds-status>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"columnsConfig[i]?.actions?.length > 6\">\r\n <ds-button\r\n #statusMenuTrigger=\"matMenuTrigger\"\r\n (click)=\"$event.stopPropagation()\"\r\n *ngIf=\"columnsConfig[i]?.actions?.length > 1\"\r\n [matMenuTriggerFor]=\"statusMenu\"\r\n class=\"dots\"\r\n shape=\"text\"\r\n size=\"small\"\r\n >\r\n <ds-icon\r\n class=\"fs-20 fc-dark-gray\"\r\n icon=\"dots\"\r\n ></ds-icon>\r\n </ds-button>\r\n\r\n <mat-menu #statusMenu=\"matMenu\">\r\n <button\r\n (click)=\"action?.onClick(element)\"\r\n *ngFor=\"let action of columnsConfig[i]?.actions\"\r\n mat-menu-item\r\n >\r\n <span class=\"fs-12 fc-black\"\r\n >{{ action?.actionName | translate }}\r\n </span>\r\n </button>\r\n </mat-menu>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'specs'\">\r\n @if(element?.[column]){\r\n <span\r\n #statusMenuTrigger=\"matMenuTrigger\"\r\n (click)=\"$event.stopPropagation()\"\r\n [matMenuTriggerFor]=\"specsMenu\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"{{\r\n columnsConfig[i].type\r\n }} fc-coral underline cursor-pointer\"\r\n >\r\n {{ columnsConfig[i].clickableText | translate }}\r\n </span>\r\n }\r\n\r\n <mat-menu #specsMenu=\"matMenu\" class=\"p-4 text-center\">\r\n <span class=\"fs-14\">\r\n {{ element[column] }}\r\n </span>\r\n </mat-menu>\r\n </ng-container>\r\n\r\n <!--<div\r\n *ngSwitchCase=\"'specs'\" [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-flex gap-1\">\r\n {{ element[column] | json }}\r\n <ng-container *ngFor=\"let item of element[column]\">\r\n\r\n <div\r\n class=\"progress-container default-progress medium radius-0 \"\r\n matTooltip=\"Team assignment {{item.value}}%\" matTooltipPosition=\"below\">\r\n <div\r\n [style.width.%]=\"item.value\"\r\n class=\"progress-bar bg-color-{{item.color}}\"></div>\r\n </div>\r\n </ng-container>\r\n\r\n </div>-->\r\n\r\n <span\r\n *ngSwitchDefault\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"text-nowrap\"\r\n matTooltip=\" {{\r\n columnsConfig[i].arKey\r\n ? translateService.currentLang == 'ar'\r\n ? mapText(columnsConfig[i].arKey, element[column])\r\n : mapText(columnsConfig[i].enKey, element[column])\r\n : element[column]\r\n ? element[column]\r\n : '-'\r\n }}\"\r\n matTooltipPosition=\"below\"\r\n >\r\n {{\r\n columnsConfig[i].arKey\r\n ? translateService.currentLang == \"ar\"\r\n ? mapText(columnsConfig[i].arKey, element[column])\r\n : mapText(columnsConfig[i].enKey, element[column])\r\n : element[column]\r\n ? element[column]\r\n : \"-\"\r\n }}\r\n </span>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n </ng-container>\r\n }\r\n </ng-container>\r\n }\r\n\r\n <tr *matHeaderRowDef=\"columns; sticky: true\" mat-header-row></tr>\r\n <tr\r\n (click)=\"clickRow(row)\"\r\n *matRowDef=\"let row; columns: columns\"\r\n [ngClass]=\"{ 'selected-row': row?.fastTrackSeen === false }\"\r\n mat-row\r\n role=\"button\"\r\n ></tr>\r\n </table>\r\n }\r\n </ng-container>\r\n } @if(isLoading){\r\n <ds-loading-table [cols]=\"columns.length\" [rows]=\"5\"></ds-loading-table>\r\n } @if(!isLoading && dataSource.filteredData?.length == 0){\r\n <ds-message\r\n [label]=\"'global.noItemsToDisplay' | translate\"\r\n type=\"emptyList\"\r\n ></ds-message>\r\n }\r\n</div>\r\n@if(dataSource.filteredData?.length && hasPaginator){\r\n<mat-paginator\r\n #paginator\r\n (page)=\"pageChanged($event)\"\r\n [length]=\"totalElements\"\r\n [pageIndex]=\"currentPage\"\r\n [pageSizeOptions]=\"[5, 10, 15, 20, 100]\"\r\n [pageSize]=\"pageSize\"\r\n aria-label=\"Select page\"\r\n showFirstLastButtons\r\n>\r\n</mat-paginator>\r\n}\r\n", styles: [":host ::ng-deep .table-responsive table{--th-height: 32px;--th-bg: var(--purple);--th-fc: var(--white);--td-height: 75px;--td-radius: 0;--border-spacing: 0;--border-collapse: collapse;--tr-even-bc: var(--white);--tr-odd-bc: var(--white);--tr-border: 1px solid var(--light-gray);--th-border: none;--cell-pading: 0 24px;--th-fs: 11px}:host ::ng-deep .table-responsive table tr.selected-row,:host ::ng-deep .table-responsive table tr.selected-row:hover{background-color:#ecfeff;border-inline-start:3px solid var(--sea-light)}:host ::ng-deep .table-responsive table td.mat-mdc-cell.mat-mdc-table-sticky{box-shadow:-10px 0 10px #00000012}:host ::ng-deep .table-responsive table mat-form-field,:host ::ng-deep .table-responsive table .e-control,:host ::ng-deep .table-responsive table .mdc-form-field{--input-height: 35px}:host ::ng-deep .Color{width:13px;height:13px;border-radius:50%}:host ::ng-deep .Colorbg{width:fit-content;min-width:102px}:host ::ng-deep .Colorbg span{width:9px;height:9px;border-radius:50%}:host ::ng-deep span.number{color:var(--coral)}:host ::ng-deep .subsidiary img{height:22px;max-width:initial}:host ::ng-deep .sla svg{width:37px}:host ::ng-deep tr th{top:-1px!important}:host ::ng-deep ds-status.statusAction::part(base){min-height:35px;--status-width: 100%}:host ::ng-deep .dropdown{border-radius:3px;background:var(--Grays-Off-white, #f3f3f1);display:flex;height:35px;padding:10px;align-items:center;gap:5px;justify-content:center;width:fit-content}:host ::ng-deep .dropdown ds-icon span{font-weight:700}:host ::ng-deep ds-status::part(base){min-height:23px}:host ::ng-deep .Category span{border-radius:3px;width:97px;height:23px;display:flex;align-items:center;justify-content:center}:host ::ng-deep .mat-checkbox .mat-checkbox-ripple{left:calc(50% - 17px);top:calc(50% - 17px);height:30px;width:30px}:host ::ng-deep .mat-checkbox .mat-checkbox-layout .mat-checkbox-inner-container .mat-checkbox-frame{width:20px;height:20px;border-width:1px;border-style:solid;border-color:#909a9f4d}:host ::ng-deep .mat-checkbox-checked .mat-checkbox-checkmark{width:20px}:host ::ng-deep .idea a:hover{text-decoration:underline;color:var(--coral)}.paginator{width:800px}.table-container{max-height:400px;overflow:auto;scroll-behavior:smooth;transition:scroll-behavior .5s ease-in-out}@media (max-width: 768px){.table-container{max-height:65vh;height:65vh}}[dir=rtl] .table-container--btn.reRequest{transform:scaleX(-1)}@media (min-width: 1200px){.table-container--name,.table-container--date{max-width:120px}}@media (min-width: 1200px){[dir=rtl] .table-container--name{max-width:initial}}.table-container--item{display:flex;align-items:center;gap:1rem;min-height:105px;overflow:hidden;position:relative;cursor:pointer}@media (min-width: 991px){.table-container--item h4{max-width:calc(100% - 200px);display:inline-block}}.table-container--item:not(:last-child){margin-bottom:.75rem}.table-container--item ds-status::part(base){--status-width: 60px}.table-container--info span{position:relative;display:flex;align-items:center;gap:.5rem}.table-container--info span:not(:first-of-type):before{content:\"\";min-width:3px;width:3px;height:3px;border-radius:50%;background-color:var(--black)}@media (min-width: 991px){.table-container--status{position:absolute;top:1rem;right:0}}:host ::ng-deep .max-width-150{max-width:150px}:host ::ng-deep .text-align-custom{unicode-bidi:plaintext}:host ::ng-deep .table-responsive table{--th-height: var(--default-size-sm);--th-bg: var(--purple);--th-fc: var(--white);--td-height: 48px;--td-radius: 0;--border-spacing: 0;--border-collapse: collapse;--tr-even-bc: var(--off-white);--tr-odd-bc: var(--white)}:host ::ng-deep .ServiceDetails{display:inline-block;max-width:230px;white-space:normal}:host ::ng-deep .progress_group{width:100px}:host ::ng-deep .progress_group .progress-container.default-progress{min-width:25px;background-color:#cdd0d1}:host ::ng-deep .sla svg{width:36px}:host ::ng-deep .sla text{font-size:10px}:host ::ng-deep .Periority.High{color:var(--red)}:host ::ng-deep .Periority.Medium{color:var(--orange)}:host ::ng-deep .Periority.Low,:host ::ng-deep .Periority.Yes{color:var(--green)}:host ::ng-deep tr:nth-child(odd) .history,:host ::ng-deep tr:nth-child(odd) .Finished{background-color:var(--light-gray)}:host ::ng-deep tr:nth-child(2n) .history,:host ::ng-deep tr:nth-child(2n) .Finished{background-color:var(--white)}:host ::ng-deep .Finished{min-width:27px}:host ::ng-deep ds-button.coral:hover svg path{fill:var(--coral)}:host ::ng-deep .controls-tabel .mat-sort-header-container{justify-content:center!important}.dot-status{height:20px;width:20px;border-radius:50%;display:inline-block}.dot-status.red{background-color:var(--red)}.dot-status.green{background-color:var(--green)}.sticky-table{max-height:100vh}.dimCheckbox{background:var(--gray);pointer-events:none}\n"], dependencies: [{ kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "component", type: MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "component", type: InputComponent, selector: "app-input", inputs: ["floatLabel", "className", "iconPrefixName", "iconSuffixName", "emitedChangedValue1", "customErrorMessages"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "directive", type: MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "directive", type: MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "component", type: MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: CustomSearchableComponent, selector: "app-custom-searchable", inputs: ["options", "disabled", "displayedLabel", "key", "floatLabel", "className"], outputs: ["selectedValue", "isLengthGreaterThan4"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: SkipLocationDirective, selector: "[appSkipLocation]", inputs: ["appSkipLocation"] }, { kind: "component", type: MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }] });
|
|
173
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.8", type: TableComponent, isStandalone: true, selector: "app-table", inputs: { columns: "columns", isError: "isError", isLoading: "isLoading", customMessage: "customMessage", columnsConfig: "columnsConfig", loadData: "loadData", actions: "actions", className: "className", totalElements: "totalElements", showPagination: "showPagination", pageIndex: "pageIndex", pageSize: "pageSize", sortDisabled: "sortDisabled", useScroll: "useScroll", hasPaginator: "hasPaginator", currentPage: "currentPage", keyWord: "keyWord", rows: "rows" }, outputs: { serviceRowSelect: "serviceRowSelect", selectPage: "selectPage", rowClicked: "rowClicked", autoCompleteValueSelected: "autoCompleteValueSelected", selectValueSelected: "selectValueSelected", sortChanged: "sortChanged", inputCellChanged: "inputCellChanged", pageScroll: "pageScroll", toggleChanged: "toggleChanged", eventClicked: "eventClicked", pageChange: "pageChange" }, viewQueries: [{ propertyName: "matTableRef", first: true, predicate: ["table"], descendants: true, read: ElementRef }, { propertyName: "tableSort", first: true, predicate: ["tableSort"], descendants: true }], ngImport: i0, template: "<div #table class=\"table-container table-responsive sticky-table\">\r\n @if (!isLoading) {\r\n <ng-container>\r\n @if (dataSource.filteredData?.length! > 0) {\r\n <table\r\n #tableSort=\"matSort\"\r\n (matSortChange)=\"sortChange($event)\"\r\n [dataSource]=\"dataSource\"\r\n class=\"primary-table {{ className }}\"\r\n mat-table\r\n matSort\r\n >\r\n @for (column of columns; track $index; let i = $index) {\r\n <ng-container>\r\n <!-- Add a check to ensure 'columnsConfig' and 'columnsConfig[i]' are defined before using them -->\r\n\r\n @if (columnsConfig && columnsConfig[i]) {\r\n <ng-container>\r\n <ng-container\r\n [matColumnDef]=\"column\"\r\n [stickyEnd]=\"!!columnsConfig[i].stickyEnd!\"\r\n >\r\n @if (!columnsConfig[i].notSortable) {\r\n <ng-container>\r\n <th\r\n *matHeaderCellDef\r\n [ngClass]=\"{ 'text-end': columnsConfig[i].type === 'actions' }\"\r\n mat-header-cell\r\n mat-sort-header\r\n >\r\n @if (columnsConfig[i].type !== 'checkbox' || (\r\n this.columnsConfig[i]?.type! == 'actions' &&\r\n this.columnsConfig[i]?.actions?.length === 0)) {\r\n <ng-container>\r\n @if (!(this.columnsConfig[i].type == 'actions' &&\r\n this.columnsConfig[i].actions.length === 0)) {\r\n <div class=\"d-flex align-items-center\">\r\n <div class=\"mx-1 fc-{{ columnsConfig[i].fontColor }}\">\r\n {{ columnsConfig[i].label | translate }}\r\n </div>\r\n @if (columnsConfig[i].slaMax) {\r\n <ds-sla\r\n [canvasScale]=\"'40'\"\r\n [innerLineWidth]=\"'3'\"\r\n [maxValue]=\"columnsConfig[i].slaMax\"\r\n [outerLineColor]=\"'limegreen'\"\r\n [outerLineWidth]=\"'3'\"\r\n [value]=\"columnsConfig[i].slaValue\"\r\n class=\"table-header-sla my-1\"\r\n ></ds-sla>\r\n }\r\n </div>\r\n }\r\n </ng-container>\r\n }\r\n @if (columnsConfig[i].type == 'checkbox') {\r\n <mat-checkbox class=\"checkbox\"></mat-checkbox>\r\n }\r\n </th>\r\n </ng-container>\r\n }\r\n @if (columnsConfig[i].notSortable) {\r\n <ng-container>\r\n <th\r\n *matHeaderCellDef\r\n [ngClass]=\"{ 'text-end': columnsConfig[i].type === 'actions' }\"\r\n mat-header-cell\r\n >\r\n <div class=\"d-flex align-items-center\">\r\n <div class=\"mx-1\">\r\n {{ columnsConfig[i].label | translate }}\r\n </div>\r\n @if (columnsConfig[i].slaMax) {\r\n <ds-sla\r\n [canvasScale]=\"'50'\"\r\n [innerLineWidth]=\"'3'\"\r\n [maxValue]=\"columnsConfig[i].slaMax\"\r\n [outerLineColor]=\"'limegreen'\"\r\n [outerLineWidth]=\"'3'\"\r\n [value]=\"columnsConfig[i].slaValue\"\r\n class=\"table-header-sla my-1\"\r\n ></ds-sla>\r\n }\r\n </div>\r\n </th>\r\n </ng-container>\r\n }\r\n\r\n <td *matCellDef=\"let element; let j = index\" mat-cell>\r\n <ng-container [ngSwitch]=\"columnsConfig[i].type\">\r\n <!-- <a target=\"_blank\"-->\r\n <!-- routerLink=\"/inbox\" [queryParams]=\"{ id: element[column] }\"-->\r\n <!-- class=\"fc-black text-decoration-underline fw-medium\" [ngClass]=\"columnsConfig[i].type\" *ngSwitchCase=\"'link'\">-->\r\n <!-- {{ element[column] }}-->\r\n <!-- </a>-->\r\n <span\r\n *ngSwitchCase=\"'formId'\"\r\n (click)=\"viewForm(element[column])\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"fc-coral cursor-pointer text-decoration-underline fw-medium\">\r\n {{ element[column] }}\r\n </span>\r\n <!-- <span\r\n *ngSwitchCase=\"'link'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"fc-black text-decoration-underline fw-medium\"\r\n >\r\n {{ element[column] }}\r\n </span>-->\r\n\r\n <span\r\n *ngSwitchCase=\"'linkWithIcon'\"\r\n [appSkipLocation]=\"columnsConfig[i].link\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"fc-black text-decoration-underline fw-medium\"\r\n >\r\n <ds-icon\r\n class=\"fs-20 fc-black\"\r\n icon=\" {{ columnsConfig[i].icon }}\"\r\n ></ds-icon>\r\n <span class=\"fs-13 fc-coral px-1 text-decoration-underline\">{{\r\n element[column]\r\n }}</span>\r\n </span>\r\n <span\r\n *ngSwitchCase=\"'underLineWithIcon'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"fc-black text-decoration-underline fw-medium\"\r\n >\r\n <ds-icon\r\n class=\"fs-20 fc-black\"\r\n icon=\" {{ columnsConfig[i].icon }}\"\r\n ></ds-icon>\r\n <span class=\"fs-13 fc-coral px-1 text-decoration-underline\">{{\r\n element[column]\r\n }}</span>\r\n </span>\r\n <mat-checkbox\r\n *ngSwitchCase=\"'checkbox'\"\r\n checked=\"{{ columnsConfig[i].checked }}\"\r\n class=\"checkbox\"\r\n disabled=\"{{ columnsConfig[i].disabled }}\"\r\n >\r\n </mat-checkbox>\r\n <span\r\n *ngSwitchCase=\"'ServiceDetails'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"cursor-pointer\"\r\n >\r\n {{ element[column] }}\r\n </span>\r\n <span\r\n *ngSwitchCase=\"'dateOnly'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-inline-flex align-items-center gap-2 text-nowrap\"\r\n >\r\n <span class=\"sfi sfi-calendar-o fc-coral fs-18\"></span>\r\n {{ element[column] | date : \"MMM d, y\" }}\r\n </span>\r\n <span\r\n *ngSwitchCase=\"'Search'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-inline-flex align-items-center\"\r\n >\r\n <app-input\r\n [formControl]=\"ctrl\"\r\n [placeholder]=\"'Search for item '\"\r\n [showLabel]=\"false\"\r\n class=\"\"\r\n className=\"no-padding \"\r\n prefix=\"sfi-search fs-16\"\r\n type=\"text\"\r\n >\r\n </app-input>\r\n </span>\r\n <span\r\n *ngSwitchCase=\"'Number'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-inline-flex align-items-center\"\r\n >\r\n <app-input\r\n [formControl]=\"ctrl\"\r\n [placeholder]=\"'number'\"\r\n [showLabel]=\"false\"\r\n class=\"\"\r\n className=\"no-padding\"\r\n type=\"text\"\r\n >\r\n </app-input>\r\n </span>\r\n <span\r\n *ngSwitchCase=\"'dateFromTo'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-inline-flex align-items-center\"\r\n >\r\n <span class=\"sfi sfi-clock fc-coral\"></span>\r\n <span class=\"mx-2\">\r\n {{ element?.date.from }}\r\n @if (element?.date.to) {\r\n <ng-container> : {{ element?.date.to }} </ng-container>\r\n }\r\n </span>\r\n </span>\r\n\r\n <span\r\n *ngSwitchCase=\"'dateTime'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-inline-flex align-items-center gap-1 flex-wrap\"\r\n >\r\n <span class=\"sfi sfi-calendar-o fc-dark-gray fs-20\"></span>\r\n {{ element[column] | date : \"MMM d, y, h:mm a\" }}\r\n </span>\r\n\r\n <span\r\n *ngSwitchCase=\"'singleTimeOnly'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-inline-flex align-items-center gap-1 flex-wrap\"\r\n >\r\n {{ element[column] | date : \"h:mm a\" }}\r\n </span>\r\n <!--dir=\"ltr\" and text-left for English text on ar page -->\r\n <span\r\n *ngSwitchCase=\"'timeOnly'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-inline-flex align-items-center gap-1 flex-wrap text-nowrap text-left\"\r\n dir=\"ltr\"\r\n >\r\n <!-- -->\r\n {{\r\n mapText(columnsConfig[i].firstVal, element[column])\r\n | date : \"h:mm a\"\r\n }}\r\n @if (mapText(columnsConfig[i].secondVal, element[column])) {\r\n <ng-container>\r\n -\r\n {{\r\n mapText(columnsConfig[i].secondVal, element[column])\r\n | date : \"h:mm a\"\r\n }}\r\n </ng-container>\r\n }\r\n </span>\r\n\r\n <span\r\n *ngSwitchCase=\"'multipleRows'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-inline-flex align-items-center gap-1 flex-wrap\"\r\n >\r\n <!-- -->\r\n @if (!element[column].monthlyFineEscalation) {\r\n <div>\r\n {{ element[column].fixedFineValue }}\r\n {{ \"global.SAR\" | translate }}\r\n </div>\r\n }\r\n @if (element[column].monthlyFineEscalation) {\r\n <div>\r\n <br/>\r\n {{ element[column].firstTimeFine }}\r\n {{ \"global.SAR\" | translate }} <br/><br/>\r\n {{ element[column].secondTimeFine }}\r\n {{ \"global.SAR\" | translate }} <br/><br/>\r\n {{ element[column].thirdTimeFine }}\r\n {{ \"global.SAR\" | translate }} <br/><br/>\r\n </div>\r\n }\r\n </span>\r\n\r\n <div\r\n *ngSwitchCase=\"'sla'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-inline-flex align-items-center\"\r\n >\r\n <!-- <app-sla [value]=\"element?.SLA.value\" [maxValue]=\"element?.SLA.max\" [canvasScale]=\"38\" -->\r\n <!-- class=\"font-9 fw-medium\" [outerLineColor]=\"getSlaColor(element?.SLA.value, element?.SLA.max)\">-->\r\n <!-- </app-sla>-->\r\n\r\n <ds-sla\r\n [attr.outerLineColor]=\"\r\n getSlaColor(element?.SLA.value, element?.SLA.max)\r\n \"\r\n [canvasScale]=\"'55'\"\r\n [innerLineWidth]=\"'3'\"\r\n [maxValue]=\"element?.SLA?.max\"\r\n [outerLineWidth]=\"'3'\"\r\n [value]=\"element?.SLA?.value\"\r\n ></ds-sla>\r\n </div>\r\n <div *ngSwitchCase=\"'slaProgress'\">\r\n <!-- <mat-sp-->\r\n\r\n @if (element[column]?.percentage >= 0) {\r\n <ds-sla\r\n [canvasScale]=\"'55'\"\r\n [customValue]=\"element[column]?.percentage + '%'\"\r\n [innerLineWidth]=\"'3'\"\r\n [maxValue]=\"'100'\"\r\n [outerLineColor]=\"\r\n getSlaColor(element[column]?.percentage, 100)\r\n \"\r\n [outerLineWidth]=\"'3'\"\r\n [value]=\"element[column]?.percentage\"\r\n ></ds-sla>\r\n } @else {\r\n <ng-template>Not started</ng-template>\r\n }\r\n </div>\r\n <div\r\n *ngSwitchCase=\"'Priority'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"{{ element[column] }}\"\r\n >\r\n {{ element[column] }}\r\n </div>\r\n\r\n <div\r\n *ngSwitchCase=\"'serviceStatus'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"{{ element[column] }}\"\r\n >\r\n <span\r\n [ngClass]=\"element[column] == 'FALSE' ? 'green' : 'red'\"\r\n class=\"dot-status\"\r\n ></span>\r\n </div>\r\n\r\n <div\r\n *ngSwitchCase=\"'image'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"img-card table-img\"\r\n >\r\n <img\r\n [src]=\"element?.image\"\r\n alt=\"\"\r\n onerror=\"this.onerror=null;this.src='assets/images/user.svg';\"\r\n />\r\n </div>\r\n\r\n <div\r\n *ngSwitchCase=\"'employee'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-flex align-items-center gap-2 text-nowrap\"\r\n >\r\n <ds-avatar\r\n [image]=\"'https://igateapp.stc.com.sa'+element[column]?.['imageUrl']\"\r\n size=\"x-small\"\r\n >\r\n </ds-avatar>\r\n <span>{{ (element[column]?.['name']) }}</span>\r\n </div>\r\n\r\n <div\r\n *ngSwitchCase=\"'progress_group'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-flex gap-1\"\r\n >\r\n <ng-container *ngFor=\"let item of element[column]\">\r\n <div\r\n class=\"progress-container default-progress medium radius-0\"\r\n matTooltip=\"Team assignment {{ item.value }}%\"\r\n matTooltipPosition=\"below\"\r\n >\r\n <div\r\n [style.width.%]=\"item.value\"\r\n class=\"progress-bar bg-color-{{ item.color }}\"\r\n ></div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div\r\n *ngSwitchCase=\"'input'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"\"\r\n >\r\n <app-input\r\n (input)=\"inputCellChanged.emit({element,column,i})\"\r\n [(ngModel)]=\"element[column]\"\r\n [min]=\"0\"\r\n [placeholder]=\"element[column]\"\r\n class=\"w-100\"\r\n className=\" no-padding w-100\"\r\n type=\"number\"\r\n value=\"{{ element[column] }}\"\r\n >\r\n </app-input>\r\n </div>\r\n <div *ngSwitchCase=\"'autoComplete'\"></div>\r\n <div\r\n *ngSwitchCase=\"'select'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"\"\r\n >\r\n <app-custom-searchable\r\n (selectedValue)=\"selectValueSelected.emit($event)\"\r\n [isSearchable]=\"columnsConfig[i].config?.isSearchable\"\r\n [key]=\"columnsConfig[i]?.key\"\r\n [displayedLabel]=\"columnsConfig[i]?.displayedLable\"\r\n [options]=\"columnsConfig[i]?.options\"\r\n [postKey]=\"columnsConfig[i]?.postKey\"\r\n [showLabel]=\"false\"\r\n className=\"no-padding w-100\"\r\n >\r\n </app-custom-searchable>\r\n </div>\r\n\r\n <div\r\n *ngSwitchCase=\"'status'\"\r\n [ngClass]=\"'New' + columnsConfig[i].type\"\r\n class=\"d-flex align-items-center gap-2\"\r\n >\r\n @if (element[column]) {\r\n <ds-status [status]=\"element[column]?.status\" class=\"fs-12\">\r\n {{ element[column]?.title | translate }}\r\n </ds-status>\r\n }\r\n @if (element[column]?.reason) {\r\n <span\r\n (click)=\"$event.stopPropagation()\"\r\n [matMenuTriggerFor]=\"reasonMenu\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"{{\r\n columnsConfig[i].type\r\n }} fc-red underline cursor-pointer\"\r\n >\r\n Show reason\r\n </span>\r\n }\r\n\r\n <mat-menu #reasonMenu=\"matMenu\" class=\"p-4 text-center\">\r\n <span class=\"fs-14\">\r\n {{ element[column]?.reason }}\r\n </span>\r\n </mat-menu>\r\n </div>\r\n <div *ngSwitchCase=\"'toggle'\" [ngClass]=\"columnsConfig[i].type\">\r\n <mat-slide-toggle\r\n (change)=\"toggleValueChange($event, element)\"\r\n [checked]=\"element[column] == 1\"\r\n [disabled]=\"false\"\r\n ></mat-slide-toggle>\r\n </div>\r\n\r\n <div\r\n *ngSwitchCase=\"'customToggle'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n >\r\n <mat-slide-toggle\r\n (change)=\"toggleValueChange($event, element)\"\r\n [checked]=\"element[column] == 7\"\r\n [disabled]=\"element[column] != 1\"\r\n ></mat-slide-toggle>\r\n </div>\r\n <div\r\n *ngSwitchCase=\"'meetingStatus'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"{{ columnsConfig[i].type }}\"\r\n >\r\n @if (element[column].label == 'Finished') {\r\n <span class=\" {{ element[column].label }} status \">\r\n {{ element[column].label }}\r\n </span>\r\n }\r\n @if (element[column].label != 'Finished') {\r\n <div class=\"d-flex align-items-center gap-2\">\r\n <div\r\n class=\"Finished d-flex flex-column align-items-center justify-content-center py-1 fc-black\"\r\n >\r\n <span class=\"fs-11 fw-medium mb-1\">\r\n {{ element[column].hours }}</span\r\n >\r\n <span class=\"fs-10 fw-light\">HRS</span>\r\n </div>\r\n <div\r\n class=\"Finished d-flex flex-column align-items-center justify-content-center py-1 fc-black\"\r\n >\r\n <span class=\"fs-11 fw-medium mb-1\">\r\n {{ element[column].min }}</span\r\n >\r\n <span class=\"fs-10 fw-light\">MINS</span>\r\n </div>\r\n <div\r\n class=\"Finished d-flex flex-column align-items-center justify-content-center py-1 fc-black\"\r\n >\r\n <span class=\"fs-11 fw-medium mb-1\">\r\n {{ element[column].sec }}</span\r\n >\r\n <span class=\"fs-10 fw-light\">SECS</span>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n <span\r\n *ngSwitchCase=\"'number'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"{{ columnsConfig[i].type }} {{\r\n element[column] ? 'underline' : ''\r\n }}\"\r\n >\r\n {{ element[column] ? element[column] : 0 }}\r\n </span>\r\n\r\n <span\r\n *ngSwitchCase=\"'currency'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"{{ columnsConfig[i].type }}\"\r\n >\r\n {{\r\n element[column]\r\n ? parseInt(element[column]).toFixed(2) +\r\n (columnsConfig[i].currency | translate)\r\n : \"-\"\r\n }}\r\n </span>\r\n <span\r\n *ngSwitchCase=\"'active'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"{{ columnsConfig[i].type }}\"\r\n >\r\n <ds-icon\r\n [ngClass]=\"element[column] ? 'fc-green' : 'fc-gray'\"\r\n icon=\"check-circle-f fs-30\"\r\n ></ds-icon>\r\n </span>\r\n <div\r\n *ngSwitchCase=\"'sync'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"{{\r\n columnsConfig[i].type\r\n }} d-flex align-items-center gap-2\"\r\n >\r\n <svg\r\n fill=\"none\"\r\n height=\"19\"\r\n viewBox=\"0 0 18 19\"\r\n width=\"18\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M14.25 13.2604C13.9425 13.2604 13.6875 12.9913 13.6875 12.6667V5.14583C13.6875 4.59958 13.2675 4.15625 12.75 4.15625H8.625C8.3175 4.15625 8.0625 3.88708 8.0625 3.5625C8.0625 3.23792 8.3175 2.96875 8.625 2.96875H12.75C13.89 2.96875 14.8125 3.9425 14.8125 5.14583V12.6667C14.8125 12.9913 14.5575 13.2604 14.25 13.2604Z\"\r\n fill=\"#FF375E\"\r\n />\r\n <path\r\n d=\"M10.5 6.13549C10.3725 6.13549 10.245 6.088 10.14 6.00092L7.88999 4.02175C7.76249 3.91092 7.6875 3.74465 7.6875 3.56257C7.6875 3.38048 7.76249 3.22214 7.88999 3.10339L10.14 1.12422C10.38 0.910471 10.7325 0.950084 10.935 1.20342C11.1375 1.45675 11.1 1.82883 10.86 2.04258L9.12751 3.56257L10.86 5.08255C11.1 5.29631 11.13 5.66839 10.935 5.92172C10.8225 6.06422 10.6575 6.13549 10.5 6.13549Z\"\r\n fill=\"#FF375E\"\r\n />\r\n <path\r\n d=\"M14.25 18.0105C12.6975 18.0105 11.4375 16.6805 11.4375 15.0417C11.4375 13.403 12.6975 12.073 14.25 12.073C15.8025 12.073 17.0625 13.403 17.0625 15.0417C17.0625 16.6805 15.8025 18.0105 14.25 18.0105ZM14.25 13.2605C13.32 13.2605 12.5625 14.0601 12.5625 15.0417C12.5625 16.0234 13.32 16.823 14.25 16.823C15.18 16.823 15.9375 16.0234 15.9375 15.0417C15.9375 14.0601 15.18 13.2605 14.25 13.2605Z\"\r\n fill=\"#FF375E\"\r\n />\r\n <path\r\n d=\"M9.375 16.0312H5.25C4.11 16.0312 3.1875 15.0574 3.1875 13.8541V6.33325C3.1875 6.00867 3.4425 5.7395 3.75 5.7395C4.0575 5.7395 4.3125 6.00867 4.3125 6.33325V13.8541C4.3125 14.4003 4.7325 14.8437 5.25 14.8437H9.375C9.6825 14.8437 9.9375 15.1128 9.9375 15.4374C9.9375 15.762 9.6825 16.0312 9.375 16.0312Z\"\r\n fill=\"#FF375E\"\r\n />\r\n <path\r\n d=\"M7.4997 18.0104C7.3422 18.0104 7.17721 17.9391 7.06471 17.7966C6.86221 17.5433 6.89969 17.1712 7.13969 16.9574L8.87219 15.4375L7.13969 13.9175C6.89969 13.7037 6.86971 13.3316 7.06471 13.0783C7.26721 12.825 7.61971 12.7933 7.85971 12.9991L10.1097 14.9783C10.2372 15.0891 10.3122 15.2554 10.3122 15.4375C10.3122 15.6195 10.2372 15.7779 10.1097 15.8966L7.85971 17.8758C7.75471 17.9629 7.6272 18.0104 7.4997 18.0104Z\"\r\n fill=\"#FF375E\"\r\n />\r\n <path\r\n d=\"M3.75 6.927C2.1975 6.927 0.9375 5.597 0.9375 3.95825C0.9375 2.3195 2.1975 0.989502 3.75 0.989502C5.3025 0.989502 6.5625 2.3195 6.5625 3.95825C6.5625 5.597 5.3025 6.927 3.75 6.927ZM3.75 2.177C2.82 2.177 2.0625 2.97659 2.0625 3.95825C2.0625 4.93992 2.82 5.7395 3.75 5.7395C4.68 5.7395 5.4375 4.93992 5.4375 3.95825C5.4375 2.97659 4.68 2.177 3.75 2.177Z\"\r\n fill=\"#FF375E\"\r\n />\r\n </svg>\r\n {{ element[column] }}\r\n </div>\r\n\r\n <ng-container *ngSwitchCase=\"'clickable'\">\r\n @if (element?.[column]) {\r\n <span\r\n #statusMenuTrigger=\"matMenuTrigger\"\r\n (click)=\"$event.stopPropagation()\"\r\n [matMenuTriggerFor]=\"descMenu\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"{{\r\n columnsConfig[i].type\r\n }} fc-coral underline cursor-pointer\"\r\n >\r\n {{ columnsConfig[i].clickableText | translate }}\r\n </span>\r\n }\r\n\r\n <mat-menu #descMenu=\"matMenu\" class=\"p-4 text-center\">\r\n <span class=\"fs-14\">\r\n {{ element[column] }}\r\n </span>\r\n </mat-menu>\r\n </ng-container>\r\n\r\n <span\r\n #statusMenuTrigger=\"matMenuTrigger\"\r\n (click)=\"$event.stopPropagation()\"\r\n *ngSwitchCase=\"'translatedClickable'\"\r\n [matMenuTriggerFor]=\"descMenuTranslated\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"{{\r\n columnsConfig[i].type\r\n }} fc-coral underline cursor-pointer\"\r\n >\r\n {{ columnsConfig[i].clickableText | translate }}\r\n <!-- {{ 'global.view' | translate}} -->\r\n </span>\r\n\r\n <mat-menu #descMenuTranslated=\"matMenu\" class=\"p-4 text-center\">\r\n <span class=\"fs-14\">\r\n {{\r\n columnsConfig[i].arKey\r\n ? translateService.currentLang == \"ar\"\r\n ? mapText(columnsConfig[i].arKey, element[column])\r\n : mapText(columnsConfig[i].enKey, element[column])\r\n : element[column]\r\n ? element[column]\r\n : \"-\"\r\n }}\r\n </span>\r\n </mat-menu>\r\n\r\n <span\r\n #statusMenuTrigger=\"matMenuTrigger\"\r\n (click)=\"$event.stopPropagation()\"\r\n *ngSwitchCase=\"'conditionalClickable'\"\r\n [matMenuTriggerFor]=\"descConditionalMenu\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"{{\r\n columnsConfig[i].type\r\n }} fc-coral underline cursor-pointer\"\r\n >\r\n @if (element[column] && element[column] != 'null') {\r\n <span>{{ columnsConfig[i].clickableText | translate }}</span>\r\n }\r\n <!-- {{ 'global.view' | translate}} -->\r\n </span>\r\n\r\n <mat-menu\r\n #descConditionalMenu=\"matMenu\"\r\n class=\"p-4 text-center\"\r\n >\r\n <span class=\"fs-14\">\r\n {{ element[column] }}\r\n </span>\r\n </mat-menu>\r\n\r\n <span\r\n (click)=\"$event.stopPropagation()\"\r\n *ngSwitchCase=\"'dropdown'\"\r\n [matMenuTriggerFor]=\"dropdownMenu\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"{{ columnsConfig[i].type }} cursor-pointer\"\r\n >\r\n {{\r\n columnsConfig[i].arKey\r\n ? translateService.currentLang == \"ar\"\r\n ? mapText(columnsConfig[i].arKey, element[column])\r\n : mapText(columnsConfig[i].enKey, element[column])\r\n : element[column]\r\n ? element[column]\r\n : \"-\"\r\n }}\r\n <!-- <span *ngFor=\"let item of element[column]\">\r\n {{item.id}}\r\n </span> -->\r\n\r\n <ds-icon class=\"fc-black fw-medium\" icon=\"arrow\"></ds-icon>\r\n </span>\r\n\r\n <mat-menu #dropdownMenu=\"matMenu\" class=\"p-4 text-center\">\r\n <ng-container *ngSwitchCase=\"'dropdown'\">\r\n <span class=\"fs-12 fc-black\" mat-menu-item>\r\n <!-- {{translateService.currentLang == 'ar' ? item.groupNameAr : item.groupNameEn}} -->\r\n {{\r\n columnsConfig[i].arKey\r\n ? translateService.currentLang == \"ar\"\r\n ? mapText(columnsConfig[i].arKey, element[column])\r\n : mapText(columnsConfig[i].enKey, element[column])\r\n : element[column]\r\n ? element[column]\r\n : \"-\"\r\n }}\r\n </span>\r\n </ng-container>\r\n </mat-menu>\r\n\r\n <span\r\n *ngSwitchCase=\"'formatNumber'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n matTooltip=\"{{\r\n element[column] > 1000 ? element[column] : ''\r\n }}\"\r\n >\r\n {{ element[column] }}\r\n </span>\r\n\r\n <div\r\n *ngSwitchCase=\"'group'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"text-nowrap d-flex align-items-center\"\r\n ></div>\r\n\r\n <div\r\n *ngSwitchCase=\"'company'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-flex align-items-center\"\r\n >\r\n <span class=\"img-card circled-img\">\r\n <img\r\n [src]=\"element?.image\"\r\n alt=\"\"\r\n onerror=\"this.onerror=null;this.src='assets/images/user.svg';\"\r\n />\r\n </span>\r\n <span class=\"mx-1\"></span>\r\n <span class=\"full-name\">{{ element[column] }}</span>\r\n </div>\r\n\r\n <span\r\n *ngSwitchCase=\"'translated'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"text-nowrap\"\r\n >\r\n {{ element[column] }}\r\n </span>\r\n <span\r\n *ngSwitchCase=\"'title'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"text-nowrap\"\r\n >\r\n {{ element[column]?.title }}\r\n </span>\r\n\r\n <span\r\n *ngSwitchCase=\"'maxWidth'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n >\r\n {{ element[column]?.title }}\r\n </span>\r\n\r\n <span\r\n *ngSwitchCase=\"'progress'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n >\r\n <div class=\"Progress\">\r\n <div class=\"progress-container default-progress\">\r\n <div\r\n [style.width.%]=\"\r\n (element[column].consumed! / element[column].total!) *\r\n 100\r\n \"\r\n class=\"progress-bar\"\r\n ></div>\r\n </div>\r\n <div class=\"Progress__footer\">\r\n <div></div>\r\n <div>\r\n <span class=\"fs-12\">\r\n <span>{{ element[column].consumed }}</span>\r\n <span>/</span>\r\n <span class=\"fc-silver\">{{\r\n element[column].total\r\n }}</span>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </span>\r\n\r\n <div\r\n *ngSwitchCase=\"'subsidiary'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-flex align-items-center gap-2\"\r\n >\r\n <img\r\n [alt]=\"element[column]?.title\"\r\n src=\"assets/subsidiaries/ids/{{ element[column]?.id }}.png\"\r\n />\r\n <!-- <span class=\"full-name\">{{element[column]}}</span>-->\r\n </div>\r\n\r\n <div\r\n *ngSwitchCase=\"'Service'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-flex align-items-center gap-2\"\r\n >\r\n <svg\r\n fill=\"none\"\r\n height=\"35\"\r\n viewBox=\"0 0 34 35\"\r\n width=\"34\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <rect\r\n fill=\"#FF375E\"\r\n fill-opacity=\"0.1\"\r\n height=\"33.5\"\r\n rx=\"4\"\r\n width=\"33.5\"\r\n y=\"0.75\"\r\n />\r\n <path\r\n d=\"M24.213 17.0338H22.1448L21.4532 15.1884C21.2221 14.5845 20.649 14.1622 19.9761 14.1592H13.5315C12.8586 14.1622 12.2847 14.5838 12.0582 15.1771L12.0544 15.1876L11.3628 17.033H9.29312C9.05532 17.033 8.86328 17.2258 8.86328 17.4629V19.1845C8.86328 19.4223 9.05607 19.6143 9.29312 19.6143H10.2076L9.69896 20.378C9.53242 20.6233 9.4334 20.9263 9.4334 21.2519C9.4334 21.2527 9.4334 21.2527 9.4334 21.2534V26.0702C9.4334 26.308 9.62619 26.5 9.86324 26.5H12.1595C12.3973 26.5 12.5893 26.3072 12.5893 26.0702V24.7791H20.91V26.0702C20.91 26.308 21.1028 26.5 21.3399 26.5H23.6361C23.8739 26.5 24.066 26.3072 24.066 26.0702V21.2519C24.066 21.2512 24.066 21.2512 24.066 21.2504C24.066 20.9248 23.9669 20.6218 23.7974 20.3705L23.8011 20.3757L23.2925 19.6121H24.207C24.4448 19.6121 24.6368 19.4193 24.6368 19.1822V17.4606C24.6361 17.2258 24.4478 17.036 24.2145 17.0315L24.213 17.0338ZM12.8654 15.4915C12.9711 15.2176 13.2314 15.0271 13.5368 15.0264H19.9798C20.2852 15.0271 20.5455 15.2184 20.649 15.487L20.6505 15.4922L21.8747 18.7569H11.6359L12.8654 15.4915ZM23.2138 23.9202H10.2983V21.2542C10.2983 21.2534 10.2983 21.2534 10.2983 21.2527C10.2983 21.1049 10.3433 20.9676 10.4199 20.8536L10.4184 20.8558L11.245 19.6151H22.2618L23.0885 20.8558C23.1635 20.9668 23.2085 21.1049 23.2085 21.2519C23.2085 21.2527 23.2085 21.2527 23.2085 21.2534L23.2138 23.9202ZM9.72896 17.895H11.0357L10.7132 18.7561H9.72071L9.72896 17.895ZM11.7379 25.6411H10.2983V24.7799H11.7334L11.7379 25.6411ZM23.2153 25.6411H21.775V24.7799H23.21L23.2153 25.6411ZM23.7869 18.7546H22.7899L22.4674 17.8935H23.7831L23.7869 18.7546ZM12.1632 20.4762C11.2915 20.4762 10.5856 21.1829 10.5856 22.0538C10.5856 22.9248 11.2923 23.6314 12.1632 23.6314C13.0349 23.6314 13.7408 22.9248 13.7408 22.0538C13.7408 21.1821 13.0342 20.4762 12.1632 20.4762V20.4762ZM12.1632 22.7725C11.7671 22.7725 11.4461 22.4514 11.4461 22.0553C11.4461 21.6592 11.7671 21.3382 12.1632 21.3382C12.5593 21.3382 12.8804 21.6592 12.8804 22.0553C12.8804 22.4514 12.5593 22.7725 12.1632 22.7725V22.7725ZM21.3444 20.4762C20.4727 20.4762 19.7668 21.1829 19.7668 22.0538C19.7668 22.9248 20.4735 23.6314 21.3444 23.6314C22.2161 23.6314 22.922 22.9248 22.922 22.0538C22.922 21.1821 22.2153 20.4762 21.3444 20.4762ZM21.3444 22.7725C20.9483 22.7725 20.6272 22.4514 20.6272 22.0553C20.6272 21.6592 20.9483 21.3382 21.3444 21.3382C21.7405 21.3382 22.0615 21.6592 22.0615 22.0553C22.0615 22.4514 21.7405 22.7725 21.3444 22.7725ZM19.0489 21.0509H14.4579C14.2201 21.0509 14.0274 21.2437 14.0274 21.4815C14.0274 21.7193 14.2201 21.912 14.4579 21.912H19.0489C19.2867 21.912 19.4795 21.7193 19.4795 21.4815C19.4795 21.2437 19.2867 21.0509 19.0489 21.0509ZM19.0489 22.1986H14.4579C14.2201 22.1986 14.0274 22.3914 14.0274 22.6292C14.0274 22.867 14.2201 23.0598 14.4579 23.0598H19.0489C19.2867 23.0598 19.4795 22.867 19.4795 22.6292C19.4795 22.3914 19.2867 22.1986 19.0489 22.1986ZM15.2321 12.5703C15.1541 12.6484 15.1061 12.7556 15.1061 12.8742C15.1061 13.112 15.2989 13.304 15.5359 13.304C15.6544 13.304 15.7625 13.256 15.8397 13.178C16.0738 12.9439 16.3971 12.7991 16.7542 12.7991C17.1113 12.7991 17.4346 12.9439 17.6686 13.178C17.7466 13.256 17.8539 13.304 17.9724 13.304C18.2102 13.304 18.4023 13.1112 18.4023 12.8742C18.4023 12.7556 18.3543 12.6476 18.2762 12.5703C17.8862 12.181 17.3483 11.9395 16.7534 11.9395C16.1586 11.9395 15.6199 12.1803 15.2306 12.5703H15.2321ZM19.1877 12.0865C19.1884 12.0865 19.1884 12.0865 19.1892 12.0865C19.427 12.0865 19.619 11.8937 19.619 11.6567C19.619 11.5374 19.5703 11.4294 19.4915 11.3513C18.7909 10.6507 17.8224 10.2171 16.7527 10.2171C15.683 10.2171 14.7145 10.6507 14.0139 11.3513C13.9358 11.4294 13.8878 11.5366 13.8878 11.6552C13.8878 11.893 14.0806 12.085 14.3177 12.085C14.4362 12.085 14.5442 12.037 14.6215 11.959C15.1668 11.4136 15.92 11.0768 16.7519 11.0768C17.5838 11.0768 18.337 11.4136 18.8824 11.959C18.9604 12.037 19.0677 12.0857 19.1869 12.0857H19.1877V12.0865ZM13.4062 10.743C14.2637 9.88704 15.4467 9.35818 16.7542 9.35818C18.0617 9.35818 19.2447 9.88704 20.1021 10.743C20.1801 10.821 20.2874 10.869 20.4059 10.869C20.6437 10.869 20.8358 10.6762 20.8358 10.4392C20.8358 10.3206 20.7878 10.2126 20.7098 10.1353C19.6963 9.12488 18.298 8.5 16.7534 8.5C15.2089 8.5 13.8106 9.12488 12.7971 10.1353C12.7191 10.2134 12.6711 10.3206 12.6711 10.4392C12.6711 10.677 12.8639 10.869 13.1009 10.869C13.2194 10.869 13.3275 10.821 13.4047 10.743H13.4062Z\"\r\n fill=\"#FF375E\"\r\n />\r\n </svg>\r\n\r\n <span class=\"fs-12 fw-normal fc-black\">{{\r\n element?.Service.name\r\n }}</span>\r\n </div>\r\n <div\r\n *ngSwitchCase=\"'Color'\"\r\n class=\"d-flex align-items-center gap-2\"\r\n >\r\n <span\r\n [ngClass]=\"columnsConfig[i].type\"\r\n [style.background]=\"\r\n element[column]?.colorCode\r\n ? element[column]?.colorCode\r\n : element[column]\r\n \"\r\n ></span>\r\n {{ element[column].title }}\r\n </div>\r\n <div\r\n *ngSwitchCase=\"'colorBg'\"\r\n [style.background]=\"\r\n 'rgba(var(--rgb-' + element[column]?.colorName + '), 0.1)'\r\n \"\r\n class=\"d-flex align-items-center gap-2 Colorbg p-2\"\r\n >\r\n <span class=\"bc-{{ element[column]?.colorName }}\"></span>\r\n {{ element[column].title }}\r\n </div>\r\n <div\r\n *ngSwitchCase=\"'assigned'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"delegate d-flex align-items-center\"\r\n >\r\n <div class=\"img-card x-small circled-img\">\r\n <img\r\n [src]=\"element?.AssignedTo.image\"\r\n alt=\"\"\r\n onerror=\"this.onerror=null;this.src='assets/images/user.svg';\"\r\n />\r\n </div>\r\n <span class=\"mx-1\"></span>\r\n <span class=\"fs-12 fc-black\">{{\r\n element?.AssignedTo.name\r\n }}</span>\r\n <!--\r\n <span class=\"sfi sfi-close fc-coral\"></span>\r\n -->\r\n </div>\r\n\r\n <span\r\n *ngSwitchCase=\"'coloredText'\"\r\n [style.color]=\"element[column]?.['color']\"\r\n >{{\r\n element[column]?.['title']\r\n }}</span\r\n >\r\n <div\r\n *ngSwitchCase=\"'survey'\"\r\n [style.color]=\"element[column]?.['color']\"\r\n class=\"d-flex align-items-center gap-1 text-nowrap\"\r\n >\r\n <span\r\n class=\"fs-20 sfi sfi-emoji-{{(element[column]?.['title']['en'].toLowerCase()) }}\"\r\n ></span>\r\n {{ element[column]?.['title'] }}\r\n </div>\r\n\r\n <div\r\n *ngSwitchCase=\"'Satisfaction'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"delegate d-flex gap-2 align-items-center\"\r\n >\r\n <!--\r\n <ds-icon icon=\"star-f\" class=\"fc-dark-gray\"></ds-icon>\r\n -->\r\n\r\n <span\r\n class=\"fs-12 fc-black\"\r\n >{{ element[column].percentage }}%</span\r\n >\r\n <ds-status\r\n class=\"auto-status\"\r\n size=\"small\"\r\n status=\"{{ element[column].status }}\"\r\n >\r\n <span class=\"fs-10\">\r\n {{ element[column].percentageTrend }}%\r\n </span>\r\n @if (element[column].trendStatus == 'up') {\r\n <ds-icon class=\"fs-13 mx-1 growthIcon\" icon=\"up-growth\">\r\n </ds-icon>\r\n }\r\n @if (element[column].trendStatus != 'up') {\r\n <ds-icon class=\"fs-13 mx-1 downIcon\" icon=\"down-growth\">\r\n </ds-icon>\r\n }\r\n </ds-status>\r\n </div>\r\n\r\n <ng-container *ngSwitchCase=\"'actions'\">\r\n <div class=\"d-flex justify-content-start gap-2\">\r\n <ng-container\r\n *ngIf=\"columnsConfig[i]?.actions?.length <= 6\"\r\n >\r\n <ng-container\r\n *ngFor=\"let action of columnsConfig[i]?.actions\"\r\n >\r\n <ds-button\r\n (click)=\"$event.stopPropagation()\"\r\n *ngIf=\"action.viewMode === Actions.ALLOCATE\"\r\n shape=\"outline\"\r\n size=\"small\"\r\n >\r\n <span class=\"fs-12 fc-{{ action?.actionFontColor }}\">\r\n {{ action?.actionName | translate }}\r\n </span>\r\n </ds-button>\r\n\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n *ngIf=\"action === Actions.ALLOCATE\"\r\n icon\r\n size=\"small\"\r\n >\r\n <ds-icon class=\"fs-15\" icon=\"pen\"></ds-icon>\r\n </ds-button>\r\n <ng-container\r\n *ngIf=\"\r\n action.viewMode != Actions.VIEW ||\r\n action.viewMode != Actions.COPY\r\n \"\r\n >\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n *ngIf=\"\r\n action?.action === Actions.VIEW &&\r\n !action?.isHidden\r\n \"\r\n icon\r\n size=\"small\"\r\n >\r\n <ds-icon class=\"fs-15\" icon=\"eye\"></ds-icon>\r\n </ds-button>\r\n\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n *ngIf=\"\r\n action?.action === Actions.COPY &&\r\n !action?.isHidden\r\n \"\r\n icon\r\n size=\"small\"\r\n >\r\n <ds-icon class=\"fs-15\" icon=\"files-copy\"></ds-icon>\r\n </ds-button>\r\n <!-- @if(element.hasOwnProperty('canUpdate')){\r\n <ds-button (click)=\"$event.stopPropagation();action?.onClick(element)\" icon size=\"small\"\r\n *ngIf=\"action?.action === 'edit' && !action?.isHidden && element.canUpdate == true\">\r\n <ds-icon icon=\"pen\" class=\"fs-15\"></ds-icon>\r\n </ds-button>\r\n }@else { -->\r\n\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\"\r\n *ngIf=\"\r\n action?.action === Actions.EDIT &&\r\n ![4, 7].includes(element?.contractStatus?.id)\"\r\n icon\r\n size=\"small\"\r\n >\r\n <ds-icon class=\"fs-15\" icon=\"pen\"></ds-icon>\r\n </ds-button>\r\n <!-- } -->\r\n\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n *ngIf=\"\r\n action?.action === Actions.DELETE &&\r\n !action?.isHidden &&\r\n ![4, 7].includes(element?.contractStatus?.id)\r\n \"\r\n icon\r\n size=\"small\"\r\n >\r\n <ds-icon\r\n class=\"fc-coral fs-15\"\r\n icon=\"trash\"\r\n ></ds-icon>\r\n </ds-button>\r\n\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n *ngIf=\"\r\n action?.action === Actions.DELETEPENDING &&\r\n !action?.isHidden &&\r\n element?.contractStatus?.id == 1\r\n \"\r\n icon\r\n size=\"small\"\r\n >\r\n <ds-icon\r\n class=\"fc-coral fs-15\"\r\n icon=\"trash\"\r\n ></ds-icon>\r\n </ds-button>\r\n\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n *ngIf=\"action?.action === Actions.CHART\"\r\n color=\"transparent\"\r\n size=\"small\"\r\n >\r\n <ds-icon\r\n class=\"fc-coral fs-15\"\r\n icon=\"chart-o\"\r\n ></ds-icon>\r\n </ds-button>\r\n\r\n @if (element.hasOwnProperty('canTakeAction')) {\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n size=\"small\"\r\n *ngIf=\"\r\n action?.action === Actions.APPROVE &&\r\n element.canTakeAction == true\r\n \"\r\n >\r\n <span class=\"fs-12\">\r\n {{ \"global.approve\" | translate }}\r\n </span>\r\n </ds-button>\r\n <ds-button\r\n shape=\"outline\"\r\n color=\"dark-gray\"\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n size=\"small\"\r\n *ngIf=\"\r\n action?.action === Actions.REJECT &&\r\n element.canTakeAction == true\r\n \"\r\n shape=\"outline\"\r\n >\r\n <span class=\"fs-12\">\r\n {{ \"global.reject\" | translate }}\r\n </span>\r\n </ds-button>\r\n } @else {\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n size=\"small\"\r\n *ngIf=\"action?.action === Actions.APPROVE\"\r\n >\r\n <span class=\"fs-12\">\r\n {{ \"global.approve\" | translate }}\r\n </span>\r\n </ds-button>\r\n <ds-button\r\n shape=\"outline\"\r\n color=\"dark-gray\"\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n size=\"small\"\r\n *ngIf=\"action?.action === Actions.REJECT\"\r\n shape=\"outline\"\r\n >\r\n <span class=\"fs-12\">\r\n {{ \"global.reject\" | translate }}\r\n </span>\r\n </ds-button>\r\n }\r\n\r\n <ds-button\r\n *ngIf=\"action?.action === Actions.DETAILS\"\r\n shape=\"text\"\r\n size=\"small\"\r\n >\r\n <span class=\"fs-12 underline\"> View Details </span>\r\n </ds-button>\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n *ngIf=\"\r\n action?.action === Actions.START &&\r\n element?.isFinalize\r\n \"\r\n size=\"small\"\r\n >\r\n <span class=\"fs-12\">\r\n {{ action?.actionName | translate }}\r\n </span>\r\n <ds-icon\r\n class=\"fs-16\"\r\n icon=\"media-play\"\r\n slot=\"prefix\"\r\n ></ds-icon>\r\n </ds-button>\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n *ngIf=\"action?.action === Actions.PREPARE\"\r\n color=\"light-gray\"\r\n size=\"small\"\r\n >\r\n <span class=\"fs-12 fc-black\">\r\n {{ action?.actionName | translate }}\r\n </span>\r\n <ds-icon\r\n class=\"fs-12 fc-black\"\r\n icon=\"settings\"\r\n slot=\"prefix\"\r\n ></ds-icon>\r\n </ds-button>\r\n\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n *ngIf=\"\r\n action?.action === Actions.START &&\r\n element?.isFinalize\r\n \"\r\n size=\"small\"\r\n >\r\n <span class=\"fs-12\">\r\n {{ action?.actionName | translate }}\r\n </span>\r\n <ds-icon\r\n class=\"fs-16\"\r\n icon=\"media-play\"\r\n slot=\"prefix\"\r\n ></ds-icon>\r\n </ds-button>\r\n\r\n <!-- <ds-button [color]=\"action?.actionColor\" size=\"small\"\r\n *ngIf=\"action?.action === 'customAction'\"\r\n (click)=\"$event.stopPropagation();action?.onClick(element)\" shape=\"{{action?.actionShape}}\" [class]=\"action?.actionColor\"\r\n ></ds-button> -->\r\n\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n *ngIf=\"action?.action === Actions.CUSTOMACTION\"\r\n [class]=\"action?.actionColor\"\r\n [color]=\"action?.actionColor\"\r\n shape=\"{{ action?.actionShape }}\"\r\n size=\"small\"\r\n >\r\n <span\r\n class=\"fs-12 fc-{{ action?.actionFontColor }}\"\r\n >\r\n {{ action?.actionName | translate }}\r\n </span>\r\n </ds-button>\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n *ngIf=\"\r\n action?.action === Actions.CUSTOMACTIONMANAGE &&\r\n (element.contractStatus.id == 7 ||\r\n element.contractStatus.id == 1)\r\n \"\r\n [class]=\"action?.actionColor\"\r\n [color]=\"action?.actionColor\"\r\n shape=\"{{ action?.actionShape }}\"\r\n size=\"small\"\r\n >\r\n <span\r\n class=\"fs-12 fc-{{ action?.actionFontColor }}\"\r\n >\r\n {{ action?.actionName | translate }}\r\n </span>\r\n </ds-button>\r\n\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n *ngIf=\"\r\n action?.action === Actions.CUSTOMACTIONEXTEND &&\r\n element.contractStatus.id == 7\r\n \"\r\n [class]=\"action?.actionColor\"\r\n [color]=\"action?.actionColor\"\r\n shape=\"{{ action?.actionShape }}\"\r\n size=\"small\"\r\n >\r\n <span\r\n class=\"fs-12 fc-{{ action?.actionFontColor }}\"\r\n >\r\n {{ action?.actionName | translate }}\r\n </span>\r\n </ds-button>\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n *ngIf=\"\r\n action?.action === Actions.CUSTOMACTIONDETAILS\r\n \"\r\n [class]=\"action?.actionColor\"\r\n [color]=\"action?.actionColor\"\r\n shape=\"{{ action?.actionShape }}\"\r\n size=\"small\"\r\n >\r\n <span\r\n class=\"fs-12 fc-{{ action?.actionFontColor }}\"\r\n >\r\n {{ action?.actionName | translate }}\r\n </span>\r\n </ds-button>\r\n <ds-status\r\n *ngIf=\"action?.action === Actions.STATUS\"\r\n [status]=\"action?.Status.status\"\r\n class=\"fs-12 statusAction w-100\"\r\n >\r\n <span class=\"fc-black\">\r\n {{ action?.Status.title | translate }}\r\n </span>\r\n </ds-status>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"columnsConfig[i]?.actions?.length > 6\">\r\n <ds-button\r\n #statusMenuTrigger=\"matMenuTrigger\"\r\n (click)=\"$event.stopPropagation()\"\r\n *ngIf=\"columnsConfig[i]?.actions?.length > 1\"\r\n [matMenuTriggerFor]=\"statusMenu\"\r\n class=\"dots\"\r\n shape=\"text\"\r\n size=\"small\"\r\n >\r\n <ds-icon\r\n class=\"fs-20 fc-dark-gray\"\r\n icon=\"dots\"\r\n ></ds-icon>\r\n </ds-button>\r\n\r\n <mat-menu #statusMenu=\"matMenu\">\r\n <button\r\n (click)=\"action?.onClick(element)\"\r\n *ngFor=\"let action of columnsConfig[i]?.actions\"\r\n mat-menu-item\r\n >\r\n <span\r\n class=\"fs-12 fc-black\"\r\n >{{ action?.actionName | translate }}\r\n </span>\r\n </button>\r\n </mat-menu>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'specs'\">\r\n @if (element?.[column]) {\r\n <span\r\n #statusMenuTrigger=\"matMenuTrigger\"\r\n (click)=\"$event.stopPropagation()\"\r\n [matMenuTriggerFor]=\"specsMenu\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"{{\r\n columnsConfig[i].type\r\n }} fc-coral underline cursor-pointer\"\r\n >\r\n {{ columnsConfig[i].clickableText | translate }}\r\n </span>\r\n }\r\n\r\n <mat-menu #specsMenu=\"matMenu\" class=\"p-4 text-center\">\r\n <span class=\"fs-14\">\r\n {{ element[column] }}\r\n </span>\r\n </mat-menu>\r\n </ng-container>\r\n\r\n <!--<div\r\n *ngSwitchCase=\"'specs'\" [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-flex gap-1\">\r\n {{ element[column] | json }}\r\n <ng-container *ngFor=\"let item of element[column]\">\r\n\r\n <div\r\n class=\"progress-container default-progress medium radius-0 \"\r\n matTooltip=\"Team assignment {{item.value}}%\" matTooltipPosition=\"below\">\r\n <div\r\n [style.width.%]=\"item.value\"\r\n class=\"progress-bar bg-color-{{item.color}}\"></div>\r\n </div>\r\n </ng-container>\r\n\r\n </div>-->\r\n\r\n <span\r\n *ngSwitchDefault\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"text-nowrap\"\r\n matTooltip=\" {{\r\n columnsConfig[i].arKey\r\n ? translateService.currentLang == 'ar'\r\n ? mapText(columnsConfig[i].arKey, element[column])\r\n : mapText(columnsConfig[i].enKey, element[column])\r\n : element[column]\r\n ? element[column]\r\n : '-'\r\n }}\"\r\n matTooltipPosition=\"below\"\r\n >\r\n {{\r\n columnsConfig[i].arKey\r\n ? translateService.currentLang == \"ar\"\r\n ? mapText(columnsConfig[i].arKey, element[column])\r\n : mapText(columnsConfig[i].enKey, element[column])\r\n : element[column]\r\n ? element[column]\r\n : \"-\"\r\n }}\r\n </span>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n </ng-container>\r\n }\r\n </ng-container>\r\n }\r\n\r\n <tr *matHeaderRowDef=\"columns; sticky: true\" mat-header-row></tr>\r\n <tr\r\n (click)=\"clickRow(row)\"\r\n *matRowDef=\"let row; columns: columns\"\r\n [ngClass]=\"{ 'selected-row': row?.fastTrackSeen === false }\"\r\n mat-row\r\n role=\"button\"\r\n ></tr>\r\n </table>\r\n }\r\n </ng-container>\r\n }\r\n @if (isLoading) {\r\n <ds-loading-table [cols]=\"columns.length\" [rows]=\"5\"></ds-loading-table>\r\n }\r\n @if (!isLoading && dataSource.filteredData?.length == 0) {\r\n <ds-message\r\n [label]=\" customMessage?? 'NoData' | translate\"\r\n type=\"emptyList\"\r\n ></ds-message>\r\n }\r\n</div>\r\n@if (dataSource.filteredData?.length && hasPaginator) {\r\n <mat-paginator\r\n #paginator\r\n (page)=\"pageChanged($event)\"\r\n [length]=\"totalElements\"\r\n [pageIndex]=\"currentPage\"\r\n [pageSizeOptions]=\"[5, 10, 15, 20, 100]\"\r\n [pageSize]=\"pageSize\"\r\n aria-label=\"Select page\"\r\n showFirstLastButtons\r\n >\r\n </mat-paginator>\r\n}\r\n", styles: [":host ::ng-deep .table-responsive table{--th-height: 32px;--th-bg: var(--purple);--th-fc: var(--white);--td-height: 75px;--td-radius: 0;--border-spacing: 0;--border-collapse: collapse;--tr-even-bc: var(--white);--tr-odd-bc: var(--white);--tr-border: 1px solid var(--light-gray);--th-border: none;--cell-pading: 0 24px;--th-fs: 11px}:host ::ng-deep .table-responsive table tr.selected-row,:host ::ng-deep .table-responsive table tr.selected-row:hover{background-color:#ecfeff;border-inline-start:3px solid var(--sea-light)}:host ::ng-deep .table-responsive table td.mat-mdc-cell.mat-mdc-table-sticky{box-shadow:-10px 0 10px #00000012}:host ::ng-deep .table-responsive table mat-form-field,:host ::ng-deep .table-responsive table .e-control,:host ::ng-deep .table-responsive table .mdc-form-field{--input-height: 35px}:host ::ng-deep .Color{width:13px;height:13px;border-radius:50%}:host ::ng-deep .Colorbg{width:fit-content;min-width:102px}:host ::ng-deep .Colorbg span{width:9px;height:9px;border-radius:50%}:host ::ng-deep span.number{color:var(--coral)}:host ::ng-deep .subsidiary img{height:22px;max-width:initial}:host ::ng-deep .sla svg{width:37px}:host ::ng-deep tr th{top:-1px!important}:host ::ng-deep ds-status.statusAction::part(base){min-height:35px;--status-width: 100%}:host ::ng-deep .dropdown{border-radius:3px;background:var(--Grays-Off-white, #f3f3f1);display:flex;height:35px;padding:10px;align-items:center;gap:5px;justify-content:center;width:fit-content}:host ::ng-deep .dropdown ds-icon span{font-weight:700}:host ::ng-deep ds-status::part(base){min-height:23px}:host ::ng-deep .Category span{border-radius:3px;width:97px;height:23px;display:flex;align-items:center;justify-content:center}:host ::ng-deep .mat-checkbox .mat-checkbox-ripple{left:calc(50% - 17px);top:calc(50% - 17px);height:30px;width:30px}:host ::ng-deep .mat-checkbox .mat-checkbox-layout .mat-checkbox-inner-container .mat-checkbox-frame{width:20px;height:20px;border-width:1px;border-style:solid;border-color:#909a9f4d}:host ::ng-deep .mat-checkbox-checked .mat-checkbox-checkmark{width:20px}:host ::ng-deep .idea a:hover{text-decoration:underline;color:var(--coral)}.paginator{width:800px}.table-container{max-height:400px;overflow:auto;scroll-behavior:smooth;transition:scroll-behavior .5s ease-in-out}@media (max-width: 768px){.table-container{max-height:65vh;height:65vh}}[dir=rtl] .table-container--btn.reRequest{transform:scaleX(-1)}@media (min-width: 1200px){.table-container--name,.table-container--date{max-width:120px}}@media (min-width: 1200px){[dir=rtl] .table-container--name{max-width:initial}}.table-container--item{display:flex;align-items:center;gap:1rem;min-height:105px;overflow:hidden;position:relative;cursor:pointer}@media (min-width: 991px){.table-container--item h4{max-width:calc(100% - 200px);display:inline-block}}.table-container--item:not(:last-child){margin-bottom:.75rem}.table-container--item ds-status::part(base){--status-width: 60px}.table-container--info span{position:relative;display:flex;align-items:center;gap:.5rem}.table-container--info span:not(:first-of-type):before{content:\"\";min-width:3px;width:3px;height:3px;border-radius:50%;background-color:var(--black)}@media (min-width: 991px){.table-container--status{position:absolute;top:1rem;right:0}}:host ::ng-deep .max-width-150{max-width:150px}:host ::ng-deep .text-align-custom{unicode-bidi:plaintext}:host ::ng-deep .table-responsive table{--th-height: var(--default-size-sm);--th-bg: var(--purple);--th-fc: var(--white);--td-height: 48px;--td-radius: 0;--border-spacing: 0;--border-collapse: collapse;--tr-even-bc: var(--off-white);--tr-odd-bc: var(--white)}:host ::ng-deep .ServiceDetails{display:inline-block;max-width:230px;white-space:normal}:host ::ng-deep .progress_group{width:100px}:host ::ng-deep .progress_group .progress-container.default-progress{min-width:25px;background-color:#cdd0d1}:host ::ng-deep .sla svg{width:36px}:host ::ng-deep .sla text{font-size:10px}:host ::ng-deep .Periority.High{color:var(--red)}:host ::ng-deep .Periority.Medium{color:var(--orange)}:host ::ng-deep .Periority.Low,:host ::ng-deep .Periority.Yes{color:var(--green)}:host ::ng-deep tr:nth-child(odd) .history,:host ::ng-deep tr:nth-child(odd) .Finished{background-color:var(--light-gray)}:host ::ng-deep tr:nth-child(2n) .history,:host ::ng-deep tr:nth-child(2n) .Finished{background-color:var(--white)}:host ::ng-deep .Finished{min-width:27px}:host ::ng-deep ds-button.coral:hover svg path{fill:var(--coral)}:host ::ng-deep .controls-tabel .mat-sort-header-container{justify-content:center!important}.dot-status{height:20px;width:20px;border-radius:50%;display:inline-block}.dot-status.red{background-color:var(--red)}.dot-status.green{background-color:var(--green)}.sticky-table{max-height:100vh}.dimCheckbox{background:var(--gray);pointer-events:none}\n"], dependencies: [{ kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "component", type: MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "component", type: InputComponent, selector: "app-input", inputs: ["floatLabel", "className", "iconPrefixName", "iconSuffixName", "emitedChangedValue1", "customErrorMessages"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "directive", type: MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "directive", type: MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "component", type: MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: CustomSearchableComponent, selector: "app-custom-searchable", inputs: ["options", "disabled", "displayedLabel", "key", "floatLabel", "className"], outputs: ["selectedValue", "isLengthGreaterThan4"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: SkipLocationDirective, selector: "[appSkipLocation]", inputs: ["appSkipLocation"] }, { kind: "component", type: MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }] });
|
|
174
174
|
}
|
|
175
175
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: TableComponent, decorators: [{
|
|
176
176
|
type: Component,
|
|
177
|
-
args: [{ selector: 'app-table', standalone: true, imports: [NgFor, TranslateModule, NgIf, matModules, FormsModule, NgSwitchDefault, SkipLocationDirective, MatPaginator], schemas: [CUSTOM_ELEMENTS_SCHEMA], template: "<div #table class=\"table-container table-responsive sticky-table\">\r\n @if(!isLoading){\r\n <ng-container>\r\n @if(dataSource.filteredData?.length! > 0){\r\n <table\r\n #tableSort=\"matSort\"\r\n (matSortChange)=\"sortChange($event)\"\r\n [dataSource]=\"dataSource\"\r\n class=\"primary-table {{ className }}\"\r\n mat-table\r\n matSort\r\n >\r\n @for(column of columns; track $index; let i =$index){\r\n <ng-container>\r\n <!-- Add a check to ensure 'columnsConfig' and 'columnsConfig[i]' are defined before using them -->\r\n\r\n @if(columnsConfig && columnsConfig[i]){\r\n <ng-container>\r\n <ng-container\r\n [matColumnDef]=\"column\"\r\n [stickyEnd]=\"!!columnsConfig[i].stickyEnd!\"\r\n >\r\n @if(!columnsConfig[i].notSortable){\r\n <ng-container>\r\n <th\r\n *matHeaderCellDef\r\n [ngClass]=\"{ 'text-end': columnsConfig[i].type === 'actions' }\"\r\n mat-header-cell\r\n mat-sort-header\r\n >\r\n @if(columnsConfig[i].type !== 'checkbox' || (\r\n this.columnsConfig[i]?.type! == 'actions' &&\r\n this.columnsConfig[i]?.actions?.length === 0) ){\r\n <ng-container>\r\n @if(!( this.columnsConfig[i].type == 'actions' &&\r\n this.columnsConfig[i].actions.length === 0)){\r\n <div class=\"d-flex align-items-center\">\r\n <div class=\"mx-1 fc-{{ columnsConfig[i].fontColor }}\">\r\n {{ columnsConfig[i].label | translate }}\r\n </div>\r\n @if(columnsConfig[i].slaMax){\r\n <ds-sla\r\n [canvasScale]=\"'40'\"\r\n [innerLineWidth]=\"'3'\"\r\n [maxValue]=\"columnsConfig[i].slaMax\"\r\n [outerLineColor]=\"'limegreen'\"\r\n [outerLineWidth]=\"'3'\"\r\n [value]=\"columnsConfig[i].slaValue\"\r\n class=\"table-header-sla my-1\"\r\n ></ds-sla>\r\n }\r\n </div>\r\n }\r\n </ng-container>\r\n } @if(columnsConfig[i].type == 'checkbox' ){\r\n <mat-checkbox class=\"checkbox\"> </mat-checkbox>\r\n }\r\n </th>\r\n </ng-container>\r\n } @if(columnsConfig[i].notSortable){\r\n <ng-container>\r\n <th\r\n *matHeaderCellDef\r\n [ngClass]=\"{ 'text-end': columnsConfig[i].type === 'actions' }\"\r\n mat-header-cell\r\n >\r\n <div class=\"d-flex align-items-center\">\r\n <div class=\"mx-1\">\r\n {{ columnsConfig[i].label | translate }}\r\n </div>\r\n @if(columnsConfig[i].slaMax){\r\n <ds-sla\r\n [canvasScale]=\"'50'\"\r\n [innerLineWidth]=\"'3'\"\r\n [maxValue]=\"columnsConfig[i].slaMax\"\r\n [outerLineColor]=\"'limegreen'\"\r\n [outerLineWidth]=\"'3'\"\r\n [value]=\"columnsConfig[i].slaValue\"\r\n class=\"table-header-sla my-1\"\r\n ></ds-sla>\r\n }\r\n </div>\r\n </th>\r\n </ng-container>\r\n }\r\n\r\n <td *matCellDef=\"let element; let j = index\" mat-cell>\r\n <ng-container [ngSwitch]=\"columnsConfig[i].type\">\r\n <!-- <a target=\"_blank\"-->\r\n <!-- routerLink=\"/inbox\" [queryParams]=\"{ id: element[column] }\"-->\r\n <!-- class=\"fc-black text-decoration-underline fw-medium\" [ngClass]=\"columnsConfig[i].type\" *ngSwitchCase=\"'link'\">-->\r\n <!-- {{ element[column] }}-->\r\n <!-- </a>-->\r\n <span *ngSwitchCase=\"'formId'\"\r\n (click)=\"viewForm(element[column])\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"fc-coral text-decoration-underline fw-medium\">\r\n {{ element[column] }}\r\n </span>\r\n <!-- <span\r\n *ngSwitchCase=\"'link'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"fc-black text-decoration-underline fw-medium\"\r\n >\r\n {{ element[column] }}\r\n </span>-->\r\n\r\n <span\r\n *ngSwitchCase=\"'linkWithIcon'\"\r\n [appSkipLocation]=\"columnsConfig[i].link\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"fc-black text-decoration-underline fw-medium\"\r\n >\r\n <ds-icon\r\n class=\"fs-20 fc-black\"\r\n icon=\" {{ columnsConfig[i].icon }}\"\r\n ></ds-icon>\r\n <span class=\"fs-13 fc-coral px-1 text-decoration-underline\">{{\r\n element[column]\r\n }}</span>\r\n </span>\r\n <span\r\n *ngSwitchCase=\"'underLineWithIcon'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"fc-black text-decoration-underline fw-medium\"\r\n >\r\n <ds-icon\r\n class=\"fs-20 fc-black\"\r\n icon=\" {{ columnsConfig[i].icon }}\"\r\n ></ds-icon>\r\n <span class=\"fs-13 fc-coral px-1 text-decoration-underline\">{{\r\n element[column]\r\n }}</span>\r\n </span>\r\n <mat-checkbox\r\n *ngSwitchCase=\"'checkbox'\"\r\n checked=\"{{ columnsConfig[i].checked }}\"\r\n class=\"checkbox\"\r\n disabled=\"{{ columnsConfig[i].disabled }}\"\r\n >\r\n </mat-checkbox>\r\n <span\r\n *ngSwitchCase=\"'ServiceDetails'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"cursor-pointer\"\r\n >\r\n {{ element[column] }}\r\n </span>\r\n <span\r\n *ngSwitchCase=\"'dateOnly'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-inline-flex align-items-center gap-2 text-nowrap\"\r\n >\r\n <span class=\"sfi sfi-calendar-o fc-coral fs-18\"></span>\r\n {{ element[column] | date : \"MMM d, y\" }}\r\n </span>\r\n <span\r\n *ngSwitchCase=\"'Search'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-inline-flex align-items-center\"\r\n >\r\n <app-input\r\n [formControl]=\"ctrl\"\r\n [placeholder]=\"'Search for item '\"\r\n [showLabel]=\"false\"\r\n class=\"\"\r\n className=\"no-padding \"\r\n prefix=\"sfi-search fs-16\"\r\n type=\"text\"\r\n >\r\n </app-input>\r\n </span>\r\n <span\r\n *ngSwitchCase=\"'Number'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-inline-flex align-items-center\"\r\n >\r\n <app-input\r\n [formControl]=\"ctrl\"\r\n [placeholder]=\"'number'\"\r\n [showLabel]=\"false\"\r\n class=\"\"\r\n className=\"no-padding\"\r\n type=\"text\"\r\n >\r\n </app-input>\r\n </span>\r\n <span\r\n *ngSwitchCase=\"'dateFromTo'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-inline-flex align-items-center\"\r\n >\r\n <span class=\"sfi sfi-clock fc-coral\"></span>\r\n <span class=\"mx-2\">\r\n {{ element?.date.from }}\r\n @if(element?.date.to){\r\n <ng-container> : {{ element?.date.to }} </ng-container>\r\n }\r\n </span>\r\n </span>\r\n\r\n <span\r\n *ngSwitchCase=\"'dateTime'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-inline-flex align-items-center gap-1 flex-wrap\"\r\n >\r\n <span class=\"sfi sfi-calendar-o fc-dark-gray fs-20\"></span>\r\n {{ element[column] | date : \"MMM d, y, h:mm a\" }}\r\n </span>\r\n\r\n <span\r\n *ngSwitchCase=\"'singleTimeOnly'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-inline-flex align-items-center gap-1 flex-wrap\"\r\n >\r\n {{ element[column] | date : \"h:mm a\" }}\r\n </span>\r\n <!--dir=\"ltr\" and text-left for English text on ar page -->\r\n <span\r\n *ngSwitchCase=\"'timeOnly'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-inline-flex align-items-center gap-1 flex-wrap text-nowrap text-left\"\r\n dir=\"ltr\"\r\n >\r\n <!-- -->\r\n {{\r\n mapText(columnsConfig[i].firstVal, element[column])\r\n | date : \"h:mm a\"\r\n }}\r\n @if(mapText(columnsConfig[i].secondVal, element[column] )){\r\n <ng-container>\r\n -\r\n {{\r\n mapText(columnsConfig[i].secondVal, element[column])\r\n | date : \"h:mm a\"\r\n }}\r\n </ng-container>\r\n }\r\n </span>\r\n\r\n <span\r\n *ngSwitchCase=\"'multipleRows'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-inline-flex align-items-center gap-1 flex-wrap\"\r\n >\r\n <!-- -->\r\n @if(!element[column].monthlyFineEscalation){\r\n <div>\r\n {{ element[column].fixedFineValue }}\r\n {{ \"global.SAR\" | translate }}\r\n </div>\r\n } @if(element[column].monthlyFineEscalation){\r\n <div>\r\n <br />\r\n {{ element[column].firstTimeFine }}\r\n {{ \"global.SAR\" | translate }} <br /><br />\r\n {{ element[column].secondTimeFine }}\r\n {{ \"global.SAR\" | translate }} <br /><br />\r\n {{ element[column].thirdTimeFine }}\r\n {{ \"global.SAR\" | translate }} <br /><br />\r\n </div>\r\n }\r\n </span>\r\n\r\n <div\r\n *ngSwitchCase=\"'sla'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-inline-flex align-items-center\"\r\n >\r\n <!-- <app-sla [value]=\"element?.SLA.value\" [maxValue]=\"element?.SLA.max\" [canvasScale]=\"38\" -->\r\n <!-- class=\"font-9 fw-medium\" [outerLineColor]=\"getSlaColor(element?.SLA.value, element?.SLA.max)\">-->\r\n <!-- </app-sla>-->\r\n\r\n <ds-sla\r\n [attr.outerLineColor]=\"\r\n getSlaColor(element?.SLA.value, element?.SLA.max)\r\n \"\r\n [canvasScale]=\"'55'\"\r\n [innerLineWidth]=\"'3'\"\r\n [maxValue]=\"element?.SLA?.max\"\r\n [outerLineWidth]=\"'3'\"\r\n [value]=\"element?.SLA?.value\"\r\n ></ds-sla>\r\n </div>\r\n <div *ngSwitchCase=\"'slaProgress'\">\r\n <!-- <mat-sp-->\r\n\r\n @if(element[column]?.percentage >= 0){\r\n <ds-sla\r\n [canvasScale]=\"'55'\"\r\n [customValue]=\"element[column]?.percentage + '%'\"\r\n [innerLineWidth]=\"'3'\"\r\n [maxValue]=\"'100'\"\r\n [outerLineColor]=\"\r\n getSlaColor(element[column]?.percentage, 100)\r\n \"\r\n [outerLineWidth]=\"'3'\"\r\n [value]=\"element[column]?.percentage\"\r\n ></ds-sla>\r\n } @else {\r\n <ng-template>Not started</ng-template>\r\n }\r\n </div>\r\n <div\r\n *ngSwitchCase=\"'Priority'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"{{ element[column] }}\"\r\n >\r\n {{ element[column] }}\r\n </div>\r\n\r\n <div\r\n *ngSwitchCase=\"'serviceStatus'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"{{ element[column] }}\"\r\n >\r\n <span\r\n [ngClass]=\"element[column] == 'FALSE' ? 'green' : 'red'\"\r\n class=\"dot-status\"\r\n ></span>\r\n </div>\r\n\r\n <div\r\n *ngSwitchCase=\"'image'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"img-card table-img\"\r\n >\r\n <img\r\n [src]=\"element?.image\"\r\n alt=\"\"\r\n onerror=\"this.onerror=null;this.src='assets/images/user.svg';\"\r\n />\r\n </div>\r\n\r\n <div\r\n *ngSwitchCase=\"'employee'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-flex align-items-center gap-2 text-nowrap\"\r\n >\r\n <ds-avatar\r\n [image]=\"'https://igateapp.stc.com.sa'+element[column]?.['imageUrl']\"\r\n size=\"x-small\"\r\n >\r\n </ds-avatar>\r\n <span>{{ (element[column]?.['name']) }}</span>\r\n </div>\r\n\r\n <div\r\n *ngSwitchCase=\"'progress_group'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-flex gap-1\"\r\n >\r\n <ng-container *ngFor=\"let item of element[column]\">\r\n <div\r\n class=\"progress-container default-progress medium radius-0\"\r\n matTooltip=\"Team assignment {{ item.value }}%\"\r\n matTooltipPosition=\"below\"\r\n >\r\n <div\r\n [style.width.%]=\"item.value\"\r\n class=\"progress-bar bg-color-{{ item.color }}\"\r\n ></div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div\r\n *ngSwitchCase=\"'input'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"\"\r\n >\r\n <app-input\r\n (input)=\"inputCellChanged.emit({element,column,i})\"\r\n [(ngModel)]=\"element[column]\"\r\n [min]=\"0\"\r\n [placeholder]=\"element[column]\"\r\n class=\"w-100\"\r\n className=\" no-padding w-100\"\r\n type=\"number\"\r\n value=\"{{ element[column] }}\"\r\n >\r\n </app-input>\r\n </div>\r\n <div *ngSwitchCase=\"'autoComplete'\"></div>\r\n <div\r\n *ngSwitchCase=\"'select'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"\"\r\n >\r\n <app-custom-searchable\r\n (selectedValue)=\"selectValueSelected.emit($event)\"\r\n [isSearchable]=\"columnsConfig[i].config?.isSearchable\"\r\n [key]=\"columnsConfig[i]?.key\"\r\n [displayedLabel]=\"columnsConfig[i]?.displayedLable\"\r\n [options]=\"columnsConfig[i]?.options\"\r\n [postKey]=\"columnsConfig[i]?.postKey\"\r\n [showLabel]=\"false\"\r\n className=\"no-padding w-100\"\r\n >\r\n </app-custom-searchable>\r\n </div>\r\n\r\n <div\r\n *ngSwitchCase=\"'status'\"\r\n [ngClass]=\"'New' + columnsConfig[i].type\"\r\n class=\"d-flex align-items-center gap-2\"\r\n >\r\n @if(element[column]){\r\n <ds-status [status]=\"element[column]?.status\" class=\"fs-12\">\r\n {{ element[column]?.title | translate }}\r\n </ds-status>\r\n } @if(element[column]?.reason){\r\n <span\r\n (click)=\"$event.stopPropagation()\"\r\n [matMenuTriggerFor]=\"reasonMenu\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"{{\r\n columnsConfig[i].type\r\n }} fc-red underline cursor-pointer\"\r\n >\r\n Show reason\r\n </span>\r\n }\r\n\r\n <mat-menu #reasonMenu=\"matMenu\" class=\"p-4 text-center\">\r\n <span class=\"fs-14\">\r\n {{ element[column]?.reason }}\r\n </span>\r\n </mat-menu>\r\n </div>\r\n <div *ngSwitchCase=\"'toggle'\" [ngClass]=\"columnsConfig[i].type\">\r\n <mat-slide-toggle\r\n (change)=\"toggleValueChange($event, element)\"\r\n [checked]=\"element[column] == 1\"\r\n [disabled]=\"false\"\r\n ></mat-slide-toggle>\r\n </div>\r\n\r\n <div\r\n *ngSwitchCase=\"'customToggle'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n >\r\n <mat-slide-toggle\r\n (change)=\"toggleValueChange($event, element)\"\r\n [checked]=\"element[column] == 7\"\r\n [disabled]=\"element[column] != 1\"\r\n ></mat-slide-toggle>\r\n </div>\r\n <div\r\n *ngSwitchCase=\"'meetingStatus'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"{{ columnsConfig[i].type }}\"\r\n >\r\n @if(element[column].label == 'Finished'){\r\n <span class=\" {{ element[column].label }} status \">\r\n {{ element[column].label }}\r\n </span>\r\n } @if(element[column].label != 'Finished'){\r\n <div class=\"d-flex align-items-center gap-2\">\r\n <div\r\n class=\"Finished d-flex flex-column align-items-center justify-content-center py-1 fc-black\"\r\n >\r\n <span class=\"fs-11 fw-medium mb-1\">\r\n {{ element[column].hours }}</span\r\n >\r\n <span class=\"fs-10 fw-light\">HRS</span>\r\n </div>\r\n <div\r\n class=\"Finished d-flex flex-column align-items-center justify-content-center py-1 fc-black\"\r\n >\r\n <span class=\"fs-11 fw-medium mb-1\">\r\n {{ element[column].min }}</span\r\n >\r\n <span class=\"fs-10 fw-light\">MINS</span>\r\n </div>\r\n <div\r\n class=\"Finished d-flex flex-column align-items-center justify-content-center py-1 fc-black\"\r\n >\r\n <span class=\"fs-11 fw-medium mb-1\">\r\n {{ element[column].sec }}</span\r\n >\r\n <span class=\"fs-10 fw-light\">SECS</span>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n <span\r\n *ngSwitchCase=\"'number'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"{{ columnsConfig[i].type }} {{\r\n element[column] ? 'underline' : ''\r\n }}\"\r\n >\r\n {{ element[column] ? element[column] : 0 }}\r\n </span>\r\n\r\n <span\r\n *ngSwitchCase=\"'currency'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"{{ columnsConfig[i].type }}\"\r\n >\r\n {{\r\n element[column]\r\n ? parseInt(element[column]).toFixed(2) +\r\n (columnsConfig[i].currency | translate)\r\n : \"-\"\r\n }}\r\n </span>\r\n <span\r\n *ngSwitchCase=\"'active'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"{{ columnsConfig[i].type }}\"\r\n >\r\n <ds-icon\r\n [ngClass]=\"element[column] ? 'fc-green' : 'fc-gray'\"\r\n icon=\"check-circle-f fs-30\"\r\n ></ds-icon>\r\n </span>\r\n <div\r\n *ngSwitchCase=\"'sync'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"{{\r\n columnsConfig[i].type\r\n }} d-flex align-items-center gap-2\"\r\n >\r\n <svg\r\n fill=\"none\"\r\n height=\"19\"\r\n viewBox=\"0 0 18 19\"\r\n width=\"18\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M14.25 13.2604C13.9425 13.2604 13.6875 12.9913 13.6875 12.6667V5.14583C13.6875 4.59958 13.2675 4.15625 12.75 4.15625H8.625C8.3175 4.15625 8.0625 3.88708 8.0625 3.5625C8.0625 3.23792 8.3175 2.96875 8.625 2.96875H12.75C13.89 2.96875 14.8125 3.9425 14.8125 5.14583V12.6667C14.8125 12.9913 14.5575 13.2604 14.25 13.2604Z\"\r\n fill=\"#FF375E\"\r\n />\r\n <path\r\n d=\"M10.5 6.13549C10.3725 6.13549 10.245 6.088 10.14 6.00092L7.88999 4.02175C7.76249 3.91092 7.6875 3.74465 7.6875 3.56257C7.6875 3.38048 7.76249 3.22214 7.88999 3.10339L10.14 1.12422C10.38 0.910471 10.7325 0.950084 10.935 1.20342C11.1375 1.45675 11.1 1.82883 10.86 2.04258L9.12751 3.56257L10.86 5.08255C11.1 5.29631 11.13 5.66839 10.935 5.92172C10.8225 6.06422 10.6575 6.13549 10.5 6.13549Z\"\r\n fill=\"#FF375E\"\r\n />\r\n <path\r\n d=\"M14.25 18.0105C12.6975 18.0105 11.4375 16.6805 11.4375 15.0417C11.4375 13.403 12.6975 12.073 14.25 12.073C15.8025 12.073 17.0625 13.403 17.0625 15.0417C17.0625 16.6805 15.8025 18.0105 14.25 18.0105ZM14.25 13.2605C13.32 13.2605 12.5625 14.0601 12.5625 15.0417C12.5625 16.0234 13.32 16.823 14.25 16.823C15.18 16.823 15.9375 16.0234 15.9375 15.0417C15.9375 14.0601 15.18 13.2605 14.25 13.2605Z\"\r\n fill=\"#FF375E\"\r\n />\r\n <path\r\n d=\"M9.375 16.0312H5.25C4.11 16.0312 3.1875 15.0574 3.1875 13.8541V6.33325C3.1875 6.00867 3.4425 5.7395 3.75 5.7395C4.0575 5.7395 4.3125 6.00867 4.3125 6.33325V13.8541C4.3125 14.4003 4.7325 14.8437 5.25 14.8437H9.375C9.6825 14.8437 9.9375 15.1128 9.9375 15.4374C9.9375 15.762 9.6825 16.0312 9.375 16.0312Z\"\r\n fill=\"#FF375E\"\r\n />\r\n <path\r\n d=\"M7.4997 18.0104C7.3422 18.0104 7.17721 17.9391 7.06471 17.7966C6.86221 17.5433 6.89969 17.1712 7.13969 16.9574L8.87219 15.4375L7.13969 13.9175C6.89969 13.7037 6.86971 13.3316 7.06471 13.0783C7.26721 12.825 7.61971 12.7933 7.85971 12.9991L10.1097 14.9783C10.2372 15.0891 10.3122 15.2554 10.3122 15.4375C10.3122 15.6195 10.2372 15.7779 10.1097 15.8966L7.85971 17.8758C7.75471 17.9629 7.6272 18.0104 7.4997 18.0104Z\"\r\n fill=\"#FF375E\"\r\n />\r\n <path\r\n d=\"M3.75 6.927C2.1975 6.927 0.9375 5.597 0.9375 3.95825C0.9375 2.3195 2.1975 0.989502 3.75 0.989502C5.3025 0.989502 6.5625 2.3195 6.5625 3.95825C6.5625 5.597 5.3025 6.927 3.75 6.927ZM3.75 2.177C2.82 2.177 2.0625 2.97659 2.0625 3.95825C2.0625 4.93992 2.82 5.7395 3.75 5.7395C4.68 5.7395 5.4375 4.93992 5.4375 3.95825C5.4375 2.97659 4.68 2.177 3.75 2.177Z\"\r\n fill=\"#FF375E\"\r\n />\r\n </svg>\r\n {{ element[column] }}\r\n </div>\r\n\r\n <ng-container *ngSwitchCase=\"'clickable'\">\r\n @if(element?.[column]){\r\n <span\r\n #statusMenuTrigger=\"matMenuTrigger\"\r\n (click)=\"$event.stopPropagation()\"\r\n [matMenuTriggerFor]=\"descMenu\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"{{\r\n columnsConfig[i].type\r\n }} fc-coral underline cursor-pointer\"\r\n >\r\n {{ columnsConfig[i].clickableText | translate }}\r\n </span>\r\n }\r\n\r\n <mat-menu #descMenu=\"matMenu\" class=\"p-4 text-center\">\r\n <span class=\"fs-14\">\r\n {{ element[column] }}\r\n </span>\r\n </mat-menu>\r\n </ng-container>\r\n\r\n <span\r\n #statusMenuTrigger=\"matMenuTrigger\"\r\n (click)=\"$event.stopPropagation()\"\r\n *ngSwitchCase=\"'translatedClickable'\"\r\n [matMenuTriggerFor]=\"descMenuTranslated\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"{{\r\n columnsConfig[i].type\r\n }} fc-coral underline cursor-pointer\"\r\n >\r\n {{ columnsConfig[i].clickableText | translate }}\r\n <!-- {{ 'global.view' | translate}} -->\r\n </span>\r\n\r\n <mat-menu #descMenuTranslated=\"matMenu\" class=\"p-4 text-center\">\r\n <span class=\"fs-14\">\r\n {{\r\n columnsConfig[i].arKey\r\n ? translateService.currentLang == \"ar\"\r\n ? mapText(columnsConfig[i].arKey, element[column])\r\n : mapText(columnsConfig[i].enKey, element[column])\r\n : element[column]\r\n ? element[column]\r\n : \"-\"\r\n }}\r\n </span>\r\n </mat-menu>\r\n\r\n <span\r\n #statusMenuTrigger=\"matMenuTrigger\"\r\n (click)=\"$event.stopPropagation()\"\r\n *ngSwitchCase=\"'conditionalClickable'\"\r\n [matMenuTriggerFor]=\"descConditionalMenu\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"{{\r\n columnsConfig[i].type\r\n }} fc-coral underline cursor-pointer\"\r\n >\r\n @if(element[column] && element[column] != 'null'){\r\n <span>{{ columnsConfig[i].clickableText | translate }}</span>\r\n }\r\n <!-- {{ 'global.view' | translate}} -->\r\n </span>\r\n\r\n <mat-menu\r\n #descConditionalMenu=\"matMenu\"\r\n class=\"p-4 text-center\"\r\n >\r\n <span class=\"fs-14\">\r\n {{ element[column] }}\r\n </span>\r\n </mat-menu>\r\n\r\n <span\r\n (click)=\"$event.stopPropagation()\"\r\n *ngSwitchCase=\"'dropdown'\"\r\n [matMenuTriggerFor]=\"dropdownMenu\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"{{ columnsConfig[i].type }} cursor-pointer\"\r\n >\r\n {{\r\n columnsConfig[i].arKey\r\n ? translateService.currentLang == \"ar\"\r\n ? mapText(columnsConfig[i].arKey, element[column])\r\n : mapText(columnsConfig[i].enKey, element[column])\r\n : element[column]\r\n ? element[column]\r\n : \"-\"\r\n }}\r\n <!-- <span *ngFor=\"let item of element[column]\">\r\n {{item.id}}\r\n </span> -->\r\n\r\n <ds-icon class=\"fc-black fw-medium\" icon=\"arrow\"></ds-icon>\r\n </span>\r\n\r\n <mat-menu #dropdownMenu=\"matMenu\" class=\"p-4 text-center\">\r\n <ng-container *ngSwitchCase=\"'dropdown'\">\r\n <span class=\"fs-12 fc-black\" mat-menu-item>\r\n <!-- {{translateService.currentLang == 'ar' ? item.groupNameAr : item.groupNameEn}} -->\r\n {{\r\n columnsConfig[i].arKey\r\n ? translateService.currentLang == \"ar\"\r\n ? mapText(columnsConfig[i].arKey, element[column])\r\n : mapText(columnsConfig[i].enKey, element[column])\r\n : element[column]\r\n ? element[column]\r\n : \"-\"\r\n }}\r\n </span>\r\n </ng-container>\r\n </mat-menu>\r\n\r\n <span\r\n *ngSwitchCase=\"'formatNumber'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n matTooltip=\"{{\r\n element[column] > 1000 ? element[column] : ''\r\n }}\"\r\n >\r\n {{ element[column] }}\r\n </span>\r\n\r\n <div\r\n *ngSwitchCase=\"'group'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"text-nowrap d-flex align-items-center\"\r\n ></div>\r\n\r\n <div\r\n *ngSwitchCase=\"'company'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-flex align-items-center\"\r\n >\r\n <span class=\"img-card circled-img\">\r\n <img\r\n [src]=\"element?.image\"\r\n alt=\"\"\r\n onerror=\"this.onerror=null;this.src='assets/images/user.svg';\"\r\n />\r\n </span>\r\n <span class=\"mx-1\"></span>\r\n <span class=\"full-name\">{{ element[column] }}</span>\r\n </div>\r\n\r\n <span\r\n *ngSwitchCase=\"'translated'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"text-nowrap\"\r\n >\r\n {{ element[column] }}\r\n </span>\r\n <span\r\n *ngSwitchCase=\"'title'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"text-nowrap\"\r\n >\r\n {{ element[column]?.title }}\r\n </span>\r\n\r\n <span\r\n *ngSwitchCase=\"'maxWidth'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n >\r\n {{ element[column]?.title }}\r\n </span>\r\n\r\n <span\r\n *ngSwitchCase=\"'progress'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n >\r\n <div class=\"Progress\">\r\n <div class=\"progress-container default-progress\">\r\n <div\r\n [style.width.%]=\"\r\n (element[column].consumed! / element[column].total!) *\r\n 100\r\n \"\r\n class=\"progress-bar\"\r\n ></div>\r\n </div>\r\n <div class=\"Progress__footer\">\r\n <div></div>\r\n <div>\r\n <span class=\"fs-12\">\r\n <span>{{ element[column].consumed }}</span>\r\n <span>/</span>\r\n <span class=\"fc-silver\">{{\r\n element[column].total\r\n }}</span>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </span>\r\n\r\n <div\r\n *ngSwitchCase=\"'subsidiary'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-flex align-items-center gap-2\"\r\n >\r\n <img\r\n [alt]=\"element[column]?.title\"\r\n src=\"assets/subsidiaries/ids/{{ element[column]?.id }}.png\"\r\n />\r\n <!-- <span class=\"full-name\">{{element[column]}}</span>-->\r\n </div>\r\n\r\n <div\r\n *ngSwitchCase=\"'Service'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-flex align-items-center gap-2\"\r\n >\r\n <svg\r\n fill=\"none\"\r\n height=\"35\"\r\n viewBox=\"0 0 34 35\"\r\n width=\"34\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <rect\r\n fill=\"#FF375E\"\r\n fill-opacity=\"0.1\"\r\n height=\"33.5\"\r\n rx=\"4\"\r\n width=\"33.5\"\r\n y=\"0.75\"\r\n />\r\n <path\r\n d=\"M24.213 17.0338H22.1448L21.4532 15.1884C21.2221 14.5845 20.649 14.1622 19.9761 14.1592H13.5315C12.8586 14.1622 12.2847 14.5838 12.0582 15.1771L12.0544 15.1876L11.3628 17.033H9.29312C9.05532 17.033 8.86328 17.2258 8.86328 17.4629V19.1845C8.86328 19.4223 9.05607 19.6143 9.29312 19.6143H10.2076L9.69896 20.378C9.53242 20.6233 9.4334 20.9263 9.4334 21.2519C9.4334 21.2527 9.4334 21.2527 9.4334 21.2534V26.0702C9.4334 26.308 9.62619 26.5 9.86324 26.5H12.1595C12.3973 26.5 12.5893 26.3072 12.5893 26.0702V24.7791H20.91V26.0702C20.91 26.308 21.1028 26.5 21.3399 26.5H23.6361C23.8739 26.5 24.066 26.3072 24.066 26.0702V21.2519C24.066 21.2512 24.066 21.2512 24.066 21.2504C24.066 20.9248 23.9669 20.6218 23.7974 20.3705L23.8011 20.3757L23.2925 19.6121H24.207C24.4448 19.6121 24.6368 19.4193 24.6368 19.1822V17.4606C24.6361 17.2258 24.4478 17.036 24.2145 17.0315L24.213 17.0338ZM12.8654 15.4915C12.9711 15.2176 13.2314 15.0271 13.5368 15.0264H19.9798C20.2852 15.0271 20.5455 15.2184 20.649 15.487L20.6505 15.4922L21.8747 18.7569H11.6359L12.8654 15.4915ZM23.2138 23.9202H10.2983V21.2542C10.2983 21.2534 10.2983 21.2534 10.2983 21.2527C10.2983 21.1049 10.3433 20.9676 10.4199 20.8536L10.4184 20.8558L11.245 19.6151H22.2618L23.0885 20.8558C23.1635 20.9668 23.2085 21.1049 23.2085 21.2519C23.2085 21.2527 23.2085 21.2527 23.2085 21.2534L23.2138 23.9202ZM9.72896 17.895H11.0357L10.7132 18.7561H9.72071L9.72896 17.895ZM11.7379 25.6411H10.2983V24.7799H11.7334L11.7379 25.6411ZM23.2153 25.6411H21.775V24.7799H23.21L23.2153 25.6411ZM23.7869 18.7546H22.7899L22.4674 17.8935H23.7831L23.7869 18.7546ZM12.1632 20.4762C11.2915 20.4762 10.5856 21.1829 10.5856 22.0538C10.5856 22.9248 11.2923 23.6314 12.1632 23.6314C13.0349 23.6314 13.7408 22.9248 13.7408 22.0538C13.7408 21.1821 13.0342 20.4762 12.1632 20.4762V20.4762ZM12.1632 22.7725C11.7671 22.7725 11.4461 22.4514 11.4461 22.0553C11.4461 21.6592 11.7671 21.3382 12.1632 21.3382C12.5593 21.3382 12.8804 21.6592 12.8804 22.0553C12.8804 22.4514 12.5593 22.7725 12.1632 22.7725V22.7725ZM21.3444 20.4762C20.4727 20.4762 19.7668 21.1829 19.7668 22.0538C19.7668 22.9248 20.4735 23.6314 21.3444 23.6314C22.2161 23.6314 22.922 22.9248 22.922 22.0538C22.922 21.1821 22.2153 20.4762 21.3444 20.4762ZM21.3444 22.7725C20.9483 22.7725 20.6272 22.4514 20.6272 22.0553C20.6272 21.6592 20.9483 21.3382 21.3444 21.3382C21.7405 21.3382 22.0615 21.6592 22.0615 22.0553C22.0615 22.4514 21.7405 22.7725 21.3444 22.7725ZM19.0489 21.0509H14.4579C14.2201 21.0509 14.0274 21.2437 14.0274 21.4815C14.0274 21.7193 14.2201 21.912 14.4579 21.912H19.0489C19.2867 21.912 19.4795 21.7193 19.4795 21.4815C19.4795 21.2437 19.2867 21.0509 19.0489 21.0509ZM19.0489 22.1986H14.4579C14.2201 22.1986 14.0274 22.3914 14.0274 22.6292C14.0274 22.867 14.2201 23.0598 14.4579 23.0598H19.0489C19.2867 23.0598 19.4795 22.867 19.4795 22.6292C19.4795 22.3914 19.2867 22.1986 19.0489 22.1986ZM15.2321 12.5703C15.1541 12.6484 15.1061 12.7556 15.1061 12.8742C15.1061 13.112 15.2989 13.304 15.5359 13.304C15.6544 13.304 15.7625 13.256 15.8397 13.178C16.0738 12.9439 16.3971 12.7991 16.7542 12.7991C17.1113 12.7991 17.4346 12.9439 17.6686 13.178C17.7466 13.256 17.8539 13.304 17.9724 13.304C18.2102 13.304 18.4023 13.1112 18.4023 12.8742C18.4023 12.7556 18.3543 12.6476 18.2762 12.5703C17.8862 12.181 17.3483 11.9395 16.7534 11.9395C16.1586 11.9395 15.6199 12.1803 15.2306 12.5703H15.2321ZM19.1877 12.0865C19.1884 12.0865 19.1884 12.0865 19.1892 12.0865C19.427 12.0865 19.619 11.8937 19.619 11.6567C19.619 11.5374 19.5703 11.4294 19.4915 11.3513C18.7909 10.6507 17.8224 10.2171 16.7527 10.2171C15.683 10.2171 14.7145 10.6507 14.0139 11.3513C13.9358 11.4294 13.8878 11.5366 13.8878 11.6552C13.8878 11.893 14.0806 12.085 14.3177 12.085C14.4362 12.085 14.5442 12.037 14.6215 11.959C15.1668 11.4136 15.92 11.0768 16.7519 11.0768C17.5838 11.0768 18.337 11.4136 18.8824 11.959C18.9604 12.037 19.0677 12.0857 19.1869 12.0857H19.1877V12.0865ZM13.4062 10.743C14.2637 9.88704 15.4467 9.35818 16.7542 9.35818C18.0617 9.35818 19.2447 9.88704 20.1021 10.743C20.1801 10.821 20.2874 10.869 20.4059 10.869C20.6437 10.869 20.8358 10.6762 20.8358 10.4392C20.8358 10.3206 20.7878 10.2126 20.7098 10.1353C19.6963 9.12488 18.298 8.5 16.7534 8.5C15.2089 8.5 13.8106 9.12488 12.7971 10.1353C12.7191 10.2134 12.6711 10.3206 12.6711 10.4392C12.6711 10.677 12.8639 10.869 13.1009 10.869C13.2194 10.869 13.3275 10.821 13.4047 10.743H13.4062Z\"\r\n fill=\"#FF375E\"\r\n />\r\n </svg>\r\n\r\n <span class=\"fs-12 fw-normal fc-black\">{{\r\n element?.Service.name\r\n }}</span>\r\n </div>\r\n <div\r\n *ngSwitchCase=\"'Color'\"\r\n class=\"d-flex align-items-center gap-2\"\r\n >\r\n <span\r\n [ngClass]=\"columnsConfig[i].type\"\r\n [style.background]=\"\r\n element[column]?.colorCode\r\n ? element[column]?.colorCode\r\n : element[column]\r\n \"\r\n ></span>\r\n {{ element[column].title }}\r\n </div>\r\n <div\r\n *ngSwitchCase=\"'colorBg'\"\r\n [style.background]=\"\r\n 'rgba(var(--rgb-' + element[column]?.colorName + '), 0.1)'\r\n \"\r\n class=\"d-flex align-items-center gap-2 Colorbg p-2\"\r\n >\r\n <span class=\"bc-{{ element[column]?.colorName }}\"></span>\r\n {{ element[column].title }}\r\n </div>\r\n <div\r\n *ngSwitchCase=\"'assigned'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"delegate d-flex align-items-center\"\r\n >\r\n <div class=\"img-card x-small circled-img\">\r\n <img\r\n [src]=\"element?.AssignedTo.image\"\r\n alt=\"\"\r\n onerror=\"this.onerror=null;this.src='assets/images/user.svg';\"\r\n />\r\n </div>\r\n <span class=\"mx-1\"></span>\r\n <span class=\"fs-12 fc-black\">{{\r\n element?.AssignedTo.name\r\n }}</span>\r\n <!--\r\n <span class=\"sfi sfi-close fc-coral\"></span>\r\n -->\r\n </div>\r\n\r\n <span\r\n *ngSwitchCase=\"'coloredText'\"\r\n [style.color]=\"element[column]?.['color']\"\r\n >{{\r\n element[column]?.['title']\r\n }}</span\r\n >\r\n <div\r\n *ngSwitchCase=\"'survey'\"\r\n [style.color]=\"element[column]?.['color']\"\r\n class=\"d-flex align-items-center gap-1 text-nowrap\"\r\n >\r\n <span\r\n class=\"fs-20 sfi sfi-emoji-{{(element[column]?.['title']['en'].toLowerCase()) }}\"\r\n ></span>\r\n {{ element[column]?.['title'] }}\r\n </div>\r\n\r\n <div\r\n *ngSwitchCase=\"'Satisfaction'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"delegate d-flex gap-2 align-items-center\"\r\n >\r\n <!--\r\n <ds-icon icon=\"star-f\" class=\"fc-dark-gray\"></ds-icon>\r\n -->\r\n\r\n <span class=\"fs-12 fc-black\"\r\n >{{ element[column].percentage }}%</span\r\n >\r\n <ds-status\r\n class=\"auto-status\"\r\n size=\"small\"\r\n status=\"{{ element[column].status }}\"\r\n >\r\n <span class=\"fs-10\">\r\n {{ element[column].percentageTrend }}%\r\n </span>\r\n @if(element[column].trendStatus == 'up'){\r\n <ds-icon class=\"fs-13 mx-1 growthIcon\" icon=\"up-growth\">\r\n </ds-icon>\r\n } @if(element[column].trendStatus != 'up'){\r\n <ds-icon class=\"fs-13 mx-1 downIcon\" icon=\"down-growth\">\r\n </ds-icon>\r\n }\r\n </ds-status>\r\n </div>\r\n\r\n <ng-container *ngSwitchCase=\"'actions'\">\r\n <div class=\"d-flex justify-content-start gap-2\">\r\n <ng-container\r\n *ngIf=\"columnsConfig[i]?.actions?.length <= 6\"\r\n >\r\n <ng-container\r\n *ngFor=\"let action of columnsConfig[i]?.actions\"\r\n >\r\n <ds-button\r\n (click)=\"$event.stopPropagation()\"\r\n *ngIf=\"action.viewMode === Actions.ALLOCATE\"\r\n shape=\"outline\"\r\n size=\"small\"\r\n >\r\n <span class=\"fs-12 fc-{{ action?.actionFontColor }}\">\r\n {{ action?.actionName | translate }}\r\n </span>\r\n </ds-button>\r\n\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n *ngIf=\"action === Actions.ALLOCATE\"\r\n icon\r\n size=\"small\"\r\n >\r\n <ds-icon class=\"fs-15\" icon=\"pen\"></ds-icon>\r\n </ds-button>\r\n <ng-container\r\n *ngIf=\"\r\n action.viewMode != Actions.VIEW ||\r\n action.viewMode != Actions.COPY\r\n \"\r\n >\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n *ngIf=\"\r\n action?.action === Actions.VIEW &&\r\n !action?.isHidden\r\n \"\r\n icon\r\n size=\"small\"\r\n >\r\n <ds-icon class=\"fs-15\" icon=\"eye\"></ds-icon>\r\n </ds-button>\r\n\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n *ngIf=\"\r\n action?.action === Actions.COPY &&\r\n !action?.isHidden\r\n \"\r\n icon\r\n size=\"small\"\r\n >\r\n <ds-icon class=\"fs-15\" icon=\"files-copy\"></ds-icon>\r\n </ds-button>\r\n <!-- @if(element.hasOwnProperty('canUpdate')){\r\n <ds-button (click)=\"$event.stopPropagation();action?.onClick(element)\" icon size=\"small\"\r\n *ngIf=\"action?.action === 'edit' && !action?.isHidden && element.canUpdate == true\">\r\n <ds-icon icon=\"pen\" class=\"fs-15\"></ds-icon>\r\n </ds-button>\r\n }@else { -->\r\n\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\"\r\n *ngIf=\"\r\n action?.action === Actions.EDIT &&\r\n ![4, 7].includes(element?.contractStatus?.id)\"\r\n icon\r\n size=\"small\"\r\n >\r\n <ds-icon class=\"fs-15\" icon=\"pen\"></ds-icon>\r\n </ds-button>\r\n <!-- } -->\r\n\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n *ngIf=\"\r\n action?.action === Actions.DELETE &&\r\n !action?.isHidden &&\r\n ![4, 7].includes(element?.contractStatus?.id)\r\n \"\r\n icon\r\n size=\"small\"\r\n >\r\n <ds-icon\r\n class=\"fc-coral fs-15\"\r\n icon=\"trash\"\r\n ></ds-icon>\r\n </ds-button>\r\n\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n *ngIf=\"\r\n action?.action === Actions.DELETEPENDING &&\r\n !action?.isHidden &&\r\n element?.contractStatus?.id == 1\r\n \"\r\n icon\r\n size=\"small\"\r\n >\r\n <ds-icon\r\n class=\"fc-coral fs-15\"\r\n icon=\"trash\"\r\n ></ds-icon>\r\n </ds-button>\r\n\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n *ngIf=\"action?.action === Actions.CHART\"\r\n color=\"transparent\"\r\n size=\"small\"\r\n >\r\n <ds-icon\r\n class=\"fc-coral fs-15\"\r\n icon=\"chart-o\"\r\n ></ds-icon>\r\n </ds-button>\r\n\r\n @if (element.hasOwnProperty('canTakeAction')) {\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n size=\"small\"\r\n *ngIf=\"\r\n action?.action === Actions.APPROVE &&\r\n element.canTakeAction == true\r\n \"\r\n >\r\n <span class=\"fs-12\">\r\n {{ \"global.approve\" | translate }}\r\n </span>\r\n </ds-button>\r\n <ds-button\r\n shape=\"outline\"\r\n color=\"dark-gray\"\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n size=\"small\"\r\n *ngIf=\"\r\n action?.action === Actions.REJECT &&\r\n element.canTakeAction == true\r\n \"\r\n shape=\"outline\"\r\n >\r\n <span class=\"fs-12\">\r\n {{ \"global.reject\" | translate }}\r\n </span>\r\n </ds-button>\r\n } @else {\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n size=\"small\"\r\n *ngIf=\"action?.action === Actions.APPROVE\"\r\n >\r\n <span class=\"fs-12\">\r\n {{ \"global.approve\" | translate }}\r\n </span>\r\n </ds-button>\r\n <ds-button\r\n shape=\"outline\"\r\n color=\"dark-gray\"\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n size=\"small\"\r\n *ngIf=\"action?.action === Actions.REJECT\"\r\n shape=\"outline\"\r\n >\r\n <span class=\"fs-12\">\r\n {{ \"global.reject\" | translate }}\r\n </span>\r\n </ds-button>\r\n }\r\n\r\n <ds-button\r\n *ngIf=\"action?.action === Actions.DETAILS\"\r\n shape=\"text\"\r\n size=\"small\"\r\n >\r\n <span class=\"fs-12 underline\"> View Details </span>\r\n </ds-button>\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n *ngIf=\"\r\n action?.action === Actions.START &&\r\n element?.isFinalize\r\n \"\r\n size=\"small\"\r\n >\r\n <span class=\"fs-12\">\r\n {{ action?.actionName | translate }}\r\n </span>\r\n <ds-icon\r\n class=\"fs-16\"\r\n icon=\"media-play\"\r\n slot=\"prefix\"\r\n ></ds-icon>\r\n </ds-button>\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n *ngIf=\"action?.action === Actions.PREPARE\"\r\n color=\"light-gray\"\r\n size=\"small\"\r\n >\r\n <span class=\"fs-12 fc-black\">\r\n {{ action?.actionName | translate }}\r\n </span>\r\n <ds-icon\r\n class=\"fs-12 fc-black\"\r\n icon=\"settings\"\r\n slot=\"prefix\"\r\n ></ds-icon>\r\n </ds-button>\r\n\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n *ngIf=\"\r\n action?.action === Actions.START &&\r\n element?.isFinalize\r\n \"\r\n size=\"small\"\r\n >\r\n <span class=\"fs-12\">\r\n {{ action?.actionName | translate }}\r\n </span>\r\n <ds-icon\r\n class=\"fs-16\"\r\n icon=\"media-play\"\r\n slot=\"prefix\"\r\n ></ds-icon>\r\n </ds-button>\r\n\r\n <!-- <ds-button [color]=\"action?.actionColor\" size=\"small\"\r\n *ngIf=\"action?.action === 'customAction'\"\r\n (click)=\"$event.stopPropagation();action?.onClick(element)\" shape=\"{{action?.actionShape}}\" [class]=\"action?.actionColor\"\r\n ></ds-button> -->\r\n\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n *ngIf=\"action?.action === Actions.CUSTOMACTION\"\r\n [class]=\"action?.actionColor\"\r\n [color]=\"action?.actionColor\"\r\n shape=\"{{ action?.actionShape }}\"\r\n size=\"small\"\r\n >\r\n <span\r\n class=\"fs-12 fc-{{ action?.actionFontColor }}\"\r\n >\r\n {{ action?.actionName | translate }}\r\n </span>\r\n </ds-button>\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n *ngIf=\"\r\n action?.action === Actions.CUSTOMACTIONMANAGE &&\r\n (element.contractStatus.id == 7 ||\r\n element.contractStatus.id == 1)\r\n \"\r\n [class]=\"action?.actionColor\"\r\n [color]=\"action?.actionColor\"\r\n shape=\"{{ action?.actionShape }}\"\r\n size=\"small\"\r\n >\r\n <span\r\n class=\"fs-12 fc-{{ action?.actionFontColor }}\"\r\n >\r\n {{ action?.actionName | translate }}\r\n </span>\r\n </ds-button>\r\n\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n *ngIf=\"\r\n action?.action === Actions.CUSTOMACTIONEXTEND &&\r\n element.contractStatus.id == 7\r\n \"\r\n [class]=\"action?.actionColor\"\r\n [color]=\"action?.actionColor\"\r\n shape=\"{{ action?.actionShape }}\"\r\n size=\"small\"\r\n >\r\n <span\r\n class=\"fs-12 fc-{{ action?.actionFontColor }}\"\r\n >\r\n {{ action?.actionName | translate }}\r\n </span>\r\n </ds-button>\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n *ngIf=\"\r\n action?.action === Actions.CUSTOMACTIONDETAILS\r\n \"\r\n [class]=\"action?.actionColor\"\r\n [color]=\"action?.actionColor\"\r\n shape=\"{{ action?.actionShape }}\"\r\n size=\"small\"\r\n >\r\n <span\r\n class=\"fs-12 fc-{{ action?.actionFontColor }}\"\r\n >\r\n {{ action?.actionName | translate }}\r\n </span>\r\n </ds-button>\r\n <ds-status\r\n *ngIf=\"action?.action === Actions.STATUS\"\r\n [status]=\"action?.Status.status\"\r\n class=\"fs-12 statusAction w-100\"\r\n >\r\n <span class=\"fc-black\">\r\n {{ action?.Status.title | translate }}\r\n </span>\r\n </ds-status>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"columnsConfig[i]?.actions?.length > 6\">\r\n <ds-button\r\n #statusMenuTrigger=\"matMenuTrigger\"\r\n (click)=\"$event.stopPropagation()\"\r\n *ngIf=\"columnsConfig[i]?.actions?.length > 1\"\r\n [matMenuTriggerFor]=\"statusMenu\"\r\n class=\"dots\"\r\n shape=\"text\"\r\n size=\"small\"\r\n >\r\n <ds-icon\r\n class=\"fs-20 fc-dark-gray\"\r\n icon=\"dots\"\r\n ></ds-icon>\r\n </ds-button>\r\n\r\n <mat-menu #statusMenu=\"matMenu\">\r\n <button\r\n (click)=\"action?.onClick(element)\"\r\n *ngFor=\"let action of columnsConfig[i]?.actions\"\r\n mat-menu-item\r\n >\r\n <span class=\"fs-12 fc-black\"\r\n >{{ action?.actionName | translate }}\r\n </span>\r\n </button>\r\n </mat-menu>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'specs'\">\r\n @if(element?.[column]){\r\n <span\r\n #statusMenuTrigger=\"matMenuTrigger\"\r\n (click)=\"$event.stopPropagation()\"\r\n [matMenuTriggerFor]=\"specsMenu\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"{{\r\n columnsConfig[i].type\r\n }} fc-coral underline cursor-pointer\"\r\n >\r\n {{ columnsConfig[i].clickableText | translate }}\r\n </span>\r\n }\r\n\r\n <mat-menu #specsMenu=\"matMenu\" class=\"p-4 text-center\">\r\n <span class=\"fs-14\">\r\n {{ element[column] }}\r\n </span>\r\n </mat-menu>\r\n </ng-container>\r\n\r\n <!--<div\r\n *ngSwitchCase=\"'specs'\" [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-flex gap-1\">\r\n {{ element[column] | json }}\r\n <ng-container *ngFor=\"let item of element[column]\">\r\n\r\n <div\r\n class=\"progress-container default-progress medium radius-0 \"\r\n matTooltip=\"Team assignment {{item.value}}%\" matTooltipPosition=\"below\">\r\n <div\r\n [style.width.%]=\"item.value\"\r\n class=\"progress-bar bg-color-{{item.color}}\"></div>\r\n </div>\r\n </ng-container>\r\n\r\n </div>-->\r\n\r\n <span\r\n *ngSwitchDefault\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"text-nowrap\"\r\n matTooltip=\" {{\r\n columnsConfig[i].arKey\r\n ? translateService.currentLang == 'ar'\r\n ? mapText(columnsConfig[i].arKey, element[column])\r\n : mapText(columnsConfig[i].enKey, element[column])\r\n : element[column]\r\n ? element[column]\r\n : '-'\r\n }}\"\r\n matTooltipPosition=\"below\"\r\n >\r\n {{\r\n columnsConfig[i].arKey\r\n ? translateService.currentLang == \"ar\"\r\n ? mapText(columnsConfig[i].arKey, element[column])\r\n : mapText(columnsConfig[i].enKey, element[column])\r\n : element[column]\r\n ? element[column]\r\n : \"-\"\r\n }}\r\n </span>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n </ng-container>\r\n }\r\n </ng-container>\r\n }\r\n\r\n <tr *matHeaderRowDef=\"columns; sticky: true\" mat-header-row></tr>\r\n <tr\r\n (click)=\"clickRow(row)\"\r\n *matRowDef=\"let row; columns: columns\"\r\n [ngClass]=\"{ 'selected-row': row?.fastTrackSeen === false }\"\r\n mat-row\r\n role=\"button\"\r\n ></tr>\r\n </table>\r\n }\r\n </ng-container>\r\n } @if(isLoading){\r\n <ds-loading-table [cols]=\"columns.length\" [rows]=\"5\"></ds-loading-table>\r\n } @if(!isLoading && dataSource.filteredData?.length == 0){\r\n <ds-message\r\n [label]=\"'global.noItemsToDisplay' | translate\"\r\n type=\"emptyList\"\r\n ></ds-message>\r\n }\r\n</div>\r\n@if(dataSource.filteredData?.length && hasPaginator){\r\n<mat-paginator\r\n #paginator\r\n (page)=\"pageChanged($event)\"\r\n [length]=\"totalElements\"\r\n [pageIndex]=\"currentPage\"\r\n [pageSizeOptions]=\"[5, 10, 15, 20, 100]\"\r\n [pageSize]=\"pageSize\"\r\n aria-label=\"Select page\"\r\n showFirstLastButtons\r\n>\r\n</mat-paginator>\r\n}\r\n", styles: [":host ::ng-deep .table-responsive table{--th-height: 32px;--th-bg: var(--purple);--th-fc: var(--white);--td-height: 75px;--td-radius: 0;--border-spacing: 0;--border-collapse: collapse;--tr-even-bc: var(--white);--tr-odd-bc: var(--white);--tr-border: 1px solid var(--light-gray);--th-border: none;--cell-pading: 0 24px;--th-fs: 11px}:host ::ng-deep .table-responsive table tr.selected-row,:host ::ng-deep .table-responsive table tr.selected-row:hover{background-color:#ecfeff;border-inline-start:3px solid var(--sea-light)}:host ::ng-deep .table-responsive table td.mat-mdc-cell.mat-mdc-table-sticky{box-shadow:-10px 0 10px #00000012}:host ::ng-deep .table-responsive table mat-form-field,:host ::ng-deep .table-responsive table .e-control,:host ::ng-deep .table-responsive table .mdc-form-field{--input-height: 35px}:host ::ng-deep .Color{width:13px;height:13px;border-radius:50%}:host ::ng-deep .Colorbg{width:fit-content;min-width:102px}:host ::ng-deep .Colorbg span{width:9px;height:9px;border-radius:50%}:host ::ng-deep span.number{color:var(--coral)}:host ::ng-deep .subsidiary img{height:22px;max-width:initial}:host ::ng-deep .sla svg{width:37px}:host ::ng-deep tr th{top:-1px!important}:host ::ng-deep ds-status.statusAction::part(base){min-height:35px;--status-width: 100%}:host ::ng-deep .dropdown{border-radius:3px;background:var(--Grays-Off-white, #f3f3f1);display:flex;height:35px;padding:10px;align-items:center;gap:5px;justify-content:center;width:fit-content}:host ::ng-deep .dropdown ds-icon span{font-weight:700}:host ::ng-deep ds-status::part(base){min-height:23px}:host ::ng-deep .Category span{border-radius:3px;width:97px;height:23px;display:flex;align-items:center;justify-content:center}:host ::ng-deep .mat-checkbox .mat-checkbox-ripple{left:calc(50% - 17px);top:calc(50% - 17px);height:30px;width:30px}:host ::ng-deep .mat-checkbox .mat-checkbox-layout .mat-checkbox-inner-container .mat-checkbox-frame{width:20px;height:20px;border-width:1px;border-style:solid;border-color:#909a9f4d}:host ::ng-deep .mat-checkbox-checked .mat-checkbox-checkmark{width:20px}:host ::ng-deep .idea a:hover{text-decoration:underline;color:var(--coral)}.paginator{width:800px}.table-container{max-height:400px;overflow:auto;scroll-behavior:smooth;transition:scroll-behavior .5s ease-in-out}@media (max-width: 768px){.table-container{max-height:65vh;height:65vh}}[dir=rtl] .table-container--btn.reRequest{transform:scaleX(-1)}@media (min-width: 1200px){.table-container--name,.table-container--date{max-width:120px}}@media (min-width: 1200px){[dir=rtl] .table-container--name{max-width:initial}}.table-container--item{display:flex;align-items:center;gap:1rem;min-height:105px;overflow:hidden;position:relative;cursor:pointer}@media (min-width: 991px){.table-container--item h4{max-width:calc(100% - 200px);display:inline-block}}.table-container--item:not(:last-child){margin-bottom:.75rem}.table-container--item ds-status::part(base){--status-width: 60px}.table-container--info span{position:relative;display:flex;align-items:center;gap:.5rem}.table-container--info span:not(:first-of-type):before{content:\"\";min-width:3px;width:3px;height:3px;border-radius:50%;background-color:var(--black)}@media (min-width: 991px){.table-container--status{position:absolute;top:1rem;right:0}}:host ::ng-deep .max-width-150{max-width:150px}:host ::ng-deep .text-align-custom{unicode-bidi:plaintext}:host ::ng-deep .table-responsive table{--th-height: var(--default-size-sm);--th-bg: var(--purple);--th-fc: var(--white);--td-height: 48px;--td-radius: 0;--border-spacing: 0;--border-collapse: collapse;--tr-even-bc: var(--off-white);--tr-odd-bc: var(--white)}:host ::ng-deep .ServiceDetails{display:inline-block;max-width:230px;white-space:normal}:host ::ng-deep .progress_group{width:100px}:host ::ng-deep .progress_group .progress-container.default-progress{min-width:25px;background-color:#cdd0d1}:host ::ng-deep .sla svg{width:36px}:host ::ng-deep .sla text{font-size:10px}:host ::ng-deep .Periority.High{color:var(--red)}:host ::ng-deep .Periority.Medium{color:var(--orange)}:host ::ng-deep .Periority.Low,:host ::ng-deep .Periority.Yes{color:var(--green)}:host ::ng-deep tr:nth-child(odd) .history,:host ::ng-deep tr:nth-child(odd) .Finished{background-color:var(--light-gray)}:host ::ng-deep tr:nth-child(2n) .history,:host ::ng-deep tr:nth-child(2n) .Finished{background-color:var(--white)}:host ::ng-deep .Finished{min-width:27px}:host ::ng-deep ds-button.coral:hover svg path{fill:var(--coral)}:host ::ng-deep .controls-tabel .mat-sort-header-container{justify-content:center!important}.dot-status{height:20px;width:20px;border-radius:50%;display:inline-block}.dot-status.red{background-color:var(--red)}.dot-status.green{background-color:var(--green)}.sticky-table{max-height:100vh}.dimCheckbox{background:var(--gray);pointer-events:none}\n"] }]
|
|
177
|
+
args: [{ selector: 'app-table', standalone: true, imports: [NgFor, TranslateModule, NgIf, matModules, FormsModule, NgSwitchDefault, SkipLocationDirective, MatPaginator], schemas: [CUSTOM_ELEMENTS_SCHEMA], template: "<div #table class=\"table-container table-responsive sticky-table\">\r\n @if (!isLoading) {\r\n <ng-container>\r\n @if (dataSource.filteredData?.length! > 0) {\r\n <table\r\n #tableSort=\"matSort\"\r\n (matSortChange)=\"sortChange($event)\"\r\n [dataSource]=\"dataSource\"\r\n class=\"primary-table {{ className }}\"\r\n mat-table\r\n matSort\r\n >\r\n @for (column of columns; track $index; let i = $index) {\r\n <ng-container>\r\n <!-- Add a check to ensure 'columnsConfig' and 'columnsConfig[i]' are defined before using them -->\r\n\r\n @if (columnsConfig && columnsConfig[i]) {\r\n <ng-container>\r\n <ng-container\r\n [matColumnDef]=\"column\"\r\n [stickyEnd]=\"!!columnsConfig[i].stickyEnd!\"\r\n >\r\n @if (!columnsConfig[i].notSortable) {\r\n <ng-container>\r\n <th\r\n *matHeaderCellDef\r\n [ngClass]=\"{ 'text-end': columnsConfig[i].type === 'actions' }\"\r\n mat-header-cell\r\n mat-sort-header\r\n >\r\n @if (columnsConfig[i].type !== 'checkbox' || (\r\n this.columnsConfig[i]?.type! == 'actions' &&\r\n this.columnsConfig[i]?.actions?.length === 0)) {\r\n <ng-container>\r\n @if (!(this.columnsConfig[i].type == 'actions' &&\r\n this.columnsConfig[i].actions.length === 0)) {\r\n <div class=\"d-flex align-items-center\">\r\n <div class=\"mx-1 fc-{{ columnsConfig[i].fontColor }}\">\r\n {{ columnsConfig[i].label | translate }}\r\n </div>\r\n @if (columnsConfig[i].slaMax) {\r\n <ds-sla\r\n [canvasScale]=\"'40'\"\r\n [innerLineWidth]=\"'3'\"\r\n [maxValue]=\"columnsConfig[i].slaMax\"\r\n [outerLineColor]=\"'limegreen'\"\r\n [outerLineWidth]=\"'3'\"\r\n [value]=\"columnsConfig[i].slaValue\"\r\n class=\"table-header-sla my-1\"\r\n ></ds-sla>\r\n }\r\n </div>\r\n }\r\n </ng-container>\r\n }\r\n @if (columnsConfig[i].type == 'checkbox') {\r\n <mat-checkbox class=\"checkbox\"></mat-checkbox>\r\n }\r\n </th>\r\n </ng-container>\r\n }\r\n @if (columnsConfig[i].notSortable) {\r\n <ng-container>\r\n <th\r\n *matHeaderCellDef\r\n [ngClass]=\"{ 'text-end': columnsConfig[i].type === 'actions' }\"\r\n mat-header-cell\r\n >\r\n <div class=\"d-flex align-items-center\">\r\n <div class=\"mx-1\">\r\n {{ columnsConfig[i].label | translate }}\r\n </div>\r\n @if (columnsConfig[i].slaMax) {\r\n <ds-sla\r\n [canvasScale]=\"'50'\"\r\n [innerLineWidth]=\"'3'\"\r\n [maxValue]=\"columnsConfig[i].slaMax\"\r\n [outerLineColor]=\"'limegreen'\"\r\n [outerLineWidth]=\"'3'\"\r\n [value]=\"columnsConfig[i].slaValue\"\r\n class=\"table-header-sla my-1\"\r\n ></ds-sla>\r\n }\r\n </div>\r\n </th>\r\n </ng-container>\r\n }\r\n\r\n <td *matCellDef=\"let element; let j = index\" mat-cell>\r\n <ng-container [ngSwitch]=\"columnsConfig[i].type\">\r\n <!-- <a target=\"_blank\"-->\r\n <!-- routerLink=\"/inbox\" [queryParams]=\"{ id: element[column] }\"-->\r\n <!-- class=\"fc-black text-decoration-underline fw-medium\" [ngClass]=\"columnsConfig[i].type\" *ngSwitchCase=\"'link'\">-->\r\n <!-- {{ element[column] }}-->\r\n <!-- </a>-->\r\n <span\r\n *ngSwitchCase=\"'formId'\"\r\n (click)=\"viewForm(element[column])\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"fc-coral cursor-pointer text-decoration-underline fw-medium\">\r\n {{ element[column] }}\r\n </span>\r\n <!-- <span\r\n *ngSwitchCase=\"'link'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"fc-black text-decoration-underline fw-medium\"\r\n >\r\n {{ element[column] }}\r\n </span>-->\r\n\r\n <span\r\n *ngSwitchCase=\"'linkWithIcon'\"\r\n [appSkipLocation]=\"columnsConfig[i].link\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"fc-black text-decoration-underline fw-medium\"\r\n >\r\n <ds-icon\r\n class=\"fs-20 fc-black\"\r\n icon=\" {{ columnsConfig[i].icon }}\"\r\n ></ds-icon>\r\n <span class=\"fs-13 fc-coral px-1 text-decoration-underline\">{{\r\n element[column]\r\n }}</span>\r\n </span>\r\n <span\r\n *ngSwitchCase=\"'underLineWithIcon'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"fc-black text-decoration-underline fw-medium\"\r\n >\r\n <ds-icon\r\n class=\"fs-20 fc-black\"\r\n icon=\" {{ columnsConfig[i].icon }}\"\r\n ></ds-icon>\r\n <span class=\"fs-13 fc-coral px-1 text-decoration-underline\">{{\r\n element[column]\r\n }}</span>\r\n </span>\r\n <mat-checkbox\r\n *ngSwitchCase=\"'checkbox'\"\r\n checked=\"{{ columnsConfig[i].checked }}\"\r\n class=\"checkbox\"\r\n disabled=\"{{ columnsConfig[i].disabled }}\"\r\n >\r\n </mat-checkbox>\r\n <span\r\n *ngSwitchCase=\"'ServiceDetails'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"cursor-pointer\"\r\n >\r\n {{ element[column] }}\r\n </span>\r\n <span\r\n *ngSwitchCase=\"'dateOnly'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-inline-flex align-items-center gap-2 text-nowrap\"\r\n >\r\n <span class=\"sfi sfi-calendar-o fc-coral fs-18\"></span>\r\n {{ element[column] | date : \"MMM d, y\" }}\r\n </span>\r\n <span\r\n *ngSwitchCase=\"'Search'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-inline-flex align-items-center\"\r\n >\r\n <app-input\r\n [formControl]=\"ctrl\"\r\n [placeholder]=\"'Search for item '\"\r\n [showLabel]=\"false\"\r\n class=\"\"\r\n className=\"no-padding \"\r\n prefix=\"sfi-search fs-16\"\r\n type=\"text\"\r\n >\r\n </app-input>\r\n </span>\r\n <span\r\n *ngSwitchCase=\"'Number'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-inline-flex align-items-center\"\r\n >\r\n <app-input\r\n [formControl]=\"ctrl\"\r\n [placeholder]=\"'number'\"\r\n [showLabel]=\"false\"\r\n class=\"\"\r\n className=\"no-padding\"\r\n type=\"text\"\r\n >\r\n </app-input>\r\n </span>\r\n <span\r\n *ngSwitchCase=\"'dateFromTo'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-inline-flex align-items-center\"\r\n >\r\n <span class=\"sfi sfi-clock fc-coral\"></span>\r\n <span class=\"mx-2\">\r\n {{ element?.date.from }}\r\n @if (element?.date.to) {\r\n <ng-container> : {{ element?.date.to }} </ng-container>\r\n }\r\n </span>\r\n </span>\r\n\r\n <span\r\n *ngSwitchCase=\"'dateTime'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-inline-flex align-items-center gap-1 flex-wrap\"\r\n >\r\n <span class=\"sfi sfi-calendar-o fc-dark-gray fs-20\"></span>\r\n {{ element[column] | date : \"MMM d, y, h:mm a\" }}\r\n </span>\r\n\r\n <span\r\n *ngSwitchCase=\"'singleTimeOnly'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-inline-flex align-items-center gap-1 flex-wrap\"\r\n >\r\n {{ element[column] | date : \"h:mm a\" }}\r\n </span>\r\n <!--dir=\"ltr\" and text-left for English text on ar page -->\r\n <span\r\n *ngSwitchCase=\"'timeOnly'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-inline-flex align-items-center gap-1 flex-wrap text-nowrap text-left\"\r\n dir=\"ltr\"\r\n >\r\n <!-- -->\r\n {{\r\n mapText(columnsConfig[i].firstVal, element[column])\r\n | date : \"h:mm a\"\r\n }}\r\n @if (mapText(columnsConfig[i].secondVal, element[column])) {\r\n <ng-container>\r\n -\r\n {{\r\n mapText(columnsConfig[i].secondVal, element[column])\r\n | date : \"h:mm a\"\r\n }}\r\n </ng-container>\r\n }\r\n </span>\r\n\r\n <span\r\n *ngSwitchCase=\"'multipleRows'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-inline-flex align-items-center gap-1 flex-wrap\"\r\n >\r\n <!-- -->\r\n @if (!element[column].monthlyFineEscalation) {\r\n <div>\r\n {{ element[column].fixedFineValue }}\r\n {{ \"global.SAR\" | translate }}\r\n </div>\r\n }\r\n @if (element[column].monthlyFineEscalation) {\r\n <div>\r\n <br/>\r\n {{ element[column].firstTimeFine }}\r\n {{ \"global.SAR\" | translate }} <br/><br/>\r\n {{ element[column].secondTimeFine }}\r\n {{ \"global.SAR\" | translate }} <br/><br/>\r\n {{ element[column].thirdTimeFine }}\r\n {{ \"global.SAR\" | translate }} <br/><br/>\r\n </div>\r\n }\r\n </span>\r\n\r\n <div\r\n *ngSwitchCase=\"'sla'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-inline-flex align-items-center\"\r\n >\r\n <!-- <app-sla [value]=\"element?.SLA.value\" [maxValue]=\"element?.SLA.max\" [canvasScale]=\"38\" -->\r\n <!-- class=\"font-9 fw-medium\" [outerLineColor]=\"getSlaColor(element?.SLA.value, element?.SLA.max)\">-->\r\n <!-- </app-sla>-->\r\n\r\n <ds-sla\r\n [attr.outerLineColor]=\"\r\n getSlaColor(element?.SLA.value, element?.SLA.max)\r\n \"\r\n [canvasScale]=\"'55'\"\r\n [innerLineWidth]=\"'3'\"\r\n [maxValue]=\"element?.SLA?.max\"\r\n [outerLineWidth]=\"'3'\"\r\n [value]=\"element?.SLA?.value\"\r\n ></ds-sla>\r\n </div>\r\n <div *ngSwitchCase=\"'slaProgress'\">\r\n <!-- <mat-sp-->\r\n\r\n @if (element[column]?.percentage >= 0) {\r\n <ds-sla\r\n [canvasScale]=\"'55'\"\r\n [customValue]=\"element[column]?.percentage + '%'\"\r\n [innerLineWidth]=\"'3'\"\r\n [maxValue]=\"'100'\"\r\n [outerLineColor]=\"\r\n getSlaColor(element[column]?.percentage, 100)\r\n \"\r\n [outerLineWidth]=\"'3'\"\r\n [value]=\"element[column]?.percentage\"\r\n ></ds-sla>\r\n } @else {\r\n <ng-template>Not started</ng-template>\r\n }\r\n </div>\r\n <div\r\n *ngSwitchCase=\"'Priority'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"{{ element[column] }}\"\r\n >\r\n {{ element[column] }}\r\n </div>\r\n\r\n <div\r\n *ngSwitchCase=\"'serviceStatus'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"{{ element[column] }}\"\r\n >\r\n <span\r\n [ngClass]=\"element[column] == 'FALSE' ? 'green' : 'red'\"\r\n class=\"dot-status\"\r\n ></span>\r\n </div>\r\n\r\n <div\r\n *ngSwitchCase=\"'image'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"img-card table-img\"\r\n >\r\n <img\r\n [src]=\"element?.image\"\r\n alt=\"\"\r\n onerror=\"this.onerror=null;this.src='assets/images/user.svg';\"\r\n />\r\n </div>\r\n\r\n <div\r\n *ngSwitchCase=\"'employee'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-flex align-items-center gap-2 text-nowrap\"\r\n >\r\n <ds-avatar\r\n [image]=\"'https://igateapp.stc.com.sa'+element[column]?.['imageUrl']\"\r\n size=\"x-small\"\r\n >\r\n </ds-avatar>\r\n <span>{{ (element[column]?.['name']) }}</span>\r\n </div>\r\n\r\n <div\r\n *ngSwitchCase=\"'progress_group'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-flex gap-1\"\r\n >\r\n <ng-container *ngFor=\"let item of element[column]\">\r\n <div\r\n class=\"progress-container default-progress medium radius-0\"\r\n matTooltip=\"Team assignment {{ item.value }}%\"\r\n matTooltipPosition=\"below\"\r\n >\r\n <div\r\n [style.width.%]=\"item.value\"\r\n class=\"progress-bar bg-color-{{ item.color }}\"\r\n ></div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div\r\n *ngSwitchCase=\"'input'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"\"\r\n >\r\n <app-input\r\n (input)=\"inputCellChanged.emit({element,column,i})\"\r\n [(ngModel)]=\"element[column]\"\r\n [min]=\"0\"\r\n [placeholder]=\"element[column]\"\r\n class=\"w-100\"\r\n className=\" no-padding w-100\"\r\n type=\"number\"\r\n value=\"{{ element[column] }}\"\r\n >\r\n </app-input>\r\n </div>\r\n <div *ngSwitchCase=\"'autoComplete'\"></div>\r\n <div\r\n *ngSwitchCase=\"'select'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"\"\r\n >\r\n <app-custom-searchable\r\n (selectedValue)=\"selectValueSelected.emit($event)\"\r\n [isSearchable]=\"columnsConfig[i].config?.isSearchable\"\r\n [key]=\"columnsConfig[i]?.key\"\r\n [displayedLabel]=\"columnsConfig[i]?.displayedLable\"\r\n [options]=\"columnsConfig[i]?.options\"\r\n [postKey]=\"columnsConfig[i]?.postKey\"\r\n [showLabel]=\"false\"\r\n className=\"no-padding w-100\"\r\n >\r\n </app-custom-searchable>\r\n </div>\r\n\r\n <div\r\n *ngSwitchCase=\"'status'\"\r\n [ngClass]=\"'New' + columnsConfig[i].type\"\r\n class=\"d-flex align-items-center gap-2\"\r\n >\r\n @if (element[column]) {\r\n <ds-status [status]=\"element[column]?.status\" class=\"fs-12\">\r\n {{ element[column]?.title | translate }}\r\n </ds-status>\r\n }\r\n @if (element[column]?.reason) {\r\n <span\r\n (click)=\"$event.stopPropagation()\"\r\n [matMenuTriggerFor]=\"reasonMenu\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"{{\r\n columnsConfig[i].type\r\n }} fc-red underline cursor-pointer\"\r\n >\r\n Show reason\r\n </span>\r\n }\r\n\r\n <mat-menu #reasonMenu=\"matMenu\" class=\"p-4 text-center\">\r\n <span class=\"fs-14\">\r\n {{ element[column]?.reason }}\r\n </span>\r\n </mat-menu>\r\n </div>\r\n <div *ngSwitchCase=\"'toggle'\" [ngClass]=\"columnsConfig[i].type\">\r\n <mat-slide-toggle\r\n (change)=\"toggleValueChange($event, element)\"\r\n [checked]=\"element[column] == 1\"\r\n [disabled]=\"false\"\r\n ></mat-slide-toggle>\r\n </div>\r\n\r\n <div\r\n *ngSwitchCase=\"'customToggle'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n >\r\n <mat-slide-toggle\r\n (change)=\"toggleValueChange($event, element)\"\r\n [checked]=\"element[column] == 7\"\r\n [disabled]=\"element[column] != 1\"\r\n ></mat-slide-toggle>\r\n </div>\r\n <div\r\n *ngSwitchCase=\"'meetingStatus'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"{{ columnsConfig[i].type }}\"\r\n >\r\n @if (element[column].label == 'Finished') {\r\n <span class=\" {{ element[column].label }} status \">\r\n {{ element[column].label }}\r\n </span>\r\n }\r\n @if (element[column].label != 'Finished') {\r\n <div class=\"d-flex align-items-center gap-2\">\r\n <div\r\n class=\"Finished d-flex flex-column align-items-center justify-content-center py-1 fc-black\"\r\n >\r\n <span class=\"fs-11 fw-medium mb-1\">\r\n {{ element[column].hours }}</span\r\n >\r\n <span class=\"fs-10 fw-light\">HRS</span>\r\n </div>\r\n <div\r\n class=\"Finished d-flex flex-column align-items-center justify-content-center py-1 fc-black\"\r\n >\r\n <span class=\"fs-11 fw-medium mb-1\">\r\n {{ element[column].min }}</span\r\n >\r\n <span class=\"fs-10 fw-light\">MINS</span>\r\n </div>\r\n <div\r\n class=\"Finished d-flex flex-column align-items-center justify-content-center py-1 fc-black\"\r\n >\r\n <span class=\"fs-11 fw-medium mb-1\">\r\n {{ element[column].sec }}</span\r\n >\r\n <span class=\"fs-10 fw-light\">SECS</span>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n <span\r\n *ngSwitchCase=\"'number'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"{{ columnsConfig[i].type }} {{\r\n element[column] ? 'underline' : ''\r\n }}\"\r\n >\r\n {{ element[column] ? element[column] : 0 }}\r\n </span>\r\n\r\n <span\r\n *ngSwitchCase=\"'currency'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"{{ columnsConfig[i].type }}\"\r\n >\r\n {{\r\n element[column]\r\n ? parseInt(element[column]).toFixed(2) +\r\n (columnsConfig[i].currency | translate)\r\n : \"-\"\r\n }}\r\n </span>\r\n <span\r\n *ngSwitchCase=\"'active'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"{{ columnsConfig[i].type }}\"\r\n >\r\n <ds-icon\r\n [ngClass]=\"element[column] ? 'fc-green' : 'fc-gray'\"\r\n icon=\"check-circle-f fs-30\"\r\n ></ds-icon>\r\n </span>\r\n <div\r\n *ngSwitchCase=\"'sync'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"{{\r\n columnsConfig[i].type\r\n }} d-flex align-items-center gap-2\"\r\n >\r\n <svg\r\n fill=\"none\"\r\n height=\"19\"\r\n viewBox=\"0 0 18 19\"\r\n width=\"18\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M14.25 13.2604C13.9425 13.2604 13.6875 12.9913 13.6875 12.6667V5.14583C13.6875 4.59958 13.2675 4.15625 12.75 4.15625H8.625C8.3175 4.15625 8.0625 3.88708 8.0625 3.5625C8.0625 3.23792 8.3175 2.96875 8.625 2.96875H12.75C13.89 2.96875 14.8125 3.9425 14.8125 5.14583V12.6667C14.8125 12.9913 14.5575 13.2604 14.25 13.2604Z\"\r\n fill=\"#FF375E\"\r\n />\r\n <path\r\n d=\"M10.5 6.13549C10.3725 6.13549 10.245 6.088 10.14 6.00092L7.88999 4.02175C7.76249 3.91092 7.6875 3.74465 7.6875 3.56257C7.6875 3.38048 7.76249 3.22214 7.88999 3.10339L10.14 1.12422C10.38 0.910471 10.7325 0.950084 10.935 1.20342C11.1375 1.45675 11.1 1.82883 10.86 2.04258L9.12751 3.56257L10.86 5.08255C11.1 5.29631 11.13 5.66839 10.935 5.92172C10.8225 6.06422 10.6575 6.13549 10.5 6.13549Z\"\r\n fill=\"#FF375E\"\r\n />\r\n <path\r\n d=\"M14.25 18.0105C12.6975 18.0105 11.4375 16.6805 11.4375 15.0417C11.4375 13.403 12.6975 12.073 14.25 12.073C15.8025 12.073 17.0625 13.403 17.0625 15.0417C17.0625 16.6805 15.8025 18.0105 14.25 18.0105ZM14.25 13.2605C13.32 13.2605 12.5625 14.0601 12.5625 15.0417C12.5625 16.0234 13.32 16.823 14.25 16.823C15.18 16.823 15.9375 16.0234 15.9375 15.0417C15.9375 14.0601 15.18 13.2605 14.25 13.2605Z\"\r\n fill=\"#FF375E\"\r\n />\r\n <path\r\n d=\"M9.375 16.0312H5.25C4.11 16.0312 3.1875 15.0574 3.1875 13.8541V6.33325C3.1875 6.00867 3.4425 5.7395 3.75 5.7395C4.0575 5.7395 4.3125 6.00867 4.3125 6.33325V13.8541C4.3125 14.4003 4.7325 14.8437 5.25 14.8437H9.375C9.6825 14.8437 9.9375 15.1128 9.9375 15.4374C9.9375 15.762 9.6825 16.0312 9.375 16.0312Z\"\r\n fill=\"#FF375E\"\r\n />\r\n <path\r\n d=\"M7.4997 18.0104C7.3422 18.0104 7.17721 17.9391 7.06471 17.7966C6.86221 17.5433 6.89969 17.1712 7.13969 16.9574L8.87219 15.4375L7.13969 13.9175C6.89969 13.7037 6.86971 13.3316 7.06471 13.0783C7.26721 12.825 7.61971 12.7933 7.85971 12.9991L10.1097 14.9783C10.2372 15.0891 10.3122 15.2554 10.3122 15.4375C10.3122 15.6195 10.2372 15.7779 10.1097 15.8966L7.85971 17.8758C7.75471 17.9629 7.6272 18.0104 7.4997 18.0104Z\"\r\n fill=\"#FF375E\"\r\n />\r\n <path\r\n d=\"M3.75 6.927C2.1975 6.927 0.9375 5.597 0.9375 3.95825C0.9375 2.3195 2.1975 0.989502 3.75 0.989502C5.3025 0.989502 6.5625 2.3195 6.5625 3.95825C6.5625 5.597 5.3025 6.927 3.75 6.927ZM3.75 2.177C2.82 2.177 2.0625 2.97659 2.0625 3.95825C2.0625 4.93992 2.82 5.7395 3.75 5.7395C4.68 5.7395 5.4375 4.93992 5.4375 3.95825C5.4375 2.97659 4.68 2.177 3.75 2.177Z\"\r\n fill=\"#FF375E\"\r\n />\r\n </svg>\r\n {{ element[column] }}\r\n </div>\r\n\r\n <ng-container *ngSwitchCase=\"'clickable'\">\r\n @if (element?.[column]) {\r\n <span\r\n #statusMenuTrigger=\"matMenuTrigger\"\r\n (click)=\"$event.stopPropagation()\"\r\n [matMenuTriggerFor]=\"descMenu\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"{{\r\n columnsConfig[i].type\r\n }} fc-coral underline cursor-pointer\"\r\n >\r\n {{ columnsConfig[i].clickableText | translate }}\r\n </span>\r\n }\r\n\r\n <mat-menu #descMenu=\"matMenu\" class=\"p-4 text-center\">\r\n <span class=\"fs-14\">\r\n {{ element[column] }}\r\n </span>\r\n </mat-menu>\r\n </ng-container>\r\n\r\n <span\r\n #statusMenuTrigger=\"matMenuTrigger\"\r\n (click)=\"$event.stopPropagation()\"\r\n *ngSwitchCase=\"'translatedClickable'\"\r\n [matMenuTriggerFor]=\"descMenuTranslated\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"{{\r\n columnsConfig[i].type\r\n }} fc-coral underline cursor-pointer\"\r\n >\r\n {{ columnsConfig[i].clickableText | translate }}\r\n <!-- {{ 'global.view' | translate}} -->\r\n </span>\r\n\r\n <mat-menu #descMenuTranslated=\"matMenu\" class=\"p-4 text-center\">\r\n <span class=\"fs-14\">\r\n {{\r\n columnsConfig[i].arKey\r\n ? translateService.currentLang == \"ar\"\r\n ? mapText(columnsConfig[i].arKey, element[column])\r\n : mapText(columnsConfig[i].enKey, element[column])\r\n : element[column]\r\n ? element[column]\r\n : \"-\"\r\n }}\r\n </span>\r\n </mat-menu>\r\n\r\n <span\r\n #statusMenuTrigger=\"matMenuTrigger\"\r\n (click)=\"$event.stopPropagation()\"\r\n *ngSwitchCase=\"'conditionalClickable'\"\r\n [matMenuTriggerFor]=\"descConditionalMenu\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"{{\r\n columnsConfig[i].type\r\n }} fc-coral underline cursor-pointer\"\r\n >\r\n @if (element[column] && element[column] != 'null') {\r\n <span>{{ columnsConfig[i].clickableText | translate }}</span>\r\n }\r\n <!-- {{ 'global.view' | translate}} -->\r\n </span>\r\n\r\n <mat-menu\r\n #descConditionalMenu=\"matMenu\"\r\n class=\"p-4 text-center\"\r\n >\r\n <span class=\"fs-14\">\r\n {{ element[column] }}\r\n </span>\r\n </mat-menu>\r\n\r\n <span\r\n (click)=\"$event.stopPropagation()\"\r\n *ngSwitchCase=\"'dropdown'\"\r\n [matMenuTriggerFor]=\"dropdownMenu\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"{{ columnsConfig[i].type }} cursor-pointer\"\r\n >\r\n {{\r\n columnsConfig[i].arKey\r\n ? translateService.currentLang == \"ar\"\r\n ? mapText(columnsConfig[i].arKey, element[column])\r\n : mapText(columnsConfig[i].enKey, element[column])\r\n : element[column]\r\n ? element[column]\r\n : \"-\"\r\n }}\r\n <!-- <span *ngFor=\"let item of element[column]\">\r\n {{item.id}}\r\n </span> -->\r\n\r\n <ds-icon class=\"fc-black fw-medium\" icon=\"arrow\"></ds-icon>\r\n </span>\r\n\r\n <mat-menu #dropdownMenu=\"matMenu\" class=\"p-4 text-center\">\r\n <ng-container *ngSwitchCase=\"'dropdown'\">\r\n <span class=\"fs-12 fc-black\" mat-menu-item>\r\n <!-- {{translateService.currentLang == 'ar' ? item.groupNameAr : item.groupNameEn}} -->\r\n {{\r\n columnsConfig[i].arKey\r\n ? translateService.currentLang == \"ar\"\r\n ? mapText(columnsConfig[i].arKey, element[column])\r\n : mapText(columnsConfig[i].enKey, element[column])\r\n : element[column]\r\n ? element[column]\r\n : \"-\"\r\n }}\r\n </span>\r\n </ng-container>\r\n </mat-menu>\r\n\r\n <span\r\n *ngSwitchCase=\"'formatNumber'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n matTooltip=\"{{\r\n element[column] > 1000 ? element[column] : ''\r\n }}\"\r\n >\r\n {{ element[column] }}\r\n </span>\r\n\r\n <div\r\n *ngSwitchCase=\"'group'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"text-nowrap d-flex align-items-center\"\r\n ></div>\r\n\r\n <div\r\n *ngSwitchCase=\"'company'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-flex align-items-center\"\r\n >\r\n <span class=\"img-card circled-img\">\r\n <img\r\n [src]=\"element?.image\"\r\n alt=\"\"\r\n onerror=\"this.onerror=null;this.src='assets/images/user.svg';\"\r\n />\r\n </span>\r\n <span class=\"mx-1\"></span>\r\n <span class=\"full-name\">{{ element[column] }}</span>\r\n </div>\r\n\r\n <span\r\n *ngSwitchCase=\"'translated'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"text-nowrap\"\r\n >\r\n {{ element[column] }}\r\n </span>\r\n <span\r\n *ngSwitchCase=\"'title'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"text-nowrap\"\r\n >\r\n {{ element[column]?.title }}\r\n </span>\r\n\r\n <span\r\n *ngSwitchCase=\"'maxWidth'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n >\r\n {{ element[column]?.title }}\r\n </span>\r\n\r\n <span\r\n *ngSwitchCase=\"'progress'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n >\r\n <div class=\"Progress\">\r\n <div class=\"progress-container default-progress\">\r\n <div\r\n [style.width.%]=\"\r\n (element[column].consumed! / element[column].total!) *\r\n 100\r\n \"\r\n class=\"progress-bar\"\r\n ></div>\r\n </div>\r\n <div class=\"Progress__footer\">\r\n <div></div>\r\n <div>\r\n <span class=\"fs-12\">\r\n <span>{{ element[column].consumed }}</span>\r\n <span>/</span>\r\n <span class=\"fc-silver\">{{\r\n element[column].total\r\n }}</span>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </span>\r\n\r\n <div\r\n *ngSwitchCase=\"'subsidiary'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-flex align-items-center gap-2\"\r\n >\r\n <img\r\n [alt]=\"element[column]?.title\"\r\n src=\"assets/subsidiaries/ids/{{ element[column]?.id }}.png\"\r\n />\r\n <!-- <span class=\"full-name\">{{element[column]}}</span>-->\r\n </div>\r\n\r\n <div\r\n *ngSwitchCase=\"'Service'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-flex align-items-center gap-2\"\r\n >\r\n <svg\r\n fill=\"none\"\r\n height=\"35\"\r\n viewBox=\"0 0 34 35\"\r\n width=\"34\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <rect\r\n fill=\"#FF375E\"\r\n fill-opacity=\"0.1\"\r\n height=\"33.5\"\r\n rx=\"4\"\r\n width=\"33.5\"\r\n y=\"0.75\"\r\n />\r\n <path\r\n d=\"M24.213 17.0338H22.1448L21.4532 15.1884C21.2221 14.5845 20.649 14.1622 19.9761 14.1592H13.5315C12.8586 14.1622 12.2847 14.5838 12.0582 15.1771L12.0544 15.1876L11.3628 17.033H9.29312C9.05532 17.033 8.86328 17.2258 8.86328 17.4629V19.1845C8.86328 19.4223 9.05607 19.6143 9.29312 19.6143H10.2076L9.69896 20.378C9.53242 20.6233 9.4334 20.9263 9.4334 21.2519C9.4334 21.2527 9.4334 21.2527 9.4334 21.2534V26.0702C9.4334 26.308 9.62619 26.5 9.86324 26.5H12.1595C12.3973 26.5 12.5893 26.3072 12.5893 26.0702V24.7791H20.91V26.0702C20.91 26.308 21.1028 26.5 21.3399 26.5H23.6361C23.8739 26.5 24.066 26.3072 24.066 26.0702V21.2519C24.066 21.2512 24.066 21.2512 24.066 21.2504C24.066 20.9248 23.9669 20.6218 23.7974 20.3705L23.8011 20.3757L23.2925 19.6121H24.207C24.4448 19.6121 24.6368 19.4193 24.6368 19.1822V17.4606C24.6361 17.2258 24.4478 17.036 24.2145 17.0315L24.213 17.0338ZM12.8654 15.4915C12.9711 15.2176 13.2314 15.0271 13.5368 15.0264H19.9798C20.2852 15.0271 20.5455 15.2184 20.649 15.487L20.6505 15.4922L21.8747 18.7569H11.6359L12.8654 15.4915ZM23.2138 23.9202H10.2983V21.2542C10.2983 21.2534 10.2983 21.2534 10.2983 21.2527C10.2983 21.1049 10.3433 20.9676 10.4199 20.8536L10.4184 20.8558L11.245 19.6151H22.2618L23.0885 20.8558C23.1635 20.9668 23.2085 21.1049 23.2085 21.2519C23.2085 21.2527 23.2085 21.2527 23.2085 21.2534L23.2138 23.9202ZM9.72896 17.895H11.0357L10.7132 18.7561H9.72071L9.72896 17.895ZM11.7379 25.6411H10.2983V24.7799H11.7334L11.7379 25.6411ZM23.2153 25.6411H21.775V24.7799H23.21L23.2153 25.6411ZM23.7869 18.7546H22.7899L22.4674 17.8935H23.7831L23.7869 18.7546ZM12.1632 20.4762C11.2915 20.4762 10.5856 21.1829 10.5856 22.0538C10.5856 22.9248 11.2923 23.6314 12.1632 23.6314C13.0349 23.6314 13.7408 22.9248 13.7408 22.0538C13.7408 21.1821 13.0342 20.4762 12.1632 20.4762V20.4762ZM12.1632 22.7725C11.7671 22.7725 11.4461 22.4514 11.4461 22.0553C11.4461 21.6592 11.7671 21.3382 12.1632 21.3382C12.5593 21.3382 12.8804 21.6592 12.8804 22.0553C12.8804 22.4514 12.5593 22.7725 12.1632 22.7725V22.7725ZM21.3444 20.4762C20.4727 20.4762 19.7668 21.1829 19.7668 22.0538C19.7668 22.9248 20.4735 23.6314 21.3444 23.6314C22.2161 23.6314 22.922 22.9248 22.922 22.0538C22.922 21.1821 22.2153 20.4762 21.3444 20.4762ZM21.3444 22.7725C20.9483 22.7725 20.6272 22.4514 20.6272 22.0553C20.6272 21.6592 20.9483 21.3382 21.3444 21.3382C21.7405 21.3382 22.0615 21.6592 22.0615 22.0553C22.0615 22.4514 21.7405 22.7725 21.3444 22.7725ZM19.0489 21.0509H14.4579C14.2201 21.0509 14.0274 21.2437 14.0274 21.4815C14.0274 21.7193 14.2201 21.912 14.4579 21.912H19.0489C19.2867 21.912 19.4795 21.7193 19.4795 21.4815C19.4795 21.2437 19.2867 21.0509 19.0489 21.0509ZM19.0489 22.1986H14.4579C14.2201 22.1986 14.0274 22.3914 14.0274 22.6292C14.0274 22.867 14.2201 23.0598 14.4579 23.0598H19.0489C19.2867 23.0598 19.4795 22.867 19.4795 22.6292C19.4795 22.3914 19.2867 22.1986 19.0489 22.1986ZM15.2321 12.5703C15.1541 12.6484 15.1061 12.7556 15.1061 12.8742C15.1061 13.112 15.2989 13.304 15.5359 13.304C15.6544 13.304 15.7625 13.256 15.8397 13.178C16.0738 12.9439 16.3971 12.7991 16.7542 12.7991C17.1113 12.7991 17.4346 12.9439 17.6686 13.178C17.7466 13.256 17.8539 13.304 17.9724 13.304C18.2102 13.304 18.4023 13.1112 18.4023 12.8742C18.4023 12.7556 18.3543 12.6476 18.2762 12.5703C17.8862 12.181 17.3483 11.9395 16.7534 11.9395C16.1586 11.9395 15.6199 12.1803 15.2306 12.5703H15.2321ZM19.1877 12.0865C19.1884 12.0865 19.1884 12.0865 19.1892 12.0865C19.427 12.0865 19.619 11.8937 19.619 11.6567C19.619 11.5374 19.5703 11.4294 19.4915 11.3513C18.7909 10.6507 17.8224 10.2171 16.7527 10.2171C15.683 10.2171 14.7145 10.6507 14.0139 11.3513C13.9358 11.4294 13.8878 11.5366 13.8878 11.6552C13.8878 11.893 14.0806 12.085 14.3177 12.085C14.4362 12.085 14.5442 12.037 14.6215 11.959C15.1668 11.4136 15.92 11.0768 16.7519 11.0768C17.5838 11.0768 18.337 11.4136 18.8824 11.959C18.9604 12.037 19.0677 12.0857 19.1869 12.0857H19.1877V12.0865ZM13.4062 10.743C14.2637 9.88704 15.4467 9.35818 16.7542 9.35818C18.0617 9.35818 19.2447 9.88704 20.1021 10.743C20.1801 10.821 20.2874 10.869 20.4059 10.869C20.6437 10.869 20.8358 10.6762 20.8358 10.4392C20.8358 10.3206 20.7878 10.2126 20.7098 10.1353C19.6963 9.12488 18.298 8.5 16.7534 8.5C15.2089 8.5 13.8106 9.12488 12.7971 10.1353C12.7191 10.2134 12.6711 10.3206 12.6711 10.4392C12.6711 10.677 12.8639 10.869 13.1009 10.869C13.2194 10.869 13.3275 10.821 13.4047 10.743H13.4062Z\"\r\n fill=\"#FF375E\"\r\n />\r\n </svg>\r\n\r\n <span class=\"fs-12 fw-normal fc-black\">{{\r\n element?.Service.name\r\n }}</span>\r\n </div>\r\n <div\r\n *ngSwitchCase=\"'Color'\"\r\n class=\"d-flex align-items-center gap-2\"\r\n >\r\n <span\r\n [ngClass]=\"columnsConfig[i].type\"\r\n [style.background]=\"\r\n element[column]?.colorCode\r\n ? element[column]?.colorCode\r\n : element[column]\r\n \"\r\n ></span>\r\n {{ element[column].title }}\r\n </div>\r\n <div\r\n *ngSwitchCase=\"'colorBg'\"\r\n [style.background]=\"\r\n 'rgba(var(--rgb-' + element[column]?.colorName + '), 0.1)'\r\n \"\r\n class=\"d-flex align-items-center gap-2 Colorbg p-2\"\r\n >\r\n <span class=\"bc-{{ element[column]?.colorName }}\"></span>\r\n {{ element[column].title }}\r\n </div>\r\n <div\r\n *ngSwitchCase=\"'assigned'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"delegate d-flex align-items-center\"\r\n >\r\n <div class=\"img-card x-small circled-img\">\r\n <img\r\n [src]=\"element?.AssignedTo.image\"\r\n alt=\"\"\r\n onerror=\"this.onerror=null;this.src='assets/images/user.svg';\"\r\n />\r\n </div>\r\n <span class=\"mx-1\"></span>\r\n <span class=\"fs-12 fc-black\">{{\r\n element?.AssignedTo.name\r\n }}</span>\r\n <!--\r\n <span class=\"sfi sfi-close fc-coral\"></span>\r\n -->\r\n </div>\r\n\r\n <span\r\n *ngSwitchCase=\"'coloredText'\"\r\n [style.color]=\"element[column]?.['color']\"\r\n >{{\r\n element[column]?.['title']\r\n }}</span\r\n >\r\n <div\r\n *ngSwitchCase=\"'survey'\"\r\n [style.color]=\"element[column]?.['color']\"\r\n class=\"d-flex align-items-center gap-1 text-nowrap\"\r\n >\r\n <span\r\n class=\"fs-20 sfi sfi-emoji-{{(element[column]?.['title']['en'].toLowerCase()) }}\"\r\n ></span>\r\n {{ element[column]?.['title'] }}\r\n </div>\r\n\r\n <div\r\n *ngSwitchCase=\"'Satisfaction'\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"delegate d-flex gap-2 align-items-center\"\r\n >\r\n <!--\r\n <ds-icon icon=\"star-f\" class=\"fc-dark-gray\"></ds-icon>\r\n -->\r\n\r\n <span\r\n class=\"fs-12 fc-black\"\r\n >{{ element[column].percentage }}%</span\r\n >\r\n <ds-status\r\n class=\"auto-status\"\r\n size=\"small\"\r\n status=\"{{ element[column].status }}\"\r\n >\r\n <span class=\"fs-10\">\r\n {{ element[column].percentageTrend }}%\r\n </span>\r\n @if (element[column].trendStatus == 'up') {\r\n <ds-icon class=\"fs-13 mx-1 growthIcon\" icon=\"up-growth\">\r\n </ds-icon>\r\n }\r\n @if (element[column].trendStatus != 'up') {\r\n <ds-icon class=\"fs-13 mx-1 downIcon\" icon=\"down-growth\">\r\n </ds-icon>\r\n }\r\n </ds-status>\r\n </div>\r\n\r\n <ng-container *ngSwitchCase=\"'actions'\">\r\n <div class=\"d-flex justify-content-start gap-2\">\r\n <ng-container\r\n *ngIf=\"columnsConfig[i]?.actions?.length <= 6\"\r\n >\r\n <ng-container\r\n *ngFor=\"let action of columnsConfig[i]?.actions\"\r\n >\r\n <ds-button\r\n (click)=\"$event.stopPropagation()\"\r\n *ngIf=\"action.viewMode === Actions.ALLOCATE\"\r\n shape=\"outline\"\r\n size=\"small\"\r\n >\r\n <span class=\"fs-12 fc-{{ action?.actionFontColor }}\">\r\n {{ action?.actionName | translate }}\r\n </span>\r\n </ds-button>\r\n\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n *ngIf=\"action === Actions.ALLOCATE\"\r\n icon\r\n size=\"small\"\r\n >\r\n <ds-icon class=\"fs-15\" icon=\"pen\"></ds-icon>\r\n </ds-button>\r\n <ng-container\r\n *ngIf=\"\r\n action.viewMode != Actions.VIEW ||\r\n action.viewMode != Actions.COPY\r\n \"\r\n >\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n *ngIf=\"\r\n action?.action === Actions.VIEW &&\r\n !action?.isHidden\r\n \"\r\n icon\r\n size=\"small\"\r\n >\r\n <ds-icon class=\"fs-15\" icon=\"eye\"></ds-icon>\r\n </ds-button>\r\n\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n *ngIf=\"\r\n action?.action === Actions.COPY &&\r\n !action?.isHidden\r\n \"\r\n icon\r\n size=\"small\"\r\n >\r\n <ds-icon class=\"fs-15\" icon=\"files-copy\"></ds-icon>\r\n </ds-button>\r\n <!-- @if(element.hasOwnProperty('canUpdate')){\r\n <ds-button (click)=\"$event.stopPropagation();action?.onClick(element)\" icon size=\"small\"\r\n *ngIf=\"action?.action === 'edit' && !action?.isHidden && element.canUpdate == true\">\r\n <ds-icon icon=\"pen\" class=\"fs-15\"></ds-icon>\r\n </ds-button>\r\n }@else { -->\r\n\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\"\r\n *ngIf=\"\r\n action?.action === Actions.EDIT &&\r\n ![4, 7].includes(element?.contractStatus?.id)\"\r\n icon\r\n size=\"small\"\r\n >\r\n <ds-icon class=\"fs-15\" icon=\"pen\"></ds-icon>\r\n </ds-button>\r\n <!-- } -->\r\n\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n *ngIf=\"\r\n action?.action === Actions.DELETE &&\r\n !action?.isHidden &&\r\n ![4, 7].includes(element?.contractStatus?.id)\r\n \"\r\n icon\r\n size=\"small\"\r\n >\r\n <ds-icon\r\n class=\"fc-coral fs-15\"\r\n icon=\"trash\"\r\n ></ds-icon>\r\n </ds-button>\r\n\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n *ngIf=\"\r\n action?.action === Actions.DELETEPENDING &&\r\n !action?.isHidden &&\r\n element?.contractStatus?.id == 1\r\n \"\r\n icon\r\n size=\"small\"\r\n >\r\n <ds-icon\r\n class=\"fc-coral fs-15\"\r\n icon=\"trash\"\r\n ></ds-icon>\r\n </ds-button>\r\n\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n *ngIf=\"action?.action === Actions.CHART\"\r\n color=\"transparent\"\r\n size=\"small\"\r\n >\r\n <ds-icon\r\n class=\"fc-coral fs-15\"\r\n icon=\"chart-o\"\r\n ></ds-icon>\r\n </ds-button>\r\n\r\n @if (element.hasOwnProperty('canTakeAction')) {\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n size=\"small\"\r\n *ngIf=\"\r\n action?.action === Actions.APPROVE &&\r\n element.canTakeAction == true\r\n \"\r\n >\r\n <span class=\"fs-12\">\r\n {{ \"global.approve\" | translate }}\r\n </span>\r\n </ds-button>\r\n <ds-button\r\n shape=\"outline\"\r\n color=\"dark-gray\"\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n size=\"small\"\r\n *ngIf=\"\r\n action?.action === Actions.REJECT &&\r\n element.canTakeAction == true\r\n \"\r\n shape=\"outline\"\r\n >\r\n <span class=\"fs-12\">\r\n {{ \"global.reject\" | translate }}\r\n </span>\r\n </ds-button>\r\n } @else {\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n size=\"small\"\r\n *ngIf=\"action?.action === Actions.APPROVE\"\r\n >\r\n <span class=\"fs-12\">\r\n {{ \"global.approve\" | translate }}\r\n </span>\r\n </ds-button>\r\n <ds-button\r\n shape=\"outline\"\r\n color=\"dark-gray\"\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n size=\"small\"\r\n *ngIf=\"action?.action === Actions.REJECT\"\r\n shape=\"outline\"\r\n >\r\n <span class=\"fs-12\">\r\n {{ \"global.reject\" | translate }}\r\n </span>\r\n </ds-button>\r\n }\r\n\r\n <ds-button\r\n *ngIf=\"action?.action === Actions.DETAILS\"\r\n shape=\"text\"\r\n size=\"small\"\r\n >\r\n <span class=\"fs-12 underline\"> View Details </span>\r\n </ds-button>\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n *ngIf=\"\r\n action?.action === Actions.START &&\r\n element?.isFinalize\r\n \"\r\n size=\"small\"\r\n >\r\n <span class=\"fs-12\">\r\n {{ action?.actionName | translate }}\r\n </span>\r\n <ds-icon\r\n class=\"fs-16\"\r\n icon=\"media-play\"\r\n slot=\"prefix\"\r\n ></ds-icon>\r\n </ds-button>\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n *ngIf=\"action?.action === Actions.PREPARE\"\r\n color=\"light-gray\"\r\n size=\"small\"\r\n >\r\n <span class=\"fs-12 fc-black\">\r\n {{ action?.actionName | translate }}\r\n </span>\r\n <ds-icon\r\n class=\"fs-12 fc-black\"\r\n icon=\"settings\"\r\n slot=\"prefix\"\r\n ></ds-icon>\r\n </ds-button>\r\n\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n *ngIf=\"\r\n action?.action === Actions.START &&\r\n element?.isFinalize\r\n \"\r\n size=\"small\"\r\n >\r\n <span class=\"fs-12\">\r\n {{ action?.actionName | translate }}\r\n </span>\r\n <ds-icon\r\n class=\"fs-16\"\r\n icon=\"media-play\"\r\n slot=\"prefix\"\r\n ></ds-icon>\r\n </ds-button>\r\n\r\n <!-- <ds-button [color]=\"action?.actionColor\" size=\"small\"\r\n *ngIf=\"action?.action === 'customAction'\"\r\n (click)=\"$event.stopPropagation();action?.onClick(element)\" shape=\"{{action?.actionShape}}\" [class]=\"action?.actionColor\"\r\n ></ds-button> -->\r\n\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n *ngIf=\"action?.action === Actions.CUSTOMACTION\"\r\n [class]=\"action?.actionColor\"\r\n [color]=\"action?.actionColor\"\r\n shape=\"{{ action?.actionShape }}\"\r\n size=\"small\"\r\n >\r\n <span\r\n class=\"fs-12 fc-{{ action?.actionFontColor }}\"\r\n >\r\n {{ action?.actionName | translate }}\r\n </span>\r\n </ds-button>\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n *ngIf=\"\r\n action?.action === Actions.CUSTOMACTIONMANAGE &&\r\n (element.contractStatus.id == 7 ||\r\n element.contractStatus.id == 1)\r\n \"\r\n [class]=\"action?.actionColor\"\r\n [color]=\"action?.actionColor\"\r\n shape=\"{{ action?.actionShape }}\"\r\n size=\"small\"\r\n >\r\n <span\r\n class=\"fs-12 fc-{{ action?.actionFontColor }}\"\r\n >\r\n {{ action?.actionName | translate }}\r\n </span>\r\n </ds-button>\r\n\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n *ngIf=\"\r\n action?.action === Actions.CUSTOMACTIONEXTEND &&\r\n element.contractStatus.id == 7\r\n \"\r\n [class]=\"action?.actionColor\"\r\n [color]=\"action?.actionColor\"\r\n shape=\"{{ action?.actionShape }}\"\r\n size=\"small\"\r\n >\r\n <span\r\n class=\"fs-12 fc-{{ action?.actionFontColor }}\"\r\n >\r\n {{ action?.actionName | translate }}\r\n </span>\r\n </ds-button>\r\n <ds-button\r\n (click)=\"\r\n $event.stopPropagation(); action?.onClick(element)\r\n \"\r\n *ngIf=\"\r\n action?.action === Actions.CUSTOMACTIONDETAILS\r\n \"\r\n [class]=\"action?.actionColor\"\r\n [color]=\"action?.actionColor\"\r\n shape=\"{{ action?.actionShape }}\"\r\n size=\"small\"\r\n >\r\n <span\r\n class=\"fs-12 fc-{{ action?.actionFontColor }}\"\r\n >\r\n {{ action?.actionName | translate }}\r\n </span>\r\n </ds-button>\r\n <ds-status\r\n *ngIf=\"action?.action === Actions.STATUS\"\r\n [status]=\"action?.Status.status\"\r\n class=\"fs-12 statusAction w-100\"\r\n >\r\n <span class=\"fc-black\">\r\n {{ action?.Status.title | translate }}\r\n </span>\r\n </ds-status>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"columnsConfig[i]?.actions?.length > 6\">\r\n <ds-button\r\n #statusMenuTrigger=\"matMenuTrigger\"\r\n (click)=\"$event.stopPropagation()\"\r\n *ngIf=\"columnsConfig[i]?.actions?.length > 1\"\r\n [matMenuTriggerFor]=\"statusMenu\"\r\n class=\"dots\"\r\n shape=\"text\"\r\n size=\"small\"\r\n >\r\n <ds-icon\r\n class=\"fs-20 fc-dark-gray\"\r\n icon=\"dots\"\r\n ></ds-icon>\r\n </ds-button>\r\n\r\n <mat-menu #statusMenu=\"matMenu\">\r\n <button\r\n (click)=\"action?.onClick(element)\"\r\n *ngFor=\"let action of columnsConfig[i]?.actions\"\r\n mat-menu-item\r\n >\r\n <span\r\n class=\"fs-12 fc-black\"\r\n >{{ action?.actionName | translate }}\r\n </span>\r\n </button>\r\n </mat-menu>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'specs'\">\r\n @if (element?.[column]) {\r\n <span\r\n #statusMenuTrigger=\"matMenuTrigger\"\r\n (click)=\"$event.stopPropagation()\"\r\n [matMenuTriggerFor]=\"specsMenu\"\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"{{\r\n columnsConfig[i].type\r\n }} fc-coral underline cursor-pointer\"\r\n >\r\n {{ columnsConfig[i].clickableText | translate }}\r\n </span>\r\n }\r\n\r\n <mat-menu #specsMenu=\"matMenu\" class=\"p-4 text-center\">\r\n <span class=\"fs-14\">\r\n {{ element[column] }}\r\n </span>\r\n </mat-menu>\r\n </ng-container>\r\n\r\n <!--<div\r\n *ngSwitchCase=\"'specs'\" [ngClass]=\"columnsConfig[i].type\"\r\n class=\"d-flex gap-1\">\r\n {{ element[column] | json }}\r\n <ng-container *ngFor=\"let item of element[column]\">\r\n\r\n <div\r\n class=\"progress-container default-progress medium radius-0 \"\r\n matTooltip=\"Team assignment {{item.value}}%\" matTooltipPosition=\"below\">\r\n <div\r\n [style.width.%]=\"item.value\"\r\n class=\"progress-bar bg-color-{{item.color}}\"></div>\r\n </div>\r\n </ng-container>\r\n\r\n </div>-->\r\n\r\n <span\r\n *ngSwitchDefault\r\n [ngClass]=\"columnsConfig[i].type\"\r\n class=\"text-nowrap\"\r\n matTooltip=\" {{\r\n columnsConfig[i].arKey\r\n ? translateService.currentLang == 'ar'\r\n ? mapText(columnsConfig[i].arKey, element[column])\r\n : mapText(columnsConfig[i].enKey, element[column])\r\n : element[column]\r\n ? element[column]\r\n : '-'\r\n }}\"\r\n matTooltipPosition=\"below\"\r\n >\r\n {{\r\n columnsConfig[i].arKey\r\n ? translateService.currentLang == \"ar\"\r\n ? mapText(columnsConfig[i].arKey, element[column])\r\n : mapText(columnsConfig[i].enKey, element[column])\r\n : element[column]\r\n ? element[column]\r\n : \"-\"\r\n }}\r\n </span>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n </ng-container>\r\n }\r\n </ng-container>\r\n }\r\n\r\n <tr *matHeaderRowDef=\"columns; sticky: true\" mat-header-row></tr>\r\n <tr\r\n (click)=\"clickRow(row)\"\r\n *matRowDef=\"let row; columns: columns\"\r\n [ngClass]=\"{ 'selected-row': row?.fastTrackSeen === false }\"\r\n mat-row\r\n role=\"button\"\r\n ></tr>\r\n </table>\r\n }\r\n </ng-container>\r\n }\r\n @if (isLoading) {\r\n <ds-loading-table [cols]=\"columns.length\" [rows]=\"5\"></ds-loading-table>\r\n }\r\n @if (!isLoading && dataSource.filteredData?.length == 0) {\r\n <ds-message\r\n [label]=\" customMessage?? 'NoData' | translate\"\r\n type=\"emptyList\"\r\n ></ds-message>\r\n }\r\n</div>\r\n@if (dataSource.filteredData?.length && hasPaginator) {\r\n <mat-paginator\r\n #paginator\r\n (page)=\"pageChanged($event)\"\r\n [length]=\"totalElements\"\r\n [pageIndex]=\"currentPage\"\r\n [pageSizeOptions]=\"[5, 10, 15, 20, 100]\"\r\n [pageSize]=\"pageSize\"\r\n aria-label=\"Select page\"\r\n showFirstLastButtons\r\n >\r\n </mat-paginator>\r\n}\r\n", styles: [":host ::ng-deep .table-responsive table{--th-height: 32px;--th-bg: var(--purple);--th-fc: var(--white);--td-height: 75px;--td-radius: 0;--border-spacing: 0;--border-collapse: collapse;--tr-even-bc: var(--white);--tr-odd-bc: var(--white);--tr-border: 1px solid var(--light-gray);--th-border: none;--cell-pading: 0 24px;--th-fs: 11px}:host ::ng-deep .table-responsive table tr.selected-row,:host ::ng-deep .table-responsive table tr.selected-row:hover{background-color:#ecfeff;border-inline-start:3px solid var(--sea-light)}:host ::ng-deep .table-responsive table td.mat-mdc-cell.mat-mdc-table-sticky{box-shadow:-10px 0 10px #00000012}:host ::ng-deep .table-responsive table mat-form-field,:host ::ng-deep .table-responsive table .e-control,:host ::ng-deep .table-responsive table .mdc-form-field{--input-height: 35px}:host ::ng-deep .Color{width:13px;height:13px;border-radius:50%}:host ::ng-deep .Colorbg{width:fit-content;min-width:102px}:host ::ng-deep .Colorbg span{width:9px;height:9px;border-radius:50%}:host ::ng-deep span.number{color:var(--coral)}:host ::ng-deep .subsidiary img{height:22px;max-width:initial}:host ::ng-deep .sla svg{width:37px}:host ::ng-deep tr th{top:-1px!important}:host ::ng-deep ds-status.statusAction::part(base){min-height:35px;--status-width: 100%}:host ::ng-deep .dropdown{border-radius:3px;background:var(--Grays-Off-white, #f3f3f1);display:flex;height:35px;padding:10px;align-items:center;gap:5px;justify-content:center;width:fit-content}:host ::ng-deep .dropdown ds-icon span{font-weight:700}:host ::ng-deep ds-status::part(base){min-height:23px}:host ::ng-deep .Category span{border-radius:3px;width:97px;height:23px;display:flex;align-items:center;justify-content:center}:host ::ng-deep .mat-checkbox .mat-checkbox-ripple{left:calc(50% - 17px);top:calc(50% - 17px);height:30px;width:30px}:host ::ng-deep .mat-checkbox .mat-checkbox-layout .mat-checkbox-inner-container .mat-checkbox-frame{width:20px;height:20px;border-width:1px;border-style:solid;border-color:#909a9f4d}:host ::ng-deep .mat-checkbox-checked .mat-checkbox-checkmark{width:20px}:host ::ng-deep .idea a:hover{text-decoration:underline;color:var(--coral)}.paginator{width:800px}.table-container{max-height:400px;overflow:auto;scroll-behavior:smooth;transition:scroll-behavior .5s ease-in-out}@media (max-width: 768px){.table-container{max-height:65vh;height:65vh}}[dir=rtl] .table-container--btn.reRequest{transform:scaleX(-1)}@media (min-width: 1200px){.table-container--name,.table-container--date{max-width:120px}}@media (min-width: 1200px){[dir=rtl] .table-container--name{max-width:initial}}.table-container--item{display:flex;align-items:center;gap:1rem;min-height:105px;overflow:hidden;position:relative;cursor:pointer}@media (min-width: 991px){.table-container--item h4{max-width:calc(100% - 200px);display:inline-block}}.table-container--item:not(:last-child){margin-bottom:.75rem}.table-container--item ds-status::part(base){--status-width: 60px}.table-container--info span{position:relative;display:flex;align-items:center;gap:.5rem}.table-container--info span:not(:first-of-type):before{content:\"\";min-width:3px;width:3px;height:3px;border-radius:50%;background-color:var(--black)}@media (min-width: 991px){.table-container--status{position:absolute;top:1rem;right:0}}:host ::ng-deep .max-width-150{max-width:150px}:host ::ng-deep .text-align-custom{unicode-bidi:plaintext}:host ::ng-deep .table-responsive table{--th-height: var(--default-size-sm);--th-bg: var(--purple);--th-fc: var(--white);--td-height: 48px;--td-radius: 0;--border-spacing: 0;--border-collapse: collapse;--tr-even-bc: var(--off-white);--tr-odd-bc: var(--white)}:host ::ng-deep .ServiceDetails{display:inline-block;max-width:230px;white-space:normal}:host ::ng-deep .progress_group{width:100px}:host ::ng-deep .progress_group .progress-container.default-progress{min-width:25px;background-color:#cdd0d1}:host ::ng-deep .sla svg{width:36px}:host ::ng-deep .sla text{font-size:10px}:host ::ng-deep .Periority.High{color:var(--red)}:host ::ng-deep .Periority.Medium{color:var(--orange)}:host ::ng-deep .Periority.Low,:host ::ng-deep .Periority.Yes{color:var(--green)}:host ::ng-deep tr:nth-child(odd) .history,:host ::ng-deep tr:nth-child(odd) .Finished{background-color:var(--light-gray)}:host ::ng-deep tr:nth-child(2n) .history,:host ::ng-deep tr:nth-child(2n) .Finished{background-color:var(--white)}:host ::ng-deep .Finished{min-width:27px}:host ::ng-deep ds-button.coral:hover svg path{fill:var(--coral)}:host ::ng-deep .controls-tabel .mat-sort-header-container{justify-content:center!important}.dot-status{height:20px;width:20px;border-radius:50%;display:inline-block}.dot-status.red{background-color:var(--red)}.dot-status.green{background-color:var(--green)}.sticky-table{max-height:100vh}.dimCheckbox{background:var(--gray);pointer-events:none}\n"] }]
|
|
178
178
|
}], ctorParameters: () => [{ type: i1.MatDialog }, { type: i2.TranslateService }, { type: i3.FormBuilder }], propDecorators: { matTableRef: [{
|
|
179
179
|
type: ViewChild,
|
|
180
180
|
args: ['table', { read: ElementRef }]
|
|
@@ -240,4 +240,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImpor
|
|
|
240
240
|
}], rows: [{
|
|
241
241
|
type: Input
|
|
242
242
|
}] } });
|
|
243
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYnBtLWNvcmUvc3JjL2xpYi9jb21wb25lbnRzL3NoYXJlZC1jb21wb25lbnRzL3RhYmxlL3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JwbS1jb3JlL3NyYy9saWIvY29tcG9uZW50cy9zaGFyZWQtY29tcG9uZW50cy90YWJsZS90YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLHNCQUFzQixFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDNUgsT0FBTyxFQUFjLFdBQVcsRUFBYSxXQUFXLEVBQUUsbUJBQW1CLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqSCxPQUFPLEVBQUMsWUFBWSxFQUFZLE1BQU0sNkJBQTZCLENBQUM7QUFDcEUsT0FBTyxFQUFDLE9BQU8sRUFBTyxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFDTCxPQUFPLEVBQ1AsVUFBVSxFQUNWLFlBQVksRUFDWixhQUFhLEVBQ2IsZ0JBQWdCLEVBQ2hCLFlBQVksRUFDWixlQUFlLEVBQ2YsTUFBTSxFQUNOLFNBQVMsRUFDVCxRQUFRLEVBQ1Isa0JBQWtCLEVBQ25CLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUFDLGVBQWUsRUFBbUIsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RSxPQUFPLEVBQUMsWUFBWSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFdEQsT0FBTyxFQUFDLFFBQVEsRUFBWSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ2xILE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUN2RCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDckQsT0FBTyxFQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDNUUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBSTlELE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNyRCxPQUFPLEVBQUMseUJBQXlCLEVBQUUsY0FBYyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3hFLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDbEQsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQ3BELE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLDZDQUE2QyxDQUFDOzs7OztBQUVsRixNQUFNLFVBQVUsR0FBRztJQUNqQixRQUFRO0lBQ1IsWUFBWSxFQUFFLGdCQUFnQjtJQUM5QixXQUFXLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxZQUFZO0lBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLG1CQUFtQixFQUFFLFVBQVU7SUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxTQUFTO0lBQy9HLGFBQWEsRUFBRSxPQUFPLEVBQUUseUJBQXlCO0NBQ2xELENBQUE7QUFVRCxNQUFNLE9BQU8sY0FBYztJQTBDaEI7SUFDQTtJQUNDO0lBM0NxQyxXQUFXLENBQWM7SUFDeEUsT0FBTyxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hDLGlCQUFpQixDQUFhO0lBQ3JCLE9BQU8sQ0FBTTtJQUNiLE9BQU8sR0FBUSxLQUFLLENBQUM7SUFDckIsU0FBUyxHQUFRLEtBQUssQ0FBQztJQUN2QixhQUFhLENBQVU7SUFDdkIsYUFBYSxDQUFNO0lBQ25CLFFBQVEsQ0FBTTtJQUNkLE9BQU8sR0FBa0IsRUFBRSxDQUFDO0lBQzVCLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDZixhQUFhLEdBQVcsQ0FBQyxDQUFDO0lBQzFCLGNBQWMsR0FBWSxLQUFLLENBQUM7SUFDaEMsU0FBUyxHQUFXLENBQUMsQ0FBQztJQUN0QixRQUFRLEdBQVcsRUFBRSxDQUFDO0lBQ3RCLFlBQVksR0FBWSxLQUFLLENBQUM7SUFDOUIsU0FBUyxHQUFZLEtBQUssQ0FBQztJQUMxQixnQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBQzNDLFVBQVUsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBQ3JDLFVBQVUsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBQ3JDLHlCQUF5QixHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDcEQsbUJBQW1CLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztJQUM5QyxXQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztJQUN2QyxnQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFBO0lBQzFDLFVBQVUsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBQ3JDLGFBQWEsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBQ3hDLFlBQVksR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBQzFDLFVBQVUsR0FBRyxJQUFJLGtCQUFrQixFQUFPLENBQUM7SUFDMUIsU0FBUyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7SUFDbEQsWUFBWSxHQUFHLElBQUksV0FBVyxFQUFFLENBQUE7SUFDaEMsSUFBSSxHQUFXLEVBQUUsQ0FBQztJQUNsQixLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ1gsSUFBSSxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7SUFDTixPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQzdCLFdBQVcsR0FBRyxJQUFJLE9BQU8sQ0FBQztJQUN6QixZQUFZLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLFdBQVcsR0FBRyxDQUFDLENBQUM7SUFDZixVQUFVLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztJQUMvQyxJQUFJLENBQVk7SUFFaEIsWUFDUyxNQUFpQixFQUNqQixnQkFBa0MsRUFDakMsRUFBZTtRQUZoQixXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQ2pCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDakMsT0FBRSxHQUFGLEVBQUUsQ0FBYTtJQUN0QixDQUFDO0lBRUosSUFBYSxPQUFPLENBQUMsS0FBYTtRQUNoQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3pCLENBQUM7SUFBQSxDQUFDO0lBRUYsS0FBSyxDQUFNO0lBRVgsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxJQUFhLElBQUksQ0FBQyxLQUFVO1FBQzFCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUN4QixDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQWdCO1FBQzFCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUMvQixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFDbkMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBQyxDQUFDLENBQUE7SUFDOUUsQ0FBQztJQUVELGVBQWU7UUFDYixzQ0FBc0M7UUFDdEMsK0NBQStDO1FBQy9DLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDdEMsNkNBQTZDO1FBQzdDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQTtJQUNyQixDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQWU7UUFDekIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFBO0lBQ2xDLENBQUM7SUFFRCxZQUFZLENBQUMsSUFBWTtRQUN2QixJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1QsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN2QyxJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUNmLE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM3QixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxFQUFFLENBQUM7WUFDWixDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7SUFDSCxDQUFDO0lBRUQsVUFBVSxDQUFDLFNBQWU7UUFDeEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDMUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLElBQUksU0FBUyxDQUFDLFNBQVMsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUNwRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7WUFDNUIsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsT0FBTyxDQUFDLElBQVksRUFBRSxNQUFXO1FBQy9CLE9BQU8sS0FBSyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsV0FBVyxDQUFDLEdBQVcsRUFBRSxHQUFXO1FBQ2xDLE1BQU0sUUFBUSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDeEQsT0FBTyxRQUFRLENBQUE7SUFDakIsQ0FBQztJQUdELFFBQVEsQ0FBQyxHQUFRO1FBQ2YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDM0IsQ0FBQztJQUVELFdBQVcsQ0FBQyxHQUFRO1FBQ2xCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQzdCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxDQUFNLEVBQUUsT0FBYTtRQUNyQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFDLENBQUMsRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFBO0lBQ3ZDLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBR0QsUUFBUSxDQUFDLEtBQWE7UUFDcEIsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDeEIsQ0FBQztJQUVPLFlBQVk7UUFDbEIsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUM7YUFDckQsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUN2QixTQUFTLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsUUFBUSxDQUFDLEdBQVc7UUFDbEIsTUFBTSxDQUFDLElBQUksQ0FBQyxvQ0FBb0MsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRU8sYUFBYSxDQUFDLENBQU07UUFDMUIsTUFBTSxlQUFlLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUEsQ0FBQyxtQkFBbUI7UUFDakUsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQSxDQUFDLHNCQUFzQjtRQUN0RSxNQUFNLGNBQWMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLHdCQUF3QjtRQUNuRSxNQUFNLGVBQWUsR0FBRyxpQkFBaUIsR0FBRyxlQUFlLENBQUM7UUFDNUQsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQztRQUM1RSxJQUFJLHFCQUFxQixJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxHQUFHLGVBQWUsRUFBRSxDQUFDO1lBQ3BFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzVCLENBQUM7SUFDSCxDQUFDO3VHQTdKVSxjQUFjOzJGQUFkLGNBQWMscStCQUNFLFVBQVUsc0hDdER2Qyw0amxFQSsxQ0Esb3lKRC95Q1ksS0FBSyxrSEFBRSxlQUFlLDRGQUFFLElBQUksNkZBWHRDLFFBQVEsZ0dBQ1IsWUFBWSxxRkFBRSxnQkFBZ0IsK0RBQzlCLFdBQVcsd1ZBQUUsUUFBUSw2RUFBRSxVQUFVLHlEQUFFLFlBQVkscUZBQy9DLE9BQU8sK0VBQUUsUUFBUSw2Q0FBRSxjQUFjLDRLQUFFLG1CQUFtQiwwVEFBRSxVQUFVLGlSQUNsRSxPQUFPLDJRQUFFLGNBQWMsMFVBQUUsY0FBYyxxU0FBRSxXQUFXLHNJQUFFLE9BQU8sa05BQUUsZUFBZSxvSEFBRSxZQUFZLDJHQUFFLE1BQU0sdUZBQUUsU0FBUyx1R0FDL0csYUFBYSxpRkFBRSxPQUFPLG1FQUFFLHlCQUF5QiwwTUFNRyxXQUFXLHVQQUFFLGVBQWUsOERBQUUscUJBQXFCLDJGQUFFLFlBQVk7OzJGQUsxRyxjQUFjO2tCQVIxQixTQUFTOytCQUNFLFdBQVcsY0FDVCxJQUFJLFdBQ1AsQ0FBQyxLQUFLLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxxQkFBcUIsRUFBRSxZQUFZLENBQUMsV0FHN0csQ0FBQyxzQkFBc0IsQ0FBQzt1SUFHYyxXQUFXO3NCQUF6RCxTQUFTO3VCQUFDLE9BQU8sRUFBRSxFQUFDLElBQUksRUFBRSxVQUFVLEVBQUM7Z0JBRzdCLE9BQU87c0JBQWYsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDSSxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLHlCQUF5QjtzQkFBbEMsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBRWlCLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVztnQkFPYixZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0ksVUFBVTtzQkFBbkIsTUFBTTtnQkFTTSxPQUFPO3NCQUFuQixLQUFLO2dCQVVPLElBQUk7c0JBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7Rm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBWYWxpZGF0b3JzfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7TWF0RGlhbG9nfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQge01hdFBhZ2luYXRvciwgUGFnZUV2ZW50fSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xyXG5pbXBvcnQge01hdFNvcnQsIFNvcnR9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xyXG5pbXBvcnQge1xyXG4gIE1hdENlbGwsXHJcbiAgTWF0Q2VsbERlZixcclxuICBNYXRDb2x1bW5EZWYsXHJcbiAgTWF0SGVhZGVyQ2VsbCxcclxuICBNYXRIZWFkZXJDZWxsRGVmLFxyXG4gIE1hdEhlYWRlclJvdyxcclxuICBNYXRIZWFkZXJSb3dEZWYsXHJcbiAgTWF0Um93LFxyXG4gIE1hdFJvd0RlZixcclxuICBNYXRUYWJsZSxcclxuICBNYXRUYWJsZURhdGFTb3VyY2VcclxufSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XHJcbmltcG9ydCB7VHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHtkZWJvdW5jZVRpbWUsIGZyb21FdmVudCwgU3ViamVjdH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQge0RhdGVQaXBlLCBKc29uUGlwZSwgTmdDbGFzcywgTmdGb3IsIE5nSWYsIE5nU3dpdGNoLCBOZ1N3aXRjaENhc2UsIE5nU3dpdGNoRGVmYXVsdH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xyXG5pbXBvcnQge01hdENoZWNrYm94fSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3hcIjtcclxuaW1wb3J0IHtNYXRUb29sdGlwfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcFwiO1xyXG5pbXBvcnQge01hdE1lbnUsIE1hdE1lbnVJdGVtLCBNYXRNZW51VHJpZ2dlcn0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL21lbnVcIjtcclxuaW1wb3J0IHtNYXRTbGlkZVRvZ2dsZX0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL3NsaWRlLXRvZ2dsZVwiO1xyXG5pbXBvcnQge1JvdXRlckxpbmt9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuXHJcbmltcG9ydCB7QWN0aW9uTW9kZWx9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMvYWN0aW9uLmludGVyZmFjZSc7XHJcbmltcG9ydCB7bWFwVG99IGZyb20gJy4uLy4uLy4uL2hlbHBlcnMvc2hhcmVkLmhlbHBlcic7XHJcbmltcG9ydCB7Q3VzdG9tU2VhcmNoYWJsZUNvbXBvbmVudCwgSW5wdXRDb21wb25lbnR9IGZyb20gJy4uL2Zvcm0tZmllbGQnO1xyXG5pbXBvcnQge0NvbG9yc30gZnJvbSAnLi4vLi4vLi4vZW51bXMvY29sb3JzLmVudW0nO1xyXG5pbXBvcnQge0V2ZW50c30gZnJvbSAnLi4vLi4vLi4vZW51bXMvZXZlbnRzLmVudW0nO1xyXG5pbXBvcnQge0FjdGlvbnN9IGZyb20gJy4uLy4uLy4uL2VudW1zL2FjdGlvbnMuZW51bSc7XHJcbmltcG9ydCB7U2tpcExvY2F0aW9uRGlyZWN0aXZlfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmVzL3NraXAtbG9jYXRpb24uZGlyZWN0aXZlJztcclxuXHJcbmNvbnN0IG1hdE1vZHVsZXMgPSBbXHJcbiAgTWF0VGFibGUsXHJcbiAgTWF0Q29sdW1uRGVmLCBNYXRIZWFkZXJDZWxsRGVmLFxyXG4gIE1hdENoZWNrYm94LCBOZ1N3aXRjaCwgTWF0Q2VsbERlZiwgTmdTd2l0Y2hDYXNlLFxyXG4gIE5nQ2xhc3MsIERhdGVQaXBlLCBJbnB1dENvbXBvbmVudCwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgTWF0VG9vbHRpcCxcclxuICBNYXRNZW51LCBNYXRTbGlkZVRvZ2dsZSwgTWF0TWVudVRyaWdnZXIsIE1hdE1lbnVJdGVtLCBNYXRTb3J0LCBNYXRIZWFkZXJSb3dEZWYsIE1hdEhlYWRlclJvdywgTWF0Um93LCBNYXRSb3dEZWYsXHJcbiAgTWF0SGVhZGVyQ2VsbCwgTWF0Q2VsbCwgQ3VzdG9tU2VhcmNoYWJsZUNvbXBvbmVudFxyXG5dXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC10YWJsZScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbTmdGb3IsIFRyYW5zbGF0ZU1vZHVsZSwgTmdJZiwgbWF0TW9kdWxlcywgRm9ybXNNb2R1bGUsIE5nU3dpdGNoRGVmYXVsdCwgU2tpcExvY2F0aW9uRGlyZWN0aXZlLCBNYXRQYWdpbmF0b3JdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3RhYmxlLmNvbXBvbmVudC5zY3NzJyxcclxuICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQFZpZXdDaGlsZCgndGFibGUnLCB7cmVhZDogRWxlbWVudFJlZn0pIHB1YmxpYyBtYXRUYWJsZVJlZiE6IEVsZW1lbnRSZWY7XHJcbiAgY29udHJvbCA9IG5ldyBGb3JtQ29udHJvbChudWxsKTtcclxuICBzZXJ2aWNlRGV0YWlsRm9ybSE6IEZvcm1Hcm91cDtcclxuICBASW5wdXQoKSBjb2x1bW5zOiBhbnk7XHJcbiAgQElucHV0KCkgaXNFcnJvcjogYW55ID0gZmFsc2U7XHJcbiAgQElucHV0KCkgaXNMb2FkaW5nOiBhbnkgPSBmYWxzZTtcclxuICBASW5wdXQoKSBjdXN0b21NZXNzYWdlITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGNvbHVtbnNDb25maWc6IGFueTtcclxuICBASW5wdXQoKSBsb2FkRGF0YTogYW55O1xyXG4gIEBJbnB1dCgpIGFjdGlvbnM6IEFjdGlvbk1vZGVsW10gPSBbXTtcclxuICBASW5wdXQoKSBjbGFzc05hbWUgPSAnJztcclxuICBASW5wdXQoKSB0b3RhbEVsZW1lbnRzOiBudW1iZXIgPSAwO1xyXG4gIEBJbnB1dCgpIHNob3dQYWdpbmF0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcGFnZUluZGV4OiBudW1iZXIgPSAwO1xyXG4gIEBJbnB1dCgpIHBhZ2VTaXplOiBudW1iZXIgPSAxNTtcclxuICBASW5wdXQoKSBzb3J0RGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSB1c2VTY3JvbGw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBAT3V0cHV0KCkgc2VydmljZVJvd1NlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBzZWxlY3RQYWdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIHJvd0NsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgYXV0b0NvbXBsZXRlVmFsdWVTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBzZWxlY3RWYWx1ZVNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIHNvcnRDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxTb3J0PigpO1xyXG4gIEBPdXRwdXQoKSBpbnB1dENlbGxDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KClcclxuICBAT3V0cHV0KCkgcGFnZVNjcm9sbCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSB0b2dnbGVDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGV2ZW50Q2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIHB1YmxpYyBkYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZTxhbnk+KCk7XHJcbiAgQFZpZXdDaGlsZCgndGFibGVTb3J0JykgdGFibGVTb3J0ID0gbmV3IE1hdFNvcnQoKTtcclxuICBsb2NhbENvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKVxyXG4gIGxhbmc6IHN0cmluZyA9ICcnO1xyXG4gIHNwYW5zID0gW107XHJcbiAgY3RybCA9IG5ldyBGb3JtQ29udHJvbCgpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSBBY3Rpb25zID0gQWN0aW9ucztcclxuICBwcml2YXRlIHVuU3Vic2NyaWJlID0gbmV3IFN1YmplY3Q7XHJcbiAgQElucHV0KCkgaGFzUGFnaW5hdG9yID0gZmFsc2U7XHJcbiAgQElucHV0KCkgY3VycmVudFBhZ2UgPSAwO1xyXG4gIEBPdXRwdXQoKSBwYWdlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgZm9ybTogRm9ybUdyb3VwO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHB1YmxpYyB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXJcclxuICApIHt9XHJcblxyXG4gIEBJbnB1dCgpIHNldCBrZXlXb3JkKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuYXBwbHlGaWx0ZXIodmFsdWUpXHJcbiAgfTtcclxuXHJcbiAgX3Jvd3M6IGFueTtcclxuXHJcbiAgZ2V0IHJvd3MoKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLl9yb3dzO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgc2V0IHJvd3ModmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy5fcm93cyA9IHZhbHVlO1xyXG4gICAgdGhpcy5kYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZSh0aGlzLnJvd3MpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLnJvd3MpXHJcbiAgfVxyXG5cclxuICBwYWdlQ2hhbmdlZChldmVudDogUGFnZUV2ZW50KSB7XHJcbiAgICB0aGlzLnBhZ2VTaXplID0gZXZlbnQucGFnZVNpemU7XHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gZXZlbnQucGFnZUluZGV4O1xyXG4gICAgdGhpcy5wYWdlQ2hhbmdlLmVtaXQoe3BhZ2VTaXplOiB0aGlzLnBhZ2VTaXplLCBwYWdlSW5kZXg6IHRoaXMuY3VycmVudFBhZ2V9KVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgLy8gdGhpcy50YWJsZVNvcnQuZGlzYWJsZUNsZWFyID0gdHJ1ZTtcclxuICAgIC8vIHRoaXMudGFibGVTb3J0LmRpc2FibGVkID0gdGhpcy5zb3J0RGlzYWJsZWQ7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2Uuc29ydCA9IHRoaXMudGFibGVTb3J0O1xyXG4gICAgLy90aGlzLmRhdGFTb3VyY2UucGFnaW5hdG9yID0gdGhpcy5wYWdpbmF0b3I7XHJcbiAgICB0aGlzLmhhbmRsZVNjcm9sbCgpXHJcbiAgfVxyXG5cclxuICBhcHBseUZpbHRlcihrZXlXb3JkOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuZGF0YVNvdXJjZS5maWx0ZXIgPSBrZXlXb3JkXHJcbiAgfVxyXG5cclxuICB0cnVuY2F0ZU5hbWUodGV4dDogc3RyaW5nKSB7XHJcbiAgICBpZiAodGV4dCkge1xyXG4gICAgICBsZXQgY2hhcmFjdGVycyA9IHRleHQubWF0Y2goL1xcYihcXHcpL2cpO1xyXG4gICAgICBpZiAoY2hhcmFjdGVycykge1xyXG4gICAgICAgIHJldHVybiBjaGFyYWN0ZXJzLmpvaW4oJycpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiAnJztcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc29ydENoYW5nZShzb3J0U3RhdGU6IFNvcnQpIHtcclxuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGFTb3VyY2UuZGF0YS5zbGljZSgpO1xyXG4gICAgaWYgKCFzb3J0U3RhdGUuYWN0aXZlIHx8IHNvcnRTdGF0ZS5kaXJlY3Rpb24gPT09ICcnKSB7XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZGF0YTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zb3J0Q2hhbmdlZC5lbWl0KHNvcnRTdGF0ZSk7XHJcbiAgfVxyXG5cclxuICBtYXBUZXh0KHBhdGg6IHN0cmluZywgc291cmNlOiBhbnkpIHtcclxuICAgIHJldHVybiBtYXBUbyhwYXRoLCBzb3VyY2UpO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2xhQ29sb3IobWluOiBudW1iZXIsIG1heDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHNsYUNvbG9yID0gbWluID49IG1heCA/IENvbG9ycy5SRUQgOiBDb2xvcnMuR1JFRU47XHJcbiAgICByZXR1cm4gc2xhQ29sb3JcclxuICB9XHJcblxyXG5cclxuICBjbGlja1Jvdyhyb3c6IGFueSkge1xyXG4gICAgdGhpcy5yb3dDbGlja2VkLmVtaXQocm93KVxyXG4gIH1cclxuXHJcbiAgZW1pdEVsZW1lbnQocm93OiBhbnkpIHtcclxuICAgIHRoaXMuZXZlbnRDbGlja2VkLmVtaXQocm93KVxyXG4gIH1cclxuXHJcbiAgdG9nZ2xlVmFsdWVDaGFuZ2UoZTogYW55LCBlbGVtZW50PzogYW55KSB7XHJcbiAgICB0aGlzLnRvZ2dsZUNoYW5nZWQuZW1pdCh7ZSwgZWxlbWVudH0pXHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMudW5TdWJzY3JpYmUubmV4dDtcclxuICAgIHRoaXMudW5TdWJzY3JpYmUuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG5cclxuICBwYXJzZUludCh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZVNjcm9sbCgpIHtcclxuICAgIGZyb21FdmVudCh0aGlzLm1hdFRhYmxlUmVmLm5hdGl2ZUVsZW1lbnQsIEV2ZW50cy5TQ1JPTEwpXHJcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSgyMDApKVxyXG4gICAgICAuc3Vic2NyaWJlKChlOiBhbnkpID0+IHRoaXMub25UYWJsZVNjcm9sbChlKSk7XHJcbiAgfVxyXG5cclxuICB2aWV3Rm9ybSh1cmw6IHN0cmluZykge1xyXG4gICAgd2luZG93Lm9wZW4oJy9ncm91cC9pLWdhdGUvd20tYnBtL2Zvcm1zP2Zvcm1JZD0nICsgdXJsKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25UYWJsZVNjcm9sbChlOiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IHRhYmxlVmlld0hlaWdodCA9IGUudGFyZ2V0Lm9mZnNldEhlaWdodCAvLyB2aWV3cG9ydDogfjUwMHB4XHJcbiAgICBjb25zdCB0YWJsZVNjcm9sbEhlaWdodCA9IGUudGFyZ2V0LnNjcm9sbEhlaWdodCAvLyBsZW5ndGggb2YgYWxsIHRhYmxlXHJcbiAgICBjb25zdCBzY3JvbGxMb2NhdGlvbiA9IGUudGFyZ2V0LnNjcm9sbFRvcDsgLy8gaG93IGZhciB1c2VyIHNjcm9sbGVkXHJcbiAgICBjb25zdCBzY3JvbGxEb3duTGltaXQgPSB0YWJsZVNjcm9sbEhlaWdodCAtIHRhYmxlVmlld0hlaWdodDtcclxuICAgIGNvbnN0IGlzU2Nyb2xsaW5nVmVydGljYWxseSA9IGUudGFyZ2V0LnNjcm9sbEhlaWdodCA+IGUudGFyZ2V0Lm9mZnNldEhlaWdodDtcclxuICAgIGlmIChpc1Njcm9sbGluZ1ZlcnRpY2FsbHkgJiYgKHNjcm9sbExvY2F0aW9uICsgMikgPiBzY3JvbGxEb3duTGltaXQpIHtcclxuICAgICAgdGhpcy5wYWdlU2Nyb2xsLmVtaXQodHJ1ZSlcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiAjdGFibGUgY2xhc3M9XCJ0YWJsZS1jb250YWluZXIgdGFibGUtcmVzcG9uc2l2ZSBzdGlja3ktdGFibGVcIj5cclxuICBAaWYoIWlzTG9hZGluZyl7XHJcbiAgPG5nLWNvbnRhaW5lcj5cclxuICAgIEBpZihkYXRhU291cmNlLmZpbHRlcmVkRGF0YT8ubGVuZ3RoISA+IDApe1xyXG4gICAgPHRhYmxlXHJcbiAgICAgICN0YWJsZVNvcnQ9XCJtYXRTb3J0XCJcclxuICAgICAgKG1hdFNvcnRDaGFuZ2UpPVwic29ydENoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiXHJcbiAgICAgIGNsYXNzPVwicHJpbWFyeS10YWJsZSB7eyBjbGFzc05hbWUgfX1cIlxyXG4gICAgICBtYXQtdGFibGVcclxuICAgICAgbWF0U29ydFxyXG4gICAgPlxyXG4gICAgICBAZm9yKGNvbHVtbiBvZiBjb2x1bW5zOyB0cmFjayAkaW5kZXg7IGxldCBpID0kaW5kZXgpe1xyXG4gICAgICA8bmctY29udGFpbmVyPlxyXG4gICAgICAgIDwhLS0gQWRkIGEgY2hlY2sgdG8gZW5zdXJlICdjb2x1bW5zQ29uZmlnJyBhbmQgJ2NvbHVtbnNDb25maWdbaV0nIGFyZSBkZWZpbmVkIGJlZm9yZSB1c2luZyB0aGVtIC0tPlxyXG5cclxuICAgICAgICBAaWYoY29sdW1uc0NvbmZpZyAmJiBjb2x1bW5zQ29uZmlnW2ldKXtcclxuICAgICAgICA8bmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICBbbWF0Q29sdW1uRGVmXT1cImNvbHVtblwiXHJcbiAgICAgICAgICAgIFtzdGlja3lFbmRdPVwiISFjb2x1bW5zQ29uZmlnW2ldLnN0aWNreUVuZCFcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICBAaWYoIWNvbHVtbnNDb25maWdbaV0ubm90U29ydGFibGUpe1xyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDx0aFxyXG4gICAgICAgICAgICAgICAgKm1hdEhlYWRlckNlbGxEZWZcclxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3RleHQtZW5kJzogY29sdW1uc0NvbmZpZ1tpXS50eXBlID09PSAnYWN0aW9ucycgfVwiXHJcbiAgICAgICAgICAgICAgICBtYXQtaGVhZGVyLWNlbGxcclxuICAgICAgICAgICAgICAgIG1hdC1zb3J0LWhlYWRlclxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIEBpZihjb2x1bW5zQ29uZmlnW2ldLnR5cGUgIT09ICdjaGVja2JveCcgfHwgKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5zQ29uZmlnW2ldPy50eXBlISA9PSAnYWN0aW9ucycgJiZcclxuICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uc0NvbmZpZ1tpXT8uYWN0aW9ucz8ubGVuZ3RoID09PSAwKSApe1xyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgQGlmKCEoIHRoaXMuY29sdW1uc0NvbmZpZ1tpXS50eXBlID09ICdhY3Rpb25zJyAmJlxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbnNDb25maWdbaV0uYWN0aW9ucy5sZW5ndGggPT09IDApKXtcclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXgtMSBmYy17eyBjb2x1bW5zQ29uZmlnW2ldLmZvbnRDb2xvciB9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3sgY29sdW1uc0NvbmZpZ1tpXS5sYWJlbCB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIEBpZihjb2x1bW5zQ29uZmlnW2ldLnNsYU1heCl7XHJcbiAgICAgICAgICAgICAgICAgICAgPGRzLXNsYVxyXG4gICAgICAgICAgICAgICAgICAgICAgW2NhbnZhc1NjYWxlXT1cIic0MCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2lubmVyTGluZVdpZHRoXT1cIiczJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF4VmFsdWVdPVwiY29sdW1uc0NvbmZpZ1tpXS5zbGFNYXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW291dGVyTGluZUNvbG9yXT1cIidsaW1lZ3JlZW4nXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtvdXRlckxpbmVXaWR0aF09XCInMydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImNvbHVtbnNDb25maWdbaV0uc2xhVmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0YWJsZS1oZWFkZXItc2xhIG15LTFcIlxyXG4gICAgICAgICAgICAgICAgICAgID48L2RzLXNsYT5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIH0gQGlmKGNvbHVtbnNDb25maWdbaV0udHlwZSA9PSAnY2hlY2tib3gnICl7XHJcbiAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94IGNsYXNzPVwiY2hlY2tib3hcIj4gPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIH0gQGlmKGNvbHVtbnNDb25maWdbaV0ubm90U29ydGFibGUpe1xyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDx0aFxyXG4gICAgICAgICAgICAgICAgKm1hdEhlYWRlckNlbGxEZWZcclxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3RleHQtZW5kJzogY29sdW1uc0NvbmZpZ1tpXS50eXBlID09PSAnYWN0aW9ucycgfVwiXHJcbiAgICAgICAgICAgICAgICBtYXQtaGVhZGVyLWNlbGxcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXgtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGNvbHVtbnNDb25maWdbaV0ubGFiZWwgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIEBpZihjb2x1bW5zQ29uZmlnW2ldLnNsYU1heCl7XHJcbiAgICAgICAgICAgICAgICAgIDxkcy1zbGFcclxuICAgICAgICAgICAgICAgICAgICBbY2FudmFzU2NhbGVdPVwiJzUwJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2lubmVyTGluZVdpZHRoXT1cIiczJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW21heFZhbHVlXT1cImNvbHVtbnNDb25maWdbaV0uc2xhTWF4XCJcclxuICAgICAgICAgICAgICAgICAgICBbb3V0ZXJMaW5lQ29sb3JdPVwiJ2xpbWVncmVlbidcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtvdXRlckxpbmVXaWR0aF09XCInMydcIlxyXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJjb2x1bW5zQ29uZmlnW2ldLnNsYVZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRhYmxlLWhlYWRlci1zbGEgbXktMVwiXHJcbiAgICAgICAgICAgICAgICAgID48L2RzLXNsYT5cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIDx0ZCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50OyBsZXQgaiA9IGluZGV4XCIgbWF0LWNlbGw+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiY29sdW1uc0NvbmZpZ1tpXS50eXBlXCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tICAgICAgICAgICAgPGEgdGFyZ2V0PVwiX2JsYW5rXCItLT5cclxuICAgICAgICAgICAgICAgIDwhLS0gICAgICAgICAgICAgICByb3V0ZXJMaW5rPVwiL2luYm94XCIgW3F1ZXJ5UGFyYW1zXT1cInsgaWQ6IGVsZW1lbnRbY29sdW1uXSB9XCItLT5cclxuICAgICAgICAgICAgICAgIDwhLS0gICAgICAgICAgICAgICBjbGFzcz1cImZjLWJsYWNrIHRleHQtZGVjb3JhdGlvbi11bmRlcmxpbmUgZnctbWVkaXVtXCIgW25nQ2xhc3NdPVwiY29sdW1uc0NvbmZpZ1tpXS50eXBlXCIgKm5nU3dpdGNoQ2FzZT1cIidsaW5rJ1wiPi0tPlxyXG4gICAgICAgICAgICAgICAgPCEtLSAgICAgICAgICAgICAge3sgZWxlbWVudFtjb2x1bW5dIH19LS0+XHJcbiAgICAgICAgICAgICAgICA8IS0tICAgICAgICAgICAgPC9hPi0tPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInZm9ybUlkJ1wiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ2aWV3Rm9ybShlbGVtZW50W2NvbHVtbl0pXCJcclxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uc0NvbmZpZ1tpXS50eXBlXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmYy1jb3JhbCB0ZXh0LWRlY29yYXRpb24tdW5kZXJsaW5lIGZ3LW1lZGl1bVwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyBlbGVtZW50W2NvbHVtbl0gfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwhLS0gICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2xpbmsnXCJcclxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uc0NvbmZpZ1tpXS50eXBlXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmYy1ibGFjayB0ZXh0LWRlY29yYXRpb24tdW5kZXJsaW5lIGZ3LW1lZGl1bVwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIHt7IGVsZW1lbnRbY29sdW1uXSB9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPi0tPlxyXG5cclxuICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInbGlua1dpdGhJY29uJ1wiXHJcbiAgICAgICAgICAgICAgICAgIFthcHBTa2lwTG9jYXRpb25dPVwiY29sdW1uc0NvbmZpZ1tpXS5saW5rXCJcclxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uc0NvbmZpZ1tpXS50eXBlXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmYy1ibGFjayB0ZXh0LWRlY29yYXRpb24tdW5kZXJsaW5lIGZ3LW1lZGl1bVwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxkcy1pY29uXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmcy0yMCBmYy1ibGFja1wiXHJcbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cIiB7eyBjb2x1bW5zQ29uZmlnW2ldLmljb24gfX1cIlxyXG4gICAgICAgICAgICAgICAgICA+PC9kcy1pY29uPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZzLTEzIGZjLWNvcmFsIHB4LTEgdGV4dC1kZWNvcmF0aW9uLXVuZGVybGluZVwiPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFtjb2x1bW5dXHJcbiAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIid1bmRlckxpbmVXaXRoSWNvbidcIlxyXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW5zQ29uZmlnW2ldLnR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImZjLWJsYWNrIHRleHQtZGVjb3JhdGlvbi11bmRlcmxpbmUgZnctbWVkaXVtXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPGRzLWljb25cclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZzLTIwIGZjLWJsYWNrXCJcclxuICAgICAgICAgICAgICAgICAgICBpY29uPVwiIHt7IGNvbHVtbnNDb25maWdbaV0uaWNvbiB9fVwiXHJcbiAgICAgICAgICAgICAgICAgID48L2RzLWljb24+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZnMtMTMgZmMtY29yYWwgcHgtMSB0ZXh0LWRlY29yYXRpb24tdW5kZXJsaW5lXCI+e3tcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50W2NvbHVtbl1cclxuICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94XHJcbiAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInY2hlY2tib3gnXCJcclxuICAgICAgICAgICAgICAgICAgY2hlY2tlZD1cInt7IGNvbHVtbnNDb25maWdbaV0uY2hlY2tlZCB9fVwiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZD1cInt7IGNvbHVtbnNDb25maWdbaV0uZGlzYWJsZWQgfX1cIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ1NlcnZpY2VEZXRhaWxzJ1wiXHJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbHVtbnNDb25maWdbaV0udHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICB7eyBlbGVtZW50W2NvbHVtbl0gfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInZGF0ZU9ubHknXCJcclxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uc0NvbmZpZ1tpXS50eXBlXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWlubGluZS1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LW5vd3JhcFwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2ZpIHNmaS1jYWxlbmRhci1vIGZjLWNvcmFsIGZzLTE4XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICB7eyBlbGVtZW50W2NvbHVtbl0gfCBkYXRlIDogXCJNTU0gZCwgeVwiIH19XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ1NlYXJjaCdcIlxyXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW5zQ29uZmlnW2ldLnR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImQtaW5saW5lLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPGFwcC1pbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJjdHJsXCJcclxuICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NlYXJjaCBmb3IgaXRlbSAnXCJcclxuICAgICAgICAgICAgICAgICAgICBbc2hvd0xhYmVsXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIlwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibm8tcGFkZGluZyBcIlxyXG4gICAgICAgICAgICAgICAgICAgIHByZWZpeD1cInNmaS1zZWFyY2ggZnMtMTZcIlxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8L2FwcC1pbnB1dD5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInTnVtYmVyJ1wiXHJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbHVtbnNDb25maWdbaV0udHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1pbmxpbmUtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8YXBwLWlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImN0cmxcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInbnVtYmVyJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW3Nob3dMYWJlbF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm5vLXBhZGRpbmdcIlxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8L2FwcC1pbnB1dD5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInZGF0ZUZyb21UbydcIlxyXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW5zQ29uZmlnW2ldLnR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImQtaW5saW5lLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZmkgc2ZpLWNsb2NrIGZjLWNvcmFsXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm14LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBlbGVtZW50Py5kYXRlLmZyb20gfX1cclxuICAgICAgICAgICAgICAgICAgICBAaWYoZWxlbWVudD8uZGF0ZS50byl7XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj4gOiB7eyBlbGVtZW50Py5kYXRlLnRvIH19IDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInZGF0ZVRpbWUnXCJcclxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uc0NvbmZpZ1tpXS50eXBlXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWlubGluZS1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMSBmbGV4LXdyYXBcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNmaSBzZmktY2FsZW5kYXItbyBmYy1kYXJrLWdyYXkgZnMtMjBcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIHt7IGVsZW1lbnRbY29sdW1uXSB8IGRhdGUgOiBcIk1NTSBkLCB5LCBoOm1tIGFcIiB9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInc2luZ2xlVGltZU9ubHknXCJcclxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uc0NvbmZpZ1tpXS50eXBlXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWlubGluZS1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMSBmbGV4LXdyYXBcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICB7eyBlbGVtZW50W2NvbHVtbl0gfCBkYXRlIDogXCJoOm1tIGFcIiB9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPCEtLWRpcj1cImx0clwiIGFuZCB0ZXh0LWxlZnQgZm9yIEVuZ2xpc2ggdGV4dCBvbiBhciBwYWdlICAtLT5cclxuICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCIndGltZU9ubHknXCJcclxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uc0NvbmZpZ1tpXS50eXBlXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWlubGluZS1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMSBmbGV4LXdyYXAgdGV4dC1ub3dyYXAgdGV4dC1sZWZ0XCJcclxuICAgICAgICAgICAgICAgICAgZGlyPVwibHRyXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPCEtLSAgLS0+XHJcbiAgICAgICAgICAgICAgICAgIHt7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFwVGV4dChjb2x1bW5zQ29uZmlnW2ldLmZpcnN0VmFsLCBlbGVtZW50W2NvbHVtbl0pXHJcbiAgICAgICAgICAgICAgICAgICAgICB8IGRhdGUgOiBcImg6bW0gYVwiXHJcbiAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgIEBpZihtYXBUZXh0KGNvbHVtbnNDb25maWdbaV0uc2Vjb25kVmFsLCBlbGVtZW50W2NvbHVtbl0gKSl7XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgLVxyXG4gICAgICAgICAgICAgICAgICAgIHt7XHJcbiAgICAgICAgICAgICAgICAgICAgICBtYXBUZXh0KGNvbHVtbnNDb25maWdbaV0uc2Vjb25kVmFsLCBlbGVtZW50W2NvbHVtbl0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHwgZGF0ZSA6IFwiaDptbSBhXCJcclxuICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInbXVsdGlwbGVSb3dzJ1wiXHJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbHVtbnNDb25maWdbaV0udHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1pbmxpbmUtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTEgZmxleC13cmFwXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPCEtLSAgLS0+XHJcbiAgICAgICAgICAgICAgICAgIEBpZighZWxlbWVudFtjb2x1bW5dLm1vbnRobHlGaW5lRXNjYWxhdGlvbil7XHJcbiAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgZWxlbWVudFtjb2x1bW5dLmZpeGVkRmluZVZhbHVlIH19XHJcbiAgICAgICAgICAgICAgICAgICAge3sgXCJnbG9iYWwuU0FSXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIH0gQGlmKGVsZW1lbnRbY29sdW1uXS5tb250aGx5RmluZUVzY2FsYXRpb24pe1xyXG4gICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGVsZW1lbnRbY29sdW1uXS5maXJzdFRpbWVGaW5lIH19XHJcbiAgICAgICAgICAgICAgICAgICAge3sgXCJnbG9iYWwuU0FSXCIgfCB0cmFuc2xhdGUgfX0gPGJyIC8+PGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgZWxlbWVudFtjb2x1bW5dLnNlY29uZFRpbWVGaW5lIH19XHJcbiAgICAgICAgICAgICAgICAgICAge3sgXCJnbG9iYWwuU0FSXCIgfCB0cmFuc2xhdGUgfX0gPGJyIC8+PGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgZWxlbWVudFtjb2x1bW5dLnRoaXJkVGltZUZpbmUgfX1cclxuICAgICAgICAgICAgICAgICAgICB7eyBcImdsb2JhbC5TQVJcIiB8IHRyYW5zbGF0ZSB9fSA8YnIgLz48YnIgLz5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInc2xhJ1wiXHJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbHVtbnNDb25maWdbaV0udHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1pbmxpbmUtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tICAgICAgICAgICAgICA8YXBwLXNsYSBbdmFsdWVdPVwiZWxlbWVudD8uU0xBLnZhbHVlXCIgW21heFZhbHVlXT1cImVsZW1lbnQ/LlNMQS5tYXhcIiBbY2FudmFzU2NhbGVdPVwiMzhcIiAtLT5cclxuICAgICAgICAgICAgICAgICAgPCEtLSAgICAgICAgICAgICAgICBjbGFzcz1cImZvbnQtOSBmdy1tZWRpdW1cIiBbb3V0ZXJMaW5lQ29sb3JdPVwiZ2V0U2xhQ29sb3IoZWxlbWVudD8uU0xBLnZhbHVlLCBlbGVtZW50Py5TTEEubWF4KVwiPi0tPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tICAgICAgICAgICAgICA8L2FwcC1zbGE+LS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8ZHMtc2xhXHJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIub3V0ZXJMaW5lQ29sb3JdPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBnZXRTbGFDb2xvcihlbGVtZW50Py5TTEEudmFsdWUsIGVsZW1lbnQ/LlNMQS5tYXgpXHJcbiAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICBbY2FudmFzU2NhbGVdPVwiJzU1J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2lubmVyTGluZVdpZHRoXT1cIiczJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW21heFZhbHVlXT1cImVsZW1lbnQ/LlNMQT8ubWF4XCJcclxuICAgICAgICAgICAgICAgICAgICBbb3V0ZXJMaW5lV2lkdGhdPVwiJzMnXCJcclxuICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZWxlbWVudD8uU0xBPy52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgID48L2RzLXNsYT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ3NsYVByb2dyZXNzJ1wiPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tICAgICAgICAgICAgICA8bWF0LXNwLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICBAaWYoZWxlbWVudFtjb2x1bW5dPy5wZXJjZW50YWdlID49IDApe1xyXG4gICAgICAgICAgICAgICAgICA8ZHMtc2xhXHJcbiAgICAgICAgICAgICAgICAgICAgW2NhbnZhc1NjYWxlXT1cIic1NSdcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjdXN0b21WYWx1ZV09XCJlbGVtZW50W2NvbHVtbl0/LnBlcmNlbnRhZ2UgKyAnJSdcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtpbm5lckxpbmVXaWR0aF09XCInMydcIlxyXG4gICAgICAgICAgICAgICAgICAgIFttYXhWYWx1ZV09XCInMTAwJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW291dGVyTGluZUNvbG9yXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgZ2V0U2xhQ29sb3IoZWxlbWVudFtjb2x1bW5dPy5wZXJjZW50YWdlLCAxMDApXHJcbiAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICBbb3V0ZXJMaW5lV2lkdGhdPVwiJzMnXCJcclxuICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZWxlbWVudFtjb2x1bW5dPy5wZXJjZW50YWdlXCJcclxuICAgICAgICAgICAgICAgICAgPjwvZHMtc2xhPlxyXG4gICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlPk5vdCBzdGFydGVkPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInUHJpb3JpdHknXCJcclxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uc0NvbmZpZ1tpXS50eXBlXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7eyBlbGVtZW50W2NvbHVtbl0gfX1cIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICB7eyBlbGVtZW50W2NvbHVtbl0gfX1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidzZXJ2aWNlU3RhdHVzJ1wiXHJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbHVtbnNDb25maWdbaV0udHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgZWxlbWVudFtjb2x1bW5dIH19XCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJlbGVtZW50W2NvbHVtbl0gPT0gJ0ZBTFNFJyA/ICdncmVlbicgOiAncmVkJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkb3Qtc3RhdHVzXCJcclxuICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidpbWFnZSdcIlxyXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW5zQ29uZmlnW2ldLnR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImltZy1jYXJkIHRhYmxlLWltZ1wiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxpbWdcclxuICAgICAgICAgICAgICAgICAgICBbc3JjXT1cImVsZW1lbnQ/LmltYWdlXCJcclxuICAgICAgICAgICAgICAgICAgICBhbHQ9XCJcIlxyXG4gICAgICAgICAgICAgICAgICAgIG9uZXJyb3I9XCJ0aGlzLm9uZXJyb3I9bnVsbDt0aGlzLnNyYz0nYXNzZXRzL2ltYWdlcy91c2VyLnN2Zyc7XCJcclxuICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidlbXBsb3llZSdcIlxyXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW5zQ29uZmlnW2ldLnR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1ub3dyYXBcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8ZHMtYXZhdGFyXHJcbiAgICAgICAgICAgICAgICAgICAgW2ltYWdlXT1cIidodHRwczovL2lnYXRlYXBwLnN0Yy5jb20uc2EnK2VsZW1lbnRbY29sdW1uXT8uWydpbWFnZVVybCddXCJcclxuICAgICAgICAgICAgICAgICAgICBzaXplPVwieC1zbWFsbFwiXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPC9kcy1hdmF0YXI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IChlbGVtZW50W2NvbHVtbl0/LlsnbmFtZSddKSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidwcm9ncmVzc19ncm91cCdcIlxyXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW5zQ29uZmlnW2ldLnR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBnYXAtMVwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZWxlbWVudFtjb2x1bW5dXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwcm9ncmVzcy1jb250YWluZXIgZGVmYXVsdC1wcm9ncmVzcyBtZWRpdW0gcmFkaXVzLTBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIlRlYW0gYXNzaWdubWVudCB7eyBpdGVtLnZhbHVlIH19JVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249XCJiZWxvd1wiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGguJV09XCJpdGVtLnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwcm9ncmVzcy1iYXIgYmctY29sb3Ite3sgaXRlbS5jb2xvciB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICA+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInaW5wdXQnXCJcclxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uc0NvbmZpZ1tpXS50eXBlXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8YXBwLWlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cImlucHV0Q2VsbENoYW5nZWQuZW1pdCh7ZWxlbWVudCxjb2x1bW4saX0pXCJcclxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVsZW1lbnRbY29sdW1uXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW21pbl09XCIwXCJcclxuICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZWxlbWVudFtjb2x1bW5dXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInctMTAwXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCIgbm8tcGFkZGluZyB3LTEwMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJ7eyBlbGVtZW50W2NvbHVtbl0gfX1cIlxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDwvYXBwLWlucHV0PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInYXV0b0NvbXBsZXRlJ1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ3NlbGVjdCdcIlxyXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW5zQ29uZmlnW2ldLnR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIlwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxhcHAtY3VzdG9tLXNlYXJjaGFibGVcclxuICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWRWYWx1ZSk9XCJzZWxlY3RWYWx1ZVNlbGVjdGVkLmVtaXQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2lzU2VhcmNoYWJsZV09XCJjb2x1bW5zQ29uZmlnW2ldLmNvbmZpZz8uaXNTZWFyY2hhYmxlXCJcclxuICAgICAgICAgICAgICAgICAgICBba2V5XT1cImNvbHVtbnNDb25maWdbaV0/LmtleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc3BsYXllZExhYmVsXT1cImNvbHVtbnNDb25maWdbaV0/LmRpc3BsYXllZExhYmxlXCJcclxuICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJjb2x1bW5zQ29uZmlnW2ldPy5vcHRpb25zXCJcclxuICAgICAgICAgICAgICAgICAgICBbcG9zdEtleV09XCJjb2x1bW5zQ29uZmlnW2ldPy5wb3N0S2V5XCJcclxuICAgICAgICAgICAgICAgICAgICBbc2hvd0xhYmVsXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJuby1wYWRkaW5nIHctMTAwXCJcclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8L2FwcC1jdXN0b20tc2VhcmNoYWJsZT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidzdGF0dXMnXCJcclxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiJ05ldycgKyBjb2x1bW5zQ29uZmlnW2ldLnR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICBAaWYoZWxlbWVudFtjb2x1bW5dKXtcclxuICAgICAgICAgICAgICAgICAgPGRzLXN0YXR1cyBbc3RhdHVzXT1cImVsZW1lbnRbY29sdW1uXT8uc3RhdHVzXCIgY2xhc3M9XCJmcy0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGVsZW1lbnRbY29sdW1uXT8udGl0bGUgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgPC9kcy1zdGF0dXM+XHJcbiAgICAgICAgICAgICAgICAgIH0gQGlmKGVsZW1lbnRbY29sdW1uXT8ucmVhc29uKXtcclxuICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcclxuICAgICAgICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwicmVhc29uTWVudVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uc0NvbmZpZ1tpXS50eXBlXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5zQ29uZmlnW2ldLnR5cGVcclxuICAgICAgICAgICAgICAgICAgICB9fSBmYy1yZWQgdW5kZXJsaW5lIGN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIFNob3cgcmVhc29uXHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1tZW51ICNyZWFzb25NZW51PVwibWF0TWVudVwiIGNsYXNzPVwicC00IHRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmcy0xNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3sgZWxlbWVudFtjb2x1bW5dPy5yZWFzb24gfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvbWF0LW1lbnU+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIid0b2dnbGUnXCIgW25nQ2xhc3NdPVwiY29sdW1uc0NvbmZpZ1tpXS50eXBlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlXHJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVWYWx1ZUNoYW5nZSgkZXZlbnQsIGVsZW1lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJlbGVtZW50W2NvbHVtbl0gPT0gMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgPjwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidjdXN0b21Ub2dnbGUnXCJcclxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uc0NvbmZpZ1tpXS50eXBlXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGVcclxuICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZVZhbHVlQ2hhbmdlKCRldmVudCwgZWxlbWVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImVsZW1lbnRbY29sdW1uXSA9PSA3XCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZWxlbWVudFtjb2x1bW5dICE9IDFcIlxyXG4gICAgICAgICAgICAgICAgICA+PC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInbWVldGluZ1N0YXR1cydcIlxyXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW5zQ29uZmlnW2ldLnR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInt7IGNvbHVtbnNDb25maWdbaV0udHlwZSB9fVwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIEBpZihlbGVtZW50W2NvbHVtbl0ubGFiZWwgPT0gJ0ZpbmlzaGVkJyl7XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiIHt7IGVsZW1lbnRbY29sdW1uXS5sYWJlbCB9fSBzdGF0dXMgIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGVsZW1lbnRbY29sdW1uXS5sYWJlbCB9fVxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIH0gQGlmKGVsZW1lbnRbY29sdW1uXS5sYWJlbCAhPSAnRmluaXNoZWQnKXtcclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIkZpbmlzaGVkIGQtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBweS0xIGZjLWJsYWNrXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZzLTExIGZ3LW1lZGl1bSBtYi0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGVsZW1lbnRbY29sdW1uXS5ob3VycyB9fTwvc3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmcy0xMCBmdy1saWdodFwiPkhSUzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIkZpbmlzaGVkIGQtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBweS0xIGZjLWJsYWNrXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZzLTExIGZ3LW1lZGl1bSBtYi0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGVsZW1lbnRbY29sdW1uXS5taW4gfX08L3NwYW5cclxuICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZnMtMTAgZnctbGlnaHRcIj5NSU5TPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiRmluaXNoZWQgZC1mbGV4IGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHB5LTEgZmMtYmxhY2tcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZnMtMTEgZnctbWVkaXVtIG1iLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgZWxlbWVudFtjb2x1bW5dLnNlYyB9fTwvc3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmcy0xMCBmdy1saWdodFwiPlNFQ1M8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInbnVtYmVyJ1wiXHJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbHVtbnNDb25maWdbaV0udHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgY29sdW1uc0NvbmZpZ1tpXS50eXBlIH19IHt7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFtjb2x1bW5dID8gJ3VuZGVybGluZScgOiAnJ1xyXG4gICAgICAgICAgICAgICAgICB9fVwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIHt7IGVsZW1lbnRbY29sdW1uXSA/IGVsZW1lbnRbY29sdW1uXSA6IDAgfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2N1cnJlbmN5J1wiXHJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbHVtbnNDb25maWdbaV0udHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgY29sdW1uc0NvbmZpZ1tpXS50eXBlIH19XCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAge3tcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50W2NvbHVtbl1cclxuICAgICAgICAgICAgICAgICAgICAgID8gcGFyc2VJbnQoZWxlbWVudFtjb2x1bW5dKS50b0ZpeGVkKDIpICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNvbHVtbnNDb25maWdbaV0uY3VycmVuY3kgfCB0cmFuc2xhdGUpXHJcbiAgICAgICAgICAgICAgICAgICAgICA6IFwiLVwiXHJcbiAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2FjdGl2ZSdcIlxyXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW5zQ29uZmlnW2ldLnR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInt7IGNvbHVtbnNDb25maWdbaV0udHlwZSB9fVwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxkcy1pY29uXHJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZWxlbWVudFtjb2x1bW5dID8gJ2ZjLWdyZWVuJyA6ICdmYy1ncmF5J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cImNoZWNrLWNpcmNsZS1mIGZzLTMwXCJcclxuICAgICAgICAgICAgICAgICAgPjwvZHMtaWNvbj5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidzeW5jJ1wiXHJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbHVtbnNDb25maWdbaV0udHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3tcclxuICAgICAgICAgICAgICAgICAgICBjb2x1bW5zQ29uZmlnW2ldLnR5cGVcclxuICAgICAgICAgICAgICAgICAgfX0gZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxzdmdcclxuICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMTlcIlxyXG4gICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTggMTlcIlxyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMThcIlxyXG4gICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTQuMjUgMTMuMjYwNEMxMy45NDI1IDEzLjI2MDQgMTMuNjg3NSAxMi45OTEzIDEzLjY4NzUgMTIuNjY2N1Y1LjE0NTgzQzEzLjY4NzUgNC41OTk1OCAxMy4yNjc1IDQuMTU2MjUgMTIuNzUgNC4xNTYyNUg4LjYyNUM4LjMxNzUgNC4xNTYyNSA4LjA2MjUgMy44ODcwOCA4LjA2MjUgMy41NjI1QzguMDYyNSAzLjIzNzkyIDguMzE3NSAyLjk2ODc1IDguNjI1IDIuOTY4NzVIMTIuNzVDMTMuODkgMi45Njg3NSAxNC44MTI1IDMuOTQyNSAxNC44MTI1IDUuMTQ1ODNWMTIuNjY2N0MxNC44MTI1IDEyLjk5MTMgMTQuNTU3NSAxMy4yNjA0IDE0LjI1IDEzLjI2MDRaXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjRkYzNzVFXCJcclxuICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEwLjUgNi4xMzU0OUMxMC4zNzI1IDYuMTM1NDkgMTAuMjQ1IDYuMDg4IDEwLjE0IDYuMDAwOTJMNy44ODk5OSA0LjAyMTc1QzcuNzYyNDkgMy45MTA5MiA3LjY4NzUgMy43NDQ2NSA3LjY4NzUgMy41NjI1N0M3LjY4NzUgMy4zODA0OCA3Ljc2MjQ5IDMuMjIyMTQgNy44ODk5OSAzLjEwMzM5TDEwLjE0IDEuMTI0MjJDMTAuMzggMC45MTA0NzEgMTAuNzMyNSAwLjk1MDA4NCAxMC45MzUgMS4yMDM0MkMxMS4xMzc1IDEuNDU2NzUgMTEuMSAxLjgyODgzIDEwLjg2IDIuMDQyNThMOS4xMjc1MSAzLjU2MjU3TDEwLjg2IDUuMDgyNTVDMTEuMSA1LjI5NjMxIDExLjEzIDUuNjY4MzkgMTAuOTM1IDUuOTIxNzJDMTAuODIyNSA2LjA2NDIyIDEwLjY1NzUgNi4xMzU0OSAxMC41IDYuMTM1NDlaXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjRkYzNzVFXCJcclxuICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE0LjI1IDE4LjAxMDVDMTIuNjk3NSAxOC4wMTA1IDExLjQzNzUgMTYuNjgwNSAxMS40Mzc1IDE1LjA0MTdDMTEuNDM3NSAxMy40MDMgMTIuNjk3NSAxMi4wNzMgMTQuMjUgMTIuMDczQzE1LjgwMjUgMTIuMDczIDE3LjA2MjUgMTMuNDAzIDE3LjA2MjUgMTUuMDQxN0MxNy4wNjI1IDE2LjY4MDUgMTUuODAyNSAxOC4wMTA1IDE0LjI1IDE4LjAxMDVaTTE0LjI1IDEzLjI2MDVDMTMuMzIgMTMuMjYwNSAxMi41NjI1IDE0LjA2MDEgMTIuNTYyNSAxNS4wNDE3QzEyLjU2MjUgMTYuMDIzNCAxMy4zMiAxNi44MjMgMTQuMjUgMTYuODIzQzE1LjE4IDE2LjgyMyAxNS45Mzc1IDE2LjAyMzQgMTUuOTM3NSAxNS4wNDE3QzE1LjkzNzUgMTQuMDYwMSAxNS4xOCAxMy4yNjA1IDE0LjI1IDEzLjI2MDVaXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjRkYzNzVFXCJcclxuICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICBkPVwiTTkuMzc1IDE2LjAzMTJINS4yNUM0LjExIDE2LjAzMTIgMy4xODc1IDE1LjA1NzQgMy4xODc1IDEzLjg1NDFWNi4zMzMyNUMzLjE4NzUgNi4wMDg2NyAzLjQ0MjUgNS43Mzk1IDMuNzUgNS43Mzk1QzQuMDU3NSA1LjczOTUgNC4zMTI1IDYuMDA4NjcgNC4zMTI1IDYuMzMzMjVWMTMuODU0MUM0LjMxMjUgMTQuNDAwMyA0LjczMjUgMTQuODQzNyA1LjI1IDE0Ljg0MzdIOS4zNzVDOS42ODI1IDE0Ljg0MzcgOS45Mzc1IDE1LjExMjggOS45Mzc1IDE1LjQzNzRDOS45Mzc1IDE1Ljc2MiA5LjY4MjUgMTYuMDMxMiA5LjM3NSAxNi4wMzEyWlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiI0ZGMzc1RVwiXHJcbiAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgZD1cIk03LjQ5OTcgMTguMDEwNEM3LjM0MjIgMTguMDEwNCA3LjE3NzIxIDE3LjkzOTEgNy4wNjQ3MSAxNy43OTY2QzYuODYyMjEgMTcuNTQzMyA2Ljg5OTY5IDE3LjE3MTIgNy4xMzk2OSAxNi45NTc0TDguODcyMTkgMTUuNDM3NUw3LjEzOTY5IDEzLjkxNzVDNi44OTk2OSAxMy43MDM3IDYuODY5NzEgMTMuMzMxNiA3LjA2NDcxIDEzLjA3ODNDNy4yNjcyMSAxMi44MjUgNy42MTk3MSAxMi43OTMzIDcuODU5NzEgMTIuOTk5MUwxMC4xMDk3IDE0Ljk3ODNDMTAuMjM3MiAxNS4wODkxIDEwLjMxMjIgMTUuMjU1NCAxMC4zMTIyIDE1LjQzNzVDMTAuMzEyMiAxNS42MTk1IDEwLjIzNzIgMTUuNzc3OSAxMC4xMDk3IDE1Ljg5NjZMNy44NTk3MSAxNy44NzU4QzcuNzU0NzEgMTcuOTYyOSA3LjYyNzIgMTguMDEwNCA3LjQ5OTcgMTguMDEwNFpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNGRjM3NUVcIlxyXG4gICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMy43NSA2LjkyN0MyLjE5NzUgNi45MjcgMC45Mzc1IDUuNTk3IDAuOTM3NSAzLjk1ODI1QzAuOTM3NSAyLjMxOTUgMi4xOTc1IDAuOTg5NTAyIDMuNzUgMC45ODk1MDJDNS4zMDI1IDAuOTg5NTAyIDYuNTYyNSAyLjMxOTUgNi41NjI1IDMuOTU4MjVDNi41NjI1IDUuNTk3IDUuMzAyNSA2LjkyNyAzLjc1IDYuOTI3Wk0zLjc1IDIuMTc3QzIuODIgMi4xNzcgMi4wNjI1IDIuOTc2NTkgMi4wNjI1IDMuOTU4MjVDMi4wNjI1IDQuOTM5OTIgMi44MiA1LjczOTUgMy43NSA1LjczOTVDNC42OCA1LjczOTUgNS40Mzc1IDQuOTM5OTIgNS40Mzc1IDMuOTU4MjVDNS40Mzc1IDIuOTc2NTkgNC42OCAyLjE3NyAzLjc1IDIuMTc3WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiI0ZGMzc1RVwiXHJcbiAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgIHt7IGVsZW1lbnRbY29sdW1uXSB9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2NsaWNrYWJsZSdcIj5cclxuICAgICAgICAgICAgICAgICAgQGlmKGVsZW1lbnQ/Lltjb2x1bW5dKXtcclxuICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAjc3RhdHVzTWVudVRyaWdnZXI9XCJtYXRNZW51VHJpZ2dlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW21hdE1lbnVUcmlnZ2VyRm9yXT1cImRlc2NNZW51XCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW5zQ29uZmlnW2ldLnR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3tcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnNDb25maWdbaV0udHlwZVxyXG4gICAgICAgICAgICAgICAgICAgIH19IGZjLWNvcmFsIHVuZGVybGluZSBjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICB7eyBjb2x1bW5zQ29uZmlnW2ldLmNsaWNrYWJsZVRleHQgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICA8bWF0LW1lbnUgI2Rlc2NNZW51PVwibWF0TWVudVwiIGNsYXNzPVwicC00IHRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmcy0xNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3sgZWxlbWVudFtjb2x1bW5dIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L21hdC1tZW51PlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgI3N0YXR1c01lbnVUcmlnZ2VyPVwibWF0TWVudVRyaWdnZXJcIlxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcclxuICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIid0cmFuc2xhdGVkQ2xpY2thYmxlJ1wiXHJcbiAgICAgICAgICAgICAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJkZXNjTWVudVRyYW5zbGF0ZWRcIlxyXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW5zQ29uZmlnW2ldLnR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInt7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uc0NvbmZpZ1tpXS50eXBlXHJcbiAgICAgICAgICAgICAgICAgIH19IGZjLWNvcmFsIHVuZGVybGluZSBjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIHt7IGNvbHVtbnNDb25maWdbaV0uY2xpY2thYmxlVGV4dCB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICA8IS0tIHt7ICdnbG9iYWwudmlldycgfCB0cmFuc2xhdGV9fSAtLT5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICA8bWF0LW1lbnUgI2Rlc2NNZW51VHJhbnNsYXRlZD1cIm1hdE1lbnVcIiBjbGFzcz1cInAtNCB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZzLTE0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3tcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnNDb25maWdbaV0uYXJLZXlcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0cmFuc2xhdGVTZXJ2aWNlLmN1cnJlbnRMYW5nID09IFwiYXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gbWFwVGV4dChjb2x1bW5zQ29uZmlnW2ldLmFyS2V5LCBlbGVtZW50W2NvbHVtbl0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBtYXBUZXh0KGNvbHVtbnNDb25maWdbaV0uZW5LZXksIGVsZW1lbnRbY29sdW1uXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBlbGVtZW50W2NvbHVtbl1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBlbGVtZW50W2NvbHVtbl1cclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBcIi1cIlxyXG4gICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LW1lbnU+XHJcblxyXG4gICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgI3N0YXR1c01lbnVUcmlnZ2VyPVwibWF0TWVudVRyaWdnZXJcIlxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcclxuICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidjb25kaXRpb25hbENsaWNrYWJsZSdcIlxyXG4gICAgICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwiZGVzY0NvbmRpdGlvbmFsTWVudVwiXHJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbHVtbnNDb25maWdbaV0udHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3tcclxuICAgICAgICAgICAgICAgICAgICBjb2x1bW5zQ29uZmlnW2ldLnR5cGVcclxuICAgICAgICAgICAgICAgICAgfX0gZmMtY29yYWwgdW5kZXJsaW5lIGN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgQGlmKGVsZW1lbnRbY29sdW1uXSAmJiBlbGVtZW50W2NvbHVtbl0gIT0gJ251bGwnKXtcclxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgY29sdW1uc0NvbmZpZ1tpXS5jbGlja2FibGVUZXh0IHwgdHJhbnNsYXRlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0ge3sgJ2dsb2JhbC52aWV3JyB8IHRyYW5zbGF0ZX19IC0tPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICAgIDxtYXQtbWVudVxyXG4gICAgICAgICAgICAgICAgICAjZGVzY0NvbmRpdGlvbmFsTWVudT1cIm1hdE1lbnVcIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInAtNCB0ZXh0LWNlbnRlclwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZnMtMTRcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBlbGVtZW50W2NvbHVtbl0gfX1cclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtbWVudT5cclxuXHJcbiAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcclxuICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidkcm9wZG93bidcIlxyXG4gICAgICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwiZHJvcGRvd25NZW51XCJcclxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uc0NvbmZpZ1tpXS50eXBlXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7eyBjb2x1bW5zQ29uZmlnW2ldLnR5cGUgfX0gICBjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIHt7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uc0NvbmZpZ1tpXS5hcktleVxyXG4gICAgICAgICAgICAgICAgICAgICAgPyB0cmFuc2xhdGVTZXJ2aWNlLmN1cnJlbnRMYW5nID09IFwiYXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IG1hcFRleHQoY29sdW1uc0NvbmZpZ1tpXS5hcktleSwgZWxlbWVudFtjb2x1bW5dKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG1hcFRleHQoY29sdW1uc0NvbmZpZ1tpXS5lbktleSwgZWxlbWVudFtjb2x1bW5dKVxyXG4gICAgICAgICAgICAgICAgICAgICAgOiBlbGVtZW50W2NvbHVtbl1cclxuICAgICAgICAgICAgICAgICAgICAgID8gZWxlbWVudFtjb2x1bW5dXHJcbiAgICAgICAgICAgICAgICAgICAgICA6IFwiLVwiXHJcbiAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gPHNwYW4gKm5nRm9yPVwibGV0IGl0ZW0gb2YgIGVsZW1lbnRbY29sdW1uXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtLmlkfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+IC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgPGRzLWljb24gY2xhc3M9XCJmYy1ibGFjayBmdy1tZWRpdW1cIiBpY29uPVwiYXJyb3dcIj48L2RzLWljb24+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgPG1hdC1tZW51ICNkcm9wZG93bk1lbnU9XCJtYXRNZW51XCIgY2xhc3M9XCJwLTQgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2Ryb3Bkb3duJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZnMtMTIgZmMtYmxhY2tcIiBtYXQtbWVudS1pdGVtPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPCEtLSB7e3RyYW5zbGF0ZVNlcnZpY2UuY3VycmVudExhbmcgPT0gJ2FyJyA/IGl0ZW0uZ3JvdXBOYW1lQXIgOiBpdGVtLmdyb3VwTmFtZUVufX0gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5zQ29uZmlnW2ldLmFyS2V5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0cmFuc2xhdGVTZXJ2aWNlLmN1cnJlbnRMYW5nID09IFwiYXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBtYXBUZXh0KGNvbHVtbnNDb25maWdbaV0uYXJLZXksIGVsZW1lbnRbY29sdW1uXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbWFwVGV4dChjb2x1bW5zQ29uZmlnW2ldLmVuS2V5LCBlbGVtZW50W2NvbHVtbl0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBlbGVtZW50W2NvbHVtbl1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IGVsZW1lbnRbY29sdW1uXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogXCItXCJcclxuICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LW1lbnU+XHJcblxyXG4gICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidmb3JtYXROdW1iZXInXCJcclxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uc0NvbmZpZ1tpXS50eXBlXCJcclxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cInt7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFtjb2x1bW5dID4gMTAwMCA/IGVsZW1lbnRbY29sdW1uXSA6ICcnXHJcbiAgICAgICAgICAgICAgICAgIH19XCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAge3sgZWxlbWVudFtjb2x1bW5dIH19XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2dyb3VwJ1wiXHJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbHVtbnNDb25maWdbaV0udHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1ub3dyYXAgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiXHJcbiAgICAgICAgICAgICAgICA+PC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2NvbXBhbnknXCJcclxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uc0NvbmZpZ1tpXS50eXBlXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbWctY2FyZCBjaXJjbGVkLWltZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbWdcclxuICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwiZWxlbWVudD8uaW1hZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgYWx0PVwiXCJcclxuICAgICAgICAgICAgICAgICAgICAgIG9uZXJyb3I9XCJ0aGlzLm9uZXJyb3I9bnVsbDt0aGlzLnNyYz0nYXNzZXRzL2ltYWdlcy91c2VyLnN2Zyc7XCJcclxuICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXgtMVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmdWxsLW5hbWVcIj57eyBlbGVtZW50W2NvbHVtbl0gfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ3RyYW5zbGF0ZWQnXCJcclxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uc0NvbmZpZ1tpXS50eXBlXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LW5vd3JhcFwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIHt7IGVsZW1lbnRbY29sdW1uXSB9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIid0aXRsZSdcIlxyXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW5zQ29uZmlnW2ldLnR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtbm93cmFwXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAge3sgZWxlbWVudFtjb2x1bW5dPy50aXRsZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInbWF4V2lkdGgnXCJcclxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uc0NvbmZpZ1tpXS50eXBlXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAge3sgZWxlbWVudFtjb2x1bW5dPy50aXRsZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCIncHJvZ3Jlc3MnXCJcclxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uc0NvbmZpZ1tpXS50eXBlXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlByb2dyZXNzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWNvbnRhaW5lciBkZWZhdWx0LXByb2dyZXNzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aC4lXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChlbGVtZW50W2NvbHVtbl0uY29uc3VtZWQhIC8gZWxlbWVudFtjb2x1bW5dLnRvdGFsISkgKlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDEwMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInByb2dyZXNzLWJhclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICA+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlByb2dyZXNzX19mb290ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXY+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZzLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgZWxlbWVudFtjb2x1bW5dLmNvbnN1bWVkIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPi88L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYy1zaWx2ZXJcIj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudFtjb2x1bW5dLnRvdGFsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInc3Vic2lkaWFyeSdcIlxyXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW5zQ29uZmlnW2ldLnR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8aW1nXHJcbiAgICAgICAgICAgICAgICAgICAgW2FsdF09XCJlbGVtZW50W2NvbHVtbl0/LnRpdGxlXCJcclxuICAgICAgICAgICAgICAgICAgICBzcmM9XCJhc3NldHMvc3Vic2lkaWFyaWVzL2lkcy97eyBlbGVtZW50W2NvbHVtbl0/LmlkIH19LnBuZ1wiXHJcbiAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZnVsbC1uYW1lXCI+e3tlbGVtZW50W2NvbHVtbl19fTwvc3Bhbj4tLT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidTZXJ2aWNlJ1wiXHJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbHVtbnNDb25maWdbaV0udHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxzdmdcclxuICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMzVcIlxyXG4gICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMzQgMzVcIlxyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMzRcIlxyXG4gICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPHJlY3RcclxuICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjRkYzNzVFXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGZpbGwtb3BhY2l0eT1cIjAuMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIzMy41XCJcclxuICAgICAgICAgICAgICAgICAgICAgIHJ4PVwiNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjMzLjVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgeT1cIjAuNzVcIlxyXG4gICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMjQuMjEzIDE3LjAzMzhIMjIuMTQ0OEwyMS40NTMyIDE1LjE4ODRDMjEuMjIyMSAxNC41ODQ1IDIwLjY0OSAxNC4xNjIyIDE5Ljk3NjEgMTQuMTU5MkgxMy41MzE1QzEyLjg1ODYgMTQuMTYyMiAxMi4yODQ3IDE0LjU4MzggMTIuMDU4MiAxNS4xNzcxTDEyLjA1NDQgMTUuMTg3NkwxMS4zNjI4IDE3LjAzM0g5LjI5MzEyQzkuMDU1MzIgMTcuMDMzIDguODYzMjggMTcuMjI1OCA4Ljg2MzI4IDE3LjQ2MjlWMTkuMTg0NUM4Ljg2MzI4IDE5LjQyMjMgOS4wNTYwNyAxOS42MTQzIDkuMjkzMTIgMTkuNjE0M0gxMC4yMDc2TDkuNjk4OTYgMjAuMzc4QzkuNTMyNDIgMjAuNjIzMyA5LjQzMzQgMjAuOTI2MyA5LjQzMzQgMjEuMjUxOUM5LjQzMzQgMjEuMjUyNyA5LjQzMzQgMjEuMjUyNyA5LjQzMzQgMjEuMjUzNFYyNi4wNzAyQzkuNDMzNCAyNi4zMDggOS42MjYxOSAyNi41IDkuODYzMjQgMjYuNUgxMi4xNTk1QzEyLjM5NzMgMjYuNSAxMi41ODkzIDI2LjMwNzIgMTIuNTg5MyAyNi4wNzAyVjI0Ljc3OTFIMjAuOTFWMjYuMDcwMkMyMC45MSAyNi4zMDggMjEuMTAyOCAyNi41IDIxLjMzOTkgMjYuNUgyMy42MzYxQzIzLjg3MzkgMjYuNSAyNC4wNjYgMjYuMzA3MiAyNC4wNjYgMjYuMDcwMlYyMS4yNTE5QzI0LjA2NiAyMS4yNTEyIDI0LjA2NiAyMS4yNTEyIDI0LjA2NiAyMS4yNTA0QzI0LjA2NiAyMC45MjQ4IDIzLjk2NjkgMjAuNjIxOCAyMy43OTc0IDIwLjM3MDVMMjMuODAxMSAyMC4zNzU3TDIzLjI5MjUgMTkuNjEyMUgyNC4yMDdDMjQuNDQ0OCAxOS42MTIxIDI0LjYzNjggMTkuNDE5MyAyNC42MzY4IDE5LjE4MjJWMTcuNDYwNkMyNC42MzYxIDE3LjIyNTggMjQuNDQ3OCAxNy4wMzYgMjQuMjE0NSAxNy4wMzE1TDI0LjIxMyAxNy4wMzM4Wk0xMi44NjU0IDE1LjQ5MTVDMTIuOTcxMSAxNS4yMTc2IDEzLjIzMTQgMTUuMDI3MSAxMy41MzY4IDE1LjAyNjRIMTkuOTc5OEMyMC4yODUyIDE1LjAyNzEgMjAuNTQ1NSAxNS4yMTg0IDIwLjY0OSAxNS40ODdMMjAuNjUwNSAxNS40OTIyTDIxLjg3NDcgMTguNzU2OUgxMS42MzU5TDEyLjg2NTQgMTUuNDkxNVpNMjMuMjEzOCAyMy45MjAySDEwLjI5ODNWMjEuMjU0MkMxMC4yOTgzIDIxLjI1MzQgMTAuMjk4MyAyMS4yNTM0IDEwLjI5ODMgMjEuMjUyN0MxMC4yOTgzIDIxLjEwNDkgMTAuMzQzMyAyMC45Njc2IDEwLjQxOTkgMjAuODUzNkwxMC40MTg0IDIwLjg1NThMMTEuMjQ1IDE5LjYxNTFIMjIuMjYxOEwyMy4wODg1IDIwLjg1NThDMjMuMTYzNSAyMC45NjY4IDIzLjIwODUgMjEuMTA0OSAyMy4yMDg1IDIxLjI1MTlDMjMuMjA4NSAyMS4yNTI3IDIzLjIwODUgMjEuMjUyNyAyMy4yMDg1IDIxLjI1MzRMMjMuMjEzOCAyMy45MjAyWk05LjcyODk2IDE3Ljg5NUgxMS4wMzU3TDEwLjcxMzIgMTguNzU2MUg5LjcyMDcxTDkuNzI4OTYgMTcuODk1Wk0xMS43Mzc5IDI1LjY0MTFIMTAuMjk4M1YyNC43Nzk5SDExLjczMzRMMTEuNzM3OSAyNS42NDExWk0yMy4yMTUzIDI1LjY0MTFIMjEuNzc1VjI0Ljc3OTlIMjMuMjFMMjMuMjE1MyAyNS42NDExWk0yMy43ODY5IDE4Ljc1NDZIMjIuNzg5OUwyMi40Njc0IDE3Ljg5MzVIMjMuNzgzMUwyMy43ODY5IDE4Ljc1NDZaTTEyLjE2MzIgMjAuNDc2MkMxMS4yOTE1IDIwLjQ3NjIgMTAuNTg1NiAyMS4xODI5IDEwLjU4NTYgMjIuMDUzOEMxMC41ODU2IDIyLjkyNDggMTEuMjkyMyAyMy42MzE0IDEyLjE2MzIgMjMuNjMxNEMxMy4wMzQ5IDIzLjYzMTQgMTMuNzQwOCAyMi45MjQ4IDEzLjc0MDggMjIuMDUzOEMxMy43NDA4IDIxLjE4MjEgMTMuMDM0MiAyMC40NzYyIDEyLjE2MzIgMjAuNDc2MlYyMC40NzYyWk0xMi4xNjMyIDIyLjc3MjVDMTEuNzY3MSAyMi43NzI1IDExLjQ0NjEgMjIuNDUxNCAxMS40NDYxIDIyLjA1NTNDMTEuNDQ2MSAyMS42NTkyIDExLjc2NzEgMjEuMzM4MiAxMi4xNjMyIDIxLjMzODJDMTIuNTU5MyAyMS4zMzgyIDEyLjg4MDQgMjEuNjU5MiAxMi44ODA0IDIyLjA1NTNDMTIuODgwNCAyMi40NTE0IDEyLjU1OTMgMjIuNzcyNSAxMi4xNjMyIDIyLjc3MjVWMjIuNzcyNVpNMjEuMzQ0NCAyMC40NzYyQzIwLjQ3MjcgMjAuNDc2MiAxOS43NjY4IDIxLjE4MjkgMTkuNzY2OCAyMi4wNTM4QzE5Ljc2NjggMjIuOTI0OCAyMC40NzM1IDIzLjYzMTQgMjEuMzQ0NCAyMy42MzE0QzIyLjIxNjEgMjMuNjMxNCAyMi45MjIgMjIuOTI0OCAyMi45MjIgMjIuMDUzOEMyMi45MjIgMjEuMTgyMSAyMi4yMTUzIDIwLjQ3NjIgMjEuMzQ0NCAyMC40NzYyWk0yMS4zNDQ0IDIyLjc3MjVDMjAuOTQ4MyAyMi43NzI1IDIwLjYyNzIgMjIuNDUxNCAyMC42MjcyIDIyLjA1NTNDMjAuNjI3MiAyMS42NTkyIDIwLjk0ODMgMjEuMzM4MiAyMS4zNDQ0IDIxLjMzODJDMjEuNzQwNSAyMS4zMzgyIDIyLjA2MTUgMjEuNjU5MiAyMi4wNjE1IDIyLjA1NTNDMjIuMDYxNSAyMi40NTE0IDIxLjc0MDUgMjIuNzcyNSAyMS4zNDQ0IDIyLjc3MjVaTTE5LjA0ODkgMjEuMDUwOUgxNC40NTc5QzE0LjIyMDEgMjEuMDUwOSAxNC4wMjc0IDIxLjI0MzcgMTQuMDI3NCAyMS40ODE1QzE0LjAyNzQgMjEuNzE5MyAxNC4yMjAxIDIxLjkxMiAxNC40NTc5IDIxLjkxMkgxOS4wNDg5QzE5LjI4NjcgMjEuOTEyIDE5LjQ3OTUgMjEuNzE5MyAxOS40Nzk1IDIxLjQ4MTVDMTkuNDc5NSAyMS4yNDM3IDE5LjI4NjcgMjEuMDUwOSAxOS4wNDg5IDIxLjA1MDlaTTE5LjA0ODkgMjIuMTk4NkgxNC40NTc5QzE0LjIyMDEgMjIuMTk4NiAxNC4wMjc0IDIyLjM5MTQgMTQuMDI3NCAyMi42MjkyQzE0LjAyNzQgMjIuODY3IDE0LjIyMDEgMjMuMDU5OCAxNC40NTc5IDIzLjA1OThIMTkuMDQ4OUMxOS4yODY3IDIzLjA1OTggMTkuNDc5NSAyMi44NjcgMTkuNDc5NSAyMi42MjkyQzE5LjQ3OTUgMjIuMzkxNCAxOS4yODY3IDIyLjE5ODYgMTkuMDQ4OSAyMi4xOTg2Wk0xNS4yMzIxIDEyLjU3MDNDMTUuMTU0MSAxMi42NDg0IDE1LjEwNjEgMTIuNzU1NiAxNS4xMDYxIDEyLjg3NDJDMTUuMTA2MSAxMy4xMTIgMTUuMjk4OSAxMy4zMDQgMTUuNTM1OSAxMy4zMDRDMTUuNjU0NCAxMy4zMDQgMTUuNzYyNSAxMy4yNTYgMTUuODM5NyAxMy4xNzhDMTYuMDczOCAxMi45NDM5IDE2LjM5NzEgMTIuNzk5MSAxNi43NTQyIDEyLjc5OTFDMTcuMTExMyAxMi43OTkxIDE3LjQzNDYgMTIuOTQzOSAxNy42Njg2IDEzLjE3OEMxNy43NDY2IDEzLjI1NiAxNy44NTM5IDEzLjMwNCAxNy45NzI0IDEzLjMwNEMxOC4yMTAyIDEzLjMwNCAxOC40MDIzIDEzLjExMTIgMTguNDAyMyAxMi44NzQyQzE4LjQwMjMgMTIuNzU1NiAxOC4zNTQzIDEyLjY0NzYgMTguMjc2MiAxMi41NzAzQzE3Ljg4NjIgMTIuMTgxIDE3LjM0ODMgMTEuOTM5NSAxNi43NTM0IDExLjkzOTVDMTYuMTU4NiAxMS45Mzk1IDE1LjYxOTkgMTIuMTgwMyAxNS4yMzA2IDEyLjU3MDNIMTUuMjMyMVpNMTkuMTg3NyAxMi4wODY1QzE5LjE4ODQgMTIuMDg2NSAxOS4xODg0IDEyLjA4NjUgMTkuMTg5MiAxMi4wODY1QzE5LjQyNyAxMi4wODY1IDE5LjYxOSAxMS44OTM3IDE5LjYxOSAxMS42NTY3QzE5LjYxOSAxMS41Mzc0IDE5LjU3MDMgMTEuNDI5NCAxOS40OTE1IDExLjM1MTNDMTguNzkwOSAxMC42NTA3IDE3LjgyMjQgMTAuMjE3MSAxNi43NTI3IDEwLjIxNzFDMTUuNjgzIDEwLjIxNzEgMTQuNzE0NSAxMC42NTA3IDE0LjAxMzkgMTEuMzUxM0MxMy45MzU4IDExLjQyOTQgMTMuODg3OCAxMS41MzY2IDEzLjg4NzggMTEuNjU1MkMxMy44ODc4IDExLjg5MyAxNC4wODA2IDEyLjA4NSAxNC4zMTc3IDEyLjA4NUMxNC40MzYyIDEyLjA4NSAxNC41NDQyIDEyLjAzNyAxNC42MjE1IDExLjk1OUMxNS4xNjY4IDExLjQxMzYgMTUuOTIgMTEuMDc2OCAxNi43NTE5IDExLjA3NjhDMTcuNTgzOCAxMS4wNzY4IDE4LjMzNyAxMS40MTM2IDE4Ljg4MjQgMTEuOTU5QzE4Ljk2MDQgMTIuMDM3IDE5LjA2NzcgMTIuMDg1NyAxOS4xODY5IDEyLjA4NTdIMTkuMTg3N1YxMi4wODY1Wk0xMy40MDYyIDEwLjc0M0MxNC4yNjM3IDkuODg3MDQgMTUuNDQ2NyA5LjM1ODE4IDE2Ljc1NDIgOS4zNTgxOEMxOC4wNjE3IDkuMzU4MTggMTkuMjQ0NyA5Ljg4NzA0IDIwLjEwMjEgMTAuNzQzQzIwLjE4MDEgMTAuODIxIDIwLjI4NzQgMTAuODY5IDIwLjQwNTkgMTAuODY5QzIwLjY0MzcgMTAuODY5IDIwLjgzNTggMTAuNjc2MiAyMC44MzU4IDEwLjQzOTJDMjAuODM1OCAxMC4zMjA2IDIwLjc4NzggMTAuMjEyNiAyMC43MDk4IDEwLjEzNTNDMTkuNjk2MyA5LjEyNDg4IDE4LjI5OCA4LjUgMTYuNzUzNCA4LjVDMTUuMjA4OSA4LjUgMTMuODEwNiA5LjEyNDg4IDEyLjc5NzEgMTAuMTM1M0MxMi43MTkxIDEwLjIxMzQgMTIuNjcxMSAxMC4zMjA2IDEyLjY3MTEgMTAuNDM5MkMxMi42NzExIDEwLjY3NyAxMi44NjM5IDEwLjg2OSAxMy4xMDA5IDEwLjg2OUMxMy4yMTk0IDEwLjg2OSAxMy4zMjc1IDEwLjgyMSAxMy40MDQ3IDEwLjc0M0gxMy40MDYyWlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiI0ZGMzc1RVwiXHJcbiAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZzLTEyIGZ3LW5vcm1hbCBmYy1ibGFja1wiPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudD8uU2VydmljZS5uYW1lXHJcbiAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInQ29sb3InXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW5zQ29uZmlnW2ldLnR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgZWxlbWVudFtjb2x1bW5dPy5jb2xvckNvZGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBlbGVtZW50W2NvbHVtbl0/LmNvbG9yQ29kZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGVsZW1lbnRbY29sdW1uXVxyXG4gICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgID48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIHt7IGVsZW1lbnRbY29sdW1uXS50aXRsZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInY29sb3JCZydcIlxyXG4gICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZF09XCJcclxuICAgICAgICAgICAgICAgICAgICAncmdiYSh2YXIoLS1yZ2ItJyArIGVsZW1lbnRbY29sdW1uXT8uY29sb3JOYW1lICsgJyksIDAuMSknXHJcbiAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBDb2xvcmJnIHAtMlwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmMte3sgZWxlbWVudFtjb2x1bW5dPy5jb2xvck5hbWUgfX1cIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIHt7IGVsZW1lbnRbY29sdW1uXS50aXRsZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInYXNzaWduZWQnXCJcclxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uc0NvbmZpZ1tpXS50eXBlXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkZWxlZ2F0ZSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltZy1jYXJkIHgtc21hbGwgY2lyY2xlZC1pbWdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW1nXHJcbiAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cImVsZW1lbnQ/LkFzc2lnbmVkVG8uaW1hZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgYWx0PVwiXCJcclxuICAgICAgICAgICAgICAgICAgICAgIG9uZXJyb3I9XCJ0aGlzLm9uZXJyb3I9bnVsbDt0aGlzLnNyYz0nYXNzZXRzL2ltYWdlcy91c2VyLnN2Zyc7XCJcclxuICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJteC0xXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZzLTEyIGZjLWJsYWNrXCI+e3tcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50Py5Bc3NpZ25lZFRvLm5hbWVcclxuICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNmaSBzZmktY2xvc2UgZmMtY29yYWxcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInY29sb3JlZFRleHQnXCJcclxuICAgICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cImVsZW1lbnRbY29sdW1uXT8uWydjb2xvciddXCJcclxuICAgICAgICAgICAgICAgICAgPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRbY29sdW1uXT8uWyd0aXRsZSddXHJcbiAgICAgICAgICAgICAgICAgIH19PC9zcGFuXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInc3VydmV5J1wiXHJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJlbGVtZW50W2NvbHVtbl0/LlsnY29sb3InXVwiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMSB0ZXh0LW5vd3JhcFwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmcy0yMCBzZmkgc2ZpLWVtb2ppLXt7KGVsZW1lbnRbY29sdW1uXT8uWyd0aXRsZSddWydlbiddLnRvTG93ZXJDYXNlKCkpIH19XCJcclxuICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAge3sgZWxlbWVudFtjb2x1bW5dPy5bJ3RpdGxlJ10gfX1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidTYXRpc2ZhY3Rpb24nXCJcclxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uc0NvbmZpZ1tpXS50eXBlXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkZWxlZ2F0ZSBkLWZsZXggZ2FwLTIgYWxpZ24taXRlbXMtY2VudGVyXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPCEtLVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkcy1pY29uIGljb249XCJzdGFyLWZcIiBjbGFzcz1cImZjLWRhcmstZ3JheVwiPjwvZHMtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZnMtMTIgZmMtYmxhY2tcIlxyXG4gICAgICAgICAgICAgICAgICAgID57eyBlbGVtZW50W2NvbHVtbl0ucGVyY2VudGFnZSB9fSU8L3NwYW5cclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8ZHMtc3RhdHVzXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhdXRvLXN0YXR1c1wiXHJcbiAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcclxuICAgICAgICAgICAgICAgICAgICBzdGF0dXM9XCJ7eyBlbGVtZW50W2NvbHVtbl0uc3RhdHVzIH19XCJcclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZnMtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IGVsZW1lbnRbY29sdW1uXS5wZXJjZW50YWdlVHJlbmQgfX0lXHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIEBpZihlbGVtZW50W2NvbHVtbl0udHJlbmRTdGF0dXMgPT0gJ3VwJyl7XHJcbiAgICAgICAgICAgICAgICAgICAgPGRzLWljb24gY2xhc3M9XCJmcy0xMyBteC0xIGdyb3d0aEljb25cIiBpY29uPVwidXAtZ3Jvd3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kcy1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgIH0gQGlmKGVsZW1lbnRbY29sdW1uXS50cmVuZFN0YXR1cyAhPSAndXAnKXtcclxuICAgICAgICAgICAgICAgICAgICA8ZHMtaWNvbiBjbGFzcz1cImZzLTEzIG14LTEgZG93bkljb25cIiBpY29uPVwiZG93bi1ncm93dGhcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2RzLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICA8L2RzLXN0YXR1cz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidhY3Rpb25zJ1wiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1zdGFydCBnYXAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sdW1uc0NvbmZpZ1tpXT8uYWN0aW9ucz8ubGVuZ3RoIDw9IDZcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBjb2x1bW5zQ29uZmlnW2ldPy5hY3Rpb25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRzLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYWN0aW9uLnZpZXdNb2RlID09PSBBY3Rpb25zLkFMTE9DQVRFXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFwZT1cIm91dGxpbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZzLTEyIGZjLXt7IGFjdGlvbj8uYWN0aW9uRm9udENvbG9yIH19XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBhY3Rpb24/LmFjdGlvbk5hbWUgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZHMtYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRzLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgYWN0aW9uPy5vbkNsaWNrKGVsZW1lbnQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImFjdGlvbiA9PT0gQWN0aW9ucy5BTExPQ0FURVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHMtaWNvbiBjbGFzcz1cImZzLTE1XCIgaWNvbj1cInBlblwiPjwvZHMtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kcy1idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLnZpZXdNb2RlICE9IEFjdGlvbnMuVklFVyB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLnZpZXdNb2RlICE9IEFjdGlvbnMuQ09QWVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHMtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgYWN0aW9uPy5vbkNsaWNrKGVsZW1lbnQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPy5hY3Rpb24gPT09IEFjdGlvbnMuVklFVyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhYWN0aW9uPy5pc0hpZGRlblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRzLWljb24gY2xhc3M9XCJmcy0xNVwiIGljb249XCJleWVcIj48L2RzLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kcy1idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkcy1idXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBhY3Rpb24/Lm9uQ2xpY2soZWxlbWVudClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24/LmFjdGlvbiA9PT0gQWN0aW9ucy5DT1BZICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFhY3Rpb24/LmlzSGlkZGVuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHMtaWNvbiBjbGFzcz1cImZzLTE1XCIgaWNvbj1cImZpbGVzLWNvcHlcIj48L2RzLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kcy1idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBAaWYoZWxlbWVudC5oYXNPd25Qcm9wZXJ0eSgnY2FuVXBkYXRlJykpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRzLWJ1dHRvbiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO2FjdGlvbj8ub25DbGljayhlbGVtZW50KVwiIGljb24gc2l6ZT1cInNtYWxsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhY3Rpb24/LmFjdGlvbiA9PT0gJ2VkaXQnICYmICFhY3Rpb24/LmlzSGlkZGVuICYmIGVsZW1lbnQuY2FuVXBkYXRlID09IHRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRzLWljb24gaWNvbj1cInBlblwiIGNsYXNzPVwiZnMtMTVcIj48L2RzLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RzLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1AZWxzZSB7IC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHMtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgYWN0aW9uPy5vbkNsaWNrKGVsZW1lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj8uYWN0aW9uID09PSBBY3Rpb25zLkVESVQgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIVs0LCA3XS5pbmNsdWRlcyhlbGVtZW50Py5jb250cmFjdFN0YXR1cz8uaWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRzLWljb24gY2xhc3M9XCJmcy0xNVwiIGljb249XCJwZW5cIj48L2RzLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kcy1idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSB9IC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHMtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgYWN0aW9uPy5vbkNsaWNrKGVsZW1lbnQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPy5hY3Rpb24gPT09IEFjdGlvbnMuREVMRVRFICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFhY3Rpb24/LmlzSGlkZGVuICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFbNCwgN10uaW5jbHVkZXMoZWxlbWVudD8uY29udHJhY3RTdGF0dXM/LmlkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRzLWljb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmYy1jb3JhbCBmcy0xNVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJ0cmFzaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9kcy1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZHMtYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHMtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgYWN0aW9uPy5vbkNsaWNrKGVsZW1lbnQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPy5hY3Rpb24gPT09IEFjdGlvbnMuREVMRVRFUEVORElORyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhYWN0aW9uPy5pc0hpZGRlbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50Py5jb250cmFjdFN0YXR1cz8uaWQgPT0gMVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRzLWljb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmYy1jb3JhbCBmcy0xNVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJ0cmFzaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9kcy1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZHMtYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHMtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgYWN0aW9uPy5vbkNsaWNrKGVsZW1lbnQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhY3Rpb24/LmFjdGlvbiA9PT0gQWN0aW9ucy5DSEFSVFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cInRyYW5zcGFyZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRzLWljb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmYy1jb3JhbCBmcy0xNVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJjaGFydC1vXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2RzLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kcy1idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZWxlbWVudC5oYXNPd25Qcm9wZXJ0eSgnY2FuVGFrZUFjdGlvbicpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRzLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IGFjdGlvbj8ub25DbGljayhlbGVtZW50KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24/LmFjdGlvbiA9PT0gQWN0aW9ucy5BUFBST1ZFICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuY2FuVGFrZUFjdGlvbiA9PSB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZnMtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgXCJnbG9iYWwuYXBwcm92ZVwiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kcy1idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRzLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGU9XCJvdXRsaW5lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwiZGFyay1ncmF5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBhY3Rpb24/Lm9uQ2xpY2soZWxlbWVudClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPy5hY3Rpb24gPT09IEFjdGlvbnMuUkVKRUNUICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuY2FuVGFrZUFjdGlvbiA9PSB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGU9XCJvdXRsaW5lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZzLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwiZ2xvYmFsLnJlamVjdFwiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kcy1idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRzLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IGFjdGlvbj8ub25DbGljayhlbGVtZW50KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImFjdGlvbj8uYWN0aW9uID09PSBBY3Rpb25zLkFQUFJPVkVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZnMtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgXCJnbG9iYWwuYXBwcm92ZVwiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kcy1idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRzLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGU9XCJvdXRsaW5lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwiZGFyay1ncmF5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBhY3Rpb24/Lm9uQ2xpY2soZWxlbWVudClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhY3Rpb24/LmFjdGlvbiA9PT0gQWN0aW9ucy5SRUpFQ1RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGU9XCJvdXRsaW5lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZzLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwiZ2xvYmFsLnJlamVjdFwiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kcy1idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHMtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImFjdGlvbj8uYWN0aW9uID09PSBBY3Rpb25zLkRFVEFJTFNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmcy0xMiB1bmRlcmxpbmVcIj4gVmlldyBEZXRhaWxzIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RzLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHMtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgYWN0aW9uPy5vbkNsaWNrKGVsZW1lbnQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPy5hY3Rpb24gPT09IEFjdGlvbnMuU1RBUlQgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudD8uaXNGaW5hbGl6ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmcy0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBhY3Rpb24/LmFjdGlvbk5hbWUgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkcy1pY29uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZnMtMTZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uPVwibWVkaWEtcGxheVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3Q9XCJwcmVmaXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvZHMtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RzLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHMtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgYWN0aW9uPy5vbkNsaWNrKGVsZW1lbnQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhY3Rpb24/LmFjdGlvbiA9PT0gQWN0aW9ucy5QUkVQQVJFXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwibGlnaHQtZ3JheVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZnMtMTIgZmMtYmxhY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYWN0aW9uPy5hY3Rpb25OYW1lIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHMtaWNvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZzLTEyIGZjLWJsYWNrXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cInNldHRpbmdzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvdD1cInByZWZpeFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9kcy1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZHMtYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHMtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgYWN0aW9uPy5vbkNsaWNrKGVsZW1lbnQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPy5hY3Rpb24gPT09IEFjdGlvbnMuU1RBUlQgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudD8uaXNGaW5hbGl6ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmcy0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBhY3Rpb24/LmFjdGlvbk5hbWUgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkcy1pY29uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZnMtMTZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uPVwibWVkaWEtcGxheVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3Q9XCJwcmVmaXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvZHMtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RzLWJ1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZHMtYnV0dG9uIFtjb2xvcl09XCJhY3Rpb24/LmFjdGlvbkNvbG9yXCIgc2l6ZT1cInNtYWxsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYWN0aW9uPy5hY3Rpb24gPT09ICdjdXN0b21BY3Rpb24nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTthY3Rpb24/Lm9uQ2xpY2soZWxlbWVudClcIiBzaGFwZT1cInt7YWN0aW9uPy5hY3Rpb25TaGFwZX19XCIgW2NsYXNzXT1cImFjdGlvbj8uYWN0aW9uQ29sb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9kcy1idXR0b24+IC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHMtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgYWN0aW9uPy5vbkNsaWNrKGVsZW1lbnQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhY3Rpb24/LmFjdGlvbiA9PT0gQWN0aW9ucy5DVVNUT01BQ1RJT05cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImFjdGlvbj8uYWN0aW9uQ29sb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cImFjdGlvbj8uYWN0aW9uQ29sb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGU9XCJ7eyBhY3Rpb24/LmFjdGlvblNoYXBlIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmcy0xMiBmYy17eyBhY3Rpb24/LmFjdGlvbkZvbnRDb2xvciB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGFjdGlvbj8uYWN0aW9uTmFtZSB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZHMtYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkcy1idXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBhY3Rpb24/Lm9uQ2xpY2soZWxlbWVudClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24/LmFjdGlvbiA9PT0gQWN0aW9ucy5DVVNUT01BQ1RJT05NQU5BR0UgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVsZW1lbnQuY29udHJhY3RTdGF0dXMuaWQgPT0gNyB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuY29udHJhY3RTdGF0dXMuaWQgPT0gMSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiYWN0aW9uPy5hY3Rpb25Db2xvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sb3JdPVwiYWN0aW9uPy5hY3Rpb25Db2xvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFwZT1cInt7IGFjdGlvbj8uYWN0aW9uU2hhcGUgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZzLTEyIGZjLXt7IGFjdGlvbj8uYWN0aW9uRm9udENvbG9yIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYWN0aW9uPy5hY3Rpb25OYW1lIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kcy1idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkcy1idXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBhY3Rpb24/Lm9uQ2xpY2soZWxlbWVudClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24/LmFjdGlvbiA9PT0gQWN0aW9ucy5DVVNUT01BQ1RJT05FWFRFTkQgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5jb250cmFjdFN0YXR1cy5pZCA9PSA3XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImFjdGlvbj8uYWN0aW9uQ29sb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cImFjdGlvbj8uYWN0aW9uQ29sb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGU9XCJ7eyBhY3Rpb24/LmFjdGlvblNoYXBlIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmcy0xMiBmYy17eyBhY3Rpb24/LmFjdGlvbkZvbnRDb2xvciB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGFjdGlvbj8uYWN0aW9uTmFtZSB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZHMtYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkcy1idXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBhY3Rpb24/Lm9uQ2xpY2soZWxlbWVudClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24/LmFjdGlvbiA9PT0gQWN0aW9ucy5DVVNUT01BQ1RJT05ERVRBSUxTXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImFjdGlvbj8uYWN0aW9uQ29sb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cImFjdGlvbj8uYWN0aW9uQ29sb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGU9XCJ7eyBhY3Rpb24/LmFjdGlvblNoYXBlIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmcy0xMiBmYy17eyBhY3Rpb24/LmFjdGlvbkZvbnRDb2xvciB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGFjdGlvbj8uYWN0aW9uTmFtZSB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZHMtYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkcy1zdGF0dXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYWN0aW9uPy5hY3Rpb24gPT09IEFjdGlvbnMuU1RBVFVTXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdGF0dXNdPVwiYWN0aW9uPy5TdGF0dXMuc3RhdHVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZnMtMTIgc3RhdHVzQWN0aW9uIHctMTAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZjLWJsYWNrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGFjdGlvbj8uU3RhdHVzLnRpdGxlIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kcy1zdGF0dXM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW5zQ29uZmlnW2ldPy5hY3Rpb25zPy5sZW5ndGggPiA2XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZHMtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICNzdGF0dXNNZW51VHJpZ2dlcj1cIm1hdE1lbnVUcmlnZ2VyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sdW1uc0NvbmZpZ1tpXT8uYWN0aW9ucz8ubGVuZ3RoID4gMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJzdGF0dXNNZW51XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkb3RzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcclxuICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRzLWljb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZzLTIwIGZjLWRhcmstZ3JheVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cImRvdHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9kcy1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kcy1idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1tZW51ICNzdGF0dXNNZW51PVwibWF0TWVudVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGlvbj8ub25DbGljayhlbGVtZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBjb2x1bW5zQ29uZmlnW2ldPy5hY3Rpb25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXQtbWVudS1pdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZzLTEyIGZjLWJsYWNrXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID57eyBhY3Rpb24/LmFjdGlvbk5hbWUgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbWVudT5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidzcGVjcydcIj5cclxuICAgICAgICAgICAgICAgICAgQGlmKGVsZW1lbnQ/Lltjb2x1bW5dKXtcclxuICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAjc3RhdHVzTWVudVRyaWdnZXI9XCJtYXRNZW51VHJpZ2dlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW21hdE1lbnVUcmlnZ2VyRm9yXT1cInNwZWNzTWVudVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uc0NvbmZpZ1tpXS50eXBlXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5zQ29uZmlnW2ldLnR5cGVcclxuICAgICAgICAgICAgICAgICAgICB9fSBmYy1jb3JhbCB1bmRlcmxpbmUgY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgY29sdW1uc0NvbmZpZ1tpXS5jbGlja2FibGVUZXh0IHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1tZW51ICNzcGVjc01lbnU9XCJtYXRNZW51XCIgY2xhc3M9XCJwLTQgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZzLTE0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBlbGVtZW50W2NvbHVtbl0gfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvbWF0LW1lbnU+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ3NwZWNzJ1wiIFtuZ0NsYXNzXT1cImNvbHVtbnNDb25maWdbaV0udHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGdhcC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZWxlbWVudFtjb2x1bW5dIHwganNvbiB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZWxlbWVudFtjb2x1bW5dXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwcm9ncmVzcy1jb250YWluZXIgZGVmYXVsdC1wcm9ncmVzcyBtZWRpdW0gcmFkaXVzLTAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiVGVhbSBhc3NpZ25tZW50IHt7aXRlbS52YWx1ZX19JVwiIG1hdFRvb2x0aXBQb3NpdGlvbj1cImJlbG93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aC4lXT1cIml0ZW0udmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInByb2dyZXNzLWJhciBiZy1jb2xvci17e2l0ZW0uY29sb3J9fVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4tLT5cclxuXHJcbiAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hEZWZhdWx0XHJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbHVtbnNDb25maWdbaV0udHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1ub3dyYXBcIlxyXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiIHt7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uc0NvbmZpZ1tpXS5hcktleVxyXG4gICAgICAgICAgICAgICAgICAgICAgPyB0cmFuc2xhdGVTZXJ2aWNlLmN1cnJlbnRMYW5nID09ICdhcidcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBtYXBUZXh0KGNvbHVtbnNDb25maWdbaV0uYXJLZXksIGVsZW1lbnRbY29sdW1uXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBtYXBUZXh0KGNvbHVtbnNDb25maWdbaV0uZW5LZXksIGVsZW1lbnRbY29sdW1uXSlcclxuICAgICAgICAgICAgICAgICAgICAgIDogZWxlbWVudFtjb2x1bW5dXHJcbiAgICAgICAgICAgICAgICAgICAgICA/IGVsZW1lbnRbY29sdW1uXVxyXG4gICAgICAgICAgICAgICAgICAgICAgOiAnLSdcclxuICAgICAgICAgICAgICAgICAgfX1cIlxyXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249XCJiZWxvd1wiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIHt7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uc0NvbmZpZ1tpXS5hcktleVxyXG4gICAgICAgICAgICAgICAgICAgICAgPyB0cmFuc2xhdGVTZXJ2aWNlLmN1cnJlbnRMYW5nID09IFwiYXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IG1hcFRleHQoY29sdW1uc0NvbmZpZ1tpXS5hcktleSwgZWxlbWVudFtjb2x1bW5dKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG1hcFRleHQoY29sdW1uc0NvbmZpZ1tpXS5lbktleSwgZWxlbWVudFtjb2x1bW5dKVxyXG4gICAgICAgICAgICAgICAgICAgICAgOiBlbGVtZW50W2NvbHVtbl1cclxuICAgICAgICAgICAgICAgICAgICAgID8gZWxlbWVudFtjb2x1bW5dXHJcbiAgICAgICAgICAgICAgICAgICAgICA6IFwiLVwiXHJcbiAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICB9XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICB9XHJcblxyXG4gICAgICA8dHIgKm1hdEhlYWRlclJvd0RlZj1cImNvbHVtbnM7IHN0aWNreTogdHJ1ZVwiIG1hdC1oZWFkZXItcm93PjwvdHI+XHJcbiAgICAgIDx0clxyXG4gICAgICAgIChjbGljayk9XCJjbGlja1Jvdyhyb3cpXCJcclxuICAgICAgICAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogY29sdW1uc1wiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwieyAnc2VsZWN0ZWQtcm93Jzogcm93Py5mYXN0VHJhY2tTZWVuID09PSBmYWxzZSB9XCJcclxuICAgICAgICBtYXQtcm93XHJcbiAgICAgICAgcm9sZT1cImJ1dHRvblwiXHJcbiAgICAgID48L3RyPlxyXG4gICAgPC90YWJsZT5cclxuICAgIH1cclxuICA8L25nLWNvbnRhaW5lcj5cclxuICB9IEBpZihpc0xvYWRpbmcpe1xyXG4gIDxkcy1sb2FkaW5nLXRhYmxlIFtjb2xzXT1cImNvbHVtbnMubGVuZ3RoXCIgW3Jvd3NdPVwiNVwiPjwvZHMtbG9hZGluZy10YWJsZT5cclxuICB9IEBpZighaXNMb2FkaW5nICYmIGRhdGFTb3VyY2UuZmlsdGVyZWREYXRhPy5sZW5ndGggPT0gMCl7XHJcbiAgPGRzLW1lc3NhZ2VcclxuICAgIFtsYWJlbF09XCInZ2xvYmFsLm5vSXRlbXNUb0Rpc3BsYXknIHwgdHJhbnNsYXRlXCJcclxuICAgIHR5cGU9XCJlbXB0eUxpc3RcIlxyXG4gID48L2RzLW1lc3NhZ2U+XHJcbiAgfVxyXG48L2Rpdj5cclxuQGlmKGRhdGFTb3VyY2UuZmlsdGVyZWREYXRhPy5sZW5ndGggJiYgaGFzUGFnaW5hdG9yKXtcclxuPG1hdC1wYWdpbmF0b3JcclxuICAjcGFnaW5hdG9yXHJcbiAgKHBhZ2UpPVwicGFnZUNoYW5nZWQoJGV2ZW50KVwiXHJcbiAgW2xlbmd0aF09XCJ0b3RhbEVsZW1lbnRzXCJcclxuICBbcGFnZUluZGV4XT1cImN1cnJlbnRQYWdlXCJcclxuICBbcGFnZVNpemVPcHRpb25zXT1cIls1LCAxMCwgMTUsIDIwLCAxMDBdXCJcclxuICBbcGFnZVNpemVdPVwicGFnZVNpemVcIlxyXG4gIGFyaWEtbGFiZWw9XCJTZWxlY3QgcGFnZVwiXHJcbiAgc2hvd0ZpcnN0TGFzdEJ1dHRvbnNcclxuPlxyXG48L21hdC1wYWdpbmF0b3I+XHJcbn1cclxuIl19
|
|
243
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYnBtLWNvcmUvc3JjL2xpYi9jb21wb25lbnRzL3NoYXJlZC1jb21wb25lbnRzL3RhYmxlL3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JwbS1jb3JlL3NyYy9saWIvY29tcG9uZW50cy9zaGFyZWQtY29tcG9uZW50cy90YWJsZS90YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLHNCQUFzQixFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDNUgsT0FBTyxFQUFjLFdBQVcsRUFBYSxXQUFXLEVBQUUsbUJBQW1CLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqSCxPQUFPLEVBQUMsWUFBWSxFQUFZLE1BQU0sNkJBQTZCLENBQUM7QUFDcEUsT0FBTyxFQUFDLE9BQU8sRUFBTyxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFDTCxPQUFPLEVBQ1AsVUFBVSxFQUNWLFlBQVksRUFDWixhQUFhLEVBQ2IsZ0JBQWdCLEVBQ2hCLFlBQVksRUFDWixlQUFlLEVBQ2YsTUFBTSxFQUNOLFNBQVMsRUFDVCxRQUFRLEVBQ1Isa0JBQWtCLEVBQ25CLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUFDLGVBQWUsRUFBbUIsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RSxPQUFPLEVBQUMsWUFBWSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFdEQsT0FBTyxFQUFDLFFBQVEsRUFBWSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ2xILE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUN2RCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDckQsT0FBTyxFQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDNUUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBSTlELE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNyRCxPQUFPLEVBQUMseUJBQXlCLEVBQUUsY0FBYyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3hFLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDbEQsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQ3BELE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLDZDQUE2QyxDQUFDOzs7OztBQUVsRixNQUFNLFVBQVUsR0FBRztJQUNqQixRQUFRO0lBQ1IsWUFBWSxFQUFFLGdCQUFnQjtJQUM5QixXQUFXLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxZQUFZO0lBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLG1CQUFtQixFQUFFLFVBQVU7SUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxTQUFTO0lBQy9HLGFBQWEsRUFBRSxPQUFPLEVBQUUseUJBQXlCO0NBQ2xELENBQUE7QUFVRCxNQUFNLE9BQU8sY0FBYztJQTBDaEI7SUFDQTtJQUNDO0lBM0NxQyxXQUFXLENBQWM7SUFDeEUsT0FBTyxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hDLGlCQUFpQixDQUFhO0lBQ3JCLE9BQU8sQ0FBTTtJQUNiLE9BQU8sR0FBUSxLQUFLLENBQUM7SUFDckIsU0FBUyxHQUFRLEtBQUssQ0FBQztJQUN2QixhQUFhLENBQVU7SUFDdkIsYUFBYSxDQUFNO0lBQ25CLFFBQVEsQ0FBTTtJQUNkLE9BQU8sR0FBa0IsRUFBRSxDQUFDO0lBQzVCLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDZixhQUFhLEdBQVcsQ0FBQyxDQUFDO0lBQzFCLGNBQWMsR0FBWSxLQUFLLENBQUM7SUFDaEMsU0FBUyxHQUFXLENBQUMsQ0FBQztJQUN0QixRQUFRLEdBQVcsRUFBRSxDQUFDO0lBQ3RCLFlBQVksR0FBWSxLQUFLLENBQUM7SUFDOUIsU0FBUyxHQUFZLEtBQUssQ0FBQztJQUMxQixnQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBQzNDLFVBQVUsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBQ3JDLFVBQVUsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBQ3JDLHlCQUF5QixHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDcEQsbUJBQW1CLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztJQUM5QyxXQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztJQUN2QyxnQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFBO0lBQzFDLFVBQVUsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBQ3JDLGFBQWEsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBQ3hDLFlBQVksR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBQzFDLFVBQVUsR0FBRyxJQUFJLGtCQUFrQixFQUFPLENBQUM7SUFDMUIsU0FBUyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7SUFDbEQsWUFBWSxHQUFHLElBQUksV0FBVyxFQUFFLENBQUE7SUFDaEMsSUFBSSxHQUFXLEVBQUUsQ0FBQztJQUNsQixLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ1gsSUFBSSxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7SUFDTixPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQzdCLFdBQVcsR0FBRyxJQUFJLE9BQU8sQ0FBQztJQUN6QixZQUFZLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLFdBQVcsR0FBRyxDQUFDLENBQUM7SUFDZixVQUFVLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztJQUMvQyxJQUFJLENBQVk7SUFFaEIsWUFDUyxNQUFpQixFQUNqQixnQkFBa0MsRUFDakMsRUFBZTtRQUZoQixXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQ2pCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDakMsT0FBRSxHQUFGLEVBQUUsQ0FBYTtJQUN0QixDQUFDO0lBRUosSUFBYSxPQUFPLENBQUMsS0FBYTtRQUNoQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3pCLENBQUM7SUFBQSxDQUFDO0lBRUYsS0FBSyxDQUFNO0lBRVgsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxJQUFhLElBQUksQ0FBQyxLQUFVO1FBQzFCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUN4QixDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQWdCO1FBQzFCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUMvQixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFDbkMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBQyxDQUFDLENBQUE7SUFDOUUsQ0FBQztJQUVELGVBQWU7UUFDYixzQ0FBc0M7UUFDdEMsK0NBQStDO1FBQy9DLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDdEMsNkNBQTZDO1FBQzdDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQTtJQUNyQixDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQWU7UUFDekIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFBO0lBQ2xDLENBQUM7SUFFRCxZQUFZLENBQUMsSUFBWTtRQUN2QixJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1QsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN2QyxJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUNmLE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM3QixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxFQUFFLENBQUM7WUFDWixDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7SUFDSCxDQUFDO0lBRUQsVUFBVSxDQUFDLFNBQWU7UUFDeEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDMUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLElBQUksU0FBUyxDQUFDLFNBQVMsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUNwRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7WUFDNUIsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsT0FBTyxDQUFDLElBQVksRUFBRSxNQUFXO1FBQy9CLE9BQU8sS0FBSyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsV0FBVyxDQUFDLEdBQVcsRUFBRSxHQUFXO1FBQ2xDLE1BQU0sUUFBUSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDeEQsT0FBTyxRQUFRLENBQUE7SUFDakIsQ0FBQztJQUdELFFBQVEsQ0FBQyxHQUFRO1FBQ2YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDM0IsQ0FBQztJQUVELFdBQVcsQ0FBQyxHQUFRO1FBQ2xCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQzdCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxDQUFNLEVBQUUsT0FBYTtRQUNyQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFDLENBQUMsRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFBO0lBQ3ZDLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBR0QsUUFBUSxDQUFDLEtBQWE7UUFDcEIsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDeEIsQ0FBQztJQUVPLFlBQVk7UUFDbEIsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUM7YUFDckQsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUN2QixTQUFTLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsUUFBUSxDQUFDLEdBQVc7UUFDbEIsTUFBTSxDQUFDLElBQUksQ0FBQyxvQ0FBb0MsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRU8sYUFBYSxDQUFDLENBQU07UUFDMUIsTUFBTSxlQUFlLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUEsQ0FBQyxtQkFBbUI7UUFDakUsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQSxDQUFDLHNCQUFzQjtRQUN0RSxNQUFNLGNBQWMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLHdCQUF3QjtRQUNuRSxNQUFNLGVBQWUsR0FBRyxpQkFBaUIsR0FBRyxlQUFlLENBQUM7UUFDNUQsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQztRQUM1RSxJQUFJLHFCQUFxQixJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxHQUFHLGVBQWUsRUFBRSxDQUFDO1lBQ3BFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzVCLENBQUM7SUFDSCxDQUFDO3VHQTdKVSxjQUFjOzJGQUFkLGNBQWMscStCQUNFLFVBQVUsc0hDdER2QyxpcTFFQTAyQ0Esb3lKRDF6Q1ksS0FBSyxrSEFBRSxlQUFlLDRGQUFFLElBQUksNkZBWHRDLFFBQVEsZ0dBQ1IsWUFBWSxxRkFBRSxnQkFBZ0IsK0RBQzlCLFdBQVcsd1ZBQUUsUUFBUSw2RUFBRSxVQUFVLHlEQUFFLFlBQVkscUZBQy9DLE9BQU8sK0VBQUUsUUFBUSw2Q0FBRSxjQUFjLDRLQUFFLG1CQUFtQiwwVEFBRSxVQUFVLGlSQUNsRSxPQUFPLDJRQUFFLGNBQWMsMFVBQUUsY0FBYyxxU0FBRSxXQUFXLHNJQUFFLE9BQU8sa05BQUUsZUFBZSxvSEFBRSxZQUFZLDJHQUFFLE1BQU0sdUZBQUUsU0FBUyx1R0FDL0csYUFBYSxpRkFBRSxPQUFPLG1FQUFFLHlCQUF5QiwwTUFNRyxXQUFXLHVQQUFFLGVBQWUsOERBQUUscUJBQXFCLDJGQUFFLFlBQVk7OzJGQUsxRyxjQUFjO2tCQVIxQixTQUFTOytCQUNFLFdBQVcsY0FDVCxJQUFJLFdBQ1AsQ0FBQyxLQUFLLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxxQkFBcUIsRUFBRSxZQUFZLENBQUMsV0FHN0csQ0FBQyxzQkFBc0IsQ0FBQzt1SUFHYyxXQUFXO3NCQUF6RCxTQUFTO3VCQUFDLE9BQU8sRUFBRSxFQUFDLElBQUksRUFBRSxVQUFVLEVBQUM7Z0JBRzdCLE9BQU87c0JBQWYsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDSSxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLHlCQUF5QjtzQkFBbEMsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBRWlCLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVztnQkFPYixZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0ksVUFBVTtzQkFBbkIsTUFBTTtnQkFTTSxPQUFPO3NCQUFuQixLQUFLO2dCQVVPLElBQUk7c0JBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7Rm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBWYWxpZGF0b3JzfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7TWF0RGlhbG9nfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQge01hdFBhZ2luYXRvciwgUGFnZUV2ZW50fSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xyXG5pbXBvcnQge01hdFNvcnQsIFNvcnR9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xyXG5pbXBvcnQge1xyXG4gIE1hdENlbGwsXHJcbiAgTWF0Q2VsbERlZixcclxuICBNYXRDb2x1bW5EZWYsXHJcbiAgTWF0SGVhZGVyQ2VsbCxcclxuICBNYXRIZWFkZXJDZWxsRGVmLFxyXG4gIE1hdEhlYWRlclJvdyxcclxuICBNYXRIZWFkZXJSb3dEZWYsXHJcbiAgTWF0Um93LFxyXG4gIE1hdFJvd0RlZixcclxuICBNYXRUYWJsZSxcclxuICBNYXRUYWJsZURhdGFTb3VyY2VcclxufSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XHJcbmltcG9ydCB7VHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHtkZWJvdW5jZVRpbWUsIGZyb21FdmVudCwgU3ViamVjdH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQge0RhdGVQaXBlLCBKc29uUGlwZSwgTmdDbGFzcywgTmdGb3IsIE5nSWYsIE5nU3dpdGNoLCBOZ1N3aXRjaENhc2UsIE5nU3dpdGNoRGVmYXVsdH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xyXG5pbXBvcnQge01hdENoZWNrYm94fSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3hcIjtcclxuaW1wb3J0IHtNYXRUb29sdGlwfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcFwiO1xyXG5pbXBvcnQge01hdE1lbnUsIE1hdE1lbnVJdGVtLCBNYXRNZW51VHJpZ2dlcn0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL21lbnVcIjtcclxuaW1wb3J0IHtNYXRTbGlkZVRvZ2dsZX0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL3NsaWRlLXRvZ2dsZVwiO1xyXG5pbXBvcnQge1JvdXRlckxpbmt9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuXHJcbmltcG9ydCB7QWN0aW9uTW9kZWx9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMvYWN0aW9uLmludGVyZmFjZSc7XHJcbmltcG9ydCB7bWFwVG99IGZyb20gJy4uLy4uLy4uL2hlbHBlcnMvc2hhcmVkLmhlbHBlcic7XHJcbmltcG9ydCB7Q3VzdG9tU2VhcmNoYWJsZUNvbXBvbmVudCwgSW5wdXRDb21wb25lbnR9IGZyb20gJy4uL2Zvcm0tZmllbGQnO1xyXG5pbXBvcnQge0NvbG9yc30gZnJvbSAnLi4vLi4vLi4vZW51bXMvY29sb3JzLmVudW0nO1xyXG5pbXBvcnQge0V2ZW50c30gZnJvbSAnLi4vLi4vLi4vZW51bXMvZXZlbnRzLmVudW0nO1xyXG5pbXBvcnQge0FjdGlvbnN9IGZyb20gJy4uLy4uLy4uL2VudW1zL2FjdGlvbnMuZW51bSc7XHJcbmltcG9ydCB7U2tpcExvY2F0aW9uRGlyZWN0aXZlfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmVzL3NraXAtbG9jYXRpb24uZGlyZWN0aXZlJztcclxuXHJcbmNvbnN0IG1hdE1vZHVsZXMgPSBbXHJcbiAgTWF0VGFibGUsXHJcbiAgTWF0Q29sdW1uRGVmLCBNYXRIZWFkZXJDZWxsRGVmLFxyXG4gIE1hdENoZWNrYm94LCBOZ1N3aXRjaCwgTWF0Q2VsbERlZiwgTmdTd2l0Y2hDYXNlLFxyXG4gIE5nQ2xhc3MsIERhdGVQaXBlLCBJbnB1dENvbXBvbmVudCwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgTWF0VG9vbHRpcCxcclxuICBNYXRNZW51LCBNYXRTbGlkZVRvZ2dsZSwgTWF0TWVudVRyaWdnZXIsIE1hdE1lbnVJdGVtLCBNYXRTb3J0LCBNYXRIZWFkZXJSb3dEZWYsIE1hdEhlYWRlclJvdywgTWF0Um93LCBNYXRSb3dEZWYsXHJcbiAgTWF0SGVhZGVyQ2VsbCwgTWF0Q2VsbCwgQ3VzdG9tU2VhcmNoYWJsZUNvbXBvbmVudFxyXG5dXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC10YWJsZScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbTmdGb3IsIFRyYW5zbGF0ZU1vZHVsZSwgTmdJZiwgbWF0TW9kdWxlcywgRm9ybXNNb2R1bGUsIE5nU3dpdGNoRGVmYXVsdCwgU2tpcExvY2F0aW9uRGlyZWN0aXZlLCBNYXRQYWdpbmF0b3JdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3RhYmxlLmNvbXBvbmVudC5zY3NzJyxcclxuICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQFZpZXdDaGlsZCgndGFibGUnLCB7cmVhZDogRWxlbWVudFJlZn0pIHB1YmxpYyBtYXRUYWJsZVJlZiE6IEVsZW1lbnRSZWY7XHJcbiAgY29udHJvbCA9IG5ldyBGb3JtQ29udHJvbChudWxsKTtcclxuICBzZXJ2aWNlRGV0YWlsRm9ybSE6IEZvcm1Hcm91cDtcclxuICBASW5wdXQoKSBjb2x1bW5zOiBhbnk7XHJcbiAgQElucHV0KCkgaXNFcnJvcjogYW55ID0gZmFsc2U7XHJcbiAgQElucHV0KCkgaXNMb2FkaW5nOiBhbnkgPSBmYWxzZTtcclxuICBASW5wdXQoKSBjdXN0b21NZXNzYWdlITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGNvbHVtbnNDb25maWc6IGFueTtcclxuICBASW5wdXQoKSBsb2FkRGF0YTogYW55O1xyXG4gIEBJbnB1dCgpIGFjdGlvbnM6IEFjdGlvbk1vZGVsW10gPSBbXTtcclxuICBASW5wdXQoKSBjbGFzc05hbWUgPSAnJztcclxuICBASW5wdXQoKSB0b3RhbEVsZW1lbnRzOiBudW1iZXIgPSAwO1xyXG4gIEBJbnB1dCgpIHNob3dQYWdpbmF0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcGFnZUluZGV4OiBudW1iZXIgPSAwO1xyXG4gIEBJbnB1dCgpIHBhZ2VTaXplOiBudW1iZXIgPSAxNTtcclxuICBASW5wdXQoKSBzb3J0RGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSB1c2VTY3JvbGw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBAT3V0cHV0KCkgc2VydmljZVJvd1NlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBzZWxlY3RQYWdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIHJvd0NsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgYXV0b0NvbXBsZXRlVmFsdWVTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBzZWxlY3RWYWx1ZVNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIHNvcnRDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxTb3J0PigpO1xyXG4gIEBPdXRwdXQoKSBpbnB1dENlbGxDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KClcclxuICBAT3V0cHV0KCkgcGFnZVNjcm9sbCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSB0b2dnbGVDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGV2ZW50Q2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIHB1YmxpYyBkYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZTxhbnk+KCk7XHJcbiAgQFZpZXdDaGlsZCgndGFibGVTb3J0JykgdGFibGVTb3J0ID0gbmV3IE1hdFNvcnQoKTtcclxuICBsb2NhbENvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKVxyXG4gIGxhbmc6IHN0cmluZyA9ICcnO1xyXG4gIHNwYW5zID0gW107XHJcbiAgY3RybCA9IG5ldyBGb3JtQ29udHJvbCgpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSBBY3Rpb25zID0gQWN0aW9ucztcclxuICBwcml2YXRlIHVuU3Vic2NyaWJlID0gbmV3IFN1YmplY3Q7XHJcbiAgQElucHV0KCkgaGFzUGFnaW5hdG9yID0gZmFsc2U7XHJcbiAgQElucHV0KCkgY3VycmVudFBhZ2UgPSAwO1xyXG4gIEBPdXRwdXQoKSBwYWdlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgZm9ybTogRm9ybUdyb3VwO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHB1YmxpYyB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXJcclxuICApIHt9XHJcblxyXG4gIEBJbnB1dCgpIHNldCBrZXlXb3JkKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuYXBwbHlGaWx0ZXIodmFsdWUpXHJcbiAgfTtcclxuXHJcbiAgX3Jvd3M6IGFueTtcclxuXHJcbiAgZ2V0IHJvd3MoKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLl9yb3dzO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgc2V0IHJvd3ModmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy5fcm93cyA9IHZhbHVlO1xyXG4gICAgdGhpcy5kYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZSh0aGlzLnJvd3MpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLnJvd3MpXHJcbiAgfVxyXG5cclxuICBwYWdlQ2hhbmdlZChldmVudDogUGFnZUV2ZW50KSB7XHJcbiAgICB0aGlzLnBhZ2VTaXplID0gZXZlbnQucGFnZVNpemU7XHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gZXZlbnQucGFnZUluZGV4O1xyXG4gICAgdGhpcy5wYWdlQ2hhbmdlLmVtaXQoe3BhZ2VTaXplOiB0aGlzLnBhZ2VTaXplLCBwYWdlSW5kZXg6IHRoaXMuY3VycmVudFBhZ2V9KVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgLy8gdGhpcy50YWJsZVNvcnQuZGlzYWJsZUNsZWFyID0gdHJ1ZTtcclxuICAgIC8vIHRoaXMudGFibGVTb3J0LmRpc2FibGVkID0gdGhpcy5zb3J0RGlzYWJsZWQ7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2Uuc29ydCA9IHRoaXMudGFibGVTb3J0O1xyXG4gICAgLy90aGlzLmRhdGFTb3VyY2UucGFnaW5hdG9yID0gdGhpcy5wYWdpbmF0b3I7XHJcbiAgICB0aGlzLmhhbmRsZVNjcm9sbCgpXHJcbiAgfVxyXG5cclxuICBhcHBseUZpbHRlcihrZXlXb3JkOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuZGF0YVNvdXJjZS5maWx0ZXIgPSBrZXlXb3JkXHJcbiAgfVxyXG5cclxuICB0cnVuY2F0ZU5hbWUodGV4dDogc3RyaW5nKSB7XHJcbiAgICBpZiAodGV4dCkge1xyXG4gICAgICBsZXQgY2hhcmFjdGVycyA9IHRleHQubWF0Y2goL1xcYihcXHcpL2cpO1xyXG4gICAgICBpZiAoY2hhcmFjdGVycykge1xyXG4gICAgICAgIHJldHVybiBjaGFyYWN0ZXJzLmpvaW4oJycpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiAnJztcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc29ydENoYW5nZShzb3J0U3RhdGU6IFNvcnQpIHtcclxuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGFTb3VyY2UuZGF0YS5zbGljZSgpO1xyXG4gICAgaWYgKCFzb3J0U3RhdGUuYWN0aXZlIHx8IHNvcnRTdGF0ZS5kaXJlY3Rpb24gPT09ICcnKSB7XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZGF0YTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zb3J0Q2hhbmdlZC5lbWl0KHNvcnRTdGF0ZSk7XHJcbiAgfVxyXG5cclxuICBtYXBUZXh0KHBhdGg6IHN0cmluZywgc291cmNlOiBhbnkpIHtcclxuICAgIHJldHVybiBtYXBUbyhwYXRoLCBzb3VyY2UpO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2xhQ29sb3IobWluOiBudW1iZXIsIG1heDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHNsYUNvbG9yID0gbWluID49IG1heCA/IENvbG9ycy5SRUQgOiBDb2xvcnMuR1JFRU47XHJcbiAgICByZXR1cm4gc2xhQ29sb3JcclxuICB9XHJcblxyXG5cclxuICBjbGlja1Jvdyhyb3c6IGFueSkge1xyXG4gICAgdGhpcy5yb3dDbGlja2VkLmVtaXQocm93KVxyXG4gIH1cclxuXHJcbiAgZW1pdEVsZW1lbnQocm93OiBhbnkpIHtcclxuICAgIHRoaXMuZXZlbnRDbGlja2VkLmVtaXQocm93KVxyXG4gIH1cclxuXHJcbiAgdG9nZ2xlVmFsdWVDaGFuZ2UoZTogYW55LCBlbGVtZW50PzogYW55KSB7XHJcbiAgICB0aGlzLnRvZ2dsZUNoYW5nZWQuZW1pdCh7ZSwgZWxlbWVudH0pXHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMudW5TdWJzY3JpYmUubmV4dDtcclxuICAgIHRoaXMudW5TdWJzY3JpYmUuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG5cclxuICBwYXJzZUludCh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZVNjcm9sbCgpIHtcclxuICAgIGZyb21FdmVudCh0aGlzLm1hdFRhYmxlUmVmLm5hdGl2ZUVsZW1lbnQsIEV2ZW50cy5TQ1JPTEwpXHJcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSgyMDApKVxyXG4gICAgICAuc3Vic2NyaWJlKChlOiBhbnkpID0+IHRoaXMub25UYWJsZVNjcm9sbChlKSk7XHJcbiAgfVxyXG5cclxuICB2aWV3Rm9ybSh1cmw6IHN0cmluZykge1xyXG4gICAgd2luZG93Lm9wZW4oJy9ncm91cC9pLWdhdGUvd20tYnBtL2Zvcm1zP2Zvcm1JZD0nICsgdXJsKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25UYWJsZVNjcm9sbChlOiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IHRhYmxlVmlld0hlaWdodCA9IGUudGFyZ2V0Lm9mZnNldEhlaWdodCAvLyB2aWV3cG9ydDogfjUwMHB4XHJcbiAgICBjb25zdCB0YWJsZVNjcm9sbEhlaWdodCA9IGUudGFyZ2V0LnNjcm9sbEhlaWdodCAvLyBsZW5ndGggb2YgYWxsIHRhYmxlXHJcbiAgICBjb25zdCBzY3JvbGxMb2NhdGlvbiA9IGUudGFyZ2V0LnNjcm9sbFRvcDsgLy8gaG93IGZhciB1c2VyIHNjcm9sbGVkXHJcbiAgICBjb25zdCBzY3JvbGxEb3duTGltaXQgPSB0YWJsZVNjcm9sbEhlaWdodCAtIHRhYmxlVmlld0hlaWdodDtcclxuICAgIGNvbnN0IGlzU2Nyb2xsaW5nVmVydGljYWxseSA9IGUudGFyZ2V0LnNjcm9sbEhlaWdodCA+IGUudGFyZ2V0Lm9mZnNldEhlaWdodDtcclxuICAgIGlmIChpc1Njcm9sbGluZ1ZlcnRpY2FsbHkgJiYgKHNjcm9sbExvY2F0aW9uICsgMikgPiBzY3JvbGxEb3duTGltaXQpIHtcclxuICAgICAgdGhpcy5wYWdlU2Nyb2xsLmVtaXQodHJ1ZSlcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiAjdGFibGUgY2xhc3M9XCJ0YWJsZS1jb250YWluZXIgdGFibGUtcmVzcG9uc2l2ZSBzdGlja3ktdGFibGVcIj5cclxuICBAaWYgKCFpc0xvYWRpbmcpIHtcclxuICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgIEBpZiAoZGF0YVNvdXJjZS5maWx0ZXJlZERhdGE/Lmxlbmd0aCEgPiAwKSB7XHJcbiAgICAgICAgPHRhYmxlXHJcbiAgICAgICAgICAjdGFibGVTb3J0PVwibWF0U29ydFwiXHJcbiAgICAgICAgICAobWF0U29ydENoYW5nZSk9XCJzb3J0Q2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiXHJcbiAgICAgICAgICBjbGFzcz1cInByaW1hcnktdGFibGUge3sgY2xhc3NOYW1lIH19XCJcclxuICAgICAgICAgIG1hdC10YWJsZVxyXG4gICAgICAgICAgbWF0U29ydFxyXG4gICAgICAgID5cclxuICAgICAgICAgIEBmb3IgKGNvbHVtbiBvZiBjb2x1bW5zOyB0cmFjayAkaW5kZXg7IGxldCBpID0gJGluZGV4KSB7XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPCEtLSBBZGQgYSBjaGVjayB0byBlbnN1cmUgJ2NvbHVtbnNDb25maWcnIGFuZCAnY29sdW1uc0NvbmZpZ1tpXScgYXJlIGRlZmluZWQgYmVmb3JlIHVzaW5nIHRoZW0gLS0+XHJcblxyXG4gICAgICAgICAgICAgIEBpZiAoY29sdW1uc0NvbmZpZyAmJiBjb2x1bW5zQ29uZmlnW2ldKSB7XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgW21hdENvbHVtbkRlZl09XCJjb2x1bW5cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtzdGlja3lFbmRdPVwiISFjb2x1bW5zQ29uZmlnW2ldLnN0aWNreUVuZCFcIlxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgQGlmICghY29sdW1uc0NvbmZpZ1tpXS5ub3RTb3J0YWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm1hdEhlYWRlckNlbGxEZWZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICd0ZXh0LWVuZCc6IGNvbHVtbnNDb25maWdbaV0udHlwZSA9PT0gJ2FjdGlvbnMnIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1oZWFkZXItY2VsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1zb3J0LWhlYWRlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChjb2x1bW5zQ29uZmlnW2ldLnR5cGUgIT09ICdjaGVja2JveCcgfHwgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5zQ29uZmlnW2ldPy50eXBlISA9PSAnYWN0aW9ucycgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uc0NvbmZpZ1tpXT8uYWN0aW9ucz8ubGVuZ3RoID09PSAwKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmICghKHRoaXMuY29sdW1uc0NvbmZpZ1tpXS50eXBlID09ICdhY3Rpb25zJyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uc0NvbmZpZ1tpXS5hY3Rpb25zLmxlbmd0aCA9PT0gMCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm14LTEgZmMte3sgY29sdW1uc0NvbmZpZ1tpXS5mb250Q29sb3IgfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgY29sdW1uc0NvbmZpZ1tpXS5sYWJlbCB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGNvbHVtbnNDb25maWdbaV0uc2xhTWF4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkcy1zbGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2FudmFzU2NhbGVdPVwiJzQwJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubmVyTGluZVdpZHRoXT1cIiczJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21heFZhbHVlXT1cImNvbHVtbnNDb25maWdbaV0uc2xhTWF4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3V0ZXJMaW5lQ29sb3JdPVwiJ2xpbWVncmVlbidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvdXRlckxpbmVXaWR0aF09XCInMydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJjb2x1bW5zQ29uZmlnW2ldLnNsYVZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRhYmxlLWhlYWRlci1zbGEgbXktMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2RzLXNsYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoY29sdW1uc0NvbmZpZ1tpXS50eXBlID09ICdjaGVja2JveCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggY2xhc3M9XCJjaGVja2JveFwiPjwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBAaWYgKGNvbHVtbnNDb25maWdbaV0ubm90U29ydGFibGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICptYXRIZWFkZXJDZWxsRGVmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAndGV4dC1lbmQnOiBjb2x1bW5zQ29uZmlnW2ldLnR5cGUgPT09ICdhY3Rpb25zJyB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXQtaGVhZGVyLWNlbGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXgtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjb2x1bW5zQ29uZmlnW2ldLmxhYmVsIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoY29sdW1uc0NvbmZpZ1tpXS5zbGFNYXgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRzLXNsYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYW52YXNTY2FsZV09XCInNTAnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5uZXJMaW5lV2lkdGhdPVwiJzMnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF4VmFsdWVdPVwiY29sdW1uc0NvbmZpZ1tpXS5zbGFNYXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvdXRlckxpbmVDb2xvcl09XCInbGltZWdyZWVuJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW291dGVyTGluZVdpZHRoXT1cIiczJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImNvbHVtbnNDb25maWdbaV0uc2xhVmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGFibGUtaGVhZGVyLXNsYSBteS0xXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvZHMtc2xhPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8dGQgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudDsgbGV0IGogPSBpbmRleFwiIG1hdC1jZWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiY29sdW1uc0NvbmZpZ1tpXS50eXBlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gICAgICAgICAgICA8YSB0YXJnZXQ9XCJfYmxhbmtcIi0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tICAgICAgICAgICAgICAgcm91dGVyTGluaz1cIi9pbmJveFwiIFtxdWVyeVBhcmFtc109XCJ7IGlkOiBlbGVtZW50W2NvbHVtbl0gfVwiLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gICAgICAgICAgICAgICBjbGFzcz1cImZjLWJsYWNrIHRleHQtZGVjb3JhdGlvbi11bmRlcmxpbmUgZnctbWVkaXVtXCIgW25nQ2xhc3NdPVwiY29sdW1uc0NvbmZpZ1tpXS50eXBlXCIgKm5nU3dpdGNoQ2FzZT1cIidsaW5rJ1wiPi0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tICAgICAgICAgICAgICB7eyBlbGVtZW50W2NvbHVtbl0gfX0tLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSAgICAgICAgICAgIDwvYT4tLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2Zvcm1JZCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ2aWV3Rm9ybShlbGVtZW50W2NvbHVtbl0pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW5zQ29uZmlnW2ldLnR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmMtY29yYWwgY3Vyc29yLXBvaW50ZXIgdGV4dC1kZWNvcmF0aW9uLXVuZGVybGluZSBmdy1tZWRpdW1cIj5cclxuICAgICAgICAgICAgICAgICAge3sgZWxlbWVudFtjb2x1bW5dIH19XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInbGluaydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbHVtbnNDb25maWdbaV0udHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmYy1ibGFjayB0ZXh0LWRlY29yYXRpb24tdW5kZXJsaW5lIGZ3LW1lZGl1bVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBlbGVtZW50W2NvbHVtbl0gfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPi0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2xpbmtXaXRoSWNvbidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFthcHBTa2lwTG9jYXRpb25dPVwiY29sdW1uc0NvbmZpZ1tpXS5saW5rXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW5zQ29uZmlnW2ldLnR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmMtYmxhY2sgdGV4dC1kZWNvcmF0aW9uLXVuZGVybGluZSBmdy1tZWRpdW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxkcy1pY29uXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmcy0yMCBmYy1ibGFja1wiXHJcbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cIiB7eyBjb2x1bW5zQ29uZmlnW2ldLmljb24gfX1cIlxyXG4gICAgICAgICAgICAgICAgICA+PC9kcy1pY29uPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZzLTEzIGZjLWNvcmFsIHB4LTEgdGV4dC1kZWNvcmF0aW9uLXVuZGVybGluZVwiPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50W2NvbHVtbl1cclxuICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ3VuZGVyTGluZVdpdGhJY29uJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uc0NvbmZpZ1tpXS50eXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZjLWJsYWNrIHRleHQtZGVjb3JhdGlvbi11bmRlcmxpbmUgZnctbWVkaXVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8ZHMtaWNvblxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZnMtMjAgZmMtYmxhY2tcIlxyXG4gICAgICAgICAgICAgICAgICAgIGljb249XCIge3sgY29sdW1uc0NvbmZpZ1tpXS5pY29uIH19XCJcclxuICAgICAgICAgICAgICAgICAgPjwvZHMtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmcy0xMyBmYy1jb3JhbCBweC0xIHRleHQtZGVjb3JhdGlvbi11bmRlcmxpbmVcIj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgZWxlbWVudFtjb2x1bW5dXHJcbiAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3hcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2NoZWNrYm94J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD1cInt7IGNvbHVtbnNDb25maWdbaV0uY2hlY2tlZCB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9XCJ7eyBjb2x1bW5zQ29uZmlnW2ldLmRpc2FibGVkIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGVja2JveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ1NlcnZpY2VEZXRhaWxzJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uc0NvbmZpZ1tpXS50eXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICB7eyBlbGVtZW50W2NvbHVtbl0gfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2RhdGVPbmx5J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uc0NvbmZpZ1tpXS50eXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImQtaW5saW5lLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIHRleHQtbm93cmFwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNmaSBzZmktY2FsZW5kYXItbyBmYy1jb3JhbCBmcy0xOFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBlbGVtZW50W2NvbHVtbl0gfCBkYXRlIDogXCJNTU0gZCwgeVwiIH19XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidTZWFyY2gnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW5zQ29uZmlnW2ldLnR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1pbmxpbmUtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxhcHAtaW5wdXRcclxuICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiY3RybFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidTZWFyY2ggZm9yIGl0ZW0gJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW3Nob3dMYWJlbF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm5vLXBhZGRpbmcgXCJcclxuICAgICAgICAgICAgICAgICAgICBwcmVmaXg9XCJzZmktc2VhcmNoIGZzLTE2XCJcclxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPC9hcHAtaW5wdXQ+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidOdW1iZXInXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW5zQ29uZmlnW2ldLnR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1pbmxpbmUtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxhcHAtaW5wdXRcclxuICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiY3RybFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidudW1iZXInXCJcclxuICAgICAgICAgICAgICAgICAgICBbc2hvd0xhYmVsXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIlwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibm8tcGFkZGluZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDwvYXBwLWlucHV0PlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInZGF0ZUZyb21UbydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbHVtbnNDb25maWdbaV0udHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWlubGluZS1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZmkgc2ZpLWNsb2NrIGZjLWNvcmFsXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm14LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBlbGVtZW50Py5kYXRlLmZyb20gfX1cclxuICAgICAgICAgICAgICAgICAgICBAaWYgKGVsZW1lbnQ/LmRhdGUudG8pIHtcclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+IDoge3sgZWxlbWVudD8uZGF0ZS50byB9fSA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidkYXRlVGltZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbHVtbnNDb25maWdbaV0udHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWlubGluZS1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMSBmbGV4LXdyYXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2ZpIHNmaS1jYWxlbmRhci1vIGZjLWRhcmstZ3JheSBmcy0yMFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBlbGVtZW50W2NvbHVtbl0gfCBkYXRlIDogXCJNTU0gZCwgeSwgaDptbSBhXCIgfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidzaW5nbGVUaW1lT25seSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbHVtbnNDb25maWdbaV0udHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWlubGluZS1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMSBmbGV4LXdyYXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIHt7IGVsZW1lbnRbY29sdW1uXSB8IGRhdGUgOiBcImg6bW0gYVwiIH19XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1kaXI9XCJsdHJcIiBhbmQgdGV4dC1sZWZ0IGZvciBFbmdsaXNoIHRleHQgb24gYXIgcGFnZSAgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIid0aW1lT25seSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbHVtbnNDb25maWdbaV0udHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWlubGluZS1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMSBmbGV4LXdyYXAgdGV4dC1ub3dyYXAgdGV4dC1sZWZ0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBkaXI9XCJsdHJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBUZXh0KGNvbHVtbnNDb25maWdbaV0uZmlyc3RWYWwsIGVsZW1lbnRbY29sdW1uXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkYXRlIDogXCJoOm1tIGFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChtYXBUZXh0KGNvbHVtbnNDb25maWdbaV0uc2Vjb25kVmFsLCBlbGVtZW50W2NvbHVtbl0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIC1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBUZXh0KGNvbHVtbnNDb25maWdbaV0uc2Vjb25kVmFsLCBlbGVtZW50W2NvbHVtbl0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGRhdGUgOiBcImg6bW0gYVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidtdWx0aXBsZVJvd3MnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW5zQ29uZmlnW2ldLnR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1pbmxpbmUtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTEgZmxleC13cmFwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tICAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKCFlbGVtZW50W2NvbHVtbl0ubW9udGhseUZpbmVFc2NhbGF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGVsZW1lbnRbY29sdW1uXS5maXhlZEZpbmVWYWx1ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcImdsb2JhbC5TQVJcIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChlbGVtZW50W2NvbHVtbl0ubW9udGhseUZpbmVFc2NhbGF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxici8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGVsZW1lbnRbY29sdW1uXS5maXJzdFRpbWVGaW5lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwiZ2xvYmFsLlNBUlwiIHwgdHJhbnNsYXRlIH19IDxici8+PGJyLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZWxlbWVudFtjb2x1bW5dLnNlY29uZFRpbWVGaW5lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwiZ2xvYmFsLlNBUlwiIHwgdHJhbnNsYXRlIH19IDxici8+PGJyLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZWxlbWVudFtjb2x1bW5dLnRoaXJkVGltZUZpbmUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgXCJnbG9iYWwuU0FSXCIgfCB0cmFuc2xhdGUgfX0gPGJyLz48YnIvPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidzbGEnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW5zQ29uZmlnW2ldLnR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1pbmxpbmUtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSAgICAgICAgICAgICAgPGFwcC1zbGEgW3ZhbHVlXT1cImVsZW1lbnQ/LlNMQS52YWx1ZVwiIFttYXhWYWx1ZV09XCJlbGVtZW50Py5TTEEubWF4XCIgW2NhbnZhc1NjYWxlXT1cIjM4XCIgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSAgICAgICAgICAgICAgICBjbGFzcz1cImZvbnQtOSBmdy1tZWRpdW1cIiBbb3V0ZXJMaW5lQ29sb3JdPVwiZ2V0U2xhQ29sb3IoZWxlbWVudD8uU0xBLnZhbHVlLCBlbGVtZW50Py5TTEEubWF4KVwiPi0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gICAgICAgICAgICAgIDwvYXBwLXNsYT4tLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRzLXNsYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIub3V0ZXJMaW5lQ29sb3JdPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBnZXRTbGFDb2xvcihlbGVtZW50Py5TTEEudmFsdWUsIGVsZW1lbnQ/LlNMQS5tYXgpXHJcbiAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYW52YXNTY2FsZV09XCInNTUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbm5lckxpbmVXaWR0aF09XCInMydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21heFZhbHVlXT1cImVsZW1lbnQ/LlNMQT8ubWF4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvdXRlckxpbmVXaWR0aF09XCInMydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImVsZW1lbnQ/LlNMQT8udmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgID48L2RzLXNsYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidzbGFQcm9ncmVzcydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tICAgICAgICAgICAgICA8bWF0LXNwLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZWxlbWVudFtjb2x1bW5dPy5wZXJjZW50YWdlID49IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkcy1zbGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NhbnZhc1NjYWxlXT1cIic1NSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY3VzdG9tVmFsdWVdPVwiZWxlbWVudFtjb2x1bW5dPy5wZXJjZW50YWdlICsgJyUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubmVyTGluZVdpZHRoXT1cIiczJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXhWYWx1ZV09XCInMTAwJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvdXRlckxpbmVDb2xvcl09XCJcclxuICAgICAgICAgICAgICAgICAgICAgIGdldFNsYUNvbG9yKGVsZW1lbnRbY29sdW1uXT8ucGVyY2VudGFnZSwgMTAwKVxyXG4gICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvdXRlckxpbmVXaWR0aF09XCInMydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZWxlbWVudFtjb2x1bW5dPy5wZXJjZW50YWdlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2RzLXNsYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZT5Ob3Qgc3RhcnRlZDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInUHJpb3JpdHknXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW5zQ29uZmlnW2ldLnR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgZWxlbWVudFtjb2x1bW5dIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGVsZW1lbnRbY29sdW1uXSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ3NlcnZpY2VTdGF0dXMnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW5zQ29uZmlnW2ldLnR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgZWxlbWVudFtjb2x1bW5dIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImVsZW1lbnRbY29sdW1uXSA9PSAnRkFMU0UnID8gJ2dyZWVuJyA6ICdyZWQnXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRvdC1zdGF0dXNcIlxyXG4gICAgICAgICAgICAgICAgICA+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2ltYWdlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uc0NvbmZpZ1tpXS50eXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImltZy1jYXJkIHRhYmxlLWltZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cImVsZW1lbnQ/LmltYWdlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmVycm9yPVwidGhpcy5vbmVycm9yPW51bGw7dGhpcy5zcmM9J2Fzc2V0cy9pbWFnZXMvdXNlci5zdmcnO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidlbXBsb3llZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbHVtbnNDb25maWdbaV0udHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIHRleHQtbm93cmFwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkcy1hdmF0YXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbWFnZV09XCInaHR0cHM6Ly9pZ2F0ZWFwcC5zdGMuY29tLnNhJytlbGVtZW50W2NvbHVtbl0/LlsnaW1hZ2VVcmwnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwieC1zbWFsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZHMtYXZhdGFyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IChlbGVtZW50W2NvbHVtbl0/LlsnbmFtZSddKSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidwcm9ncmVzc19ncm91cCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbHVtbnNDb25maWdbaV0udHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggZ2FwLTFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBlbGVtZW50W2NvbHVtbl1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwcm9ncmVzcy1jb250YWluZXIgZGVmYXVsdC1wcm9ncmVzcyBtZWRpdW0gcmFkaXVzLTBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiVGVhbSBhc3NpZ25tZW50IHt7IGl0ZW0udmFsdWUgfX0lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYmVsb3dcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLiVdPVwiaXRlbS52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwcm9ncmVzcy1iYXIgYmctY29sb3Ite3sgaXRlbS5jb2xvciB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInaW5wdXQnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW5zQ29uZmlnW2ldLnR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtaW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJpbnB1dENlbGxDaGFuZ2VkLmVtaXQoe2VsZW1lbnQsY29sdW1uLGl9KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVsZW1lbnRbY29sdW1uXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWluXT1cIjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImVsZW1lbnRbY29sdW1uXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInctMTAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIiBuby1wYWRkaW5nIHctMTAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJ7eyBlbGVtZW50W2NvbHVtbl0gfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FwcC1pbnB1dD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidhdXRvQ29tcGxldGUnXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ3NlbGVjdCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbHVtbnNDb25maWdbaV0udHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1jdXN0b20tc2VhcmNoYWJsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkVmFsdWUpPVwic2VsZWN0VmFsdWVTZWxlY3RlZC5lbWl0KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzU2VhcmNoYWJsZV09XCJjb2x1bW5zQ29uZmlnW2ldLmNvbmZpZz8uaXNTZWFyY2hhYmxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtrZXldPVwiY29sdW1uc0NvbmZpZ1tpXT8ua2V5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNwbGF5ZWRMYWJlbF09XCJjb2x1bW5zQ29uZmlnW2ldPy5kaXNwbGF5ZWRMYWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJjb2x1bW5zQ29uZmlnW2ldPy5vcHRpb25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwb3N0S2V5XT1cImNvbHVtbnNDb25maWdbaV0/LnBvc3RLZXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dMYWJlbF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJuby1wYWRkaW5nIHctMTAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hcHAtY3VzdG9tLXNlYXJjaGFibGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInc3RhdHVzJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiJ05ldycgKyBjb2x1bW5zQ29uZmlnW2ldLnR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGVsZW1lbnRbY29sdW1uXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRzLXN0YXR1cyBbc3RhdHVzXT1cImVsZW1lbnRbY29sdW1uXT8uc3RhdHVzXCIgY2xhc3M9XCJmcy0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBlbGVtZW50W2NvbHVtbl0/LnRpdGxlIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RzLXN0YXR1cz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChlbGVtZW50W2NvbHVtbl0/LnJlYXNvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJyZWFzb25NZW51XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uc0NvbmZpZ1tpXS50eXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uc0NvbmZpZ1tpXS50eXBlXHJcbiAgICAgICAgICAgICAgICAgICAgfX0gZmMtcmVkIHVuZGVybGluZSBjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgU2hvdyByZWFzb25cclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1tZW51ICNyZWFzb25NZW51PVwibWF0TWVudVwiIGNsYXNzPVwicC00IHRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmcy0xNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3sgZWxlbWVudFtjb2x1bW5dPy5yZWFzb24gfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbWVudT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIid0b2dnbGUnXCIgW25nQ2xhc3NdPVwiY29sdW1uc0NvbmZpZ1tpXS50eXBlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlVmFsdWVDaGFuZ2UoJGV2ZW50LCBlbGVtZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJlbGVtZW50W2NvbHVtbl0gPT0gMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgID48L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInY3VzdG9tVG9nZ2xlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uc0NvbmZpZ1tpXS50eXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZVZhbHVlQ2hhbmdlKCRldmVudCwgZWxlbWVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiZWxlbWVudFtjb2x1bW5dID09IDdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImVsZW1lbnRbY29sdW1uXSAhPSAxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInbWVldGluZ1N0YXR1cydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbHVtbnNDb25maWdbaV0udHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7eyBjb2x1bW5zQ29uZmlnW2ldLnR5cGUgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChlbGVtZW50W2NvbHVtbl0ubGFiZWwgPT0gJ0ZpbmlzaGVkJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCIge3sgZWxlbWVudFtjb2x1bW5dLmxhYmVsIH19IHN0YXR1cyAgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgZWxlbWVudFtjb2x1bW5dLmxhYmVsIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChlbGVtZW50W2NvbHVtbl0ubGFiZWwgIT0gJ0ZpbmlzaGVkJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiRmluaXNoZWQgZC1mbGV4IGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHB5LTEgZmMtYmxhY2tcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZzLTExIGZ3LW1lZGl1bSBtYi0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGVsZW1lbnRbY29sdW1uXS5ob3VycyB9fTwvc3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZnMtMTAgZnctbGlnaHRcIj5IUlM8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJGaW5pc2hlZCBkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgcHktMSBmYy1ibGFja1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZnMtMTEgZnctbWVkaXVtIG1iLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgZWxlbWVudFtjb2x1bW5dLm1pbiB9fTwvc3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZnMtMTAgZnctbGlnaHRcIj5NSU5TPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiRmluaXNoZWQgZC1mbGV4IGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHB5LTEgZmMtYmxhY2tcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZzLTExIGZ3LW1lZGl1bSBtYi0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGVsZW1lbnRbY29sdW1uXS5zZWMgfX08L3NwYW5cclxuICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZzLTEwIGZ3LWxpZ2h0XCI+U0VDUzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInbnVtYmVyJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uc0NvbmZpZ1tpXS50eXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7IGNvbHVtbnNDb25maWdbaV0udHlwZSB9fSB7e1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRbY29sdW1uXSA/ICd1bmRlcmxpbmUnIDogJydcclxuICAgICAgICAgICAgICAgICAgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIHt7IGVsZW1lbnRbY29sdW1uXSA/IGVsZW1lbnRbY29sdW1uXSA6IDAgfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidjdXJyZW5jeSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbHVtbnNDb25maWdbaV0udHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7eyBjb2x1bW5zQ29uZmlnW2ldLnR5cGUgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIHt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50W2NvbHVtbl1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBwYXJzZUludChlbGVtZW50W2NvbHVtbl0pLnRvRml4ZWQoMikgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29sdW1uc0NvbmZpZ1tpXS5jdXJyZW5jeSB8IHRyYW5zbGF0ZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcIi1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidhY3RpdmUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW5zQ29uZmlnW2ldLnR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgY29sdW1uc0NvbmZpZ1tpXS50eXBlIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8ZHMtaWNvblxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImVsZW1lbnRbY29sdW1uXSA/ICdmYy1ncmVlbicgOiAnZmMtZ3JheSdcIlxyXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJjaGVjay1jaXJjbGUtZiBmcy0zMFwiXHJcbiAgICAgICAgICAgICAgICAgID48L2RzLWljb24+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ3N5bmMnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW5zQ29uZmlnW2ldLnR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3tcclxuICAgICAgICAgICAgICAgICAgICBjb2x1bW5zQ29uZmlnW2ldLnR5cGVcclxuICAgICAgICAgICAgICAgICAgfX0gZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIxOVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE4IDE5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMThcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xNC4yNSAxMy4yNjA0QzEzLjk0MjUgMTMuMjYwNCAxMy42ODc1IDEyLjk5MTMgMTMuNjg3NSAxMi42NjY3VjUuMTQ1ODNDMTMuNjg3NSA0LjU5OTU4IDEzLjI2NzUgNC4xNTYyNSAxMi43NSA0LjE1NjI1SDguNjI1QzguMzE3NSA0LjE1NjI1IDguMDYyNSAzLjg4NzA4IDguMDYyNSAzLjU2MjVDOC4wNjI1IDMuMjM3OTIgOC4zMTc1IDIuOTY4NzUgOC42MjUgMi45Njg3NUgxMi43NUMxMy44OSAyLjk2ODc1IDE0LjgxMjUgMy45NDI1IDE0LjgxMjUgNS4xNDU4M1YxMi42NjY3QzE0LjgxMjUgMTIuOTkxMyAxNC41NTc1IDEzLjI2MDQgMTQuMjUgMTMuMjYwNFpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiI0ZGMzc1RVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMC41IDYuMTM1NDlDMTAuMzcyNSA2LjEzNTQ5IDEwLjI0NSA2LjA4OCAxMC4xNCA2LjAwMDkyTDcuODg5OTkgNC4wMjE3NUM3Ljc2MjQ5IDMuOTEwOTIgNy42ODc1IDMuNzQ0NjUgNy42ODc1IDMuNTYyNTdDNy42ODc1IDMuMzgwNDggNy43NjI0OSAzLjIyMjE0IDcuODg5OTkgMy4xMDMzOUwxMC4xNCAxLjEyNDIyQzEwLjM4IDAuOTEwNDcxIDEwLjczMjUgMC45NTAwODQgMTAuOTM1IDEuMjAzNDJDMTEuMTM3NSAxLjQ1Njc1IDExLjEgMS44Mjg4MyAxMC44NiAyLjA0MjU4TDkuMTI3NTEgMy41NjI1N0wxMC44NiA1LjA4MjU1QzExLjEgNS4yOTYzMSAxMS4xMyA1LjY2ODM5IDEwLjkzNSA1LjkyMTcyQzEwLjgyMjUgNi4wNjQyMiAxMC42NTc1IDYuMTM1NDkgMTAuNSA2LjEzNTQ5WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjRkYzNzVFXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE0LjI1IDE4LjAxMDVDMTIuNjk3NSAxOC4wMTA1IDExLjQzNzUgMTYuNjgwNSAxMS40Mzc1IDE1LjA0MTdDMTEuNDM3NSAxMy40MDMgMTIuNjk3NSAxMi4wNzMgMTQuMjUgMTIuMDczQzE1LjgwMjUgMTIuMDczIDE3LjA2MjUgMTMuNDAzIDE3LjA2MjUgMTUuMDQxN0MxNy4wNjI1IDE2LjY4MDUgMTUuODAyNSAxOC4wMTA1IDE0LjI1IDE4LjAxMDVaTTE0LjI1IDEzLjI2MDVDMTMuMzIgMTMuMjYwNSAxMi41NjI1IDE0LjA2MDEgMTIuNTYyNSAxNS4wNDE3QzEyLjU2MjUgMTYuMDIzNCAxMy4zMiAxNi44MjMgMTQuMjUgMTYuODIzQzE1LjE4IDE2LjgyMyAxNS45Mzc1IDE2LjAyMzQgMTUuOTM3NSAxNS4wNDE3QzE1LjkzNzUgMTQuMDYwMSAxNS4xOCAxMy4yNjA1IDE0LjI1IDEzLjI2MDVaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNGRjM3NUVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOS4zNzUgMTYuMDMxMkg1LjI1QzQuMTEgMTYuMDMxMiAzLjE4NzUgMTUuMDU3NCAzLjE4NzUgMTMuODU0MVY2LjMzMzI1QzMuMTg3NSA2LjAwODY3IDMuNDQyNSA1LjczOTUgMy43NSA1LjczOTVDNC4wNTc1IDUuNzM5NSA0LjMxMjUgNi4wMDg2NyA0LjMxMjUgNi4zMzMyNVYxMy44NTQxQzQuMzEyNSAxNC40MDAzIDQuNzMyNSAxNC44NDM3IDUuMjUgMTQuODQzN0g5LjM3NUM5LjY4MjUgMTQuODQzNyA5LjkzNzUgMTUuMTEyOCA5LjkzNzUgMTUuNDM3NEM5LjkzNzUgMTUuNzYyIDkuNjgyNSAxNi4wMzEyIDkuMzc1IDE2LjAzMTJaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNGRjM3NUVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNy40OTk3IDE4LjAxMDRDNy4zNDIyIDE4LjAxMDQgNy4xNzcyMSAxNy45MzkxIDcuMDY0NzEgMTcuNzk2NkM2Ljg2MjIxIDE3LjU0MzMgNi44OTk2OSAxNy4xNzEyIDcuMTM5NjkgMTYuOTU3NEw4Ljg3MjE5IDE1LjQzNzVMNy4xMzk2OSAxMy45MTc1QzYuODk5NjkgMTMuNzAzNyA2Ljg2OTcxIDEzLjMzMTYgNy4wNjQ3MSAxMy4wNzgzQzcuMjY3MjEgMTIuODI1IDcuNjE5NzEgMTIuNzkzMyA3Ljg1OTcxIDEyLjk5OTFMMTAuMTA5NyAxNC45NzgzQzEwLjIzNzIgMTUuMDg5MSAxMC4zMTIyIDE1LjI1NTQgMTAuMzEyMiAxNS40Mzc1QzEwLjMxMjIgMTUuNjE5NSAxMC4yMzcyIDE1Ljc3NzkgMTAuMTA5NyAxNS44OTY2TDcuODU5NzEgMTcuODc1OEM3Ljc1NDcxIDE3Ljk2MjkgNy42MjcyIDE4LjAxMDQgNy40OTk3IDE4LjAxMDRaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNGRjM3NUVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMy43NSA2LjkyN0MyLjE5NzUgNi45MjcgMC45Mzc1IDUuNTk3IDAuOTM3NSAzLjk1ODI1QzAuOTM3NSAyLjMxOTUgMi4xOTc1IDAuOTg5NTAyIDMuNzUgMC45ODk1MDJDNS4zMDI1IDAuOTg5NTAyIDYuNTYyNSAyLjMxOTUgNi41NjI1IDMuOTU4MjVDNi41NjI1IDUuNTk3IDUuMzAyNSA2LjkyNyAzLjc1IDYuOTI3Wk0zLjc1IDIuMTc3QzIuODIgMi4xNzcgMi4wNjI1IDIuOTc2NTkgMi4wNjI1IDMuOTU4MjVDMi4wNjI1IDQuOTM5OTIgMi44MiA1LjczOTUgMy43NSA1LjczOTVDNC42OCA1LjczOTUgNS40Mzc1IDQuOTM5OTIgNS40Mzc1IDMuOTU4MjVDNS40Mzc1IDIuOTc2NTkgNC42OCAyLjE3NyAzLjc1IDIuMTc3WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjRkYzNzVFXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZWxlbWVudFtjb2x1bW5dIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2NsaWNrYWJsZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGVsZW1lbnQ/Lltjb2x1bW5dKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjc3RhdHVzTWVudVRyaWdnZXI9XCJtYXRNZW51VHJpZ2dlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwiZGVzY01lbnVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW5zQ29uZmlnW2ldLnR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5zQ29uZmlnW2ldLnR5cGVcclxuICAgICAgICAgICAgICAgICAgICB9fSBmYy1jb3JhbCB1bmRlcmxpbmUgY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGNvbHVtbnNDb25maWdbaV0uY2xpY2thYmxlVGV4dCB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW1lbnUgI2Rlc2NNZW51PVwibWF0TWVudVwiIGNsYXNzPVwicC00IHRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmcy0xNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3sgZWxlbWVudFtjb2x1bW5dIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW1lbnU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAjc3RhdHVzTWVudVRyaWdnZXI9XCJtYXRNZW51VHJpZ2dlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIid0cmFuc2xhdGVkQ2xpY2thYmxlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdE1lbnVUcmlnZ2VyRm9yXT1cImRlc2NNZW51VHJhbnNsYXRlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uc0NvbmZpZ1tpXS50eXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uc0NvbmZpZ1tpXS50eXBlXHJcbiAgICAgICAgICAgICAgICAgIH19IGZjLWNvcmFsIHVuZGVybGluZSBjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAge3sgY29sdW1uc0NvbmZpZ1tpXS5jbGlja2FibGVUZXh0IHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSB7eyAnZ2xvYmFsLnZpZXcnIHwgdHJhbnNsYXRlfX0gLS0+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW1lbnUgI2Rlc2NNZW51VHJhbnNsYXRlZD1cIm1hdE1lbnVcIiBjbGFzcz1cInAtNCB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZzLTE0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3tcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnNDb25maWdbaV0uYXJLZXlcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0cmFuc2xhdGVTZXJ2aWNlLmN1cnJlbnRMYW5nID09IFwiYXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gbWFwVGV4dChjb2x1bW5zQ29uZmlnW2ldLmFyS2V5LCBlbGVtZW50W2NvbHVtbl0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBtYXBUZXh0KGNvbHVtbnNDb25maWdbaV0uZW5LZXksIGVsZW1lbnRbY29sdW1uXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBlbGVtZW50W2NvbHVtbl1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IGVsZW1lbnRbY29sdW1uXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogXCItXCJcclxuICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW1lbnU+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICNzdGF0dXNNZW51VHJpZ2dlcj1cIm1hdE1lbnVUcmlnZ2VyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2NvbmRpdGlvbmFsQ2xpY2thYmxlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdE1lbnVUcmlnZ2VyRm9yXT1cImRlc2NDb25kaXRpb25hbE1lbnVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbHVtbnNDb25maWdbaV0udHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7e1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbnNDb25maWdbaV0udHlwZVxyXG4gICAgICAgICAgICAgICAgICB9fSBmYy1jb3JhbCB1bmRlcmxpbmUgY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIEBpZiAoZWxlbWVudFtjb2x1bW5dICYmIGVsZW1lbnRbY29sdW1uXSAhPSAnbnVsbCcpIHtcclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBjb2x1bW5zQ29uZmlnW2ldLmNsaWNrYWJsZVRleHQgfCB0cmFuc2xhdGUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHt7ICdnbG9iYWwudmlldycgfCB0cmFuc2xhdGV9fSAtLT5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbWVudVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICNkZXNjQ29uZGl0aW9uYWxNZW51PVwibWF0TWVudVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLTQgdGV4dC1jZW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZnMtMTRcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBlbGVtZW50W2NvbHVtbl0gfX1cclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1tZW51PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2Ryb3Bkb3duJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdE1lbnVUcmlnZ2VyRm9yXT1cImRyb3Bkb3duTWVudVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uc0NvbmZpZ1tpXS50eXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7IGNvbHVtbnNDb25maWdbaV0udHlwZSB9fSAgIGN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICB7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uc0NvbmZpZ1tpXS5hcktleVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRyYW5zbGF0ZVNlcnZpY2UuY3VycmVudExhbmcgPT0gXCJhclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBtYXBUZXh0KGNvbHVtbnNDb25maWdbaV0uYXJLZXksIGVsZW1lbnRbY29sdW1uXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG1hcFRleHQoY29sdW1uc0NvbmZpZ1tpXS5lbktleSwgZWxlbWVudFtjb2x1bW5dKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGVsZW1lbnRbY29sdW1uXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZWxlbWVudFtjb2x1bW5dXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcIi1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8c3BhbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiAgZWxlbWVudFtjb2x1bW5dXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7aXRlbS5pZH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+IC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgPGRzLWljb24gY2xhc3M9XCJmYy1ibGFjayBmdy1tZWRpdW1cIiBpY29uPVwiYXJyb3dcIj48L2RzLWljb24+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW1lbnUgI2Ryb3Bkb3duTWVudT1cIm1hdE1lbnVcIiBjbGFzcz1cInAtNCB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidkcm9wZG93bidcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZzLTEyIGZjLWJsYWNrXCIgbWF0LW1lbnUtaXRlbT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwhLS0ge3t0cmFuc2xhdGVTZXJ2aWNlLmN1cnJlbnRMYW5nID09ICdhcicgPyBpdGVtLmdyb3VwTmFtZUFyIDogaXRlbS5ncm91cE5hbWVFbn19IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uc0NvbmZpZ1tpXS5hcktleVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gdHJhbnNsYXRlU2VydmljZS5jdXJyZW50TGFuZyA9PSBcImFyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbWFwVGV4dChjb2x1bW5zQ29uZmlnW2ldLmFyS2V5LCBlbGVtZW50W2NvbHVtbl0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG1hcFRleHQoY29sdW1uc0NvbmZpZ1tpXS5lbktleSwgZWxlbWVudFtjb2x1bW5dKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogZWxlbWVudFtjb2x1bW5dXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGVsZW1lbnRbY29sdW1uXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcIi1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW1lbnU+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInZm9ybWF0TnVtYmVyJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uc0NvbmZpZ1tpXS50eXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwie3tcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50W2NvbHVtbl0gPiAxMDAwID8gZWxlbWVudFtjb2x1bW5dIDogJydcclxuICAgICAgICAgICAgICAgICAgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIHt7IGVsZW1lbnRbY29sdW1uXSB9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInZ3JvdXAnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW5zQ29uZmlnW2ldLnR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1ub3dyYXAgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2NvbXBhbnknXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW5zQ29uZmlnW2ldLnR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbWctY2FyZCBjaXJjbGVkLWltZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbWdcclxuICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwiZWxlbWVudD8uaW1hZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgYWx0PVwiXCJcclxuICAgICAgICAgICAgICAgICAgICAgIG9uZXJyb3I9XCJ0aGlzLm9uZXJyb3I9bnVsbDt0aGlzLnNyYz0nYXNzZXRzL2ltYWdlcy91c2VyLnN2Zyc7XCJcclxuICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJteC0xXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZnVsbC1uYW1lXCI+e3sgZWxlbWVudFtjb2x1bW5dIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIid0cmFuc2xhdGVkJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uc0NvbmZpZ1tpXS50eXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtbm93cmFwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICB7eyBlbGVtZW50W2NvbHVtbl0gfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ3RpdGxlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uc0NvbmZpZ1tpXS50eXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtbm93cmFwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICB7eyBlbGVtZW50W2NvbHVtbl0/LnRpdGxlIH19XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInbWF4V2lkdGgnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW5zQ29uZmlnW2ldLnR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIHt7IGVsZW1lbnRbY29sdW1uXT8udGl0bGUgfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidwcm9ncmVzcydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbHVtbnNDb25maWdbaV0udHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlByb2dyZXNzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWNvbnRhaW5lciBkZWZhdWx0LXByb2dyZXNzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aC4lXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChlbGVtZW50W2NvbHVtbl0uY29uc3VtZWQhIC8gZWxlbWVudFtjb2x1bW5dLnRvdGFsISkgKlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDEwMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInByb2dyZXNzLWJhclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICA+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlByb2dyZXNzX19mb290ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXY+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZzLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgZWxlbWVudFtjb2x1bW5dLmNvbnN1bWVkIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPi88L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYy1zaWx2ZXJcIj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50W2NvbHVtbl0udG90YWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidzdWJzaWRpYXJ5J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uc0NvbmZpZ1tpXS50eXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FsdF09XCJlbGVtZW50W2NvbHVtbl0/LnRpdGxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cImFzc2V0cy9zdWJzaWRpYXJpZXMvaWRzL3t7IGVsZW1lbnRbY29sdW1uXT8uaWQgfX0ucG5nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZnVsbC1uYW1lXCI+e3tlbGVtZW50W2NvbHVtbl19fTwvc3Bhbj4tLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidTZXJ2aWNlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uc0NvbmZpZ1tpXS50eXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2Z1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMzVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAzNCAzNVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjM0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjRkYzNzVFXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbC1vcGFjaXR5PVwiMC4xXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMzMuNVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ4PVwiNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMzMuNVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk9XCIwLjc1XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTI0LjIxMyAxNy4wMzM4SDIyLjE0NDhMMjEuNDUzMiAxNS4xODg0QzIxLjIyMjEgMTQuNTg0NSAyMC42NDkgMTQuMTYyMiAxOS45NzYxIDE0LjE1OTJIMTMuNTMxNUMxMi44NTg2IDE0LjE2MjIgMTIuMjg0NyAxNC41ODM4IDEyLjA1ODIgMTUuMTc3MUwxMi4wNTQ0IDE1LjE4NzZMMTEuMzYyOCAxNy4wMzNIOS4yOTMxMkM5LjA1NTMyIDE3LjAzMyA4Ljg2MzI4IDE3LjIyNTggOC44NjMyOCAxNy40NjI5VjE5LjE4NDVDOC44NjMyOCAxOS40MjIzIDkuMDU2MDcgMTkuNjE0MyA5LjI5MzEyIDE5LjYxNDNIMTAuMjA3Nkw5LjY5ODk2IDIwLjM3OEM5LjUzMjQyIDIwLjYyMzMgOS40MzM0IDIwLjkyNjMgOS40MzM0IDIxLjI1MTlDOS40MzM0IDIxLjI1MjcgOS40MzM0IDIxLjI1MjcgOS40MzM0IDIxLjI1MzRWMjYuMDcwMkM5LjQzMzQgMjYuMzA4IDkuNjI2MTkgMjYuNSA5Ljg2MzI0IDI2LjVIMTIuMTU5NUMxMi4zOTczIDI2LjUgMTIuNTg5MyAyNi4zMDcyIDEyLjU4OTMgMjYuMDcwMlYyNC43NzkxSDIwLjkxVjI2LjA3MDJDMjAuOTEgMjYuMzA4IDIxLjEwMjggMjYuNSAyMS4zMzk5IDI2LjVIMjMuNjM2MUMyMy44NzM5IDI2LjUgMjQuMDY2IDI2LjMwNzIgMjQuMDY2IDI2LjA3MDJWMjEuMjUxOUMyNC4wNjYgMjEuMjUxMiAyNC4wNjYgMjEuMjUxMiAyNC4wNjYgMjEuMjUwNEMyNC4wNjYgMjAuOTI0OCAyMy45NjY5IDIwLjYyMTggMjMuNzk3NCAyMC4zNzA1TDIzLjgwMTEgMjAuMzc1N0wyMy4yOTI1IDE5LjYxMjFIMjQuMjA3QzI0LjQ0NDggMTkuNjEyMSAyNC42MzY4IDE5LjQxOTMgMjQuNjM2OCAxOS4xODIyVjE3LjQ2MDZDMjQuNjM2MSAxNy4yMjU4IDI0LjQ0NzggMTcuMDM2IDI0LjIxNDUgMTcuMDMxNUwyNC4yMTMgMTcuMDMzOFpNMTIuODY1NCAxNS40OTE1QzEyLjk3MTEgMTUuMjE3NiAxMy4yMzE0IDE1LjAyNzEgMTMuNTM2OCAxNS4wMjY0SDE5Ljk3OThDMjAuMjg1MiAxNS4wMjcxIDIwLjU0NTUgMTUuMjE4NCAyMC42NDkgMTUuNDg3TDIwLjY1MDUgMTUuNDkyMkwyMS44NzQ3IDE4Ljc1NjlIMTEuNjM1OUwxMi44NjU0IDE1LjQ5MTVaTTIzLjIxMzggMjMuOTIwMkgxMC4yOTgzVjIxLjI1NDJDMTAuMjk4MyAyMS4yNTM0IDEwLjI5ODMgMjEuMjUzNCAxMC4yOTgzIDIxLjI1MjdDMTAuMjk4MyAyMS4xMDQ5IDEwLjM0MzMgMjAuOTY3NiAxMC40MTk5IDIwLjg1MzZMMTAuNDE4NCAyMC44NTU4TDExLjI0NSAxOS42MTUxSDIyLjI2MThMMjMuMDg4NSAyMC44NTU4QzIzLjE2MzUgMjAuOTY2OCAyMy4yMDg1IDIxLjEwNDkgMjMuMjA4NSAyMS4yNTE5QzIzLjIwODUgMjEuMjUyNyAyMy4yMDg1IDIxLjI1MjcgMjMuMjA4NSAyMS4yNTM0TDIzLjIxMzggMjMuOTIwMlpNOS43Mjg5NiAxNy44OTVIMTEuMDM1N0wxMC43MTMyIDE4Ljc1NjFIOS43MjA3MUw5LjcyODk2IDE3Ljg5NVpNMTEuNzM3OSAyNS42NDExSDEwLjI5ODNWMjQuNzc5OUgxMS43MzM0TDExLjczNzkgMjUuNjQxMVpNMjMuMjE1MyAyNS42NDExSDIxLjc3NVYyNC43Nzk5SDIzLjIxTDIzLjIxNTMgMjUuNjQxMVpNMjMuNzg2OSAxOC43NTQ2SDIyLjc4OTlMMjIuNDY3NCAxNy44OTM1SDIzLjc4MzFMMjMuNzg2OSAxOC43NTQ2Wk0xMi4xNjMyIDIwLjQ3NjJDMTEuMjkxNSAyMC40NzYyIDEwLjU4NTYgMjEuMTgyOSAxMC41ODU2IDIyLjA1MzhDMTAuNTg1NiAyMi45MjQ4IDExLjI5MjMgMjMuNjMxNCAxMi4xNjMyIDIzLjYzMTRDMTMuMDM0OSAyMy42MzE0IDEzLjc0MDggMjIuOTI0OCAxMy43NDA4IDIyLjA1MzhDMTMuNzQwOCAyMS4xODIxIDEzLjAzNDIgMjAuNDc2MiAxMi4xNjMyIDIwLjQ3NjJWMjAuNDc2MlpNMTIuMTYzMiAyMi43NzI1QzExLjc2NzEgMjIuNzcyNSAxMS40NDYxIDIyLjQ1MTQgMTEuNDQ2MSAyMi4wNTUzQzExLjQ0NjEgMjEuNjU5MiAxMS43NjcxIDIxLjMzODIgMTIuMTYzMiAyMS4zMzgyQzEyLjU1OTMgMjEuMzM4MiAxMi44ODA0IDIxLjY1OTIgMTIuODgwNCAyMi4wNTUzQzEyLjg4MDQgMjIuNDUxNCAxMi41NTkzIDIyLjc3MjUgMTIuMTYzMiAyMi43NzI1VjIyLjc3MjVaTTIxLjM0NDQgMjAuNDc2MkMyMC40NzI3IDIwLjQ3NjIgMTkuNzY2OCAyMS4xODI5IDE5Ljc2NjggMjIuMDUzOEMxOS43NjY4IDIyLjkyNDggMjAuNDczNSAyMy42MzE0IDIxLjM0NDQgMjMuNjMxNEMyMi4yMTYxIDIzLjYzMTQgMjIuOTIyIDIyLjkyNDggMjIuOTIyIDIyLjA1MzhDMjIuOTIyIDIxLjE4MjEgMjIuMjE1MyAyMC40NzYyIDIxLjM0NDQgMjAuNDc2MlpNMjEuMzQ0NCAyMi43NzI1QzIwLjk0ODMgMjIuNzcyNSAyMC42MjcyIDIyLjQ1MTQgMjAuNjI3MiAyMi4wNTUzQzIwLjYyNzIgMjEuNjU5MiAyMC45NDgzIDIxLjMzODIgMjEuMzQ0NCAyMS4zMzgyQzIxLjc0MDUgMjEuMzM4MiAyMi4wNjE1IDIxLjY1OTIgMjIuMDYxNSAyMi4wNTUzQzIyLjA2MTUgMjIuNDUxNCAyMS43NDA1IDIyLjc3MjUgMjEuMzQ0NCAyMi43NzI1Wk0xOS4wNDg5IDIxLjA1MDlIMTQuNDU3OUMxNC4yMjAxIDIxLjA1MDkgMTQuMDI3NCAyMS4yNDM3IDE0LjAyNzQgMjEuNDgxNUMxNC4wMjc0IDIxLjcxOTMgMTQuMjIwMSAyMS45MTIgMTQuNDU3OSAyMS45MTJIMTkuMDQ4OUMxOS4yODY3IDIxLjkxMiAxOS40Nzk1IDIxLjcxOTMgMTkuNDc5NSAyMS40ODE1QzE5LjQ3OTUgMjEuMjQzNyAxOS4yODY3IDIxLjA1MDkgMTkuMDQ4OSAyMS4wNTA5Wk0xOS4wNDg5IDIyLjE5ODZIMTQuNDU3OUMxNC4yMjAxIDIyLjE5ODYgMTQuMDI3NCAyMi4zOTE0IDE0LjAyNzQgMjIuNjI5MkMxNC4wMjc0IDIyLjg2NyAxNC4yMjAxIDIzLjA1OTggMTQuNDU3OSAyMy4wNTk4SDE5LjA0ODlDMTkuMjg2NyAyMy4wNTk4IDE5LjQ3OTUgMjIuODY3IDE5LjQ3OTUgMjIuNjI5MkMxOS40Nzk1IDIyLjM5MTQgMTkuMjg2NyAyMi4xOTg2IDE5LjA0ODkgMjIuMTk4NlpNMTUuMjMyMSAxMi41NzAzQzE1LjE1NDEgMTIuNjQ4NCAxNS4xMDYxIDEyLjc1NTYgMTUuMTA2MSAxMi44NzQyQzE1LjEwNjEgMTMuMTEyIDE1LjI5ODkgMTMuMzA0IDE1LjUzNTkgMTMuMzA0QzE1LjY1NDQgMTMuMzA0IDE1Ljc2MjUgMTMuMjU2IDE1LjgzOTcgMTMuMTc4QzE2LjA3MzggMTIuOTQzOSAxNi4zOTcxIDEyLjc5OTEgMTYuNzU0MiAxMi43OTkxQzE3LjExMTMgMTIuNzk5MSAxNy40MzQ2IDEyLjk0MzkgMTcuNjY4NiAxMy4xNzhDMTcuNzQ2NiAxMy4yNTYgMTcuODUzOSAxMy4zMDQgMTcuOTcyNCAxMy4zMDRDMTguMjEwMiAxMy4zMDQgMTguNDAyMyAxMy4xMTEyIDE4LjQwMjMgMTIuODc0MkMxOC40MDIzIDEyLjc1NTYgMTguMzU0MyAxMi42NDc2IDE4LjI3NjIgMTIuNTcwM0MxNy44ODYyIDEyLjE4MSAxNy4zNDgzIDExLjkzOTUgMTYuNzUzNCAxMS45Mzk1QzE2LjE1ODYgMTEuOTM5NSAxNS42MTk5IDEyLjE4MDMgMTUuMjMwNiAxMi41NzAzSDE1LjIzMjFaTTE5LjE4NzcgMTIuMDg2NUMxOS4xODg0IDEyLjA4NjUgMTkuMTg4NCAxMi4wODY1IDE5LjE4OTIgMTIuMDg2NUMxOS40MjcgMTIuMDg2NSAxOS42MTkgMTEuODkzNyAxOS42MTkgMTEuNjU2N0MxOS42MTkgMTEuNTM3NCAxOS41NzAzIDExLjQyOTQgMTkuNDkxNSAxMS4zNTEzQzE4Ljc5MDkgMTAuNjUwNyAxNy44MjI0IDEwLjIxNzEgMTYuNzUyNyAxMC4yMTcxQzE1LjY4MyAxMC4yMTcxIDE0LjcxNDUgMTAuNjUwNyAxNC4wMTM5IDExLjM1MTNDMTMuOTM1OCAxMS40Mjk0IDEzLjg4NzggMTEuNTM2NiAxMy44ODc4IDExLjY1NTJDMTMuODg3OCAxMS44OTMgMTQuMDgwNiAxMi4wODUgMTQuMzE3NyAxMi4wODVDMTQuNDM2MiAxMi4wODUgMTQuNTQ0MiAxMi4wMzcgMTQuNjIxNSAxMS45NTlDMTUuMTY2OCAxMS40MTM2IDE1LjkyIDExLjA3NjggMTYuNzUxOSAxMS4wNzY4QzE3LjU4MzggMTEuMDc2OCAxOC4zMzcgMTEuNDEzNiAxOC44ODI0IDExLjk1OUMxOC45NjA0IDEyLjAzNyAxOS4wNjc3IDEyLjA4NTcgMTkuMTg2OSAxMi4wODU3SDE5LjE4NzdWMTIuMDg2NVpNMTMuNDA2MiAxMC43NDNDMTQuMjYzNyA5Ljg4NzA0IDE1LjQ0NjcgOS4zNTgxOCAxNi43NTQyIDkuMzU4MThDMTguMDYxNyA5LjM1ODE4IDE5LjI0NDcgOS44ODcwNCAyMC4xMDIxIDEwLjc0M0MyMC4xODAxIDEwLjgyMSAyMC4yODc0IDEwLjg2OSAyMC40MDU5IDEwLjg2OUMyMC42NDM3IDEwLjg2OSAyMC44MzU4IDEwLjY3NjIgMjAuODM1OCAxMC40MzkyQzIwLjgzNTggMTAuMzIwNiAyMC43ODc4IDEwLjIxMjYgMjAuNzA5OCAxMC4xMzUzQzE5LjY5NjMgOS4xMjQ4OCAxOC4yOTggOC41IDE2Ljc1MzQgOC41QzE1LjIwODkgOC41IDEzLjgxMDYgOS4xMjQ4OCAxMi43OTcxIDEwLjEzNTNDMTIuNzE5MSAxMC4yMTM0IDEyLjY3MTEgMTAuMzIwNiAxMi42NzExIDEwLjQzOTJDMTIuNjcxMSAxMC42NzcgMTIuODYzOSAxMC44NjkgMTMuMTAwOSAxMC44NjlDMTMuMjE5NCAxMC44NjkgMTMuMzI3NSAxMC44MjEgMTMuNDA0NyAxMC43NDNIMTMuNDA2MlpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiI0ZGMzc1RVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZzLTEyIGZ3LW5vcm1hbCBmYy1ibGFja1wiPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ/LlNlcnZpY2UubmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidDb2xvcidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW5zQ29uZmlnW2ldLnR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgZWxlbWVudFtjb2x1bW5dPy5jb2xvckNvZGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBlbGVtZW50W2NvbHVtbl0/LmNvbG9yQ29kZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGVsZW1lbnRbY29sdW1uXVxyXG4gICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgID48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZWxlbWVudFtjb2x1bW5dLnRpdGxlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidjb2xvckJnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgJ3JnYmEodmFyKC0tcmdiLScgKyBlbGVtZW50W2NvbHVtbl0/LmNvbG9yTmFtZSArICcpLCAwLjEpJ1xyXG4gICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBDb2xvcmJnIHAtMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJjLXt7IGVsZW1lbnRbY29sdW1uXT8uY29sb3JOYW1lIH19XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGVsZW1lbnRbY29sdW1uXS50aXRsZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInYXNzaWduZWQnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW5zQ29uZmlnW2ldLnR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGVsZWdhdGUgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1nLWNhcmQgeC1zbWFsbCBjaXJjbGVkLWltZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cImVsZW1lbnQ/LkFzc2lnbmVkVG8uaW1hZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmVycm9yPVwidGhpcy5vbmVycm9yPW51bGw7dGhpcy5zcmM9J2Fzc2V0cy9pbWFnZXMvdXNlci5zdmcnO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXgtMVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZzLTEyIGZjLWJsYWNrXCI+e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudD8uQXNzaWduZWRUby5uYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNmaSBzZmktY2xvc2UgZmMtY29yYWxcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidjb2xvcmVkVGV4dCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJlbGVtZW50W2NvbHVtbl0/LlsnY29sb3InXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudFtjb2x1bW5dPy5bJ3RpdGxlJ11cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ3N1cnZleSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJlbGVtZW50W2NvbHVtbl0/LlsnY29sb3InXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0xIHRleHQtbm93cmFwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZnMtMjAgc2ZpIHNmaS1lbW9qaS17eyhlbGVtZW50W2NvbHVtbl0/LlsndGl0bGUnXVsnZW4nXS50b0xvd2VyQ2FzZSgpKSB9fVwiXHJcbiAgICAgICAgICAgICAgICAgID48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZWxlbWVudFtjb2x1bW5dPy5bJ3RpdGxlJ10gfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidTYXRpc2ZhY3Rpb24nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW5zQ29uZmlnW2ldLnR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGVsZWdhdGUgZC1mbGV4IGdhcC0yIGFsaWduLWl0ZW1zLWNlbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHMtaWNvbiBpY29uPVwic3Rhci1mXCIgY2xhc3M9XCJmYy1kYXJrLWdyYXlcIj48L2RzLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZnMtMTIgZmMtYmxhY2tcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgID57eyBlbGVtZW50W2NvbHVtbl0ucGVyY2VudGFnZSB9fSU8L3NwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRzLXN0YXR1c1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhdXRvLXN0YXR1c1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzPVwie3sgZWxlbWVudFtjb2x1bW5dLnN0YXR1cyB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZnMtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IGVsZW1lbnRbY29sdW1uXS5wZXJjZW50YWdlVHJlbmQgfX0lXHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChlbGVtZW50W2NvbHVtbl0udHJlbmRTdGF0dXMgPT0gJ3VwJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHMtaWNvbiBjbGFzcz1cImZzLTEzIG14LTEgZ3Jvd3RoSWNvblwiIGljb249XCJ1cC1ncm93dGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kcy1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChlbGVtZW50W2NvbHVtbl0udHJlbmRTdGF0dXMgIT0gJ3VwJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHMtaWNvbiBjbGFzcz1cImZzLTEzIG14LTEgZG93bkljb25cIiBpY29uPVwiZG93bi1ncm93dGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kcy1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZHMtc3RhdHVzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidhY3Rpb25zJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LXN0YXJ0IGdhcC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sdW1uc0NvbmZpZ1tpXT8uYWN0aW9ucz8ubGVuZ3RoIDw9IDZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBjb2x1bW5zQ29uZmlnW2ldPy5hY3Rpb25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkcy1idXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhY3Rpb24udmlld01vZGUgPT09IEFjdGlvbnMuQUxMT0NBVEVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGU9XCJvdXRsaW5lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZnMtMTIgZmMte3sgYWN0aW9uPy5hY3Rpb25Gb250Q29sb3IgfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGFjdGlvbj8uYWN0aW9uTmFtZSB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RzLWJ1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRzLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBhY3Rpb24/Lm9uQ2xpY2soZWxlbWVudClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhY3Rpb24gPT09IEFjdGlvbnMuQUxMT0NBVEVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHMtaWNvbiBjbGFzcz1cImZzLTE1XCIgaWNvbj1cInBlblwiPjwvZHMtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RzLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLnZpZXdNb2RlICE9IEFjdGlvbnMuVklFVyB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLnZpZXdNb2RlICE9IEFjdGlvbnMuQ09QWVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRzLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgYWN0aW9uPy5vbkNsaWNrKGVsZW1lbnQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24/LmFjdGlvbiA9PT0gQWN0aW9ucy5WSUVXICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFhY3Rpb24/LmlzSGlkZGVuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkcy1pY29uIGNsYXNzPVwiZnMtMTVcIiBpY29uPVwiZXllXCI+PC9kcy1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kcy1idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRzLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgYWN0aW9uPy5vbkNsaWNrKGVsZW1lbnQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24/LmFjdGlvbiA9PT0gQWN0aW9ucy5DT1BZICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFhY3Rpb24/LmlzSGlkZGVuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkcy1pY29uIGNsYXNzPVwiZnMtMTVcIiBpY29uPVwiZmlsZXMtY29weVwiPjwvZHMtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZHMtYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBAaWYoZWxlbWVudC5oYXNPd25Qcm9wZXJ0eSgnY2FuVXBkYXRlJykpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHMtYnV0dG9uIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7YWN0aW9uPy5vbkNsaWNrKGVsZW1lbnQpXCIgaWNvbiBzaXplPVwic21hbGxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYWN0aW9uPy5hY3Rpb24gPT09ICdlZGl0JyAmJiAhYWN0aW9uPy5pc0hpZGRlbiAmJiBlbGVtZW50LmNhblVwZGF0ZSA9PSB0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRzLWljb24gaWNvbj1cInBlblwiIGNsYXNzPVwiZnMtMTVcIj48L2RzLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZHMtYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9QGVsc2UgeyAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHMtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBhY3Rpb24/Lm9uQ2xpY2soZWxlbWVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24/LmFjdGlvbiA9PT0gQWN0aW9ucy5FRElUICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFbNCwgN10uaW5jbHVkZXMoZWxlbWVudD8uY29udHJhY3RTdGF0dXM/LmlkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRzLWljb24gY2xhc3M9XCJmcy0xNVwiIGljb249XCJwZW5cIj48L2RzLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RzLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gfSAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHMtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBhY3Rpb24/Lm9uQ2xpY2soZWxlbWVudClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj8uYWN0aW9uID09PSBBY3Rpb25zLkRFTEVURSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhYWN0aW9uPy5pc0hpZGRlbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhWzQsIDddLmluY2x1ZGVzKGVsZW1lbnQ/LmNvbnRyYWN0U3RhdHVzPy5pZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRzLWljb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZjLWNvcmFsIGZzLTE1XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uPVwidHJhc2hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9kcy1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kcy1idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRzLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgYWN0aW9uPy5vbkNsaWNrKGVsZW1lbnQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24/LmFjdGlvbiA9PT0gQWN0aW9ucy5ERUxFVEVQRU5ESU5HICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFhY3Rpb24/LmlzSGlkZGVuICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ/LmNvbnRyYWN0U3RhdHVzPy5pZCA9PSAxXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkcy1pY29uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmYy1jb3JhbCBmcy0xNVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cInRyYXNoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvZHMtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZHMtYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkcy1idXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IGFjdGlvbj8ub25DbGljayhlbGVtZW50KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhY3Rpb24/LmFjdGlvbiA9PT0gQWN0aW9ucy5DSEFSVFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwidHJhbnNwYXJlbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHMtaWNvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmMtY29yYWwgZnMtMTVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJjaGFydC1vXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvZHMtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZHMtYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZWxlbWVudC5oYXNPd25Qcm9wZXJ0eSgnY2FuVGFrZUFjdGlvbicpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkcy1idXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgYWN0aW9uPy5vbkNsaWNrKGVsZW1lbnQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPy5hY3Rpb24gPT09IEFjdGlvbnMuQVBQUk9WRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmNhblRha2VBY3Rpb24gPT0gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmcy0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcImdsb2JhbC5hcHByb3ZlXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kcy1idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkcy1idXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFwZT1cIm91dGxpbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwiZGFyay1ncmF5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgYWN0aW9uPy5vbkNsaWNrKGVsZW1lbnQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPy5hY3Rpb24gPT09IEFjdGlvbnMuUkVKRUNUICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuY2FuVGFrZUFjdGlvbiA9PSB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBlPVwib3V0bGluZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZnMtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgXCJnbG9iYWwucmVqZWN0XCIgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kcy1idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRzLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBhY3Rpb24/Lm9uQ2xpY2soZWxlbWVudClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImFjdGlvbj8uYWN0aW9uID09PSBBY3Rpb25zLkFQUFJPVkVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZzLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwiZ2xvYmFsLmFwcHJvdmVcIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RzLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRzLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBlPVwib3V0bGluZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJkYXJrLWdyYXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBhY3Rpb24/Lm9uQ2xpY2soZWxlbWVudClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImFjdGlvbj8uYWN0aW9uID09PSBBY3Rpb25zLlJFSkVDVFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGU9XCJvdXRsaW5lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmcy0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcImdsb2JhbC5yZWplY3RcIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RzLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHMtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYWN0aW9uPy5hY3Rpb24gPT09IEFjdGlvbnMuREVUQUlMU1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZnMtMTIgdW5kZXJsaW5lXCI+IFZpZXcgRGV0YWlscyA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RzLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkcy1idXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IGFjdGlvbj8ub25DbGljayhlbGVtZW50KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPy5hY3Rpb24gPT09IEFjdGlvbnMuU1RBUlQgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudD8uaXNGaW5hbGl6ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZnMtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYWN0aW9uPy5hY3Rpb25OYW1lIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkcy1pY29uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmcy0xNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cIm1lZGlhLXBsYXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3Q9XCJwcmVmaXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9kcy1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kcy1idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHMtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBhY3Rpb24/Lm9uQ2xpY2soZWxlbWVudClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYWN0aW9uPy5hY3Rpb24gPT09IEFjdGlvbnMuUFJFUEFSRVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwibGlnaHQtZ3JheVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZzLTEyIGZjLWJsYWNrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGFjdGlvbj8uYWN0aW9uTmFtZSB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHMtaWNvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZnMtMTIgZmMtYmxhY2tcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJzZXR0aW5nc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvdD1cInByZWZpeFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2RzLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RzLWJ1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHMtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBhY3Rpb24/Lm9uQ2xpY2soZWxlbWVudClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj8uYWN0aW9uID09PSBBY3Rpb25zLlNUQVJUICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ/LmlzRmluYWxpemVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZzLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGFjdGlvbj8uYWN0aW9uTmFtZSB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHMtaWNvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZnMtMTZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJtZWRpYS1wbGF5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbG90PVwicHJlZml4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvZHMtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZHMtYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGRzLWJ1dHRvbiBbY29sb3JdPVwiYWN0aW9uPy5hY3Rpb25Db2xvclwiIHNpemU9XCJzbWFsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYWN0aW9uPy5hY3Rpb24gPT09ICdjdXN0b21BY3Rpb24nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO2FjdGlvbj8ub25DbGljayhlbGVtZW50KVwiIHNoYXBlPVwie3thY3Rpb24/LmFjdGlvblNoYXBlfX1cIiBbY2xhc3NdPVwiYWN0aW9uPy5hY3Rpb25Db2xvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvZHMtYnV0dG9uPiAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHMtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBhY3Rpb24/Lm9uQ2xpY2soZWxlbWVudClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYWN0aW9uPy5hY3Rpb24gPT09IEFjdGlvbnMuQ1VTVE9NQUNUSU9OXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImFjdGlvbj8uYWN0aW9uQ29sb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sb3JdPVwiYWN0aW9uPy5hY3Rpb25Db2xvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBlPVwie3sgYWN0aW9uPy5hY3Rpb25TaGFwZSB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZzLTEyIGZjLXt7IGFjdGlvbj8uYWN0aW9uRm9udENvbG9yIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYWN0aW9uPy5hY3Rpb25OYW1lIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RzLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkcy1idXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IGFjdGlvbj8ub25DbGljayhlbGVtZW50KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPy5hY3Rpb24gPT09IEFjdGlvbnMuQ1VTVE9NQUNUSU9OTUFOQUdFICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlbGVtZW50LmNvbnRyYWN0U3RhdHVzLmlkID09IDcgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmNvbnRyYWN0U3RhdHVzLmlkID09IDEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiYWN0aW9uPy5hY3Rpb25Db2xvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xvcl09XCJhY3Rpb24/LmFjdGlvbkNvbG9yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGU9XCJ7eyBhY3Rpb24/LmFjdGlvblNoYXBlIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZnMtMTIgZmMte3sgYWN0aW9uPy5hY3Rpb25Gb250Q29sb3IgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBhY3Rpb24/LmFjdGlvbk5hbWUgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZHMtYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkcy1idXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IGFjdGlvbj8ub25DbGljayhlbGVtZW50KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPy5hY3Rpb24gPT09IEFjdGlvbnMuQ1VTVE9NQUNUSU9ORVhURU5EICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuY29udHJhY3RTdGF0dXMuaWQgPT0gN1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImFjdGlvbj8uYWN0aW9uQ29sb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sb3JdPVwiYWN0aW9uPy5hY3Rpb25Db2xvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBlPVwie3sgYWN0aW9uPy5hY3Rpb25TaGFwZSB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZzLTEyIGZjLXt7IGFjdGlvbj8uYWN0aW9uRm9udENvbG9yIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYWN0aW9uPy5hY3Rpb25OYW1lIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RzLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkcy1idXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IGFjdGlvbj8ub25DbGljayhlbGVtZW50KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPy5hY3Rpb24gPT09IEFjdGlvbnMuQ1VTVE9NQUNUSU9OREVUQUlMU1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImFjdGlvbj8uYWN0aW9uQ29sb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sb3JdPVwiYWN0aW9uPy5hY3Rpb25Db2xvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBlPVwie3sgYWN0aW9uPy5hY3Rpb25TaGFwZSB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZzLTEyIGZjLXt7IGFjdGlvbj8uYWN0aW9uRm9udENvbG9yIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYWN0aW9uPy5hY3Rpb25OYW1lIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RzLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkcy1zdGF0dXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhY3Rpb24/LmFjdGlvbiA9PT0gQWN0aW9ucy5TVEFUVVNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3RhdHVzXT1cImFjdGlvbj8uU3RhdHVzLnN0YXR1c1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZnMtMTIgc3RhdHVzQWN0aW9uIHctMTAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmMtYmxhY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYWN0aW9uPy5TdGF0dXMudGl0bGUgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZHMtc3RhdHVzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW5zQ29uZmlnW2ldPy5hY3Rpb25zPy5sZW5ndGggPiA2XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkcy1idXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjc3RhdHVzTWVudVRyaWdnZXI9XCJtYXRNZW51VHJpZ2dlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2x1bW5zQ29uZmlnW2ldPy5hY3Rpb25zPy5sZW5ndGggPiAxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwic3RhdHVzTWVudVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkb3RzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHMtaWNvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmcy0yMCBmYy1kYXJrLWdyYXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cImRvdHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2RzLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZHMtYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1tZW51ICNzdGF0dXNNZW51PVwibWF0TWVudVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhY3Rpb24/Lm9uQ2xpY2soZWxlbWVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBjb2x1bW5zQ29uZmlnW2ldPy5hY3Rpb25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1tZW51LWl0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZnMtMTIgZmMtYmxhY2tcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgID57eyBhY3Rpb24/LmFjdGlvbk5hbWUgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW1lbnU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidzcGVjcydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGVsZW1lbnQ/Lltjb2x1bW5dKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjc3RhdHVzTWVudVRyaWdnZXI9XCJtYXRNZW51VHJpZ2dlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwic3BlY3NNZW51XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uc0NvbmZpZ1tpXS50eXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uc0NvbmZpZ1tpXS50eXBlXHJcbiAgICAgICAgICAgICAgICAgICAgfX0gZmMtY29yYWwgdW5kZXJsaW5lIGN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICB7eyBjb2x1bW5zQ29uZmlnW2ldLmNsaWNrYWJsZVRleHQgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1tZW51ICNzcGVjc01lbnU9XCJtYXRNZW51XCIgY2xhc3M9XCJwLTQgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZzLTE0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBlbGVtZW50W2NvbHVtbl0gfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbWVudT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInc3BlY3MnXCIgW25nQ2xhc3NdPVwiY29sdW1uc0NvbmZpZ1tpXS50eXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBnYXAtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZWxlbWVudFtjb2x1bW5dIHwganNvbiB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBlbGVtZW50W2NvbHVtbl1cIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwcm9ncmVzcy1jb250YWluZXIgZGVmYXVsdC1wcm9ncmVzcyBtZWRpdW0gcmFkaXVzLTAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJUZWFtIGFzc2lnbm1lbnQge3tpdGVtLnZhbHVlfX0lXCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYmVsb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aC4lXT1cIml0ZW0udmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicHJvZ3Jlc3MtYmFyIGJnLWNvbG9yLXt7aXRlbS5jb2xvcn19XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pi0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hEZWZhdWx0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uc0NvbmZpZ1tpXS50eXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtbm93cmFwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiIHt7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uc0NvbmZpZ1tpXS5hcktleVxyXG4gICAgICAgICAgICAgICAgICAgICAgPyB0cmFuc2xhdGVTZXJ2aWNlLmN1cnJlbnRMYW5nID09ICdhcidcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBtYXBUZXh0KGNvbHVtbnNDb25maWdbaV0uYXJLZXksIGVsZW1lbnRbY29sdW1uXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBtYXBUZXh0KGNvbHVtbnNDb25maWdbaV0uZW5LZXksIGVsZW1lbnRbY29sdW1uXSlcclxuICAgICAgICAgICAgICAgICAgICAgIDogZWxlbWVudFtjb2x1bW5dXHJcbiAgICAgICAgICAgICAgICAgICAgICA/IGVsZW1lbnRbY29sdW1uXVxyXG4gICAgICAgICAgICAgICAgICAgICAgOiAnLSdcclxuICAgICAgICAgICAgICAgICAgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj1cImJlbG93XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICB7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uc0NvbmZpZ1tpXS5hcktleVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRyYW5zbGF0ZVNlcnZpY2UuY3VycmVudExhbmcgPT0gXCJhclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBtYXBUZXh0KGNvbHVtbnNDb25maWdbaV0uYXJLZXksIGVsZW1lbnRbY29sdW1uXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG1hcFRleHQoY29sdW1uc0NvbmZpZ1tpXS5lbktleSwgZWxlbWVudFtjb2x1bW5dKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGVsZW1lbnRbY29sdW1uXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZWxlbWVudFtjb2x1bW5dXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcIi1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgPHRyICptYXRIZWFkZXJSb3dEZWY9XCJjb2x1bW5zOyBzdGlja3k6IHRydWVcIiBtYXQtaGVhZGVyLXJvdz48L3RyPlxyXG4gICAgICAgICAgPHRyXHJcbiAgICAgICAgICAgIChjbGljayk9XCJjbGlja1Jvdyhyb3cpXCJcclxuICAgICAgICAgICAgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IGNvbHVtbnNcIlxyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdzZWxlY3RlZC1yb3cnOiByb3c/LmZhc3RUcmFja1NlZW4gPT09IGZhbHNlIH1cIlxyXG4gICAgICAgICAgICBtYXQtcm93XHJcbiAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgPjwvdHI+XHJcbiAgICAgICAgPC90YWJsZT5cclxuICAgICAgfVxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgfVxyXG4gIEBpZiAoaXNMb2FkaW5nKSB7XHJcbiAgICA8ZHMtbG9hZGluZy10YWJsZSBbY29sc109XCJjb2x1bW5zLmxlbmd0aFwiIFtyb3dzXT1cIjVcIj48L2RzLWxvYWRpbmctdGFibGU+XHJcbiAgfVxyXG4gIEBpZiAoIWlzTG9hZGluZyAmJiBkYXRhU291cmNlLmZpbHRlcmVkRGF0YT8ubGVuZ3RoID09IDApIHtcclxuICAgIDxkcy1tZXNzYWdlXHJcbiAgICAgIFtsYWJlbF09XCIgY3VzdG9tTWVzc2FnZT8/ICdOb0RhdGEnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgdHlwZT1cImVtcHR5TGlzdFwiXHJcbiAgICA+PC9kcy1tZXNzYWdlPlxyXG4gIH1cclxuPC9kaXY+XHJcbkBpZiAoZGF0YVNvdXJjZS5maWx0ZXJlZERhdGE/Lmxlbmd0aCAmJiBoYXNQYWdpbmF0b3IpIHtcclxuICA8bWF0LXBhZ2luYXRvclxyXG4gICAgI3BhZ2luYXRvclxyXG4gICAgKHBhZ2UpPVwicGFnZUNoYW5nZWQoJGV2ZW50KVwiXHJcbiAgICBbbGVuZ3RoXT1cInRvdGFsRWxlbWVudHNcIlxyXG4gICAgW3BhZ2VJbmRleF09XCJjdXJyZW50UGFnZVwiXHJcbiAgICBbcGFnZVNpemVPcHRpb25zXT1cIls1LCAxMCwgMTUsIDIwLCAxMDBdXCJcclxuICAgIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiXHJcbiAgICBhcmlhLWxhYmVsPVwiU2VsZWN0IHBhZ2VcIlxyXG4gICAgc2hvd0ZpcnN0TGFzdEJ1dHRvbnNcclxuICA+XHJcbiAgPC9tYXQtcGFnaW5hdG9yPlxyXG59XHJcbiJdfQ==
|