ngx-edu-sharing-metaqs2 0.9.36 → 0.9.37
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/collection-count-history/collection-count-history.component.mjs +3 -3
- package/esm2022/lib/collection-count-history/monthpicker/monthpicker.component.mjs +31 -5
- package/esm2022/lib/components/filter/datepicker/datepicker.component.mjs +32 -6
- package/esm2022/lib/components/quality-matrix/quality_matrix.mjs +19 -14
- package/esm2022/lib/counts-with-history/counts-with-history.component.mjs +5 -3
- package/esm2022/lib/tree-license/tree-license.component.mjs +5 -3
- package/fesm2022/ngx-edu-sharing-metaqs2.mjs +83 -24
- package/fesm2022/ngx-edu-sharing-metaqs2.mjs.map +1 -1
- package/lib/collection-count-history/monthpicker/monthpicker.component.d.ts +7 -3
- package/lib/components/filter/datepicker/datepicker.component.d.ts +7 -3
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Component, computed, ElementRef, HostListener, inject, Input, signal,
|
|
1
|
+
import { Component, computed, ElementRef, HostListener, inject, Input, signal, ViewChild, ViewChildren, } from '@angular/core';
|
|
2
2
|
import { BehaviorSubject, forkJoin, of } from 'rxjs';
|
|
3
3
|
import { filter, finalize, take, tap } from 'rxjs/operators';
|
|
4
4
|
import { FormControl, FormGroup, FormRecord, ReactiveFormsModule } from '@angular/forms';
|
|
@@ -14,7 +14,7 @@ import { MatIcon } from '@angular/material/icon';
|
|
|
14
14
|
import { DatepickerComponent } from '../filter/datepicker/datepicker.component';
|
|
15
15
|
import { MatSlideToggle } from '@angular/material/slide-toggle';
|
|
16
16
|
import { ProgressSpinnerComponent } from '../loading_indicator/progress-spinner/progress-spinner.component';
|
|
17
|
-
import { MatCell, MatCellDef, MatColumnDef, MatHeaderCell, MatHeaderCellDef, MatHeaderRow, MatHeaderRowDef, MatRow, MatRowDef, MatTable } from '@angular/material/table';
|
|
17
|
+
import { MatCell, MatCellDef, MatColumnDef, MatHeaderCell, MatHeaderCellDef, MatHeaderRow, MatHeaderRowDef, MatRow, MatRowDef, MatTable, } from '@angular/material/table';
|
|
18
18
|
import { MatTooltip } from '@angular/material/tooltip';
|
|
19
19
|
import { MatButton, MatIconButton } from '@angular/material/button';
|
|
20
20
|
import { DonutChartComponent } from '../donut-chart/donut-chart.component';
|
|
@@ -45,15 +45,11 @@ export class QualityMatrixComponent {
|
|
|
45
45
|
const viewportWidth = viewport.width;
|
|
46
46
|
return this.scrollWidth() > viewportWidth && this.scrollLeft() + viewportWidth < this.scrollWidth();
|
|
47
47
|
});
|
|
48
|
-
this.issueTypeHeader = viewChild('issueType', {
|
|
49
|
-
read: ElementRef,
|
|
50
|
-
});
|
|
51
48
|
this.filteredColumns = [];
|
|
52
49
|
this.datatableColumns = [];
|
|
53
50
|
this.showHistoricalData = new FormControl({ value: false, disabled: true });
|
|
54
51
|
this.onlySourcesWithMaterial = new FormControl({ value: true, disabled: true });
|
|
55
52
|
this.isLoading = signal(true);
|
|
56
|
-
this.scrollMarkers = viewChildren(ScrollMarkerDirective);
|
|
57
53
|
this.categoryFilterValues = new Map();
|
|
58
54
|
this.recentQualityMatrix$ = new BehaviorSubject({ columns: [], rows: [] });
|
|
59
55
|
this.pastQualityMatrix$ = new BehaviorSubject({ columns: [], rows: [] });
|
|
@@ -320,11 +316,11 @@ export class QualityMatrixComponent {
|
|
|
320
316
|
return;
|
|
321
317
|
}
|
|
322
318
|
const viewportWidth = viewport.width;
|
|
323
|
-
const lastVisible = this.scrollMarkers
|
|
319
|
+
const lastVisible = this.scrollMarkers.findLast((marker) => marker.element.nativeElement.getBoundingClientRect().left < viewportWidth);
|
|
324
320
|
if (!lastVisible) {
|
|
325
321
|
return;
|
|
326
322
|
}
|
|
327
|
-
const leftColumnWidth = this.issueTypeHeader
|
|
323
|
+
const leftColumnWidth = this.issueTypeHeader?.nativeElement.getBoundingClientRect().width ?? 0;
|
|
328
324
|
scrollingElement.scrollBy({
|
|
329
325
|
left: lastVisible.element.nativeElement.getBoundingClientRect().left - leftColumnWidth,
|
|
330
326
|
behavior: 'smooth',
|
|
@@ -340,8 +336,8 @@ export class QualityMatrixComponent {
|
|
|
340
336
|
return;
|
|
341
337
|
}
|
|
342
338
|
const viewportWidth = viewport.width;
|
|
343
|
-
const leftColumnWidth = this.issueTypeHeader
|
|
344
|
-
const firstVisible = this.scrollMarkers
|
|
339
|
+
const leftColumnWidth = this.issueTypeHeader?.nativeElement.getBoundingClientRect().width ?? 0;
|
|
340
|
+
const firstVisible = this.scrollMarkers.find((marker) => marker.element.nativeElement.getBoundingClientRect().right > leftColumnWidth);
|
|
345
341
|
if (!firstVisible) {
|
|
346
342
|
return;
|
|
347
343
|
}
|
|
@@ -359,7 +355,7 @@ export class QualityMatrixComponent {
|
|
|
359
355
|
this.scrollWidth.set(scrollingElement.scrollWidth);
|
|
360
356
|
}
|
|
361
357
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: QualityMatrixComponent, deps: [{ token: i1.MetaApiService }, { token: i2.EditorialLinkService }, { token: i3.Overlay }, { token: i4.TooltipService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
362
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.13", type: QualityMatrixComponent, isStandalone: true, selector: "metaqs2-quality-matrix-v2", inputs: { pageTitle: "pageTitle" }, host: { listeners: { "window:scroll": "onScroll()", "window:resize": "onScroll()" } }, providers: [TooltipService], viewQueries: [{ propertyName: "issueTypeHeader", first: true, predicate: ["issueType"], descendants: true, read: ElementRef, isSignal: true }, { propertyName: "scrollMarkers", predicate: ScrollMarkerDirective, descendants: true, isSignal: true }], ngImport: i0, template: "<mat-card appearance=\"raised\">\n <mat-card-header *ngIf=\"pageTitle\">\n <mat-card-title>\n Qualit\u00E4tsmetrik: {{ pageTitle | translate }}{{isLoading() ? \": Lade neue Daten.\" : \"\"}}</mat-card-title\n >\n </mat-card-header>\n <mat-card-content class=\"toolbar\">\n <metaqs2-qm-filter *ngFor=\"let filter of categoryControls.controls | keyvalue; trackBy: filterIdent\"\n [options]=\"categoryFilterValues.get(filter.key)\"\n [inputFormControl]=\"filter.value\"\n [label] = \"'filter.' + filter.key | translate\" />\n <div class=\"actionbar\">\n <metaqs2-datepicker *ngIf=\"showHistoricalData.value\" [disabled]=\"isLoading()\" [inputGroup]=\"range\" />\n <mat-slide-toggle [disabled]=\"isLoading()\" labelPosition=\"before\" [formControl]=\"onlySourcesWithMaterial\" id=\"onlySourcesWithMaterial\" >\n show only sources with material\n </mat-slide-toggle>\n <mat-slide-toggle [disabled]=\"isLoading()\" labelPosition=\"before\" [formControl]=\"showHistoricalData\" id=\"showHistoricalData\" >\n show historical data\n </mat-slide-toggle>\n <button\n mat-icon-button\n color=\"primary\"\n [disabled]=\"isLoading\"\n (click)=\"refresh()\"\n matTooltip=\"Aktualisiere den IST-Stand\"\n matTooltipShowDelay=\"500\"\n >\n <mat-icon>refresh</mat-icon>\n </button>\n <div class=\"scroll-controller\" #scroller> <!-- put the whole toolbar in a fixed container (MQS- -->\n <button mat-raised-button (click)=\"scrollToLeft()\" [disabled]=\"!isLeftScrollable()\" class=\"scroll-button\">\n <mat-icon style=\"margin: 0\">chevron_left</mat-icon>\n </button>\n <button mat-raised-button (click)=\"scrollToRight()\" [disabled]=\"!isRightScrollable()\" class=\"scroll-button\">\n <mat-icon style=\"margin: 0\">chevron_right</mat-icon>\n </button>\n </div>\n <div style=\"flex: 1 0 {{scroller.getBoundingClientRect().width}}px\"></div>\n </div>\n </mat-card-content>\n</mat-card>\n<mat-card>\n <metaqs2-progress-spinner [displayProgressSpinner]=\"isLoading()\"></metaqs2-progress-spinner>\n <table [class.while-loading]=\"isLoading()\" mat-table [dataSource]=\"recentQualityMatrix$.value.rows\" class=\"quality-matrix\">\n <!-- Define columns of table -->\n <!-- Row Header Column -->\n <ng-container matColumnDef=\"row-header\" sticky>\n <th rowspan=\"2\" mat-header-cell *matHeaderCellDef #issueType>Issue Type</th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n matTooltip=\"{{row.meta.alt_label}}\"\n class=\"row-header mat-cell-level-{{row.meta.level + 1}}\"\n >\n {{\"quality_matrix.\" + row.meta.label | translate }}\n </td>\n </ng-container>\n <!-- one column for the source -->\n <ng-container *ngFor=\"let col of filteredColumns; trackBy:columnIdent\" [matColumnDef]=\"col.id + '_source'\">\n <th [attr.colspan]=\"showHistoricalData.value?2:1\" metaqs2ScrollMarker mat-header-cell *matHeaderCellDef matTooltip=\"{{col.altLabel}}\">{{col.label}}</th>\n </ng-container>\n <!-- /source -->\n <!-- current Data Columns -->\n <ng-container *ngFor=\"let column of filteredColumns; trackBy:columnIdent\" [matColumnDef]=\"column.id + '_current'\">\n <th class=\"recent-data-cell\" mat-header-cell *matHeaderCellDef matTooltip=\"{{column.altLabel}}\">{{ range.controls.end.value?.toLocaleString(DateTime.DATE_SHORT) }} <br>({{column.total}})</th>\n <td class=\"recent-data-cell\" mat-cell *matCellDef=\"let row\" #cell (mouseover)=\"showTooltip(row, column, cell)\" (mouseleave)=\"hideTooltip(cell)\">\n <a *ngIf=\"column.total > 0 else emptyDiv\" class=\"chart-container\" (click)=\"openEditLink( column.label, row.meta.label)\">\n <div>\n <metaqs2-donut-chart [data]=\"getDonutSlices(row, column)\" [borderSize]=\"25\"></metaqs2-donut-chart>\n </div>\n </a>\n <ng-template #emptyDiv>\n <div>-</div>\n </ng-template>\n </td>\n </ng-container>\n <!-- /current Data Columns -->\n <!-- past Data Columns -->\n <ng-container *ngIf=\"showHistoricalData.value\">\n <ng-container *ngFor=\"let column of filteredColumns; trackBy:columnIdent\" [matColumnDef]=\"column.id + '_past'\">\n <th class=\"historic-data-cell\" mat-header-cell\n *matHeaderCellDef>{{ range.controls.start.value?.toLocaleString(DateTime.DATE_SHORT) }}\n <br>{{ getPastColumn(column.id)?.total }}\n </th>\n <td class=\"historic-data-cell\" mat-cell *matCellDef=\"let row\">\n <ng-container *ngIf=\"getTrend(row, column) as trend\">\n <span [ngClass]=\"trend.trend\">\n <mat-icon aria-hidden=\"false\" [attr.aria-label]=\"trend.trend\" [fontIcon]=\"trend.trend!\" />\n {{ trend.delta }}\n </span>\n </ng-container>\n\n </td>\n </ng-container>\n </ng-container>\n <!-- /past Data Columns -->\n\n <!-- Generate actual table -->\n <tr mat-header-row *matHeaderRowDef=\"['row-header'].concat( sourceColumns); sticky: true;\"></tr>\n <tr mat-header-row *matHeaderRowDef=\"allDataColumns; sticky: true;\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: ['row-header'].concat(allDataColumns)\"></tr>\n </table>\n</mat-card>\n", styles: [".while-loading{filter:blur(2px)}mat-card-actions>mat-slide-toggle{margin-left:20px}.row{flex-grow:1;display:flex;align-items:center}table{width:100%;overflow-y:auto}table .scroll{flex-grow:1;overflow-y:auto}table th{vertical-align:top;padding:.375rem}table th:not(:last-child){border-right:1px solid #e4e4e4}table tr:first-child>th:first-child{text-align:left}table td:first-child{text-align:left}.cell{flex:1}.mat-mdc-cell{padding-top:5px}.mat-mdc-cell,.mat-mdc-header-cell{padding-left:5px;text-align:center}.mat-mdc-cell a.chart-container,.mat-mdc-header-cell a.chart-container{display:flex;justify-content:center}.mat-mdc-cell .trending_up,.mat-mdc-header-cell .trending_up{color:#4abeff}.mat-mdc-cell .trending_down,.mat-mdc-header-cell .trending_down{color:#c20808}.recent-data-cell,.mat-column-row-header{border-right:1px solid #e4e4e4}.mat-header-cell-label{color:#000;padding-left:30px;padding-right:30px;justify-content:left;border-bottom:1px solid #e4e4e4;font-style:normal;font-weight:500;font-size:110%;background:#ddf0fb;text-align:left}.mat-header-cell-label>div{display:flex;font-weight:700;font-style:normal;justify-content:left}.mat-header-cell-small{padding-left:5px;padding-right:5px;justify-content:left;font-style:normal;font-weight:400;font-size:105%;background:#ddf0fb;border-top:1px solid #e4e4e4;border-bottom:1px solid #e4e4e4}.mat-mdc-cell a{cursor:pointer;display:flex;align-items:center;justify-content:left}.mat-mdc-cell a>mat-icon{padding-right:5px;font-size:22px;height:20px;opacity:.75}.mat-mdc-cell a>mat-icon:hover,.mat-mdc-cell a>mat-icon:focus{text-decoration:none}.mat-mdc-cell .number{display:flex;height:47px;justify-content:left;align-items:center;padding-left:15px}.mat-mdc-cell .row-header{display:flex;height:47px;max-height:47px;justify-content:left;align-items:center;padding-left:15px}.mat-mdc-cell .row-header-sum{display:flex;height:47px;max-height:47px;justify-content:left;align-items:center;border-right:5px solid #bdbdbd}.mat-mdc-card{width:100%;box-shadow:none}.mat-mdc-card ::ng-deep mat-card-header{align-items:center}.mat-mdc-card ::ng-deep mat-card-header .mat-card-header-text{flex-grow:1;margin:0}.mat-mdc-card ::ng-deep mat-card-header .mat-card-header-text mat-card-title{padding-top:20px;font-size:120%}.mat-mdc-card ::ng-deep mat-card-header .mat-card-header-text mat-card-title .count{font-size:80%;color:#888}.mat-mdc-card .source-header{font-style:normal;font-weight:400;font-size:20px;height:30px;width:60%}.mat-mdc-card .source-header .robot-explanation{font-size:15px}.mat-mdc-card .scroll{flex-grow:1;overflow-y:auto}.mat-header-cell-scope{color:#545454}.mat-mdc-header-row{height:70px;max-height:70px;min-height:56px}:host{overflow:auto}:host ::ng-deep thead{border:10px solid #ff0000;position:relative;z-index:1}.mat-cell-level-1{padding-left:20px!important}.mat-cell-level-2{padding-left:40px!important}.mat-cell-level-3{padding-left:60px!important}.mat-cell-level-4{padding-left:80px!important}.mat-cell-level-5{padding-left:100px!important}.mat-cell-level-6{padding-left:120px!important}.mat-cell-level-7{padding-left:140px!important}.mat-cell-level-8{padding-left:160px!important}.actionbar{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;gap:.5rem}.scroll-controller{position:fixed;right:.5rem;z-index:100;display:flex;flex-direction:row;justify-content:space-between;align-items:center;gap:.5rem}.scroll-button{min-width:0;padding-left:.25rem;padding-right:.25rem;text-align:center;height:1.75rem}.toolbar{display:flex;flex-direction:row;justify-content:flex-start;align-items:stretch;gap:.5rem}\n"], dependencies: [{ kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "component", type: QualityMatrixFilterComponent, selector: "metaqs2-qm-filter", inputs: ["options", "inputFormControl", "label", "multiple"], outputs: ["changedFilters"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: DatepickerComponent, selector: "metaqs2-datepicker", inputs: ["disabled", "inputGroup"] }, { kind: "component", type: MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: ProgressSpinnerComponent, selector: "metaqs2-progress-spinner", inputs: ["color", "diameter", "strokeWidth", "backdropEnabled", "positionGloballyCenter", "displayProgressSpinner"] }, { kind: "component", type: MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: MatCellDef, selector: "[matCellDef]" }, { kind: "component", type: MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: DonutChartComponent, selector: "metaqs2-donut-chart", inputs: ["radius", "viewBox", "borderSize", "strokeWidth", "data"] }, { kind: "directive", type: ScrollMarkerDirective, selector: "[metaqs2ScrollMarker]" }] }); }
|
|
358
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: QualityMatrixComponent, isStandalone: true, selector: "metaqs2-quality-matrix-v2", inputs: { pageTitle: "pageTitle" }, host: { listeners: { "window:scroll": "onScroll()", "window:resize": "onScroll()" } }, providers: [TooltipService], viewQueries: [{ propertyName: "issueTypeHeader", first: true, predicate: ["issueType"], descendants: true, read: ElementRef, static: true }, { propertyName: "scrollMarkers", predicate: ScrollMarkerDirective, descendants: true }], ngImport: i0, template: "<mat-card appearance=\"raised\">\n <mat-card-header *ngIf=\"pageTitle\">\n <mat-card-title>\n Qualit\u00E4tsmetrik: {{ pageTitle | translate }}{{isLoading() ? \": Lade neue Daten.\" : \"\"}}</mat-card-title\n >\n </mat-card-header>\n <mat-card-content class=\"toolbar\">\n <metaqs2-qm-filter *ngFor=\"let filter of categoryControls.controls | keyvalue; trackBy: filterIdent\"\n [options]=\"categoryFilterValues.get(filter.key)\"\n [inputFormControl]=\"filter.value\"\n [label] = \"'filter.' + filter.key | translate\" />\n <div class=\"actionbar\">\n <mat-slide-toggle [disabled]=\"isLoading()\" labelPosition=\"before\" [formControl]=\"onlySourcesWithMaterial\" id=\"onlySourcesWithMaterial\">\n show only sources with material\n </mat-slide-toggle>\n <div style=\"flex: 1 1 auto\"></div>\n <metaqs2-datepicker *ngIf=\"showHistoricalData.value\" [disabled]=\"isLoading()\" [inputGroup]=\"range\" />\n <mat-slide-toggle [disabled]=\"isLoading()\" labelPosition=\"before\" [formControl]=\"showHistoricalData\" id=\"showHistoricalData\">\n show historical data\n </mat-slide-toggle>\n <button\n mat-icon-button\n color=\"primary\"\n [disabled]=\"isLoading\"\n (click)=\"refresh()\"\n matTooltip=\"Aktualisiere den IST-Stand\"\n matTooltipShowDelay=\"500\"\n >\n <mat-icon>refresh</mat-icon>\n </button>\n <div style=\"flex: 0 0 {{scroller.getBoundingClientRect().width}}px\"></div>\n <div class=\"scroll-controller\" #scroller> <!-- put the whole toolbar in a fixed container (MQS- -->\n <button mat-raised-button (click)=\"scrollToLeft()\" [disabled]=\"!isLeftScrollable()\" class=\"scroll-button\">\n <mat-icon style=\"margin: 0\">chevron_left</mat-icon>\n </button>\n <button mat-raised-button (click)=\"scrollToRight()\" [disabled]=\"!isRightScrollable()\" class=\"scroll-button\">\n <mat-icon style=\"margin: 0\">chevron_right</mat-icon>\n </button>\n </div>\n </div>\n </mat-card-content>\n</mat-card>\n<mat-card>\n <metaqs2-progress-spinner [displayProgressSpinner]=\"isLoading()\"></metaqs2-progress-spinner>\n <table [class.while-loading]=\"isLoading()\" mat-table [dataSource]=\"recentQualityMatrix$.value.rows\" class=\"quality-matrix\">\n <!-- Define columns of table -->\n <!-- Row Header Column -->\n <ng-container matColumnDef=\"row-header\" sticky>\n <th rowspan=\"2\" mat-header-cell *matHeaderCellDef #issueType>Issue Type</th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n matTooltip=\"{{row.meta.alt_label}}\"\n class=\"row-header mat-cell-level-{{row.meta.level + 1}}\"\n >\n {{\"quality_matrix.\" + row.meta.label | translate }}\n </td>\n </ng-container>\n <!-- one column for the source -->\n <ng-container *ngFor=\"let col of filteredColumns; trackBy:columnIdent\" [matColumnDef]=\"col.id + '_source'\">\n <th [attr.colspan]=\"showHistoricalData.value?2:1\" metaqs2ScrollMarker mat-header-cell *matHeaderCellDef matTooltip=\"{{col.altLabel}}\">{{col.label}}</th>\n </ng-container>\n <!-- /source -->\n <!-- current Data Columns -->\n <ng-container *ngFor=\"let column of filteredColumns; trackBy:columnIdent\" [matColumnDef]=\"column.id + '_current'\">\n <th class=\"recent-data-cell\" mat-header-cell *matHeaderCellDef matTooltip=\"{{column.altLabel}}\">{{ range.controls.end.value?.toLocaleString(DateTime.DATE_SHORT) }} <br>({{column.total}})</th>\n <td class=\"recent-data-cell\" mat-cell *matCellDef=\"let row\" #cell (mouseover)=\"showTooltip(row, column, cell)\" (mouseleave)=\"hideTooltip(cell)\">\n <a *ngIf=\"column.total > 0 else emptyDiv\" class=\"chart-container\" (click)=\"openEditLink( column.label, row.meta.label)\">\n <div>\n <metaqs2-donut-chart [data]=\"getDonutSlices(row, column)\" [borderSize]=\"25\"></metaqs2-donut-chart>\n </div>\n </a>\n <ng-template #emptyDiv>\n <div>-</div>\n </ng-template>\n </td>\n </ng-container>\n <!-- /current Data Columns -->\n <!-- past Data Columns -->\n <ng-container *ngIf=\"showHistoricalData.value\">\n <ng-container *ngFor=\"let column of filteredColumns; trackBy:columnIdent\" [matColumnDef]=\"column.id + '_past'\">\n <th class=\"historic-data-cell\" mat-header-cell\n *matHeaderCellDef>{{ range.controls.start.value?.toLocaleString(DateTime.DATE_SHORT) }}\n <br>{{ getPastColumn(column.id)?.total }}\n </th>\n <td class=\"historic-data-cell\" mat-cell *matCellDef=\"let row\">\n <ng-container *ngIf=\"getTrend(row, column) as trend\">\n <span [ngClass]=\"trend.trend\">\n <mat-icon aria-hidden=\"false\" [attr.aria-label]=\"trend.trend\" [fontIcon]=\"trend.trend!\" />\n {{ trend.delta }}\n </span>\n </ng-container>\n\n </td>\n </ng-container>\n </ng-container>\n <!-- /past Data Columns -->\n\n <!-- Generate actual table -->\n <tr mat-header-row *matHeaderRowDef=\"['row-header'].concat( sourceColumns); sticky: true;\"></tr>\n <tr mat-header-row *matHeaderRowDef=\"allDataColumns; sticky: true;\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: ['row-header'].concat(allDataColumns)\"></tr>\n </table>\n</mat-card>\n", styles: [".while-loading{filter:blur(2px)}mat-card-actions>mat-slide-toggle{margin-left:20px}.row{flex-grow:1;display:flex;align-items:center}table{width:100%;overflow-y:auto}table .scroll{flex-grow:1;overflow-y:auto}table th{vertical-align:top;padding:.375rem}table th:not(:last-child){border-right:1px solid #e4e4e4}table tr:first-child>th:first-child{text-align:left}table td:first-child{text-align:left}.cell{flex:1}.mat-mdc-cell{padding-top:5px}.mat-mdc-cell,.mat-mdc-header-cell{padding-left:5px;text-align:center}.mat-mdc-cell a.chart-container,.mat-mdc-header-cell a.chart-container{display:flex;justify-content:center}.mat-mdc-cell .trending_up,.mat-mdc-header-cell .trending_up{color:#4abeff}.mat-mdc-cell .trending_down,.mat-mdc-header-cell .trending_down{color:#c20808}.recent-data-cell,.mat-column-row-header{border-right:1px solid #e4e4e4}.mat-header-cell-label{color:#000;padding-left:30px;padding-right:30px;justify-content:left;border-bottom:1px solid #e4e4e4;font-style:normal;font-weight:500;font-size:110%;background:#ddf0fb;text-align:left}.mat-header-cell-label>div{display:flex;font-weight:700;font-style:normal;justify-content:left}.mat-header-cell-small{padding-left:5px;padding-right:5px;justify-content:left;font-style:normal;font-weight:400;font-size:105%;background:#ddf0fb;border-top:1px solid #e4e4e4;border-bottom:1px solid #e4e4e4}.mat-mdc-cell a{cursor:pointer;display:flex;align-items:center;justify-content:left}.mat-mdc-cell a>mat-icon{padding-right:5px;font-size:22px;height:20px;opacity:.75}.mat-mdc-cell a>mat-icon:hover,.mat-mdc-cell a>mat-icon:focus{text-decoration:none}.mat-mdc-cell .number{display:flex;height:47px;justify-content:left;align-items:center;padding-left:15px}.mat-mdc-cell .row-header{display:flex;height:47px;max-height:47px;justify-content:left;align-items:center;padding-left:15px}.mat-mdc-cell .row-header-sum{display:flex;height:47px;max-height:47px;justify-content:left;align-items:center;border-right:5px solid #bdbdbd}.mat-mdc-card{width:100%;box-shadow:none}.mat-mdc-card ::ng-deep mat-card-header{align-items:center}.mat-mdc-card ::ng-deep mat-card-header .mat-card-header-text{flex-grow:1;margin:0}.mat-mdc-card ::ng-deep mat-card-header .mat-card-header-text mat-card-title{padding-top:20px;font-size:120%}.mat-mdc-card ::ng-deep mat-card-header .mat-card-header-text mat-card-title .count{font-size:80%;color:#888}.mat-mdc-card .source-header{font-style:normal;font-weight:400;font-size:20px;height:30px;width:60%}.mat-mdc-card .source-header .robot-explanation{font-size:15px}.mat-mdc-card .scroll{flex-grow:1;overflow-y:auto}.mat-header-cell-scope{color:#545454}.mat-mdc-header-row{height:70px;max-height:70px;min-height:56px}:host{overflow:auto}:host ::ng-deep thead{border:10px solid #ff0000;position:relative;z-index:1}.mat-cell-level-1{padding-left:20px!important}.mat-cell-level-2{padding-left:40px!important}.mat-cell-level-3{padding-left:60px!important}.mat-cell-level-4{padding-left:80px!important}.mat-cell-level-5{padding-left:100px!important}.mat-cell-level-6{padding-left:120px!important}.mat-cell-level-7{padding-left:140px!important}.mat-cell-level-8{padding-left:160px!important}.actionbar{flex:1 1 auto;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;gap:.5rem}.scroll-controller{position:fixed;right:.5rem;z-index:100;display:flex;flex-direction:row;justify-content:space-between;align-items:center;gap:.5rem}.scroll-button{min-width:0;padding-left:.25rem;padding-right:.25rem;text-align:center;height:1.75rem}.toolbar{display:flex;flex-direction:row;justify-content:flex-start;align-items:stretch;gap:.5rem}\n"], dependencies: [{ kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "component", type: QualityMatrixFilterComponent, selector: "metaqs2-qm-filter", inputs: ["options", "inputFormControl", "label", "multiple"], outputs: ["changedFilters"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: DatepickerComponent, selector: "metaqs2-datepicker", inputs: ["disabled", "inputGroup"] }, { kind: "component", type: MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: ProgressSpinnerComponent, selector: "metaqs2-progress-spinner", inputs: ["color", "diameter", "strokeWidth", "backdropEnabled", "positionGloballyCenter", "displayProgressSpinner"] }, { kind: "component", type: MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: MatCellDef, selector: "[matCellDef]" }, { kind: "component", type: MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: DonutChartComponent, selector: "metaqs2-donut-chart", inputs: ["radius", "viewBox", "borderSize", "strokeWidth", "data"] }, { kind: "directive", type: ScrollMarkerDirective, selector: "[metaqs2ScrollMarker]" }] }); }
|
|
363
359
|
}
|
|
364
360
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: QualityMatrixComponent, decorators: [{
|
|
365
361
|
type: Component,
|
|
@@ -394,8 +390,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
394
390
|
MatIconButton,
|
|
395
391
|
DonutChartComponent,
|
|
396
392
|
ScrollMarkerDirective,
|
|
397
|
-
], template: "<mat-card appearance=\"raised\">\n <mat-card-header *ngIf=\"pageTitle\">\n <mat-card-title>\n Qualit\u00E4tsmetrik: {{ pageTitle | translate }}{{isLoading() ? \": Lade neue Daten.\" : \"\"}}</mat-card-title\n >\n </mat-card-header>\n <mat-card-content class=\"toolbar\">\n <metaqs2-qm-filter *ngFor=\"let filter of categoryControls.controls | keyvalue; trackBy: filterIdent\"\n [options]=\"categoryFilterValues.get(filter.key)\"\n [inputFormControl]=\"filter.value\"\n [label] = \"'filter.' + filter.key | translate\" />\n <div class=\"actionbar\">\n <
|
|
398
|
-
}], ctorParameters: () => [{ type: i1.MetaApiService }, { type: i2.EditorialLinkService }, { type: i3.Overlay }, { type: i4.TooltipService }], propDecorators: {
|
|
393
|
+
], template: "<mat-card appearance=\"raised\">\n <mat-card-header *ngIf=\"pageTitle\">\n <mat-card-title>\n Qualit\u00E4tsmetrik: {{ pageTitle | translate }}{{isLoading() ? \": Lade neue Daten.\" : \"\"}}</mat-card-title\n >\n </mat-card-header>\n <mat-card-content class=\"toolbar\">\n <metaqs2-qm-filter *ngFor=\"let filter of categoryControls.controls | keyvalue; trackBy: filterIdent\"\n [options]=\"categoryFilterValues.get(filter.key)\"\n [inputFormControl]=\"filter.value\"\n [label] = \"'filter.' + filter.key | translate\" />\n <div class=\"actionbar\">\n <mat-slide-toggle [disabled]=\"isLoading()\" labelPosition=\"before\" [formControl]=\"onlySourcesWithMaterial\" id=\"onlySourcesWithMaterial\">\n show only sources with material\n </mat-slide-toggle>\n <div style=\"flex: 1 1 auto\"></div>\n <metaqs2-datepicker *ngIf=\"showHistoricalData.value\" [disabled]=\"isLoading()\" [inputGroup]=\"range\" />\n <mat-slide-toggle [disabled]=\"isLoading()\" labelPosition=\"before\" [formControl]=\"showHistoricalData\" id=\"showHistoricalData\">\n show historical data\n </mat-slide-toggle>\n <button\n mat-icon-button\n color=\"primary\"\n [disabled]=\"isLoading\"\n (click)=\"refresh()\"\n matTooltip=\"Aktualisiere den IST-Stand\"\n matTooltipShowDelay=\"500\"\n >\n <mat-icon>refresh</mat-icon>\n </button>\n <div style=\"flex: 0 0 {{scroller.getBoundingClientRect().width}}px\"></div>\n <div class=\"scroll-controller\" #scroller> <!-- put the whole toolbar in a fixed container (MQS- -->\n <button mat-raised-button (click)=\"scrollToLeft()\" [disabled]=\"!isLeftScrollable()\" class=\"scroll-button\">\n <mat-icon style=\"margin: 0\">chevron_left</mat-icon>\n </button>\n <button mat-raised-button (click)=\"scrollToRight()\" [disabled]=\"!isRightScrollable()\" class=\"scroll-button\">\n <mat-icon style=\"margin: 0\">chevron_right</mat-icon>\n </button>\n </div>\n </div>\n </mat-card-content>\n</mat-card>\n<mat-card>\n <metaqs2-progress-spinner [displayProgressSpinner]=\"isLoading()\"></metaqs2-progress-spinner>\n <table [class.while-loading]=\"isLoading()\" mat-table [dataSource]=\"recentQualityMatrix$.value.rows\" class=\"quality-matrix\">\n <!-- Define columns of table -->\n <!-- Row Header Column -->\n <ng-container matColumnDef=\"row-header\" sticky>\n <th rowspan=\"2\" mat-header-cell *matHeaderCellDef #issueType>Issue Type</th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n matTooltip=\"{{row.meta.alt_label}}\"\n class=\"row-header mat-cell-level-{{row.meta.level + 1}}\"\n >\n {{\"quality_matrix.\" + row.meta.label | translate }}\n </td>\n </ng-container>\n <!-- one column for the source -->\n <ng-container *ngFor=\"let col of filteredColumns; trackBy:columnIdent\" [matColumnDef]=\"col.id + '_source'\">\n <th [attr.colspan]=\"showHistoricalData.value?2:1\" metaqs2ScrollMarker mat-header-cell *matHeaderCellDef matTooltip=\"{{col.altLabel}}\">{{col.label}}</th>\n </ng-container>\n <!-- /source -->\n <!-- current Data Columns -->\n <ng-container *ngFor=\"let column of filteredColumns; trackBy:columnIdent\" [matColumnDef]=\"column.id + '_current'\">\n <th class=\"recent-data-cell\" mat-header-cell *matHeaderCellDef matTooltip=\"{{column.altLabel}}\">{{ range.controls.end.value?.toLocaleString(DateTime.DATE_SHORT) }} <br>({{column.total}})</th>\n <td class=\"recent-data-cell\" mat-cell *matCellDef=\"let row\" #cell (mouseover)=\"showTooltip(row, column, cell)\" (mouseleave)=\"hideTooltip(cell)\">\n <a *ngIf=\"column.total > 0 else emptyDiv\" class=\"chart-container\" (click)=\"openEditLink( column.label, row.meta.label)\">\n <div>\n <metaqs2-donut-chart [data]=\"getDonutSlices(row, column)\" [borderSize]=\"25\"></metaqs2-donut-chart>\n </div>\n </a>\n <ng-template #emptyDiv>\n <div>-</div>\n </ng-template>\n </td>\n </ng-container>\n <!-- /current Data Columns -->\n <!-- past Data Columns -->\n <ng-container *ngIf=\"showHistoricalData.value\">\n <ng-container *ngFor=\"let column of filteredColumns; trackBy:columnIdent\" [matColumnDef]=\"column.id + '_past'\">\n <th class=\"historic-data-cell\" mat-header-cell\n *matHeaderCellDef>{{ range.controls.start.value?.toLocaleString(DateTime.DATE_SHORT) }}\n <br>{{ getPastColumn(column.id)?.total }}\n </th>\n <td class=\"historic-data-cell\" mat-cell *matCellDef=\"let row\">\n <ng-container *ngIf=\"getTrend(row, column) as trend\">\n <span [ngClass]=\"trend.trend\">\n <mat-icon aria-hidden=\"false\" [attr.aria-label]=\"trend.trend\" [fontIcon]=\"trend.trend!\" />\n {{ trend.delta }}\n </span>\n </ng-container>\n\n </td>\n </ng-container>\n </ng-container>\n <!-- /past Data Columns -->\n\n <!-- Generate actual table -->\n <tr mat-header-row *matHeaderRowDef=\"['row-header'].concat( sourceColumns); sticky: true;\"></tr>\n <tr mat-header-row *matHeaderRowDef=\"allDataColumns; sticky: true;\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: ['row-header'].concat(allDataColumns)\"></tr>\n </table>\n</mat-card>\n", styles: [".while-loading{filter:blur(2px)}mat-card-actions>mat-slide-toggle{margin-left:20px}.row{flex-grow:1;display:flex;align-items:center}table{width:100%;overflow-y:auto}table .scroll{flex-grow:1;overflow-y:auto}table th{vertical-align:top;padding:.375rem}table th:not(:last-child){border-right:1px solid #e4e4e4}table tr:first-child>th:first-child{text-align:left}table td:first-child{text-align:left}.cell{flex:1}.mat-mdc-cell{padding-top:5px}.mat-mdc-cell,.mat-mdc-header-cell{padding-left:5px;text-align:center}.mat-mdc-cell a.chart-container,.mat-mdc-header-cell a.chart-container{display:flex;justify-content:center}.mat-mdc-cell .trending_up,.mat-mdc-header-cell .trending_up{color:#4abeff}.mat-mdc-cell .trending_down,.mat-mdc-header-cell .trending_down{color:#c20808}.recent-data-cell,.mat-column-row-header{border-right:1px solid #e4e4e4}.mat-header-cell-label{color:#000;padding-left:30px;padding-right:30px;justify-content:left;border-bottom:1px solid #e4e4e4;font-style:normal;font-weight:500;font-size:110%;background:#ddf0fb;text-align:left}.mat-header-cell-label>div{display:flex;font-weight:700;font-style:normal;justify-content:left}.mat-header-cell-small{padding-left:5px;padding-right:5px;justify-content:left;font-style:normal;font-weight:400;font-size:105%;background:#ddf0fb;border-top:1px solid #e4e4e4;border-bottom:1px solid #e4e4e4}.mat-mdc-cell a{cursor:pointer;display:flex;align-items:center;justify-content:left}.mat-mdc-cell a>mat-icon{padding-right:5px;font-size:22px;height:20px;opacity:.75}.mat-mdc-cell a>mat-icon:hover,.mat-mdc-cell a>mat-icon:focus{text-decoration:none}.mat-mdc-cell .number{display:flex;height:47px;justify-content:left;align-items:center;padding-left:15px}.mat-mdc-cell .row-header{display:flex;height:47px;max-height:47px;justify-content:left;align-items:center;padding-left:15px}.mat-mdc-cell .row-header-sum{display:flex;height:47px;max-height:47px;justify-content:left;align-items:center;border-right:5px solid #bdbdbd}.mat-mdc-card{width:100%;box-shadow:none}.mat-mdc-card ::ng-deep mat-card-header{align-items:center}.mat-mdc-card ::ng-deep mat-card-header .mat-card-header-text{flex-grow:1;margin:0}.mat-mdc-card ::ng-deep mat-card-header .mat-card-header-text mat-card-title{padding-top:20px;font-size:120%}.mat-mdc-card ::ng-deep mat-card-header .mat-card-header-text mat-card-title .count{font-size:80%;color:#888}.mat-mdc-card .source-header{font-style:normal;font-weight:400;font-size:20px;height:30px;width:60%}.mat-mdc-card .source-header .robot-explanation{font-size:15px}.mat-mdc-card .scroll{flex-grow:1;overflow-y:auto}.mat-header-cell-scope{color:#545454}.mat-mdc-header-row{height:70px;max-height:70px;min-height:56px}:host{overflow:auto}:host ::ng-deep thead{border:10px solid #ff0000;position:relative;z-index:1}.mat-cell-level-1{padding-left:20px!important}.mat-cell-level-2{padding-left:40px!important}.mat-cell-level-3{padding-left:60px!important}.mat-cell-level-4{padding-left:80px!important}.mat-cell-level-5{padding-left:100px!important}.mat-cell-level-6{padding-left:120px!important}.mat-cell-level-7{padding-left:140px!important}.mat-cell-level-8{padding-left:160px!important}.actionbar{flex:1 1 auto;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;gap:.5rem}.scroll-controller{position:fixed;right:.5rem;z-index:100;display:flex;flex-direction:row;justify-content:space-between;align-items:center;gap:.5rem}.scroll-button{min-width:0;padding-left:.25rem;padding-right:.25rem;text-align:center;height:1.75rem}.toolbar{display:flex;flex-direction:row;justify-content:flex-start;align-items:stretch;gap:.5rem}\n"] }]
|
|
394
|
+
}], ctorParameters: () => [{ type: i1.MetaApiService }, { type: i2.EditorialLinkService }, { type: i3.Overlay }, { type: i4.TooltipService }], propDecorators: { issueTypeHeader: [{
|
|
395
|
+
type: ViewChild,
|
|
396
|
+
args: ['issueType', {
|
|
397
|
+
read: ElementRef,
|
|
398
|
+
static: true,
|
|
399
|
+
}]
|
|
400
|
+
}], scrollMarkers: [{
|
|
401
|
+
type: ViewChildren,
|
|
402
|
+
args: [ScrollMarkerDirective]
|
|
403
|
+
}], pageTitle: [{
|
|
399
404
|
type: Input
|
|
400
405
|
}], onScroll: [{
|
|
401
406
|
type: HostListener,
|
|
@@ -404,4 +409,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
404
409
|
type: HostListener,
|
|
405
410
|
args: ['window:resize']
|
|
406
411
|
}] } });
|
|
407
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVhbGl0eV9tYXRyaXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1tZXRhLXdpZGdldHMtbGliL3NyYy9saWIvY29tcG9uZW50cy9xdWFsaXR5LW1hdHJpeC9xdWFsaXR5X21hdHJpeC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLW1ldGEtd2lkZ2V0cy1saWIvc3JjL2xpYi9jb21wb25lbnRzL3F1YWxpdHktbWF0cml4L3F1YWxpdHktbWF0cml4Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxRQUFRLEVBQ1IsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsWUFBWSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHN0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFaEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUVqQyxPQUFPLEVBQVksWUFBWSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFakYsT0FBTyxFQUNMLDBCQUEwQixFQUMxQix1QkFBdUIsR0FDeEIsTUFBTSxzREFBc0QsQ0FBQztBQUM5RCxPQUFPLEVBQUUsc0JBQXNCLEVBQWMsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEcsT0FBTyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlGLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDaEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGtFQUFrRSxDQUFDO0FBQzVHLE9BQU8sRUFDTCxPQUFPLEVBQ1AsVUFBVSxFQUNWLFlBQVksRUFDWixhQUFhLEVBQ2IsZ0JBQWdCLEVBQ2hCLFlBQVksRUFDWixlQUFlLEVBQ2YsTUFBTSxFQUNOLFNBQVMsRUFDVCxRQUFRLEVBQ1QsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7Ozs7QUFFbEUsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLENBQUM7QUF5QzdCLE1BQU0sT0FBTyxzQkFBc0I7SUF1Q2pDLFlBQ21CLE9BQXVCLEVBQ3ZCLFdBQWlDLEVBQ2pDLE9BQWdCLEVBQ2hCLGNBQThCO1FBSDlCLFlBQU8sR0FBUCxPQUFPLENBQWdCO1FBQ3ZCLGdCQUFXLEdBQVgsV0FBVyxDQUFzQjtRQUNqQyxZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQ2hCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQTFDaEMsUUFBRyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN6QixlQUFVLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLGdCQUFXLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pCLHFCQUFnQixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDekQsc0JBQWlCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNoRCxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsY0FBYyxDQUFDO1lBQzNDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDZCxPQUFPO1lBQ1QsQ0FBQztZQUNELE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUM7WUFFckMsT0FBTyxJQUFJLENBQUMsV0FBVyxFQUFFLEdBQUcsYUFBYSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsR0FBRyxhQUFhLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3RHLENBQUMsQ0FBQyxDQUFDO1FBQ2Msb0JBQWUsR0FBRyxTQUFTLENBQUMsV0FBVyxFQUFFO1lBQ3hELElBQUksRUFBRSxVQUFVO1NBQ2pCLENBQUMsQ0FBQztRQUNILG9CQUFlLEdBQTBCLEVBQUUsQ0FBQztRQUM1QyxxQkFBZ0IsR0FBa0IsRUFBRSxDQUFDO1FBQ3JDLHVCQUFrQixHQUFHLElBQUksV0FBVyxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN2RSw0QkFBdUIsR0FBRyxJQUFJLFdBQVcsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFFM0UsY0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNSLGtCQUFhLEdBQUcsWUFBWSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDNUQseUJBQW9CLEdBQStCLElBQUksR0FBRyxFQUFFLENBQUM7UUFDN0QseUJBQW9CLEdBQUcsSUFBSSxlQUFlLENBQWdCLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFtQixDQUFDLENBQUM7UUFDdEcsdUJBQWtCLEdBQUcsSUFBSSxlQUFlLENBQXVCLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFtQixDQUFDLENBQUM7UUFDM0csVUFBSyxHQUdULElBQUksU0FBUyxDQUFDO1lBQ2pCLEtBQUssRUFBRSxJQUFJLFdBQVcsRUFBRTtZQUN4QixHQUFHLEVBQUUsSUFBSSxXQUFXLEVBQUU7U0FDdkIsQ0FBQyxDQUFDO1FBQ2MsYUFBUSxHQUFHLElBQUksR0FBRyxFQUF1RCxDQUFDO1FBQ3hFLGFBQVEsR0FBRyxRQUFRLENBQUM7UUFFdkMsY0FBUyxHQUFXLGdCQUFnQixDQUFDO1FBUW5DLCtFQUErRTtRQUMvRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxVQUFVLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxXQUFXLENBQUMsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDL0Isd0NBQXdDO1FBQ3hDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFO1lBQ2xHLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzFELENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDM0IsOENBQThDO0lBQ2hELENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxXQUFXLENBQUMsTUFBYyxFQUFFLElBQTZDO1FBQ3ZFLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUNsQixDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxJQUFJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2hCLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2xDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6RSxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzdCLENBQUM7SUFFTyxnQ0FBZ0MsQ0FBQyxRQUF3QjtRQUMvRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUM5RyxxQ0FBcUM7UUFDckMsSUFBSSxDQUFDLGVBQWUsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztRQUNyRixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQsdUJBQXVCO1FBQ3JCLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNoRSxJQUFJLENBQUMsb0NBQW9DLEVBQUUsQ0FBQztRQUM5QyxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUMxRCxJQUFJLFdBQVcsRUFBRSxDQUFDO2dCQUNoQixNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLFlBQVksQ0FBQyxFQUFFLEtBQU0sRUFBRTtvQkFDaEcsSUFBSSxFQUFFLEtBQUs7aUJBQ1osQ0FBQyxDQUFDO2dCQUNILE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssVUFBVSxDQUFDLEVBQUUsS0FBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7Z0JBQy9HLHdEQUF3RDtnQkFDeEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLElBQUksV0FBVyxDQUFXLFNBQVMsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFO29CQUMxRixTQUFTLEVBQUUsS0FBSztpQkFDakIsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxJQUFJLFdBQVcsQ0FBVyxPQUFPLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQy9HLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyx1QkFBdUI7UUFDN0IsSUFBSSxDQUFDLE9BQU87YUFDVCxrQkFBa0IsRUFBRTthQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2IsU0FBUyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDckIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUN6QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxXQUFXLENBQUMsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUU7b0JBQ3pGLFNBQVMsRUFBRSxLQUFLO2lCQUNqQixDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FDM0IsTUFBTSxDQUFDLEtBQUssRUFDWixNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDOUIsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3hDLENBQUMsQ0FBQyxDQUNILENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVk7YUFDL0IsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7YUFDMUIsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxvQ0FBb0MsRUFBRSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVPLG1CQUFtQjtRQUN6QixJQUFJLENBQUMsb0JBQW9CO2FBQ3RCLElBQUksQ0FDSCxrQkFBa0IsRUFBRSxFQUNwQixNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFDM0IsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDckY7YUFDQSxTQUFTLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQ3JDLE1BQU0sSUFBSSxHQUFhLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBQ3JELElBQUksQ0FBQyxJQUFJLENBQUM7Z0JBQ1IsS0FBSyxFQUFFLE1BQU07Z0JBQ2IsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLENBQVcsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUM7YUFDdkcsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLDZCQUE2QixDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4RSxDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEIsQ0FBQztJQUVPLGNBQWM7UUFDcEIsTUFBTSxJQUFJLEdBQWEsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDckQsSUFBSSxDQUFDLElBQUksQ0FBQztZQUNSLEtBQUssRUFBRSxNQUFNO1lBQ2IsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLENBQVcsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUM7U0FDckcsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLDZCQUE2QixDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRU8sc0JBQXNCO1FBQzVCLE1BQU0sSUFBSSxHQUFhLEVBQUUsQ0FBQztRQUMxQixLQUFLLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMxRSxJQUFJLGFBQWEsR0FBa0IsRUFBRSxDQUFDO1lBQ3RDLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDNUIsYUFBYSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7WUFDOUMsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTyxvQ0FBb0M7UUFDMUM7Ozs7V0FJRztRQUNILElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLFFBQVEsQ0FBQztZQUNQLE1BQU0sRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDL0IsU0FBUyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUU7U0FDakMsQ0FBQzthQUNDLElBQUksQ0FDSCxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUIsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7WUFDL0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzFGLENBQUMsQ0FBQyxDQUNIO2FBQ0EsU0FBUyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtZQUNuQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdkMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsWUFBWSxDQUFDLE1BQWMsRUFBRSxLQUFhO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyw4Q0FBOEMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNySCxDQUFDO0lBRUQsK0VBQStFO0lBQy9FLFdBQVcsQ0FBQyxNQUFjLEVBQUUsR0FBd0I7UUFDbEQsT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTztRQUNYLGdDQUFnQztRQUNoQyxJQUFJLENBQUMsb0NBQW9DLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRUQsYUFBYSxDQUFDLFFBQWdCO1FBQzVCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLFFBQVEsQ0FBQyxDQUFDO0lBQy9FLENBQUM7SUFFRCxRQUFRLENBQUMsR0FBcUIsRUFBRSxNQUEyQjtRQUN6RCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDM0MsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDckQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzdGLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDekYsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUM5QixPQUFPLEVBQUUsQ0FBQztZQUNaLENBQUM7WUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUN0QixDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSztnQkFDckQsQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FDcEUsQ0FBQztZQUVGLE1BQU0sS0FBSyxHQUFHLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUM7WUFDMUYsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUMxQixDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztJQUNILENBQUM7SUFFRCxjQUFjLENBQUMsR0FBcUIsRUFBRSxNQUEyQjtRQUMvRCxNQUFNLGVBQWUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUM7UUFDekQsTUFBTSxpQkFBaUIsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUM7UUFDN0QsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLEtBQUssR0FBRyxlQUFlLEdBQUcsaUJBQWlCLENBQUM7UUFDeEUsSUFBSSxrQkFBa0IsR0FBRyxDQUFDLENBQUM7UUFDM0IsSUFBSSxvQkFBb0IsR0FBRyxDQUFDLENBQUM7UUFDN0IsMEVBQTBFO1FBRTFFLElBQUksTUFBTSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN2QixrQkFBa0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxHQUFHLGVBQWUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN4RSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxHQUFHLGlCQUFpQixDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlFLENBQUM7UUFDRCxNQUFNLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxrQkFBa0IsR0FBRyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsbUJBQW1CO1FBQ25GLE9BQU87WUFDTDtnQkFDRSxFQUFFLEVBQUUsQ0FBQztnQkFDTCxPQUFPLEVBQUUsSUFBSTtnQkFDYixLQUFLLEVBQUUsU0FBUztnQkFDaEIsS0FBSyxFQUFFLEdBQUcsSUFBSSxPQUFPLFlBQVksR0FBRztnQkFDcEMsWUFBWSxFQUFFLEdBQUcsWUFBWSw2QkFBNkI7YUFDM0Q7WUFDRDtnQkFDRSxFQUFFLEVBQUUsQ0FBQztnQkFDTCxPQUFPLEVBQUUsb0JBQW9CO2dCQUM3QixLQUFLLEVBQUUsU0FBUztnQkFDaEIsS0FBSyxFQUFFLEdBQUcsb0JBQW9CLE9BQU8saUJBQWlCLEdBQUc7Z0JBQ3pELFlBQVksRUFBRSxHQUFHLGlCQUFpQix3REFBd0Q7YUFDM0Y7WUFDRDtnQkFDRSxFQUFFLEVBQUUsQ0FBQztnQkFDTCxPQUFPLEVBQUUsa0JBQWtCO2dCQUMzQixLQUFLLEVBQUUsU0FBUztnQkFDaEIsS0FBSyxFQUFFLEdBQUcsa0JBQWtCLE9BQU8sZUFBZSxHQUFHO2dCQUNyRCxZQUFZLEVBQUUsR0FBRyxlQUFlLCtDQUErQzthQUNoRjtTQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsV0FBVyxDQUFDLEdBQXFCLEVBQUUsTUFBMkIsRUFBRSxJQUFpQjtRQUMvRSxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxZQUFZLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDaEYsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFFLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUM3QyxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLDBCQUEwQixFQUFFO1lBQ3hFLFlBQVksRUFBRSxnQkFBZ0I7WUFDOUIsV0FBVyxFQUFFLGdCQUFnQjtZQUM3QixJQUFJLEVBQUU7Z0JBQ0osS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO2dCQUNuQixJQUFJLEVBQUUsdUJBQXVCLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7YUFDaEU7WUFDRCxhQUFhLEVBQUU7Z0JBQ2IsV0FBVyxFQUFFLEtBQUs7Z0JBQ2xCLGdCQUFnQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUMsYUFBYSxDQUFDLHNCQUFzQixDQUFDO2dCQUN6RyxtQkFBbUIsRUFBRSxJQUFJO2dCQUN6QixVQUFVLEVBQUUscUJBQXFCO2FBQ2xDO1lBQ0QsT0FBTyxFQUFFLEdBQUcsRUFBRTtnQkFDWixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM3QixDQUFDO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsV0FBVyxDQUFDLElBQWlCO1FBQzNCLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFFRCw2QkFBNkIsQ0FBQyxPQUFnQjtRQUM1QyxJQUFJLE9BQU8sQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUNsSCxtREFBbUQ7WUFDbkQsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUMzQixPQUFPLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQztZQUNuQyxDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUMsNkJBQTZCLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ25FLENBQUM7SUFDSCxDQUFDO0lBRUQsYUFBYTtRQUNYLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLDZCQUE2QixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBNEIsQ0FBQyxDQUFDO1FBQ25HLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3RCLE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLGNBQWMsQ0FBQztRQUMzQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDZCxPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFFckMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLFFBQVEsQ0FDL0MsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBNkIsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLElBQUksR0FBRyxhQUFhLENBQ3ZHLENBQUM7UUFFRixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakIsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztRQUVqRyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUM7WUFDeEIsSUFBSSxFQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsYUFBNkIsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLElBQUksR0FBRyxlQUFlO1lBQ3ZHLFFBQVEsRUFBRSxRQUFRO1NBQ25CLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxZQUFZO1FBQ1YsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsNkJBQTZCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUE0QixDQUFDLENBQUM7UUFDbkcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDdEIsT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsY0FBYyxDQUFDO1FBQzNDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNkLE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQztRQUVyQyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztRQUVqRyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsSUFBSSxDQUM1QyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUE2QixDQUFDLHFCQUFxQixFQUFFLENBQUMsS0FBSyxHQUFHLGVBQWUsQ0FDMUcsQ0FBQztRQUVGLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNsQixPQUFPO1FBQ1QsQ0FBQztRQUVELGdCQUFnQixDQUFDLFFBQVEsQ0FBQztZQUN4QixJQUFJLEVBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxhQUE2QixDQUFDLHFCQUFxQixFQUFFLENBQUMsS0FBSyxHQUFHLGFBQWE7WUFDdkcsUUFBUSxFQUFFLFFBQVE7U0FDbkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUlELFFBQVE7UUFDTixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQTRCLENBQUMsQ0FBQztRQUNuRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN0QixPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3JELENBQUM7K0dBellVLHNCQUFzQjttR0FBdEIsc0JBQXNCLG1NQXJDdEIsQ0FBQyxjQUFjLENBQUMsbUhBb0RuQixVQUFVLGdFQVE0QixxQkFBcUIsZ0VDcEhyRSxrMktBdUdBLGlsSEQzQ0ksT0FBTyxvR0FDUCxhQUFhLDREQUNiLFlBQVksNkZBQ1osY0FBYyw2REFDZCw0QkFBNEIsd0pBQzVCLGVBQWUsdUZBQ2YsWUFBWSxpREFDWixPQUFPLDJJQUNQLG1CQUFtQixtR0FDbkIsY0FBYyx5VUFDZCxtQkFBbUIsMFRBQ25CLHdCQUF3QiwwTEFDeEIsUUFBUSxnR0FDUixVQUFVLGlSQUNWLE9BQU8sbUVBQ1AsWUFBWSxxRkFDWixhQUFhLGlGQUNiLE9BQU8sb0ZBQ1AsWUFBWSwyR0FDWixNQUFNLHVGQUNOLGVBQWUsb0hBQ2YsU0FBUyx1R0FDVCxnQkFBZ0IsK0RBQ2hCLE9BQU8sbUhBQ1AsSUFBSSw2RkFDSixVQUFVLHlEQUNWLFNBQVMsaUxBQ1QsYUFBYSw2RkFDYixtQkFBbUIsb0lBQ25CLHFCQUFxQjs7NEZBSVosc0JBQXNCO2tCQXZDbEMsU0FBUzsrQkFDRSwyQkFBMkIsYUFDMUIsQ0FBQyxjQUFjLENBQUMsY0FDZixJQUFJLFdBRVA7d0JBQ1AsT0FBTzt3QkFDUCxhQUFhO3dCQUNiLFlBQVk7d0JBQ1osY0FBYzt3QkFDZCw0QkFBNEI7d0JBQzVCLGVBQWU7d0JBQ2YsWUFBWTt3QkFDWixPQUFPO3dCQUNQLG1CQUFtQjt3QkFDbkIsY0FBYzt3QkFDZCxtQkFBbUI7d0JBQ25CLHdCQUF3Qjt3QkFDeEIsUUFBUTt3QkFDUixVQUFVO3dCQUNWLE9BQU87d0JBQ1AsWUFBWTt3QkFDWixhQUFhO3dCQUNiLE9BQU87d0JBQ1AsWUFBWTt3QkFDWixNQUFNO3dCQUNOLGVBQWU7d0JBQ2YsU0FBUzt3QkFDVCxnQkFBZ0I7d0JBQ2hCLE9BQU87d0JBQ1AsSUFBSTt3QkFDSixVQUFVO3dCQUNWLFNBQVM7d0JBQ1QsYUFBYTt3QkFDYixtQkFBbUI7d0JBQ25CLHFCQUFxQjtxQkFDdEI7eUtBd0NELFNBQVM7c0JBRFIsS0FBSztnQkE4Vk4sUUFBUTtzQkFGUCxZQUFZO3VCQUFDLGVBQWU7O3NCQUM1QixZQUFZO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdDaGVja2VkLFxuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBFbGVtZW50UmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIGluamVjdCxcbiAgSW5wdXQsXG4gIHNpZ25hbCxcbiAgdmlld0NoaWxkLFxuICB2aWV3Q2hpbGRyZW4sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgZmluYWxpemUsIHRha2UsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE1ldGFBcGlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbWV0YS1hcGkuc2VydmljZSc7XG5pbXBvcnQgeyBGaWx0ZXIsIEZpbHRlclZhbHVlLCBRdWFsaXR5TWF0cml4LCBRdWFsaXR5TWF0cml4SGVhZGVyLCBRdWFsaXR5TWF0cml4Um93IH0gZnJvbSAnLi4vLi4vamF2YS1hcGknO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgRm9ybVJlY29yZCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEVkaXRvcmlhbExpbmtTZXJ2aWNlIH0gZnJvbSAnLi4vZWRpdG9yaWFsLWxpbmstc2VydmljZS9lZGl0b3JpYWwtbGluay5zZXJ2aWNlJztcbmltcG9ydCB7IERhdGVUaW1lIH0gZnJvbSAnbHV4b24nO1xuaW1wb3J0IHsgRG9udXRTbGljZSB9IGZyb20gJy4uL2RvbnV0LWNoYXJ0L2RvbnV0LWNoYXJ0Lm1vZGVsJztcbmltcG9ydCB7IEtleVZhbHVlLCBLZXlWYWx1ZVBpcGUsIE5nQ2xhc3MsIE5nRm9yT2YsIE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgT3ZlcmxheSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7XG4gIERvbnV0Q2hhcnRUb29sdGlwQ29tcG9uZW50LFxuICB0cmFuc2Zvcm1Eb251dENoYXJ0RGF0YSxcbn0gZnJvbSAnLi4vZG9udXQtY2hhcnQtdG9vbHRpcC9kb251dC1jaGFydC10b29sdGlwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBjZW50ZXJQb3NpdGlvblN0cmF0ZWd5LCBUb29sdGlwUmVmLCBUb29sdGlwU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvdG9vbHRpcC5zZXJ2aWNlJztcbmltcG9ydCB7IE1hdENhcmQsIE1hdENhcmRDb250ZW50LCBNYXRDYXJkSGVhZGVyLCBNYXRDYXJkVGl0bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jYXJkJztcbmltcG9ydCB7IFF1YWxpdHlNYXRyaXhGaWx0ZXJDb21wb25lbnQgfSBmcm9tICcuLi9maWx0ZXIvcXVhbGl0eS1tYXRyaXgtZmlsdGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IE1hdEljb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IERhdGVwaWNrZXJDb21wb25lbnQgfSBmcm9tICcuLi9maWx0ZXIvZGF0ZXBpY2tlci9kYXRlcGlja2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXRTbGlkZVRvZ2dsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NsaWRlLXRvZ2dsZSc7XG5pbXBvcnQgeyBQcm9ncmVzc1NwaW5uZXJDb21wb25lbnQgfSBmcm9tICcuLi9sb2FkaW5nX2luZGljYXRvci9wcm9ncmVzcy1zcGlubmVyL3Byb2dyZXNzLXNwaW5uZXIuY29tcG9uZW50JztcbmltcG9ydCB7XG4gIE1hdENlbGwsXG4gIE1hdENlbGxEZWYsXG4gIE1hdENvbHVtbkRlZixcbiAgTWF0SGVhZGVyQ2VsbCxcbiAgTWF0SGVhZGVyQ2VsbERlZixcbiAgTWF0SGVhZGVyUm93LFxuICBNYXRIZWFkZXJSb3dEZWYsXG4gIE1hdFJvdyxcbiAgTWF0Um93RGVmLFxuICBNYXRUYWJsZVxufSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XG5pbXBvcnQgeyBNYXRUb29sdGlwIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XG5pbXBvcnQgeyBNYXRCdXR0b24sIE1hdEljb25CdXR0b24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgRG9udXRDaGFydENvbXBvbmVudCB9IGZyb20gJy4uL2RvbnV0LWNoYXJ0L2RvbnV0LWNoYXJ0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTY3JvbGxNYXJrZXJEaXJlY3RpdmUgfSBmcm9tICcuL3Njcm9sbC1tYXJrZXIuZGlyZWN0aXZlJztcblxuY29uc3Qgb3BlbkNsb3NlVGltZW91dCA9IDE1MDtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbWV0YXFzMi1xdWFsaXR5LW1hdHJpeC12MicsXG4gIHByb3ZpZGVyczogW1Rvb2x0aXBTZXJ2aWNlXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgdGVtcGxhdGVVcmw6ICcuL3F1YWxpdHktbWF0cml4Lmh0bWwnLFxuICBpbXBvcnRzOiBbXG4gICAgTWF0Q2FyZCxcbiAgICBNYXRDYXJkSGVhZGVyLFxuICAgIE1hdENhcmRUaXRsZSxcbiAgICBNYXRDYXJkQ29udGVudCxcbiAgICBRdWFsaXR5TWF0cml4RmlsdGVyQ29tcG9uZW50LFxuICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICBLZXlWYWx1ZVBpcGUsXG4gICAgTWF0SWNvbixcbiAgICBEYXRlcGlja2VyQ29tcG9uZW50LFxuICAgIE1hdFNsaWRlVG9nZ2xlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgUHJvZ3Jlc3NTcGlubmVyQ29tcG9uZW50LFxuICAgIE1hdFRhYmxlLFxuICAgIE1hdFRvb2x0aXAsXG4gICAgTWF0Q2VsbCxcbiAgICBNYXRDb2x1bW5EZWYsXG4gICAgTWF0SGVhZGVyQ2VsbCxcbiAgICBOZ0NsYXNzLFxuICAgIE1hdEhlYWRlclJvdyxcbiAgICBNYXRSb3csXG4gICAgTWF0SGVhZGVyUm93RGVmLFxuICAgIE1hdFJvd0RlZixcbiAgICBNYXRIZWFkZXJDZWxsRGVmLFxuICAgIE5nRm9yT2YsXG4gICAgTmdJZixcbiAgICBNYXRDZWxsRGVmLFxuICAgIE1hdEJ1dHRvbixcbiAgICBNYXRJY29uQnV0dG9uLFxuICAgIERvbnV0Q2hhcnRDb21wb25lbnQsXG4gICAgU2Nyb2xsTWFya2VyRGlyZWN0aXZlLFxuICBdLFxuICBzdHlsZVVybHM6IFsnLi9xdWFsaXR5X21hdHJpeC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFF1YWxpdHlNYXRyaXhDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdDaGVja2VkIHtcbiAgcHJpdmF0ZSByZWFkb25seSByZWYgPSBpbmplY3QoRWxlbWVudFJlZik7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2Nyb2xsTGVmdCA9IHNpZ25hbCgwKTtcbiAgcHJpdmF0ZSByZWFkb25seSBzY3JvbGxXaWR0aCA9IHNpZ25hbCgwKTtcbiAgcHVibGljIHJlYWRvbmx5IGlzTGVmdFNjcm9sbGFibGUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnNjcm9sbExlZnQoKSA+IDApO1xuICBwdWJsaWMgcmVhZG9ubHkgaXNSaWdodFNjcm9sbGFibGUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qgdmlld3BvcnQgPSBnbG9iYWxUaGlzLnZpc3VhbFZpZXdwb3J0O1xuICAgIGlmICghdmlld3BvcnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgdmlld3BvcnRXaWR0aCA9IHZpZXdwb3J0LndpZHRoO1xuXG4gICAgcmV0dXJuIHRoaXMuc2Nyb2xsV2lkdGgoKSA+IHZpZXdwb3J0V2lkdGggJiYgdGhpcy5zY3JvbGxMZWZ0KCkgKyB2aWV3cG9ydFdpZHRoIDwgdGhpcy5zY3JvbGxXaWR0aCgpO1xuICB9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBpc3N1ZVR5cGVIZWFkZXIgPSB2aWV3Q2hpbGQoJ2lzc3VlVHlwZScsIHtcbiAgICByZWFkOiBFbGVtZW50UmVmLFxuICB9KTtcbiAgZmlsdGVyZWRDb2x1bW5zOiBRdWFsaXR5TWF0cml4SGVhZGVyW10gPSBbXTtcbiAgZGF0YXRhYmxlQ29sdW1uczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICBzaG93SGlzdG9yaWNhbERhdGEgPSBuZXcgRm9ybUNvbnRyb2woeyB2YWx1ZTogZmFsc2UsIGRpc2FibGVkOiB0cnVlIH0pO1xuICBvbmx5U291cmNlc1dpdGhNYXRlcmlhbCA9IG5ldyBGb3JtQ29udHJvbCh7IHZhbHVlOiB0cnVlLCBkaXNhYmxlZDogdHJ1ZSB9KTtcbiAgY2F0ZWdvcnlDb250cm9sczogRm9ybVJlY29yZDxGb3JtQ29udHJvbDxzdHJpbmdbXT4+O1xuICBpc0xvYWRpbmcgPSBzaWduYWwodHJ1ZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2Nyb2xsTWFya2VycyA9IHZpZXdDaGlsZHJlbihTY3JvbGxNYXJrZXJEaXJlY3RpdmUpO1xuICByZWFkb25seSBjYXRlZ29yeUZpbHRlclZhbHVlczogTWFwPHN0cmluZywgRmlsdGVyVmFsdWVbXT4gPSBuZXcgTWFwKCk7XG4gIHJlYWRvbmx5IHJlY2VudFF1YWxpdHlNYXRyaXgkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxRdWFsaXR5TWF0cml4Pih7IGNvbHVtbnM6IFtdLCByb3dzOiBbXSB9IGFzIFF1YWxpdHlNYXRyaXgpO1xuICByZWFkb25seSBwYXN0UXVhbGl0eU1hdHJpeCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFF1YWxpdHlNYXRyaXggfCBudWxsPih7IGNvbHVtbnM6IFtdLCByb3dzOiBbXSB9IGFzIFF1YWxpdHlNYXRyaXgpO1xuICByZWFkb25seSByYW5nZTogRm9ybUdyb3VwPHtcbiAgICBzdGFydDogRm9ybUNvbnRyb2w8RGF0ZVRpbWU8Ym9vbGVhbj4+O1xuICAgIGVuZDogRm9ybUNvbnRyb2w8RGF0ZVRpbWU8Ym9vbGVhbj4+O1xuICB9PiA9IG5ldyBGb3JtR3JvdXAoe1xuICAgIHN0YXJ0OiBuZXcgRm9ybUNvbnRyb2woKSxcbiAgICBlbmQ6IG5ldyBGb3JtQ29udHJvbCgpLFxuICB9KTtcbiAgcHJpdmF0ZSByZWFkb25seSB0b29sdGlwcyA9IG5ldyBNYXA8SFRNTEVsZW1lbnQsIFRvb2x0aXBSZWY8RG9udXRDaGFydFRvb2x0aXBDb21wb25lbnQ+PigpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgRGF0ZVRpbWUgPSBEYXRlVGltZTtcbiAgQElucHV0KClcbiAgcGFnZVRpdGxlOiBzdHJpbmcgPSAnUXVhbGl0eSBNYXRyaXgnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbWV0YUFwaTogTWV0YUFwaVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBsaW5rU2VydmljZTogRWRpdG9yaWFsTGlua1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBvdmVybGF5OiBPdmVybGF5LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdG9vbHRpcFNlcnZpY2U6IFRvb2x0aXBTZXJ2aWNlXG4gICkge1xuICAgIC8vIGEgRm9ybVJlY29yZCBoYXMgdG8gYmUgaW5pdGlhbGl6ZWQgd2l0aCBvbmUgc291cmNlIHRvIGRldGVybWluZSBpdHMgdHlwZSA6LShcbiAgICB0aGlzLmNhdGVnb3J5Q29udHJvbHMgPSBuZXcgRm9ybVJlY29yZCh7IGR1bW15OiBuZXcgRm9ybUNvbnRyb2woW10sIHsgbm9uTnVsbGFibGU6IHRydWUgfSkgfSk7XG4gICAgdGhpcy5jYXRlZ29yeUNvbnRyb2xzLnJlbW92ZUNvbnRyb2woJ2R1bW15JywgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIHRoaXMucmVnaXN0ZXJDYXRlZ29yeUZpbHRlcnMoKTtcbiAgICB0aGlzLnJlZ2lzdGVyRGF0ZVJhbmdlRmlsdGVyKCk7XG4gICAgLy8gVE9ETzogY29uc2lkZXIgYSByZWdpc3RlcigpIGZ1bmN0aW9uc1xuICAgIHRoaXMub25seVNvdXJjZXNXaXRoTWF0ZXJpYWwudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpLnN1YnNjcmliZSgob25seVdpdGhNYXRlcmlhbCkgPT4ge1xuICAgICAgdGhpcy5maWx0ZXJUYWJsZUJ5U291cmNlc1dpdGhNYXRlcmlhbChvbmx5V2l0aE1hdGVyaWFsKTtcbiAgICB9KTtcbiAgICB0aGlzLm9uTG9hZGVkRGF0YUNoYW5nZXMoKTtcbiAgICAvL3RoaXMubG9hZERhdGFXaXRoQ3VycmVudGx5U2VsZWN0ZWRGaWx0ZXJzKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XG4gICAgdGhpcy5vblNjcm9sbCgpO1xuICB9XG5cbiAgZmlsdGVySWRlbnQoX2luZGV4OiBudW1iZXIsIGl0ZW06IEtleVZhbHVlPHN0cmluZywgRm9ybUNvbnRyb2w8c3RyaW5nW10+Pikge1xuICAgIHJldHVybiBpdGVtLmtleTtcbiAgfVxuXG4gIGdldCBxdWFsaXR5TWF0cml4KCk6IFF1YWxpdHlNYXRyaXgge1xuICAgIHJldHVybiB0aGlzLnJlY2VudFF1YWxpdHlNYXRyaXgkLnZhbHVlO1xuICB9XG5cbiAgZ2V0IHNvdXJjZUNvbHVtbnMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmRhdGF0YWJsZUNvbHVtbnMubWFwKChjKSA9PiBjICsgJ19zb3VyY2UnKTtcbiAgfVxuXG4gIGdldCBjdXJyZW50Q29sdW1ucygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YXRhYmxlQ29sdW1ucy5tYXAoKGMpID0+IGMgKyAnX2N1cnJlbnQnKTtcbiAgfVxuXG4gIGdldCBwYXN0Q29sdW1ucygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YXRhYmxlQ29sdW1ucy5tYXAoKGMpID0+IGMgKyAnX3Bhc3QnKTtcbiAgfVxuXG4gIGdldCBhbGxEYXRhQ29sdW1ucygpOiBzdHJpbmdbXSB7XG4gICAgaWYgKHRoaXMuc2hvd0hpc3RvcmljYWxEYXRhLnZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5wYXN0Q29sdW1ucy5mbGF0TWFwKChlLCBpKSA9PiBbZSwgdGhpcy5jdXJyZW50Q29sdW1uc1tpXV0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jdXJyZW50Q29sdW1ucztcbiAgfVxuXG4gIHByaXZhdGUgZmlsdGVyVGFibGVCeVNvdXJjZXNXaXRoTWF0ZXJpYWwob25seVdpdGg6IGJvb2xlYW4gfCBudWxsKSB7XG4gICAgY29uc3QgYWxsQ29sdW1ucyA9IHRoaXMucmVjZW50UXVhbGl0eU1hdHJpeCQudmFsdWUuY29sdW1ucy50b1NvcnRlZCgoYSwgYikgPT4gYS5sYWJlbC5sb2NhbGVDb21wYXJlKGIubGFiZWwpKTtcbiAgICAvLyBhdm9pZCBmaWx0ZXJpbmcgd2hlbiBub3QgbmVjZXNzYXJ5XG4gICAgdGhpcy5maWx0ZXJlZENvbHVtbnMgPSBvbmx5V2l0aCA/IGFsbENvbHVtbnMuZmlsdGVyKChjKSA9PiBjLnRvdGFsID4gMCkgOiBhbGxDb2x1bW5zO1xuICAgIHRoaXMuZGF0YXRhYmxlQ29sdW1ucyA9IHRoaXMuZmlsdGVyZWRDb2x1bW5zLm1hcCgoYykgPT4gYy5pZCk7XG4gIH1cblxuICByZWdpc3RlckRhdGVSYW5nZUZpbHRlcigpIHtcbiAgICB0aGlzLnJhbmdlLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5sb2FkRGF0YVdpdGhDdXJyZW50bHlTZWxlY3RlZEZpbHRlcnMoKTtcbiAgICB9KTtcbiAgICB0aGlzLm1ldGFBcGkuZ2V0VGltZXJhbmdlRmlsdGVyKCkuc3Vic2NyaWJlKChyYW5nZUZpbHRlcikgPT4ge1xuICAgICAgaWYgKHJhbmdlRmlsdGVyKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IERhdGVUaW1lLmZyb21JU08ocmFuZ2VGaWx0ZXIudmFsdWVzLmZpbmQoKHYpID0+IHYuaWQgPT09ICdyYW5nZVN0YXJ0Jyk/LmxhYmVsISwge1xuICAgICAgICAgIHpvbmU6ICd1dGMnLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZW5kRGF0ZSA9IERhdGVUaW1lLmZyb21JU08ocmFuZ2VGaWx0ZXIudmFsdWVzLmZpbmQoKHYpID0+IHYuaWQgPT09ICdyYW5nZUVuZCcpPy5sYWJlbCEsIHsgem9uZTogJ3V0YycgfSk7XG4gICAgICAgIC8vdG9nZ2xlIHRoZSBlbWl0RXZlbnQgdG8gaW5pdGlhbGx5IGxvYWQgdGhlIGRhdGEgb3Igbm90XG4gICAgICAgIHRoaXMucmFuZ2Uuc2V0Q29udHJvbCgnc3RhcnQnLCBuZXcgRm9ybUNvbnRyb2w8RGF0ZVRpbWU+KHN0YXJ0RGF0ZSwgeyBub25OdWxsYWJsZTogdHJ1ZSB9KSwge1xuICAgICAgICAgIGVtaXRFdmVudDogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJhbmdlLnNldENvbnRyb2woJ2VuZCcsIG5ldyBGb3JtQ29udHJvbDxEYXRlVGltZT4oZW5kRGF0ZSwgeyBub25OdWxsYWJsZTogdHJ1ZSB9KSwgeyBlbWl0RXZlbnQ6IHRydWUgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlZ2lzdGVyQ2F0ZWdvcnlGaWx0ZXJzKCkge1xuICAgIHRoaXMubWV0YUFwaVxuICAgICAgLmdldENhdGVnb3J5RmlsdGVycygpXG4gICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZSgoZmlsdGVycykgPT4ge1xuICAgICAgICBmaWx0ZXJzLmZvckVhY2goKGZpbHRlcikgPT4ge1xuICAgICAgICAgIHRoaXMuY2F0ZWdvcnlDb250cm9scy5hZGRDb250cm9sKGZpbHRlci5maWVsZCwgbmV3IEZvcm1Db250cm9sKFtdLCB7IG5vbk51bGxhYmxlOiB0cnVlIH0pLCB7XG4gICAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuY2F0ZWdvcnlGaWx0ZXJWYWx1ZXMuc2V0KFxuICAgICAgICAgICAgZmlsdGVyLmZpZWxkLFxuICAgICAgICAgICAgZmlsdGVyLnZhbHVlcy50b1NvcnRlZCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gYS5sYWJlbC5sb2NhbGVDb21wYXJlKGIubGFiZWwpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIHRoaXMuY2F0ZWdvcnlDb250cm9scy52YWx1ZUNoYW5nZXNcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLmxvYWREYXRhV2l0aEN1cnJlbnRseVNlbGVjdGVkRmlsdGVycygpKTtcbiAgfVxuXG4gIHByaXZhdGUgb25Mb2FkZWREYXRhQ2hhbmdlcygpIHtcbiAgICB0aGlzLnJlY2VudFF1YWxpdHlNYXRyaXgkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXG4gICAgICAgIGZpbHRlcigocW0pID0+IHFtICE9PSBudWxsKSxcbiAgICAgICAgdGFwKCgpID0+IHRoaXMuZmlsdGVyVGFibGVCeVNvdXJjZXNXaXRoTWF0ZXJpYWwodGhpcy5vbmx5U291cmNlc1dpdGhNYXRlcmlhbC52YWx1ZSkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIGxvYWREYXRhRm9yU3RhcnQoKTogT2JzZXJ2YWJsZTxRdWFsaXR5TWF0cml4IHwgbnVsbD4ge1xuICAgIGlmICh0aGlzLnJhbmdlLmNvbnRyb2xzLnN0YXJ0Py52YWx1ZSkge1xuICAgICAgY29uc3QgYm9keTogRmlsdGVyW10gPSB0aGlzLmdldEN1cnJlbnRGaWx0ZXJWYWx1ZXMoKTtcbiAgICAgIGJvZHkucHVzaCh7XG4gICAgICAgIGZpZWxkOiAnYXNPZicsXG4gICAgICAgIHZhbHVlczogW3sgaWQ6IHRoaXMucmFuZ2UuY29udHJvbHMuc3RhcnQudmFsdWUudG9JU08oeyBpbmNsdWRlT2Zmc2V0OiBmYWxzZSB9KSBhcyBzdHJpbmcsIGxhYmVsOiAnJyB9XSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRoaXMubWV0YUFwaS5nZXRRdWFsaXR5TWF0cml4V2l0aEZpbHRlcnNWMihib2R5KS5waXBlKHRha2UoMSkpO1xuICAgIH1cbiAgICByZXR1cm4gb2YobnVsbCk7XG4gIH1cblxuICBwcml2YXRlIGxvYWREYXRhRm9yRW5kKCk6IE9ic2VydmFibGU8UXVhbGl0eU1hdHJpeD4ge1xuICAgIGNvbnN0IGJvZHk6IEZpbHRlcltdID0gdGhpcy5nZXRDdXJyZW50RmlsdGVyVmFsdWVzKCk7XG4gICAgYm9keS5wdXNoKHtcbiAgICAgIGZpZWxkOiAnYXNPZicsXG4gICAgICB2YWx1ZXM6IFt7IGlkOiB0aGlzLnJhbmdlLmNvbnRyb2xzLmVuZC52YWx1ZS50b0lTTyh7IGluY2x1ZGVPZmZzZXQ6IGZhbHNlIH0pIGFzIHN0cmluZywgbGFiZWw6ICcnIH1dLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLm1ldGFBcGkuZ2V0UXVhbGl0eU1hdHJpeFdpdGhGaWx0ZXJzVjIoYm9keSkucGlwZSh0YWtlKDEpKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q3VycmVudEZpbHRlclZhbHVlcygpOiBGaWx0ZXJbXSB7XG4gICAgY29uc3QgYm9keTogRmlsdGVyW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IFtmaWVsZCwgdmFsdWVzXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmNhdGVnb3J5Q29udHJvbHMudmFsdWUpKSB7XG4gICAgICBsZXQgcmVxdWVzdFZhbHVlczogRmlsdGVyVmFsdWVbXSA9IFtdO1xuICAgICAgaWYgKHZhbHVlcyAmJiB2YWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgIHJlcXVlc3RWYWx1ZXMgPSB2YWx1ZXMubWFwKCh2YWx1ZSkgPT4gKHsgaWQ6IHZhbHVlLCBsYWJlbDogJycgfSkpO1xuICAgICAgICBib2R5LnB1c2goeyBmaWVsZCwgdmFsdWVzOiByZXF1ZXN0VmFsdWVzIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYm9keTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZERhdGFXaXRoQ3VycmVudGx5U2VsZWN0ZWRGaWx0ZXJzKCkge1xuICAgIC8qXG4gICAgY29uc2lkZXIgdXNpbmcgYW4gaW50ZXJtZWRpYXRlIFN1YmplY3Qgd2l0aCBhIHN3aXRjaE1hcCBwaXBlXG4gICAgdG8gcHJldmVudCB0aGF0IG9sZGVyICggbG9uZ2VyIHJ1bm5pbmcgKSByZXF1ZXN0cyBvdmVyd3JpdGUgbmV3ZXIgb25lc1xuICAgIHNlZSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy82NDQyNzYyOS9ob3ctdG8tdXNlLXJ4anMtdG8tY2FuY2VsLXByZXZpb3VzLWh0dHAtcmVxdWVzdHMtaW4tYW4tYW5ndWxhci1zZXJ2aWNlLzY0NDkwMTU1IzY0NDkwMTU1XG4gICAgICovXG4gICAgdGhpcy5pc0xvYWRpbmcuc2V0KHRydWUpO1xuICAgIGZvcmtKb2luKHtcbiAgICAgIHBhc3RRbTogdGhpcy5sb2FkRGF0YUZvclN0YXJ0KCksXG4gICAgICBjdXJyZW50UW06IHRoaXMubG9hZERhdGFGb3JFbmQoKSxcbiAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmlzTG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFwKCh7IHBhc3RRbTogXywgY3VycmVudFFtIH0pID0+IHtcbiAgICAgICAgICB0aGlzLmRhdGF0YWJsZUNvbHVtbnMgPSBjdXJyZW50UW0uY29sdW1ucy5maWx0ZXIoKGMpID0+IGMubGV2ZWwgIT09IDApLm1hcCgoYykgPT4gYy5pZCk7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCh7IHBhc3RRbSwgY3VycmVudFFtIH0pID0+IHtcbiAgICAgICAgdGhpcy5yZWNlbnRRdWFsaXR5TWF0cml4JC5uZXh0KGN1cnJlbnRRbSk7XG4gICAgICAgIHRoaXMucGFzdFF1YWxpdHlNYXRyaXgkLm5leHQocGFzdFFtKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgb3BlbkVkaXRMaW5rKHNvdXJjZTogc3RyaW5nLCBpc3N1ZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMubGlua1NlcnZpY2Uub3BlbkJ5UmVwbGljYXRpb25zb3VyY2VBbmRJc3N1ZVR5cGVXaXRoRmlsdGVycyhzb3VyY2UsIGlzc3VlLCB0aGlzLmNhdGVnb3J5Q29udHJvbHMudmFsdWUpO1xuICB9XG5cbiAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2NvbXBvbmVudHMvaXNzdWVzLzgzNjEjaXNzdWVjb21tZW50LTM0NTgwNDk1NFxuICBjb2x1bW5JZGVudChfaW5kZXg6IG51bWJlciwgY29sOiBRdWFsaXR5TWF0cml4SGVhZGVyKSB7XG4gICAgcmV0dXJuIGNvbC5pZDtcbiAgfVxuXG4gIGFzeW5jIHJlZnJlc2goKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy9vciBzaG91bGQgd2UgcmVzZXQgYWxsIEZpbHRlcj9cbiAgICB0aGlzLmxvYWREYXRhV2l0aEN1cnJlbnRseVNlbGVjdGVkRmlsdGVycygpO1xuICB9XG5cbiAgZ2V0UGFzdENvbHVtbihjb2x1bW5JZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMucGFzdFF1YWxpdHlNYXRyaXgkLnZhbHVlPy5jb2x1bW5zLmZpbmQoKGMpID0+IGMuaWQgPT09IGNvbHVtbklkKTtcbiAgfVxuXG4gIGdldFRyZW5kKHJvdzogUXVhbGl0eU1hdHJpeFJvdywgY29sdW1uOiBRdWFsaXR5TWF0cml4SGVhZGVyKTogeyBkZWx0YT86IG51bWJlcjsgdHJlbmQ/OiBzdHJpbmcgfSB7XG4gICAgaWYgKHRoaXMucGFzdFF1YWxpdHlNYXRyaXgkLnZhbHVlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGlmICh0aGlzLnBhc3RRdWFsaXR5TWF0cml4JC52YWx1ZS5jb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHBhc3Rfcm93ID0gdGhpcy5wYXN0UXVhbGl0eU1hdHJpeCQ/LnZhbHVlLnJvd3MuZmluZCgocHIpID0+IHByLm1ldGEuaWQgPT0gcm93Lm1ldGEuaWQpO1xuICAgICAgY29uc3QgcGFzdF9jb2x1bW4gPSB0aGlzLnBhc3RRdWFsaXR5TWF0cml4JC52YWx1ZS5jb2x1bW5zLmZpbmQoKGMpID0+IGMuaWQgPT0gY29sdW1uLmlkKTtcbiAgICAgIGlmICghcGFzdF9yb3cgfHwgIXBhc3RfY29sdW1uKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGVsdGEgPSBNYXRoLmZsb29yKFxuICAgICAgICAoMTAwICogcm93LmNvdW50c1tjb2x1bW4uaWRdLnN1ZmZpY2llbnQpIC8gY29sdW1uLnRvdGFsIC1cbiAgICAgICAgICAoMTAwICogcGFzdF9yb3cuY291bnRzW2NvbHVtbi5pZF0uc3VmZmljaWVudCkgLyBwYXN0X2NvbHVtbi50b3RhbFxuICAgICAgKTtcblxuICAgICAgY29uc3QgdHJlbmQgPSBkZWx0YSA9PT0gMCA/ICd0cmVuZGluZ19mbGF0JyA6IGRlbHRhIDwgMCA/ICd0cmVuZGluZ19kb3duJyA6ICd0cmVuZGluZ191cCc7XG4gICAgICByZXR1cm4geyBkZWx0YSwgdHJlbmQgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfVxuXG4gIGdldERvbnV0U2xpY2VzKHJvdzogUXVhbGl0eU1hdHJpeFJvdywgY29sdW1uOiBRdWFsaXR5TWF0cml4SGVhZGVyKTogRG9udXRTbGljZVtdIHtcbiAgICBjb25zdCBzdWZmaWNpZW50VG90YWwgPSByb3cuY291bnRzW2NvbHVtbi5pZF0uc3VmZmljaWVudDtcbiAgICBjb25zdCBpbnN1ZmZpY2llbnRUb3RhbCA9IHJvdy5jb3VudHNbY29sdW1uLmlkXS5pbnN1ZmZpY2llbnQ7XG4gICAgY29uc3QgbWlzc2luZ1RvdGFsID0gY29sdW1uLnRvdGFsIC0gc3VmZmljaWVudFRvdGFsIC0gaW5zdWZmaWNpZW50VG90YWw7XG4gICAgbGV0IHN1ZmZpY2llbnRGaWxsUmF0ZSA9IDA7XG4gICAgbGV0IGluc3VmZmljaWVudEZpbGxSYXRlID0gMDtcbiAgICAvL0RlciBXZXJ0IGJlcmVjaG5ldCBzaWNoIGF1cyBkZW0gdG90YWxfY291bnQgLSB3aXRob3V0X2Rlc2NyaXB0aW9uX2NvdW50LlxuXG4gICAgaWYgKGNvbHVtbi50b3RhbCAhPT0gMCkge1xuICAgICAgc3VmZmljaWVudEZpbGxSYXRlID0gTWF0aC5yb3VuZCgoMTAwICogc3VmZmljaWVudFRvdGFsKSAvIGNvbHVtbi50b3RhbCk7XG4gICAgICBpbnN1ZmZpY2llbnRGaWxsUmF0ZSA9IE1hdGgucm91bmQoKDEwMCAqIGluc3VmZmljaWVudFRvdGFsKSAvIGNvbHVtbi50b3RhbCk7XG4gICAgfVxuICAgIGNvbnN0IHJlc3QgPSAxMDAgLSAoc3VmZmljaWVudEZpbGxSYXRlICsgaW5zdWZmaWNpZW50RmlsbFJhdGUpOyAvLyBhLmsuYS4gXCJtaXNzaW5nXCJcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICBpZDogMyxcbiAgICAgICAgcGVyY2VudDogcmVzdCxcbiAgICAgICAgY29sb3I6ICcjRDhFREZDJyxcbiAgICAgICAgbGFiZWw6IGAke3Jlc3R9ICUgKCR7bWlzc2luZ1RvdGFsfSlgLFxuICAgICAgICB2ZXJib3NlTGFiZWw6IGAke21pc3NpbmdUb3RhbH0gTWV0YWRhdGVuc1xcdTAwZTR0emUgZmVobGVuYCxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGlkOiAxLFxuICAgICAgICBwZXJjZW50OiBpbnN1ZmZpY2llbnRGaWxsUmF0ZSxcbiAgICAgICAgY29sb3I6ICcjQzIwODA4JyxcbiAgICAgICAgbGFiZWw6IGAke2luc3VmZmljaWVudEZpbGxSYXRlfSAlICgke2luc3VmZmljaWVudFRvdGFsfSlgLFxuICAgICAgICB2ZXJib3NlTGFiZWw6IGAke2luc3VmZmljaWVudFRvdGFsfSBNZXRhZGF0ZW5zXFx1MDBlNHR6ZSBzaW5kIHVuenVyZWljaGVuZCBhdXNnZWZcXHUwMGZjbGx0YCxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGlkOiAyLFxuICAgICAgICBwZXJjZW50OiBzdWZmaWNpZW50RmlsbFJhdGUsXG4gICAgICAgIGNvbG9yOiAnIzRBQkVGRicsXG4gICAgICAgIGxhYmVsOiBgJHtzdWZmaWNpZW50RmlsbFJhdGV9ICUgKCR7c3VmZmljaWVudFRvdGFsfSlgLFxuICAgICAgICB2ZXJib3NlTGFiZWw6IGAke3N1ZmZpY2llbnRUb3RhbH0gTWV0YWRhdGVuc1xcdTAwZTR0emUgc2luZCBndXQgYXVzZ2VmXFx1MDBmY2xsdGAsXG4gICAgICB9LFxuICAgIF07XG4gIH1cblxuICBzaG93VG9vbHRpcChyb3c6IFF1YWxpdHlNYXRyaXhSb3csIGNvbHVtbjogUXVhbGl0eU1hdHJpeEhlYWRlciwgY2VsbDogSFRNTEVsZW1lbnQpIHtcbiAgICBpZiAocm93LmNvdW50c1tjb2x1bW4uaWRdLnN1ZmZpY2llbnQgKyByb3cuY291bnRzW2NvbHVtbi5pZF0uaW5zdWZmaWNpZW50ID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLnRvb2x0aXBzLmhhcyhjZWxsKSkge1xuICAgICAgdGhpcy50b29sdGlwcy5nZXQoY2VsbCkhLmNhbmNlbENsb3NlQWN0aW9uKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdG9vbHRpcFJlZiA9IHRoaXMudG9vbHRpcFNlcnZpY2UuY3JlYXRlKERvbnV0Q2hhcnRUb29sdGlwQ29tcG9uZW50LCB7XG4gICAgICBjbG9zZVRpbWVvdXQ6IG9wZW5DbG9zZVRpbWVvdXQsXG4gICAgICBvcGVuVGltZW91dDogb3BlbkNsb3NlVGltZW91dCxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgbGFiZWw6IGNvbHVtbi5sYWJlbCxcbiAgICAgICAgZGF0YTogdHJhbnNmb3JtRG9udXRDaGFydERhdGEodGhpcy5nZXREb251dFNsaWNlcyhyb3csIGNvbHVtbikpLFxuICAgICAgfSxcbiAgICAgIG92ZXJsYXlDb25maWc6IHtcbiAgICAgICAgaGFzQmFja2Ryb3A6IGZhbHNlLFxuICAgICAgICBwb3NpdGlvblN0cmF0ZWd5OiB0aGlzLm92ZXJsYXkucG9zaXRpb24oKS5mbGV4aWJsZUNvbm5lY3RlZFRvKGNlbGwpLndpdGhQb3NpdGlvbnMoY2VudGVyUG9zaXRpb25TdHJhdGVneSksXG4gICAgICAgIGRpc3Bvc2VPbk5hdmlnYXRpb246IHRydWUsXG4gICAgICAgIHBhbmVsQ2xhc3M6ICdkb251dC1jaGFydC10b29sdGlwJyxcbiAgICAgIH0sXG4gICAgICBvbkNsb3NlOiAoKSA9PiB7XG4gICAgICAgIHRoaXMudG9vbHRpcHMuZGVsZXRlKGNlbGwpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgICB0b29sdGlwUmVmLm9wZW4oKTtcbiAgICB0aGlzLnRvb2x0aXBzLnNldChjZWxsLCB0b29sdGlwUmVmKTtcbiAgfVxuXG4gIGhpZGVUb29sdGlwKGNlbGw6IEhUTUxFbGVtZW50KSB7XG4gICAgdGhpcy50b29sdGlwcy5nZXQoY2VsbCk/Lm1hcmtGb3JDbG9zZSgpO1xuICB9XG5cbiAgZmluZEhvcml6b250YWxTY3JvbGxDb250YWluZXIoZWxlbWVudDogRWxlbWVudCk6IEVsZW1lbnQgfCBudWxsIHtcbiAgICBpZiAoZWxlbWVudC5zY3JvbGxXaWR0aCA+IGVsZW1lbnQuY2xpZW50V2lkdGggJiYgWydhdXRvJywgJ3Njcm9sbCddLmluY2x1ZGVzKGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkub3ZlcmZsb3dYKSkge1xuICAgICAgLy8gZmluZCB0aGUgbmVhcmVzdCBob3Jpem9udGFsbHkgc2Nyb2xsYWJsZSBlbGVtZW50XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFlbGVtZW50LnBhcmVudEVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5maW5kSG9yaXpvbnRhbFNjcm9sbENvbnRhaW5lcihlbGVtZW50LnBhcmVudEVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHNjcm9sbFRvUmlnaHQoKSB7XG4gICAgY29uc3Qgc2Nyb2xsaW5nRWxlbWVudCA9IHRoaXMuZmluZEhvcml6b250YWxTY3JvbGxDb250YWluZXIodGhpcy5yZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCk7XG4gICAgaWYgKCFzY3JvbGxpbmdFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHZpZXdwb3J0ID0gZ2xvYmFsVGhpcy52aXN1YWxWaWV3cG9ydDtcbiAgICBpZiAoIXZpZXdwb3J0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHZpZXdwb3J0V2lkdGggPSB2aWV3cG9ydC53aWR0aDtcblxuICAgIGNvbnN0IGxhc3RWaXNpYmxlID0gdGhpcy5zY3JvbGxNYXJrZXJzKCkuZmluZExhc3QoXG4gICAgICAobWFya2VyKSA9PiAobWFya2VyLmVsZW1lbnQubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCA8IHZpZXdwb3J0V2lkdGhcbiAgICApO1xuXG4gICAgaWYgKCFsYXN0VmlzaWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGxlZnRDb2x1bW5XaWR0aCA9IHRoaXMuaXNzdWVUeXBlSGVhZGVyKCk/Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggPz8gMDtcblxuICAgIHNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsQnkoe1xuICAgICAgbGVmdDogKGxhc3RWaXNpYmxlLmVsZW1lbnQubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtIGxlZnRDb2x1bW5XaWR0aCxcbiAgICAgIGJlaGF2aW9yOiAnc21vb3RoJyxcbiAgICB9KTtcbiAgfVxuXG4gIHNjcm9sbFRvTGVmdCgpIHtcbiAgICBjb25zdCBzY3JvbGxpbmdFbGVtZW50ID0gdGhpcy5maW5kSG9yaXpvbnRhbFNjcm9sbENvbnRhaW5lcih0aGlzLnJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KTtcbiAgICBpZiAoIXNjcm9sbGluZ0VsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgdmlld3BvcnQgPSBnbG9iYWxUaGlzLnZpc3VhbFZpZXdwb3J0O1xuICAgIGlmICghdmlld3BvcnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgdmlld3BvcnRXaWR0aCA9IHZpZXdwb3J0LndpZHRoO1xuXG4gICAgY29uc3QgbGVmdENvbHVtbldpZHRoID0gdGhpcy5pc3N1ZVR5cGVIZWFkZXIoKT8ubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCA/PyAwO1xuXG4gICAgY29uc3QgZmlyc3RWaXNpYmxlID0gdGhpcy5zY3JvbGxNYXJrZXJzKCkuZmluZChcbiAgICAgIChtYXJrZXIpID0+IChtYXJrZXIuZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5yaWdodCA+IGxlZnRDb2x1bW5XaWR0aFxuICAgICk7XG5cbiAgICBpZiAoIWZpcnN0VmlzaWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsQnkoe1xuICAgICAgbGVmdDogKGZpcnN0VmlzaWJsZS5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0IC0gdmlld3BvcnRXaWR0aCxcbiAgICAgIGJlaGF2aW9yOiAnc21vb3RoJyxcbiAgICB9KTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpzY3JvbGwnKVxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJylcbiAgb25TY3JvbGwoKSB7XG4gICAgY29uc3Qgc2Nyb2xsaW5nRWxlbWVudCA9IHRoaXMuZmluZEhvcml6b250YWxTY3JvbGxDb250YWluZXIodGhpcy5yZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCk7XG4gICAgaWYgKCFzY3JvbGxpbmdFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2Nyb2xsTGVmdC5zZXQoc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0KTtcbiAgICB0aGlzLnNjcm9sbFdpZHRoLnNldChzY3JvbGxpbmdFbGVtZW50LnNjcm9sbFdpZHRoKTtcbiAgfVxufVxuIiwiPG1hdC1jYXJkIGFwcGVhcmFuY2U9XCJyYWlzZWRcIj5cbiAgPG1hdC1jYXJkLWhlYWRlciAqbmdJZj1cInBhZ2VUaXRsZVwiPlxuICAgIDxtYXQtY2FyZC10aXRsZT5cbiAgICAgIFF1YWxpdMOkdHNtZXRyaWs6IHt7IHBhZ2VUaXRsZSB8IHRyYW5zbGF0ZSB9fXt7aXNMb2FkaW5nKCkgPyBcIjogTGFkZSBuZXVlIERhdGVuLlwiIDogXCJcIn19PC9tYXQtY2FyZC10aXRsZVxuICAgID5cbiAgPC9tYXQtY2FyZC1oZWFkZXI+XG4gIDxtYXQtY2FyZC1jb250ZW50IGNsYXNzPVwidG9vbGJhclwiPlxuICAgIDxtZXRhcXMyLXFtLWZpbHRlciAqbmdGb3I9XCJsZXQgZmlsdGVyIG9mIGNhdGVnb3J5Q29udHJvbHMuY29udHJvbHMgfCBrZXl2YWx1ZTsgdHJhY2tCeTogZmlsdGVySWRlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJjYXRlZ29yeUZpbHRlclZhbHVlcy5nZXQoZmlsdGVyLmtleSlcIlxuICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXRGb3JtQ29udHJvbF09XCJmaWx0ZXIudmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdID0gXCInZmlsdGVyLicgKyBmaWx0ZXIua2V5IHwgdHJhbnNsYXRlXCIgLz5cbiAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uYmFyXCI+XG4gICAgICA8bWV0YXFzMi1kYXRlcGlja2VyICpuZ0lmPVwic2hvd0hpc3RvcmljYWxEYXRhLnZhbHVlXCIgW2Rpc2FibGVkXT1cImlzTG9hZGluZygpXCIgW2lucHV0R3JvdXBdPVwicmFuZ2VcIiAvPlxuICAgICAgPG1hdC1zbGlkZS10b2dnbGUgW2Rpc2FibGVkXT1cImlzTG9hZGluZygpXCIgbGFiZWxQb3NpdGlvbj1cImJlZm9yZVwiIFtmb3JtQ29udHJvbF09XCJvbmx5U291cmNlc1dpdGhNYXRlcmlhbFwiIGlkPVwib25seVNvdXJjZXNXaXRoTWF0ZXJpYWxcIiA+XG4gICAgICAgIHNob3cgb25seSBzb3VyY2VzIHdpdGggbWF0ZXJpYWxcbiAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFtkaXNhYmxlZF09XCJpc0xvYWRpbmcoKVwiIGxhYmVsUG9zaXRpb249XCJiZWZvcmVcIiBbZm9ybUNvbnRyb2xdPVwic2hvd0hpc3RvcmljYWxEYXRhXCIgaWQ9XCJzaG93SGlzdG9yaWNhbERhdGFcIiA+XG4gICAgICAgIHNob3cgaGlzdG9yaWNhbCBkYXRhXG4gICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiaXNMb2FkaW5nXCJcbiAgICAgICAgKGNsaWNrKT1cInJlZnJlc2goKVwiXG4gICAgICAgIG1hdFRvb2x0aXA9XCJBa3R1YWxpc2llcmUgZGVuIElTVC1TdGFuZFwiXG4gICAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgICAgPlxuICAgICAgICA8bWF0LWljb24+cmVmcmVzaDwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzY3JvbGwtY29udHJvbGxlclwiICNzY3JvbGxlcj4gPCEtLSBwdXQgdGhlIHdob2xlIHRvb2xiYXIgaW4gYSBmaXhlZCBjb250YWluZXIgKE1RUy0gLS0+XG4gICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gKGNsaWNrKT1cInNjcm9sbFRvTGVmdCgpXCIgW2Rpc2FibGVkXT1cIiFpc0xlZnRTY3JvbGxhYmxlKClcIiBjbGFzcz1cInNjcm9sbC1idXR0b25cIj5cbiAgICAgICAgICA8bWF0LWljb24gc3R5bGU9XCJtYXJnaW46IDBcIj5jaGV2cm9uX2xlZnQ8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiAoY2xpY2spPVwic2Nyb2xsVG9SaWdodCgpXCIgW2Rpc2FibGVkXT1cIiFpc1JpZ2h0U2Nyb2xsYWJsZSgpXCIgY2xhc3M9XCJzY3JvbGwtYnV0dG9uXCI+XG4gICAgICAgICAgPG1hdC1pY29uIHN0eWxlPVwibWFyZ2luOiAwXCI+Y2hldnJvbl9yaWdodDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IHN0eWxlPVwiZmxleDogMSAwIHt7c2Nyb2xsZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGh9fXB4XCI+PC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbWF0LWNhcmQtY29udGVudD5cbjwvbWF0LWNhcmQ+XG48bWF0LWNhcmQ+XG4gIDxtZXRhcXMyLXByb2dyZXNzLXNwaW5uZXIgW2Rpc3BsYXlQcm9ncmVzc1NwaW5uZXJdPVwiaXNMb2FkaW5nKClcIj48L21ldGFxczItcHJvZ3Jlc3Mtc3Bpbm5lcj5cbiAgPHRhYmxlIFtjbGFzcy53aGlsZS1sb2FkaW5nXT1cImlzTG9hZGluZygpXCIgbWF0LXRhYmxlIFtkYXRhU291cmNlXT1cInJlY2VudFF1YWxpdHlNYXRyaXgkLnZhbHVlLnJvd3NcIiBjbGFzcz1cInF1YWxpdHktbWF0cml4XCI+XG4gICAgPCEtLSBEZWZpbmUgY29sdW1ucyBvZiB0YWJsZSAtLT5cbiAgICA8IS0tIFJvdyBIZWFkZXIgQ29sdW1uIC0tPlxuICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwicm93LWhlYWRlclwiIHN0aWNreT5cbiAgICAgIDx0aCByb3dzcGFuPVwiMlwiIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiAjaXNzdWVUeXBlPklzc3VlIFR5cGU8L3RoPlxuICAgICAgPHRkXG4gICAgICAgIG1hdC1jZWxsXG4gICAgICAgICptYXRDZWxsRGVmPVwibGV0IHJvd1wiXG4gICAgICAgIG1hdFRvb2x0aXA9XCJ7e3Jvdy5tZXRhLmFsdF9sYWJlbH19XCJcbiAgICAgICAgY2xhc3M9XCJyb3ctaGVhZGVyIG1hdC1jZWxsLWxldmVsLXt7cm93Lm1ldGEubGV2ZWwgKyAxfX1cIlxuICAgICAgPlxuICAgICAgICB7e1wicXVhbGl0eV9tYXRyaXguXCIgKyByb3cubWV0YS5sYWJlbCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC90ZD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8IS0tIG9uZSBjb2x1bW4gZm9yIHRoZSBzb3VyY2UgLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sIG9mIGZpbHRlcmVkQ29sdW1uczsgdHJhY2tCeTpjb2x1bW5JZGVudFwiIFttYXRDb2x1bW5EZWZdPVwiY29sLmlkICsgJ19zb3VyY2UnXCI+XG4gICAgICA8dGggW2F0dHIuY29sc3Bhbl09XCJzaG93SGlzdG9yaWNhbERhdGEudmFsdWU/MjoxXCIgbWV0YXFzMlNjcm9sbE1hcmtlciBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0VG9vbHRpcD1cInt7Y29sLmFsdExhYmVsfX1cIj57e2NvbC5sYWJlbH19PC90aD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8IS0tIC9zb3VyY2UgLS0+XG4gICAgPCEtLSBjdXJyZW50IERhdGEgQ29sdW1ucyAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgZmlsdGVyZWRDb2x1bW5zOyB0cmFja0J5OmNvbHVtbklkZW50XCIgW21hdENvbHVtbkRlZl09XCJjb2x1bW4uaWQgKyAnX2N1cnJlbnQnXCI+XG4gICAgICA8dGggY2xhc3M9XCJyZWNlbnQtZGF0YS1jZWxsXCIgbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdFRvb2x0aXA9XCJ7e2NvbHVtbi5hbHRMYWJlbH19XCI+e3sgcmFuZ2UuY29udHJvbHMuZW5kLnZhbHVlPy50b0xvY2FsZVN0cmluZyhEYXRlVGltZS5EQVRFX1NIT1JUKSB9fSA8YnI+KHt7Y29sdW1uLnRvdGFsfX0pPC90aD5cbiAgICAgIDx0ZCBjbGFzcz1cInJlY2VudC1kYXRhLWNlbGxcIiBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiAjY2VsbCAobW91c2VvdmVyKT1cInNob3dUb29sdGlwKHJvdywgY29sdW1uLCBjZWxsKVwiIChtb3VzZWxlYXZlKT1cImhpZGVUb29sdGlwKGNlbGwpXCI+XG4gICAgICAgICAgPGEgKm5nSWY9XCJjb2x1bW4udG90YWwgPiAwIGVsc2UgZW1wdHlEaXZcIiBjbGFzcz1cImNoYXJ0LWNvbnRhaW5lclwiIChjbGljayk9XCJvcGVuRWRpdExpbmsoIGNvbHVtbi5sYWJlbCwgcm93Lm1ldGEubGFiZWwpXCI+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8bWV0YXFzMi1kb251dC1jaGFydCBbZGF0YV09XCJnZXREb251dFNsaWNlcyhyb3csIGNvbHVtbilcIiBbYm9yZGVyU2l6ZV09XCIyNVwiPjwvbWV0YXFzMi1kb251dC1jaGFydD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvYT5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2VtcHR5RGl2PlxuICAgICAgICAgICAgPGRpdj4tPC9kaXY+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvdGQ+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPCEtLSAvY3VycmVudCBEYXRhIENvbHVtbnMgLS0+XG4gICAgPCEtLSBwYXN0IERhdGEgQ29sdW1ucyAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd0hpc3RvcmljYWxEYXRhLnZhbHVlXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgZmlsdGVyZWRDb2x1bW5zOyB0cmFja0J5OmNvbHVtbklkZW50XCIgW21hdENvbHVtbkRlZl09XCJjb2x1bW4uaWQgKyAnX3Bhc3QnXCI+XG4gICAgICAgIDx0aCBjbGFzcz1cImhpc3RvcmljLWRhdGEtY2VsbFwiIG1hdC1oZWFkZXItY2VsbFxuICAgICAgICAgICAgKm1hdEhlYWRlckNlbGxEZWY+e3sgcmFuZ2UuY29udHJvbHMuc3RhcnQudmFsdWU/LnRvTG9jYWxlU3RyaW5nKERhdGVUaW1lLkRBVEVfU0hPUlQpIH19XG4gICAgICAgICAgPGJyPnt7IGdldFBhc3RDb2x1bW4oY29sdW1uLmlkKT8udG90YWwgfX1cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRkIGNsYXNzPVwiaGlzdG9yaWMtZGF0YS1jZWxsXCIgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldFRyZW5kKHJvdywgY29sdW1uKSBhcyB0cmVuZFwiPlxuICAgICAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwidHJlbmQudHJlbmRcIj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIGFyaWEtaGlkZGVuPVwiZmFsc2VcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInRyZW5kLnRyZW5kXCIgW2ZvbnRJY29uXT1cInRyZW5kLnRyZW5kIVwiIC8+XG4gICAgICAgICAgICAgIHt7IHRyZW5kLmRlbHRhIH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwhLS0gL3Bhc3QgRGF0YSBDb2x1bW5zIC0tPlxuXG4gICAgICA8IS0tIEdlbmVyYXRlIGFjdHVhbCB0YWJsZSAtLT5cbiAgICA8dHIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cIlsncm93LWhlYWRlciddLmNvbmNhdCggc291cmNlQ29sdW1ucyk7IHN0aWNreTogdHJ1ZTtcIj48L3RyPlxuICAgIDx0ciBtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiYWxsRGF0YUNvbHVtbnM7IHN0aWNreTogdHJ1ZTtcIj48L3RyPlxuICAgIDx0ciBtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBbJ3Jvdy1oZWFkZXInXS5jb25jYXQoYWxsRGF0YUNvbHVtbnMpXCI+PC90cj5cbiAgPC90YWJsZT5cbjwvbWF0LWNhcmQ+XG4iXX0=
|
|
412
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVhbGl0eV9tYXRyaXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1tZXRhLXdpZGdldHMtbGliL3NyYy9saWIvY29tcG9uZW50cy9xdWFsaXR5LW1hdHJpeC9xdWFsaXR5X21hdHJpeC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLW1ldGEtd2lkZ2V0cy1saWIvc3JjL2xpYi9jb21wb25lbnRzL3F1YWxpdHktbWF0cml4L3F1YWxpdHktbWF0cml4Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxRQUFRLEVBQ1IsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsWUFBWSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHN0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFaEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUVqQyxPQUFPLEVBQVksWUFBWSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFakYsT0FBTyxFQUNMLDBCQUEwQixFQUMxQix1QkFBdUIsR0FDeEIsTUFBTSxzREFBc0QsQ0FBQztBQUM5RCxPQUFPLEVBQUUsc0JBQXNCLEVBQWMsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFD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d0JBQ1IsVUFBVTt3QkFDVixPQUFPO3dCQUNQLFlBQVk7d0JBQ1osYUFBYTt3QkFDYixPQUFPO3dCQUNQLFlBQVk7d0JBQ1osTUFBTTt3QkFDTixlQUFlO3dCQUNmLFNBQVM7d0JBQ1QsZ0JBQWdCO3dCQUNoQixPQUFPO3dCQUNQLElBQUk7d0JBQ0osVUFBVTt3QkFDVixTQUFTO3dCQUNULGFBQWE7d0JBQ2IsbUJBQW1CO3dCQUNuQixxQkFBcUI7cUJBQ3RCO3lLQXFCZ0IsZUFBZTtzQkFKL0IsU0FBUzt1QkFBQyxXQUFXLEVBQUU7d0JBQ3RCLElBQUksRUFBRSxVQUFVO3dCQUNoQixNQUFNLEVBQUUsSUFBSTtxQkFDYjtnQkFTZ0IsYUFBYTtzQkFEN0IsWUFBWTt1QkFBQyxxQkFBcUI7Z0JBZW5DLFNBQVM7c0JBRFIsS0FBSztnQkE4Vk4sUUFBUTtzQkFGUCxZQUFZO3VCQUFDLGVBQWU7O3NCQUM1QixZQUFZO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdDaGVja2VkLFxuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBFbGVtZW50UmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIGluamVjdCxcbiAgSW5wdXQsXG4gIHNpZ25hbCxcbiAgVmlld0NoaWxkLFxuICBWaWV3Q2hpbGRyZW4sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgZmluYWxpemUsIHRha2UsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE1ldGFBcGlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbWV0YS1hcGkuc2VydmljZSc7XG5pbXBvcnQgeyBGaWx0ZXIsIEZpbHRlclZhbHVlLCBRdWFsaXR5TWF0cml4LCBRdWFsaXR5TWF0cml4SGVhZGVyLCBRdWFsaXR5TWF0cml4Um93IH0gZnJvbSAnLi4vLi4vamF2YS1hcGknO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgRm9ybVJlY29yZCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEVkaXRvcmlhbExpbmtTZXJ2aWNlIH0gZnJvbSAnLi4vZWRpdG9yaWFsLWxpbmstc2VydmljZS9lZGl0b3JpYWwtbGluay5zZXJ2aWNlJztcbmltcG9ydCB7IERhdGVUaW1lIH0gZnJvbSAnbHV4b24nO1xuaW1wb3J0IHsgRG9udXRTbGljZSB9IGZyb20gJy4uL2RvbnV0LWNoYXJ0L2RvbnV0LWNoYXJ0Lm1vZGVsJztcbmltcG9ydCB7IEtleVZhbHVlLCBLZXlWYWx1ZVBpcGUsIE5nQ2xhc3MsIE5nRm9yT2YsIE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgT3ZlcmxheSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7XG4gIERvbnV0Q2hhcnRUb29sdGlwQ29tcG9uZW50LFxuICB0cmFuc2Zvcm1Eb251dENoYXJ0RGF0YSxcbn0gZnJvbSAnLi4vZG9udXQtY2hhcnQtdG9vbHRpcC9kb251dC1jaGFydC10b29sdGlwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBjZW50ZXJQb3NpdGlvblN0cmF0ZWd5LCBUb29sdGlwUmVmLCBUb29sdGlwU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvdG9vbHRpcC5zZXJ2aWNlJztcbmltcG9ydCB7IE1hdENhcmQsIE1hdENhcmRDb250ZW50LCBNYXRDYXJkSGVhZGVyLCBNYXRDYXJkVGl0bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jYXJkJztcbmltcG9ydCB7IFF1YWxpdHlNYXRyaXhGaWx0ZXJDb21wb25lbnQgfSBmcm9tICcuLi9maWx0ZXIvcXVhbGl0eS1tYXRyaXgtZmlsdGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IE1hdEljb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IERhdGVwaWNrZXJDb21wb25lbnQgfSBmcm9tICcuLi9maWx0ZXIvZGF0ZXBpY2tlci9kYXRlcGlja2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXRTbGlkZVRvZ2dsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NsaWRlLXRvZ2dsZSc7XG5pbXBvcnQgeyBQcm9ncmVzc1NwaW5uZXJDb21wb25lbnQgfSBmcm9tICcuLi9sb2FkaW5nX2luZGljYXRvci9wcm9ncmVzcy1zcGlubmVyL3Byb2dyZXNzLXNwaW5uZXIuY29tcG9uZW50JztcbmltcG9ydCB7XG4gIE1hdENlbGwsXG4gIE1hdENlbGxEZWYsXG4gIE1hdENvbHVtbkRlZixcbiAgTWF0SGVhZGVyQ2VsbCxcbiAgTWF0SGVhZGVyQ2VsbERlZixcbiAgTWF0SGVhZGVyUm93LFxuICBNYXRIZWFkZXJSb3dEZWYsXG4gIE1hdFJvdyxcbiAgTWF0Um93RGVmLFxuICBNYXRUYWJsZSxcbn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xuaW1wb3J0IHsgTWF0VG9vbHRpcCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xuaW1wb3J0IHsgTWF0QnV0dG9uLCBNYXRJY29uQnV0dG9uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IERvbnV0Q2hhcnRDb21wb25lbnQgfSBmcm9tICcuLi9kb251dC1jaGFydC9kb251dC1jaGFydC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2Nyb2xsTWFya2VyRGlyZWN0aXZlIH0gZnJvbSAnLi9zY3JvbGwtbWFya2VyLmRpcmVjdGl2ZSc7XG5cbmNvbnN0IG9wZW5DbG9zZVRpbWVvdXQgPSAxNTA7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21ldGFxczItcXVhbGl0eS1tYXRyaXgtdjInLFxuICBwcm92aWRlcnM6IFtUb29sdGlwU2VydmljZV0sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHRlbXBsYXRlVXJsOiAnLi9xdWFsaXR5LW1hdHJpeC5odG1sJyxcbiAgaW1wb3J0czogW1xuICAgIE1hdENhcmQsXG4gICAgTWF0Q2FyZEhlYWRlcixcbiAgICBNYXRDYXJkVGl0bGUsXG4gICAgTWF0Q2FyZENvbnRlbnQsXG4gICAgUXVhbGl0eU1hdHJpeEZpbHRlckNvbXBvbmVudCxcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgS2V5VmFsdWVQaXBlLFxuICAgIE1hdEljb24sXG4gICAgRGF0ZXBpY2tlckNvbXBvbmVudCxcbiAgICBNYXRTbGlkZVRvZ2dsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIFByb2dyZXNzU3Bpbm5lckNvbXBvbmVudCxcbiAgICBNYXRUYWJsZSxcbiAgICBNYXRUb29sdGlwLFxuICAgIE1hdENlbGwsXG4gICAgTWF0Q29sdW1uRGVmLFxuICAgIE1hdEhlYWRlckNlbGwsXG4gICAgTmdDbGFzcyxcbiAgICBNYXRIZWFkZXJSb3csXG4gICAgTWF0Um93LFxuICAgIE1hdEhlYWRlclJvd0RlZixcbiAgICBNYXRSb3dEZWYsXG4gICAgTWF0SGVhZGVyQ2VsbERlZixcbiAgICBOZ0Zvck9mLFxuICAgIE5nSWYsXG4gICAgTWF0Q2VsbERlZixcbiAgICBNYXRCdXR0b24sXG4gICAgTWF0SWNvbkJ1dHRvbixcbiAgICBEb251dENoYXJ0Q29tcG9uZW50LFxuICAgIFNjcm9sbE1hcmtlckRpcmVjdGl2ZSxcbiAgXSxcbiAgc3R5bGVVcmxzOiBbJy4vcXVhbGl0eV9tYXRyaXguc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBRdWFsaXR5TWF0cml4Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3Q2hlY2tlZCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IHNjcm9sbExlZnQgPSBzaWduYWwoMCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2Nyb2xsV2lkdGggPSBzaWduYWwoMCk7XG4gIHB1YmxpYyByZWFkb25seSBpc0xlZnRTY3JvbGxhYmxlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zY3JvbGxMZWZ0KCkgPiAwKTtcbiAgcHVibGljIHJlYWRvbmx5IGlzUmlnaHRTY3JvbGxhYmxlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHZpZXdwb3J0ID0gZ2xvYmFsVGhpcy52aXN1YWxWaWV3cG9ydDtcbiAgICBpZiAoIXZpZXdwb3J0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHZpZXdwb3J0V2lkdGggPSB2aWV3cG9ydC53aWR0aDtcblxuICAgIHJldHVybiB0aGlzLnNjcm9sbFdpZHRoKCkgPiB2aWV3cG9ydFdpZHRoICYmIHRoaXMuc2Nyb2xsTGVmdCgpICsgdmlld3BvcnRXaWR0aCA8IHRoaXMuc2Nyb2xsV2lkdGgoKTtcbiAgfSk7XG4gIEBWaWV3Q2hpbGQoJ2lzc3VlVHlwZScsIHtcbiAgICByZWFkOiBFbGVtZW50UmVmLFxuICAgIHN0YXRpYzogdHJ1ZSxcbiAgfSlcbiAgcHJpdmF0ZSByZWFkb25seSBpc3N1ZVR5cGVIZWFkZXIhOiBFbGVtZW50UmVmPEhUTUxUYWJsZUNlbGxFbGVtZW50PjtcbiAgZmlsdGVyZWRDb2x1bW5zOiBRdWFsaXR5TWF0cml4SGVhZGVyW10gPSBbXTtcbiAgZGF0YXRhYmxlQ29sdW1uczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICBzaG93SGlzdG9yaWNhbERhdGEgPSBuZXcgRm9ybUNvbnRyb2woeyB2YWx1ZTogZmFsc2UsIGRpc2FibGVkOiB0cnVlIH0pO1xuICBvbmx5U291cmNlc1dpdGhNYXRlcmlhbCA9IG5ldyBGb3JtQ29udHJvbCh7IHZhbHVlOiB0cnVlLCBkaXNhYmxlZDogdHJ1ZSB9KTtcbiAgY2F0ZWdvcnlDb250cm9sczogRm9ybVJlY29yZDxGb3JtQ29udHJvbDxzdHJpbmdbXT4+O1xuICBpc0xvYWRpbmcgPSBzaWduYWwodHJ1ZSk7XG4gIEBWaWV3Q2hpbGRyZW4oU2Nyb2xsTWFya2VyRGlyZWN0aXZlKVxuICBwcml2YXRlIHJlYWRvbmx5IHNjcm9sbE1hcmtlcnMhOiBSZWFkb25seUFycmF5PFNjcm9sbE1hcmtlckRpcmVjdGl2ZT47XG4gIHJlYWRvbmx5IGNhdGVnb3J5RmlsdGVyVmFsdWVzOiBNYXA8c3RyaW5nLCBGaWx0ZXJWYWx1ZVtdPiA9IG5ldyBNYXAoKTtcbiAgcmVhZG9ubHkgcmVjZW50UXVhbGl0eU1hdHJpeCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFF1YWxpdHlNYXRyaXg+KHsgY29sdW1uczogW10sIHJvd3M6IFtdIH0gYXMgUXVhbGl0eU1hdHJpeCk7XG4gIHJlYWRvbmx5IHBhc3RRdWFsaXR5TWF0cml4JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UXVhbGl0eU1hdHJpeCB8IG51bGw+KHsgY29sdW1uczogW10sIHJvd3M6IFtdIH0gYXMgUXVhbGl0eU1hdHJpeCk7XG4gIHJlYWRvbmx5IHJhbmdlOiBGb3JtR3JvdXA8e1xuICAgIHN0YXJ0OiBGb3JtQ29udHJvbDxEYXRlVGltZTxib29sZWFuPj47XG4gICAgZW5kOiBGb3JtQ29udHJvbDxEYXRlVGltZTxib29sZWFuPj47XG4gIH0+ID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgc3RhcnQ6IG5ldyBGb3JtQ29udHJvbCgpLFxuICAgIGVuZDogbmV3IEZvcm1Db250cm9sKCksXG4gIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IHRvb2x0aXBzID0gbmV3IE1hcDxIVE1MRWxlbWVudCwgVG9vbHRpcFJlZjxEb251dENoYXJ0VG9vbHRpcENvbXBvbmVudD4+KCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBEYXRlVGltZSA9IERhdGVUaW1lO1xuICBASW5wdXQoKVxuICBwYWdlVGl0bGU6IHN0cmluZyA9ICdRdWFsaXR5IE1hdHJpeCc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBtZXRhQXBpOiBNZXRhQXBpU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxpbmtTZXJ2aWNlOiBFZGl0b3JpYWxMaW5rU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IG92ZXJsYXk6IE92ZXJsYXksXG4gICAgcHJpdmF0ZSByZWFkb25seSB0b29sdGlwU2VydmljZTogVG9vbHRpcFNlcnZpY2VcbiAgKSB7XG4gICAgLy8gYSBGb3JtUmVjb3JkIGhhcyB0byBiZSBpbml0aWFsaXplZCB3aXRoIG9uZSBzb3VyY2UgdG8gZGV0ZXJtaW5lIGl0cyB0eXBlIDotKFxuICAgIHRoaXMuY2F0ZWdvcnlDb250cm9scyA9IG5ldyBGb3JtUmVjb3JkKHsgZHVtbXk6IG5ldyBGb3JtQ29udHJvbChbXSwgeyBub25OdWxsYWJsZTogdHJ1ZSB9KSB9KTtcbiAgICB0aGlzLmNhdGVnb3J5Q29udHJvbHMucmVtb3ZlQ29udHJvbCgnZHVtbXknLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgdGhpcy5yZWdpc3RlckNhdGVnb3J5RmlsdGVycygpO1xuICAgIHRoaXMucmVnaXN0ZXJEYXRlUmFuZ2VGaWx0ZXIoKTtcbiAgICAvLyBUT0RPOiBjb25zaWRlciBhIHJlZ2lzdGVyKCkgZnVuY3Rpb25zXG4gICAgdGhpcy5vbmx5U291cmNlc1dpdGhNYXRlcmlhbC52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSkuc3Vic2NyaWJlKChvbmx5V2l0aE1hdGVyaWFsKSA9PiB7XG4gICAgICB0aGlzLmZpbHRlclRhYmxlQnlTb3VyY2VzV2l0aE1hdGVyaWFsKG9ubHlXaXRoTWF0ZXJpYWwpO1xuICAgIH0pO1xuICAgIHRoaXMub25Mb2FkZWREYXRhQ2hhbmdlcygpO1xuICAgIC8vdGhpcy5sb2FkRGF0YVdpdGhDdXJyZW50bHlTZWxlY3RlZEZpbHRlcnMoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpOiB2b2lkIHtcbiAgICB0aGlzLm9uU2Nyb2xsKCk7XG4gIH1cblxuICBmaWx0ZXJJZGVudChfaW5kZXg6IG51bWJlciwgaXRlbTogS2V5VmFsdWU8c3RyaW5nLCBGb3JtQ29udHJvbDxzdHJpbmdbXT4+KSB7XG4gICAgcmV0dXJuIGl0ZW0ua2V5O1xuICB9XG5cbiAgZ2V0IHF1YWxpdHlNYXRyaXgoKTogUXVhbGl0eU1hdHJpeCB7XG4gICAgcmV0dXJuIHRoaXMucmVjZW50UXVhbGl0eU1hdHJpeCQudmFsdWU7XG4gIH1cblxuICBnZXQgc291cmNlQ29sdW1ucygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YXRhYmxlQ29sdW1ucy5tYXAoKGMpID0+IGMgKyAnX3NvdXJjZScpO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRDb2x1bW5zKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhdGFibGVDb2x1bW5zLm1hcCgoYykgPT4gYyArICdfY3VycmVudCcpO1xuICB9XG5cbiAgZ2V0IHBhc3RDb2x1bW5zKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhdGFibGVDb2x1bW5zLm1hcCgoYykgPT4gYyArICdfcGFzdCcpO1xuICB9XG5cbiAgZ2V0IGFsbERhdGFDb2x1bW5zKCk6IHN0cmluZ1tdIHtcbiAgICBpZiAodGhpcy5zaG93SGlzdG9yaWNhbERhdGEudmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhc3RDb2x1bW5zLmZsYXRNYXAoKGUsIGkpID0+IFtlLCB0aGlzLmN1cnJlbnRDb2x1bW5zW2ldXSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmN1cnJlbnRDb2x1bW5zO1xuICB9XG5cbiAgcHJpdmF0ZSBmaWx0ZXJUYWJsZUJ5U291cmNlc1dpdGhNYXRlcmlhbChvbmx5V2l0aDogYm9vbGVhbiB8IG51bGwpIHtcbiAgICBjb25zdCBhbGxDb2x1bW5zID0gdGhpcy5yZWNlbnRRdWFsaXR5TWF0cml4JC52YWx1ZS5jb2x1bW5zLnRvU29ydGVkKChhLCBiKSA9PiBhLmxhYmVsLmxvY2FsZUNvbXBhcmUoYi5sYWJlbCkpO1xuICAgIC8vIGF2b2lkIGZpbHRlcmluZyB3aGVuIG5vdCBuZWNlc3NhcnlcbiAgICB0aGlzLmZpbHRlcmVkQ29sdW1ucyA9IG9ubHlXaXRoID8gYWxsQ29sdW1ucy5maWx0ZXIoKGMpID0+IGMudG90YWwgPiAwKSA6IGFsbENvbHVtbnM7XG4gICAgdGhpcy5kYXRhdGFibGVDb2x1bW5zID0gdGhpcy5maWx0ZXJlZENvbHVtbnMubWFwKChjKSA9PiBjLmlkKTtcbiAgfVxuXG4gIHJlZ2lzdGVyRGF0ZVJhbmdlRmlsdGVyKCkge1xuICAgIHRoaXMucmFuZ2UudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmxvYWREYXRhV2l0aEN1cnJlbnRseVNlbGVjdGVkRmlsdGVycygpO1xuICAgIH0pO1xuICAgIHRoaXMubWV0YUFwaS5nZXRUaW1lcmFuZ2VGaWx0ZXIoKS5zdWJzY3JpYmUoKHJhbmdlRmlsdGVyKSA9PiB7XG4gICAgICBpZiAocmFuZ2VGaWx0ZXIpIHtcbiAgICAgICAgY29uc3Qgc3RhcnREYXRlID0gRGF0ZVRpbWUuZnJvbUlTTyhyYW5nZUZpbHRlci52YWx1ZXMuZmluZCgodikgPT4gdi5pZCA9PT0gJ3JhbmdlU3RhcnQnKT8ubGFiZWwhLCB7XG4gICAgICAgICAgem9uZTogJ3V0YycsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBlbmREYXRlID0gRGF0ZVRpbWUuZnJvbUlTTyhyYW5nZUZpbHRlci52YWx1ZXMuZmluZCgodikgPT4gdi5pZCA9PT0gJ3JhbmdlRW5kJyk/LmxhYmVsISwgeyB6b25lOiAndXRjJyB9KTtcbiAgICAgICAgLy90b2dnbGUgdGhlIGVtaXRFdmVudCB0byBpbml0aWFsbHkgbG9hZCB0aGUgZGF0YSBvciBub3RcbiAgICAgICAgdGhpcy5yYW5nZS5zZXRDb250cm9sKCdzdGFydCcsIG5ldyBGb3JtQ29udHJvbDxEYXRlVGltZT4oc3RhcnREYXRlLCB7IG5vbk51bGxhYmxlOiB0cnVlIH0pLCB7XG4gICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmFuZ2Uuc2V0Q29udHJvbCgnZW5kJywgbmV3IEZvcm1Db250cm9sPERhdGVUaW1lPihlbmREYXRlLCB7IG5vbk51bGxhYmxlOiB0cnVlIH0pLCB7IGVtaXRFdmVudDogdHJ1ZSB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVnaXN0ZXJDYXRlZ29yeUZpbHRlcnMoKSB7XG4gICAgdGhpcy5tZXRhQXBpXG4gICAgICAuZ2V0Q2F0ZWdvcnlGaWx0ZXJzKClcbiAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAuc3Vic2NyaWJlKChmaWx0ZXJzKSA9PiB7XG4gICAgICAgIGZpbHRlcnMuZm9yRWFjaCgoZmlsdGVyKSA9PiB7XG4gICAgICAgICAgdGhpcy5jYXRlZ29yeUNvbnRyb2xzLmFkZENvbnRyb2woZmlsdGVyLmZpZWxkLCBuZXcgRm9ybUNvbnRyb2woW10sIHsgbm9uTnVsbGFibGU6IHRydWUgfSksIHtcbiAgICAgICAgICAgIGVtaXRFdmVudDogZmFsc2UsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5jYXRlZ29yeUZpbHRlclZhbHVlcy5zZXQoXG4gICAgICAgICAgICBmaWx0ZXIuZmllbGQsXG4gICAgICAgICAgICBmaWx0ZXIudmFsdWVzLnRvU29ydGVkKChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBhLmxhYmVsLmxvY2FsZUNvbXBhcmUoYi5sYWJlbCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgdGhpcy5jYXRlZ29yeUNvbnRyb2xzLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMubG9hZERhdGFXaXRoQ3VycmVudGx5U2VsZWN0ZWRGaWx0ZXJzKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkxvYWRlZERhdGFDaGFuZ2VzKCkge1xuICAgIHRoaXMucmVjZW50UXVhbGl0eU1hdHJpeCRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcbiAgICAgICAgZmlsdGVyKChxbSkgPT4gcW0gIT09IG51bGwpLFxuICAgICAgICB0YXAoKCkgPT4gdGhpcy5maWx0ZXJUYWJsZUJ5U291cmNlc1dpdGhNYXRlcmlhbCh0aGlzLm9ubHlTb3VyY2VzV2l0aE1hdGVyaWFsLnZhbHVlKSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZERhdGFGb3JTdGFydCgpOiBPYnNlcnZhYmxlPFF1YWxpdHlNYXRyaXggfCBudWxsPiB7XG4gICAgaWYgKHRoaXMucmFuZ2UuY29udHJvbHMuc3RhcnQ/LnZhbHVlKSB7XG4gICAgICBjb25zdCBib2R5OiBGaWx0ZXJbXSA9IHRoaXMuZ2V0Q3VycmVudEZpbHRlclZhbHVlcygpO1xuICAgICAgYm9keS5wdXNoKHtcbiAgICAgICAgZmllbGQ6ICdhc09mJyxcbiAgICAgICAgdmFsdWVzOiBbeyBpZDogdGhpcy5yYW5nZS5jb250cm9scy5zdGFydC52YWx1ZS50b0lTTyh7IGluY2x1ZGVPZmZzZXQ6IGZhbHNlIH0pIGFzIHN0cmluZywgbGFiZWw6ICcnIH1dLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gdGhpcy5tZXRhQXBpLmdldFF1YWxpdHlNYXRyaXhXaXRoRmlsdGVyc1YyKGJvZHkpLnBpcGUodGFrZSgxKSk7XG4gICAgfVxuICAgIHJldHVybiBvZihudWxsKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZERhdGFGb3JFbmQoKTogT2JzZXJ2YWJsZTxRdWFsaXR5TWF0cml4PiB7XG4gICAgY29uc3QgYm9keTogRmlsdGVyW10gPSB0aGlzLmdldEN1cnJlbnRGaWx0ZXJWYWx1ZXMoKTtcbiAgICBib2R5LnB1c2goe1xuICAgICAgZmllbGQ6ICdhc09mJyxcbiAgICAgIHZhbHVlczogW3sgaWQ6IHRoaXMucmFuZ2UuY29udHJvbHMuZW5kLnZhbHVlLnRvSVNPKHsgaW5jbHVkZU9mZnNldDogZmFsc2UgfSkgYXMgc3RyaW5nLCBsYWJlbDogJycgfV0sXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMubWV0YUFwaS5nZXRRdWFsaXR5TWF0cml4V2l0aEZpbHRlcnNWMihib2R5KS5waXBlKHRha2UoMSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDdXJyZW50RmlsdGVyVmFsdWVzKCk6IEZpbHRlcltdIHtcbiAgICBjb25zdCBib2R5OiBGaWx0ZXJbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgW2ZpZWxkLCB2YWx1ZXNdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuY2F0ZWdvcnlDb250cm9scy52YWx1ZSkpIHtcbiAgICAgIGxldCByZXF1ZXN0VmFsdWVzOiBGaWx0ZXJWYWx1ZVtdID0gW107XG4gICAgICBpZiAodmFsdWVzICYmIHZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgcmVxdWVzdFZhbHVlcyA9IHZhbHVlcy5tYXAoKHZhbHVlKSA9PiAoeyBpZDogdmFsdWUsIGxhYmVsOiAnJyB9KSk7XG4gICAgICAgIGJvZHkucHVzaCh7IGZpZWxkLCB2YWx1ZXM6IHJlcXVlc3RWYWx1ZXMgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBib2R5O1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkRGF0YVdpdGhDdXJyZW50bHlTZWxlY3RlZEZpbHRlcnMoKSB7XG4gICAgLypcbiAgICBjb25zaWRlciB1c2luZyBhbiBpbnRlcm1lZGlhdGUgU3ViamVjdCB3aXRoIGEgc3dpdGNoTWFwIHBpcGVcbiAgICB0byBwcmV2ZW50IHRoYXQgb2xkZXIgKCBsb25nZXIgcnVubmluZyApIHJlcXVlc3RzIG92ZXJ3cml0ZSBuZXdlciBvbmVzXG4gICAgc2VlIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzY0NDI3NjI5L2hvdy10by11c2Utcnhqcy10by1jYW5jZWwtcHJldmlvdXMtaHR0cC1yZXF1ZXN0cy1pbi1hbi1hbmd1bGFyLXNlcnZpY2UvNjQ0OTAxNTUjNjQ0OTAxNTVcbiAgICAgKi9cbiAgICB0aGlzLmlzTG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgZm9ya0pvaW4oe1xuICAgICAgcGFzdFFtOiB0aGlzLmxvYWREYXRhRm9yU3RhcnQoKSxcbiAgICAgIGN1cnJlbnRRbTogdGhpcy5sb2FkRGF0YUZvckVuZCgpLFxuICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YXAoKHsgcGFzdFFtOiBfLCBjdXJyZW50UW0gfSkgPT4ge1xuICAgICAgICAgIHRoaXMuZGF0YXRhYmxlQ29sdW1ucyA9IGN1cnJlbnRRbS5jb2x1bW5zLmZpbHRlcigoYykgPT4gYy5sZXZlbCAhPT0gMCkubWFwKChjKSA9PiBjLmlkKTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHsgcGFzdFFtLCBjdXJyZW50UW0gfSkgPT4ge1xuICAgICAgICB0aGlzLnJlY2VudFF1YWxpdHlNYXRyaXgkLm5leHQoY3VycmVudFFtKTtcbiAgICAgICAgdGhpcy5wYXN0UXVhbGl0eU1hdHJpeCQubmV4dChwYXN0UW0pO1xuICAgICAgfSk7XG4gIH1cblxuICBvcGVuRWRpdExpbmsoc291cmNlOiBzdHJpbmcsIGlzc3VlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5saW5rU2VydmljZS5vcGVuQnlSZXBsaWNhdGlvbnNvdXJjZUFuZElzc3VlVHlwZVdpdGhGaWx0ZXJzKHNvdXJjZSwgaXNzdWUsIHRoaXMuY2F0ZWdvcnlDb250cm9scy52YWx1ZSk7XG4gIH1cblxuICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvY29tcG9uZW50cy9pc3N1ZXMvODM2MSNpc3N1ZWNvbW1lbnQtMzQ1ODA0OTU0XG4gIGNvbHVtbklkZW50KF9pbmRleDogbnVtYmVyLCBjb2w6IFF1YWxpdHlNYXRyaXhIZWFkZXIpIHtcbiAgICByZXR1cm4gY29sLmlkO1xuICB9XG5cbiAgYXN5bmMgcmVmcmVzaCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvL29yIHNob3VsZCB3ZSByZXNldCBhbGwgRmlsdGVyP1xuICAgIHRoaXMubG9hZERhdGFXaXRoQ3VycmVudGx5U2VsZWN0ZWRGaWx0ZXJzKCk7XG4gIH1cblxuICBnZXRQYXN0Q29sdW1uKGNvbHVtbklkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5wYXN0UXVhbGl0eU1hdHJpeCQudmFsdWU/LmNvbHVtbnMuZmluZCgoYykgPT4gYy5pZCA9PT0gY29sdW1uSWQpO1xuICB9XG5cbiAgZ2V0VHJlbmQocm93OiBRdWFsaXR5TWF0cml4Um93LCBjb2x1bW46IFF1YWxpdHlNYXRyaXhIZWFkZXIpOiB7IGRlbHRhPzogbnVtYmVyOyB0cmVuZD86IHN0cmluZyB9IHtcbiAgICBpZiAodGhpcy5wYXN0UXVhbGl0eU1hdHJpeCQudmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgaWYgKHRoaXMucGFzdFF1YWxpdHlNYXRyaXgkLnZhbHVlLmNvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgcGFzdF9yb3cgPSB0aGlzLnBhc3RRdWFsaXR5TWF0cml4JD8udmFsdWUucm93cy5maW5kKChwcikgPT4gcHIubWV0YS5pZCA9PSByb3cubWV0YS5pZCk7XG4gICAgICBjb25zdCBwYXN0X2NvbHVtbiA9IHRoaXMucGFzdFF1YWxpdHlNYXRyaXgkLnZhbHVlLmNvbHVtbnMuZmluZCgoYykgPT4gYy5pZCA9PSBjb2x1bW4uaWQpO1xuICAgICAgaWYgKCFwYXN0X3JvdyB8fCAhcGFzdF9jb2x1bW4pIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkZWx0YSA9IE1hdGguZmxvb3IoXG4gICAgICAgICgxMDAgKiByb3cuY291bnRzW2NvbHVtbi5pZF0uc3VmZmljaWVudCkgLyBjb2x1bW4udG90YWwgLVxuICAgICAgICAgICgxMDAgKiBwYXN0X3Jvdy5jb3VudHNbY29sdW1uLmlkXS5zdWZmaWNpZW50KSAvIHBhc3RfY29sdW1uLnRvdGFsXG4gICAgICApO1xuXG4gICAgICBjb25zdCB0cmVuZCA9IGRlbHRhID09PSAwID8gJ3RyZW5kaW5nX2ZsYXQnIDogZGVsdGEgPCAwID8gJ3RyZW5kaW5nX2Rvd24nIDogJ3RyZW5kaW5nX3VwJztcbiAgICAgIHJldHVybiB7IGRlbHRhLCB0cmVuZCB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9XG5cbiAgZ2V0RG9udXRTbGljZXMocm93OiBRdWFsaXR5TWF0cml4Um93LCBjb2x1bW46IFF1YWxpdHlNYXRyaXhIZWFkZXIpOiBEb251dFNsaWNlW10ge1xuICAgIGNvbnN0IHN1ZmZpY2llbnRUb3RhbCA9IHJvdy5jb3VudHNbY29sdW1uLmlkXS5zdWZmaWNpZW50O1xuICAgIGNvbnN0IGluc3VmZmljaWVudFRvdGFsID0gcm93LmNvdW50c1tjb2x1bW4uaWRdLmluc3VmZmljaWVudDtcbiAgICBjb25zdCBtaXNzaW5nVG90YWwgPSBjb2x1bW4udG90YWwgLSBzdWZmaWNpZW50VG90YWwgLSBpbnN1ZmZpY2llbnRUb3RhbDtcbiAgICBsZXQgc3VmZmljaWVudEZpbGxSYXRlID0gMDtcbiAgICBsZXQgaW5zdWZmaWNpZW50RmlsbFJhdGUgPSAwO1xuICAgIC8vRGVyIFdlcnQgYmVyZWNobmV0IHNpY2ggYXVzIGRlbSB0b3RhbF9jb3VudCAtIHdpdGhvdXRfZGVzY3JpcHRpb25fY291bnQuXG5cbiAgICBpZiAoY29sdW1uLnRvdGFsICE9PSAwKSB7XG4gICAgICBzdWZmaWNpZW50RmlsbFJhdGUgPSBNYXRoLnJvdW5kKCgxMDAgKiBzdWZmaWNpZW50VG90YWwpIC8gY29sdW1uLnRvdGFsKTtcbiAgICAgIGluc3VmZmljaWVudEZpbGxSYXRlID0gTWF0aC5yb3VuZCgoMTAwICogaW5zdWZmaWNpZW50VG90YWwpIC8gY29sdW1uLnRvdGFsKTtcbiAgICB9XG4gICAgY29uc3QgcmVzdCA9IDEwMCAtIChzdWZmaWNpZW50RmlsbFJhdGUgKyBpbnN1ZmZpY2llbnRGaWxsUmF0ZSk7IC8vIGEuay5hLiBcIm1pc3NpbmdcIlxuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIGlkOiAzLFxuICAgICAgICBwZXJjZW50OiByZXN0LFxuICAgICAgICBjb2xvcjogJyNEOEVERkMnLFxuICAgICAgICBsYWJlbDogYCR7cmVzdH0gJSAoJHttaXNzaW5nVG90YWx9KWAsXG4gICAgICAgIHZlcmJvc2VMYWJlbDogYCR7bWlzc2luZ1RvdGFsfSBNZXRhZGF0ZW5zXFx1MDBlNHR6ZSBmZWhsZW5gLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWQ6IDEsXG4gICAgICAgIHBlcmNlbnQ6IGluc3VmZmljaWVudEZpbGxSYXRlLFxuICAgICAgICBjb2xvcjogJyNDMjA4MDgnLFxuICAgICAgICBsYWJlbDogYCR7aW5zdWZmaWNpZW50RmlsbFJhdGV9ICUgKCR7aW5zdWZmaWNpZW50VG90YWx9KWAsXG4gICAgICAgIHZlcmJvc2VMYWJlbDogYCR7aW5zdWZmaWNpZW50VG90YWx9IE1ldGFkYXRlbnNcXHUwMGU0dHplIHNpbmQgdW56dXJlaWNoZW5kIGF1c2dlZlxcdTAwZmNsbHRgLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWQ6IDIsXG4gICAgICAgIHBlcmNlbnQ6IHN1ZmZpY2llbnRGaWxsUmF0ZSxcbiAgICAgICAgY29sb3I6ICcjNEFCRUZGJyxcbiAgICAgICAgbGFiZWw6IGAke3N1ZmZpY2llbnRGaWxsUmF0ZX0gJSAoJHtzdWZmaWNpZW50VG90YWx9KWAsXG4gICAgICAgIHZlcmJvc2VMYWJlbDogYCR7c3VmZmljaWVudFRvdGFsfSBNZXRhZGF0ZW5zXFx1MDBlNHR6ZSBzaW5kIGd1dCBhdXNnZWZcXHUwMGZjbGx0YCxcbiAgICAgIH0sXG4gICAgXTtcbiAgfVxuXG4gIHNob3dUb29sdGlwKHJvdzogUXVhbGl0eU1hdHJpeFJvdywgY29sdW1uOiBRdWFsaXR5TWF0cml4SGVhZGVyLCBjZWxsOiBIVE1MRWxlbWVudCkge1xuICAgIGlmIChyb3cuY291bnRzW2NvbHVtbi5pZF0uc3VmZmljaWVudCArIHJvdy5jb3VudHNbY29sdW1uLmlkXS5pbnN1ZmZpY2llbnQgPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMudG9vbHRpcHMuaGFzKGNlbGwpKSB7XG4gICAgICB0aGlzLnRvb2x0aXBzLmdldChjZWxsKSEuY2FuY2VsQ2xvc2VBY3Rpb24oKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0b29sdGlwUmVmID0gdGhpcy50b29sdGlwU2VydmljZS5jcmVhdGUoRG9udXRDaGFydFRvb2x0aXBDb21wb25lbnQsIHtcbiAgICAgIGNsb3NlVGltZW91dDogb3BlbkNsb3NlVGltZW91dCxcbiAgICAgIG9wZW5UaW1lb3V0OiBvcGVuQ2xvc2VUaW1lb3V0LFxuICAgICAgZGF0YToge1xuICAgICAgICBsYWJlbDogY29sdW1uLmxhYmVsLFxuICAgICAgICBkYXRhOiB0cmFuc2Zvcm1Eb251dENoYXJ0RGF0YSh0aGlzLmdldERvbnV0U2xpY2VzKHJvdywgY29sdW1uKSksXG4gICAgICB9LFxuICAgICAgb3ZlcmxheUNvbmZpZzoge1xuICAgICAgICBoYXNCYWNrZHJvcDogZmFsc2UsXG4gICAgICAgIHBvc2l0aW9uU3RyYXRlZ3k6IHRoaXMub3ZlcmxheS5wb3NpdGlvbigpLmZsZXhpYmxlQ29ubmVjdGVkVG8oY2VsbCkud2l0aFBvc2l0aW9ucyhjZW50ZXJQb3NpdGlvblN0cmF0ZWd5KSxcbiAgICAgICAgZGlzcG9zZU9uTmF2aWdhdGlvbjogdHJ1ZSxcbiAgICAgICAgcGFuZWxDbGFzczogJ2RvbnV0LWNoYXJ0LXRvb2x0aXAnLFxuICAgICAgfSxcbiAgICAgIG9uQ2xvc2U6ICgpID0+IHtcbiAgICAgICAgdGhpcy50b29sdGlwcy5kZWxldGUoY2VsbCk7XG4gICAgICB9LFxuICAgIH0pO1xuICAgIHRvb2x0aXBSZWYub3BlbigpO1xuICAgIHRoaXMudG9vbHRpcHMuc2V0KGNlbGwsIHRvb2x0aXBSZWYpO1xuICB9XG5cbiAgaGlkZVRvb2x0aXAoY2VsbDogSFRNTEVsZW1lbnQpIHtcbiAgICB0aGlzLnRvb2x0aXBzLmdldChjZWxsKT8ubWFya0ZvckNsb3NlKCk7XG4gIH1cblxuICBmaW5kSG9yaXpvbnRhbFNjcm9sbENvbnRhaW5lcihlbGVtZW50OiBFbGVtZW50KTogRWxlbWVudCB8IG51bGwge1xuICAgIGlmIChlbGVtZW50LnNjcm9sbFdpZHRoID4gZWxlbWVudC5jbGllbnRXaWR0aCAmJiBbJ2F1dG8nLCAnc2Nyb2xsJ10uaW5jbHVkZXMoZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5vdmVyZmxvd1gpKSB7XG4gICAgICAvLyBmaW5kIHRoZSBuZWFyZXN0IGhvcml6b250YWxseSBzY3JvbGxhYmxlIGVsZW1lbnRcbiAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWVsZW1lbnQucGFyZW50RWxlbWVudCkge1xuICAgICAgICByZXR1cm4gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmZpbmRIb3Jpem9udGFsU2Nyb2xsQ29udGFpbmVyKGVsZW1lbnQucGFyZW50RWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgc2Nyb2xsVG9SaWdodCgpIHtcbiAgICBjb25zdCBzY3JvbGxpbmdFbGVtZW50ID0gdGhpcy5maW5kSG9yaXpvbnRhbFNjcm9sbENvbnRhaW5lcih0aGlzLnJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KTtcbiAgICBpZiAoIXNjcm9sbGluZ0VsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgdmlld3BvcnQgPSBnbG9iYWxUaGlzLnZpc3VhbFZpZXdwb3J0O1xuICAgIGlmICghdmlld3BvcnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgdmlld3BvcnRXaWR0aCA9IHZpZXdwb3J0LndpZHRoO1xuXG4gICAgY29uc3QgbGFzdFZpc2libGUgPSB0aGlzLnNjcm9sbE1hcmtlcnMuZmluZExhc3QoXG4gICAgICAobWFya2VyKSA9PiAobWFya2VyLmVsZW1lbnQubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCA8IHZpZXdwb3J0V2lkdGhcbiAgICApO1xuXG4gICAgaWYgKCFsYXN0VmlzaWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGxlZnRDb2x1bW5XaWR0aCA9IHRoaXMuaXNzdWVUeXBlSGVhZGVyPy5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoID8/IDA7XG5cbiAgICBzY3JvbGxpbmdFbGVtZW50LnNjcm9sbEJ5KHtcbiAgICAgIGxlZnQ6IChsYXN0VmlzaWJsZS5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgLSBsZWZ0Q29sdW1uV2lkdGgsXG4gICAgICBiZWhhdmlvcjogJ3Ntb290aCcsXG4gICAgfSk7XG4gIH1cblxuICBzY3JvbGxUb0xlZnQoKSB7XG4gICAgY29uc3Qgc2Nyb2xsaW5nRWxlbWVudCA9IHRoaXMuZmluZEhvcml6b250YWxTY3JvbGxDb250YWluZXIodGhpcy5yZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCk7XG4gICAgaWYgKCFzY3JvbGxpbmdFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHZpZXdwb3J0ID0gZ2xvYmFsVGhpcy52aXN1YWxWaWV3cG9ydDtcbiAgICBpZiAoIXZpZXdwb3J0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHZpZXdwb3J0V2lkdGggPSB2aWV3cG9ydC53aWR0aDtcblxuICAgIGNvbnN0IGxlZnRDb2x1bW5XaWR0aCA9IHRoaXMuaXNzdWVUeXBlSGVhZGVyPy5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoID8/IDA7XG5cbiAgICBjb25zdCBmaXJzdFZpc2libGUgPSB0aGlzLnNjcm9sbE1hcmtlcnMuZmluZChcbiAgICAgIChtYXJrZXIpID0+IChtYXJrZXIuZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5yaWdodCA+IGxlZnRDb2x1bW5XaWR0aFxuICAgICk7XG5cbiAgICBpZiAoIWZpcnN0VmlzaWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsQnkoe1xuICAgICAgbGVmdDogKGZpcnN0VmlzaWJsZS5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0IC0gdmlld3BvcnRXaWR0aCxcbiAgICAgIGJlaGF2aW9yOiAnc21vb3RoJyxcbiAgICB9KTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpzY3JvbGwnKVxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJylcbiAgb25TY3JvbGwoKSB7XG4gICAgY29uc3Qgc2Nyb2xsaW5nRWxlbWVudCA9IHRoaXMuZmluZEhvcml6b250YWxTY3JvbGxDb250YWluZXIodGhpcy5yZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCk7XG4gICAgaWYgKCFzY3JvbGxpbmdFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2Nyb2xsTGVmdC5zZXQoc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0KTtcbiAgICB0aGlzLnNjcm9sbFdpZHRoLnNldChzY3JvbGxpbmdFbGVtZW50LnNjcm9sbFdpZHRoKTtcbiAgfVxufVxuIiwiPG1hdC1jYXJkIGFwcGVhcmFuY2U9XCJyYWlzZWRcIj5cbiAgPG1hdC1jYXJkLWhlYWRlciAqbmdJZj1cInBhZ2VUaXRsZVwiPlxuICAgIDxtYXQtY2FyZC10aXRsZT5cbiAgICAgIFF1YWxpdMOkdHNtZXRyaWs6IHt7IHBhZ2VUaXRsZSB8IHRyYW5zbGF0ZSB9fXt7aXNMb2FkaW5nKCkgPyBcIjogTGFkZSBuZXVlIERhdGVuLlwiIDogXCJcIn19PC9tYXQtY2FyZC10aXRsZVxuICAgID5cbiAgPC9tYXQtY2FyZC1oZWFkZXI+XG4gIDxtYXQtY2FyZC1jb250ZW50IGNsYXNzPVwidG9vbGJhclwiPlxuICAgIDxtZXRhcXMyLXFtLWZpbHRlciAqbmdGb3I9XCJsZXQgZmlsdGVyIG9mIGNhdGVnb3J5Q29udHJvbHMuY29udHJvbHMgfCBrZXl2YWx1ZTsgdHJhY2tCeTogZmlsdGVySWRlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJjYXRlZ29yeUZpbHRlclZhbHVlcy5nZXQoZmlsdGVyLmtleSlcIlxuICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXRGb3JtQ29udHJvbF09XCJmaWx0ZXIudmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdID0gXCInZmlsdGVyLicgKyBmaWx0ZXIua2V5IHwgdHJhbnNsYXRlXCIgLz5cbiAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uYmFyXCI+XG4gICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbZGlzYWJsZWRdPVwiaXNMb2FkaW5nKClcIiBsYWJlbFBvc2l0aW9uPVwiYmVmb3JlXCIgW2Zvcm1Db250cm9sXT1cIm9ubHlTb3VyY2VzV2l0aE1hdGVyaWFsXCIgaWQ9XCJvbmx5U291cmNlc1dpdGhNYXRlcmlhbFwiPlxuICAgICAgICBzaG93IG9ubHkgc291cmNlcyB3aXRoIG1hdGVyaWFsXG4gICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8ZGl2IHN0eWxlPVwiZmxleDogMSAxIGF1dG9cIj48L2Rpdj5cbiAgICAgIDxtZXRhcXMyLWRhdGVwaWNrZXIgKm5nSWY9XCJzaG93SGlzdG9yaWNhbERhdGEudmFsdWVcIiBbZGlzYWJsZWRdPVwiaXNMb2FkaW5nKClcIiBbaW5wdXRHcm91cF09XCJyYW5nZVwiIC8+XG4gICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbZGlzYWJsZWRdPVwiaXNMb2FkaW5nKClcIiBsYWJlbFBvc2l0aW9uPVwiYmVmb3JlXCIgW2Zvcm1Db250cm9sXT1cInNob3dIaXN0b3JpY2FsRGF0YVwiIGlkPVwic2hvd0hpc3RvcmljYWxEYXRhXCI+XG4gICAgICAgIHNob3cgaGlzdG9yaWNhbCBkYXRhXG4gICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiaXNMb2FkaW5nXCJcbiAgICAgICAgKGNsaWNrKT1cInJlZnJlc2goKVwiXG4gICAgICAgIG1hdFRvb2x0aXA9XCJBa3R1YWxpc2llcmUgZGVuIElTVC1TdGFuZFwiXG4gICAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgICAgPlxuICAgICAgICA8bWF0LWljb24+cmVmcmVzaDwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxkaXYgc3R5bGU9XCJmbGV4OiAwIDAge3tzY3JvbGxlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aH19cHhcIj48L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzY3JvbGwtY29udHJvbGxlclwiICNzY3JvbGxlcj4gPCEtLSBwdXQgdGhlIHdob2xlIHRvb2xiYXIgaW4gYSBmaXhlZCBjb250YWluZXIgKE1RUy0gLS0+XG4gICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gKGNsaWNrKT1cInNjcm9sbFRvTGVmdCgpXCIgW2Rpc2FibGVkXT1cIiFpc0xlZnRTY3JvbGxhYmxlKClcIiBjbGFzcz1cInNjcm9sbC1idXR0b25cIj5cbiAgICAgICAgICA8bWF0LWljb24gc3R5bGU9XCJtYXJnaW46IDBcIj5jaGV2cm9uX2xlZnQ8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiAoY2xpY2spPVwic2Nyb2xsVG9SaWdodCgpXCIgW2Rpc2FibGVkXT1cIiFpc1JpZ2h0U2Nyb2xsYWJsZSgpXCIgY2xhc3M9XCJzY3JvbGwtYnV0dG9uXCI+XG4gICAgICAgICAgPG1hdC1pY29uIHN0eWxlPVwibWFyZ2luOiAwXCI+Y2hldnJvbl9yaWdodDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbWF0LWNhcmQtY29udGVudD5cbjwvbWF0LWNhcmQ+XG48bWF0LWNhcmQ+XG4gIDxtZXRhcXMyLXByb2dyZXNzLXNwaW5uZXIgW2Rpc3BsYXlQcm9ncmVzc1NwaW5uZXJdPVwiaXNMb2FkaW5nKClcIj48L21ldGFxczItcHJvZ3Jlc3Mtc3Bpbm5lcj5cbiAgPHRhYmxlIFtjbGFzcy53aGlsZS1sb2FkaW5nXT1cImlzTG9hZGluZygpXCIgbWF0LXRhYmxlIFtkYXRhU291cmNlXT1cInJlY2VudFF1YWxpdHlNYXRyaXgkLnZhbHVlLnJvd3NcIiBjbGFzcz1cInF1YWxpdHktbWF0cml4XCI+XG4gICAgPCEtLSBEZWZpbmUgY29sdW1ucyBvZiB0YWJsZSAtLT5cbiAgICA8IS0tIFJvdyBIZWFkZXIgQ29sdW1uIC0tPlxuICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwicm93LWhlYWRlclwiIHN0aWNreT5cbiAgICAgIDx0aCByb3dzcGFuPVwiMlwiIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiAjaXNzdWVUeXBlPklzc3VlIFR5cGU8L3RoPlxuICAgICAgPHRkXG4gICAgICAgIG1hdC1jZWxsXG4gICAgICAgICptYXRDZWxsRGVmPVwibGV0IHJvd1wiXG4gICAgICAgIG1hdFRvb2x0aXA9XCJ7e3Jvdy5tZXRhLmFsdF9sYWJlbH19XCJcbiAgICAgICAgY2xhc3M9XCJyb3ctaGVhZGVyIG1hdC1jZWxsLWxldmVsLXt7cm93Lm1ldGEubGV2ZWwgKyAxfX1cIlxuICAgICAgPlxuICAgICAgICB7e1wicXVhbGl0eV9tYXRyaXguXCIgKyByb3cubWV0YS5sYWJlbCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC90ZD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8IS0tIG9uZSBjb2x1bW4gZm9yIHRoZSBzb3VyY2UgLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sIG9mIGZpbHRlcmVkQ29sdW1uczsgdHJhY2tCeTpjb2x1bW5JZGVudFwiIFttYXRDb2x1bW5EZWZdPVwiY29sLmlkICsgJ19zb3VyY2UnXCI+XG4gICAgICA8dGggW2F0dHIuY29sc3Bhbl09XCJzaG93SGlzdG9yaWNhbERhdGEudmFsdWU/MjoxXCIgbWV0YXFzMlNjcm9sbE1hcmtlciBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0VG9vbHRpcD1cInt7Y29sLmFsdExhYmVsfX1cIj57e2NvbC5sYWJlbH19PC90aD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8IS0tIC9zb3VyY2UgLS0+XG4gICAgPCEtLSBjdXJyZW50IERhdGEgQ29sdW1ucyAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgZmlsdGVyZWRDb2x1bW5zOyB0cmFja0J5OmNvbHVtbklkZW50XCIgW21hdENvbHVtbkRlZl09XCJjb2x1bW4uaWQgKyAnX2N1cnJlbnQnXCI+XG4gICAgICA8dGggY2xhc3M9XCJyZWNlbnQtZGF0YS1jZWxsXCIgbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdFRvb2x0aXA9XCJ7e2NvbHVtbi5hbHRMYWJlbH19XCI+e3sgcmFuZ2UuY29udHJvbHMuZW5kLnZhbHVlPy50b0xvY2FsZVN0cmluZyhEYXRlVGltZS5EQVRFX1NIT1JUKSB9fSA8YnI+KHt7Y29sdW1uLnRvdGFsfX0pPC90aD5cbiAgICAgIDx0ZCBjbGFzcz1cInJlY2VudC1kYXRhLWNlbGxcIiBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiAjY2VsbCAobW91c2VvdmVyKT1cInNob3dUb29sdGlwKHJvdywgY29sdW1uLCBjZWxsKVwiIChtb3VzZWxlYXZlKT1cImhpZGVUb29sdGlwKGNlbGwpXCI+XG4gICAgICAgICAgPGEgKm5nSWY9XCJjb2x1bW4udG90YWwgPiAwIGVsc2UgZW1wdHlEaXZcIiBjbGFzcz1cImNoYXJ0LWNvbnRhaW5lclwiIChjbGljayk9XCJvcGVuRWRpdExpbmsoIGNvbHVtbi5sYWJlbCwgcm93Lm1ldGEubGFiZWwpXCI+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8bWV0YXFzMi1kb251dC1jaGFydCBbZGF0YV09XCJnZXREb251dFNsaWNlcyhyb3csIGNvbHVtbilcIiBbYm9yZGVyU2l6ZV09XCIyNVwiPjwvbWV0YXFzMi1kb251dC1jaGFydD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvYT5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2VtcHR5RGl2PlxuICAgICAgICAgICAgPGRpdj4tPC9kaXY+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvdGQ+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPCEtLSAvY3VycmVudCBEYXRhIENvbHVtbnMgLS0+XG4gICAgPCEtLSBwYXN0IERhdGEgQ29sdW1ucyAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd0hpc3RvcmljYWxEYXRhLnZhbHVlXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgZmlsdGVyZWRDb2x1bW5zOyB0cmFja0J5OmNvbHVtbklkZW50XCIgW21hdENvbHVtbkRlZl09XCJjb2x1bW4uaWQgKyAnX3Bhc3QnXCI+XG4gICAgICAgIDx0aCBjbGFzcz1cImhpc3RvcmljLWRhdGEtY2VsbFwiIG1hdC1oZWFkZXItY2VsbFxuICAgICAgICAgICAgKm1hdEhlYWRlckNlbGxEZWY+e3sgcmFuZ2UuY29udHJvbHMuc3RhcnQudmFsdWU/LnRvTG9jYWxlU3RyaW5nKERhdGVUaW1lLkRBVEVfU0hPUlQpIH19XG4gICAgICAgICAgPGJyPnt7IGdldFBhc3RDb2x1bW4oY29sdW1uLmlkKT8udG90YWwgfX1cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRkIGNsYXNzPVwiaGlzdG9yaWMtZGF0YS1jZWxsXCIgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldFRyZW5kKHJvdywgY29sdW1uKSBhcyB0cmVuZFwiPlxuICAgICAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwidHJlbmQudHJlbmRcIj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIGFyaWEtaGlkZGVuPVwiZmFsc2VcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInRyZW5kLnRyZW5kXCIgW2ZvbnRJY29uXT1cInRyZW5kLnRyZW5kIVwiIC8+XG4gICAgICAgICAgICAgIHt7IHRyZW5kLmRlbHRhIH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwhLS0gL3Bhc3QgRGF0YSBDb2x1bW5zIC0tPlxuXG4gICAgICA8IS0tIEdlbmVyYXRlIGFjdHVhbCB0YWJsZSAtLT5cbiAgICA8dHIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cIlsncm93LWhlYWRlciddLmNvbmNhdCggc291cmNlQ29sdW1ucyk7IHN0aWNreTogdHJ1ZTtcIj48L3RyPlxuICAgIDx0ciBtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiYWxsRGF0YUNvbHVtbnM7IHN0aWNreTogdHJ1ZTtcIj48L3RyPlxuICAgIDx0ciBtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBbJ3Jvdy1oZWFkZXInXS5jb25jYXQoYWxsRGF0YUNvbHVtbnMpXCI+PC90cj5cbiAgPC90YWJsZT5cbjwvbWF0LWNhcmQ+XG4iXX0=
|