@eqproject/eqp-dynamic-module 2.9.36 → 2.9.38
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/components/private/form-statistics/filter-form-statistic/filter-form-statistic.component.mjs +47 -4
- package/esm2020/lib/models/statistic.model.mjs +1 -1
- package/fesm2015/eqproject-eqp-dynamic-module.mjs +44 -2
- package/fesm2015/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/fesm2020/eqproject-eqp-dynamic-module.mjs +44 -2
- package/fesm2020/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/lib/components/private/form-statistics/filter-form-statistic/filter-form-statistic.component.d.ts +6 -1
- package/lib/models/statistic.model.d.ts +2 -2
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Component, EventEmitter, Input, Output, ViewChildren } from '@angular/core';
|
|
1
|
+
import { Component, EventEmitter, Input, Output, ViewChild, ViewChildren } from '@angular/core';
|
|
2
2
|
import { FieldTypeEnum } from '../../../../models/baseField.model';
|
|
3
3
|
import { FormScalarTypeEnum } from '../../../../models/form.model';
|
|
4
4
|
import { DynRecord, Record } from '../../../../models/record.model';
|
|
@@ -10,6 +10,7 @@ import { DynamicModuleListFormRecordActionsDefault } from '../../../../models/dy
|
|
|
10
10
|
import { CustomExportType, ExportEqpTable, TypeColumn } from '@eqproject/eqp-table';
|
|
11
11
|
import { DynamicModuleFilterResultViewModeEnum } from '../../../../models/dynamicModuleFilterResultViewModeEnum.model';
|
|
12
12
|
import { GlobalService } from '../../../../services/global.service';
|
|
13
|
+
import { LogicOperator } from '../../../../models/logicOperator.model';
|
|
13
14
|
import * as i0 from "@angular/core";
|
|
14
15
|
import * as i1 from "../../../../services/utilityHelper.services";
|
|
15
16
|
import * as i2 from "@angular/material/button";
|
|
@@ -48,6 +49,9 @@ export class FilterFormStatisticComponent {
|
|
|
48
49
|
this.filterEqpTableResults = new Array();
|
|
49
50
|
this.listViewConfigurations = new DynamicModuleListConfig();
|
|
50
51
|
this.columns = new Array();
|
|
52
|
+
this.columnsOutdated = new Array();
|
|
53
|
+
this.outdatedFields = new Array();
|
|
54
|
+
this.outdatedTableLoaded = false;
|
|
51
55
|
this.fieldGroups = {};
|
|
52
56
|
this.FormScalarTypeEnum = FormScalarTypeEnum;
|
|
53
57
|
this.FieldTypeEnum = FieldTypeEnum;
|
|
@@ -101,7 +105,17 @@ export class FilterFormStatisticComponent {
|
|
|
101
105
|
this.editResponseRecord();
|
|
102
106
|
}
|
|
103
107
|
if (this.Statistic != null && this.Statistic.Statistics != null && this.Statistic.Statistics.length > 0) {
|
|
108
|
+
// Il filtro viene caricato dall'esterno e potrebbero esserci dei campi non più attuali e quindi vanno separati
|
|
104
109
|
this.filters = this.Statistic;
|
|
110
|
+
this.Statistic.Statistics.forEach((statisticField) => {
|
|
111
|
+
var foundFieldIndex = this.form.Fields.find(x => x.Name == statisticField.key);
|
|
112
|
+
if (foundFieldIndex == null) {
|
|
113
|
+
// Il campo è presente nei filtri ma non nella definizione del form attuale. Il filtro è quindi outdated;
|
|
114
|
+
this.outdatedFields.push(statisticField);
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
this.configureColumns();
|
|
118
|
+
this.outdatedTableLoaded = true;
|
|
105
119
|
}
|
|
106
120
|
// l'inizializzazione termina con il recupero del record o con l'inizializzazione del form vuoto
|
|
107
121
|
this.cdr.detectChanges();
|
|
@@ -129,6 +143,25 @@ export class FilterFormStatisticComponent {
|
|
|
129
143
|
this.filterEqpTableResults.push(object);
|
|
130
144
|
});
|
|
131
145
|
}
|
|
146
|
+
this.columnsOutdated = [];
|
|
147
|
+
this.columnsOutdated.push({
|
|
148
|
+
key: 'action', display: '',
|
|
149
|
+
type: TypeColumn.MenuAction, buttonMenuIcon: 'settings',
|
|
150
|
+
styles: { flex: '0 0 5%' },
|
|
151
|
+
actions: [
|
|
152
|
+
{ name: "Rimuovi", icon: 'delete', fn: (element, col, elementIndex) => this.deleteOutdatedDMFilter(element) }
|
|
153
|
+
]
|
|
154
|
+
});
|
|
155
|
+
this.columnsOutdated.push({ key: "key", display: "Nome campo", styles: { flex: "0 0 30%" } });
|
|
156
|
+
this.columnsOutdated.push({
|
|
157
|
+
key: "logicoperator",
|
|
158
|
+
display: "Operatore",
|
|
159
|
+
type: TypeColumn.Enum,
|
|
160
|
+
enumModel: LogicOperator,
|
|
161
|
+
styles: { flex: "0 0 10%" }
|
|
162
|
+
});
|
|
163
|
+
this.columnsOutdated.push({ key: "value", display: "Valore", styles: { flex: "0 0 30%" } });
|
|
164
|
+
console.log("columnsOutdated eseguito");
|
|
132
165
|
}
|
|
133
166
|
configureExport() {
|
|
134
167
|
this.exportEqpTable.buttonText = "Scarica";
|
|
@@ -167,6 +200,13 @@ export class FilterFormStatisticComponent {
|
|
|
167
200
|
outputExternalFilters() {
|
|
168
201
|
this.afterOutputExternalFilters.emit(this.filters);
|
|
169
202
|
}
|
|
203
|
+
deleteOutdatedDMFilter(el) {
|
|
204
|
+
var indexToDelete = this.filters.Statistics.findIndex(x => x.key == el.key);
|
|
205
|
+
this.filters.Statistics.splice(indexToDelete, 1);
|
|
206
|
+
var outdatedIndexToDelete = this.outdatedFields.findIndex(x => x.key == el.key);
|
|
207
|
+
this.outdatedFields.splice(outdatedIndexToDelete, 1);
|
|
208
|
+
this.tableOutdated.reloadDatatable();
|
|
209
|
+
}
|
|
170
210
|
reset() {
|
|
171
211
|
// Resetto i campi del record
|
|
172
212
|
Object.keys(this.record).forEach(key => {
|
|
@@ -457,10 +497,10 @@ export class FilterFormStatisticComponent {
|
|
|
457
497
|
}
|
|
458
498
|
}
|
|
459
499
|
FilterFormStatisticComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FilterFormStatisticComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.UtilityHelperService }], target: i0.ɵɵFactoryTarget.Component });
|
|
460
|
-
FilterFormStatisticComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: FilterFormStatisticComponent, selector: "filter-form-statistic", inputs: { configurations: "configurations", endPointConfiguration: "endPointConfiguration", userID: "userID", externalButtons: "externalButtons", actionButtons: "actionButtons", formID: "formID", form: "form", record: "record", onlyView: "onlyView", defaultListActions: "defaultListActions", filterResultViewMode: "filterResultViewMode", Statistic: "Statistic" }, outputs: { fireTrigger: "fireTrigger", saveRecordEvent: "saveRecordEvent", afterSaveRecordEvent: "afterSaveRecordEvent", afterFilter: "afterFilter", afterOutputExternalFilters: "afterOutputExternalFilters" }, viewQueries: [{ propertyName: "fieldTemplate", predicate: ["fieldTemplate"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"loader\">\r\n\r\n <div class=\"row eqp-dynamic-module-title add-form-record-header\" *ngIf=\"showTitle\">\r\n <div class=\"col-md-12\">\r\n <h4><b>{{form.Name}}</b></h4>\r\n </div>\r\n </div>\r\n\r\n <form [formGroup]=\"formForm\" class=\"add-form-record-form\">\r\n\r\n <!-- VISUALIZZAZIONE SEMPLICE -->\r\n <ng-container *ngIf=\"form.FormScalarType == FormScalarTypeEnum.Semplice && !showListView\" [ngTemplateOutlet]=\"fieldTemplates\"\r\n [ngTemplateOutletContext]=\"{ fields: form.Fields }\" class=\"add-form-record-semplice\">\r\n </ng-container>\r\n\r\n </form>\r\n\r\n <div class=\"row mt-2 m-2 add-form-record-buttons\"\r\n *ngIf=\"(showBackButton || showSaveButton) && form.FormScalarType != FormScalarTypeEnum['A step']\">\r\n <div class=\"col-sm-12 m-2 text-right\">\r\n <button mat-raised-button color=\"primary\" type=\"button\" *ngIf=\"showListView && showNewSearchButton\" (click)=\"reset()\">\r\n Nuova ricerca\r\n </button>\r\n <button mat-raised-button color=\"primary\" type=\"button\" *ngIf=\"!showListView && filterResultViewMode != filterResultViewModes.FILTERS_ONLY\"\r\n (click)=\"ApplyFilter()\">\r\n Esegui Filtro\r\n </button>\r\n <button mat-raised-button color=\"primary\" type=\"button\" *ngIf=\"filterResultViewMode == filterResultViewModes.FILTERS_ONLY\"\r\n (click)=\"outputExternalFilters()\">\r\n Prosegui\r\n </button> \r\n </div>\r\n </div>\r\n\r\n <list-view-form-record\r\n *ngIf=\"showListView && filterResultViewMode == filterResultViewModes.INTERNAL_LISTVIEW && filterResults != null\"\r\n class=\"dynamic-module-list-view\"\r\n [configurations]=\"listViewConfigurations\"\r\n [compileConfigurations]=\"configurations\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [formID]=\"formID\"\r\n [onlyView]=\"true\"\r\n [records]=\"filterResults\"\r\n [externalButtons]=\"externalButtons\"\r\n >\r\n </list-view-form-record>\r\n\r\n <div *ngIf=\"showListView && filterResultViewMode == filterResultViewModes.INTERNAL_EQPTABLE && filterEqpTableResults != null\" class=\"dynamic-module-eqp-table\">\r\n <eqp-table \r\n\r\n style=\"cursor: pointer\"\r\n #table\r\n emptyTableMessage=\"\"\r\n [data]=\"filterEqpTableResults\"\r\n [columns]=\"columns\"\r\n [exportEqpTable]=\"exportEqpTable\"\r\n\r\n [chooseColumnsToShow]=\"true\"\r\n [switchFilterType]=\"true\"\r\n\r\n [createMatCard]=\"false\"\r\n [disablePageStorageSave]=\"true\"\r\n [isMultiLanguage]=\"true\"\r\n \r\n [matPaginatorCount]=\"filterEqpTableResults != null && filterEqpTableResults.length > 0 ? filterEqpTableResults.length : 0\"\r\n [matPaginatorIndex]=\"pageIndex\"\r\n [matPaginatorSize]=\"pageSize\"\r\n [matPaginatorLength]=\"pageLength\"\r\n >\r\n </eqp-table> \r\n </div> \r\n\r\n</ng-container>\r\n\r\n\r\n\r\n<!-- TEMPLATE PER LA VISUALIZZAZIONE DEI CAMPI DELLA FORM -->\r\n<ng-template #fieldTemplates let-fields='fields'>\r\n <div class=\"row\" *ngIf=\"!showListView\">\r\n <div class=\"mt-2\" *ngFor=\"let field of fields\" [hidden]=\"!field.InListView\"\r\n [ngClass]=\"utilityService.getFieldSyleClass(field)\">\r\n <dynamic-module-filter-fix #fieldTemplate [field]=\"field\" [form]=\"form\" [record]=\"record\" [Statistic]=\"getStatisticFromFieldName(Statistic?.Statistics,field.Name)\"\r\n (filterChange)=\"onFilterChange($event)\">\r\n </dynamic-module-filter-fix>\r\n </div>\r\n </div>\r\n</ng-template>", styles: [".dynamic-module-eqp-table{padding:20px}\n"], dependencies: [{ kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i5.EqpTableComponent, selector: "eqp-table" }, { kind: "component", type: i6.ListViewFormRecordComponent, selector: "list-view-form-record", inputs: ["configurations", "compileConfigurations", "endPointConfiguration", "userID", "formID", "orgaID", "form", "defaultListViewFunction", "externalButtons", "actionButtons", "onlyView", "records", "highlightFilter", "QueryEditorComponent", "formulaObject"], outputs: ["onAddViewEditRecord", "onDeleteRecord", "saveRecordEvent", "afterSaveRecordEvent", "dragStarted", "dragReleased", "out", "fireTrigger", "clickDragIndicator"] }, { kind: "component", type: i7.DynamicModuleFilterFixComponent, selector: "dynamic-module-filter-fix", inputs: ["field", "form", "record", "Statistic"], outputs: ["filterChange"] }] });
|
|
500
|
+
FilterFormStatisticComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: FilterFormStatisticComponent, selector: "filter-form-statistic", inputs: { configurations: "configurations", endPointConfiguration: "endPointConfiguration", userID: "userID", externalButtons: "externalButtons", actionButtons: "actionButtons", formID: "formID", form: "form", record: "record", onlyView: "onlyView", defaultListActions: "defaultListActions", filterResultViewMode: "filterResultViewMode", Statistic: "Statistic" }, outputs: { fireTrigger: "fireTrigger", saveRecordEvent: "saveRecordEvent", afterSaveRecordEvent: "afterSaveRecordEvent", afterFilter: "afterFilter", afterOutputExternalFilters: "afterOutputExternalFilters" }, viewQueries: [{ propertyName: "tableOutdated", first: true, predicate: ["tableOutdated"], descendants: true }, { propertyName: "fieldTemplate", predicate: ["fieldTemplate"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"loader\">\r\n\r\n <div class=\"row eqp-dynamic-module-title add-form-record-header\" *ngIf=\"showTitle\">\r\n <div class=\"col-md-12\">\r\n <h4><b>{{form.Name}}</b></h4>\r\n </div>\r\n </div>\r\n\r\n <form [formGroup]=\"formForm\" class=\"add-form-record-form\">\r\n\r\n <!-- VISUALIZZAZIONE SEMPLICE -->\r\n <ng-container *ngIf=\"form.FormScalarType == FormScalarTypeEnum.Semplice && !showListView\" [ngTemplateOutlet]=\"fieldTemplates\"\r\n [ngTemplateOutletContext]=\"{ fields: form.Fields }\" class=\"add-form-record-semplice\">\r\n </ng-container>\r\n\r\n </form>\r\n\r\n <div class=\"row mt-2 m-2 add-form-record-buttons\"\r\n *ngIf=\"(showBackButton || showSaveButton) && form.FormScalarType != FormScalarTypeEnum['A step']\">\r\n <div class=\"col-sm-12 m-2 text-right\">\r\n <button mat-raised-button color=\"primary\" type=\"button\" *ngIf=\"showListView && showNewSearchButton\" (click)=\"reset()\">\r\n Nuova ricerca\r\n </button>\r\n <button mat-raised-button color=\"primary\" type=\"button\" *ngIf=\"!showListView && filterResultViewMode != filterResultViewModes.FILTERS_ONLY\"\r\n (click)=\"ApplyFilter()\">\r\n Esegui Filtro\r\n </button>\r\n <button mat-raised-button color=\"primary\" type=\"button\" *ngIf=\"filterResultViewMode == filterResultViewModes.FILTERS_ONLY\"\r\n (click)=\"outputExternalFilters()\">\r\n Prosegui\r\n </button> \r\n </div>\r\n </div>\r\n\r\n <list-view-form-record\r\n *ngIf=\"showListView && filterResultViewMode == filterResultViewModes.INTERNAL_LISTVIEW && filterResults != null\"\r\n class=\"dynamic-module-list-view\"\r\n [configurations]=\"listViewConfigurations\"\r\n [compileConfigurations]=\"configurations\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [formID]=\"formID\"\r\n [onlyView]=\"true\"\r\n [records]=\"filterResults\"\r\n [externalButtons]=\"externalButtons\"\r\n >\r\n </list-view-form-record>\r\n\r\n <div *ngIf=\"showListView && filterResultViewMode == filterResultViewModes.INTERNAL_EQPTABLE && filterEqpTableResults != null\" class=\"dynamic-module-eqp-table\">\r\n <eqp-table \r\n\r\n style=\"cursor: pointer\"\r\n #table\r\n emptyTableMessage=\"\"\r\n [data]=\"filterEqpTableResults\"\r\n [columns]=\"columns\"\r\n [exportEqpTable]=\"exportEqpTable\"\r\n\r\n [chooseColumnsToShow]=\"true\"\r\n [switchFilterType]=\"true\"\r\n\r\n [createMatCard]=\"false\"\r\n [disablePageStorageSave]=\"true\"\r\n [isMultiLanguage]=\"true\"\r\n \r\n [matPaginatorCount]=\"filterEqpTableResults != null && filterEqpTableResults.length > 0 ? filterEqpTableResults.length : 0\"\r\n [matPaginatorIndex]=\"pageIndex\"\r\n [matPaginatorSize]=\"pageSize\"\r\n [matPaginatorLength]=\"pageLength\"\r\n >\r\n </eqp-table> \r\n </div> \r\n\r\n</ng-container>\r\n\r\n\r\n\r\n<!-- TEMPLATE PER LA VISUALIZZAZIONE DEI CAMPI DELLA FORM -->\r\n<ng-template #fieldTemplates let-fields='fields' let-outdatedfields='outdatedFields'>\r\n <div class=\"row\" *ngIf=\"!showListView\">\r\n <div class=\"mt-2\" *ngFor=\"let field of fields\" [hidden]=\"!field.InListView\"\r\n [ngClass]=\"utilityService.getFieldSyleClass(field)\">\r\n <dynamic-module-filter-fix #fieldTemplate [field]=\"field\" [form]=\"form\" [record]=\"record\" [Statistic]=\"getStatisticFromFieldName(Statistic?.Statistics,field.Name)\"\r\n (filterChange)=\"onFilterChange($event)\">\r\n </dynamic-module-filter-fix>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\" *ngIf=\"outdatedTableLoaded && outdatedFields != null && outdatedFields.length > 0\">\r\n\r\n <div class=\"outdatedTableContainer\">\r\n\r\n <h2>Filtri Obsoleti</h2>\r\n <p>Sono filtri che sono stati configurati in una versione precedente di questo modulo e poi salvati</p>\r\n\r\n <eqp-table \r\n class=\"outdatedTable\"\r\n style=\"cursor: pointer\"\r\n #tableOutdated\r\n emptyTableMessage=\"\"\r\n [data]=\"outdatedFields\"\r\n [columns]=\"columnsOutdated\"\r\n\r\n [createMatCard]=\"false\"\r\n \r\n [matPaginatorCount]=\"outdatedFields != null && outdatedFields.length > 0 ? outdatedFields.length : 0\"\r\n [matPaginatorIndex]=\"0\"\r\n [matPaginatorSize]=\"5\"\r\n [matPaginatorLength]=\"[5]\"\r\n >\r\n </eqp-table> \r\n </div>\r\n </div>\r\n</ng-template>", styles: [".dynamic-module-eqp-table{padding:20px}.outdatedTableContainer{width:100%;display:flex;justify-content:center;align-items:center;flex-flow:column;margin-top:35px}.outdatedTableContainer .outdatedTable{width:80%}\n"], dependencies: [{ kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i5.EqpTableComponent, selector: "eqp-table" }, { kind: "component", type: i6.ListViewFormRecordComponent, selector: "list-view-form-record", inputs: ["configurations", "compileConfigurations", "endPointConfiguration", "userID", "formID", "orgaID", "form", "defaultListViewFunction", "externalButtons", "actionButtons", "onlyView", "records", "highlightFilter", "QueryEditorComponent", "formulaObject"], outputs: ["onAddViewEditRecord", "onDeleteRecord", "saveRecordEvent", "afterSaveRecordEvent", "dragStarted", "dragReleased", "out", "fireTrigger", "clickDragIndicator"] }, { kind: "component", type: i7.DynamicModuleFilterFixComponent, selector: "dynamic-module-filter-fix", inputs: ["field", "form", "record", "Statistic"], outputs: ["filterChange"] }] });
|
|
461
501
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FilterFormStatisticComponent, decorators: [{
|
|
462
502
|
type: Component,
|
|
463
|
-
args: [{ selector: 'filter-form-statistic', template: "<ng-container *ngIf=\"loader\">\r\n\r\n <div class=\"row eqp-dynamic-module-title add-form-record-header\" *ngIf=\"showTitle\">\r\n <div class=\"col-md-12\">\r\n <h4><b>{{form.Name}}</b></h4>\r\n </div>\r\n </div>\r\n\r\n <form [formGroup]=\"formForm\" class=\"add-form-record-form\">\r\n\r\n <!-- VISUALIZZAZIONE SEMPLICE -->\r\n <ng-container *ngIf=\"form.FormScalarType == FormScalarTypeEnum.Semplice && !showListView\" [ngTemplateOutlet]=\"fieldTemplates\"\r\n [ngTemplateOutletContext]=\"{ fields: form.Fields }\" class=\"add-form-record-semplice\">\r\n </ng-container>\r\n\r\n </form>\r\n\r\n <div class=\"row mt-2 m-2 add-form-record-buttons\"\r\n *ngIf=\"(showBackButton || showSaveButton) && form.FormScalarType != FormScalarTypeEnum['A step']\">\r\n <div class=\"col-sm-12 m-2 text-right\">\r\n <button mat-raised-button color=\"primary\" type=\"button\" *ngIf=\"showListView && showNewSearchButton\" (click)=\"reset()\">\r\n Nuova ricerca\r\n </button>\r\n <button mat-raised-button color=\"primary\" type=\"button\" *ngIf=\"!showListView && filterResultViewMode != filterResultViewModes.FILTERS_ONLY\"\r\n (click)=\"ApplyFilter()\">\r\n Esegui Filtro\r\n </button>\r\n <button mat-raised-button color=\"primary\" type=\"button\" *ngIf=\"filterResultViewMode == filterResultViewModes.FILTERS_ONLY\"\r\n (click)=\"outputExternalFilters()\">\r\n Prosegui\r\n </button> \r\n </div>\r\n </div>\r\n\r\n <list-view-form-record\r\n *ngIf=\"showListView && filterResultViewMode == filterResultViewModes.INTERNAL_LISTVIEW && filterResults != null\"\r\n class=\"dynamic-module-list-view\"\r\n [configurations]=\"listViewConfigurations\"\r\n [compileConfigurations]=\"configurations\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [formID]=\"formID\"\r\n [onlyView]=\"true\"\r\n [records]=\"filterResults\"\r\n [externalButtons]=\"externalButtons\"\r\n >\r\n </list-view-form-record>\r\n\r\n <div *ngIf=\"showListView && filterResultViewMode == filterResultViewModes.INTERNAL_EQPTABLE && filterEqpTableResults != null\" class=\"dynamic-module-eqp-table\">\r\n <eqp-table \r\n\r\n style=\"cursor: pointer\"\r\n #table\r\n emptyTableMessage=\"\"\r\n [data]=\"filterEqpTableResults\"\r\n [columns]=\"columns\"\r\n [exportEqpTable]=\"exportEqpTable\"\r\n\r\n [chooseColumnsToShow]=\"true\"\r\n [switchFilterType]=\"true\"\r\n\r\n [createMatCard]=\"false\"\r\n [disablePageStorageSave]=\"true\"\r\n [isMultiLanguage]=\"true\"\r\n \r\n [matPaginatorCount]=\"filterEqpTableResults != null && filterEqpTableResults.length > 0 ? filterEqpTableResults.length : 0\"\r\n [matPaginatorIndex]=\"pageIndex\"\r\n [matPaginatorSize]=\"pageSize\"\r\n [matPaginatorLength]=\"pageLength\"\r\n >\r\n </eqp-table> \r\n </div> \r\n\r\n</ng-container>\r\n\r\n\r\n\r\n<!-- TEMPLATE PER LA VISUALIZZAZIONE DEI CAMPI DELLA FORM -->\r\n<ng-template #fieldTemplates let-fields='fields'>\r\n <div class=\"row\" *ngIf=\"!showListView\">\r\n <div class=\"mt-2\" *ngFor=\"let field of fields\" [hidden]=\"!field.InListView\"\r\n [ngClass]=\"utilityService.getFieldSyleClass(field)\">\r\n <dynamic-module-filter-fix #fieldTemplate [field]=\"field\" [form]=\"form\" [record]=\"record\" [Statistic]=\"getStatisticFromFieldName(Statistic?.Statistics,field.Name)\"\r\n (filterChange)=\"onFilterChange($event)\">\r\n </dynamic-module-filter-fix>\r\n </div>\r\n </div>\r\n</ng-template>", styles: [".dynamic-module-eqp-table{padding:20px}\n"] }]
|
|
503
|
+
args: [{ selector: 'filter-form-statistic', template: "<ng-container *ngIf=\"loader\">\r\n\r\n <div class=\"row eqp-dynamic-module-title add-form-record-header\" *ngIf=\"showTitle\">\r\n <div class=\"col-md-12\">\r\n <h4><b>{{form.Name}}</b></h4>\r\n </div>\r\n </div>\r\n\r\n <form [formGroup]=\"formForm\" class=\"add-form-record-form\">\r\n\r\n <!-- VISUALIZZAZIONE SEMPLICE -->\r\n <ng-container *ngIf=\"form.FormScalarType == FormScalarTypeEnum.Semplice && !showListView\" [ngTemplateOutlet]=\"fieldTemplates\"\r\n [ngTemplateOutletContext]=\"{ fields: form.Fields }\" class=\"add-form-record-semplice\">\r\n </ng-container>\r\n\r\n </form>\r\n\r\n <div class=\"row mt-2 m-2 add-form-record-buttons\"\r\n *ngIf=\"(showBackButton || showSaveButton) && form.FormScalarType != FormScalarTypeEnum['A step']\">\r\n <div class=\"col-sm-12 m-2 text-right\">\r\n <button mat-raised-button color=\"primary\" type=\"button\" *ngIf=\"showListView && showNewSearchButton\" (click)=\"reset()\">\r\n Nuova ricerca\r\n </button>\r\n <button mat-raised-button color=\"primary\" type=\"button\" *ngIf=\"!showListView && filterResultViewMode != filterResultViewModes.FILTERS_ONLY\"\r\n (click)=\"ApplyFilter()\">\r\n Esegui Filtro\r\n </button>\r\n <button mat-raised-button color=\"primary\" type=\"button\" *ngIf=\"filterResultViewMode == filterResultViewModes.FILTERS_ONLY\"\r\n (click)=\"outputExternalFilters()\">\r\n Prosegui\r\n </button> \r\n </div>\r\n </div>\r\n\r\n <list-view-form-record\r\n *ngIf=\"showListView && filterResultViewMode == filterResultViewModes.INTERNAL_LISTVIEW && filterResults != null\"\r\n class=\"dynamic-module-list-view\"\r\n [configurations]=\"listViewConfigurations\"\r\n [compileConfigurations]=\"configurations\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [formID]=\"formID\"\r\n [onlyView]=\"true\"\r\n [records]=\"filterResults\"\r\n [externalButtons]=\"externalButtons\"\r\n >\r\n </list-view-form-record>\r\n\r\n <div *ngIf=\"showListView && filterResultViewMode == filterResultViewModes.INTERNAL_EQPTABLE && filterEqpTableResults != null\" class=\"dynamic-module-eqp-table\">\r\n <eqp-table \r\n\r\n style=\"cursor: pointer\"\r\n #table\r\n emptyTableMessage=\"\"\r\n [data]=\"filterEqpTableResults\"\r\n [columns]=\"columns\"\r\n [exportEqpTable]=\"exportEqpTable\"\r\n\r\n [chooseColumnsToShow]=\"true\"\r\n [switchFilterType]=\"true\"\r\n\r\n [createMatCard]=\"false\"\r\n [disablePageStorageSave]=\"true\"\r\n [isMultiLanguage]=\"true\"\r\n \r\n [matPaginatorCount]=\"filterEqpTableResults != null && filterEqpTableResults.length > 0 ? filterEqpTableResults.length : 0\"\r\n [matPaginatorIndex]=\"pageIndex\"\r\n [matPaginatorSize]=\"pageSize\"\r\n [matPaginatorLength]=\"pageLength\"\r\n >\r\n </eqp-table> \r\n </div> \r\n\r\n</ng-container>\r\n\r\n\r\n\r\n<!-- TEMPLATE PER LA VISUALIZZAZIONE DEI CAMPI DELLA FORM -->\r\n<ng-template #fieldTemplates let-fields='fields' let-outdatedfields='outdatedFields'>\r\n <div class=\"row\" *ngIf=\"!showListView\">\r\n <div class=\"mt-2\" *ngFor=\"let field of fields\" [hidden]=\"!field.InListView\"\r\n [ngClass]=\"utilityService.getFieldSyleClass(field)\">\r\n <dynamic-module-filter-fix #fieldTemplate [field]=\"field\" [form]=\"form\" [record]=\"record\" [Statistic]=\"getStatisticFromFieldName(Statistic?.Statistics,field.Name)\"\r\n (filterChange)=\"onFilterChange($event)\">\r\n </dynamic-module-filter-fix>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\" *ngIf=\"outdatedTableLoaded && outdatedFields != null && outdatedFields.length > 0\">\r\n\r\n <div class=\"outdatedTableContainer\">\r\n\r\n <h2>Filtri Obsoleti</h2>\r\n <p>Sono filtri che sono stati configurati in una versione precedente di questo modulo e poi salvati</p>\r\n\r\n <eqp-table \r\n class=\"outdatedTable\"\r\n style=\"cursor: pointer\"\r\n #tableOutdated\r\n emptyTableMessage=\"\"\r\n [data]=\"outdatedFields\"\r\n [columns]=\"columnsOutdated\"\r\n\r\n [createMatCard]=\"false\"\r\n \r\n [matPaginatorCount]=\"outdatedFields != null && outdatedFields.length > 0 ? outdatedFields.length : 0\"\r\n [matPaginatorIndex]=\"0\"\r\n [matPaginatorSize]=\"5\"\r\n [matPaginatorLength]=\"[5]\"\r\n >\r\n </eqp-table> \r\n </div>\r\n </div>\r\n</ng-template>", styles: [".dynamic-module-eqp-table{padding:20px}.outdatedTableContainer{width:100%;display:flex;justify-content:center;align-items:center;flex-flow:column;margin-top:35px}.outdatedTableContainer .outdatedTable{width:80%}\n"] }]
|
|
464
504
|
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.UtilityHelperService }]; }, propDecorators: { configurations: [{
|
|
465
505
|
type: Input
|
|
466
506
|
}], endPointConfiguration: [{
|
|
@@ -487,6 +527,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
487
527
|
type: Input
|
|
488
528
|
}], fireTrigger: [{
|
|
489
529
|
type: Output
|
|
530
|
+
}], tableOutdated: [{
|
|
531
|
+
type: ViewChild,
|
|
532
|
+
args: ["tableOutdated", { static: false }]
|
|
490
533
|
}], saveRecordEvent: [{
|
|
491
534
|
type: Output
|
|
492
535
|
}], afterSaveRecordEvent: [{
|
|
@@ -499,4 +542,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
499
542
|
type: ViewChildren,
|
|
500
543
|
args: ["fieldTemplate"]
|
|
501
544
|
}] } });
|
|
502
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWZvcm0tc3RhdGlzdGljLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9mb3JtLXN0YXRpc3RpY3MvZmlsdGVyLWZvcm0tc3RhdGlzdGljL2ZpbHRlci1mb3JtLXN0YXRpc3RpYy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZm9ybS1zdGF0aXN0aWNzL2ZpbHRlci1mb3JtLXN0YXRpc3RpYy9maWx0ZXItZm9ybS1zdGF0aXN0aWMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQWEsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR25ILE9BQU8sRUFBYSxhQUFhLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM5RSxPQUFPLEVBQVEsa0JBQWtCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBZ0IsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUVuRixPQUFPLEVBQTZDLGFBQWEsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBRTVILE9BQU8sRUFBRSxlQUFlLEVBQWEsTUFBTSxvQ0FBb0MsQ0FBQztBQUNoRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUMzRixPQUFPLEVBQUUseUNBQXlDLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUN6SCxPQUFPLEVBQWdCLGdCQUFnQixFQUFFLGNBQWMsRUFB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QTRCOzhHQUE1Qiw0QkFBNEIsNnRCQ3ZCekMsMjBIQXNGYzs0RkQvREQsNEJBQTRCO2tCQUx4QyxTQUFTOytCQUNFLHVCQUF1QjsySUFNeEIsY0FBYztzQkFBdEIsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFFRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFFSSxXQUFXO3NCQUFwQixNQUFNO2dCQTBCRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLDBCQUEwQjtzQkFBbkMsTUFBTTtnQkFHUCxhQUFhO3NCQURaLFlBQVk7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgUXVlcnlMaXN0LCBWaWV3Q2hpbGRyZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVW50eXBlZEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcubW9kZWwnO1xyXG5pbXBvcnQgeyBCYXNlRmllbGQsIEZpZWxkVHlwZUVudW0gfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvYmFzZUZpZWxkLm1vZGVsJztcclxuaW1wb3J0IHsgRm9ybSwgRm9ybVNjYWxhclR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2Zvcm0ubW9kZWwnO1xyXG5pbXBvcnQgeyBEeW5SZWNvcmQsIFJlY29yZCwgUmVjb3JkQnV0dG9uIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL3JlY29yZC5tb2RlbCc7XHJcbmltcG9ydCB7IFV0aWxpdHlIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvdXRpbGl0eUhlbHBlci5zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVGaWVsZEZpeENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2R5bmFtaWMtbW9kdWxlLWZpZWxkLWZpeC9keW5hbWljLW1vZHVsZS1maWVsZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBFbmRQb2ludENvbmZpZ3VyYXRpb24sIEVuZFBvaW50RGF0YVBhcmFtcywgUGFyYW1UeXBlRW51bSB9IGZyb20gJy4vLi4vLi4vLi4vLi4vbW9kZWxzL2VuZFBvaW50Q29uZmlndXJhdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IExpc3RWYWx1ZUZpZWxkIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9saXN0VmFsdWVGaWVsZC5tb2RlbCc7XHJcbmltcG9ydCB7IEZpbHRlclN0YXRpc3RpYywgU3RhdGlzdGljIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL3N0YXRpc3RpYy5tb2RlbCc7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVMaXN0Q29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2R5bmFtaWNNb2R1bGVMaXN0Q29uZmlnLm1vZGVsJztcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHQgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHQnO1xyXG5pbXBvcnQgeyBDb25maWdDb2x1bW4sIEN1c3RvbUV4cG9ydFR5cGUsIEV4cG9ydEVxcFRhYmxlLCBUeXBlQ29sdW1uIH0gZnJvbSAnQGVxcHJvamVjdC9lcXAtdGFibGUnO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlRmlsdGVyUmVzdWx0Vmlld01vZGVFbnVtIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2R5bmFtaWNNb2R1bGVGaWx0ZXJSZXN1bHRWaWV3TW9kZUVudW0ubW9kZWwnO1xyXG5pbXBvcnQgeyBHbG9iYWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvZ2xvYmFsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBY3Rpb25CdXR0b24sIEZpcmVUcmlnZ2VyIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL3RyaWdnZXIubW9kZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdmaWx0ZXItZm9ybS1zdGF0aXN0aWMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9maWx0ZXItZm9ybS1zdGF0aXN0aWMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2ZpbHRlci1mb3JtLXN0YXRpc3RpYy5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGaWx0ZXJGb3JtU3RhdGlzdGljQ29tcG9uZW50IHtcclxuICBcclxuICBASW5wdXQoKSBjb25maWd1cmF0aW9uczogRHluYW1pY01vZHVsZUNvbXBpbGVDb25maWc7XHJcbiAgQElucHV0KCkgZW5kUG9pbnRDb25maWd1cmF0aW9uOiBFbmRQb2ludENvbmZpZ3VyYXRpb247XHJcbiAgQElucHV0KCkgdXNlcklEOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgZXh0ZXJuYWxCdXR0b25zOiBBcnJheTxSZWNvcmRCdXR0b24+ID0gbmV3IEFycmF5PFJlY29yZEJ1dHRvbj4oKTtcclxuICBASW5wdXQoKSBhY3Rpb25CdXR0b25zOiBBcnJheTxBY3Rpb25CdXR0b24+ID0gbmV3IEFycmF5PEFjdGlvbkJ1dHRvbj4oKTtcclxuXHJcbiAgQElucHV0KCkgZm9ybUlEOiBzdHJpbmcgPSBudWxsOyAvLyBwcmV2aWV3XHJcbiAgQElucHV0KCkgZm9ybTogRm9ybSA9IG51bGw7IC8vIHByZXZpZXcgY29uZmlnXHJcbiAgQElucHV0KCkgcmVjb3JkOiBSZWNvcmQgfCBzdHJpbmcgPSBudWxsOyAvLyBlZGl0XHJcbiAgQElucHV0KCkgb25seVZpZXc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBkZWZhdWx0TGlzdEFjdGlvbnM6IER5bmFtaWNNb2R1bGVMaXN0Rm9ybVJlY29yZEFjdGlvbnNEZWZhdWx0ID0gbmV3IER5bmFtaWNNb2R1bGVMaXN0Rm9ybVJlY29yZEFjdGlvbnNEZWZhdWx0KGZhbHNlLHRydWUsZmFsc2UsZmFsc2UsZmFsc2UpO1xyXG4gIEBJbnB1dCgpIGZpbHRlclJlc3VsdFZpZXdNb2RlOiBEeW5hbWljTW9kdWxlRmlsdGVyUmVzdWx0Vmlld01vZGVFbnVtID0gRHluYW1pY01vZHVsZUZpbHRlclJlc3VsdFZpZXdNb2RlRW51bS5JTlRFUk5BTF9FUVBUQUJMRTtcclxuICBASW5wdXQoKSBTdGF0aXN0aWM6IEZpbHRlclN0YXRpc3RpYyA9IG51bGw7XHJcblxyXG4gIEBPdXRwdXQoKSBmaXJlVHJpZ2dlcjogRXZlbnRFbWl0dGVyPEZpcmVUcmlnZ2VyPiA9IG5ldyBFdmVudEVtaXR0ZXI8RmlyZVRyaWdnZXI+KCk7XHJcblxyXG4gIC8vUGFnaW5hdGlvblxyXG4gIHBhZ2VTaXplOiBudW1iZXIgPSAxMDA7XHJcbiAgcGFnZUluZGV4OiBudW1iZXIgPSAwO1xyXG4gIHBhZ2VMZW5ndGg6IEFycmF5PG51bWJlcj4gPSBbNSwxMCwyNSwxMDBdXHJcbiAgXHJcbiAgZXhwb3J0RXFwVGFibGU6IEV4cG9ydEVxcFRhYmxlID0gbmV3IEV4cG9ydEVxcFRhYmxlKCk7XHJcbiAgZmlsdGVyUmVzdWx0Vmlld01vZGVzID0gRHluYW1pY01vZHVsZUZpbHRlclJlc3VsdFZpZXdNb2RlRW51bTtcclxuXHJcbiAgc2hvd1RpdGxlID0gdHJ1ZTtcclxuICBzaG93U2F2ZUJ1dHRvbiA9IHRydWU7XHJcbiAgc2hvd0JhY2tCdXR0b24gPSB0cnVlO1xyXG4gIHNob3dOZXdTZWFyY2hCdXR0b24gPSB0cnVlO1xyXG4gIGxvYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNob3dMaXN0VmlldzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGZpbHRlclJlc3VsdHM6IEFycmF5PER5blJlY29yZD4gPSBudWxsO1xyXG4gIGZpbHRlckVxcFRhYmxlUmVzdWx0czogQXJyYXk8YW55PiA9IG5ldyBBcnJheTxhbnk+KCk7XHJcbiAgbGlzdFZpZXdDb25maWd1cmF0aW9uczogRHluYW1pY01vZHVsZUxpc3RDb25maWcgPSBuZXcgRHluYW1pY01vZHVsZUxpc3RDb25maWcoKTtcclxuICBjb2x1bW5zOiBBcnJheTxDb25maWdDb2x1bW4+ID0gbmV3IEFycmF5PENvbmZpZ0NvbHVtbj4oKTtcclxuXHJcbiAgZm9ybUZvcm06IFVudHlwZWRGb3JtR3JvdXA7XHJcbiAgZmllbGRHcm91cHM6IHsgW2tleTogc3RyaW5nXTogQXJyYXk8QmFzZUZpZWxkPiB9ID0ge307XHJcbiAgRm9ybVNjYWxhclR5cGVFbnVtID0gRm9ybVNjYWxhclR5cGVFbnVtO1xyXG4gIEZpZWxkVHlwZUVudW0gPSBGaWVsZFR5cGVFbnVtO1xyXG5cclxuICBAT3V0cHV0KCkgc2F2ZVJlY29yZEV2ZW50OiBFdmVudEVtaXR0ZXI8UmVjb3JkPiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVjb3JkPigpO1xyXG4gIEBPdXRwdXQoKSBhZnRlclNhdmVSZWNvcmRFdmVudDogRXZlbnRFbWl0dGVyPFJlY29yZD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuICBAT3V0cHV0KCkgYWZ0ZXJGaWx0ZXI6IEV2ZW50RW1pdHRlcjxBcnJheTxEeW5SZWNvcmQ+PiA9IG5ldyBFdmVudEVtaXR0ZXI8QXJyYXk8RHluUmVjb3JkPj4oKTtcclxuICBAT3V0cHV0KCkgYWZ0ZXJPdXRwdXRFeHRlcm5hbEZpbHRlcnM6IEV2ZW50RW1pdHRlcjxGaWx0ZXJTdGF0aXN0aWM+ID0gbmV3IEV2ZW50RW1pdHRlcjxGaWx0ZXJTdGF0aXN0aWM+KCk7XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oXCJmaWVsZFRlbXBsYXRlXCIpXHJcbiAgZmllbGRUZW1wbGF0ZTogUXVlcnlMaXN0PER5bmFtaWNNb2R1bGVGaWVsZEZpeENvbXBvbmVudD47XHJcbiAgZmlsdGVyczogRmlsdGVyU3RhdGlzdGljID0gbmV3IEZpbHRlclN0YXRpc3RpYygpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHB1YmxpYyB1dGlsaXR5U2VydmljZTogVXRpbGl0eUhlbHBlclNlcnZpY2UsXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgICBpZiAodGhpcy5mb3JtICE9IG51bGwgJiYgdHlwZW9mIHRoaXMuZm9ybS5JRCA9PT0gJ3VuZGVmaW5lZCcpeyB0aGlzLmZvcm0gPSBudWxsOyB9XHJcbiAgICBpZiAodGhpcy5mb3JtID09IG51bGwgJiYgdGhpcy5mb3JtSUQgIT0gbnVsbCl7XHJcblxyXG5cclxuICAgICAgY29uc3QgZHluYW1pY01vZHVsZVBhcmFtczogQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPiA9XHJcbiAgICAgICAgbmV3IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4oKTtcclxuICAgICAgZHluYW1pY01vZHVsZVBhcmFtcy5wdXNoKHtcclxuICAgICAgICBQYXJhbU5hbWU6IFwiaWRcIixcclxuICAgICAgICBQYXJhbVZhbHVlOiB0aGlzLmZvcm1JRCxcclxuICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLkdldEJ5SURFbmRQb2ludCxcclxuICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgIChyZXM6IEZvcm0pID0+IHtcclxuICAgICAgICAgIHRoaXMuZm9ybSA9IHJlcztcclxuICAgICAgICAgIHRoaXMuYWZ0ZXJMb2FkKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAoZXJyKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiZXJyb3IgUnVuRW5kUG9pbnRDYWxsXCIsZXJyKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcblxyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5hZnRlckxvYWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBcclxuICB9XHJcblxyXG4gIGFmdGVyTG9hZCgpe1xyXG4gICAgLy8gYWRkIHB1w7IgZnVuemlvbmFyZSBhbmNoZSBjb21lIG1vZGlmaWNhIGUgY29tZSBwcmV2aWV3XHJcbiAgICAvLyBpbiBhZGQgYWJiaWFtbyBpbiBpbnB1dCBsJ0lEIGRlbCBGb3JtXHJcbiAgICAvLyBpbiBtb2RpZmljYSBhYmJpYW1vIGluIGlucHV0IGwnSUQgZGVsIFJlY29yZFxyXG4gICAgLy8gaW4gcHJldmlldyBhYmJpYW1vIGluIGlucHV0IGlsIEZvcm0oY2FzbyBjb25maWd1cmF0b3IpIG8gbCdJRCBkZWwgbW9kdWxvIG9uIG9ubHlWaWV3IGltcG9zdGF0byBhIHRydWVcclxuICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuQXBwbHlGaWx0ZXIuVXJsID0gdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5BcHBseUZpbHRlci5VcmwgKyBcIi9cIiArIHRoaXMuZm9ybUlEO1xyXG4gICAgdGhpcy5zaG93VGl0bGUgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLnNob3dUaXRsZTtcclxuICAgIHRoaXMuc2hvd1NhdmVCdXR0b24gPSB0aGlzLmNvbmZpZ3VyYXRpb25zLnNob3dTYXZlQnV0dG9uO1xyXG4gICAgdGhpcy5zaG93QmFja0J1dHRvbiA9IHRoaXMuY29uZmlndXJhdGlvbnMuc2hvd0JhY2tCdXR0b247XHJcbiAgICB0aGlzLnNob3dOZXdTZWFyY2hCdXR0b24gPSB0aGlzLmNvbmZpZ3VyYXRpb25zLnNob3dOZXdTZWFyY2hCdXR0b247XHJcblxyXG4gICAgdGhpcy5saXN0Vmlld0NvbmZpZ3VyYXRpb25zLnNob3dUaXRsZSA9IHRoaXMuY29uZmlndXJhdGlvbnMuc2hvd1RpdGxlO1xyXG4gICAgdGhpcy5saXN0Vmlld0NvbmZpZ3VyYXRpb25zLnVzZXJJRCA9IHRoaXMuY29uZmlndXJhdGlvbnMudXNlcklEO1xyXG4gICAgdGhpcy5saXN0Vmlld0NvbmZpZ3VyYXRpb25zLmV4dGVybmFsQnV0dG9ucyA9IG51bGw7XHJcbiAgICB0aGlzLmxpc3RWaWV3Q29uZmlndXJhdGlvbnMudmFsdWVzID0gbnVsbDtcclxuICAgIHRoaXMubGlzdFZpZXdDb25maWd1cmF0aW9ucy5kZWZhdWx0TGlzdEFjdGlvbnMgPSB0aGlzLmRlZmF1bHRMaXN0QWN0aW9ucztcclxuXHJcbiAgICBpZih0aGlzLnJlY29yZCA9PSBudWxsKXtcclxuICAgICAgdGhpcy5wcmV2aWV3T3JOZXdSZXNwb25zZVJlY29yZCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5lZGl0UmVzcG9uc2VSZWNvcmQoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5TdGF0aXN0aWMgIT0gbnVsbCAmJiB0aGlzLlN0YXRpc3RpYy5TdGF0aXN0aWNzICE9IG51bGwgJiYgdGhpcy5TdGF0aXN0aWMuU3RhdGlzdGljcy5sZW5ndGggPiAwKXtcclxuICAgICAgdGhpcy5maWx0ZXJzID0gdGhpcy5TdGF0aXN0aWM7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gbCdpbml6aWFsaXp6YXppb25lIHRlcm1pbmEgY29uIGlsIHJlY3VwZXJvIGRlbCByZWNvcmQgbyBjb24gbCdpbml6aWFsaXp6YXppb25lIGRlbCBmb3JtIHZ1b3RvXHJcbiAgICBcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTsgICAgXHJcbiAgfVxyXG4gIFxyXG4gIGNvbmZpZ3VyZUNvbHVtbnMoKXtcclxuXHJcbiAgICB0aGlzLmNvbHVtbnMgPSBbXTtcclxuICAgIFxyXG4gICAgLy8gc2Vnbm8gYW5jaGUgbCdJRCBkZWxsJ3V0ZW50ZSBjaGUgcmlzcG9uZGVcclxuICAgIHRoaXMuY29sdW1ucy5wdXNoKFxyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiBcInVzZXJJRFwiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiVXRlbnRlXCIsXHJcbiAgICAgICAgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDYlXCIgfSxcclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIHRoaXMuZmlsdGVyRXFwVGFibGVSZXN1bHRzID0gbmV3IEFycmF5PGFueT4oKTtcclxuICAgIFxyXG4gICAgaWYgKHRoaXMuZmlsdGVyUmVzdWx0cyAhPSBudWxsICYmIHRoaXMuZmlsdGVyUmVzdWx0cy5sZW5ndGggPiAwKXtcclxuICAgICAgXHJcbiAgICAgIC8vIENyZWEgY2FtcGkgZSBjb250ZW51dGkgdGFiZWxsYVxyXG4gICAgICB0aGlzLmZpbHRlclJlc3VsdHMuZm9yRWFjaCgocmVzdWx0LGluZGV4KSA9PiB7XHJcbiAgICAgICAgdmFyIG9iamVjdCA9IEpTT04ucGFyc2UocmVzdWx0LlNlcmlhbGl6ZWRWYWx1ZXMpO1xyXG4gICAgICAgIGlmIChpbmRleCA9PSAwKXtcclxuICAgICAgICAgIE9iamVjdC5rZXlzKG9iamVjdCkuZm9yRWFjaCgoZWxlbWVudCxpbmRleDIpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmNvbHVtbnMucHVzaCh7IGtleTogZWxlbWVudCwgZGlzcGxheTogZWxlbWVudCwgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDEwJVwiIH19LCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHRoaXMuY29sdW1ucy5wdXNoKHsga2V5OiBcIkFuc3dlckRhdGVcIiwgZGlzcGxheTogXCJBbnN3ZXJEYXRlXCIsIHR5cGU6IFR5cGVDb2x1bW4uRGF0ZSwgZm9ybWF0OiBcImRkL01NL3l5eXkgSEg6bW06c3NcIiwgdmFsdWU6ICgpID0+IHsgcmV0dXJuIHJlc3VsdC5BbnN3ZXJEYXRlOyB9LCBzdHlsZXM6IHsgZmxleDogXCIwIDAgMTAlXCIgfX0sKTtcclxuICAgICAgICAgIHRoaXMuY29sdW1ucy5wdXNoKHsga2V5OiBcIlZlcnNpb25cIiwgZGlzcGxheTogXCJWZXJzaW9uXCIsIHZhbHVlOiAoKSA9PiB7IHJldHVybiByZXN1bHQuVmVyc2lvbjsgfSwgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDEwJVwiIH19LCk7XHJcbiAgICAgICAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5maWx0ZXJFcXBUYWJsZVJlc3VsdHMucHVzaChvYmplY3QpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBjb25maWd1cmVFeHBvcnQoKXtcclxuICAgIHRoaXMuZXhwb3J0RXFwVGFibGUuYnV0dG9uVGV4dCA9IFwiU2NhcmljYVwiXHJcbiAgICB0aGlzLmV4cG9ydEVxcFRhYmxlLmV4cG9ydEZpbGVUeXBlID0gQ3VzdG9tRXhwb3J0VHlwZS5YTFNYO1xyXG4gICAgdGhpcy5leHBvcnRFcXBUYWJsZS5leHBvcnRGaWxlTmFtZSA9IFwiRHluYW1pY01vZHVsZV9cIit0aGlzLmZvcm0uQ29kZTtcclxuICAgIHRoaXMuZXhwb3J0RXFwVGFibGUuYnV0dG9uSWNvbiA9IFwiY2xvdWRfZG93bmxvYWRcIjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBpbnZvY2F0byBhbCBjYW1iaW8gZGVsIHZhbG9yZSBkaSBvZ25pIHByb3ByaWV0w6AgZGVsbCdvZ2dldHRvIHJlY29yZC5cclxuICAgKiBTZXJ2ZSBhZCBhZ2dpb3JuYXJlIGlsIHZhbG9yZSBkaSB0dXR0aSBpIGNhbXBpIGNoZSBoYW5ubyB1bmEgZm9ybXVsYS5cclxuICAgKi9cclxuICBvbkZpbHRlckNoYW5nZShldjpTdGF0aXN0aWMpIHtcclxuICAgIHRoaXMuZmlsdGVycy5TdGF0aXN0aWNzID0gdGhpcy5maWx0ZXJzLlN0YXRpc3RpY3MuZmlsdGVyKHggPT4geC5rZXkgIT0gZXYua2V5KTtcclxuICAgIGlmIChldi5sb2dpY29wZXJhdG9yICE9IG51bGwgJiYgZXYudmFsdWUgIT0gbnVsbCl7XHJcbiAgICAgdGhpcy5maWx0ZXJzLlN0YXRpc3RpY3MucHVzaChldik7IFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQXBwbHlGaWx0ZXIoKXtcclxuICAgIHRoaXMuZmlsdGVycy5BZGRpdGlvbmFsUGFyYW1zID0gdGhpcy5jb25maWd1cmF0aW9ucy5hZGRpdGlvbmFsUGFyYW1zO1xyXG4gICAgdGhpcy5maWx0ZXJzLlByZWZpbHRlclBhcmFtcyA9IHRoaXMuY29uZmlndXJhdGlvbnMucHJlZmlsdGVyUGFyYW1zO1xyXG5cclxuICAgIHZhciBmaWx0ZXJQYXJhbXMgPSBbXHJcbiAgICAgIHtcclxuICAgICAgICBQYXJhbU5hbWU6IFwiZmlsdGVyXCIsXHJcbiAgICAgICAgUGFyYW1WYWx1ZTogdGhpcy5maWx0ZXJzLFxyXG4gICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIkluIEJvZHlcIl0sXHJcbiAgICAgIH1cclxuICAgIF07XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5BcHBseUZpbHRlcixcclxuICAgICAgZmlsdGVyUGFyYW1zLFxyXG4gICAgICAocmVzOiBBcnJheTxEeW5SZWNvcmQ+KSA9PiB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5maWx0ZXJSZXN1bHRzID0gcmVzO1xyXG4gICAgICAgIHRoaXMuY29uZmlndXJlRXhwb3J0KCk7XHJcbiAgICAgICAgdGhpcy5jb25maWd1cmVDb2x1bW5zKCk7XHJcbiAgICAgICAgdGhpcy5zaG93TGlzdFZpZXcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuYWZ0ZXJGaWx0ZXIuZW1pdChyZXMpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgb3V0cHV0RXh0ZXJuYWxGaWx0ZXJzKCl7XHJcbiAgICB0aGlzLmFmdGVyT3V0cHV0RXh0ZXJuYWxGaWx0ZXJzLmVtaXQodGhpcy5maWx0ZXJzKTtcclxuICB9XHJcblxyXG4gIHJlc2V0KCl7XHJcblxyXG4gICAgLy8gUmVzZXR0byBpIGNhbXBpIGRlbCByZWNvcmRcclxuICAgIE9iamVjdC5rZXlzKHRoaXMucmVjb3JkKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgIHRoaXMucmVjb3JkW2tleV0gPSBudWxsO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5maWx0ZXJSZXN1bHRzID0gbnVsbDtcclxuICAgIHRoaXMuZmlsdGVycy5TdGF0aXN0aWNzID0gW107XHJcbiAgICB0aGlzLnNob3dMaXN0VmlldyA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJldmlld09yTmV3UmVzcG9uc2VSZWNvcmQoKXsgICAgXHJcbiAgICB0aGlzLnJlY29yZCA9IG5ldyBSZWNvcmQoKTtcclxuICAgIGlmKHRoaXMub25seVZpZXcgPT0gdHJ1ZSl7XHJcbiAgICAgIC8vIG1vZGFsaXTDoCBwcmV2aWV3XHJcbiAgICAgIGlmKHRoaXMuZm9ybSAhPSBudWxsKXtcclxuICAgICAgICAvLyBwcmV2aWV3IHBlciBpbCBjb25maWd1cmF0b3JcclxuICAgICAgICB0aGlzLmZpZWxkc0NvbmZpZygpO1xyXG4gICAgICB9IGVsc2UgaWYodGhpcy5mb3JtSUQgIT0gbnVsbCl7XHJcbiAgICAgICAgLy8gcHJldmlldyBwZXIgYWRtaW5cclxuICAgICAgICB0aGlzLmdldEZvcm1CeUlEKCkgLy8gZGVudHJvIGNoaWFtYSBmaWVsZHNDb25maWdcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gYWdnaXVnbmkgbnVvdm9cclxuICAgICAgdGhpcy5maWVsZHNDb25maWcoKTtcclxuICAgIH1cclxuICB9XHJcbiAgZWRpdFJlc3BvbnNlUmVjb3JkKCl7XHJcbiAgICAgIC8vIG1vZGlpbHTDoCBtb2RpZmljYVxyXG4gICAgICBpZiAodHlwZW9mIHRoaXMucmVjb3JkID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgLy8gYWxsb3JhIMOoIHVuIElEXHJcbiAgICAgICAgdGhpcy5nZXRSZWNvcmRCeUlEKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gaWwgcmVjb3JkIHZpZW5lIHBhc3NhdG8gY29tZSB0YWxlXHJcbiAgICAgICAgLy8gKDxSZWNvcmQ+dGhpcy5yZWNvcmQpLkVudElEID0gXCIzXCI7XHJcbiAgICAgICAgLy8gKDxSZWNvcmQ+dGhpcy5yZWNvcmQpLlZlcnNpb247XHJcbiAgICAgICAgdGhpcy5nZXRGb3JtQnlJRGFuZFZlcnNpb24oKTtcclxuICAgICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBzYWx2YXJlIGkgZGF0aSBpbnNlcml0aSBkYWxsJ3V0ZW50ZSB1bmEgdm9sdGEgY29uY2x1c2EgbGEgY29tcGlsYXppb25lIGRlbGxhIGZvcm0uXHJcbiAgICovXHJcbiAgc2F2ZU9yRXhpdEZvcm0oZXhpdDogYm9vbGVhbikge1xyXG4gICAgaWYgKGV4aXQpIHtcclxuICAgICAgLy8gdGhpcy5zYXZlUmVjb3JkRXZlbnQuZW1pdChudWxsKTtcclxuICAgICAgdGhpcy5vblNhdmVSZWNvcmQobnVsbCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyB0aGlzLnNhdmVSZWNvcmRFdmVudC5lbWl0KHRoaXMucmVjb3JkKTtcclxuICAgICAgdGhpcy5vblNhdmVSZWNvcmQoKDxSZWNvcmQ+dGhpcy5yZWNvcmQpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgc2FsdmFyZSBpbCByZWNvcmQgYWdnaXVudG8gbyBtb2RpZmljYXRvLlxyXG4gICAqIFNlIMOoIHN0YXRvIGNvbmZpZ3VyYXRvIHVuIGVuZFBvaW50IHBlciBpbCBzYWx2YXRhZ2dpbyB2aWVuZSBlZmZldHR1YXRhIHVuYSBjaGlhbWF0YSBhbCBzZXJ2ZXIgcGFzc2FuZG8gbCdvZ2dldG8gZGEgc2FsdmFyZVxyXG4gICAqIG5lbCBib2R5IGRlbGxhIGNoaWFtYXRhLCBhbHRyaW1lbnRpIHNjYXRlbmEgbCdldmVudG8gXCJzYXZlUmVjb3JkXCIuXHJcbiAgICogQHBhcmFtIGV2ZW50IE9nZ2V0dG8gZGkgdGlwbyBSZWNvcmQgZGEgc2FsdmFyZS5cclxuICAgKi9cclxuICBvblNhdmVSZWNvcmQoZXZlbnQ6IFJlY29yZCkge1xyXG4gICAgaWYgKFxyXG4gICAgICBldmVudCAhPSBudWxsICYmXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uICE9IG51bGwgJiZcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5TYXZlRW5kUG9pbnRcclxuICAgICkge1xyXG4gICAgICB2YXIgZHluUmVjOiBEeW5SZWNvcmQgPSBuZXcgRHluUmVjb3JkKCk7XHJcbiAgICAgIGR5blJlYy5JRCA9IGV2ZW50LklEID8/IG51bGw7XHJcbiAgICAgIGR5blJlYy5FbnRJRCA9IHRoaXMuZm9ybS5JRDtcclxuICAgICAgZHluUmVjLlZlcnNpb24gPSB0aGlzLmZvcm0uVmVyc2lvbjtcclxuICAgICAgZHluUmVjLnVzZXJJRCA9IHRoaXMudXNlcklEO1xyXG4gICAgICBkeW5SZWMuVmFsdWVzID0gZXZlbnQgPz8gbnVsbDtcclxuICAgICAgZHluUmVjLkhUTUxyZWFkYWJsZVZhbHVlcyA9IHRoaXMuY3JlYXRlSFRNTHJlYWRhYmxlVmFsdWVzKGV2ZW50KTtcclxuICAgICAgdmFyIGR5bmFtaWNNb2R1bGVQYXJhbXMgPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgUGFyYW1OYW1lOiBcIlJlY29yZFwiLFxyXG4gICAgICAgICAgUGFyYW1WYWx1ZTogZHluUmVjLFxyXG4gICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiSW4gQm9keVwiXSxcclxuICAgICAgICB9LFxyXG4gICAgICBdO1xyXG4gICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLlNhdmVFbmRQb2ludCxcclxuICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgIChyZXMpID0+IHtcclxuICAgICAgICAgIHRoaXMuYWZ0ZXJTYXZlUmVjb3JkRXZlbnQuZW1pdChldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zYXZlUmVjb3JkRXZlbnQuZW1pdChldmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRGb3JtQnlJRChpZDogc3RyaW5nID0gdGhpcy5mb3JtSUQpIHtcclxuICAgIGNvbnN0IGR5bmFtaWNNb2R1bGVQYXJhbXM6IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4gPVxyXG4gICAgICBuZXcgQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPigpO1xyXG4gICAgZHluYW1pY01vZHVsZVBhcmFtcy5wdXNoKHtcclxuICAgICAgUGFyYW1OYW1lOiBcImlkXCIsXHJcbiAgICAgIFBhcmFtVmFsdWU6IGlkLFxyXG4gICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLkdldEJ5SURFbmRQb2ludCxcclxuICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgKHJlczogRm9ybSkgPT4ge1xyXG4gICAgICAgIHRoaXMuZm9ybSA9IHJlcztcclxuICAgICAgICB0aGlzLmZpZWxkc0NvbmZpZygpO1xyXG4gICAgICB9LFxyXG4gICAgICAoZXJyKSA9PiB7fVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8vIGNpIGVudHJvIHNvbG8gc2Ugw6ggc3RhdG8gcGFzc2F0byBpbCBwYXJhbWV0cm8gXCJyZWNvcmRcIiBjb21lIHN0cmluZ2FcclxuICBnZXRSZWNvcmRCeUlEKCkge1xyXG4gICAgLy8gcHJlcGFybyBpIGRhdGkgZGVsIHJlY29yZFxyXG4gICAgdmFyIGR5bmFtaWNSZWNvcmRQYXJhbXMgPSBbXHJcbiAgICAgIHtcclxuICAgICAgICBQYXJhbU5hbWU6IFwiaWRcIixcclxuICAgICAgICBQYXJhbVZhbHVlOiB0aGlzLnJlY29yZCxcclxuICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgfSxcclxuICAgIF07XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5HZXRCeUlERW5kUG9pbnQsXHJcbiAgICAgIGR5bmFtaWNSZWNvcmRQYXJhbXMsXHJcbiAgICAgIChyZXM6IER5blJlY29yZCkgPT4ge1xyXG4gICAgICAgIHRoaXMucmVjb3JkID0gbmV3IFJlY29yZCgpO1xyXG5cclxuICAgICAgICAoPFJlY29yZD50aGlzLnJlY29yZCkgPSBKU09OLnBhcnNlKHJlcy5TZXJpYWxpemVkVmFsdWVzKTtcclxuICAgICAgICB0aGlzLnJlY29yZC5JRCA9IHJlcy5JRDtcclxuICAgICAgICB0aGlzLnJlY29yZC5FbnRJRCA9IHJlcy5FbnRJRDtcclxuICAgICAgICB0aGlzLnJlY29yZC51c2VySUQgPSByZXMudXNlcklEO1xyXG4gICAgICAgIHRoaXMucmVjb3JkLlZlcnNpb24gPSByZXMuVmVyc2lvbjtcclxuICAgICAgICB0aGlzLnJlY29yZC5WYWx1ZXMgPSBKU09OLnBhcnNlKHJlcy5TZXJpYWxpemVkVmFsdWVzKTtcclxuICAgICAgICAvLyB0aGlzLnZpZXdNb2RlID0gRHluYW1pY01vZHVsZVZpZXdNb2RlRW51bS5DT01QSUxFO1xyXG4gICAgICAgIC8vIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmdldEZvcm1CeUlEYW5kVmVyc2lvbigpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuICBnZXRGb3JtQnlJRGFuZFZlcnNpb24oKSB7XHJcbiAgICAvLyBwcmVwYXJvIGxhIHZlcnNpb25lIGNvcnJldHRhIGRlbCBmb3JtXHJcbiAgICB2YXIgZHluYW1pY01vZHVsZVBhcmFtcyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIFBhcmFtTmFtZTogXCJFbnRJRFwiLFxyXG4gICAgICAgIFBhcmFtVmFsdWU6ICg8UmVjb3JkPnRoaXMucmVjb3JkKS5FbnRJRCxcclxuICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFBhcmFtTmFtZTogXCJWZXJzaW9uXCIsXHJcbiAgICAgICAgUGFyYW1WYWx1ZTogKDxSZWNvcmQ+dGhpcy5yZWNvcmQpLlZlcnNpb24sXHJcbiAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgIH0sXHJcbiAgICBdO1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImdldEZvcm1CeUlEYW5kVmVyc2lvbiAtIHRoaXMgcmVjb3JkXCIsIDxSZWNvcmQ+dGhpcy5yZWNvcmQpXHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuR2V0QnlJREFuZFZlcnNpb25FbmRQb2ludCxcclxuICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgKHJlczogRm9ybSkgPT4ge1xyXG4gICAgICAgIHRoaXMuZm9ybSA9IHJlcztcclxuXHJcbiAgICAgICAgdGhpcy5jcmVhdGVSZWNvcmRQcm9wZXJ0aWVzKCk7XHJcbiAgICAgICAgdGhpcy5yZW9yZGVyRm9ybUZpZWxkcygpO1xyXG4gICAgICAgIHRoaXMuY3JlYXRlRm9ybUdyb3VwKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuZm9ybS5Gb3JtU2NhbGFyVHlwZSAhPSBGb3JtU2NhbGFyVHlwZUVudW0uU2VtcGxpY2UpIHtcclxuICAgICAgICAgIHRoaXMuY3JlYXRlRmllbGRHcm91cHMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuICBcclxuICBmaWVsZHNDb25maWcoKXsgICAgICBcclxuICAgIHRoaXMuY3JlYXRlUmVjb3JkUHJvcGVydGllcygpO1xyXG4gICAgdGhpcy5yZW9yZGVyRm9ybUZpZWxkcygpO1xyXG4gICAgdGhpcy5jcmVhdGVGb3JtR3JvdXAoKTtcclxuICAgIGlmICh0aGlzLmZvcm0uRm9ybVNjYWxhclR5cGUgIT0gRm9ybVNjYWxhclR5cGVFbnVtLlNlbXBsaWNlKSB7XHJcbiAgICAgIHRoaXMuY3JlYXRlRmllbGRHcm91cHMoKTtcclxuICAgIH1cclxuICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGdldFN0YXRpc3RpY0Zyb21GaWVsZE5hbWUoU3RhdGlzdGljczogQXJyYXk8U3RhdGlzdGljPiA9IG51bGwsIGZpZWxkTmFtZTogc3RyaW5nKTogU3RhdGlzdGljIHtcclxuICAgIHJldHVybiBTdGF0aXN0aWNzID09IG51bGwgfHwgU3RhdGlzdGljcy5sZW5ndGggPT0gMCA/IG51bGwgOiBTdGF0aXN0aWNzLmZpbmQoeCA9PiB4LmtleSA9PSBmaWVsZE5hbWUpO1xyXG4gIH0gIFxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGNyZWFyZSBuZWxsJ29nZ2V0dG8gUmVjb3JkIGxlIHByb3ByaWV0w6AgbWFuY2FudGkgcmlzcGV0dG8gYWkgY2FtcGkgY2hlIGNvbXBvbmdvbm8gbGEgZm9ybS5cclxuICAgKi9cclxuICBwcml2YXRlIGNyZWF0ZVJlY29yZFByb3BlcnRpZXMoKSB7XHJcbiAgICBjb25zdCByZWNvcmRQcm9wZXJ0aWVzOiBBcnJheTxzdHJpbmc+ID0gT2JqZWN0LmtleXModGhpcy5yZWNvcmQpO1xyXG4gICAgdGhpcy5mb3JtLkZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG4gICAgICBpZiAoIXJlY29yZFByb3BlcnRpZXMuZmluZCgocCkgPT4gcCA9PT0gZmllbGQuTmFtZSkpIHtcclxuICAgICAgICB0aGlzLnJlY29yZFtmaWVsZC5OYW1lXSA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgaWYgKHRoaXMuZm9ybS5Jbm5lckZvcm1zICYmIHRoaXMuZm9ybS5Jbm5lckZvcm1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5mb3JtLklubmVyRm9ybXMuZm9yRWFjaCgoZm9ybSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGFycmF5TmFtZTogc3RyaW5nID0gZm9ybS5OYW1lLnNwbGl0KFwiIFwiKS5qb2luKFwiX1wiKTtcclxuICAgICAgICBpZiAoIXJlY29yZFByb3BlcnRpZXMuZmluZCgocCkgPT4gcCA9PT0gYXJyYXlOYW1lKSkge1xyXG4gICAgICAgICAgdGhpcy5yZWNvcmRbYXJyYXlOYW1lXSA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHJpb3JkaW5hcmUgaSBjYW1waSBjaGUgY29tcG9uZ29ubyBsYSBmb3JtLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgcmVvcmRlckZvcm1GaWVsZHMoKSB7XHJcbiAgICBpZiAodGhpcy5mb3JtLkZpZWxkcyAmJiB0aGlzLmZvcm0uRmllbGRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5mb3JtLkZpZWxkcy5zb3J0KChhLCBiKSA9PlxyXG4gICAgICAgIGEuT3JkaW5hbFBvc2l0aW9uID4gYi5PcmRpbmFsUG9zaXRpb24gPyAxIDogYi5PcmRpbmFsUG9zaXRpb24gPiBhLk9yZGluYWxQb3NpdGlvbiA/IC0xIDogMCApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBjcmVhcmUgaWwgRm9ybUdyb3VwIGNoZSByYXBwcmVzZW50YSBsYSBmb3JtLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgY3JlYXRlRm9ybUdyb3VwKCkge1xyXG4gICAgdGhpcy5mb3JtRm9ybSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuQ3JlYXRlRm9ybUZvcm1Hcm91cChcclxuICAgICAgdGhpcy5mb3JtLkZpZWxkcyxcclxuICAgICAgKDxSZWNvcmQ+dGhpcy5yZWNvcmQpLFxyXG4gICAgICB0aGlzLm9ubHlWaWV3XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBjcmVhcmUgaSBncnVwcGkgaW4gY3VpIHJhZ2dydXBwYXJlIGkgY2FtcGkgZGVsbGEgZm9ybSBpbiBiYXNlXHJcbiAgICogYSBjb21lIMOoIHN0YXRhIGNvbmZpZ3VyYXRhIGRhbGwndXRlbnRlLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgY3JlYXRlRmllbGRHcm91cHMoKSB7XHJcbiAgICB0aGlzLmZvcm0uRm9ybUZpZWxkc0dyb3Vwcy5zb3J0KChhLCBiKSA9PiBhLk9yZGluYWxQb3NpdGlvbiA+IGIuT3JkaW5hbFBvc2l0aW9uID8gMSA6IGIuT3JkaW5hbFBvc2l0aW9uID4gYS5PcmRpbmFsUG9zaXRpb24gPyAtMSA6IDAgKVxyXG4gICAgICAubWFwKChnKSA9PiBnLk5hbWUpXHJcbiAgICAgIC5mb3JFYWNoKChncm91cE5hbWUpID0+IHtcclxuICAgICAgICB0aGlzLmZpZWxkR3JvdXBzW2dyb3VwTmFtZV0gPSB0aGlzLmZvcm0uRmllbGRzLmZpbHRlcihcclxuICAgICAgICAgIChmKSA9PiBmLkZpZWxkR3JvdXAgPT0gZ3JvdXBOYW1lXHJcbiAgICAgICAgKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgY3JlYXJlIGlsIEZvcm1Hcm91cCBjaGUgcmFwcHJlc2VudGEgbGEgZm9ybS5cclxuICAgKi9cclxuICBwcml2YXRlIGNyZWF0ZUhUTUxyZWFkYWJsZVZhbHVlcyhyZWNvcmQ6UmVjb3JkKSB7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwicmVjb3JkXCIsIHJlY29yZCk7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiZm9ybVwiLCB0aGlzLmZvcm0pO1xyXG4gICAgbGV0IG91dHB1dFZhbHVlc0FycmF5OiBBcnJheTxhbnk+ID0gdGhpcy5nZXRSZXNwb25zZVZhbHVlcyhyZWNvcmQsIHRoaXMuZm9ybSk7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwib3V0cHV0VmFsdWVzQXJyYXlcIiwgb3V0cHV0VmFsdWVzQXJyYXkpO1xyXG4gICAgXHJcbiAgICBsZXQgdGVtcGxhdGU6IHN0cmluZyA9IHRoaXMuZ2V0UmVzcG9uc2VUZW1wbGF0ZSh0aGlzLmZvcm0pOyAvLyBvZ2dldHRvIG5lbCBxdWFsZSB2aWVuZSBjb3N0cnVpdG8gaWwgdGVtcGxhdGUgbyBjaGUgcHJlbmRlIGlsIHZhbG9yZSBkYSB1biB0ZW1wbGF0ZSBlc3Rlcm5vXHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwidGVtcGxhdGVcIiwgdGVtcGxhdGUpO1xyXG5cclxuICAgIGNvbnN0IHJlZ2V4ID0gLyMjKFtcXHddKykjIy9nO1xyXG4gICAgcmV0dXJuIHRoaXMucmVwbGFjZVRlbXBsYXRlUGxhY2Vob2xkZXJzV2l0aFZhbHVlcyh0ZW1wbGF0ZSwgb3V0cHV0VmFsdWVzQXJyYXksIHJlZ2V4KTsgLy8gb2dnZXR0byBjaGUgY29udGVycsOgIGwnb3V0cHV0IGVsYWJvcmF0byAgICBcclxuXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFJlc3BvbnNlVmFsdWVzKHJlY29yZDogUmVjb3JkLCBmb3JtOiBGb3JtICk6IEFycmF5PGFueT4ge1xyXG4gICAgbGV0IG91dHB1dFZhbHVlc0FycmF5OiBBcnJheTxhbnk+ID0gW107IC8vIGFycmF5IGNvbiBpIHZhbG9yaSBkZWxsZSByaXNwb3N0ZVxyXG4gICAgLy8oPER5blJlY29yZD50aGlzLnJlY29yZCkuVmFsdWVzIMOoIGxhIGxpc3RhIGRpIG9nZ2V0dGkge2ZpZWxkTmFtZTogdmFsb3JlfVxyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcIihyZWNvcmQpLlZhbHVlc1wiLCByZWNvcmQpO1xyXG4gICAgZm9yIChsZXQgZmllbGROYW1lIGluIHJlY29yZCkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIC8vIGZpZWxkTmFtZSDDqCBpbCBub21lIGRlbCBjYW1wb1xyXG4gICAgICAgIC8vIFBSRVBBUk8gVkFSSUFCSUxJIFZBTE9SSSBDT1JSRVRUSVxyXG4gICAgICAgIGxldCBmb3VuZE9iamVjdCA9IGZvcm0uRmllbGRzLmZpbmQoXHJcbiAgICAgICAgICAob2JqKSA9PiBvYmouTmFtZSA9PT0gZmllbGROYW1lXHJcbiAgICAgICAgKTtcclxuICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiZmllbGROYW1lXCIsIGZpZWxkTmFtZSk7XHJcbiAgICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImZvdW5kT2JqZWN0XCIsIGZvdW5kT2JqZWN0KTtcclxuICAgICAgICAvLyBnZXN0aXJlIGNhc28gZmllbGR0eXBlIDggW2VsZW5jbyBnZW5lcmljb11cclxuICAgICAgICAvLyBmYXJlIHVuIGV2YWwgcGVyIHBvcG9sYXJlIGkgdmFsdWVQYWlycyBzZSDDqCBwcmVzZW50ZSB1bmEgZm9ybXVsYVxyXG4gICAgICAgIC8vIHByZW5kZXJlIGxhIGxhYmVsIGNvcnJldHRhXHJcbiAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgICAgICBpZiAoZm91bmRPYmplY3QuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW1bXCJFbGVuY28gZ2VuZXJpY29cIl0pIFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGlmIChmb3VuZE9iamVjdC5Gb3JtdWxhKSBcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgLy8gYWdnaXVuZ28gYSB2YWx1ZXBhaXJzIGkgdmFsb3JpIGNhbGNvbGF0aVxyXG4gICAgICAgICAgICAvLyAoPExpc3RWYWx1ZUZpZWxkPmZvdW5kT2JqZWN0KS5WYWx1ZVBhaXJzID0ge307XHJcbiAgICAgICAgICAgIHZhciB0ZW1wID0gVXRpbGl0eUhlbHBlclNlcnZpY2UuRXZhbHVhdGVGaWVsZEZvcm11bGEoXHJcbiAgICAgICAgICAgICAgZm91bmRPYmplY3QuRm9ybXVsYSxcclxuICAgICAgICAgICAgICByZWNvcmQsXHJcbiAgICAgICAgICAgICAgbnVsbFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJ0ZW1wXCIsIHRlbXApO1xyXG4gICAgICAgICAgICAgIGZvciAobGV0IGtleTIgaW4gdGVtcCkge1xyXG4gICAgICAgICAgICAgIGlmIChVdGlsaXR5SGVscGVyU2VydmljZS5pc051bWVyaWModGVtcFtrZXkyXSkpIFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICg8TGlzdFZhbHVlRmllbGQ+Zm91bmRPYmplY3QpLlZhbHVlUGFpcnNbTnVtYmVyKGtleTIpXSA9IHRlbXBba2V5Ml07XHJcbiAgICAgICAgICAgICAgfSBlbHNlIFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICg8TGlzdFZhbHVlRmllbGQ+Zm91bmRPYmplY3QpLlZhbHVlUGFpcnNba2V5Ml0gPSB0ZW1wW2tleTJdO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiKHJlY29yZCkuVmFsdWVzW2ZpZWxkTmFtZV1cIiwgcmVjb3JkW2ZpZWxkTmFtZV0pO1xyXG4gICAgICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiKDxMaXN0VmFsdWVGaWVsZD5mb3VuZE9iamVjdCkuVmFsdWVQYWlyc1tyZWNvcmRbZmllbGROYW1lXV1cIiwgKDxMaXN0VmFsdWVGaWVsZD5mb3VuZE9iamVjdCkuVmFsdWVQYWlyc1tyZWNvcmRbZmllbGROYW1lXV0pO1xyXG4gICAgICAgICAgICBvdXRwdXRWYWx1ZXNBcnJheVtmaWVsZE5hbWVdID0gKDxMaXN0VmFsdWVGaWVsZD5mb3VuZE9iamVjdCkuVmFsdWVQYWlyc1tyZWNvcmRbZmllbGROYW1lXV07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBsZXQgaW52ZXJ0ZWQgPSB7fTtcclxuICAgICAgICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiKDxMaXN0VmFsdWVGaWVsZD5mb3VuZE9iamVjdCkuVmFsdWVQYWlyc1wiLCAoPExpc3RWYWx1ZUZpZWxkPmZvdW5kT2JqZWN0KS5WYWx1ZVBhaXJzKTtcclxuICAgICAgICAgICAgICBmb3IgKGxldCBrZXkgaW4gKDxMaXN0VmFsdWVGaWVsZD5mb3VuZE9iamVjdCkuVmFsdWVQYWlycykgXHJcbiAgICAgICAgICB7IFxyXG4gICAgICAgICAgICBpbnZlcnRlZFsoPExpc3RWYWx1ZUZpZWxkPmZvdW5kT2JqZWN0KS5WYWx1ZVBhaXJzW2tleV1dID0ga2V5OyBcclxuICAgICAgICAgIH1cclxuICAgICAgICAgICg8TGlzdFZhbHVlRmllbGQ+Zm91bmRPYmplY3QpLlZhbHVlUGFpcnMgPSBpbnZlcnRlZDtcclxuICAgICAgICAgIG91dHB1dFZhbHVlc0FycmF5W2ZpZWxkTmFtZV0gPSAoPExpc3RWYWx1ZUZpZWxkPmZvdW5kT2JqZWN0KS5WYWx1ZVBhaXJzW3JlY29yZFtmaWVsZE5hbWVdXTtcclxuICAgICAgICB9IGVsc2UgXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcInJlY29yZFtmaWVsZE5hbWVdXCIsIHJlY29yZFtmaWVsZE5hbWVdKTtcclxuICAgICAgICAgIG91dHB1dFZhbHVlc0FycmF5W2ZpZWxkTmFtZV0gPSByZWNvcmRbZmllbGROYW1lXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJvdXRwdXRWYWx1ZXNBcnJheSAxXCIsIG91dHB1dFZhbHVlc0FycmF5KTtcclxuICAgIC8vIGNhbmNlbGxvIGkgdmFsb3JpIGluZGVmaW5pdGkgbyBudWxsaVxyXG4gICAgZm9yKGNvbnN0IGNoaWF2ZSBpbiBvdXRwdXRWYWx1ZXNBcnJheSl7XHJcbiAgICAgIGlmKG91dHB1dFZhbHVlc0FycmF5W2NoaWF2ZV0gPT0gdW5kZWZpbmVkIHx8IG91dHB1dFZhbHVlc0FycmF5W2NoaWF2ZV0gPT0gbnVsbClcclxuICAgICAgb3V0cHV0VmFsdWVzQXJyYXlbY2hpYXZlXSA9ICcnXHJcbiAgICB9XHJcbiAgICByZXR1cm4gb3V0cHV0VmFsdWVzQXJyYXk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFJlc3BvbnNlVGVtcGxhdGUoZm9ybTogRm9ybSk6IHN0cmluZyB7XHJcbiAgICBsZXQgdGVtcGxhdGU6IHN0cmluZyA9IFwiXCI7XHJcbiAgICAvLyBQUkVQQVJPIE8gUFJFTkRPIExBIFNUUlVUVFVSQSBEQSBTVEFNUEFSRVxyXG4gICAgZm9ybS5GaWVsZHMuZm9yRWFjaCgoYmFzZUZpZWxkOiBCYXNlRmllbGQpID0+IHtcclxuICAgICAgdGVtcGxhdGUgKz0gJzxzcGFuIGNsYXNzPVwiZHluYWZvcm0tcXVlc3Rpb25cIiBzdHlsZT1cIicgKyBiYXNlRmllbGQuTGFiZWxzdHlsZUNTUyArICdcIj4nICsgYmFzZUZpZWxkLkRlc2NyaXB0aW9uICsgJzo8L3NwYW4+IDxzcGFuIGNsYXNzPVwiZHluYWZvcm0tcmVzcG9uc2VcIiBzdHlsZT1cIicgKyBiYXNlRmllbGQuRmllbGRzdHlsZUNTUyArICdcIj4gIyMnICsgYmFzZUZpZWxkLk5hbWUgKyAnIyM8L3NwYW4+IFxcbiA8YnI+ICc7XHJcbiAgICB9KTtcclxuICAgIC8vIChhdHR1YWxtZW50ZSBub24gZXNpc3RlIGlsIGNvbmNldHRvIGRpIHRlbXBhdGUgZGkgb3V0cHV0KVxyXG4gICAgcmV0dXJuIHRlbXBsYXRlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXBsYWNlVGVtcGxhdGVQbGFjZWhvbGRlcnNXaXRoVmFsdWVzKHRlbXBsYXRlOiBzdHJpbmcsIG91dHB1dFZhbHVlc0FycmF5OiBBcnJheTxhbnk+LCByZWdleCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGVtcGxhdGUucmVwbGFjZShyZWdleCwgKG1hdGNoLCBncm91cCkgPT4ge1xyXG4gICAgICByZXR1cm4gPHN0cmluZz5vdXRwdXRWYWx1ZXNBcnJheVtncm91cF07XHJcbiAgICB9KTtcclxuICB9ICAgXHJcblxyXG59XHJcbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJsb2FkZXJcIj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwicm93IGVxcC1keW5hbWljLW1vZHVsZS10aXRsZSBhZGQtZm9ybS1yZWNvcmQtaGVhZGVyXCIgKm5nSWY9XCJzaG93VGl0bGVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgIDxoND48Yj57e2Zvcm0uTmFtZX19PC9iPjwvaDQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1Gb3JtXCIgY2xhc3M9XCJhZGQtZm9ybS1yZWNvcmQtZm9ybVwiPlxyXG5cclxuICAgICAgICA8IS0tIFZJU1VBTElaWkFaSU9ORSBTRU1QTElDRSAtLT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZm9ybS5Gb3JtU2NhbGFyVHlwZSA9PSBGb3JtU2NhbGFyVHlwZUVudW0uU2VtcGxpY2UgJiYgIXNob3dMaXN0Vmlld1wiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZpZWxkVGVtcGxhdGVzXCJcclxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgZmllbGRzOiBmb3JtLkZpZWxkcyB9XCIgY2xhc3M9XCJhZGQtZm9ybS1yZWNvcmQtc2VtcGxpY2VcIj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8L2Zvcm0+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBtdC0yIG0tMiBhZGQtZm9ybS1yZWNvcmQtYnV0dG9uc1wiXHJcbiAgICAgICAgKm5nSWY9XCIoc2hvd0JhY2tCdXR0b24gfHwgc2hvd1NhdmVCdXR0b24pICYmIGZvcm0uRm9ybVNjYWxhclR5cGUgIT0gRm9ybVNjYWxhclR5cGVFbnVtWydBIHN0ZXAnXVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgbS0yIHRleHQtcmlnaHRcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiB0eXBlPVwiYnV0dG9uXCIgKm5nSWY9XCJzaG93TGlzdFZpZXcgJiYgc2hvd05ld1NlYXJjaEJ1dHRvblwiIChjbGljayk9XCJyZXNldCgpXCI+XHJcbiAgICAgICAgICAgICAgICBOdW92YSByaWNlcmNhXHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIHR5cGU9XCJidXR0b25cIiAqbmdJZj1cIiFzaG93TGlzdFZpZXcgJiYgZmlsdGVyUmVzdWx0Vmlld01vZGUgIT0gZmlsdGVyUmVzdWx0Vmlld01vZGVzLkZJTFRFUlNfT05MWVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiQXBwbHlGaWx0ZXIoKVwiPlxyXG4gICAgICAgICAgICAgICBFc2VndWkgRmlsdHJvXHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIHR5cGU9XCJidXR0b25cIiAqbmdJZj1cImZpbHRlclJlc3VsdFZpZXdNb2RlID09IGZpbHRlclJlc3VsdFZpZXdNb2Rlcy5GSUxURVJTX09OTFlcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm91dHB1dEV4dGVybmFsRmlsdGVycygpXCI+XHJcbiAgICAgICAgICAgICAgIFByb3NlZ3VpXHJcbiAgICAgICAgICAgIDwvYnV0dG9uPiAgICAgICAgICAgIFxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGxpc3Qtdmlldy1mb3JtLXJlY29yZFxyXG4gICAgKm5nSWY9XCJzaG93TGlzdFZpZXcgJiYgZmlsdGVyUmVzdWx0Vmlld01vZGUgPT0gZmlsdGVyUmVzdWx0Vmlld01vZGVzLklOVEVSTkFMX0xJU1RWSUVXICYmIGZpbHRlclJlc3VsdHMgIT0gbnVsbFwiXHJcbiAgICBjbGFzcz1cImR5bmFtaWMtbW9kdWxlLWxpc3Qtdmlld1wiXHJcbiAgICBbY29uZmlndXJhdGlvbnNdPVwibGlzdFZpZXdDb25maWd1cmF0aW9uc1wiXHJcbiAgICBbY29tcGlsZUNvbmZpZ3VyYXRpb25zXT1cImNvbmZpZ3VyYXRpb25zXCJcclxuICAgIFtlbmRQb2ludENvbmZpZ3VyYXRpb25dPVwiZW5kUG9pbnRDb25maWd1cmF0aW9uXCJcclxuICAgIFtmb3JtSURdPVwiZm9ybUlEXCJcclxuICAgIFtvbmx5Vmlld109XCJ0cnVlXCJcclxuICAgIFtyZWNvcmRzXT1cImZpbHRlclJlc3VsdHNcIlxyXG4gICAgW2V4dGVybmFsQnV0dG9uc109XCJleHRlcm5hbEJ1dHRvbnNcIlxyXG4gICAgPlxyXG4gICAgPC9saXN0LXZpZXctZm9ybS1yZWNvcmQ+XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cInNob3dMaXN0VmlldyAmJiBmaWx0ZXJSZXN1bHRWaWV3TW9kZSA9PSBmaWx0ZXJSZXN1bHRWaWV3TW9kZXMuSU5URVJOQUxfRVFQVEFCTEUgJiYgZmlsdGVyRXFwVGFibGVSZXN1bHRzICE9IG51bGxcIiBjbGFzcz1cImR5bmFtaWMtbW9kdWxlLWVxcC10YWJsZVwiPlxyXG4gICAgICAgIDxlcXAtdGFibGUgXHJcblxyXG4gICAgICAgICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiXHJcbiAgICAgICAgICAgICN0YWJsZVxyXG4gICAgICAgICAgICBlbXB0eVRhYmxlTWVzc2FnZT1cIlwiXHJcbiAgICAgICAgICAgIFtkYXRhXT1cImZpbHRlckVxcFRhYmxlUmVzdWx0c1wiXHJcbiAgICAgICAgICAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIlxyXG4gICAgICAgICAgICBbZXhwb3J0RXFwVGFibGVdPVwiZXhwb3J0RXFwVGFibGVcIlxyXG5cclxuICAgICAgICAgICAgW2Nob29zZUNvbHVtbnNUb1Nob3ddPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgIFtzd2l0Y2hGaWx0ZXJUeXBlXT1cInRydWVcIlxyXG5cclxuICAgICAgICAgICAgW2NyZWF0ZU1hdENhcmRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZVBhZ2VTdG9yYWdlU2F2ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgW2lzTXVsdGlMYW5ndWFnZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIFttYXRQYWdpbmF0b3JDb3VudF09XCJmaWx0ZXJFcXBUYWJsZVJlc3VsdHMgIT0gbnVsbCAmJiBmaWx0ZXJFcXBUYWJsZVJlc3VsdHMubGVuZ3RoID4gMCA/IGZpbHRlckVxcFRhYmxlUmVzdWx0cy5sZW5ndGggOiAwXCJcclxuICAgICAgICAgICAgW21hdFBhZ2luYXRvckluZGV4XT1cInBhZ2VJbmRleFwiXHJcbiAgICAgICAgICAgIFttYXRQYWdpbmF0b3JTaXplXT1cInBhZ2VTaXplXCJcclxuICAgICAgICAgICAgW21hdFBhZ2luYXRvckxlbmd0aF09XCJwYWdlTGVuZ3RoXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgPC9lcXAtdGFibGU+ICAgXHJcbiAgICA8L2Rpdj4gXHJcblxyXG48L25nLWNvbnRhaW5lcj5cclxuXHJcblxyXG5cclxuPCEtLSBURU1QTEFURSBQRVIgTEEgVklTVUFMSVpaQVpJT05FIERFSSBDQU1QSSBERUxMQSBGT1JNIC0tPlxyXG48bmctdGVtcGxhdGUgI2ZpZWxkVGVtcGxhdGVzIGxldC1maWVsZHM9J2ZpZWxkcyc+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCIgKm5nSWY9XCIhc2hvd0xpc3RWaWV3XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LTJcIiAqbmdGb3I9XCJsZXQgZmllbGQgb2YgZmllbGRzXCIgW2hpZGRlbl09XCIhZmllbGQuSW5MaXN0Vmlld1wiXHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInV0aWxpdHlTZXJ2aWNlLmdldEZpZWxkU3lsZUNsYXNzKGZpZWxkKVwiPlxyXG4gICAgICAgICAgICA8ZHluYW1pYy1tb2R1bGUtZmlsdGVyLWZpeCAjZmllbGRUZW1wbGF0ZSBbZmllbGRdPVwiZmllbGRcIiBbZm9ybV09XCJmb3JtXCIgW3JlY29yZF09XCJyZWNvcmRcIiBbU3RhdGlzdGljXT1cImdldFN0YXRpc3RpY0Zyb21GaWVsZE5hbWUoU3RhdGlzdGljPy5TdGF0aXN0aWNzLGZpZWxkLk5hbWUpXCJcclxuICAgICAgICAgICAgICAgIChmaWx0ZXJDaGFuZ2UpPVwib25GaWx0ZXJDaGFuZ2UoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICA8L2R5bmFtaWMtbW9kdWxlLWZpbHRlci1maXg+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT4iXX0=
|
|
545
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWZvcm0tc3RhdGlzdGljLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9mb3JtLXN0YXRpc3RpY3MvZmlsdGVyLWZvcm0tc3RhdGlzdGljL2ZpbHRlci1mb3JtLXN0YXRpc3RpYy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZm9ybS1zdGF0aXN0aWNzL2ZpbHRlci1mb3JtLXN0YXRpc3RpYy9maWx0ZXItZm9ybS1zdGF0aXN0aWMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQWEsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUc5SCxPQUFPLEVBQWEsYUFBYSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDOUUsT0FBTyxFQUFRLGtCQUFrQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDekUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQWdCLE1BQU0saUNBQWlDLENBQUM7QUFDbEYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFFbkYsT0FBTyxFQUE2QyxhQUFhLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUU1SCxPQUFPLEVBQUUsZUFBZSxFQUFhLE1BQU0sb0NBQW9DLENBQUM7QUFDaEYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDM0YsT0FBTyxFQUFFLHlDQUF5QyxFQUFFLE1BQU0sOERBQThELENBQUM7QUFDekgsT0FBTyxFQUFnQixnQkFBZ0IsRUFB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RSxFQUFFO1lBQzlDLE9BQWUsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzswSEFubEJVLDRCQUE0Qjs4R0FBNUIsNEJBQTRCLDh6QkN4QnpDLG8zSkFnSGM7NEZEeEZELDRCQUE0QjtrQkFMeEMsU0FBUzsrQkFDRSx1QkFBdUI7MklBTXhCLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRUcsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRUksV0FBVztzQkFBcEIsTUFBTTtnQkFFd0MsYUFBYTtzQkFBM0QsU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQTZCbkMsZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRywwQkFBMEI7c0JBQW5DLE1BQU07Z0JBR1AsYUFBYTtzQkFEWixZQUFZO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQsIFF1ZXJ5TGlzdCwgVmlld0NoaWxkLCBWaWV3Q2hpbGRyZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVW50eXBlZEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcubW9kZWwnO1xyXG5pbXBvcnQgeyBCYXNlRmllbGQsIEZpZWxkVHlwZUVudW0gfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvYmFzZUZpZWxkLm1vZGVsJztcclxuaW1wb3J0IHsgRm9ybSwgRm9ybVNjYWxhclR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2Zvcm0ubW9kZWwnO1xyXG5pbXBvcnQgeyBEeW5SZWNvcmQsIFJlY29yZCwgUmVjb3JkQnV0dG9uIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL3JlY29yZC5tb2RlbCc7XHJcbmltcG9ydCB7IFV0aWxpdHlIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvdXRpbGl0eUhlbHBlci5zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVGaWVsZEZpeENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2R5bmFtaWMtbW9kdWxlLWZpZWxkLWZpeC9keW5hbWljLW1vZHVsZS1maWVsZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBFbmRQb2ludENvbmZpZ3VyYXRpb24sIEVuZFBvaW50RGF0YVBhcmFtcywgUGFyYW1UeXBlRW51bSB9IGZyb20gJy4vLi4vLi4vLi4vLi4vbW9kZWxzL2VuZFBvaW50Q29uZmlndXJhdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IExpc3RWYWx1ZUZpZWxkIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9saXN0VmFsdWVGaWVsZC5tb2RlbCc7XHJcbmltcG9ydCB7IEZpbHRlclN0YXRpc3RpYywgU3RhdGlzdGljIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL3N0YXRpc3RpYy5tb2RlbCc7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVMaXN0Q29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2R5bmFtaWNNb2R1bGVMaXN0Q29uZmlnLm1vZGVsJztcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHQgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHQnO1xyXG5pbXBvcnQgeyBDb25maWdDb2x1bW4sIEN1c3RvbUV4cG9ydFR5cGUsIEVxcFRhYmxlQ29tcG9uZW50LCBFeHBvcnRFcXBUYWJsZSwgVHlwZUNvbHVtbiB9IGZyb20gJ0BlcXByb2plY3QvZXFwLXRhYmxlJztcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZUZpbHRlclJlc3VsdFZpZXdNb2RlRW51bSB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlRmlsdGVyUmVzdWx0Vmlld01vZGVFbnVtLm1vZGVsJztcclxuaW1wb3J0IHsgR2xvYmFsU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL2dsb2JhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWN0aW9uQnV0dG9uLCBGaXJlVHJpZ2dlcn0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL3RyaWdnZXIubW9kZWwnO1xyXG5pbXBvcnQgeyBMb2dpY09wZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2xvZ2ljT3BlcmF0b3IubW9kZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdmaWx0ZXItZm9ybS1zdGF0aXN0aWMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9maWx0ZXItZm9ybS1zdGF0aXN0aWMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2ZpbHRlci1mb3JtLXN0YXRpc3RpYy5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGaWx0ZXJGb3JtU3RhdGlzdGljQ29tcG9uZW50IHtcclxuICBcclxuICBASW5wdXQoKSBjb25maWd1cmF0aW9uczogRHluYW1pY01vZHVsZUNvbXBpbGVDb25maWc7XHJcbiAgQElucHV0KCkgZW5kUG9pbnRDb25maWd1cmF0aW9uOiBFbmRQb2ludENvbmZpZ3VyYXRpb247XHJcbiAgQElucHV0KCkgdXNlcklEOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgZXh0ZXJuYWxCdXR0b25zOiBBcnJheTxSZWNvcmRCdXR0b24+ID0gbmV3IEFycmF5PFJlY29yZEJ1dHRvbj4oKTtcclxuICBASW5wdXQoKSBhY3Rpb25CdXR0b25zOiBBcnJheTxBY3Rpb25CdXR0b24+ID0gbmV3IEFycmF5PEFjdGlvbkJ1dHRvbj4oKTtcclxuXHJcbiAgQElucHV0KCkgZm9ybUlEOiBzdHJpbmcgPSBudWxsOyAvLyBwcmV2aWV3XHJcbiAgQElucHV0KCkgZm9ybTogRm9ybSA9IG51bGw7IC8vIHByZXZpZXcgY29uZmlnXHJcbiAgQElucHV0KCkgcmVjb3JkOiBSZWNvcmQgfCBzdHJpbmcgPSBudWxsOyAvLyBlZGl0XHJcbiAgQElucHV0KCkgb25seVZpZXc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBkZWZhdWx0TGlzdEFjdGlvbnM6IER5bmFtaWNNb2R1bGVMaXN0Rm9ybVJlY29yZEFjdGlvbnNEZWZhdWx0ID0gbmV3IER5bmFtaWNNb2R1bGVMaXN0Rm9ybVJlY29yZEFjdGlvbnNEZWZhdWx0KGZhbHNlLHRydWUsZmFsc2UsZmFsc2UsZmFsc2UpO1xyXG4gIEBJbnB1dCgpIGZpbHRlclJlc3VsdFZpZXdNb2RlOiBEeW5hbWljTW9kdWxlRmlsdGVyUmVzdWx0Vmlld01vZGVFbnVtID0gRHluYW1pY01vZHVsZUZpbHRlclJlc3VsdFZpZXdNb2RlRW51bS5JTlRFUk5BTF9FUVBUQUJMRTtcclxuICBASW5wdXQoKSBTdGF0aXN0aWM6IEZpbHRlclN0YXRpc3RpYyA9IG51bGw7XHJcblxyXG4gIEBPdXRwdXQoKSBmaXJlVHJpZ2dlcjogRXZlbnRFbWl0dGVyPEZpcmVUcmlnZ2VyPiA9IG5ldyBFdmVudEVtaXR0ZXI8RmlyZVRyaWdnZXI+KCk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoXCJ0YWJsZU91dGRhdGVkXCIsIHsgc3RhdGljOiBmYWxzZSB9KSB0YWJsZU91dGRhdGVkOiBFcXBUYWJsZUNvbXBvbmVudDtcclxuXHJcbiAgLy9QYWdpbmF0aW9uXHJcbiAgcGFnZVNpemU6IG51bWJlciA9IDEwMDtcclxuICBwYWdlSW5kZXg6IG51bWJlciA9IDA7XHJcbiAgcGFnZUxlbmd0aDogQXJyYXk8bnVtYmVyPiA9IFs1LDEwLDI1LDEwMF1cclxuICBcclxuICBleHBvcnRFcXBUYWJsZTogRXhwb3J0RXFwVGFibGUgPSBuZXcgRXhwb3J0RXFwVGFibGUoKTtcclxuICBmaWx0ZXJSZXN1bHRWaWV3TW9kZXMgPSBEeW5hbWljTW9kdWxlRmlsdGVyUmVzdWx0Vmlld01vZGVFbnVtO1xyXG5cclxuICBzaG93VGl0bGUgPSB0cnVlO1xyXG4gIHNob3dTYXZlQnV0dG9uID0gdHJ1ZTtcclxuICBzaG93QmFja0J1dHRvbiA9IHRydWU7XHJcbiAgc2hvd05ld1NlYXJjaEJ1dHRvbiA9IHRydWU7XHJcbiAgbG9hZGVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2hvd0xpc3RWaWV3OiBib29sZWFuID0gZmFsc2U7XHJcbiAgZmlsdGVyUmVzdWx0czogQXJyYXk8RHluUmVjb3JkPiA9IG51bGw7XHJcbiAgZmlsdGVyRXFwVGFibGVSZXN1bHRzOiBBcnJheTxhbnk+ID0gbmV3IEFycmF5PGFueT4oKTtcclxuICBsaXN0Vmlld0NvbmZpZ3VyYXRpb25zOiBEeW5hbWljTW9kdWxlTGlzdENvbmZpZyA9IG5ldyBEeW5hbWljTW9kdWxlTGlzdENvbmZpZygpO1xyXG4gIGNvbHVtbnM6IEFycmF5PENvbmZpZ0NvbHVtbj4gPSBuZXcgQXJyYXk8Q29uZmlnQ29sdW1uPigpO1xyXG4gIGNvbHVtbnNPdXRkYXRlZDogQXJyYXk8Q29uZmlnQ29sdW1uPiA9IG5ldyBBcnJheTxDb25maWdDb2x1bW4+KCk7XHJcbiAgb3V0ZGF0ZWRGaWVsZHM6IEFycmF5PFN0YXRpc3RpYz4gPSBuZXcgQXJyYXk8U3RhdGlzdGljPigpO1xyXG4gIG91dGRhdGVkVGFibGVMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgZm9ybUZvcm06IFVudHlwZWRGb3JtR3JvdXA7XHJcbiAgZmllbGRHcm91cHM6IHsgW2tleTogc3RyaW5nXTogQXJyYXk8QmFzZUZpZWxkPiB9ID0ge307XHJcbiAgRm9ybVNjYWxhclR5cGVFbnVtID0gRm9ybVNjYWxhclR5cGVFbnVtO1xyXG4gIEZpZWxkVHlwZUVudW0gPSBGaWVsZFR5cGVFbnVtO1xyXG5cclxuICBAT3V0cHV0KCkgc2F2ZVJlY29yZEV2ZW50OiBFdmVudEVtaXR0ZXI8UmVjb3JkPiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVjb3JkPigpO1xyXG4gIEBPdXRwdXQoKSBhZnRlclNhdmVSZWNvcmRFdmVudDogRXZlbnRFbWl0dGVyPFJlY29yZD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuICBAT3V0cHV0KCkgYWZ0ZXJGaWx0ZXI6IEV2ZW50RW1pdHRlcjxBcnJheTxEeW5SZWNvcmQ+PiA9IG5ldyBFdmVudEVtaXR0ZXI8QXJyYXk8RHluUmVjb3JkPj4oKTtcclxuICBAT3V0cHV0KCkgYWZ0ZXJPdXRwdXRFeHRlcm5hbEZpbHRlcnM6IEV2ZW50RW1pdHRlcjxGaWx0ZXJTdGF0aXN0aWM+ID0gbmV3IEV2ZW50RW1pdHRlcjxGaWx0ZXJTdGF0aXN0aWM+KCk7XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oXCJmaWVsZFRlbXBsYXRlXCIpXHJcbiAgZmllbGRUZW1wbGF0ZTogUXVlcnlMaXN0PER5bmFtaWNNb2R1bGVGaWVsZEZpeENvbXBvbmVudD47XHJcbiAgZmlsdGVyczogRmlsdGVyU3RhdGlzdGljID0gbmV3IEZpbHRlclN0YXRpc3RpYygpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHB1YmxpYyB1dGlsaXR5U2VydmljZTogVXRpbGl0eUhlbHBlclNlcnZpY2UsXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgICBpZiAodGhpcy5mb3JtICE9IG51bGwgJiYgdHlwZW9mIHRoaXMuZm9ybS5JRCA9PT0gJ3VuZGVmaW5lZCcpeyB0aGlzLmZvcm0gPSBudWxsOyB9XHJcbiAgICBpZiAodGhpcy5mb3JtID09IG51bGwgJiYgdGhpcy5mb3JtSUQgIT0gbnVsbCl7XHJcblxyXG5cclxuICAgICAgY29uc3QgZHluYW1pY01vZHVsZVBhcmFtczogQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPiA9XHJcbiAgICAgICAgbmV3IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4oKTtcclxuICAgICAgZHluYW1pY01vZHVsZVBhcmFtcy5wdXNoKHtcclxuICAgICAgICBQYXJhbU5hbWU6IFwiaWRcIixcclxuICAgICAgICBQYXJhbVZhbHVlOiB0aGlzLmZvcm1JRCxcclxuICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLkdldEJ5SURFbmRQb2ludCxcclxuICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgIChyZXM6IEZvcm0pID0+IHtcclxuICAgICAgICAgIHRoaXMuZm9ybSA9IHJlcztcclxuICAgICAgICAgIHRoaXMuYWZ0ZXJMb2FkKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAoZXJyKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiZXJyb3IgUnVuRW5kUG9pbnRDYWxsXCIsZXJyKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcblxyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5hZnRlckxvYWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBcclxuICB9XHJcblxyXG4gIGFmdGVyTG9hZCgpe1xyXG4gICAgLy8gYWRkIHB1w7IgZnVuemlvbmFyZSBhbmNoZSBjb21lIG1vZGlmaWNhIGUgY29tZSBwcmV2aWV3XHJcbiAgICAvLyBpbiBhZGQgYWJiaWFtbyBpbiBpbnB1dCBsJ0lEIGRlbCBGb3JtXHJcbiAgICAvLyBpbiBtb2RpZmljYSBhYmJpYW1vIGluIGlucHV0IGwnSUQgZGVsIFJlY29yZFxyXG4gICAgLy8gaW4gcHJldmlldyBhYmJpYW1vIGluIGlucHV0IGlsIEZvcm0oY2FzbyBjb25maWd1cmF0b3IpIG8gbCdJRCBkZWwgbW9kdWxvIG9uIG9ubHlWaWV3IGltcG9zdGF0byBhIHRydWVcclxuICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuQXBwbHlGaWx0ZXIuVXJsID0gdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5BcHBseUZpbHRlci5VcmwgKyBcIi9cIiArIHRoaXMuZm9ybUlEO1xyXG4gICAgdGhpcy5zaG93VGl0bGUgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLnNob3dUaXRsZTtcclxuICAgIHRoaXMuc2hvd1NhdmVCdXR0b24gPSB0aGlzLmNvbmZpZ3VyYXRpb25zLnNob3dTYXZlQnV0dG9uO1xyXG4gICAgdGhpcy5zaG93QmFja0J1dHRvbiA9IHRoaXMuY29uZmlndXJhdGlvbnMuc2hvd0JhY2tCdXR0b247XHJcbiAgICB0aGlzLnNob3dOZXdTZWFyY2hCdXR0b24gPSB0aGlzLmNvbmZpZ3VyYXRpb25zLnNob3dOZXdTZWFyY2hCdXR0b247XHJcblxyXG4gICAgdGhpcy5saXN0Vmlld0NvbmZpZ3VyYXRpb25zLnNob3dUaXRsZSA9IHRoaXMuY29uZmlndXJhdGlvbnMuc2hvd1RpdGxlO1xyXG4gICAgdGhpcy5saXN0Vmlld0NvbmZpZ3VyYXRpb25zLnVzZXJJRCA9IHRoaXMuY29uZmlndXJhdGlvbnMudXNlcklEO1xyXG4gICAgdGhpcy5saXN0Vmlld0NvbmZpZ3VyYXRpb25zLmV4dGVybmFsQnV0dG9ucyA9IG51bGw7XHJcbiAgICB0aGlzLmxpc3RWaWV3Q29uZmlndXJhdGlvbnMudmFsdWVzID0gbnVsbDtcclxuICAgIHRoaXMubGlzdFZpZXdDb25maWd1cmF0aW9ucy5kZWZhdWx0TGlzdEFjdGlvbnMgPSB0aGlzLmRlZmF1bHRMaXN0QWN0aW9ucztcclxuXHJcbiAgICBpZih0aGlzLnJlY29yZCA9PSBudWxsKXtcclxuICAgICAgdGhpcy5wcmV2aWV3T3JOZXdSZXNwb25zZVJlY29yZCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5lZGl0UmVzcG9uc2VSZWNvcmQoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5TdGF0aXN0aWMgIT0gbnVsbCAmJiB0aGlzLlN0YXRpc3RpYy5TdGF0aXN0aWNzICE9IG51bGwgJiYgdGhpcy5TdGF0aXN0aWMuU3RhdGlzdGljcy5sZW5ndGggPiAwKXtcclxuICAgICAgLy8gSWwgZmlsdHJvIHZpZW5lIGNhcmljYXRvIGRhbGwnZXN0ZXJubyBlIHBvdHJlYmJlcm8gZXNzZXJjaSBkZWkgY2FtcGkgbm9uIHBpw7kgYXR0dWFsaSBlIHF1aW5kaSB2YW5ubyBzZXBhcmF0aVxyXG4gICAgICB0aGlzLmZpbHRlcnMgPSB0aGlzLlN0YXRpc3RpYztcclxuICAgICAgdGhpcy5TdGF0aXN0aWMuU3RhdGlzdGljcy5mb3JFYWNoKChzdGF0aXN0aWNGaWVsZDogU3RhdGlzdGljKSA9PiB7XHJcbiAgICAgICAgdmFyIGZvdW5kRmllbGRJbmRleCA9IHRoaXMuZm9ybS5GaWVsZHMuZmluZCh4ID0+IHguTmFtZSA9PSBzdGF0aXN0aWNGaWVsZC5rZXkpO1xyXG4gICAgICAgIGlmIChmb3VuZEZpZWxkSW5kZXggPT0gbnVsbCl7XHJcbiAgICAgICAgICAvLyBJbCBjYW1wbyDDqCBwcmVzZW50ZSBuZWkgZmlsdHJpIG1hIG5vbiBuZWxsYSBkZWZpbml6aW9uZSBkZWwgZm9ybSBhdHR1YWxlLiBJbCBmaWx0cm8gw6ggcXVpbmRpIG91dGRhdGVkO1xyXG4gICAgICAgICAgdGhpcy5vdXRkYXRlZEZpZWxkcy5wdXNoKHN0YXRpc3RpY0ZpZWxkKTsgXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICBcclxuICAgICAgdGhpcy5jb25maWd1cmVDb2x1bW5zKCk7XHJcbiAgICAgIHRoaXMub3V0ZGF0ZWRUYWJsZUxvYWRlZCA9IHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGwnaW5pemlhbGl6emF6aW9uZSB0ZXJtaW5hIGNvbiBpbCByZWN1cGVybyBkZWwgcmVjb3JkIG8gY29uIGwnaW5pemlhbGl6emF6aW9uZSBkZWwgZm9ybSB2dW90b1xyXG4gICAgXHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7ICAgIFxyXG4gIH1cclxuICBcclxuICBjb25maWd1cmVDb2x1bW5zKCl7XHJcblxyXG4gICAgdGhpcy5jb2x1bW5zID0gW107XHJcbiAgICBcclxuICAgIC8vIHNlZ25vIGFuY2hlIGwnSUQgZGVsbCd1dGVudGUgY2hlIHJpc3BvbmRlXHJcbiAgICB0aGlzLmNvbHVtbnMucHVzaChcclxuICAgICAge1xyXG4gICAgICAgIGtleTogXCJ1c2VySURcIixcclxuICAgICAgICBkaXNwbGF5OiBcIlV0ZW50ZVwiLFxyXG4gICAgICAgIHN0eWxlczogeyBmbGV4OiBcIjAgMCA2JVwiIH0sXHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgICB0aGlzLmZpbHRlckVxcFRhYmxlUmVzdWx0cyA9IG5ldyBBcnJheTxhbnk+KCk7XHJcbiAgICBcclxuICAgIGlmICh0aGlzLmZpbHRlclJlc3VsdHMgIT0gbnVsbCAmJiB0aGlzLmZpbHRlclJlc3VsdHMubGVuZ3RoID4gMCl7XHJcbiAgICAgIFxyXG4gICAgICAvLyBDcmVhIGNhbXBpIGUgY29udGVudXRpIHRhYmVsbGFcclxuICAgICAgdGhpcy5maWx0ZXJSZXN1bHRzLmZvckVhY2goKHJlc3VsdCxpbmRleCkgPT4ge1xyXG4gICAgICAgIHZhciBvYmplY3QgPSBKU09OLnBhcnNlKHJlc3VsdC5TZXJpYWxpemVkVmFsdWVzKTtcclxuICAgICAgICBpZiAoaW5kZXggPT0gMCl7XHJcbiAgICAgICAgICBPYmplY3Qua2V5cyhvYmplY3QpLmZvckVhY2goKGVsZW1lbnQsaW5kZXgyKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb2x1bW5zLnB1c2goeyBrZXk6IGVsZW1lbnQsIGRpc3BsYXk6IGVsZW1lbnQsIHN0eWxlczogeyBmbGV4OiBcIjAgMCAxMCVcIiB9fSwpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLmNvbHVtbnMucHVzaCh7IGtleTogXCJBbnN3ZXJEYXRlXCIsIGRpc3BsYXk6IFwiQW5zd2VyRGF0ZVwiLCB0eXBlOiBUeXBlQ29sdW1uLkRhdGUsIGZvcm1hdDogXCJkZC9NTS95eXl5IEhIOm1tOnNzXCIsIHZhbHVlOiAoKSA9PiB7IHJldHVybiByZXN1bHQuQW5zd2VyRGF0ZTsgfSwgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDEwJVwiIH19LCk7XHJcbiAgICAgICAgICB0aGlzLmNvbHVtbnMucHVzaCh7IGtleTogXCJWZXJzaW9uXCIsIGRpc3BsYXk6IFwiVmVyc2lvblwiLCB2YWx1ZTogKCkgPT4geyByZXR1cm4gcmVzdWx0LlZlcnNpb247IH0sIHN0eWxlczogeyBmbGV4OiBcIjAgMCAxMCVcIiB9fSwpO1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZmlsdGVyRXFwVGFibGVSZXN1bHRzLnB1c2gob2JqZWN0KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jb2x1bW5zT3V0ZGF0ZWQgPSBbXTtcclxuICAgIHRoaXMuY29sdW1uc091dGRhdGVkLnB1c2goe1xyXG4gICAgICAgIGtleTogJ2FjdGlvbicsIGRpc3BsYXk6ICcnLFxyXG4gICAgICAgIHR5cGU6IFR5cGVDb2x1bW4uTWVudUFjdGlvbiwgYnV0dG9uTWVudUljb246ICdzZXR0aW5ncycsXHJcbiAgICAgICAgc3R5bGVzOiB7IGZsZXg6ICcwIDAgNSUnIH0sXHJcbiAgICAgICAgYWN0aW9uczogW1xyXG4gICAgICAgICAgeyBuYW1lOiBcIlJpbXVvdmlcIiwgaWNvbjogJ2RlbGV0ZScsIGZuOiAoZWxlbWVudCwgY29sLCBlbGVtZW50SW5kZXgpID0+IHRoaXMuZGVsZXRlT3V0ZGF0ZWRETUZpbHRlcihlbGVtZW50KSB9XHJcbiAgICAgICAgXVxyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNvbHVtbnNPdXRkYXRlZC5wdXNoKHsga2V5OiBcImtleVwiLCBkaXNwbGF5OiBcIk5vbWUgY2FtcG9cIiwgc3R5bGVzOiB7IGZsZXg6IFwiMCAwIDMwJVwiIH19LCk7XHJcblxyXG4gICAgdGhpcy5jb2x1bW5zT3V0ZGF0ZWQucHVzaCh7XHJcbiAgICAgIGtleTogXCJsb2dpY29wZXJhdG9yXCIsXHJcbiAgICAgIGRpc3BsYXk6IFwiT3BlcmF0b3JlXCIsXHJcbiAgICAgIHR5cGU6IFR5cGVDb2x1bW4uRW51bSxcclxuICAgICAgZW51bU1vZGVsOiBMb2dpY09wZXJhdG9yLFxyXG4gICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgMTAlXCIgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jb2x1bW5zT3V0ZGF0ZWQucHVzaCh7IGtleTogXCJ2YWx1ZVwiLCBkaXNwbGF5OiBcIlZhbG9yZVwiLCBzdHlsZXM6IHsgZmxleDogXCIwIDAgMzAlXCIgfX0sKTtcclxuXHJcbiAgICBjb25zb2xlLmxvZyhcImNvbHVtbnNPdXRkYXRlZCBlc2VndWl0b1wiKTtcclxuICB9XHJcblxyXG4gIGNvbmZpZ3VyZUV4cG9ydCgpe1xyXG4gICAgdGhpcy5leHBvcnRFcXBUYWJsZS5idXR0b25UZXh0ID0gXCJTY2FyaWNhXCJcclxuICAgIHRoaXMuZXhwb3J0RXFwVGFibGUuZXhwb3J0RmlsZVR5cGUgPSBDdXN0b21FeHBvcnRUeXBlLlhMU1g7XHJcbiAgICB0aGlzLmV4cG9ydEVxcFRhYmxlLmV4cG9ydEZpbGVOYW1lID0gXCJEeW5hbWljTW9kdWxlX1wiK3RoaXMuZm9ybS5Db2RlO1xyXG4gICAgdGhpcy5leHBvcnRFcXBUYWJsZS5idXR0b25JY29uID0gXCJjbG91ZF9kb3dubG9hZFwiO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGludm9jYXRvIGFsIGNhbWJpbyBkZWwgdmFsb3JlIGRpIG9nbmkgcHJvcHJpZXTDoCBkZWxsJ29nZ2V0dG8gcmVjb3JkLlxyXG4gICAqIFNlcnZlIGFkIGFnZ2lvcm5hcmUgaWwgdmFsb3JlIGRpIHR1dHRpIGkgY2FtcGkgY2hlIGhhbm5vIHVuYSBmb3JtdWxhLlxyXG4gICAqL1xyXG4gIG9uRmlsdGVyQ2hhbmdlKGV2OlN0YXRpc3RpYykge1xyXG4gICAgdGhpcy5maWx0ZXJzLlN0YXRpc3RpY3MgPSB0aGlzLmZpbHRlcnMuU3RhdGlzdGljcy5maWx0ZXIoeCA9PiB4LmtleSAhPSBldi5rZXkpO1xyXG4gICAgaWYgKGV2LmxvZ2ljb3BlcmF0b3IgIT0gbnVsbCAmJiBldi52YWx1ZSAhPSBudWxsKXtcclxuICAgICB0aGlzLmZpbHRlcnMuU3RhdGlzdGljcy5wdXNoKGV2KTsgXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBBcHBseUZpbHRlcigpe1xyXG4gICAgdGhpcy5maWx0ZXJzLkFkZGl0aW9uYWxQYXJhbXMgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLmFkZGl0aW9uYWxQYXJhbXM7XHJcbiAgICB0aGlzLmZpbHRlcnMuUHJlZmlsdGVyUGFyYW1zID0gdGhpcy5jb25maWd1cmF0aW9ucy5wcmVmaWx0ZXJQYXJhbXM7XHJcblxyXG4gICAgdmFyIGZpbHRlclBhcmFtcyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIFBhcmFtTmFtZTogXCJmaWx0ZXJcIixcclxuICAgICAgICBQYXJhbVZhbHVlOiB0aGlzLmZpbHRlcnMsXHJcbiAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiSW4gQm9keVwiXSxcclxuICAgICAgfVxyXG4gICAgXTtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkFwcGx5RmlsdGVyLFxyXG4gICAgICBmaWx0ZXJQYXJhbXMsXHJcbiAgICAgIChyZXM6IEFycmF5PER5blJlY29yZD4pID0+IHtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmZpbHRlclJlc3VsdHMgPSByZXM7XHJcbiAgICAgICAgdGhpcy5jb25maWd1cmVFeHBvcnQoKTtcclxuICAgICAgICB0aGlzLmNvbmZpZ3VyZUNvbHVtbnMoKTtcclxuICAgICAgICB0aGlzLnNob3dMaXN0VmlldyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5hZnRlckZpbHRlci5lbWl0KHJlcyk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBvdXRwdXRFeHRlcm5hbEZpbHRlcnMoKXtcclxuICAgIHRoaXMuYWZ0ZXJPdXRwdXRFeHRlcm5hbEZpbHRlcnMuZW1pdCh0aGlzLmZpbHRlcnMpO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlT3V0ZGF0ZWRETUZpbHRlcihlbDogU3RhdGlzdGljKXtcclxuICAgIHZhciBpbmRleFRvRGVsZXRlID0gdGhpcy5maWx0ZXJzLlN0YXRpc3RpY3MuZmluZEluZGV4KHggPT4geC5rZXkgPT0gZWwua2V5KTtcclxuICAgIHRoaXMuZmlsdGVycy5TdGF0aXN0aWNzLnNwbGljZShpbmRleFRvRGVsZXRlLDEpO1xyXG4gICAgdmFyIG91dGRhdGVkSW5kZXhUb0RlbGV0ZSA9IHRoaXMub3V0ZGF0ZWRGaWVsZHMuZmluZEluZGV4KHggPT4geC5rZXkgPT0gZWwua2V5KTtcclxuICAgIHRoaXMub3V0ZGF0ZWRGaWVsZHMuc3BsaWNlKG91dGRhdGVkSW5kZXhUb0RlbGV0ZSwxKTtcclxuICAgIHRoaXMudGFibGVPdXRkYXRlZC5yZWxvYWREYXRhdGFibGUoKTtcclxuICB9XHJcblxyXG4gIHJlc2V0KCl7XHJcblxyXG4gICAgLy8gUmVzZXR0byBpIGNhbXBpIGRlbCByZWNvcmRcclxuICAgIE9iamVjdC5rZXlzKHRoaXMucmVjb3JkKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgIHRoaXMucmVjb3JkW2tleV0gPSBudWxsO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5maWx0ZXJSZXN1bHRzID0gbnVsbDtcclxuICAgIHRoaXMuZmlsdGVycy5TdGF0aXN0aWNzID0gW107XHJcbiAgICB0aGlzLnNob3dMaXN0VmlldyA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJldmlld09yTmV3UmVzcG9uc2VSZWNvcmQoKXsgICAgXHJcbiAgICB0aGlzLnJlY29yZCA9IG5ldyBSZWNvcmQoKTtcclxuICAgIGlmKHRoaXMub25seVZpZXcgPT0gdHJ1ZSl7XHJcbiAgICAgIC8vIG1vZGFsaXTDoCBwcmV2aWV3XHJcbiAgICAgIGlmKHRoaXMuZm9ybSAhPSBudWxsKXtcclxuICAgICAgICAvLyBwcmV2aWV3IHBlciBpbCBjb25maWd1cmF0b3JcclxuICAgICAgICB0aGlzLmZpZWxkc0NvbmZpZygpO1xyXG4gICAgICB9IGVsc2UgaWYodGhpcy5mb3JtSUQgIT0gbnVsbCl7XHJcbiAgICAgICAgLy8gcHJldmlldyBwZXIgYWRtaW5cclxuICAgICAgICB0aGlzLmdldEZvcm1CeUlEKCkgLy8gZGVudHJvIGNoaWFtYSBmaWVsZHNDb25maWdcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gYWdnaXVnbmkgbnVvdm9cclxuICAgICAgdGhpcy5maWVsZHNDb25maWcoKTtcclxuICAgIH1cclxuICB9XHJcbiAgZWRpdFJlc3BvbnNlUmVjb3JkKCl7XHJcbiAgICAgIC8vIG1vZGlpbHTDoCBtb2RpZmljYVxyXG4gICAgICBpZiAodHlwZW9mIHRoaXMucmVjb3JkID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgLy8gYWxsb3JhIMOoIHVuIElEXHJcbiAgICAgICAgdGhpcy5nZXRSZWNvcmRCeUlEKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gaWwgcmVjb3JkIHZpZW5lIHBhc3NhdG8gY29tZSB0YWxlXHJcbiAgICAgICAgLy8gKDxSZWNvcmQ+dGhpcy5yZWNvcmQpLkVudElEID0gXCIzXCI7XHJcbiAgICAgICAgLy8gKDxSZWNvcmQ+dGhpcy5yZWNvcmQpLlZlcnNpb247XHJcbiAgICAgICAgdGhpcy5nZXRGb3JtQnlJRGFuZFZlcnNpb24oKTtcclxuICAgICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBzYWx2YXJlIGkgZGF0aSBpbnNlcml0aSBkYWxsJ3V0ZW50ZSB1bmEgdm9sdGEgY29uY2x1c2EgbGEgY29tcGlsYXppb25lIGRlbGxhIGZvcm0uXHJcbiAgICovXHJcbiAgc2F2ZU9yRXhpdEZvcm0oZXhpdDogYm9vbGVhbikge1xyXG4gICAgaWYgKGV4aXQpIHtcclxuICAgICAgLy8gdGhpcy5zYXZlUmVjb3JkRXZlbnQuZW1pdChudWxsKTtcclxuICAgICAgdGhpcy5vblNhdmVSZWNvcmQobnVsbCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyB0aGlzLnNhdmVSZWNvcmRFdmVudC5lbWl0KHRoaXMucmVjb3JkKTtcclxuICAgICAgdGhpcy5vblNhdmVSZWNvcmQoKDxSZWNvcmQ+dGhpcy5yZWNvcmQpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgc2FsdmFyZSBpbCByZWNvcmQgYWdnaXVudG8gbyBtb2RpZmljYXRvLlxyXG4gICAqIFNlIMOoIHN0YXRvIGNvbmZpZ3VyYXRvIHVuIGVuZFBvaW50IHBlciBpbCBzYWx2YXRhZ2dpbyB2aWVuZSBlZmZldHR1YXRhIHVuYSBjaGlhbWF0YSBhbCBzZXJ2ZXIgcGFzc2FuZG8gbCdvZ2dldG8gZGEgc2FsdmFyZVxyXG4gICAqIG5lbCBib2R5IGRlbGxhIGNoaWFtYXRhLCBhbHRyaW1lbnRpIHNjYXRlbmEgbCdldmVudG8gXCJzYXZlUmVjb3JkXCIuXHJcbiAgICogQHBhcmFtIGV2ZW50IE9nZ2V0dG8gZGkgdGlwbyBSZWNvcmQgZGEgc2FsdmFyZS5cclxuICAgKi9cclxuICBvblNhdmVSZWNvcmQoZXZlbnQ6IFJlY29yZCkge1xyXG4gICAgaWYgKFxyXG4gICAgICBldmVudCAhPSBudWxsICYmXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uICE9IG51bGwgJiZcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5TYXZlRW5kUG9pbnRcclxuICAgICkge1xyXG4gICAgICB2YXIgZHluUmVjOiBEeW5SZWNvcmQgPSBuZXcgRHluUmVjb3JkKCk7XHJcbiAgICAgIGR5blJlYy5JRCA9IGV2ZW50LklEID8/IG51bGw7XHJcbiAgICAgIGR5blJlYy5FbnRJRCA9IHRoaXMuZm9ybS5JRDtcclxuICAgICAgZHluUmVjLlZlcnNpb24gPSB0aGlzLmZvcm0uVmVyc2lvbjtcclxuICAgICAgZHluUmVjLnVzZXJJRCA9IHRoaXMudXNlcklEO1xyXG4gICAgICBkeW5SZWMuVmFsdWVzID0gZXZlbnQgPz8gbnVsbDtcclxuICAgICAgZHluUmVjLkhUTUxyZWFkYWJsZVZhbHVlcyA9IHRoaXMuY3JlYXRlSFRNTHJlYWRhYmxlVmFsdWVzKGV2ZW50KTtcclxuICAgICAgdmFyIGR5bmFtaWNNb2R1bGVQYXJhbXMgPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgUGFyYW1OYW1lOiBcIlJlY29yZFwiLFxyXG4gICAgICAgICAgUGFyYW1WYWx1ZTogZHluUmVjLFxyXG4gICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiSW4gQm9keVwiXSxcclxuICAgICAgICB9LFxyXG4gICAgICBdO1xyXG4gICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLlNhdmVFbmRQb2ludCxcclxuICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgIChyZXMpID0+IHtcclxuICAgICAgICAgIHRoaXMuYWZ0ZXJTYXZlUmVjb3JkRXZlbnQuZW1pdChldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zYXZlUmVjb3JkRXZlbnQuZW1pdChldmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRGb3JtQnlJRChpZDogc3RyaW5nID0gdGhpcy5mb3JtSUQpIHtcclxuICAgIGNvbnN0IGR5bmFtaWNNb2R1bGVQYXJhbXM6IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4gPVxyXG4gICAgICBuZXcgQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPigpO1xyXG4gICAgZHluYW1pY01vZHVsZVBhcmFtcy5wdXNoKHtcclxuICAgICAgUGFyYW1OYW1lOiBcImlkXCIsXHJcbiAgICAgIFBhcmFtVmFsdWU6IGlkLFxyXG4gICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLkdldEJ5SURFbmRQb2ludCxcclxuICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgKHJlczogRm9ybSkgPT4ge1xyXG4gICAgICAgIHRoaXMuZm9ybSA9IHJlcztcclxuICAgICAgICB0aGlzLmZpZWxkc0NvbmZpZygpO1xyXG4gICAgICB9LFxyXG4gICAgICAoZXJyKSA9PiB7fVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8vIGNpIGVudHJvIHNvbG8gc2Ugw6ggc3RhdG8gcGFzc2F0byBpbCBwYXJhbWV0cm8gXCJyZWNvcmRcIiBjb21lIHN0cmluZ2FcclxuICBnZXRSZWNvcmRCeUlEKCkge1xyXG4gICAgLy8gcHJlcGFybyBpIGRhdGkgZGVsIHJlY29yZFxyXG4gICAgdmFyIGR5bmFtaWNSZWNvcmRQYXJhbXMgPSBbXHJcbiAgICAgIHtcclxuICAgICAgICBQYXJhbU5hbWU6IFwiaWRcIixcclxuICAgICAgICBQYXJhbVZhbHVlOiB0aGlzLnJlY29yZCxcclxuICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgfSxcclxuICAgIF07XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5HZXRCeUlERW5kUG9pbnQsXHJcbiAgICAgIGR5bmFtaWNSZWNvcmRQYXJhbXMsXHJcbiAgICAgIChyZXM6IER5blJlY29yZCkgPT4ge1xyXG4gICAgICAgIHRoaXMucmVjb3JkID0gbmV3IFJlY29yZCgpO1xyXG5cclxuICAgICAgICAoPFJlY29yZD50aGlzLnJlY29yZCkgPSBKU09OLnBhcnNlKHJlcy5TZXJpYWxpemVkVmFsdWVzKTtcclxuICAgICAgICB0aGlzLnJlY29yZC5JRCA9IHJlcy5JRDtcclxuICAgICAgICB0aGlzLnJlY29yZC5FbnRJRCA9IHJlcy5FbnRJRDtcclxuICAgICAgICB0aGlzLnJlY29yZC51c2VySUQgPSByZXMudXNlcklEO1xyXG4gICAgICAgIHRoaXMucmVjb3JkLlZlcnNpb24gPSByZXMuVmVyc2lvbjtcclxuICAgICAgICB0aGlzLnJlY29yZC5WYWx1ZXMgPSBKU09OLnBhcnNlKHJlcy5TZXJpYWxpemVkVmFsdWVzKTtcclxuICAgICAgICAvLyB0aGlzLnZpZXdNb2RlID0gRHluYW1pY01vZHVsZVZpZXdNb2RlRW51bS5DT01QSUxFO1xyXG4gICAgICAgIC8vIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmdldEZvcm1CeUlEYW5kVmVyc2lvbigpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuICBnZXRGb3JtQnlJRGFuZFZlcnNpb24oKSB7XHJcbiAgICAvLyBwcmVwYXJvIGxhIHZlcnNpb25lIGNvcnJldHRhIGRlbCBmb3JtXHJcbiAgICB2YXIgZHluYW1pY01vZHVsZVBhcmFtcyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIFBhcmFtTmFtZTogXCJFbnRJRFwiLFxyXG4gICAgICAgIFBhcmFtVmFsdWU6ICg8UmVjb3JkPnRoaXMucmVjb3JkKS5FbnRJRCxcclxuICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFBhcmFtTmFtZTogXCJWZXJzaW9uXCIsXHJcbiAgICAgICAgUGFyYW1WYWx1ZTogKDxSZWNvcmQ+dGhpcy5yZWNvcmQpLlZlcnNpb24sXHJcbiAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgIH0sXHJcbiAgICBdO1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImdldEZvcm1CeUlEYW5kVmVyc2lvbiAtIHRoaXMgcmVjb3JkXCIsIDxSZWNvcmQ+dGhpcy5yZWNvcmQpXHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuR2V0QnlJREFuZFZlcnNpb25FbmRQb2ludCxcclxuICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgKHJlczogRm9ybSkgPT4ge1xyXG4gICAgICAgIHRoaXMuZm9ybSA9IHJlcztcclxuXHJcbiAgICAgICAgdGhpcy5jcmVhdGVSZWNvcmRQcm9wZXJ0aWVzKCk7XHJcbiAgICAgICAgdGhpcy5yZW9yZGVyRm9ybUZpZWxkcygpO1xyXG4gICAgICAgIHRoaXMuY3JlYXRlRm9ybUdyb3VwKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuZm9ybS5Gb3JtU2NhbGFyVHlwZSAhPSBGb3JtU2NhbGFyVHlwZUVudW0uU2VtcGxpY2UpIHtcclxuICAgICAgICAgIHRoaXMuY3JlYXRlRmllbGRHcm91cHMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuICBcclxuICBmaWVsZHNDb25maWcoKXsgICAgICBcclxuICAgIHRoaXMuY3JlYXRlUmVjb3JkUHJvcGVydGllcygpO1xyXG4gICAgdGhpcy5yZW9yZGVyRm9ybUZpZWxkcygpO1xyXG4gICAgdGhpcy5jcmVhdGVGb3JtR3JvdXAoKTtcclxuICAgIGlmICh0aGlzLmZvcm0uRm9ybVNjYWxhclR5cGUgIT0gRm9ybVNjYWxhclR5cGVFbnVtLlNlbXBsaWNlKSB7XHJcbiAgICAgIHRoaXMuY3JlYXRlRmllbGRHcm91cHMoKTtcclxuICAgIH1cclxuICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGdldFN0YXRpc3RpY0Zyb21GaWVsZE5hbWUoU3RhdGlzdGljczogQXJyYXk8U3RhdGlzdGljPiA9IG51bGwsIGZpZWxkTmFtZTogc3RyaW5nKTogU3RhdGlzdGljIHtcclxuICAgIHJldHVybiBTdGF0aXN0aWNzID09IG51bGwgfHwgU3RhdGlzdGljcy5sZW5ndGggPT0gMCA/IG51bGwgOiBTdGF0aXN0aWNzLmZpbmQoeCA9PiB4LmtleSA9PSBmaWVsZE5hbWUpO1xyXG4gIH0gIFxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGNyZWFyZSBuZWxsJ29nZ2V0dG8gUmVjb3JkIGxlIHByb3ByaWV0w6AgbWFuY2FudGkgcmlzcGV0dG8gYWkgY2FtcGkgY2hlIGNvbXBvbmdvbm8gbGEgZm9ybS5cclxuICAgKi9cclxuICBwcml2YXRlIGNyZWF0ZVJlY29yZFByb3BlcnRpZXMoKSB7XHJcbiAgICBjb25zdCByZWNvcmRQcm9wZXJ0aWVzOiBBcnJheTxzdHJpbmc+ID0gT2JqZWN0LmtleXModGhpcy5yZWNvcmQpO1xyXG4gICAgdGhpcy5mb3JtLkZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG4gICAgICBpZiAoIXJlY29yZFByb3BlcnRpZXMuZmluZCgocCkgPT4gcCA9PT0gZmllbGQuTmFtZSkpIHtcclxuICAgICAgICB0aGlzLnJlY29yZFtmaWVsZC5OYW1lXSA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgaWYgKHRoaXMuZm9ybS5Jbm5lckZvcm1zICYmIHRoaXMuZm9ybS5Jbm5lckZvcm1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5mb3JtLklubmVyRm9ybXMuZm9yRWFjaCgoZm9ybSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGFycmF5TmFtZTogc3RyaW5nID0gZm9ybS5OYW1lLnNwbGl0KFwiIFwiKS5qb2luKFwiX1wiKTtcclxuICAgICAgICBpZiAoIXJlY29yZFByb3BlcnRpZXMuZmluZCgocCkgPT4gcCA9PT0gYXJyYXlOYW1lKSkge1xyXG4gICAgICAgICAgdGhpcy5yZWNvcmRbYXJyYXlOYW1lXSA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHJpb3JkaW5hcmUgaSBjYW1waSBjaGUgY29tcG9uZ29ubyBsYSBmb3JtLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgcmVvcmRlckZvcm1GaWVsZHMoKSB7XHJcbiAgICBpZiAodGhpcy5mb3JtLkZpZWxkcyAmJiB0aGlzLmZvcm0uRmllbGRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5mb3JtLkZpZWxkcy5zb3J0KChhLCBiKSA9PlxyXG4gICAgICAgIGEuT3JkaW5hbFBvc2l0aW9uID4gYi5PcmRpbmFsUG9zaXRpb24gPyAxIDogYi5PcmRpbmFsUG9zaXRpb24gPiBhLk9yZGluYWxQb3NpdGlvbiA/IC0xIDogMCApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBjcmVhcmUgaWwgRm9ybUdyb3VwIGNoZSByYXBwcmVzZW50YSBsYSBmb3JtLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgY3JlYXRlRm9ybUdyb3VwKCkge1xyXG4gICAgdGhpcy5mb3JtRm9ybSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuQ3JlYXRlRm9ybUZvcm1Hcm91cChcclxuICAgICAgdGhpcy5mb3JtLkZpZWxkcyxcclxuICAgICAgKDxSZWNvcmQ+dGhpcy5yZWNvcmQpLFxyXG4gICAgICB0aGlzLm9ubHlWaWV3XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBjcmVhcmUgaSBncnVwcGkgaW4gY3VpIHJhZ2dydXBwYXJlIGkgY2FtcGkgZGVsbGEgZm9ybSBpbiBiYXNlXHJcbiAgICogYSBjb21lIMOoIHN0YXRhIGNvbmZpZ3VyYXRhIGRhbGwndXRlbnRlLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgY3JlYXRlRmllbGRHcm91cHMoKSB7XHJcbiAgICB0aGlzLmZvcm0uRm9ybUZpZWxkc0dyb3Vwcy5zb3J0KChhLCBiKSA9PiBhLk9yZGluYWxQb3NpdGlvbiA+IGIuT3JkaW5hbFBvc2l0aW9uID8gMSA6IGIuT3JkaW5hbFBvc2l0aW9uID4gYS5PcmRpbmFsUG9zaXRpb24gPyAtMSA6IDAgKVxyXG4gICAgICAubWFwKChnKSA9PiBnLk5hbWUpXHJcbiAgICAgIC5mb3JFYWNoKChncm91cE5hbWUpID0+IHtcclxuICAgICAgICB0aGlzLmZpZWxkR3JvdXBzW2dyb3VwTmFtZV0gPSB0aGlzLmZvcm0uRmllbGRzLmZpbHRlcihcclxuICAgICAgICAgIChmKSA9PiBmLkZpZWxkR3JvdXAgPT0gZ3JvdXBOYW1lXHJcbiAgICAgICAgKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgY3JlYXJlIGlsIEZvcm1Hcm91cCBjaGUgcmFwcHJlc2VudGEgbGEgZm9ybS5cclxuICAgKi9cclxuICBwcml2YXRlIGNyZWF0ZUhUTUxyZWFkYWJsZVZhbHVlcyhyZWNvcmQ6UmVjb3JkKSB7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwicmVjb3JkXCIsIHJlY29yZCk7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiZm9ybVwiLCB0aGlzLmZvcm0pO1xyXG4gICAgbGV0IG91dHB1dFZhbHVlc0FycmF5OiBBcnJheTxhbnk+ID0gdGhpcy5nZXRSZXNwb25zZVZhbHVlcyhyZWNvcmQsIHRoaXMuZm9ybSk7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwib3V0cHV0VmFsdWVzQXJyYXlcIiwgb3V0cHV0VmFsdWVzQXJyYXkpO1xyXG4gICAgXHJcbiAgICBsZXQgdGVtcGxhdGU6IHN0cmluZyA9IHRoaXMuZ2V0UmVzcG9uc2VUZW1wbGF0ZSh0aGlzLmZvcm0pOyAvLyBvZ2dldHRvIG5lbCBxdWFsZSB2aWVuZSBjb3N0cnVpdG8gaWwgdGVtcGxhdGUgbyBjaGUgcHJlbmRlIGlsIHZhbG9yZSBkYSB1biB0ZW1wbGF0ZSBlc3Rlcm5vXHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwidGVtcGxhdGVcIiwgdGVtcGxhdGUpO1xyXG5cclxuICAgIGNvbnN0IHJlZ2V4ID0gLyMjKFtcXHddKykjIy9nO1xyXG4gICAgcmV0dXJuIHRoaXMucmVwbGFjZVRlbXBsYXRlUGxhY2Vob2xkZXJzV2l0aFZhbHVlcyh0ZW1wbGF0ZSwgb3V0cHV0VmFsdWVzQXJyYXksIHJlZ2V4KTsgLy8gb2dnZXR0byBjaGUgY29udGVycsOgIGwnb3V0cHV0IGVsYWJvcmF0byAgICBcclxuXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFJlc3BvbnNlVmFsdWVzKHJlY29yZDogUmVjb3JkLCBmb3JtOiBGb3JtICk6IEFycmF5PGFueT4ge1xyXG4gICAgbGV0IG91dHB1dFZhbHVlc0FycmF5OiBBcnJheTxhbnk+ID0gW107IC8vIGFycmF5IGNvbiBpIHZhbG9yaSBkZWxsZSByaXNwb3N0ZVxyXG4gICAgLy8oPER5blJlY29yZD50aGlzLnJlY29yZCkuVmFsdWVzIMOoIGxhIGxpc3RhIGRpIG9nZ2V0dGkge2ZpZWxkTmFtZTogdmFsb3JlfVxyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcIihyZWNvcmQpLlZhbHVlc1wiLCByZWNvcmQpO1xyXG4gICAgZm9yIChsZXQgZmllbGROYW1lIGluIHJlY29yZCkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIC8vIGZpZWxkTmFtZSDDqCBpbCBub21lIGRlbCBjYW1wb1xyXG4gICAgICAgIC8vIFBSRVBBUk8gVkFSSUFCSUxJIFZBTE9SSSBDT1JSRVRUSVxyXG4gICAgICAgIGxldCBmb3VuZE9iamVjdCA9IGZvcm0uRmllbGRzLmZpbmQoXHJcbiAgICAgICAgICAob2JqKSA9PiBvYmouTmFtZSA9PT0gZmllbGROYW1lXHJcbiAgICAgICAgKTtcclxuICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiZmllbGROYW1lXCIsIGZpZWxkTmFtZSk7XHJcbiAgICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImZvdW5kT2JqZWN0XCIsIGZvdW5kT2JqZWN0KTtcclxuICAgICAgICAvLyBnZXN0aXJlIGNhc28gZmllbGR0eXBlIDggW2VsZW5jbyBnZW5lcmljb11cclxuICAgICAgICAvLyBmYXJlIHVuIGV2YWwgcGVyIHBvcG9sYXJlIGkgdmFsdWVQYWlycyBzZSDDqCBwcmVzZW50ZSB1bmEgZm9ybXVsYVxyXG4gICAgICAgIC8vIHByZW5kZXJlIGxhIGxhYmVsIGNvcnJldHRhXHJcbiAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgICAgICBpZiAoZm91bmRPYmplY3QuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW1bXCJFbGVuY28gZ2VuZXJpY29cIl0pIFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGlmIChmb3VuZE9iamVjdC5Gb3JtdWxhKSBcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgLy8gYWdnaXVuZ28gYSB2YWx1ZXBhaXJzIGkgdmFsb3JpIGNhbGNvbGF0aVxyXG4gICAgICAgICAgICAvLyAoPExpc3RWYWx1ZUZpZWxkPmZvdW5kT2JqZWN0KS5WYWx1ZVBhaXJzID0ge307XHJcbiAgICAgICAgICAgIHZhciB0ZW1wID0gVXRpbGl0eUhlbHBlclNlcnZpY2UuRXZhbHVhdGVGaWVsZEZvcm11bGEoXHJcbiAgICAgICAgICAgICAgZm91bmRPYmplY3QuRm9ybXVsYSxcclxuICAgICAgICAgICAgICByZWNvcmQsXHJcbiAgICAgICAgICAgICAgbnVsbFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJ0ZW1wXCIsIHRlbXApO1xyXG4gICAgICAgICAgICAgIGZvciAobGV0IGtleTIgaW4gdGVtcCkge1xyXG4gICAgICAgICAgICAgIGlmIChVdGlsaXR5SGVscGVyU2VydmljZS5pc051bWVyaWModGVtcFtrZXkyXSkpIFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICg8TGlzdFZhbHVlRmllbGQ+Zm91bmRPYmplY3QpLlZhbHVlUGFpcnNbTnVtYmVyKGtleTIpXSA9IHRlbXBba2V5Ml07XHJcbiAgICAgICAgICAgICAgfSBlbHNlIFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICg8TGlzdFZhbHVlRmllbGQ+Zm91bmRPYmplY3QpLlZhbHVlUGFpcnNba2V5Ml0gPSB0ZW1wW2tleTJdO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiKHJlY29yZCkuVmFsdWVzW2ZpZWxkTmFtZV1cIiwgcmVjb3JkW2ZpZWxkTmFtZV0pO1xyXG4gICAgICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiKDxMaXN0VmFsdWVGaWVsZD5mb3VuZE9iamVjdCkuVmFsdWVQYWlyc1tyZWNvcmRbZmllbGROYW1lXV1cIiwgKDxMaXN0VmFsdWVGaWVsZD5mb3VuZE9iamVjdCkuVmFsdWVQYWlyc1tyZWNvcmRbZmllbGROYW1lXV0pO1xyXG4gICAgICAgICAgICBvdXRwdXRWYWx1ZXNBcnJheVtmaWVsZE5hbWVdID0gKDxMaXN0VmFsdWVGaWVsZD5mb3VuZE9iamVjdCkuVmFsdWVQYWlyc1tyZWNvcmRbZmllbGROYW1lXV07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBsZXQgaW52ZXJ0ZWQgPSB7fTtcclxuICAgICAgICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiKDxMaXN0VmFsdWVGaWVsZD5mb3VuZE9iamVjdCkuVmFsdWVQYWlyc1wiLCAoPExpc3RWYWx1ZUZpZWxkPmZvdW5kT2JqZWN0KS5WYWx1ZVBhaXJzKTtcclxuICAgICAgICAgICAgICBmb3IgKGxldCBrZXkgaW4gKDxMaXN0VmFsdWVGaWVsZD5mb3VuZE9iamVjdCkuVmFsdWVQYWlycykgXHJcbiAgICAgICAgICB7IFxyXG4gICAgICAgICAgICBpbnZlcnRlZFsoPExpc3RWYWx1ZUZpZWxkPmZvdW5kT2JqZWN0KS5WYWx1ZVBhaXJzW2tleV1dID0ga2V5OyBcclxuICAgICAgICAgIH1cclxuICAgICAgICAgICg8TGlzdFZhbHVlRmllbGQ+Zm91bmRPYmplY3QpLlZhbHVlUGFpcnMgPSBpbnZlcnRlZDtcclxuICAgICAgICAgIG91dHB1dFZhbHVlc0FycmF5W2ZpZWxkTmFtZV0gPSAoPExpc3RWYWx1ZUZpZWxkPmZvdW5kT2JqZWN0KS5WYWx1ZVBhaXJzW3JlY29yZFtmaWVsZE5hbWVdXTtcclxuICAgICAgICB9IGVsc2UgXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcInJlY29yZFtmaWVsZE5hbWVdXCIsIHJlY29yZFtmaWVsZE5hbWVdKTtcclxuICAgICAgICAgIG91dHB1dFZhbHVlc0FycmF5W2ZpZWxkTmFtZV0gPSByZWNvcmRbZmllbGROYW1lXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJvdXRwdXRWYWx1ZXNBcnJheSAxXCIsIG91dHB1dFZhbHVlc0FycmF5KTtcclxuICAgIC8vIGNhbmNlbGxvIGkgdmFsb3JpIGluZGVmaW5pdGkgbyBudWxsaVxyXG4gICAgZm9yKGNvbnN0IGNoaWF2ZSBpbiBvdXRwdXRWYWx1ZXNBcnJheSl7XHJcbiAgICAgIGlmKG91dHB1dFZhbHVlc0FycmF5W2NoaWF2ZV0gPT0gdW5kZWZpbmVkIHx8IG91dHB1dFZhbHVlc0FycmF5W2NoaWF2ZV0gPT0gbnVsbClcclxuICAgICAgb3V0cHV0VmFsdWVzQXJyYXlbY2hpYXZlXSA9ICcnXHJcbiAgICB9XHJcbiAgICByZXR1cm4gb3V0cHV0VmFsdWVzQXJyYXk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFJlc3BvbnNlVGVtcGxhdGUoZm9ybTogRm9ybSk6IHN0cmluZyB7XHJcbiAgICBsZXQgdGVtcGxhdGU6IHN0cmluZyA9IFwiXCI7XHJcbiAgICAvLyBQUkVQQVJPIE8gUFJFTkRPIExBIFNUUlVUVFVSQSBEQSBTVEFNUEFSRVxyXG4gICAgZm9ybS5GaWVsZHMuZm9yRWFjaCgoYmFzZUZpZWxkOiBCYXNlRmllbGQpID0+IHtcclxuICAgICAgdGVtcGxhdGUgKz0gJzxzcGFuIGNsYXNzPVwiZHluYWZvcm0tcXVlc3Rpb25cIiBzdHlsZT1cIicgKyBiYXNlRmllbGQuTGFiZWxzdHlsZUNTUyArICdcIj4nICsgYmFzZUZpZWxkLkRlc2NyaXB0aW9uICsgJzo8L3NwYW4+IDxzcGFuIGNsYXNzPVwiZHluYWZvcm0tcmVzcG9uc2VcIiBzdHlsZT1cIicgKyBiYXNlRmllbGQuRmllbGRzdHlsZUNTUyArICdcIj4gIyMnICsgYmFzZUZpZWxkLk5hbWUgKyAnIyM8L3NwYW4+IFxcbiA8YnI+ICc7XHJcbiAgICB9KTtcclxuICAgIC8vIChhdHR1YWxtZW50ZSBub24gZXNpc3RlIGlsIGNvbmNldHRvIGRpIHRlbXBhdGUgZGkgb3V0cHV0KVxyXG4gICAgcmV0dXJuIHRlbXBsYXRlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXBsYWNlVGVtcGxhdGVQbGFjZWhvbGRlcnNXaXRoVmFsdWVzKHRlbXBsYXRlOiBzdHJpbmcsIG91dHB1dFZhbHVlc0FycmF5OiBBcnJheTxhbnk+LCByZWdleCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGVtcGxhdGUucmVwbGFjZShyZWdleCwgKG1hdGNoLCBncm91cCkgPT4ge1xyXG4gICAgICByZXR1cm4gPHN0cmluZz5vdXRwdXRWYWx1ZXNBcnJheVtncm91cF07XHJcbiAgICB9KTtcclxuICB9ICAgXHJcblxyXG59XHJcbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJsb2FkZXJcIj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwicm93IGVxcC1keW5hbWljLW1vZHVsZS10aXRsZSBhZGQtZm9ybS1yZWNvcmQtaGVhZGVyXCIgKm5nSWY9XCJzaG93VGl0bGVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgIDxoND48Yj57e2Zvcm0uTmFtZX19PC9iPjwvaDQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1Gb3JtXCIgY2xhc3M9XCJhZGQtZm9ybS1yZWNvcmQtZm9ybVwiPlxyXG5cclxuICAgICAgICA8IS0tIFZJU1VBTElaWkFaSU9ORSBTRU1QTElDRSAtLT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZm9ybS5Gb3JtU2NhbGFyVHlwZSA9PSBGb3JtU2NhbGFyVHlwZUVudW0uU2VtcGxpY2UgJiYgIXNob3dMaXN0Vmlld1wiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZpZWxkVGVtcGxhdGVzXCJcclxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgZmllbGRzOiBmb3JtLkZpZWxkcyB9XCIgY2xhc3M9XCJhZGQtZm9ybS1yZWNvcmQtc2VtcGxpY2VcIj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8L2Zvcm0+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBtdC0yIG0tMiBhZGQtZm9ybS1yZWNvcmQtYnV0dG9uc1wiXHJcbiAgICAgICAgKm5nSWY9XCIoc2hvd0JhY2tCdXR0b24gfHwgc2hvd1NhdmVCdXR0b24pICYmIGZvcm0uRm9ybVNjYWxhclR5cGUgIT0gRm9ybVNjYWxhclR5cGVFbnVtWydBIHN0ZXAnXVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgbS0yIHRleHQtcmlnaHRcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiB0eXBlPVwiYnV0dG9uXCIgKm5nSWY9XCJzaG93TGlzdFZpZXcgJiYgc2hvd05ld1NlYXJjaEJ1dHRvblwiIChjbGljayk9XCJyZXNldCgpXCI+XHJcbiAgICAgICAgICAgICAgICBOdW92YSByaWNlcmNhXHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIHR5cGU9XCJidXR0b25cIiAqbmdJZj1cIiFzaG93TGlzdFZpZXcgJiYgZmlsdGVyUmVzdWx0Vmlld01vZGUgIT0gZmlsdGVyUmVzdWx0Vmlld01vZGVzLkZJTFRFUlNfT05MWVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiQXBwbHlGaWx0ZXIoKVwiPlxyXG4gICAgICAgICAgICAgICBFc2VndWkgRmlsdHJvXHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIHR5cGU9XCJidXR0b25cIiAqbmdJZj1cImZpbHRlclJlc3VsdFZpZXdNb2RlID09IGZpbHRlclJlc3VsdFZpZXdNb2Rlcy5GSUxURVJTX09OTFlcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm91dHB1dEV4dGVybmFsRmlsdGVycygpXCI+XHJcbiAgICAgICAgICAgICAgIFByb3NlZ3VpXHJcbiAgICAgICAgICAgIDwvYnV0dG9uPiAgICAgICAgICAgIFxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGxpc3Qtdmlldy1mb3JtLXJlY29yZFxyXG4gICAgKm5nSWY9XCJzaG93TGlzdFZpZXcgJiYgZmlsdGVyUmVzdWx0Vmlld01vZGUgPT0gZmlsdGVyUmVzdWx0Vmlld01vZGVzLklOVEVSTkFMX0xJU1RWSUVXICYmIGZpbHRlclJlc3VsdHMgIT0gbnVsbFwiXHJcbiAgICBjbGFzcz1cImR5bmFtaWMtbW9kdWxlLWxpc3Qtdmlld1wiXHJcbiAgICBbY29uZmlndXJhdGlvbnNdPVwibGlzdFZpZXdDb25maWd1cmF0aW9uc1wiXHJcbiAgICBbY29tcGlsZUNvbmZpZ3VyYXRpb25zXT1cImNvbmZpZ3VyYXRpb25zXCJcclxuICAgIFtlbmRQb2ludENvbmZpZ3VyYXRpb25dPVwiZW5kUG9pbnRDb25maWd1cmF0aW9uXCJcclxuICAgIFtmb3JtSURdPVwiZm9ybUlEXCJcclxuICAgIFtvbmx5Vmlld109XCJ0cnVlXCJcclxuICAgIFtyZWNvcmRzXT1cImZpbHRlclJlc3VsdHNcIlxyXG4gICAgW2V4dGVybmFsQnV0dG9uc109XCJleHRlcm5hbEJ1dHRvbnNcIlxyXG4gICAgPlxyXG4gICAgPC9saXN0LXZpZXctZm9ybS1yZWNvcmQ+XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cInNob3dMaXN0VmlldyAmJiBmaWx0ZXJSZXN1bHRWaWV3TW9kZSA9PSBmaWx0ZXJSZXN1bHRWaWV3TW9kZXMuSU5URVJOQUxfRVFQVEFCTEUgJiYgZmlsdGVyRXFwVGFibGVSZXN1bHRzICE9IG51bGxcIiBjbGFzcz1cImR5bmFtaWMtbW9kdWxlLWVxcC10YWJsZVwiPlxyXG4gICAgICAgIDxlcXAtdGFibGUgXHJcblxyXG4gICAgICAgICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiXHJcbiAgICAgICAgICAgICN0YWJsZVxyXG4gICAgICAgICAgICBlbXB0eVRhYmxlTWVzc2FnZT1cIlwiXHJcbiAgICAgICAgICAgIFtkYXRhXT1cImZpbHRlckVxcFRhYmxlUmVzdWx0c1wiXHJcbiAgICAgICAgICAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIlxyXG4gICAgICAgICAgICBbZXhwb3J0RXFwVGFibGVdPVwiZXhwb3J0RXFwVGFibGVcIlxyXG5cclxuICAgICAgICAgICAgW2Nob29zZUNvbHVtbnNUb1Nob3ddPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgIFtzd2l0Y2hGaWx0ZXJUeXBlXT1cInRydWVcIlxyXG5cclxuICAgICAgICAgICAgW2NyZWF0ZU1hdENhcmRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZVBhZ2VTdG9yYWdlU2F2ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgW2lzTXVsdGlMYW5ndWFnZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIFttYXRQYWdpbmF0b3JDb3VudF09XCJmaWx0ZXJFcXBUYWJsZVJlc3VsdHMgIT0gbnVsbCAmJiBmaWx0ZXJFcXBUYWJsZVJlc3VsdHMubGVuZ3RoID4gMCA/IGZpbHRlckVxcFRhYmxlUmVzdWx0cy5sZW5ndGggOiAwXCJcclxuICAgICAgICAgICAgW21hdFBhZ2luYXRvckluZGV4XT1cInBhZ2VJbmRleFwiXHJcbiAgICAgICAgICAgIFttYXRQYWdpbmF0b3JTaXplXT1cInBhZ2VTaXplXCJcclxuICAgICAgICAgICAgW21hdFBhZ2luYXRvckxlbmd0aF09XCJwYWdlTGVuZ3RoXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgPC9lcXAtdGFibGU+ICAgXHJcbiAgICA8L2Rpdj4gXHJcblxyXG48L25nLWNvbnRhaW5lcj5cclxuXHJcblxyXG5cclxuPCEtLSBURU1QTEFURSBQRVIgTEEgVklTVUFMSVpaQVpJT05FIERFSSBDQU1QSSBERUxMQSBGT1JNIC0tPlxyXG48bmctdGVtcGxhdGUgI2ZpZWxkVGVtcGxhdGVzIGxldC1maWVsZHM9J2ZpZWxkcycgbGV0LW91dGRhdGVkZmllbGRzPSdvdXRkYXRlZEZpZWxkcyc+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCIgKm5nSWY9XCIhc2hvd0xpc3RWaWV3XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LTJcIiAqbmdGb3I9XCJsZXQgZmllbGQgb2YgZmllbGRzXCIgW2hpZGRlbl09XCIhZmllbGQuSW5MaXN0Vmlld1wiXHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInV0aWxpdHlTZXJ2aWNlLmdldEZpZWxkU3lsZUNsYXNzKGZpZWxkKVwiPlxyXG4gICAgICAgICAgICA8ZHluYW1pYy1tb2R1bGUtZmlsdGVyLWZpeCAjZmllbGRUZW1wbGF0ZSBbZmllbGRdPVwiZmllbGRcIiBbZm9ybV09XCJmb3JtXCIgW3JlY29yZF09XCJyZWNvcmRcIiBbU3RhdGlzdGljXT1cImdldFN0YXRpc3RpY0Zyb21GaWVsZE5hbWUoU3RhdGlzdGljPy5TdGF0aXN0aWNzLGZpZWxkLk5hbWUpXCJcclxuICAgICAgICAgICAgICAgIChmaWx0ZXJDaGFuZ2UpPVwib25GaWx0ZXJDaGFuZ2UoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICA8L2R5bmFtaWMtbW9kdWxlLWZpbHRlci1maXg+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCIgKm5nSWY9XCJvdXRkYXRlZFRhYmxlTG9hZGVkICYmIG91dGRhdGVkRmllbGRzICE9IG51bGwgJiYgb3V0ZGF0ZWRGaWVsZHMubGVuZ3RoID4gMFwiPlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwib3V0ZGF0ZWRUYWJsZUNvbnRhaW5lclwiPlxyXG5cclxuICAgICAgICAgICAgPGgyPkZpbHRyaSBPYnNvbGV0aTwvaDI+XHJcbiAgICAgICAgICAgIDxwPlNvbm8gZmlsdHJpIGNoZSBzb25vIHN0YXRpIGNvbmZpZ3VyYXRpIGluIHVuYSB2ZXJzaW9uZSBwcmVjZWRlbnRlIGRpIHF1ZXN0byBtb2R1bG8gZSBwb2kgc2FsdmF0aTwvcD5cclxuXHJcbiAgICAgICAgICAgIDxlcXAtdGFibGUgXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm91dGRhdGVkVGFibGVcIlxyXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgI3RhYmxlT3V0ZGF0ZWRcclxuICAgICAgICAgICAgICAgIGVtcHR5VGFibGVNZXNzYWdlPVwiXCJcclxuICAgICAgICAgICAgICAgIFtkYXRhXT1cIm91dGRhdGVkRmllbGRzXCJcclxuICAgICAgICAgICAgICAgIFtjb2x1bW5zXT1cImNvbHVtbnNPdXRkYXRlZFwiXHJcblxyXG4gICAgICAgICAgICAgICAgW2NyZWF0ZU1hdENhcmRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBbbWF0UGFnaW5hdG9yQ291bnRdPVwib3V0ZGF0ZWRGaWVsZHMgIT0gbnVsbCAmJiBvdXRkYXRlZEZpZWxkcy5sZW5ndGggPiAwID8gb3V0ZGF0ZWRGaWVsZHMubGVuZ3RoIDogMFwiXHJcbiAgICAgICAgICAgICAgICBbbWF0UGFnaW5hdG9ySW5kZXhdPVwiMFwiXHJcbiAgICAgICAgICAgICAgICBbbWF0UGFnaW5hdG9yU2l6ZV09XCI1XCJcclxuICAgICAgICAgICAgICAgIFttYXRQYWdpbmF0b3JMZW5ndGhdPVwiWzVdXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICA8L2VxcC10YWJsZT4gXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT4iXX0=
|
|
@@ -5,4 +5,4 @@ export class FilterStatistic {
|
|
|
5
5
|
this.Statistics = new Array();
|
|
6
6
|
}
|
|
7
7
|
}
|
|
8
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGlzdGljLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXFwLWR5bmFtaWMtbW9kdWxlL3NyYy9saWIvbW9kZWxzL3N0YXRpc3RpYy5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxNQUFNLE9BQU8sU0FBUztDQUtyQjtBQUVELE1BQU0sT0FBTyxlQUFlO0lBQTVCO1FBQ0ksZUFBVSxHQUFxQixJQUFJLEtBQUssRUFBYSxDQUFDO0lBRzFELENBQUM7Q0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZpZWxkVHlwZUVudW0gfSBmcm9tIFwiLi9iYXNlRmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHsgTG9naWNPcGVyYXRvckJvb2xlYW4sIExvZ2ljT3BlcmF0b3JEYXRlLCBMb2dpY09wZXJhdG9ySW1hZ2VTZWxlY3RvciwgTG9naWNPcGVyYXRvckxpc3RWYWx1ZSwgTG9naWNPcGVyYXRvck51bWVyaWMsIExvZ2ljT3BlcmF0b3JUZXh0IH0gZnJvbSBcIi4vbG9naWNPcGVyYXRvci5tb2RlbFwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN0YXRpc3RpY3tcclxuICAgIGZpZWxkdHlwZTpGaWVsZFR5cGVFbnVtO1xyXG4gICAga2V5OiBzdHJpbmc7XHJcbiAgICB2YWx1ZTogc3RyaW5nO1xyXG4gICAgbG9naWNvcGVyYXRvcjpMb2dpY09wZXJhdG9yQm9vbGVhbiB8IExvZ2ljT3BlcmF0b3JMaXN0VmFsdWUgfCBMb2dpY09wZXJhdG9yTnVtZXJpYyB8IExvZ2ljT3BlcmF0b3JUZXh0IHwgTG9naWNPcGVyYXRvckRhdGUgfCBMb2dpY09wZXJhdG9ySW1hZ2VTZWxlY3RvclxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRmlsdGVyU3RhdGlzdGljIHtcclxuICAgIFN0YXRpc3RpY3M6IEFycmF5PFN0YXRpc3RpYz4gPSBuZXcgQXJyYXk8U3RhdGlzdGljPigpO1xyXG4gICAgUHJlZmlsdGVyUGFyYW1zPzogYW55O1xyXG4gICAgQWRkaXRpb25hbFBhcmFtcz86IGFueTtcclxufSJdfQ==
|