@rangertechnologies/ngnxt 2.1.91 → 2.1.93
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/custom-table/custom-table.component.mjs +3 -3
- package/esm2022/lib/components/search-box/search-box.component.mjs +10 -11
- package/esm2022/lib/pages/questionbook/questionbook.component.mjs +3 -3
- package/fesm2022/rangertechnologies-ngnxt.mjs +13 -14
- package/fesm2022/rangertechnologies-ngnxt.mjs.map +1 -1
- package/lib/components/search-box/search-box.component.d.ts +3 -1
- package/package.json +1 -1
- package/rangertechnologies-ngnxt-2.1.93.tgz +0 -0
- package/rangertechnologies-ngnxt-2.1.91.tgz +0 -0
|
@@ -317,11 +317,11 @@ export class CustomTableComponent {
|
|
|
317
317
|
console.log('Component Destroyed');
|
|
318
318
|
}
|
|
319
319
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CustomTableComponent, deps: [{ token: i1.ChangeService }, { token: i2.I18nService }, { token: i3.SalesforceService }, { token: i4.DataService }], target: i0.ɵɵFactoryTarget.Component });
|
|
320
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CustomTableComponent, selector: "app-custom-table", inputs: { question: "question", apiMeta: "apiMeta" }, outputs: { valueChange: "valueChange", saveTableData: "saveTableData" }, ngImport: i0, template: "<!-- RS 03FEB2025 -->\r\n<!-- Search Bar -->\r\n<!-- Search, Revert & Save in Same Line -->\r\n<div class=\"d-flex align-items-center justify-content-between mb-3\">\r\n <!-- Search Bar -->\r\n <div class=\"search-container me-auto\">\r\n <div class=\"input-group\">\r\n <input \r\n type=\"text\" \r\n class=\"form-control search-input\"\r\n [(ngModel)]=\"searchTerm\"\r\n (input)=\"search()\"\r\n placeholder=\"Search...\"\r\n >\r\n <div class=\"search-icon\">\r\n <!-- RS 03FEB2025 -->\r\n <!-- Search icon for user input -->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <circle cx=\"11\" cy=\"11\" r=\"8\"></circle>\r\n <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"></line>\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Buttons -->\r\n <div>\r\n <!-- RS 03FEB2025 --><!-- Cancel button (visible only when changes are unsaved) -->\r\n <button \r\n class=\"btn btn-secondary me-2\" \r\n *ngIf=\"hasUnsavedChanges\" \r\n (click)=\"revertChanges()\"\r\n >\r\n Cancel\r\n </button>\r\n <!-- Save button (disabled if no unsaved changes) --><!-- RS 03FEB2025 -->\r\n <button \r\n class=\"btn btn-primary\" \r\n [disabled]=\"!hasUnsavedChanges\"\r\n (click)=\"saveTable()\"\r\n >\r\n Save Table\r\n </button>\r\n </div>\r\n</div>\r\n<!-- Table Container -->\r\n<div class=\"table-container\">\r\n <table class=\"table table-striped table-bordered\">\r\n <thead>\r\n <!-- HA 28DEC23 changed table header values and changed table size logic to evenly visible -->\r\n <!-- <th><input type=\"checkbox\" (change)=\"selectAll($event.target.checked)\"></th> -->\r\n <tr>\r\n <th *ngFor=\"let header of tableHeader\" [style.width]=\"header.width || 'auto'\">\r\n {{ header.label }}\r\n </th>\r\n <!-- Actions column (only if showActions is true) --><!-- RS 03FEB2025 -->\r\n <th *ngIf=\"showActions\" style=\"width: 140px\" class=\"actions-columns\">Actions</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let item of paginatedData; let i = index\">\r\n <td *ngFor=\"let header of tableHeader\">\r\n <!-- Image with text input -->\r\n <ng-container *ngIf=\"header.fldType === 'imagetext'\">\r\n <div class=\"d-flex align-items-center\">\r\n <img [src]=\"item.imageSrc\" [alt]=\"item.altText\" style=\"width: 35px; height: 32px; margin-right: 5px;\">\r\n <input type=\"text\" \r\n [(ngModel)]=\"item[header.fieldName]\" \r\n (ngModelChange)=\"updateLabel(i, header.fieldName, item[header.fieldName])\" \r\n class=\"she-line-input table-input\">\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Image only -->\r\n <ng-container *ngIf=\"header.fldType === 'image'\">\r\n <img [src]=\"item[header.fieldName]\" [alt]=\"item.altText\" style=\"width: 35px; height: 32px;\">\r\n </ng-container>\r\n <!--VD 23Aug24 handle readOnly -->\r\n <!-- Text input -->\r\n <ng-container *ngIf=\"header.fldType === 'Text'\">\r\n <input type=\"text\" \r\n [readonly]=\"header.readOnly\" \r\n [disabled]=\"!item.edit\" \r\n [ngClass]=\"{'editInput': item.edit && !header.readOnly}\"\r\n [ngModel]=\"'' | getValue: item : header.apiName\" \r\n (ngModelChange)=\"updateLabel(i, header.apiName,$event)\" \r\n class=\"she-line-input table-input\">\r\n </ng-container>\r\n <!--VD 23Aug24 handle Number Type -->\r\n <!-- Number input -->\r\n <!-- VD 26Jun24 - pipe change to handle multiple objects-->\r\n <ng-container *ngIf=\"header.fldType === 'Number'\">\r\n <input type=\"number\" \r\n [readonly]=\"header.readOnly\" \r\n [disabled]=\"!item.edit\" \r\n [ngClass]=\"{'editInput': item.edit && !header.readOnly}\"\r\n [ngModel]=\"'' | getValue: item : header.apiName\" \r\n (ngModelChange)=\"updateLabel(i, header.apiName,$event)\" \r\n class=\"she-line-input table-input\">\r\n </ng-container>\r\n\r\n <!-- Radio input -->\r\n <ng-container *ngIf=\"header.fldType === 'radio'\">\r\n <input type=\"radio\" \r\n [name]=\"item.name\" \r\n [checked]=\"item.value == header.fieldName\" \r\n (click)=\"updateRadio(item, header.fieldName)\">\r\n </ng-container>\r\n </td>\r\n <!-- Actions column --><!-- RS 03FEB2025 -->\r\n <td *ngIf=\"showActions\" class=\"actions-column\">\r\n <div class=\"d-flex justify-content-around\">\r\n <button class=\"btn btn-link p-0\" (click)=\"editRow(i)\">\r\n <i class=\"fas fa-edit text-primary\"></i>\r\n Edit\r\n </button>\r\n <button class=\"btn btn-link p-0\" (click)=\"deleteRow(i)\">\r\n <i class=\"fas fa-trash text-danger\"></i>\r\n Delete\r\n </button>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n</div>\r\n\r\n<!-- Pagination --><!-- RS 03FEB2025 -->\r\n<div *ngIf=\"showPagination\" class=\"pagination-container\">\r\n <div class=\"d-flex justify-content-end align-items-center\">\r\n <div class=\"items-per-page\">\r\n <span>Items per page:</span>\r\n <select [(ngModel)]=\"itemsPerPage\" (change)=\"updatePagination()\" class=\"form-select form-select-sm\">\r\n <option value=\"5\">5</option>\r\n <option value=\"10\">10</option>\r\n <option value=\"20\">20</option>\r\n <option value=\"50\">50</option>\r\n </select>\r\n </div>\r\n <div class=\"page-info ms-3 me-3\">\r\n {{((currentPage - 1) * itemsPerPage + 1)}} - {{Math.min(currentPage * itemsPerPage, totalItems)}} of {{totalItems}}\r\n </div>\r\n <nav aria-label=\"Table pagination\">\r\n <!-- First page --><!-- RS 03FEB2025 -->\r\n <ul class=\"pagination mb-0\">\r\n <li class=\"page-item\" [class.disabled]=\"currentPage === 1\">\r\n <a class=\"page-link\" (click)=\"setPage(1)\">\u00AB</a>\r\n </li>\r\n <li class=\"page-item\" [class.disabled]=\"currentPage === 1\">\r\n <a class=\"page-link\" (click)=\"setPage(currentPage - 1)\">\u2039</a>\r\n </li>\r\n <!-- Dynamic pagination --><!-- RS 03FEB2025 -->\r\n <li class=\"page-item\" *ngFor=\"let page of pages\" [class.active]=\"page === currentPage\">\r\n <a class=\"page-link\" (click)=\"setPage(page)\">{{page}}</a>\r\n </li>\r\n <li class=\"page-item\" [class.disabled]=\"currentPage === pages.length\">\r\n <a class=\"page-link\" (click)=\"setPage(currentPage + 1)\">\u203A</a>\r\n </li>\r\n <!-- Last page -->\r\n <li class=\"page-item\" [class.disabled]=\"currentPage === pages.length\">\r\n <a class=\"page-link\" (click)=\"setPage(pages.length)\">\u00BB</a>\r\n </li>\r\n </ul>\r\n </nav>\r\n </div>\r\n</div>\r\n<!-- RS 03FEB2025 -->\r\n<!-- Add Row Button -->\r\n<div *ngIf=\"showAddRow\" (click)=\"addRow()\" class=\"addRowClass\">\r\n <div class=\"circle-button\">+</div>\r\n</div>\r\n", styles: [".table{width:100%;max-width:100%;margin-bottom:1rem;background-color:transparent;border-collapse:collapse}.table-container{max-height:400px;overflow-y:auto;overflow-x:auto;position:relative;margin-bottom:1rem}.table th,.table td{padding:3px 5px;line-height:1.2;vertical-align:middle;border:1px solid #dee2e6;white-space:nowrap}.table-bordered{border:1px solid #ddd}.table-striped tbody tr:nth-of-type(odd){background-color:#f9f9f9!important}thead{background-color:#03a9f4;position:sticky;top:0;z-index:10}thead th{color:#fff;font-size:14px;text-align:center;vertical-align:bottom;border-bottom:2px solid #dee2e6;padding:12px!important}thead .permission,.permission_yes,.permission_no,.permission_na{text-align:center}th{text-align:left}tbody{color:#797979}tbody td{font-size:12px}.none-border th{border:none}.actions-column{width:140px;white-space:nowrap;position:sticky;right:0;z-index:10;background-color:#fff}.actions-columns{width:140px;white-space:nowrap;position:sticky;right:0;z-index:10;background-color:#03a9f4}.actions-column .btn-link{font-size:11px;color:#797979;text-decoration:none}th.actions-column{background-color:#03a9f4}tr:nth-of-type(odd) .actions-column{background-color:#f9f9f9!important}tr:nth-of-type(2n) .actions-column{background-color:#fff!important}.table-input{width:100%;padding:.375rem .75rem;border:1px solid #ced4da;border-radius:.25rem}.editInput{background-color:#fff;border-bottom:1px solid red!important;border-color:#80bdff}.search-container{margin-bottom:1rem}.search-container .input-group{max-width:300px;position:relative}.search-input{padding-right:35px;border-radius:4px!important}.search-icon{position:absolute;right:10px;top:50%;transform:translateY(-50%);z-index:4;color:#666;pointer-events:none}.pagination-container{padding:.5rem 1rem;background-color:#f8f9fa;border-top:1px solid #dee2e6}.pagination-container .d-flex{justify-content:flex-end!important}.items-per-page{margin-right:20px;font-size:12px}.items-per-page select{width:60px;margin-left:8px}.page-info{margin-right:15px;font-size:12px;color:#6c757d}.pagination{margin:0}.page-link{padding:.25rem .5rem;font-size:12px}.page-item.disabled .page-link{cursor:not-allowed}.addRowClass{float:right;margin-top:1rem;margin-right:15%;text-align:center;cursor:pointer}.circle-button{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:50%;background-color:#007bff;color:#fff;cursor:pointer;font-size:24px;line-height:1;box-shadow:0 2px 4px #0003}.circle-button:hover{background-color:#0056b3}.small-icon{width:16px;height:16px;margin-right:4px}.action{min-width:80px;text-align:center;cursor:pointer}.action:hover{color:red}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i6.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i6.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i7.GetValuePipe, name: "getValue" }] });
|
|
320
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CustomTableComponent, selector: "app-custom-table", inputs: { question: "question", apiMeta: "apiMeta" }, outputs: { valueChange: "valueChange", saveTableData: "saveTableData" }, ngImport: i0, template: "<!-- RS 03FEB2025 -->\r\n<!-- Search Bar -->\r\n<!-- Search, Revert & Save in Same Line -->\r\n<div class=\"d-flex align-items-center justify-content-between mb-3\">\r\n <!-- Search Bar -->\r\n <div class=\"search-container me-auto\">\r\n <div class=\"input-group\">\r\n <input \r\n type=\"text\" \r\n class=\"form-control search-input\"\r\n [(ngModel)]=\"searchTerm\"\r\n (input)=\"search()\"\r\n placeholder=\"Search...\"\r\n >\r\n <div class=\"search-icon\">\r\n <!-- RS 03FEB2025 -->\r\n <!-- Search icon for user input -->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <circle cx=\"11\" cy=\"11\" r=\"8\"></circle>\r\n <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"></line>\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Buttons -->\r\n <div>\r\n <!-- RS 03FEB2025 --><!-- Cancel button (visible only when changes are unsaved) -->\r\n <button \r\n class=\"btn btn-secondary me-2\" \r\n *ngIf=\"hasUnsavedChanges\" \r\n (click)=\"revertChanges()\"\r\n >\r\n Cancel\r\n </button>\r\n <!-- Save button (disabled if no unsaved changes) --><!-- RS 03FEB2025 -->\r\n <button \r\n class=\"btn btn-primary\" \r\n [disabled]=\"!hasUnsavedChanges\"\r\n (click)=\"saveTable()\"\r\n >\r\n Save Table\r\n </button>\r\n </div>\r\n</div>\r\n<!-- Table Container -->\r\n<div class=\"table-container\">\r\n <table class=\"table table-striped table-bordered\">\r\n <thead>\r\n <!-- HA 28DEC23 changed table header values and changed table size logic to evenly visible -->\r\n <!-- <th><input type=\"checkbox\" (change)=\"selectAll($event.target.checked)\"></th> -->\r\n <tr>\r\n <th *ngFor=\"let header of tableHeader\" [style.width]=\"header.width || 'auto'\">\r\n {{ header.label }}\r\n </th>\r\n <!-- Actions column (only if showActions is true) --><!-- RS 03FEB2025 -->\r\n <th *ngIf=\"showActions\" style=\"width: 140px\" class=\"actions-columns\">Actions</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let item of paginatedData; let i = index\">\r\n <td *ngFor=\"let header of tableHeader\">\r\n <!-- Image with text input -->\r\n <ng-container *ngIf=\"header.fldType === 'imagetext'\">\r\n <div class=\"d-flex align-items-center\">\r\n <img [src]=\"item.imageSrc\" [alt]=\"item.altText\" style=\"width: 35px; height: 32px; margin-right: 5px;\">\r\n <input type=\"text\" \r\n [(ngModel)]=\"item[header.fieldName]\" \r\n (ngModelChange)=\"updateLabel(i, header.fieldName, item[header.fieldName])\" \r\n class=\"she-line-input table-input\">\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Image only -->\r\n <ng-container *ngIf=\"header.fldType === 'image'\">\r\n <img [src]=\"item[header.fieldName]\" [alt]=\"item.altText\" style=\"width: 35px; height: 32px;\">\r\n </ng-container>\r\n <!--VD 23Aug24 handle readOnly -->\r\n <!-- Text input -->\r\n <ng-container *ngIf=\"header.fldType === 'Text'\">\r\n <input type=\"text\" \r\n [readonly]=\"header.readOnly\" \r\n [disabled]=\"!item.edit\" \r\n [ngClass]=\"{'editInput': item.edit && !header.readOnly}\"\r\n [ngModel]=\"'' | getValue: item : header.apiName\" \r\n (ngModelChange)=\"updateLabel(i, header.apiName,$event)\" \r\n class=\"she-line-input table-input\">\r\n </ng-container>\r\n <!--VD 23Aug24 handle Number Type -->\r\n <!-- Number input -->\r\n <!-- VD 26Jun24 - pipe change to handle multiple objects-->\r\n <ng-container *ngIf=\"header.fldType === 'Number'\">\r\n <input type=\"number\" \r\n [readonly]=\"header.readOnly\" \r\n [disabled]=\"!item.edit\" \r\n [ngClass]=\"{'editInput': item.edit && !header.readOnly}\"\r\n [ngModel]=\"'' | getValue: item : header.apiName\" \r\n (ngModelChange)=\"updateLabel(i, header.apiName,$event)\" \r\n class=\"she-line-input table-input\">\r\n </ng-container>\r\n\r\n <!-- Radio input -->\r\n <ng-container *ngIf=\"header.fldType === 'radio'\">\r\n <input type=\"radio\" \r\n [name]=\"item.name\" \r\n [checked]=\"item.value == header.fieldName\" \r\n (click)=\"updateRadio(item, header.fieldName)\">\r\n </ng-container>\r\n </td>\r\n <!-- Actions column --><!-- RS 03FEB2025 -->\r\n <td *ngIf=\"showActions\" class=\"actions-column\">\r\n <div class=\"d-flex justify-content-around\">\r\n <button class=\"btn btn-link p-0\" (click)=\"editRow(i)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#03A9F4\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M12 20h9\" />\r\n <path d=\"M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4Z\" />\r\n <path d=\"m15 5 3 3\" />\r\n </svg>\r\n Edit\r\n </button>\r\n <button class=\"btn btn-link p-0\" (click)=\"deleteRow(i)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#F44336\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M3 6h18\" />\r\n <path d=\"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\" />\r\n <path d=\"m10 11 1 6\" />\r\n <path d=\"m14 11-1 6\" />\r\n <path d=\"M4 6l1 14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2l1-14\" />\r\n </svg>\r\n \r\n Delete\r\n </button>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n</div>\r\n\r\n<!-- Pagination --><!-- RS 03FEB2025 -->\r\n<div *ngIf=\"showPagination\" class=\"pagination-container\">\r\n <div class=\"d-flex justify-content-end align-items-center\">\r\n <div class=\"items-per-page\">\r\n <span>Items per page:</span>\r\n <select [(ngModel)]=\"itemsPerPage\" (change)=\"updatePagination()\" class=\"form-select form-select-sm\">\r\n <option value=\"5\">5</option>\r\n <option value=\"10\">10</option>\r\n <option value=\"20\">20</option>\r\n <option value=\"50\">50</option>\r\n </select>\r\n </div>\r\n <div class=\"page-info ms-3 me-3\">\r\n {{((currentPage - 1) * itemsPerPage + 1)}} - {{Math.min(currentPage * itemsPerPage, totalItems)}} of {{totalItems}}\r\n </div>\r\n <nav aria-label=\"Table pagination\">\r\n <!-- First page --><!-- RS 03FEB2025 -->\r\n <ul class=\"pagination mb-0\">\r\n <li class=\"page-item\" [class.disabled]=\"currentPage === 1\">\r\n <a class=\"page-link\" (click)=\"setPage(1)\">\u00AB</a>\r\n </li>\r\n <li class=\"page-item\" [class.disabled]=\"currentPage === 1\">\r\n <a class=\"page-link\" (click)=\"setPage(currentPage - 1)\">\u2039</a>\r\n </li>\r\n <!-- Dynamic pagination --><!-- RS 03FEB2025 -->\r\n <li class=\"page-item\" *ngFor=\"let page of pages\" [class.active]=\"page === currentPage\">\r\n <a class=\"page-link\" (click)=\"setPage(page)\">{{page}}</a>\r\n </li>\r\n <li class=\"page-item\" [class.disabled]=\"currentPage === pages.length\">\r\n <a class=\"page-link\" (click)=\"setPage(currentPage + 1)\">\u203A</a>\r\n </li>\r\n <!-- Last page -->\r\n <li class=\"page-item\" [class.disabled]=\"currentPage === pages.length\">\r\n <a class=\"page-link\" (click)=\"setPage(pages.length)\">\u00BB</a>\r\n </li>\r\n </ul>\r\n </nav>\r\n </div>\r\n</div>\r\n<!-- RS 03FEB2025 -->\r\n<!-- Add Row Button -->\r\n<div *ngIf=\"showAddRow\" (click)=\"addRow()\" class=\"addRowClass\">\r\n <div class=\"circle-button\">+</div>\r\n</div>\r\n", styles: [".table{width:100%;max-width:100%;margin-bottom:1rem;background-color:transparent;border-collapse:collapse}.table-container{max-height:400px;overflow-y:auto;overflow-x:auto;position:relative;margin-bottom:1rem}.table th,.table td{padding:3px 5px;line-height:1.2;vertical-align:middle;border:1px solid #dee2e6;white-space:nowrap}.table-bordered{border:1px solid #ddd}.table-striped tbody tr:nth-of-type(odd){background-color:#f9f9f9!important}thead{background-color:#03a9f4;position:sticky;top:0;z-index:10}thead th{color:#fff;font-size:14px;text-align:center;vertical-align:bottom;border-bottom:2px solid #dee2e6;padding:12px!important}thead .permission,.permission_yes,.permission_no,.permission_na{text-align:center}th{text-align:left}tbody{color:#797979}tbody td{font-size:12px}.none-border th{border:none}.actions-column{width:140px;white-space:nowrap;position:sticky;right:0;z-index:10;background-color:#fff}.actions-columns{width:140px;white-space:nowrap;position:sticky;right:0;z-index:10;background-color:#03a9f4}.actions-column .btn-link{font-size:11px;color:#797979;text-decoration:none}th.actions-column{background-color:#03a9f4}tr:nth-of-type(odd) .actions-column{background-color:#f9f9f9!important}tr:nth-of-type(2n) .actions-column{background-color:#fff!important}.table-input{width:100%;padding:.375rem .75rem;border:1px solid #ced4da;border-radius:.25rem}.editInput{background-color:#fff;border-bottom:1px solid red!important;border-color:#80bdff}.search-container{margin-bottom:1rem}.search-container .input-group{max-width:300px;position:relative}.search-input{padding-right:35px;border-radius:4px!important}.search-icon{position:absolute;right:10px;top:50%;transform:translateY(-50%);z-index:4;color:#666;pointer-events:none}.pagination-container{padding:.5rem 1rem;background-color:#f8f9fa;border-top:1px solid #dee2e6}.pagination-container .d-flex{justify-content:flex-end!important}.items-per-page{margin-right:20px;font-size:12px}.items-per-page select{width:60px;margin-left:8px}.page-info{margin-right:15px;font-size:12px;color:#6c757d}.pagination{margin:0}.page-link{padding:.25rem .5rem;font-size:12px}.page-item.disabled .page-link{cursor:not-allowed}.addRowClass{float:right;margin-top:1rem;margin-right:15%;text-align:center;cursor:pointer}.circle-button{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:50%;background-color:#007bff;color:#fff;cursor:pointer;font-size:24px;line-height:1;box-shadow:0 2px 4px #0003}.circle-button:hover{background-color:#0056b3}.small-icon{width:16px;height:16px;margin-right:4px}.action{min-width:80px;text-align:center;cursor:pointer}.action:hover{color:red}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i6.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i6.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i7.GetValuePipe, name: "getValue" }] });
|
|
321
321
|
}
|
|
322
322
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CustomTableComponent, decorators: [{
|
|
323
323
|
type: Component,
|
|
324
|
-
args: [{ selector: 'app-custom-table', template: "<!-- RS 03FEB2025 -->\r\n<!-- Search Bar -->\r\n<!-- Search, Revert & Save in Same Line -->\r\n<div class=\"d-flex align-items-center justify-content-between mb-3\">\r\n <!-- Search Bar -->\r\n <div class=\"search-container me-auto\">\r\n <div class=\"input-group\">\r\n <input \r\n type=\"text\" \r\n class=\"form-control search-input\"\r\n [(ngModel)]=\"searchTerm\"\r\n (input)=\"search()\"\r\n placeholder=\"Search...\"\r\n >\r\n <div class=\"search-icon\">\r\n <!-- RS 03FEB2025 -->\r\n <!-- Search icon for user input -->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <circle cx=\"11\" cy=\"11\" r=\"8\"></circle>\r\n <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"></line>\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Buttons -->\r\n <div>\r\n <!-- RS 03FEB2025 --><!-- Cancel button (visible only when changes are unsaved) -->\r\n <button \r\n class=\"btn btn-secondary me-2\" \r\n *ngIf=\"hasUnsavedChanges\" \r\n (click)=\"revertChanges()\"\r\n >\r\n Cancel\r\n </button>\r\n <!-- Save button (disabled if no unsaved changes) --><!-- RS 03FEB2025 -->\r\n <button \r\n class=\"btn btn-primary\" \r\n [disabled]=\"!hasUnsavedChanges\"\r\n (click)=\"saveTable()\"\r\n >\r\n Save Table\r\n </button>\r\n </div>\r\n</div>\r\n<!-- Table Container -->\r\n<div class=\"table-container\">\r\n <table class=\"table table-striped table-bordered\">\r\n <thead>\r\n <!-- HA 28DEC23 changed table header values and changed table size logic to evenly visible -->\r\n <!-- <th><input type=\"checkbox\" (change)=\"selectAll($event.target.checked)\"></th> -->\r\n <tr>\r\n <th *ngFor=\"let header of tableHeader\" [style.width]=\"header.width || 'auto'\">\r\n {{ header.label }}\r\n </th>\r\n <!-- Actions column (only if showActions is true) --><!-- RS 03FEB2025 -->\r\n <th *ngIf=\"showActions\" style=\"width: 140px\" class=\"actions-columns\">Actions</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let item of paginatedData; let i = index\">\r\n <td *ngFor=\"let header of tableHeader\">\r\n <!-- Image with text input -->\r\n <ng-container *ngIf=\"header.fldType === 'imagetext'\">\r\n <div class=\"d-flex align-items-center\">\r\n <img [src]=\"item.imageSrc\" [alt]=\"item.altText\" style=\"width: 35px; height: 32px; margin-right: 5px;\">\r\n <input type=\"text\" \r\n [(ngModel)]=\"item[header.fieldName]\" \r\n (ngModelChange)=\"updateLabel(i, header.fieldName, item[header.fieldName])\" \r\n class=\"she-line-input table-input\">\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Image only -->\r\n <ng-container *ngIf=\"header.fldType === 'image'\">\r\n <img [src]=\"item[header.fieldName]\" [alt]=\"item.altText\" style=\"width: 35px; height: 32px;\">\r\n </ng-container>\r\n <!--VD 23Aug24 handle readOnly -->\r\n <!-- Text input -->\r\n <ng-container *ngIf=\"header.fldType === 'Text'\">\r\n <input type=\"text\" \r\n [readonly]=\"header.readOnly\" \r\n [disabled]=\"!item.edit\" \r\n [ngClass]=\"{'editInput': item.edit && !header.readOnly}\"\r\n [ngModel]=\"'' | getValue: item : header.apiName\" \r\n (ngModelChange)=\"updateLabel(i, header.apiName,$event)\" \r\n class=\"she-line-input table-input\">\r\n </ng-container>\r\n <!--VD 23Aug24 handle Number Type -->\r\n <!-- Number input -->\r\n <!-- VD 26Jun24 - pipe change to handle multiple objects-->\r\n <ng-container *ngIf=\"header.fldType === 'Number'\">\r\n <input type=\"number\" \r\n [readonly]=\"header.readOnly\" \r\n [disabled]=\"!item.edit\" \r\n [ngClass]=\"{'editInput': item.edit && !header.readOnly}\"\r\n [ngModel]=\"'' | getValue: item : header.apiName\" \r\n (ngModelChange)=\"updateLabel(i, header.apiName,$event)\" \r\n class=\"she-line-input table-input\">\r\n </ng-container>\r\n\r\n <!-- Radio input -->\r\n <ng-container *ngIf=\"header.fldType === 'radio'\">\r\n <input type=\"radio\" \r\n [name]=\"item.name\" \r\n [checked]=\"item.value == header.fieldName\" \r\n (click)=\"updateRadio(item, header.fieldName)\">\r\n </ng-container>\r\n </td>\r\n <!-- Actions column --><!-- RS 03FEB2025 -->\r\n <td *ngIf=\"showActions\" class=\"actions-column\">\r\n <div class=\"d-flex justify-content-around\">\r\n <button class=\"btn btn-link p-0\" (click)=\"editRow(i)\">\r\n <i class=\"fas fa-edit text-primary\"></i>\r\n Edit\r\n </button>\r\n <button class=\"btn btn-link p-0\" (click)=\"deleteRow(i)\">\r\n <i class=\"fas fa-trash text-danger\"></i>\r\n Delete\r\n </button>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n</div>\r\n\r\n<!-- Pagination --><!-- RS 03FEB2025 -->\r\n<div *ngIf=\"showPagination\" class=\"pagination-container\">\r\n <div class=\"d-flex justify-content-end align-items-center\">\r\n <div class=\"items-per-page\">\r\n <span>Items per page:</span>\r\n <select [(ngModel)]=\"itemsPerPage\" (change)=\"updatePagination()\" class=\"form-select form-select-sm\">\r\n <option value=\"5\">5</option>\r\n <option value=\"10\">10</option>\r\n <option value=\"20\">20</option>\r\n <option value=\"50\">50</option>\r\n </select>\r\n </div>\r\n <div class=\"page-info ms-3 me-3\">\r\n {{((currentPage - 1) * itemsPerPage + 1)}} - {{Math.min(currentPage * itemsPerPage, totalItems)}} of {{totalItems}}\r\n </div>\r\n <nav aria-label=\"Table pagination\">\r\n <!-- First page --><!-- RS 03FEB2025 -->\r\n <ul class=\"pagination mb-0\">\r\n <li class=\"page-item\" [class.disabled]=\"currentPage === 1\">\r\n <a class=\"page-link\" (click)=\"setPage(1)\">\u00AB</a>\r\n </li>\r\n <li class=\"page-item\" [class.disabled]=\"currentPage === 1\">\r\n <a class=\"page-link\" (click)=\"setPage(currentPage - 1)\">\u2039</a>\r\n </li>\r\n <!-- Dynamic pagination --><!-- RS 03FEB2025 -->\r\n <li class=\"page-item\" *ngFor=\"let page of pages\" [class.active]=\"page === currentPage\">\r\n <a class=\"page-link\" (click)=\"setPage(page)\">{{page}}</a>\r\n </li>\r\n <li class=\"page-item\" [class.disabled]=\"currentPage === pages.length\">\r\n <a class=\"page-link\" (click)=\"setPage(currentPage + 1)\">\u203A</a>\r\n </li>\r\n <!-- Last page -->\r\n <li class=\"page-item\" [class.disabled]=\"currentPage === pages.length\">\r\n <a class=\"page-link\" (click)=\"setPage(pages.length)\">\u00BB</a>\r\n </li>\r\n </ul>\r\n </nav>\r\n </div>\r\n</div>\r\n<!-- RS 03FEB2025 -->\r\n<!-- Add Row Button -->\r\n<div *ngIf=\"showAddRow\" (click)=\"addRow()\" class=\"addRowClass\">\r\n <div class=\"circle-button\">+</div>\r\n</div>\r\n", styles: [".table{width:100%;max-width:100%;margin-bottom:1rem;background-color:transparent;border-collapse:collapse}.table-container{max-height:400px;overflow-y:auto;overflow-x:auto;position:relative;margin-bottom:1rem}.table th,.table td{padding:3px 5px;line-height:1.2;vertical-align:middle;border:1px solid #dee2e6;white-space:nowrap}.table-bordered{border:1px solid #ddd}.table-striped tbody tr:nth-of-type(odd){background-color:#f9f9f9!important}thead{background-color:#03a9f4;position:sticky;top:0;z-index:10}thead th{color:#fff;font-size:14px;text-align:center;vertical-align:bottom;border-bottom:2px solid #dee2e6;padding:12px!important}thead .permission,.permission_yes,.permission_no,.permission_na{text-align:center}th{text-align:left}tbody{color:#797979}tbody td{font-size:12px}.none-border th{border:none}.actions-column{width:140px;white-space:nowrap;position:sticky;right:0;z-index:10;background-color:#fff}.actions-columns{width:140px;white-space:nowrap;position:sticky;right:0;z-index:10;background-color:#03a9f4}.actions-column .btn-link{font-size:11px;color:#797979;text-decoration:none}th.actions-column{background-color:#03a9f4}tr:nth-of-type(odd) .actions-column{background-color:#f9f9f9!important}tr:nth-of-type(2n) .actions-column{background-color:#fff!important}.table-input{width:100%;padding:.375rem .75rem;border:1px solid #ced4da;border-radius:.25rem}.editInput{background-color:#fff;border-bottom:1px solid red!important;border-color:#80bdff}.search-container{margin-bottom:1rem}.search-container .input-group{max-width:300px;position:relative}.search-input{padding-right:35px;border-radius:4px!important}.search-icon{position:absolute;right:10px;top:50%;transform:translateY(-50%);z-index:4;color:#666;pointer-events:none}.pagination-container{padding:.5rem 1rem;background-color:#f8f9fa;border-top:1px solid #dee2e6}.pagination-container .d-flex{justify-content:flex-end!important}.items-per-page{margin-right:20px;font-size:12px}.items-per-page select{width:60px;margin-left:8px}.page-info{margin-right:15px;font-size:12px;color:#6c757d}.pagination{margin:0}.page-link{padding:.25rem .5rem;font-size:12px}.page-item.disabled .page-link{cursor:not-allowed}.addRowClass{float:right;margin-top:1rem;margin-right:15%;text-align:center;cursor:pointer}.circle-button{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:50%;background-color:#007bff;color:#fff;cursor:pointer;font-size:24px;line-height:1;box-shadow:0 2px 4px #0003}.circle-button:hover{background-color:#0056b3}.small-icon{width:16px;height:16px;margin-right:4px}.action{min-width:80px;text-align:center;cursor:pointer}.action:hover{color:red}\n"] }]
|
|
324
|
+
args: [{ selector: 'app-custom-table', template: "<!-- RS 03FEB2025 -->\r\n<!-- Search Bar -->\r\n<!-- Search, Revert & Save in Same Line -->\r\n<div class=\"d-flex align-items-center justify-content-between mb-3\">\r\n <!-- Search Bar -->\r\n <div class=\"search-container me-auto\">\r\n <div class=\"input-group\">\r\n <input \r\n type=\"text\" \r\n class=\"form-control search-input\"\r\n [(ngModel)]=\"searchTerm\"\r\n (input)=\"search()\"\r\n placeholder=\"Search...\"\r\n >\r\n <div class=\"search-icon\">\r\n <!-- RS 03FEB2025 -->\r\n <!-- Search icon for user input -->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <circle cx=\"11\" cy=\"11\" r=\"8\"></circle>\r\n <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"></line>\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Buttons -->\r\n <div>\r\n <!-- RS 03FEB2025 --><!-- Cancel button (visible only when changes are unsaved) -->\r\n <button \r\n class=\"btn btn-secondary me-2\" \r\n *ngIf=\"hasUnsavedChanges\" \r\n (click)=\"revertChanges()\"\r\n >\r\n Cancel\r\n </button>\r\n <!-- Save button (disabled if no unsaved changes) --><!-- RS 03FEB2025 -->\r\n <button \r\n class=\"btn btn-primary\" \r\n [disabled]=\"!hasUnsavedChanges\"\r\n (click)=\"saveTable()\"\r\n >\r\n Save Table\r\n </button>\r\n </div>\r\n</div>\r\n<!-- Table Container -->\r\n<div class=\"table-container\">\r\n <table class=\"table table-striped table-bordered\">\r\n <thead>\r\n <!-- HA 28DEC23 changed table header values and changed table size logic to evenly visible -->\r\n <!-- <th><input type=\"checkbox\" (change)=\"selectAll($event.target.checked)\"></th> -->\r\n <tr>\r\n <th *ngFor=\"let header of tableHeader\" [style.width]=\"header.width || 'auto'\">\r\n {{ header.label }}\r\n </th>\r\n <!-- Actions column (only if showActions is true) --><!-- RS 03FEB2025 -->\r\n <th *ngIf=\"showActions\" style=\"width: 140px\" class=\"actions-columns\">Actions</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let item of paginatedData; let i = index\">\r\n <td *ngFor=\"let header of tableHeader\">\r\n <!-- Image with text input -->\r\n <ng-container *ngIf=\"header.fldType === 'imagetext'\">\r\n <div class=\"d-flex align-items-center\">\r\n <img [src]=\"item.imageSrc\" [alt]=\"item.altText\" style=\"width: 35px; height: 32px; margin-right: 5px;\">\r\n <input type=\"text\" \r\n [(ngModel)]=\"item[header.fieldName]\" \r\n (ngModelChange)=\"updateLabel(i, header.fieldName, item[header.fieldName])\" \r\n class=\"she-line-input table-input\">\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Image only -->\r\n <ng-container *ngIf=\"header.fldType === 'image'\">\r\n <img [src]=\"item[header.fieldName]\" [alt]=\"item.altText\" style=\"width: 35px; height: 32px;\">\r\n </ng-container>\r\n <!--VD 23Aug24 handle readOnly -->\r\n <!-- Text input -->\r\n <ng-container *ngIf=\"header.fldType === 'Text'\">\r\n <input type=\"text\" \r\n [readonly]=\"header.readOnly\" \r\n [disabled]=\"!item.edit\" \r\n [ngClass]=\"{'editInput': item.edit && !header.readOnly}\"\r\n [ngModel]=\"'' | getValue: item : header.apiName\" \r\n (ngModelChange)=\"updateLabel(i, header.apiName,$event)\" \r\n class=\"she-line-input table-input\">\r\n </ng-container>\r\n <!--VD 23Aug24 handle Number Type -->\r\n <!-- Number input -->\r\n <!-- VD 26Jun24 - pipe change to handle multiple objects-->\r\n <ng-container *ngIf=\"header.fldType === 'Number'\">\r\n <input type=\"number\" \r\n [readonly]=\"header.readOnly\" \r\n [disabled]=\"!item.edit\" \r\n [ngClass]=\"{'editInput': item.edit && !header.readOnly}\"\r\n [ngModel]=\"'' | getValue: item : header.apiName\" \r\n (ngModelChange)=\"updateLabel(i, header.apiName,$event)\" \r\n class=\"she-line-input table-input\">\r\n </ng-container>\r\n\r\n <!-- Radio input -->\r\n <ng-container *ngIf=\"header.fldType === 'radio'\">\r\n <input type=\"radio\" \r\n [name]=\"item.name\" \r\n [checked]=\"item.value == header.fieldName\" \r\n (click)=\"updateRadio(item, header.fieldName)\">\r\n </ng-container>\r\n </td>\r\n <!-- Actions column --><!-- RS 03FEB2025 -->\r\n <td *ngIf=\"showActions\" class=\"actions-column\">\r\n <div class=\"d-flex justify-content-around\">\r\n <button class=\"btn btn-link p-0\" (click)=\"editRow(i)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#03A9F4\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M12 20h9\" />\r\n <path d=\"M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4Z\" />\r\n <path d=\"m15 5 3 3\" />\r\n </svg>\r\n Edit\r\n </button>\r\n <button class=\"btn btn-link p-0\" (click)=\"deleteRow(i)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#F44336\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M3 6h18\" />\r\n <path d=\"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\" />\r\n <path d=\"m10 11 1 6\" />\r\n <path d=\"m14 11-1 6\" />\r\n <path d=\"M4 6l1 14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2l1-14\" />\r\n </svg>\r\n \r\n Delete\r\n </button>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n</div>\r\n\r\n<!-- Pagination --><!-- RS 03FEB2025 -->\r\n<div *ngIf=\"showPagination\" class=\"pagination-container\">\r\n <div class=\"d-flex justify-content-end align-items-center\">\r\n <div class=\"items-per-page\">\r\n <span>Items per page:</span>\r\n <select [(ngModel)]=\"itemsPerPage\" (change)=\"updatePagination()\" class=\"form-select form-select-sm\">\r\n <option value=\"5\">5</option>\r\n <option value=\"10\">10</option>\r\n <option value=\"20\">20</option>\r\n <option value=\"50\">50</option>\r\n </select>\r\n </div>\r\n <div class=\"page-info ms-3 me-3\">\r\n {{((currentPage - 1) * itemsPerPage + 1)}} - {{Math.min(currentPage * itemsPerPage, totalItems)}} of {{totalItems}}\r\n </div>\r\n <nav aria-label=\"Table pagination\">\r\n <!-- First page --><!-- RS 03FEB2025 -->\r\n <ul class=\"pagination mb-0\">\r\n <li class=\"page-item\" [class.disabled]=\"currentPage === 1\">\r\n <a class=\"page-link\" (click)=\"setPage(1)\">\u00AB</a>\r\n </li>\r\n <li class=\"page-item\" [class.disabled]=\"currentPage === 1\">\r\n <a class=\"page-link\" (click)=\"setPage(currentPage - 1)\">\u2039</a>\r\n </li>\r\n <!-- Dynamic pagination --><!-- RS 03FEB2025 -->\r\n <li class=\"page-item\" *ngFor=\"let page of pages\" [class.active]=\"page === currentPage\">\r\n <a class=\"page-link\" (click)=\"setPage(page)\">{{page}}</a>\r\n </li>\r\n <li class=\"page-item\" [class.disabled]=\"currentPage === pages.length\">\r\n <a class=\"page-link\" (click)=\"setPage(currentPage + 1)\">\u203A</a>\r\n </li>\r\n <!-- Last page -->\r\n <li class=\"page-item\" [class.disabled]=\"currentPage === pages.length\">\r\n <a class=\"page-link\" (click)=\"setPage(pages.length)\">\u00BB</a>\r\n </li>\r\n </ul>\r\n </nav>\r\n </div>\r\n</div>\r\n<!-- RS 03FEB2025 -->\r\n<!-- Add Row Button -->\r\n<div *ngIf=\"showAddRow\" (click)=\"addRow()\" class=\"addRowClass\">\r\n <div class=\"circle-button\">+</div>\r\n</div>\r\n", styles: [".table{width:100%;max-width:100%;margin-bottom:1rem;background-color:transparent;border-collapse:collapse}.table-container{max-height:400px;overflow-y:auto;overflow-x:auto;position:relative;margin-bottom:1rem}.table th,.table td{padding:3px 5px;line-height:1.2;vertical-align:middle;border:1px solid #dee2e6;white-space:nowrap}.table-bordered{border:1px solid #ddd}.table-striped tbody tr:nth-of-type(odd){background-color:#f9f9f9!important}thead{background-color:#03a9f4;position:sticky;top:0;z-index:10}thead th{color:#fff;font-size:14px;text-align:center;vertical-align:bottom;border-bottom:2px solid #dee2e6;padding:12px!important}thead .permission,.permission_yes,.permission_no,.permission_na{text-align:center}th{text-align:left}tbody{color:#797979}tbody td{font-size:12px}.none-border th{border:none}.actions-column{width:140px;white-space:nowrap;position:sticky;right:0;z-index:10;background-color:#fff}.actions-columns{width:140px;white-space:nowrap;position:sticky;right:0;z-index:10;background-color:#03a9f4}.actions-column .btn-link{font-size:11px;color:#797979;text-decoration:none}th.actions-column{background-color:#03a9f4}tr:nth-of-type(odd) .actions-column{background-color:#f9f9f9!important}tr:nth-of-type(2n) .actions-column{background-color:#fff!important}.table-input{width:100%;padding:.375rem .75rem;border:1px solid #ced4da;border-radius:.25rem}.editInput{background-color:#fff;border-bottom:1px solid red!important;border-color:#80bdff}.search-container{margin-bottom:1rem}.search-container .input-group{max-width:300px;position:relative}.search-input{padding-right:35px;border-radius:4px!important}.search-icon{position:absolute;right:10px;top:50%;transform:translateY(-50%);z-index:4;color:#666;pointer-events:none}.pagination-container{padding:.5rem 1rem;background-color:#f8f9fa;border-top:1px solid #dee2e6}.pagination-container .d-flex{justify-content:flex-end!important}.items-per-page{margin-right:20px;font-size:12px}.items-per-page select{width:60px;margin-left:8px}.page-info{margin-right:15px;font-size:12px;color:#6c757d}.pagination{margin:0}.page-link{padding:.25rem .5rem;font-size:12px}.page-item.disabled .page-link{cursor:not-allowed}.addRowClass{float:right;margin-top:1rem;margin-right:15%;text-align:center;cursor:pointer}.circle-button{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:50%;background-color:#007bff;color:#fff;cursor:pointer;font-size:24px;line-height:1;box-shadow:0 2px 4px #0003}.circle-button:hover{background-color:#0056b3}.small-icon{width:16px;height:16px;margin-right:4px}.action{min-width:80px;text-align:center;cursor:pointer}.action:hover{color:red}\n"] }]
|
|
325
325
|
}], ctorParameters: () => [{ type: i1.ChangeService }, { type: i2.I18nService }, { type: i3.SalesforceService }, { type: i4.DataService }], propDecorators: { question: [{
|
|
326
326
|
type: Input
|
|
327
327
|
}], valueChange: [{
|
|
@@ -331,4 +331,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
331
331
|
}], apiMeta: [{
|
|
332
332
|
type: Input
|
|
333
333
|
}] } });
|
|
334
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9jb21wb25lbnRzL2N1c3RvbS10YWJsZS9jdXN0b20tdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL2NvbXBvbmVudHMvY3VzdG9tLXRhYmxlL2N1c3RvbS10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7O0FBbUIxRixNQUFNLE9BQU8sb0JBQW9CO0lBb0NYO0lBQW9DO0lBQWtDO0lBQXNDO0lBbkN2SCxRQUFRLENBQVU7SUFDakIsV0FBVyxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO0lBQ3pELGFBQWEsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztJQUNyRSxTQUFTLENBQWU7SUFDeEIsV0FBVyxHQUFHLEVBQUUsQ0FBQztJQUNqQixTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ2YsWUFBWSxHQUFHLEVBQUUsQ0FBQyxDQUFDLGlDQUFpQztJQUN0RCxjQUFjO0lBQ2Qsb0pBQW9KO0lBQ3BKLFVBQVUsR0FBWSxJQUFJLENBQUM7SUFDM0IsY0FBYyxHQUFZLElBQUksQ0FBQztJQUMvQixXQUFXLEdBQVksSUFBSSxDQUFDO0lBQzVCLFVBQVUsR0FBWSxJQUFJLENBQUM7SUFDM0IsWUFBWSxHQUFXLENBQUMsQ0FBQztJQUN2QixhQUFhLENBQVM7SUFDdEIsU0FBUyxDQUFTLENBQUMsb0NBQW9DO0lBQ3ZELE9BQU8sQ0FBTTtJQUNiLFdBQVcsQ0FBTTtJQUNqQixTQUFTLENBQVM7SUFDbEIsTUFBTSxDQUFTO0lBQ2YsU0FBUyxHQUFZLEtBQUssQ0FBQztJQUNsQixPQUFPLENBQVM7SUFDbEIsT0FBTyxDQUFXO0lBQ3pCLFVBQVUsR0FBWSxJQUFJLENBQUM7SUFDM0IsWUFBWSxDQUFlO0lBRXBCLFVBQVUsQ0FBUztJQUUxQixjQUFjO0lBQ2QsMkNBQTJDO0lBQzNDLFVBQVUsR0FBVyxFQUFFLENBQUM7SUFDeEIsV0FBVyxHQUFXLENBQUMsQ0FBQztJQUN4QixVQUFVLEdBQVcsQ0FBQyxDQUFDO0lBQ3ZCLEtBQUssR0FBYSxFQUFFLENBQUM7SUFDckIsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNaLFlBQW9CLGFBQTRCLEVBQVEsV0FBd0IsRUFBVSxTQUE0QixFQUFVLFdBQXdCO1FBQXBJLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQVEsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFBVSxjQUFTLEdBQVQsU0FBUyxDQUFtQjtRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUFhO0lBQUksQ0FBQztJQUM3SiwwQkFBMEI7SUFDMUIsNENBQTRDO0lBQzVDLGlCQUFpQixHQUFZLEtBQUssQ0FBQztJQUNuQyxTQUFTLEdBQVUsRUFBRSxDQUFDO0lBQ3RCLFFBQVE7UUFFTix1QkFBdUI7UUFDM0IsZ0NBQWdDO1FBQ2hDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzNCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDO1lBQ0gsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFDM0QsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDekUsT0FBTyxDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO2dCQUMzQyxPQUFPO1lBQ1QsQ0FBQztZQUNELGNBQWM7WUFDZCw2SEFBNkg7WUFDN0gsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUM7Z0JBQy9CLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7Z0JBQ3pDLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsS0FBSyxLQUFLLENBQUM7Z0JBQzlDLElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsS0FBSyxLQUFLLENBQUM7Z0JBQ3RELElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsS0FBSyxLQUFLLENBQUM7Z0JBQ2hELElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsS0FBSyxLQUFLLENBQUM7Z0JBQzlDLElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksSUFBSSxDQUFDLENBQUM7Z0JBRTdDLHdDQUF3QztnQkFDeEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pDLENBQUM7aUJBQU0sQ0FBQztnQkFDTix3REFBd0Q7Z0JBQ3hELElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDO1lBQ2hDLENBQUM7WUFFQyw4REFBOEQ7WUFDOUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLEdBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7WUFDaEQsZ0NBQWdDO1lBQzVCLElBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUMsQ0FBQztnQkFDckIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQztnQkFDdEMsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUMxQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMxQixDQUFDO1lBQ0QsSUFBRyxJQUFJLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUM5QixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztnQkFDbEIsSUFBSSxNQUFNLEdBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQy9DLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztnQkFDL0IsSUFBRyxNQUFNLENBQUMsUUFBUSxFQUFDLENBQUM7b0JBQ2xCLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRTt3QkFDdkUsSUFBSSxTQUFTLENBQUM7d0JBQ2QsSUFBRyxNQUFNLENBQUMsUUFBUSxFQUFDLENBQUM7NEJBQ2pCLCtDQUErQzs0QkFDaEQsU0FBUyxHQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7NEJBQ3BFLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQzs0QkFDakIsaURBQWlEOzRCQUNqRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dDQUMzQyxJQUFJLElBQUksR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0NBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7NEJBQ3JCLENBQUM7NEJBQ0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7d0JBQ3pCLENBQUM7NkJBQUksQ0FBQyxDQUFFLDBEQUEwRDs0QkFDaEUsU0FBUyxHQUFHLFdBQVcsQ0FBQzs0QkFDeEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUM7d0JBQzNCLENBQUM7d0JBQ0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQ3pFLCtEQUErRDt3QkFDaEUsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO3dCQUMvQixPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7b0JBRXpDLENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUM7Z0JBRUQsc0RBQXNEO2dCQUN0RCxJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUM7Z0JBQ3ZDLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBUSxxQ0FBcUM7Z0JBQ3RFLElBQUcsUUFBUSxFQUFDLENBQUM7b0JBQ1gsMENBQTBDO29CQUMxQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUMvRCxDQUFDLFdBQVcsRUFBRSxFQUFFO3dCQUNkLElBQUcsV0FBVyxJQUFJLFNBQVMsRUFBRSxDQUFDOzRCQUM1QixJQUFHLFdBQVcsQ0FBQyxRQUFRLElBQUksU0FBUyxJQUFJLFdBQVcsQ0FBQyxjQUFjLElBQUksTUFBTSxDQUFDLGdCQUFnQixFQUFFLENBQUM7Z0NBQzlGLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztnQ0FDOUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0NBQ3pFLElBQUksSUFBSSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUM7Z0NBQ2hDLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQztnQ0FDcEIsa0NBQWtDO2dDQUNuQyxJQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBQyxDQUFDO29DQUM1QixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTt3Q0FDaEMsMENBQTBDO3dDQUN6QyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUMsS0FBSyxDQUFDLENBQUM7d0NBQ2pFLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksRUFBQyxLQUFLLENBQUMsQ0FBQTt3Q0FDMUQsSUFBRyxlQUFlLElBQUksWUFBWSxFQUFDLENBQUM7NENBQ2pDLFNBQVMsR0FBRyxLQUFLLENBQUM7d0NBQ3JCLENBQUM7b0NBQ0gsQ0FBQyxDQUFDLENBQUM7Z0NBQ0wsQ0FBQztnQ0FDRCxJQUFHLFNBQVMsRUFBQyxDQUFDO29DQUNaLElBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFDLENBQUM7d0NBQzVCLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUMsSUFBSSxDQUFDLENBQUM7d0NBQzFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7b0NBQzFDLENBQUM7eUNBQUssQ0FBQzt3Q0FDTCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzt3Q0FDMUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztvQ0FDMUMsQ0FBQztnQ0FDSCxDQUFDOzRCQUNILENBQUM7NEJBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7d0JBQzVELENBQUM7b0JBQ0gsQ0FBQyxDQUNGLENBQUM7Z0JBQ0osQ0FBQztZQUNILENBQUM7WUFDRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN4QixjQUFjO1lBQ2QseUdBQXlHO1FBQzNHLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQywyQkFBMkIsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNsRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUN2QixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztZQUMzQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztZQUN4QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUN2QixJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztRQUN4QixDQUFDO1FBQ0QsY0FBYztRQUNkLHdCQUF3QjtRQUN4QixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ25FLENBQUM7UUFDQyxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDekMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzdDLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBQ0QsY0FBYztJQUNkLCtFQUErRTtJQUMvRSxNQUFNO1FBQ0osSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDMUMsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3RELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQy9DLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7b0JBQ3BDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQzlELE9BQU8sS0FBSyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBQzNFLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFDckIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUNILGNBQWM7SUFDZCxzR0FBc0c7SUFDcEcsZ0JBQWdCO1FBQ2QsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQztRQUMzQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMvRCxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7SUFDRCxDQUFDO0lBQ0gsY0FBYztJQUNkLHlGQUF5RjtJQUN2RixJQUFJLGFBQWE7UUFDZixNQUFNLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUM5RCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFDSCxjQUFjO0lBQ2QsNERBQTREO0lBQzFELE9BQU8sQ0FBQyxJQUFZO1FBQ2xCLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMzQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUMxQixDQUFDO0lBQ0gsQ0FBQztJQUNILGNBQWM7SUFDZCwrRkFBK0Y7SUFDckYsbUJBQW1CO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQzNCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDO1FBQ3RCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbEMsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNO1FBQ0osSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDOUIsSUFBRyxJQUFJLENBQUMsT0FBTyxFQUFDLENBQUM7Z0JBQ2YsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRSxFQUFFLENBQUM7WUFDNUIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wseURBQXlEO1FBQ3pELHFDQUFxQztRQUNyQyw2Q0FBNkM7UUFDN0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFFOUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsV0FBVyxDQUFDLElBQVMsRUFBRSxLQUFhO1FBQ2xDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUNELDBCQUEwQjtJQUMxQixtRUFBbUU7SUFDbkUsNkNBQTZDO0lBQzdDLDZDQUE2QztJQUM3QyxJQUFJO0lBQ0osMkNBQTJDO0lBQzNDLFdBQVcsQ0FBQyxRQUFnQixFQUFFLEtBQWEsRUFBRSxLQUFVO1FBQ3JELElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFDOUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBQ0QsY0FBYztJQUNkLFNBQVMsQ0FBQyxRQUFnQjtRQUN4QixzQ0FBc0M7UUFDdEMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUcsUUFBUSxDQUFDO1FBQzFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztRQUU5QixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFDRCxjQUFjO0lBQ2QscUdBQXFHO0lBQ3JHLFNBQVM7UUFDUCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQy9CLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBQ0QsY0FBYztJQUNkLHFGQUFxRjtJQUNyRixhQUFhO1FBQ1gsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDL0IsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBQ0QsT0FBTyxDQUFDLFFBQWdCO1FBQ3RCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNWLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQy9CLElBQUcsQ0FBQyxLQUFLLFFBQVEsRUFBQyxDQUFDO2dCQUNqQixPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztZQUN0QixDQUFDO1lBQ0QsQ0FBQyxFQUFFLENBQUM7UUFDTixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxZQUFZLENBQUMsSUFBUyxFQUFFLEtBQWEsRUFBRSxLQUFhO1FBQ2xELElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUdELGtCQUFrQixDQUFDLGdCQUF1QjtRQUN4QyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFDSCxjQUFjO0lBQ2QsNkdBQTZHO0lBQzdHLFdBQVc7UUFDVCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUMzQixPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFFckMsQ0FBQzt3R0F2VFksb0JBQW9COzRGQUFwQixvQkFBb0IsdUxDbkJqQyxpOE9BMktBOzs0RkR4SmEsb0JBQW9CO2tCQU5oQyxTQUFTOytCQUNFLGtCQUFrQjtzS0FNbkIsUUFBUTtzQkFBaEIsS0FBSztnQkFDSSxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBbUJFLE9BQU87c0JBQWYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG4vLyBIQSAxOURFQzIzIGltcG9ydGVkIHRyYW5zbGF0aW9uIHNlcnZpY2VcclxuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuLi8uLi9pMThuLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUYWJsZVdyYXBwZXIgfSBmcm9tICcuLi8uLi9tb2RlbC90YWJsZVdyYXBwZXInO1xyXG5pbXBvcnQgeyBTYWxlc2ZvcmNlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NhbGVzZm9yY2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSAnLi4vLi4vd3JhcHBlcic7XHJcbmltcG9ydCB7IERhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGF0YS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQVBJTWV0YSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvYXBpbWV0YSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDaGFuZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2hhbmdlLnNlcnZpY2UnO1xyXG5cclxuZGVjbGFyZSB2YXIgJDogYW55O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtY3VzdG9tLXRhYmxlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY3VzdG9tLXRhYmxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jdXN0b20tdGFibGUuY29tcG9uZW50LmNzcyddXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgQ3VzdG9tVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgQElucHV0KCkgcXVlc3Rpb246IFF1ZXN0aW9uXHJcbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBzYXZlVGFibGVEYXRhOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIHRhYmxlSW5mbzogVGFibGVXcmFwcGVyO1xyXG4gIHRhYmxlSGVhZGVyID0gW107XHJcbiAgdGFibGVEYXRhID0gW107XHJcbiAgZmlsdGVyZWREYXRhID0gW107IC8vIE5ldyBwcm9wZXJ0eSBmb3IgZmlsdGVyZWQgZGF0YVxyXG4vL1JTIDAzRkVCMjAyNVxyXG4vLyBEZWZhdWx0IFVJIGNvbmZpZ3VyYXRpb25zIHRvIGNvbnRyb2wgcm93IGFkZGl0aW9uLCBwYWdpbmF0aW9uLCBhY3Rpb25zIGNvbHVtbiB2aXNpYmlsaXR5LCBzZWFyY2ggZnVuY3Rpb25hbGl0eSwgYW5kIHRoZSBudW1iZXIgb2YgaXRlbXMgcGVyIHBhZ2UuXHJcbnNob3dBZGRSb3c6IGJvb2xlYW4gPSB0cnVlO1xyXG5zaG93UGFnaW5hdGlvbjogYm9vbGVhbiA9IHRydWU7XHJcbnNob3dBY3Rpb25zOiBib29sZWFuID0gdHJ1ZTtcclxuc2hvd1NlYXJjaDogYm9vbGVhbiA9IHRydWU7XHJcbml0ZW1zUGVyUGFnZTogbnVtYmVyID0gNTtcclxuICBhZGRSb3dDb2xTcGFuOiBudW1iZXI7XHJcbiAgdGFibGVTaXplOiBudW1iZXI7IC8vIEhBIDI4REVDMjMgdGFibGUgc2l6ZSBkZWNsYXJhdGlvblxyXG4gIG9iak5hbWU6IGFueTtcclxuICBmaWx0ZXJMb2dpYzogYW55O1xyXG4gIGZpZWxkTWV0YTogc3RyaW5nO1xyXG4gIGZpclN0cjogc3RyaW5nO1xyXG4gIHNlYXJjaEJveDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGFwaU1ldGE6IHN0cmluZztcclxuICBwdWJsaWMgb3B0aW9uczogc3RyaW5nW107XHJcbiAgaXNEaXNhYmxlZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIHB1YmxpYyBsYWJlbEZpZWxkOiBzdHJpbmc7XHJcblxyXG4gIC8vUlMgMDNGRUIyMDI1XHJcbiAgLy8gTmV3IHByb3BlcnRpZXMgZm9yIHNlYXJjaCBhbmQgcGFnaW5hdGlvblxyXG4gIHNlYXJjaFRlcm06IHN0cmluZyA9ICcnO1xyXG4gIGN1cnJlbnRQYWdlOiBudW1iZXIgPSAxO1xyXG4gIHRvdGFsSXRlbXM6IG51bWJlciA9IDA7XHJcbiAgcGFnZXM6IG51bWJlcltdID0gW107XHJcbiAgTWF0aCA9IE1hdGg7XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjaGFuZ2VTZXJ2aWNlOiBDaGFuZ2VTZXJ2aWNlLHB1YmxpYyBpMThuU2VydmljZTogSTE4blNlcnZpY2UsIHByaXZhdGUgc2ZTZXJ2aWNlOiBTYWxlc2ZvcmNlU2VydmljZSwgcHJpdmF0ZSBkYXRhU2VydmljZTogRGF0YVNlcnZpY2UpIHsgfVxyXG4gIC8vIFJTIDA5REVDMjQgQ2hhbmdlZCBrZXlzXHJcbiAgLy8gQWRkIG5ldyBwcm9wZXJ0aWVzIGZvciBzYXZlIGZ1bmN0aW9uYWxpdHlcclxuICBoYXNVbnNhdmVkQ2hhbmdlczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNhdmVkRGF0YTogYW55W10gPSBbXTtcclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgICAvLyB0aGlzLnRhYmxlRGF0YSA9IFtdO1xyXG4vLyBDbGVhciBhbnkgZXhpc3RpbmcgZGF0YSBmaXJzdFxyXG50aGlzLnJlc2V0Q29tcG9uZW50U3RhdGUoKTtcclxuc2V0VGltZW91dCgoKSA9PiBjb25zb2xlLmxvZygnQWZ0ZXIgcmVzZXQ6JywgdGhpcy50YWJsZURhdGEpLCAyMDAwKTtcclxudHJ5IHtcclxuICBjb25zdCBwYXJzZWRNZXRhID0gSlNPTi5wYXJzZSh0aGlzLnF1ZXN0aW9uWydmaWVsZHNNZXRhJ10pO1xyXG4gIGlmICghcGFyc2VkTWV0YSB8fCAhQXJyYXkuaXNBcnJheShwYXJzZWRNZXRhKSB8fCBwYXJzZWRNZXRhLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgY29uc29sZS53YXJuKCdObyB2YWxpZCBtZXRhZGF0YSBwcm92aWRlZCcpO1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuICAvL1JTIDAzRkVCMjAyNVxyXG4gIC8vIEV4dHJhY3RzIHRhYmxlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZHluYW1pY2FsbHkgZnJvbSBtZXRhZGF0YSBhbmQgYXBwbGllcyB0aGVtLCBlbnN1cmluZyBmbGV4aWJpbGl0eSBpbiBVSSBjdXN0b21pemF0aW9uXHJcbiAgaWYgKHBhcnNlZE1ldGFbMF0/LnRhYmxlQ29uZmlnKSB7XHJcbiAgICBjb25zdCBjb25maWcgPSBwYXJzZWRNZXRhWzBdLnRhYmxlQ29uZmlnO1xyXG4gICAgdGhpcy5zaG93QWRkUm93ID0gY29uZmlnLnNob3dBZGRSb3cgIT09IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93UGFnaW5hdGlvbiA9IGNvbmZpZy5zaG93UGFnaW5hdGlvbiAhPT0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dBY3Rpb25zID0gY29uZmlnLnNob3dBY3Rpb25zICE9PSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd1NlYXJjaCA9IGNvbmZpZy5zaG93U2VhcmNoICE9PSBmYWxzZTtcclxuICAgIHRoaXMuaXRlbXNQZXJQYWdlID0gY29uZmlnLml0ZW1zUGVyUGFnZSB8fCA1O1xyXG4gICAgXHJcbiAgICAvLyBSZW1vdmUgdGhlIGNvbmZpZyBvYmplY3QgZnJvbSBoZWFkZXJzXHJcbiAgICB0aGlzLnRhYmxlSGVhZGVyID0gcGFyc2VkTWV0YS5zbGljZSgxKTtcclxuICB9IGVsc2Uge1xyXG4gICAgLy8gSWYgbm8gY29uZmlnIG9iamVjdCBmb3VuZCwgdXNlIGFsbCBvYmplY3RzIGFzIGhlYWRlcnNcclxuICAgIHRoaXMudGFibGVIZWFkZXIgPSBwYXJzZWRNZXRhO1xyXG4gIH1cclxuXHJcbiAgICAvLyB0aGlzLnRhYmxlSGVhZGVyID0gSlNPTi5wYXJzZSh0aGlzLnF1ZXN0aW9uWydmaWVsZHNNZXRhJ10pO1xyXG4gICAgdGhpcy50YWJsZVNpemUgPSAxMC90aGlzLnRhYmxlSGVhZGVyLmxlbmd0aDtcclxuLy8gMTJKVU4yNCAtIGRlZmF1bHQgdGFibGUgdmFsdWVcclxuICAgIGlmKHRoaXMucXVlc3Rpb24/LmlucHV0KXtcclxuICAgICAgICB0aGlzLnRhYmxlRGF0YSA9IHRoaXMucXVlc3Rpb24/LmlucHV0O1xyXG4gICAgICAgIHRoaXMuZmlsdGVyZWREYXRhID0gWy4uLnRoaXMudGFibGVEYXRhXTtcclxuICAgICAgdGhpcy51cGRhdGVQYWdpbmF0aW9uKCk7XHJcbiAgICB9XHJcbiAgICBpZih0aGlzLmFwaU1ldGEgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLm9wdGlvbnMgPSBbXTtcclxuICAgICAgbGV0IGFwaU9iajogQVBJTWV0YSA9IEpTT04ucGFyc2UodGhpcy5hcGlNZXRhKTtcclxuICAgICAgdGhpcy5sYWJlbEZpZWxkID0gYXBpT2JqLmZpZWxkO1xyXG4gICAgICBpZihhcGlPYmouZW5kcG9pbnQpe1xyXG4gICAgICAgIHRoaXMuZGF0YVNlcnZpY2UuYXBpUmVzcG9uc2UoYXBpT2JqLmVuZHBvaW50KT8uc3Vic2NyaWJlKChhcGlSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgbGV0IHJlc3BvbnNlcztcclxuICAgICAgICAgIGlmKGFwaU9iai52YXJpYWJsZSl7XHJcbiAgICAgICAgICAgICAvLyBWRCAyMk1heTI0IC0gaGFuZGxpbmcgbXVsdGlwbGUgY2hpbGQgb2JqZWN0c1xyXG4gICAgICAgICAgICByZXNwb25zZXMgPSAgdGhpcy5kYXRhU2VydmljZS5nZXRWYWx1ZShhcGlSZXNwb25zZSxhcGlPYmoudmFyaWFibGUpO1xyXG4gICAgICAgICAgICBsZXQgcmVzdWx0cyA9IFtdO1xyXG4gICAgICAgICAgICAvLyBIQSAxOUpBTjI0IFRvIGF2b2lkIHVuZGVmaW5lZCBlcnJvciBpbiBjb25zb2xlXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzcG9uc2VzPy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgIHZhciByZXNwID0gcmVzcG9uc2VzW2ldO1xyXG4gICAgICAgICAgICAgIHJlc3VsdHMucHVzaChyZXNwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSByZXN1bHRzO1xyXG4gICAgICAgICAgfWVsc2V7ICAvLyBWRCAxOUpBTjI0IC0gaWYgcmVzcG9uc2UgaGFzIHZhbHVlKHdoaWNoIGlzIGFycmF5KSBvbmx5XHJcbiAgICAgICAgICAgIHJlc3BvbnNlcyA9IGFwaVJlc3BvbnNlO1xyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSByZXNwb25zZXM7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLm9wdGlvbnMubWFwKChvYmo6IGFueSkgPT4gKHsgLi4ub2JqLCBlZGl0OiBmYWxzZSB9KSk7XHJcbiAgICAgICAgICAvLyBSZWZlcmVuY2UgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvQG5nLXNlbGVjdC9uZy1zZWxlY3RcclxuICAgICAgICAgdGhpcy50YWJsZURhdGEgPSB0aGlzLm9wdGlvbnM7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ3RhYmxlRGF0YScsIHRoaXMudGFibGVEYXRhKTtcclxuICAgICAgICAgIFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgXHJcbiAgICAgIC8vIFZEIE5PVjIzIC0gaGFuZGxlIHRoZSBkZXBlbmRlbnQgdXBkYXRlIGZvciBkcm9wZG93blxyXG4gICAgICBsZXQgc291cmNlSWQgPSBhcGlPYmouc291cmNlUXVlc3Rpb25JZDtcclxuICAgICAgbGV0IGZpZWxkID0gYXBpT2JqLmZpZWxkOyAgICAgICAgLy8gVkQgMTNNQVkyNCAtIGR5bmFtaWMgZmllbGQgY2hhbmdlc1xyXG4gICAgICBpZihzb3VyY2VJZCl7XHJcbiAgICAgICAgLy8gLy8gVkQgMTBNYXkyNCBTdWJzY3JpYmUgZm9yIHRoZSBjaGFuZ2VzXHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmNoYW5nZVNlcnZpY2UuY2hhbmdlQW5ub3VuY2VkJC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAoY2hhbmdlVmFsdWUpID0+IHtcclxuICAgICAgICAgICAgaWYoY2hhbmdlVmFsdWUgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgaWYoY2hhbmdlVmFsdWUudmFsdWVPYmogIT0gdW5kZWZpbmVkICYmIGNoYW5nZVZhbHVlLmZyb21RdWVzdGlvbklkID09IGFwaU9iai5zb3VyY2VRdWVzdGlvbklkKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnY2hhbmdlcyBoYXBwZW4nKTtcclxuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucyA9IHRoaXMub3B0aW9ucy5tYXAoKG9iajogYW55KSA9PiAoeyAuLi5vYmosIGVkaXQ6IGZhbHNlIH0pKTtcclxuICAgICAgICAgICAgICAgIGxldCBpdGVtID0gY2hhbmdlVmFsdWUudmFsdWVPYmo7XHJcbiAgICAgICAgICAgICAgICBsZXQgdmFsaWRJdGVtID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAvLyBWRCAxM01BWTI0IC0gYmluZCBkeW5hbWljIGZpZWxkXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLnRhYmxlRGF0YS5sZW5ndGggPiAwKXtcclxuICAgICAgICAgICAgICAgICAgdGhpcy50YWJsZURhdGEuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgICAgICAgIC8vIFZEIDI2SnVuMjQgLSB0byBoYW5kbGUgbXVsdGlwbGUgb2JqZWN0c1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9iakVsZW1lbnRWYWx1ZSA9IHRoaXMuZGF0YVNlcnZpY2UuZ2V0VmFsdWUoZWxlbWVudCxmaWVsZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2JqSXRlbVZhbHVlID0gdGhpcy5kYXRhU2VydmljZS5nZXRWYWx1ZShpdGVtLGZpZWxkKVxyXG4gICAgICAgICAgICAgICAgICAgIGlmKG9iakVsZW1lbnRWYWx1ZSA9PSBvYmpJdGVtVmFsdWUpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgIHZhbGlkSXRlbSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZih2YWxpZEl0ZW0pe1xyXG4gICAgICAgICAgICAgICAgICBpZih0aGlzLnRhYmxlRGF0YS5sZW5ndGggPiAwKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYmxlRGF0YSA9IFsuLi50aGlzLnRhYmxlRGF0YSxpdGVtXTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXRUYWJsZURhdGFWYWx1ZSh0aGlzLnRhYmxlRGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgIH1lbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYmxlRGF0YS5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdFRhYmxlRGF0YVZhbHVlKHRoaXMudGFibGVEYXRhKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLmNoYW5nZVNlcnZpY2UuY29uZmlybUNoYW5nZShhcGlPYmouc291cmNlUXVlc3Rpb25JZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLnVwZGF0ZVBhZ2luYXRpb24oKTtcclxuICAgIC8vUlMgMDNGRUIyMDI1XHJcbiAgICAvL0hhbmRsZXMgZXJyb3JzIGR1cmluZyBtZXRhZGF0YSBwYXJzaW5nIGJ5IHNldHRpbmcgZGVmYXVsdCB2YWx1ZXMgdG8gZW5zdXJlIHRoZSB0YWJsZSBmdW5jdGlvbnMgcHJvcGVybHlcclxuICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgY29uc29sZS5lcnJvcignRXJyb3IgcGFyc2luZyBmaWVsZHNNZXRhOicsIGVycm9yKTtcclxuICAgIHRoaXMuc2hvd0FkZFJvdyA9IHRydWU7XHJcbiAgICB0aGlzLnNob3dQYWdpbmF0aW9uID0gdHJ1ZTtcclxuICAgIHRoaXMuc2hvd0FjdGlvbnMgPSB0cnVlO1xyXG4gICAgdGhpcy5zaG93U2VhcmNoID0gdHJ1ZTtcclxuICAgIHRoaXMuaXRlbXNQZXJQYWdlID0gNTtcclxuICB9XHJcbiAgLy9SUyAwM0ZFQjIwMjVcclxuICAvLyBJbml0aWFsaXplIHNhdmVkIGRhdGFcclxuICBpZiAodGhpcy5xdWVzdGlvbj8uaW5wdXQpIHtcclxuICAgIHRoaXMuc2F2ZWREYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnF1ZXN0aW9uLmlucHV0KSk7XHJcbiAgfVxyXG4gICAgY29uc29sZS5sb2coJ3RhYmxlRGF0YScsIHRoaXMudGFibGVEYXRhKTtcclxuICAgIGNvbnNvbGUubG9nKCd0YWJsZUhlYWRlcicsIHRoaXMudGFibGVIZWFkZXIpO1xyXG4gICAgY29uc29sZS5sb2coJ3RhYmxlSW5mbycsIHRoaXMudGFibGVJbmZvKTtcclxuICB9XHJcbiAgLy9SUyAwM0ZFQjIwMjVcclxuICAvLyDihpIgRmlsdGVycyB0YWJsZSBkYXRhIGJhc2VkIG9uIHVzZXIgaW5wdXQgYW5kIHVwZGF0ZXMgcGFnaW5hdGlvbiBhY2NvcmRpbmdseS5cclxuICBzZWFyY2goKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuc2VhcmNoVGVybS50cmltKCkpIHtcclxuICAgICAgdGhpcy5maWx0ZXJlZERhdGEgPSBbLi4udGhpcy50YWJsZURhdGFdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3Qgc2VhcmNoVGVybUxvd2VyID0gdGhpcy5zZWFyY2hUZXJtLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWREYXRhID0gdGhpcy50YWJsZURhdGEuZmlsdGVyKGl0ZW0gPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRhYmxlSGVhZGVyLnNvbWUoaGVhZGVyID0+IHtcclxuICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5kYXRhU2VydmljZS5nZXRWYWx1ZShpdGVtLCBoZWFkZXIuYXBpTmFtZSk7XHJcbiAgICAgICAgICByZXR1cm4gdmFsdWUgJiYgdmFsdWUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFRlcm1Mb3dlcik7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XHJcbiAgICB0aGlzLnVwZGF0ZVBhZ2luYXRpb24oKTtcclxuICB9XHJcbi8vUlMgMDNGRUIyMDI1XHJcbi8vIENhbGN1bGF0ZXMgdG90YWwgcGFnZXMsIHVwZGF0ZXMgdGhlIHBhZ2UgbGlzdCwgYW5kIGVuc3VyZXMgdGhlIGN1cnJlbnQgcGFnZSBpcyB3aXRoaW4gdmFsaWQgYm91bmRzLlxyXG4gIHVwZGF0ZVBhZ2luYXRpb24oKTogdm9pZCB7XHJcbiAgICB0aGlzLnRvdGFsSXRlbXMgPSB0aGlzLmZpbHRlcmVkRGF0YS5sZW5ndGg7XHJcbiAgICBjb25zdCB0b3RhbFBhZ2VzID0gTWF0aC5jZWlsKHRoaXMudG90YWxJdGVtcyAvIHRoaXMuaXRlbXNQZXJQYWdlKTtcclxuICAgIHRoaXMucGFnZXMgPSBBcnJheS5mcm9tKHtsZW5ndGg6IHRvdGFsUGFnZXN9LCAoXywgaSkgPT4gaSArIDEpO1xyXG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPiB0b3RhbFBhZ2VzKSB7XHJcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0b3RhbFBhZ2VzIHx8IDE7XHJcbiAgfVxyXG4gIH1cclxuLy9SUyAwM0ZFQjIwMjVcclxuLy9SZXR1cm5zIGEgcGFnaW5hdGVkIHN1YnNldCBvZiBmaWx0ZXJlZERhdGEgYmFzZWQgb24gdGhlIGN1cnJlbnQgcGFnZSBhbmQgaXRlbXMgcGVyIHBhZ2VcclxuICBnZXQgcGFnaW5hdGVkRGF0YSgpOiBhbnlbXSB7XHJcbiAgICBjb25zdCBzdGFydEluZGV4ID0gKHRoaXMuY3VycmVudFBhZ2UgLSAxKSAqIHRoaXMuaXRlbXNQZXJQYWdlO1xyXG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyZWREYXRhLnNsaWNlKHN0YXJ0SW5kZXgsIHN0YXJ0SW5kZXggKyB0aGlzLml0ZW1zUGVyUGFnZSk7XHJcbiAgfVxyXG4vL1JTIDAzRkVCMjAyNVxyXG4vL1VwZGF0ZXMgY3VycmVudFBhZ2Ugd2hlbiB0aGUgdXNlciBzZWxlY3RzIGEgZGlmZmVyZW50IHBhZ2VcclxuICBzZXRQYWdlKHBhZ2U6IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKHBhZ2UgPj0gMSAmJiBwYWdlIDw9IHRoaXMucGFnZXMubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSBwYWdlO1xyXG4gICAgfVxyXG4gIH1cclxuLy9SUyAwM0ZFQjIwMjVcclxuLy9SZXNldHMgdGFibGUgZGF0YSwgZmlsdGVycywgcGFnaW5hdGlvbiwgVUkgc2V0dGluZ3MsIGFuZCB1bnN1YnNjcmliZXMgZnJvbSBhbnkgc3Vic2NyaXB0aW9ucy5cclxuICBwcml2YXRlIHJlc2V0Q29tcG9uZW50U3RhdGUoKTogdm9pZCB7XHJcbiAgICB0aGlzLnRhYmxlRGF0YSA9IFtdO1xyXG4gICAgdGhpcy5maWx0ZXJlZERhdGEgPSBbXTtcclxuICAgIHRoaXMudGFibGVIZWFkZXIgPSBbXTtcclxuICAgIHRoaXMub3B0aW9ucyA9IFtdO1xyXG4gICAgdGhpcy5zZWFyY2hUZXJtID0gJyc7XHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcclxuICAgIHRoaXMuc2hvd0FkZFJvdyA9IHRydWU7XHJcbiAgICB0aGlzLnNob3dQYWdpbmF0aW9uID0gdHJ1ZTtcclxuICAgIHRoaXMuc2hvd0FjdGlvbnMgPSB0cnVlO1xyXG4gICAgdGhpcy5zaG93U2VhcmNoID0gdHJ1ZTtcclxuICAgIHRoaXMuaXRlbXNQZXJQYWdlID0gNTtcclxuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkUm93KCk6IHZvaWQge1xyXG4gICAgbGV0IG5ld0l0ZW0gPSB7fTtcclxuICAgICAgdGhpcy50YWJsZUhlYWRlci5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGlmKGl0ZW0uYXBpTmFtZSl7XHJcbiAgICAgICAgICBuZXdJdGVtW2l0ZW0uYXBpTmFtZV09IFwiXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIC8vIGNvbnN0IHVwZGF0ZWRUYWJsZURhdGEgPSBbLi4udGhpcy50YWJsZURhdGEsIG5ld0l0ZW1dO1xyXG4gICAgLy8gdGhpcy50YWJsZURhdGEgPSB1cGRhdGVkVGFibGVEYXRhO1xyXG4gICAgLy8gdGhpcy5lbWl0VGFibGVEYXRhVmFsdWUodXBkYXRlZFRhYmxlRGF0YSk7XHJcbiAgICB0aGlzLnRhYmxlRGF0YS5wdXNoKG5ld0l0ZW0pO1xyXG4gICAgdGhpcy5maWx0ZXJlZERhdGEgPSBbLi4udGhpcy50YWJsZURhdGFdO1xyXG4gICAgdGhpcy51cGRhdGVQYWdpbmF0aW9uKCk7XHJcbiAgICB0aGlzLmhhc1Vuc2F2ZWRDaGFuZ2VzID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLmVtaXRUYWJsZURhdGFWYWx1ZSh0aGlzLnRhYmxlRGF0YSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVSYWRpbyhpdGVtOiBhbnksIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGl0ZW0udmFsdWUgPSB2YWx1ZTtcclxuICAgIHRoaXMuZW1pdFRhYmxlRGF0YVZhbHVlKHRoaXMudGFibGVEYXRhKTtcclxuICB9XHJcbiAgLy8gVkQgMjNBdWcyNCBoYW5kbGUgIFR5cGVcclxuICAvLyB1cGRhdGVMYWJlbChyb3dJbmRleDogbnVtYmVyLCBsYWJlbDogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgLy8gICB0aGlzLnRhYmxlRGF0YVtyb3dJbmRleF1bbGFiZWxdID0gdmFsdWU7XHJcbiAgLy8gICB0aGlzLmVtaXRUYWJsZURhdGFWYWx1ZSh0aGlzLnRhYmxlRGF0YSk7XHJcbiAgLy8gfVxyXG4gIC8vIE1vZGlmaWVkIHVwZGF0ZSBtZXRob2RzIHRvIHRyYWNrIGNoYW5nZXNcclxuICB1cGRhdGVMYWJlbChyb3dJbmRleDogbnVtYmVyLCBsYWJlbDogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnRhYmxlRGF0YVtyb3dJbmRleF1bbGFiZWxdID0gdmFsdWU7XHJcbiAgICB0aGlzLmhhc1Vuc2F2ZWRDaGFuZ2VzID0gdHJ1ZTtcclxuICAgIHRoaXMuZW1pdFRhYmxlRGF0YVZhbHVlKHRoaXMudGFibGVEYXRhKTtcclxuICB9XHJcbiAgLy9SUyAwM0ZFQjIwMjVcclxuICBkZWxldGVSb3cocm93SW5kZXg6IG51bWJlcil7XHJcbiAgICAvLyB0aGlzLnRhYmxlRGF0YS5zcGxpY2Uocm93SW5kZXgsIDEpO1xyXG4gICAgY29uc3QgYWN0dWFsSW5kZXggPSAodGhpcy5jdXJyZW50UGFnZSAtIDEpICogdGhpcy5pdGVtc1BlclBhZ2UgKyByb3dJbmRleDtcclxuICAgIHRoaXMudGFibGVEYXRhLnNwbGljZShhY3R1YWxJbmRleCwgMSk7XHJcbiAgICB0aGlzLmZpbHRlcmVkRGF0YSA9IFsuLi50aGlzLnRhYmxlRGF0YV07XHJcbiAgICB0aGlzLnVwZGF0ZVBhZ2luYXRpb24oKTtcclxuICAgIHRoaXMuaGFzVW5zYXZlZENoYW5nZXMgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMuZW1pdFRhYmxlRGF0YVZhbHVlKHRoaXMudGFibGVEYXRhKTtcclxuICB9XHJcbiAgLy9SUyAwM0ZFQjIwMjVcclxuICAvLyBTYXZlcyB0aGUgY3VycmVudCB0YWJsZSBkYXRhIHN0YXRlLCByZXNldHMgdGhlIGhhc1Vuc2F2ZWRDaGFuZ2VzIGZsYWcsIGFuZCBlbWl0cyB0aGUgdXBkYXRlZCBkYXRhLlxyXG4gIHNhdmVUYWJsZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2F2ZWREYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnRhYmxlRGF0YSkpO1xyXG4gICAgdGhpcy5oYXNVbnNhdmVkQ2hhbmdlcyA9IGZhbHNlO1xyXG4gICAgdGhpcy5zYXZlVGFibGVEYXRhLmVtaXQodGhpcy50YWJsZURhdGEpO1xyXG4gIH1cclxuICAvL1JTIDAzRkVCMjAyNVxyXG4gIC8vICBSZXN0b3JlcyB0aGUgbGFzdCBzYXZlZCBzdGF0ZSBvZiB0aGUgdGFibGUgYW5kIHJlc2V0cyB0aGUgcGFnaW5hdGlvbiBhbmQgVUkgc3RhdGVcclxuICByZXZlcnRDaGFuZ2VzKCk6IHZvaWQge1xyXG4gICAgdGhpcy50YWJsZURhdGEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuc2F2ZWREYXRhKSk7XHJcbiAgICB0aGlzLmZpbHRlcmVkRGF0YSA9IFsuLi50aGlzLnRhYmxlRGF0YV07XHJcbiAgICB0aGlzLmhhc1Vuc2F2ZWRDaGFuZ2VzID0gZmFsc2U7XHJcbiAgICB0aGlzLnVwZGF0ZVBhZ2luYXRpb24oKTtcclxuICAgIHRoaXMuZW1pdFRhYmxlRGF0YVZhbHVlKHRoaXMudGFibGVEYXRhKTtcclxuICB9XHJcbiAgZWRpdFJvdyhyb3dJbmRleDogbnVtYmVyKXtcclxuICAgIHZhciBhID0gMDtcclxuICAgIHRoaXMudGFibGVEYXRhLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgIGlmKGEgPT09IHJvd0luZGV4KXtcclxuICAgICAgICBlbGVtZW50LmVkaXQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGErKztcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlTnVtYmVyKGl0ZW06IGFueSwgbGFiZWw6IHN0cmluZywgdmFsdWU6IHN0cmluZyl7XHJcbiAgICBpdGVtLnZhbHVlW2xhYmVsXSA9IHZhbHVlO1xyXG4gICAgdGhpcy5lbWl0VGFibGVEYXRhVmFsdWUodGhpcy50YWJsZURhdGEpO1xyXG4gIH1cclxuXHJcblxyXG4gIGVtaXRUYWJsZURhdGFWYWx1ZSh1cGRhdGVkVGFibGVEYXRhOiBhbnlbXSk6IHZvaWQge1xyXG4gICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHVwZGF0ZWRUYWJsZURhdGEpO1xyXG4gIH1cclxuLy9SUyAwM0ZFQjIwMjVcclxuLy8gQ2xlYW5zIHVwIHJlc291cmNlcyBhbmQgcmVzZXRzIHRoZSBjb21wb25lbnQgc3RhdGUgd2hlbiB0aGUgY29tcG9uZW50IGlzIGRlc3Ryb3llZCB0byBwcmV2ZW50IG1lbW9yeSBsZWFrc1xyXG5uZ09uRGVzdHJveSgpIHtcclxuICB0aGlzLnJlc2V0Q29tcG9uZW50U3RhdGUoKTtcclxuICBjb25zb2xlLmxvZygnQ29tcG9uZW50IERlc3Ryb3llZCcpO1xyXG5cclxufVxyXG59IiwiPCEtLSBSUyAwM0ZFQjIwMjUgLS0+XHJcbjwhLS0gU2VhcmNoIEJhciAtLT5cclxuPCEtLSBTZWFyY2gsIFJldmVydCAmIFNhdmUgaW4gU2FtZSBMaW5lIC0tPlxyXG48ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBtYi0zXCI+XHJcbiAgPCEtLSBTZWFyY2ggQmFyIC0tPlxyXG4gIDxkaXYgY2xhc3M9XCJzZWFyY2gtY29udGFpbmVyIG1lLWF1dG9cIj5cclxuICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cFwiPlxyXG4gICAgICA8aW5wdXQgXHJcbiAgICAgICAgdHlwZT1cInRleHRcIiBcclxuICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBzZWFyY2gtaW5wdXRcIlxyXG4gICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoVGVybVwiXHJcbiAgICAgICAgKGlucHV0KT1cInNlYXJjaCgpXCJcclxuICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaC4uLlwiXHJcbiAgICAgID5cclxuICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1pY29uXCI+XHJcbiAgICA8IS0tIFJTIDAzRkVCMjAyNSAtLT5cclxuICAgIDwhLS0gU2VhcmNoIGljb24gZm9yIHVzZXIgaW5wdXQgLS0+XHJcbiAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPlxyXG4gICAgICAgICAgPGNpcmNsZSBjeD1cIjExXCIgY3k9XCIxMVwiIHI9XCI4XCI+PC9jaXJjbGU+XHJcbiAgICAgICAgICA8bGluZSB4MT1cIjIxXCIgeTE9XCIyMVwiIHgyPVwiMTYuNjVcIiB5Mj1cIjE2LjY1XCI+PC9saW5lPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIEJ1dHRvbnMgLS0+XHJcbiAgPGRpdj5cclxuICAgIDwhLS0gUlMgMDNGRUIyMDI1IC0tPjwhLS0gQ2FuY2VsIGJ1dHRvbiAodmlzaWJsZSBvbmx5IHdoZW4gY2hhbmdlcyBhcmUgdW5zYXZlZCkgLS0+XHJcbiAgICA8YnV0dG9uIFxyXG4gICAgICBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5IG1lLTJcIiBcclxuICAgICAgKm5nSWY9XCJoYXNVbnNhdmVkQ2hhbmdlc1wiIFxyXG4gICAgICAoY2xpY2spPVwicmV2ZXJ0Q2hhbmdlcygpXCJcclxuICAgID5cclxuICAgICAgQ2FuY2VsXHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDwhLS0gU2F2ZSBidXR0b24gKGRpc2FibGVkIGlmIG5vIHVuc2F2ZWQgY2hhbmdlcykgLS0+PCEtLSBSUyAwM0ZFQjIwMjUgLS0+XHJcbiAgICA8YnV0dG9uIFxyXG4gICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIFxyXG4gICAgICBbZGlzYWJsZWRdPVwiIWhhc1Vuc2F2ZWRDaGFuZ2VzXCJcclxuICAgICAgKGNsaWNrKT1cInNhdmVUYWJsZSgpXCJcclxuICAgID5cclxuICAgICAgU2F2ZSBUYWJsZVxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG48IS0tIFRhYmxlIENvbnRhaW5lciAtLT5cclxuPGRpdiBjbGFzcz1cInRhYmxlLWNvbnRhaW5lclwiPlxyXG4gIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLXN0cmlwZWQgdGFibGUtYm9yZGVyZWRcIj5cclxuICAgIDx0aGVhZD5cclxuICAgICAgICA8IS0tIEhBIDI4REVDMjMgY2hhbmdlZCB0YWJsZSBoZWFkZXIgdmFsdWVzIGFuZCBjaGFuZ2VkIHRhYmxlIHNpemUgbG9naWMgdG8gZXZlbmx5IHZpc2libGUgLS0+XHJcbiAgICA8IS0tIDx0aD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgKGNoYW5nZSk9XCJzZWxlY3RBbGwoJGV2ZW50LnRhcmdldC5jaGVja2VkKVwiPjwvdGg+IC0tPlxyXG4gICAgICA8dHI+XHJcbiAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBoZWFkZXIgb2YgdGFibGVIZWFkZXJcIiBbc3R5bGUud2lkdGhdPVwiaGVhZGVyLndpZHRoIHx8ICdhdXRvJ1wiPlxyXG4gICAgICAgICAge3sgaGVhZGVyLmxhYmVsIH19XHJcbiAgICAgICAgPC90aD5cclxuICAgICAgICA8IS0tIEFjdGlvbnMgY29sdW1uIChvbmx5IGlmIHNob3dBY3Rpb25zIGlzIHRydWUpIC0tPjwhLS0gUlMgMDNGRUIyMDI1IC0tPlxyXG4gICAgICAgIDx0aCAqbmdJZj1cInNob3dBY3Rpb25zXCIgc3R5bGU9XCJ3aWR0aDogMTQwcHhcIiBjbGFzcz1cImFjdGlvbnMtY29sdW1uc1wiPkFjdGlvbnM8L3RoPlxyXG4gICAgICA8L3RyPlxyXG4gICAgPC90aGVhZD5cclxuICAgIDx0Ym9keT5cclxuICAgICAgPHRyICpuZ0Zvcj1cImxldCBpdGVtIG9mIHBhZ2luYXRlZERhdGE7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICA8dGQgKm5nRm9yPVwibGV0IGhlYWRlciBvZiB0YWJsZUhlYWRlclwiPlxyXG4gICAgICAgICAgPCEtLSBJbWFnZSB3aXRoIHRleHQgaW5wdXQgLS0+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGVhZGVyLmZsZFR5cGUgPT09ICdpbWFnZXRleHQnXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgPGltZyBbc3JjXT1cIml0ZW0uaW1hZ2VTcmNcIiBbYWx0XT1cIml0ZW0uYWx0VGV4dFwiIHN0eWxlPVwid2lkdGg6IDM1cHg7IGhlaWdodDogMzJweDsgbWFyZ2luLXJpZ2h0OiA1cHg7XCI+XHJcbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgXHJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIml0ZW1baGVhZGVyLmZpZWxkTmFtZV1cIiBcclxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInVwZGF0ZUxhYmVsKGksIGhlYWRlci5maWVsZE5hbWUsIGl0ZW1baGVhZGVyLmZpZWxkTmFtZV0pXCIgXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNoZS1saW5lLWlucHV0IHRhYmxlLWlucHV0XCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgPCEtLSBJbWFnZSBvbmx5IC0tPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhlYWRlci5mbGRUeXBlID09PSAnaW1hZ2UnXCI+XHJcbiAgICAgICAgICAgIDxpbWcgW3NyY109XCJpdGVtW2hlYWRlci5maWVsZE5hbWVdXCIgW2FsdF09XCJpdGVtLmFsdFRleHRcIiBzdHlsZT1cIndpZHRoOiAzNXB4OyBoZWlnaHQ6IDMycHg7XCI+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8IS0tVkQgMjNBdWcyNCBoYW5kbGUgcmVhZE9ubHkgIC0tPlxyXG4gICAgICAgICAgPCEtLSBUZXh0IGlucHV0IC0tPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhlYWRlci5mbGRUeXBlID09PSAnVGV4dCdcIj5cclxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgXHJcbiAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImhlYWRlci5yZWFkT25seVwiIFxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhaXRlbS5lZGl0XCIgXHJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydlZGl0SW5wdXQnOiBpdGVtLmVkaXQgJiYgIWhlYWRlci5yZWFkT25seX1cIlxyXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cIicnIHwgZ2V0VmFsdWU6IGl0ZW0gOiBoZWFkZXIuYXBpTmFtZVwiIFxyXG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInVwZGF0ZUxhYmVsKGksIGhlYWRlci5hcGlOYW1lLCRldmVudClcIiBcclxuICAgICAgICAgICAgICBjbGFzcz1cInNoZS1saW5lLWlucHV0IHRhYmxlLWlucHV0XCI+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8IS0tVkQgMjNBdWcyNCBoYW5kbGUgTnVtYmVyIFR5cGUgLS0+XHJcbiAgICAgICAgPCEtLSBOdW1iZXIgaW5wdXQgLS0+XHJcbiAgICAgICAgPCEtLSBWRCAyNkp1bjI0IC0gcGlwZSBjaGFuZ2UgdG8gaGFuZGxlIG11bHRpcGxlIG9iamVjdHMtLT5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoZWFkZXIuZmxkVHlwZSA9PT0gJ051bWJlcidcIj5cclxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBcclxuICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiaGVhZGVyLnJlYWRPbmx5XCIgXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFpdGVtLmVkaXRcIiBcclxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2VkaXRJbnB1dCc6IGl0ZW0uZWRpdCAmJiAhaGVhZGVyLnJlYWRPbmx5fVwiXHJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwiJycgfCBnZXRWYWx1ZTogaXRlbSA6IGhlYWRlci5hcGlOYW1lXCIgXHJcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlTGFiZWwoaSwgaGVhZGVyLmFwaU5hbWUsJGV2ZW50KVwiIFxyXG4gICAgICAgICAgICAgIGNsYXNzPVwic2hlLWxpbmUtaW5wdXQgdGFibGUtaW5wdXRcIj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDwhLS0gUmFkaW8gaW5wdXQgLS0+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGVhZGVyLmZsZFR5cGUgPT09ICdyYWRpbydcIj5cclxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIFxyXG4gICAgICAgICAgICAgIFtuYW1lXT1cIml0ZW0ubmFtZVwiIFxyXG4gICAgICAgICAgICAgIFtjaGVja2VkXT1cIml0ZW0udmFsdWUgPT0gaGVhZGVyLmZpZWxkTmFtZVwiICBcclxuICAgICAgICAgICAgICAoY2xpY2spPVwidXBkYXRlUmFkaW8oaXRlbSwgaGVhZGVyLmZpZWxkTmFtZSlcIj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPCEtLSBBY3Rpb25zIGNvbHVtbiAtLT48IS0tIFJTIDAzRkVCMjAyNSAtLT5cclxuICAgICAgICA8dGQgKm5nSWY9XCJzaG93QWN0aW9uc1wiIGNsYXNzPVwiYWN0aW9ucy1jb2x1bW5cIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWFyb3VuZFwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1saW5rIHAtMFwiIChjbGljayk9XCJlZGl0Um93KGkpXCI+XHJcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtZWRpdCB0ZXh0LXByaW1hcnlcIj48L2k+XHJcbiAgICAgICAgICAgICAgRWRpdFxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tbGluayBwLTBcIiAoY2xpY2spPVwiZGVsZXRlUm93KGkpXCI+XHJcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdHJhc2ggdGV4dC1kYW5nZXJcIj48L2k+XHJcbiAgICAgICAgICAgICAgRGVsZXRlXHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgPC90cj5cclxuICAgIDwvdGJvZHk+XHJcbiAgPC90YWJsZT5cclxuPC9kaXY+XHJcblxyXG48IS0tIFBhZ2luYXRpb24gLS0+PCEtLSBSUyAwM0ZFQjIwMjUgLS0+XHJcbjxkaXYgKm5nSWY9XCJzaG93UGFnaW5hdGlvblwiIGNsYXNzPVwicGFnaW5hdGlvbi1jb250YWluZXJcIj5cclxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmQgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaXRlbXMtcGVyLXBhZ2VcIj5cclxuICAgICAgPHNwYW4+SXRlbXMgcGVyIHBhZ2U6PC9zcGFuPlxyXG4gICAgICA8c2VsZWN0IFsobmdNb2RlbCldPVwiaXRlbXNQZXJQYWdlXCIgKGNoYW5nZSk9XCJ1cGRhdGVQYWdpbmF0aW9uKClcIiBjbGFzcz1cImZvcm0tc2VsZWN0IGZvcm0tc2VsZWN0LXNtXCI+XHJcbiAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjVcIj41PC9vcHRpb24+XHJcbiAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjEwXCI+MTA8L29wdGlvbj5cclxuICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMjBcIj4yMDwvb3B0aW9uPlxyXG4gICAgICAgIDxvcHRpb24gdmFsdWU9XCI1MFwiPjUwPC9vcHRpb24+XHJcbiAgICAgIDwvc2VsZWN0PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwicGFnZS1pbmZvIG1zLTMgbWUtM1wiPlxyXG4gICAgICB7eygoY3VycmVudFBhZ2UgLSAxKSAqIGl0ZW1zUGVyUGFnZSArIDEpfX0gLSB7e01hdGgubWluKGN1cnJlbnRQYWdlICogaXRlbXNQZXJQYWdlLCB0b3RhbEl0ZW1zKX19IG9mIHt7dG90YWxJdGVtc319XHJcbiAgICA8L2Rpdj5cclxuICAgIDxuYXYgYXJpYS1sYWJlbD1cIlRhYmxlIHBhZ2luYXRpb25cIj5cclxuICAgICAgPCEtLSBGaXJzdCBwYWdlIC0tPjwhLS0gUlMgMDNGRUIyMDI1IC0tPlxyXG4gICAgICA8dWwgY2xhc3M9XCJwYWdpbmF0aW9uIG1iLTBcIj5cclxuICAgICAgICA8bGkgY2xhc3M9XCJwYWdlLWl0ZW1cIiBbY2xhc3MuZGlzYWJsZWRdPVwiY3VycmVudFBhZ2UgPT09IDFcIj5cclxuICAgICAgICAgIDxhIGNsYXNzPVwicGFnZS1saW5rXCIgKGNsaWNrKT1cInNldFBhZ2UoMSlcIj7CqzwvYT5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaSBjbGFzcz1cInBhZ2UtaXRlbVwiIFtjbGFzcy5kaXNhYmxlZF09XCJjdXJyZW50UGFnZSA9PT0gMVwiPlxyXG4gICAgICAgICAgPGEgY2xhc3M9XCJwYWdlLWxpbmtcIiAoY2xpY2spPVwic2V0UGFnZShjdXJyZW50UGFnZSAtIDEpXCI+4oC5PC9hPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPCEtLSBEeW5hbWljIHBhZ2luYXRpb24gLS0+PCEtLSBSUyAwM0ZFQjIwMjUgLS0+XHJcbiAgICAgICAgPGxpIGNsYXNzPVwicGFnZS1pdGVtXCIgKm5nRm9yPVwibGV0IHBhZ2Ugb2YgcGFnZXNcIiBbY2xhc3MuYWN0aXZlXT1cInBhZ2UgPT09IGN1cnJlbnRQYWdlXCI+XHJcbiAgICAgICAgICA8YSBjbGFzcz1cInBhZ2UtbGlua1wiIChjbGljayk9XCJzZXRQYWdlKHBhZ2UpXCI+e3twYWdlfX08L2E+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGkgY2xhc3M9XCJwYWdlLWl0ZW1cIiBbY2xhc3MuZGlzYWJsZWRdPVwiY3VycmVudFBhZ2UgPT09IHBhZ2VzLmxlbmd0aFwiPlxyXG4gICAgICAgICAgPGEgY2xhc3M9XCJwYWdlLWxpbmtcIiAoY2xpY2spPVwic2V0UGFnZShjdXJyZW50UGFnZSArIDEpXCI+4oC6PC9hPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPCEtLSBMYXN0IHBhZ2UgLS0+XHJcbiAgICAgICAgPGxpIGNsYXNzPVwicGFnZS1pdGVtXCIgW2NsYXNzLmRpc2FibGVkXT1cImN1cnJlbnRQYWdlID09PSBwYWdlcy5sZW5ndGhcIj5cclxuICAgICAgICAgIDxhIGNsYXNzPVwicGFnZS1saW5rXCIgKGNsaWNrKT1cInNldFBhZ2UocGFnZXMubGVuZ3RoKVwiPsK7PC9hPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgIDwvdWw+XHJcbiAgICA8L25hdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbjwhLS0gUlMgMDNGRUIyMDI1IC0tPlxyXG48IS0tIEFkZCBSb3cgQnV0dG9uIC0tPlxyXG48ZGl2ICpuZ0lmPVwic2hvd0FkZFJvd1wiICAoY2xpY2spPVwiYWRkUm93KClcIiBjbGFzcz1cImFkZFJvd0NsYXNzXCI+XHJcbiAgPGRpdiBjbGFzcz1cImNpcmNsZS1idXR0b25cIj4rPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
334
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9jb21wb25lbnRzL2N1c3RvbS10YWJsZS9jdXN0b20tdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL2NvbXBvbmVudHMvY3VzdG9tLXRhYmxlL2N1c3RvbS10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7O0FBbUIxRixNQUFNLE9BQU8sb0JBQW9CO0lBb0NYO0lBQW9DO0lBQWtDO0lBQXNDO0lBbkN2SCxRQUFRLENBQVU7SUFDakIsV0FBVyxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO0lBQ3pELGFBQWEsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztJQUNyRSxTQUFTLENBQWU7SUFDeEIsV0FBVyxHQUFHLEVBQUUsQ0FBQztJQUNqQixTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ2YsWUFBWSxHQUFHLEVBQUUsQ0FBQyxDQUFDLGlDQUFpQztJQUN0RCxjQUFjO0lBQ2Qsb0pBQW9KO0lBQ3BKLFVBQVUsR0FBWSxJQUFJLENBQUM7SUFDM0IsY0FBYyxHQUFZLElBQUksQ0FBQztJQUMvQixXQUFXLEdBQVksSUFBSSxDQUFDO0lBQzVCLFVBQVUsR0FBWSxJQUFJLENBQUM7SUFDM0IsWUFBWSxHQUFXLENBQUMsQ0FBQztJQUN2QixhQUFhLENBQVM7SUFDdEIsU0FBUyxDQUFTLENBQUMsb0NBQW9DO0lBQ3ZELE9BQU8sQ0FBTTtJQUNiLFdBQVcsQ0FBTTtJQUNqQixTQUFTLENBQVM7SUFDbEIsTUFBTSxDQUFTO0lBQ2YsU0FBUyxHQUFZLEtBQUssQ0FBQztJ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QUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBQ0QsT0FBTyxDQUFDLFFBQWdCO1FBQ3RCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNWLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQy9CLElBQUcsQ0FBQyxLQUFLLFFBQVEsRUFBQyxDQUFDO2dCQUNqQixPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztZQUN0QixDQUFDO1lBQ0QsQ0FBQyxFQUFFLENBQUM7UUFDTixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxZQUFZLENBQUMsSUFBUyxFQUFFLEtBQWEsRUFBRSxLQUFhO1FBQ2xELElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUdELGtCQUFrQixDQUFDLGdCQUF1QjtRQUN4QyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFDSCxjQUFjO0lBQ2QsNkdBQTZHO0lBQzdHLFdBQVc7UUFDVCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUMzQixPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFFckMsQ0FBQzt3R0F2VFksb0JBQW9COzRGQUFwQixvQkFBb0IsdUxDbkJqQyxpeVFBc0xBOzs0RkRuS2Esb0JBQW9CO2tCQU5oQyxTQUFTOytCQUNFLGtCQUFrQjtzS0FNbkIsUUFBUTtzQkFBaEIsS0FBSztnQkFDSSxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBbUJFLE9BQU87c0JBQWYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG4vLyBIQSAxOURFQzIzIGltcG9ydGVkIHRyYW5zbGF0aW9uIHNlcnZpY2VcclxuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuLi8uLi9pMThuLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUYWJsZVdyYXBwZXIgfSBmcm9tICcuLi8uLi9tb2RlbC90YWJsZVdyYXBwZXInO1xyXG5pbXBvcnQgeyBTYWxlc2ZvcmNlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NhbGVzZm9yY2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSAnLi4vLi4vd3JhcHBlcic7XHJcbmltcG9ydCB7IERhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGF0YS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQVBJTWV0YSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvYXBpbWV0YSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDaGFuZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2hhbmdlLnNlcnZpY2UnO1xyXG5cclxuZGVjbGFyZSB2YXIgJDogYW55O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtY3VzdG9tLXRhYmxlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY3VzdG9tLXRhYmxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jdXN0b20tdGFibGUuY29tcG9uZW50LmNzcyddXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgQ3VzdG9tVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgQElucHV0KCkgcXVlc3Rpb246IFF1ZXN0aW9uXHJcbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBzYXZlVGFibGVEYXRhOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIHRhYmxlSW5mbzogVGFibGVXcmFwcGVyO1xyXG4gIHRhYmxlSGVhZGVyID0gW107XHJcbiAgdGFibGVEYXRhID0gW107XHJcbiAgZmlsdGVyZWREYXRhID0gW107IC8vIE5ldyBwcm9wZXJ0eSBmb3IgZmlsdGVyZWQgZGF0YVxyXG4vL1JTIDAzRkVCMjAyNVxyXG4vLyBEZWZhdWx0IFVJIGNvbmZpZ3VyYXRpb25zIHRvIGNvbnRyb2wgcm93IGFkZGl0aW9uLCBwYWdpbmF0aW9uLCBhY3Rpb25zIGNvbHVtbiB2aXNpYmlsaXR5LCBzZWFyY2ggZnVuY3Rpb25hbGl0eSwgYW5kIHRoZSBudW1iZXIgb2YgaXRlbXMgcGVyIHBhZ2UuXHJcbnNob3dBZGRSb3c6IGJvb2xlYW4gPSB0cnVlO1xyXG5zaG93UGFnaW5hdGlvbjogYm9vbGVhbiA9IHRydWU7XHJcbnNob3dBY3Rpb25zOiBib29sZWFuID0gdHJ1ZTtcclxuc2hvd1NlYXJjaDogYm9vbGVhbiA9IHRydWU7XHJcbml0ZW1zUGVyUGFnZTogbnVtYmVyID0gNTtcclxuICBhZGRSb3dDb2xTcGFuOiBudW1iZXI7XHJcbiAgdGFibGVTaXplOiBudW1iZXI7IC8vIEhBIDI4REVDMjMgdGFibGUgc2l6ZSBkZWNsYXJhdGlvblxyXG4gIG9iak5hbWU6IGFueTtcclxuICBmaWx0ZXJMb2dpYzogYW55O1xyXG4gIGZpZWxkTWV0YTogc3RyaW5nO1xyXG4gIGZpclN0cjogc3RyaW5nO1xyXG4gIHNlYXJjaEJveDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGFwaU1ldGE6IHN0cmluZztcclxuICBwdWJsaWMgb3B0aW9uczogc3RyaW5nW107XHJcbiAgaXNEaXNhYmxlZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIHB1YmxpYyBsYWJlbEZpZWxkOiBzdHJpbmc7XHJcblxyXG4gIC8vUlMgMDNGRUIyMDI1XHJcbiAgLy8gTmV3IHByb3BlcnRpZXMgZm9yIHNlYXJjaCBhbmQgcGFnaW5hdGlvblxyXG4gIHNlYXJjaFRlcm06IHN0cmluZyA9ICcnO1xyXG4gIGN1cnJlbnRQYWdlOiBudW1iZXIgPSAxO1xyXG4gIHRvdGFsSXRlbXM6IG51bWJlciA9IDA7XHJcbiAgcGFnZXM6IG51bWJlcltdID0gW107XHJcbiAgTWF0aCA9IE1hdGg7XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjaGFuZ2VTZXJ2aWNlOiBDaGFuZ2VTZXJ2aWNlLHB1YmxpYyBpMThuU2VydmljZTogSTE4blNlcnZpY2UsIHByaXZhdGUgc2ZTZXJ2aWNlOiBTYWxlc2ZvcmNlU2VydmljZSwgcHJpdmF0ZSBkYXRhU2VydmljZTogRGF0YVNlcnZpY2UpIHsgfVxyXG4gIC8vIFJTIDA5REVDMjQgQ2hhbmdlZCBrZXlzXHJcbiAgLy8gQWRkIG5ldyBwcm9wZXJ0aWVzIGZvciBzYXZlIGZ1bmN0aW9uYWxpdHlcclxuICBoYXNVbnNhdmVkQ2hhbmdlczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNhdmVkRGF0YTogYW55W10gPSBbXTtcclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgICAvLyB0aGlzLnRhYmxlRGF0YSA9IFtdO1xyXG4vLyBDbGVhciBhbnkgZXhpc3RpbmcgZGF0YSBmaXJzdFxyXG50aGlzLnJlc2V0Q29tcG9uZW50U3RhdGUoKTtcclxuc2V0VGltZW91dCgoKSA9PiBjb25zb2xlLmxvZygnQWZ0ZXIgcmVzZXQ6JywgdGhpcy50YWJsZURhdGEpLCAyMDAwKTtcclxudHJ5IHtcclxuICBjb25zdCBwYXJzZWRNZXRhID0gSlNPTi5wYXJzZSh0aGlzLnF1ZXN0aW9uWydmaWVsZHNNZXRhJ10pO1xyXG4gIGlmICghcGFyc2VkTWV0YSB8fCAhQXJyYXkuaXNBcnJheShwYXJzZWRNZXRhKSB8fCBwYXJzZWRNZXRhLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgY29uc29sZS53YXJuKCdObyB2YWxpZCBtZXRhZGF0YSBwcm92aWRlZCcpO1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuICAvL1JTIDAzRkVCMjAyNVxyXG4gIC8vIEV4dHJhY3RzIHRhYmxlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZHluYW1pY2FsbHkgZnJvbSBtZXRhZGF0YSBhbmQgYXBwbGllcyB0aGVtLCBlbnN1cmluZyBmbGV4aWJpbGl0eSBpbiBVSSBjdXN0b21pemF0aW9uXHJcbiAgaWYgKHBhcnNlZE1ldGFbMF0/LnRhYmxlQ29uZmlnKSB7XHJcbiAgICBjb25zdCBjb25maWcgPSBwYXJzZWRNZXRhWzBdLnRhYmxlQ29uZmlnO1xyXG4gICAgdGhpcy5zaG93QWRkUm93ID0gY29uZmlnLnNob3dBZGRSb3cgIT09IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93UGFnaW5hdGlvbiA9IGNvbmZpZy5zaG93UGFnaW5hdGlvbiAhPT0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dBY3Rpb25zID0gY29uZmlnLnNob3dBY3Rpb25zICE9PSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd1NlYXJjaCA9IGNvbmZpZy5zaG93U2VhcmNoICE9PSBmYWxzZTtcclxuICAgIHRoaXMuaXRlbXNQZXJQYWdlID0gY29uZmlnLml0ZW1zUGVyUGFnZSB8fCA1O1xyXG4gICAgXHJcbiAgICAvLyBSZW1vdmUgdGhlIGNvbmZpZyBvYmplY3QgZnJvbSBoZWFkZXJzXHJcbiAgICB0aGlzLnRhYmxlSGVhZGVyID0gcGFyc2VkTWV0YS5zbGljZSgxKTtcclxuICB9IGVsc2Uge1xyXG4gICAgLy8gSWYgbm8gY29uZmlnIG9iamVjdCBmb3VuZCwgdXNlIGFsbCBvYmplY3RzIGFzIGhlYWRlcnNcclxuICAgIHRoaXMudGFibGVIZWFkZXIgPSBwYXJzZWRNZXRhO1xyXG4gIH1cclxuXHJcbiAgICAvLyB0aGlzLnRhYmxlSGVhZGVyID0gSlNPTi5wYXJzZSh0aGlzLnF1ZXN0aW9uWydmaWVsZHNNZXRhJ10pO1xyXG4gICAgdGhpcy50YWJsZVNpemUgPSAxMC90aGlzLnRhYmxlSGVhZGVyLmxlbmd0aDtcclxuLy8gMTJKVU4yNCAtIGRlZmF1bHQgdGFibGUgdmFsdWVcclxuICAgIGlmKHRoaXMucXVlc3Rpb24/LmlucHV0KXtcclxuICAgICAgICB0aGlzLnRhYmxlRGF0YSA9IHRoaXMucXVlc3Rpb24/LmlucHV0O1xyXG4gICAgICAgIHRoaXMuZmlsdGVyZWREYXRhID0gWy4uLnRoaXMudGFibGVEYXRhXTtcclxuICAgICAgdGhpcy51cGRhdGVQYWdpbmF0aW9uKCk7XHJcbiAgICB9XHJcbiAgICBpZih0aGlzLmFwaU1ldGEgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLm9wdGlvbnMgPSBbXTtcclxuICAgICAgbGV0IGFwaU9iajogQVBJTWV0YSA9IEpTT04ucGFyc2UodGhpcy5hcGlNZXRhKTtcclxuICAgICAgdGhpcy5sYWJlbEZpZWxkID0gYXBpT2JqLmZpZWxkO1xyXG4gICAgICBpZihhcGlPYmouZW5kcG9pbnQpe1xyXG4gICAgICAgIHRoaXMuZGF0YVNlcnZpY2UuYXBpUmVzcG9uc2UoYXBpT2JqLmVuZHBvaW50KT8uc3Vic2NyaWJlKChhcGlSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgbGV0IHJlc3BvbnNlcztcclxuICAgICAgICAgIGlmKGFwaU9iai52YXJpYWJsZSl7XHJcbiAgICAgICAgICAgICAvLyBWRCAyMk1heTI0IC0gaGFuZGxpbmcgbXVsdGlwbGUgY2hpbGQgb2JqZWN0c1xyXG4gICAgICAgICAgICByZXNwb25zZXMgPSAgdGhpcy5kYXRhU2VydmljZS5nZXRWYWx1ZShhcGlSZXNwb25zZSxhcGlPYmoudmFyaWFibGUpO1xyXG4gICAgICAgICAgICBsZXQgcmVzdWx0cyA9IFtdO1xyXG4gICAgICAgICAgICAvLyBIQSAxOUpBTjI0IFRvIGF2b2lkIHVuZGVmaW5lZCBlcnJvciBpbiBjb25zb2xlXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzcG9uc2VzPy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgIHZhciByZXNwID0gcmVzcG9uc2VzW2ldO1xyXG4gICAgICAgICAgICAgIHJlc3VsdHMucHVzaChyZXNwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSByZXN1bHRzO1xyXG4gICAgICAgICAgfWVsc2V7ICAvLyBWRCAxOUpBTjI0IC0gaWYgcmVzcG9uc2UgaGFzIHZhbHVlKHdoaWNoIGlzIGFycmF5KSBvbmx5XHJcbiAgICAgICAgICAgIHJlc3BvbnNlcyA9IGFwaVJlc3BvbnNlO1xyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSByZXNwb25zZXM7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLm9wdGlvbnMubWFwKChvYmo6IGFueSkgPT4gKHsgLi4ub2JqLCBlZGl0OiBmYWxzZSB9KSk7XHJcbiAgICAgICAgICAvLyBSZWZlcmVuY2UgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvQG5nLXNlbGVjdC9uZy1zZWxlY3RcclxuICAgICAgICAgdGhpcy50YWJsZURhdGEgPSB0aGlzLm9wdGlvbnM7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ3RhYmxlRGF0YScsIHRoaXMudGFibGVEYXRhKTtcclxuICAgICAgICAgIFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgXHJcbiAgICAgIC8vIFZEIE5PVjIzIC0gaGFuZGxlIHRoZSBkZXBlbmRlbnQgdXBkYXRlIGZvciBkcm9wZG93blxyXG4gICAgICBsZXQgc291cmNlSWQgPSBhcGlPYmouc291cmNlUXVlc3Rpb25JZDtcclxuICAgICAgbGV0IGZpZWxkID0gYXBpT2JqLmZpZWxkOyAgICAgICAgLy8gVkQgMTNNQVkyNCAtIGR5bmFtaWMgZmllbGQgY2hhbmdlc1xyXG4gICAgICBpZihzb3VyY2VJZCl7XHJcbiAgICAgICAgLy8gLy8gVkQgMTBNYXkyNCBTdWJzY3JpYmUgZm9yIHRoZSBjaGFuZ2VzXHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmNoYW5nZVNlcnZpY2UuY2hhbmdlQW5ub3VuY2VkJC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAoY2hhbmdlVmFsdWUpID0+IHtcclxuICAgICAgICAgICAgaWYoY2hhbmdlVmFsdWUgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgaWYoY2hhbmdlVmFsdWUudmFsdWVPYmogIT0gdW5kZWZpbmVkICYmIGNoYW5nZVZhbHVlLmZyb21RdWVzdGlvbklkID09IGFwaU9iai5zb3VyY2VRdWVzdGlvbklkKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnY2hhbmdlcyBoYXBwZW4nKTtcclxuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucyA9IHRoaXMub3B0aW9ucy5tYXAoKG9iajogYW55KSA9PiAoeyAuLi5vYmosIGVkaXQ6IGZhbHNlIH0pKTtcclxuICAgICAgICAgICAgICAgIGxldCBpdGVtID0gY2hhbmdlVmFsdWUudmFsdWVPYmo7XHJcbiAgICAgICAgICAgICAgICBsZXQgdmFsaWRJdGVtID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAvLyBWRCAxM01BWTI0IC0gYmluZCBkeW5hbWljIGZpZWxkXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLnRhYmxlRGF0YS5sZW5ndGggPiAwKXtcclxuICAgICAgICAgICAgICAgICAgdGhpcy50YWJsZURhdGEuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgICAgICAgIC8vIFZEIDI2SnVuMjQgLSB0byBoYW5kbGUgbXVsdGlwbGUgb2JqZWN0c1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9iakVsZW1lbnRWYWx1ZSA9IHRoaXMuZGF0YVNlcnZpY2UuZ2V0VmFsdWUoZWxlbWVudCxmaWVsZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2JqSXRlbVZhbHVlID0gdGhpcy5kYXRhU2VydmljZS5nZXRWYWx1ZShpdGVtLGZpZWxkKVxyXG4gICAgICAgICAgICAgICAgICAgIGlmKG9iakVsZW1lbnRWYWx1ZSA9PSBvYmpJdGVtVmFsdWUpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgIHZhbGlkSXRlbSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZih2YWxpZEl0ZW0pe1xyXG4gICAgICAgICAgICAgICAgICBpZih0aGlzLnRhYmxlRGF0YS5sZW5ndGggPiAwKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYmxlRGF0YSA9IFsuLi50aGlzLnRhYmxlRGF0YSxpdGVtXTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXRUYWJsZURhdGFWYWx1ZSh0aGlzLnRhYmxlRGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgIH1lbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYmxlRGF0YS5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdFRhYmxlRGF0YVZhbHVlKHRoaXMudGFibGVEYXRhKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLmNoYW5nZVNlcnZpY2UuY29uZmlybUNoYW5nZShhcGlPYmouc291cmNlUXVlc3Rpb25JZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLnVwZGF0ZVBhZ2luYXRpb24oKTtcclxuICAgIC8vUlMgMDNGRUIyMDI1XHJcbiAgICAvL0hhbmRsZXMgZXJyb3JzIGR1cmluZyBtZXRhZGF0YSBwYXJzaW5nIGJ5IHNldHRpbmcgZGVmYXVsdCB2YWx1ZXMgdG8gZW5zdXJlIHRoZSB0YWJsZSBmdW5jdGlvbnMgcHJvcGVybHlcclxuICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgY29uc29sZS5lcnJvcignRXJyb3IgcGFyc2luZyBmaWVsZHNNZXRhOicsIGVycm9yKTtcclxuICAgIHRoaXMuc2hvd0FkZFJvdyA9IHRydWU7XHJcbiAgICB0aGlzLnNob3dQYWdpbmF0aW9uID0gdHJ1ZTtcclxuICAgIHRoaXMuc2hvd0FjdGlvbnMgPSB0cnVlO1xyXG4gICAgdGhpcy5zaG93U2VhcmNoID0gdHJ1ZTtcclxuICAgIHRoaXMuaXRlbXNQZXJQYWdlID0gNTtcclxuICB9XHJcbiAgLy9SUyAwM0ZFQjIwMjVcclxuICAvLyBJbml0aWFsaXplIHNhdmVkIGRhdGFcclxuICBpZiAodGhpcy5xdWVzdGlvbj8uaW5wdXQpIHtcclxuICAgIHRoaXMuc2F2ZWREYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnF1ZXN0aW9uLmlucHV0KSk7XHJcbiAgfVxyXG4gICAgY29uc29sZS5sb2coJ3RhYmxlRGF0YScsIHRoaXMudGFibGVEYXRhKTtcclxuICAgIGNvbnNvbGUubG9nKCd0YWJsZUhlYWRlcicsIHRoaXMudGFibGVIZWFkZXIpO1xyXG4gICAgY29uc29sZS5sb2coJ3RhYmxlSW5mbycsIHRoaXMudGFibGVJbmZvKTtcclxuICB9XHJcbiAgLy9SUyAwM0ZFQjIwMjVcclxuICAvLyDihpIgRmlsdGVycyB0YWJsZSBkYXRhIGJhc2VkIG9uIHVzZXIgaW5wdXQgYW5kIHVwZGF0ZXMgcGFnaW5hdGlvbiBhY2NvcmRpbmdseS5cclxuICBzZWFyY2goKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuc2VhcmNoVGVybS50cmltKCkpIHtcclxuICAgICAgdGhpcy5maWx0ZXJlZERhdGEgPSBbLi4udGhpcy50YWJsZURhdGFdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3Qgc2VhcmNoVGVybUxvd2VyID0gdGhpcy5zZWFyY2hUZXJtLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWREYXRhID0gdGhpcy50YWJsZURhdGEuZmlsdGVyKGl0ZW0gPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRhYmxlSGVhZGVyLnNvbWUoaGVhZGVyID0+IHtcclxuICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5kYXRhU2VydmljZS5nZXRWYWx1ZShpdGVtLCBoZWFkZXIuYXBpTmFtZSk7XHJcbiAgICAgICAgICByZXR1cm4gdmFsdWUgJiYgdmFsdWUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFRlcm1Mb3dlcik7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XHJcbiAgICB0aGlzLnVwZGF0ZVBhZ2luYXRpb24oKTtcclxuICB9XHJcbi8vUlMgMDNGRUIyMDI1XHJcbi8vIENhbGN1bGF0ZXMgdG90YWwgcGFnZXMsIHVwZGF0ZXMgdGhlIHBhZ2UgbGlzdCwgYW5kIGVuc3VyZXMgdGhlIGN1cnJlbnQgcGFnZSBpcyB3aXRoaW4gdmFsaWQgYm91bmRzLlxyXG4gIHVwZGF0ZVBhZ2luYXRpb24oKTogdm9pZCB7XHJcbiAgICB0aGlzLnRvdGFsSXRlbXMgPSB0aGlzLmZpbHRlcmVkRGF0YS5sZW5ndGg7XHJcbiAgICBjb25zdCB0b3RhbFBhZ2VzID0gTWF0aC5jZWlsKHRoaXMudG90YWxJdGVtcyAvIHRoaXMuaXRlbXNQZXJQYWdlKTtcclxuICAgIHRoaXMucGFnZXMgPSBBcnJheS5mcm9tKHtsZW5ndGg6IHRvdGFsUGFnZXN9LCAoXywgaSkgPT4gaSArIDEpO1xyXG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPiB0b3RhbFBhZ2VzKSB7XHJcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0b3RhbFBhZ2VzIHx8IDE7XHJcbiAgfVxyXG4gIH1cclxuLy9SUyAwM0ZFQjIwMjVcclxuLy9SZXR1cm5zIGEgcGFnaW5hdGVkIHN1YnNldCBvZiBmaWx0ZXJlZERhdGEgYmFzZWQgb24gdGhlIGN1cnJlbnQgcGFnZSBhbmQgaXRlbXMgcGVyIHBhZ2VcclxuICBnZXQgcGFnaW5hdGVkRGF0YSgpOiBhbnlbXSB7XHJcbiAgICBjb25zdCBzdGFydEluZGV4ID0gKHRoaXMuY3VycmVudFBhZ2UgLSAxKSAqIHRoaXMuaXRlbXNQZXJQYWdlO1xyXG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyZWREYXRhLnNsaWNlKHN0YXJ0SW5kZXgsIHN0YXJ0SW5kZXggKyB0aGlzLml0ZW1zUGVyUGFnZSk7XHJcbiAgfVxyXG4vL1JTIDAzRkVCMjAyNVxyXG4vL1VwZGF0ZXMgY3VycmVudFBhZ2Ugd2hlbiB0aGUgdXNlciBzZWxlY3RzIGEgZGlmZmVyZW50IHBhZ2VcclxuICBzZXRQYWdlKHBhZ2U6IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKHBhZ2UgPj0gMSAmJiBwYWdlIDw9IHRoaXMucGFnZXMubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSBwYWdlO1xyXG4gICAgfVxyXG4gIH1cclxuLy9SUyAwM0ZFQjIwMjVcclxuLy9SZXNldHMgdGFibGUgZGF0YSwgZmlsdGVycywgcGFnaW5hdGlvbiwgVUkgc2V0dGluZ3MsIGFuZCB1bnN1YnNjcmliZXMgZnJvbSBhbnkgc3Vic2NyaXB0aW9ucy5cclxuICBwcml2YXRlIHJlc2V0Q29tcG9uZW50U3RhdGUoKTogdm9pZCB7XHJcbiAgICB0aGlzLnRhYmxlRGF0YSA9IFtdO1xyXG4gICAgdGhpcy5maWx0ZXJlZERhdGEgPSBbXTtcclxuICAgIHRoaXMudGFibGVIZWFkZXIgPSBbXTtcclxuICAgIHRoaXMub3B0aW9ucyA9IFtdO1xyXG4gICAgdGhpcy5zZWFyY2hUZXJtID0gJyc7XHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcclxuICAgIHRoaXMuc2hvd0FkZFJvdyA9IHRydWU7XHJcbiAgICB0aGlzLnNob3dQYWdpbmF0aW9uID0gdHJ1ZTtcclxuICAgIHRoaXMuc2hvd0FjdGlvbnMgPSB0cnVlO1xyXG4gICAgdGhpcy5zaG93U2VhcmNoID0gdHJ1ZTtcclxuICAgIHRoaXMuaXRlbXNQZXJQYWdlID0gNTtcclxuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkUm93KCk6IHZvaWQge1xyXG4gICAgbGV0IG5ld0l0ZW0gPSB7fTtcclxuICAgICAgdGhpcy50YWJsZUhlYWRlci5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGlmKGl0ZW0uYXBpTmFtZSl7XHJcbiAgICAgICAgICBuZXdJdGVtW2l0ZW0uYXBpTmFtZV09IFwiXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIC8vIGNvbnN0IHVwZGF0ZWRUYWJsZURhdGEgPSBbLi4udGhpcy50YWJsZURhdGEsIG5ld0l0ZW1dO1xyXG4gICAgLy8gdGhpcy50YWJsZURhdGEgPSB1cGRhdGVkVGFibGVEYXRhO1xyXG4gICAgLy8gdGhpcy5lbWl0VGFibGVEYXRhVmFsdWUodXBkYXRlZFRhYmxlRGF0YSk7XHJcbiAgICB0aGlzLnRhYmxlRGF0YS5wdXNoKG5ld0l0ZW0pO1xyXG4gICAgdGhpcy5maWx0ZXJlZERhdGEgPSBbLi4udGhpcy50YWJsZURhdGFdO1xyXG4gICAgdGhpcy51cGRhdGVQYWdpbmF0aW9uKCk7XHJcbiAgICB0aGlzLmhhc1Vuc2F2ZWRDaGFuZ2VzID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLmVtaXRUYWJsZURhdGFWYWx1ZSh0aGlzLnRhYmxlRGF0YSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVSYWRpbyhpdGVtOiBhbnksIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGl0ZW0udmFsdWUgPSB2YWx1ZTtcclxuICAgIHRoaXMuZW1pdFRhYmxlRGF0YVZhbHVlKHRoaXMudGFibGVEYXRhKTtcclxuICB9XHJcbiAgLy8gVkQgMjNBdWcyNCBoYW5kbGUgIFR5cGVcclxuICAvLyB1cGRhdGVMYWJlbChyb3dJbmRleDogbnVtYmVyLCBsYWJlbDogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgLy8gICB0aGlzLnRhYmxlRGF0YVtyb3dJbmRleF1bbGFiZWxdID0gdmFsdWU7XHJcbiAgLy8gICB0aGlzLmVtaXRUYWJsZURhdGFWYWx1ZSh0aGlzLnRhYmxlRGF0YSk7XHJcbiAgLy8gfVxyXG4gIC8vIE1vZGlmaWVkIHVwZGF0ZSBtZXRob2RzIHRvIHRyYWNrIGNoYW5nZXNcclxuICB1cGRhdGVMYWJlbChyb3dJbmRleDogbnVtYmVyLCBsYWJlbDogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnRhYmxlRGF0YVtyb3dJbmRleF1bbGFiZWxdID0gdmFsdWU7XHJcbiAgICB0aGlzLmhhc1Vuc2F2ZWRDaGFuZ2VzID0gdHJ1ZTtcclxuICAgIHRoaXMuZW1pdFRhYmxlRGF0YVZhbHVlKHRoaXMudGFibGVEYXRhKTtcclxuICB9XHJcbiAgLy9SUyAwM0ZFQjIwMjVcclxuICBkZWxldGVSb3cocm93SW5kZXg6IG51bWJlcil7XHJcbiAgICAvLyB0aGlzLnRhYmxlRGF0YS5zcGxpY2Uocm93SW5kZXgsIDEpO1xyXG4gICAgY29uc3QgYWN0dWFsSW5kZXggPSAodGhpcy5jdXJyZW50UGFnZSAtIDEpICogdGhpcy5pdGVtc1BlclBhZ2UgKyByb3dJbmRleDtcclxuICAgIHRoaXMudGFibGVEYXRhLnNwbGljZShhY3R1YWxJbmRleCwgMSk7XHJcbiAgICB0aGlzLmZpbHRlcmVkRGF0YSA9IFsuLi50aGlzLnRhYmxlRGF0YV07XHJcbiAgICB0aGlzLnVwZGF0ZVBhZ2luYXRpb24oKTtcclxuICAgIHRoaXMuaGFzVW5zYXZlZENoYW5nZXMgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMuZW1pdFRhYmxlRGF0YVZhbHVlKHRoaXMudGFibGVEYXRhKTtcclxuICB9XHJcbiAgLy9SUyAwM0ZFQjIwMjVcclxuICAvLyBTYXZlcyB0aGUgY3VycmVudCB0YWJsZSBkYXRhIHN0YXRlLCByZXNldHMgdGhlIGhhc1Vuc2F2ZWRDaGFuZ2VzIGZsYWcsIGFuZCBlbWl0cyB0aGUgdXBkYXRlZCBkYXRhLlxyXG4gIHNhdmVUYWJsZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2F2ZWREYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnRhYmxlRGF0YSkpO1xyXG4gICAgdGhpcy5oYXNVbnNhdmVkQ2hhbmdlcyA9IGZhbHNlO1xyXG4gICAgdGhpcy5zYXZlVGFibGVEYXRhLmVtaXQodGhpcy50YWJsZURhdGEpO1xyXG4gIH1cclxuICAvL1JTIDAzRkVCMjAyNVxyXG4gIC8vICBSZXN0b3JlcyB0aGUgbGFzdCBzYXZlZCBzdGF0ZSBvZiB0aGUgdGFibGUgYW5kIHJlc2V0cyB0aGUgcGFnaW5hdGlvbiBhbmQgVUkgc3RhdGVcclxuICByZXZlcnRDaGFuZ2VzKCk6IHZvaWQge1xyXG4gICAgdGhpcy50YWJsZURhdGEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuc2F2ZWREYXRhKSk7XHJcbiAgICB0aGlzLmZpbHRlcmVkRGF0YSA9IFsuLi50aGlzLnRhYmxlRGF0YV07XHJcbiAgICB0aGlzLmhhc1Vuc2F2ZWRDaGFuZ2VzID0gZmFsc2U7XHJcbiAgICB0aGlzLnVwZGF0ZVBhZ2luYXRpb24oKTtcclxuICAgIHRoaXMuZW1pdFRhYmxlRGF0YVZhbHVlKHRoaXMudGFibGVEYXRhKTtcclxuICB9XHJcbiAgZWRpdFJvdyhyb3dJbmRleDogbnVtYmVyKXtcclxuICAgIHZhciBhID0gMDtcclxuICAgIHRoaXMudGFibGVEYXRhLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgIGlmKGEgPT09IHJvd0luZGV4KXtcclxuICAgICAgICBlbGVtZW50LmVkaXQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGErKztcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlTnVtYmVyKGl0ZW06IGFueSwgbGFiZWw6IHN0cmluZywgdmFsdWU6IHN0cmluZyl7XHJcbiAgICBpdGVtLnZhbHVlW2xhYmVsXSA9IHZhbHVlO1xyXG4gICAgdGhpcy5lbWl0VGFibGVEYXRhVmFsdWUodGhpcy50YWJsZURhdGEpO1xyXG4gIH1cclxuXHJcblxyXG4gIGVtaXRUYWJsZURhdGFWYWx1ZSh1cGRhdGVkVGFibGVEYXRhOiBhbnlbXSk6IHZvaWQge1xyXG4gICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHVwZGF0ZWRUYWJsZURhdGEpO1xyXG4gIH1cclxuLy9SUyAwM0ZFQjIwMjVcclxuLy8gQ2xlYW5zIHVwIHJlc291cmNlcyBhbmQgcmVzZXRzIHRoZSBjb21wb25lbnQgc3RhdGUgd2hlbiB0aGUgY29tcG9uZW50IGlzIGRlc3Ryb3llZCB0byBwcmV2ZW50IG1lbW9yeSBsZWFrc1xyXG5uZ09uRGVzdHJveSgpIHtcclxuICB0aGlzLnJlc2V0Q29tcG9uZW50U3RhdGUoKTtcclxuICBjb25zb2xlLmxvZygnQ29tcG9uZW50IERlc3Ryb3llZCcpO1xyXG5cclxufVxyXG59IiwiPCEtLSBSUyAwM0ZFQjIwMjUgLS0+XHJcbjwhLS0gU2VhcmNoIEJhciAtLT5cclxuPCEtLSBTZWFyY2gsIFJldmVydCAmIFNhdmUgaW4gU2FtZSBMaW5lIC0tPlxyXG48ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBtYi0zXCI+XHJcbiAgPCEtLSBTZWFyY2ggQmFyIC0tPlxyXG4gIDxkaXYgY2xhc3M9XCJzZWFyY2gtY29udGFpbmVyIG1lLWF1dG9cIj5cclxuICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cFwiPlxyXG4gICAgICA8aW5wdXQgXHJcbiAgICAgICAgdHlwZT1cInRleHRcIiBcclxuICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBzZWFyY2gtaW5wdXRcIlxyXG4gICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoVGVybVwiXHJcbiAgICAgICAgKGlucHV0KT1cInNlYXJjaCgpXCJcclxuICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaC4uLlwiXHJcbiAgICAgID5cclxuICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1pY29uXCI+XHJcbiAgICA8IS0tIFJTIDAzRkVCMjAyNSAtLT5cclxuICAgIDwhLS0gU2VhcmNoIGljb24gZm9yIHVzZXIgaW5wdXQgLS0+XHJcbiAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPlxyXG4gICAgICAgICAgPGNpcmNsZSBjeD1cIjExXCIgY3k9XCIxMVwiIHI9XCI4XCI+PC9jaXJjbGU+XHJcbiAgICAgICAgICA8bGluZSB4MT1cIjIxXCIgeTE9XCIyMVwiIHgyPVwiMTYuNjVcIiB5Mj1cIjE2LjY1XCI+PC9saW5lPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIEJ1dHRvbnMgLS0+XHJcbiAgPGRpdj5cclxuICAgIDwhLS0gUlMgMDNGRUIyMDI1IC0tPjwhLS0gQ2FuY2VsIGJ1dHRvbiAodmlzaWJsZSBvbmx5IHdoZW4gY2hhbmdlcyBhcmUgdW5zYXZlZCkgLS0+XHJcbiAgICA8YnV0dG9uIFxyXG4gICAgICBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5IG1lLTJcIiBcclxuICAgICAgKm5nSWY9XCJoYXNVbnNhdmVkQ2hhbmdlc1wiIFxyXG4gICAgICAoY2xpY2spPVwicmV2ZXJ0Q2hhbmdlcygpXCJcclxuICAgID5cclxuICAgICAgQ2FuY2VsXHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDwhLS0gU2F2ZSBidXR0b24gKGRpc2FibGVkIGlmIG5vIHVuc2F2ZWQgY2hhbmdlcykgLS0+PCEtLSBSUyAwM0ZFQjIwMjUgLS0+XHJcbiAgICA8YnV0dG9uIFxyXG4gICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIFxyXG4gICAgICBbZGlzYWJsZWRdPVwiIWhhc1Vuc2F2ZWRDaGFuZ2VzXCJcclxuICAgICAgKGNsaWNrKT1cInNhdmVUYWJsZSgpXCJcclxuICAgID5cclxuICAgICAgU2F2ZSBUYWJsZVxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG48IS0tIFRhYmxlIENvbnRhaW5lciAtLT5cclxuPGRpdiBjbGFzcz1cInRhYmxlLWNvbnRhaW5lclwiPlxyXG4gIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLXN0cmlwZWQgdGFibGUtYm9yZGVyZWRcIj5cclxuICAgIDx0aGVhZD5cclxuICAgICAgICA8IS0tIEhBIDI4REVDMjMgY2hhbmdlZCB0YWJsZSBoZWFkZXIgdmFsdWVzIGFuZCBjaGFuZ2VkIHRhYmxlIHNpemUgbG9naWMgdG8gZXZlbmx5IHZpc2libGUgLS0+XHJcbiAgICA8IS0tIDx0aD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgKGNoYW5nZSk9XCJzZWxlY3RBbGwoJGV2ZW50LnRhcmdldC5jaGVja2VkKVwiPjwvdGg+IC0tPlxyXG4gICAgICA8dHI+XHJcbiAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBoZWFkZXIgb2YgdGFibGVIZWFkZXJcIiBbc3R5bGUud2lkdGhdPVwiaGVhZGVyLndpZHRoIHx8ICdhdXRvJ1wiPlxyXG4gICAgICAgICAge3sgaGVhZGVyLmxhYmVsIH19XHJcbiAgICAgICAgPC90aD5cclxuICAgICAgICA8IS0tIEFjdGlvbnMgY29sdW1uIChvbmx5IGlmIHNob3dBY3Rpb25zIGlzIHRydWUpIC0tPjwhLS0gUlMgMDNGRUIyMDI1IC0tPlxyXG4gICAgICAgIDx0aCAqbmdJZj1cInNob3dBY3Rpb25zXCIgc3R5bGU9XCJ3aWR0aDogMTQwcHhcIiBjbGFzcz1cImFjdGlvbnMtY29sdW1uc1wiPkFjdGlvbnM8L3RoPlxyXG4gICAgICA8L3RyPlxyXG4gICAgPC90aGVhZD5cclxuICAgIDx0Ym9keT5cclxuICAgICAgPHRyICpuZ0Zvcj1cImxldCBpdGVtIG9mIHBhZ2luYXRlZERhdGE7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICA8dGQgKm5nRm9yPVwibGV0IGhlYWRlciBvZiB0YWJsZUhlYWRlclwiPlxyXG4gICAgICAgICAgPCEtLSBJbWFnZSB3aXRoIHRleHQgaW5wdXQgLS0+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGVhZGVyLmZsZFR5cGUgPT09ICdpbWFnZXRleHQnXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgPGltZyBbc3JjXT1cIml0ZW0uaW1hZ2VTcmNcIiBbYWx0XT1cIml0ZW0uYWx0VGV4dFwiIHN0eWxlPVwid2lkdGg6IDM1cHg7IGhlaWdodDogMzJweDsgbWFyZ2luLXJpZ2h0OiA1cHg7XCI+XHJcbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgXHJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIml0ZW1baGVhZGVyLmZpZWxkTmFtZV1cIiBcclxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInVwZGF0ZUxhYmVsKGksIGhlYWRlci5maWVsZE5hbWUsIGl0ZW1baGVhZGVyLmZpZWxkTmFtZV0pXCIgXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNoZS1saW5lLWlucHV0IHRhYmxlLWlucHV0XCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgPCEtLSBJbWFnZSBvbmx5IC0tPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhlYWRlci5mbGRUeXBlID09PSAnaW1hZ2UnXCI+XHJcbiAgICAgICAgICAgIDxpbWcgW3NyY109XCJpdGVtW2hlYWRlci5maWVsZE5hbWVdXCIgW2FsdF09XCJpdGVtLmFsdFRleHRcIiBzdHlsZT1cIndpZHRoOiAzNXB4OyBoZWlnaHQ6IDMycHg7XCI+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8IS0tVkQgMjNBdWcyNCBoYW5kbGUgcmVhZE9ubHkgIC0tPlxyXG4gICAgICAgICAgPCEtLSBUZXh0IGlucHV0IC0tPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhlYWRlci5mbGRUeXBlID09PSAnVGV4dCdcIj5cclxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgXHJcbiAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImhlYWRlci5yZWFkT25seVwiIFxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhaXRlbS5lZGl0XCIgXHJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydlZGl0SW5wdXQnOiBpdGVtLmVkaXQgJiYgIWhlYWRlci5yZWFkT25seX1cIlxyXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cIicnIHwgZ2V0VmFsdWU6IGl0ZW0gOiBoZWFkZXIuYXBpTmFtZVwiIFxyXG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInVwZGF0ZUxhYmVsKGksIGhlYWRlci5hcGlOYW1lLCRldmVudClcIiBcclxuICAgICAgICAgICAgICBjbGFzcz1cInNoZS1saW5lLWlucHV0IHRhYmxlLWlucHV0XCI+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8IS0tVkQgMjNBdWcyNCBoYW5kbGUgTnVtYmVyIFR5cGUgLS0+XHJcbiAgICAgICAgPCEtLSBOdW1iZXIgaW5wdXQgLS0+XHJcbiAgICAgICAgPCEtLSBWRCAyNkp1bjI0IC0gcGlwZSBjaGFuZ2UgdG8gaGFuZGxlIG11bHRpcGxlIG9iamVjdHMtLT5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoZWFkZXIuZmxkVHlwZSA9PT0gJ051bWJlcidcIj5cclxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBcclxuICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiaGVhZGVyLnJlYWRPbmx5XCIgXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFpdGVtLmVkaXRcIiBcclxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2VkaXRJbnB1dCc6IGl0ZW0uZWRpdCAmJiAhaGVhZGVyLnJlYWRPbmx5fVwiXHJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwiJycgfCBnZXRWYWx1ZTogaXRlbSA6IGhlYWRlci5hcGlOYW1lXCIgXHJcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlTGFiZWwoaSwgaGVhZGVyLmFwaU5hbWUsJGV2ZW50KVwiIFxyXG4gICAgICAgICAgICAgIGNsYXNzPVwic2hlLWxpbmUtaW5wdXQgdGFibGUtaW5wdXRcIj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDwhLS0gUmFkaW8gaW5wdXQgLS0+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGVhZGVyLmZsZFR5cGUgPT09ICdyYWRpbydcIj5cclxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIFxyXG4gICAgICAgICAgICAgIFtuYW1lXT1cIml0ZW0ubmFtZVwiIFxyXG4gICAgICAgICAgICAgIFtjaGVja2VkXT1cIml0ZW0udmFsdWUgPT0gaGVhZGVyLmZpZWxkTmFtZVwiICBcclxuICAgICAgICAgICAgICAoY2xpY2spPVwidXBkYXRlUmFkaW8oaXRlbSwgaGVhZGVyLmZpZWxkTmFtZSlcIj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPCEtLSBBY3Rpb25zIGNvbHVtbiAtLT48IS0tIFJTIDAzRkVCMjAyNSAtLT5cclxuICAgICAgICA8dGQgKm5nSWY9XCJzaG93QWN0aW9uc1wiIGNsYXNzPVwiYWN0aW9ucy1jb2x1bW5cIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWFyb3VuZFwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1saW5rIHAtMFwiIChjbGljayk9XCJlZGl0Um93KGkpXCI+XHJcbiAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAzQTlGNFwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTIgMjBoOVwiIC8+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE2LjUgMy41YTIuMTIxIDIuMTIxIDAgMCAxIDMgM0w3IDE5bC00IDEgMS00WlwiIC8+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwibTE1IDUgMyAzXCIgLz5cclxuICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGl0XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1saW5rIHAtMFwiIChjbGljayk9XCJkZWxldGVSb3coaSlcIj5cclxuICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjRjQ0MzM2XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0zIDZoMThcIiAvPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk04IDZWNGEyIDIgMCAwIDEgMi0yaDRhMiAyIDAgMCAxIDIgMnYyXCIgLz5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJtMTAgMTEgMSA2XCIgLz5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJtMTQgMTEtMSA2XCIgLz5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNCA2bDEgMTRhMiAyIDAgMCAwIDIgMmgxMGEyIDIgMCAwIDAgMi0ybDEtMTRcIiAvPlxyXG4gICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVsZXRlXHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgPC90cj5cclxuICAgIDwvdGJvZHk+XHJcbiAgPC90YWJsZT5cclxuPC9kaXY+XHJcblxyXG48IS0tIFBhZ2luYXRpb24gLS0+PCEtLSBSUyAwM0ZFQjIwMjUgLS0+XHJcbjxkaXYgKm5nSWY9XCJzaG93UGFnaW5hdGlvblwiIGNsYXNzPVwicGFnaW5hdGlvbi1jb250YWluZXJcIj5cclxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmQgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaXRlbXMtcGVyLXBhZ2VcIj5cclxuICAgICAgPHNwYW4+SXRlbXMgcGVyIHBhZ2U6PC9zcGFuPlxyXG4gICAgICA8c2VsZWN0IFsobmdNb2RlbCldPVwiaXRlbXNQZXJQYWdlXCIgKGNoYW5nZSk9XCJ1cGRhdGVQYWdpbmF0aW9uKClcIiBjbGFzcz1cImZvcm0tc2VsZWN0IGZvcm0tc2VsZWN0LXNtXCI+XHJcbiAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjVcIj41PC9vcHRpb24+XHJcbiAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjEwXCI+MTA8L29wdGlvbj5cclxuICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMjBcIj4yMDwvb3B0aW9uPlxyXG4gICAgICAgIDxvcHRpb24gdmFsdWU9XCI1MFwiPjUwPC9vcHRpb24+XHJcbiAgICAgIDwvc2VsZWN0PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwicGFnZS1pbmZvIG1zLTMgbWUtM1wiPlxyXG4gICAgICB7eygoY3VycmVudFBhZ2UgLSAxKSAqIGl0ZW1zUGVyUGFnZSArIDEpfX0gLSB7e01hdGgubWluKGN1cnJlbnRQYWdlICogaXRlbXNQZXJQYWdlLCB0b3RhbEl0ZW1zKX19IG9mIHt7dG90YWxJdGVtc319XHJcbiAgICA8L2Rpdj5cclxuICAgIDxuYXYgYXJpYS1sYWJlbD1cIlRhYmxlIHBhZ2luYXRpb25cIj5cclxuICAgICAgPCEtLSBGaXJzdCBwYWdlIC0tPjwhLS0gUlMgMDNGRUIyMDI1IC0tPlxyXG4gICAgICA8dWwgY2xhc3M9XCJwYWdpbmF0aW9uIG1iLTBcIj5cclxuICAgICAgICA8bGkgY2xhc3M9XCJwYWdlLWl0ZW1cIiBbY2xhc3MuZGlzYWJsZWRdPVwiY3VycmVudFBhZ2UgPT09IDFcIj5cclxuICAgICAgICAgIDxhIGNsYXNzPVwicGFnZS1saW5rXCIgKGNsaWNrKT1cInNldFBhZ2UoMSlcIj7CqzwvYT5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaSBjbGFzcz1cInBhZ2UtaXRlbVwiIFtjbGFzcy5kaXNhYmxlZF09XCJjdXJyZW50UGFnZSA9PT0gMVwiPlxyXG4gICAgICAgICAgPGEgY2xhc3M9XCJwYWdlLWxpbmtcIiAoY2xpY2spPVwic2V0UGFnZShjdXJyZW50UGFnZSAtIDEpXCI+4oC5PC9hPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPCEtLSBEeW5hbWljIHBhZ2luYXRpb24gLS0+PCEtLSBSUyAwM0ZFQjIwMjUgLS0+XHJcbiAgICAgICAgPGxpIGNsYXNzPVwicGFnZS1pdGVtXCIgKm5nRm9yPVwibGV0IHBhZ2Ugb2YgcGFnZXNcIiBbY2xhc3MuYWN0aXZlXT1cInBhZ2UgPT09IGN1cnJlbnRQYWdlXCI+XHJcbiAgICAgICAgICA8YSBjbGFzcz1cInBhZ2UtbGlua1wiIChjbGljayk9XCJzZXRQYWdlKHBhZ2UpXCI+e3twYWdlfX08L2E+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGkgY2xhc3M9XCJwYWdlLWl0ZW1cIiBbY2xhc3MuZGlzYWJsZWRdPVwiY3VycmVudFBhZ2UgPT09IHBhZ2VzLmxlbmd0aFwiPlxyXG4gICAgICAgICAgPGEgY2xhc3M9XCJwYWdlLWxpbmtcIiAoY2xpY2spPVwic2V0UGFnZShjdXJyZW50UGFnZSArIDEpXCI+4oC6PC9hPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPCEtLSBMYXN0IHBhZ2UgLS0+XHJcbiAgICAgICAgPGxpIGNsYXNzPVwicGFnZS1pdGVtXCIgW2NsYXNzLmRpc2FibGVkXT1cImN1cnJlbnRQYWdlID09PSBwYWdlcy5sZW5ndGhcIj5cclxuICAgICAgICAgIDxhIGNsYXNzPVwicGFnZS1saW5rXCIgKGNsaWNrKT1cInNldFBhZ2UocGFnZXMubGVuZ3RoKVwiPsK7PC9hPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgIDwvdWw+XHJcbiAgICA8L25hdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbjwhLS0gUlMgMDNGRUIyMDI1IC0tPlxyXG48IS0tIEFkZCBSb3cgQnV0dG9uIC0tPlxyXG48ZGl2ICpuZ0lmPVwic2hvd0FkZFJvd1wiICAoY2xpY2spPVwiYWRkUm93KClcIiBjbGFzcz1cImFkZFJvd0NsYXNzXCI+XHJcbiAgPGRpdiBjbGFzcz1cImNpcmNsZS1idXR0b25cIj4rPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
@@ -10,6 +10,7 @@ import * as i6 from "@angular/forms";
|
|
|
10
10
|
import * as i7 from "../../pipe/get-value.pipe";
|
|
11
11
|
export class SearchBoxComponent {
|
|
12
12
|
sfService;
|
|
13
|
+
cdr;
|
|
13
14
|
dataService;
|
|
14
15
|
route;
|
|
15
16
|
i18nService;
|
|
@@ -32,8 +33,9 @@ export class SearchBoxComponent {
|
|
|
32
33
|
el;
|
|
33
34
|
serv = 'api';
|
|
34
35
|
tkn = '';
|
|
35
|
-
constructor(sfService, dataService, route, el, i18nService) {
|
|
36
|
+
constructor(sfService, cdr, dataService, route, el, i18nService) {
|
|
36
37
|
this.sfService = sfService;
|
|
38
|
+
this.cdr = cdr;
|
|
37
39
|
this.dataService = dataService;
|
|
38
40
|
this.route = route;
|
|
39
41
|
this.i18nService = i18nService;
|
|
@@ -46,12 +48,9 @@ export class SearchBoxComponent {
|
|
|
46
48
|
}
|
|
47
49
|
// this.resetComponentState();
|
|
48
50
|
}
|
|
49
|
-
|
|
51
|
+
////RS 03FEB2025
|
|
50
52
|
// Resets state when filterName or apiMeta changes to reflect updated data
|
|
51
53
|
ngOnChanges(changes) {
|
|
52
|
-
if (changes['filterName'] && !changes['filterName'].isFirstChange()) {
|
|
53
|
-
this.resetComponentState();
|
|
54
|
-
}
|
|
55
54
|
if (changes['apiMeta'] && this.apiMeta) {
|
|
56
55
|
this.apiObj = JSON.parse(this.apiMeta);
|
|
57
56
|
this.SearchItem = this.apiObj?.field;
|
|
@@ -69,7 +68,6 @@ export class SearchBoxComponent {
|
|
|
69
68
|
clearList() {
|
|
70
69
|
setTimeout(() => {
|
|
71
70
|
this.finalResults = [];
|
|
72
|
-
this.filterName = '';
|
|
73
71
|
}, 1000);
|
|
74
72
|
}
|
|
75
73
|
getSourceDataLocal(event) {
|
|
@@ -117,6 +115,7 @@ export class SearchBoxComponent {
|
|
|
117
115
|
}
|
|
118
116
|
this.noResult = results.length === 0;
|
|
119
117
|
this.finalResults = results;
|
|
118
|
+
this.cdr.detectChanges(); // Force UI update
|
|
120
119
|
});
|
|
121
120
|
}
|
|
122
121
|
};
|
|
@@ -135,13 +134,13 @@ export class SearchBoxComponent {
|
|
|
135
134
|
ngOnDestroy() {
|
|
136
135
|
this.resetComponentState();
|
|
137
136
|
}
|
|
138
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SearchBoxComponent, deps: [{ token: i1.SalesforceService }, { token: i2.DataService }, { token: i3.ActivatedRoute }, { token: i0.ElementRef }, { token: i4.I18nService }], target: i0.ɵɵFactoryTarget.Component });
|
|
139
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: SearchBoxComponent, selector: "lib-search-box", inputs: { placeHolderText: "placeHolderText", question: "question", apiMeta: "apiMeta", id: "id", readOnly: "readOnly", filterName: "filterName" }, outputs: { searchValueChange: "searchValueChange" }, viewQueries: [{ propertyName: "auto", first: true, predicate: ["auto"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!-- // VD 12Jun24 - readonly change-->\r\n<div id=\"autocomplete-input\"> <!-- SKS5NOV25 search icon -->\r\n <input #auto id=\"searchbox-style\"\r\n (blur)=\"clearList()\"\r\n [(ngModel)]=\"filterName\"\r\n type=\"text\"\r\n name=\"name\"\r\n [readOnly]=\"readOnly\"\r\n [placeholder]=\"placeHolderText\"\r\n style=\"margin: 0 !important; padding-right: 30px;\"\r\n class=\"searchInput she-line-input form-control\"\r\n (focusin)=\"getSourceDataLocal($event)\"\r\n (input)=\"getSourceDataLocal($event)\">\r\n <div id=\"selectList\" style=\"position: absolute;position: absolute;background: white;z-index: 2;\">\r\n <div *ngIf=\"finalResults.length > 0 && showSuggestion\"\r\n style=\"max-height: 100vh;border: 1px solid #d2d4d6;overflow: scroll;\"\r\n class=\"suggestions-container\">\r\n <!-- HA 20DEC23 Uncommented the logic -->\r\n <!-- VD 03May- search changes -->\r\n <div *ngFor=\"let item of finalResults\" (click)='clickItem(item)' class=\"hoover\">\r\n <!-- VD 26Jun24 - id condition removed -->\r\n <div class=\"grid-x align-middle\" style=\"padding: 1rem\">\r\n <div *ngIf=\"item.thumbnail\" class=\"cell shrink\" style=\"width: 60px; margin-right: 1.6rem;\">\r\n <img [src]=\"item.thumbnail\" style=\"width: 60px;\" alt=\"\">\r\n </div>\r\n <div class=\"cell auto\" style=\"text-align: left; padding-left: 20px;\">\r\n <!--// VD 26JUN24 - pipe changes -->\r\n <!-- RS 29JAN25 -->\r\n
|
|
137
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SearchBoxComponent, deps: [{ token: i1.SalesforceService }, { token: i0.ChangeDetectorRef }, { token: i2.DataService }, { token: i3.ActivatedRoute }, { token: i0.ElementRef }, { token: i4.I18nService }], target: i0.ɵɵFactoryTarget.Component });
|
|
138
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: SearchBoxComponent, selector: "lib-search-box", inputs: { placeHolderText: "placeHolderText", question: "question", apiMeta: "apiMeta", id: "id", readOnly: "readOnly", filterName: "filterName" }, outputs: { searchValueChange: "searchValueChange" }, viewQueries: [{ propertyName: "auto", first: true, predicate: ["auto"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!-- // VD 12Jun24 - readonly change-->\r\n<div id=\"autocomplete-input\"> <!-- SKS5NOV25 search icon -->\r\n <input #auto id=\"searchbox-style\"\r\n (blur)=\"clearList()\"\r\n [(ngModel)]=\"filterName\"\r\n type=\"text\"\r\n name=\"name\"\r\n [readOnly]=\"readOnly\"\r\n [placeholder]=\"placeHolderText\"\r\n style=\"margin: 0 !important; padding-right: 30px;\"\r\n class=\"searchInput she-line-input form-control\"\r\n (focusin)=\"getSourceDataLocal($event)\"\r\n (input)=\"getSourceDataLocal($event)\">\r\n <div id=\"selectList\" style=\"position: absolute;position: absolute;background: white;z-index: 2;\">\r\n <div *ngIf=\"finalResults.length > 0 && showSuggestion\"\r\n style=\"max-height: 100vh;border: 1px solid #d2d4d6;overflow: scroll;\"\r\n class=\"suggestions-container\">\r\n <!-- HA 20DEC23 Uncommented the logic -->\r\n <!-- VD 03May- search changes -->\r\n <div *ngFor=\"let item of finalResults\" (click)='clickItem(item)' class=\"hoover\">\r\n <!-- VD 26Jun24 - id condition removed -->\r\n <div class=\"grid-x align-middle\" style=\"padding: 1rem\">\r\n <div *ngIf=\"item.thumbnail\" class=\"cell shrink\" style=\"width: 60px; margin-right: 1.6rem;\">\r\n <img [src]=\"item.thumbnail\" style=\"width: 60px;\" alt=\"\">\r\n </div>\r\n <div class=\"cell auto\" style=\"text-align: left; padding-left: 20px;\">\r\n <!--// VD 26JUN24 - pipe changes -->\r\n <!-- RS 29JAN25 -->\r\n <h4 >{{ '' | getValue: item : SearchItem }}</h4>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- HA 20DEC23 For Commented this for future purpose -->\r\n <!-- <table class=\"table table-striped table-bordered\">\r\n <thead>\r\n <tr>\r\n <th>{{ 'firstName' | i18n:i18nService.currentLanguage }}</th>\r\n <th>{{ 'lastName' | i18n:i18nService.currentLanguage }}</th>\r\n <th>{{ 'division' | i18n:i18nService.currentLanguage }}</th>\r\n <th>{{ 'numberPlate' | i18n:i18nService.currentLanguage }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let item of finalResults\" (click)='clickItem(item)'>\r\n <td>{{ item.firstName }}</td>\r\n <td>{{ item.lastName }}</td>\r\n <td>{{ item.division }}</td>\r\n <td>{{ item.numberPlate }}</td>\r\n </tr>\r\n </tbody>\r\n </table> -->\r\n </div>\r\n</div>\r\n\r\n", styles: ["#searchbox-style{background-image:url('data:image/svg+xml;utf8,<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><circle cx=\"11\" cy=\"11\" r=\"7\" stroke=\"%23434555\" stroke-opacity=\"0.65\" stroke-width=\"2\"/><path d=\"M20 20L17 17\" stroke=\"%23434555\" stroke-opacity=\"0.65\" stroke-width=\"2\" stroke-linecap=\"round\"/></svg>');background-position:right 5px center;background-repeat:no-repeat;background-size:24px;padding-right:35px}\n"], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i7.GetValuePipe, name: "getValue" }] });
|
|
140
139
|
}
|
|
141
140
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SearchBoxComponent, decorators: [{
|
|
142
141
|
type: Component,
|
|
143
|
-
args: [{ selector: 'lib-search-box', template: "<!-- // VD 12Jun24 - readonly change-->\r\n<div id=\"autocomplete-input\"> <!-- SKS5NOV25 search icon -->\r\n <input #auto id=\"searchbox-style\"\r\n (blur)=\"clearList()\"\r\n [(ngModel)]=\"filterName\"\r\n type=\"text\"\r\n name=\"name\"\r\n [readOnly]=\"readOnly\"\r\n [placeholder]=\"placeHolderText\"\r\n style=\"margin: 0 !important; padding-right: 30px;\"\r\n class=\"searchInput she-line-input form-control\"\r\n (focusin)=\"getSourceDataLocal($event)\"\r\n (input)=\"getSourceDataLocal($event)\">\r\n <div id=\"selectList\" style=\"position: absolute;position: absolute;background: white;z-index: 2;\">\r\n <div *ngIf=\"finalResults.length > 0 && showSuggestion\"\r\n style=\"max-height: 100vh;border: 1px solid #d2d4d6;overflow: scroll;\"\r\n class=\"suggestions-container\">\r\n <!-- HA 20DEC23 Uncommented the logic -->\r\n <!-- VD 03May- search changes -->\r\n <div *ngFor=\"let item of finalResults\" (click)='clickItem(item)' class=\"hoover\">\r\n <!-- VD 26Jun24 - id condition removed -->\r\n <div class=\"grid-x align-middle\" style=\"padding: 1rem\">\r\n <div *ngIf=\"item.thumbnail\" class=\"cell shrink\" style=\"width: 60px; margin-right: 1.6rem;\">\r\n <img [src]=\"item.thumbnail\" style=\"width: 60px;\" alt=\"\">\r\n </div>\r\n <div class=\"cell auto\" style=\"text-align: left; padding-left: 20px;\">\r\n <!--// VD 26JUN24 - pipe changes -->\r\n <!-- RS 29JAN25 -->\r\n
|
|
144
|
-
}], ctorParameters: () => [{ type: i1.SalesforceService }, { type: i2.DataService }, { type: i3.ActivatedRoute }, { type: i0.ElementRef }, { type: i4.I18nService }], propDecorators: { placeHolderText: [{
|
|
142
|
+
args: [{ selector: 'lib-search-box', template: "<!-- // VD 12Jun24 - readonly change-->\r\n<div id=\"autocomplete-input\"> <!-- SKS5NOV25 search icon -->\r\n <input #auto id=\"searchbox-style\"\r\n (blur)=\"clearList()\"\r\n [(ngModel)]=\"filterName\"\r\n type=\"text\"\r\n name=\"name\"\r\n [readOnly]=\"readOnly\"\r\n [placeholder]=\"placeHolderText\"\r\n style=\"margin: 0 !important; padding-right: 30px;\"\r\n class=\"searchInput she-line-input form-control\"\r\n (focusin)=\"getSourceDataLocal($event)\"\r\n (input)=\"getSourceDataLocal($event)\">\r\n <div id=\"selectList\" style=\"position: absolute;position: absolute;background: white;z-index: 2;\">\r\n <div *ngIf=\"finalResults.length > 0 && showSuggestion\"\r\n style=\"max-height: 100vh;border: 1px solid #d2d4d6;overflow: scroll;\"\r\n class=\"suggestions-container\">\r\n <!-- HA 20DEC23 Uncommented the logic -->\r\n <!-- VD 03May- search changes -->\r\n <div *ngFor=\"let item of finalResults\" (click)='clickItem(item)' class=\"hoover\">\r\n <!-- VD 26Jun24 - id condition removed -->\r\n <div class=\"grid-x align-middle\" style=\"padding: 1rem\">\r\n <div *ngIf=\"item.thumbnail\" class=\"cell shrink\" style=\"width: 60px; margin-right: 1.6rem;\">\r\n <img [src]=\"item.thumbnail\" style=\"width: 60px;\" alt=\"\">\r\n </div>\r\n <div class=\"cell auto\" style=\"text-align: left; padding-left: 20px;\">\r\n <!--// VD 26JUN24 - pipe changes -->\r\n <!-- RS 29JAN25 -->\r\n <h4 >{{ '' | getValue: item : SearchItem }}</h4>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- HA 20DEC23 For Commented this for future purpose -->\r\n <!-- <table class=\"table table-striped table-bordered\">\r\n <thead>\r\n <tr>\r\n <th>{{ 'firstName' | i18n:i18nService.currentLanguage }}</th>\r\n <th>{{ 'lastName' | i18n:i18nService.currentLanguage }}</th>\r\n <th>{{ 'division' | i18n:i18nService.currentLanguage }}</th>\r\n <th>{{ 'numberPlate' | i18n:i18nService.currentLanguage }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let item of finalResults\" (click)='clickItem(item)'>\r\n <td>{{ item.firstName }}</td>\r\n <td>{{ item.lastName }}</td>\r\n <td>{{ item.division }}</td>\r\n <td>{{ item.numberPlate }}</td>\r\n </tr>\r\n </tbody>\r\n </table> -->\r\n </div>\r\n</div>\r\n\r\n", styles: ["#searchbox-style{background-image:url('data:image/svg+xml;utf8,<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><circle cx=\"11\" cy=\"11\" r=\"7\" stroke=\"%23434555\" stroke-opacity=\"0.65\" stroke-width=\"2\"/><path d=\"M20 20L17 17\" stroke=\"%23434555\" stroke-opacity=\"0.65\" stroke-width=\"2\" stroke-linecap=\"round\"/></svg>');background-position:right 5px center;background-repeat:no-repeat;background-size:24px;padding-right:35px}\n"] }]
|
|
143
|
+
}], ctorParameters: () => [{ type: i1.SalesforceService }, { type: i0.ChangeDetectorRef }, { type: i2.DataService }, { type: i3.ActivatedRoute }, { type: i0.ElementRef }, { type: i4.I18nService }], propDecorators: { placeHolderText: [{
|
|
145
144
|
type: Input
|
|
146
145
|
}], auto: [{
|
|
147
146
|
type: ViewChild,
|
|
@@ -159,4 +158,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
159
158
|
}], filterName: [{
|
|
160
159
|
type: Input
|
|
161
160
|
}] } });
|
|
162
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvY29tcG9uZW50cy9zZWFyY2gtYm94L3NlYXJjaC1ib3guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL2NvbXBvbmVudHMvc2VhcmNoLWJveC9zZWFyY2gtYm94LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBSVQsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBR1osU0FBUyxHQUVWLE1BQU0sZUFBZSxDQUFDO0FBU3ZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7Ozs7O0FBUzFELE1BQU0sT0FBTyxrQkFBa0I7SUF3Qm5CO0lBQ0E7SUFDQTtJQUVHO0lBM0JKLGVBQWUsQ0FBUztJQUNkLElBQUksQ0FBQztJQUVmLFFBQVEsQ0FBQztJQUNULE9BQU8sQ0FBUztJQUNoQixFQUFFLENBQVM7SUFDWCxRQUFRLEdBQUcsS0FBSyxDQUFDLENBQUMsK0JBQStCO0lBQ2hELGlCQUFpQixHQUFnQyxJQUFJLFlBQVksRUFBaUIsQ0FBQztJQUM1RixNQUFNLENBQUs7SUFDWCxVQUFVLENBQU07SUFFUixVQUFVLENBQVMsQ0FBQyx5Q0FBeUM7SUFDL0QsWUFBWSxHQUFVLEVBQUUsQ0FBQztJQUN6QixhQUFhLEdBQVcsRUFBRSxDQUFDO0lBQzNCLFNBQVMsQ0FBTTtJQUNmLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDbkIsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUNqQixjQUFjLEdBQUcsSUFBSSxDQUFDO0lBQ3JCLEVBQUUsQ0FBYztJQUNoQixJQUFJLEdBQVcsS0FBSyxDQUFDO0lBQ3JCLEdBQUcsR0FBVyxFQUFFLENBQUM7SUFFekIsWUFDVSxTQUE0QixF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O3NCQUFsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgT25Jbml0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBJbmplY3QsXHJcbiAgSW5wdXQsXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxuICBFbGVtZW50UmVmLFxyXG4gIFZpZXdDaGlsZCxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IERhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGF0YS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2FsZXNmb3JjZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvc2FsZXNmb3JjZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBQYXJhbXMgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcbi8vIFZEIDIzSkFOMjQgcmVtb3ZlZCBodHRwQ2xpZW50IGltcG9ydCB1c2VkIHNlcnZpY2UgZmlsZSBmb3IgY2FsbG91dFxyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEl0ZW1zTGlzdCB9IGZyb20gXCJAbmctc2VsZWN0L25nLXNlbGVjdC9saWIvaXRlbXMtbGlzdFwiO1xyXG5pbXBvcnQgeyBDb25zb2xlU2VydmljZSB9IGZyb20gXCJAbmctc2VsZWN0L25nLXNlbGVjdC9saWIvY29uc29sZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEFQSU1ldGEgfSBmcm9tIFwiLi4vLi4vaW50ZXJmYWNlcy9hcGltZXRhXCI7XHJcbmltcG9ydCB7IENoYW5nZVdyYXBwZXIgfSBmcm9tIFwiLi4vLi4vbW9kZWwvY2hhbmdlV3JhcHBlclwiO1xyXG4vLyBIQSAxOURFQzIzIGltcG9ydGVkIHRyYW5zbGF0aW9uIHNlcnZpY2VcclxuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vaTE4bi5zZXJ2aWNlXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1zZWFyY2gtYm94JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc2VhcmNoLWJveC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc2VhcmNoLWJveC5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFNlYXJjaEJveENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQElucHV0KCkgcGxhY2VIb2xkZXJUZXh0OiBzdHJpbmc7XHJcbiAgQFZpZXdDaGlsZCgnYXV0bycpIGF1dG87XHJcblxyXG4gIEBJbnB1dCgpIHF1ZXN0aW9uO1xyXG4gIEBJbnB1dCgpIGFwaU1ldGE6IHN0cmluZztcclxuICBASW5wdXQoKSBpZDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHJlYWRPbmx5ID0gZmFsc2U7IC8vIFZEIDEySnVuMjQgLSByZWFkb25seSBjaGFuZ2VcclxuICBAT3V0cHV0KCkgc2VhcmNoVmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxDaGFuZ2VXcmFwcGVyPiA9IG5ldyBFdmVudEVtaXR0ZXI8Q2hhbmdlV3JhcHBlcj4oKTtcclxuICAgYXBpT2JqOmFueTtcclxuICAgU2VhcmNoSXRlbTogYW55O1xyXG5cclxuICBASW5wdXQoKSBmaWx0ZXJOYW1lOiBzdHJpbmc7IC8vIFZEIDIwQXVnIGRlZmF1bHQgZmlsdGVyIHZhbHVlIGFzIGlucHV0XHJcbiAgcHVibGljIGZpbmFsUmVzdWx0czogYW55W10gPSBbXTtcclxuICBwdWJsaWMgc2VhcmNoS2V5V29yZDogc3RyaW5nID0gJyc7XHJcbiAgcHVibGljIG5ld1Jlc3VsdDogYW55O1xyXG4gIHB1YmxpYyBzaG93UmVzdWx0ID0gZmFsc2U7XHJcbiAgcHVibGljIG5vUmVzdWx0ID0gZmFsc2U7XHJcbiAgcHVibGljIHNob3dTdWdnZXN0aW9uID0gdHJ1ZTtcclxuICBwcml2YXRlIGVsOiBIVE1MRWxlbWVudDtcclxuICBwcml2YXRlIHNlcnY6IHN0cmluZyA9ICdhcGknO1xyXG4gIHByaXZhdGUgdGtuOiBzdHJpbmcgPSAnJztcclxuICAgICAgICAgIFxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBzZlNlcnZpY2U6IFNhbGVzZm9yY2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkYXRhU2VydmljZTogRGF0YVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIGVsOiBFbGVtZW50UmVmLFxyXG4gICAgICAgIHB1YmxpYyBpMThuU2VydmljZTogSTE4blNlcnZpY2VcclxuICApIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuLy8gIFZEIDAzTWF5LSBzZWFyY2ggY2hhbmdlc1xyXG4gICAgaWYodGhpcy5hcGlNZXRhKXtcclxuICAgICAgbGV0IGFwaU9iajogQVBJTWV0YSA9IEpTT04ucGFyc2UodGhpcy5hcGlNZXRhKTtcclxuICAgICAgdGhpcy5TZWFyY2hJdGVtID0gYXBpT2JqLmZpZWxkO1xyXG4gICAgfVxyXG4gICAgLy8gdGhpcy5yZXNldENvbXBvbmVudFN0YXRlKCk7XHJcblxyXG4gIH1cclxuLy9SUyAwM0ZFQjIwMjVcclxuLy8gUmVzZXRzIHN0YXRlIHdoZW4gZmlsdGVyTmFtZSBvciBhcGlNZXRhIGNoYW5nZXMgdG8gcmVmbGVjdCB1cGRhdGVkIGRhdGFcclxubmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gIGlmIChjaGFuZ2VzWydmaWx0ZXJOYW1lJ10gJiYgIWNoYW5nZXNbJ2ZpbHRlck5hbWUnXS5pc0ZpcnN0Q2hhbmdlKCkpIHtcclxuXHJcbiAgICB0aGlzLnJlc2V0Q29tcG9uZW50U3RhdGUoKTtcclxuICB9XHJcbiAgaWYgKGNoYW5nZXNbJ2FwaU1ldGEnXSAmJiB0aGlzLmFwaU1ldGEpIHtcclxuICAgIHRoaXMuYXBpT2JqID0gSlNPTi5wYXJzZSh0aGlzLmFwaU1ldGEpO1xyXG4gICAgdGhpcy5TZWFyY2hJdGVtID0gdGhpcy5hcGlPYmo/LmZpZWxkO1xyXG4gIH1cclxufVxyXG4vL1JTIDAzRkVCMjAyNVxyXG4vLyBDbGVhcnMgc2VhcmNoLXJlbGF0ZWQgZGF0YSwgaW5jbHVkaW5nIHJlc3VsdHMsIHNlYXJjaCB0ZXJtLCBhbmQgc3VnZ2VzdGlvbnMuXHJcbnByaXZhdGUgcmVzZXRDb21wb25lbnRTdGF0ZSgpOiB2b2lkIHtcclxuICB0aGlzLmZpbmFsUmVzdWx0cyA9IFtdO1xyXG4gIHRoaXMuZmlsdGVyTmFtZSA9ICcnOyBcclxuICB0aGlzLnNlYXJjaEtleVdvcmQgPSAnJzsgIHRoaXMuc2hvd1N1Z2dlc3Rpb24gPSBmYWxzZTtcclxuICB0aGlzLm5vUmVzdWx0ID0gZmFsc2U7XHJcbn1cclxuICBjbGVhckxpc3QoKXtcclxuICAgIHNldFRpbWVvdXQoKCk9PiB7XHJcbiAgICAgIHRoaXMuZmluYWxSZXN1bHRzID0gW107XHJcbiAgICAgIHRoaXMuZmlsdGVyTmFtZSA9ICcnO1xyXG4gICAgfSwgMTAwMCk7XHJcbiAgfVxyXG5cclxuICBnZXRTb3VyY2VEYXRhTG9jYWwoZXZlbnQ6IGFueSkgeyAvL3RvIGdldCByZXN1bHRzIGxpc3QgZnJvbSBiYWNrZW5kIEFQSSB3aGVuZXZlciBrZXkgaXMgdXAgYWZ0ZXIgdGhlIGVudGVyaW5nIGF0bGVhc3Qgb25lIGtleVxyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGlmKGV2ZW50LnRhcmdldC52YWx1ZS5sZW5ndGggPiAyKXtcclxuICAgICAgdGhpcy5zaG93U3VnZ2VzdGlvbj10cnVlO1xyXG4gICAgICB0aGlzLmZpbmFsUmVzdWx0cz1bXTtcclxuICAgICAgdGhpcy5zZWFyY2hLZXlXb3JkID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xyXG4gICAgICB0aGlzLnNob3dSZXN1bHQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5nZXRTb3VyY2VEYXRhKGV2ZW50LnRhcmdldC52YWx1ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNob3dTdWdnZXN0aW9uPWZhbHNlO1xyXG4gICAgICB0aGlzLmZpbmFsUmVzdWx0cyA9IFtdO1xyXG4gICAgICB0aGlzLm5vUmVzdWx0ID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vIFZEIDAzTWF5LSBzZWFyY2ggY2hhbmdlc1xyXG4gIC8vIFZEIDMxTk9WMjQgbnVsbCBjaGVja1xyXG4gIC8vIFJTIDI5SkFOMjVcclxuICAvL011bHRpLXdvcmQgc2VhcmNoIGFjcm9zcyBhbGwgb2JqZWN0IHZhbHVlc1xyXG4gIHB1YmxpYyBnZXRTb3VyY2VEYXRhID0gKGtleXdvcmQ6IHN0cmluZykgPT4ge1xyXG4gICAgaWYgKHRoaXMuYXBpTWV0YSkge1xyXG4gICAgICBsZXQgYXBpT2JqOiBBUElNZXRhID0gSlNPTi5wYXJzZSh0aGlzLmFwaU1ldGEpO1xyXG4gICAgICBcclxuICAgICAgdGhpcy5kYXRhU2VydmljZS5hcGlSZXNwb25zZShhcGlPYmouZW5kcG9pbnQpLnN1YnNjcmliZSgoYXBpUmVzcG9uc2UpID0+IHtcclxuICAgICAgICBsZXQgcmVzcG9uc2U7XHJcbiAgICAgICAgaWYgKGFwaU9iai52YXJpYWJsZSkge1xyXG4gICAgICAgICAgcmVzcG9uc2UgPSB0aGlzLmRhdGFTZXJ2aWNlLmdldFZhbHVlKGFwaVJlc3BvbnNlLCBhcGlPYmoudmFyaWFibGUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXNwb25zZSA9IGFwaVJlc3BvbnNlO1xyXG4gICAgICAgIH1cclxuICBcclxuICAgICAgICBsZXQgcmVzdWx0cyA9IFtdO1xyXG4gICAgICAgIGxldCBzZWFyY2hUZXJtcyA9IGtleXdvcmQudG9Mb3dlckNhc2UoKS5zcGxpdChcIiBcIik7IC8vIFNwbGl0IGlucHV0IGludG8gd29yZHNcclxuICBcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc3BvbnNlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBsZXQgb2JqID0gcmVzcG9uc2VbaV07XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIC8vIENvbnZlcnQgYWxsIG9iamVjdCB2YWx1ZXMgdG8gYSBzaW5nbGUgc3RyaW5nIGZvciBmbGV4aWJsZSBzZWFyY2hcclxuICAgICAgICAgIGxldCBjb21iaW5lZFZhbHVlcyA9IE9iamVjdC52YWx1ZXMob2JqKS5qb2luKFwiIFwiKS50b0xvd2VyQ2FzZSgpO1xyXG4gIFxyXG4gICAgICAgICAgLy8gQ2hlY2sgaWYgYWxsIHNlYXJjaCB0ZXJtcyBleGlzdCBpbiBhbnkgb3JkZXJcclxuICAgICAgICAgIGxldCBtYXRjaCA9IHNlYXJjaFRlcm1zLmV2ZXJ5KHRlcm0gPT4gY29tYmluZWRWYWx1ZXMuaW5jbHVkZXModGVybSkpO1xyXG4gIFxyXG4gICAgICAgICAgaWYgKG1hdGNoKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdNYXRjaGluZyBlbnRyeTonLCBvYmopO1xyXG4gICAgICAgICAgICByZXN1bHRzLnB1c2gob2JqKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgXHJcbiAgICAgICAgdGhpcy5ub1Jlc3VsdCA9IHJlc3VsdHMubGVuZ3RoID09PSAwO1xyXG4gICAgICAgIHRoaXMuZmluYWxSZXN1bHRzID0gcmVzdWx0cztcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfTtcclxuICBcclxuICBwdWJsaWMgY2xpY2tJdGVtKGV2ZW50KSB7XHJcbiAgICAvLyBjb25zb2xlLmxvZygnaW5zaWRlIGNsaWNrSXRlbSBvZiAnICsgZXZlbnQudGFyZ2V0LnZhbHVlKTtcclxuICAgIGxldCBhcGlPYmo6IEFQSU1ldGEgPSBKU09OLnBhcnNlKHRoaXMuYXBpTWV0YSk7XHJcbiAgICB0aGlzLmZpbHRlck5hbWUgPSBldmVudFthcGlPYmouZmllbGRdO1xyXG4gICAgbGV0IGNoYW5nZSA9IG5ldyBDaGFuZ2VXcmFwcGVyKCk7IC8vIENoYW5nZVdyYXBwZXIgPSBKU09OLnBhcnNlKCd7fScpO1xyXG4gICAgY2hhbmdlLmZyb21RdWVzdGlvbklkID0gdGhpcy5pZDtcclxuICAgIGNoYW5nZS52YWx1ZU9iaiA9IGV2ZW50O1xyXG4gICAgY2hhbmdlLmZpZWxkID0gYXBpT2JqLmZpZWxkO1xyXG4gICAgdGhpcy5zZWFyY2hWYWx1ZUNoYW5nZS5lbWl0KGNoYW5nZSk7XHJcbiAgfVxyXG4gIC8vUlMgMDNGRUIyMDI1XHJcbiAgLy8gUmVzZXRzIGNvbXBvbmVudCBzdGF0ZSB3aGVuIHRoZSBjb21wb25lbnQgaXMgZGVzdHJveWVkXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlc2V0Q29tcG9uZW50U3RhdGUoKTsgIH1cclxuICAvKlxyXG4gIHB1YmxpYyBnZXRTb3VyY2VEYXRhID0gKGtleXdvcmQ6IHN0cmluZykgPT4ge1xyXG4gICAgaWYodGhpcy5zZXJ2ID09IFwiYXBpXCIpIHtcclxuICAgICAgdGhpcy5kYXRhU2VydmljZS5nZXRBUElEYXRhKFxyXG4gICAgICAgIHRoaXMudGtuLFxyXG4gICAgICAgIFtcIlF1ZXN0aW9uQm9va1wiLCBcInJlYWRcIiwgdXVpZF0sXHJcbiAgICAgICAgdGhpcy5zdWNjZXNzU291cmNlRGF0YSxcclxuICAgICAgICB0aGlzLmZhaWx1cmVTb3VyY2VEYXRhXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNmU2VydmljZS5yZW1vdGVBY3Rpb24oXHJcbiAgICAgICAgXCJOeHRDb250cm9sbGVyLnByb2Nlc3NcIixcclxuICAgICAgICBbXCJRdWVzdGlvbkJvb2tcIiwgXCJyZWFkXCIsIHV1aWRdLFxyXG4gICAgICAgIHRoaXMuc3VjY2Vzc1NvdXJjZURhdGEsXHJcbiAgICAgICAgdGhpcy5mYWlsdXJlU291cmNlRGF0YVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHN1Y2Nlc3NTb3VyY2VEYXRhID0gKHJlc3BvbnNlKSA9PiB7XHJcbiAgICBsZXQgcmVzdWx0cz1bXTtcclxuICAgIHJlc3VsdHM9cmVzcG9uc2UucmVzdWx0cztcclxuICAgIHJlc3VsdHMucHVzaCh7dXVpZDogbnVsbCwgbmFtZTogXCJcIn0pO1xyXG4gICAgdGhpcy5ub1Jlc3VsdCA9ICEocmVzdWx0cy5sZW5ndGggPiAxKTtcclxuICAgIHRoaXMuZmluYWxSZXN1bHRzID0gcmVzdWx0cztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBmYWlsdXJlU291cmNlRGF0YSA9IChyZXNwb25zZSkgPT4ge1xyXG4gICAgY29uc29sZS5sb2coXCJFcnJvciByZWFkaW5nIHRoZSBkYXRhIGZyb20gQVBJXCIpO1xyXG4gIH1cclxuICAqL1xyXG59XHJcbiAgICAiLCI8IS0tIC8vIFZEIDEySnVuMjQgLSByZWFkb25seSBjaGFuZ2UtLT5cclxuPGRpdiBpZD1cImF1dG9jb21wbGV0ZS1pbnB1dFwiPiA8IS0tIFNLUzVOT1YyNSBzZWFyY2ggaWNvbiAtLT5cclxuICA8aW5wdXQgI2F1dG8gaWQ9XCJzZWFyY2hib3gtc3R5bGVcIlxyXG4gICAgICAgICAgKGJsdXIpPVwiY2xlYXJMaXN0KClcIlxyXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJmaWx0ZXJOYW1lXCJcclxuICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgIG5hbWU9XCJuYW1lXCJcclxuICAgICAgICAgIFtyZWFkT25seV09XCJyZWFkT25seVwiXHJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2VIb2xkZXJUZXh0XCJcclxuICAgICAgICAgIHN0eWxlPVwibWFyZ2luOiAwICFpbXBvcnRhbnQ7IHBhZGRpbmctcmlnaHQ6IDMwcHg7XCJcclxuICAgICAgICAgIGNsYXNzPVwic2VhcmNoSW5wdXQgc2hlLWxpbmUtaW5wdXQgZm9ybS1jb250cm9sXCJcclxuICAgICAgICAgIChmb2N1c2luKT1cImdldFNvdXJjZURhdGFMb2NhbCgkZXZlbnQpXCJcclxuICAgICAgICAgIChpbnB1dCk9XCJnZXRTb3VyY2VEYXRhTG9jYWwoJGV2ZW50KVwiPlxyXG4gIDxkaXYgaWQ9XCJzZWxlY3RMaXN0XCIgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7cG9zaXRpb246IGFic29sdXRlO2JhY2tncm91bmQ6IHdoaXRlO3otaW5kZXg6IDI7XCI+XHJcbiAgPGRpdiAqbmdJZj1cImZpbmFsUmVzdWx0cy5sZW5ndGggPiAwICYmIHNob3dTdWdnZXN0aW9uXCJcclxuICAgICAgc3R5bGU9XCJtYXgtaGVpZ2h0OiAxMDB2aDtib3JkZXI6IDFweCBzb2xpZCAjZDJkNGQ2O292ZXJmbG93OiBzY3JvbGw7XCJcclxuICAgICAgY2xhc3M9XCJzdWdnZXN0aW9ucy1jb250YWluZXJcIj5cclxuICAgICAgPCEtLSBIQSAyMERFQzIzIFVuY29tbWVudGVkIHRoZSBsb2dpYyAtLT5cclxuICAgICAgIDwhLS0gVkQgMDNNYXktIHNlYXJjaCBjaGFuZ2VzIC0tPlxyXG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZpbmFsUmVzdWx0c1wiIChjbGljayk9J2NsaWNrSXRlbShpdGVtKScgY2xhc3M9XCJob292ZXJcIj5cclxuICAgICAgICA8IS0tIFZEIDI2SnVuMjQgLSBpZCBjb25kaXRpb24gcmVtb3ZlZCAtLT5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkLXggYWxpZ24tbWlkZGxlXCIgc3R5bGU9XCJwYWRkaW5nOiAxcmVtXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0udGh1bWJuYWlsXCIgY2xhc3M9XCJjZWxsIHNocmlua1wiIHN0eWxlPVwid2lkdGg6IDYwcHg7IG1hcmdpbi1yaWdodDogMS42cmVtO1wiPlxyXG4gICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiaXRlbS50aHVtYm5haWxcIiBzdHlsZT1cIndpZHRoOiA2MHB4O1wiIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZWxsIGF1dG9cIiBzdHlsZT1cInRleHQtYWxpZ246IGxlZnQ7IHBhZGRpbmctbGVmdDogMjBweDtcIj5cclxuICAgICAgICAgICAgICAgIDwhLS0vLyBWRCAyNkpVTjI0IC0gcGlwZSBjaGFuZ2VzIC0tPlxyXG4gICAgICAgICAgICAgICAgPCEtLSBSUyAyOUpBTjI1IC0tPlxyXG4gICAgICAgICAgICAgICAgICA8aDQgPnt7IGl0ZW0gfCBnZXRWYWx1ZTogaXRlbSA6IFNlYXJjaEl0ZW0gfX08L2g0PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8IS0tIEhBIDIwREVDMjMgRm9yIENvbW1lbnRlZCB0aGlzIGZvciBmdXR1cmUgcHVycG9zZSAtLT5cclxuICAgICAgPCEtLSA8dGFibGUgY2xhc3M9XCJ0YWJsZSB0YWJsZS1zdHJpcGVkIHRhYmxlLWJvcmRlcmVkXCI+XHJcbiAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICA8dGg+e3sgJ2ZpcnN0TmFtZScgfCBpMThuOmkxOG5TZXJ2aWNlLmN1cnJlbnRMYW5ndWFnZSB9fTwvdGg+XHJcbiAgICAgICAgICAgICAgPHRoPnt7ICdsYXN0TmFtZScgfCBpMThuOmkxOG5TZXJ2aWNlLmN1cnJlbnRMYW5ndWFnZSB9fTwvdGg+XHJcbiAgICAgICAgICAgICAgPHRoPnt7ICdkaXZpc2lvbicgfCBpMThuOmkxOG5TZXJ2aWNlLmN1cnJlbnRMYW5ndWFnZSB9fTwvdGg+XHJcbiAgICAgICAgICAgICAgPHRoPnt7ICdudW1iZXJQbGF0ZScgfCBpMThuOmkxOG5TZXJ2aWNlLmN1cnJlbnRMYW5ndWFnZSB9fTwvdGg+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgPHRib2R5PlxyXG4gICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZmluYWxSZXN1bHRzXCIgKGNsaWNrKT0nY2xpY2tJdGVtKGl0ZW0pJz5cclxuICAgICAgICAgICAgICA8dGQ+e3sgaXRlbS5maXJzdE5hbWUgfX08L3RkPlxyXG4gICAgICAgICAgICAgIDx0ZD57eyBpdGVtLmxhc3ROYW1lIH19PC90ZD5cclxuICAgICAgICAgICAgICA8dGQ+e3sgaXRlbS5kaXZpc2lvbiB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgPHRkPnt7IGl0ZW0ubnVtYmVyUGxhdGUgfX08L3RkPlxyXG4gICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICA8L3RhYmxlPiAtLT5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG4iXX0=
|
|
161
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvY29tcG9uZW50cy9zZWFyY2gtYm94L3NlYXJjaC1ib3guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL2NvbXBvbmVudHMvc2VhcmNoLWJveC9zZWFyY2gtYm94LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBSVQsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBR1osU0FBUyxHQUVWLE1BQU0sZUFBZSxDQUFDO0FBU3ZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7Ozs7O0FBVTFELE1BQU0sT0FBTyxrQkFBa0I7SUF3Qm5CO0lBQ0E7SUFDQTtJQUNBO0lBRUc7SUE1QkosZUFBZSxDQUFTO0lBQ2QsSUFBSSxDQUFDO0lBRWYsUUFBUSxDQUFDO0lBQ1QsT0FBTyxDQUFTO0lBQ2hCLEVBQUUsQ0FBUztJQUNYLFFBQVEsR0FBRyxLQUFLLENBQUMsQ0FBQywrQkFBK0I7SUFDaEQsaUJBQWlCLEdBQWdDLElBQUksWUFBWSxFQUFpQixDQUFDO0lBQzVGLE1BQU0sQ0FBSztJQUNYLFVBQVUsQ0FBTTtJQUVSLFVBQVUsQ0FBUyxDQUFDLHlDQUF5QztJQUMvRCxZQUFZLEdBQVUsRUFBRSxDQUFDO0lBQ3pCLGFBQWEsR0FBVyxFQUFFLENBQUM7SUFDM0IsU0FBUyxDQUFNO0lBQ2YsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUNuQixRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ2pCLGNBQWMsR0FBRyxJQUFJLENBQUM7SUFDckIsRUFBRSxDQUFjO0lBQ2hCLElBQUksR0FBVyxLQUFLLENBQUM7SUFDckIsR0FBRyxHQUFXLEVBQUUsQ0FBQztJQUV6QixZQUNVLFNB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bkluaXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIEluamVjdCxcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kYXRhLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTYWxlc2ZvcmNlU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9zYWxlc2ZvcmNlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFBhcmFtcyB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuLy8gVkQgMjNKQU4yNCByZW1vdmVkIGh0dHBDbGllbnQgaW1wb3J0IHVzZWQgc2VydmljZSBmaWxlIGZvciBjYWxsb3V0XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgSXRlbXNMaXN0IH0gZnJvbSBcIkBuZy1zZWxlY3Qvbmctc2VsZWN0L2xpYi9pdGVtcy1saXN0XCI7XHJcbmltcG9ydCB7IENvbnNvbGVTZXJ2aWNlIH0gZnJvbSBcIkBuZy1zZWxlY3Qvbmctc2VsZWN0L2xpYi9jb25zb2xlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQVBJTWV0YSB9IGZyb20gXCIuLi8uLi9pbnRlcmZhY2VzL2FwaW1ldGFcIjtcclxuaW1wb3J0IHsgQ2hhbmdlV3JhcHBlciB9IGZyb20gXCIuLi8uLi9tb2RlbC9jaGFuZ2VXcmFwcGVyXCI7XHJcbi8vIEhBIDE5REVDMjMgaW1wb3J0ZWQgdHJhbnNsYXRpb24gc2VydmljZVxyXG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gXCIuLi8uLi9pMThuLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXNlYXJjaC1ib3gnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zZWFyY2gtYm94LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zZWFyY2gtYm94LmNvbXBvbmVudC5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2VhcmNoQm94Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoKSBwbGFjZUhvbGRlclRleHQ6IHN0cmluZztcclxuICBAVmlld0NoaWxkKCdhdXRvJykgYXV0bztcclxuXHJcbiAgQElucHV0KCkgcXVlc3Rpb247XHJcbiAgQElucHV0KCkgYXBpTWV0YTogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGlkOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgcmVhZE9ubHkgPSBmYWxzZTsgLy8gVkQgMTJKdW4yNCAtIHJlYWRvbmx5IGNoYW5nZVxyXG4gIEBPdXRwdXQoKSBzZWFyY2hWYWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPENoYW5nZVdyYXBwZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxDaGFuZ2VXcmFwcGVyPigpO1xyXG4gICBhcGlPYmo6YW55O1xyXG4gICBTZWFyY2hJdGVtOiBhbnk7XHJcblxyXG4gIEBJbnB1dCgpIGZpbHRlck5hbWU6IHN0cmluZzsgLy8gVkQgMjBBdWcgZGVmYXVsdCBmaWx0ZXIgdmFsdWUgYXMgaW5wdXRcclxuICBwdWJsaWMgZmluYWxSZXN1bHRzOiBhbnlbXSA9IFtdO1xyXG4gIHB1YmxpYyBzZWFyY2hLZXlXb3JkOiBzdHJpbmcgPSAnJztcclxuICBwdWJsaWMgbmV3UmVzdWx0OiBhbnk7XHJcbiAgcHVibGljIHNob3dSZXN1bHQgPSBmYWxzZTtcclxuICBwdWJsaWMgbm9SZXN1bHQgPSBmYWxzZTtcclxuICBwdWJsaWMgc2hvd1N1Z2dlc3Rpb24gPSB0cnVlO1xyXG4gIHByaXZhdGUgZWw6IEhUTUxFbGVtZW50O1xyXG4gIHByaXZhdGUgc2Vydjogc3RyaW5nID0gJ2FwaSc7XHJcbiAgcHJpdmF0ZSB0a246IHN0cmluZyA9ICcnO1xyXG4gIFxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBzZlNlcnZpY2U6IFNhbGVzZm9yY2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBkYXRhU2VydmljZTogRGF0YVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIGVsOiBFbGVtZW50UmVmLFxyXG4gICAgICAgIHB1YmxpYyBpMThuU2VydmljZTogSTE4blNlcnZpY2VcclxuICApIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuLy8gIFZEIDAzTWF5LSBzZWFyY2ggY2hhbmdlc1xyXG4gICAgaWYodGhpcy5hcGlNZXRhKXtcclxuICAgICAgbGV0IGFwaU9iajogQVBJTWV0YSA9IEpTT04ucGFyc2UodGhpcy5hcGlNZXRhKTtcclxuICAgICAgdGhpcy5TZWFyY2hJdGVtID0gYXBpT2JqLmZpZWxkO1xyXG4gICAgfVxyXG4gICAgLy8gdGhpcy5yZXNldENvbXBvbmVudFN0YXRlKCk7XHJcblxyXG4gIH1cclxuLy8vL1JTIDAzRkVCMjAyNVxyXG4vLyBSZXNldHMgc3RhdGUgd2hlbiBmaWx0ZXJOYW1lIG9yIGFwaU1ldGEgY2hhbmdlcyB0byByZWZsZWN0IHVwZGF0ZWQgZGF0YVxyXG5uZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgaWYgKGNoYW5nZXNbJ2FwaU1ldGEnXSAmJiB0aGlzLmFwaU1ldGEpIHtcclxuICAgIHRoaXMuYXBpT2JqID0gSlNPTi5wYXJzZSh0aGlzLmFwaU1ldGEpO1xyXG4gICAgdGhpcy5TZWFyY2hJdGVtID0gdGhpcy5hcGlPYmo/LmZpZWxkO1xyXG4gIH1cclxufVxyXG4vL1JTIDAzRkVCMjAyNVxyXG4vLyBDbGVhcnMgc2VhcmNoLXJlbGF0ZWQgZGF0YSwgaW5jbHVkaW5nIHJlc3VsdHMsIHNlYXJjaCB0ZXJtLCBhbmQgc3VnZ2VzdGlvbnMuXHJcbnByaXZhdGUgcmVzZXRDb21wb25lbnRTdGF0ZSgpOiB2b2lkIHtcclxuICB0aGlzLmZpbmFsUmVzdWx0cyA9IFtdO1xyXG4gIHRoaXMuZmlsdGVyTmFtZSA9ICcnOyBcclxuICB0aGlzLnNlYXJjaEtleVdvcmQgPSAnJzsgIHRoaXMuc2hvd1N1Z2dlc3Rpb24gPSBmYWxzZTtcclxuICB0aGlzLm5vUmVzdWx0ID0gZmFsc2U7XHJcbn1cclxuICBjbGVhckxpc3QoKXtcclxuICAgIHNldFRpbWVvdXQoKCk9PiB7XHJcbiAgICAgIHRoaXMuZmluYWxSZXN1bHRzID0gW107XHJcbiAgICB9LCAxMDAwKTtcclxuICB9XHJcblxyXG4gIGdldFNvdXJjZURhdGFMb2NhbChldmVudDogYW55KSB7IC8vdG8gZ2V0IHJlc3VsdHMgbGlzdCBmcm9tIGJhY2tlbmQgQVBJIHdoZW5ldmVyIGtleSBpcyB1cCBhZnRlciB0aGUgZW50ZXJpbmcgYXRsZWFzdCBvbmUga2V5XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgaWYoZXZlbnQudGFyZ2V0LnZhbHVlLmxlbmd0aCA+IDIpe1xyXG4gICAgICB0aGlzLnNob3dTdWdnZXN0aW9uPXRydWU7XHJcbiAgICAgIHRoaXMuZmluYWxSZXN1bHRzPVtdO1xyXG4gICAgICB0aGlzLnNlYXJjaEtleVdvcmQgPSBldmVudC50YXJnZXQudmFsdWU7XHJcbiAgICAgIHRoaXMuc2hvd1Jlc3VsdCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmdldFNvdXJjZURhdGEoZXZlbnQudGFyZ2V0LnZhbHVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2hvd1N1Z2dlc3Rpb249ZmFsc2U7XHJcbiAgICAgIHRoaXMuZmluYWxSZXN1bHRzID0gW107XHJcbiAgICAgIHRoaXMubm9SZXN1bHQgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8gVkQgMDNNYXktIHNlYXJjaCBjaGFuZ2VzXHJcbiAgLy8gVkQgMzFOT1YyNCBudWxsIGNoZWNrXHJcbiAgLy8gUlMgMjlKQU4yNVxyXG4gIC8vTXVsdGktd29yZCBzZWFyY2ggYWNyb3NzIGFsbCBvYmplY3QgdmFsdWVzXHJcbiAgcHVibGljIGdldFNvdXJjZURhdGEgPSAoa2V5d29yZDogc3RyaW5nKSA9PiB7XHJcbiAgICBpZiAodGhpcy5hcGlNZXRhKSB7XHJcbiAgICAgIGxldCBhcGlPYmo6IEFQSU1ldGEgPSBKU09OLnBhcnNlKHRoaXMuYXBpTWV0YSk7XHJcbiAgICAgIFxyXG4gICAgICB0aGlzLmRhdGFTZXJ2aWNlLmFwaVJlc3BvbnNlKGFwaU9iai5lbmRwb2ludCkuc3Vic2NyaWJlKChhcGlSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIGxldCByZXNwb25zZTtcclxuICAgICAgICBpZiAoYXBpT2JqLnZhcmlhYmxlKSB7XHJcbiAgICAgICAgICByZXNwb25zZSA9IHRoaXMuZGF0YVNlcnZpY2UuZ2V0VmFsdWUoYXBpUmVzcG9uc2UsIGFwaU9iai52YXJpYWJsZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJlc3BvbnNlID0gYXBpUmVzcG9uc2U7XHJcbiAgICAgICAgfVxyXG4gIFxyXG4gICAgICAgIGxldCByZXN1bHRzID0gW107XHJcbiAgICAgICAgbGV0IHNlYXJjaFRlcm1zID0ga2V5d29yZC50b0xvd2VyQ2FzZSgpLnNwbGl0KFwiIFwiKTsgLy8gU3BsaXQgaW5wdXQgaW50byB3b3Jkc1xyXG4gIFxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzcG9uc2UubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGxldCBvYmogPSByZXNwb25zZVtpXTtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgLy8gQ29udmVydCBhbGwgb2JqZWN0IHZhbHVlcyB0byBhIHNpbmdsZSBzdHJpbmcgZm9yIGZsZXhpYmxlIHNlYXJjaFxyXG4gICAgICAgICAgbGV0IGNvbWJpbmVkVmFsdWVzID0gT2JqZWN0LnZhbHVlcyhvYmopLmpvaW4oXCIgXCIpLnRvTG93ZXJDYXNlKCk7XHJcbiAgXHJcbiAgICAgICAgICAvLyBDaGVjayBpZiBhbGwgc2VhcmNoIHRlcm1zIGV4aXN0IGluIGFueSBvcmRlclxyXG4gICAgICAgICAgbGV0IG1hdGNoID0gc2VhcmNoVGVybXMuZXZlcnkodGVybSA9PiBjb21iaW5lZFZhbHVlcy5pbmNsdWRlcyh0ZXJtKSk7XHJcbiAgXHJcbiAgICAgICAgICBpZiAobWF0Y2gpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ01hdGNoaW5nIGVudHJ5OicsIG9iaik7XHJcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaChvYmopO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICBcclxuICAgICAgICB0aGlzLm5vUmVzdWx0ID0gcmVzdWx0cy5sZW5ndGggPT09IDA7XHJcbiAgICAgICAgdGhpcy5maW5hbFJlc3VsdHMgPSByZXN1bHRzO1xyXG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTsgLy8gRm9yY2UgVUkgdXBkYXRlXHJcblxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9O1xyXG4gIFxyXG4gIHB1YmxpYyBjbGlja0l0ZW0oZXZlbnQpIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKCdpbnNpZGUgY2xpY2tJdGVtIG9mICcgKyBldmVudC50YXJnZXQudmFsdWUpO1xyXG4gICAgbGV0IGFwaU9iajogQVBJTWV0YSA9IEpTT04ucGFyc2UodGhpcy5hcGlNZXRhKTtcclxuICAgIHRoaXMuZmlsdGVyTmFtZSA9IGV2ZW50W2FwaU9iai5maWVsZF07XHJcbiAgICBsZXQgY2hhbmdlID0gbmV3IENoYW5nZVdyYXBwZXIoKTsgLy8gQ2hhbmdlV3JhcHBlciA9IEpTT04ucGFyc2UoJ3t9Jyk7XHJcbiAgICBjaGFuZ2UuZnJvbVF1ZXN0aW9uSWQgPSB0aGlzLmlkO1xyXG4gICAgY2hhbmdlLnZhbHVlT2JqID0gZXZlbnQ7XHJcbiAgICBjaGFuZ2UuZmllbGQgPSBhcGlPYmouZmllbGQ7XHJcbiAgICB0aGlzLnNlYXJjaFZhbHVlQ2hhbmdlLmVtaXQoY2hhbmdlKTtcclxuICB9XHJcbiAgLy9SUyAwM0ZFQjIwMjVcclxuICAvLyBSZXNldHMgY29tcG9uZW50IHN0YXRlIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBkZXN0cm95ZWRcclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMucmVzZXRDb21wb25lbnRTdGF0ZSgpOyAgfVxyXG4gIC8qXHJcbiAgcHVibGljIGdldFNvdXJjZURhdGEgPSAoa2V5d29yZDogc3RyaW5nKSA9PiB7XHJcbiAgICBpZih0aGlzLnNlcnYgPT0gXCJhcGlcIikge1xyXG4gICAgICB0aGlzLmRhdGFTZXJ2aWNlLmdldEFQSURhdGEoXHJcbiAgICAgICAgdGhpcy50a24sXHJcbiAgICAgICAgW1wiUXVlc3Rpb25Cb29rXCIsIFwicmVhZFwiLCB1dWlkXSxcclxuICAgICAgICB0aGlzLnN1Y2Nlc3NTb3VyY2VEYXRhLFxyXG4gICAgICAgIHRoaXMuZmFpbHVyZVNvdXJjZURhdGFcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2ZTZXJ2aWNlLnJlbW90ZUFjdGlvbihcclxuICAgICAgICBcIk54dENvbnRyb2xsZXIucHJvY2Vzc1wiLFxyXG4gICAgICAgIFtcIlF1ZXN0aW9uQm9va1wiLCBcInJlYWRcIiwgdXVpZF0sXHJcbiAgICAgICAgdGhpcy5zdWNjZXNzU291cmNlRGF0YSxcclxuICAgICAgICB0aGlzLmZhaWx1cmVTb3VyY2VEYXRhXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3VjY2Vzc1NvdXJjZURhdGEgPSAocmVzcG9uc2UpID0+IHtcclxuICAgIGxldCByZXN1bHRzPVtdO1xyXG4gICAgcmVzdWx0cz1yZXNwb25zZS5yZXN1bHRzO1xyXG4gICAgcmVzdWx0cy5wdXNoKHt1dWlkOiBudWxsLCBuYW1lOiBcIlwifSk7XHJcbiAgICB0aGlzLm5vUmVzdWx0ID0gIShyZXN1bHRzLmxlbmd0aCA+IDEpO1xyXG4gICAgdGhpcy5maW5hbFJlc3VsdHMgPSByZXN1bHRzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGZhaWx1cmVTb3VyY2VEYXRhID0gKHJlc3BvbnNlKSA9PiB7XHJcbiAgICBjb25zb2xlLmxvZyhcIkVycm9yIHJlYWRpbmcgdGhlIGRhdGEgZnJvbSBBUElcIik7XHJcbiAgfVxyXG4gICovXHJcbn1cclxuICAgICIsIjwhLS0gLy8gVkQgMTJKdW4yNCAtIHJlYWRvbmx5IGNoYW5nZS0tPlxyXG48ZGl2IGlkPVwiYXV0b2NvbXBsZXRlLWlucHV0XCI+IDwhLS0gU0tTNU5PVjI1IHNlYXJjaCBpY29uIC0tPlxyXG4gIDxpbnB1dCAjYXV0byBpZD1cInNlYXJjaGJveC1zdHlsZVwiXHJcbiAgICAgICAgICAoYmx1cik9XCJjbGVhckxpc3QoKVwiXHJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpbHRlck5hbWVcIlxyXG4gICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgbmFtZT1cIm5hbWVcIlxyXG4gICAgICAgICAgW3JlYWRPbmx5XT1cInJlYWRPbmx5XCJcclxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZUhvbGRlclRleHRcIlxyXG4gICAgICAgICAgc3R5bGU9XCJtYXJnaW46IDAgIWltcG9ydGFudDsgcGFkZGluZy1yaWdodDogMzBweDtcIlxyXG4gICAgICAgICAgY2xhc3M9XCJzZWFyY2hJbnB1dCBzaGUtbGluZS1pbnB1dCBmb3JtLWNvbnRyb2xcIlxyXG4gICAgICAgICAgKGZvY3VzaW4pPVwiZ2V0U291cmNlRGF0YUxvY2FsKCRldmVudClcIlxyXG4gICAgICAgICAgKGlucHV0KT1cImdldFNvdXJjZURhdGFMb2NhbCgkZXZlbnQpXCI+XHJcbiAgPGRpdiBpZD1cInNlbGVjdExpc3RcIiBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTtwb3NpdGlvbjogYWJzb2x1dGU7YmFja2dyb3VuZDogd2hpdGU7ei1pbmRleDogMjtcIj5cclxuICA8ZGl2ICpuZ0lmPVwiZmluYWxSZXN1bHRzLmxlbmd0aCA+IDAgJiYgc2hvd1N1Z2dlc3Rpb25cIlxyXG4gICAgICBzdHlsZT1cIm1heC1oZWlnaHQ6IDEwMHZoO2JvcmRlcjogMXB4IHNvbGlkICNkMmQ0ZDY7b3ZlcmZsb3c6IHNjcm9sbDtcIlxyXG4gICAgICBjbGFzcz1cInN1Z2dlc3Rpb25zLWNvbnRhaW5lclwiPlxyXG4gICAgICA8IS0tIEhBIDIwREVDMjMgVW5jb21tZW50ZWQgdGhlIGxvZ2ljIC0tPlxyXG4gICAgICAgPCEtLSBWRCAwM01heS0gc2VhcmNoIGNoYW5nZXMgLS0+XHJcbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZmluYWxSZXN1bHRzXCIgKGNsaWNrKT0nY2xpY2tJdGVtKGl0ZW0pJyBjbGFzcz1cImhvb3ZlclwiPlxyXG4gICAgICAgIDwhLS0gVkQgMjZKdW4yNCAtIGlkIGNvbmRpdGlvbiByZW1vdmVkIC0tPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQteCBhbGlnbi1taWRkbGVcIiBzdHlsZT1cInBhZGRpbmc6IDFyZW1cIj5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXRlbS50aHVtYm5haWxcIiBjbGFzcz1cImNlbGwgc2hyaW5rXCIgc3R5bGU9XCJ3aWR0aDogNjBweDsgbWFyZ2luLXJpZ2h0OiAxLjZyZW07XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJpdGVtLnRodW1ibmFpbFwiIHN0eWxlPVwid2lkdGg6IDYwcHg7XCIgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNlbGwgYXV0b1wiIHN0eWxlPVwidGV4dC1hbGlnbjogbGVmdDsgcGFkZGluZy1sZWZ0OiAyMHB4O1wiPlxyXG4gICAgICAgICAgICAgICAgPCEtLS8vIFZEIDI2SlVOMjQgLSBwaXBlIGNoYW5nZXMgLS0+XHJcbiAgICAgICAgICAgICAgICA8IS0tIFJTIDI5SkFOMjUgLS0+XHJcbiAgICAgICAgICAgICAgICA8aDQgPnt7ICcnIHwgZ2V0VmFsdWU6IGl0ZW0gOiBTZWFyY2hJdGVtICB9fTwvaDQ+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDwhLS0gSEEgMjBERUMyMyBGb3IgQ29tbWVudGVkIHRoaXMgZm9yIGZ1dHVyZSBwdXJwb3NlIC0tPlxyXG4gICAgICA8IS0tIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLXN0cmlwZWQgdGFibGUtYm9yZGVyZWRcIj5cclxuICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgIDx0aD57eyAnZmlyc3ROYW1lJyB8IGkxOG46aTE4blNlcnZpY2UuY3VycmVudExhbmd1YWdlIH19PC90aD5cclxuICAgICAgICAgICAgICA8dGg+e3sgJ2xhc3ROYW1lJyB8IGkxOG46aTE4blNlcnZpY2UuY3VycmVudExhbmd1YWdlIH19PC90aD5cclxuICAgICAgICAgICAgICA8dGg+e3sgJ2RpdmlzaW9uJyB8IGkxOG46aTE4blNlcnZpY2UuY3VycmVudExhbmd1YWdlIH19PC90aD5cclxuICAgICAgICAgICAgICA8dGg+e3sgJ251bWJlclBsYXRlJyB8IGkxOG46aTE4blNlcnZpY2UuY3VycmVudExhbmd1YWdlIH19PC90aD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmaW5hbFJlc3VsdHNcIiAoY2xpY2spPSdjbGlja0l0ZW0oaXRlbSknPlxyXG4gICAgICAgICAgICAgIDx0ZD57eyBpdGVtLmZpcnN0TmFtZSB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgPHRkPnt7IGl0ZW0ubGFzdE5hbWUgfX08L3RkPlxyXG4gICAgICAgICAgICAgIDx0ZD57eyBpdGVtLmRpdmlzaW9uIH19PC90ZD5cclxuICAgICAgICAgICAgICA8dGQ+e3sgaXRlbS5udW1iZXJQbGF0ZSB9fTwvdGQ+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgIDwvdGFibGU+IC0tPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbiJdfQ==
|