@eqproject/eqp-dynamic-module 2.10.30 → 2.10.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/components/exported/eqp-dynamic-module/eqp-dynamic-module.component.mjs +4 -1
- package/esm2020/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.mjs +13 -3
- package/esm2020/lib/components/private/add-formula-field/add-formula-field.component.mjs +45 -7
- package/esm2020/lib/components/private/field-templates/image-field-selector-template/image-field-selector-template.component.mjs +13 -5
- package/esm2020/lib/components/private/form-records/list-view-form-record/list-view-form-record.component.mjs +3 -7
- package/esm2020/lib/components/private/graphs/graph/graph.component.mjs +3 -3
- package/fesm2015/eqproject-eqp-dynamic-module.mjs +74 -20
- package/fesm2015/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/fesm2020/eqproject-eqp-dynamic-module.mjs +73 -20
- package/fesm2020/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.d.ts +4 -0
- package/lib/components/private/add-formula-field/add-formula-field.component.d.ts +3 -1
- package/lib/components/private/field-templates/image-field-selector-template/image-field-selector-template.component.d.ts +1 -0
- package/package.json +1 -1
|
@@ -412,14 +412,10 @@ export class ListViewFormRecordComponent {
|
|
|
412
412
|
tmpRec.AdditionalParams = r.AdditionalParams != "" && r.AdditionalParams != null ? JSON.parse(r.AdditionalParams) : "";
|
|
413
413
|
tmpRec.AdditionalInfo = r.AdditionalInfo != "" && r.AdditionalInfo != null ? JSON.parse(r.AdditionalInfo) : "";
|
|
414
414
|
var foundkey = true;
|
|
415
|
-
console.log("HERE 1");
|
|
416
415
|
if (this.contestualizationParams != null) {
|
|
417
|
-
console.log("HERE 2");
|
|
418
416
|
if (tmpRec.AdditionalParams != null) {
|
|
419
|
-
console.log("HERE 3");
|
|
420
417
|
Object.keys(this.contestualizationParams).forEach((key) => {
|
|
421
418
|
if (!tmpRec.AdditionalParams.hasOwnProperty(key) || this.contestualizationParams[key].indexOf(tmpRec.AdditionalParams[key]) == -1) {
|
|
422
|
-
console.log("HERE 4");
|
|
423
419
|
foundkey = false;
|
|
424
420
|
}
|
|
425
421
|
});
|
|
@@ -871,10 +867,10 @@ export class ListViewFormRecordComponent {
|
|
|
871
867
|
}
|
|
872
868
|
}
|
|
873
869
|
ListViewFormRecordComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ListViewFormRecordComponent, deps: [{ token: i1.UtilityHelperService }, { token: i0.ChangeDetectorRef }, { token: i2.MatDialog }, { token: i3.Router }, { token: i4.dbDateService }, { token: i5.DatePipe }], target: i0.ɵɵFactoryTarget.Component });
|
|
874
|
-
ListViewFormRecordComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ListViewFormRecordComponent, selector: "list-view-form-record", inputs: { configurations: "configurations", compileConfigurations: "compileConfigurations", endPointConfiguration: "endPointConfiguration", userID: "userID", formID: "formID", orgaID: "orgaID", form: "form", defaultListViewFunction: "defaultListViewFunction", externalButtons: "externalButtons", actionButtons: "actionButtons", onlyView: "onlyView", records: "records", highlightFilter: "highlightFilter", QueryEditorComponent: "QueryEditorComponent", formulaObject: "formulaObject", contestualizationParams: "contestualizationParams" }, outputs: { onAddViewEditRecord: "onAddViewEditRecord", onDeleteRecord: "onDeleteRecord", saveRecordEvent: "saveRecordEvent", afterSaveRecordEvent: "afterSaveRecordEvent", dragStarted: "dragStarted", dragReleased: "dragReleased", out: "out", fireTrigger: "fireTrigger", clickDragIndicator: "clickDragIndicator" }, viewQueries: [{ propertyName: "tableRecords", first: true, predicate: ["tableRecords"], descendants: true, static: true }, { propertyName: "openAddDialog", first: true, predicate: ["openAddDialog"], descendants: true }, { propertyName: "openGraphDialog", first: true, predicate: ["openGraphDialog"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<mat-card class=\"list-view-form-record\">\n <mat-card-header *ngIf=\"this.configurations.showTitle || defaultListActions.add\" class=\"align-items-center justify-content-between\">\n <mat-card-title *ngIf=\"this.configurations.showTitle && loadedform\">Modulo {{ form.Name }} </mat-card-title>\n <mat-card-actions *ngIf=\"defaultListActions.add || defaultListActions.graphs\">\n\n <span *ngIf=\"visibleActionButtons.length > 0\">\n <button \n *ngFor=\"let actionButton in visibleActionButtons\" (click)=\"generateAction(actionButton)\"\n class=\"btn btn-primary mr-2\" \n mat-raised-button \n color=\"primary\" \n type=\"button\">\n <mat-icon *ngIf=\"actionButton.Icon\">{{actionButton.Icon}}</mat-icon>\n <span style=\"margin-left: 10px\">{{actionButton.label}}</span>\n </button>\n </span> \n\n <button \n *ngIf=\"isListView\"\n class=\"btn btn-primary mr-2\" \n mat-raised-button \n color=\"primary\" \n type=\"button\"\n (click)=\"openTabellar()\">\n <mat-icon>table</mat-icon>\n <span style=\"margin-left: 10px\">Tabellare</span>\n </button>\n\n <button \n *ngIf=\"isTabellar\"\n class=\"btn btn-primary mr-2\" \n mat-raised-button \n color=\"primary\" \n type=\"button\"\n (click)=\"openListView()\">\n <mat-icon>list</mat-icon>\n <span style=\"margin-left: 10px\">Lista</span>\n </button> \n\n <button \n class=\"btn btn-primary mr-2\" \n mat-raised-button \n color=\"primary\" \n type=\"button\"\n (click)=\"openAll()\"\n *ngIf=\"isListView\">\n <mat-icon *ngIf=\"!isFullOpened\">expand_more</mat-icon>\n <span style=\"margin-left: 10px\" *ngIf=\"!isFullOpened\">Apri tutto</span>\n\n <mat-icon *ngIf=\"isFullOpened && isListView\">expand_less</mat-icon>\n <span style=\"margin-left: 10px\" *ngIf=\"isFullOpened\">Chiudi tutto</span>\n </button> \n <button \n *ngIf=\"defaultListActions.graphs\"\n class=\"btn btn-primary mr-2\" \n mat-raised-button \n color=\"primary\" \n type=\"button\"\n (click)=\"openGraphs()\">\n <mat-icon>pie_chart</mat-icon>\n <span style=\"margin-left: 10px\">Grafici</span>\n </button>\n <button \n *ngIf=\"defaultListActions.add\"\n class=\"btn btn-primary\" \n mat-raised-button \n color=\"primary\" \n type=\"button\"\n (click)=\"openAddPopup()\">\n <mat-icon>add</mat-icon>\n <span style=\"margin-left: 10px\">Aggiungi</span>\n </button> \n </mat-card-actions>\n </mat-card-header>\n\n \n <mat-card-content>\n\n <div *ngIf=\"isTabellar\">\n \n <hlist-form-record\n class=\"dynamic-module-hlist\"\n [formID]=\"formID\"\n [formulaObject]=\"formulaObject\"\n\n [endPointConfiguration]=\"endPointConfiguration\"\n [actionButtons]=\"actionButtons\"\n\n [configurations]=\"configurations\"\n [externalButtons]=\"externalButtons\"\n\n >\n </hlist-form-record>\n\n <!-- <div class=\"row\">\n <div class=\"col-sm-12 col-md-3\">\n <tmw-datetimepicker class=\"date\" [placeholder]=\"'Periodo inizio'\" [label]=\"'Periodo inizio'\"\n [(ngModelInput)]=\"minperiod\"\n [pickerMode]=\"modes.DATEPICKER\" [outputFormat]=\"'DD/MM/YYYY'\" [showSeconds]=\"false\">\n </tmw-datetimepicker>\n </div>\n <div class=\"col-sm-12 col-md-3\">\n <tmw-datetimepicker class=\"date\" [placeholder]=\"'Periodo fine'\" [label]=\"'Periodo fine'\"\n [(ngModelInput)]=\"maxperiod\"\n [pickerMode]=\"modes.DATEPICKER\" [outputFormat]=\"'DD/MM/YYYY'\" [showSeconds]=\"false\">\n </tmw-datetimepicker>\n </div> \n <div class=\"col-sm-12 col-md-3 mt-2\">\n <eqp-select [arrayData]=\"tabellarFields\" [(ngModelInput)]=\"selectedTabellarFields\" [placeholder]=\"'Selezione dei campi'\"\n [arrayKeyProperty]=\"'Description'\" [arrayValueProperty]=\"'TextDescription'\" [isMultiSelect]=\"true\" class=\"eqp-form-field\">\n </eqp-select>\n </div> \n <div class=\"col-sm-12 col-md-3 mt-2\">\n <button\n [disabled]=\"selectedTabellarFields == null || selectedTabellarFields.length == 0\"\n class=\"btn btn-graph-generate button-next me-2\"\n mat-raised-button\n color=\"primary\"\n (click)=\"generateTabellar()\"\n >\n Genera\n </button>\n </div> \n </div> -->\n\n <eqp-table id=\"tabellar\" class=\"list-form-record-table\" #tableRecords *ngIf=\"tabellarConditionLoaded\" [highlightColor]=\"'transparent'\"\n [data]=\"tabellarValues\" [columns]=\"tabellarColumns\" [matPaginatorSize]=\"1000\" [matPaginatorLength]=\"[1000]\"></eqp-table>\n </div>\n\n\n\n <mat-accordion #doneList=\"cdkDropList\" cdkDropList [cdkDropListConnectedTo]=\"[todoList]\" [hideToggle]=\"test\" [multi]=\"true\" class=\"df-list-view-accordion\" *ngIf=\"isListView\">\n <mat-expansion-panel *ngFor=\"let panel of panels; index as i\" \n [expanded]=\"panel.isOpen\"\n [disabled]=\"1\" \n [class]=\"panel.highlighted ? 'dm_panel_highlighted' : '0'\"\n >\n <mat-expansion-panel-header \n (click)=\"togglePanel(panel, panel.record)\">\n <mat-panel-title *ngIf=\"configurations.isDraggableListView\">\n <!-- <mat-icon (click)=\"onClickDragIndicator([panel.record,form])\" class=\"click-icon\" *ngIf=\"configurations.isDraggableListView\">drag_indicator</mat-icon> {{ !this.configurations.showTitle ? form.Name : \"\" }} v.{{ panel.record.Version }} - {{ printAdditionalInfo(panel.record) }} -->\n <i class=\"drag-icon fa-solid fa-file-export\" (click)=\"onClickDragIndicator([panel.record,form])\" *ngIf=\"configurations.isDraggableListView\"></i> {{ !this.configurations.showTitle ? form.Name : \"\" }} v.{{ panel.record.Version }} - {{ printAdditionalInfo(panel.record) }}\n </mat-panel-title>\n <mat-panel-title *ngIf=\"!configurations.isDraggableListView\">\n {{ !this.configurations.showTitle ? form.Name : \"\" }} v.{{ panel.record.Version }} - {{ printAdditionalInfo(panel.record) }}\n </mat-panel-title> \n <!--#region BOTTONI PER LE AZIONI -->\n <mat-panel-description>\n <button *ngFor=\"let button of buttons\" \n mat-icon-button \n id=\"p-{{panel.record.ID}}-{{button.icon}}\"\n class=\"record-icon {{button.extraClass}}\" \n [matTooltip]=\"button.text\"\n [hidden]=\"button.icon == 'file_copy' && (panels.length == 0 || panel.record.Version != panels[0].record.Version)\"\n (click)=\"button.fn(panel,i,$event)\">\n <mat-icon>{{button.icon}}</mat-icon>\n </button>\n <button *ngFor=\"let button of externalButtons\" \n mat-icon-button \n class=\"record-icon {{button.extraClass}}\"\n [matTooltip]=\"button.text\"\n (click)=\"externalCallback($event,button.fn,panel.record)\">\n <mat-icon>{{button.icon}}</mat-icon>\n </button> \n <span class=\"example-spacer\"></span>\n \n </mat-panel-description>\n <!--#endregion BOTTONI PER LE AZIONI -->\n </mat-expansion-panel-header>\n\n <!-- #region CONTENUTO -->\n <ng-container *ngIf=\"panel.pageState != null\">\n\n <lib-single-record\n *ngIf=\"libSingleLoaded\"\n [onlyView]=\"onlyView\"\n [record] = \"panel.record\" \n [formulaObject]=\"formulaObject\"\n [endPointConfiguration] = \"endPointConfiguration\"\n [form]=\"form\"\n [userID]=\"userID\"\n [QueryEditorComponent]=\"QueryEditorComponent\"\n [outCompileConfigurations]=\"outCompileConfigurations\"\n [pageState]=\"panel.pageState\"\n [actionButtons]=\"actionButtons\"\n (out)=\"onExternalComponentOut($event)\"\n (saveRecordEvent)=\"saveOrExitForm($event)\"\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\n (fireTrigger)=\"onFireTrigger($event)\"\n >\n\n </lib-single-record>\n </ng-container>\n <!--#endregion CONTENUTO -->\n </mat-expansion-panel>\n </mat-accordion>\n\n\n </mat-card-content>\n <mat-card-footer>\n </mat-card-footer>\n</mat-card>\n\n<!--#region DIALOG AGGIUNTA RISPOSTA -->\n<ng-template #openAddDialog>\n <mat-card class=\"card-default overlay-card card-inmodal-true\">\n <mat-card-content>\n\n <add-form-record\n class=\"dynamic-module-compile\"\n [formID]=\"formID\"\n [orgaID]=\"orgaID\"\n [onlyView]=\"false\"\n [record]=\"selectedRecord\"\n [formulaObject]=\"formulaObject\"\n [isDuplicate]=\"isDuplicating\"\n [showTitle]=\"this.configurations.showTitle\"\n \n [QueryEditorComponent]=\"QueryEditorComponent\"\n [endPointConfiguration]=\"endPointConfiguration\"\n [userID]=\"userID\"\n\n [configurations]=\"compileConfigurations\"\n [actionButtons]=\"actionButtons\"\n\n (out)=\"onExternalComponentOut($event)\"\n (saveRecordEvent)=\"onAddSaveRecord($event)\"\n (afterSaveRecordEvent)=\"onAddAfterSaveRecord($event)\"\n (fireTrigger)=\"onFireTrigger($event)\"\n >\n </add-form-record>\n\n </mat-card-content>\n </mat-card>\n</ng-template>\n<!--#endregion DIALOG AGGIUNTA RISPOSTA -->\n\n<!--#region DIALOG VISUALIZZAZIONE GRAFICI -->\n<ng-template #openGraphDialog>\n <mat-card class=\"card-default overlay-card card-inmodal-true graphCard\">\n \n <mat-card-header class=\"align-items-center justify-content-between\">\n <mat-card-title>\n <div class=\"row eqp-dynamic-module-title graph-header\">\n <div class=\"col-md-12\">\n <span>Grafico {{ form.Name }} </span>\n </div>\n </div>\n </mat-card-title>\n <mat-card-actions>\n <button \n class=\"btn btn-primary mr-2\" \n mat-raised-button \n color=\"primary\" \n type=\"button\"\n (click)=\"closeGraphs()\">\n <span class=\"material-icons\">\n arrow_back\n </span>\n <span style=\"margin-left: 10px\">Indietro</span>\n </button>\n </mat-card-actions>\n </mat-card-header>\n <mat-card-content>\n\n <graphs\n [formID]=\"formID\"\n [userID]=\"userID\"\n [actionButtons]=\"actionButtons\"\n [configurations] = \"outCompileConfigurations\"\n [endPointConfiguration] = \"endPointConfiguration\"\n >\n </graphs>\n\n </mat-card-content>\n </mat-card>\n</ng-template>\n<!--#endregion DIALOG VISUALIZZAZIONE GRAFICI -->\n", styles: ["::ng-deep .error-color{color:var(--danger)}::ng-deep .success-color{color:var(--success)}::ng-deep .df-list-view-accordion .mat-expansion-panel-header-description{flex-grow:0!important}::ng-deep .mat-expansion-panel-header[aria-disabled=true]{color:#0000008a}.drag-icon{cursor:move;margin-right:10px}.click-icon{cursor:pointer;margin-right:10px}table{border-collapse:collapse}table td{border:1px solid black}table th{border:1px solid black;background-color:gray;color:#fff}\n"], dependencies: [{ kind: "component", type: i6.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: i6.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i7.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i7.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i7.MatCardContent, selector: "mat-card-content" }, { kind: "directive", type: i7.MatCardFooter, selector: "mat-card-footer" }, { kind: "component", type: i7.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i7.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: i8.MatAccordion, selector: "mat-accordion", inputs: ["multi", "hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i8.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i8.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }, { kind: "directive", type: i8.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "directive", type: i8.MatExpansionPanelDescription, selector: "mat-panel-description" }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i11.EqpTableComponent, selector: "eqp-table" }, { kind: "directive", type: i12.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "component", type: i13.HListFormRecordComponent, selector: "hlist-form-record", inputs: ["configurations", "endPointConfiguration", "formID", "form", "formulaObject", "externalButtons", "actionButtons"], outputs: ["onViewRecord", "onAddViewEditRecord", "onDeleteRecord", "onAfterDeleteRecord"] }, { kind: "component", type: i14.AddFormRecordComponent, selector: "add-form-record", inputs: ["configurations", "endPointConfiguration", "userID", "orgaID", "formID", "form", "record", "formulaObject", "onlyView", "isDuplicate", "inConfig", "showAllFields", "showTitle", "actionButtons", "QueryEditorComponent"], outputs: ["saveRecordEvent", "afterSaveRecordEvent", "out", "fireTrigger"] }, { kind: "component", type: i15.SingleRecordComponent, selector: "lib-single-record", inputs: ["endPointConfiguration", "record", "formulaObject", "pageState", "userID", "form", "showBackButton", "outCompileConfigurations", "onlyView", "actionButtons", "QueryEditorComponent"], outputs: ["saveRecordEvent", "afterSaveRecordEvent", "out", "fireTrigger"] }, { kind: "component", type: i16.GraphsComponent, selector: "graphs", inputs: ["configurations", "endPointConfiguration", "userID", "formID", "form", "actionButtons"], outputs: ["fireTrigger"] }] });
|
|
870
|
+
ListViewFormRecordComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ListViewFormRecordComponent, selector: "list-view-form-record", inputs: { configurations: "configurations", compileConfigurations: "compileConfigurations", endPointConfiguration: "endPointConfiguration", userID: "userID", formID: "formID", orgaID: "orgaID", form: "form", defaultListViewFunction: "defaultListViewFunction", externalButtons: "externalButtons", actionButtons: "actionButtons", onlyView: "onlyView", records: "records", highlightFilter: "highlightFilter", QueryEditorComponent: "QueryEditorComponent", formulaObject: "formulaObject", contestualizationParams: "contestualizationParams" }, outputs: { onAddViewEditRecord: "onAddViewEditRecord", onDeleteRecord: "onDeleteRecord", saveRecordEvent: "saveRecordEvent", afterSaveRecordEvent: "afterSaveRecordEvent", dragStarted: "dragStarted", dragReleased: "dragReleased", out: "out", fireTrigger: "fireTrigger", clickDragIndicator: "clickDragIndicator" }, viewQueries: [{ propertyName: "tableRecords", first: true, predicate: ["tableRecords"], descendants: true, static: true }, { propertyName: "openAddDialog", first: true, predicate: ["openAddDialog"], descendants: true }, { propertyName: "openGraphDialog", first: true, predicate: ["openGraphDialog"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<mat-card class=\"list-view-form-record\">\r\n <mat-card-header *ngIf=\"this.configurations.showTitle || defaultListActions.add\" class=\"align-items-center justify-content-between\">\r\n <mat-card-title *ngIf=\"this.configurations.showTitle && loadedform\">Modulo {{ form.Name }} </mat-card-title>\r\n <mat-card-actions *ngIf=\"defaultListActions.add || defaultListActions.graphs\">\r\n\r\n <span *ngIf=\"visibleActionButtons.length > 0\">\r\n <button \r\n *ngFor=\"let actionButton in visibleActionButtons\" (click)=\"generateAction(actionButton)\"\r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\">\r\n <mat-icon *ngIf=\"actionButton.Icon\">{{actionButton.Icon}}</mat-icon>\r\n <span style=\"margin-left: 10px\">{{actionButton.label}}</span>\r\n </button>\r\n </span> \r\n\r\n <button \r\n *ngIf=\"isListView\"\r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openTabellar()\">\r\n <mat-icon>table</mat-icon>\r\n <span style=\"margin-left: 10px\">Tabellare</span>\r\n </button>\r\n\r\n <button \r\n *ngIf=\"isTabellar\"\r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openListView()\">\r\n <mat-icon>list</mat-icon>\r\n <span style=\"margin-left: 10px\">Lista</span>\r\n </button> \r\n\r\n <button \r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openAll()\"\r\n *ngIf=\"isListView\">\r\n <mat-icon *ngIf=\"!isFullOpened\">expand_more</mat-icon>\r\n <span style=\"margin-left: 10px\" *ngIf=\"!isFullOpened\">Apri tutto</span>\r\n\r\n <mat-icon *ngIf=\"isFullOpened && isListView\">expand_less</mat-icon>\r\n <span style=\"margin-left: 10px\" *ngIf=\"isFullOpened\">Chiudi tutto</span>\r\n </button> \r\n <button \r\n *ngIf=\"defaultListActions.graphs\"\r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openGraphs()\">\r\n <mat-icon>pie_chart</mat-icon>\r\n <span style=\"margin-left: 10px\">Grafici</span>\r\n </button>\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\r\n <div *ngIf=\"isTabellar\">\r\n \r\n <hlist-form-record\r\n class=\"dynamic-module-hlist\"\r\n [formID]=\"formID\"\r\n [formulaObject]=\"formulaObject\"\r\n\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [actionButtons]=\"actionButtons\"\r\n\r\n [configurations]=\"configurations\"\r\n [externalButtons]=\"externalButtons\"\r\n\r\n >\r\n </hlist-form-record>\r\n\r\n <!-- <div class=\"row\">\r\n <div class=\"col-sm-12 col-md-3\">\r\n <tmw-datetimepicker class=\"date\" [placeholder]=\"'Periodo inizio'\" [label]=\"'Periodo inizio'\"\r\n [(ngModelInput)]=\"minperiod\"\r\n [pickerMode]=\"modes.DATEPICKER\" [outputFormat]=\"'DD/MM/YYYY'\" [showSeconds]=\"false\">\r\n </tmw-datetimepicker>\r\n </div>\r\n <div class=\"col-sm-12 col-md-3\">\r\n <tmw-datetimepicker class=\"date\" [placeholder]=\"'Periodo fine'\" [label]=\"'Periodo fine'\"\r\n [(ngModelInput)]=\"maxperiod\"\r\n [pickerMode]=\"modes.DATEPICKER\" [outputFormat]=\"'DD/MM/YYYY'\" [showSeconds]=\"false\">\r\n </tmw-datetimepicker>\r\n </div> \r\n <div class=\"col-sm-12 col-md-3 mt-2\">\r\n <eqp-select [arrayData]=\"tabellarFields\" [(ngModelInput)]=\"selectedTabellarFields\" [placeholder]=\"'Selezione dei campi'\"\r\n [arrayKeyProperty]=\"'Description'\" [arrayValueProperty]=\"'TextDescription'\" [isMultiSelect]=\"true\" class=\"eqp-form-field\">\r\n </eqp-select>\r\n </div> \r\n <div class=\"col-sm-12 col-md-3 mt-2\">\r\n <button\r\n [disabled]=\"selectedTabellarFields == null || selectedTabellarFields.length == 0\"\r\n class=\"btn btn-graph-generate button-next me-2\"\r\n mat-raised-button\r\n color=\"primary\"\r\n (click)=\"generateTabellar()\"\r\n >\r\n Genera\r\n </button>\r\n </div> \r\n </div> -->\r\n\r\n <eqp-table id=\"tabellar\" class=\"list-form-record-table\" #tableRecords *ngIf=\"tabellarConditionLoaded\" [highlightColor]=\"'transparent'\"\r\n [data]=\"tabellarValues\" [columns]=\"tabellarColumns\" [matPaginatorSize]=\"1000\" [matPaginatorLength]=\"[1000]\"></eqp-table>\r\n </div>\r\n\r\n\r\n\r\n <mat-accordion #doneList=\"cdkDropList\" cdkDropList [cdkDropListConnectedTo]=\"[todoList]\" [hideToggle]=\"test\" [multi]=\"true\" class=\"df-list-view-accordion\" *ngIf=\"isListView\">\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 *ngIf=\"configurations.isDraggableListView\">\r\n <!-- <mat-icon (click)=\"onClickDragIndicator([panel.record,form])\" class=\"click-icon\" *ngIf=\"configurations.isDraggableListView\">drag_indicator</mat-icon> {{ !this.configurations.showTitle ? form.Name : \"\" }} v.{{ panel.record.Version }} - {{ printAdditionalInfo(panel.record) }} -->\r\n <i class=\"drag-icon fa-solid fa-file-export\" (click)=\"onClickDragIndicator([panel.record,form])\" *ngIf=\"configurations.isDraggableListView\"></i> {{ !this.configurations.showTitle ? form.Name : \"\" }} v.{{ panel.record.Version }} - {{ printAdditionalInfo(panel.record) }}\r\n </mat-panel-title>\r\n <mat-panel-title *ngIf=\"!configurations.isDraggableListView\">\r\n {{ !this.configurations.showTitle ? form.Name : \"\" }} v.{{ panel.record.Version }} - {{ printAdditionalInfo(panel.record) }}\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\" \r\n mat-icon-button \r\n id=\"p-{{panel.record.ID}}-{{button.icon}}\"\r\n class=\"record-icon {{button.extraClass}}\" \r\n [matTooltip]=\"button.text\"\r\n [hidden]=\"button.icon == 'file_copy' && (panels.length == 0 || panel.record.Version != panels[0].record.Version)\"\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\" \r\n mat-icon-button \r\n class=\"record-icon {{button.extraClass}}\"\r\n [matTooltip]=\"button.text\"\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\r\n <lib-single-record\r\n *ngIf=\"libSingleLoaded\"\r\n [onlyView]=\"onlyView\"\r\n [record] = \"panel.record\" \r\n [formulaObject]=\"formulaObject\"\r\n [endPointConfiguration] = \"endPointConfiguration\"\r\n [form]=\"form\"\r\n [userID]=\"userID\"\r\n [QueryEditorComponent]=\"QueryEditorComponent\"\r\n [outCompileConfigurations]=\"outCompileConfigurations\"\r\n [pageState]=\"panel.pageState\"\r\n [actionButtons]=\"actionButtons\"\r\n (out)=\"onExternalComponentOut($event)\"\r\n (saveRecordEvent)=\"saveOrExitForm($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n (fireTrigger)=\"onFireTrigger($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<!--#region DIALOG AGGIUNTA RISPOSTA -->\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 [formID]=\"formID\"\r\n [orgaID]=\"orgaID\"\r\n [onlyView]=\"false\"\r\n [record]=\"selectedRecord\"\r\n [formulaObject]=\"formulaObject\"\r\n [isDuplicate]=\"isDuplicating\"\r\n [showTitle]=\"this.configurations.showTitle\"\r\n \r\n [QueryEditorComponent]=\"QueryEditorComponent\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [userID]=\"userID\"\r\n\r\n [configurations]=\"compileConfigurations\"\r\n [actionButtons]=\"actionButtons\"\r\n\r\n (out)=\"onExternalComponentOut($event)\"\r\n (saveRecordEvent)=\"onAddSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAddAfterSaveRecord($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n >\r\n </add-form-record>\r\n\r\n </mat-card-content>\r\n </mat-card>\r\n</ng-template>\r\n<!--#endregion DIALOG AGGIUNTA RISPOSTA -->\r\n\r\n<!--#region DIALOG VISUALIZZAZIONE GRAFICI -->\r\n<ng-template #openGraphDialog>\r\n <mat-card class=\"card-default overlay-card card-inmodal-true graphCard\">\r\n \r\n <mat-card-header class=\"align-items-center justify-content-between\">\r\n <mat-card-title>\r\n <div class=\"row eqp-dynamic-module-title graph-header\">\r\n <div class=\"col-md-12\">\r\n <span>Grafico {{ form.Name }} </span>\r\n </div>\r\n </div>\r\n </mat-card-title>\r\n <mat-card-actions>\r\n <button \r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"closeGraphs()\">\r\n <span class=\"material-icons\">\r\n arrow_back\r\n </span>\r\n <span style=\"margin-left: 10px\">Indietro</span>\r\n </button>\r\n </mat-card-actions>\r\n </mat-card-header>\r\n <mat-card-content>\r\n\r\n <graphs\r\n [formID]=\"formID\"\r\n [userID]=\"userID\"\r\n [actionButtons]=\"actionButtons\"\r\n [configurations] = \"outCompileConfigurations\"\r\n [endPointConfiguration] = \"endPointConfiguration\"\r\n >\r\n </graphs>\r\n\r\n </mat-card-content>\r\n </mat-card>\r\n</ng-template>\r\n<!--#endregion DIALOG VISUALIZZAZIONE GRAFICI -->\r\n", styles: ["::ng-deep .error-color{color:var(--danger)}::ng-deep .success-color{color:var(--success)}::ng-deep .df-list-view-accordion .mat-expansion-panel-header-description{flex-grow:0!important}::ng-deep .mat-expansion-panel-header[aria-disabled=true]{color:#0000008a}.drag-icon{cursor:move;margin-right:10px}.click-icon{cursor:pointer;margin-right:10px}table{border-collapse:collapse}table td{border:1px solid black}table th{border:1px solid black;background-color:gray;color:#fff}\n"], dependencies: [{ kind: "component", type: i6.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: i6.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i7.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i7.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i7.MatCardContent, selector: "mat-card-content" }, { kind: "directive", type: i7.MatCardFooter, selector: "mat-card-footer" }, { kind: "component", type: i7.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i7.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: i8.MatAccordion, selector: "mat-accordion", inputs: ["multi", "hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i8.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i8.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }, { kind: "directive", type: i8.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "directive", type: i8.MatExpansionPanelDescription, selector: "mat-panel-description" }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i11.EqpTableComponent, selector: "eqp-table" }, { kind: "directive", type: i12.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "component", type: i13.HListFormRecordComponent, selector: "hlist-form-record", inputs: ["configurations", "endPointConfiguration", "formID", "form", "formulaObject", "externalButtons", "actionButtons"], outputs: ["onViewRecord", "onAddViewEditRecord", "onDeleteRecord", "onAfterDeleteRecord"] }, { kind: "component", type: i14.AddFormRecordComponent, selector: "add-form-record", inputs: ["configurations", "endPointConfiguration", "userID", "orgaID", "formID", "form", "record", "formulaObject", "onlyView", "isDuplicate", "inConfig", "showAllFields", "showTitle", "actionButtons", "QueryEditorComponent"], outputs: ["saveRecordEvent", "afterSaveRecordEvent", "out", "fireTrigger"] }, { kind: "component", type: i15.SingleRecordComponent, selector: "lib-single-record", inputs: ["endPointConfiguration", "record", "formulaObject", "pageState", "userID", "form", "showBackButton", "outCompileConfigurations", "onlyView", "actionButtons", "QueryEditorComponent"], outputs: ["saveRecordEvent", "afterSaveRecordEvent", "out", "fireTrigger"] }, { kind: "component", type: i16.GraphsComponent, selector: "graphs", inputs: ["configurations", "endPointConfiguration", "userID", "formID", "form", "actionButtons"], outputs: ["fireTrigger"] }] });
|
|
875
871
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ListViewFormRecordComponent, decorators: [{
|
|
876
872
|
type: Component,
|
|
877
|
-
args: [{ selector: "list-view-form-record", template: "<mat-card class=\"list-view-form-record\">\n <mat-card-header *ngIf=\"this.configurations.showTitle || defaultListActions.add\" class=\"align-items-center justify-content-between\">\n <mat-card-title *ngIf=\"this.configurations.showTitle && loadedform\">Modulo {{ form.Name }} </mat-card-title>\n <mat-card-actions *ngIf=\"defaultListActions.add || defaultListActions.graphs\">\n\n <span *ngIf=\"visibleActionButtons.length > 0\">\n <button \n *ngFor=\"let actionButton in visibleActionButtons\" (click)=\"generateAction(actionButton)\"\n class=\"btn btn-primary mr-2\" \n mat-raised-button \n color=\"primary\" \n type=\"button\">\n <mat-icon *ngIf=\"actionButton.Icon\">{{actionButton.Icon}}</mat-icon>\n <span style=\"margin-left: 10px\">{{actionButton.label}}</span>\n </button>\n </span> \n\n <button \n *ngIf=\"isListView\"\n class=\"btn btn-primary mr-2\" \n mat-raised-button \n color=\"primary\" \n type=\"button\"\n (click)=\"openTabellar()\">\n <mat-icon>table</mat-icon>\n <span style=\"margin-left: 10px\">Tabellare</span>\n </button>\n\n <button \n *ngIf=\"isTabellar\"\n class=\"btn btn-primary mr-2\" \n mat-raised-button \n color=\"primary\" \n type=\"button\"\n (click)=\"openListView()\">\n <mat-icon>list</mat-icon>\n <span style=\"margin-left: 10px\">Lista</span>\n </button> \n\n <button \n class=\"btn btn-primary mr-2\" \n mat-raised-button \n color=\"primary\" \n type=\"button\"\n (click)=\"openAll()\"\n *ngIf=\"isListView\">\n <mat-icon *ngIf=\"!isFullOpened\">expand_more</mat-icon>\n <span style=\"margin-left: 10px\" *ngIf=\"!isFullOpened\">Apri tutto</span>\n\n <mat-icon *ngIf=\"isFullOpened && isListView\">expand_less</mat-icon>\n <span style=\"margin-left: 10px\" *ngIf=\"isFullOpened\">Chiudi tutto</span>\n </button> \n <button \n *ngIf=\"defaultListActions.graphs\"\n class=\"btn btn-primary mr-2\" \n mat-raised-button \n color=\"primary\" \n type=\"button\"\n (click)=\"openGraphs()\">\n <mat-icon>pie_chart</mat-icon>\n <span style=\"margin-left: 10px\">Grafici</span>\n </button>\n <button \n *ngIf=\"defaultListActions.add\"\n class=\"btn btn-primary\" \n mat-raised-button \n color=\"primary\" \n type=\"button\"\n (click)=\"openAddPopup()\">\n <mat-icon>add</mat-icon>\n <span style=\"margin-left: 10px\">Aggiungi</span>\n </button> \n </mat-card-actions>\n </mat-card-header>\n\n \n <mat-card-content>\n\n <div *ngIf=\"isTabellar\">\n \n <hlist-form-record\n class=\"dynamic-module-hlist\"\n [formID]=\"formID\"\n [formulaObject]=\"formulaObject\"\n\n [endPointConfiguration]=\"endPointConfiguration\"\n [actionButtons]=\"actionButtons\"\n\n [configurations]=\"configurations\"\n [externalButtons]=\"externalButtons\"\n\n >\n </hlist-form-record>\n\n <!-- <div class=\"row\">\n <div class=\"col-sm-12 col-md-3\">\n <tmw-datetimepicker class=\"date\" [placeholder]=\"'Periodo inizio'\" [label]=\"'Periodo inizio'\"\n [(ngModelInput)]=\"minperiod\"\n [pickerMode]=\"modes.DATEPICKER\" [outputFormat]=\"'DD/MM/YYYY'\" [showSeconds]=\"false\">\n </tmw-datetimepicker>\n </div>\n <div class=\"col-sm-12 col-md-3\">\n <tmw-datetimepicker class=\"date\" [placeholder]=\"'Periodo fine'\" [label]=\"'Periodo fine'\"\n [(ngModelInput)]=\"maxperiod\"\n [pickerMode]=\"modes.DATEPICKER\" [outputFormat]=\"'DD/MM/YYYY'\" [showSeconds]=\"false\">\n </tmw-datetimepicker>\n </div> \n <div class=\"col-sm-12 col-md-3 mt-2\">\n <eqp-select [arrayData]=\"tabellarFields\" [(ngModelInput)]=\"selectedTabellarFields\" [placeholder]=\"'Selezione dei campi'\"\n [arrayKeyProperty]=\"'Description'\" [arrayValueProperty]=\"'TextDescription'\" [isMultiSelect]=\"true\" class=\"eqp-form-field\">\n </eqp-select>\n </div> \n <div class=\"col-sm-12 col-md-3 mt-2\">\n <button\n [disabled]=\"selectedTabellarFields == null || selectedTabellarFields.length == 0\"\n class=\"btn btn-graph-generate button-next me-2\"\n mat-raised-button\n color=\"primary\"\n (click)=\"generateTabellar()\"\n >\n Genera\n </button>\n </div> \n </div> -->\n\n <eqp-table id=\"tabellar\" class=\"list-form-record-table\" #tableRecords *ngIf=\"tabellarConditionLoaded\" [highlightColor]=\"'transparent'\"\n [data]=\"tabellarValues\" [columns]=\"tabellarColumns\" [matPaginatorSize]=\"1000\" [matPaginatorLength]=\"[1000]\"></eqp-table>\n </div>\n\n\n\n <mat-accordion #doneList=\"cdkDropList\" cdkDropList [cdkDropListConnectedTo]=\"[todoList]\" [hideToggle]=\"test\" [multi]=\"true\" class=\"df-list-view-accordion\" *ngIf=\"isListView\">\n <mat-expansion-panel *ngFor=\"let panel of panels; index as i\" \n [expanded]=\"panel.isOpen\"\n [disabled]=\"1\" \n [class]=\"panel.highlighted ? 'dm_panel_highlighted' : '0'\"\n >\n <mat-expansion-panel-header \n (click)=\"togglePanel(panel, panel.record)\">\n <mat-panel-title *ngIf=\"configurations.isDraggableListView\">\n <!-- <mat-icon (click)=\"onClickDragIndicator([panel.record,form])\" class=\"click-icon\" *ngIf=\"configurations.isDraggableListView\">drag_indicator</mat-icon> {{ !this.configurations.showTitle ? form.Name : \"\" }} v.{{ panel.record.Version }} - {{ printAdditionalInfo(panel.record) }} -->\n <i class=\"drag-icon fa-solid fa-file-export\" (click)=\"onClickDragIndicator([panel.record,form])\" *ngIf=\"configurations.isDraggableListView\"></i> {{ !this.configurations.showTitle ? form.Name : \"\" }} v.{{ panel.record.Version }} - {{ printAdditionalInfo(panel.record) }}\n </mat-panel-title>\n <mat-panel-title *ngIf=\"!configurations.isDraggableListView\">\n {{ !this.configurations.showTitle ? form.Name : \"\" }} v.{{ panel.record.Version }} - {{ printAdditionalInfo(panel.record) }}\n </mat-panel-title> \n <!--#region BOTTONI PER LE AZIONI -->\n <mat-panel-description>\n <button *ngFor=\"let button of buttons\" \n mat-icon-button \n id=\"p-{{panel.record.ID}}-{{button.icon}}\"\n class=\"record-icon {{button.extraClass}}\" \n [matTooltip]=\"button.text\"\n [hidden]=\"button.icon == 'file_copy' && (panels.length == 0 || panel.record.Version != panels[0].record.Version)\"\n (click)=\"button.fn(panel,i,$event)\">\n <mat-icon>{{button.icon}}</mat-icon>\n </button>\n <button *ngFor=\"let button of externalButtons\" \n mat-icon-button \n class=\"record-icon {{button.extraClass}}\"\n [matTooltip]=\"button.text\"\n (click)=\"externalCallback($event,button.fn,panel.record)\">\n <mat-icon>{{button.icon}}</mat-icon>\n </button> \n <span class=\"example-spacer\"></span>\n \n </mat-panel-description>\n <!--#endregion BOTTONI PER LE AZIONI -->\n </mat-expansion-panel-header>\n\n <!-- #region CONTENUTO -->\n <ng-container *ngIf=\"panel.pageState != null\">\n\n <lib-single-record\n *ngIf=\"libSingleLoaded\"\n [onlyView]=\"onlyView\"\n [record] = \"panel.record\" \n [formulaObject]=\"formulaObject\"\n [endPointConfiguration] = \"endPointConfiguration\"\n [form]=\"form\"\n [userID]=\"userID\"\n [QueryEditorComponent]=\"QueryEditorComponent\"\n [outCompileConfigurations]=\"outCompileConfigurations\"\n [pageState]=\"panel.pageState\"\n [actionButtons]=\"actionButtons\"\n (out)=\"onExternalComponentOut($event)\"\n (saveRecordEvent)=\"saveOrExitForm($event)\"\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\n (fireTrigger)=\"onFireTrigger($event)\"\n >\n\n </lib-single-record>\n </ng-container>\n <!--#endregion CONTENUTO -->\n </mat-expansion-panel>\n </mat-accordion>\n\n\n </mat-card-content>\n <mat-card-footer>\n </mat-card-footer>\n</mat-card>\n\n<!--#region DIALOG AGGIUNTA RISPOSTA -->\n<ng-template #openAddDialog>\n <mat-card class=\"card-default overlay-card card-inmodal-true\">\n <mat-card-content>\n\n <add-form-record\n class=\"dynamic-module-compile\"\n [formID]=\"formID\"\n [orgaID]=\"orgaID\"\n [onlyView]=\"false\"\n [record]=\"selectedRecord\"\n [formulaObject]=\"formulaObject\"\n [isDuplicate]=\"isDuplicating\"\n [showTitle]=\"this.configurations.showTitle\"\n \n [QueryEditorComponent]=\"QueryEditorComponent\"\n [endPointConfiguration]=\"endPointConfiguration\"\n [userID]=\"userID\"\n\n [configurations]=\"compileConfigurations\"\n [actionButtons]=\"actionButtons\"\n\n (out)=\"onExternalComponentOut($event)\"\n (saveRecordEvent)=\"onAddSaveRecord($event)\"\n (afterSaveRecordEvent)=\"onAddAfterSaveRecord($event)\"\n (fireTrigger)=\"onFireTrigger($event)\"\n >\n </add-form-record>\n\n </mat-card-content>\n </mat-card>\n</ng-template>\n<!--#endregion DIALOG AGGIUNTA RISPOSTA -->\n\n<!--#region DIALOG VISUALIZZAZIONE GRAFICI -->\n<ng-template #openGraphDialog>\n <mat-card class=\"card-default overlay-card card-inmodal-true graphCard\">\n \n <mat-card-header class=\"align-items-center justify-content-between\">\n <mat-card-title>\n <div class=\"row eqp-dynamic-module-title graph-header\">\n <div class=\"col-md-12\">\n <span>Grafico {{ form.Name }} </span>\n </div>\n </div>\n </mat-card-title>\n <mat-card-actions>\n <button \n class=\"btn btn-primary mr-2\" \n mat-raised-button \n color=\"primary\" \n type=\"button\"\n (click)=\"closeGraphs()\">\n <span class=\"material-icons\">\n arrow_back\n </span>\n <span style=\"margin-left: 10px\">Indietro</span>\n </button>\n </mat-card-actions>\n </mat-card-header>\n <mat-card-content>\n\n <graphs\n [formID]=\"formID\"\n [userID]=\"userID\"\n [actionButtons]=\"actionButtons\"\n [configurations] = \"outCompileConfigurations\"\n [endPointConfiguration] = \"endPointConfiguration\"\n >\n </graphs>\n\n </mat-card-content>\n </mat-card>\n</ng-template>\n<!--#endregion DIALOG VISUALIZZAZIONE GRAFICI -->\n", styles: ["::ng-deep .error-color{color:var(--danger)}::ng-deep .success-color{color:var(--success)}::ng-deep .df-list-view-accordion .mat-expansion-panel-header-description{flex-grow:0!important}::ng-deep .mat-expansion-panel-header[aria-disabled=true]{color:#0000008a}.drag-icon{cursor:move;margin-right:10px}.click-icon{cursor:pointer;margin-right:10px}table{border-collapse:collapse}table td{border:1px solid black}table th{border:1px solid black;background-color:gray;color:#fff}\n"] }]
|
|
873
|
+
args: [{ selector: "list-view-form-record", template: "<mat-card class=\"list-view-form-record\">\r\n <mat-card-header *ngIf=\"this.configurations.showTitle || defaultListActions.add\" class=\"align-items-center justify-content-between\">\r\n <mat-card-title *ngIf=\"this.configurations.showTitle && loadedform\">Modulo {{ form.Name }} </mat-card-title>\r\n <mat-card-actions *ngIf=\"defaultListActions.add || defaultListActions.graphs\">\r\n\r\n <span *ngIf=\"visibleActionButtons.length > 0\">\r\n <button \r\n *ngFor=\"let actionButton in visibleActionButtons\" (click)=\"generateAction(actionButton)\"\r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\">\r\n <mat-icon *ngIf=\"actionButton.Icon\">{{actionButton.Icon}}</mat-icon>\r\n <span style=\"margin-left: 10px\">{{actionButton.label}}</span>\r\n </button>\r\n </span> \r\n\r\n <button \r\n *ngIf=\"isListView\"\r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openTabellar()\">\r\n <mat-icon>table</mat-icon>\r\n <span style=\"margin-left: 10px\">Tabellare</span>\r\n </button>\r\n\r\n <button \r\n *ngIf=\"isTabellar\"\r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openListView()\">\r\n <mat-icon>list</mat-icon>\r\n <span style=\"margin-left: 10px\">Lista</span>\r\n </button> \r\n\r\n <button \r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openAll()\"\r\n *ngIf=\"isListView\">\r\n <mat-icon *ngIf=\"!isFullOpened\">expand_more</mat-icon>\r\n <span style=\"margin-left: 10px\" *ngIf=\"!isFullOpened\">Apri tutto</span>\r\n\r\n <mat-icon *ngIf=\"isFullOpened && isListView\">expand_less</mat-icon>\r\n <span style=\"margin-left: 10px\" *ngIf=\"isFullOpened\">Chiudi tutto</span>\r\n </button> \r\n <button \r\n *ngIf=\"defaultListActions.graphs\"\r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openGraphs()\">\r\n <mat-icon>pie_chart</mat-icon>\r\n <span style=\"margin-left: 10px\">Grafici</span>\r\n </button>\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\r\n <div *ngIf=\"isTabellar\">\r\n \r\n <hlist-form-record\r\n class=\"dynamic-module-hlist\"\r\n [formID]=\"formID\"\r\n [formulaObject]=\"formulaObject\"\r\n\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [actionButtons]=\"actionButtons\"\r\n\r\n [configurations]=\"configurations\"\r\n [externalButtons]=\"externalButtons\"\r\n\r\n >\r\n </hlist-form-record>\r\n\r\n <!-- <div class=\"row\">\r\n <div class=\"col-sm-12 col-md-3\">\r\n <tmw-datetimepicker class=\"date\" [placeholder]=\"'Periodo inizio'\" [label]=\"'Periodo inizio'\"\r\n [(ngModelInput)]=\"minperiod\"\r\n [pickerMode]=\"modes.DATEPICKER\" [outputFormat]=\"'DD/MM/YYYY'\" [showSeconds]=\"false\">\r\n </tmw-datetimepicker>\r\n </div>\r\n <div class=\"col-sm-12 col-md-3\">\r\n <tmw-datetimepicker class=\"date\" [placeholder]=\"'Periodo fine'\" [label]=\"'Periodo fine'\"\r\n [(ngModelInput)]=\"maxperiod\"\r\n [pickerMode]=\"modes.DATEPICKER\" [outputFormat]=\"'DD/MM/YYYY'\" [showSeconds]=\"false\">\r\n </tmw-datetimepicker>\r\n </div> \r\n <div class=\"col-sm-12 col-md-3 mt-2\">\r\n <eqp-select [arrayData]=\"tabellarFields\" [(ngModelInput)]=\"selectedTabellarFields\" [placeholder]=\"'Selezione dei campi'\"\r\n [arrayKeyProperty]=\"'Description'\" [arrayValueProperty]=\"'TextDescription'\" [isMultiSelect]=\"true\" class=\"eqp-form-field\">\r\n </eqp-select>\r\n </div> \r\n <div class=\"col-sm-12 col-md-3 mt-2\">\r\n <button\r\n [disabled]=\"selectedTabellarFields == null || selectedTabellarFields.length == 0\"\r\n class=\"btn btn-graph-generate button-next me-2\"\r\n mat-raised-button\r\n color=\"primary\"\r\n (click)=\"generateTabellar()\"\r\n >\r\n Genera\r\n </button>\r\n </div> \r\n </div> -->\r\n\r\n <eqp-table id=\"tabellar\" class=\"list-form-record-table\" #tableRecords *ngIf=\"tabellarConditionLoaded\" [highlightColor]=\"'transparent'\"\r\n [data]=\"tabellarValues\" [columns]=\"tabellarColumns\" [matPaginatorSize]=\"1000\" [matPaginatorLength]=\"[1000]\"></eqp-table>\r\n </div>\r\n\r\n\r\n\r\n <mat-accordion #doneList=\"cdkDropList\" cdkDropList [cdkDropListConnectedTo]=\"[todoList]\" [hideToggle]=\"test\" [multi]=\"true\" class=\"df-list-view-accordion\" *ngIf=\"isListView\">\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 *ngIf=\"configurations.isDraggableListView\">\r\n <!-- <mat-icon (click)=\"onClickDragIndicator([panel.record,form])\" class=\"click-icon\" *ngIf=\"configurations.isDraggableListView\">drag_indicator</mat-icon> {{ !this.configurations.showTitle ? form.Name : \"\" }} v.{{ panel.record.Version }} - {{ printAdditionalInfo(panel.record) }} -->\r\n <i class=\"drag-icon fa-solid fa-file-export\" (click)=\"onClickDragIndicator([panel.record,form])\" *ngIf=\"configurations.isDraggableListView\"></i> {{ !this.configurations.showTitle ? form.Name : \"\" }} v.{{ panel.record.Version }} - {{ printAdditionalInfo(panel.record) }}\r\n </mat-panel-title>\r\n <mat-panel-title *ngIf=\"!configurations.isDraggableListView\">\r\n {{ !this.configurations.showTitle ? form.Name : \"\" }} v.{{ panel.record.Version }} - {{ printAdditionalInfo(panel.record) }}\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\" \r\n mat-icon-button \r\n id=\"p-{{panel.record.ID}}-{{button.icon}}\"\r\n class=\"record-icon {{button.extraClass}}\" \r\n [matTooltip]=\"button.text\"\r\n [hidden]=\"button.icon == 'file_copy' && (panels.length == 0 || panel.record.Version != panels[0].record.Version)\"\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\" \r\n mat-icon-button \r\n class=\"record-icon {{button.extraClass}}\"\r\n [matTooltip]=\"button.text\"\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\r\n <lib-single-record\r\n *ngIf=\"libSingleLoaded\"\r\n [onlyView]=\"onlyView\"\r\n [record] = \"panel.record\" \r\n [formulaObject]=\"formulaObject\"\r\n [endPointConfiguration] = \"endPointConfiguration\"\r\n [form]=\"form\"\r\n [userID]=\"userID\"\r\n [QueryEditorComponent]=\"QueryEditorComponent\"\r\n [outCompileConfigurations]=\"outCompileConfigurations\"\r\n [pageState]=\"panel.pageState\"\r\n [actionButtons]=\"actionButtons\"\r\n (out)=\"onExternalComponentOut($event)\"\r\n (saveRecordEvent)=\"saveOrExitForm($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n (fireTrigger)=\"onFireTrigger($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<!--#region DIALOG AGGIUNTA RISPOSTA -->\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 [formID]=\"formID\"\r\n [orgaID]=\"orgaID\"\r\n [onlyView]=\"false\"\r\n [record]=\"selectedRecord\"\r\n [formulaObject]=\"formulaObject\"\r\n [isDuplicate]=\"isDuplicating\"\r\n [showTitle]=\"this.configurations.showTitle\"\r\n \r\n [QueryEditorComponent]=\"QueryEditorComponent\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [userID]=\"userID\"\r\n\r\n [configurations]=\"compileConfigurations\"\r\n [actionButtons]=\"actionButtons\"\r\n\r\n (out)=\"onExternalComponentOut($event)\"\r\n (saveRecordEvent)=\"onAddSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAddAfterSaveRecord($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n >\r\n </add-form-record>\r\n\r\n </mat-card-content>\r\n </mat-card>\r\n</ng-template>\r\n<!--#endregion DIALOG AGGIUNTA RISPOSTA -->\r\n\r\n<!--#region DIALOG VISUALIZZAZIONE GRAFICI -->\r\n<ng-template #openGraphDialog>\r\n <mat-card class=\"card-default overlay-card card-inmodal-true graphCard\">\r\n \r\n <mat-card-header class=\"align-items-center justify-content-between\">\r\n <mat-card-title>\r\n <div class=\"row eqp-dynamic-module-title graph-header\">\r\n <div class=\"col-md-12\">\r\n <span>Grafico {{ form.Name }} </span>\r\n </div>\r\n </div>\r\n </mat-card-title>\r\n <mat-card-actions>\r\n <button \r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"closeGraphs()\">\r\n <span class=\"material-icons\">\r\n arrow_back\r\n </span>\r\n <span style=\"margin-left: 10px\">Indietro</span>\r\n </button>\r\n </mat-card-actions>\r\n </mat-card-header>\r\n <mat-card-content>\r\n\r\n <graphs\r\n [formID]=\"formID\"\r\n [userID]=\"userID\"\r\n [actionButtons]=\"actionButtons\"\r\n [configurations] = \"outCompileConfigurations\"\r\n [endPointConfiguration] = \"endPointConfiguration\"\r\n >\r\n </graphs>\r\n\r\n </mat-card-content>\r\n </mat-card>\r\n</ng-template>\r\n<!--#endregion DIALOG VISUALIZZAZIONE GRAFICI -->\r\n", styles: ["::ng-deep .error-color{color:var(--danger)}::ng-deep .success-color{color:var(--success)}::ng-deep .df-list-view-accordion .mat-expansion-panel-header-description{flex-grow:0!important}::ng-deep .mat-expansion-panel-header[aria-disabled=true]{color:#0000008a}.drag-icon{cursor:move;margin-right:10px}.click-icon{cursor:pointer;margin-right:10px}table{border-collapse:collapse}table td{border:1px solid black}table th{border:1px solid black;background-color:gray;color:#fff}\n"] }]
|
|
878
874
|
}], ctorParameters: function () { return [{ type: i1.UtilityHelperService }, { type: i0.ChangeDetectorRef }, { type: i2.MatDialog }, { type: i3.Router }, { type: i4.dbDateService }, { type: i5.DatePipe }]; }, propDecorators: { configurations: [{
|
|
879
875
|
type: Input
|
|
880
876
|
}], compileConfigurations: [{
|
|
@@ -935,4 +931,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
935
931
|
}], clickDragIndicator: [{
|
|
936
932
|
type: Output
|
|
937
933
|
}] } });
|
|
938
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC12aWV3LWZvcm0tcmVjb3JkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9mb3JtLXJlY29yZHMvbGlzdC12aWV3LWZvcm0tcmVjb3JkL2xpc3Qtdmlldy1mb3JtLXJlY29yZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZm9ybS1yZWNvcmRzL2xpc3Qtdmlldy1mb3JtLXJlY29yZC9saXN0LXZpZXctZm9ybS1yZWNvcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBQ0wsU0FBUyxFQUNULE1BQU0sRUFDTixZQUFZLEdBS2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLGlCQUFpQixFQUdqQixnQkFBZ0IsRUFDaEIsVUFBVSxFQUNYLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUFhLE1BQU0sRUFBZ0IsTUFBTSxpQ0FBaUMsQ0FBQztBQUVsRixPQUFPLEVBQUUseUNBQXlDLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUV6SCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUNwRyxPQUFPLEVBR0wsYUFBYSxHQUNkLE1BQU0sa0RBQWtELENBQUM7QUFJMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQWdCLGNBQWMsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBR3RHLE9BQU8sRUFBYSxhQUFhLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUc5RSxPQUFPLEVBQWEsZ0JBQWdCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUV4RixPQUFP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QWYsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFpQnVDLFlBQVk7c0JBQXhELFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFRSSxhQUFhO3NCQUEzRCxTQUFTO3VCQUFDLGVBQWUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBR0ksZUFBZTtzQkFBL0QsU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBMEJyQyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBS0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csR0FBRztzQkFBWixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csa0JBQWtCO3NCQUEzQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgT25Jbml0LFxyXG4gIElucHV0LFxyXG4gIFZpZXdDaGlsZCxcclxuICBPdXRwdXQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIE9uQ2hhbmdlcyxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIFRlbXBsYXRlUmVmLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7XHJcbiAgQ2VsbEFsaWdubWVudEVudW0sXHJcbiAgQ29uZmlnQ29sdW1uLFxyXG4gIEVxcFRhYmxlQ29tcG9uZW50LFxyXG4gIE51bWJlckNvbHVtblBpcGUsXHJcbiAgVHlwZUNvbHVtblxyXG59IGZyb20gXCJAZXFwcm9qZWN0L2VxcC10YWJsZVwiO1xyXG5pbXBvcnQgeyBGb3JtIH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVscy9mb3JtLm1vZGVsXCI7XHJcbmltcG9ydCB7IER5blJlY29yZCwgUmVjb3JkLCBSZWNvcmRCdXR0b24gfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWxzL3JlY29yZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBVdGlsaXR5SGVscGVyU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi8uLi9zZXJ2aWNlcy91dGlsaXR5SGVscGVyLnNlcnZpY2VzXCI7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVMaXN0Rm9ybVJlY29yZEFjdGlvbnNEZWZhdWx0IH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlTGlzdEZvcm1SZWNvcmRBY3Rpb25zRGVmYXVsdFwiO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlTGlzdENvbmZpZyB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbHMvZHluYW1pY01vZHVsZUxpc3RDb25maWcubW9kZWxcIjtcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcgfSBmcm9tIFwiLi8uLi8uLi8uLi8uLi8vbW9kZWxzL2R5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnLm1vZGVsXCI7XHJcbmltcG9ydCB7XHJcbiAgRW5kUG9pbnRDb25maWd1cmF0aW9uLFxyXG4gIEVuZFBvaW50RGF0YVBhcmFtcyxcclxuICBQYXJhbVR5cGVFbnVtLFxyXG59IGZyb20gXCIuLy4uLy4uLy4uLy4uL21vZGVscy9lbmRQb2ludENvbmZpZ3VyYXRpb24ubW9kZWxcIjtcclxuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHsgRHluYW1pY0xvYWRlckRpcmVjdGl2ZURhdGEsIGV2ZW50T3V0IH0gZnJvbSBcIi4uLy4uLy4uLy4uL2RpcmVjdGl2ZXMvZHluYW1pYy1sb2FkZXIvZHluYW1pYy1sb2FkZXIuZGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7IEZpcmVUcmlnZ2VyLCBUcmlnZ2VyLCBBY3Rpb25CdXR0b24sIEFjdGlvbkZsYWdFbnVtIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL3RyaWdnZXIubW9kZWwnO1xyXG5pbXBvcnQgeyBkYkRhdGVTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NlcnZpY2VzL2RiLWRhdGUuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcclxuaW1wb3J0IHsgQmFzZUZpZWxkLCBGaWVsZFR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2Jhc2VGaWVsZC5tb2RlbCc7XHJcbmltcG9ydCB7IExpc3RWYWx1ZUZpZWxkIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9saXN0VmFsdWVGaWVsZC5tb2RlbCc7XHJcbmltcG9ydCB7IE51bWVyaWNGaWVsZCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9maWVsZHMvbnVtZXJpY0ZpZWxkLm1vZGVsJztcclxuaW1wb3J0IHsgRGF0ZUZpZWxkLCBEYXRlVGltZVR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9kYXRlRmllbGQubW9kZWwnO1xyXG5pbXBvcnQgeyBMYWJlbEZpZWxkIH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVscy9maWVsZHMvbGFiZWxGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBNb2RlRW51bSwgVGltZVR5cGVFbnVtIH0gZnJvbSAndG13LXBpY2tlcic7XHJcbmltcG9ydCB7IFRhYmVsbGFyRmllbGQgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZ3JhcGgubW9kZWwnO1xyXG5pbXBvcnQgeyBfX3ZhbHVlcyB9IGZyb20gXCJ0c2xpYlwiO1xyXG5pbXBvcnQgeyBHbG9iYWxTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NlcnZpY2VzL2dsb2JhbC5zZXJ2aWNlXCI7XHJcblxyXG50eXBlIFBhbmVsID0ge1xyXG4gIHJlY29yZDogUmVjb3JkLFxyXG4gIGlzT3BlbjogYm9vbGVhbixcclxuICBwYWdlU3RhdGU6IHN0cmluZyxcclxuICBoaWdobGlnaHRlZDogYm9vbGVhblxyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJsaXN0LXZpZXctZm9ybS1yZWNvcmRcIixcclxuICB0ZW1wbGF0ZVVybDogXCJsaXN0LXZpZXctZm9ybS1yZWNvcmQuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybHM6IFtcIi4vbGlzdC12aWV3LWZvcm0tcmVjb3JkLmNvbXBvbmVudC5zY3NzXCJdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTGlzdFZpZXdGb3JtUmVjb3JkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xyXG4gIFxyXG4gIEBJbnB1dCgpIGNvbmZpZ3VyYXRpb25zOiBEeW5hbWljTW9kdWxlTGlzdENvbmZpZztcclxuICBASW5wdXQoKSBjb21waWxlQ29uZmlndXJhdGlvbnM6IER5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnO1xyXG4gIG91dENvbXBpbGVDb25maWd1cmF0aW9uczogRHluYW1pY01vZHVsZUNvbXBpbGVDb25maWc7XHJcbiAgQElucHV0KCkgZW5kUG9pbnRDb25maWd1cmF0aW9uOiBFbmRQb2ludENvbmZpZ3VyYXRpb247XHJcbiAgQElucHV0KCkgdXNlcklEOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgZm9ybUlEOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgb3JnYUlEOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgZm9ybTogRm9ybSA9IG51bGw7XHJcbiAgQElucHV0KCkgZGVmYXVsdExpc3RWaWV3RnVuY3Rpb246IEZ1bmN0aW9uID0gbnVsbDtcclxuICBASW5wdXQoKSBleHRlcm5hbEJ1dHRvbnM6IEFycmF5PFJlY29yZEJ1dHRvbj4gPSBuZXcgQXJyYXk8UmVjb3JkQnV0dG9uPigpO1xyXG4gIEBJbnB1dCgpIGFjdGlvbkJ1dHRvbnM6IEFycmF5PEFjdGlvbkJ1dHRvbj4gPSBuZXcgQXJyYXk8QWN0aW9uQnV0dG9uPigpO1xyXG4gIEBJbnB1dCgpIG9ubHlWaWV3OiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSByZWNvcmRzOiBBcnJheTxEeW5SZWNvcmQ+ID0gbnVsbDtcclxuICBASW5wdXQoKSBoaWdobGlnaHRGaWx0ZXI6IGFueSA9IG51bGw7XHJcbiAgQElucHV0KCkgUXVlcnlFZGl0b3JDb21wb25lbnQ6IER5bmFtaWNMb2FkZXJEaXJlY3RpdmVEYXRhOyAvLyBMJ2ludGVybyBjb21wb25lbnRlIHF1ZXJ5IEVkaXRvclxyXG4gIEBJbnB1dCgpIGZvcm11bGFPYmplY3Q6IGFueSA9IHt9O1xyXG4gIEBJbnB1dCgpIGNvbnRlc3R1YWxpemF0aW9uUGFyYW1zOiBhbnkgPSBudWxsO1xyXG5cclxuICBkZWZhdWx0TGlzdEFjdGlvbnM6IER5bmFtaWNNb2R1bGVMaXN0Rm9ybVJlY29yZEFjdGlvbnNEZWZhdWx0ID1cclxuICAgIG5ldyBEeW5hbWljTW9kdWxlTGlzdEZvcm1SZWNvcmRBY3Rpb25zRGVmYXVsdCgpO1xyXG5cclxuICAvLyB2YWx1ZXM6IEFycmF5PFJlY29yZD47XHJcbiAgdGVzdCA9IGZhbHNlO1xyXG4gIGlzRHVwbGljYXRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzZWxlY3RlZFJlY29yZDogYW55OyAvLyBSZWNvcmQgfCBzdHJpbmc7XHJcbiAgbG9hZGVyOiBib29sZWFuO1xyXG4gIGxvYWRlZGZvcm06IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwYW5lbE9wZW5TdGF0ZTogYm9vbGVhbltdID0gbmV3IEFycmF5PGJvb2xlYW4+KCk7XHJcbiAgcHVibGljIHNlbGVjdGVkSW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gIHZpc3VhbGl6emFDb250ZW51dG8gPSBmYWxzZTtcclxuICBtb2RpZmljYUNvbnRlbnV0byA9IGZhbHNlO1xyXG5cclxuXHJcbiAgQFZpZXdDaGlsZChcInRhYmxlUmVjb3Jkc1wiLCB7IHN0YXRpYzogdHJ1ZSB9KSB0YWJsZVJlY29yZHM6IEVxcFRhYmxlQ29tcG9uZW50O1xyXG5cclxuICBjb2x1bW5zID0gbmV3IEFycmF5PENvbmZpZ0NvbHVtbj4oKTtcclxuICB0YWJlbGxhckNvbHVtbnMgPSBuZXcgQXJyYXk8Q29uZmlnQ29sdW1uPigpO1xyXG4gIHBhbmVsczogQXJyYXk8UGFuZWw+XHJcbiAgYnV0dG9uczogQXJyYXk8UmVjb3JkQnV0dG9uPiA9IG5ldyBBcnJheTxSZWNvcmRCdXR0b24+KCk7XHJcbiAgcG9wdXBMb2FkZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQFZpZXdDaGlsZChcIm9wZW5BZGREaWFsb2dcIiwgeyBzdGF0aWM6IGZhbHNlIH0pIG9wZW5BZGREaWFsb2c6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgb3BlbkFkZERpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPFRlbXBsYXRlUmVmPGFueT4+O1xyXG5cclxuICBAVmlld0NoaWxkKFwib3BlbkdyYXBoRGlhbG9nXCIsIHsgc3RhdGljOiBmYWxzZSB9KSBvcGVuR3JhcGhEaWFsb2c6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgb3BlbkdyYXBoRGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8VGVtcGxhdGVSZWY8YW55Pj47XHJcblxyXG4gIHRvZG9MaXN0OiBhbnk7XHJcbiAgaXNGdWxsT3BlbmVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGlzVGFiZWxsYXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc0xpc3RWaWV3OiBib29sZWFuID0gdHJ1ZTtcclxuICB0YWJlbGxhckNvbmRpdGlvbkxvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBtaW5wZXJpb2Q6IERhdGU7XHJcbiAgbWF4cGVyaW9kOiBEYXRlO1xyXG5cclxuICB0YWJlbGxhckZpZWxkczogQXJyYXk8VGFiZWxsYXJGaWVsZD4gPSBuZXcgQXJyYXk8VGFiZWxsYXJGaWVsZD4oKTtcclxuICBzZWxlY3RlZFRhYmVsbGFyRmllbGRzOiBBcnJheTxUYWJlbGxhckZpZWxkPjtcclxuICB0YWJlbGxhclZhbHVlczogQXJyYXk8YW55PiA9IG5ldyBBcnJheTxhbnk+KCk7XHJcblxyXG4gIC8vIFRNVy1QSUNLRVJcclxuICBtb2RlcyA9IE1vZGVFbnVtXHJcbiAgdGltZVR5cGUgPSBUaW1lVHlwZUVudW1cclxuICBtb2RlOiBNb2RlRW51bTtcclxuXHJcbiAgbGliU2luZ2xlTG9hZGVkOiBib29sZWFuID0gdHJ1ZTtcclxuICB2aXNpYmxlQWN0aW9uQnV0dG9uczogQXJyYXk8QWN0aW9uQnV0dG9uPiA9IG5ldyBBcnJheTxBY3Rpb25CdXR0b24+KCk7XHJcblxyXG4gIC8vIGFkZCBuZXdcclxuICBAT3V0cHV0KCkgb25BZGRWaWV3RWRpdFJlY29yZDogRXZlbnRFbWl0dGVyPHtcclxuICAgIHJlY29yZDogUmVjb3JkO1xyXG4gICAgb25seVZpZXc6IGJvb2xlYW47XHJcbiAgfT4gPSBuZXcgRXZlbnRFbWl0dGVyPHsgcmVjb3JkOiBSZWNvcmQ7IG9ubHlWaWV3OiBib29sZWFuIH0+KCk7XHJcblxyXG4gIEBPdXRwdXQoKSBvbkRlbGV0ZVJlY29yZDogRXZlbnRFbWl0dGVyPFJlY29yZD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuICBAT3V0cHV0KCkgc2F2ZVJlY29yZEV2ZW50OiBFdmVudEVtaXR0ZXI8UmVjb3JkPiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVjb3JkPigpO1xyXG4gIEBPdXRwdXQoKSBhZnRlclNhdmVSZWNvcmRFdmVudDogRXZlbnRFbWl0dGVyPFJlY29yZD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuICBAT3V0cHV0KCkgZHJhZ1N0YXJ0ZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGRyYWdSZWxlYXNlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gIEBPdXRwdXQoKSBvdXQ6IEV2ZW50RW1pdHRlcjxldmVudE91dD4gPSBuZXcgRXZlbnRFbWl0dGVyPGV2ZW50T3V0PigpO1xyXG4gIEBPdXRwdXQoKSBmaXJlVHJpZ2dlcjogRXZlbnRFbWl0dGVyPEZpcmVUcmlnZ2VyPiA9IG5ldyBFdmVudEVtaXR0ZXI8RmlyZVRyaWdnZXI+KCk7XHJcbiAgQE91dHB1dCgpIGNsaWNrRHJhZ0luZGljYXRvcjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgLy8jcmVnaW9uIGNvbnN0cnVjdG9yXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHV0aWxpdHlIZWxwZXJTZXJ2aWNlOiBVdGlsaXR5SGVscGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIGRiRGF0ZVNlcnZpY2U6IGRiRGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRhdGVQaXBlOiBEYXRlUGlwZVxyXG4gICkgeyB9XHJcbiAgLy8jZW5kcmVnaW9uIGNvbnN0cnVjdG9yXHJcblxyXG4gIC8vI3JlZ2lvbiBuZ09uSW5pdFxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgLy8gdGhpcy5wYW5lbE9wZW5TdGF0ZSA9IFtcclxuICAgIC8vICAgLi4uQXJyYXkodGhpcy5jb25maWd1cmF0aW9ucy52YWx1ZXMubGVuZ3RoICsgMSksXHJcbiAgICAvLyBdLm1hcCgoKSA9PiBmYWxzZSk7XHJcblxyXG4gICAgdGhpcy5kZWZhdWx0TGlzdEFjdGlvbnMgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLmRlZmF1bHRMaXN0QWN0aW9ucztcclxuICAgIHRoaXMudmlzaWJsZUFjdGlvbkJ1dHRvbnMgPSB0aGlzLmFjdGlvbkJ1dHRvbnMuZmlsdGVyKHggPT4geC5TaG93SW4gPT0gQWN0aW9uRmxhZ0VudW0uTElTVFZJRVcpO1xyXG5cclxuICAgIC8vIHRoaXMuc2hvd1RpdGxlID0gdGhpcy5jb25maWd1cmF0aW9ucy5zaG93VGl0bGU7XHJcblxyXG4gICAgdGhpcy5vdXRDb21waWxlQ29uZmlndXJhdGlvbnMgPSBuZXcgRHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcoXHJcbiAgICAgIGZhbHNlLFxyXG4gICAgICB0aGlzLmNvbXBpbGVDb25maWd1cmF0aW9ucy5zaG93U2F2ZUJ1dHRvbixcclxuICAgICAgdGhpcy5jb21waWxlQ29uZmlndXJhdGlvbnMuc2hvd0JhY2tCdXR0b24sXHJcbiAgICAgIHRoaXMuY29tcGlsZUNvbmZpZ3VyYXRpb25zLnVzZXJJRCxcclxuICAgICAgdGhpcy5jb21waWxlQ29uZmlndXJhdGlvbnMuYWRkaXRpb25hbFBhcmFtcyxcclxuICAgICAgdGhpcy5jb21waWxlQ29uZmlndXJhdGlvbnMuYWRkaXRpb25hbEluZm8sXHJcbiAgICAgIHRoaXMuY29tcGlsZUNvbmZpZ3VyYXRpb25zLnByZWZpbHRlclBhcmFtcyxcclxuICAgICk7XHJcbiAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJsaXN0LXZpZXcgLSBvdXRjb21waWxlQ29uZmlndXJhdGlvbnMgXCIsIHRoaXMub3V0Q29tcGlsZUNvbmZpZ3VyYXRpb25zKTtcclxuICAgIHRoaXMuZ2V0Rm9ybUJ5SUQoKTtcclxuICAgIHRoaXMuY29uZmlndXJlTGlzdHZpZXdCdXR0b25zKCk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBuZ09uSW5pdFxyXG5cclxuICAvLyNyZWdpb24gbmdPbkNoYW5nZXNcclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coJ25nT25DaGFuZ2VzJywgY2hhbmdlcyk7XHJcblxyXG4gICAgLy8gU2UgdmllbmUgbW9kaWZpY2F0byBpbCB2YWxvcmUgZGkgXCJuZ01vZGVsSW5wdXRcIiBhbGxvcmEgYWdnaW9ybmEgbCdpbnB1dFxyXG4gICAgaWYgKFxyXG4gICAgICBjaGFuZ2VzW1wiY29uZmlndXJhdGlvbnNcIl0gIT0gdW5kZWZpbmVkICYmXHJcbiAgICAgIGNoYW5nZXNbXCJjb25maWd1cmF0aW9uc1wiXS5maXJzdENoYW5nZSA9PSBmYWxzZVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMudmFsdWVzID0gY2hhbmdlc1tcImNvbmZpZ3VyYXRpb25zXCJdLmN1cnJlbnRWYWx1ZTtcclxuICAgICAgdGhpcy5yZWxvYWRUYWJsZXMoKTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIG5nT25DaGFuZ2VzXHJcblxyXG4gIC8vI3JlZ2lvbiBvbk9wZW5pbmdcclxuICAvKipcclxuICAgKiBmdW56aW9uZSBkaSBhcGVydHVyYSBkZWxsJ2FjY29yZGlvblxyXG4gICAqIEBwYXJhbSBpbmRpY2UgXHJcbiAgICovXHJcbiAgb25PcGVuaW5nKGluZGljZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSBpbmRpY2U7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBvbk9wZW5pbmdcclxuXHJcbiAgY29uZmlndXJlTGlzdHZpZXdCdXR0b25zKCkge1xyXG4gICAgdGhpcy5idXR0b25zID0gW1xyXG5cclxuICAgICAge1xyXG4gICAgICAgIFwiaWNvblwiOiBcInZpc2liaWxpdHlcIixcclxuICAgICAgICBcInRleHRcIjogXCJWaXN1YWxpenphXCIsXHJcbiAgICAgICAgXCJ2aXNpYmxlXCI6IHRoaXMuZGVmYXVsdExpc3RBY3Rpb25zLnZpZXcgJiYgKHRoaXMuZGVmYXVsdExpc3RBY3Rpb25zLmVkaXQgfHwgdGhpcy5kZWZhdWx0TGlzdEFjdGlvbnMuZHVwbGljYXRlIHx8IHRoaXMuZGVmYXVsdExpc3RBY3Rpb25zLmRlbGV0ZSksXHJcbiAgICAgICAgXCJleHRyYUNsYXNzXCI6IFwidmlldy1idXR0b24taWNvblwiLFxyXG4gICAgICAgIFwiZm5cIjogKHBhbmVsLCBpLCBldmVudCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy52aWV3UmVjb3JkKHBhbmVsLCB0cnVlLCBpLCBldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJpY29uXCI6IFwiZWRpdFwiLFxyXG4gICAgICAgIFwidGV4dFwiOiBcIk1vZGlmaWNhXCIsXHJcbiAgICAgICAgXCJ2aXNpYmxlXCI6IHRoaXMuZGVmYXVsdExpc3RBY3Rpb25zLmVkaXQsXHJcbiAgICAgICAgXCJleHRyYUNsYXNzXCI6IFwiZWRpdC1idXR0b24taWNvblwiLFxyXG4gICAgICAgIFwiZm5cIjogKHBhbmVsLCBpLCBldmVudCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5FZGl0UmVjb3JkKHBhbmVsLCBmYWxzZSwgaSwgZXZlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwiaWNvblwiOiBcImZpbGVfY29weVwiLFxyXG4gICAgICAgIFwidGV4dFwiOiBcIkR1cGxpY2FcIixcclxuICAgICAgICBcInZpc2libGVcIjogdGhpcy5kZWZhdWx0TGlzdEFjdGlvbnMuZHVwbGljYXRlLFxyXG4gICAgICAgIFwiZXh0cmFDbGFzc1wiOiBcImR1cGxpY2F0ZS1idXR0b24taWNvblwiLFxyXG4gICAgICAgIFwiZm5cIjogKHBhbmVsLCBpLCBldmVudCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5kdXBsaWNhdGVSZWNvcmQocGFuZWwsIGZhbHNlLCBpLCBldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJpY29uXCI6IFwiZGVsZXRlXCIsXHJcbiAgICAgICAgXCJ0ZXh0XCI6IFwiQ2FuY2VsbGFcIixcclxuICAgICAgICBcInZpc2libGVcIjogdGhpcy5kZWZhdWx0TGlzdEFjdGlvbnMuZGVsZXRlLFxyXG4gICAgICAgIFwiZXh0cmFDbGFzc1wiOiBcImRlbGV0ZS1idXR0b24taWNvblwiLFxyXG4gICAgICAgIFwiZm5cIjogKHBhbmVsLCBpLCBldmVudCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5kZWxldGVSZWNvcmQocGFuZWwsIGV2ZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICBdXHJcbiAgICB0aGlzLmJ1dHRvbnMgPSB0aGlzLmJ1dHRvbnMuY29uY2F0KHRoaXMuZXh0ZXJuYWxCdXR0b25zKS5maWx0ZXIoeCA9PiB4LnZpc2libGUpO1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIG9wZW5UYWJlbGxhclxyXG4gIG9wZW5UYWJlbGxhcigpe1xyXG4gICAgdGhpcy5pc0xpc3RWaWV3ID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzVGFiZWxsYXIgPSB0cnVlO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gb3BlblRhYmVsbGFyXHJcblxyXG4gIC8vI3JlZ2lvbiBvcGVuTGlzdFZpZXdcclxuICBvcGVuTGlzdFZpZXcoKXtcclxuICAgIHRoaXMuaXNUYWJlbGxhciA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc0xpc3RWaWV3ID0gdHJ1ZTtcclxuICB9ICBcclxuICAvLyNlbmRyZWdpb24gb3Blbkxpc3RWaWV3XHJcblxyXG4gIC8vI3JlZ2lvbiBnZXRGb3JtQnlJRFxyXG4gIGdldEZvcm1CeUlEKGlkOiBzdHJpbmcgPSB0aGlzLmZvcm1JRCkge1xyXG4gICAgaWYgKHRoaXMuZm9ybSA9PSBudWxsKSB7XHJcbiAgICAgIGNvbnN0IGR5bmFtaWNNb2R1bGVQYXJhbXM6IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4gPVxyXG4gICAgICAgIG5ldyBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+KCk7XHJcbiAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMucHVzaCh7XHJcbiAgICAgICAgUGFyYW1OYW1lOiBcImlkXCIsXHJcbiAgICAgICAgUGFyYW1WYWx1ZTogaWQsXHJcbiAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3Jtcy5HZXRCeUlERW5kUG9pbnQsXHJcbiAgICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgICAocmVzOiBGb3JtKSA9PiB7XHJcbiAgICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiTGlzdFZpZXdGb3JtUmVjb3JkQ29tcG9uZW50IC0gZ2V0IEZPUk1cIiwgcmVzKVxyXG4gICAgICAgICAgdGhpcy5mb3JtID0gcmVzO1xyXG4gICAgICAgICAgdGhpcy5mb3JtLk9yZ2FJRCA9IHRoaXMub3JnYUlEO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLmZvcm0uT2JqZWN0VHJpZ2dlcnMgIT0gbnVsbCAmJiB0aGlzLmZvcm0uT2JqZWN0VHJpZ2dlcnMgIT0gXCJcIil7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybS5UcmlnZ2VycyA9IEpTT04ucGFyc2UodGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybS5UcmlnZ2VycyA9IG5ldyBBcnJheTxUcmlnZ2VyPigpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmICh0aGlzLmZvcm0uT2JqZWN0QWN0aW9uQnV0dG9ucyAhPSBudWxsICYmIHRoaXMuZm9ybS5PYmplY3RBY3Rpb25CdXR0b25zICE9IFwiXCIpe1xyXG4gICAgICAgICAgICB0aGlzLmZvcm0uQWN0aW9uQnV0dG9ucyA9IEpTT04ucGFyc2UodGhpcy5mb3JtLk9iamVjdEFjdGlvbkJ1dHRvbnMpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnMgPSBuZXcgQXJyYXk8QWN0aW9uQnV0dG9uPigpO1xyXG4gICAgICAgICAgfSAgICAgICAgICBcclxuXHJcbiAgICAgICAgICB0aGlzLmFjdGlvbkJ1dHRvbnMgPSB0aGlzLmZvcm0uQWN0aW9uQnV0dG9ucztcclxuICAgICAgICAgIHRoaXMubG9hZGVkZm9ybSA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmNvbmZpZ3VyZUNvbHVtbnMoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIChlcnIpID0+IHsgfVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb25maWd1cmVDb2x1bW5zKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBnZXRGb3JtQnlJRFxyXG5cclxuICAvLyNyZWdpb24gY29uZmlndXJlQ29sdW1uc1xyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgY29uZmlndXJhcmUgbGUgY29sb25uZSBkZWxsYSBlcXAtdGFibGUuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjb25maWd1cmVDb2x1bW5zKCkge1xyXG5cclxuICAgIC8vIHRoaXMuY29uZmlndXJlVGFiZWxsYXJDb2x1bW5zKCk7XHJcblxyXG4gICAgLy8gdGhpcy5jcmVhdGVBZGRpdGlvbmFsQWN0aW9ucygpO1xyXG4gICAgLy8gdGhpcy5jcmVhdGVDb2x1bW5zRnJvbUZvcm1GaWVsZHMoKTtcclxuICAgIGlmICh0aGlzLnJlY29yZHMgPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLmdldFJlY29yZHNCeUZvcm1JRCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdSZWNvcmRzIEV4aXN0cycsIHRoaXMucmVjb3Jkcyk7XHJcbiAgICAgIHRoaXMuZ2VuZXJhdGVBbnN3ZXJzQXJyYXkodGhpcy5yZWNvcmRzKTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIGNvbmZpZ3VyZUNvbHVtbnNcclxuXHJcbiAgLy8jcmVnaW9uIGNvbmZpZ3VyZVRhYmVsbGFyQ29sdW1uc1xyXG4gIC8vIHByaXZhdGUgY29uZmlndXJlVGFiZWxsYXJDb2x1bW5zKCl7XHJcblxyXG4gIC8vICAgICAvKipcclxuICAvLyAgICAgICogTWV0b2RvIHBlciBjcmVhcmUgbGEgY29uZmlndXJhemlvbmUgZGVsbGUgY29sb25uZSBwZXIgbGEgZXFwLXRhYmxlLlxyXG4gIC8vICAgICAgKiBJbmRpdmlkdWEgaSBCYXNlRmllbGQgZGEgbW9zdHJhcmUgZSBsaSB1c2EgcGVyIGNyZWFyZSBsZSBDb25maWdDb2x1bW4uXHJcbiAgLy8gICAgICAqIExlIGNvbG9ubmUgdmVuZ29ubyBjcmVhdGUgcGVyIGkgQmFzZUZpZWxkIGNvbiBpbCBmbGFnIEluTGlzdFZpZXcgYSBUUlVFXHJcbiAgLy8gICAgICAqIG9wcHVyZSwgbmVsIGNhc28gbm9uIHNpYW5vIHN0YXRpIHNwZWNpZmljYXRpIGkgY2FtcGkgZGEgdmlzdWFsaXp6YXJlLFxyXG4gIC8vICAgICAgKiBzZWxlemlvbmEgaSBwcmltaSA2LlxyXG4gIC8vICAgICAgKi9cclxuXHJcbiAgLy8gICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnbGlzdC1mb3JtLXJlY29yZCAtIGNyZWF0ZUNvbHVtbnNGcm9tRm9ybUZpZWxkcycsIHRoaXMuZm9ybSk7XHJcbiAgICBcclxuICAvLyAgICAgICB2YXIgZmllbGRzRm9yQ29sdW1uczogQXJyYXk8QmFzZUZpZWxkPjtcclxuICAvLyAgICAgICBpZiAodGhpcy5mb3JtLkZpZWxkcy5maW5kKChmKSA9PiBmLkluTGlzdFZpZXcpKSB7XHJcbiAgLy8gICAgICAgICBmaWVsZHNGb3JDb2x1bW5zID0gdGhpcy5mb3JtLkZpZWxkcy5maWx0ZXIoKGYpID0+IGYuSW5MaXN0Vmlldyk7XHJcbiAgLy8gICAgICAgfSBlbHNlIHtcclxuICAvLyAgICAgICAgIGZpZWxkc0ZvckNvbHVtbnMgPSB0aGlzLmZvcm0uRmllbGRzLmZpbHRlcigoZikgPT4gZi5PcmRpbmFsUG9zaXRpb24gPCA2KTtcclxuICAvLyAgICAgICB9XHJcbiAgLy8gICAgICAgZmllbGRzRm9yQ29sdW1uc1xyXG4gIC8vICAgICAgICAgLnNvcnQoKGEsIGIpID0+XHJcbiAgLy8gICAgICAgICAgIGEuT3JkaW5hbFBvc2l0aW9uID4gYi5PcmRpbmFsUG9zaXRpb25cclxuICAvLyAgICAgICAgICAgICA/IDFcclxuICAvLyAgICAgICAgICAgICA6IGIuT3JkaW5hbFBvc2l0aW9uID4gYS5PcmRpbmFsUG9zaXRpb25cclxuICAvLyAgICAgICAgICAgICA/IC0xXHJcbiAgLy8gICAgICAgICAgICAgOiAwXHJcbiAgLy8gICAgICAgICApXHJcbiAgLy8gICAgICAgICAuZm9yRWFjaCgoZmllbGQpID0+IHtcclxuICAvLyAgICAgICAgICAgdGhpcy5jb2x1bW5zLnB1c2godGhpcy5jcmVhdGVGaWVsZENvbHVtbihmaWVsZCkpO1xyXG4gIC8vICAgICAgICAgfSk7XHJcblxyXG4gIC8vICAgICAgICAgY29uc29sZS5sb2coXCJGSU5BTCBDT0xVTVNOXCIsIHRoaXMuY29sdW1ucyk7XHJcblxyXG4gIC8vIH1cclxuICAvLyNlbmRyZWdpb24gY29uZmlndXJlVGFiZWxsYXJDb2x1bW5zXHJcblxyXG4gIC8vI3JlZ2lvbiBjcmVhdGVGaWVsZENvbHVtblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgY3JlYXJlIGwnb2dnZXR0byBDb25maWd1cmVDb2x1bW4gY2hlIHJhcHByZXNlbnRhIGlsIEJhc2VGaWVsZCBwYXNzYXRvIGluIGlucHV0LlxyXG4gICAqIEBwYXJhbSBmaWVsZCBCYXNlRmllbGQgcGVyIGN1aSBjcmVhcmUgbGEgY29sb25uYSBuZWxsYSBlcXAtdGFibGVcclxuICAgKiBAcmV0dXJucyBSZXN0aXR1aXNjZSB1bmEgQ29uZmlnQ29sdW1uIHBlciBsYSBlcXAtdGFibGVcclxuICAgKi9cclxuICBwcml2YXRlIGNyZWF0ZUZpZWxkQ29sdW1uKGZpZWxkOiBCYXNlRmllbGQpOiBDb25maWdDb2x1bW4ge1xyXG4gICAgdmFyIGNvbHVtbjogQ29uZmlnQ29sdW1uID0geyBrZXk6IGZpZWxkLk5hbWUsIGRpc3BsYXk6IGZpZWxkLkxhYmVsIH07XHJcbiAgICBzd2l0Y2ggKGZpZWxkLkZpZWxkVHlwZSkge1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJCb29sZWFub1wiXTpcclxuICAgICAgICBjb2x1bW4udHlwZSA9IFR5cGVDb2x1bW4uQm9vbGVhbjtcclxuICAgICAgICBjb2x1bW4uYm9vbGVhblZhbHVlcyA9IHtcclxuICAgICAgICAgIGZhbHNlOiAnPGkgY2xhc3M9XCJmYSBmYS10aW1lcyBlcnJvci1jb2xvclwiPjwvaT4nLFxyXG4gICAgICAgICAgdHJ1ZTogJzxpIGNsYXNzPVwiZmEgZmEtY2hlY2sgc3VjY2Vzcy1jb2xvclwiPjwvaT4nLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29sdW1uLnN0eWxlcyA9IHtcclxuICAgICAgICAgIGZsZXg6IFwiMCAwIDclXCIsXHJcbiAgICAgICAgICBjZWxsQWxpZ25tZW50OiBDZWxsQWxpZ25tZW50RW51bS5DRU5URVIsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiRGF0YSBlL28gb3JhXCJdOlxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIChmaWVsZCBhcyBEYXRlRmllbGQpLklzT25seURhdGUgIT0gRGF0ZVRpbWVUeXBlRW51bVtcIlNvbG8gb3JhcmlvXCJdXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBjb2x1bW4udHlwZSA9IFR5cGVDb2x1bW4uRGF0ZTtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgKGZpZWxkIGFzIERhdGVGaWVsZCkuSXNPbmx5RGF0ZSA9PSBEYXRlVGltZVR5cGVFbnVtW1wiRGF0YSBlIG9yYVwiXVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGNvbHVtbi5mb3JtYXQgPSBcImRkL01NL3l5eXkgSEg6bW1cIjtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgIChmaWVsZCBhcyBEYXRlRmllbGQpLklzT25seURhdGUgPT0gRGF0ZVRpbWVUeXBlRW51bVtcIlNvbG8gZGF0YVwiXVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGNvbHVtbi5mb3JtYXQgPSAoZmllbGQgYXMgRGF0ZUZpZWxkKS5EYXRlRm9ybWF0XHJcbiAgICAgICAgICAgICAgPyAoZmllbGQgYXMgRGF0ZUZpZWxkKS5EYXRlRm9ybWF0LnJlcGxhY2UoXCJERFwiLCBcImRkXCIpXHJcbiAgICAgICAgICAgICAgOiBcImRkL01NL3l5eXlcIjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkNhbXBvIG51bWVyaWNvXCJdOlxyXG4gICAgICAgIGlmICgoZmllbGQgYXMgTnVtZXJpY0ZpZWxkKS5DdXJyZW5jeVN5bWJvbCkge1xyXG4gICAgICAgICAgY29sdW1uLm51bWJlclBpcGUgPSBOdW1iZXJDb2x1bW5QaXBlLkNVUlJFTkNZO1xyXG4gICAgICAgICAgY29sdW1uLmN1cnJlbmN5UGlwZUNvZGUgPSAoZmllbGQgYXMgTnVtZXJpY0ZpZWxkKS5DdXJyZW5jeVN5bWJvbDtcclxuICAgICAgICB9IGVsc2UgaWYgKCEoZmllbGQgYXMgTnVtZXJpY0ZpZWxkKS5Jc0ludGVnZXIpIHtcclxuICAgICAgICAgIGNvbHVtbi5udW1iZXJQaXBlID0gTnVtYmVyQ29sdW1uUGlwZS5ERUNJTUFMO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiQWxsZWdhdG9cIl06XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkltbWFnaW5lXCJdOlxyXG4gICAgIFxyXG4gICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkV0aWNoZXR0YVwiXTpcclxuICAgICAgICBjb2x1bW4udmFsdWUgPSAoZWxlbWVudDogUmVjb3JkKSA9PiB7IHJldHVybiAoZmllbGQgYXMgTGFiZWxGaWVsZCkuRXRpY2hldHRhOyB9O1xyXG4gICAgICBicmVhazsgICAgICAgIFxyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJFbGVuY28gZ2VuZXJpY29cIl06XHJcblxyXG4gICAgICAgIGNvbHVtbi52YWx1ZSA9IChlbGVtZW50OiBSZWNvcmQpID0+IHtcclxuICAgICAgICAgIGlmICgoZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLklzTXVsdGlDaG9pY2hlKSB7XHJcbiAgICAgICAgICAgIGlmICghZWxlbWVudFtmaWVsZC5OYW1lXSB8fCBlbGVtZW50W2ZpZWxkLk5hbWVdLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKChmaWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVQYWlycylcclxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGspID0+XHJcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnRbZmllbGQuTmFtZV0uaW5jbHVkZXMoXHJcbiAgICAgICAgICAgICAgICAgICAgKGZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzW2tdXHJcbiAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIC5qb2luKFwiLCBcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICBpZiAoKGZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzID09IG51bGwpeyBcclxuXHJcbiAgICAgICAgICAgICAgdmFyIHZzID0gKGZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVN0cmluZztcclxuICAgICAgICAgICAgICBpZiAodnMgIT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICB2YXIgb3B0aW9ucyA9IHZzLnNwbGl0KFwiO1wiKTtcclxuICAgICAgICAgICAgICAgIHZhciBmb3VuZHZhbHVlID0gXCJcIjtcclxuICAgICAgICAgICAgICAgIG9wdGlvbnMuZm9yRWFjaCgob3ApID0+IHtcclxuICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IG9wLnNwbGl0KFwifFwiKTtcclxuICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlc1sxXSA9PSBlbGVtZW50W2ZpZWxkLk5hbWVdKXtcclxuICAgICAgICAgICAgICAgICAgICBmb3VuZHZhbHVlID0gdmFsdWVzWzBdO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZHZhbHVlO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJcIjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cygoZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLlZhbHVlUGFpcnMpLmZpbmQoXHJcbiAgICAgICAgICAgICAgKGspID0+XHJcbiAgICAgICAgICAgICAgICAoZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLlZhbHVlUGFpcnNba10gPT0gZWxlbWVudFtmaWVsZC5OYW1lXVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29sdW1uLmlzU29ydGFibGUgPSBmYWxzZTtcclxuICAgICAgICBjb2x1bW4uaXNTZWFyY2hhYmxlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJMb29rdXBcIl06XHJcbiAgICAgICAgLy8gVE9ET1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbHVtbjtcclxuICB9ICBcclxuICAvLyNlbmRyZWdpb24gY3JlYXRlRmllbGRDb2x1bW5cclxuXHJcbiAgLy8jcmVnaW9uIGdldFJlY29yZHNCeUZvcm1JRFxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgcmVjdXBlcmFyZSB0dXR0aSBpIHJlY29yZCBzYWx2YXRpIHBlciB1bmEgcGFydGljb2xhcmUgRm9ybS5cclxuICAgKiBMYSBjaGlhbWF0YSB2aWVuZSBlZmZldHR1YXRhIHNvbG8gc2Ugw6ggc3RhdG8gY29uZmlndXJhdG8gbCdlbmRQb2ludCBkYSB1c2FyZS5cclxuICAgKiBMYSByaXNwb3N0YSBkZWxsYSBjaGlhbWF0YSBkZXZlIGVzc2VyZSB1biBhcnJheSBkaSBvZ2dldHRpIGRpIHRpcG8gXCJEeW5SZWNvcmRcIlxyXG4gICAqIGEgcGFydGlyZSBkYWkgcXVhbGkgdmVuZ29ubyByaWNyZWF0aSBpIFJlY29yZCB1c2F0aSBuZWwgY2xpZW50LlxyXG4gICAqL1xyXG4gIGFzeW5jIGdldFJlY29yZHNCeUZvcm1JRCgpIHtcclxuICAgIHZhciBkeW5hbWljTW9kdWxlUGFyYW1zID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAgUGFyYW1OYW1lOiBcIkVudElEXCIsXHJcbiAgICAgICAgUGFyYW1WYWx1ZTogdGhpcy5mb3JtLklELFxyXG4gICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICB9LFxyXG4gICAgXTtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMudXNlcklEID09IG51bGwgJiZcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24gJiZcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3JkcyAmJlxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEJ5Rm9ybUlERW5kUG9pbnRcclxuICAgICkge1xyXG4gICAgICAvLyBzZSBub24gY29ub3NjbyBsJ3V0ZW50ZVxyXG4gICAgICBhd2FpdCB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEJ5Rm9ybUlERW5kUG9pbnQsXHJcbiAgICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgICAocmVzOiBBcnJheTxEeW5SZWNvcmQ+KSA9PiB7XHJcbiAgICAgICAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coJ0dldEJ5Rm9ybUlERW5kUG9pbnQnLCByZXMpXHJcbiAgICAgICAgICB0aGlzLmdlbmVyYXRlQW5zd2Vyc0FycmF5KHJlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgdGhpcy5jb25maWd1cmF0aW9ucy51c2VySUQgIT0gbnVsbCAmJlxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbiAmJlxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzICYmXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuR2V0QWxsQnlFbnRBbmRVc2VySURFbmRQb2ludFxyXG4gICAgKSB7XHJcbiAgICAgIC8vIHNlIGNvbm9zY28gbCd1dGVudGVcclxuICAgICAgbGV0IGR5bmFtaWNNb2R1bGVQYXJhbXMgPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgUGFyYW1OYW1lOiBcIkVudElEXCIsXHJcbiAgICAgICAgICBQYXJhbVZhbHVlOiB0aGlzLmZvcm0uSUQsXHJcbiAgICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFBhcmFtTmFtZTogXCJVc2VySURcIixcclxuICAgICAgICAgIFBhcmFtVmFsdWU6IHRoaXMuY29uZmlndXJhdGlvbnMudXNlcklELFxyXG4gICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgICAgfSxcclxuICAgICAgXTtcclxuXHJcbiAgICAgIGF3YWl0IHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuR2V0QWxsQnlFbnRBbmRVc2VySURFbmRQb2ludCxcclxuICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgIChyZXM6IEFycmF5PER5blJlY29yZD4pID0+IHtcclxuICAgICAgICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnR2V0QWxsQnlFbnRBbmRVc2VySURFbmRQb2ludCcsIHJlcylcclxuICAgICAgICAgIHRoaXMuZ2VuZXJhdGVBbnN3ZXJzQXJyYXkocmVzKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKFwiY29udHJvbGxhcmUgbGUgY29uZmlndXJhemlvbmkgZGVsbCdlbmRwb2ludFwiKTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIGdldFJlY29yZHNCeUZvcm1JRFxyXG5cclxuICAvLyNyZWdpb24gZ2VuZXJhdGVBbnN3ZXJzQXJyYXlcclxuICBwcml2YXRlIGdlbmVyYXRlQW5zd2Vyc0FycmF5KHJlczogQXJyYXk8RHluUmVjb3JkPikge1xyXG4gICAgdGhpcy5jb25maWd1cmF0aW9ucy52YWx1ZXMgPSBuZXcgQXJyYXk8UmVjb3JkPigpO1xyXG4gICAgdGhpcy5wYW5lbHMgPSBuZXcgQXJyYXk8UGFuZWw+KCk7XHJcbiAgICByZXMuZm9yRWFjaCgocikgPT4ge1xyXG4gICAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJnZW5lcmF0ZUFuc3dlcnNBcnJheVwiLCByKVxyXG4gICAgICB2YXIgdG1wUmVjOiBSZWNvcmQgPSBuZXcgUmVjb3JkKCk7XHJcbiAgICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcIlNlcmlhbGl6ZWRWYWx1ZXNcIiwgci5TZXJpYWxpemVkVmFsdWVzKVxyXG4gICAgICB0bXBSZWMgPSBKU09OLnBhcnNlKHIuU2VyaWFsaXplZFZhbHVlcyk7XHJcbiAgICAgIHRtcFJlYy5JRCA9IHIuSUQ7XHJcbiAgICAgIHRtcFJlYy5FbnRJRCA9IHIuRW50SUQ7XHJcbiAgICAgIHRtcFJlYy5WZXJzaW9uID0gci5WZXJzaW9uO1xyXG4gICAgICB0bXBSZWMudXNlcklEID0gci51c2VySUQ7XHJcbiAgICAgIHRtcFJlYy5BbnN3ZXJEYXRlID0gdGhpcy5kYkRhdGVTZXJ2aWNlLnBhcnNlRGF0ZWZyb21EQihyLkFuc3dlckRhdGUpLnRvU3RyaW5nKCk7XHJcblxyXG4gICAgICB0bXBSZWMuSFRNTHJlYWRhYmxlVmFsdWVzID0gci5IVE1McmVhZGFibGVWYWx1ZXM7XHJcbiAgICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcIkFkZGl0aW9uYWxQYXJhbXNcIiwgci5BZGRpdGlvbmFsUGFyYW1zKVxyXG4gICAgICB0bXBSZWMuQWRkaXRpb25hbFBhcmFtcyA9IHIuQWRkaXRpb25hbFBhcmFtcyAhPSBcIlwiICYmIHIuQWRkaXRpb25hbFBhcmFtcyAhPSBudWxsID8gSlNPTi5wYXJzZShyLkFkZGl0aW9uYWxQYXJhbXMpIDogXCJcIjtcclxuICAgICAgdG1wUmVjLkFkZGl0aW9uYWxJbmZvID0gci5BZGRpdGlvbmFsSW5mbyAhPSBcIlwiICYmIHIuQWRkaXRpb25hbEluZm8gIT0gbnVsbCA/IEpTT04ucGFyc2Uoci5BZGRpdGlvbmFsSW5mbykgOiBcIlwiO1xyXG5cclxuICAgICAgdmFyIGZvdW5ka2V5ID0gdHJ1ZTtcclxuICAgICAgY29uc29sZS5sb2coXCJIRVJFIDFcIik7XHJcbiAgICAgIGlmICh0aGlzLmNvbnRlc3R1YWxpemF0aW9uUGFyYW1zICE9IG51bGwpe1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiSEVSRSAyXCIpO1xyXG4gICAgICAgIGlmICh0bXBSZWMuQWRkaXRpb25hbFBhcmFtcyAhPSBudWxsKXtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiSEVSRSAzXCIpO1xyXG4gICAgICAgICAgT2JqZWN0LmtleXModGhpcy5jb250ZXN0dWFsaXphdGlvblBhcmFtcykuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghdG1wUmVjLkFkZGl0aW9uYWxQYXJhbXMuaGFzT3duUHJvcGVydHkoa2V5KSB8fCB0aGlzLmNvbnRlc3R1YWxpemF0aW9uUGFyYW1zW2tleV0uaW5kZXhPZih0bXBSZWMuQWRkaXRpb25hbFBhcmFtc1trZXldKSA9PSAtMSl7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJIRVJFIDRcIik7XHJcbiAgICAgICAgICAgICAgZm91bmRrZXkgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZm91bmRrZXkpe1xyXG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMudmFsdWVzLnB1c2godG1wUmVjKTtcclxuXHJcbiAgICAgICAgdmFyIGlzSGlnaGxpZ2h0ZWQgPSBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5oaWdobGlnaHRGaWx0ZXIgIT0gbnVsbCkge1xyXG4gICAgICAgICAgaXNIaWdobGlnaHRlZCA9IHRydWU7XHJcbiAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmhpZ2hsaWdodEZpbHRlcikuZm9yRWFjaCgoZmlsdGVyKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghdG1wUmVjLkFkZGl0aW9uYWxQYXJhbXNbZmlsdGVyXSB8fCB0bXBSZWMuQWRkaXRpb25hbFBhcmFtc1tmaWx0ZXJdICE9IHRoaXMuaGlnaGxpZ2h0RmlsdGVyW2ZpbHRlcl0pIHtcclxuICAgICAgICAgICAgICBpc0hpZ2hsaWdodGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5wYW5lbHMucHVzaCh7IHJlY29yZDogdG1wUmVjLCBpc09wZW46IGZhbHNlLCBwYWdlU3RhdGU6IG51bGwsIGhpZ2hsaWdodGVkOiBpc0hpZ2hsaWdodGVkIH0pO1xyXG5cclxuICAgICAgfVxyXG5cclxuXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICBzZXRUaW1lb3V0KChfKSA9PiB7XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSwgMCk7IC8vIHJlZnJlc2ggdWlcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIGdlbmVyYXRlQW5zd2Vyc0FycmF5XHJcblxyXG4gIC8vI3JlZ2lvbiB0b2dnbGVQYW5lbFxyXG4gIHRvZ2dsZVBhbmVsKHBhbmVsOiBhbnksIHJlY29yZDogUmVjb3JkKSB7XHJcbiAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coJ3RvZ2dsZVBhbmVsJylcclxuICAgIGlmICh0aGlzLmRlZmF1bHRMaXN0Vmlld0Z1bmN0aW9uICE9IG51bGwpIHtcclxuICAgICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdkZWZhdWx0TGlzdFZpZXdGdW5jdGlvbicsIHJlY29yZClcclxuICAgICAgdGhpcy5kZWZhdWx0TGlzdFZpZXdGdW5jdGlvbihyZWNvcmQpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoIXBhbmVsLmlzT3Blbikge1xyXG4gICAgICBwYW5lbC5pc09wZW4gPSB0cnVlO1xyXG4gICAgICBwYW5lbC5wYWdlU3RhdGUgPSAndmlzdWFsaXp6YUNvbnRlbnV0byc7XHJcbiAgICAgIC8vIFNpbXVsYSB1biBjYWxjb2xvIGFzaW5jcm9ub1xyXG4gICAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgLy8gfSwgMTAwMCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBwYW5lbC5pc09wZW4gPSBmYWxzZTtcclxuICAgICAgcGFuZWwucGFnZVN0YXRlID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIHRvZ2dsZVBhbmVsXHJcblxyXG4gIC8vI3JlZ2lvbiB2aWV3T3JFZGl0UmVjb3JkXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGNoZSBzY2F0ZW5hIGwnZXZlbnRvIGRpIE91dHB1dCBwZXIgbW9zdHJhcmUgbyBtb2RpZmljYXJlIGlsIHJlY29yZFxyXG4gICAqIHNlbGV6aW9uYXRvIHN1bGxhIGVxcC10YWJsZS5cclxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZCBkYSB2aXN1YWxpenphcmUgbyBtb2RpZmljYXJlIHNlbGV6aW9uYXRvIHN1bGxhIGVxcC10YWJsZS5cclxuICAgKiBAcGFyYW0gb25seVZpZXcgU2UgVFJVRSB2aWVuZSBtb3N0cmF0byBpbCBjb21wb25lbnRlIGFkZC1mb3JtLXJlY29yZCBpbiBzb2xhIGxldHR1cmEuXHJcbiAgICovXHJcbiAgdmlld09yRWRpdFJlY29yZChyZWNvcmQ6IFJlY29yZCwgb25seVZpZXc6IGJvb2xlYW4sIGkpIHtcclxuICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygndmlld09yRWRpdFJlY29yZCcpXHJcbiAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgdGhpcy5vbkFkZFZpZXdFZGl0UmVjb3JkMih7IHJlY29yZCwgb25seVZpZXcgfSk7XHJcbiAgICB0aGlzLnBhbmVsT3BlblN0YXRlLm1hcCgoKSA9PiBmYWxzZSk7XHJcbiAgICB0aGlzLnBhbmVsT3BlblN0YXRlW2ldID0gdGhpcy5wYW5lbE9wZW5TdGF0ZVtpXSA9PSB0cnVlID8gZmFsc2UgOiB0cnVlO1xyXG4gICAgLy8gdGhpcy5vbkFkZFZpZXdFZGl0UmVjb3JkLmVtaXQoeyByZWNvcmQsIG9ubHlWaWV3IH0pO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gdmlld09yRWRpdFJlY29yZFxyXG5cclxuICAvLyNyZWdpb24gdmlld1JlY29yZFxyXG4gIHZpZXdSZWNvcmQocGFuZWw6IFBhbmVsLCBvbmx5VmlldzogYm9vbGVhbiwgaSwgZXY6IEV2ZW50KSB7XHJcbiAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coJ3ZpZXdSZWNvcmQnKVxyXG4gICAgbGV0IHJlY29yZCA9IHBhbmVsLnJlY29yZFxyXG4gICAgdGhpcy52aXN1YWxpenphQ29udGVudXRvID0gdHJ1ZTtcclxuICAgIHRoaXMubW9kaWZpY2FDb250ZW51dG8gPSBmYWxzZTtcclxuICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAvLyB0aGlzLm9uQWRkVmlld0VkaXRSZWNvcmQyKHsgcmVjb3JkLCBvbmx5VmlldyB9KTtcclxuICAgIGlmIChwYW5lbC5wYWdlU3RhdGUgPT0gJ3Zpc3VhbGl6emFDb250ZW51dG8nKSB7XHJcbiAgICAgIHBhbmVsLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgICBwYW5lbC5wYWdlU3RhdGUgPSBudWxsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcGFuZWwuaXNPcGVuID0gdHJ1ZTtcclxuICAgICAgcGFuZWwucGFnZVN0YXRlID0gJ3Zpc3VhbGl6emFDb250ZW51dG8nO1xyXG4gICAgfVxyXG4gICAgdGhpcy5wYW5lbE9wZW5TdGF0ZS5tYXAoKCkgPT4gZmFsc2UpO1xyXG4gICAgdGhpcy5wYW5lbE9wZW5TdGF0ZVtpXSA9IHRoaXMucGFuZWxPcGVuU3RhdGVbaV0gPT0gdHJ1ZSA/IGZhbHNlIDogdHJ1ZTtcclxuICAgIC8vIHRoaXMub25BZGRWaWV3RWRpdFJlY29yZC5lbWl0KHsgcmVjb3JkLCBvbmx5VmlldyB9KTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIHZpZXdSZWNvcmRcclxuXHJcbiAgLy8jcmVnaW9uIEVkaXRSZWNvcmRcclxuICBFZGl0UmVjb3JkKHBhbmVsOiBQYW5lbCwgb25seVZpZXc6IGJvb2xlYW4sIGksIGV2OiBFdmVudCkge1xyXG4gICAgZXYucHJldmVudERlZmF1bHQoKTtcclxuICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdFZGl0UmVjb3JkJylcclxuXHJcbiAgICBsZXQgcmVjb3JkID0gcGFuZWwucmVjb3JkXHJcbiAgICBwYW5lbC5yZWNvcmQuQWRkaXRpb25hbEluZm8gPSBPYmplY3QuYXNzaWduKHt9LCByZWNvcmQuQWRkaXRpb25hbEluZm8sIHRoaXMuY29uZmlndXJhdGlvbnMudXBkYXRlSW5mbyk7XHJcbiAgICB0aGlzLnZpc3VhbGl6emFDb250ZW51dG8gPSBmYWxzZTtcclxuICAgIHRoaXMubW9kaWZpY2FDb250ZW51dG8gPSB0cnVlO1xyXG4gICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgIC8vIHRoaXMub25BZGRWaWV3RWRpdFJlY29yZDIoeyByZWNvcmQsIG9ubHlWaWV3IH0pO1xyXG4gICAgaWYgKHBhbmVsLnBhZ2VTdGF0ZSA9PSAnbW9kaWZpY2FDb250ZW51dG8nKSB7XHJcbiAgICAgIHBhbmVsLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgICBwYW5lbC5wYWdlU3RhdGUgPSBudWxsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcGFuZWwuaXNPcGVuID0gdHJ1ZTtcclxuICAgICAgcGFuZWwucGFnZVN0YXRlID0gJ21vZGlmaWNhQ29udGVudXRvJztcclxuICAgIH1cclxuICAgIHRoaXMucGFuZWxPcGVuU3RhdGUubWFwKCgpID0+IGZhbHNlKTtcclxuICAgIHRoaXMucGFuZWxPcGVuU3RhdGVbaV0gPSB0aGlzLnBhbmVsT3BlblN0YXRlW2ldID09IHRydWUgPyBmYWxzZSA6IHRydWU7XHJcbiAgICAvLyB0aGlzLm9uQWRkVmlld0VkaXRSZWNvcmQuZW1pdCh7IHJlY29yZCwgb25seVZpZXcgfSk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBFZGl0UmVjb3JkXHJcblxyXG4gIC8vI3JlZ2lvbiBleHRlcm5hbENhbGxiYWNrXHJcbiAgZXh0ZXJuYWxDYWxsYmFjayhldjogRXZlbnQsIGNhbGxiYWNrOiBGdW5jdGlvbiwgcmVjb3JkOiBhbnkpIHtcclxuICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIGNhbGxiYWNrKHJlY29yZCk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBleHRlcm5hbENhbGxiYWNrXHJcblxyXG4gIC8vI3JlZ2lvbiBkdXBsaWNhdGVSZWNvcmRcclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGR1cGxpY2FyZSB1biByZWNvcmQgZGVsbGEgZm9ybS5cclxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZCBkYSBkdXBsaWNhcmUuXHJcbiAgICovXHJcbiAgZHVwbGljYXRlUmVjb3JkKHBhbmVsOiBQYW5lbCwgb25seVZpZXc6IGJvb2xlYW4sIGksIGV2OiBFdmVudCkge1xyXG4gICAgZXYucHJldmVudERlZmF1bHQoKTtcclxuICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnZHVwbGljYXRlUmVjb3JkJyk7XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZFJlY29yZCA9IHBhbmVsLnJlY29yZC5JRDtcclxuICAgIHRoaXMuaXNEdXBsaWNhdGluZyA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5vcGVuQWRkRGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLm9wZW5BZGREaWFsb2csIHtcclxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgd2lkdGg6IFwiODB2d1wiLFxyXG4gICAgICBtaW5IZWlnaHQ6IFwiMTAwcHhcIixcclxuICAgIH0pO1xyXG5cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIGR1cGxpY2F0ZVJlY29yZFxyXG5cclxuICAvLyNyZWdpb24gZGVsZXRlUmVjb3JkXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBlbGltaW5hcmUgdW4gcmVjb3JkIGRhbGxhIGxpc3RhLlxyXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkIGRhIGVsaW1pbmFyZSBzZWxlemlvbmF0byBzdWxsYSBlcXAtdGFibGUuXHJcbiAgICovXHJcbiAgZGVsZXRlUmVjb3JkKHJlY29yZDogUmVjb3JkLCBldjogRXZlbnQpIHtcclxuICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIHRoaXMub25EZWxldGVSZWNvcmQuZW1pdChyZWNvcmQpO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gZGVsZXRlUmVjb3JkXHJcblxyXG4gIC8vI3JlZ2lvbiByZWxvYWRUYWJsZXNcclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHJpY2FyaWNhcmUgaSBkYXRpIGRlbGxhIGVxcC10YWJsZS5cclxuICAgKi9cclxuICBwcml2YXRlIHJlbG9hZFRhYmxlcygpIHtcclxuICAgIGlmICh0aGlzLnRhYmxlUmVjb3Jkcykge1xyXG4gICAgICB0aGlzLnRhYmxlUmVjb3Jkcy5yZWxvYWREYXRhdGFibGUoKTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIHJlbG9hZFRhYmxlc1xyXG5cclxuICAvLyNyZWdpb24gc2F2ZU9yRXhpdEZvcm1cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHNhbHZhcmUgaSBkYXRpIGluc2VyaXRpIGRhbGwndXRlbnRlIHVuYSB2b2x0YSBjb25jbHVzYSBsYSBjb21waWxhemlvbmUgZGVsbGEgZm9ybS5cclxuICAgKi9cclxuICBzYXZlT3JFeGl0Rm9ybShyZWNvcmQ6IFJlY29yZCkge1xyXG4gICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdsaXN0LXZpZXctZm9ybS1yZWNvcmQgc2F2ZScsIHJlY29yZClcclxuICAgIHRoaXMuc2F2ZVJlY29yZEV2ZW50LmVtaXQocmVjb3JkKTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIHNhdmVPckV4aXRGb3JtXHJcblxyXG4gIC8vI3JlZ2lvbiBvbkFmdGVyU2F2ZVJlY29yZFxyXG4gIG9uQWZ0ZXJTYXZlUmVjb3JkKGV2ZW50KSB7XHJcbiAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coJ2xpc3Qtdmlldy1mb3JtLXJlY29yZCBhZnRlcnNhdmUnLCBldmVudClcclxuICAgIHRoaXMuc2F2ZVJlY29yZEV2ZW50LmVtaXQoZXZlbnQpO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gb25BZnRlclNhdmVSZWNvcmRcclxuXHJcbiAgLy8jcmVnaW9uIG9uQWRkVmlld0VkaXRSZWNvcmQyXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGludm9jYXRvIHF1YW5kbyBzaSB2dW9sZSBhZ2dpdW5nZXJlLCB2aXN1YWxpenphcmUgbyBtb2RpZmljYXJlIHVuIHJlY29yZC5cclxuICAgKiBTZSBsJ2V2ZW50byDDqCBudWxsIHZ1b2wgZGlyZSBjaGUgc3RpYW1vIGFnZ2l1bmdlbmRvIHVuIG51b3ZvIHJlY29yZCBhbHRyaW1lbnRpIHNpYW1vIGluIG1vZGlmaWNhXHJcbiAgICogbyB2aXN1YWxpenphemlvbmUuIEluIHF1ZXN0aSB1bHRpbWkgZHVlIGNhc2ksIHNlIMOoIHN0YXRvIGNvbmZpZ3VyYXRvIHVuIGVuZHBvaW50IHBlciBpbCByZWN1cGVyb1xyXG4gICAqIGRlbCByZWNvcmQgY29tcGxldG8gYWxsb3JhIHZpZW5lIGVmZmV0dHVhdGEgdW5hIGNoaWFtYXRhIGFsIHNlcnZlciwgYWx0cmltZW50aSB2aWVuZSB1c2F0byBsJ29nZ2V0dG8gc2VsZXppb25hdG8uXHJcbiAgICogQHBhcmFtIGV2ZW50IE9nZ2V0dG8gY29uIGR1ZSBwcm9wcmlldMOgOlxyXG4gICAqIFwicmVjb3JkXCIgPSBvZ2dldHRvIGRhIG1vZGlmaWNhcmUvdmlzdWFsaXp6YXJlLFxyXG4gICAqIFwib25seVZpZXdcIiA9IGJvb2xlYW5vIChzZSBUUlVFIHNpYW1vIGluIHZpc3VhbGl6emF6aW9uZSBhbHRyaW1lbnRpIGluIG1vZGlmaWNhKVxyXG4gICAqL1xyXG4gIG9uQWRkVmlld0VkaXRSZWNvcmQyKGV2ZW50OiB7IHJlY29yZDogUmVjb3JkOyBvbmx5VmlldzogYm9vbGVhbiB9KSB7XHJcblxyXG4gICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmQgPSBudWxsO1xyXG5cclxuICAgIHRoaXMub25seVZpZXcgPSBldmVudC5vbmx5VmlldztcclxuXHJcbiAgICB0aGlzLm91dENvbXBpbGVDb25maWd1cmF0aW9ucy5zaG93QmFja0J1dHRvbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5vdXRDb21waWxlQ29uZmlndXJhdGlvbnMuc2hvd1NhdmVCdXR0b24gPSAhZXZlbnQub25seVZpZXc7XHJcbiAgICB0aGlzLm91dENvbXBpbGVDb25maWd1cmF0aW9ucy5zaG93VGl0bGUgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoZXZlbnQgIT0gbnVsbCkge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24gJiZcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzICYmXHJcbiAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5HZXRCeUlERW5kUG9pbnRcclxuICAgICAgKSB7XHJcbiAgICAgICAgLy8gcHJlcGFybyBsYSB2ZXJzaW9uZSBjb3JyZXR0YSBkZWwgZm9ybVxyXG4gICAgICAgIHZhciBkeW5hbWljTW9kdWxlUGFyYW1zID0gW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBQYXJhbU5hbWU6IFwiRW50SURcIixcclxuICAgICAgICAgICAgUGFyYW1WYWx1ZTogZXZlbnQucmVjb3JkLkVudElELFxyXG4gICAgICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIFBhcmFtTmFtZTogXCJWZXJzaW9uXCIsXHJcbiAgICAgICAgICAgIFBhcmFtVmFsdWU6IGV2ZW50LnJlY29yZC5WZXJzaW9uLFxyXG4gICAgICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgXTtcclxuICAgICAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLkdldEJ5SURBbmRWZXJzaW9uRW5kUG9pbnQsXHJcbiAgICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgICAgKHJlczogRm9ybSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm0gPSByZXM7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybS5PcmdhSUQgPSB0aGlzLm9yZ2FJRDtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZvcm0uT2JqZWN0VHJpZ2dlcnMgIT0gbnVsbCAmJiB0aGlzLmZvcm0uT2JqZWN0VHJpZ2dlcnMgIT0gXCJcIil7XHJcbiAgICAgICAgICAgICAgdGhpcy5mb3JtLlRyaWdnZXJzID0gSlNPTi5wYXJzZSh0aGlzLmZvcm0uT2JqZWN0VHJpZ2dlcnMpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuZm9ybS5UcmlnZ2VycyA9IG5ldyBBcnJheTxUcmlnZ2VyPigpO1xyXG4gICAgICAgICAgICB9ICAgICAgICAgICAgXHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5mb3JtLk9iamVjdEFjdGlvbkJ1dHRvbnMgIT0gbnVsbCAmJiB0aGlzLmZvcm0uT2JqZWN0QWN0aW9uQnV0dG9ucyAhPSBcIlwiKXtcclxuICAgICAgICAgICAgICB0aGlzLmZvcm0uQWN0aW9uQnV0dG9ucyA9IEpTT04ucGFyc2UodGhpcy5mb3JtLk9iamVjdEFjdGlvbkJ1dHRvbnMpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuZm9ybS5BY3Rpb25CdXR0b25zID0gbmV3IEFycmF5PEFjdGlvbkJ1dHRvbj4oKTtcclxuICAgICAgICAgICAgfSAgICAgICAgICAgICAgXHJcblxyXG4gICAgICAgICAgICB0aGlzLmFjdGlvbkJ1dHRvbnMgPSB0aGlzLmZvcm0uQWN0aW9uQnV0dG9ucztcclxuXHJcbiAgICAgICAgICAgIC8vIHByZXBhcm8gaSBkYXRpIGRlbCByZWNvcmRcclxuICAgICAgICAgICAgdmFyIGR5bmFtaWNSZWNvcmRQYXJhbXMgPSBbXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgUGFyYW1OYW1lOiBcImlkXCIsXHJcbiAgICAgICAgICAgICAgICBQYXJhbVZhbHVlOiBldmVudC5yZWNvcmQuSUQsXHJcbiAgICAgICAgICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEJ5SURFbmRQb2ludCxcclxuICAgICAgICAgICAgICBkeW5hbWljUmVjb3JkUGFyYW1zLFxyXG4gICAgICAgICAgICAgIChyZXM6IER5blJlY29yZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZCA9IEpTT04ucGFyc2UocmVzLlNlcmlhbGl6ZWRWYWx1ZXMpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZC5JRCA9IHJlcy5JRDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmQuRW50SUQgPSByZXMuRW50SUQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmVjb3JkLnVzZXJJRCA9IHJlcy51c2VySUQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmVjb3JkLlZlcnNpb24gPSByZXMuVmVyc2lvbjtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZXZlbnQucmVjb3JkKSk7XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBkeW5hbWljTW9kdWxlUGFyYW1zOiBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+ID1cclxuICAgICAgICBuZXcgQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPigpO1xyXG4gICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLnB1c2goe1xyXG4gICAgICAgIFBhcmFtTmFtZTogXCJpZFwiLFxyXG4gICAgICAgIFBhcmFtVmFsdWU6IHRoaXMuZm9ybUlELFxyXG4gICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuR2V0QnlJREVuZFBvaW50LFxyXG4gICAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMsXHJcbiAgICAgICAgKHJlczogRm9ybSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5mb3JtID0gcmVzO1xyXG4gICAgICAgICAgdGhpcy5mb3JtLk9yZ2FJRCA9IHRoaXMub3JnYUlEO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLmZvcm0uT2JqZWN0VHJpZ2dlcnMgIT0gbnVsbCAmJiB0aGlzLmZvcm0uT2JqZWN0VHJpZ2dlcnMgIT0gXCJcIil7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybS5UcmlnZ2VycyA9IEpTT04ucGFyc2UodGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybS5UcmlnZ2VycyA9IG5ldyBBcnJheTxUcmlnZ2VyPigpO1xyXG4gICAgICAgICAgfSAgICAgICBcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgaWYgKHRoaXMuZm9ybS5PYmplY3RBY3Rpb25CdXR0b25zICE9IG51bGwgJiYgdGhpcy5mb3JtLk9iamVjdEFjdGlvbkJ1dHRvbnMgIT0gXCJcIil7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybS5BY3Rpb25CdXR0b25zID0gSlNPTi5wYXJzZSh0aGlzLmZvcm0uT2JqZWN0QWN0aW9uQnV0dG9ucyk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm0uQWN0aW9uQnV0dG9ucyA9IG5ldyBBcnJheTxBY3Rpb25CdXR0b24+KCk7XHJcbiAgICAgICAgICB9ICBcclxuXHJcbiAgICAgICAgICB0aGlzLmFjdGlvbkJ1dHRvbnMgPSB0aGlzLmZvcm0uQWN0aW9uQnV0dG9ucztcclxuXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUmVjb3JkID0gbnVsbDtcclxuICAgICAgICAgIHRoaXMub25seVZpZXcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIChlcnIpID0+IHsgfVxyXG4gICAgICApO1xyXG5cclxuICAgICAgLy8gdGhpcy5zZWxlY3RlZFJlY29yZCA9IG51bGw7XHJcbiAgICAgIC8vIHRoaXMub25seVZpZXcgPSBmYWxzZTtcclxuICAgICAgLy8gdGhpcy52aWV3TW9kZSA9IER5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0uQ09NUElMRTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIG9uQWRkVmlld0VkaXRSZWNvcmQyXHJcblxyXG4gIC8vI3JlZ2lvbiBvcGVuQWxsXHJcbiAgb3BlbkFsbCgpe1xyXG4gICAgdGhpcy5pc0Z1bGxPcGVuZWQgPSAhdGhpcy5pc0Z1bGxPcGVuZWQ7XHJcbiAgICB0aGlzLnBhbmVscy5mb3JFYWNoKChwYW5lbCkgPT4ge1xyXG4gICAgICBpZiAocGFuZWwuaXNPcGVuICE9IHRoaXMuaXNGdWxsT3BlbmVkKXtcclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInAtXCIrcGFuZWwucmVjb3JkLklEK1wiLXZpc2liaWxpdHlcIikuY2xpY2soKTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIG9wZW5BbGxcclxuXHJcbiAgLy8jcmVnaW9uIG9wZW5BZGRQb3B1cFxyXG4gIG9wZW5BZGRQb3B1cCgpIHtcclxuICAgIC8vIG1pIHNzaWN1cm8gY2hlIG5vbiBjaSBzaWFubyBwYW5uZWxsaSBpbiBtb2RpZmljYSBwZXJjaMOoIGFsdHJpbWVudGkgdmEgaW4gY29uZmxpdHRvIGwndXBkYXRlIGNvbiBsJ2FkZFxyXG4gICAgdGhpcy5wYW5lbHMuZm9yRWFjaCgocGFuZWwpID0+IHtcclxuICAgICAgaWYocGFuZWwucGFnZVN0YXRlID0gJ21vZGlmaWNhQ29udGVudXRvJyl7XHJcbiAgICAgICAgcGFuZWwucGFnZVN0YXRlID0gJ3Zpc3VhbGl6emFDb250ZW51dG8nO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBkeW5hbWljTW9kdWxlUGFyYW1zOiBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+ID0gbmV3IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4oKTtcclxuICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMucHVzaCh7XHJcbiAgICAgIFBhcmFtTmFtZTogXCJpZFwiLFxyXG4gICAgICBQYXJhbVZhbHVlOiB0aGlzLmZvcm1JRCxcclxuICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICB9KTtcclxuICAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3Jtcy5HZXRCeUlERW5kUG9pbnQsXHJcbiAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMsXHJcbiAgICAgIChyZXM6IEZvcm0pID0+IHtcclxuICAgICAgICB0aGlzLmZvcm0gPSByZXM7XHJcbiAgICAgICAgdGhpcy5mb3JtLk9yZ2FJRCA9IHRoaXMub3JnYUlEO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzICE9IG51bGwgJiYgdGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzICE9IFwiXCIpe1xyXG4gICAgICAgICAgdGhpcy5mb3JtLlRyaWdnZXJzID0gSlNPTi5wYXJzZSh0aGlzLmZvcm0uT2JqZWN0VHJpZ2dlcnMpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmZvcm0uVHJpZ2dlcnMgPSBuZXcgQXJyYXk8VHJpZ2dlcj4oKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmZvcm0uT2JqZWN0QWN0aW9uQnV0dG9ucyAhPSBudWxsICYmIHRoaXMuZm9ybS5PYmplY3RBY3Rpb25CdXR0b25zICE9IFwiXCIpe1xyXG4gICAgICAgICAgdGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnMgPSBKU09OLnBhcnNlKHRoaXMuZm9ybS5PYmplY3RBY3Rpb25CdXR0b25zKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnMgPSBuZXcgQXJyYXk8QWN0aW9uQnV0dG9uPigpO1xyXG4gICAgICAgIH0gXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5hY3Rpb25CdXR0b25zID0gdGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnM7XHJcblxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMucG9wdXBMb2FkZXIgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaXNEdXBsaWNhdGluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLm9wZW5BZGREaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKHRoaXMub3BlbkFkZERpYWxvZywge1xyXG4gICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgICAgICB3aWR0aDogXCI4MHZ3XCIsXHJcbiAgICAgICAgICBtaW5IZWlnaHQ6IFwiMTAwcHhcIixcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgIH0sXHJcbiAgICAgIChlcnIpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwiZXJyb3IgUnVuRW5kUG9pbnRDYWxsXCIsIGVycik7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBvcGVuQWRkUG9wdXBcclxuXHJcbiAgLy8jcmVnaW9uIG9wZW5HcmFwaHNcclxuICBvcGVuR3JhcGhzKCkge1xyXG4gICAgXHJcbiAgICB0aGlzLm9wZW5HcmFwaERpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5vcGVuR3JhcGhEaWFsb2csIHtcclxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgbWluV2lkdGg6IFwiODB2d1wiLFxyXG4gICAgICBtaW5IZWlnaHQ6IFwiNzB2aFwiLFxyXG4gICAgICBtYXhIZWlnaHQ6IFwiMTAwdmhcIlxyXG4gICAgfSk7XHJcbiAgICAvLyB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ2R5bmFtaWMtbW9kdWxlLWdyYXBocy8nICsgdGhpcy5mb3JtSUQgKyAnLycgKyB0aGlzLnVzZXJJRF0pO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gb3BlbkdyYXBoc1xyXG5cclxuICAvLyNyZWdpb24gY2xvc2VHcmFwaHNcclxuICBjbG9zZUdyYXBocygpIHtcclxuICAgIHRoaXMub3BlbkdyYXBoRGlhbG9nUmVmLmNsb3NlKClcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIGNsb3NlR3JhcGhzXHJcbiAgICBcclxuICAvLyNyZWdpb24gb25BZGRTYXZlUmVjb3JkXHJcbiAgb25BZGRTYXZlUmVjb3JkKHJlY29yZDogUmVjb3JkKSB7XHJcbiAgICBpZiAodGhpcy5vcGVuQWRkRGlhbG9nUmVmICE9IG51bGwpIHsgdGhpcy5vcGVuQWRkRGlhbG9nUmVmLmNsb3NlKCk7IH0gXHJcbiAgICBpZiAocmVjb3JkID09IG51bGwpIHt0aGlzLnNhdmVSZWNvcmRFdmVudC5lbWl0KG51bGwpOyByZXR1cm59XHJcbiAgICB0aGlzLmdldFJlY29yZHNCeUZvcm1JRCgpO1xyXG4gICAgdGhpcy5zYXZlUmVjb3JkRXZlbnQuZW1pdChyZWNvcmQpO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gb25BZGRTYXZlUmVjb3JkXHJcblxyXG4gIC8vI3JlZ2lvbiBvbkFkZEFmdGVyU2F2ZVJlY29yZFxyXG4gIG9uQWRkQWZ0ZXJTYXZlUmVjb3JkKHJlY29yZDogUmVjb3JkKSB7XHJcbiAgICBpZiAodGhpcy5vcGVuQWRkRGlhbG9nUmVmICE9IG51bGwpIHsgdGhpcy5vcGVuQWRkRGlhbG9nUmVmLmNsb3NlKCk7IH0gXHJcbiAgICBpZiAocmVjb3JkID09IG51bGwpIHt0aGlzLnNhdmVSZWNvcmRFdmVudC5lbWl0KG51bGwpOyByZXR1cm59XHJcbiAgICB0aGlzLmdldFJlY29yZHNCeUZvcm1JRCgpO1xyXG4gICAgdGhpcy5zYXZlUmVjb3JkRXZlbnQuZW1pdChyZWNvcmQpO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gb25BZGRBZnRlclNhdmVSZWNvcmRcclxuXHJcbiAgLy8jcmVnaW9uIHByaW50QWRkaXRpb25hbEluZm9cclxuICBwcmludEFkZGl0aW9uYWxJbmZvKHJlY29yZDogUmVjb3JkKSB7XHJcbiAgICBsZXQgb3V0ID0gXCJcIjtcclxuICAgIGlmKHRoaXMuY29uZmlndXJhdGlvbnMubGlzdFZpZXdSZWNvcmRUaXRsZSAhPSBudWxsICYmIHRoaXMuY29uZmlndXJhdGlvbnMubGlzdFZpZXdSZWNvcmRUaXRsZS5sZW5ndGggPiAwKXtcclxuXHJcbiAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLmxpc3RWaWV3UmVjb3JkVGl0bGUuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpZiAocmVjb3JkLkFkZGl0aW9uYWxJbmZvICE9IG51bGwpe1xyXG5cclxuICAgICAgICBjb25zdCByZWdleCA9IC9cXCgoLispXFwpL2c7OyAvLyBwYXR0ZXJuIHBlciB1bm8gbyBwacO5IG51bWVyaVxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIChkYXRlZm9ybWF0PUVFRUUsIGQgTU1NTSB5LCBIOm1tOnNzKVxyXG4gICAgICAgIGNvbnN0IG1hdGNoID0gcmVnZXguZXhlYyhpdGVtKTtcclxuICAgICAgICBpZiAobWF0Y2gpIHtcclxuICAgICAgICAgIGxldCBteW1hdGNoID0gbWF0Y2hbMV07XHJcbiAgICAgICAgICBpZihteW1hdGNoLmluY2x1ZGVzKFwiZGF0ZWZvcm1hdFwiKSl7XHJcbiAgICAgICAgICAgIGxldCBmb3JtYXQgPSBteW1hdGNoLnNwbGl0KFwiPVwiKVsxXTtcclxuICAgICAgICAgICAgbGV0IHRva2VuID0gaXRlbS5zcGxpdChcIihcIilbMF07XHJcbiAgICAgICAgICAgIG91dCArPSByZWNvcmQuQWRkaXRpb25hbEluZm8gIT0gbnVsbCAmJiByZWNvcmQuQWRkaXRpb25hbEluZm9bdG9rZW5dICE9IG51bGwgPyBcIiBcIiArIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHJlY29yZC5BZGRpdGlvbmFsSW5mb1t0b2tlbl0sIGZvcm1hdCkgOiByZWNvcmRbdG9rZW5dID8gXCIgXCIgKyB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShyZWNvcmRbdG9rZW5dLCBmb3JtYXQpIDogIFwiIFwiICsgdG9rZW47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIG91dCArPSByZWNvcmQuQWRkaXRpb25hbEluZm8gIT0gbnVsbCAmJiByZWNvcmQuQWRkaXRpb25hbEluZm9baXRlbV0gIT0gbnVsbCA/IFwiIFwiICsgcmVjb3JkLkFkZGl0aW9uYWxJbmZvW2l0ZW1dIDogcmVjb3JkW2l0ZW1dID8gXCIgXCIgKyByZWNvcmRbaXRlbV0gOiAgXCIgXCIgKyBpdGVtO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH1cclxuXHJcbiAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xyXG4gICAgcmV0dXJuIG91dDtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIHByaW50QWRkaXRpb25hbEluZm9cclxuXHJcbiAgb25DbGlja0RyYWdJbmRpY2F0b3IoZWw6IGFueSl7XHJcbiAgICB0aGlzLmNsaWNrRHJhZ0luZGljYXRvci5lbWl0KGVsKTtcclxuICB9XHJcblxyXG4gIG9uRHJhZ1N0YXJ0ZWQoZWw6IGFueSl7XHJcbiAgICAgIHRoaXMuZHJhZ1N0YXJ0ZWQuZW1pdChlbCk7XHJcbiAgfVxyXG5cclxuICBvbkRyYWdSZWxlYXNlZCgpe1xyXG4gICAgICB0aGlzLmRyYWdSZWxlYXNlZC5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBvbkV4dGVybmFsQ29tcG9uZW50T3V0KGV2OiBldmVudE91dCl7XHJcbiAgICB0aGlzLm91dC5lbWl0KGV2KTtcclxuICB9XHJcblxyXG4gIG9uRmlyZVRyaWdnZXIoZXY6IEZpcmVUcmlnZ2VyKXtcclxuICAgIHRoaXMuZmlyZVRyaWdnZXIuZW1pdChldik7XHJcbiAgfSBcclxuXHJcbiAgcmVsb2FkSFRNTFJlYWRhYmxlVmFsdWVzKGFuc3dlcklkOiBzdHJpbmcpe1xyXG5cclxuICAgIC8vIHByZXBhcm8gaSBkYXRpIGRlbCByZWNvcmRcclxuICAgIHZhciBkeW5hbWljUmVjb3JkUGFyYW1zID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAgUGFyYW1OYW1lOiBcImlkXCIsXHJcbiAgICAgICAgUGFyYW1WYWx1ZTogYW5zd2VySWQsXHJcbiAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgIH0sXHJcbiAgICBdO1xyXG4gICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuR2V0QnlJREVuZFBvaW50LFxyXG4gICAgICBkeW5hbWljUmVjb3JkUGFyYW1zLFxyXG4gICAgICAocmVzOiBEeW5SZWNvcmQpID0+IHtcclxuICAgICAgICB0aGlzLnBhbmVscy5maW5kKHggPT4geC5yZWNvcmQuSUQgPT0gYW5zd2VySWQpLnJlY29yZC5IVE1McmVhZGFibGVWYWx1ZXMgPSByZXMuSFRNTHJlYWRhYmxlVmFsdWVzOyAgICBcclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIFxyXG4gICAgdGhpcy5saWJTaW5nbGVMb2FkZWQgPSBmYWxzZTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmxpYlNpbmdsZUxvYWRlZCA9IHRydWU7XHJcbiAgICB9LCAxMDAwKTtcclxuICB9XHJcblxyXG4gIGdlbmVyYXRlQWN0aW9uKGFjdGlvbkJ1dHRvbjogQWN0aW9uQnV0dG9uKXtcclxuICAgIHZhciBmaXJlVHJpZ2dlcjogRmlyZVRyaWdnZXIgPSBuZXcgRmlyZVRyaWdnZXIoKTtcclxuXHJcbiAgICBmaXJlVHJpZ2dlci50cmlnZ2VyID0gbmV3IFRyaWdnZXIoKTtcclxuICAgIGZpcmVUcmlnZ2VyLnRyaWdnZXIuQ0lEID0gYWN0aW9uQnV0dG9uLkJ1dHRvbkNvZGU7XHJcbiAgICBmaXJlVHJpZ2dlci50cmlnZ2VyLmNvbmRpdGlvbnMgPSBudWxsO1xyXG4gICAgZmlyZVRyaWdnZXIudHJpZ2dlci5kZXNjcmlwdGlvbiA9IGFjdGlvbkJ1dHRvbi5CdXR0b25MYWJlbDtcclxuICAgIGZpcmVUcmlnZ2VyLnRyaWdnZXIuZXhlY3V0aW9uID0gYWN0aW9uQnV0dG9uLmV4ZWN1dGlvbjtcclxuICAgIGZpcmVUcmlnZ2VyLnRyaWdnZXIuZm9ybXVsYXMgPSBhY3Rpb25CdXR0b24uZm9ybXVsYXM7XHJcblxyXG4gICAgZmlyZVRyaWdnZXIuZm9ybSA9IHRoaXMuZm9ybTtcclxuICAgIGZpcmVUcmlnZ2VyLmZvcm11bGFzID0gYWN0aW9uQnV0dG9uLmZvcm11bGFzO1xyXG4gICAgZmlyZVRyaWdnZXIucmVjb3JkID0gbnVsbDtcclxuICAgIGZpcmVUcmlnZ2VyLnVzZXJQYXRpZW50ID0gdGhpcy51c2VySUQ7XHJcbiAgICBmaXJlVHJpZ2dlci51c2VyTWVkaWNhbEV4YW1pbmF0aW9uID0gbnVsbDtcclxuICAgIFxyXG4gICAgdGhpcy5vbkZpcmVUcmlnZ2VyKGZpcmVUcmlnZ2VyKTtcclxuICB9ICBcclxuXHJcbn1cclxuXHJcbiIsIjxtYXQtY2FyZCBjbGFzcz1cImxpc3Qtdmlldy1mb3JtLXJlY29yZFwiPlxuICA8bWF0LWNhcmQtaGVhZGVyICpuZ0lmPVwidGhpcy5jb25maWd1cmF0aW9ucy5zaG93VGl0bGUgfHwgZGVmYXVsdExpc3RBY3Rpb25zLmFkZFwiIGNsYXNzPVwiYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XG4gICAgPG1hdC1jYXJkLXRpdGxlICpuZ0lmPVwidGhpcy5jb25maWd1cmF0aW9ucy5zaG93VGl0bGUgJiYgbG9hZGVkZm9ybVwiPk1vZHVsbyB7eyBmb3JtLk5hbWUgfX0gPC9tYXQtY2FyZC10aXRsZT5cbiAgICA8bWF0LWNhcmQtYWN0aW9ucyAqbmdJZj1cImRlZmF1bHRMaXN0QWN0aW9ucy5hZGQgfHwgZGVmYXVsdExpc3RBY3Rpb25zLmdyYXBoc1wiPlxuXG4gICAgICA8c3BhbiAqbmdJZj1cInZpc2libGVBY3Rpb25CdXR0b25zLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgPGJ1dHRvbiBcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgYWN0aW9uQnV0dG9uIGluIHZpc2libGVBY3Rpb25CdXR0b25zXCIgKGNsaWNrKT1cImdlbmVyYXRlQWN0aW9uKGFjdGlvbkJ1dHRvbilcIlxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1yLTJcIiBcbiAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvbiBcbiAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIiBcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCI+XG4gICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiYWN0aW9uQnV0dG9uLkljb25cIj57e2FjdGlvbkJ1dHRvbi5JY29ufX08L21hdC1pY29uPlxuICAgICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIj57e2FjdGlvbkJ1dHRvbi5sYWJlbH19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvc3Bhbj4gICAgXG5cbiAgICAgIDxidXR0b24gXG4gICAgICAgICpuZ0lmPVwiaXNMaXN0Vmlld1wiXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1yLTJcIiBcbiAgICAgICAgbWF0LXJhaXNlZC1idXR0b24gXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiIFxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgKGNsaWNrKT1cIm9wZW5UYWJlbGxhcigpXCI+XG4gICAgICAgIDxtYXQtaWNvbj50YWJsZTwvbWF0LWljb24+XG4gICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIj5UYWJlbGxhcmU8L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cblxuICAgICAgPGJ1dHRvbiBcbiAgICAgICAgKm5nSWY9XCJpc1RhYmVsbGFyXCJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgbXItMlwiIFxuICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvbiBcbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCIgXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAoY2xpY2spPVwib3Blbkxpc3RWaWV3KClcIj5cbiAgICAgICAgPG1hdC1pY29uPmxpc3Q8L21hdC1pY29uPlxuICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4XCI+TGlzdGE8L3NwYW4+XG4gICAgICA8L2J1dHRvbj4gICAgICBcblxuICAgICAgPGJ1dHRvbiBcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgbXItMlwiIFxuICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvbiBcbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCIgXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAoY2xpY2spPVwib3BlbkFsbCgpXCJcbiAgICAgICAgKm5nSWY9XCJpc0xpc3RWaWV3XCI+XG4gICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIiFpc0Z1bGxPcGVuZWRcIj5leHBhbmRfbW9yZTwvbWF0LWljb24+XG4gICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIiAqbmdJZj1cIiFpc0Z1bGxPcGVuZWRcIj5BcHJpIHR1dHRvPC9zcGFuPlxuXG4gICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cImlzRnVsbE9wZW5lZCAmJiBpc0xpc3RWaWV3XCI+ZXhwYW5kX2xlc3M8L21hdC1pY29uPlxuICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4XCIgKm5nSWY9XCJpc0Z1bGxPcGVuZWRcIj5DaGl1ZGkgdHV0dG88L3NwYW4+XG4gICAgICA8L2J1dHRvbj4gICAgICBcbiAgICAgIDxidXR0b24gXG4gICAgICAgICpuZ0lmPVwiZGVmYXVsdExpc3RBY3Rpb25zLmdyYXBoc1wiXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1yLTJcIiBcbiAgICAgICAgbWF0LXJhaXNlZC1idXR0b24gXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiIFxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgKGNsaWNrKT1cIm9wZW5HcmFwaHMoKVwiPlxuICAgICAgICA8bWF0LWljb24+cGllX2NoYXJ0PC9tYXQtaWNvbj5cbiAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweFwiPkdyYWZpY2k8L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gXG4gICAgICAgICpuZ0lmPVwiZGVmYXVsdExpc3RBY3Rpb25zLmFkZFwiXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgXG4gICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uIFxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIiBcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIChjbGljayk9XCJvcGVuQWRkUG9wdXAoKVwiPlxuICAgICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj5cbiAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweFwiPkFnZ2l1bmdpPC9zcGFuPlxuICAgICAgPC9idXR0b24+ICAgICAgXG4gICAgPC9tYXQtY2FyZC1hY3Rpb25zPlxuICA8L21hdC1jYXJkLWhlYWRlcj5cblxuICBcbiAgPG1hdC1jYXJkLWNvbnRlbnQ+XG5cbiAgICA8ZGl2ICpuZ0lmPVwiaXNUYWJlbGxhclwiPlxuICAgICAgXG4gICAgICA8aGxpc3QtZm9ybS1yZWNvcmRcbiAgICAgICAgY2xhc3M9XCJkeW5hbWljLW1vZHVsZS1obGlzdFwiXG4gICAgICAgIFtmb3JtSURdPVwiZm9ybUlEXCJcbiAgICAgICAgW2Zvcm11bGFPYmplY3RdPVwiZm9ybXVsYU9iamVjdFwiXG5cbiAgICAgICAgW2VuZFBvaW50Q29uZmlndXJhdGlvbl09XCJlbmRQb2ludENvbmZpZ3VyYXRpb25cIlxuICAgICAgICBbYWN0aW9uQnV0dG9uc109XCJhY3Rpb25CdXR0b25zXCJcblxuICAgICAgICBbY29uZmlndXJhdGlvbnNdPVwiY29uZmlndXJhdGlvbnNcIlxuICAgICAgICBbZXh0ZXJuYWxCdXR0b25zXT1cImV4dGVybmFsQnV0dG9uc1wiXG5cbiAgICAgICAgPlxuICAgICAgPC9obGlzdC1mb3JtLXJlY29yZD5cblxuICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTNcIj5cbiAgICAgICAgICAgIDx0bXctZGF0ZXRpbWVwaWNrZXIgY2xhc3M9XCJkYXRlXCIgW3BsYWNlaG9sZGVyXT1cIidQZXJpb2RvIGluaXppbydcIiBbbGFiZWxdPVwiJ1BlcmlvZG8gaW5pemlvJ1wiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsSW5wdXQpXT1cIm1pbnBlcmlvZFwiXG4gICAgICAgICAgICAgICAgW3BpY2tlck1vZGVdPVwibW9kZXMuREFURVBJQ0tFUlwiIFtvdXRwdXRGb3JtYXRdPVwiJ0REL01NL1lZWVknXCIgW3Nob3dTZWNvbmRzXT1cImZhbHNlXCI+XG4gICAgICAgICAgICA8L3Rtdy1kYXRldGltZXBpY2tlcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTNcIj5cbiAgICAgICAgICAgIDx0bXctZGF0ZXRpbWVwaWNrZXIgY2xhc3M9XCJkYXRlXCIgW3BsYWNlaG9sZGVyXT1cIidQZXJpb2RvIGZpbmUnXCIgW2xhYmVsXT1cIidQZXJpb2RvIGZpbmUnXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWxJbnB1dCldPVwibWF4cGVyaW9kXCJcbiAgICAgICAgICAgICAgICBbcGlja2VyTW9kZV09XCJtb2Rlcy5EQVRFUElDS0VSXCIgW291dHB1dEZvcm1hdF09XCInREQvTU0vWVlZWSdcIiBbc2hvd1NlY29uZHNdPVwiZmFsc2VcIj5cbiAgICAgICAgICAgIDwvdG13LWRhdGV0aW1lcGlja2VyPlxuICAgICAgICA8L2Rpdj4gICAgICAgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTMgbXQtMlwiPlxuICAgICAgICAgICAgPGVxcC1zZWxlY3QgW2FycmF5RGF0YV09XCJ0YWJlbGxhckZpZWxkc1wiIFsobmdNb2RlbElucHV0KV09XCJzZWxlY3RlZFRhYmVsbGFyRmllbGRzXCIgW3BsYWNlaG9sZGVyXT1cIidTZWxlemlvbmUgZGVpIGNhbXBpJ1wiXG4gICAgICAgICAgICBbYXJyYXlLZXlQcm9wZXJ0eV09XCInRGVzY3JpcHRpb24nXCIgW2FycmF5VmFsdWVQcm9wZXJ0eV09XCInVGV4dERlc2NyaXB0aW9uJ1wiIFtpc011bHRpU2VsZWN0XT1cInRydWVcIiBjbGFzcz1cImVxcC1mb3JtLWZpZWxkXCI+XG4gICAgICAgICAgICA8L2VxcC1zZWxlY3Q+XG4gICAgICAgIDwvZGl2PiAgICAgICBcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtMyBtdC0yXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwic2VsZWN0ZWRUYWJlbGxhckZpZWxkcyA9PSBudWxsIHx8IHNlbGVjdGVkVGFiZWxsYXJGaWVsZHMubGVuZ3RoID09IDBcIlxuICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWdyYXBoLWdlbmVyYXRlIGJ1dHRvbi1uZXh0IG1lLTJcIlxuICAgICAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZ2VuZXJhdGVUYWJlbGxhcigpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIEdlbmVyYVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj4gICAgICAgICAgICAgICAgICAgXG4gICAgICA8L2Rpdj4gLS0+XG5cbiAgICAgIDxlcXAtdGFibGUgaWQ9XCJ0YWJlbGxhclwiIGNsYXNzPVwibGlzdC1mb3JtLXJlY29yZC10YWJsZVwiICN0YWJsZVJlY29yZHMgKm5nSWY9XCJ0YWJlbGxhckNvbmRpdGlvbkxvYWRlZFwiIFtoaWdobGlnaHRDb2xvcl09XCIndHJhbnNwYXJlbnQnXCJcbiAgICAgIFtkYXRhXT1cInRhYmVsbGFyVmFsdWVzXCIgW2NvbHVtbnNdPVwidGFiZWxsYXJDb2x1bW5zXCIgW21hdFBhZ2luYXRvclNpemVdPVwiMTAwMFwiIFttYXRQYWdpbmF0b3JMZW5ndGhdPVwiWzEwMDBdXCI+PC9lcXAtdGFibGU+XG4gICAgPC9kaXY+XG5cblxuXG4gICAgPG1hdC1hY2NvcmRpb24gICNkb25lTGlzdD1cImNka0Ryb3BMaXN0XCIgY2RrRHJvcExpc3QgW2Nka0Ryb3BMaXN0Q29ubmVjdGVkVG9dPVwiW3RvZG9MaXN0XVwiIFtoaWRlVG9nZ2xlXT1cInRlc3RcIiBbbXVsdGldPVwidHJ1ZVwiIGNsYXNzPVwiZGYtbGlzdC12aWV3LWFjY29yZGlvblwiICpuZ0lmPVwiaXNMaXN0Vmlld1wiPlxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgKm5nRm9yPVwibGV0IHBhbmVsIG9mIHBhbmVsczsgaW5kZXggYXMgaVwiIFxuICAgICAgICBbZXhwYW5kZWRdPVwicGFuZWwuaXNPcGVuXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cIjFcIiBcbiAgICAgICAgW2NsYXNzXT1cInBhbmVsLmhpZ2hsaWdodGVkID8gJ2RtX3BhbmVsX2hpZ2hsaWdodGVkJyA6ICcwJ1wiXG4gICAgICA+XG4gICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVBhbmVsKHBhbmVsLCBwYW5lbC5yZWNvcmQpXCI+XG4gICAgICAgICAgPG1hdC1wYW5lbC10aXRsZSAqbmdJZj1cImNvbmZpZ3VyYXRpb25zLmlzRHJhZ2dhYmxlTGlzdFZpZXdcIj5cbiAgICAgICAgICAgIDwhLS0gPG1hdC1pY29uIChjbGljayk9XCJvbkNsaWNrRHJhZ0luZGljYXRvcihbcGFuZWwucmVjb3JkLGZvcm1dKVwiIGNsYXNzPVwiY2xpY2staWNvblwiICpuZ0lmPVwiY29uZmlndXJhdGlvbnMuaXNEcmFnZ2FibGVMaXN0Vmlld1wiPmRyYWdfaW5kaWNhdG9yPC9tYXQtaWNvbj4ge3sgIXRoaXMuY29uZmlndXJhdGlvbnMuc2hvd1RpdGxlID8gZm9ybS5OYW1lIDogXCJcIiB9fSB2Lnt7IHBhbmVsLnJlY29yZC5WZXJzaW9uIH19IC0ge3sgcHJpbnRBZGRpdGlvbmFsSW5mbyhwYW5lbC5yZWNvcmQpIH19IC0tPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJkcmFnLWljb24gZmEtc29saWQgZmEtZmlsZS1leHBvcnRcIiAoY2xpY2spPVwib25DbGlja0RyYWdJbmRpY2F0b3IoW3BhbmVsLnJlY29yZCxmb3JtXSlcIiAqbmdJZj1cImNvbmZpZ3VyYXRpb25zLmlzRHJhZ2dhYmxlTGlzdFZpZXdcIj48L2k+IHt7ICF0aGlzLmNvbmZpZ3VyYXRpb25zLnNob3dUaXRsZSA/IGZvcm0uTmFtZSA6IFwiXCIgfX0gdi57eyBwYW5lbC5yZWNvcmQuVmVyc2lvbiB9fSAtIHt7IHByaW50QWRkaXRpb25hbEluZm8ocGFuZWwucmVjb3JkKSB9fVxuICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGUgKm5nSWY9XCIhY29uZmlndXJhdGlvbnMuaXNEcmFnZ2FibGVMaXN0Vmlld1wiPlxuICAgICAgICAgICAge3sgIXRoaXMuY29uZmlndXJhdGlvbnMuc2hvd1RpdGxlID8gZm9ybS5OYW1lIDogXCJcIiB9fSB2Lnt7IHBhbmVsLnJlY29yZC5WZXJzaW9uIH19IC0ge3sgcHJpbnRBZGRpdGlvbmFsSW5mbyhwYW5lbC5yZWNvcmQpIH19XG4gICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+ICAgICAgICAgIFxuICAgICAgICAgIDwhLS0jcmVnaW9uIEJPVFRPTkkgUEVSIExFIEFaSU9OSSAtLT5cbiAgICAgICAgICA8bWF0LXBhbmVsLWRlc2NyaXB0aW9uPlxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIGJ1dHRvbnNcIiBcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uIFxuICAgICAgICAgICAgICBpZD1cInAte3twYW5lbC5yZWNvcmQuSUR9fS17e2J1dHRvbi5pY29ufX1cIlxuICAgICAgICAgICAgICBjbGFzcz1cInJlY29yZC1pY29uIHt7YnV0dG9uLmV4dHJhQ2xhc3N9fVwiIFxuICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJidXR0b24udGV4dFwiXG4gICAgICAgICAgICAgIFtoaWRkZW5dPVwiYnV0dG9uLmljb24gPT0gJ2ZpbGVfY29weScgJiYgKHBhbmVscy5sZW5ndGggPT0gMCB8fCBwYW5lbC5yZWNvcmQuVmVyc2lvbiAhPSBwYW5lbHNbMF0ucmVjb3JkLlZlcnNpb24pXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImJ1dHRvbi5mbihwYW5lbCxpLCRldmVudClcIj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uPnt7YnV0dG9uLmljb259fTwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gKm5nRm9yPVwibGV0IGJ1dHRvbiBvZiBleHRlcm5hbEJ1dHRvbnNcIiBcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uIFxuICAgICAgICAgICAgICBjbGFzcz1cInJlY29yZC1pY29uIHt7YnV0dG9uLmV4dHJhQ2xhc3N9fVwiXG4gICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImJ1dHRvbi50ZXh0XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImV4dGVybmFsQ2FsbGJhY2soJGV2ZW50LGJ1dHRvbi5mbixwYW5lbC5yZWNvcmQpXCI+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbj57e2J1dHRvbi5pY29ufX08L21hdC1pY29uPlxuICAgICAgICAgICAgPC9idXR0b24+ICAgICAgICAgICAgXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImV4YW1wbGUtc3BhY2VyXCI+PC9zcGFuPlxuICAgICAgICAgICAgXG4gICAgICAgICAgPC9tYXQtcGFuZWwtZGVzY3JpcHRpb24+XG4gICAgICAgICAgPCEtLSNlbmRyZWdpb24gQk9UVE9OSSBQRVIgTEUgQVpJT05JIC0tPlxuICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuXG4gICAgICAgIDwhLS0gI3JlZ2lvbiBDT05URU5VVE8gLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwYW5lbC5wYWdlU3RhdGUgIT0gbnVsbFwiPlxuXG4gICAgICAgICAgPGxpYi1zaW5nbGUtcmVjb3JkXG4gICAgICAgICAgICAqbmdJZj1cImxpYlNpbmdsZUxvYWRlZFwiXG4gICAgICAgICAgICBbb25seVZpZXddPVwib25seVZpZXdcIlxuICAgICAgICAgICAgW3JlY29yZF0gPSBcInBhbmVsLnJlY29yZFwiIFxuICAgICAgICAgICAgW2Zvcm11bGFPYmplY3RdPVwiZm9ybXVsYU9iamVjdFwiXG4gICAgICAgICAgICBbZW5kUG9pbnRDb25maWd1cmF0aW9uXSA9IFwiZW5kUG9pbnRDb25maWd1cmF0aW9uXCJcbiAgICAgICAgICAgIFtmb3JtXT1cImZvcm1cIlxuICAgICAgICAgICAgW3VzZXJJRF09XCJ1c2VySURcIlxuICAgICAgICAgICAgW1F1ZXJ5RWRpdG9yQ29tcG9uZW50XT1cIlF1ZXJ5RWRpdG9yQ29tcG9uZW50XCJcbiAgICAgICAgICAgIFtvdXRDb21waWxlQ29uZmlndXJhdGlvbnNdPVwib3V0Q29tcGlsZUNvbmZpZ3VyYXRpb25zXCJcbiAgICAgICAgICAgIFtwYWdlU3RhdGVdPVwicGFuZWwucGFnZVN0YXRlXCJcbiAgICAgICAgICAgIFthY3Rpb25CdXR0b25zXT1cImFjdGlvbkJ1dHRvbnNcIlxuICAgICAgICAgICAgKG91dCk9XCJvbkV4dGVybmFsQ29tcG9uZW50T3V0KCRldmVudClcIlxuICAgICAgICAgICAgKHNhdmVSZWNvcmRFdmVudCk9XCJzYXZlT3JFeGl0Rm9ybSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChhZnRlclNhdmVSZWNvcmRFdmVudCk9XCJvbkFmdGVyU2F2ZVJlY29yZCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChmaXJlVHJpZ2dlcik9XCJvbkZpcmVUcmlnZ2VyKCRldmVudClcIlxuICAgICAgICAgID5cblxuICAgICAgICAgIDwvbGliLXNpbmdsZS1yZWNvcmQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tI2VuZHJlZ2lvbiBDT05URU5VVE8gLS0+XG4gICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgPC9tYXQtYWNjb3JkaW9uPlxuXG5cbiAgPC9tYXQtY2FyZC1jb250ZW50PlxuICA8bWF0LWNhcmQtZm9vdGVyPlxuICA8L21hdC1jYXJkLWZvb3Rlcj5cbjwvbWF0LWNhcmQ+XG5cbjwhLS0jcmVnaW9uIERJQUxPRyBBR0dJVU5UQSBSSVNQT1NUQSAtLT5cbjxuZy10ZW1wbGF0ZSAjb3BlbkFkZERpYWxvZz5cbiAgPG1hdC1jYXJkIGNsYXNzPVwiY2FyZC1kZWZhdWx0IG92ZXJsYXktY2FyZCBjYXJkLWlubW9kYWwtdHJ1ZVwiPlxuICAgIDxtYXQtY2FyZC1jb250ZW50PlxuXG4gICAgICA8YWRkLWZvcm0tcmVjb3JkXG4gICAgICAgIGNsYXNzPVwiZHluYW1pYy1tb2R1bGUtY29tcGlsZVwiXG4gICAgICAgIFtmb3JtSURdPVwiZm9ybUlEXCJcbiAgICAgICAgW29yZ2FJRF09XCJvcmdhSURcIlxuICAgICAgICBbb25seVZpZXddPVwiZmFsc2VcIlxuICAgICAgICBbcmVjb3JkXT1cInNlbGVjdGVkUmVjb3JkXCJcbiAgICAgICAgW2Zvcm11bGFPYmplY3RdPVwiZm9ybXVsYU9iamVjdFwiXG4gICAgICAgIFtpc0R1cGxpY2F0ZV09XCJpc0R1cGxpY2F0aW5nXCJcbiAgICAgICAgW3Nob3dUaXRsZV09XCJ0aGlzLmNvbmZpZ3VyYXRpb25zLnNob3dUaXRsZVwiXG4gICAgICAgIFxuICAgICAgICBbUXVlcnlFZGl0b3JDb21wb25lbnRdPVwiUXVlcnlFZGl0b3JDb21wb25lbnRcIlxuICAgICAgICBbZW5kUG9pbnRDb25maWd1cmF0aW9uXT1cImVuZFBvaW50Q29uZmlndXJhdGlvblwiXG4gICAgICAgIFt1c2VySURdPVwidXNlcklEXCJcblxuICAgICAgICBbY29uZmlndXJhdGlvbnNdPVwiY29tcGlsZUNvbmZpZ3VyYXRpb25zXCJcbiAgICAgICAgW2FjdGlvbkJ1dHRvbnNdPVwiYWN0aW9uQnV0dG9uc1wiXG5cbiAgICAgICAgKG91dCk9XCJvbkV4dGVybmFsQ29tcG9uZW50T3V0KCRldmVudClcIlxuICAgICAgICAoc2F2ZVJlY29yZEV2ZW50KT1cIm9uQWRkU2F2ZVJlY29yZCgkZXZlbnQpXCJcbiAgICAgICAgKGFmdGVyU2F2ZVJlY29yZEV2ZW50KT1cIm9uQWRkQWZ0ZXJTYXZlUmVjb3JkKCRldmVudClcIlxuICAgICAgICAoZmlyZVRyaWdnZXIpPVwib25GaXJlVHJpZ2dlcigkZXZlbnQpXCJcbiAgICAgID5cbiAgICAgIDwvYWRkLWZvcm0tcmVjb3JkPlxuXG4gICAgPC9tYXQtY2FyZC1jb250ZW50PlxuICA8L21hdC1jYXJkPlxuPC9uZy10ZW1wbGF0ZT5cbjwhLS0jZW5kcmVnaW9uIERJQUxPRyBBR0dJVU5UQSBSSVNQT1NUQSAtLT5cblxuPCEtLSNyZWdpb24gRElBTE9HIFZJU1VBTElaWkFaSU9ORSBHUkFGSUNJIC0tPlxuPG5nLXRlbXBsYXRlICNvcGVuR3JhcGhEaWFsb2c+XG4gIDxtYXQtY2FyZCBjbGFzcz1cImNhcmQtZGVmYXVsdCBvdmVybGF5LWNhcmQgY2FyZC1pbm1vZGFsLXRydWUgZ3JhcGhDYXJkXCI+XG4gICAgXG4gIDxtYXQtY2FyZC1oZWFkZXIgY2xhc3M9XCJhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cbiAgICA8bWF0LWNhcmQtdGl0bGU+XG4gICAgICA8ZGl2IGNsYXNzPVwicm93IGVxcC1keW5hbWljLW1vZHVsZS10aXRsZSBncmFwaC1oZWFkZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxuICAgICAgICAgICAgPHNwYW4+R3JhZmljbyB7eyBmb3JtLk5hbWUgfX0gPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWF0LWNhcmQtdGl0bGU+XG4gICAgPG1hdC1jYXJkLWFjdGlvbnM+XG4gICAgICA8YnV0dG9uIFxuICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBtci0yXCIgXG4gICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uIFxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIiBcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIChjbGljayk9XCJjbG9zZUdyYXBocygpXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5cbiAgICAgICAgICBhcnJvd19iYWNrXG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4XCI+SW5kaWV0cm88L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L21hdC1jYXJkLWFjdGlvbnM+XG4gIDwvbWF0LWNhcmQtaGVhZGVyPlxuICAgIDxtYXQtY2FyZC1jb250ZW50PlxuXG4gICAgICA8Z3JhcGhzXG4gICAgICAgIFtmb3JtSURdPVwiZm9ybUlEXCJcbiAgICAgICAgW3VzZXJJRF09XCJ1c2VySURcIlxuICAgICAgICBbYWN0aW9uQnV0dG9uc109XCJhY3Rpb25CdXR0b25zXCJcbiAgICAgICAgW2NvbmZpZ3VyYXRpb25zXSA9IFwib3V0Q29tcGlsZUNvbmZpZ3VyYXRpb25zXCJcbiAgICAgICAgW2VuZFBvaW50Q29uZmlndXJhdGlvbl0gPSBcImVuZFBvaW50Q29uZmlndXJhdGlvblwiXG4gICAgICA+XG4gICAgICA8L2dyYXBocz5cblxuICAgIDwvbWF0LWNhcmQtY29udGVudD5cbiAgPC9tYXQtY2FyZD5cbjwvbmctdGVtcGxhdGU+XG48IS0tI2VuZHJlZ2lvbiBESUFMT0cgVklTVUFMSVpaQVpJT05FIEdSQUZJQ0kgLS0+XG4iXX0=
|
|
934
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC12aWV3LWZvcm0tcmVjb3JkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9mb3JtLXJlY29yZHMvbGlzdC12aWV3LWZvcm0tcmVjb3JkL2xpc3Qtdmlldy1mb3JtLXJlY29yZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZm9ybS1yZWNvcmRzL2xpc3Qtdmlldy1mb3JtLXJlY29yZC9saXN0LXZpZXctZm9ybS1yZWNvcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBQ0wsU0FBUyxFQUNULE1BQU0sRUFDTixZQUFZLEdBS2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLGlCQUFpQixFQUdqQixnQkFBZ0IsRUFDaEIsVUFBVSxFQUNYLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUFhLE1BQU0sRUFBZ0IsTUFBTSxpQ0FBaUMsQ0FBQztBQUVsRixPQUFPLEVBQUUseUNBQXlDLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUV6SCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUNwRyxPQUFPLEVBR0wsYUFBYSxHQUNkLE1BQU0sa0RBQWtELENBQUM7QUFJMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQWdCLGNBQWMsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBR3RHLE9BQU8sRUFBYSxhQUFhLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUc5RSxPQUFPLEVBQWEsZ0JBQWdCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUV4RixPQUFP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QUU7Z0JBUUksYUFBYTtzQkFBM0QsU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUdJLGVBQWU7c0JBQS9ELFNBQVM7dUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQTBCckMsbUJBQW1CO3NCQUE1QixNQUFNO2dCQUtHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLEdBQUc7c0JBQVosTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIE9uSW5pdCxcclxuICBJbnB1dCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBPbkNoYW5nZXMsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBUZW1wbGF0ZVJlZixcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge1xyXG4gIENlbGxBbGlnbm1lbnRFbnVtLFxyXG4gIENvbmZpZ0NvbHVtbixcclxuICBFcXBUYWJsZUNvbXBvbmVudCxcclxuICBOdW1iZXJDb2x1bW5QaXBlLFxyXG4gIFR5cGVDb2x1bW5cclxufSBmcm9tIFwiQGVxcHJvamVjdC9lcXAtdGFibGVcIjtcclxuaW1wb3J0IHsgRm9ybSB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbHMvZm9ybS5tb2RlbFwiO1xyXG5pbXBvcnQgeyBEeW5SZWNvcmQsIFJlY29yZCwgUmVjb3JkQnV0dG9uIH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVscy9yZWNvcmQubW9kZWxcIjtcclxuaW1wb3J0IHsgVXRpbGl0eUhlbHBlclNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vc2VydmljZXMvdXRpbGl0eUhlbHBlci5zZXJ2aWNlc1wiO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlTGlzdEZvcm1SZWNvcmRBY3Rpb25zRGVmYXVsdCB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbHMvZHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHRcIjtcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZUxpc3RDb25maWcgfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWxzL2R5bmFtaWNNb2R1bGVMaXN0Q29uZmlnLm1vZGVsXCI7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnIH0gZnJvbSBcIi4vLi4vLi4vLi4vLi4vL21vZGVscy9keW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZy5tb2RlbFwiO1xyXG5pbXBvcnQge1xyXG4gIEVuZFBvaW50Q29uZmlndXJhdGlvbixcclxuICBFbmRQb2ludERhdGFQYXJhbXMsXHJcbiAgUGFyYW1UeXBlRW51bSxcclxufSBmcm9tIFwiLi8uLi8uLi8uLi8uLi9tb2RlbHMvZW5kUG9pbnRDb25maWd1cmF0aW9uLm1vZGVsXCI7XHJcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nUmVmIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2RpYWxvZ1wiO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcbmltcG9ydCB7IER5bmFtaWNMb2FkZXJEaXJlY3RpdmVEYXRhLCBldmVudE91dCB9IGZyb20gXCIuLi8uLi8uLi8uLi9kaXJlY3RpdmVzL2R5bmFtaWMtbG9hZGVyL2R5bmFtaWMtbG9hZGVyLmRpcmVjdGl2ZVwiO1xyXG5pbXBvcnQgeyBGaXJlVHJpZ2dlciwgVHJpZ2dlciwgQWN0aW9uQnV0dG9uLCBBY3Rpb25GbGFnRW51bSB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy90cmlnZ2VyLm1vZGVsJztcclxuaW1wb3J0IHsgZGJEYXRlU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi8uLi9zZXJ2aWNlcy9kYi1kYXRlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcbmltcG9ydCB7IEJhc2VGaWVsZCwgRmllbGRUeXBlRW51bSB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9iYXNlRmllbGQubW9kZWwnO1xyXG5pbXBvcnQgeyBMaXN0VmFsdWVGaWVsZCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9maWVsZHMvbGlzdFZhbHVlRmllbGQubW9kZWwnO1xyXG5pbXBvcnQgeyBOdW1lcmljRmllbGQgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZmllbGRzL251bWVyaWNGaWVsZC5tb2RlbCc7XHJcbmltcG9ydCB7IERhdGVGaWVsZCwgRGF0ZVRpbWVUeXBlRW51bSB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9maWVsZHMvZGF0ZUZpZWxkLm1vZGVsJztcclxuaW1wb3J0IHsgTGFiZWxGaWVsZCB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbHMvZmllbGRzL2xhYmVsRmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHsgTW9kZUVudW0sIFRpbWVUeXBlRW51bSB9IGZyb20gJ3Rtdy1waWNrZXInO1xyXG5pbXBvcnQgeyBUYWJlbGxhckZpZWxkIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2dyYXBoLm1vZGVsJztcclxuaW1wb3J0IHsgX192YWx1ZXMgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsgR2xvYmFsU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi8uLi9zZXJ2aWNlcy9nbG9iYWwuc2VydmljZVwiO1xyXG5cclxudHlwZSBQYW5lbCA9IHtcclxuICByZWNvcmQ6IFJlY29yZCxcclxuICBpc09wZW46IGJvb2xlYW4sXHJcbiAgcGFnZVN0YXRlOiBzdHJpbmcsXHJcbiAgaGlnaGxpZ2h0ZWQ6IGJvb2xlYW5cclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwibGlzdC12aWV3LWZvcm0tcmVjb3JkXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwibGlzdC12aWV3LWZvcm0tcmVjb3JkLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL2xpc3Qtdmlldy1mb3JtLXJlY29yZC5jb21wb25lbnQuc2Nzc1wiXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIExpc3RWaWV3Rm9ybVJlY29yZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuICBcclxuICBASW5wdXQoKSBjb25maWd1cmF0aW9uczogRHluYW1pY01vZHVsZUxpc3RDb25maWc7XHJcbiAgQElucHV0KCkgY29tcGlsZUNvbmZpZ3VyYXRpb25zOiBEeW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZztcclxuICBvdXRDb21waWxlQ29uZmlndXJhdGlvbnM6IER5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnO1xyXG4gIEBJbnB1dCgpIGVuZFBvaW50Q29uZmlndXJhdGlvbjogRW5kUG9pbnRDb25maWd1cmF0aW9uO1xyXG4gIEBJbnB1dCgpIHVzZXJJRDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGZvcm1JRDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIG9yZ2FJRDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGZvcm06IEZvcm0gPSBudWxsO1xyXG4gIEBJbnB1dCgpIGRlZmF1bHRMaXN0Vmlld0Z1bmN0aW9uOiBGdW5jdGlvbiA9IG51bGw7XHJcbiAgQElucHV0KCkgZXh0ZXJuYWxCdXR0b25zOiBBcnJheTxSZWNvcmRCdXR0b24+ID0gbmV3IEFycmF5PFJlY29yZEJ1dHRvbj4oKTtcclxuICBASW5wdXQoKSBhY3Rpb25CdXR0b25zOiBBcnJheTxBY3Rpb25CdXR0b24+ID0gbmV3IEFycmF5PEFjdGlvbkJ1dHRvbj4oKTtcclxuICBASW5wdXQoKSBvbmx5VmlldzogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgcmVjb3JkczogQXJyYXk8RHluUmVjb3JkPiA9IG51bGw7XHJcbiAgQElucHV0KCkgaGlnaGxpZ2h0RmlsdGVyOiBhbnkgPSBudWxsO1xyXG4gIEBJbnB1dCgpIFF1ZXJ5RWRpdG9yQ29tcG9uZW50OiBEeW5hbWljTG9hZGVyRGlyZWN0aXZlRGF0YTsgLy8gTCdpbnRlcm8gY29tcG9uZW50ZSBxdWVyeSBFZGl0b3JcclxuICBASW5wdXQoKSBmb3JtdWxhT2JqZWN0OiBhbnkgPSB7fTtcclxuICBASW5wdXQoKSBjb250ZXN0dWFsaXphdGlvblBhcmFtczogYW55ID0gbnVsbDtcclxuXHJcbiAgZGVmYXVsdExpc3RBY3Rpb25zOiBEeW5hbWljTW9kdWxlTGlzdEZvcm1SZWNvcmRBY3Rpb25zRGVmYXVsdCA9XHJcbiAgICBuZXcgRHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHQoKTtcclxuXHJcbiAgLy8gdmFsdWVzOiBBcnJheTxSZWNvcmQ+O1xyXG4gIHRlc3QgPSBmYWxzZTtcclxuICBpc0R1cGxpY2F0aW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2VsZWN0ZWRSZWNvcmQ6IGFueTsgLy8gUmVjb3JkIHwgc3RyaW5nO1xyXG4gIGxvYWRlcjogYm9vbGVhbjtcclxuICBsb2FkZWRmb3JtOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcGFuZWxPcGVuU3RhdGU6IGJvb2xlYW5bXSA9IG5ldyBBcnJheTxib29sZWFuPigpO1xyXG4gIHB1YmxpYyBzZWxlY3RlZEluZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICB2aXN1YWxpenphQ29udGVudXRvID0gZmFsc2U7XHJcbiAgbW9kaWZpY2FDb250ZW51dG8gPSBmYWxzZTtcclxuXHJcblxyXG4gIEBWaWV3Q2hpbGQoXCJ0YWJsZVJlY29yZHNcIiwgeyBzdGF0aWM6IHRydWUgfSkgdGFibGVSZWNvcmRzOiBFcXBUYWJsZUNvbXBvbmVudDtcclxuXHJcbiAgY29sdW1ucyA9IG5ldyBBcnJheTxDb25maWdDb2x1bW4+KCk7XHJcbiAgdGFiZWxsYXJDb2x1bW5zID0gbmV3IEFycmF5PENvbmZpZ0NvbHVtbj4oKTtcclxuICBwYW5lbHM6IEFycmF5PFBhbmVsPlxyXG4gIGJ1dHRvbnM6IEFycmF5PFJlY29yZEJ1dHRvbj4gPSBuZXcgQXJyYXk8UmVjb3JkQnV0dG9uPigpO1xyXG4gIHBvcHVwTG9hZGVyOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBWaWV3Q2hpbGQoXCJvcGVuQWRkRGlhbG9nXCIsIHsgc3RhdGljOiBmYWxzZSB9KSBvcGVuQWRkRGlhbG9nOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIG9wZW5BZGREaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxUZW1wbGF0ZVJlZjxhbnk+PjtcclxuXHJcbiAgQFZpZXdDaGlsZChcIm9wZW5HcmFwaERpYWxvZ1wiLCB7IHN0YXRpYzogZmFsc2UgfSkgb3BlbkdyYXBoRGlhbG9nOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIG9wZW5HcmFwaERpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPFRlbXBsYXRlUmVmPGFueT4+O1xyXG5cclxuICB0b2RvTGlzdDogYW55O1xyXG4gIGlzRnVsbE9wZW5lZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBpc1RhYmVsbGFyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNMaXN0VmlldzogYm9vbGVhbiA9IHRydWU7XHJcbiAgdGFiZWxsYXJDb25kaXRpb25Mb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgbWlucGVyaW9kOiBEYXRlO1xyXG4gIG1heHBlcmlvZDogRGF0ZTtcclxuXHJcbiAgdGFiZWxsYXJGaWVsZHM6IEFycmF5PFRhYmVsbGFyRmllbGQ+ID0gbmV3IEFycmF5PFRhYmVsbGFyRmllbGQ+KCk7XHJcbiAgc2VsZWN0ZWRUYWJlbGxhckZpZWxkczogQXJyYXk8VGFiZWxsYXJGaWVsZD47XHJcbiAgdGFiZWxsYXJWYWx1ZXM6IEFycmF5PGFueT4gPSBuZXcgQXJyYXk8YW55PigpO1xyXG5cclxuICAvLyBUTVctUElDS0VSXHJcbiAgbW9kZXMgPSBNb2RlRW51bVxyXG4gIHRpbWVUeXBlID0gVGltZVR5cGVFbnVtXHJcbiAgbW9kZTogTW9kZUVudW07XHJcblxyXG4gIGxpYlNpbmdsZUxvYWRlZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgdmlzaWJsZUFjdGlvbkJ1dHRvbnM6IEFycmF5PEFjdGlvbkJ1dHRvbj4gPSBuZXcgQXJyYXk8QWN0aW9uQnV0dG9uPigpO1xyXG5cclxuICAvLyBhZGQgbmV3XHJcbiAgQE91dHB1dCgpIG9uQWRkVmlld0VkaXRSZWNvcmQ6IEV2ZW50RW1pdHRlcjx7XHJcbiAgICByZWNvcmQ6IFJlY29yZDtcclxuICAgIG9ubHlWaWV3OiBib29sZWFuO1xyXG4gIH0+ID0gbmV3IEV2ZW50RW1pdHRlcjx7IHJlY29yZDogUmVjb3JkOyBvbmx5VmlldzogYm9vbGVhbiB9PigpO1xyXG5cclxuICBAT3V0cHV0KCkgb25EZWxldGVSZWNvcmQ6IEV2ZW50RW1pdHRlcjxSZWNvcmQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ+KCk7XHJcbiAgQE91dHB1dCgpIHNhdmVSZWNvcmRFdmVudDogRXZlbnRFbWl0dGVyPFJlY29yZD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuICBAT3V0cHV0KCkgYWZ0ZXJTYXZlUmVjb3JkRXZlbnQ6IEV2ZW50RW1pdHRlcjxSZWNvcmQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ+KCk7XHJcbiAgQE91dHB1dCgpIGRyYWdTdGFydGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBkcmFnUmVsZWFzZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICBAT3V0cHV0KCkgb3V0OiBFdmVudEVtaXR0ZXI8ZXZlbnRPdXQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxldmVudE91dD4oKTtcclxuICBAT3V0cHV0KCkgZmlyZVRyaWdnZXI6IEV2ZW50RW1pdHRlcjxGaXJlVHJpZ2dlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPEZpcmVUcmlnZ2VyPigpO1xyXG4gIEBPdXRwdXQoKSBjbGlja0RyYWdJbmRpY2F0b3I6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIC8vI3JlZ2lvbiBjb25zdHJ1Y3RvclxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSB1dGlsaXR5SGVscGVyU2VydmljZTogVXRpbGl0eUhlbHBlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBkYkRhdGVTZXJ2aWNlOiBkYkRhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkYXRlUGlwZTogRGF0ZVBpcGVcclxuICApIHsgfVxyXG4gIC8vI2VuZHJlZ2lvbiBjb25zdHJ1Y3RvclxyXG5cclxuICAvLyNyZWdpb24gbmdPbkluaXRcclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIC8vIHRoaXMucGFuZWxPcGVuU3RhdGUgPSBbXHJcbiAgICAvLyAgIC4uLkFycmF5KHRoaXMuY29uZmlndXJhdGlvbnMudmFsdWVzLmxlbmd0aCArIDEpLFxyXG4gICAgLy8gXS5tYXAoKCkgPT4gZmFsc2UpO1xyXG5cclxuICAgIHRoaXMuZGVmYXVsdExpc3RBY3Rpb25zID0gdGhpcy5jb25maWd1cmF0aW9ucy5kZWZhdWx0TGlzdEFjdGlvbnM7XHJcbiAgICB0aGlzLnZpc2libGVBY3Rpb25CdXR0b25zID0gdGhpcy5hY3Rpb25CdXR0b25zLmZpbHRlcih4ID0+IHguU2hvd0luID09IEFjdGlvbkZsYWdFbnVtLkxJU1RWSUVXKTtcclxuXHJcbiAgICAvLyB0aGlzLnNob3dUaXRsZSA9IHRoaXMuY29uZmlndXJhdGlvbnMuc2hvd1RpdGxlO1xyXG5cclxuICAgIHRoaXMub3V0Q29tcGlsZUNvbmZpZ3VyYXRpb25zID0gbmV3IER5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnKFxyXG4gICAgICBmYWxzZSxcclxuICAgICAgdGhpcy5jb21waWxlQ29uZmlndXJhdGlvbnMuc2hvd1NhdmVCdXR0b24sXHJcbiAgICAgIHRoaXMuY29tcGlsZUNvbmZpZ3VyYXRpb25zLnNob3dCYWNrQnV0dG9uLFxyXG4gICAgICB0aGlzLmNvbXBpbGVDb25maWd1cmF0aW9ucy51c2VySUQsXHJcbiAgICAgIHRoaXMuY29tcGlsZUNvbmZpZ3VyYXRpb25zLmFkZGl0aW9uYWxQYXJhbXMsXHJcbiAgICAgIHRoaXMuY29tcGlsZUNvbmZpZ3VyYXRpb25zLmFkZGl0aW9uYWxJbmZvLFxyXG4gICAgICB0aGlzLmNvbXBpbGVDb25maWd1cmF0aW9ucy5wcmVmaWx0ZXJQYXJhbXMsXHJcbiAgICApO1xyXG4gICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwibGlzdC12aWV3IC0gb3V0Y29tcGlsZUNvbmZpZ3VyYXRpb25zIFwiLCB0aGlzLm91dENvbXBpbGVDb25maWd1cmF0aW9ucyk7XHJcbiAgICB0aGlzLmdldEZvcm1CeUlEKCk7XHJcbiAgICB0aGlzLmNvbmZpZ3VyZUxpc3R2aWV3QnV0dG9ucygpO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gbmdPbkluaXRcclxuXHJcbiAgLy8jcmVnaW9uIG5nT25DaGFuZ2VzXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCduZ09uQ2hhbmdlcycsIGNoYW5nZXMpO1xyXG5cclxuICAgIC8vIFNlIHZpZW5lIG1vZGlmaWNhdG8gaWwgdmFsb3JlIGRpIFwibmdNb2RlbElucHV0XCIgYWxsb3JhIGFnZ2lvcm5hIGwnaW5wdXRcclxuICAgIGlmIChcclxuICAgICAgY2hhbmdlc1tcImNvbmZpZ3VyYXRpb25zXCJdICE9IHVuZGVmaW5lZCAmJlxyXG4gICAgICBjaGFuZ2VzW1wiY29uZmlndXJhdGlvbnNcIl0uZmlyc3RDaGFuZ2UgPT0gZmFsc2VcclxuICAgICkge1xyXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLnZhbHVlcyA9IGNoYW5nZXNbXCJjb25maWd1cmF0aW9uc1wiXS5jdXJyZW50VmFsdWU7XHJcbiAgICAgIHRoaXMucmVsb2FkVGFibGVzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBuZ09uQ2hhbmdlc1xyXG5cclxuICAvLyNyZWdpb24gb25PcGVuaW5nXHJcbiAgLyoqXHJcbiAgICogZnVuemlvbmUgZGkgYXBlcnR1cmEgZGVsbCdhY2NvcmRpb25cclxuICAgKiBAcGFyYW0gaW5kaWNlIFxyXG4gICAqL1xyXG4gIG9uT3BlbmluZyhpbmRpY2U6IG51bWJlcikge1xyXG4gICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gaW5kaWNlO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gb25PcGVuaW5nXHJcblxyXG4gIGNvbmZpZ3VyZUxpc3R2aWV3QnV0dG9ucygpIHtcclxuICAgIHRoaXMuYnV0dG9ucyA9IFtcclxuXHJcbiAgICAgIHtcclxuICAgICAgICBcImljb25cIjogXCJ2aXNpYmlsaXR5XCIsXHJcbiAgICAgICAgXCJ0ZXh0XCI6IFwiVmlzdWFsaXp6YVwiLFxyXG4gICAgICAgIFwidmlzaWJsZVwiOiB0aGlzLmRlZmF1bHRMaXN0QWN0aW9ucy52aWV3ICYmICh0aGlzLmRlZmF1bHRMaXN0QWN0aW9ucy5lZGl0IHx8IHRoaXMuZGVmYXVsdExpc3RBY3Rpb25zLmR1cGxpY2F0ZSB8fCB0aGlzLmRlZmF1bHRMaXN0QWN0aW9ucy5kZWxldGUpLFxyXG4gICAgICAgIFwiZXh0cmFDbGFzc1wiOiBcInZpZXctYnV0dG9uLWljb25cIixcclxuICAgICAgICBcImZuXCI6IChwYW5lbCwgaSwgZXZlbnQpID0+IHtcclxuICAgICAgICAgIHRoaXMudmlld1JlY29yZChwYW5lbCwgdHJ1ZSwgaSwgZXZlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwiaWNvblwiOiBcImVkaXRcIixcclxuICAgICAgICBcInRleHRcIjogXCJNb2RpZmljYVwiLFxyXG4gICAgICAgIFwidmlzaWJsZVwiOiB0aGlzLmRlZmF1bHRMaXN0QWN0aW9ucy5lZGl0LFxyXG4gICAgICAgIFwiZXh0cmFDbGFzc1wiOiBcImVkaXQtYnV0dG9uLWljb25cIixcclxuICAgICAgICBcImZuXCI6IChwYW5lbCwgaSwgZXZlbnQpID0+IHtcclxuICAgICAgICAgIHRoaXMuRWRpdFJlY29yZChwYW5lbCwgZmFsc2UsIGksIGV2ZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcImljb25cIjogXCJmaWxlX2NvcHlcIixcclxuICAgICAgICBcInRleHRcIjogXCJEdXBsaWNhXCIsXHJcbiAgICAgICAgXCJ2aXNpYmxlXCI6IHRoaXMuZGVmYXVsdExpc3RBY3Rpb25zLmR1cGxpY2F0ZSxcclxuICAgICAgICBcImV4dHJhQ2xhc3NcIjogXCJkdXBsaWNhdGUtYnV0dG9uLWljb25cIixcclxuICAgICAgICBcImZuXCI6IChwYW5lbCwgaSwgZXZlbnQpID0+IHtcclxuICAgICAgICAgIHRoaXMuZHVwbGljYXRlUmVjb3JkKHBhbmVsLCBmYWxzZSwgaSwgZXZlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwiaWNvblwiOiBcImRlbGV0ZVwiLFxyXG4gICAgICAgIFwidGV4dFwiOiBcIkNhbmNlbGxhXCIsXHJcbiAgICAgICAgXCJ2aXNpYmxlXCI6IHRoaXMuZGVmYXVsdExpc3RBY3Rpb25zLmRlbGV0ZSxcclxuICAgICAgICBcImV4dHJhQ2xhc3NcIjogXCJkZWxldGUtYnV0dG9uLWljb25cIixcclxuICAgICAgICBcImZuXCI6IChwYW5lbCwgaSwgZXZlbnQpID0+IHtcclxuICAgICAgICAgIHRoaXMuZGVsZXRlUmVjb3JkKHBhbmVsLCBldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgXVxyXG4gICAgdGhpcy5idXR0b25zID0gdGhpcy5idXR0b25zLmNvbmNhdCh0aGlzLmV4dGVybmFsQnV0dG9ucykuZmlsdGVyKHggPT4geC52aXNpYmxlKTtcclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBvcGVuVGFiZWxsYXJcclxuICBvcGVuVGFiZWxsYXIoKXtcclxuICAgIHRoaXMuaXNMaXN0VmlldyA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1RhYmVsbGFyID0gdHJ1ZTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIG9wZW5UYWJlbGxhclxyXG5cclxuICAvLyNyZWdpb24gb3Blbkxpc3RWaWV3XHJcbiAgb3Blbkxpc3RWaWV3KCl7XHJcbiAgICB0aGlzLmlzVGFiZWxsYXIgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNMaXN0VmlldyA9IHRydWU7XHJcbiAgfSAgXHJcbiAgLy8jZW5kcmVnaW9uIG9wZW5MaXN0Vmlld1xyXG5cclxuICAvLyNyZWdpb24gZ2V0Rm9ybUJ5SURcclxuICBnZXRGb3JtQnlJRChpZDogc3RyaW5nID0gdGhpcy5mb3JtSUQpIHtcclxuICAgIGlmICh0aGlzLmZvcm0gPT0gbnVsbCkge1xyXG4gICAgICBjb25zdCBkeW5hbWljTW9kdWxlUGFyYW1zOiBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+ID1cclxuICAgICAgICBuZXcgQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPigpO1xyXG4gICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLnB1c2goe1xyXG4gICAgICAgIFBhcmFtTmFtZTogXCJpZFwiLFxyXG4gICAgICAgIFBhcmFtVmFsdWU6IGlkLFxyXG4gICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuR2V0QnlJREVuZFBvaW50LFxyXG4gICAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMsXHJcbiAgICAgICAgKHJlczogRm9ybSkgPT4ge1xyXG4gICAgICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcIkxpc3RWaWV3Rm9ybVJlY29yZENvbXBvbmVudCAtIGdldCBGT1JNXCIsIHJlcylcclxuICAgICAgICAgIHRoaXMuZm9ybSA9IHJlcztcclxuICAgICAgICAgIHRoaXMuZm9ybS5PcmdhSUQgPSB0aGlzLm9yZ2FJRDtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzICE9IG51bGwgJiYgdGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzICE9IFwiXCIpe1xyXG4gICAgICAgICAgICB0aGlzLmZvcm0uVHJpZ2dlcnMgPSBKU09OLnBhcnNlKHRoaXMuZm9ybS5PYmplY3RUcmlnZ2Vycyk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm0uVHJpZ2dlcnMgPSBuZXcgQXJyYXk8VHJpZ2dlcj4oKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5mb3JtLk9iamVjdEFjdGlvbkJ1dHRvbnMgIT0gbnVsbCAmJiB0aGlzLmZvcm0uT2JqZWN0QWN0aW9uQnV0dG9ucyAhPSBcIlwiKXtcclxuICAgICAgICAgICAgdGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnMgPSBKU09OLnBhcnNlKHRoaXMuZm9ybS5PYmplY3RBY3Rpb25CdXR0b25zKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybS5BY3Rpb25CdXR0b25zID0gbmV3IEFycmF5PEFjdGlvbkJ1dHRvbj4oKTtcclxuICAgICAgICAgIH0gICAgICAgICAgXHJcblxyXG4gICAgICAgICAgdGhpcy5hY3Rpb25CdXR0b25zID0gdGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnM7XHJcbiAgICAgICAgICB0aGlzLmxvYWRlZGZvcm0gPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5jb25maWd1cmVDb2x1bW5zKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAoZXJyKSA9PiB7IH1cclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY29uZmlndXJlQ29sdW1ucygpO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gZ2V0Rm9ybUJ5SURcclxuXHJcbiAgLy8jcmVnaW9uIGNvbmZpZ3VyZUNvbHVtbnNcclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGNvbmZpZ3VyYXJlIGxlIGNvbG9ubmUgZGVsbGEgZXFwLXRhYmxlLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgY29uZmlndXJlQ29sdW1ucygpIHtcclxuXHJcbiAgICAvLyB0aGlzLmNvbmZpZ3VyZVRhYmVsbGFyQ29sdW1ucygpO1xyXG5cclxuICAgIC8vIHRoaXMuY3JlYXRlQWRkaXRpb25hbEFjdGlvbnMoKTtcclxuICAgIC8vIHRoaXMuY3JlYXRlQ29sdW1uc0Zyb21Gb3JtRmllbGRzKCk7XHJcbiAgICBpZiAodGhpcy5yZWNvcmRzID09IG51bGwpIHtcclxuICAgICAgdGhpcy5nZXRSZWNvcmRzQnlGb3JtSUQoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnUmVjb3JkcyBFeGlzdHMnLCB0aGlzLnJlY29yZHMpO1xyXG4gICAgICB0aGlzLmdlbmVyYXRlQW5zd2Vyc0FycmF5KHRoaXMucmVjb3Jkcyk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBjb25maWd1cmVDb2x1bW5zXHJcblxyXG4gIC8vI3JlZ2lvbiBjb25maWd1cmVUYWJlbGxhckNvbHVtbnNcclxuICAvLyBwcml2YXRlIGNvbmZpZ3VyZVRhYmVsbGFyQ29sdW1ucygpe1xyXG5cclxuICAvLyAgICAgLyoqXHJcbiAgLy8gICAgICAqIE1ldG9kbyBwZXIgY3JlYXJlIGxhIGNvbmZpZ3VyYXppb25lIGRlbGxlIGNvbG9ubmUgcGVyIGxhIGVxcC10YWJsZS5cclxuICAvLyAgICAgICogSW5kaXZpZHVhIGkgQmFzZUZpZWxkIGRhIG1vc3RyYXJlIGUgbGkgdXNhIHBlciBjcmVhcmUgbGUgQ29uZmlnQ29sdW1uLlxyXG4gIC8vICAgICAgKiBMZSBjb2xvbm5lIHZlbmdvbm8gY3JlYXRlIHBlciBpIEJhc2VGaWVsZCBjb24gaWwgZmxhZyBJbkxpc3RWaWV3IGEgVFJVRVxyXG4gIC8vICAgICAgKiBvcHB1cmUsIG5lbCBjYXNvIG5vbiBzaWFubyBzdGF0aSBzcGVjaWZpY2F0aSBpIGNhbXBpIGRhIHZpc3VhbGl6emFyZSxcclxuICAvLyAgICAgICogc2VsZXppb25hIGkgcHJpbWkgNi5cclxuICAvLyAgICAgICovXHJcblxyXG4gIC8vICAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coJ2xpc3QtZm9ybS1yZWNvcmQgLSBjcmVhdGVDb2x1bW5zRnJvbUZvcm1GaWVsZHMnLCB0aGlzLmZvcm0pO1xyXG4gICAgXHJcbiAgLy8gICAgICAgdmFyIGZpZWxkc0ZvckNvbHVtbnM6IEFycmF5PEJhc2VGaWVsZD47XHJcbiAgLy8gICAgICAgaWYgKHRoaXMuZm9ybS5GaWVsZHMuZmluZCgoZikgPT4gZi5Jbkxpc3RWaWV3KSkge1xyXG4gIC8vICAgICAgICAgZmllbGRzRm9yQ29sdW1ucyA9IHRoaXMuZm9ybS5GaWVsZHMuZmlsdGVyKChmKSA9PiBmLkluTGlzdFZpZXcpO1xyXG4gIC8vICAgICAgIH0gZWxzZSB7XHJcbiAgLy8gICAgICAgICBmaWVsZHNGb3JDb2x1bW5zID0gdGhpcy5mb3JtLkZpZWxkcy5maWx0ZXIoKGYpID0+IGYuT3JkaW5hbFBvc2l0aW9uIDwgNik7XHJcbiAgLy8gICAgICAgfVxyXG4gIC8vICAgICAgIGZpZWxkc0ZvckNvbHVtbnNcclxuICAvLyAgICAgICAgIC5zb3J0KChhLCBiKSA9PlxyXG4gIC8vICAgICAgICAgICBhLk9yZGluYWxQb3NpdGlvbiA+IGIuT3JkaW5hbFBvc2l0aW9uXHJcbiAgLy8gICAgICAgICAgICAgPyAxXHJcbiAgLy8gICAgICAgICAgICAgOiBiLk9yZGluYWxQb3NpdGlvbiA+IGEuT3JkaW5hbFBvc2l0aW9uXHJcbiAgLy8gICAgICAgICAgICAgPyAtMVxyXG4gIC8vICAgICAgICAgICAgIDogMFxyXG4gIC8vICAgICAgICAgKVxyXG4gIC8vICAgICAgICAgLmZvckVhY2goKGZpZWxkKSA9PiB7XHJcbiAgLy8gICAgICAgICAgIHRoaXMuY29sdW1ucy5wdXNoKHRoaXMuY3JlYXRlRmllbGRDb2x1bW4oZmllbGQpKTtcclxuICAvLyAgICAgICAgIH0pO1xyXG5cclxuICAvLyAgICAgICAgIGNvbnNvbGUubG9nKFwiRklOQUwgQ09MVU1TTlwiLCB0aGlzLmNvbHVtbnMpO1xyXG5cclxuICAvLyB9XHJcbiAgLy8jZW5kcmVnaW9uIGNvbmZpZ3VyZVRhYmVsbGFyQ29sdW1uc1xyXG5cclxuICAvLyNyZWdpb24gY3JlYXRlRmllbGRDb2x1bW5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGNyZWFyZSBsJ29nZ2V0dG8gQ29uZmlndXJlQ29sdW1uIGNoZSByYXBwcmVzZW50YSBpbCBCYXNlRmllbGQgcGFzc2F0byBpbiBpbnB1dC5cclxuICAgKiBAcGFyYW0gZmllbGQgQmFzZUZpZWxkIHBlciBjdWkgY3JlYXJlIGxhIGNvbG9ubmEgbmVsbGEgZXFwLXRhYmxlXHJcbiAgICogQHJldHVybnMgUmVzdGl0dWlzY2UgdW5hIENvbmZpZ0NvbHVtbiBwZXIgbGEgZXFwLXRhYmxlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjcmVhdGVGaWVsZENvbHVtbihmaWVsZDogQmFzZUZpZWxkKTogQ29uZmlnQ29sdW1uIHtcclxuICAgIHZhciBjb2x1bW46IENvbmZpZ0NvbHVtbiA9IHsga2V5OiBmaWVsZC5OYW1lLCBkaXNwbGF5OiBmaWVsZC5MYWJlbCB9O1xyXG4gICAgc3dpdGNoIChmaWVsZC5GaWVsZFR5cGUpIHtcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiQm9vbGVhbm9cIl06XHJcbiAgICAgICAgY29sdW1uLnR5cGUgPSBUeXBlQ29sdW1uLkJvb2xlYW47XHJcbiAgICAgICAgY29sdW1uLmJvb2xlYW5WYWx1ZXMgPSB7XHJcbiAgICAgICAgICBmYWxzZTogJzxpIGNsYXNzPVwiZmEgZmEtdGltZXMgZXJyb3ItY29sb3JcIj48L2k+JyxcclxuICAgICAgICAgIHRydWU6ICc8aSBjbGFzcz1cImZhIGZhLWNoZWNrIHN1Y2Nlc3MtY29sb3JcIj48L2k+JyxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbHVtbi5zdHlsZXMgPSB7XHJcbiAgICAgICAgICBmbGV4OiBcIjAgMCA3JVwiLFxyXG4gICAgICAgICAgY2VsbEFsaWdubWVudDogQ2VsbEFsaWdubWVudEVudW0uQ0VOVEVSLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkRhdGEgZS9vIG9yYVwiXTpcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAoZmllbGQgYXMgRGF0ZUZpZWxkKS5Jc09ubHlEYXRlICE9IERhdGVUaW1lVHlwZUVudW1bXCJTb2xvIG9yYXJpb1wiXVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgY29sdW1uLnR5cGUgPSBUeXBlQ29sdW1uLkRhdGU7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIChmaWVsZCBhcyBEYXRlRmllbGQpLklzT25seURhdGUgPT0gRGF0ZVRpbWVUeXBlRW51bVtcIkRhdGEgZSBvcmFcIl1cclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBjb2x1bW4uZm9ybWF0ID0gXCJkZC9NTS95eXl5IEhIOm1tXCI7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICAoZmllbGQgYXMgRGF0ZUZpZWxkKS5Jc09ubHlEYXRlID09IERhdGVUaW1lVHlwZUVudW1bXCJTb2xvIGRhdGFcIl1cclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBjb2x1bW4uZm9ybWF0ID0gKGZpZWxkIGFzIERhdGVGaWVsZCkuRGF0ZUZvcm1hdFxyXG4gICAgICAgICAgICAgID8gKGZpZWxkIGFzIERhdGVGaWVsZCkuRGF0ZUZvcm1hdC5yZXBsYWNlKFwiRERcIiwgXCJkZFwiKVxyXG4gICAgICAgICAgICAgIDogXCJkZC9NTS95eXl5XCI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJDYW1wbyBudW1lcmljb1wiXTpcclxuICAgICAgICBpZiAoKGZpZWxkIGFzIE51bWVyaWNGaWVsZCkuQ3VycmVuY3lTeW1ib2wpIHtcclxuICAgICAgICAgIGNvbHVtbi5udW1iZXJQaXBlID0gTnVtYmVyQ29sdW1uUGlwZS5DVVJSRU5DWTtcclxuICAgICAgICAgIGNvbHVtbi5jdXJyZW5jeVBpcGVDb2RlID0gKGZpZWxkIGFzIE51bWVyaWNGaWVsZCkuQ3VycmVuY3lTeW1ib2w7XHJcbiAgICAgICAgfSBlbHNlIGlmICghKGZpZWxkIGFzIE51bWVyaWNGaWVsZCkuSXNJbnRlZ2VyKSB7XHJcbiAgICAgICAgICBjb2x1bW4ubnVtYmVyUGlwZSA9IE51bWJlckNvbHVtblBpcGUuREVDSU1BTDtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkFsbGVnYXRvXCJdOlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJJbW1hZ2luZVwiXTpcclxuICAgICBcclxuICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJFdGljaGV0dGFcIl06XHJcbiAgICAgICAgY29sdW1uLnZhbHVlID0gKGVsZW1lbnQ6IFJlY29yZCkgPT4geyByZXR1cm4gKGZpZWxkIGFzIExhYmVsRmllbGQpLkV0aWNoZXR0YTsgfTtcclxuICAgICAgYnJlYWs7ICAgICAgICBcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiRWxlbmNvIGdlbmVyaWNvXCJdOlxyXG5cclxuICAgICAgICBjb2x1bW4udmFsdWUgPSAoZWxlbWVudDogUmVjb3JkKSA9PiB7XHJcbiAgICAgICAgICBpZiAoKGZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5Jc011bHRpQ2hvaWNoZSkge1xyXG4gICAgICAgICAgICBpZiAoIWVsZW1lbnRbZmllbGQuTmFtZV0gfHwgZWxlbWVudFtmaWVsZC5OYW1lXS5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cygoZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLlZhbHVlUGFpcnMpXHJcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChrKSA9PlxyXG4gICAgICAgICAgICAgICAgICBlbGVtZW50W2ZpZWxkLk5hbWVdLmluY2x1ZGVzKFxyXG4gICAgICAgICAgICAgICAgICAgIChmaWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVQYWlyc1trXVxyXG4gICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAuam9pbihcIiwgXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgaWYgKChmaWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVQYWlycyA9PSBudWxsKXsgXHJcblxyXG4gICAgICAgICAgICAgIHZhciB2cyA9IChmaWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVTdHJpbmc7XHJcbiAgICAgICAgICAgICAgaWYgKHZzICE9IG51bGwpe1xyXG4gICAgICAgICAgICAgICAgdmFyIG9wdGlvbnMgPSB2cy5zcGxpdChcIjtcIik7XHJcbiAgICAgICAgICAgICAgICB2YXIgZm91bmR2YWx1ZSA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICBvcHRpb25zLmZvckVhY2goKG9wKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBvcC5zcGxpdChcInxcIik7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZXNbMV0gPT0gZWxlbWVudFtmaWVsZC5OYW1lXSl7XHJcbiAgICAgICAgICAgICAgICAgICAgZm91bmR2YWx1ZSA9IHZhbHVlc1swXTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZm91bmR2YWx1ZTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoKGZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzKS5maW5kKFxyXG4gICAgICAgICAgICAgIChrKSA9PlxyXG4gICAgICAgICAgICAgICAgKGZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzW2tdID09IGVsZW1lbnRbZmllbGQuTmFtZV1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbHVtbi5pc1NvcnRhYmxlID0gZmFsc2U7XHJcbiAgICAgICAgY29sdW1uLmlzU2VhcmNoYWJsZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiTG9va3VwXCJdOlxyXG4gICAgICAgIC8vIFRPRE9cclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHJldHVybiBjb2x1bW47XHJcbiAgfSAgXHJcbiAgLy8jZW5kcmVnaW9uIGNyZWF0ZUZpZWxkQ29sdW1uXHJcblxyXG4gIC8vI3JlZ2lvbiBnZXRSZWNvcmRzQnlGb3JtSURcclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHJlY3VwZXJhcmUgdHV0dGkgaSByZWNvcmQgc2FsdmF0aSBwZXIgdW5hIHBhcnRpY29sYXJlIEZvcm0uXHJcbiAgICogTGEgY2hpYW1hdGEgdmllbmUgZWZmZXR0dWF0YSBzb2xvIHNlIMOoIHN0YXRvIGNvbmZpZ3VyYXRvIGwnZW5kUG9pbnQgZGEgdXNhcmUuXHJcbiAgICogTGEgcmlzcG9zdGEgZGVsbGEgY2hpYW1hdGEgZGV2ZSBlc3NlcmUgdW4gYXJyYXkgZGkgb2dnZXR0aSBkaSB0aXBvIFwiRHluUmVjb3JkXCJcclxuICAgKiBhIHBhcnRpcmUgZGFpIHF1YWxpIHZlbmdvbm8gcmljcmVhdGkgaSBSZWNvcmQgdXNhdGkgbmVsIGNsaWVudC5cclxuICAgKi9cclxuICBhc3luYyBnZXRSZWNvcmRzQnlGb3JtSUQoKSB7XHJcbiAgICB2YXIgZHluYW1pY01vZHVsZVBhcmFtcyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIFBhcmFtTmFtZTogXCJFbnRJRFwiLFxyXG4gICAgICAgIFBhcmFtVmFsdWU6IHRoaXMuZm9ybS5JRCxcclxuICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgfSxcclxuICAgIF07XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLnVzZXJJRCA9PSBudWxsICYmXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uICYmXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMgJiZcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5HZXRCeUZvcm1JREVuZFBvaW50XHJcbiAgICApIHtcclxuICAgICAgLy8gc2Ugbm9uIGNvbm9zY28gbCd1dGVudGVcclxuICAgICAgYXdhaXQgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5HZXRCeUZvcm1JREVuZFBvaW50LFxyXG4gICAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMsXHJcbiAgICAgICAgKHJlczogQXJyYXk8RHluUmVjb3JkPikgPT4ge1xyXG4gICAgICAgICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdHZXRCeUZvcm1JREVuZFBvaW50JywgcmVzKVxyXG4gICAgICAgICAgdGhpcy5nZW5lcmF0ZUFuc3dlcnNBcnJheShyZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMudXNlcklEICE9IG51bGwgJiZcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24gJiZcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3JkcyAmJlxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEFsbEJ5RW50QW5kVXNlcklERW5kUG9pbnRcclxuICAgICkge1xyXG4gICAgICAvLyBzZSBjb25vc2NvIGwndXRlbnRlXHJcbiAgICAgIGxldCBkeW5hbWljTW9kdWxlUGFyYW1zID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFBhcmFtTmFtZTogXCJFbnRJRFwiLFxyXG4gICAgICAgICAgUGFyYW1WYWx1ZTogdGhpcy5mb3JtLklELFxyXG4gICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBQYXJhbU5hbWU6IFwiVXNlcklEXCIsXHJcbiAgICAgICAgICBQYXJhbVZhbHVlOiB0aGlzLmNvbmZpZ3VyYXRpb25zLnVzZXJJRCxcclxuICAgICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF07XHJcblxyXG4gICAgICBhd2FpdCB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEFsbEJ5RW50QW5kVXNlcklERW5kUG9pbnQsXHJcbiAgICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgICAocmVzOiBBcnJheTxEeW5SZWNvcmQ+KSA9PiB7XHJcbiAgICAgICAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coJ0dldEFsbEJ5RW50QW5kVXNlcklERW5kUG9pbnQnLCByZXMpXHJcbiAgICAgICAgICB0aGlzLmdlbmVyYXRlQW5zd2Vyc0FycmF5KHJlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5lcnJvcihcImNvbnRyb2xsYXJlIGxlIGNvbmZpZ3VyYXppb25pIGRlbGwnZW5kcG9pbnRcIik7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBnZXRSZWNvcmRzQnlGb3JtSURcclxuXHJcbiAgLy8jcmVnaW9uIGdlbmVyYXRlQW5zd2Vyc0FycmF5XHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZUFuc3dlcnNBcnJheShyZXM6IEFycmF5PER5blJlY29yZD4pIHtcclxuICAgIHRoaXMuY29uZmlndXJhdGlvbnMudmFsdWVzID0gbmV3IEFycmF5PFJlY29yZD4oKTtcclxuICAgIHRoaXMucGFuZWxzID0gbmV3IEFycmF5PFBhbmVsPigpO1xyXG4gICAgcmVzLmZvckVhY2goKHIpID0+IHtcclxuICAgICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiZ2VuZXJhdGVBbnN3ZXJzQXJyYXlcIiwgcilcclxuICAgICAgdmFyIHRtcFJlYzogUmVjb3JkID0gbmV3IFJlY29yZCgpO1xyXG4gICAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJTZXJpYWxpemVkVmFsdWVzXCIsIHIuU2VyaWFsaXplZFZhbHVlcylcclxuICAgICAgdG1wUmVjID0gSlNPTi5wYXJzZShyLlNlcmlhbGl6ZWRWYWx1ZXMpO1xyXG4gICAgICB0bXBSZWMuSUQgPSByLklEO1xyXG4gICAgICB0bXBSZWMuRW50SUQgPSByLkVudElEO1xyXG4gICAgICB0bXBSZWMuVmVyc2lvbiA9IHIuVmVyc2lvbjtcclxuICAgICAgdG1wUmVjLnVzZXJJRCA9IHIudXNlcklEO1xyXG4gICAgICB0bXBSZWMuQW5zd2VyRGF0ZSA9IHRoaXMuZGJEYXRlU2VydmljZS5wYXJzZURhdGVmcm9tREIoci5BbnN3ZXJEYXRlKS50b1N0cmluZygpO1xyXG5cclxuICAgICAgdG1wUmVjLkhUTUxyZWFkYWJsZVZhbHVlcyA9IHIuSFRNTHJlYWRhYmxlVmFsdWVzO1xyXG4gICAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJBZGRpdGlvbmFsUGFyYW1zXCIsIHIuQWRkaXRpb25hbFBhcmFtcylcclxuICAgICAgdG1wUmVjLkFkZGl0aW9uYWxQYXJhbXMgPSByLkFkZGl0aW9uYWxQYXJhbXMgIT0gXCJcIiAmJiByLkFkZGl0aW9uYWxQYXJhbXMgIT0gbnVsbCA/IEpTT04ucGFyc2Uoci5BZGRpdGlvbmFsUGFyYW1zKSA6IFwiXCI7XHJcbiAgICAgIHRtcFJlYy5BZGRpdGlvbmFsSW5mbyA9IHIuQWRkaXRpb25hbEluZm8gIT0gXCJcIiAmJiByLkFkZGl0aW9uYWxJbmZvICE9IG51bGwgPyBKU09OLnBhcnNlKHIuQWRkaXRpb25hbEluZm8pIDogXCJcIjtcclxuXHJcbiAgICAgIHZhciBmb3VuZGtleSA9IHRydWU7XHJcbiAgICAgIGlmICh0aGlzLmNvbnRlc3R1YWxpemF0aW9uUGFyYW1zICE9IG51bGwpe1xyXG4gICAgICAgIGlmICh0bXBSZWMuQWRkaXRpb25hbFBhcmFtcyAhPSBudWxsKXtcclxuICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuY29udGVzdHVhbGl6YXRpb25QYXJhbXMpLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXRtcFJlYy5BZGRpdGlvbmFsUGFyYW1zLmhhc093blByb3BlcnR5KGtleSkgfHwgdGhpcy5jb250ZXN0dWFsaXphdGlvblBhcmFtc1trZXldLmluZGV4T2YodG1wUmVjLkFkZGl0aW9uYWxQYXJhbXNba2V5XSkgPT0gLTEpe1xyXG4gICAgICAgICAgICAgIGZvdW5ka2V5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGZvdW5ka2V5KXtcclxuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLnZhbHVlcy5wdXNoKHRtcFJlYyk7XHJcblxyXG4gICAgICAgIHZhciBpc0hpZ2hsaWdodGVkID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMuaGlnaGxpZ2h0RmlsdGVyICE9IG51bGwpIHtcclxuICAgICAgICAgIGlzSGlnaGxpZ2h0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgT2JqZWN0LmtleXModGhpcy5oaWdobGlnaHRGaWx0ZXIpLmZvckVhY2goKGZpbHRlcikgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXRtcFJlYy5BZGRpdGlvbmFsUGFyYW1zW2ZpbHRlcl0gfHwgdG1wUmVjLkFkZGl0aW9uYWxQYXJhbXNbZmlsdGVyXSAhPSB0aGlzLmhpZ2hsaWdodEZpbHRlcltmaWx0ZXJdKSB7XHJcbiAgICAgICAgICAgICAgaXNIaWdobGlnaHRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucGFuZWxzLnB1c2goeyByZWNvcmQ6IHRtcFJlYywgaXNPcGVuOiBmYWxzZSwgcGFnZVN0YXRlOiBudWxsLCBoaWdobGlnaHRlZDogaXNIaWdobGlnaHRlZCB9KTtcclxuXHJcbiAgICAgIH1cclxuXHJcblxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgc2V0VGltZW91dCgoXykgPT4ge1xyXG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0sIDApOyAvLyByZWZyZXNoIHVpXHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBnZW5lcmF0ZUFuc3dlcnNBcnJheVxyXG5cclxuICAvLyNyZWdpb24gdG9nZ2xlUGFuZWxcclxuICB0b2dnbGVQYW5lbChwYW5lbDogYW55LCByZWNvcmQ6IFJlY29yZCkge1xyXG4gICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCd0b2dnbGVQYW5lbCcpXHJcbiAgICBpZiAodGhpcy5kZWZhdWx0TGlzdFZpZXdGdW5jdGlvbiAhPSBudWxsKSB7XHJcbiAgICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnZGVmYXVsdExpc3RWaWV3RnVuY3Rpb24nLCByZWNvcmQpXHJcbiAgICAgIHRoaXMuZGVmYXVsdExpc3RWaWV3RnVuY3Rpb24ocmVjb3JkKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKCFwYW5lbC5pc09wZW4pIHtcclxuICAgICAgcGFuZWwuaXNPcGVuID0gdHJ1ZTtcclxuICAgICAgcGFuZWwucGFnZVN0YXRlID0gJ3Zpc3VhbGl6emFDb250ZW51dG8nO1xyXG4gICAgICAvLyBTaW11bGEgdW4gY2FsY29sbyBhc2luY3Jvbm9cclxuICAgICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIC8vIH0sIDEwMDApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcGFuZWwuaXNPcGVuID0gZmFsc2U7XHJcbiAgICAgIHBhbmVsLnBhZ2VTdGF0ZSA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiB0b2dnbGVQYW5lbFxyXG5cclxuICAvLyNyZWdpb24gdmlld09yRWRpdFJlY29yZFxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBjaGUgc2NhdGVuYSBsJ2V2ZW50byBkaSBPdXRwdXQgcGVyIG1vc3RyYXJlIG8gbW9kaWZpY2FyZSBpbCByZWNvcmRcclxuICAgKiBzZWxlemlvbmF0byBzdWxsYSBlcXAtdGFibGUuXHJcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmQgZGEgdmlzdWFsaXp6YXJlIG8gbW9kaWZpY2FyZSBzZWxlemlvbmF0byBzdWxsYSBlcXAtdGFibGUuXHJcbiAgICogQHBhcmFtIG9ubHlWaWV3IFNlIFRSVUUgdmllbmUgbW9zdHJhdG8gaWwgY29tcG9uZW50ZSBhZGQtZm9ybS1yZWNvcmQgaW4gc29sYSBsZXR0dXJhLlxyXG4gICAqL1xyXG4gIHZpZXdPckVkaXRSZWNvcmQocmVjb3JkOiBSZWNvcmQsIG9ubHlWaWV3OiBib29sZWFuLCBpKSB7XHJcbiAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coJ3ZpZXdPckVkaXRSZWNvcmQnKVxyXG4gICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgIHRoaXMub25BZGRWaWV3RWRpdFJlY29yZDIoeyByZWNvcmQsIG9ubHlWaWV3IH0pO1xyXG4gICAgdGhpcy5wYW5lbE9wZW5TdGF0ZS5tYXAoKCkgPT4gZmFsc2UpO1xyXG4gICAgdGhpcy5wYW5lbE9wZW5TdGF0ZVtpXSA9IHRoaXMucGFuZWxPcGVuU3RhdGVbaV0gPT0gdHJ1ZSA/IGZhbHNlIDogdHJ1ZTtcclxuICAgIC8vIHRoaXMub25BZGRWaWV3RWRpdFJlY29yZC5lbWl0KHsgcmVjb3JkLCBvbmx5VmlldyB9KTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIHZpZXdPckVkaXRSZWNvcmRcclxuXHJcbiAgLy8jcmVnaW9uIHZpZXdSZWNvcmRcclxuICB2aWV3UmVjb3JkKHBhbmVsOiBQYW5lbCwgb25seVZpZXc6IGJvb2xlYW4sIGksIGV2OiBFdmVudCkge1xyXG4gICAgZXYucHJldmVudERlZmF1bHQoKTtcclxuICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCd2aWV3UmVjb3JkJylcclxuICAgIGxldCByZWNvcmQgPSBwYW5lbC5yZWNvcmRcclxuICAgIHRoaXMudmlzdWFsaXp6YUNvbnRlbnV0byA9IHRydWU7XHJcbiAgICB0aGlzLm1vZGlmaWNhQ29udGVudXRvID0gZmFsc2U7XHJcbiAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgLy8gdGhpcy5vbkFkZFZpZXdFZGl0UmVjb3JkMih7IHJlY29yZCwgb25seVZpZXcgfSk7XHJcbiAgICBpZiAocGFuZWwucGFnZVN0YXRlID09ICd2aXN1YWxpenphQ29udGVudXRvJykge1xyXG4gICAgICBwYW5lbC5pc09wZW4gPSBmYWxzZTtcclxuICAgICAgcGFuZWwucGFnZVN0YXRlID0gbnVsbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHBhbmVsLmlzT3BlbiA9IHRydWU7XHJcbiAgICAgIHBhbmVsLnBhZ2VTdGF0ZSA9ICd2aXN1YWxpenphQ29udGVudXRvJztcclxuICAgIH1cclxuICAgIHRoaXMucGFuZWxPcGVuU3RhdGUubWFwKCgpID0+IGZhbHNlKTtcclxuICAgIHRoaXMucGFuZWxPcGVuU3RhdGVbaV0gPSB0aGlzLnBhbmVsT3BlblN0YXRlW2ldID09IHRydWUgPyBmYWxzZSA6IHRydWU7XHJcbiAgICAvLyB0aGlzLm9uQWRkVmlld0VkaXRSZWNvcmQuZW1pdCh7IHJlY29yZCwgb25seVZpZXcgfSk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiB2aWV3UmVjb3JkXHJcblxyXG4gIC8vI3JlZ2lvbiBFZGl0UmVjb3JkXHJcbiAgRWRpdFJlY29yZChwYW5lbDogUGFuZWwsIG9ubHlWaWV3OiBib29sZWFuLCBpLCBldjogRXZlbnQpIHtcclxuICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnRWRpdFJlY29yZCcpXHJcblxyXG4gICAgbGV0IHJlY29yZCA9IHBhbmVsLnJlY29yZFxyXG4gICAgcGFuZWwucmVjb3JkLkFkZGl0aW9uYWxJbmZvID0gT2JqZWN0LmFzc2lnbih7fSwgcmVjb3JkLkFkZGl0aW9uYWxJbmZvLCB0aGlzLmNvbmZpZ3VyYXRpb25zLnVwZGF0ZUluZm8pO1xyXG4gICAgdGhpcy52aXN1YWxpenphQ29udGVudXRvID0gZmFsc2U7XHJcbiAgICB0aGlzLm1vZGlmaWNhQ29udGVudXRvID0gdHJ1ZTtcclxuICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAvLyB0aGlzLm9uQWRkVmlld0VkaXRSZWNvcmQyKHsgcmVjb3JkLCBvbmx5VmlldyB9KTtcclxuICAgIGlmIChwYW5lbC5wYWdlU3RhdGUgPT0gJ21vZGlmaWNhQ29udGVudXRvJykge1xyXG4gICAgICBwYW5lbC5pc09wZW4gPSBmYWxzZTtcclxuICAgICAgcGFuZWwucGFnZVN0YXRlID0gbnVsbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHBhbmVsLmlzT3BlbiA9IHRydWU7XHJcbiAgICAgIHBhbmVsLnBhZ2VTdGF0ZSA9ICdtb2RpZmljYUNvbnRlbnV0byc7XHJcbiAgICB9XHJcbiAgICB0aGlzLnBhbmVsT3BlblN0YXRlLm1hcCgoKSA9PiBmYWxzZSk7XHJcbiAgICB0aGlzLnBhbmVsT3BlblN0YXRlW2ldID0gdGhpcy5wYW5lbE9wZW5TdGF0ZVtpXSA9PSB0cnVlID8gZmFsc2UgOiB0cnVlO1xyXG4gICAgLy8gdGhpcy5vbkFkZFZpZXdFZGl0UmVjb3JkLmVtaXQoeyByZWNvcmQsIG9ubHlWaWV3IH0pO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gRWRpdFJlY29yZFxyXG5cclxuICAvLyNyZWdpb24gZXh0ZXJuYWxDYWxsYmFja1xyXG4gIGV4dGVybmFsQ2FsbGJhY2soZXY6IEV2ZW50LCBjYWxsYmFjazogRnVuY3Rpb24sIHJlY29yZDogYW55KSB7XHJcbiAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICBjYWxsYmFjayhyZWNvcmQpO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gZXh0ZXJuYWxDYWxsYmFja1xyXG5cclxuICAvLyNyZWdpb24gZHVwbGljYXRlUmVjb3JkXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBkdXBsaWNhcmUgdW4gcmVjb3JkIGRlbGxhIGZvcm0uXHJcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmQgZGEgZHVwbGljYXJlLlxyXG4gICAqL1xyXG4gIGR1cGxpY2F0ZVJlY29yZChwYW5lbDogUGFuZWwsIG9ubHlWaWV3OiBib29sZWFuLCBpLCBldjogRXZlbnQpIHtcclxuICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coJ2R1cGxpY2F0ZVJlY29yZCcpO1xyXG5cclxuICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmQgPSBwYW5lbC5yZWNvcmQuSUQ7XHJcbiAgICB0aGlzLmlzRHVwbGljYXRpbmcgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMub3BlbkFkZERpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5vcGVuQWRkRGlhbG9nLCB7XHJcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgIHdpZHRoOiBcIjgwdndcIixcclxuICAgICAgbWluSGVpZ2h0OiBcIjEwMHB4XCIsXHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBkdXBsaWNhdGVSZWNvcmRcclxuXHJcbiAgLy8jcmVnaW9uIGRlbGV0ZVJlY29yZFxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgZWxpbWluYXJlIHVuIHJlY29yZCBkYWxsYSBsaXN0YS5cclxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZCBkYSBlbGltaW5hcmUgc2VsZXppb25hdG8gc3VsbGEgZXFwLXRhYmxlLlxyXG4gICAqL1xyXG4gIGRlbGV0ZVJlY29yZChyZWNvcmQ6IFJlY29yZCwgZXY6IEV2ZW50KSB7XHJcbiAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB0aGlzLm9uRGVsZXRlUmVjb3JkLmVtaXQocmVjb3JkKTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIGRlbGV0ZVJlY29yZFxyXG5cclxuICAvLyNyZWdpb24gcmVsb2FkVGFibGVzXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciByaWNhcmljYXJlIGkgZGF0aSBkZWxsYSBlcXAtdGFibGUuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZWxvYWRUYWJsZXMoKSB7XHJcbiAgICBpZiAodGhpcy50YWJsZVJlY29yZHMpIHtcclxuICAgICAgdGhpcy50YWJsZVJlY29yZHMucmVsb2FkRGF0YXRhYmxlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiByZWxvYWRUYWJsZXNcclxuXHJcbiAgLy8jcmVnaW9uIHNhdmVPckV4aXRGb3JtXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBzYWx2YXJlIGkgZGF0aSBpbnNlcml0aSBkYWxsJ3V0ZW50ZSB1bmEgdm9sdGEgY29uY2x1c2EgbGEgY29tcGlsYXppb25lIGRlbGxhIGZvcm0uXHJcbiAgICovXHJcbiAgc2F2ZU9yRXhpdEZvcm0ocmVjb3JkOiBSZWNvcmQpIHtcclxuICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnbGlzdC12aWV3LWZvcm0tcmVjb3JkIHNhdmUnLCByZWNvcmQpXHJcbiAgICB0aGlzLnNhdmVSZWNvcmRFdmVudC5lbWl0KHJlY29yZCk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBzYXZlT3JFeGl0Rm9ybVxyXG5cclxuICAvLyNyZWdpb24gb25BZnRlclNhdmVSZWNvcmRcclxuICBvbkFmdGVyU2F2ZVJlY29yZChldmVudCkge1xyXG4gICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdsaXN0LXZpZXctZm9ybS1yZWNvcmQgYWZ0ZXJzYXZlJywgZXZlbnQpXHJcbiAgICB0aGlzLnNhdmVSZWNvcmRFdmVudC5lbWl0KGV2ZW50KTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIG9uQWZ0ZXJTYXZlUmVjb3JkXHJcblxyXG4gIC8vI3JlZ2lvbiBvbkFkZFZpZXdFZGl0UmVjb3JkMlxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBpbnZvY2F0byBxdWFuZG8gc2kgdnVvbGUgYWdnaXVuZ2VyZSwgdmlzdWFsaXp6YXJlIG8gbW9kaWZpY2FyZSB1biByZWNvcmQuXHJcbiAgICogU2UgbCdldmVudG8gw6ggbnVsbCB2dW9sIGRpcmUgY2hlIHN0aWFtbyBhZ2dpdW5nZW5kbyB1biBudW92byByZWNvcmQgYWx0cmltZW50aSBzaWFtbyBpbiBtb2RpZmljYVxyXG4gICAqIG8gdmlzdWFsaXp6YXppb25lLiBJbiBxdWVzdGkgdWx0aW1pIGR1ZSBjYXNpLCBzZSDDqCBzdGF0byBjb25maWd1cmF0byB1biBlbmRwb2ludCBwZXIgaWwgcmVjdXBlcm9cclxuICAgKiBkZWwgcmVjb3JkIGNvbXBsZXRvIGFsbG9yYSB2aWVuZSBlZmZldHR1YXRhIHVuYSBjaGlhbWF0YSBhbCBzZXJ2ZXIsIGFsdHJpbWVudGkgdmllbmUgdXNhdG8gbCdvZ2dldHRvIHNlbGV6aW9uYXRvLlxyXG4gICAqIEBwYXJhbSBldmVudCBPZ2dldHRvIGNvbiBkdWUgcHJvcHJpZXTDoDpcclxuICAgKiBcInJlY29yZFwiID0gb2dnZXR0byBkYSBtb2RpZmljYXJlL3Zpc3VhbGl6emFyZSxcclxuICAgKiBcIm9ubHlWaWV3XCIgPSBib29sZWFubyAoc2UgVFJVRSBzaWFtbyBpbiB2aXN1YWxpenphemlvbmUgYWx0cmltZW50aSBpbiBtb2RpZmljYSlcclxuICAgKi9cclxuICBvbkFkZFZpZXdFZGl0UmVjb3JkMihldmVudDogeyByZWNvcmQ6IFJlY29yZDsgb25seVZpZXc6IGJvb2xlYW4gfSkge1xyXG5cclxuICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICB0aGlzLnNlbGVjdGVkUmVjb3JkID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLm9ubHlWaWV3ID0gZXZlbnQub25seVZpZXc7XHJcblxyXG4gICAgdGhpcy5vdXRDb21waWxlQ29uZmlndXJhdGlvbnMuc2hvd0JhY2tCdXR0b24gPSBmYWxzZTtcclxuICAgIHRoaXMub3V0Q29tcGlsZUNvbmZpZ3VyYXRpb25zLnNob3dTYXZlQnV0dG9uID0gIWV2ZW50Lm9ubHlWaWV3O1xyXG4gICAgdGhpcy5vdXRDb21waWxlQ29uZmlndXJhdGlvbnMuc2hvd1RpdGxlID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKGV2ZW50ICE9IG51bGwpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uICYmXHJcbiAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3JkcyAmJlxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuR2V0QnlJREVuZFBvaW50XHJcbiAgICAgICkge1xyXG4gICAgICAgIC8vIHByZXBhcm8gbGEgdmVyc2lvbmUgY29ycmV0dGEgZGVsIGZvcm1cclxuICAgICAgICB2YXIgZHluYW1pY01vZHVsZVBhcmFtcyA9IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgUGFyYW1OYW1lOiBcIkVudElEXCIsXHJcbiAgICAgICAgICAgIFBhcmFtVmFsdWU6IGV2ZW50LnJlY29yZC5FbnRJRCxcclxuICAgICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBQYXJhbU5hbWU6IFwiVmVyc2lvblwiLFxyXG4gICAgICAgICAgICBQYXJhbVZhbHVlOiBldmVudC5yZWNvcmQuVmVyc2lvbixcclxuICAgICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIF07XHJcbiAgICAgICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3Jtcy5HZXRCeUlEQW5kVmVyc2lvbkVuZFBvaW50LFxyXG4gICAgICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgICAgIChyZXM6IEZvcm0pID0+IHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtID0gcmVzO1xyXG4gICAgICAgICAgICB0aGlzLmZvcm0uT3JnYUlEID0gdGhpcy5vcmdhSUQ7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzICE9IG51bGwgJiYgdGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzICE9IFwiXCIpe1xyXG4gICAgICAgICAgICAgIHRoaXMuZm9ybS5UcmlnZ2VycyA9IEpTT04ucGFyc2UodGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLmZvcm0uVHJpZ2dlcnMgPSBuZXcgQXJyYXk8VHJpZ2dlcj4oKTtcclxuICAgICAgICAgICAgfSAgICAgICAgICAgIFxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuZm9ybS5PYmplY3RBY3Rpb25CdXR0b25zICE9IG51bGwgJiYgdGhpcy5mb3JtLk9iamVjdEFjdGlvbkJ1dHRvbnMgIT0gXCJcIil7XHJcbiAgICAgICAgICAgICAgdGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnMgPSBKU09OLnBhcnNlKHRoaXMuZm9ybS5PYmplY3RBY3Rpb25CdXR0b25zKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLmZvcm0uQWN0aW9uQnV0dG9ucyA9IG5ldyBBcnJheTxBY3Rpb25CdXR0b24+KCk7XHJcbiAgICAgICAgICAgIH0gICAgICAgICAgICAgIFxyXG5cclxuICAgICAgICAgICAgdGhpcy5hY3Rpb25CdXR0b25zID0gdGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnM7XHJcblxyXG4gICAgICAgICAgICAvLyBwcmVwYXJvIGkgZGF0aSBkZWwgcmVjb3JkXHJcbiAgICAgICAgICAgIHZhciBkeW5hbWljUmVjb3JkUGFyYW1zID0gW1xyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIFBhcmFtTmFtZTogXCJpZFwiLFxyXG4gICAgICAgICAgICAgICAgUGFyYW1WYWx1ZTogZXZlbnQucmVjb3JkLklELFxyXG4gICAgICAgICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgICAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5HZXRCeUlERW5kUG9pbnQsXHJcbiAgICAgICAgICAgICAgZHluYW1pY1JlY29yZFBhcmFtcyxcclxuICAgICAgICAgICAgICAocmVzOiBEeW5SZWNvcmQpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmQgPSBKU09OLnBhcnNlKHJlcy5TZXJpYWxpemVkVmFsdWVzKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmQuSUQgPSByZXMuSUQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmVjb3JkLkVudElEID0gcmVzLkVudElEO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZC51c2VySUQgPSByZXMudXNlcklEO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZC5WZXJzaW9uID0gcmVzLlZlcnNpb247XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGV2ZW50LnJlY29yZCkpO1xyXG4gICAgICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgZHluYW1pY01vZHVsZVBhcmFtczogQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPiA9XHJcbiAgICAgICAgbmV3IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4oKTtcclxuICAgICAgZHluYW1pY01vZHVsZVBhcmFtcy5wdXNoKHtcclxuICAgICAgICBQYXJhbU5hbWU6IFwiaWRcIixcclxuICAgICAgICBQYXJhbVZhbHVlOiB0aGlzLmZvcm1JRCxcclxuICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLkdldEJ5SURFbmRQb2ludCxcclxuICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgIChyZXM6IEZvcm0pID0+IHtcclxuICAgICAgICAgIHRoaXMuZm9ybSA9IHJlcztcclxuICAgICAgICAgIHRoaXMuZm9ybS5PcmdhSUQgPSB0aGlzLm9yZ2FJRDtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzICE9IG51bGwgJiYgdGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzICE9IFwiXCIpe1xyXG4gICAgICAgICAgICB0aGlzLmZvcm0uVHJpZ2dlcnMgPSBKU09OLnBhcnNlKHRoaXMuZm9ybS5PYmplY3RUcmlnZ2Vycyk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm0uVHJpZ2dlcnMgPSBuZXcgQXJyYXk8VHJpZ2dlcj4oKTtcclxuICAgICAgICAgIH0gICAgICAgXHJcbiAgICAgICAgICBcclxuICAgICAgICAgIGlmICh0aGlzLmZvcm0uT2JqZWN0QWN0aW9uQnV0dG9ucyAhPSBudWxsICYmIHRoaXMuZm9ybS5PYmplY3RBY3Rpb25CdXR0b25zICE9IFwiXCIpe1xyXG4gICAgICAgICAgICB0aGlzLmZvcm0uQWN0aW9uQnV0dG9ucyA9IEpTT04ucGFyc2UodGhpcy5mb3JtLk9iamVjdEFjdGlvbkJ1dHRvbnMpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnMgPSBuZXcgQXJyYXk8QWN0aW9uQnV0dG9uPigpO1xyXG4gICAgICAgICAgfSAgXHJcblxyXG4gICAgICAgICAgdGhpcy5hY3Rpb25CdXR0b25zID0gdGhpcy5mb3JtLkFjdGlvbkJ1dHRvbnM7XHJcblxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZCA9IG51bGw7XHJcbiAgICAgICAgICB0aGlzLm9ubHlWaWV3ID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAoZXJyKSA9PiB7IH1cclxuICAgICAgKTtcclxuXHJcbiAgICAgIC8vIHRoaXMuc2VsZWN0ZWRSZWNvcmQgPSBudWxsO1xyXG4gICAgICAvLyB0aGlzLm9ubHlWaWV3ID0gZmFsc2U7XHJcbiAgICAgIC8vIHRoaXMudmlld01vZGUgPSBEeW5hbWljTW9kdWxlVmlld01vZGVFbnVtLkNPTVBJTEU7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBvbkFkZFZpZXdFZGl0UmVjb3JkMlxyXG5cclxuICAvLyNyZWdpb24gb3BlbkFsbFxyXG4gIG9wZW5BbGwoKXtcclxuICAgIHRoaXMuaXNGdWxsT3BlbmVkID0gIXRoaXMuaXNGdWxsT3BlbmVkO1xyXG4gICAgdGhpcy5wYW5lbHMuZm9yRWFjaCgocGFuZWwpID0+IHtcclxuICAgICAgaWYgKHBhbmVsLmlzT3BlbiAhPSB0aGlzLmlzRnVsbE9wZW5lZCl7XHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJwLVwiK3BhbmVsLnJlY29yZC5JRCtcIi12aXNpYmlsaXR5XCIpLmNsaWNrKCk7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBvcGVuQWxsXHJcblxyXG4gIC8vI3JlZ2lvbiBvcGVuQWRkUG9wdXBcclxuICBvcGVuQWRkUG9wdXAoKSB7XHJcbiAgICAvLyBtaSBzc2ljdXJvIGNoZSBub24gY2kgc2lhbm8gcGFubmVsbGkgaW4gbW9kaWZpY2EgcGVyY2jDqCBhbHRyaW1lbnRpIHZhIGluIGNvbmZsaXR0byBsJ3VwZGF0ZSBjb24gbCdhZGRcclxuICAgIHRoaXMucGFuZWxzLmZvckVhY2goKHBhbmVsKSA9PiB7XHJcbiAgICAgIGlmKHBhbmVsLnBhZ2VTdGF0ZSA9ICdtb2RpZmljYUNvbnRlbnV0bycpe1xyXG4gICAgICAgIHBhbmVsLnBhZ2VTdGF0ZSA9ICd2aXN1YWxpenphQ29udGVudXRvJztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgZHluYW1pY01vZHVsZVBhcmFtczogQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPiA9IG5ldyBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+KCk7XHJcbiAgICBkeW5hbWljTW9kdWxlUGFyYW1zLnB1c2goe1xyXG4gICAgICBQYXJhbU5hbWU6IFwiaWRcIixcclxuICAgICAgUGFyYW1WYWx1ZTogdGhpcy5mb3JtSUQsXHJcbiAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuR2V0QnlJREVuZFBvaW50LFxyXG4gICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAocmVzOiBGb3JtKSA9PiB7XHJcbiAgICAgICAgdGhpcy5mb3JtID0gcmVzO1xyXG4gICAgICAgIHRoaXMuZm9ybS5PcmdhSUQgPSB0aGlzLm9yZ2FJRDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZm9ybS5PYmplY3RUcmlnZ2VycyAhPSBudWxsICYmIHRoaXMuZm9ybS5PYmplY3RUcmlnZ2VycyAhPSBcIlwiKXtcclxuICAgICAgICAgIHRoaXMuZm9ybS5UcmlnZ2VycyA9IEpTT04ucGFyc2UodGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5mb3JtLlRyaWdnZXJzID0gbmV3IEFycmF5PFRyaWdnZXI+KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5mb3JtLk9iamVjdEFjdGlvbkJ1dHRvbnMgIT0gbnVsbCAmJiB0aGlzLmZvcm0uT2JqZWN0QWN0aW9uQnV0dG9ucyAhPSBcIlwiKXtcclxuICAgICAgICAgIHRoaXMuZm9ybS5BY3Rpb25CdXR0b25zID0gSlNPTi5wYXJzZSh0aGlzLmZvcm0uT2JqZWN0QWN0aW9uQnV0dG9ucyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZm9ybS5BY3Rpb25CdXR0b25zID0gbmV3IEFycmF5PEFjdGlvbkJ1dHRvbj4oKTtcclxuICAgICAgICB9IFxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuYWN0aW9uQnV0dG9ucyA9IHRoaXMuZm9ybS5BY3Rpb25CdXR0b25zO1xyXG5cclxuICAgICAgICB0aGlzLnNlbGVjdGVkUmVjb3JkID0gbnVsbDtcclxuICAgICAgICB0aGlzLnBvcHVwTG9hZGVyID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmlzRHVwbGljYXRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5vcGVuQWRkRGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLm9wZW5BZGREaWFsb2csIHtcclxuICAgICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxyXG4gICAgICAgICAgd2lkdGg6IFwiODB2d1wiLFxyXG4gICAgICAgICAgbWluSGVpZ2h0OiBcIjEwMHB4XCIsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICB9LFxyXG4gICAgICAoZXJyKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcImVycm9yIFJ1bkVuZFBvaW50Q2FsbFwiLCBlcnIpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gb3BlbkFkZFBvcHVwXHJcblxyXG4gIC8vI3JlZ2lvbiBvcGVuR3JhcGhzXHJcbiAgb3BlbkdyYXBocygpIHtcclxuICAgIFxyXG4gICAgdGhpcy5vcGVuR3JhcGhEaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKHRoaXMub3BlbkdyYXBoRGlhbG9nLCB7XHJcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgIG1pbldpZHRoOiBcIjgwdndcIixcclxuICAgICAgbWluSGVpZ2h0OiBcIjcwdmhcIixcclxuICAgICAgbWF4SGVpZ2h0OiBcIjEwMHZoXCJcclxuICAgIH0pO1xyXG4gICAgLy8gdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydkeW5hbWljLW1vZHVsZS1ncmFwaHMvJyArIHRoaXMuZm9ybUlEICsgJy8nICsgdGhpcy51c2VySURdKTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIG9wZW5HcmFwaHNcclxuXHJcbiAgLy8jcmVnaW9uIGNsb3NlR3JhcGhzXHJcbiAgY2xvc2VHcmFwaHMoKSB7XHJcbiAgICB0aGlzLm9wZW5HcmFwaERpYWxvZ1JlZi5jbG9zZSgpXHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBjbG9zZUdyYXBoc1xyXG4gICAgXHJcbiAgLy8jcmVnaW9uIG9uQWRkU2F2ZVJlY29yZFxyXG4gIG9uQWRkU2F2ZVJlY29yZChyZWNvcmQ6IFJlY29yZCkge1xyXG4gICAgaWYgKHRoaXMub3BlbkFkZERpYWxvZ1JlZiAhPSBudWxsKSB7IHRoaXMub3BlbkFkZERpYWxvZ1JlZi5jbG9zZSgpOyB9IFxyXG4gICAgaWYgKHJlY29yZCA9PSBudWxsKSB7dGhpcy5zYXZlUmVjb3JkRXZlbnQuZW1pdChudWxsKTsgcmV0dXJufVxyXG4gICAgdGhpcy5nZXRSZWNvcmRzQnlGb3JtSUQoKTtcclxuICAgIHRoaXMuc2F2ZVJlY29yZEV2ZW50LmVtaXQocmVjb3JkKTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIG9uQWRkU2F2ZVJlY29yZFxyXG5cclxuICAvLyNyZWdpb24gb25BZGRBZnRlclNhdmVSZWNvcmRcclxuICBvbkFkZEFmdGVyU2F2ZVJlY29yZChyZWNvcmQ6IFJlY29yZCkge1xyXG4gICAgaWYgKHRoaXMub3BlbkFkZERpYWxvZ1JlZiAhPSBudWxsKSB7IHRoaXMub3BlbkFkZERpYWxvZ1JlZi5jbG9zZSgpOyB9IFxyXG4gICAgaWYgKHJlY29yZCA9PSBudWxsKSB7dGhpcy5zYXZlUmVjb3JkRXZlbnQuZW1pdChudWxsKTsgcmV0dXJufVxyXG4gICAgdGhpcy5nZXRSZWNvcmRzQnlGb3JtSUQoKTtcclxuICAgIHRoaXMuc2F2ZVJlY29yZEV2ZW50LmVtaXQocmVjb3JkKTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIG9uQWRkQWZ0ZXJTYXZlUmVjb3JkXHJcblxyXG4gIC8vI3JlZ2lvbiBwcmludEFkZGl0aW9uYWxJbmZvXHJcbiAgcHJpbnRBZGRpdGlvbmFsSW5mbyhyZWNvcmQ6IFJlY29yZCkge1xyXG4gICAgbGV0IG91dCA9IFwiXCI7XHJcbiAgICBpZih0aGlzLmNvbmZpZ3VyYXRpb25zLmxpc3RWaWV3UmVjb3JkVGl0bGUgIT0gbnVsbCAmJiB0aGlzLmNvbmZpZ3VyYXRpb25zLmxpc3RWaWV3UmVjb3JkVGl0bGUubGVuZ3RoID4gMCl7XHJcblxyXG4gICAgdGhpcy5jb25maWd1cmF0aW9ucy5saXN0Vmlld1JlY29yZFRpdGxlLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaWYgKHJlY29yZC5BZGRpdGlvbmFsSW5mbyAhPSBudWxsKXtcclxuXHJcbiAgICAgICAgY29uc3QgcmVnZXggPSAvXFwoKC4rKVxcKS9nOzsgLy8gcGF0dGVybiBwZXIgdW5vIG8gcGnDuSBudW1lcmlcclxuICAgICAgICBcclxuICAgICAgICAvLyAoZGF0ZWZvcm1hdD1FRUVFLCBkIE1NTU0geSwgSDptbTpzcylcclxuICAgICAgICBjb25zdCBtYXRjaCA9IHJlZ2V4LmV4ZWMoaXRlbSk7XHJcbiAgICAgICAgaWYgKG1hdGNoKSB7XHJcbiAgICAgICAgICBsZXQgbXltYXRjaCA9IG1hdGNoWzFdO1xyXG4gICAgICAgICAgaWYobXltYXRjaC5pbmNsdWRlcyhcImRhdGVmb3JtYXRcIikpe1xyXG4gICAgICAgICAgICBsZXQgZm9ybWF0ID0gbXltYXRjaC5zcGxpdChcIj1cIilbMV07XHJcbiAgICAgICAgICAgIGxldCB0b2tlbiA9IGl0ZW0uc3BsaXQoXCIoXCIpWzBdO1xyXG4gICAgICAgICAgICBvdXQgKz0gcmVjb3JkLkFkZGl0aW9uYWxJbmZvICE9IG51bGwgJiYgcmVjb3JkLkFkZGl0aW9uYWxJbmZvW3Rva2VuXSAhPSBudWxsID8gXCIgXCIgKyB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShyZWNvcmQuQWRkaXRpb25hbEluZm9bdG9rZW5dLCBmb3JtYXQpIDogcmVjb3JkW3Rva2VuXSA/IFwiIFwiICsgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0ocmVjb3JkW3Rva2VuXSwgZm9ybWF0KSA6ICBcIiBcIiArIHRva2VuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBvdXQgKz0gcmVjb3JkLkFkZGl0aW9uYWxJbmZvICE9IG51bGwgJiYgcmVjb3JkLkFkZGl0aW9uYWxJbmZvW2l0ZW1dICE9IG51bGwgPyBcIiBcIiArIHJlY29yZC5BZGRpdGlvbmFsSW5mb1tpdGVtXSA6IHJlY29yZFtpdGVtXSA/IFwiIFwiICsgcmVjb3JkW2l0ZW1dIDogIFwiIFwiICsgaXRlbTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9XHJcblxyXG4gICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcclxuICAgIHJldHVybiBvdXQ7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBwcmludEFkZGl0aW9uYWxJbmZvXHJcblxyXG4gIG9uQ2xpY2tEcmFnSW5kaWNhdG9yKGVsOiBhbnkpe1xyXG4gICAgdGhpcy5jbGlja0RyYWdJbmRpY2F0b3IuZW1pdChlbCk7XHJcbiAgfVxyXG5cclxuICBvbkRyYWdTdGFydGVkKGVsOiBhbnkpe1xyXG4gICAgICB0aGlzLmRyYWdTdGFydGVkLmVtaXQoZWwpO1xyXG4gIH1cclxuXHJcbiAgb25EcmFnUmVsZWFzZWQoKXtcclxuICAgICAgdGhpcy5kcmFnUmVsZWFzZWQuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgb25FeHRlcm5hbENvbXBvbmVudE91dChldjogZXZlbnRPdXQpe1xyXG4gICAgdGhpcy5vdXQuZW1pdChldik7XHJcbiAgfVxyXG5cclxuICBvbkZpcmVUcmlnZ2VyKGV2OiBGaXJlVHJpZ2dlcil7XHJcbiAgICB0aGlzLmZpcmVUcmlnZ2VyLmVtaXQoZXYpO1xyXG4gIH0gXHJcblxyXG4gIHJlbG9hZEhUTUxSZWFkYWJsZVZhbHVlcyhhbnN3ZXJJZDogc3RyaW5nKXtcclxuXHJcbiAgICAvLyBwcmVwYXJvIGkgZGF0aSBkZWwgcmVjb3JkXHJcbiAgICB2YXIgZHluYW1pY1JlY29yZFBhcmFtcyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIFBhcmFtTmFtZTogXCJpZFwiLFxyXG4gICAgICAgIFBhcmFtVmFsdWU6IGFuc3dlcklkLFxyXG4gICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICB9LFxyXG4gICAgXTtcclxuICAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEJ5SURFbmRQb2ludCxcclxuICAgICAgZHluYW1pY1JlY29yZFBhcmFtcyxcclxuICAgICAgKHJlczogRHluUmVjb3JkKSA9PiB7XHJcbiAgICAgICAgdGhpcy5wYW5lbHMuZmluZCh4ID0+IHgucmVjb3JkLklEID09IGFuc3dlcklkKS5yZWNvcmQuSFRNTHJlYWRhYmxlVmFsdWVzID0gcmVzLkhUTUxyZWFkYWJsZVZhbHVlczsgICAgXHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgICBcclxuICAgIHRoaXMubGliU2luZ2xlTG9hZGVkID0gZmFsc2U7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5saWJTaW5nbGVMb2FkZWQgPSB0cnVlO1xyXG4gICAgfSwgMTAwMCk7XHJcbiAgfVxyXG5cclxuICBnZW5lcmF0ZUFjdGlvbihhY3Rpb25CdXR0b246IEFjdGlvbkJ1dHRvbil7XHJcbiAgICB2YXIgZmlyZVRyaWdnZXI6IEZpcmVUcmlnZ2VyID0gbmV3IEZpcmVUcmlnZ2VyKCk7XHJcblxyXG4gICAgZmlyZVRyaWdnZXIudHJpZ2dlciA9IG5ldyBUcmlnZ2VyKCk7XHJcbiAgICBmaXJlVHJpZ2dlci50cmlnZ2VyLkNJRCA9IGFjdGlvbkJ1dHRvbi5CdXR0b25Db2RlO1xyXG4gICAgZmlyZVRyaWdnZXIudHJpZ2dlci5jb25kaXRpb25zID0gbnVsbDtcclxuICAgIGZpcmVUcmlnZ2VyLnRyaWdnZXIuZGVzY3JpcHRpb24gPSBhY3Rpb25CdXR0b24uQnV0dG9uTGFiZWw7XHJcbiAgICBmaXJlVHJpZ2dlci50cmlnZ2VyLmV4ZWN1dGlvbiA9IGFjdGlvbkJ1dHRvbi5leGVjdXRpb247XHJcbiAgICBmaXJlVHJpZ2dlci50cmlnZ2VyLmZvcm11bGFzID0gYWN0aW9uQnV0dG9uLmZvcm11bGFzO1xyXG5cclxuICAgIGZpcmVUcmlnZ2VyLmZvcm0gPSB0aGlzLmZvcm07XHJcbiAgICBmaXJlVHJpZ2dlci5mb3JtdWxhcyA9IGFjdGlvbkJ1dHRvbi5mb3JtdWxhcztcclxuICAgIGZpcmVUcmlnZ2VyLnJlY29yZCA9IG51bGw7XHJcbiAgICBmaXJlVHJpZ2dlci51c2VyUGF0aWVudCA9IHRoaXMudXNlcklEO1xyXG4gICAgZmlyZVRyaWdnZXIudXNlck1lZGljYWxFeGFtaW5hdGlvbiA9IG51bGw7XHJcbiAgICBcclxuICAgIHRoaXMub25GaXJlVHJpZ2dlcihmaXJlVHJpZ2dlcik7XHJcbiAgfSAgXHJcblxyXG59XHJcblxyXG4iLCI8bWF0LWNhcmQgY2xhc3M9XCJsaXN0LXZpZXctZm9ybS1yZWNvcmRcIj5cclxuICA8bWF0LWNhcmQtaGVhZGVyICpuZ0lmPVwidGhpcy5jb25maWd1cmF0aW9ucy5zaG93VGl0bGUgfHwgZGVmYXVsdExpc3RBY3Rpb25zLmFkZFwiIGNsYXNzPVwiYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XHJcbiAgICA8bWF0LWNhcmQtdGl0bGUgKm5nSWY9XCJ0aGlzLmNvbmZpZ3VyYXRpb25zLnNob3dUaXRsZSAmJiBsb2FkZWRmb3JtXCI+TW9kdWxvIHt7IGZvcm0uTmFtZSB9fSA8L21hdC1jYXJkLXRpdGxlPlxyXG4gICAgPG1hdC1jYXJkLWFjdGlvbnMgKm5nSWY9XCJkZWZhdWx0TGlzdEFjdGlvbnMuYWRkIHx8IGRlZmF1bHRMaXN0QWN0aW9ucy5ncmFwaHNcIj5cclxuXHJcbiAgICAgIDxzcGFuICpuZ0lmPVwidmlzaWJsZUFjdGlvbkJ1dHRvbnMubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgIDxidXR0b24gXHJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgYWN0aW9uQnV0dG9uIGluIHZpc2libGVBY3Rpb25CdXR0b25zXCIgKGNsaWNrKT1cImdlbmVyYXRlQWN0aW9uKGFjdGlvbkJ1dHRvbilcIlxyXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgbXItMlwiIFxyXG4gICAgICAgICAgbWF0LXJhaXNlZC1idXR0b24gXHJcbiAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIiBcclxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIj5cclxuICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cImFjdGlvbkJ1dHRvbi5JY29uXCI+e3thY3Rpb25CdXR0b24uSWNvbn19PC9tYXQtaWNvbj5cclxuICAgICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIj57e2FjdGlvbkJ1dHRvbi5sYWJlbH19PC9zcGFuPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L3NwYW4+ICAgIFxyXG5cclxuICAgICAgPGJ1dHRvbiBcclxuICAgICAgICAqbmdJZj1cImlzTGlzdFZpZXdcIlxyXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1yLTJcIiBcclxuICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvbiBcclxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIiBcclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAoY2xpY2spPVwib3BlblRhYmVsbGFyKClcIj5cclxuICAgICAgICA8bWF0LWljb24+dGFibGU8L21hdC1pY29uPlxyXG4gICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIj5UYWJlbGxhcmU8L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgPGJ1dHRvbiBcclxuICAgICAgICAqbmdJZj1cImlzVGFiZWxsYXJcIlxyXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1yLTJcIiBcclxuICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvbiBcclxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIiBcclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAoY2xpY2spPVwib3Blbkxpc3RWaWV3KClcIj5cclxuICAgICAgICA8bWF0LWljb24+bGlzdDwvbWF0LWljb24+XHJcbiAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweFwiPkxpc3RhPC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj4gICAgICBcclxuXHJcbiAgICAgIDxidXR0b24gXHJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgbXItMlwiIFxyXG4gICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uIFxyXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiIFxyXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIChjbGljayk9XCJvcGVuQWxsKClcIlxyXG4gICAgICAgICpuZ0lmPVwiaXNMaXN0Vmlld1wiPlxyXG4gICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIiFpc0Z1bGxPcGVuZWRcIj5leHBhbmRfbW9yZTwvbWF0LWljb24+XHJcbiAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweFwiICpuZ0lmPVwiIWlzRnVsbE9wZW5lZFwiPkFwcmkgdHV0dG88L3NwYW4+XHJcblxyXG4gICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cImlzRnVsbE9wZW5lZCAmJiBpc0xpc3RWaWV3XCI+ZXhwYW5kX2xlc3M8L21hdC1pY29uPlxyXG4gICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIiAqbmdJZj1cImlzRnVsbE9wZW5lZFwiPkNoaXVkaSB0dXR0bzwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+ICAgICAgXHJcbiAgICAgIDxidXR0b24gXHJcbiAgICAgICAgKm5nSWY9XCJkZWZhdWx0TGlzdEFjdGlvbnMuZ3JhcGhzXCJcclxuICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBtci0yXCIgXHJcbiAgICAgICAgbWF0LXJhaXNlZC1idXR0b24gXHJcbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCIgXHJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9wZW5HcmFwaHMoKVwiPlxyXG4gICAgICAgIDxtYXQtaWNvbj5waWVfY2hhcnQ8L21hdC1pY29uPlxyXG4gICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIj5HcmFmaWNpPC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBcclxuICAgICAgICAqbmdJZj1cImRlZmF1bHRMaXN0QWN0aW9ucy5hZGRcIlxyXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgXHJcbiAgICAgICAgbWF0LXJhaXNlZC1idXR0b24gXHJcbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCIgXHJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9wZW5BZGRQb3B1cCgpXCI+XHJcbiAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XHJcbiAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweFwiPkFnZ2l1bmdpPC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj4gICAgICBcclxuICAgIDwvbWF0LWNhcmQtYWN0aW9ucz5cclxuICA8L21hdC1jYXJkLWhlYWRlcj5cclxuXHJcbiAgXHJcbiAgPG1hdC1jYXJkLWNvbnRlbnQ+XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cImlzVGFiZWxsYXJcIj5cclxuICAgICAgXHJcbiAgICAgIDxobGlzdC1mb3JtLXJlY29yZFxyXG4gICAgICAgIGNsYXNzPVwiZHluYW1pYy1tb2R1bGUtaGxpc3RcIlxyXG4gICAgICAgIFtmb3JtSURdPVwiZm9ybUlEXCJcclxuICAgICAgICBbZm9ybXVsYU9iamVjdF09XCJmb3JtdWxhT2JqZWN0XCJcclxuXHJcbiAgICAgICAgW2VuZFBvaW50Q29uZmlndXJhdGlvbl09XCJlbmRQb2ludENvbmZpZ3VyYXRpb25cIlxyXG4gICAgICAgIFthY3Rpb25CdXR0b25zXT1cImFjdGlvbkJ1dHRvbnNcIlxyXG5cclxuICAgICAgICBbY29uZmlndXJhdGlvbnNdPVwiY29uZmlndXJhdGlvbnNcIlxyXG4gICAgICAgIFtleHRlcm5hbEJ1dHRvbnNdPVwiZXh0ZXJuYWxCdXR0b25zXCJcclxuXHJcbiAgICAgICAgPlxyXG4gICAgICA8L2hsaXN0LWZvcm0tcmVjb3JkPlxyXG5cclxuICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtM1wiPlxyXG4gICAgICAgICAgICA8dG13LWRhdGV0aW1lcGlja2VyIGNsYXNzPVwiZGF0ZVwiIFtwbGFjZWhvbGRlcl09XCInUGVyaW9kbyBpbml6aW8nXCIgW2xhYmVsXT1cIidQZXJpb2RvIGluaXppbydcIlxyXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsSW5wdXQpXT1cIm1pbnBlcmlvZFwiXHJcbiAgICAgICAgICAgICAgICBbcGlja2VyTW9kZV09XCJtb2Rlcy5EQVRFUElDS0VSXCIgW291dHB1dEZvcm1hdF09XCInREQvTU0vWVlZWSdcIiBbc2hvd1NlY29uZHNdPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgPC90bXctZGF0ZXRpbWVwaWNrZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtM1wiPlxyXG4gICAgICAgICAgICA8dG13LWRhdGV0aW1lcGlja2VyIGNsYXNzPVwiZGF0ZVwiIFtwbGFjZWhvbGRlcl09XCInUGVyaW9kbyBmaW5lJ1wiIFtsYWJlbF09XCInUGVyaW9kbyBmaW5lJ1wiXHJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWxJbnB1dCldPVwibWF4cGVyaW9kXCJcclxuICAgICAgICAgICAgICAgIFtwaWNrZXJNb2RlXT1cIm1vZGVzLkRBVEVQSUNLRVJcIiBbb3V0cHV0Rm9ybWF0XT1cIidERC9NTS9ZWVlZJ1wiIFtzaG93U2Vjb25kc109XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICA8L3Rtdy1kYXRldGltZXBpY2tlcj5cclxuICAgICAgICA8L2Rpdj4gICAgICAgXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtMyBtdC0yXCI+XHJcbiAgICAgICAgICAgIDxlcXAtc2VsZWN0IFthcnJheURhdGFdPVwidGFiZWxsYXJGaWVsZHNcIiBbKG5nTW9kZWxJbnB1dCldPVwic2VsZWN0ZWRUYWJlbGxhckZpZWxkc1wiIFtwbGFjZWhvbGRlcl09XCInU2VsZXppb25lIGRlaSBjYW1waSdcIlxyXG4gICAgICAgICAgICBbYXJyYXlLZXlQcm9wZXJ0eV09XCInRGVzY3JpcHRpb24nXCIgW2FycmF5VmFsdWVQcm9wZXJ0eV09XCInVGV4dERlc2NyaXB0aW9uJ1wiIFtpc011bHRpU2VsZWN0XT1cInRydWVcIiBjbGFzcz1cImVxcC1mb3JtLWZpZWxkXCI+XHJcbiAgICAgICAgICAgIDwvZXFwLXNlbGVjdD5cclxuICAgICAgICA8L2Rpdj4gICAgICAgXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiBjb2wtbWQtMyBtdC0yXCI+XHJcbiAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cInNlbGVjdGVkVGFiZWxsYXJGaWVsZHMgPT0gbnVsbCB8fCBzZWxlY3RlZFRhYmVsbGFyRmllbGRzLmxlbmd0aCA9PSAwXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWdyYXBoLWdlbmVyYXRlIGJ1dHRvbi1uZXh0IG1lLTJcIlxyXG4gICAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiZ2VuZXJhdGVUYWJlbGxhcigpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICBHZW5lcmFcclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PiAgICAgICAgICAgICAgICAgICBcclxuICAgICAgPC9kaXY+IC0tPlxyXG5cclxuICAgICAgPGVxcC10YWJsZSBpZD1cInRhYmVsbGFyXCIgY2xhc3M9XCJsaXN0LWZvcm0tcmVjb3JkLXRhYmxlXCIgI3RhYmxlUmVjb3JkcyAqbmdJZj1cInRhYmVsbGFyQ29uZGl0aW9uTG9hZGVkXCIgW2hpZ2hsaWdodENvbG9yXT1cIid0cmFuc3BhcmVudCdcIlxyXG4gICAgICBbZGF0YV09XCJ0YWJlbGxhclZhbHVlc1wiIFtjb2x1bW5zXT1cInRhYmVsbGFyQ29sdW1uc1wiIFttYXRQYWdpbmF0b3JTaXplXT1cIjEwMDBcIiBbbWF0UGFnaW5hdG9yTGVuZ3RoXT1cIlsxMDAwXVwiPjwvZXFwLXRhYmxlPlxyXG4gICAgPC9kaXY+XHJcblxyXG5cclxuXHJcbiAgICA8bWF0LWFjY29yZGlvbiAgI2RvbmVMaXN0PVwiY2RrRHJvcExpc3RcIiBjZGtEcm9wTGlzdCBbY2RrRHJvcExpc3RDb25uZWN0ZWRUb109XCJbdG9kb0xpc3RdXCIgW2hpZGVUb2dnbGVdPVwidGVzdFwiIFttdWx0aV09XCJ0cnVlXCIgY2xhc3M9XCJkZi1saXN0LXZpZXctYWNjb3JkaW9uXCIgKm5nSWY9XCJpc0xpc3RWaWV3XCI+XHJcbiAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsICpuZ0Zvcj1cImxldCBwYW5lbCBvZiBwYW5lbHM7IGluZGV4IGFzIGlcIiBcclxuICAgICAgICBbZXhwYW5kZWRdPVwicGFuZWwuaXNPcGVuXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiMVwiIFxyXG4gICAgICAgIFtjbGFzc109XCJwYW5lbC5oaWdobGlnaHRlZCA/ICdkbV9wYW5lbF9oaWdobGlnaHRlZCcgOiAnMCdcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIFxyXG4gICAgICAgIChjbGljayk9XCJ0b2dnbGVQYW5lbChwYW5lbCwgcGFuZWwucmVjb3JkKVwiPlxyXG4gICAgICAgICAgPG1hdC1wYW5lbC10aXRsZSAqbmdJZj1cImNvbmZpZ3VyYXRpb25zLmlzRHJhZ2dhYmxlTGlzdFZpZXdcIj5cclxuICAgICAgICAgICAgPCEtLSA8bWF0LWljb24gKGNsaWNrKT1cIm9uQ2xpY2tEcmFnSW5kaWNhdG9yKFtwYW5lbC5yZWNvcmQsZm9ybV0pXCIgY2xhc3M9XCJjbGljay1pY29uXCIgKm5nSWY9XCJjb25maWd1cmF0aW9ucy5pc0RyYWdnYWJsZUxpc3RWaWV3XCI+ZHJhZ19pbmRpY2F0b3I8L21hdC1pY29uPiB7eyAhdGhpcy5jb25maWd1cmF0aW9ucy5zaG93VGl0bGUgPyBmb3JtLk5hbWUgOiBcIlwiIH19IHYue3sgcGFuZWwucmVjb3JkLlZlcnNpb24gfX0gLSB7eyBwcmludEFkZGl0aW9uYWxJbmZvKHBhbmVsLnJlY29yZCkgfX0gLS0+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZHJhZy1pY29uIGZhLXNvbGlkIGZhLWZpbGUtZXhwb3J0XCIgKGNsaWNrKT1cIm9uQ2xpY2tEcmFnSW5kaWNhdG9yKFtwYW5lbC5yZWNvcmQsZm9ybV0pXCIgKm5nSWY9XCJjb25maWd1cmF0aW9ucy5pc0RyYWdnYWJsZUxpc3RWaWV3XCI+PC9pPiB7eyAhdGhpcy5jb25maWd1cmF0aW9ucy5zaG93VGl0bGUgPyBmb3JtLk5hbWUgOiBcIlwiIH19IHYue3sgcGFuZWwucmVjb3JkLlZlcnNpb24gfX0gLSB7eyBwcmludEFkZGl0aW9uYWxJbmZvKHBhbmVsLnJlY29yZCkgfX1cclxuICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxyXG4gICAgICAgICAgPG1hdC1wYW5lbC10aXRsZSAqbmdJZj1cIiFjb25maWd1cmF0aW9ucy5pc0RyYWdnYWJsZUxpc3RWaWV3XCI+XHJcbiAgICAgICAgICAgIHt7ICF0aGlzLmNvbmZpZ3VyYXRpb25zLnNob3dUaXRsZSA/IGZvcm0uTmFtZSA6IFwiXCIgfX0gdi57eyBwYW5lbC5yZWNvcmQuVmVyc2lvbiB9fSAtIHt7IHByaW50QWRkaXRpb25hbEluZm8ocGFuZWwucmVjb3JkKSB9fVxyXG4gICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+ICAgICAgICAgIFxyXG4gICAgICAgICAgPCEtLSNyZWdpb24gQk9UVE9OSSBQRVIgTEUgQVpJT05JIC0tPlxyXG4gICAgICAgICAgPG1hdC1wYW5lbC1kZXNjcmlwdGlvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIGJ1dHRvbnNcIiBcclxuICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b24gXHJcbiAgICAgICAgICAgICAgaWQ9XCJwLXt7cGFuZWwucmVjb3JkLklEfX0te3tidXR0b24uaWNvbn19XCJcclxuICAgICAgICAgICAgICBjbGFzcz1cInJlY29yZC1pY29uIHt7YnV0dG9uLmV4dHJhQ2xhc3N9fVwiIFxyXG4gICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImJ1dHRvbi50ZXh0XCJcclxuICAgICAgICAgICAgICBbaGlkZGVuXT1cImJ1dHRvbi5pY29uID09ICdmaWxlX2NvcHknICYmIChwYW5lbHMubGVuZ3RoID09IDAgfHwgcGFuZWwucmVjb3JkLlZlcnNpb24gIT0gcGFuZWxzWzBdLnJlY29yZC5WZXJzaW9uKVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImJ1dHRvbi5mbihwYW5lbCxpLCRldmVudClcIj5cclxuICAgICAgICAgICAgICA8bWF0LWljb24+e3tidXR0b24uaWNvbn19PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gKm5nRm9yPVwibGV0IGJ1dHRvbiBvZiBleHRlcm5hbEJ1dHRvbnNcIiBcclxuICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b24gXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJyZWNvcmQtaWNvbiB7e2J1dHRvbi5leHRyYUNsYXNzfX1cIlxyXG4gICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImJ1dHRvbi50ZXh0XCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiZXh0ZXJuYWxDYWxsYmFjaygkZXZlbnQsYnV0dG9uLmZuLHBhbmVsLnJlY29yZClcIj5cclxuICAgICAgICAgICAgICA8bWF0LWljb24+e3tidXR0b24uaWNvbn19PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZXhhbXBsZS1zcGFjZXJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgPC9tYXQtcGFuZWwtZGVzY3JpcHRpb24+XHJcbiAgICAgICAgICA8IS0tI2VuZHJlZ2lvbiBCT1RUT05JIFBFUiBMRSBBWklPTkkgLS0+XHJcbiAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuXHJcbiAgICAgICAgPCEtLSAjcmVnaW9uIENPTlRFTlVUTyAtLT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGFuZWwucGFnZVN0YXRlICE9IG51bGxcIj5cclxuXHJcbiAgICAgICAgICA8bGliLXNpbmdsZS1yZWNvcmRcclxuICAgICAgICAgICAgKm5nSWY9XCJsaWJTaW5nbGVMb2FkZWRcIlxyXG4gICAgICAgICAgICBbb25seVZpZXddPVwib25seVZpZXdcIlxyXG4gICAgICAgICAgICBbcmVjb3JkXSA9IFwicGFuZWwucmVjb3JkXCIgXHJcbiAgICAgICAgICAgIFtmb3JtdWxhT2JqZWN0XT1cImZvcm11bGFPYmplY3RcIlxyXG4gICAgICAgICAgICBbZW5kUG9pbnRDb25maWd1cmF0aW9uXSA9IFwiZW5kUG9pbnRDb25maWd1cmF0aW9uXCJcclxuICAgICAgICAgICAgW2Zvcm1dPVwiZm9ybVwiXHJcbiAgICAgICAgICAgIFt1c2VySURdPVwidXNlcklEXCJcclxuICAgICAgICAgICAgW1F1ZXJ5RWRpdG9yQ29tcG9uZW50XT1cIlF1ZXJ5RWRpdG9yQ29tcG9uZW50XCJcclxuICAgICAgICAgICAgW291dENvbXBpbGVDb25maWd1cmF0aW9uc109XCJvdXRDb21waWxlQ29uZmlndXJhdGlvbnNcIlxyXG4gICAgICAgICAgICBbcGFnZVN0YXRlXT1cInBhbmVsLnBhZ2VTdGF0ZVwiXHJcbiAgICAgICAgICAgIFthY3Rpb25CdXR0b25zXT1cImFjdGlvbkJ1dHRvbnNcIlxyXG4gICAgICAgICAgICAob3V0KT1cIm9uRXh0ZXJuYWxDb21wb25lbnRPdXQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIChzYXZlUmVjb3JkRXZlbnQpPVwic2F2ZU9yRXhpdEZvcm0oJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIChhZnRlclNhdmVSZWNvcmRFdmVudCk9XCJvbkFmdGVyU2F2ZVJlY29yZCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgKGZpcmVUcmlnZ2VyKT1cIm9uRmlyZVRyaWdnZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICA+XHJcblxyXG4gICAgICAgICAgPC9saWItc2luZ2xlLXJlY29yZD5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8IS0tI2VuZHJlZ2lvbiBDT05URU5VVE8gLS0+XHJcbiAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cclxuICAgIDwvbWF0LWFjY29yZGlvbj5cclxuXHJcblxyXG4gIDwvbWF0LWNhcmQtY29udGVudD5cclxuICA8bWF0LWNhcmQtZm9vdGVyPlxyXG4gIDwvbWF0LWNhcmQtZm9vdGVyPlxyXG48L21hdC1jYXJkPlxyXG5cclxuPCEtLSNyZWdpb24gRElBTE9HIEFHR0lVTlRBIFJJU1BPU1RBIC0tPlxyXG48bmctdGVtcGxhdGUgI29wZW5BZGREaWFsb2c+XHJcbiAgPG1hdC1jYXJkIGNsYXNzPVwiY2FyZC1kZWZhdWx0IG92ZXJsYXktY2FyZCBjYXJkLWlubW9kYWwtdHJ1ZVwiPlxyXG4gICAgPG1hdC1jYXJkLWNvbnRlbnQ+XHJcblxyXG4gICAgICA8YWRkLWZvcm0tcmVjb3JkXHJcbiAgICAgICAgY2xhc3M9XCJkeW5hbWljLW1vZHVsZS1jb21waWxlXCJcclxuICAgICAgICBbZm9ybUlEXT1cImZvcm1JRFwiXHJcbiAgICAgICAgW29yZ2FJRF09XCJvcmdhSURcIlxyXG4gICAgICAgIFtvbmx5Vmlld109XCJmYWxzZVwiXHJcbiAgICAgICAgW3JlY29yZF09XCJzZWxlY3RlZFJlY29yZFwiXHJcbiAgICAgICAgW2Zvcm11bGFPYmplY3RdPVwiZm9ybXVsYU9iamVjdFwiXHJcbiAgICAgICAgW2lzRHVwbGljYXRlXT1cImlzRHVwbGljYXRpbmdcIlxyXG4gICAgICAgIFtzaG93VGl0bGVdPVwidGhpcy5jb25maWd1cmF0aW9ucy5zaG93VGl0bGVcIlxyXG4gICAgICAgIFxyXG4gICAgICAgIFtRdWVyeUVkaXRvckNvbXBvbmVudF09XCJRdWVyeUVkaXRvckNvbXBvbmVudFwiXHJcbiAgICAgICAgW2VuZFBvaW50Q29uZmlndXJhdGlvbl09XCJlbmRQb2ludENvbmZpZ3VyYXRpb25cIlxyXG4gICAgICAgIFt1c2VySURdPVwidXNlcklEXCJcclxuXHJcbiAgICAgICAgW2NvbmZpZ3VyYXRpb25zXT1cImNvbXBpbGVDb25maWd1cmF0aW9uc1wiXHJcbiAgICAgICAgW2FjdGlvbkJ1dHRvbnNdPVwiYWN0aW9uQnV0dG9uc1wiXHJcblxyXG4gICAgICAgIChvdXQpPVwib25FeHRlcm5hbENvbXBvbmVudE91dCgkZXZlbnQpXCJcclxuICAgICAgICAoc2F2ZVJlY29yZEV2ZW50KT1cIm9uQWRkU2F2ZVJlY29yZCgkZXZlbnQpXCJcclxuICAgICAgICAoYWZ0ZXJTYXZlUmVjb3JkRXZlbnQpPVwib25BZGRBZnRlclNhdmVSZWNvcmQoJGV2ZW50KVwiXHJcbiAgICAgICAgKGZpcmVUcmlnZ2VyKT1cIm9uRmlyZVRyaWdnZXIoJGV2ZW50KVwiXHJcbiAgICAgID5cclxuICAgICAgPC9hZGQtZm9ybS1yZWNvcmQ+XHJcblxyXG4gICAgPC9tYXQtY2FyZC1jb250ZW50PlxyXG4gIDwvbWF0LWNhcmQ+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjwhLS0jZW5kcmVnaW9uIERJQUxPRyBBR0dJVU5UQSBSSVNQT1NUQSAtLT5cclxuXHJcbjwhLS0jcmVnaW9uIERJQUxPRyBWSVNVQUxJWlpBWklPTkUgR1JBRklDSSAtLT5cclxuPG5nLXRlbXBsYXRlICNvcGVuR3JhcGhEaWFsb2c+XHJcbiAgPG1hdC1jYXJkIGNsYXNzPVwiY2FyZC1kZWZhdWx0IG92ZXJsYXktY2FyZCBjYXJkLWlubW9kYWwtdHJ1ZSBncmFwaENhcmRcIj5cclxuICAgIFxyXG4gIDxtYXQtY2FyZC1oZWFkZXIgY2xhc3M9XCJhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cclxuICAgIDxtYXQtY2FyZC10aXRsZT5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvdyBlcXAtZHluYW1pYy1tb2R1bGUtdGl0bGUgZ3JhcGgtaGVhZGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICA8c3Bhbj5HcmFmaWNvIHt7IGZvcm0uTmFtZSB9fSA8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9tYXQtY2FyZC10aXRsZT5cclxuICAgIDxtYXQtY2FyZC1hY3Rpb25zPlxyXG4gICAgICA8YnV0dG9uIFxyXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1yLTJcIiBcclxuICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvbiBcclxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIiBcclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAoY2xpY2spPVwiY2xvc2VHcmFwaHMoKVwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5cclxuICAgICAgICAgIGFycm93X2JhY2tcclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4XCI+SW5kaWV0cm88L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9tYXQtY2FyZC1hY3Rpb25zPlxyXG4gIDwvbWF0LWNhcmQtaGVhZGVyPlxyXG4gICAgPG1hdC1jYXJkLWNvbnRlbnQ+XHJcblxyXG4gICAgICA8Z3JhcGhzXHJcbiAgICAgICAgW2Zvcm1JRF09XCJmb3JtSURcIlxyXG4gICAgICAgIFt1c2VySURdPVwidXNlcklEXCJcclxuICAgICAgICBbYWN0aW9uQnV0dG9uc109XCJhY3Rpb25CdXR0b25zXCJcclxuICAgICAgICBbY29uZmlndXJhdGlvbnNdID0gXCJvdXRDb21waWxlQ29uZmlndXJhdGlvbnNcIlxyXG4gICAgICAgIFtlbmRQb2ludENvbmZpZ3VyYXRpb25dID0gXCJlbmRQb2ludENvbmZpZ3VyYXRpb25cIlxyXG4gICAgICA+XHJcbiAgICAgIDwvZ3JhcGhzPlxyXG5cclxuICAgIDwvbWF0LWNhcmQtY29udGVudD5cclxuICA8L21hdC1jYXJkPlxyXG48L25nLXRlbXBsYXRlPlxyXG48IS0tI2VuZHJlZ2lvbiBESUFMT0cgVklTVUFMSVpaQVpJT05FIEdSQUZJQ0kgLS0+XHJcbiJdfQ==
|