@eqproject/eqp-dynamic-module 2.3.14 → 2.3.16

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.
@@ -29,6 +29,7 @@ export class ListViewFormRecordComponent {
29
29
  this.externalButtons = new Array();
30
30
  this.onlyView = true;
31
31
  this.records = null;
32
+ this.highlightFilter = null;
32
33
  this.defaultListActions = new DynamicModuleListFormRecordActionsDefault();
33
34
  this.showTitle = true;
34
35
  // values: Array<Record>;
@@ -207,8 +208,18 @@ export class ListViewFormRecordComponent {
207
208
  tmpRec.userID = r.userID;
208
209
  tmpRec.AnswerDate = r.AnswerDate;
209
210
  tmpRec.HTMLreadableValues = r.HTMLreadableValues;
211
+ tmpRec.AdditionalParams = JSON.parse(r.AdditionalParams);
210
212
  this.configurations.values.push(tmpRec);
211
- this.panels.push({ record: tmpRec, isOpen: false, pageState: null });
213
+ var isHighlighted = false;
214
+ if (this.highlightFilter != null) {
215
+ isHighlighted = true;
216
+ Object.keys(this.highlightFilter).forEach((filter) => {
217
+ if (!tmpRec.AdditionalParams[filter] || tmpRec.AdditionalParams[filter] != this.highlightFilter[filter]) {
218
+ isHighlighted = false;
219
+ }
220
+ });
221
+ }
222
+ this.panels.push({ record: tmpRec, isOpen: false, pageState: null, highlighted: isHighlighted });
212
223
  });
213
224
  this.loader = true;
214
225
  setTimeout((_) => {
@@ -595,10 +606,10 @@ export class ListViewFormRecordComponent {
595
606
  }
596
607
  }
597
608
  ListViewFormRecordComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ListViewFormRecordComponent, deps: [{ token: i1.UtilityHelperService }, { token: i0.ChangeDetectorRef }, { token: i2.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
598
- ListViewFormRecordComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: ListViewFormRecordComponent, selector: "list-view-form-record", inputs: { debugMode: "debugMode", configurations: "configurations", compileConfigurations: "compileConfigurations", endPointConfiguration: "endPointConfiguration", userID: "userID", formID: "formID", form: "form", defaultListViewFunction: "defaultListViewFunction", externalButtons: "externalButtons", onlyView: "onlyView", records: "records" }, outputs: { onAddViewEditRecord: "onAddViewEditRecord", onDeleteRecord: "onDeleteRecord", onDuplicateRecord: "onDuplicateRecord", saveRecordEvent: "saveRecordEvent", afterSaveRecordEvent: "afterSaveRecordEvent" }, viewQueries: [{ propertyName: "tableRecords", first: true, predicate: ["tableRecords"], descendants: true, static: true }, { propertyName: "openAddDialog", first: true, predicate: ["openAddDialog"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<mat-card class=\"list-view-form-record\">\r\n <mat-card-header *ngIf=\"showTitle || defaultListActions.add\" class=\"align-items-center justify-content-between\">\r\n <mat-card-title *ngIf=\"showTitle\">Elenco {{ form.Name }} </mat-card-title>\r\n <mat-card-actions *ngIf=\"defaultListActions.add\">\r\n <button \r\n *ngIf=\"defaultListActions.add\"\r\n class=\"btn btn-primary\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openAddPopup()\">\r\n <mat-icon>add</mat-icon>\r\n <span style=\"margin-left: 10px\">Aggiungi</span>\r\n </button>\r\n </mat-card-actions>\r\n </mat-card-header>\r\n\r\n \r\n <mat-card-content>\r\n <mat-accordion [hideToggle]=\"test\" [multi]=\"true\">\r\n <mat-expansion-panel *ngFor=\"let panel of panels; index as i\" \r\n [expanded]=\"panel.isOpen\"\r\n [disabled]=\"1\" \r\n >\r\n <mat-expansion-panel-header\r\n (click)=\"togglePanel(panel, panel.record)\">\r\n <mat-panel-title>\r\n {{ form.Name }} v.{{ panel.record.Version }} - {{ panel.record.AnswerDate | date : \"EEEE, d MMMM y, H:mm:ss\" }}\r\n </mat-panel-title>\r\n <!--#region BOTTONI PER LE AZIONI -->\r\n <mat-panel-description>\r\n <button *ngFor=\"let button of buttons\" mat-icon-button class=\"record-icon {{button.extraClass}}\"\r\n (click)=\"button.fn(panel,i,$event)\">\r\n <mat-icon>{{button.icon}}</mat-icon>\r\n </button>\r\n <button *ngFor=\"let button of externalButtons\" mat-icon-button class=\"record-icon {{button.extraClass}}\"\r\n (click)=\"externalCallback($event,button.fn,panel.record)\">\r\n <mat-icon>{{button.icon}}</mat-icon>\r\n </button> \r\n <span class=\"example-spacer\"></span>\r\n \r\n </mat-panel-description>\r\n <!--#endregion BOTTONI PER LE AZIONI -->\r\n </mat-expansion-panel-header>\r\n\r\n <!-- #region CONTENUTO -->\r\n <ng-container *ngIf=\"panel.pageState != null\">\r\n <lib-single-record\r\n [debugMode]=\"debugMode\"\r\n [onlyView]=\"onlyView\"\r\n [record] = \"panel.record\" \r\n [endPointConfiguration] = \"endPointConfiguration\"\r\n [form]=\"form\"\r\n [userID]=\"userID\"\r\n [outCompileConfigurations]=\"outCompileConfigurations\"\r\n [pageState]=\"panel.pageState\"\r\n (saveRecordEvent)=\"saveOrExitForm($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n >\r\n\r\n </lib-single-record>\r\n </ng-container>\r\n <!--#endregion CONTENUTO -->\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n\r\n\r\n </mat-card-content>\r\n <mat-card-footer>\r\n </mat-card-footer>\r\n</mat-card>\r\n\r\n<!-- DIALOG RECIPIENTS EMAIL PER FIRMA -->\r\n<ng-template #openAddDialog>\r\n <mat-card class=\"card-default overlay-card card-inmodal-true\">\r\n <mat-card-content>\r\n\r\n <add-form-record\r\n class=\"dynamic-module-compile\"\r\n [debugMode]=\"debugMode\"\r\n [formID]=\"formID\"\r\n [onlyView]=\"false\"\r\n\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [userID]=\"userID\"\r\n\r\n [configurations]=\"compileConfigurations\"\r\n\r\n (saveRecordEvent)=\"onAddSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAddAfterSaveRecord($event)\"\r\n >\r\n </add-form-record>\r\n\r\n </mat-card-content>\r\n </mat-card>\r\n</ng-template>", styles: ["::ng-deep .error-color{color:var(--danger)}::ng-deep .success-color{color:var(--success)}::ng-deep .dynaform-question{font-size:1em;font-weight:lighter}::ng-deep .dynaform-response{font-size:1.2em;font-weight:700}.mat-expansion-panel-header[aria-disabled=true]{color:#0000008a}\n"], dependencies: [{ kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i4.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i4.MatCardContent, selector: "mat-card-content" }, { kind: "directive", type: i4.MatCardFooter, selector: "mat-card-footer" }, { kind: "component", type: i4.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i4.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: i5.MatAccordion, selector: "mat-accordion", inputs: ["multi", "hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i5.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i5.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }, { kind: "directive", type: i5.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "directive", type: i5.MatExpansionPanelDescription, selector: "mat-panel-description" }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i8.AddFormRecordComponent, selector: "add-form-record", inputs: ["debugMode", "configurations", "endPointConfiguration", "userID", "formID", "form", "record", "onlyView"], outputs: ["saveRecordEvent", "afterSaveRecordEvent"] }, { kind: "component", type: i9.SingleRecordComponent, selector: "lib-single-record", inputs: ["debugMode", "endPointConfiguration", "record", "pageState", "userID", "form", "showBackButton", "outCompileConfigurations", "onlyView"], outputs: ["saveRecordEvent", "afterSaveRecordEvent"] }, { kind: "pipe", type: i7.DatePipe, name: "date" }] });
609
+ ListViewFormRecordComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: ListViewFormRecordComponent, selector: "list-view-form-record", inputs: { debugMode: "debugMode", configurations: "configurations", compileConfigurations: "compileConfigurations", endPointConfiguration: "endPointConfiguration", userID: "userID", formID: "formID", form: "form", defaultListViewFunction: "defaultListViewFunction", externalButtons: "externalButtons", onlyView: "onlyView", records: "records", highlightFilter: "highlightFilter" }, outputs: { onAddViewEditRecord: "onAddViewEditRecord", onDeleteRecord: "onDeleteRecord", onDuplicateRecord: "onDuplicateRecord", saveRecordEvent: "saveRecordEvent", afterSaveRecordEvent: "afterSaveRecordEvent" }, viewQueries: [{ propertyName: "tableRecords", first: true, predicate: ["tableRecords"], descendants: true, static: true }, { propertyName: "openAddDialog", first: true, predicate: ["openAddDialog"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<mat-card class=\"list-view-form-record\">\r\n <mat-card-header *ngIf=\"showTitle || defaultListActions.add\" class=\"align-items-center justify-content-between\">\r\n <mat-card-title *ngIf=\"showTitle\">Elenco {{ form.Name }} </mat-card-title>\r\n <mat-card-actions *ngIf=\"defaultListActions.add\">\r\n <button \r\n *ngIf=\"defaultListActions.add\"\r\n class=\"btn btn-primary\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openAddPopup()\">\r\n <mat-icon>add</mat-icon>\r\n <span style=\"margin-left: 10px\">Aggiungi</span>\r\n </button>\r\n </mat-card-actions>\r\n </mat-card-header>\r\n\r\n \r\n <mat-card-content>\r\n <mat-accordion [hideToggle]=\"test\" [multi]=\"true\">\r\n <mat-expansion-panel *ngFor=\"let panel of panels; index as i\" \r\n [expanded]=\"panel.isOpen\"\r\n [disabled]=\"1\" \r\n [class]=\"panel.highlighted ? 'dm_panel_highlighted' : '0'\"\r\n >\r\n <mat-expansion-panel-header\r\n (click)=\"togglePanel(panel, panel.record)\">\r\n <mat-panel-title>\r\n {{ form.Name }} v.{{ panel.record.Version }} - {{ panel.record.AnswerDate | date : \"EEEE, d MMMM y, H:mm:ss\" }}\r\n </mat-panel-title>\r\n <!--#region BOTTONI PER LE AZIONI -->\r\n <mat-panel-description>\r\n <button *ngFor=\"let button of buttons\" mat-icon-button class=\"record-icon {{button.extraClass}}\"\r\n (click)=\"button.fn(panel,i,$event)\">\r\n <mat-icon>{{button.icon}}</mat-icon>\r\n </button>\r\n <button *ngFor=\"let button of externalButtons\" mat-icon-button class=\"record-icon {{button.extraClass}}\"\r\n (click)=\"externalCallback($event,button.fn,panel.record)\">\r\n <mat-icon>{{button.icon}}</mat-icon>\r\n </button> \r\n <span class=\"example-spacer\"></span>\r\n \r\n </mat-panel-description>\r\n <!--#endregion BOTTONI PER LE AZIONI -->\r\n </mat-expansion-panel-header>\r\n\r\n <!-- #region CONTENUTO -->\r\n <ng-container *ngIf=\"panel.pageState != null\">\r\n <lib-single-record\r\n [debugMode]=\"debugMode\"\r\n [onlyView]=\"onlyView\"\r\n [record] = \"panel.record\" \r\n [endPointConfiguration] = \"endPointConfiguration\"\r\n [form]=\"form\"\r\n [userID]=\"userID\"\r\n [outCompileConfigurations]=\"outCompileConfigurations\"\r\n [pageState]=\"panel.pageState\"\r\n (saveRecordEvent)=\"saveOrExitForm($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n >\r\n\r\n </lib-single-record>\r\n </ng-container>\r\n <!--#endregion CONTENUTO -->\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n\r\n\r\n </mat-card-content>\r\n <mat-card-footer>\r\n </mat-card-footer>\r\n</mat-card>\r\n\r\n<!-- DIALOG RECIPIENTS EMAIL PER FIRMA -->\r\n<ng-template #openAddDialog>\r\n <mat-card class=\"card-default overlay-card card-inmodal-true\">\r\n <mat-card-content>\r\n\r\n <add-form-record\r\n class=\"dynamic-module-compile\"\r\n [debugMode]=\"debugMode\"\r\n [formID]=\"formID\"\r\n [onlyView]=\"false\"\r\n\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [userID]=\"userID\"\r\n\r\n [configurations]=\"compileConfigurations\"\r\n\r\n (saveRecordEvent)=\"onAddSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAddAfterSaveRecord($event)\"\r\n >\r\n </add-form-record>\r\n\r\n </mat-card-content>\r\n </mat-card>\r\n</ng-template>", styles: ["::ng-deep .error-color{color:var(--danger)}::ng-deep .success-color{color:var(--success)}::ng-deep .dynaform-question{font-size:1em;font-weight:lighter}::ng-deep .dynaform-response{font-size:1.2em;font-weight:700}.mat-expansion-panel-header[aria-disabled=true]{color:#0000008a}\n"], dependencies: [{ kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i4.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i4.MatCardContent, selector: "mat-card-content" }, { kind: "directive", type: i4.MatCardFooter, selector: "mat-card-footer" }, { kind: "component", type: i4.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i4.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: i5.MatAccordion, selector: "mat-accordion", inputs: ["multi", "hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i5.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i5.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }, { kind: "directive", type: i5.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "directive", type: i5.MatExpansionPanelDescription, selector: "mat-panel-description" }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i8.AddFormRecordComponent, selector: "add-form-record", inputs: ["debugMode", "configurations", "endPointConfiguration", "userID", "formID", "form", "record", "onlyView", "isDuplicate"], outputs: ["saveRecordEvent", "afterSaveRecordEvent"] }, { kind: "component", type: i9.SingleRecordComponent, selector: "lib-single-record", inputs: ["debugMode", "endPointConfiguration", "record", "pageState", "userID", "form", "showBackButton", "outCompileConfigurations", "onlyView"], outputs: ["saveRecordEvent", "afterSaveRecordEvent"] }, { kind: "pipe", type: i7.DatePipe, name: "date" }] });
599
610
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ListViewFormRecordComponent, decorators: [{
600
611
  type: Component,
601
- args: [{ selector: "list-view-form-record", template: "<mat-card class=\"list-view-form-record\">\r\n <mat-card-header *ngIf=\"showTitle || defaultListActions.add\" class=\"align-items-center justify-content-between\">\r\n <mat-card-title *ngIf=\"showTitle\">Elenco {{ form.Name }} </mat-card-title>\r\n <mat-card-actions *ngIf=\"defaultListActions.add\">\r\n <button \r\n *ngIf=\"defaultListActions.add\"\r\n class=\"btn btn-primary\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openAddPopup()\">\r\n <mat-icon>add</mat-icon>\r\n <span style=\"margin-left: 10px\">Aggiungi</span>\r\n </button>\r\n </mat-card-actions>\r\n </mat-card-header>\r\n\r\n \r\n <mat-card-content>\r\n <mat-accordion [hideToggle]=\"test\" [multi]=\"true\">\r\n <mat-expansion-panel *ngFor=\"let panel of panels; index as i\" \r\n [expanded]=\"panel.isOpen\"\r\n [disabled]=\"1\" \r\n >\r\n <mat-expansion-panel-header\r\n (click)=\"togglePanel(panel, panel.record)\">\r\n <mat-panel-title>\r\n {{ form.Name }} v.{{ panel.record.Version }} - {{ panel.record.AnswerDate | date : \"EEEE, d MMMM y, H:mm:ss\" }}\r\n </mat-panel-title>\r\n <!--#region BOTTONI PER LE AZIONI -->\r\n <mat-panel-description>\r\n <button *ngFor=\"let button of buttons\" mat-icon-button class=\"record-icon {{button.extraClass}}\"\r\n (click)=\"button.fn(panel,i,$event)\">\r\n <mat-icon>{{button.icon}}</mat-icon>\r\n </button>\r\n <button *ngFor=\"let button of externalButtons\" mat-icon-button class=\"record-icon {{button.extraClass}}\"\r\n (click)=\"externalCallback($event,button.fn,panel.record)\">\r\n <mat-icon>{{button.icon}}</mat-icon>\r\n </button> \r\n <span class=\"example-spacer\"></span>\r\n \r\n </mat-panel-description>\r\n <!--#endregion BOTTONI PER LE AZIONI -->\r\n </mat-expansion-panel-header>\r\n\r\n <!-- #region CONTENUTO -->\r\n <ng-container *ngIf=\"panel.pageState != null\">\r\n <lib-single-record\r\n [debugMode]=\"debugMode\"\r\n [onlyView]=\"onlyView\"\r\n [record] = \"panel.record\" \r\n [endPointConfiguration] = \"endPointConfiguration\"\r\n [form]=\"form\"\r\n [userID]=\"userID\"\r\n [outCompileConfigurations]=\"outCompileConfigurations\"\r\n [pageState]=\"panel.pageState\"\r\n (saveRecordEvent)=\"saveOrExitForm($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n >\r\n\r\n </lib-single-record>\r\n </ng-container>\r\n <!--#endregion CONTENUTO -->\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n\r\n\r\n </mat-card-content>\r\n <mat-card-footer>\r\n </mat-card-footer>\r\n</mat-card>\r\n\r\n<!-- DIALOG RECIPIENTS EMAIL PER FIRMA -->\r\n<ng-template #openAddDialog>\r\n <mat-card class=\"card-default overlay-card card-inmodal-true\">\r\n <mat-card-content>\r\n\r\n <add-form-record\r\n class=\"dynamic-module-compile\"\r\n [debugMode]=\"debugMode\"\r\n [formID]=\"formID\"\r\n [onlyView]=\"false\"\r\n\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [userID]=\"userID\"\r\n\r\n [configurations]=\"compileConfigurations\"\r\n\r\n (saveRecordEvent)=\"onAddSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAddAfterSaveRecord($event)\"\r\n >\r\n </add-form-record>\r\n\r\n </mat-card-content>\r\n </mat-card>\r\n</ng-template>", styles: ["::ng-deep .error-color{color:var(--danger)}::ng-deep .success-color{color:var(--success)}::ng-deep .dynaform-question{font-size:1em;font-weight:lighter}::ng-deep .dynaform-response{font-size:1.2em;font-weight:700}.mat-expansion-panel-header[aria-disabled=true]{color:#0000008a}\n"] }]
612
+ args: [{ selector: "list-view-form-record", template: "<mat-card class=\"list-view-form-record\">\r\n <mat-card-header *ngIf=\"showTitle || defaultListActions.add\" class=\"align-items-center justify-content-between\">\r\n <mat-card-title *ngIf=\"showTitle\">Elenco {{ form.Name }} </mat-card-title>\r\n <mat-card-actions *ngIf=\"defaultListActions.add\">\r\n <button \r\n *ngIf=\"defaultListActions.add\"\r\n class=\"btn btn-primary\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openAddPopup()\">\r\n <mat-icon>add</mat-icon>\r\n <span style=\"margin-left: 10px\">Aggiungi</span>\r\n </button>\r\n </mat-card-actions>\r\n </mat-card-header>\r\n\r\n \r\n <mat-card-content>\r\n <mat-accordion [hideToggle]=\"test\" [multi]=\"true\">\r\n <mat-expansion-panel *ngFor=\"let panel of panels; index as i\" \r\n [expanded]=\"panel.isOpen\"\r\n [disabled]=\"1\" \r\n [class]=\"panel.highlighted ? 'dm_panel_highlighted' : '0'\"\r\n >\r\n <mat-expansion-panel-header\r\n (click)=\"togglePanel(panel, panel.record)\">\r\n <mat-panel-title>\r\n {{ form.Name }} v.{{ panel.record.Version }} - {{ panel.record.AnswerDate | date : \"EEEE, d MMMM y, H:mm:ss\" }}\r\n </mat-panel-title>\r\n <!--#region BOTTONI PER LE AZIONI -->\r\n <mat-panel-description>\r\n <button *ngFor=\"let button of buttons\" mat-icon-button class=\"record-icon {{button.extraClass}}\"\r\n (click)=\"button.fn(panel,i,$event)\">\r\n <mat-icon>{{button.icon}}</mat-icon>\r\n </button>\r\n <button *ngFor=\"let button of externalButtons\" mat-icon-button class=\"record-icon {{button.extraClass}}\"\r\n (click)=\"externalCallback($event,button.fn,panel.record)\">\r\n <mat-icon>{{button.icon}}</mat-icon>\r\n </button> \r\n <span class=\"example-spacer\"></span>\r\n \r\n </mat-panel-description>\r\n <!--#endregion BOTTONI PER LE AZIONI -->\r\n </mat-expansion-panel-header>\r\n\r\n <!-- #region CONTENUTO -->\r\n <ng-container *ngIf=\"panel.pageState != null\">\r\n <lib-single-record\r\n [debugMode]=\"debugMode\"\r\n [onlyView]=\"onlyView\"\r\n [record] = \"panel.record\" \r\n [endPointConfiguration] = \"endPointConfiguration\"\r\n [form]=\"form\"\r\n [userID]=\"userID\"\r\n [outCompileConfigurations]=\"outCompileConfigurations\"\r\n [pageState]=\"panel.pageState\"\r\n (saveRecordEvent)=\"saveOrExitForm($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n >\r\n\r\n </lib-single-record>\r\n </ng-container>\r\n <!--#endregion CONTENUTO -->\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n\r\n\r\n </mat-card-content>\r\n <mat-card-footer>\r\n </mat-card-footer>\r\n</mat-card>\r\n\r\n<!-- DIALOG RECIPIENTS EMAIL PER FIRMA -->\r\n<ng-template #openAddDialog>\r\n <mat-card class=\"card-default overlay-card card-inmodal-true\">\r\n <mat-card-content>\r\n\r\n <add-form-record\r\n class=\"dynamic-module-compile\"\r\n [debugMode]=\"debugMode\"\r\n [formID]=\"formID\"\r\n [onlyView]=\"false\"\r\n\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [userID]=\"userID\"\r\n\r\n [configurations]=\"compileConfigurations\"\r\n\r\n (saveRecordEvent)=\"onAddSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAddAfterSaveRecord($event)\"\r\n >\r\n </add-form-record>\r\n\r\n </mat-card-content>\r\n </mat-card>\r\n</ng-template>", styles: ["::ng-deep .error-color{color:var(--danger)}::ng-deep .success-color{color:var(--success)}::ng-deep .dynaform-question{font-size:1em;font-weight:lighter}::ng-deep .dynaform-response{font-size:1.2em;font-weight:700}.mat-expansion-panel-header[aria-disabled=true]{color:#0000008a}\n"] }]
602
613
  }], ctorParameters: function () { return [{ type: i1.UtilityHelperService }, { type: i0.ChangeDetectorRef }, { type: i2.MatDialog }]; }, propDecorators: { debugMode: [{
603
614
  type: Input
604
615
  }], configurations: [{
@@ -621,6 +632,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
621
632
  type: Input
622
633
  }], records: [{
623
634
  type: Input
635
+ }], highlightFilter: [{
636
+ type: Input
624
637
  }], tableRecords: [{
625
638
  type: ViewChild,
626
639
  args: ["tableRecords", { static: true }]
@@ -638,4 +651,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
638
651
  }], afterSaveRecordEvent: [{
639
652
  type: Output
640
653
  }] } });
641
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC12aWV3LWZvcm0tcmVjb3JkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9mb3JtLXJlY29yZHMvbGlzdC12aWV3LWZvcm0tcmVjb3JkL2xpc3Qtdmlldy1mb3JtLXJlY29yZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZm9ybS1yZWNvcmRzL2xpc3Qtdmlldy1mb3JtLXJlY29yZC9saXN0LXZpZXctZm9ybS1yZWNvcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBQ0wsU0FBUyxFQUNULE1BQU0sRUFDTixZQUFZLEdBS2IsTUFBTSxlQUFlLENBQUM7QUFNdkIsT0FBTyxFQUFhLE1BQU0sRUFBZ0IsTUFBTSxpQ0FBaUMsQ0FBQztBQUVsRixPQUFPLEVBQUUseUNBQXlDLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUV6SCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUNwRyxPQUFPLEVBR0wsYUFBYSxHQUNkLE1BQU0sa0RBQWtELENBQUM7Ozs7Ozs7Ozs7O0FBYzFELE1BQU0sT0FBTywyQkFBMkI7SUFHdEMsUUFBUSxDQUFDLE9BQWUsRUFBRSxPQUFhO1FBQ3JDLElBQUcsSUFBSSxDQUFDLFNBQVMsRUFBQztZQUNoQixPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQTtTQUM5QjtJQUNILENBQUM7SUFrREQsWUFDVSxvQkFBMEMsRUFDMUMsY0FBaUMsRUFDakMsTUFBaUI7UUFGakIseUJBQW9CLEdBQXBCLG9CQUFvQixD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UzsrQkFDRSx1QkFBdUI7bUtBTXhCLFNBQVM7c0JBQWpCLEtBQUs7Z0JBT0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBRUcscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQWN1QyxZQUFZO3NCQUF4RCxTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBT0ksYUFBYTtzQkFBM0QsU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUluQyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBS0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBR0csZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBPbkluaXQsXHJcbiAgSW5wdXQsXHJcbiAgVmlld0NoaWxkLFxyXG4gIE91dHB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtcclxuICBDb25maWdDb2x1bW4sXHJcbiAgRXFwVGFibGVDb21wb25lbnRcclxufSBmcm9tIFwiQGVxcHJvamVjdC9lcXAtdGFibGVcIjtcclxuaW1wb3J0IHsgRm9ybSB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbHMvZm9ybS5tb2RlbFwiO1xyXG5pbXBvcnQgeyBEeW5SZWNvcmQsIFJlY29yZCwgUmVjb3JkQnV0dG9uIH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVscy9yZWNvcmQubW9kZWxcIjtcclxuaW1wb3J0IHsgVXRpbGl0eUhlbHBlclNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vc2VydmljZXMvdXRpbGl0eUhlbHBlci5zZXJ2aWNlc1wiO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlTGlzdEZvcm1SZWNvcmRBY3Rpb25zRGVmYXVsdCB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbHMvZHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHRcIjtcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZUxpc3RDb25maWcgfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWxzL2R5bmFtaWNNb2R1bGVMaXN0Q29uZmlnLm1vZGVsXCI7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnIH0gZnJvbSBcIi4vLi4vLi4vLi4vLi4vL21vZGVscy9keW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZy5tb2RlbFwiO1xyXG5pbXBvcnQge1xyXG4gIEVuZFBvaW50Q29uZmlndXJhdGlvbixcclxuICBFbmRQb2ludERhdGFQYXJhbXMsXHJcbiAgUGFyYW1UeXBlRW51bSxcclxufSBmcm9tIFwiLi8uLi8uLi8uLi8uLi9tb2RlbHMvZW5kUG9pbnRDb25maWd1cmF0aW9uLm1vZGVsXCI7XHJcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nUmVmIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2RpYWxvZ1wiO1xyXG5cclxudHlwZSBQYW5lbCA9IHsgXHJcbiAgcmVjb3JkOiBSZWNvcmQsIFxyXG4gIGlzT3BlbjogYm9vbGVhbiwgXHJcbiAgcGFnZVN0YXRlOiBzdHJpbmcgXHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImxpc3Qtdmlldy1mb3JtLXJlY29yZFwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcImxpc3Qtdmlldy1mb3JtLXJlY29yZC5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi9saXN0LXZpZXctZm9ybS1yZWNvcmQuY29tcG9uZW50LnNjc3NcIl0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMaXN0Vmlld0Zvcm1SZWNvcmRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcbiAgXHJcbiAgQElucHV0KCkgZGVidWdNb2RlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZGVidWdMb2cobWVzc2FnZTogc3RyaW5nLCBlbGVtZW50PzogYW55KXtcclxuICAgIGlmKHRoaXMuZGVidWdNb2RlKXtcclxuICAgICAgY29uc29sZS5sb2cobWVzc2FnZSwgZWxlbWVudClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIGNvbmZpZ3VyYXRpb25zOiBEeW5hbWljTW9kdWxlTGlzdENvbmZpZztcclxuICBASW5wdXQoKSBjb21waWxlQ29uZmlndXJhdGlvbnM6IER5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnO1xyXG4gIG91dENvbXBpbGVDb25maWd1cmF0aW9uczogRHluYW1pY01vZHVsZUNvbXBpbGVDb25maWc7XHJcbiAgQElucHV0KCkgZW5kUG9pbnRDb25maWd1cmF0aW9uOiBFbmRQb2ludENvbmZpZ3VyYXRpb247XHJcbiAgQElucHV0KCkgdXNlcklEOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgZm9ybUlEOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgZm9ybTogRm9ybSA9IG51bGw7XHJcbiAgQElucHV0KCkgZGVmYXVsdExpc3RWaWV3RnVuY3Rpb246IEZ1bmN0aW9uID0gbnVsbDtcclxuICBASW5wdXQoKSBleHRlcm5hbEJ1dHRvbnM6IEFycmF5PFJlY29yZEJ1dHRvbj4gPSBuZXcgQXJyYXk8UmVjb3JkQnV0dG9uPigpO1xyXG4gIEBJbnB1dCgpIG9ubHlWaWV3OiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSByZWNvcmRzOiBBcnJheTxEeW5SZWNvcmQ+ID0gbnVsbDtcclxuXHJcbiAgZGVmYXVsdExpc3RBY3Rpb25zOiBEeW5hbWljTW9kdWxlTGlzdEZvcm1SZWNvcmRBY3Rpb25zRGVmYXVsdCA9XHJcbiAgICBuZXcgRHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHQoKTtcclxuICBzaG93VGl0bGUgPSB0cnVlO1xyXG4gIC8vIHZhbHVlczogQXJyYXk8UmVjb3JkPjtcclxuICB0ZXN0ID0gZmFsc2U7XHJcbiAgc2VsZWN0ZWRSZWNvcmQ6IFJlY29yZDtcclxuICBsb2FkZXI6IGJvb2xlYW47XHJcbiAgcGFuZWxPcGVuU3RhdGU6IGJvb2xlYW5bXSA9IG5ldyBBcnJheTxib29sZWFuPigpO1xyXG4gIHB1YmxpYyBzZWxlY3RlZEluZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICB2aXN1YWxpenphQ29udGVudXRvID0gZmFsc2U7XHJcbiAgbW9kaWZpY2FDb250ZW51dG8gPSBmYWxzZTtcclxuXHJcbiAgQFZpZXdDaGlsZChcInRhYmxlUmVjb3Jkc1wiLCB7IHN0YXRpYzogdHJ1ZSB9KSB0YWJsZVJlY29yZHM6IEVxcFRhYmxlQ29tcG9uZW50O1xyXG5cclxuICBjb2x1bW5zID0gbmV3IEFycmF5PENvbmZpZ0NvbHVtbj4oKTtcclxuICBwYW5lbHM6IEFycmF5PFBhbmVsPlxyXG4gIGJ1dHRvbnM6IEFycmF5PFJlY29yZEJ1dHRvbj4gPSBuZXcgQXJyYXk8UmVjb3JkQnV0dG9uPigpO1xyXG4gIHBvcHVwTG9hZGVyOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBWaWV3Q2hpbGQoXCJvcGVuQWRkRGlhbG9nXCIsIHsgc3RhdGljOiBmYWxzZSB9KSBvcGVuQWRkRGlhbG9nOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIG9wZW5BZGREaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxUZW1wbGF0ZVJlZjxhbnk+PjtcclxuXHJcbiAgLy8gYWRkIG5ld1xyXG4gIEBPdXRwdXQoKSBvbkFkZFZpZXdFZGl0UmVjb3JkOiBFdmVudEVtaXR0ZXI8e1xyXG4gICAgcmVjb3JkOiBSZWNvcmQ7XHJcbiAgICBvbmx5VmlldzogYm9vbGVhbjtcclxuICB9PiA9IG5ldyBFdmVudEVtaXR0ZXI8eyByZWNvcmQ6IFJlY29yZDsgb25seVZpZXc6IGJvb2xlYW4gfT4oKTtcclxuXHJcbiAgQE91dHB1dCgpIG9uRGVsZXRlUmVjb3JkOiBFdmVudEVtaXR0ZXI8UmVjb3JkPiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVjb3JkPigpO1xyXG4gIEBPdXRwdXQoKSBvbkR1cGxpY2F0ZVJlY29yZDogRXZlbnRFbWl0dGVyPFJlY29yZD4gPVxyXG4gICAgbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ+KCk7XHJcblxyXG4gIEBPdXRwdXQoKSBzYXZlUmVjb3JkRXZlbnQ6IEV2ZW50RW1pdHRlcjxSZWNvcmQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ+KCk7XHJcbiAgQE91dHB1dCgpIGFmdGVyU2F2ZVJlY29yZEV2ZW50OiBFdmVudEVtaXR0ZXI8UmVjb3JkPiA9XHJcbiAgICBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHV0aWxpdHlIZWxwZXJTZXJ2aWNlOiBVdGlsaXR5SGVscGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZ1xyXG4gICkge31cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAvLyB0aGlzLnBhbmVsT3BlblN0YXRlID0gW1xyXG4gICAgLy8gICAuLi5BcnJheSh0aGlzLmNvbmZpZ3VyYXRpb25zLnZhbHVlcy5sZW5ndGggKyAxKSxcclxuICAgIC8vIF0ubWFwKCgpID0+IGZhbHNlKTtcclxuXHJcbiAgICB0aGlzLmRlZmF1bHRMaXN0QWN0aW9ucyA9IHRoaXMuY29uZmlndXJhdGlvbnMuZGVmYXVsdExpc3RBY3Rpb25zO1xyXG4gICAgdGhpcy5zaG93VGl0bGUgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLnNob3dUaXRsZTtcclxuXHJcbiAgICB0aGlzLm91dENvbXBpbGVDb25maWd1cmF0aW9ucyA9IG5ldyBEeW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZyhcclxuICAgICAgdGhpcy5jb21waWxlQ29uZmlndXJhdGlvbnMuc2hvd1RpdGxlLFxyXG4gICAgICB0aGlzLmNvbXBpbGVDb25maWd1cmF0aW9ucy5zaG93U2F2ZUJ1dHRvbixcclxuICAgICAgdGhpcy5jb21waWxlQ29uZmlndXJhdGlvbnMuc2hvd0JhY2tCdXR0b24sXHJcbiAgICAgIHRoaXMuY29tcGlsZUNvbmZpZ3VyYXRpb25zLnVzZXJJRCxcclxuICAgICAgdGhpcy5jb21waWxlQ29uZmlndXJhdGlvbnMuYWRkaXRpb25hbFBhcmFtcyxcclxuICAgICAgdGhpcy5jb21waWxlQ29uZmlndXJhdGlvbnMucHJlZmlsdGVyUGFyYW1zLFxyXG4gICAgKTtcclxuICAgIHRoaXMuZGVidWdMb2coXCJvdXRjb21waWxlQ29uZmlndXJhdGlvbnMgXCIsIHRoaXMub3V0Q29tcGlsZUNvbmZpZ3VyYXRpb25zKTtcclxuICAgIHRoaXMuZ2V0Rm9ybUJ5SUQoKTtcclxuICAgIHRoaXMuY29uZmlndXJlTGlzdHZpZXdCdXR0b25zKCk7XHJcblxyXG4gICAgLy8gdGhpcy5vdXRDb21waWxlQ29uZmlndXJhdGlvbnMudXNlcklEO1xyXG4gICAgLy8gdGhpcy52YWx1ZXMgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLnZhbHVlc1xyXG4gICAgLy8gdGhpcy5jb25maWd1cmVDb2x1bW5zKCk7XHJcblxyXG5cclxuXHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICB0aGlzLmRlYnVnTG9nKCduZ09uQ2hhbmdlcycsIGNoYW5nZXMpO1xyXG5cclxuICAgIC8vIFNlIHZpZW5lIG1vZGlmaWNhdG8gaWwgdmFsb3JlIGRpIFwibmdNb2RlbElucHV0XCIgYWxsb3JhIGFnZ2lvcm5hIGwnaW5wdXRcclxuICAgIGlmIChcclxuICAgICAgY2hhbmdlc1tcImNvbmZpZ3VyYXRpb25zXCJdICE9IHVuZGVmaW5lZCAmJlxyXG4gICAgICBjaGFuZ2VzW1wiY29uZmlndXJhdGlvbnNcIl0uZmlyc3RDaGFuZ2UgPT0gZmFsc2VcclxuICAgICkge1xyXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLnZhbHVlcyA9IGNoYW5nZXNbXCJjb25maWd1cmF0aW9uc1wiXS5jdXJyZW50VmFsdWU7XHJcbiAgICAgIHRoaXMucmVsb2FkVGFibGVzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbk9wZW5pbmcoaW5kaWNlOiBudW1iZXIpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IGluZGljZTtcclxuICB9XHJcblxyXG4gIGNvbmZpZ3VyZUxpc3R2aWV3QnV0dG9ucygpe1xyXG4gICAgdGhpcy5idXR0b25zID0gW1xyXG5cclxuICAgICAge1xyXG4gICAgICAgIFwiaWNvblwiOiBcInZpc2liaWxpdHlcIixcclxuICAgICAgICBcInRleHRcIjogXCJWaXN1YWxpenphXCIsXHJcbiAgICAgICAgXCJ2aXNpYmxlXCI6IHRoaXMuZGVmYXVsdExpc3RBY3Rpb25zLnZpZXcgJiYgKHRoaXMuZGVmYXVsdExpc3RBY3Rpb25zLmVkaXQgfHwgdGhpcy5kZWZhdWx0TGlzdEFjdGlvbnMuZHVwbGljYXRlIHx8IHRoaXMuZGVmYXVsdExpc3RBY3Rpb25zLmRlbGV0ZSksXHJcbiAgICAgICAgXCJleHRyYUNsYXNzXCI6IFwidmlldy1idXR0b24taWNvblwiLFxyXG4gICAgICAgIFwiZm5cIjogKHBhbmVsLGksZXZlbnQpID0+IHtcclxuICAgICAgICAgIHRoaXMudmlld1JlY29yZChwYW5lbCwgdHJ1ZSwgaSwgZXZlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwiaWNvblwiOiBcImVkaXRcIixcclxuICAgICAgICBcInRleHRcIjogXCJNb2RpZmljYVwiLFxyXG4gICAgICAgIFwidmlzaWJsZVwiOiB0aGlzLmRlZmF1bHRMaXN0QWN0aW9ucy5lZGl0LFxyXG4gICAgICAgIFwiZXh0cmFDbGFzc1wiOiBcImVkaXQtYnV0dG9uLWljb25cIixcclxuICAgICAgICBcImZuXCI6IChwYW5lbCxpLGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLkVkaXRSZWNvcmQocGFuZWwsIGZhbHNlLCBpLCBldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJpY29uXCI6IFwiZmlsZV9jb3B5XCIsXHJcbiAgICAgICAgXCJ0ZXh0XCI6IFwiRHVwbGljYVwiLFxyXG4gICAgICAgIFwidmlzaWJsZVwiOiB0aGlzLmRlZmF1bHRMaXN0QWN0aW9ucy5kdXBsaWNhdGUsXHJcbiAgICAgICAgXCJleHRyYUNsYXNzXCI6IFwiZHVwbGljYXRlLWJ1dHRvbi1pY29uXCIsXHJcbiAgICAgICAgXCJmblwiOiAocGFuZWwsaSxldmVudCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5kdXBsaWNhdGVSZWNvcmQocGFuZWwsIGV2ZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcImljb25cIjogXCJkZWxldGVcIixcclxuICAgICAgICBcInRleHRcIjogXCJDYW5jZWxsYVwiLFxyXG4gICAgICAgIFwidmlzaWJsZVwiOiB0aGlzLmRlZmF1bHRMaXN0QWN0aW9ucy5kZWxldGUsXHJcbiAgICAgICAgXCJleHRyYUNsYXNzXCI6IFwiZGVsZXRlLWJ1dHRvbi1pY29uXCIsXHJcbiAgICAgICAgXCJmblwiOiAocGFuZWwsaSxldmVudCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5kZWxldGVSZWNvcmQocGFuZWwsIGV2ZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICBdXHJcbiAgICB0aGlzLmJ1dHRvbnMgPSB0aGlzLmJ1dHRvbnMuY29uY2F0KHRoaXMuZXh0ZXJuYWxCdXR0b25zKS5maWx0ZXIoeCA9PiB4LnZpc2libGUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Rm9ybUJ5SUQoaWQ6IHN0cmluZyA9IHRoaXMuZm9ybUlEKSB7XHJcbiAgICBpZiAodGhpcy5mb3JtID09IG51bGwpIHtcclxuICAgICAgY29uc3QgZHluYW1pY01vZHVsZVBhcmFtczogQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPiA9XHJcbiAgICAgICAgbmV3IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4oKTtcclxuICAgICAgZHluYW1pY01vZHVsZVBhcmFtcy5wdXNoKHtcclxuICAgICAgICBQYXJhbU5hbWU6IFwiaWRcIixcclxuICAgICAgICBQYXJhbVZhbHVlOiBpZCxcclxuICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLkdldEJ5SURFbmRQb2ludCxcclxuICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgIChyZXM6IEZvcm0pID0+IHtcclxuICAgICAgICAgIHRoaXMuZm9ybSA9IHJlcztcclxuICAgICAgICAgIHRoaXMuY29uZmlndXJlQ29sdW1ucygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKGVycikgPT4ge31cclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY29uZmlndXJlQ29sdW1ucygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBjb25maWd1cmFyZSBsZSBjb2xvbm5lIGRlbGxhIGVxcC10YWJsZS5cclxuICAgKi9cclxuICBwcml2YXRlIGNvbmZpZ3VyZUNvbHVtbnMoKSB7XHJcbiAgICAvLyB0aGlzLmNyZWF0ZUFkZGl0aW9uYWxBY3Rpb25zKCk7XHJcbiAgICAvLyB0aGlzLmNyZWF0ZUNvbHVtbnNGcm9tRm9ybUZpZWxkcygpO1xyXG4gICAgaWYgKHRoaXMucmVjb3JkcyA9PSBudWxsKXtcclxuICAgICAgdGhpcy5nZXRSZWNvcmRzQnlGb3JtSUQoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZGVidWdMb2coJ1JlY29yZHMgRXhpc3RzJywgdGhpcy5yZWNvcmRzKTtcclxuICAgICAgdGhpcy5nZW5lcmF0ZUFuc3dlcnNBcnJheSh0aGlzLnJlY29yZHMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciByZWN1cGVyYXJlIHR1dHRpIGkgcmVjb3JkIHNhbHZhdGkgcGVyIHVuYSBwYXJ0aWNvbGFyZSBGb3JtLlxyXG4gICAqIExhIGNoaWFtYXRhIHZpZW5lIGVmZmV0dHVhdGEgc29sbyBzZSDDqCBzdGF0byBjb25maWd1cmF0byBsJ2VuZFBvaW50IGRhIHVzYXJlLlxyXG4gICAqIExhIHJpc3Bvc3RhIGRlbGxhIGNoaWFtYXRhIGRldmUgZXNzZXJlIHVuIGFycmF5IGRpIG9nZ2V0dGkgZGkgdGlwbyBcIkR5blJlY29yZFwiXHJcbiAgICogYSBwYXJ0aXJlIGRhaSBxdWFsaSB2ZW5nb25vIHJpY3JlYXRpIGkgUmVjb3JkIHVzYXRpIG5lbCBjbGllbnQuXHJcbiAgICovXHJcbiAgYXN5bmMgZ2V0UmVjb3Jkc0J5Rm9ybUlEKCkge1xyXG4gICAgdmFyIGR5bmFtaWNNb2R1bGVQYXJhbXMgPSBbXHJcbiAgICAgIHtcclxuICAgICAgICBQYXJhbU5hbWU6IFwiRW50SURcIixcclxuICAgICAgICBQYXJhbVZhbHVlOiB0aGlzLmZvcm0uSUQsXHJcbiAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgIH0sXHJcbiAgICBdO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5jb25maWd1cmF0aW9ucy51c2VySUQgPT0gbnVsbCAmJlxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbiAmJlxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzICYmXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuR2V0QnlGb3JtSURFbmRQb2ludFxyXG4gICAgKSB7XHJcbiAgICAgIC8vIHNlIG5vbiBjb25vc2NvIGwndXRlbnRlXHJcbiAgICAgIGF3YWl0IHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuR2V0QnlGb3JtSURFbmRQb2ludCxcclxuICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgIChyZXM6IEFycmF5PER5blJlY29yZD4pID0+IHtcclxuICAgICAgICAgIHRoaXMuZGVidWdMb2coJ0dldEJ5Rm9ybUlERW5kUG9pbnQnLCByZXMpXHJcbiAgICAgICAgICB0aGlzLmdlbmVyYXRlQW5zd2Vyc0FycmF5KHJlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgdGhpcy5jb25maWd1cmF0aW9ucy51c2VySUQgIT0gbnVsbCAmJlxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbiAmJlxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzICYmXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuR2V0QWxsQnlFbnRBbmRVc2VySURFbmRQb2ludFxyXG4gICAgKSB7XHJcbiAgICAvLyBzZSBjb25vc2NvIGwndXRlbnRlXHJcbiAgICAgIGxldCBkeW5hbWljTW9kdWxlUGFyYW1zID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFBhcmFtTmFtZTogXCJFbnRJRFwiLFxyXG4gICAgICAgICAgUGFyYW1WYWx1ZTogdGhpcy5mb3JtLklELFxyXG4gICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBQYXJhbU5hbWU6IFwiVXNlcklEXCIsXHJcbiAgICAgICAgICBQYXJhbVZhbHVlOiB0aGlzLmNvbmZpZ3VyYXRpb25zLnVzZXJJRCxcclxuICAgICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF07XHJcblxyXG4gICAgICBhd2FpdCB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEFsbEJ5RW50QW5kVXNlcklERW5kUG9pbnQsXHJcbiAgICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgICAocmVzOiBBcnJheTxEeW5SZWNvcmQ+KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmRlYnVnTG9nKCdHZXRBbGxCeUVudEFuZFVzZXJJREVuZFBvaW50JywgcmVzKVxyXG4gICAgICAgICAgdGhpcy5nZW5lcmF0ZUFuc3dlcnNBcnJheShyZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJjb250cm9sbGFyZSBsZSBjb25maWd1cmF6aW9uaSBkZWxsJ2VuZHBvaW50XCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZUFuc3dlcnNBcnJheShyZXM6IEFycmF5PER5blJlY29yZD4pe1xyXG4gICAgdGhpcy5jb25maWd1cmF0aW9ucy52YWx1ZXMgPSBuZXcgQXJyYXk8UmVjb3JkPigpO1xyXG4gICAgdGhpcy5wYW5lbHMgPSBuZXcgQXJyYXk8UGFuZWw+KCk7XHJcbiAgICByZXMuZm9yRWFjaCgocikgPT4ge1xyXG4gICAgICB2YXIgdG1wUmVjOiBSZWNvcmQgPSBuZXcgUmVjb3JkKCk7XHJcbiAgICAgIHRtcFJlYyA9IEpTT04ucGFyc2Uoci5TZXJpYWxpemVkVmFsdWVzKTtcclxuICAgICAgdG1wUmVjLklEID0gci5JRDtcclxuICAgICAgdG1wUmVjLkVudElEID0gci5FbnRJRDtcclxuICAgICAgdG1wUmVjLlZlcnNpb24gPSByLlZlcnNpb247XHJcbiAgICAgIHRtcFJlYy51c2VySUQgPSByLnVzZXJJRDtcclxuICAgICAgdG1wUmVjLkFuc3dlckRhdGUgPSByLkFuc3dlckRhdGU7XHJcbiAgICAgIHRtcFJlYy5IVE1McmVhZGFibGVWYWx1ZXMgPSByLkhUTUxyZWFkYWJsZVZhbHVlcztcclxuICAgICAgdGhpcy5jb25maWd1cmF0aW9ucy52YWx1ZXMucHVzaCh0bXBSZWMpO1xyXG4gICAgICB0aGlzLnBhbmVscy5wdXNoKHtyZWNvcmQ6IHRtcFJlYywgaXNPcGVuOiBmYWxzZSwgcGFnZVN0YXRlOiBudWxsfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICBzZXRUaW1lb3V0KChfKSA9PiB7XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSwgMCk7IC8vIHJlZnJlc2ggdWlcclxuICB9XHJcblxyXG4gIHRvZ2dsZVBhbmVsKHBhbmVsOiBhbnksIHJlY29yZDogUmVjb3JkKSB7XHJcbiAgICB0aGlzLmRlYnVnTG9nKCd0b2dnbGVQYW5lbCcpXHJcbiAgICBpZih0aGlzLmRlZmF1bHRMaXN0Vmlld0Z1bmN0aW9uICE9IG51bGwpe1xyXG4gICAgICB0aGlzLmRlYnVnTG9nKCdkZWZhdWx0TGlzdFZpZXdGdW5jdGlvbicsIHJlY29yZClcclxuICAgICAgdGhpcy5kZWZhdWx0TGlzdFZpZXdGdW5jdGlvbihyZWNvcmQpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoIXBhbmVsLmlzT3Blbikge1xyXG4gICAgICAgIHBhbmVsLmlzT3BlbiA9IHRydWU7XHJcbiAgICAgICAgcGFuZWwucGFnZVN0YXRlID0gJ3Zpc3VhbGl6emFDb250ZW51dG8nO1xyXG4gICAgICAvLyBTaW11bGEgdW4gY2FsY29sbyBhc2luY3Jvbm9cclxuICAgICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIC8vIH0sIDEwMDApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcGFuZWwuaXNPcGVuID0gZmFsc2U7XHJcbiAgICAgIHBhbmVsLnBhZ2VTdGF0ZT0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgYWdnaXVuZ2VyZSBuZWxsYSBjb2xvbm5hIFwiYWN0aW9uXCIgZGVsbGEgZXFwLXRhYmxlIGxlIGF6aW9uaSBzdWkgcmVjb3JkXHJcbiAgICogZGVmaW5pdGUgZGFsbCd1dGVudGUgYWxsJ2ludGVybm8gZGVsbGEgRm9ybS5cclxuICAgKi9cclxuICAvLyBwcml2YXRlIGNyZWF0ZUFkZGl0aW9uYWxBY3Rpb25zKCkge1xyXG4gIC8vICAgaWYgKHRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmQgJiYgdGhpcy5mb3JtLkFjdGlvbnNPblJlY29yZC5sZW5ndGggPiAwKSB7XHJcbiAgLy8gICAgIHRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmQuc29ydCgoYSwgYikgPT5cclxuICAvLyAgICAgICBhLk9yZGluYWxQb3NpdGlvbiA+IGIuT3JkaW5hbFBvc2l0aW9uXHJcbiAgLy8gICAgICAgICA/IDFcclxuICAvLyAgICAgICAgIDogYi5PcmRpbmFsUG9zaXRpb24gPiBhLk9yZGluYWxQb3NpdGlvblxyXG4gIC8vICAgICAgICAgPyAtMVxyXG4gIC8vICAgICAgICAgOiAwXHJcbiAgLy8gICAgICkuZm9yRWFjaCgoYWN0aW9uKSA9PiB7XHJcbiAgLy8gICAgICAgdGhpcy5jb2x1bW5zXHJcbiAgLy8gICAgICAgICAuZmluZCgoYykgPT4gYy5rZXkgPT09IFwiYWN0aW9uXCIpXHJcbiAgLy8gICAgICAgICAuYWN0aW9ucy5wdXNoKHtcclxuICAvLyAgICAgICAgICAgbmFtZTogYWN0aW9uLk5hbWUsXHJcbiAgLy8gICAgICAgICAgIGljb246IGFjdGlvbi5JY29uLFxyXG4gIC8vICAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+IHtcclxuICAvLyAgICAgICAgICAgICBjb25zdCByZWMgPSBlbGVtZW50O1xyXG4gIC8vICAgICAgICAgICAgIGNvbnN0IGN0eCA9IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLmNvbnRleHQ7XHJcbiAgLy8gICAgICAgICAgICAgZXZhbChhY3Rpb24uQWN0aW9uKTtcclxuICAvLyAgICAgICAgICAgICAvLyBUT0RPOiBzYWx2YXJlIGxlIG1vZGlmaWNoZVxyXG4gIC8vICAgICAgICAgICB9LFxyXG4gIC8vICAgICAgICAgfSk7XHJcbiAgLy8gICAgIH0pO1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGNoZSBzY2F0ZW5hIGwnZXZlbnRvIGRpIE91dHB1dCBwZXIgbW9zdHJhcmUgbyBtb2RpZmljYXJlIGlsIHJlY29yZFxyXG4gICAqIHNlbGV6aW9uYXRvIHN1bGxhIGVxcC10YWJsZS5cclxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZCBkYSB2aXN1YWxpenphcmUgbyBtb2RpZmljYXJlIHNlbGV6aW9uYXRvIHN1bGxhIGVxcC10YWJsZS5cclxuICAgKiBAcGFyYW0gb25seVZpZXcgU2UgVFJVRSB2aWVuZSBtb3N0cmF0byBpbCBjb21wb25lbnRlIGFkZC1mb3JtLXJlY29yZCBpbiBzb2xhIGxldHR1cmEuXHJcbiAgICovXHJcbiAgdmlld09yRWRpdFJlY29yZChyZWNvcmQ6IFJlY29yZCwgb25seVZpZXc6IGJvb2xlYW4sIGkpIHtcclxuICAgIHRoaXMuZGVidWdMb2coJ3ZpZXdPckVkaXRSZWNvcmQnKVxyXG4gICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgIHRoaXMub25BZGRWaWV3RWRpdFJlY29yZDIoeyByZWNvcmQsIG9ubHlWaWV3IH0pO1xyXG4gICAgdGhpcy5wYW5lbE9wZW5TdGF0ZS5tYXAoKCkgPT4gZmFsc2UpO1xyXG4gICAgdGhpcy5wYW5lbE9wZW5TdGF0ZVtpXSA9IHRoaXMucGFuZWxPcGVuU3RhdGVbaV0gPT0gdHJ1ZSA/IGZhbHNlIDogdHJ1ZTtcclxuICAgIC8vIHRoaXMub25BZGRWaWV3RWRpdFJlY29yZC5lbWl0KHsgcmVjb3JkLCBvbmx5VmlldyB9KTtcclxuICB9ICBcclxuICB2aWV3UmVjb3JkKHBhbmVsOiBQYW5lbCwgb25seVZpZXc6IGJvb2xlYW4sIGksIGV2OiBFdmVudCkgeyAgICBcclxuICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIHRoaXMuZGVidWdMb2coJ3ZpZXdSZWNvcmQnKVxyXG4gICAgbGV0IHJlY29yZCA9IHBhbmVsLnJlY29yZFxyXG4gICAgdGhpcy52aXN1YWxpenphQ29udGVudXRvID0gdHJ1ZTtcclxuICAgIHRoaXMubW9kaWZpY2FDb250ZW51dG8gPSBmYWxzZTtcclxuICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAvLyB0aGlzLm9uQWRkVmlld0VkaXRSZWNvcmQyKHsgcmVjb3JkLCBvbmx5VmlldyB9KTtcclxuICAgIGlmIChwYW5lbC5wYWdlU3RhdGUgID09ICd2aXN1YWxpenphQ29udGVudXRvJykge1xyXG4gICAgICBwYW5lbC5pc09wZW4gPSBmYWxzZTtcclxuICAgICAgcGFuZWwucGFnZVN0YXRlPSBudWxsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcGFuZWwuaXNPcGVuID0gdHJ1ZTtcclxuICAgICAgcGFuZWwucGFnZVN0YXRlID0gJ3Zpc3VhbGl6emFDb250ZW51dG8nO1xyXG4gICAgfVxyXG4gICAgdGhpcy5wYW5lbE9wZW5TdGF0ZS5tYXAoKCkgPT4gZmFsc2UpO1xyXG4gICAgdGhpcy5wYW5lbE9wZW5TdGF0ZVtpXSA9IHRoaXMucGFuZWxPcGVuU3RhdGVbaV0gPT0gdHJ1ZSA/IGZhbHNlIDogdHJ1ZTtcclxuICAgIC8vIHRoaXMub25BZGRWaWV3RWRpdFJlY29yZC5lbWl0KHsgcmVjb3JkLCBvbmx5VmlldyB9KTtcclxuICB9XHJcbiAgRWRpdFJlY29yZChwYW5lbDogUGFuZWwsIG9ubHlWaWV3OiBib29sZWFuLCBpLCBldjogRXZlbnQpIHsgICAgXHJcbiAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB0aGlzLmRlYnVnTG9nKCdFZGl0UmVjb3JkJylcclxuXHJcbiAgICBsZXQgcmVjb3JkID0gcGFuZWwucmVjb3JkXHJcbiAgICB0aGlzLnZpc3VhbGl6emFDb250ZW51dG8gPSBmYWxzZTtcclxuICAgIHRoaXMubW9kaWZpY2FDb250ZW51dG8gPSB0cnVlO1xyXG4gICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgIC8vIHRoaXMub25BZGRWaWV3RWRpdFJlY29yZDIoeyByZWNvcmQsIG9ubHlWaWV3IH0pO1xyXG4gICAgaWYgKHBhbmVsLnBhZ2VTdGF0ZSAgPT0gJ21vZGlmaWNhQ29udGVudXRvJykge1xyXG4gICAgICBwYW5lbC5pc09wZW4gPSBmYWxzZTtcclxuICAgICAgcGFuZWwucGFnZVN0YXRlPSBudWxsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcGFuZWwuaXNPcGVuID0gdHJ1ZTtcclxuICAgICAgcGFuZWwucGFnZVN0YXRlID0gJ21vZGlmaWNhQ29udGVudXRvJztcclxuICAgIH1cclxuICAgIHRoaXMucGFuZWxPcGVuU3RhdGUubWFwKCgpID0+IGZhbHNlKTtcclxuICAgIHRoaXMucGFuZWxPcGVuU3RhdGVbaV0gPSB0aGlzLnBhbmVsT3BlblN0YXRlW2ldID09IHRydWUgPyBmYWxzZSA6IHRydWU7XHJcbiAgICAvLyB0aGlzLm9uQWRkVmlld0VkaXRSZWNvcmQuZW1pdCh7IHJlY29yZCwgb25seVZpZXcgfSk7XHJcbiAgfVxyXG5cclxuICBleHRlcm5hbENhbGxiYWNrKGV2OiBFdmVudCwgY2FsbGJhY2s6IEZ1bmN0aW9uLCByZWNvcmQ6IGFueSl7XHJcbiAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICBjYWxsYmFjayhyZWNvcmQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBkdXBsaWNhcmUgdW4gcmVjb3JkIGRlbGxhIGZvcm0uXHJcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmQgZGEgZHVwbGljYXJlLlxyXG4gICAqL1xyXG4gIGR1cGxpY2F0ZVJlY29yZChyZWNvcmQ6IFJlY29yZCwgZXY6IEV2ZW50KSB7ICAgIFxyXG4gICAgZXYucHJldmVudERlZmF1bHQoKTtcclxuICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgdGhpcy5vbkR1cGxpY2F0ZVJlY29yZC5lbWl0KHJlY29yZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGVsaW1pbmFyZSB1biByZWNvcmQgZGFsbGEgbGlzdGEuXHJcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmQgZGEgZWxpbWluYXJlIHNlbGV6aW9uYXRvIHN1bGxhIGVxcC10YWJsZS5cclxuICAgKi9cclxuICBkZWxldGVSZWNvcmQocmVjb3JkOiBSZWNvcmQsIGV2OiBFdmVudCkgeyAgICBcclxuICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIHRoaXMub25EZWxldGVSZWNvcmQuZW1pdChyZWNvcmQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBjcmVhcmUgbGEgY29uZmlndXJhemlvbmUgZGVsbGUgY29sb25uZSBwZXIgbGEgZXFwLXRhYmxlLlxyXG4gICAqIEluZGl2aWR1YSBpIEJhc2VGaWVsZCBkYSBtb3N0cmFyZSBlIGxpIHVzYSBwZXIgY3JlYXJlIGxlIENvbmZpZ0NvbHVtbi5cclxuICAgKiBMZSBjb2xvbm5lIHZlbmdvbm8gY3JlYXRlIHBlciBpIEJhc2VGaWVsZCBjb24gaWwgZmxhZyBJbkxpc3RWaWV3IGEgVFJVRVxyXG4gICAqIG9wcHVyZSwgbmVsIGNhc28gbm9uIHNpYW5vIHN0YXRpIHNwZWNpZmljYXRpIGkgY2FtcGkgZGEgdmlzdWFsaXp6YXJlLFxyXG4gICAqIHNlbGV6aW9uYSBpIHByaW1pIDYuXHJcbiAgICovXHJcbiAgLy8gcHJpdmF0ZSBjcmVhdGVDb2x1bW5zRnJvbUZvcm1GaWVsZHMoKSB7XHJcbiAgLy8gICB2YXIgZmllbGRzRm9yQ29sdW1uczogQXJyYXk8QmFzZUZpZWxkPjtcclxuICAvLyAgIGlmICh0aGlzLmZvcm0uRmllbGRzLmZpbmQoKGYpID0+IGYuSW5MaXN0VmlldykpIHtcclxuICAvLyAgICAgZmllbGRzRm9yQ29sdW1ucyA9IHRoaXMuZm9ybS5GaWVsZHMuZmlsdGVyKChmKSA9PiBmLkluTGlzdFZpZXcpO1xyXG4gIC8vICAgfSBlbHNlIHtcclxuICAvLyAgICAgZmllbGRzRm9yQ29sdW1ucyA9IHRoaXMuZm9ybS5GaWVsZHMuZmlsdGVyKChmKSA9PiBmLk9yZGluYWxQb3NpdGlvbiA8IDYpO1xyXG4gIC8vICAgfVxyXG4gIC8vICAgZmllbGRzRm9yQ29sdW1uc1xyXG4gIC8vICAgICAuc29ydCgoYSwgYikgPT5cclxuICAvLyAgICAgICBhLk9yZGluYWxQb3NpdGlvbiA+IGIuT3JkaW5hbFBvc2l0aW9uXHJcbiAgLy8gICAgICAgICA/IDFcclxuICAvLyAgICAgICAgIDogYi5PcmRpbmFsUG9zaXRpb24gPiBhLk9yZGluYWxQb3NpdGlvblxyXG4gIC8vICAgICAgICAgPyAtMVxyXG4gIC8vICAgICAgICAgOiAwXHJcbiAgLy8gICAgIClcclxuICAvLyAgICAgLmZvckVhY2goKGZpZWxkKSA9PiB7XHJcbiAgLy8gICAgICAgdGhpcy5jb2x1bW5zLnB1c2godGhpcy5jcmVhdGVGaWVsZENvbHVtbihmaWVsZCkpO1xyXG4gIC8vICAgICB9KTtcclxuICAvLyB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgY3JlYXJlIGwnb2dnZXR0byBDb25maWd1cmVDb2x1bW4gY2hlIHJhcHByZXNlbnRhIGlsIEJhc2VGaWVsZCBwYXNzYXRvIGluIGlucHV0LlxyXG4gICAqIEBwYXJhbSBmaWVsZCBCYXNlRmllbGQgcGVyIGN1aSBjcmVhcmUgbGEgY29sb25uYSBuZWxsYSBlcXAtdGFibGVcclxuICAgKiBAcmV0dXJucyBSZXN0aXR1aXNjZSB1bmEgQ29uZmlnQ29sdW1uIHBlciBsYSBlcXAtdGFibGVcclxuICAgKi9cclxuICAvLyBwcml2YXRlIGNyZWF0ZUZpZWxkQ29sdW1uKGZpZWxkOiBCYXNlRmllbGQpOiBDb25maWdDb2x1bW4ge1xyXG4gIC8vICAgdmFyIGNvbHVtbjogQ29uZmlnQ29sdW1uID0geyBrZXk6IGZpZWxkLk5hbWUsIGRpc3BsYXk6IGZpZWxkLkxhYmVsIH07XHJcbiAgLy8gICBzd2l0Y2ggKGZpZWxkLkZpZWxkVHlwZSkge1xyXG4gIC8vICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJCb29sZWFub1wiXTpcclxuICAvLyAgICAgICBjb2x1bW4udHlwZSA9IFR5cGVDb2x1bW4uQm9vbGVhbjtcclxuICAvLyAgICAgICBjb2x1bW4uYm9vbGVhblZhbHVlcyA9IHtcclxuICAvLyAgICAgICAgIGZhbHNlOiAnPGkgY2xhc3M9XCJmYSBmYS10aW1lcyBlcnJvci1jb2xvclwiPjwvaT4nLFxyXG4gIC8vICAgICAgICAgdHJ1ZTogJzxpIGNsYXNzPVwiZmEgZmEtY2hlY2sgc3VjY2Vzcy1jb2xvclwiPjwvaT4nLFxyXG4gIC8vICAgICAgIH07XHJcbiAgLy8gICAgICAgY29sdW1uLnN0eWxlcyA9IHtcclxuICAvLyAgICAgICAgIGZsZXg6IFwiMCAwIDclXCIsXHJcbiAgLy8gICAgICAgICBjZWxsQWxpZ25tZW50OiBDZWxsQWxpZ25tZW50RW51bS5DRU5URVIsXHJcbiAgLy8gICAgICAgfTtcclxuICAvLyAgICAgICBicmVhaztcclxuICAvLyAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiRGF0YSBlL28gb3JhXCJdOlxyXG4gIC8vICAgICAgIGlmIChcclxuICAvLyAgICAgICAgIChmaWVsZCBhcyBEYXRlRmllbGQpLklzT25seURhdGUgIT0gRGF0ZVRpbWVUeXBlRW51bVtcIlNvbG8gb3JhcmlvXCJdXHJcbiAgLy8gICAgICAgKSB7XHJcbiAgLy8gICAgICAgICBjb2x1bW4udHlwZSA9IFR5cGVDb2x1bW4uRGF0ZTtcclxuICAvLyAgICAgICAgIGlmIChcclxuICAvLyAgICAgICAgICAgKGZpZWxkIGFzIERhdGVGaWVsZCkuSXNPbmx5RGF0ZSA9PSBEYXRlVGltZVR5cGVFbnVtW1wiRGF0YSBlIG9yYVwiXVxyXG4gIC8vICAgICAgICAgKSB7XHJcbiAgLy8gICAgICAgICAgIGNvbHVtbi5mb3JtYXQgPSBcImRkL01NL3l5eXkgSEg6bW1cIjtcclxuICAvLyAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgLy8gICAgICAgICAgIChmaWVsZCBhcyBEYXRlRmllbGQpLklzT25seURhdGUgPT0gRGF0ZVRpbWVUeXBlRW51bVtcIlNvbG8gZGF0YVwiXVxyXG4gIC8vICAgICAgICAgKSB7XHJcbiAgLy8gICAgICAgICAgIGNvbHVtbi5mb3JtYXQgPSAoZmllbGQgYXMgRGF0ZUZpZWxkKS5EYXRlRm9ybWF0XHJcbiAgLy8gICAgICAgICAgICAgPyAoZmllbGQgYXMgRGF0ZUZpZWxkKS5EYXRlRm9ybWF0LnJlcGxhY2UoXCJERFwiLCBcImRkXCIpXHJcbiAgLy8gICAgICAgICAgICAgOiBcImRkL01NL3l5eXlcIjtcclxuICAvLyAgICAgICAgIH1cclxuICAvLyAgICAgICB9XHJcbiAgLy8gICAgICAgYnJlYWs7XHJcbiAgLy8gICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkNhbXBvIG51bWVyaWNvXCJdOlxyXG4gIC8vICAgICAgIGlmICgoZmllbGQgYXMgTnVtZXJpY0ZpZWxkKS5DdXJyZW5jeVN5bWJvbCkge1xyXG4gIC8vICAgICAgICAgY29sdW1uLm51bWJlclBpcGUgPSBOdW1iZXJDb2x1bW5QaXBlLkNVUlJFTkNZO1xyXG4gIC8vICAgICAgICAgY29sdW1uLmN1cnJlbmN5UGlwZUNvZGUgPSAoZmllbGQgYXMgTnVtZXJpY0ZpZWxkKS5DdXJyZW5jeVN5bWJvbDtcclxuICAvLyAgICAgICB9IGVsc2UgaWYgKCEoZmllbGQgYXMgTnVtZXJpY0ZpZWxkKS5Jc0ludGVnZXIpIHtcclxuICAvLyAgICAgICAgIGNvbHVtbi5udW1iZXJQaXBlID0gTnVtYmVyQ29sdW1uUGlwZS5ERUNJTUFMO1xyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgICBicmVhaztcclxuICAvLyAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiQWxsZWdhdG9cIl06XHJcbiAgLy8gICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkltbWFnaW5lXCJdOlxyXG4gIC8vICAgICAgIGNvbHVtbi52YWx1ZSA9IChlbGVtZW50OiBSZWNvcmQpID0+IHtcclxuICAvLyAgICAgICAgIGlmIChcclxuICAvLyAgICAgICAgICAgKGZpZWxkIGFzIEF0dGFjaG1lbnRGaWVsZCkuSXNNdWx0aUF0dGFjaCB8fFxyXG4gIC8vICAgICAgICAgICAoKGZpZWxkIGFzIEltYWdlRmllbGQpLkF0dGFjaERlZmluaXRpb24gJiZcclxuICAvLyAgICAgICAgICAgICAoZmllbGQgYXMgSW1hZ2VGaWVsZCkuQXR0YWNoRGVmaW5pdGlvbi5Jc011bHRpQXR0YWNoKVxyXG4gIC8vICAgICAgICAgKSB7XHJcbiAgLy8gICAgICAgICAgIHJldHVybiBlbGVtZW50W2ZpZWxkLk5hbWVdICE9IG51bGwgJiYgZWxlbWVudFtmaWVsZC5OYW1lXS5sZW5ndGggPiAwXHJcbiAgLy8gICAgICAgICAgICAgPyAoZWxlbWVudFtmaWVsZC5OYW1lXSBhcyBBcnJheTxJQXR0YWNobWVudERUTz4pXHJcbiAgLy8gICAgICAgICAgICAgICAgIC5tYXAoKGEpID0+IGEuRmlsZU5hbWUpXHJcbiAgLy8gICAgICAgICAgICAgICAgIC5qb2luKFwiLCBcIilcclxuICAvLyAgICAgICAgICAgICA6IG51bGw7XHJcbiAgLy8gICAgICAgICB9IGVsc2Uge1xyXG4gIC8vICAgICAgICAgICByZXR1cm4gZWxlbWVudFtmaWVsZC5OYW1lXSAhPSBudWxsICYmIGVsZW1lbnRbZmllbGQuTmFtZV0ubGVuZ3RoID4gMFxyXG4gIC8vICAgICAgICAgICAgID8gKGVsZW1lbnRbZmllbGQuTmFtZV0gYXMgQXJyYXk8SUF0dGFjaG1lbnREVE8+KVswXS5GaWxlTmFtZVxyXG4gIC8vICAgICAgICAgICAgIDogbnVsbDtcclxuICAvLyAgICAgICAgIH1cclxuICAvLyAgICAgICB9O1xyXG4gIC8vICAgICAgIGNvbHVtbi5pc1NvcnRhYmxlID0gZmFsc2U7XHJcbiAgLy8gICAgICAgY29sdW1uLmlzU2VhcmNoYWJsZSA9IGZhbHNlO1xyXG4gIC8vICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJFbGVuY28gZ2VuZXJpY29cIl06XHJcbiAgLy8gICAgICAgY29sdW1uLnZhbHVlID0gKGVsZW1lbnQ6IFJlY29yZCkgPT4ge1xyXG4gIC8vICAgICAgICAgaWYgKChmaWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuSXNNdWx0aUNob2ljaGUpIHtcclxuICAvLyAgICAgICAgICAgaWYgKCFlbGVtZW50W2ZpZWxkLk5hbWVdIHx8IGVsZW1lbnRbZmllbGQuTmFtZV0ubGVuZ3RoID09IDApIHtcclxuICAvLyAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAvLyAgICAgICAgICAgfSBlbHNlIHtcclxuICAvLyAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoKGZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzKVxyXG4gIC8vICAgICAgICAgICAgICAgLmZpbHRlcigoaykgPT5cclxuICAvLyAgICAgICAgICAgICAgICAgZWxlbWVudFtmaWVsZC5OYW1lXS5pbmNsdWRlcyhcclxuICAvLyAgICAgICAgICAgICAgICAgICAoZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLlZhbHVlUGFpcnNba11cclxuICAvLyAgICAgICAgICAgICAgICAgKVxyXG4gIC8vICAgICAgICAgICAgICAgKVxyXG4gIC8vICAgICAgICAgICAgICAgLmpvaW4oXCIsIFwiKTtcclxuICAvLyAgICAgICAgICAgfVxyXG4gIC8vICAgICAgICAgfSBlbHNlIHtcclxuICAvLyAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKChmaWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVQYWlycykuZmluZChcclxuICAvLyAgICAgICAgICAgICAoaykgPT5cclxuICAvLyAgICAgICAgICAgICAgIChmaWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVQYWlyc1trXSA9PSBlbGVtZW50W2ZpZWxkLk5hbWVdXHJcbiAgLy8gICAgICAgICAgICk7XHJcbiAgLy8gICAgICAgICB9XHJcbiAgLy8gICAgICAgfTtcclxuICAvLyAgICAgICBjb2x1bW4uaXNTb3J0YWJsZSA9IGZhbHNlO1xyXG4gIC8vICAgICAgIGNvbHVtbi5pc1NlYXJjaGFibGUgPSBmYWxzZTtcclxuICAvLyAgICAgICBicmVhaztcclxuICAvLyAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiTG9va3VwXCJdOlxyXG4gIC8vICAgICAgIC8vIFRPRE9cclxuICAvLyAgICAgICBicmVhaztcclxuICAvLyAgIH1cclxuICAvLyAgIHJldHVybiBjb2x1bW47XHJcbiAgLy8gfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHJpY2FyaWNhcmUgaSBkYXRpIGRlbGxhIGVxcC10YWJsZS5cclxuICAgKi9cclxuICBwcml2YXRlIHJlbG9hZFRhYmxlcygpIHtcclxuICAgIGlmICh0aGlzLnRhYmxlUmVjb3Jkcykge1xyXG4gICAgICB0aGlzLnRhYmxlUmVjb3Jkcy5yZWxvYWREYXRhdGFibGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgc2FsdmFyZSBpIGRhdGkgaW5zZXJpdGkgZGFsbCd1dGVudGUgdW5hIHZvbHRhIGNvbmNsdXNhIGxhIGNvbXBpbGF6aW9uZSBkZWxsYSBmb3JtLlxyXG4gICAqL1xyXG4gIHNhdmVPckV4aXRGb3JtKHJlY29yZDogUmVjb3JkKSB7XHJcbiAgICB0aGlzLmRlYnVnTG9nKCdsaXN0LXZpZXctZm9ybS1yZWNvcmQgc2F2ZScsIHJlY29yZClcclxuICAgIHRoaXMuc2F2ZVJlY29yZEV2ZW50LmVtaXQocmVjb3JkKTtcclxuICB9XHJcbiAgb25BZnRlclNhdmVSZWNvcmQoZXZlbnQpIHtcclxuICAgIHRoaXMuZGVidWdMb2coJ2xpc3Qtdmlldy1mb3JtLXJlY29yZCBhZnRlcnNhdmUnLCBldmVudClcclxuICAgIHRoaXMuc2F2ZVJlY29yZEV2ZW50LmVtaXQoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGludm9jYXRvIHF1YW5kbyBzaSB2dW9sZSBhZ2dpdW5nZXJlLCB2aXN1YWxpenphcmUgbyBtb2RpZmljYXJlIHVuIHJlY29yZC5cclxuICAgKiBTZSBsJ2V2ZW50byDDqCBudWxsIHZ1b2wgZGlyZSBjaGUgc3RpYW1vIGFnZ2l1bmdlbmRvIHVuIG51b3ZvIHJlY29yZCBhbHRyaW1lbnRpIHNpYW1vIGluIG1vZGlmaWNhXHJcbiAgICogbyB2aXN1YWxpenphemlvbmUuIEluIHF1ZXN0aSB1bHRpbWkgZHVlIGNhc2ksIHNlIMOoIHN0YXRvIGNvbmZpZ3VyYXRvIHVuIGVuZHBvaW50IHBlciBpbCByZWN1cGVyb1xyXG4gICAqIGRlbCByZWNvcmQgY29tcGxldG8gYWxsb3JhIHZpZW5lIGVmZmV0dHVhdGEgdW5hIGNoaWFtYXRhIGFsIHNlcnZlciwgYWx0cmltZW50aSB2aWVuZSB1c2F0byBsJ29nZ2V0dG8gc2VsZXppb25hdG8uXHJcbiAgICogQHBhcmFtIGV2ZW50IE9nZ2V0dG8gY29uIGR1ZSBwcm9wcmlldMOgOlxyXG4gICAqIFwicmVjb3JkXCIgPSBvZ2dldHRvIGRhIG1vZGlmaWNhcmUvdmlzdWFsaXp6YXJlLFxyXG4gICAqIFwib25seVZpZXdcIiA9IGJvb2xlYW5vIChzZSBUUlVFIHNpYW1vIGluIHZpc3VhbGl6emF6aW9uZSBhbHRyaW1lbnRpIGluIG1vZGlmaWNhKVxyXG4gICAqL1xyXG4gIG9uQWRkVmlld0VkaXRSZWNvcmQyKGV2ZW50OiB7IHJlY29yZDogUmVjb3JkOyBvbmx5VmlldzogYm9vbGVhbiB9KSB7XHJcbiAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgdGhpcy5zZWxlY3RlZFJlY29yZCA9IG51bGw7XHJcblxyXG4gICAgdGhpcy5vbmx5VmlldyA9IGV2ZW50Lm9ubHlWaWV3O1xyXG5cclxuICAgIHRoaXMub3V0Q29tcGlsZUNvbmZpZ3VyYXRpb25zLnNob3dCYWNrQnV0dG9uID0gZmFsc2U7XHJcbiAgICB0aGlzLm91dENvbXBpbGVDb25maWd1cmF0aW9ucy5zaG93U2F2ZUJ1dHRvbiA9ICFldmVudC5vbmx5VmlldztcclxuICAgIHRoaXMub3V0Q29tcGlsZUNvbmZpZ3VyYXRpb25zLnNob3dUaXRsZSA9IGZhbHNlO1xyXG5cclxuICAgIGlmIChldmVudCAhPSBudWxsKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbiAmJlxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMgJiZcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEJ5SURFbmRQb2ludFxyXG4gICAgICApIHtcclxuICAgICAgICAvLyBwcmVwYXJvIGxhIHZlcnNpb25lIGNvcnJldHRhIGRlbCBmb3JtXHJcbiAgICAgICAgdmFyIGR5bmFtaWNNb2R1bGVQYXJhbXMgPSBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIFBhcmFtTmFtZTogXCJFbnRJRFwiLFxyXG4gICAgICAgICAgICBQYXJhbVZhbHVlOiBldmVudC5yZWNvcmQuRW50SUQsXHJcbiAgICAgICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgUGFyYW1OYW1lOiBcIlZlcnNpb25cIixcclxuICAgICAgICAgICAgUGFyYW1WYWx1ZTogZXZlbnQucmVjb3JkLlZlcnNpb24sXHJcbiAgICAgICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICBdO1xyXG4gICAgICAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuR2V0QnlJREFuZFZlcnNpb25FbmRQb2ludCxcclxuICAgICAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMsXHJcbiAgICAgICAgICAocmVzOiBGb3JtKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybSA9IHJlcztcclxuXHJcbiAgICAgICAgICAgIC8vIHByZXBhcm8gaSBkYXRpIGRlbCByZWNvcmRcclxuICAgICAgICAgICAgdmFyIGR5bmFtaWNSZWNvcmRQYXJhbXMgPSBbXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgUGFyYW1OYW1lOiBcImlkXCIsXHJcbiAgICAgICAgICAgICAgICBQYXJhbVZhbHVlOiBldmVudC5yZWNvcmQuSUQsXHJcbiAgICAgICAgICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEJ5SURFbmRQb2ludCxcclxuICAgICAgICAgICAgICBkeW5hbWljUmVjb3JkUGFyYW1zLFxyXG4gICAgICAgICAgICAgIChyZXM6IER5blJlY29yZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZCA9IEpTT04ucGFyc2UocmVzLlNlcmlhbGl6ZWRWYWx1ZXMpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZC5JRCA9IHJlcy5JRDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmQuRW50SUQgPSByZXMuRW50SUQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmVjb3JkLnVzZXJJRCA9IHJlcy51c2VySUQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmVjb3JkLlZlcnNpb24gPSByZXMuVmVyc2lvbjtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZXZlbnQucmVjb3JkKSk7XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBkeW5hbWljTW9kdWxlUGFyYW1zOiBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+ID1cclxuICAgICAgICBuZXcgQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPigpO1xyXG4gICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLnB1c2goe1xyXG4gICAgICAgIFBhcmFtTmFtZTogXCJpZFwiLFxyXG4gICAgICAgIFBhcmFtVmFsdWU6IHRoaXMuZm9ybUlELFxyXG4gICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuR2V0QnlJREVuZFBvaW50LFxyXG4gICAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMsXHJcbiAgICAgICAgKHJlczogRm9ybSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5mb3JtID0gcmVzO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZCA9IG51bGw7XHJcbiAgICAgICAgICB0aGlzLm9ubHlWaWV3ID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAoZXJyKSA9PiB7fVxyXG4gICAgICApO1xyXG5cclxuICAgICAgLy8gdGhpcy5zZWxlY3RlZFJlY29yZCA9IG51bGw7XHJcbiAgICAgIC8vIHRoaXMub25seVZpZXcgPSBmYWxzZTtcclxuICAgICAgLy8gdGhpcy52aWV3TW9kZSA9IER5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0uQ09NUElMRTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIFxyXG4gIG9wZW5BZGRQb3B1cCgpe1xyXG4gICAgY29uc3QgZHluYW1pY01vZHVsZVBhcmFtczogQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPiA9XHJcbiAgICBuZXcgQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPigpO1xyXG4gIGR5bmFtaWNNb2R1bGVQYXJhbXMucHVzaCh7XHJcbiAgICBQYXJhbU5hbWU6IFwiaWRcIixcclxuICAgIFBhcmFtVmFsdWU6IHRoaXMuZm9ybUlELFxyXG4gICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgfSk7XHJcbiAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3Jtcy5HZXRCeUlERW5kUG9pbnQsXHJcbiAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgKHJlczogRm9ybSkgPT4ge1xyXG4gICAgICB0aGlzLmZvcm0gPSByZXM7XHJcbiAgICAgIHRoaXMucG9wdXBMb2FkZXIgPSB0cnVlO1xyXG5cclxuICAgICAgdGhpcy5vcGVuQWRkRGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLm9wZW5BZGREaWFsb2csIHtcclxuICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgICAgbWluV2lkdGg6IFwiMzJyZW1cIixcclxuICAgICAgICBtaW5IZWlnaHQ6IFwiMTAwcHhcIixcclxuICAgICAgfSk7XHJcblxyXG4gICAgfSxcclxuICAgIChlcnIpID0+IHtcclxuICAgICAgY29uc29sZS5sb2coXCJlcnJvciBSdW5FbmRQb2ludENhbGxcIixlcnIpO1xyXG4gICAgfVxyXG4gICk7XHJcbiAgfVxyXG5cclxuICBvbkFkZFNhdmVSZWNvcmQocmVjb3JkOiBSZWNvcmQpe1xyXG4gIGlmICh0aGlzLm9wZW5BZGREaWFsb2dSZWYgIT0gbnVsbCl7IHRoaXMub3BlbkFkZERpYWxvZ1JlZi5jbG9zZSgpOyB9XHJcbiAgICB0aGlzLmdldFJlY29yZHNCeUZvcm1JRCgpO1xyXG4gICAgdGhpcy5zYXZlUmVjb3JkRXZlbnQuZW1pdChyZWNvcmQpO1xyXG4gIH1cclxuXHJcbiAgb25BZGRBZnRlclNhdmVSZWNvcmQocmVjb3JkOiBSZWNvcmQpe1xyXG4gIGlmICh0aGlzLm9wZW5BZGREaWFsb2dSZWYgIT0gbnVsbCl7IHRoaXMub3BlbkFkZERpYWxvZ1JlZi5jbG9zZSgpOyB9XHJcbiAgICB0aGlzLmdldFJlY29yZHNCeUZvcm1JRCgpO1xyXG4gICAgdGhpcy5zYXZlUmVjb3JkRXZlbnQuZW1pdChyZWNvcmQpO1xyXG4gIH1cclxuXHJcbiAgXHJcbn1cclxuXHJcbiIsIjxtYXQtY2FyZCBjbGFzcz1cImxpc3Qtdmlldy1mb3JtLXJlY29yZFwiPlxyXG4gIDxtYXQtY2FyZC1oZWFkZXIgKm5nSWY9XCJzaG93VGl0bGUgfHwgZGVmYXVsdExpc3RBY3Rpb25zLmFkZFwiIGNsYXNzPVwiYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XHJcbiAgICA8bWF0LWNhcmQtdGl0bGUgKm5nSWY9XCJzaG93VGl0bGVcIj5FbGVuY28ge3sgZm9ybS5OYW1lIH19IDwvbWF0LWNhcmQtdGl0bGU+XHJcbiAgICA8bWF0LWNhcmQtYWN0aW9ucyAqbmdJZj1cImRlZmF1bHRMaXN0QWN0aW9ucy5hZGRcIj5cclxuICAgICAgPGJ1dHRvbiBcclxuICAgICAgICAqbmdJZj1cImRlZmF1bHRMaXN0QWN0aW9ucy5hZGRcIlxyXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgXHJcbiAgICAgICAgbWF0LXJhaXNlZC1idXR0b24gXHJcbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCIgXHJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9wZW5BZGRQb3B1cCgpXCI+XHJcbiAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XHJcbiAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweFwiPkFnZ2l1bmdpPC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvbWF0LWNhcmQtYWN0aW9ucz5cclxuICA8L21hdC1jYXJkLWhlYWRlcj5cclxuXHJcbiAgXHJcbiAgPG1hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgICA8bWF0LWFjY29yZGlvbiBbaGlkZVRvZ2dsZV09XCJ0ZXN0XCIgW211bHRpXT1cInRydWVcIj5cclxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgKm5nRm9yPVwibGV0IHBhbmVsIG9mIHBhbmVsczsgaW5kZXggYXMgaVwiIFxyXG4gICAgICAgIFtleHBhbmRlZF09XCJwYW5lbC5pc09wZW5cIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCIxXCIgXHJcbiAgICAgID5cclxuICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJcclxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlUGFuZWwocGFuZWwsIHBhbmVsLnJlY29yZClcIj5cclxuICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgICAgIHt7IGZvcm0uTmFtZSB9fSB2Lnt7IHBhbmVsLnJlY29yZC5WZXJzaW9uIH19IC0ge3sgcGFuZWwucmVjb3JkLkFuc3dlckRhdGUgfCBkYXRlIDogXCJFRUVFLCBkIE1NTU0geSwgSDptbTpzc1wiIH19XHJcbiAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cclxuICAgICAgICAgIDwhLS0jcmVnaW9uIEJPVFRPTkkgUEVSIExFIEFaSU9OSSAtLT5cclxuICAgICAgICAgIDxtYXQtcGFuZWwtZGVzY3JpcHRpb24+XHJcbiAgICAgICAgICAgIDxidXR0b24gKm5nRm9yPVwibGV0IGJ1dHRvbiBvZiBidXR0b25zXCIgbWF0LWljb24tYnV0dG9uIGNsYXNzPVwicmVjb3JkLWljb24ge3tidXR0b24uZXh0cmFDbGFzc319XCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiYnV0dG9uLmZuKHBhbmVsLGksJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtaWNvbj57e2J1dHRvbi5pY29ufX08L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIGV4dGVybmFsQnV0dG9uc1wiIG1hdC1pY29uLWJ1dHRvbiBjbGFzcz1cInJlY29yZC1pY29uIHt7YnV0dG9uLmV4dHJhQ2xhc3N9fVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImV4dGVybmFsQ2FsbGJhY2soJGV2ZW50LGJ1dHRvbi5mbixwYW5lbC5yZWNvcmQpXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1pY29uPnt7YnV0dG9uLmljb259fTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImV4YW1wbGUtc3BhY2VyXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgIDwvbWF0LXBhbmVsLWRlc2NyaXB0aW9uPlxyXG4gICAgICAgICAgPCEtLSNlbmRyZWdpb24gQk9UVE9OSSBQRVIgTEUgQVpJT05JIC0tPlxyXG4gICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcblxyXG4gICAgICAgIDwhLS0gI3JlZ2lvbiBDT05URU5VVE8gLS0+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBhbmVsLnBhZ2VTdGF0ZSAhPSBudWxsXCI+XHJcbiAgICAgICAgICA8bGliLXNpbmdsZS1yZWNvcmRcclxuICAgICAgICAgICAgW2RlYnVnTW9kZV09XCJkZWJ1Z01vZGVcIlxyXG4gICAgICAgICAgICBbb25seVZpZXddPVwib25seVZpZXdcIlxyXG4gICAgICAgICAgICBbcmVjb3JkXSA9IFwicGFuZWwucmVjb3JkXCIgXHJcbiAgICAgICAgICAgIFtlbmRQb2ludENvbmZpZ3VyYXRpb25dID0gXCJlbmRQb2ludENvbmZpZ3VyYXRpb25cIlxyXG4gICAgICAgICAgICBbZm9ybV09XCJmb3JtXCJcclxuICAgICAgICAgICAgW3VzZXJJRF09XCJ1c2VySURcIlxyXG4gICAgICAgICAgICBbb3V0Q29tcGlsZUNvbmZpZ3VyYXRpb25zXT1cIm91dENvbXBpbGVDb25maWd1cmF0aW9uc1wiXHJcbiAgICAgICAgICAgIFtwYWdlU3RhdGVdPVwicGFuZWwucGFnZVN0YXRlXCJcclxuICAgICAgICAgICAgKHNhdmVSZWNvcmRFdmVudCk9XCJzYXZlT3JFeGl0Rm9ybSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgKGFmdGVyU2F2ZVJlY29yZEV2ZW50KT1cIm9uQWZ0ZXJTYXZlUmVjb3JkKCRldmVudClcIlxyXG4gICAgICAgICAgPlxyXG5cclxuICAgICAgICAgIDwvbGliLXNpbmdsZS1yZWNvcmQ+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPCEtLSNlbmRyZWdpb24gQ09OVEVOVVRPIC0tPlxyXG4gICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XHJcbiAgICA8L21hdC1hY2NvcmRpb24+XHJcblxyXG5cclxuICA8L21hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgPG1hdC1jYXJkLWZvb3Rlcj5cclxuICA8L21hdC1jYXJkLWZvb3Rlcj5cclxuPC9tYXQtY2FyZD5cclxuXHJcbjwhLS0gRElBTE9HIFJFQ0lQSUVOVFMgRU1BSUwgUEVSIEZJUk1BIC0tPlxyXG48bmctdGVtcGxhdGUgI29wZW5BZGREaWFsb2c+XHJcbiAgPG1hdC1jYXJkIGNsYXNzPVwiY2FyZC1kZWZhdWx0IG92ZXJsYXktY2FyZCBjYXJkLWlubW9kYWwtdHJ1ZVwiPlxyXG4gICAgPG1hdC1jYXJkLWNvbnRlbnQ+XHJcblxyXG4gICAgICA8YWRkLWZvcm0tcmVjb3JkXHJcbiAgICAgICAgY2xhc3M9XCJkeW5hbWljLW1vZHVsZS1jb21waWxlXCJcclxuICAgICAgICBbZGVidWdNb2RlXT1cImRlYnVnTW9kZVwiXHJcbiAgICAgICAgW2Zvcm1JRF09XCJmb3JtSURcIlxyXG4gICAgICAgIFtvbmx5Vmlld109XCJmYWxzZVwiXHJcblxyXG4gICAgICAgIFtlbmRQb2ludENvbmZpZ3VyYXRpb25dPVwiZW5kUG9pbnRDb25maWd1cmF0aW9uXCJcclxuICAgICAgICBbdXNlcklEXT1cInVzZXJJRFwiXHJcblxyXG4gICAgICAgIFtjb25maWd1cmF0aW9uc109XCJjb21waWxlQ29uZmlndXJhdGlvbnNcIlxyXG5cclxuICAgICAgICAoc2F2ZVJlY29yZEV2ZW50KT1cIm9uQWRkU2F2ZVJlY29yZCgkZXZlbnQpXCJcclxuICAgICAgICAoYWZ0ZXJTYXZlUmVjb3JkRXZlbnQpPVwib25BZGRBZnRlclNhdmVSZWNvcmQoJGV2ZW50KVwiXHJcbiAgICAgID5cclxuICAgICAgPC9hZGQtZm9ybS1yZWNvcmQ+XHJcblxyXG4gICAgPC9tYXQtY2FyZC1jb250ZW50PlxyXG4gIDwvbWF0LWNhcmQ+XHJcbjwvbmctdGVtcGxhdGU+Il19
654
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC12aWV3LWZvcm0tcmVjb3JkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9mb3JtLXJlY29yZHMvbGlzdC12aWV3LWZvcm0tcmVjb3JkL2xpc3Qtdmlldy1mb3JtLXJlY29yZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZm9ybS1yZWNvcmRzL2xpc3Qtdmlldy1mb3JtLXJlY29yZC9saXN0LXZpZXctZm9ybS1yZWNvcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBQ0wsU0FBUyxFQUNULE1BQU0sRUFDTixZQUFZLEdBS2IsTUFBTSxlQUFlLENBQUM7QUFNdkIsT0FBTyxFQUFhLE1BQU0sRUFBZ0IsTUFBTSxpQ0FBaUMsQ0FBQztBQUVsRixPQUFPLEVBQUUseUNBQXlDLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUV6SCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUNwRyxPQUFPLEVBR0wsYUFBYSxHQUNkLE1BQU0sa0RBQWtELENBQUM7Ozs7Ozs7Ozs7O0FBZTFELE1BQU0sT0FBTywyQkFBMkI7SUFHdEMsUUFBUSxDQUFDLE9BQWUsRUFBRSxPQUFhO1FBQ3JDLElBQUcsSUFBSSxDQUFDLFNBQVMsRUFBQztZQUNoQixPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQTtTQUM5QjtJQUNILENBQUM7SUFtREQsWUFDVSxvQkFBMEMsRUFDMUMsY0FBaUMsRUFDakMsTUFBaUI7UUFGakIseUJBQW9CLEdBQXBCLG9CQUFvQixD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LEtBQUssRUFBRTtnQkFJbkMsbUJBQW1CO3NCQUE1QixNQUFNO2dCQUtHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUdHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csb0JBQW9CO3NCQUE3QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgT25Jbml0LFxyXG4gIElucHV0LFxyXG4gIFZpZXdDaGlsZCxcclxuICBPdXRwdXQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIE9uQ2hhbmdlcyxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIFRlbXBsYXRlUmVmLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7XHJcbiAgQ29uZmlnQ29sdW1uLFxyXG4gIEVxcFRhYmxlQ29tcG9uZW50XHJcbn0gZnJvbSBcIkBlcXByb2plY3QvZXFwLXRhYmxlXCI7XHJcbmltcG9ydCB7IEZvcm0gfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWxzL2Zvcm0ubW9kZWxcIjtcclxuaW1wb3J0IHsgRHluUmVjb3JkLCBSZWNvcmQsIFJlY29yZEJ1dHRvbiB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbHMvcmVjb3JkLm1vZGVsXCI7XHJcbmltcG9ydCB7IFV0aWxpdHlIZWxwZXJTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxpdHlIZWxwZXIuc2VydmljZXNcIjtcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHQgfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWxzL2R5bmFtaWNNb2R1bGVMaXN0Rm9ybVJlY29yZEFjdGlvbnNEZWZhdWx0XCI7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVMaXN0Q29uZmlnIH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlTGlzdENvbmZpZy5tb2RlbFwiO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZyB9IGZyb20gXCIuLy4uLy4uLy4uLy4uLy9tb2RlbHMvZHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcubW9kZWxcIjtcclxuaW1wb3J0IHtcclxuICBFbmRQb2ludENvbmZpZ3VyYXRpb24sXHJcbiAgRW5kUG9pbnREYXRhUGFyYW1zLFxyXG4gIFBhcmFtVHlwZUVudW0sXHJcbn0gZnJvbSBcIi4vLi4vLi4vLi4vLi4vbW9kZWxzL2VuZFBvaW50Q29uZmlndXJhdGlvbi5tb2RlbFwiO1xyXG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ1JlZiB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2dcIjtcclxuXHJcbnR5cGUgUGFuZWwgPSB7IFxyXG4gIHJlY29yZDogUmVjb3JkLCBcclxuICBpc09wZW46IGJvb2xlYW4sIFxyXG4gIHBhZ2VTdGF0ZTogc3RyaW5nLFxyXG4gIGhpZ2hsaWdodGVkOiBib29sZWFuXHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImxpc3Qtdmlldy1mb3JtLXJlY29yZFwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcImxpc3Qtdmlldy1mb3JtLXJlY29yZC5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi9saXN0LXZpZXctZm9ybS1yZWNvcmQuY29tcG9uZW50LnNjc3NcIl0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMaXN0Vmlld0Zvcm1SZWNvcmRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcbiAgXHJcbiAgQElucHV0KCkgZGVidWdNb2RlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZGVidWdMb2cobWVzc2FnZTogc3RyaW5nLCBlbGVtZW50PzogYW55KXtcclxuICAgIGlmKHRoaXMuZGVidWdNb2RlKXtcclxuICAgICAgY29uc29sZS5sb2cobWVzc2FnZSwgZWxlbWVudClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIGNvbmZpZ3VyYXRpb25zOiBEeW5hbWljTW9kdWxlTGlzdENvbmZpZztcclxuICBASW5wdXQoKSBjb21waWxlQ29uZmlndXJhdGlvbnM6IER5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnO1xyXG4gIG91dENvbXBpbGVDb25maWd1cmF0aW9uczogRHluYW1pY01vZHVsZUNvbXBpbGVDb25maWc7XHJcbiAgQElucHV0KCkgZW5kUG9pbnRDb25maWd1cmF0aW9uOiBFbmRQb2ludENvbmZpZ3VyYXRpb247XHJcbiAgQElucHV0KCkgdXNlcklEOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgZm9ybUlEOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgZm9ybTogRm9ybSA9IG51bGw7XHJcbiAgQElucHV0KCkgZGVmYXVsdExpc3RWaWV3RnVuY3Rpb246IEZ1bmN0aW9uID0gbnVsbDtcclxuICBASW5wdXQoKSBleHRlcm5hbEJ1dHRvbnM6IEFycmF5PFJlY29yZEJ1dHRvbj4gPSBuZXcgQXJyYXk8UmVjb3JkQnV0dG9uPigpO1xyXG4gIEBJbnB1dCgpIG9ubHlWaWV3OiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSByZWNvcmRzOiBBcnJheTxEeW5SZWNvcmQ+ID0gbnVsbDtcclxuICBASW5wdXQoKSBoaWdobGlnaHRGaWx0ZXI6IGFueSA9IG51bGw7XHJcblxyXG4gIGRlZmF1bHRMaXN0QWN0aW9uczogRHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHQgPVxyXG4gICAgbmV3IER5bmFtaWNNb2R1bGVMaXN0Rm9ybVJlY29yZEFjdGlvbnNEZWZhdWx0KCk7XHJcbiAgc2hvd1RpdGxlID0gdHJ1ZTtcclxuICAvLyB2YWx1ZXM6IEFycmF5PFJlY29yZD47XHJcbiAgdGVzdCA9IGZhbHNlO1xyXG4gIHNlbGVjdGVkUmVjb3JkOiBSZWNvcmQ7XHJcbiAgbG9hZGVyOiBib29sZWFuO1xyXG4gIHBhbmVsT3BlblN0YXRlOiBib29sZWFuW10gPSBuZXcgQXJyYXk8Ym9vbGVhbj4oKTtcclxuICBwdWJsaWMgc2VsZWN0ZWRJbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgdmlzdWFsaXp6YUNvbnRlbnV0byA9IGZhbHNlO1xyXG4gIG1vZGlmaWNhQ29udGVudXRvID0gZmFsc2U7XHJcblxyXG4gIEBWaWV3Q2hpbGQoXCJ0YWJsZVJlY29yZHNcIiwgeyBzdGF0aWM6IHRydWUgfSkgdGFibGVSZWNvcmRzOiBFcXBUYWJsZUNvbXBvbmVudDtcclxuXHJcbiAgY29sdW1ucyA9IG5ldyBBcnJheTxDb25maWdDb2x1bW4+KCk7XHJcbiAgcGFuZWxzOiBBcnJheTxQYW5lbD5cclxuICBidXR0b25zOiBBcnJheTxSZWNvcmRCdXR0b24+ID0gbmV3IEFycmF5PFJlY29yZEJ1dHRvbj4oKTtcclxuICBwb3B1cExvYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBAVmlld0NoaWxkKFwib3BlbkFkZERpYWxvZ1wiLCB7IHN0YXRpYzogZmFsc2UgfSkgb3BlbkFkZERpYWxvZzogVGVtcGxhdGVSZWY8YW55PjtcclxuICBvcGVuQWRkRGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8VGVtcGxhdGVSZWY8YW55Pj47XHJcblxyXG4gIC8vIGFkZCBuZXdcclxuICBAT3V0cHV0KCkgb25BZGRWaWV3RWRpdFJlY29yZDogRXZlbnRFbWl0dGVyPHtcclxuICAgIHJlY29yZDogUmVjb3JkO1xyXG4gICAgb25seVZpZXc6IGJvb2xlYW47XHJcbiAgfT4gPSBuZXcgRXZlbnRFbWl0dGVyPHsgcmVjb3JkOiBSZWNvcmQ7IG9ubHlWaWV3OiBib29sZWFuIH0+KCk7XHJcblxyXG4gIEBPdXRwdXQoKSBvbkRlbGV0ZVJlY29yZDogRXZlbnRFbWl0dGVyPFJlY29yZD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuICBAT3V0cHV0KCkgb25EdXBsaWNhdGVSZWNvcmQ6IEV2ZW50RW1pdHRlcjxSZWNvcmQ+ID1cclxuICAgIG5ldyBFdmVudEVtaXR0ZXI8UmVjb3JkPigpO1xyXG5cclxuICBAT3V0cHV0KCkgc2F2ZVJlY29yZEV2ZW50OiBFdmVudEVtaXR0ZXI8UmVjb3JkPiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVjb3JkPigpO1xyXG4gIEBPdXRwdXQoKSBhZnRlclNhdmVSZWNvcmRFdmVudDogRXZlbnRFbWl0dGVyPFJlY29yZD4gPVxyXG4gICAgbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSB1dGlsaXR5SGVscGVyU2VydmljZTogVXRpbGl0eUhlbHBlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2dcclxuICApIHt9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgLy8gdGhpcy5wYW5lbE9wZW5TdGF0ZSA9IFtcclxuICAgIC8vICAgLi4uQXJyYXkodGhpcy5jb25maWd1cmF0aW9ucy52YWx1ZXMubGVuZ3RoICsgMSksXHJcbiAgICAvLyBdLm1hcCgoKSA9PiBmYWxzZSk7XHJcblxyXG4gICAgdGhpcy5kZWZhdWx0TGlzdEFjdGlvbnMgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLmRlZmF1bHRMaXN0QWN0aW9ucztcclxuICAgIHRoaXMuc2hvd1RpdGxlID0gdGhpcy5jb25maWd1cmF0aW9ucy5zaG93VGl0bGU7XHJcblxyXG4gICAgdGhpcy5vdXRDb21waWxlQ29uZmlndXJhdGlvbnMgPSBuZXcgRHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcoXHJcbiAgICAgIHRoaXMuY29tcGlsZUNvbmZpZ3VyYXRpb25zLnNob3dUaXRsZSxcclxuICAgICAgdGhpcy5jb21waWxlQ29uZmlndXJhdGlvbnMuc2hvd1NhdmVCdXR0b24sXHJcbiAgICAgIHRoaXMuY29tcGlsZUNvbmZpZ3VyYXRpb25zLnNob3dCYWNrQnV0dG9uLFxyXG4gICAgICB0aGlzLmNvbXBpbGVDb25maWd1cmF0aW9ucy51c2VySUQsXHJcbiAgICAgIHRoaXMuY29tcGlsZUNvbmZpZ3VyYXRpb25zLmFkZGl0aW9uYWxQYXJhbXMsXHJcbiAgICAgIHRoaXMuY29tcGlsZUNvbmZpZ3VyYXRpb25zLnByZWZpbHRlclBhcmFtcyxcclxuICAgICk7XHJcbiAgICB0aGlzLmRlYnVnTG9nKFwib3V0Y29tcGlsZUNvbmZpZ3VyYXRpb25zIFwiLCB0aGlzLm91dENvbXBpbGVDb25maWd1cmF0aW9ucyk7XHJcbiAgICB0aGlzLmdldEZvcm1CeUlEKCk7XHJcbiAgICB0aGlzLmNvbmZpZ3VyZUxpc3R2aWV3QnV0dG9ucygpO1xyXG5cclxuICAgIC8vIHRoaXMub3V0Q29tcGlsZUNvbmZpZ3VyYXRpb25zLnVzZXJJRDtcclxuICAgIC8vIHRoaXMudmFsdWVzID0gdGhpcy5jb25maWd1cmF0aW9ucy52YWx1ZXNcclxuICAgIC8vIHRoaXMuY29uZmlndXJlQ29sdW1ucygpO1xyXG5cclxuXHJcblxyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgdGhpcy5kZWJ1Z0xvZygnbmdPbkNoYW5nZXMnLCBjaGFuZ2VzKTtcclxuXHJcbiAgICAvLyBTZSB2aWVuZSBtb2RpZmljYXRvIGlsIHZhbG9yZSBkaSBcIm5nTW9kZWxJbnB1dFwiIGFsbG9yYSBhZ2dpb3JuYSBsJ2lucHV0XHJcbiAgICBpZiAoXHJcbiAgICAgIGNoYW5nZXNbXCJjb25maWd1cmF0aW9uc1wiXSAhPSB1bmRlZmluZWQgJiZcclxuICAgICAgY2hhbmdlc1tcImNvbmZpZ3VyYXRpb25zXCJdLmZpcnN0Q2hhbmdlID09IGZhbHNlXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5jb25maWd1cmF0aW9ucy52YWx1ZXMgPSBjaGFuZ2VzW1wiY29uZmlndXJhdGlvbnNcIl0uY3VycmVudFZhbHVlO1xyXG4gICAgICB0aGlzLnJlbG9hZFRhYmxlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25PcGVuaW5nKGluZGljZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSBpbmRpY2U7XHJcbiAgfVxyXG5cclxuICBjb25maWd1cmVMaXN0dmlld0J1dHRvbnMoKXtcclxuICAgIHRoaXMuYnV0dG9ucyA9IFtcclxuXHJcbiAgICAgIHtcclxuICAgICAgICBcImljb25cIjogXCJ2aXNpYmlsaXR5XCIsXHJcbiAgICAgICAgXCJ0ZXh0XCI6IFwiVmlzdWFsaXp6YVwiLFxyXG4gICAgICAgIFwidmlzaWJsZVwiOiB0aGlzLmRlZmF1bHRMaXN0QWN0aW9ucy52aWV3ICYmICh0aGlzLmRlZmF1bHRMaXN0QWN0aW9ucy5lZGl0IHx8IHRoaXMuZGVmYXVsdExpc3RBY3Rpb25zLmR1cGxpY2F0ZSB8fCB0aGlzLmRlZmF1bHRMaXN0QWN0aW9ucy5kZWxldGUpLFxyXG4gICAgICAgIFwiZXh0cmFDbGFzc1wiOiBcInZpZXctYnV0dG9uLWljb25cIixcclxuICAgICAgICBcImZuXCI6IChwYW5lbCxpLGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnZpZXdSZWNvcmQocGFuZWwsIHRydWUsIGksIGV2ZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcImljb25cIjogXCJlZGl0XCIsXHJcbiAgICAgICAgXCJ0ZXh0XCI6IFwiTW9kaWZpY2FcIixcclxuICAgICAgICBcInZpc2libGVcIjogdGhpcy5kZWZhdWx0TGlzdEFjdGlvbnMuZWRpdCxcclxuICAgICAgICBcImV4dHJhQ2xhc3NcIjogXCJlZGl0LWJ1dHRvbi1pY29uXCIsXHJcbiAgICAgICAgXCJmblwiOiAocGFuZWwsaSxldmVudCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5FZGl0UmVjb3JkKHBhbmVsLCBmYWxzZSwgaSwgZXZlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwiaWNvblwiOiBcImZpbGVfY29weVwiLFxyXG4gICAgICAgIFwidGV4dFwiOiBcIkR1cGxpY2FcIixcclxuICAgICAgICBcInZpc2libGVcIjogdGhpcy5kZWZhdWx0TGlzdEFjdGlvbnMuZHVwbGljYXRlLFxyXG4gICAgICAgIFwiZXh0cmFDbGFzc1wiOiBcImR1cGxpY2F0ZS1idXR0b24taWNvblwiLFxyXG4gICAgICAgIFwiZm5cIjogKHBhbmVsLGksZXZlbnQpID0+IHtcclxuICAgICAgICAgIHRoaXMuZHVwbGljYXRlUmVjb3JkKHBhbmVsLCBldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJpY29uXCI6IFwiZGVsZXRlXCIsXHJcbiAgICAgICAgXCJ0ZXh0XCI6IFwiQ2FuY2VsbGFcIixcclxuICAgICAgICBcInZpc2libGVcIjogdGhpcy5kZWZhdWx0TGlzdEFjdGlvbnMuZGVsZXRlLFxyXG4gICAgICAgIFwiZXh0cmFDbGFzc1wiOiBcImRlbGV0ZS1idXR0b24taWNvblwiLFxyXG4gICAgICAgIFwiZm5cIjogKHBhbmVsLGksZXZlbnQpID0+IHtcclxuICAgICAgICAgIHRoaXMuZGVsZXRlUmVjb3JkKHBhbmVsLCBldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgXVxyXG4gICAgdGhpcy5idXR0b25zID0gdGhpcy5idXR0b25zLmNvbmNhdCh0aGlzLmV4dGVybmFsQnV0dG9ucykuZmlsdGVyKHggPT4geC52aXNpYmxlKTtcclxuICB9XHJcblxyXG4gIGdldEZvcm1CeUlEKGlkOiBzdHJpbmcgPSB0aGlzLmZvcm1JRCkge1xyXG4gICAgaWYgKHRoaXMuZm9ybSA9PSBudWxsKSB7XHJcbiAgICAgIGNvbnN0IGR5bmFtaWNNb2R1bGVQYXJhbXM6IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4gPVxyXG4gICAgICAgIG5ldyBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+KCk7XHJcbiAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMucHVzaCh7XHJcbiAgICAgICAgUGFyYW1OYW1lOiBcImlkXCIsXHJcbiAgICAgICAgUGFyYW1WYWx1ZTogaWQsXHJcbiAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3Jtcy5HZXRCeUlERW5kUG9pbnQsXHJcbiAgICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgICAocmVzOiBGb3JtKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmZvcm0gPSByZXM7XHJcbiAgICAgICAgICB0aGlzLmNvbmZpZ3VyZUNvbHVtbnMoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIChlcnIpID0+IHt9XHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNvbmZpZ3VyZUNvbHVtbnMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgY29uZmlndXJhcmUgbGUgY29sb25uZSBkZWxsYSBlcXAtdGFibGUuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjb25maWd1cmVDb2x1bW5zKCkge1xyXG4gICAgLy8gdGhpcy5jcmVhdGVBZGRpdGlvbmFsQWN0aW9ucygpO1xyXG4gICAgLy8gdGhpcy5jcmVhdGVDb2x1bW5zRnJvbUZvcm1GaWVsZHMoKTtcclxuICAgIGlmICh0aGlzLnJlY29yZHMgPT0gbnVsbCl7XHJcbiAgICAgIHRoaXMuZ2V0UmVjb3Jkc0J5Rm9ybUlEKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmRlYnVnTG9nKCdSZWNvcmRzIEV4aXN0cycsIHRoaXMucmVjb3Jkcyk7XHJcbiAgICAgIHRoaXMuZ2VuZXJhdGVBbnN3ZXJzQXJyYXkodGhpcy5yZWNvcmRzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgcmVjdXBlcmFyZSB0dXR0aSBpIHJlY29yZCBzYWx2YXRpIHBlciB1bmEgcGFydGljb2xhcmUgRm9ybS5cclxuICAgKiBMYSBjaGlhbWF0YSB2aWVuZSBlZmZldHR1YXRhIHNvbG8gc2Ugw6ggc3RhdG8gY29uZmlndXJhdG8gbCdlbmRQb2ludCBkYSB1c2FyZS5cclxuICAgKiBMYSByaXNwb3N0YSBkZWxsYSBjaGlhbWF0YSBkZXZlIGVzc2VyZSB1biBhcnJheSBkaSBvZ2dldHRpIGRpIHRpcG8gXCJEeW5SZWNvcmRcIlxyXG4gICAqIGEgcGFydGlyZSBkYWkgcXVhbGkgdmVuZ29ubyByaWNyZWF0aSBpIFJlY29yZCB1c2F0aSBuZWwgY2xpZW50LlxyXG4gICAqL1xyXG4gIGFzeW5jIGdldFJlY29yZHNCeUZvcm1JRCgpIHtcclxuICAgIHZhciBkeW5hbWljTW9kdWxlUGFyYW1zID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAgUGFyYW1OYW1lOiBcIkVudElEXCIsXHJcbiAgICAgICAgUGFyYW1WYWx1ZTogdGhpcy5mb3JtLklELFxyXG4gICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICB9LFxyXG4gICAgXTtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMudXNlcklEID09IG51bGwgJiZcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24gJiZcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3JkcyAmJlxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEJ5Rm9ybUlERW5kUG9pbnRcclxuICAgICkge1xyXG4gICAgICAvLyBzZSBub24gY29ub3NjbyBsJ3V0ZW50ZVxyXG4gICAgICBhd2FpdCB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEJ5Rm9ybUlERW5kUG9pbnQsXHJcbiAgICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgICAocmVzOiBBcnJheTxEeW5SZWNvcmQ+KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmRlYnVnTG9nKCdHZXRCeUZvcm1JREVuZFBvaW50JywgcmVzKVxyXG4gICAgICAgICAgdGhpcy5nZW5lcmF0ZUFuc3dlcnNBcnJheShyZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMudXNlcklEICE9IG51bGwgJiZcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24gJiZcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3JkcyAmJlxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEFsbEJ5RW50QW5kVXNlcklERW5kUG9pbnRcclxuICAgICkge1xyXG4gICAgLy8gc2UgY29ub3NjbyBsJ3V0ZW50ZVxyXG4gICAgICBsZXQgZHluYW1pY01vZHVsZVBhcmFtcyA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBQYXJhbU5hbWU6IFwiRW50SURcIixcclxuICAgICAgICAgIFBhcmFtVmFsdWU6IHRoaXMuZm9ybS5JRCxcclxuICAgICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgUGFyYW1OYW1lOiBcIlVzZXJJRFwiLFxyXG4gICAgICAgICAgUGFyYW1WYWx1ZTogdGhpcy5jb25maWd1cmF0aW9ucy51c2VySUQsXHJcbiAgICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgICB9LFxyXG4gICAgICBdO1xyXG5cclxuICAgICAgYXdhaXQgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5HZXRBbGxCeUVudEFuZFVzZXJJREVuZFBvaW50LFxyXG4gICAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMsXHJcbiAgICAgICAgKHJlczogQXJyYXk8RHluUmVjb3JkPikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5kZWJ1Z0xvZygnR2V0QWxsQnlFbnRBbmRVc2VySURFbmRQb2ludCcsIHJlcylcclxuICAgICAgICAgIHRoaXMuZ2VuZXJhdGVBbnN3ZXJzQXJyYXkocmVzKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKFwiY29udHJvbGxhcmUgbGUgY29uZmlndXJhemlvbmkgZGVsbCdlbmRwb2ludFwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2VuZXJhdGVBbnN3ZXJzQXJyYXkocmVzOiBBcnJheTxEeW5SZWNvcmQ+KXtcclxuICAgIHRoaXMuY29uZmlndXJhdGlvbnMudmFsdWVzID0gbmV3IEFycmF5PFJlY29yZD4oKTtcclxuICAgIHRoaXMucGFuZWxzID0gbmV3IEFycmF5PFBhbmVsPigpO1xyXG4gICAgcmVzLmZvckVhY2goKHIpID0+IHtcclxuICAgICAgdmFyIHRtcFJlYzogUmVjb3JkID0gbmV3IFJlY29yZCgpO1xyXG4gICAgICB0bXBSZWMgPSBKU09OLnBhcnNlKHIuU2VyaWFsaXplZFZhbHVlcyk7XHJcbiAgICAgIHRtcFJlYy5JRCA9IHIuSUQ7XHJcbiAgICAgIHRtcFJlYy5FbnRJRCA9IHIuRW50SUQ7XHJcbiAgICAgIHRtcFJlYy5WZXJzaW9uID0gci5WZXJzaW9uO1xyXG4gICAgICB0bXBSZWMudXNlcklEID0gci51c2VySUQ7XHJcbiAgICAgIHRtcFJlYy5BbnN3ZXJEYXRlID0gci5BbnN3ZXJEYXRlO1xyXG4gICAgICB0bXBSZWMuSFRNTHJlYWRhYmxlVmFsdWVzID0gci5IVE1McmVhZGFibGVWYWx1ZXM7XHJcbiAgICAgIHRtcFJlYy5BZGRpdGlvbmFsUGFyYW1zID0gSlNPTi5wYXJzZShyLkFkZGl0aW9uYWxQYXJhbXMpO1xyXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLnZhbHVlcy5wdXNoKHRtcFJlYyk7XHJcblxyXG4gICAgICB2YXIgaXNIaWdobGlnaHRlZCA9IGZhbHNlO1xyXG4gICAgICBpZiAodGhpcy5oaWdobGlnaHRGaWx0ZXIgIT0gbnVsbCl7XHJcbiAgICAgICAgaXNIaWdobGlnaHRlZCA9IHRydWU7XHJcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5oaWdobGlnaHRGaWx0ZXIpLmZvckVhY2goKGZpbHRlcikgPT4ge1xyXG4gICAgICAgICAgaWYgKCF0bXBSZWMuQWRkaXRpb25hbFBhcmFtc1tmaWx0ZXJdIHx8IHRtcFJlYy5BZGRpdGlvbmFsUGFyYW1zW2ZpbHRlcl0gIT0gdGhpcy5oaWdobGlnaHRGaWx0ZXJbZmlsdGVyXSl7XHJcbiAgICAgICAgICAgIGlzSGlnaGxpZ2h0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5wYW5lbHMucHVzaCh7cmVjb3JkOiB0bXBSZWMsIGlzT3BlbjogZmFsc2UsIHBhZ2VTdGF0ZTogbnVsbCwgaGlnaGxpZ2h0ZWQ6IGlzSGlnaGxpZ2h0ZWR9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgIHNldFRpbWVvdXQoKF8pID0+IHtcclxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9LCAwKTsgLy8gcmVmcmVzaCB1aVxyXG4gIH1cclxuXHJcbiAgdG9nZ2xlUGFuZWwocGFuZWw6IGFueSwgcmVjb3JkOiBSZWNvcmQpIHtcclxuICAgIHRoaXMuZGVidWdMb2coJ3RvZ2dsZVBhbmVsJylcclxuICAgIGlmKHRoaXMuZGVmYXVsdExpc3RWaWV3RnVuY3Rpb24gIT0gbnVsbCl7XHJcbiAgICAgIHRoaXMuZGVidWdMb2coJ2RlZmF1bHRMaXN0Vmlld0Z1bmN0aW9uJywgcmVjb3JkKVxyXG4gICAgICB0aGlzLmRlZmF1bHRMaXN0Vmlld0Z1bmN0aW9uKHJlY29yZCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICghcGFuZWwuaXNPcGVuKSB7XHJcbiAgICAgICAgcGFuZWwuaXNPcGVuID0gdHJ1ZTtcclxuICAgICAgICBwYW5lbC5wYWdlU3RhdGUgPSAndmlzdWFsaXp6YUNvbnRlbnV0byc7XHJcbiAgICAgIC8vIFNpbXVsYSB1biBjYWxjb2xvIGFzaW5jcm9ub1xyXG4gICAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgLy8gfSwgMTAwMCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBwYW5lbC5pc09wZW4gPSBmYWxzZTtcclxuICAgICAgcGFuZWwucGFnZVN0YXRlPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBhZ2dpdW5nZXJlIG5lbGxhIGNvbG9ubmEgXCJhY3Rpb25cIiBkZWxsYSBlcXAtdGFibGUgbGUgYXppb25pIHN1aSByZWNvcmRcclxuICAgKiBkZWZpbml0ZSBkYWxsJ3V0ZW50ZSBhbGwnaW50ZXJubyBkZWxsYSBGb3JtLlxyXG4gICAqL1xyXG4gIC8vIHByaXZhdGUgY3JlYXRlQWRkaXRpb25hbEFjdGlvbnMoKSB7XHJcbiAgLy8gICBpZiAodGhpcy5mb3JtLkFjdGlvbnNPblJlY29yZCAmJiB0aGlzLmZvcm0uQWN0aW9uc09uUmVjb3JkLmxlbmd0aCA+IDApIHtcclxuICAvLyAgICAgdGhpcy5mb3JtLkFjdGlvbnNPblJlY29yZC5zb3J0KChhLCBiKSA9PlxyXG4gIC8vICAgICAgIGEuT3JkaW5hbFBvc2l0aW9uID4gYi5PcmRpbmFsUG9zaXRpb25cclxuICAvLyAgICAgICAgID8gMVxyXG4gIC8vICAgICAgICAgOiBiLk9yZGluYWxQb3NpdGlvbiA+IGEuT3JkaW5hbFBvc2l0aW9uXHJcbiAgLy8gICAgICAgICA/IC0xXHJcbiAgLy8gICAgICAgICA6IDBcclxuICAvLyAgICAgKS5mb3JFYWNoKChhY3Rpb24pID0+IHtcclxuICAvLyAgICAgICB0aGlzLmNvbHVtbnNcclxuICAvLyAgICAgICAgIC5maW5kKChjKSA9PiBjLmtleSA9PT0gXCJhY3Rpb25cIilcclxuICAvLyAgICAgICAgIC5hY3Rpb25zLnB1c2goe1xyXG4gIC8vICAgICAgICAgICBuYW1lOiBhY3Rpb24uTmFtZSxcclxuICAvLyAgICAgICAgICAgaWNvbjogYWN0aW9uLkljb24sXHJcbiAgLy8gICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT4ge1xyXG4gIC8vICAgICAgICAgICAgIGNvbnN0IHJlYyA9IGVsZW1lbnQ7XHJcbiAgLy8gICAgICAgICAgICAgY29uc3QgY3R4ID0gVXRpbGl0eUhlbHBlclNlcnZpY2UuY29udGV4dDtcclxuICAvLyAgICAgICAgICAgICBldmFsKGFjdGlvbi5BY3Rpb24pO1xyXG4gIC8vICAgICAgICAgICAgIC8vIFRPRE86IHNhbHZhcmUgbGUgbW9kaWZpY2hlXHJcbiAgLy8gICAgICAgICAgIH0sXHJcbiAgLy8gICAgICAgICB9KTtcclxuICAvLyAgICAgfSk7XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gY2hlIHNjYXRlbmEgbCdldmVudG8gZGkgT3V0cHV0IHBlciBtb3N0cmFyZSBvIG1vZGlmaWNhcmUgaWwgcmVjb3JkXHJcbiAgICogc2VsZXppb25hdG8gc3VsbGEgZXFwLXRhYmxlLlxyXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkIGRhIHZpc3VhbGl6emFyZSBvIG1vZGlmaWNhcmUgc2VsZXppb25hdG8gc3VsbGEgZXFwLXRhYmxlLlxyXG4gICAqIEBwYXJhbSBvbmx5VmlldyBTZSBUUlVFIHZpZW5lIG1vc3RyYXRvIGlsIGNvbXBvbmVudGUgYWRkLWZvcm0tcmVjb3JkIGluIHNvbGEgbGV0dHVyYS5cclxuICAgKi9cclxuICB2aWV3T3JFZGl0UmVjb3JkKHJlY29yZDogUmVjb3JkLCBvbmx5VmlldzogYm9vbGVhbiwgaSkge1xyXG4gICAgdGhpcy5kZWJ1Z0xvZygndmlld09yRWRpdFJlY29yZCcpXHJcbiAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgdGhpcy5vbkFkZFZpZXdFZGl0UmVjb3JkMih7IHJlY29yZCwgb25seVZpZXcgfSk7XHJcbiAgICB0aGlzLnBhbmVsT3BlblN0YXRlLm1hcCgoKSA9PiBmYWxzZSk7XHJcbiAgICB0aGlzLnBhbmVsT3BlblN0YXRlW2ldID0gdGhpcy5wYW5lbE9wZW5TdGF0ZVtpXSA9PSB0cnVlID8gZmFsc2UgOiB0cnVlO1xyXG4gICAgLy8gdGhpcy5vbkFkZFZpZXdFZGl0UmVjb3JkLmVtaXQoeyByZWNvcmQsIG9ubHlWaWV3IH0pO1xyXG4gIH0gIFxyXG4gIHZpZXdSZWNvcmQocGFuZWw6IFBhbmVsLCBvbmx5VmlldzogYm9vbGVhbiwgaSwgZXY6IEV2ZW50KSB7ICAgIFxyXG4gICAgZXYucHJldmVudERlZmF1bHQoKTtcclxuICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgdGhpcy5kZWJ1Z0xvZygndmlld1JlY29yZCcpXHJcbiAgICBsZXQgcmVjb3JkID0gcGFuZWwucmVjb3JkXHJcbiAgICB0aGlzLnZpc3VhbGl6emFDb250ZW51dG8gPSB0cnVlO1xyXG4gICAgdGhpcy5tb2RpZmljYUNvbnRlbnV0byA9IGZhbHNlO1xyXG4gICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgIC8vIHRoaXMub25BZGRWaWV3RWRpdFJlY29yZDIoeyByZWNvcmQsIG9ubHlWaWV3IH0pO1xyXG4gICAgaWYgKHBhbmVsLnBhZ2VTdGF0ZSAgPT0gJ3Zpc3VhbGl6emFDb250ZW51dG8nKSB7XHJcbiAgICAgIHBhbmVsLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgICBwYW5lbC5wYWdlU3RhdGU9IG51bGw7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBwYW5lbC5pc09wZW4gPSB0cnVlO1xyXG4gICAgICBwYW5lbC5wYWdlU3RhdGUgPSAndmlzdWFsaXp6YUNvbnRlbnV0byc7XHJcbiAgICB9XHJcbiAgICB0aGlzLnBhbmVsT3BlblN0YXRlLm1hcCgoKSA9PiBmYWxzZSk7XHJcbiAgICB0aGlzLnBhbmVsT3BlblN0YXRlW2ldID0gdGhpcy5wYW5lbE9wZW5TdGF0ZVtpXSA9PSB0cnVlID8gZmFsc2UgOiB0cnVlO1xyXG4gICAgLy8gdGhpcy5vbkFkZFZpZXdFZGl0UmVjb3JkLmVtaXQoeyByZWNvcmQsIG9ubHlWaWV3IH0pO1xyXG4gIH1cclxuICBFZGl0UmVjb3JkKHBhbmVsOiBQYW5lbCwgb25seVZpZXc6IGJvb2xlYW4sIGksIGV2OiBFdmVudCkgeyAgICBcclxuICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIHRoaXMuZGVidWdMb2coJ0VkaXRSZWNvcmQnKVxyXG5cclxuICAgIGxldCByZWNvcmQgPSBwYW5lbC5yZWNvcmRcclxuICAgIHRoaXMudmlzdWFsaXp6YUNvbnRlbnV0byA9IGZhbHNlO1xyXG4gICAgdGhpcy5tb2RpZmljYUNvbnRlbnV0byA9IHRydWU7XHJcbiAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgLy8gdGhpcy5vbkFkZFZpZXdFZGl0UmVjb3JkMih7IHJlY29yZCwgb25seVZpZXcgfSk7XHJcbiAgICBpZiAocGFuZWwucGFnZVN0YXRlICA9PSAnbW9kaWZpY2FDb250ZW51dG8nKSB7XHJcbiAgICAgIHBhbmVsLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgICBwYW5lbC5wYWdlU3RhdGU9IG51bGw7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBwYW5lbC5pc09wZW4gPSB0cnVlO1xyXG4gICAgICBwYW5lbC5wYWdlU3RhdGUgPSAnbW9kaWZpY2FDb250ZW51dG8nO1xyXG4gICAgfVxyXG4gICAgdGhpcy5wYW5lbE9wZW5TdGF0ZS5tYXAoKCkgPT4gZmFsc2UpO1xyXG4gICAgdGhpcy5wYW5lbE9wZW5TdGF0ZVtpXSA9IHRoaXMucGFuZWxPcGVuU3RhdGVbaV0gPT0gdHJ1ZSA/IGZhbHNlIDogdHJ1ZTtcclxuICAgIC8vIHRoaXMub25BZGRWaWV3RWRpdFJlY29yZC5lbWl0KHsgcmVjb3JkLCBvbmx5VmlldyB9KTtcclxuICB9XHJcblxyXG4gIGV4dGVybmFsQ2FsbGJhY2soZXY6IEV2ZW50LCBjYWxsYmFjazogRnVuY3Rpb24sIHJlY29yZDogYW55KXtcclxuICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIGNhbGxiYWNrKHJlY29yZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGR1cGxpY2FyZSB1biByZWNvcmQgZGVsbGEgZm9ybS5cclxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZCBkYSBkdXBsaWNhcmUuXHJcbiAgICovXHJcbiAgZHVwbGljYXRlUmVjb3JkKHJlY29yZDogUmVjb3JkLCBldjogRXZlbnQpIHsgICAgXHJcbiAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB0aGlzLm9uRHVwbGljYXRlUmVjb3JkLmVtaXQocmVjb3JkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgZWxpbWluYXJlIHVuIHJlY29yZCBkYWxsYSBsaXN0YS5cclxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZCBkYSBlbGltaW5hcmUgc2VsZXppb25hdG8gc3VsbGEgZXFwLXRhYmxlLlxyXG4gICAqL1xyXG4gIGRlbGV0ZVJlY29yZChyZWNvcmQ6IFJlY29yZCwgZXY6IEV2ZW50KSB7ICAgIFxyXG4gICAgZXYucHJldmVudERlZmF1bHQoKTtcclxuICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgdGhpcy5vbkRlbGV0ZVJlY29yZC5lbWl0KHJlY29yZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGNyZWFyZSBsYSBjb25maWd1cmF6aW9uZSBkZWxsZSBjb2xvbm5lIHBlciBsYSBlcXAtdGFibGUuXHJcbiAgICogSW5kaXZpZHVhIGkgQmFzZUZpZWxkIGRhIG1vc3RyYXJlIGUgbGkgdXNhIHBlciBjcmVhcmUgbGUgQ29uZmlnQ29sdW1uLlxyXG4gICAqIExlIGNvbG9ubmUgdmVuZ29ubyBjcmVhdGUgcGVyIGkgQmFzZUZpZWxkIGNvbiBpbCBmbGFnIEluTGlzdFZpZXcgYSBUUlVFXHJcbiAgICogb3BwdXJlLCBuZWwgY2FzbyBub24gc2lhbm8gc3RhdGkgc3BlY2lmaWNhdGkgaSBjYW1waSBkYSB2aXN1YWxpenphcmUsXHJcbiAgICogc2VsZXppb25hIGkgcHJpbWkgNi5cclxuICAgKi9cclxuICAvLyBwcml2YXRlIGNyZWF0ZUNvbHVtbnNGcm9tRm9ybUZpZWxkcygpIHtcclxuICAvLyAgIHZhciBmaWVsZHNGb3JDb2x1bW5zOiBBcnJheTxCYXNlRmllbGQ+O1xyXG4gIC8vICAgaWYgKHRoaXMuZm9ybS5GaWVsZHMuZmluZCgoZikgPT4gZi5Jbkxpc3RWaWV3KSkge1xyXG4gIC8vICAgICBmaWVsZHNGb3JDb2x1bW5zID0gdGhpcy5mb3JtLkZpZWxkcy5maWx0ZXIoKGYpID0+IGYuSW5MaXN0Vmlldyk7XHJcbiAgLy8gICB9IGVsc2Uge1xyXG4gIC8vICAgICBmaWVsZHNGb3JDb2x1bW5zID0gdGhpcy5mb3JtLkZpZWxkcy5maWx0ZXIoKGYpID0+IGYuT3JkaW5hbFBvc2l0aW9uIDwgNik7XHJcbiAgLy8gICB9XHJcbiAgLy8gICBmaWVsZHNGb3JDb2x1bW5zXHJcbiAgLy8gICAgIC5zb3J0KChhLCBiKSA9PlxyXG4gIC8vICAgICAgIGEuT3JkaW5hbFBvc2l0aW9uID4gYi5PcmRpbmFsUG9zaXRpb25cclxuICAvLyAgICAgICAgID8gMVxyXG4gIC8vICAgICAgICAgOiBiLk9yZGluYWxQb3NpdGlvbiA+IGEuT3JkaW5hbFBvc2l0aW9uXHJcbiAgLy8gICAgICAgICA/IC0xXHJcbiAgLy8gICAgICAgICA6IDBcclxuICAvLyAgICAgKVxyXG4gIC8vICAgICAuZm9yRWFjaCgoZmllbGQpID0+IHtcclxuICAvLyAgICAgICB0aGlzLmNvbHVtbnMucHVzaCh0aGlzLmNyZWF0ZUZpZWxkQ29sdW1uKGZpZWxkKSk7XHJcbiAgLy8gICAgIH0pO1xyXG4gIC8vIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBjcmVhcmUgbCdvZ2dldHRvIENvbmZpZ3VyZUNvbHVtbiBjaGUgcmFwcHJlc2VudGEgaWwgQmFzZUZpZWxkIHBhc3NhdG8gaW4gaW5wdXQuXHJcbiAgICogQHBhcmFtIGZpZWxkIEJhc2VGaWVsZCBwZXIgY3VpIGNyZWFyZSBsYSBjb2xvbm5hIG5lbGxhIGVxcC10YWJsZVxyXG4gICAqIEByZXR1cm5zIFJlc3RpdHVpc2NlIHVuYSBDb25maWdDb2x1bW4gcGVyIGxhIGVxcC10YWJsZVxyXG4gICAqL1xyXG4gIC8vIHByaXZhdGUgY3JlYXRlRmllbGRDb2x1bW4oZmllbGQ6IEJhc2VGaWVsZCk6IENvbmZpZ0NvbHVtbiB7XHJcbiAgLy8gICB2YXIgY29sdW1uOiBDb25maWdDb2x1bW4gPSB7IGtleTogZmllbGQuTmFtZSwgZGlzcGxheTogZmllbGQuTGFiZWwgfTtcclxuICAvLyAgIHN3aXRjaCAoZmllbGQuRmllbGRUeXBlKSB7XHJcbiAgLy8gICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkJvb2xlYW5vXCJdOlxyXG4gIC8vICAgICAgIGNvbHVtbi50eXBlID0gVHlwZUNvbHVtbi5Cb29sZWFuO1xyXG4gIC8vICAgICAgIGNvbHVtbi5ib29sZWFuVmFsdWVzID0ge1xyXG4gIC8vICAgICAgICAgZmFsc2U6ICc8aSBjbGFzcz1cImZhIGZhLXRpbWVzIGVycm9yLWNvbG9yXCI+PC9pPicsXHJcbiAgLy8gICAgICAgICB0cnVlOiAnPGkgY2xhc3M9XCJmYSBmYS1jaGVjayBzdWNjZXNzLWNvbG9yXCI+PC9pPicsXHJcbiAgLy8gICAgICAgfTtcclxuICAvLyAgICAgICBjb2x1bW4uc3R5bGVzID0ge1xyXG4gIC8vICAgICAgICAgZmxleDogXCIwIDAgNyVcIixcclxuICAvLyAgICAgICAgIGNlbGxBbGlnbm1lbnQ6IENlbGxBbGlnbm1lbnRFbnVtLkNFTlRFUixcclxuICAvLyAgICAgICB9O1xyXG4gIC8vICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJEYXRhIGUvbyBvcmFcIl06XHJcbiAgLy8gICAgICAgaWYgKFxyXG4gIC8vICAgICAgICAgKGZpZWxkIGFzIERhdGVGaWVsZCkuSXNPbmx5RGF0ZSAhPSBEYXRlVGltZVR5cGVFbnVtW1wiU29sbyBvcmFyaW9cIl1cclxuICAvLyAgICAgICApIHtcclxuICAvLyAgICAgICAgIGNvbHVtbi50eXBlID0gVHlwZUNvbHVtbi5EYXRlO1xyXG4gIC8vICAgICAgICAgaWYgKFxyXG4gIC8vICAgICAgICAgICAoZmllbGQgYXMgRGF0ZUZpZWxkKS5Jc09ubHlEYXRlID09IERhdGVUaW1lVHlwZUVudW1bXCJEYXRhIGUgb3JhXCJdXHJcbiAgLy8gICAgICAgICApIHtcclxuICAvLyAgICAgICAgICAgY29sdW1uLmZvcm1hdCA9IFwiZGQvTU0veXl5eSBISDptbVwiO1xyXG4gIC8vICAgICAgICAgfSBlbHNlIGlmIChcclxuICAvLyAgICAgICAgICAgKGZpZWxkIGFzIERhdGVGaWVsZCkuSXNPbmx5RGF0ZSA9PSBEYXRlVGltZVR5cGVFbnVtW1wiU29sbyBkYXRhXCJdXHJcbiAgLy8gICAgICAgICApIHtcclxuICAvLyAgICAgICAgICAgY29sdW1uLmZvcm1hdCA9IChmaWVsZCBhcyBEYXRlRmllbGQpLkRhdGVGb3JtYXRcclxuICAvLyAgICAgICAgICAgICA/IChmaWVsZCBhcyBEYXRlRmllbGQpLkRhdGVGb3JtYXQucmVwbGFjZShcIkREXCIsIFwiZGRcIilcclxuICAvLyAgICAgICAgICAgICA6IFwiZGQvTU0veXl5eVwiO1xyXG4gIC8vICAgICAgICAgfVxyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgICBicmVhaztcclxuICAvLyAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiQ2FtcG8gbnVtZXJpY29cIl06XHJcbiAgLy8gICAgICAgaWYgKChmaWVsZCBhcyBOdW1lcmljRmllbGQpLkN1cnJlbmN5U3ltYm9sKSB7XHJcbiAgLy8gICAgICAgICBjb2x1bW4ubnVtYmVyUGlwZSA9IE51bWJlckNvbHVtblBpcGUuQ1VSUkVOQ1k7XHJcbiAgLy8gICAgICAgICBjb2x1bW4uY3VycmVuY3lQaXBlQ29kZSA9IChmaWVsZCBhcyBOdW1lcmljRmllbGQpLkN1cnJlbmN5U3ltYm9sO1xyXG4gIC8vICAgICAgIH0gZWxzZSBpZiAoIShmaWVsZCBhcyBOdW1lcmljRmllbGQpLklzSW50ZWdlcikge1xyXG4gIC8vICAgICAgICAgY29sdW1uLm51bWJlclBpcGUgPSBOdW1iZXJDb2x1bW5QaXBlLkRFQ0lNQUw7XHJcbiAgLy8gICAgICAgfVxyXG4gIC8vICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJBbGxlZ2F0b1wiXTpcclxuICAvLyAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiSW1tYWdpbmVcIl06XHJcbiAgLy8gICAgICAgY29sdW1uLnZhbHVlID0gKGVsZW1lbnQ6IFJlY29yZCkgPT4ge1xyXG4gIC8vICAgICAgICAgaWYgKFxyXG4gIC8vICAgICAgICAgICAoZmllbGQgYXMgQXR0YWNobWVudEZpZWxkKS5Jc011bHRpQXR0YWNoIHx8XHJcbiAgLy8gICAgICAgICAgICgoZmllbGQgYXMgSW1hZ2VGaWVsZCkuQXR0YWNoRGVmaW5pdGlvbiAmJlxyXG4gIC8vICAgICAgICAgICAgIChmaWVsZCBhcyBJbWFnZUZpZWxkKS5BdHRhY2hEZWZpbml0aW9uLklzTXVsdGlBdHRhY2gpXHJcbiAgLy8gICAgICAgICApIHtcclxuICAvLyAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRbZmllbGQuTmFtZV0gIT0gbnVsbCAmJiBlbGVtZW50W2ZpZWxkLk5hbWVdLmxlbmd0aCA+IDBcclxuICAvLyAgICAgICAgICAgICA/IChlbGVtZW50W2ZpZWxkLk5hbWVdIGFzIEFycmF5PElBdHRhY2htZW50RFRPPilcclxuICAvLyAgICAgICAgICAgICAgICAgLm1hcCgoYSkgPT4gYS5GaWxlTmFtZSlcclxuICAvLyAgICAgICAgICAgICAgICAgLmpvaW4oXCIsIFwiKVxyXG4gIC8vICAgICAgICAgICAgIDogbnVsbDtcclxuICAvLyAgICAgICAgIH0gZWxzZSB7XHJcbiAgLy8gICAgICAgICAgIHJldHVybiBlbGVtZW50W2ZpZWxkLk5hbWVdICE9IG51bGwgJiYgZWxlbWVudFtmaWVsZC5OYW1lXS5sZW5ndGggPiAwXHJcbiAgLy8gICAgICAgICAgICAgPyAoZWxlbWVudFtmaWVsZC5OYW1lXSBhcyBBcnJheTxJQXR0YWNobWVudERUTz4pWzBdLkZpbGVOYW1lXHJcbiAgLy8gICAgICAgICAgICAgOiBudWxsO1xyXG4gIC8vICAgICAgICAgfVxyXG4gIC8vICAgICAgIH07XHJcbiAgLy8gICAgICAgY29sdW1uLmlzU29ydGFibGUgPSBmYWxzZTtcclxuICAvLyAgICAgICBjb2x1bW4uaXNTZWFyY2hhYmxlID0gZmFsc2U7XHJcbiAgLy8gICAgICAgYnJlYWs7XHJcbiAgLy8gICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkVsZW5jbyBnZW5lcmljb1wiXTpcclxuICAvLyAgICAgICBjb2x1bW4udmFsdWUgPSAoZWxlbWVudDogUmVjb3JkKSA9PiB7XHJcbiAgLy8gICAgICAgICBpZiAoKGZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5Jc011bHRpQ2hvaWNoZSkge1xyXG4gIC8vICAgICAgICAgICBpZiAoIWVsZW1lbnRbZmllbGQuTmFtZV0gfHwgZWxlbWVudFtmaWVsZC5OYW1lXS5sZW5ndGggPT0gMCkge1xyXG4gIC8vICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gIC8vICAgICAgICAgICB9IGVsc2Uge1xyXG4gIC8vICAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cygoZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLlZhbHVlUGFpcnMpXHJcbiAgLy8gICAgICAgICAgICAgICAuZmlsdGVyKChrKSA9PlxyXG4gIC8vICAgICAgICAgICAgICAgICBlbGVtZW50W2ZpZWxkLk5hbWVdLmluY2x1ZGVzKFxyXG4gIC8vICAgICAgICAgICAgICAgICAgIChmaWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVQYWlyc1trXVxyXG4gIC8vICAgICAgICAgICAgICAgICApXHJcbiAgLy8gICAgICAgICAgICAgICApXHJcbiAgLy8gICAgICAgICAgICAgICAuam9pbihcIiwgXCIpO1xyXG4gIC8vICAgICAgICAgICB9XHJcbiAgLy8gICAgICAgICB9IGVsc2Uge1xyXG4gIC8vICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoKGZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzKS5maW5kKFxyXG4gIC8vICAgICAgICAgICAgIChrKSA9PlxyXG4gIC8vICAgICAgICAgICAgICAgKGZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzW2tdID09IGVsZW1lbnRbZmllbGQuTmFtZV1cclxuICAvLyAgICAgICAgICAgKTtcclxuICAvLyAgICAgICAgIH1cclxuICAvLyAgICAgICB9O1xyXG4gIC8vICAgICAgIGNvbHVtbi5pc1NvcnRhYmxlID0gZmFsc2U7XHJcbiAgLy8gICAgICAgY29sdW1uLmlzU2VhcmNoYWJsZSA9IGZhbHNlO1xyXG4gIC8vICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJMb29rdXBcIl06XHJcbiAgLy8gICAgICAgLy8gVE9ET1xyXG4gIC8vICAgICAgIGJyZWFrO1xyXG4gIC8vICAgfVxyXG4gIC8vICAgcmV0dXJuIGNvbHVtbjtcclxuICAvLyB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgcmljYXJpY2FyZSBpIGRhdGkgZGVsbGEgZXFwLXRhYmxlLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgcmVsb2FkVGFibGVzKCkge1xyXG4gICAgaWYgKHRoaXMudGFibGVSZWNvcmRzKSB7XHJcbiAgICAgIHRoaXMudGFibGVSZWNvcmRzLnJlbG9hZERhdGF0YWJsZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBzYWx2YXJlIGkgZGF0aSBpbnNlcml0aSBkYWxsJ3V0ZW50ZSB1bmEgdm9sdGEgY29uY2x1c2EgbGEgY29tcGlsYXppb25lIGRlbGxhIGZvcm0uXHJcbiAgICovXHJcbiAgc2F2ZU9yRXhpdEZvcm0ocmVjb3JkOiBSZWNvcmQpIHtcclxuICAgIHRoaXMuZGVidWdMb2coJ2xpc3Qtdmlldy1mb3JtLXJlY29yZCBzYXZlJywgcmVjb3JkKVxyXG4gICAgdGhpcy5zYXZlUmVjb3JkRXZlbnQuZW1pdChyZWNvcmQpO1xyXG4gIH1cclxuICBvbkFmdGVyU2F2ZVJlY29yZChldmVudCkge1xyXG4gICAgdGhpcy5kZWJ1Z0xvZygnbGlzdC12aWV3LWZvcm0tcmVjb3JkIGFmdGVyc2F2ZScsIGV2ZW50KVxyXG4gICAgdGhpcy5zYXZlUmVjb3JkRXZlbnQuZW1pdChldmVudCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gaW52b2NhdG8gcXVhbmRvIHNpIHZ1b2xlIGFnZ2l1bmdlcmUsIHZpc3VhbGl6emFyZSBvIG1vZGlmaWNhcmUgdW4gcmVjb3JkLlxyXG4gICAqIFNlIGwnZXZlbnRvIMOoIG51bGwgdnVvbCBkaXJlIGNoZSBzdGlhbW8gYWdnaXVuZ2VuZG8gdW4gbnVvdm8gcmVjb3JkIGFsdHJpbWVudGkgc2lhbW8gaW4gbW9kaWZpY2FcclxuICAgKiBvIHZpc3VhbGl6emF6aW9uZS4gSW4gcXVlc3RpIHVsdGltaSBkdWUgY2FzaSwgc2Ugw6ggc3RhdG8gY29uZmlndXJhdG8gdW4gZW5kcG9pbnQgcGVyIGlsIHJlY3VwZXJvXHJcbiAgICogZGVsIHJlY29yZCBjb21wbGV0byBhbGxvcmEgdmllbmUgZWZmZXR0dWF0YSB1bmEgY2hpYW1hdGEgYWwgc2VydmVyLCBhbHRyaW1lbnRpIHZpZW5lIHVzYXRvIGwnb2dnZXR0byBzZWxlemlvbmF0by5cclxuICAgKiBAcGFyYW0gZXZlbnQgT2dnZXR0byBjb24gZHVlIHByb3ByaWV0w6A6XHJcbiAgICogXCJyZWNvcmRcIiA9IG9nZ2V0dG8gZGEgbW9kaWZpY2FyZS92aXN1YWxpenphcmUsXHJcbiAgICogXCJvbmx5Vmlld1wiID0gYm9vbGVhbm8gKHNlIFRSVUUgc2lhbW8gaW4gdmlzdWFsaXp6YXppb25lIGFsdHJpbWVudGkgaW4gbW9kaWZpY2EpXHJcbiAgICovXHJcbiAgb25BZGRWaWV3RWRpdFJlY29yZDIoZXZlbnQ6IHsgcmVjb3JkOiBSZWNvcmQ7IG9ubHlWaWV3OiBib29sZWFuIH0pIHtcclxuICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICB0aGlzLnNlbGVjdGVkUmVjb3JkID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLm9ubHlWaWV3ID0gZXZlbnQub25seVZpZXc7XHJcblxyXG4gICAgdGhpcy5vdXRDb21waWxlQ29uZmlndXJhdGlvbnMuc2hvd0JhY2tCdXR0b24gPSBmYWxzZTtcclxuICAgIHRoaXMub3V0Q29tcGlsZUNvbmZpZ3VyYXRpb25zLnNob3dTYXZlQnV0dG9uID0gIWV2ZW50Lm9ubHlWaWV3O1xyXG4gICAgdGhpcy5vdXRDb21waWxlQ29uZmlndXJhdGlvbnMuc2hvd1RpdGxlID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKGV2ZW50ICE9IG51bGwpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uICYmXHJcbiAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3JkcyAmJlxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuR2V0QnlJREVuZFBvaW50XHJcbiAgICAgICkge1xyXG4gICAgICAgIC8vIHByZXBhcm8gbGEgdmVyc2lvbmUgY29ycmV0dGEgZGVsIGZvcm1cclxuICAgICAgICB2YXIgZHluYW1pY01vZHVsZVBhcmFtcyA9IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgUGFyYW1OYW1lOiBcIkVudElEXCIsXHJcbiAgICAgICAgICAgIFBhcmFtVmFsdWU6IGV2ZW50LnJlY29yZC5FbnRJRCxcclxuICAgICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBQYXJhbU5hbWU6IFwiVmVyc2lvblwiLFxyXG4gICAgICAgICAgICBQYXJhbVZhbHVlOiBldmVudC5yZWNvcmQuVmVyc2lvbixcclxuICAgICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIF07XHJcbiAgICAgICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3Jtcy5HZXRCeUlEQW5kVmVyc2lvbkVuZFBvaW50LFxyXG4gICAgICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgICAgIChyZXM6IEZvcm0pID0+IHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtID0gcmVzO1xyXG5cclxuICAgICAgICAgICAgLy8gcHJlcGFybyBpIGRhdGkgZGVsIHJlY29yZFxyXG4gICAgICAgICAgICB2YXIgZHluYW1pY1JlY29yZFBhcmFtcyA9IFtcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBQYXJhbU5hbWU6IFwiaWRcIixcclxuICAgICAgICAgICAgICAgIFBhcmFtVmFsdWU6IGV2ZW50LnJlY29yZC5JRCxcclxuICAgICAgICAgICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICAgICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuR2V0QnlJREVuZFBvaW50LFxyXG4gICAgICAgICAgICAgIGR5bmFtaWNSZWNvcmRQYXJhbXMsXHJcbiAgICAgICAgICAgICAgKHJlczogRHluUmVjb3JkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmVjb3JkID0gSlNPTi5wYXJzZShyZXMuU2VyaWFsaXplZFZhbHVlcyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmVjb3JkLklEID0gcmVzLklEO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZC5FbnRJRCA9IHJlcy5FbnRJRDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmQudXNlcklEID0gcmVzLnVzZXJJRDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmQuVmVyc2lvbiA9IHJlcy5WZXJzaW9uO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUmVjb3JkID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShldmVudC5yZWNvcmQpKTtcclxuICAgICAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGR5bmFtaWNNb2R1bGVQYXJhbXM6IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4gPVxyXG4gICAgICAgIG5ldyBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+KCk7XHJcbiAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMucHVzaCh7XHJcbiAgICAgICAgUGFyYW1OYW1lOiBcImlkXCIsXHJcbiAgICAgICAgUGFyYW1WYWx1ZTogdGhpcy5mb3JtSUQsXHJcbiAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3Jtcy5HZXRCeUlERW5kUG9pbnQsXHJcbiAgICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgICAocmVzOiBGb3JtKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmZvcm0gPSByZXM7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUmVjb3JkID0gbnVsbDtcclxuICAgICAgICAgIHRoaXMub25seVZpZXcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIChlcnIpID0+IHt9XHJcbiAgICAgICk7XHJcblxyXG4gICAgICAvLyB0aGlzLnNlbGVjdGVkUmVjb3JkID0gbnVsbDtcclxuICAgICAgLy8gdGhpcy5vbmx5VmlldyA9IGZhbHNlO1xyXG4gICAgICAvLyB0aGlzLnZpZXdNb2RlID0gRHluYW1pY01vZHVsZVZpZXdNb2RlRW51bS5DT01QSUxFO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgXHJcbiAgb3BlbkFkZFBvcHVwKCl7XHJcbiAgICBjb25zdCBkeW5hbWljTW9kdWxlUGFyYW1zOiBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+ID1cclxuICAgIG5ldyBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+KCk7XHJcbiAgZHluYW1pY01vZHVsZVBhcmFtcy5wdXNoKHtcclxuICAgIFBhcmFtTmFtZTogXCJpZFwiLFxyXG4gICAgUGFyYW1WYWx1ZTogdGhpcy5mb3JtSUQsXHJcbiAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICB9KTtcclxuICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLkdldEJ5SURFbmRQb2ludCxcclxuICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMsXHJcbiAgICAocmVzOiBGb3JtKSA9PiB7XHJcbiAgICAgIHRoaXMuZm9ybSA9IHJlcztcclxuICAgICAgdGhpcy5wb3B1cExvYWRlciA9IHRydWU7XHJcblxyXG4gICAgICB0aGlzLm9wZW5BZGREaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKHRoaXMub3BlbkFkZERpYWxvZywge1xyXG4gICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgICBtaW5XaWR0aDogXCIzMnJlbVwiLFxyXG4gICAgICAgIG1pbkhlaWdodDogXCIxMDBweFwiLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICB9LFxyXG4gICAgKGVycikgPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZyhcImVycm9yIFJ1bkVuZFBvaW50Q2FsbFwiLGVycik7XHJcbiAgICB9XHJcbiAgKTtcclxuICB9XHJcblxyXG4gIG9uQWRkU2F2ZVJlY29yZChyZWNvcmQ6IFJlY29yZCl7XHJcbiAgaWYgKHRoaXMub3BlbkFkZERpYWxvZ1JlZiAhPSBudWxsKXsgdGhpcy5vcGVuQWRkRGlhbG9nUmVmLmNsb3NlKCk7IH1cclxuICAgIHRoaXMuZ2V0UmVjb3Jkc0J5Rm9ybUlEKCk7XHJcbiAgICB0aGlzLnNhdmVSZWNvcmRFdmVudC5lbWl0KHJlY29yZCk7XHJcbiAgfVxyXG5cclxuICBvbkFkZEFmdGVyU2F2ZVJlY29yZChyZWNvcmQ6IFJlY29yZCl7XHJcbiAgaWYgKHRoaXMub3BlbkFkZERpYWxvZ1JlZiAhPSBudWxsKXsgdGhpcy5vcGVuQWRkRGlhbG9nUmVmLmNsb3NlKCk7IH1cclxuICAgIHRoaXMuZ2V0UmVjb3Jkc0J5Rm9ybUlEKCk7XHJcbiAgICB0aGlzLnNhdmVSZWNvcmRFdmVudC5lbWl0KHJlY29yZCk7XHJcbiAgfVxyXG5cclxuICBcclxufVxyXG5cclxuIiwiPG1hdC1jYXJkIGNsYXNzPVwibGlzdC12aWV3LWZvcm0tcmVjb3JkXCI+XHJcbiAgPG1hdC1jYXJkLWhlYWRlciAqbmdJZj1cInNob3dUaXRsZSB8fCBkZWZhdWx0TGlzdEFjdGlvbnMuYWRkXCIgY2xhc3M9XCJhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cclxuICAgIDxtYXQtY2FyZC10aXRsZSAqbmdJZj1cInNob3dUaXRsZVwiPkVsZW5jbyB7eyBmb3JtLk5hbWUgfX0gPC9tYXQtY2FyZC10aXRsZT5cclxuICAgIDxtYXQtY2FyZC1hY3Rpb25zICpuZ0lmPVwiZGVmYXVsdExpc3RBY3Rpb25zLmFkZFwiPlxyXG4gICAgICA8YnV0dG9uIFxyXG4gICAgICAgICpuZ0lmPVwiZGVmYXVsdExpc3RBY3Rpb25zLmFkZFwiXHJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiBcclxuICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvbiBcclxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIiBcclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAoY2xpY2spPVwib3BlbkFkZFBvcHVwKClcIj5cclxuICAgICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj5cclxuICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4XCI+QWdnaXVuZ2k8L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9tYXQtY2FyZC1hY3Rpb25zPlxyXG4gIDwvbWF0LWNhcmQtaGVhZGVyPlxyXG5cclxuICBcclxuICA8bWF0LWNhcmQtY29udGVudD5cclxuICAgIDxtYXQtYWNjb3JkaW9uIFtoaWRlVG9nZ2xlXT1cInRlc3RcIiBbbXVsdGldPVwidHJ1ZVwiPlxyXG4gICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCAqbmdGb3I9XCJsZXQgcGFuZWwgb2YgcGFuZWxzOyBpbmRleCBhcyBpXCIgXHJcbiAgICAgICAgW2V4cGFuZGVkXT1cInBhbmVsLmlzT3BlblwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cIjFcIiBcclxuICAgICAgICBbY2xhc3NdPVwicGFuZWwuaGlnaGxpZ2h0ZWQgPyAnZG1fcGFuZWxfaGlnaGxpZ2h0ZWQnIDogJzAnXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlclxyXG4gICAgICAgIChjbGljayk9XCJ0b2dnbGVQYW5lbChwYW5lbCwgcGFuZWwucmVjb3JkKVwiPlxyXG4gICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cclxuICAgICAgICAgICAge3sgZm9ybS5OYW1lIH19IHYue3sgcGFuZWwucmVjb3JkLlZlcnNpb24gfX0gLSB7eyBwYW5lbC5yZWNvcmQuQW5zd2VyRGF0ZSB8IGRhdGUgOiBcIkVFRUUsIGQgTU1NTSB5LCBIOm1tOnNzXCIgfX1cclxuICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxyXG4gICAgICAgICAgPCEtLSNyZWdpb24gQk9UVE9OSSBQRVIgTEUgQVpJT05JIC0tPlxyXG4gICAgICAgICAgPG1hdC1wYW5lbC1kZXNjcmlwdGlvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIGJ1dHRvbnNcIiBtYXQtaWNvbi1idXR0b24gY2xhc3M9XCJyZWNvcmQtaWNvbiB7e2J1dHRvbi5leHRyYUNsYXNzfX1cIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJidXR0b24uZm4ocGFuZWwsaSwkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1pY29uPnt7YnV0dG9uLmljb259fTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uICpuZ0Zvcj1cImxldCBidXR0b24gb2YgZXh0ZXJuYWxCdXR0b25zXCIgbWF0LWljb24tYnV0dG9uIGNsYXNzPVwicmVjb3JkLWljb24ge3tidXR0b24uZXh0cmFDbGFzc319XCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiZXh0ZXJuYWxDYWxsYmFjaygkZXZlbnQsYnV0dG9uLmZuLHBhbmVsLnJlY29yZClcIj5cclxuICAgICAgICAgICAgICA8bWF0LWljb24+e3tidXR0b24uaWNvbn19PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZXhhbXBsZS1zcGFjZXJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgPC9tYXQtcGFuZWwtZGVzY3JpcHRpb24+XHJcbiAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBCT1RUT05JIFBFUiBMRSBBWklPTkkgLS0+XHJcbiAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuXHJcbiAgICAgICAgPCEtLSAjcmVnaW9uIENPTlRFTlVUTyAtLT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGFuZWwucGFnZVN0YXRlICE9IG51bGxcIj5cclxuICAgICAgICAgIDxsaWItc2luZ2xlLXJlY29yZFxyXG4gICAgICAgICAgICBbZGVidWdNb2RlXT1cImRlYnVnTW9kZVwiXHJcbiAgICAgICAgICAgIFtvbmx5Vmlld109XCJvbmx5Vmlld1wiXHJcbiAgICAgICAgICAgIFtyZWNvcmRdID0gXCJwYW5lbC5yZWNvcmRcIiBcclxuICAgICAgICAgICAgW2VuZFBvaW50Q29uZmlndXJhdGlvbl0gPSBcImVuZFBvaW50Q29uZmlndXJhdGlvblwiXHJcbiAgICAgICAgICAgIFtmb3JtXT1cImZvcm1cIlxyXG4gICAgICAgICAgICBbdXNlcklEXT1cInVzZXJJRFwiXHJcbiAgICAgICAgICAgIFtvdXRDb21waWxlQ29uZmlndXJhdGlvbnNdPVwib3V0Q29tcGlsZUNvbmZpZ3VyYXRpb25zXCJcclxuICAgICAgICAgICAgW3BhZ2VTdGF0ZV09XCJwYW5lbC5wYWdlU3RhdGVcIlxyXG4gICAgICAgICAgICAoc2F2ZVJlY29yZEV2ZW50KT1cInNhdmVPckV4aXRGb3JtKCRldmVudClcIlxyXG4gICAgICAgICAgICAoYWZ0ZXJTYXZlUmVjb3JkRXZlbnQpPVwib25BZnRlclNhdmVSZWNvcmQoJGV2ZW50KVwiXHJcbiAgICAgICAgICA+XHJcblxyXG4gICAgICAgICAgPC9saWItc2luZ2xlLXJlY29yZD5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8IS0tI2VuZHJlZ2lvbiBDT05URU5VVE8gLS0+XHJcbiAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cclxuICAgIDwvbWF0LWFjY29yZGlvbj5cclxuXHJcblxyXG4gIDwvbWF0LWNhcmQtY29udGVudD5cclxuICA8bWF0LWNhcmQtZm9vdGVyPlxyXG4gIDwvbWF0LWNhcmQtZm9vdGVyPlxyXG48L21hdC1jYXJkPlxyXG5cclxuPCEtLSBESUFMT0cgUkVDSVBJRU5UUyBFTUFJTCBQRVIgRklSTUEgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjb3BlbkFkZERpYWxvZz5cclxuICA8bWF0LWNhcmQgY2xhc3M9XCJjYXJkLWRlZmF1bHQgb3ZlcmxheS1jYXJkIGNhcmQtaW5tb2RhbC10cnVlXCI+XHJcbiAgICA8bWF0LWNhcmQtY29udGVudD5cclxuXHJcbiAgICAgIDxhZGQtZm9ybS1yZWNvcmRcclxuICAgICAgICBjbGFzcz1cImR5bmFtaWMtbW9kdWxlLWNvbXBpbGVcIlxyXG4gICAgICAgIFtkZWJ1Z01vZGVdPVwiZGVidWdNb2RlXCJcclxuICAgICAgICBbZm9ybUlEXT1cImZvcm1JRFwiXHJcbiAgICAgICAgW29ubHlWaWV3XT1cImZhbHNlXCJcclxuXHJcbiAgICAgICAgW2VuZFBvaW50Q29uZmlndXJhdGlvbl09XCJlbmRQb2ludENvbmZpZ3VyYXRpb25cIlxyXG4gICAgICAgIFt1c2VySURdPVwidXNlcklEXCJcclxuXHJcbiAgICAgICAgW2NvbmZpZ3VyYXRpb25zXT1cImNvbXBpbGVDb25maWd1cmF0aW9uc1wiXHJcblxyXG4gICAgICAgIChzYXZlUmVjb3JkRXZlbnQpPVwib25BZGRTYXZlUmVjb3JkKCRldmVudClcIlxyXG4gICAgICAgIChhZnRlclNhdmVSZWNvcmRFdmVudCk9XCJvbkFkZEFmdGVyU2F2ZVJlY29yZCgkZXZlbnQpXCJcclxuICAgICAgPlxyXG4gICAgICA8L2FkZC1mb3JtLXJlY29yZD5cclxuXHJcbiAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgPC9tYXQtY2FyZD5cclxuPC9uZy10ZW1wbGF0ZT4iXX0=
@@ -36,7 +36,7 @@ export class SingleRecordComponent {
36
36
  }
37
37
  }
38
38
  SingleRecordComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SingleRecordComponent, deps: [{ token: i1.UtilityHelperService }], target: i0.ɵɵFactoryTarget.Component });
39
- SingleRecordComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: SingleRecordComponent, selector: "lib-single-record", inputs: { debugMode: "debugMode", endPointConfiguration: "endPointConfiguration", record: "record", pageState: "pageState", userID: "userID", form: "form", showBackButton: "showBackButton", outCompileConfigurations: "outCompileConfigurations", onlyView: "onlyView" }, outputs: { saveRecordEvent: "saveRecordEvent", afterSaveRecordEvent: "afterSaveRecordEvent" }, ngImport: i0, template: "<ng-container *ngIf=\"loaded && record && pageState\">\r\n\r\n <ng-container *ngIf=\"pageState == 'visualizzaContenuto'\">\r\n <view-form-record \r\n [debugMode]=\"debugMode\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [record]=\"record\" \r\n [showBackButton]=\"false\">\r\n </view-form-record>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"pageState == 'modificaContenuto'\">\r\n <add-form-record\r\n [debugMode]=\"debugMode\"\r\n [onlyView]=\"onlyView\"\r\n [form]=\"form\"\r\n [userID]=\"userID\"\r\n [record]=\"record\"\r\n\r\n [configurations]=\"outCompileConfigurations\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n\r\n (saveRecordEvent)=\"saveOrExitForm($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n >\r\n </add-form-record>\r\n </ng-container>\r\n\r\n</ng-container>", styles: [""], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.AddFormRecordComponent, selector: "add-form-record", inputs: ["debugMode", "configurations", "endPointConfiguration", "userID", "formID", "form", "record", "onlyView"], outputs: ["saveRecordEvent", "afterSaveRecordEvent"] }, { kind: "component", type: i4.ViewFormRecordComponent, selector: "view-form-record", inputs: ["debugMode", "endPointConfiguration", "record", "showBackButton"], outputs: ["goBackEvent"] }] });
39
+ SingleRecordComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: SingleRecordComponent, selector: "lib-single-record", inputs: { debugMode: "debugMode", endPointConfiguration: "endPointConfiguration", record: "record", pageState: "pageState", userID: "userID", form: "form", showBackButton: "showBackButton", outCompileConfigurations: "outCompileConfigurations", onlyView: "onlyView" }, outputs: { saveRecordEvent: "saveRecordEvent", afterSaveRecordEvent: "afterSaveRecordEvent" }, ngImport: i0, template: "<ng-container *ngIf=\"loaded && record && pageState\">\r\n\r\n <ng-container *ngIf=\"pageState == 'visualizzaContenuto'\">\r\n <view-form-record \r\n [debugMode]=\"debugMode\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [record]=\"record\" \r\n [showBackButton]=\"false\">\r\n </view-form-record>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"pageState == 'modificaContenuto'\">\r\n <add-form-record\r\n [debugMode]=\"debugMode\"\r\n [onlyView]=\"onlyView\"\r\n [form]=\"form\"\r\n [userID]=\"userID\"\r\n [record]=\"record\"\r\n\r\n [configurations]=\"outCompileConfigurations\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n\r\n (saveRecordEvent)=\"saveOrExitForm($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n >\r\n </add-form-record>\r\n </ng-container>\r\n\r\n</ng-container>", styles: [""], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.AddFormRecordComponent, selector: "add-form-record", inputs: ["debugMode", "configurations", "endPointConfiguration", "userID", "formID", "form", "record", "onlyView", "isDuplicate"], outputs: ["saveRecordEvent", "afterSaveRecordEvent"] }, { kind: "component", type: i4.ViewFormRecordComponent, selector: "view-form-record", inputs: ["debugMode", "endPointConfiguration", "record", "showBackButton"], outputs: ["goBackEvent"] }] });
40
40
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SingleRecordComponent, decorators: [{
41
41
  type: Component,
42
42
  args: [{ selector: 'lib-single-record', template: "<ng-container *ngIf=\"loaded && record && pageState\">\r\n\r\n <ng-container *ngIf=\"pageState == 'visualizzaContenuto'\">\r\n <view-form-record \r\n [debugMode]=\"debugMode\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [record]=\"record\" \r\n [showBackButton]=\"false\">\r\n </view-form-record>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"pageState == 'modificaContenuto'\">\r\n <add-form-record\r\n [debugMode]=\"debugMode\"\r\n [onlyView]=\"onlyView\"\r\n [form]=\"form\"\r\n [userID]=\"userID\"\r\n [record]=\"record\"\r\n\r\n [configurations]=\"outCompileConfigurations\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n\r\n (saveRecordEvent)=\"saveOrExitForm($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n >\r\n </add-form-record>\r\n </ng-container>\r\n\r\n</ng-container>" }]
@@ -423,7 +423,7 @@ export class FilterFormStatisticComponent {
423
423
  }
424
424
  }
425
425
  FilterFormStatisticComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FilterFormStatisticComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.UtilityHelperService }], target: i0.ɵɵFactoryTarget.Component });
426
- FilterFormStatisticComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: FilterFormStatisticComponent, selector: "filter-form-statistic", inputs: { debugMode: "debugMode", configurations: "configurations", endPointConfiguration: "endPointConfiguration", userID: "userID", externalButtons: "externalButtons", formID: "formID", form: "form", record: "record", onlyView: "onlyView", defaultListActions: "defaultListActions", filterResultViewMode: "filterResultViewMode" }, outputs: { saveRecordEvent: "saveRecordEvent", afterSaveRecordEvent: "afterSaveRecordEvent", afterFilter: "afterFilter" }, 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\"\r\n (click)=\"ApplyFilter()\">\r\n Esegui Filtro\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\"\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: ["debugMode", "configurations", "compileConfigurations", "endPointConfiguration", "userID", "formID", "form", "defaultListViewFunction", "externalButtons", "onlyView", "records"], outputs: ["onAddViewEditRecord", "onDeleteRecord", "onDuplicateRecord", "saveRecordEvent", "afterSaveRecordEvent"] }, { kind: "component", type: i7.DynamicModuleFilterFixComponent, selector: "dynamic-module-filter-fix", inputs: ["field", "form", "record"], outputs: ["filterChange"] }] });
426
+ FilterFormStatisticComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: FilterFormStatisticComponent, selector: "filter-form-statistic", inputs: { debugMode: "debugMode", configurations: "configurations", endPointConfiguration: "endPointConfiguration", userID: "userID", externalButtons: "externalButtons", formID: "formID", form: "form", record: "record", onlyView: "onlyView", defaultListActions: "defaultListActions", filterResultViewMode: "filterResultViewMode" }, outputs: { saveRecordEvent: "saveRecordEvent", afterSaveRecordEvent: "afterSaveRecordEvent", afterFilter: "afterFilter" }, 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\"\r\n (click)=\"ApplyFilter()\">\r\n Esegui Filtro\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\"\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: ["debugMode", "configurations", "compileConfigurations", "endPointConfiguration", "userID", "formID", "form", "defaultListViewFunction", "externalButtons", "onlyView", "records", "highlightFilter"], outputs: ["onAddViewEditRecord", "onDeleteRecord", "onDuplicateRecord", "saveRecordEvent", "afterSaveRecordEvent"] }, { kind: "component", type: i7.DynamicModuleFilterFixComponent, selector: "dynamic-module-filter-fix", inputs: ["field", "form", "record"], outputs: ["filterChange"] }] });
427
427
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FilterFormStatisticComponent, decorators: [{
428
428
  type: Component,
429
429
  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\"\r\n (click)=\"ApplyFilter()\">\r\n Esegui Filtro\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\"\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"] }]
@@ -7,4 +7,4 @@ export class DynRecord {
7
7
  }
8
8
  export class RecordButton {
9
9
  }
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXFwLWR5bmFtaWMtbW9kdWxlL3NyYy9saWIvbW9kZWxzL3JlY29yZC5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sTUFBTTtDQVFsQjtBQUVELE1BQU0sT0FBTyxTQUFTO0lBQXRCO1FBS0ksV0FBTSxHQUE0QixFQUFFLENBQUM7SUFNekMsQ0FBQztDQUFBO0FBRUQsTUFBTSxPQUFPLFlBQVk7Q0FNeEIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgUmVjb3JkIHtcclxuICAgIElEOiBzdHJpbmc7XHJcbiAgICBFbnRJRDogc3RyaW5nO1xyXG4gICAgVmVyc2lvbjogbnVtYmVyO1xyXG4gICAgdXNlcklEOiBzdHJpbmc7XHJcbiAgICBBbnN3ZXJEYXRlOiBzdHJpbmc7XHJcbiAgICBIVE1McmVhZGFibGVWYWx1ZXM6IHN0cmluZztcclxuICAgIFtrZXk6IHN0cmluZ106IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIER5blJlY29yZCB7XHJcbiAgICBJRDogc3RyaW5nO1xyXG4gICAgRW50SUQ6IHN0cmluZztcclxuICAgIFZlcnNpb246IG51bWJlcjtcclxuICAgIHVzZXJJRDogc3RyaW5nO1xyXG4gICAgVmFsdWVzOiB7IFtrZXk6IHN0cmluZ106IGFueTsgfSA9IHt9O1xyXG4gICAgU2VyaWFsaXplZFZhbHVlczogc3RyaW5nO1xyXG4gICAgSFRNTHJlYWRhYmxlVmFsdWVzOiBzdHJpbmc7XHJcbiAgICBBbnN3ZXJEYXRlOiBzdHJpbmc7XHJcbiAgICBBZGRpdGlvbmFsUGFyYW1zOiBzdHJpbmc7XHJcbiAgICBQcmVmaWx0ZXJQYXJhbXM6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFJlY29yZEJ1dHRvbiB7XHJcblx0cHVibGljIGljb246IHN0cmluZztcclxuXHRwdWJsaWMgdGV4dDogc3RyaW5nO1xyXG5cdHB1YmxpYyB2aXNpYmxlOiBib29sZWFuO1xyXG5cdHB1YmxpYyBmbjogRnVuY3Rpb247XHJcblx0cHVibGljIGV4dHJhQ2xhc3M6IHN0cmluZzsgXHJcbn0iXX0=
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXFwLWR5bmFtaWMtbW9kdWxlL3NyYy9saWIvbW9kZWxzL3JlY29yZC5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sTUFBTTtDQVNsQjtBQUVELE1BQU0sT0FBTyxTQUFTO0lBQXRCO1FBS0ksV0FBTSxHQUE0QixFQUFFLENBQUM7SUFNekMsQ0FBQztDQUFBO0FBRUQsTUFBTSxPQUFPLFlBQVk7Q0FNeEIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgUmVjb3JkIHtcclxuICAgIElEOiBzdHJpbmc7XHJcbiAgICBFbnRJRDogc3RyaW5nO1xyXG4gICAgVmVyc2lvbjogbnVtYmVyO1xyXG4gICAgdXNlcklEOiBzdHJpbmc7XHJcbiAgICBBbnN3ZXJEYXRlOiBzdHJpbmc7XHJcbiAgICBIVE1McmVhZGFibGVWYWx1ZXM6IHN0cmluZztcclxuICAgIEFkZGl0aW9uYWxQYXJhbXM6IGFueTtcclxuICAgIFtrZXk6IHN0cmluZ106IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIER5blJlY29yZCB7XHJcbiAgICBJRDogc3RyaW5nO1xyXG4gICAgRW50SUQ6IHN0cmluZztcclxuICAgIFZlcnNpb246IG51bWJlcjtcclxuICAgIHVzZXJJRDogc3RyaW5nO1xyXG4gICAgVmFsdWVzOiB7IFtrZXk6IHN0cmluZ106IGFueTsgfSA9IHt9O1xyXG4gICAgU2VyaWFsaXplZFZhbHVlczogc3RyaW5nO1xyXG4gICAgSFRNTHJlYWRhYmxlVmFsdWVzOiBzdHJpbmc7XHJcbiAgICBBbnN3ZXJEYXRlOiBzdHJpbmc7XHJcbiAgICBBZGRpdGlvbmFsUGFyYW1zOiBzdHJpbmc7XHJcbiAgICBQcmVmaWx0ZXJQYXJhbXM6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFJlY29yZEJ1dHRvbiB7XHJcblx0cHVibGljIGljb246IHN0cmluZztcclxuXHRwdWJsaWMgdGV4dDogc3RyaW5nO1xyXG5cdHB1YmxpYyB2aXNpYmxlOiBib29sZWFuO1xyXG5cdHB1YmxpYyBmbjogRnVuY3Rpb247XHJcblx0cHVibGljIGV4dHJhQ2xhc3M6IHN0cmluZzsgXHJcbn0iXX0=