brainloper-ui 17.0.0 → 18.0.1

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.
Files changed (35) hide show
  1. package/esm2022/src/app/modules/brainloper-ui/brainloper-ui.module.mjs +31 -42
  2. package/esm2022/src/app/modules/brainloper-ui/components/bread-crumb/bread-crumb.component.mjs +3 -3
  3. package/esm2022/src/app/modules/brainloper-ui/components/buttons/button-icon/button-icon.component.mjs +3 -3
  4. package/esm2022/src/app/modules/brainloper-ui/components/buttons/button-label/button-label.component.mjs +5 -5
  5. package/esm2022/src/app/modules/brainloper-ui/components/carousel/carousel.component.mjs +5 -5
  6. package/esm2022/src/app/modules/brainloper-ui/components/combos/combos.component.mjs +7 -7
  7. package/esm2022/src/app/modules/brainloper-ui/components/data-table/data-table.component.mjs +6 -5
  8. package/esm2022/src/app/modules/brainloper-ui/components/data-table/table-modal/table-modal.component.mjs +14 -16
  9. package/esm2022/src/app/modules/brainloper-ui/components/file-input/file-input.component.mjs +3 -3
  10. package/esm2022/src/app/modules/brainloper-ui/components/filters/filters.component.mjs +5 -5
  11. package/esm2022/src/app/modules/brainloper-ui/components/report/template-fuel/template-fuel.component.mjs +3 -3
  12. package/esm2022/src/app/modules/brainloper-ui/components/report/template-ot/template-ot.component.mjs +3 -3
  13. package/esm2022/src/app/modules/brainloper-ui/components/select-filter/select-filter.component.mjs +3 -3
  14. package/esm2022/src/app/modules/directives/carousel-item.directive.mjs +4 -4
  15. package/esm2022/src/app/modules/services/crypto.service.mjs +3 -3
  16. package/esm2022/src/app/modules/services/export-data.service.mjs +3 -3
  17. package/esm2022/src/app/modules/services/file-forms.service.mjs +3 -3
  18. package/esm2022/src/app/modules/services/fuel-order-pdf.service.mjs +3 -3
  19. package/esm2022/src/app/modules/services/functions.service.mjs +3 -3
  20. package/esm2022/src/app/modules/services/generate-pdf.service.mjs +3 -3
  21. package/esm2022/src/app/modules/services/http.service.mjs +3 -3
  22. package/esm2022/src/app/modules/services/loading/loading.component.mjs +3 -3
  23. package/esm2022/src/app/modules/services/local-storage.service.mjs +3 -3
  24. package/esm2022/src/app/modules/services/message.service.mjs +3 -3
  25. package/esm2022/src/app/modules/services/purchase-order-pdf.service.mjs +3 -3
  26. package/esm2022/src/app/modules/services/session.service.mjs +3 -3
  27. package/esm2022/src/app/modules/services/work-order-pdf.service.mjs +3 -3
  28. package/fesm2022/brainloper-ui.mjs +128 -140
  29. package/fesm2022/brainloper-ui.mjs.map +1 -1
  30. package/package.json +14 -14
  31. package/src/app/modules/brainloper-ui/brainloper-ui.module.d.ts +40 -42
  32. package/src/app/modules/brainloper-ui/components/combos/combos.component.d.ts +2 -2
  33. package/src/app/modules/brainloper-ui/components/data-table/data-table.component.d.ts +2 -26
  34. package/src/app/modules/brainloper-ui/components/data-table/table-modal/table-modal.component.d.ts +2 -3
  35. package/src/app/modules/directives/carousel-item.directive.d.ts +1 -1
@@ -43,6 +43,7 @@ export class DataTableComponent {
43
43
  columns;
44
44
  data = [];
45
45
  combo;
46
+ s = [];
46
47
  configuration = {
47
48
  add: false,
48
49
  edit: false,
@@ -373,7 +374,7 @@ export class DataTableComponent {
373
374
  }
374
375
  }
375
376
  ngOnChanges(changes) {
376
- if (changes.data) {
377
+ if (changes['data']) {
377
378
  if (this.data) {
378
379
  this.data.forEach((row) => {
379
380
  this.checkboxs[row[this.configuration.primaryKey]] = false;
@@ -645,10 +646,10 @@ export class DataTableComponent {
645
646
  });
646
647
  this.applyFilters();
647
648
  }
648
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DataTableComponent, deps: [{ token: i1.MatDialog }, { token: i2.HttpService }, { token: i3.MessageService }, { token: i4.FunctionsService }, { token: i5.MatPaginatorIntl }, { token: i6.ExportDataService }], target: i0.ɵɵFactoryTarget.Component });
649
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DataTableComponent, selector: "data-table", inputs: { title: "title", columns: "columns", data: "data", combo: "combo", configuration: "configuration", reloadTable: "reloadTable", url: "url", params: "params", titleLoading: "titleLoading", messageLoading: "messageLoading", headerFileXlsm: "headerFileXlsm", headerFilters: "headerFilters", xslxTitleFields: "xslxTitleFields", xslxSheetNameFields: "xslxSheetNameFields", xslxBodyFields: "xslxBodyFields", xslxParams: "xslxParams", roleId: "roleId", moduleId: "moduleId", subModuleId: "subModuleId" }, outputs: { clickRow: "clickRow", add: "add", edit: "edit", delete: "delete", print: "print", exportXslxByRow: "exportXslxByRow", active: "active", selected: "selected", view: "view", closeOrder: "closeOrder", packOff: "packOff", advance: "advance", income: "income", exit: "exit", internalData: "internalData", sendEmail: "sendEmail", addComment: "addComment", fileIconClick: "fileIconClick" }, viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"contenedor-tabla\">\n <div class=\"table-title-mobile\" *ngIf=\"!configuration.hideTitle\">\n <strong>{{ title }}</strong>\n </div>\n\n <app-filters [headerFilters]=\"headerFilters\" (applyFilters)=\"applyFilters($event)\">\n </app-filters>\n\n <div class=\"row mb-2\" style=\"width: 99%\">\n <div *ngIf=\"!configuration.hideFilter\" class=\"col-12 d-flex justify-content-center\">\n <mat-form-field class=\"filter\">\n <mat-label>Filtrar</mat-label>\n <input type=\"text\" [(ngModel)]=\"filters\" (keyup)=\"changeFilters()\" matInput placeholder=\"Filtrar\" />\n </mat-form-field>\n </div>\n </div>\n\n <div class=\"col-12 d-flex flex-row justify-content-between align-items-center p-2\">\n <div class=\"d-none d-md-block me-md-3 w-100\" style=\"font-size: 1rem\">\n <span class=\"fw-bold\" *ngIf=\"selectedRows.length > 0 && configuration.selectable\">\n {{ selectedRows.length }}\n {{ selectedRows.length === 1 ? 'Seleccionado' : 'Seleccionados' }}\n </span>\n </div>\n <div class=\"d-flex justify-content-end w-100\">\n <ng-container *ngTemplateOutlet=\"buttonsTable\"></ng-container>\n </div>\n </div>\n\n <table class=\"table_Eter table-hover\">\n <thead class=\"dark\">\n <tr>\n <th *ngIf=\"configuration.selectable\" style=\"justify-content: center\">\n <mat-checkbox color=\"primary\" (change)=\"seletecAllEvent($event)\" [(ngModel)]=\"selectAll\"\n [indeterminate]=\"indeterminateState\">\n </mat-checkbox>\n </th>\n <th [class]=\"column.style?.movil\" *ngFor=\"let column of columns\" scope=\"col\" [ngStyle]=\"column.style\">\n {{ column.label }}\n </th>\n <th *ngIf=\"shouldShowMenu()\"></th>\n </tr>\n </thead>\n <tbody class=\"mat-elevation-z3\">\n <tr style=\"cursor: pointer\" *ngFor=\"let row of data\" (click)=\"clickOnRoW(row)\"\n [class]=\"checkboxs[row[configuration.primaryKey]] ? 'selected-row' : ''\">\n <th *ngIf=\"configuration.selectable\" style=\"justify-content: center\">\n <mat-checkbox color=\"primary\" [(ngModel)]=\"checkboxs[row[configuration.primaryKey]]\" (click)=\"clicked($event)\"\n (change)=\"selection(row, $event)\">\n </mat-checkbox>\n </th>\n <th [class]=\"column.style?.movil\" [ngStyle]=\"column.style\" scope=\"row\" *ngFor=\"let column of columns\">\n <ng-container *ngIf=\"\n column.type === 'file' ||\n (column.rules && evaluateRules(row[column.ID], column.rules));\n else displayValue\n \">\n <div (click)=\"onFileIconClick($event, row[column.ID])\">\n <i class=\"fa fa-file\" style=\"cursor: pointer\"></i>\n </div>\n </ng-container>\n <ng-template #displayValue>\n {{ row[column.ID] }}\n </ng-template>\n </th>\n\n <th *ngIf=\"shouldShowMenu()\" class=\"d-flex justify-content-center align-items-center\"\n style=\"overflow: visible;\">\n <mat-icon (click)=\"showMenu($event)\" [matMenuTriggerFor]=\"menu\" matRipple class=\"menu_more_vert\"\n aria-hidden=\"false\" aria-label=\"Example delete icon\">more_vert</mat-icon>\n\n <mat-menu #menu=\"matMenu\">\n <div *ngFor=\"let btn of buttonsConfig\">\n <button *ngIf=\"btn.condition()\" (click)=\"action(btn.action, row)\" mat-menu-item\n class=\"d-flex align-items-center w-100\">\n <i class=\"fa {{ btn.icon }} btn-accion\" style=\"font-size: 120%; margin-right: 10px\"></i>\n {{ btn.tooltip }}\n </button>\n </div>\n </mat-menu>\n </th>\n </tr>\n </tbody>\n </table>\n\n <div *ngIf=\"length == 0 && data.length == 0\" style=\"margin-left: 10px\">\n <strong>No se encontr\u00F3 informaci\u00F3n</strong>\n </div>\n\n <mat-paginator *ngIf=\"paginatorActive\" [length]=\"length\" [pageSize]=\"pageSize\" [pageSizeOptions]=\"pageSizeOptions\"\n showFirstLastButtons (page)=\"changePage($event)\"></mat-paginator>\n</div>\n\n<ng-template #buttonsTable let-fontSize=\"fontSize\" let-marginRight=\"marginRight\" class=\"button-table\">\n <ng-container *ngFor=\"let btn of buttonsConfig\">\n <div *ngIf=\"btn.conditionShowHeader()\" (click)=\"action(btn.action)\" matTooltip=\"{{ btn.tooltip }}\"\n matTooltipPosition=\"above\">\n <i class=\"fa {{ btn.icon }} btn-accion\" [ngStyle]=\"{\n 'font-size': fontSize ? fontSize : '170%',\n 'margin-right': marginRight ? marginRight : '15px'\n }\"></i>\n </div>\n </ng-container>\n</ng-template>", styles: [".contenedor-tabla{width:100%;overflow-x:auto}.table_Eter{width:100%;margin-bottom:4px;color:primary;border-collapse:collapse}.table_Eter .dark th{color:#fff;background-color:#343a40;border-color:#454d55;text-align:center;vertical-align:middle}.table_Eter thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table_Eter th,.table_Eter td{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}th{text-align:inherit}*,*:before,*:after{box-sizing:border-box}.btn-accion{cursor:pointer}mat-form-field{padding:0!important;width:90%}.table-title-mobile{display:block;margin-bottom:10px;font-size:1.2rem;text-align:center}.filter{padding:0;margin-bottom:10px}.selected-row{color:#212529;background-color:#00000013}.button-table{flex:.5;display:flex;flex-direction:row;justify-content:flex-end}button:focus{outline:none!important}@media only screen and (max-width: 600px){.no-movil{display:none}::ng-deep .mat-mdc-paginator-range-label{margin:0!important}}::ng-deep .mat-mdc-paginator{background:transparent!important}\n"], dependencies: [{ kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i7.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i8.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i10.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i10.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i10.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: i11.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i11.MatLabel, selector: "mat-label" }, { kind: "directive", type: i12.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i13.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i14.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i5.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "directive", type: i15.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i15.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i15.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i16.FiltersComponent, selector: "app-filters", inputs: ["headerFilters"], outputs: ["applyFilters"] }] });
649
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DataTableComponent, deps: [{ token: i1.MatDialog }, { token: i2.HttpService }, { token: i3.MessageService }, { token: i4.FunctionsService }, { token: i5.MatPaginatorIntl }, { token: i6.ExportDataService }], target: i0.ɵɵFactoryTarget.Component });
650
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: DataTableComponent, selector: "data-table", inputs: { title: "title", columns: "columns", data: "data", combo: "combo", configuration: "configuration", reloadTable: "reloadTable", url: "url", params: "params", titleLoading: "titleLoading", messageLoading: "messageLoading", headerFileXlsm: "headerFileXlsm", headerFilters: "headerFilters", xslxTitleFields: "xslxTitleFields", xslxSheetNameFields: "xslxSheetNameFields", xslxBodyFields: "xslxBodyFields", xslxParams: "xslxParams", roleId: "roleId", moduleId: "moduleId", subModuleId: "subModuleId" }, outputs: { clickRow: "clickRow", add: "add", edit: "edit", delete: "delete", print: "print", exportXslxByRow: "exportXslxByRow", active: "active", selected: "selected", view: "view", closeOrder: "closeOrder", packOff: "packOff", advance: "advance", income: "income", exit: "exit", internalData: "internalData", sendEmail: "sendEmail", addComment: "addComment", fileIconClick: "fileIconClick" }, viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"contenedor-tabla\">\n <div class=\"table-title-mobile\" *ngIf=\"!configuration.hideTitle\">\n <strong>{{ title }}</strong>\n </div>\n\n <app-filters [headerFilters]=\"headerFilters\" (applyFilters)=\"applyFilters($event)\">\n </app-filters>\n\n <div class=\"row mb-2\" style=\"width: 99%\">\n <div *ngIf=\"!configuration.hideFilter\" class=\"col-12 d-flex justify-content-center\">\n <mat-form-field class=\"filter\">\n <mat-label>Filtrar</mat-label>\n <input type=\"text\" [(ngModel)]=\"filters\" (keyup)=\"changeFilters()\" matInput placeholder=\"Filtrar\" />\n </mat-form-field>\n </div>\n </div>\n\n <div class=\"col-12 d-flex flex-row justify-content-between align-items-center p-2\">\n <div class=\"d-none d-md-block me-md-3 w-100\" style=\"font-size: 1rem\">\n <span class=\"fw-bold\" *ngIf=\"selectedRows.length > 0 && configuration.selectable\">\n {{ selectedRows.length }}\n {{ selectedRows.length === 1 ? 'Seleccionado' : 'Seleccionados' }}\n </span>\n </div>\n <div class=\"d-flex justify-content-end w-100\">\n <ng-container *ngTemplateOutlet=\"buttonsTable\"></ng-container>\n </div>\n </div>\n\n <table class=\"table_Eter table-hover\">\n <thead class=\"dark\">\n <tr>\n <th *ngIf=\"configuration.selectable\" style=\"justify-content: center\">\n <mat-checkbox color=\"primary\" (change)=\"seletecAllEvent($event)\" [(ngModel)]=\"selectAll\"\n [indeterminate]=\"indeterminateState\">\n </mat-checkbox>\n </th>\n <th [class]=\"column.style?.movil\" *ngFor=\"let column of columns\" scope=\"col\" [ngStyle]=\"column.style\">\n {{ column.label }}\n </th>\n <th *ngIf=\"shouldShowMenu()\"></th>\n </tr>\n </thead>\n <tbody class=\"mat-elevation-z3\">\n <tr style=\"cursor: pointer\" *ngFor=\"let row of data\" (click)=\"clickOnRoW(row)\"\n [class]=\"checkboxs[row[configuration.primaryKey]] ? 'selected-row' : ''\">\n <th *ngIf=\"configuration.selectable\" style=\"justify-content: center\">\n <mat-checkbox color=\"primary\" [(ngModel)]=\"checkboxs[row[configuration.primaryKey]]\" (click)=\"clicked($event)\"\n (change)=\"selection(row, $event)\">\n </mat-checkbox>\n </th>\n <th [class]=\"column.style?.movil\" [ngStyle]=\"column.style\" scope=\"row\" *ngFor=\"let column of columns\">\n <ng-container *ngIf=\"\n column.type === 'file' ||\n (column.rules && evaluateRules(row[column.ID], column.rules));\n else displayValue\n \">\n <div (click)=\"onFileIconClick($event, row[column.ID])\">\n <i class=\"fa fa-file\" style=\"cursor: pointer\"></i>\n </div>\n </ng-container>\n <ng-template #displayValue>\n {{ row[column.ID] }}\n </ng-template>\n </th>\n\n <th *ngIf=\"shouldShowMenu()\" class=\"d-flex justify-content-center align-items-center\"\n style=\"overflow: visible;\">\n <mat-icon (click)=\"showMenu($event)\" [matMenuTriggerFor]=\"menu\" matRipple class=\"menu_more_vert\"\n aria-hidden=\"false\" aria-label=\"Example delete icon\">more_vert</mat-icon>\n\n <mat-menu #menu=\"matMenu\">\n <div *ngFor=\"let btn of buttonsConfig\">\n <button *ngIf=\"btn.condition()\" (click)=\"action(btn.action, row)\" mat-menu-item\n class=\"d-flex align-items-center w-100\">\n <i class=\"fa {{ btn.icon }} btn-accion\" style=\"font-size: 120%; margin-right: 10px\"></i>\n {{ btn.tooltip }}\n </button>\n </div>\n </mat-menu>\n </th>\n </tr>\n </tbody>\n </table>\n\n <div *ngIf=\"length == 0 && data.length == 0\" style=\"margin-left: 10px\">\n <strong>No se encontr\u00F3 informaci\u00F3n</strong>\n </div>\n\n <mat-paginator *ngIf=\"paginatorActive\" [length]=\"length\" [pageSize]=\"pageSize\" [pageSizeOptions]=\"pageSizeOptions\"\n showFirstLastButtons (page)=\"changePage($event)\"></mat-paginator>\n</div>\n\n<ng-template #buttonsTable let-fontSize=\"fontSize\" let-marginRight=\"marginRight\" class=\"button-table\">\n <ng-container *ngFor=\"let btn of buttonsConfig\">\n <div *ngIf=\"btn.conditionShowHeader()\" (click)=\"action(btn.action)\" matTooltip=\"{{ btn.tooltip }}\"\n matTooltipPosition=\"above\">\n <i class=\"fa {{ btn.icon }} btn-accion\" [ngStyle]=\"{\n 'font-size': fontSize ? fontSize : '170%',\n 'margin-right': marginRight ? marginRight : '15px'\n }\"></i>\n </div>\n </ng-container>\n</ng-template>", styles: [".contenedor-tabla{width:100%;overflow-x:auto}.table_Eter{width:100%;margin-bottom:4px;color:primary;border-collapse:collapse}.table_Eter .dark th{color:#fff;background-color:#343a40;border-color:#454d55;text-align:center;vertical-align:middle}.table_Eter thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table_Eter th,.table_Eter td{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}th{text-align:inherit}*,*:before,*:after{box-sizing:border-box}.btn-accion{cursor:pointer}mat-form-field{padding:0!important;width:90%}.table-title-mobile{display:block;margin-bottom:10px;font-size:1.2rem;text-align:center}.filter{padding:0;margin-bottom:10px}.selected-row{color:#212529;background-color:#00000013}.button-table{flex:.5;display:flex;flex-direction:row;justify-content:flex-end}button:focus{outline:none!important}@media only screen and (max-width: 600px){.no-movil{display:none}::ng-deep .mat-mdc-paginator-range-label{margin:0!important}}::ng-deep .mat-mdc-paginator{background:transparent!important}\n"], dependencies: [{ kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i7.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i8.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i10.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i10.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i10.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: i11.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i11.MatLabel, selector: "mat-label" }, { kind: "directive", type: i12.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i13.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i14.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i5.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "directive", type: i15.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i15.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i15.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i16.FiltersComponent, selector: "app-filters", inputs: ["headerFilters"], outputs: ["applyFilters"] }] });
650
651
  }
651
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DataTableComponent, decorators: [{
652
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DataTableComponent, decorators: [{
652
653
  type: Component,
653
654
  args: [{ selector: 'data-table', template: "<div class=\"contenedor-tabla\">\n <div class=\"table-title-mobile\" *ngIf=\"!configuration.hideTitle\">\n <strong>{{ title }}</strong>\n </div>\n\n <app-filters [headerFilters]=\"headerFilters\" (applyFilters)=\"applyFilters($event)\">\n </app-filters>\n\n <div class=\"row mb-2\" style=\"width: 99%\">\n <div *ngIf=\"!configuration.hideFilter\" class=\"col-12 d-flex justify-content-center\">\n <mat-form-field class=\"filter\">\n <mat-label>Filtrar</mat-label>\n <input type=\"text\" [(ngModel)]=\"filters\" (keyup)=\"changeFilters()\" matInput placeholder=\"Filtrar\" />\n </mat-form-field>\n </div>\n </div>\n\n <div class=\"col-12 d-flex flex-row justify-content-between align-items-center p-2\">\n <div class=\"d-none d-md-block me-md-3 w-100\" style=\"font-size: 1rem\">\n <span class=\"fw-bold\" *ngIf=\"selectedRows.length > 0 && configuration.selectable\">\n {{ selectedRows.length }}\n {{ selectedRows.length === 1 ? 'Seleccionado' : 'Seleccionados' }}\n </span>\n </div>\n <div class=\"d-flex justify-content-end w-100\">\n <ng-container *ngTemplateOutlet=\"buttonsTable\"></ng-container>\n </div>\n </div>\n\n <table class=\"table_Eter table-hover\">\n <thead class=\"dark\">\n <tr>\n <th *ngIf=\"configuration.selectable\" style=\"justify-content: center\">\n <mat-checkbox color=\"primary\" (change)=\"seletecAllEvent($event)\" [(ngModel)]=\"selectAll\"\n [indeterminate]=\"indeterminateState\">\n </mat-checkbox>\n </th>\n <th [class]=\"column.style?.movil\" *ngFor=\"let column of columns\" scope=\"col\" [ngStyle]=\"column.style\">\n {{ column.label }}\n </th>\n <th *ngIf=\"shouldShowMenu()\"></th>\n </tr>\n </thead>\n <tbody class=\"mat-elevation-z3\">\n <tr style=\"cursor: pointer\" *ngFor=\"let row of data\" (click)=\"clickOnRoW(row)\"\n [class]=\"checkboxs[row[configuration.primaryKey]] ? 'selected-row' : ''\">\n <th *ngIf=\"configuration.selectable\" style=\"justify-content: center\">\n <mat-checkbox color=\"primary\" [(ngModel)]=\"checkboxs[row[configuration.primaryKey]]\" (click)=\"clicked($event)\"\n (change)=\"selection(row, $event)\">\n </mat-checkbox>\n </th>\n <th [class]=\"column.style?.movil\" [ngStyle]=\"column.style\" scope=\"row\" *ngFor=\"let column of columns\">\n <ng-container *ngIf=\"\n column.type === 'file' ||\n (column.rules && evaluateRules(row[column.ID], column.rules));\n else displayValue\n \">\n <div (click)=\"onFileIconClick($event, row[column.ID])\">\n <i class=\"fa fa-file\" style=\"cursor: pointer\"></i>\n </div>\n </ng-container>\n <ng-template #displayValue>\n {{ row[column.ID] }}\n </ng-template>\n </th>\n\n <th *ngIf=\"shouldShowMenu()\" class=\"d-flex justify-content-center align-items-center\"\n style=\"overflow: visible;\">\n <mat-icon (click)=\"showMenu($event)\" [matMenuTriggerFor]=\"menu\" matRipple class=\"menu_more_vert\"\n aria-hidden=\"false\" aria-label=\"Example delete icon\">more_vert</mat-icon>\n\n <mat-menu #menu=\"matMenu\">\n <div *ngFor=\"let btn of buttonsConfig\">\n <button *ngIf=\"btn.condition()\" (click)=\"action(btn.action, row)\" mat-menu-item\n class=\"d-flex align-items-center w-100\">\n <i class=\"fa {{ btn.icon }} btn-accion\" style=\"font-size: 120%; margin-right: 10px\"></i>\n {{ btn.tooltip }}\n </button>\n </div>\n </mat-menu>\n </th>\n </tr>\n </tbody>\n </table>\n\n <div *ngIf=\"length == 0 && data.length == 0\" style=\"margin-left: 10px\">\n <strong>No se encontr\u00F3 informaci\u00F3n</strong>\n </div>\n\n <mat-paginator *ngIf=\"paginatorActive\" [length]=\"length\" [pageSize]=\"pageSize\" [pageSizeOptions]=\"pageSizeOptions\"\n showFirstLastButtons (page)=\"changePage($event)\"></mat-paginator>\n</div>\n\n<ng-template #buttonsTable let-fontSize=\"fontSize\" let-marginRight=\"marginRight\" class=\"button-table\">\n <ng-container *ngFor=\"let btn of buttonsConfig\">\n <div *ngIf=\"btn.conditionShowHeader()\" (click)=\"action(btn.action)\" matTooltip=\"{{ btn.tooltip }}\"\n matTooltipPosition=\"above\">\n <i class=\"fa {{ btn.icon }} btn-accion\" [ngStyle]=\"{\n 'font-size': fontSize ? fontSize : '170%',\n 'margin-right': marginRight ? marginRight : '15px'\n }\"></i>\n </div>\n </ng-container>\n</ng-template>", styles: [".contenedor-tabla{width:100%;overflow-x:auto}.table_Eter{width:100%;margin-bottom:4px;color:primary;border-collapse:collapse}.table_Eter .dark th{color:#fff;background-color:#343a40;border-color:#454d55;text-align:center;vertical-align:middle}.table_Eter thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table_Eter th,.table_Eter td{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}th{text-align:inherit}*,*:before,*:after{box-sizing:border-box}.btn-accion{cursor:pointer}mat-form-field{padding:0!important;width:90%}.table-title-mobile{display:block;margin-bottom:10px;font-size:1.2rem;text-align:center}.filter{padding:0;margin-bottom:10px}.selected-row{color:#212529;background-color:#00000013}.button-table{flex:.5;display:flex;flex-direction:row;justify-content:flex-end}button:focus{outline:none!important}@media only screen and (max-width: 600px){.no-movil{display:none}::ng-deep .mat-mdc-paginator-range-label{margin:0!important}}::ng-deep .mat-mdc-paginator{background:transparent!important}\n"] }]
654
655
  }], ctorParameters: () => [{ type: i1.MatDialog }, { type: i2.HttpService }, { type: i3.MessageService }, { type: i4.FunctionsService }, { type: i5.MatPaginatorIntl }, { type: i6.ExportDataService }], propDecorators: { title: [{
@@ -743,4 +744,4 @@ var enumActions;
743
744
  enumActions[enumActions["REMOVE"] = 2] = "REMOVE";
744
745
  enumActions[enumActions["SHOW_FILE_ICON"] = 3] = "SHOW_FILE_ICON";
745
746
  })(enumActions || (enumActions = {}));
746
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvYnJhaW5sb3Blci11aS9jb21wb25lbnRzL2RhdGEtdGFibGUvZGF0YS10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvYnJhaW5sb3Blci11aS9jb21wb25lbnRzL2RhdGEtdGFibGUvZGF0YS10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFdEUsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFHWixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0ZBQWdGLENBQUM7QUFFckgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBSzNELE9BQU8sRUFBZ0IsWUFBWSxFQUFFLE1BQU0sK0JBQStCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUczRSxNQUFNLGlCQUFpQixHQUFHLENBQUMsSUFBWSxFQUFFLFFBQWdCLEVBQUUsTUFBYyxFQUFFLEVBQUU7SUFDM0UsSUFBSSxNQUFNLElBQUksQ0FBQyxJQUFJLFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNqQyxPQUFPLFFBQVEsTUFBTSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUU3QixNQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsUUFBUSxDQUFDO0lBRW5DLE1BQU0sUUFBUSxHQUNaLFVBQVUsR0FBRyxNQUFNO1FBQ2pCLENBQUMsQ0FBQyxJQUFJLENBQUMs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LENBQUE7SUFDUCwyQ0FBRyxDQUFBO0lBQ0gsaURBQU0sQ0FBQTtJQUNOLGlFQUFjLENBQUE7QUFDaEIsQ0FBQyxFQUxJLFdBQVcsS0FBWCxXQUFXLFFBS2YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTY3JlZW5TaXplVXRpbCB9IGZyb20gJy4vLi4vLi4vLi4vc2VydmljZXMvc2NyZWVuLXNpemUtdXRpbCc7XG5pbXBvcnQgeyBFeHBvcnREYXRhU2VydmljZSB9IGZyb20gJy4vLi4vLi4vLi4vc2VydmljZXMvZXhwb3J0LWRhdGEuc2VydmljZSc7XG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIE9uSW5pdCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgVGFibGVNb2RhbENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2JyYWlubG9wZXItdWkvY29tcG9uZW50cy9kYXRhLXRhYmxlL3RhYmxlLW1vZGFsL3RhYmxlLW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBIdHRwU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2h0dHAuc2VydmljZSc7XG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tZXNzYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgRnVuY3Rpb25zU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Z1bmN0aW9ucy5zZXJ2aWNlJztcbmltcG9ydCB7IE1hdFBhZ2luYXRvckludGwgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xuaW1wb3J0IHsgVG9vbHRpcFBvc2l0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XG5pbXBvcnQgeyBJUGVybWlzc2lvbnMsIG1vZHVsZXNCeVJvbCB9IGZyb20gJ0BlZGdhcnpvbjkzL2JyYWlubG9wZXItc2hhcmVkJztcblxuXG5jb25zdCBzcGFuaXNoUmFuZ2VMYWJlbCA9IChwYWdlOiBudW1iZXIsIHBhZ2VTaXplOiBudW1iZXIsIGxlbmd0aDogbnVtYmVyKSA9PiB7XG4gIGlmIChsZW5ndGggPT0gMCB8fCBwYWdlU2l6ZSA9PSAwKSB7XG4gICAgcmV0dXJuIGAwIGRlICR7bGVuZ3RofWA7XG4gIH1cblxuICBsZW5ndGggPSBNYXRoLm1heChsZW5ndGgsIDApO1xuXG4gIGNvbnN0IHN0YXJ0SW5kZXggPSBwYWdlICogcGFnZVNpemU7XG5cbiAgY29uc3QgZW5kSW5kZXggPVxuICAgIHN0YXJ0SW5kZXggPCBsZW5ndGhcbiAgICAgID8gTWF0aC5taW4oc3RhcnRJbmRleCArIHBhZ2VTaXplLCBsZW5ndGgpXG4gICAgICA6IHN0YXJ0SW5kZXggKyBwYWdlU2l6ZTtcblxuICByZXR1cm4gYCR7c3RhcnRJbmRleCArIDF9IC0gJHtlbmRJbmRleH0gZGUgJHtsZW5ndGh9YDtcbn07XG5cbmNvbnN0IHJvbGVzQW5kUGVybWlzc2lvbnMgPSBtb2R1bGVzQnlSb2xcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2RhdGEtdGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0YS10YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RhdGEtdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRGF0YVRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSB0aXRsZTtcbiAgQElucHV0KCkgY29sdW1ucztcbiAgQElucHV0KCkgZGF0YTogYW55ID0gW107XG4gIEBJbnB1dCgpIGNvbWJvO1xuICBASW5wdXQoKSBjb25maWd1cmF0aW9uID0ge1xuICAgIGFkZDogZmFsc2UsXG4gICAgZWRpdDogZmFsc2UsXG4gICAgZGVsZXRlOiBmYWxzZSxcbiAgICBhY3RpdmU6IGZhbHNlLFxuICAgIHNlbGVjdGFibGU6IGZhbHNlLFxuICAgIHByaW50OiBmYWxzZSxcbiAgICBhZGRQZXI6IGZhbHNlLFxuICAgIGVkaXRQZXI6IGZhbHNlLFxuICAgIHByaW1hcnlLZXk6ICdpZCcsXG4gICAgZXhwb3J0WHNseDogZmFsc2UsXG4gICAgaGlkZVRpdGxlOiB0cnVlLFxuICAgIGhpZGVGaWx0ZXI6IHRydWUsXG4gICAgbm90SW5pdGlhbGl6ZTogZmFsc2UsXG4gICAgZXhwb3J0WHNseEJ5Um93OiBmYWxzZSxcbiAgICBleHBvcnRYc2x4V2l0aFBhZ2VzOiBmYWxzZSxcbiAgICB2aWV3OiBmYWxzZSxcbiAgICBjbG9zZU9yZGVyOiBmYWxzZSxcbiAgICBwYWNrT2ZmOiBmYWxzZSxcbiAgICBhZHZhbmNlOiB0cnVlLFxuICAgIGFkdmFuY2VMYWJlbDogbnVsbCxcbiAgICBpbmNvbWU6IGZhbHNlLFxuICAgIGV4aXQ6IGZhbHNlLFxuICAgIHNlbmRFbWFpbDogZmFsc2UsXG4gICAgYWRkQ29tbWVudDogZmFsc2UsXG4gIH07XG5cbiAgQElucHV0KCkgcmVsb2FkVGFibGU6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBASW5wdXQoKSB1cmw6IHN0cmluZztcbiAgQElucHV0KCkgcGFyYW1zOiBBcnJheTxhbnk+O1xuICBASW5wdXQoKSB0aXRsZUxvYWRpbmc6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBtZXNzYWdlTG9hZGluZzogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIGhlYWRlckZpbGVYbHNtOiBBcnJheTxhbnk+ID0gW107XG4gIEBJbnB1dCgpIGhlYWRlckZpbHRlcnM6IEFycmF5PGFueT4gPSBbXTtcbiAgQElucHV0KCkgeHNseFRpdGxlRmllbGRzOiBzdHJpbmdbXTtcbiAgQElucHV0KCkgeHNseFNoZWV0TmFtZUZpZWxkczogc3RyaW5nW107XG4gIEBJbnB1dCgpIHhzbHhCb2R5RmllbGRzOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHhzbHhQYXJhbXM6IEFycmF5PGFueT4gPSBudWxsO1xuICBASW5wdXQoKSByb2xlSWQ6IG51bWJlciA9IDA7XG4gIEBJbnB1dCgpIG1vZHVsZUlkOiBudW1iZXIgPSAwO1xuICBASW5wdXQoKSBzdWJNb2R1bGVJZDogbnVtYmVyID0gMDtcblxuXG4gIHByaXZhdGUgaGFzQWNjZXNzVG9BbGwgPSB0cnVlO1xuICBwcml2YXRlIHJvbGVzQW5kUGVybWlzc2lvblVzZXI6IElQZXJtaXNzaW9ucyA9IHt9IGFzIElQZXJtaXNzaW9ucztcblxuICBAT3V0cHV0KCkgY2xpY2tSb3cgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGFkZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgZWRpdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgZGVsZXRlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBwcmludCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgZXhwb3J0WHNseEJ5Um93ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBhY3RpdmUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSB2aWV3ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBjbG9zZU9yZGVyID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBwYWNrT2ZmID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBhZHZhbmNlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBpbmNvbWUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGV4aXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGludGVybmFsRGF0YSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgc2VuZEVtYWlsID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBhZGRDb21tZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7IFxuICBAT3V0cHV0KCkgZmlsZUljb25DbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBtb3ZpbCA9IFNjcmVlblNpemVVdGlsLmlzTW9iaWxlKCk7XG4gIGZpbHRlcnNQb3N0OiBBcnJheTxhbnk+ID0gW107XG4gIEBWaWV3Q2hpbGQoTWF0UGFnaW5hdG9yLCB7IHN0YXRpYzogdHJ1ZSB9KSBwYWdpbmF0b3I6IE1hdFBhZ2luYXRvcjtcblxuICBzZWxlY3RlZFJvd3MgPSBbXTsgLyoqIGFsbWFjZW5hIGxhcyBmaWxhcyBzZWxlY2Npb25hZGFzICovXG4gIGNoZWNrYm94cyA9IHt9O1xuICBzZWxlY3RBbGwgPSBmYWxzZTtcbiAgaW5kZXRlcm1pbmF0ZVN0YXRlID0gZmFsc2U7XG4gIGZpbHRlcnM7XG4gIG9yaWdpbmFsRGF0YSA9IFtdO1xuICBwYWdpbmF0b3JBY3RpdmUgPSB0cnVlO1xuICBzY3JlZW46IGJvb2xlYW4gPSB0cnVlO1xuXG4gIGlkX2NvbXBhbmlhO1xuXG4gIHBhZ2VTaXplT3B0aW9uczogbnVtYmVyW10gPSBbNSwgMTAsIDI1LCA1MCwgMTAwXTtcblxuICBwYWdlU2l6ZSA9IHNjcmVlbi53aWR0aCA+IDUwMCA/IDEwIDogNTtcbiAgbGVuZ3RoID0gMDtcblxuICBwYWdlID0gMDtcblxuICBhYm92ZTogVG9vbHRpcFBvc2l0aW9uW10gPSBbJ2Fib3ZlJ107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGRpYWxvZzogTWF0RGlhbG9nLFxuICAgIHByaXZhdGUgaHR0cDogSHR0cFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtZXNzYWdlOiBNZXNzYWdlU2VydmljZSxcbiAgICBwcml2YXRlIGZ1bmN0aW9uRXRlcjogRnVuY3Rpb25zU2VydmljZSxcbiAgICBwcml2YXRlIHBhZ2luYXRvclRyYW5zbGF0ZTogTWF0UGFnaW5hdG9ySW50bCxcbiAgICBwcml2YXRlIGV4cG9ydFNlcnZpY2U6IEV4cG9ydERhdGFTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMucGFnaW5hdG9yVHJhbnNsYXRlLml0ZW1zUGVyUGFnZUxhYmVsID0gJ0VsZW1lbnRvcyBwb3IgcMOhZ2luYSc7XG4gICAgdGhpcy5wYWdpbmF0b3JUcmFuc2xhdGUubmV4dFBhZ2VMYWJlbCA9ICdTaWd1aWVudGUgcMOhZ2luYSc7XG4gICAgdGhpcy5wYWdpbmF0b3JUcmFuc2xhdGUubGFzdFBhZ2VMYWJlbCA9ICfDmmx0aW1hIHDDoWdpbmEnO1xuICAgIHRoaXMucGFnaW5hdG9yVHJhbnNsYXRlLnByZXZpb3VzUGFnZUxhYmVsID0gJ1DDoWdpbmEgYW50ZXJpb3InO1xuICAgIHRoaXMucGFnaW5hdG9yVHJhbnNsYXRlLmZpcnN0UGFnZUxhYmVsID0gJ1ByaW1lcmEgcMOhZ2luYSc7XG4gICAgdGhpcy5wYWdpbmF0b3JUcmFuc2xhdGUuZ2V0UmFuZ2VMYWJlbCA9IHNwYW5pc2hSYW5nZUxhYmVsO1xuICB9XG5cbiAgYnV0dG9uc0NvbmZpZyA9IFtcbiAgXTtcblxuXG4gIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIHRoaXMudmFsaWRhdGVSb2xBbmRQZXJtaXNzaW9uKClcbiAgICBpZiAod2luZG93LnNjcmVlbi53aWR0aCA+IDEwMDApIHtcbiAgICAgIHRoaXMuc2NyZWVuID0gdHJ1ZTtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCAoKSA9PiB7XG4gICAgICAgIHdpbmRvdy5zY3JlZW4ud2lkdGggPiAxMDAwXG4gICAgICAgICAgPyAodGhpcy5zY3JlZW4gPSB0cnVlKVxuICAgICAgICAgIDogKHRoaXMuc2NyZWVuID0gZmFsc2UpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2NyZWVuID0gZmFsc2U7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgKCkgPT4ge1xuICAgICAgICB3aW5kb3cuc2NyZWVuLndpZHRoID4gMTAwMFxuICAgICAgICAgID8gKHRoaXMuc2NyZWVuID0gdHJ1ZSlcbiAgICAgICAgICA6ICh0aGlzLnNjcmVlbiA9IGZhbHNlKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlbG9hZFRhYmxlKSB7XG4gICAgICB0aGlzLnJlbG9hZFRhYmxlLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICAgIHRoaXMub3JpZ2luYWxEYXRhID0gW107XG4gICAgICAgIHRoaXMuc2VsZWN0QWxsID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2VsZXRlY0FsbEV2ZW50KCcnKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMudGl0bGVMb2FkaW5nID09ICcnID8gKHRoaXMudGl0bGVMb2FkaW5nID0gJ0NhcmdhbmRvJykgOiAnJztcbiAgICB0aGlzLm1lc3NhZ2VMb2FkaW5nID09ICcnXG4gICAgICA/ICh0aGlzLm1lc3NhZ2VMb2FkaW5nID0gJ09idGVuaWVuZG8gZGF0b3MuLi4nKVxuICAgICAgOiAnJztcbiAgICB0aGlzLnVybCAmJiAhdGhpcy5jb25maWd1cmF0aW9uLm5vdEluaXRpYWxpemVcbiAgICAgID8gdGhpcy5tZXNzYWdlLm9wZW5Mb2FkaW5nKHRoaXMudGl0bGVMb2FkaW5nLCB0aGlzLm1lc3NhZ2VMb2FkaW5nKVxuICAgICAgOiAnJztcblxuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy51cmwgJiYgIXRoaXMuY29uZmlndXJhdGlvbi5ub3RJbml0aWFsaXplKSB7XG4gICAgICAgIGxldCBzZXJ2aWNlID0gYXdhaXQgdGhpcy5nZXREYXRlVGFibGVCeVVybCgpO1xuICAgICAgICB0aGlzLmRhdGEgPSBzZXJ2aWNlWydkYXRhJ107XG4gICAgICAgIHRoaXMubGVuZ3RoID0gc2VydmljZVsnY291bnQnXTtcblxuICAgICAgICB0aGlzLmRhdGEuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgICAgdGhpcy5jaGVja2JveHNbcm93W3RoaXMuY29uZmlndXJhdGlvbi5wcmltYXJ5S2V5XV0gPSBmYWxzZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5pbnRlcm5hbERhdGEuZW1pdChzZXJ2aWNlKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlLmNsb3NlTG9hZGluZygpO1xuICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgdGhpcy52YWxpZGF0ZVJ1bGVzKCk7XG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLnVybCkge1xuICAgICAgICB0aGlzLnBhZ2luYXRvckFjdGl2ZSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmxvZyhlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGVSb2xBbmRQZXJtaXNzaW9uKCkge1xuICAgIGlmICh0aGlzLnJvbGVJZCAhPSAwKSB7XG4gICAgICBsZXQgcm9sZVBlcm1pc3Npb25zID0gcm9sZXNBbmRQZXJtaXNzaW9ucz8uZmluZCh4ID0+IHguaWQgPT0gdGhpcy5yb2xlSWQpXG4gICAgICB0aGlzLmhhc0FjY2Vzc1RvQWxsID0gcm9sZVBlcm1pc3Npb25zPy5oYXNBY2Nlc3NUb0FsbCA/PyByb2xlUGVybWlzc2lvbnMubW9kdWxlcz8uZmluZCh4ID0+IHguaWQgPT0gdGhpcy5tb2R1bGVJZCk/Lmhhc0FjY2Vzc1RvQWxsID8/IGZhbHNlO1xuICAgIH07XG5cbiAgICB0aGlzLnJvbGVzQW5kUGVybWlzc2lvblVzZXIgPSByb2xlc0FuZFBlcm1pc3Npb25zPy5maW5kKHggPT4geC5pZCA9PSB0aGlzLnJvbGVJZCk/Lm1vZHVsZXM/LmZpbmQoeCA9PiB4LmlkID09IHRoaXMubW9kdWxlSWQpPy5zdWJNb2R1bGVzPy5maW5kKHggPT4geC5pZCA9PSB0aGlzLnN1Yk1vZHVsZUlkKT8ucGVybWlzc2lvbnMgPz8ge30gYXMgSVBlcm1pc3Npb25zO1xuICAgIGlmICghdGhpcy5oYXNBY2Nlc3NUb0FsbCAmJiAhdGhpcy5yb2xlc0FuZFBlcm1pc3Npb25Vc2VyLnJlYWRBbGwgJiYgdGhpcy5yb2xlc0FuZFBlcm1pc3Npb25Vc2VyLnJlYWRPd24gPT0gdHJ1ZSkge1xuICAgICAgdGhpcy5wYXJhbXMgPSBbLi4udGhpcy5wYXJhbXMsIHsgaWQ6ICdyZWFkT3duJywgdmFsdWU6IHRydWUgfV07XG4gICAgfVxuICAgIHRoaXMuY29uZmlndXJlQnV0dG9ucygpXG4gIH1cblxuICBjb25maWd1cmVCdXR0b25zKCkge1xuICAgIHRoaXMuYnV0dG9uc0NvbmZpZyA9IFtcbiAgICAgIHtcbiAgICAgICAgYWN0aW9uOiAnZWRpdCcsXG4gICAgICAgIGNvbmRpdGlvblNob3dIZWFkZXI6ICgpID0+XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3MubGVuZ3RoID09PSAxICYmXG4gICAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uLmVkaXQgJiZcbiAgICAgICAgICB0aGlzLmhhc1Blcm1pc3Npb24oJ3VwZGF0ZScpLFxuICAgICAgICBjb25kaXRpb246ICgpID0+IHRoaXMuY29uZmlndXJhdGlvbi5lZGl0ICYmIHRoaXMuaGFzUGVybWlzc2lvbigndXBkYXRlJyksXG4gICAgICAgIGljb246ICdmYS1lZGl0JyxcbiAgICAgICAgdG9vbHRpcDogJ0VkaXRhcicsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBhY3Rpb246ICdwcmludCcsXG4gICAgICAgIGNvbmRpdGlvblNob3dIZWFkZXI6ICgpID0+XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3MubGVuZ3RoID09PSAxICYmXG4gICAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uLnByaW50ICYmXG4gICAgICAgICAgdGhpcy5zY3JlZW4gJiZcbiAgICAgICAgICB0aGlzLmhhc1Blcm1pc3Npb24oJ3ByaW50JyksXG4gICAgICAgIGNvbmRpdGlvbjogKCkgPT4gdGhpcy5jb25maWd1cmF0aW9uLnByaW50ICYmIHRoaXMuc2NyZWVuICYmIHRoaXMuaGFzUGVybWlzc2lvbigncHJpbnQnKSxcbiAgICAgICAgaWNvbjogJ2ZhLXByaW50JyxcbiAgICAgICAgdG9vbHRpcDogJ0ltcHJpbWlyJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGFjdGlvbjogJ2FjdGl2ZScsXG4gICAgICAgIGNvbmRpdGlvblNob3dIZWFkZXI6ICgpID0+XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3MubGVuZ3RoID4gMCAmJiB0aGlzLmNvbmZpZ3VyYXRpb24uYWN0aXZlICYmIHRoaXMuaGFzUGVybWlzc2lvbignYWN0aXZhdGVBbmRJbmFjdGl2YXRlJyksXG4gICAgICAgIGNvbmRpdGlvbjogKCkgPT4gdGhpcy5jb25maWd1cmF0aW9uLmFjdGl2ZSAmJiB0aGlzLmhhc1Blcm1pc3Npb24oJ2FjdGl2YXRlQW5kSW5hY3RpdmF0ZScpLFxuICAgICAgICBpY29uOiAnZmEtYWRqdXN0JyxcbiAgICAgICAgdG9vbHRpcDogJ0FjdGl2YXIvRGVzYWN0aXZhcicsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBhY3Rpb246ICdhZGQnLFxuICAgICAgICBjb25kaXRpb25TaG93SGVhZGVyOiAoKSA9PlxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzLmxlbmd0aCA9PT0gMCAmJiB0aGlzLmNvbmZpZ3VyYXRpb24uYWRkICYmIHRoaXMuaGFzUGVybWlzc2lvbignd3JpdGUnKSxcbiAgICAgICAgY29uZGl0aW9uOiAoKSA9PiBmYWxzZSxcbiAgICAgICAgaWNvbjogJ2ZhLXBsdXMtY2lyY2xlJyxcbiAgICAgICAgdG9vbHRpcDogJ051ZXZvJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGFjdGlvbjogJ2luY29tZScsXG4gICAgICAgIGNvbmRpdGlvblNob3dIZWFkZXI6ICgpID0+XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3MubGVuZ3RoID09PSAwICYmIHRoaXMuY29uZmlndXJhdGlvbi5pbmNvbWUgJiYgdGhpcy5oYXNQZXJtaXNzaW9uKCd3cml0ZScpLFxuICAgICAgICBjb25kaXRpb246ICgpID0+IGZhbHNlLFxuICAgICAgICBpY29uOiAnZmEtdXNlci1wbHVzJyxcbiAgICAgICAgdG9vbHRpcDogJ0luZ3Jlc28nLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYWN0aW9uOiAnZXhpdCcsXG4gICAgICAgIGNvbmRpdGlvblNob3dIZWFkZXI6ICgpID0+XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3MubGVuZ3RoID09PSAwICYmIHRoaXMuY29uZmlndXJhdGlvbi5leGl0ICYmIHRoaXMuaGFzUGVybWlzc2lvbignd3JpdGUnKSxcbiAgICAgICAgY29uZGl0aW9uOiAoKSA9PiBmYWxzZSxcbiAgICAgICAgaWNvbjogJ2ZhLXVzZXItdGltZXMnLFxuICAgICAgICB0b29sdGlwOiAnU2FsaWRhJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGFjdGlvbjogJ3ZpZXcnLFxuICAgICAgICBjb25kaXRpb25TaG93SGVhZGVyOiAoKSA9PlxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzLmxlbmd0aCA9PT0gMSAmJiB0aGlzLmNvbmZpZ3VyYXRpb24udmlldyAmJiB0aGlzLmhhc1Blcm1pc3Npb24oJ3JlYWREZXRhaWwnKSxcbiAgICAgICAgY29uZGl0aW9uOiAoKSA9PiB0aGlzLmNvbmZpZ3VyYXRpb24udmlldyAmJiB0aGlzLmhhc1Blcm1pc3Npb24oJ3JlYWREZXRhaWwnKSxcbiAgICAgICAgaWNvbjogJ2ZhLWV5ZScsXG4gICAgICAgIHRvb2x0aXA6ICdWZXIgZGV0YWxsZScsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBhY3Rpb246ICdjbG9zZU9yZGVyJyxcbiAgICAgICAgY29uZGl0aW9uU2hvd0hlYWRlcjogKCkgPT5cbiAgICAgICAgICAodGhpcy5zZWxlY3RlZFJvd3MubGVuZ3RoID09PSAxICYmIHRoaXMuY29uZmlndXJhdGlvbi5jbG9zZU9yZGVyKSAmJiB0aGlzLmhhc1Blcm1pc3Npb24oJ2Nsb3NlT1QnKSxcbiAgICAgICAgY29uZGl0aW9uOiAoKSA9PiB0aGlzLmNvbmZpZ3VyYXRpb24uY2xvc2VPcmRlciAmJiB0aGlzLmhhc1Blcm1pc3Npb24oJ2Nsb3NlT1QnKSxcbiAgICAgICAgaWNvbjogJ2ZhLWNoZWNrLWNpcmNsZScsXG4gICAgICAgIHRvb2x0aXA6ICdDZXJyYXIgb3JkZW4nLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYWN0aW9uOiAncGFja09mZicsXG4gICAgICAgIGNvbmRpdGlvblNob3dIZWFkZXI6ICgpID0+XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3MubGVuZ3RoID09PSAxICYmIHRoaXMuY29uZmlndXJhdGlvbi5wYWNrT2ZmICYmIHRoaXMuaGFzUGVybWlzc2lvbignYWxsb2NhdGVSZXNvdXJjZXMnKSxcbiAgICAgICAgY29uZGl0aW9uOiAoKSA9PiB0aGlzLmNvbmZpZ3VyYXRpb24ucGFja09mZiAmJiB0aGlzLmhhc1Blcm1pc3Npb24oJ2FsbG9jYXRlUmVzb3VyY2VzJyksXG4gICAgICAgIGljb246ICdmYS1jYXJ0LWFycm93LWRvd24nLFxuICAgICAgICB0b29sdGlwOiAnRGVzcGFjaGFyIHJlY3Vyc29zJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGFjdGlvbjogJ2FkdmFuY2UnLFxuICAgICAgICBjb25kaXRpb25TaG93SGVhZGVyOiAoKSA9PlxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzLmxlbmd0aCA9PT0gMSAmJiB0aGlzLmNvbmZpZ3VyYXRpb24uYWR2YW5jZSAmJiB0aGlzLmhhc1Blcm1pc3Npb24oJ2FkdmFuY2UnKSxcbiAgICAgICAgY29uZGl0aW9uOiAoKSA9PiB0aGlzLmNvbmZpZ3VyYXRpb24uYWR2YW5jZSAmJiB0aGlzLmhhc1Blcm1pc3Npb24oJ2FkdmFuY2UnKSxcbiAgICAgICAgaWNvbjogJ2ZhLWFycm93LXJpZ2h0JyxcbiAgICAgICAgdG9vbHRpcDogdGhpcy5jb25maWd1cmF0aW9uLmFkdmFuY2VMYWJlbCxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGFjdGlvbjogJ3NlbmRFbWFpbCcsXG4gICAgICAgIGNvbmRpdGlvblNob3dIZWFkZXI6ICgpID0+XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3MubGVuZ3RoID09PSAxICYmXG4gICAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uLnNlbmRFbWFpbCAmJlxuICAgICAgICAgIHRoaXMuaGFzUGVybWlzc2lvbignc2VuZEVtYWlsJyksXG4gICAgICAgIGNvbmRpdGlvbjogKCkgPT4gdGhpcy5jb25maWd1cmF0aW9uLnNlbmRFbWFpbCAmJiB0aGlzLmhhc1Blcm1pc3Npb24oJ3NlbmRFbWFpbCcpLFxuICAgICAgICBpY29uOiAnZmEtbWFpbC1idWxrJyxcbiAgICAgICAgdG9vbHRpcDogJ0VudmlhIGNvcnJlbycsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBhY3Rpb246ICdleHBvcnRUb0V4Y2VsJyxcbiAgICAgICAgY29uZGl0aW9uU2hvd0hlYWRlcjogKCkgPT5cbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93cy5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgICB0aGlzLmRhdGEubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICh0aGlzLmNvbmZpZ3VyYXRpb24uZXhwb3J0WHNseCB8fCB0aGlzLmNvbmZpZ3VyYXRpb24uZXhwb3J0WHNseFdpdGhQYWdlcykgJiZcbiAgICAgICAgICB0aGlzLmhhc1Blcm1pc3Npb24oJ2V4cG9ydCcpLFxuICAgICAgICBjb25kaXRpb246ICgpID0+IGZhbHNlLFxuICAgICAgICBpY29uOiAnZmEtZG93bmxvYWQnLFxuICAgICAgICB0b29sdGlwOiAnRXhwb3J0YXIgVGFibGEnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYWN0aW9uOiAnZXhwb3J0VG9FeGNlbEJ5Um93JyxcbiAgICAgICAgY29uZGl0aW9uU2hvd0hlYWRlcjogKCkgPT5cbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93cy5sZW5ndGggPT09IDEgJiYgdGhpcy5jb25maWd1cmF0aW9uLmV4cG9ydFhzbHhCeVJvdyAmJiB0aGlzLmhhc1Blcm1pc3Npb24oJ2V4cG9ydCcpLFxuICAgICAgICBjb25kaXRpb246ICgpID0+IHRoaXMuY29uZmlndXJhdGlvbi5leHBvcnRYc2x4QnlSb3cgJiYgdGhpcy5oYXNQZXJtaXNzaW9uKCdleHBvcnQnKSxcbiAgICAgICAgaWNvbjogJ2ZhLWRvd25sb2FkJyxcbiAgICAgICAgdG9vbHRpcDogJ0V4cG9ydGFyIFJlZ2lzdHJvJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGFjdGlvbjogJ2FkZENvbW1lbnQnLFxuICAgICAgICBjb25kaXRpb25TaG93SGVhZGVyOiAoKSA9PlxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5hZGRDb21tZW50ICYmXG4gICAgICAgICAgdGhpcy5oYXNQZXJtaXNzaW9uKCdhZGRDb21tZW50JyksXG4gICAgICAgIGNvbmRpdGlvbjogKCkgPT4gdGhpcy5jb25maWd1cmF0aW9uLmFkZENvbW1lbnQgJiYgdGhpcy5oYXNQZXJtaXNzaW9uKCdhZGRDb21tZW50JyksXG4gICAgICAgIGljb246ICdmYS1jb21tZW50cycsXG4gICAgICAgIHRvb2x0aXA6ICdBZ3JlZ2FyIENvbWVudGFyaW8nLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYWN0aW9uOiAnZGVsZXRlJyxcbiAgICAgICAgY29uZGl0aW9uU2hvd0hlYWRlcjogKCkgPT5cbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93cy5sZW5ndGggPiAwICYmIHRoaXMuY29uZmlndXJhdGlvbi5kZWxldGUgJiYgdGhpcy5oYXNQZXJtaXNzaW9uKCdkZWxldGUnKSxcbiAgICAgICAgY29uZGl0aW9uOiAoKSA9PiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVsZXRlICYmIHRoaXMuaGFzUGVybWlzc2lvbignZGVsZXRlJyksXG4gICAgICAgIGljb246ICdmYS10cmFzaCcsXG4gICAgICAgIHRvb2x0aXA6ICdFbGltaW5hcicsXG4gICAgICB9LFxuICAgIF07XG4gIH1cblxuXG4gIGhhc1Blcm1pc3Npb24ocGVybWlzc2lvbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaGFzQWNjZXNzVG9BbGwpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiB0aGlzLnJvbGVzQW5kUGVybWlzc2lvblVzZXI/LltwZXJtaXNzaW9uXSA/PyBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIGdldERhdGVUYWJsZUJ5VXJsKCkge1xuICAgIHRoaXMudmFsaWRhclBhcmFtcygpO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmh0dHAucG9zdERhdGFCb2R5KFxuICAgICAgdGhpcy51cmwsXG4gICAgICB0aGlzLmZpbHRlcnNQb3N0LFxuICAgICAgdGhpcy5wYXJhbXNcbiAgICApO1xuICB9XG5cbiAgdmFsaWRhclBhcmFtcygpIHtcbiAgICB0aGlzLnBhcmFtcyA9IHRoaXMuZnVuY3Rpb25FdGVyLnJlbW92ZUR1cGxpY2F0ZU9iamVjdHModGhpcy5wYXJhbXMpO1xuICAgIGlmICh0aGlzLnBhcmFtcykge1xuICAgICAgaWYgKCF0aGlzLnBhcmFtcy5maW5kKCh4KSA9PiB4LmlkID09ICdwYWdlJykpIHtcbiAgICAgICAgdGhpcy5wYXJhbXMucHVzaCh7IGlkOiAncGFnZScsIHZhbHVlOiAnMCcgfSk7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMucGFyYW1zLmZpbmQoKHgpID0+IHguaWQgPT0gJ3Blcl9wYWdlJykpIHtcbiAgICAgICAgdGhpcy5wYXJhbXMucHVzaCh7IGlkOiAncGVyX3BhZ2UnLCB2YWx1ZTogdGhpcy5wYWdlU2l6ZSB9KTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5wYXJhbXMuZmluZCgoeCkgPT4geC5pZCA9PSAnZmlsdGVyJykpIHtcbiAgICAgICAgdGhpcy5wYXJhbXMucHVzaCh7IGlkOiAnZmlsdGVyJywgdmFsdWU6ICcnIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHZhbGlkYXRlUnVsZXMoKSB7XG4gICAgZm9yIChjb25zdCBbaW5kZXgsIGNvbHVtbnNdIG9mIHRoaXMuY29sdW1ucy5lbnRyaWVzKCkpIHtcbiAgICAgIGZvciAoY29uc3QgW2luZGV4RGF0YSwgZWxlbWVudF0gb2YgdGhpcy5kYXRhLmVudHJpZXMoKSkge1xuICAgICAgICBpZiAoY29sdW1ucy5ydWxlcykge1xuICAgICAgICAgIGZvciAoY29uc3QgcnVsZSBvZiBjb2x1bW5zLnJ1bGVzKSB7XG4gICAgICAgICAgICBpZiAocnVsZS5ydWxlID09IGVudW1SdWxlc1snPT0nXSkge1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZWxlbWVudFtjb2x1bW5zLklEXSAmJlxuICAgICAgICAgICAgICAgIGVsZW1lbnRbY29sdW1ucy5JRF0udG9TdHJpbmcoKSA9PSBydWxlLnZhbHVlUnVsZS50b1N0cmluZygpXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YVtpbmRleERhdGFdW2NvbHVtbnMuSURdID0gcnVsZS52YWx1ZUFjdGlvbjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb2x1bW5WYWx1ZSA9IGVsZW1lbnRbY29sdW1ucy5JRF07XG4gICAgICAgIGlmIChjb2x1bW5zLnR5cGUgPT0gJ2ZlY2hhJyB8fCBjb2x1bW5zLnR5cGUgPT0gJ2RhdGUnKVxuICAgICAgICAgIHRoaXMuZGF0YVtpbmRleERhdGFdW2NvbHVtbnMuSURdID1cbiAgICAgICAgICAgIHRoaXMuZnVuY3Rpb25FdGVyLmRhdGVJc28oY29sdW1uVmFsdWUpO1xuICAgICAgICBpZiAoY29sdW1ucy50eXBlID09ICdkYXRlV2l0aFRpbWUnKVxuICAgICAgICAgIHRoaXMuZGF0YVtpbmRleERhdGFdW2NvbHVtbnMuSURdID0gdGhpcy5mdW5jdGlvbkV0ZXIuZGF0ZVdpdGhUaW1lKFxuICAgICAgICAgICAgY29sdW1uVmFsdWU/LnRvU3RyaW5nKCkgPz8gY29sdW1uVmFsdWVcbiAgICAgICAgICApO1xuICAgICAgICBpZiAoY29sdW1ucy50eXBlID09ICdjdXJyZW5jeScpXG4gICAgICAgICAgdGhpcy5kYXRhW2luZGV4RGF0YV1bY29sdW1ucy5JRF0gPVxuICAgICAgICAgICAgSW50bC5OdW1iZXJGb3JtYXQoJ2VzLUNPJykuZm9ybWF0KGNvbHVtblZhbHVlKTtcbiAgICAgICAgaWYgKGNvbHVtbnMudHlwZSA9PSAnYm9vbGVhbicpXG4gICAgICAgICAgdGhpcy5kYXRhW2luZGV4RGF0YV1bY29sdW1ucy5JRF0gPSBjb2x1bW5WYWx1ZSA9PSAxID8gJ1NpJyA6ICdObyc7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzLmRhdGEpIHtcbiAgICAgIGlmICh0aGlzLmRhdGEpIHtcbiAgICAgICAgdGhpcy5kYXRhLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgIHRoaXMuY2hlY2tib3hzW3Jvd1t0aGlzLmNvbmZpZ3VyYXRpb24ucHJpbWFyeUtleV1dID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGhpcy5vcmlnaW5hbERhdGEubGVuZ3RoID09IDApIHtcbiAgICAgICAgICBpZiAodGhpcy5kYXRhLmxlbmd0aCAhPSAwKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLm9yaWdpbmFsRGF0YS5wdXNoKGVsZW1lbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnZhbGlkYXRlUnVsZXMoKTtcbiAgICB9XG5cbiAgfVxuXG4gIGV2YWx1YXRlUnVsZXModmFsdWU6IGFueSwgcnVsZXM6IGFueVtdKTogYm9vbGVhbiB7XG4gICAgaWYgKCFydWxlcykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGxldCBhY3RpdmUgPSBmYWxzZTtcbiAgICBjb25zdCBhbGxvd2VkRXh0ZW5zaW9ucyA9IFtcbiAgICAgICAgJy5wbmcnLCAnLmpwZWcnLCAnLmpwZycsICcuZ2lmJywgJy5ibXAnLCAnLndlYnAnLCAnLnN2ZycsXG4gICAgICAgICcucGRmJywgJy5kb2MnLCAnLmRvY3gnLCAnLnhscycsICcueGxzeCcsICcuZG9jdW1lbnQnXG4gICAgXTtcbiAgICBydWxlcy5mb3JFYWNoKHJ1bGUgPT4ge1xuICAgICAgICBpZiAocnVsZS5hY3Rpb24gPT09IGVudW1BY3Rpb25zLlNIT1dfRklMRV9JQ09OICYmIHZhbHVlICYmIHZhbHVlLmluY2x1ZGVzKCcvZG9jcy8nKSkge1xuICAgICAgICAgICAgY29uc3QgbG93ZXJWYWx1ZSA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGV4dCBvZiBhbGxvd2VkRXh0ZW5zaW9ucykge1xuICAgICAgICAgICAgICAgIGlmIChsb3dlclZhbHVlLmluY2x1ZGVzKGV4dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGFjdGl2ZTtcbn1cblxuICBvbkZpbGVJY29uQ2xpY2soZXZlbnQsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmZpbGVJY29uQ2xpY2suZW1pdCh2YWx1ZSk7XG4gIH1cblxuICBjbGlja09uUm9XKHJvd0RhdGEpIHtcbiAgICBsZXQgc3RhdGUgPSB0aGlzLmNoZWNrYm94c1tyb3dEYXRhW3RoaXMuY29uZmlndXJhdGlvbi5wcmltYXJ5S2V5XV07XG5cbiAgICBpZiAoIXRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RhYmxlKSB7XG4gICAgICB0aGlzLmNsZWFyQ2hlY2tib3hlcygpO1xuICAgIH1cblxuICAgIHRoaXMuc2VsZWN0aW9uKHJvd0RhdGEsIHsgY2hlY2tlZDogIXN0YXRlIH0sIHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RhYmxlKTtcbiAgICB0aGlzLmNsaWNrUm93LmVtaXQocm93RGF0YSk7XG4gIH1cblxuICBzaG93TWVudSgkZXZlbnQpIHtcbiAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICBhY3Rpb24oYWN0aW9uLCByb3cgPSBudWxsKSB7XG4gICAgdmFyIGN1cnJlbnRSb3cgPSByb3cgPyBbcm93XSA6IHRoaXMuc2VsZWN0ZWRSb3dzO1xuXG4gICAgc3dpdGNoIChhY3Rpb24pIHtcbiAgICAgIGNhc2UgJ2FkZCc6XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uYWRkUGVyKSB7XG4gICAgICAgICAgdGhpcy5hZGQuZW1pdCh0aGlzLmxlbmd0aCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kaWFsb2dcbiAgICAgICAgICAgIC5vcGVuKFRhYmxlTW9kYWxDb21wb25lbnQsIHtcbiAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgICBjb2x1bW5zOiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuY29sdW1ucykpLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB3aWR0aDogJzYwdmgnLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hZnRlckNsb3NlZCgpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkLmVtaXQocmVzdWx0KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnZWRpdCc6XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uZWRpdFBlcikge1xuICAgICAgICAgIHRoaXMuZWRpdC5lbWl0KGN1cnJlbnRSb3cpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxldCBjb2x1bW5zOiBhbnk7XG4gICAgICAgICAgY29sdW1ucyA9IHRoaXMuY29sdW1ucztcblxuICAgICAgICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoY3VycmVudFJvd1swXSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChjb2x1bW4uSUQgPT0ga2V5KSB7XG4gICAgICAgICAgICAgICAgY29sdW1uc1tpbmRleF0udmFsdWUgPSBjdXJyZW50Um93WzBdW2tleV07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdGhpcy5kaWFsb2dcbiAgICAgICAgICAgIC5vcGVuKFRhYmxlTW9kYWxDb21wb25lbnQsIHtcbiAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgICBjb2x1bW5zOiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuY29sdW1ucykpLFxuICAgICAgICAgICAgICAgIHZhbHVlczogY3VycmVudFJvd1swXSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgd2lkdGg6ICc2MHZoJyxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYWZ0ZXJDbG9zZWQoKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVkaXQuZW1pdCh7IG5ldzogcmVzdWx0LCBvbGQ6IGN1cnJlbnRSb3dbMF0gfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2RlbGV0ZSc6XG4gICAgICAgIHRoaXMuZGVsZXRlLmVtaXQoY3VycmVudFJvdyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncHJpbnQnOlxuICAgICAgICB0aGlzLnByaW50LmVtaXQoY3VycmVudFJvdyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYWN0aXZlJzpcbiAgICAgICAgdGhpcy5hY3RpdmUuZW1pdChjdXJyZW50Um93KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdleHBvcnRUb0V4Y2VsJzpcbiAgICAgICAgdGhpcy5leHBvcnRUb0V4Y2VsKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZXhwb3J0VG9FeGNlbEJ5Um93JzpcbiAgICAgICAgdGhpcy5leHBvcnRYc2x4QnlSb3cuZW1pdChjdXJyZW50Um93KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd2aWV3JzpcbiAgICAgICAgdGhpcy52aWV3LmVtaXQoY3VycmVudFJvdyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY2xvc2VPcmRlcic6XG4gICAgICAgIHRoaXMuY2xvc2VPcmRlci5lbWl0KGN1cnJlbnRSb3cpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3BhY2tPZmYnOlxuICAgICAgICB0aGlzLnBhY2tPZmYuZW1pdChjdXJyZW50Um93KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdhZHZhbmNlJzpcbiAgICAgICAgdGhpcy5hZHZhbmNlLmVtaXQoY3VycmVudFJvdyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaW5jb21lJzpcbiAgICAgICAgdGhpcy5pbmNvbWUuZW1pdCh0aGlzLmxlbmd0aCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZXhpdCc6XG4gICAgICAgIHRoaXMuZXhpdC5lbWl0KHRoaXMubGVuZ3RoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzZW5kRW1haWwnOlxuICAgICAgICB0aGlzLnNlbmRFbWFpbC5lbWl0KGN1cnJlbnRSb3cpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2FkZENvbW1lbnQnOlxuICAgICAgICB0aGlzLmFkZENvbW1lbnQuZW1pdChjdXJyZW50Um93KTtcbiAgICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBzaG91bGRTaG93TWVudSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5idXR0b25zQ29uZmlnLnNvbWUoKGJ0bikgPT4gYnRuLmNvbmRpdGlvbigpKTtcbiAgfVxuXG4gIGV4cG9ydFRvRXhjZWwoKSB7XG4gICAgbGV0IHBhcmFtcyA9IFtdO1xuICAgIGlmICh0aGlzLnVybCAmJiB0aGlzLnBhcmFtcykge1xuICAgICAgcGFyYW1zID0gWy4uLnRoaXMucGFyYW1zXTtcblxuICAgICAgaWYgKHRoaXMueHNseFBhcmFtcykge1xuICAgICAgICBwYXJhbXMgPSBbLi4ucGFyYW1zLCAuLi50aGlzLnhzbHhQYXJhbXNdO1xuICAgICAgfVxuICAgICAgbGV0IGkgPSBwYXJhbXMuZmluZEluZGV4KCh4KSA9PiB4LmlkID09ICdwZXJfcGFnZScpO1xuICAgICAgaWYgKGkgIT0gLTEpIHBhcmFtc1tpXS52YWx1ZSA9IDEwMDAwMDAwMDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uLmV4cG9ydFhzbHhXaXRoUGFnZXMpIHtcbiAgICAgIHRoaXMuZXhwb3J0U2VydmljZS5nZW5lcmF0ZUV4Y2VsV2l0aFNoZWV0czxhbnk+KFxuICAgICAgICB0aGlzLnRpdGxlLFxuICAgICAgICB0aGlzLmhlYWRlckZpbGVYbHNtLFxuICAgICAgICB0aGlzLnRpdGxlLFxuICAgICAgICB0aGlzLnVybCA/IG51bGwgOiB0aGlzLmRhdGEsXG4gICAgICAgIHRoaXMudXJsLFxuICAgICAgICBwYXJhbXMsXG4gICAgICAgIHRoaXMuZmlsdGVyc1Bvc3QsXG4gICAgICAgIHRoaXMueHNseFRpdGxlRmllbGRzLFxuICAgICAgICB0aGlzLnhzbHhTaGVldE5hbWVGaWVsZHMsXG4gICAgICAgIHRoaXMueHNseEJvZHlGaWVsZHNcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZXhwb3J0U2VydmljZS5nZW5lcmF0ZVRvWGxzeDxhbnk+KFxuICAgICAgICB0aGlzLnRpdGxlLFxuICAgICAgICB0aGlzLmhlYWRlckZpbGVYbHNtLFxuICAgICAgICB0aGlzLnRpdGxlLFxuICAgICAgICB0aGlzLnVybCA/IG51bGwgOiB0aGlzLmRhdGEsXG4gICAgICAgIHRoaXMudXJsLFxuICAgICAgICBwYXJhbXMsXG4gICAgICAgIHRoaXMuZmlsdGVyc1Bvc3RcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgc2VsZWN0aW9uKHJvdywgJGV2ZW50LCBlbWl0RXZlbnQgPSB0cnVlKSB7XG4gICAgdGhpcy5jaGVja2JveHNbcm93W3RoaXMuY29uZmlndXJhdGlvbi5wcmltYXJ5S2V5XV0gPSAkZXZlbnQuY2hlY2tlZDtcbiAgICBpZiAoJGV2ZW50LmNoZWNrZWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzLnB1c2gocm93KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGluZGV4ID0gdGhpcy5zZWxlY3RlZFJvd3MuaW5kZXhPZihyb3cpO1xuICAgICAgdGhpcy5zZWxlY3RlZFJvd3Muc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdGFibGUgJiYgZW1pdEV2ZW50KSB7XG4gICAgICB0aGlzLnNlbGVjdGVkLmVtaXQodGhpcy5zZWxlY3RlZFJvd3MpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNlbGVjdGVkUm93cy5sZW5ndGggPT0gdGhpcy5kYXRhLmxlbmd0aCkge1xuICAgICAgdGhpcy5zZWxlY3RBbGwgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdEFsbCA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzLmxlbmd0aCA+IDAgJiZcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzLmxlbmd0aCA8IHRoaXMuZGF0YS5sZW5ndGhcbiAgICApIHtcbiAgICAgIHRoaXMuaW5kZXRlcm1pbmF0ZVN0YXRlID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbmRldGVybWluYXRlU3RhdGUgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBjbGlja2VkKCRldmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgYXN5bmMgc2VsZXRlY0FsbEV2ZW50KCRldmVudCkge1xuICAgIHRoaXMuaW5kZXRlcm1pbmF0ZVN0YXRlID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5zZWxlY3RBbGwpIHtcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMuY2hlY2tib3hzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgdGhpcy5jaGVja2JveHNba2V5XSA9IHRydWU7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5zZWxlY3RlZFJvd3MgPSBbXTtcbiAgICAgIGxldCBkYXRhID0gdGhpcy5kYXRhO1xuICAgICAgZGF0YS5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzLnB1c2goZWxlbWVudCk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5zZWxlY3RlZC5lbWl0KHRoaXMuc2VsZWN0ZWRSb3dzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jbGVhckNoZWNrYm94ZXMoKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWQuZW1pdCh0aGlzLnNlbGVjdGVkUm93cyk7XG4gICAgfVxuXG4gICAgbGV0IHNlcnZpY2UgPSBhd2FpdCB0aGlzLmdldERhdGVUYWJsZUJ5VXJsKCk7XG4gICAgdGhpcy5kYXRhID0gc2VydmljZVsnZGF0YSddO1xuICAgIHRoaXMuaW50ZXJuYWxEYXRhLmVtaXQoc2VydmljZSk7XG4gICAgdGhpcy5sZW5ndGggPSBzZXJ2aWNlWydjb3VudCddO1xuICAgIHRoaXMudmFsaWRhdGVSdWxlcygpO1xuICB9XG5cbiAgY2xlYXJDaGVja2JveGVzKCkge1xuICAgIE9iamVjdC5rZXlzKHRoaXMuY2hlY2tib3hzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIHRoaXMuY2hlY2tib3hzW2tleV0gPSBmYWxzZTtcbiAgICB9KTtcblxuICAgIHRoaXMuc2VsZWN0ZWRSb3dzID0gW107XG4gIH1cblxuICBjaGFuZ2VGaWx0ZXJzKCkge1xuICAgIGlmICh0aGlzLnBhcmFtcylcbiAgICAgIHRoaXMucGFyYW1zLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgaWYgKGVsZW1lbnQuaWQgPT0gJ2ZpbHRlcicpIHtcbiAgICAgICAgICBlbGVtZW50LnZhbHVlID0gdGhpcy5maWx0ZXJzO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYXBwbHlGaWx0ZXJzKCRldmVudD86IGFueSkge1xuICAgIGlmICgkZXZlbnQpIHRoaXMuZmlsdGVyc1Bvc3QgPSAkZXZlbnQ7XG4gICAgaWYgKHRoaXMudXJsKSB7XG4gICAgICBsZXQgcmVzOiBhbnkgPSBhd2FpdCB0aGlzLmdldERhdGVUYWJsZUJ5VXJsKCk7XG4gICAgICB0aGlzLmRhdGEgPSByZXNbJ2RhdGEnXTtcbiAgICAgIHRoaXMudmFsaWRhdGVSdWxlcygpO1xuICAgICAgdGhpcy5sZW5ndGggPSByZXNbJ2NvdW50J107XG4gICAgICB0aGlzLmludGVybmFsRGF0YS5lbWl0KHJlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGF0YSA9IHRoaXMub3JpZ2luYWxEYXRhLmZpbHRlcigoZGF0YSkgPT4ge1xuICAgICAgICBmb3IgKGxldCBrZXkgb2YgT2JqZWN0LmtleXMoZGF0YSkpIHtcbiAgICAgICAgICBsZXQgcmVzdWx0ID0gZGF0YVtrZXldXG4gICAgICAgICAgICAudG9TdHJpbmcoKVxuICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgIC5pbmNsdWRlcyh0aGlzLmZpbHRlcnMudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VQYWdlKCRldmVudCkge1xuICAgIHRoaXMucGFyYW1zLmZvckVhY2goKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICBpZiAoZWxlbWVudC5pZCA9PSAncGVyX3BhZ2UnKSB7XG4gICAgICAgIGVsZW1lbnQudmFsdWUgPSAkZXZlbnQucGFnZVNpemU7XG4gICAgICB9XG4gICAgICBpZiAoZWxlbWVudC5pZCA9PSAncGFnZScpIHtcbiAgICAgICAgZWxlbWVudC52YWx1ZSA9ICRldmVudC5wYWdlSW5kZXg7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcbiAgfVxufVxuXG5lbnVtIGVudW1SdWxlcyB7XG4gICc+JyxcbiAgJzwnLFxuICAnPT0nLFxuICAnIT0nLFxufVxuXG5lbnVtIGVudW1BY3Rpb25zIHtcbiAgUkVQTEFDRSxcbiAgQURELFxuICBSRU1PVkUsXG4gIFNIT1dfRklMRV9JQ09OXG59IiwiPGRpdiBjbGFzcz1cImNvbnRlbmVkb3ItdGFibGFcIj5cbiAgPGRpdiBjbGFzcz1cInRhYmxlLXRpdGxlLW1vYmlsZVwiICpuZ0lmPVwiIWNvbmZpZ3VyYXRpb24uaGlkZVRpdGxlXCI+XG4gICAgPHN0cm9uZz57eyB0aXRsZSB9fTwvc3Ryb25nPlxuICA8L2Rpdj5cblxuICA8YXBwLWZpbHRlcnMgW2hlYWRlckZpbHRlcnNdPVwiaGVhZGVyRmlsdGVyc1wiIChhcHBseUZpbHRlcnMpPVwiYXBwbHlGaWx0ZXJzKCRldmVudClcIj5cbiAgPC9hcHAtZmlsdGVycz5cblxuICA8ZGl2IGNsYXNzPVwicm93IG1iLTJcIiBzdHlsZT1cIndpZHRoOiA5OSVcIj5cbiAgICA8ZGl2ICpuZ0lmPVwiIWNvbmZpZ3VyYXRpb24uaGlkZUZpbHRlclwiIGNsYXNzPVwiY29sLTEyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmaWx0ZXJcIj5cbiAgICAgICAgPG1hdC1sYWJlbD5GaWx0cmFyPC9tYXQtbGFiZWw+XG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwiZmlsdGVyc1wiIChrZXl1cCk9XCJjaGFuZ2VGaWx0ZXJzKClcIiBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cIkZpbHRyYXJcIiAvPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImNvbC0xMiBkLWZsZXggZmxleC1yb3cganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIHAtMlwiPlxuICAgIDxkaXYgY2xhc3M9XCJkLW5vbmUgZC1tZC1ibG9jayBtZS1tZC0zIHctMTAwXCIgc3R5bGU9XCJmb250LXNpemU6IDFyZW1cIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiZnctYm9sZFwiICpuZ0lmPVwic2VsZWN0ZWRSb3dzLmxlbmd0aCA+IDAgJiYgY29uZmlndXJhdGlvbi5zZWxlY3RhYmxlXCI+XG4gICAgICAgIHt7IHNlbGVjdGVkUm93cy5sZW5ndGggfX1cbiAgICAgICAge3sgc2VsZWN0ZWRSb3dzLmxlbmd0aCA9PT0gMSA/ICdTZWxlY2Npb25hZG8nIDogJ1NlbGVjY2lvbmFkb3MnIH19XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIHctMTAwXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnV0dG9uc1RhYmxlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDx0YWJsZSBjbGFzcz1cInRhYmxlX0V0ZXIgdGFibGUtaG92ZXJcIj5cbiAgICA8dGhlYWQgY2xhc3M9XCJkYXJrXCI+XG4gICAgICA8dHI+XG4gICAgICAgIDx0aCAqbmdJZj1cImNvbmZpZ3VyYXRpb24uc2VsZWN0YWJsZVwiIHN0eWxlPVwianVzdGlmeS1jb250ZW50OiBjZW50ZXJcIj5cbiAgICAgICAgICA8bWF0LWNoZWNrYm94IGNvbG9yPVwicHJpbWFyeVwiIChjaGFuZ2UpPVwic2VsZXRlY0FsbEV2ZW50KCRldmVudClcIiBbKG5nTW9kZWwpXT1cInNlbGVjdEFsbFwiXG4gICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJpbmRldGVybWluYXRlU3RhdGVcIj5cbiAgICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRoIFtjbGFzc109XCJjb2x1bW4uc3R5bGU/Lm1vdmlsXCIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5zXCIgc2NvcGU9XCJjb2xcIiBbbmdTdHlsZV09XCJjb2x1bW4uc3R5bGVcIj5cbiAgICAgICAgICB7eyBjb2x1bW4ubGFiZWwgfX1cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRoICpuZ0lmPVwic2hvdWxkU2hvd01lbnUoKVwiPjwvdGg+XG4gICAgICA8L3RyPlxuICAgIDwvdGhlYWQ+XG4gICAgPHRib2R5IGNsYXNzPVwibWF0LWVsZXZhdGlvbi16M1wiPlxuICAgICAgPHRyIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCIgKm5nRm9yPVwibGV0IHJvdyBvZiBkYXRhXCIgKGNsaWNrKT1cImNsaWNrT25Sb1cocm93KVwiXG4gICAgICAgIFtjbGFzc109XCJjaGVja2JveHNbcm93W2NvbmZpZ3VyYXRpb24ucHJpbWFyeUtleV1dID8gJ3NlbGVjdGVkLXJvdycgOiAnJ1wiPlxuICAgICAgICA8dGggKm5nSWY9XCJjb25maWd1cmF0aW9uLnNlbGVjdGFibGVcIiBzdHlsZT1cImp1c3RpZnktY29udGVudDogY2VudGVyXCI+XG4gICAgICAgICAgPG1hdC1jaGVja2JveCBjb2xvcj1cInByaW1hcnlcIiBbKG5nTW9kZWwpXT1cImNoZWNrYm94c1tyb3dbY29uZmlndXJhdGlvbi5wcmltYXJ5S2V5XV1cIiAoY2xpY2spPVwiY2xpY2tlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwic2VsZWN0aW9uKHJvdywgJGV2ZW50KVwiPlxuICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGggW2NsYXNzXT1cImNvbHVtbi5zdHlsZT8ubW92aWxcIiBbbmdTdHlsZV09XCJjb2x1bW4uc3R5bGVcIiBzY29wZT1cInJvd1wiICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uc1wiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJcbiAgICAgICAgICAgICAgY29sdW1uLnR5cGUgPT09ICdmaWxlJyB8fFxuICAgICAgICAgICAgICAgIChjb2x1bW4ucnVsZXMgJiYgZXZhbHVhdGVSdWxlcyhyb3dbY29sdW1uLklEXSwgY29sdW1uLnJ1bGVzKSk7XG4gICAgICAgICAgICAgIGVsc2UgZGlzcGxheVZhbHVlXG4gICAgICAgICAgICBcIj5cbiAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cIm9uRmlsZUljb25DbGljaygkZXZlbnQsIHJvd1tjb2x1bW4uSURdKVwiPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWZpbGVcIiBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiPjwvaT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGlzcGxheVZhbHVlPlxuICAgICAgICAgICAge3sgcm93W2NvbHVtbi5JRF0gfX1cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L3RoPlxuXG4gICAgICAgIDx0aCAqbmdJZj1cInNob3VsZFNob3dNZW51KClcIiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgc3R5bGU9XCJvdmVyZmxvdzogdmlzaWJsZTtcIj5cbiAgICAgICAgICA8bWF0LWljb24gKGNsaWNrKT1cInNob3dNZW51KCRldmVudClcIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVwiIG1hdFJpcHBsZSBjbGFzcz1cIm1lbnVfbW9yZV92ZXJ0XCJcbiAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwiZmFsc2VcIiBhcmlhLWxhYmVsPVwiRXhhbXBsZSBkZWxldGUgaWNvblwiPm1vcmVfdmVydDwvbWF0LWljb24+XG5cbiAgICAgICAgICA8bWF0LW1lbnUgI21lbnU9XCJtYXRNZW51XCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBidG4gb2YgYnV0dG9uc0NvbmZpZ1wiPlxuICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiYnRuLmNvbmRpdGlvbigpXCIgKGNsaWNrKT1cImFjdGlvbihidG4uYWN0aW9uLCByb3cpXCIgbWF0LW1lbnUtaXRlbVxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciB3LTEwMFwiPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEge3sgYnRuLmljb24gfX0gYnRuLWFjY2lvblwiIHN0eWxlPVwiZm9udC1zaXplOiAxMjAlOyBtYXJnaW4tcmlnaHQ6IDEwcHhcIj48L2k+XG4gICAgICAgICAgICAgICAge3sgYnRuLnRvb2x0aXAgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICA8L3RoPlxuICAgICAgPC90cj5cbiAgICA8L3Rib2R5PlxuICA8L3RhYmxlPlxuXG4gIDxkaXYgKm5nSWY9XCJsZW5ndGggPT0gMCAmJiBkYXRhLmxlbmd0aCA9PSAwXCIgc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweFwiPlxuICAgIDxzdHJvbmc+Tm8gc2UgZW5jb250csOzIGluZm9ybWFjacOzbjwvc3Ryb25nPlxuICA8L2Rpdj5cblxuICA8bWF0LXBhZ2luYXRvciAqbmdJZj1cInBhZ2luYXRvckFjdGl2ZVwiIFtsZW5ndGhdPVwibGVuZ3RoXCIgW3BhZ2VTaXplXT1cInBhZ2VTaXplXCIgW3BhZ2VTaXplT3B0aW9uc109XCJwYWdlU2l6ZU9wdGlvbnNcIlxuICAgIHNob3dGaXJzdExhc3RCdXR0b25zIChwYWdlKT1cImNoYW5nZVBhZ2UoJGV2ZW50KVwiPjwvbWF0LXBhZ2luYXRvcj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2J1dHRvbnNUYWJsZSBsZXQtZm9udFNpemU9XCJmb250U2l6ZVwiIGxldC1tYXJnaW5SaWdodD1cIm1hcmdpblJpZ2h0XCIgY2xhc3M9XCJidXR0b24tdGFibGVcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYnRuIG9mIGJ1dHRvbnNDb25maWdcIj5cbiAgICA8ZGl2ICpuZ0lmPVwiYnRuLmNvbmRpdGlvblNob3dIZWFkZXIoKVwiIChjbGljayk9XCJhY3Rpb24oYnRuLmFjdGlvbilcIiBtYXRUb29sdGlwPVwie3sgYnRuLnRvb2x0aXAgfX1cIlxuICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIj5cbiAgICAgIDxpIGNsYXNzPVwiZmEge3sgYnRuLmljb24gfX0gYnRuLWFjY2lvblwiIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAnZm9udC1zaXplJzogZm9udFNpemUgPyBmb250U2l6ZSA6ICcxNzAlJyxcbiAgICAgICAgICAnbWFyZ2luLXJpZ2h0JzogbWFyZ2luUmlnaHQgPyBtYXJnaW5SaWdodCA6ICcxNXB4J1xuICAgICAgICB9XCI+PC9pPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+Il19
747
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvYnJhaW5sb3Blci11aS9jb21wb25lbnRzL2RhdGEtdGFibGUvZGF0YS10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvYnJhaW5sb3Blci11aS9jb21wb25lbnRzL2RhdGEtdGFibGUvZGF0YS10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFdEUsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFHWixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0ZBQWdGLENBQUM7QUFFckgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBSzNELE9BQU8sRUFBZ0IsWUFBWSxFQUFFLE1BQU0sK0JBQStCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUUzRSxNQUFNLGlCQUFpQixHQUFHLENBQUMsSUFBWSxFQUFFLFFBQWdCLEVBQUUsTUFBYyxFQUFFLEVBQUU7SUFDM0UsSUFBSSxNQUFNLElBQUksQ0FBQyxJQUFJLFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNqQyxPQUFPLFFBQVEsTUFBTSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUU3QixNQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsUUFBUSxDQUFDO0lBRW5DLE1BQU0sUUFBUSxHQUNaLFVBQVUsR0FBRyxNQUFNO1FBQ2pCLENBQUMsQ0FBQyxJQUFJLENBQUMs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LFdBS0o7QUFMRCxXQUFLLFdBQVc7SUFDZCxtREFBTyxDQUFBO0lBQ1AsMkNBQUcsQ0FBQTtJQUNILGlEQUFNLENBQUE7SUFDTixpRUFBYyxDQUFBO0FBQ2hCLENBQUMsRUFMSSxXQUFXLEtBQVgsV0FBVyxRQUtmIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2NyZWVuU2l6ZVV0aWwgfSBmcm9tICcuLy4uLy4uLy4uL3NlcnZpY2VzL3NjcmVlbi1zaXplLXV0aWwnO1xuaW1wb3J0IHsgRXhwb3J0RGF0YVNlcnZpY2UgfSBmcm9tICcuLy4uLy4uLy4uL3NlcnZpY2VzL2V4cG9ydC1kYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBPbkluaXQsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IFRhYmxlTW9kYWxDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9icmFpbmxvcGVyLXVpL2NvbXBvbmVudHMvZGF0YS10YWJsZS90YWJsZS1tb2RhbC90YWJsZS1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSHR0cFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9odHRwLnNlcnZpY2UnO1xuaW1wb3J0IHsgTWF0UGFnaW5hdG9yIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbWVzc2FnZS5zZXJ2aWNlJztcbmltcG9ydCB7IEZ1bmN0aW9uc1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9mdW5jdGlvbnMuc2VydmljZSc7XG5pbXBvcnQgeyBNYXRQYWdpbmF0b3JJbnRsIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcbmltcG9ydCB7IFRvb2x0aXBQb3NpdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xuaW1wb3J0IHsgSVBlcm1pc3Npb25zLCBtb2R1bGVzQnlSb2wgfSBmcm9tICdAZWRnYXJ6b245My9icmFpbmxvcGVyLXNoYXJlZCc7XG5cbmNvbnN0IHNwYW5pc2hSYW5nZUxhYmVsID0gKHBhZ2U6IG51bWJlciwgcGFnZVNpemU6IG51bWJlciwgbGVuZ3RoOiBudW1iZXIpID0+IHtcbiAgaWYgKGxlbmd0aCA9PSAwIHx8IHBhZ2VTaXplID09IDApIHtcbiAgICByZXR1cm4gYDAgZGUgJHtsZW5ndGh9YDtcbiAgfVxuXG4gIGxlbmd0aCA9IE1hdGgubWF4KGxlbmd0aCwgMCk7XG5cbiAgY29uc3Qgc3RhcnRJbmRleCA9IHBhZ2UgKiBwYWdlU2l6ZTtcblxuICBjb25zdCBlbmRJbmRleCA9XG4gICAgc3RhcnRJbmRleCA8IGxlbmd0aFxuICAgICAgPyBNYXRoLm1pbihzdGFydEluZGV4ICsgcGFnZVNpemUsIGxlbmd0aClcbiAgICAgIDogc3RhcnRJbmRleCArIHBhZ2VTaXplO1xuXG4gIHJldHVybiBgJHtzdGFydEluZGV4ICsgMX0gLSAke2VuZEluZGV4fSBkZSAke2xlbmd0aH1gO1xufTtcblxuY29uc3Qgcm9sZXNBbmRQZXJtaXNzaW9ucyA9IG1vZHVsZXNCeVJvbFxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZGF0YS10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhLXRhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZGF0YS10YWJsZS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBEYXRhVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIHRpdGxlO1xuICBASW5wdXQoKSBjb2x1bW5zO1xuICBASW5wdXQoKSBkYXRhOiBhbnkgPSBbXTtcbiAgQElucHV0KCkgY29tYm87czogYW55ID0gW107XG4gIEBJbnB1dCgpIGNvbmZpZ3VyYXRpb246IGFueSA9IHtcbiAgICBhZGQ6IGZhbHNlLFxuICAgIGVkaXQ6IGZhbHNlLFxuICAgIGRlbGV0ZTogZmFsc2UsXG4gICAgYWN0aXZlOiBmYWxzZSxcbiAgICBzZWxlY3RhYmxlOiBmYWxzZSxcbiAgICBwcmludDogZmFsc2UsXG4gICAgYWRkUGVyOiBmYWxzZSxcbiAgICBlZGl0UGVyOiBmYWxzZSxcbiAgICBwcmltYXJ5S2V5OiAnaWQnLFxuICAgIGV4cG9ydFhzbHg6IGZhbHNlLFxuICAgIGhpZGVUaXRsZTogdHJ1ZSxcbiAgICBoaWRlRmlsdGVyOiB0cnVlLFxuICAgIG5vdEluaXRpYWxpemU6IGZhbHNlLFxuICAgIGV4cG9ydFhzbHhCeVJvdzogZmFsc2UsXG4gICAgZXhwb3J0WHNseFdpdGhQYWdlczogZmFsc2UsXG4gICAgdmlldzogZmFsc2UsXG4gICAgY2xvc2VPcmRlcjogZmFsc2UsXG4gICAgcGFja09mZjogZmFsc2UsXG4gICAgYWR2YW5jZTogdHJ1ZSxcbiAgICBhZHZhbmNlTGFiZWw6IG51bGwsXG4gICAgaW5jb21lOiBmYWxzZSxcbiAgICBleGl0OiBmYWxzZSxcbiAgICBzZW5kRW1haWw6IGZhbHNlLFxuICAgIGFkZENvbW1lbnQ6IGZhbHNlLFxuICB9O1xuXG4gIEBJbnB1dCgpIHJlbG9hZFRhYmxlOiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQElucHV0KCkgdXJsOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHBhcmFtczogQXJyYXk8YW55PjtcbiAgQElucHV0KCkgdGl0bGVMb2FkaW5nOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgbWVzc2FnZUxvYWRpbmc6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBoZWFkZXJGaWxlWGxzbTogQXJyYXk8YW55PiA9IFtdO1xuICBASW5wdXQoKSBoZWFkZXJGaWx0ZXJzOiBBcnJheTxhbnk+ID0gW107XG4gIEBJbnB1dCgpIHhzbHhUaXRsZUZpZWxkczogc3RyaW5nW107XG4gIEBJbnB1dCgpIHhzbHhTaGVldE5hbWVGaWVsZHM6IHN0cmluZ1tdO1xuICBASW5wdXQoKSB4c2x4Qm9keUZpZWxkczogc3RyaW5nO1xuICBASW5wdXQoKSB4c2x4UGFyYW1zOiBBcnJheTxhbnk+ID0gbnVsbDtcbiAgQElucHV0KCkgcm9sZUlkOiBudW1iZXIgPSAwO1xuICBASW5wdXQoKSBtb2R1bGVJZDogbnVtYmVyID0gMDtcbiAgQElucHV0KCkgc3ViTW9kdWxlSWQ6IG51bWJlciA9IDA7XG5cblxuICBwcml2YXRlIGhhc0FjY2Vzc1RvQWxsID0gdHJ1ZTtcbiAgcHJpdmF0ZSByb2xlc0FuZFBlcm1pc3Npb25Vc2VyOiBJUGVybWlzc2lvbnMgPSB7fSBhcyBJUGVybWlzc2lvbnM7XG5cbiAgQE91dHB1dCgpIGNsaWNrUm93ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBhZGQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGVkaXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGRlbGV0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgcHJpbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGV4cG9ydFhzbHhCeVJvdyA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgYWN0aXZlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBzZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgdmlldyA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgY2xvc2VPcmRlciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgcGFja09mZiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgYWR2YW5jZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgaW5jb21lID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBleGl0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBpbnRlcm5hbERhdGEgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHNlbmRFbWFpbCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgYWRkQ29tbWVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpOyBcbiAgQE91dHB1dCgpIGZpbGVJY29uQ2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgbW92aWwgPSBTY3JlZW5TaXplVXRpbC5pc01vYmlsZSgpO1xuICBmaWx0ZXJzUG9zdDogQXJyYXk8YW55PiA9IFtdO1xuICBAVmlld0NoaWxkKE1hdFBhZ2luYXRvciwgeyBzdGF0aWM6IHRydWUgfSkgcGFnaW5hdG9yOiBNYXRQYWdpbmF0b3I7XG5cbiAgc2VsZWN0ZWRSb3dzID0gW107IC8qKiBhbG1hY2VuYSBsYXMgZmlsYXMgc2VsZWNjaW9uYWRhcyAqL1xuICBjaGVja2JveHMgPSB7fTtcbiAgc2VsZWN0QWxsID0gZmFsc2U7XG4gIGluZGV0ZXJtaW5hdGVTdGF0ZSA9IGZhbHNlO1xuICBmaWx0ZXJzO1xuICBvcmlnaW5hbERhdGEgPSBbXTtcbiAgcGFnaW5hdG9yQWN0aXZlID0gdHJ1ZTtcbiAgc2NyZWVuOiBib29sZWFuID0gdHJ1ZTtcblxuICBpZF9jb21wYW5pYTtcblxuICBwYWdlU2l6ZU9wdGlvbnM6IG51bWJlcltdID0gWzUsIDEwLCAyNSwgNTAsIDEwMF07XG5cbiAgcGFnZVNpemUgPSBzY3JlZW4ud2lkdGggPiA1MDAgPyAxMCA6IDU7XG4gIGxlbmd0aCA9IDA7XG5cbiAgcGFnZSA9IDA7XG5cbiAgYWJvdmU6IFRvb2x0aXBQb3NpdGlvbltdID0gWydhYm92ZSddO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBTZXJ2aWNlLFxuICAgIHByaXZhdGUgbWVzc2FnZTogTWVzc2FnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmdW5jdGlvbkV0ZXI6IEZ1bmN0aW9uc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBwYWdpbmF0b3JUcmFuc2xhdGU6IE1hdFBhZ2luYXRvckludGwsXG4gICAgcHJpdmF0ZSBleHBvcnRTZXJ2aWNlOiBFeHBvcnREYXRhU2VydmljZVxuICApIHtcbiAgICB0aGlzLnBhZ2luYXRvclRyYW5zbGF0ZS5pdGVtc1BlclBhZ2VMYWJlbCA9ICdFbGVtZW50b3MgcG9yIHDDoWdpbmEnO1xuICAgIHRoaXMucGFnaW5hdG9yVHJhbnNsYXRlLm5leHRQYWdlTGFiZWwgPSAnU2lndWllbnRlIHDDoWdpbmEnO1xuICAgIHRoaXMucGFnaW5hdG9yVHJhbnNsYXRlLmxhc3RQYWdlTGFiZWwgPSAnw5psdGltYSBww6FnaW5hJztcbiAgICB0aGlzLnBhZ2luYXRvclRyYW5zbGF0ZS5wcmV2aW91c1BhZ2VMYWJlbCA9ICdQw6FnaW5hIGFudGVyaW9yJztcbiAgICB0aGlzLnBhZ2luYXRvclRyYW5zbGF0ZS5maXJzdFBhZ2VMYWJlbCA9ICdQcmltZXJhIHDDoWdpbmEnO1xuICAgIHRoaXMucGFnaW5hdG9yVHJhbnNsYXRlLmdldFJhbmdlTGFiZWwgPSBzcGFuaXNoUmFuZ2VMYWJlbDtcbiAgfVxuXG4gIGJ1dHRvbnNDb25maWcgPSBbXG4gIF07XG5cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnZhbGlkYXRlUm9sQW5kUGVybWlzc2lvbigpXG4gICAgaWYgKHdpbmRvdy5zY3JlZW4ud2lkdGggPiAxMDAwKSB7XG4gICAgICB0aGlzLnNjcmVlbiA9IHRydWU7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgKCkgPT4ge1xuICAgICAgICB3aW5kb3cuc2NyZWVuLndpZHRoID4gMTAwMFxuICAgICAgICAgID8gKHRoaXMuc2NyZWVuID0gdHJ1ZSlcbiAgICAgICAgICA6ICh0aGlzLnNjcmVlbiA9IGZhbHNlKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNjcmVlbiA9IGZhbHNlO1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsICgpID0+IHtcbiAgICAgICAgd2luZG93LnNjcmVlbi53aWR0aCA+IDEwMDBcbiAgICAgICAgICA/ICh0aGlzLnNjcmVlbiA9IHRydWUpXG4gICAgICAgICAgOiAodGhpcy5zY3JlZW4gPSBmYWxzZSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZWxvYWRUYWJsZSkge1xuICAgICAgdGhpcy5yZWxvYWRUYWJsZS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgICB0aGlzLm9yaWdpbmFsRGF0YSA9IFtdO1xuICAgICAgICB0aGlzLnNlbGVjdEFsbCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNlbGV0ZWNBbGxFdmVudCgnJyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLnRpdGxlTG9hZGluZyA9PSAnJyA/ICh0aGlzLnRpdGxlTG9hZGluZyA9ICdDYXJnYW5kbycpIDogJyc7XG4gICAgdGhpcy5tZXNzYWdlTG9hZGluZyA9PSAnJ1xuICAgICAgPyAodGhpcy5tZXNzYWdlTG9hZGluZyA9ICdPYnRlbmllbmRvIGRhdG9zLi4uJylcbiAgICAgIDogJyc7XG4gICAgdGhpcy51cmwgJiYgIXRoaXMuY29uZmlndXJhdGlvbi5ub3RJbml0aWFsaXplXG4gICAgICA/IHRoaXMubWVzc2FnZS5vcGVuTG9hZGluZyh0aGlzLnRpdGxlTG9hZGluZywgdGhpcy5tZXNzYWdlTG9hZGluZylcbiAgICAgIDogJyc7XG5cbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMudXJsICYmICF0aGlzLmNvbmZpZ3VyYXRpb24ubm90SW5pdGlhbGl6ZSkge1xuICAgICAgICBsZXQgc2VydmljZSA9IGF3YWl0IHRoaXMuZ2V0RGF0ZVRhYmxlQnlVcmwoKTtcbiAgICAgICAgdGhpcy5kYXRhID0gc2VydmljZVsnZGF0YSddO1xuICAgICAgICB0aGlzLmxlbmd0aCA9IHNlcnZpY2VbJ2NvdW50J107XG5cbiAgICAgICAgdGhpcy5kYXRhLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgIHRoaXMuY2hlY2tib3hzW3Jvd1t0aGlzLmNvbmZpZ3VyYXRpb24ucHJpbWFyeUtleV1dID0gZmFsc2U7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuaW50ZXJuYWxEYXRhLmVtaXQoc2VydmljZSk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMubWVzc2FnZS5jbG9zZUxvYWRpbmcoKTtcbiAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgIHRoaXMudmFsaWRhdGVSdWxlcygpO1xuICAgICAgfSBlbHNlIGlmICghdGhpcy51cmwpIHtcbiAgICAgICAgdGhpcy5wYWdpbmF0b3JBY3RpdmUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlUm9sQW5kUGVybWlzc2lvbigpIHtcbiAgICBpZiAodGhpcy5yb2xlSWQgIT0gMCkge1xuICAgICAgbGV0IHJvbGVQZXJtaXNzaW9ucyA9IHJvbGVzQW5kUGVybWlzc2lvbnM/LmZpbmQoeCA9PiB4LmlkID09IHRoaXMucm9sZUlkKVxuICAgICAgdGhpcy5oYXNBY2Nlc3NUb0FsbCA9IHJvbGVQZXJtaXNzaW9ucz8uaGFzQWNjZXNzVG9BbGwgPz8gcm9sZVBlcm1pc3Npb25zLm1vZHVsZXM/LmZpbmQoeCA9PiB4LmlkID09IHRoaXMubW9kdWxlSWQpPy5oYXNBY2Nlc3NUb0FsbCA/PyBmYWxzZTtcbiAgICB9O1xuXG4gICAgdGhpcy5yb2xlc0FuZFBlcm1pc3Npb25Vc2VyID0gcm9sZXNBbmRQZXJtaXNzaW9ucz8uZmluZCh4ID0+IHguaWQgPT0gdGhpcy5yb2xlSWQpPy5tb2R1bGVzPy5maW5kKHggPT4geC5pZCA9PSB0aGlzLm1vZHVsZUlkKT8uc3ViTW9kdWxlcz8uZmluZCh4ID0+IHguaWQgPT0gdGhpcy5zdWJNb2R1bGVJZCk/LnBlcm1pc3Npb25zID8/IHt9IGFzIElQZXJtaXNzaW9ucztcbiAgICBpZiAoIXRoaXMuaGFzQWNjZXNzVG9BbGwgJiYgIXRoaXMucm9sZXNBbmRQZXJtaXNzaW9uVXNlci5yZWFkQWxsICYmIHRoaXMucm9sZXNBbmRQZXJtaXNzaW9uVXNlci5yZWFkT3duID09IHRydWUpIHtcbiAgICAgIHRoaXMucGFyYW1zID0gWy4uLnRoaXMucGFyYW1zLCB7IGlkOiAncmVhZE93bicsIHZhbHVlOiB0cnVlIH1dO1xuICAgIH1cbiAgICB0aGlzLmNvbmZpZ3VyZUJ1dHRvbnMoKVxuICB9XG5cbiAgY29uZmlndXJlQnV0dG9ucygpIHtcbiAgICB0aGlzLmJ1dHRvbnNDb25maWcgPSBbXG4gICAgICB7XG4gICAgICAgIGFjdGlvbjogJ2VkaXQnLFxuICAgICAgICBjb25kaXRpb25TaG93SGVhZGVyOiAoKSA9PlxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5lZGl0ICYmXG4gICAgICAgICAgdGhpcy5oYXNQZXJtaXNzaW9uKCd1cGRhdGUnKSxcbiAgICAgICAgY29uZGl0aW9uOiAoKSA9PiB0aGlzLmNvbmZpZ3VyYXRpb24uZWRpdCAmJiB0aGlzLmhhc1Blcm1pc3Npb24oJ3VwZGF0ZScpLFxuICAgICAgICBpY29uOiAnZmEtZWRpdCcsXG4gICAgICAgIHRvb2x0aXA6ICdFZGl0YXInLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYWN0aW9uOiAncHJpbnQnLFxuICAgICAgICBjb25kaXRpb25TaG93SGVhZGVyOiAoKSA9PlxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5wcmludCAmJlxuICAgICAgICAgIHRoaXMuc2NyZWVuICYmXG4gICAgICAgICAgdGhpcy5oYXNQZXJtaXNzaW9uKCdwcmludCcpLFxuICAgICAgICBjb25kaXRpb246ICgpID0+IHRoaXMuY29uZmlndXJhdGlvbi5wcmludCAmJiB0aGlzLnNjcmVlbiAmJiB0aGlzLmhhc1Blcm1pc3Npb24oJ3ByaW50JyksXG4gICAgICAgIGljb246ICdmYS1wcmludCcsXG4gICAgICAgIHRvb2x0aXA6ICdJbXByaW1pcicsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBhY3Rpb246ICdhY3RpdmUnLFxuICAgICAgICBjb25kaXRpb25TaG93SGVhZGVyOiAoKSA9PlxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzLmxlbmd0aCA+IDAgJiYgdGhpcy5jb25maWd1cmF0aW9uLmFjdGl2ZSAmJiB0aGlzLmhhc1Blcm1pc3Npb24oJ2FjdGl2YXRlQW5kSW5hY3RpdmF0ZScpLFxuICAgICAgICBjb25kaXRpb246ICgpID0+IHRoaXMuY29uZmlndXJhdGlvbi5hY3RpdmUgJiYgdGhpcy5oYXNQZXJtaXNzaW9uKCdhY3RpdmF0ZUFuZEluYWN0aXZhdGUnKSxcbiAgICAgICAgaWNvbjogJ2ZhLWFkanVzdCcsXG4gICAgICAgIHRvb2x0aXA6ICdBY3RpdmFyL0Rlc2FjdGl2YXInLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYWN0aW9uOiAnYWRkJyxcbiAgICAgICAgY29uZGl0aW9uU2hvd0hlYWRlcjogKCkgPT5cbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93cy5sZW5ndGggPT09IDAgJiYgdGhpcy5jb25maWd1cmF0aW9uLmFkZCAmJiB0aGlzLmhhc1Blcm1pc3Npb24oJ3dyaXRlJyksXG4gICAgICAgIGNvbmRpdGlvbjogKCkgPT4gZmFsc2UsXG4gICAgICAgIGljb246ICdmYS1wbHVzLWNpcmNsZScsXG4gICAgICAgIHRvb2x0aXA6ICdOdWV2bycsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBhY3Rpb246ICdpbmNvbWUnLFxuICAgICAgICBjb25kaXRpb25TaG93SGVhZGVyOiAoKSA9PlxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzLmxlbmd0aCA9PT0gMCAmJiB0aGlzLmNvbmZpZ3VyYXRpb24uaW5jb21lICYmIHRoaXMuaGFzUGVybWlzc2lvbignd3JpdGUnKSxcbiAgICAgICAgY29uZGl0aW9uOiAoKSA9PiBmYWxzZSxcbiAgICAgICAgaWNvbjogJ2ZhLXVzZXItcGx1cycsXG4gICAgICAgIHRvb2x0aXA6ICdJbmdyZXNvJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGFjdGlvbjogJ2V4aXQnLFxuICAgICAgICBjb25kaXRpb25TaG93SGVhZGVyOiAoKSA9PlxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzLmxlbmd0aCA9PT0gMCAmJiB0aGlzLmNvbmZpZ3VyYXRpb24uZXhpdCAmJiB0aGlzLmhhc1Blcm1pc3Npb24oJ3dyaXRlJyksXG4gICAgICAgIGNvbmRpdGlvbjogKCkgPT4gZmFsc2UsXG4gICAgICAgIGljb246ICdmYS11c2VyLXRpbWVzJyxcbiAgICAgICAgdG9vbHRpcDogJ1NhbGlkYScsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBhY3Rpb246ICd2aWV3JyxcbiAgICAgICAgY29uZGl0aW9uU2hvd0hlYWRlcjogKCkgPT5cbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93cy5sZW5ndGggPT09IDEgJiYgdGhpcy5jb25maWd1cmF0aW9uLnZpZXcgJiYgdGhpcy5oYXNQZXJtaXNzaW9uKCdyZWFkRGV0YWlsJyksXG4gICAgICAgIGNvbmRpdGlvbjogKCkgPT4gdGhpcy5jb25maWd1cmF0aW9uLnZpZXcgJiYgdGhpcy5oYXNQZXJtaXNzaW9uKCdyZWFkRGV0YWlsJyksXG4gICAgICAgIGljb246ICdmYS1leWUnLFxuICAgICAgICB0b29sdGlwOiAnVmVyIGRldGFsbGUnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYWN0aW9uOiAnY2xvc2VPcmRlcicsXG4gICAgICAgIGNvbmRpdGlvblNob3dIZWFkZXI6ICgpID0+XG4gICAgICAgICAgKHRoaXMuc2VsZWN0ZWRSb3dzLmxlbmd0aCA9PT0gMSAmJiB0aGlzLmNvbmZpZ3VyYXRpb24uY2xvc2VPcmRlcikgJiYgdGhpcy5oYXNQZXJtaXNzaW9uKCdjbG9zZU9UJyksXG4gICAgICAgIGNvbmRpdGlvbjogKCkgPT4gdGhpcy5jb25maWd1cmF0aW9uLmNsb3NlT3JkZXIgJiYgdGhpcy5oYXNQZXJtaXNzaW9uKCdjbG9zZU9UJyksXG4gICAgICAgIGljb246ICdmYS1jaGVjay1jaXJjbGUnLFxuICAgICAgICB0b29sdGlwOiAnQ2VycmFyIG9yZGVuJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGFjdGlvbjogJ3BhY2tPZmYnLFxuICAgICAgICBjb25kaXRpb25TaG93SGVhZGVyOiAoKSA9PlxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzLmxlbmd0aCA9PT0gMSAmJiB0aGlzLmNvbmZpZ3VyYXRpb24ucGFja09mZiAmJiB0aGlzLmhhc1Blcm1pc3Npb24oJ2FsbG9jYXRlUmVzb3VyY2VzJyksXG4gICAgICAgIGNvbmRpdGlvbjogKCkgPT4gdGhpcy5jb25maWd1cmF0aW9uLnBhY2tPZmYgJiYgdGhpcy5oYXNQZXJtaXNzaW9uKCdhbGxvY2F0ZVJlc291cmNlcycpLFxuICAgICAgICBpY29uOiAnZmEtY2FydC1hcnJvdy1kb3duJyxcbiAgICAgICAgdG9vbHRpcDogJ0Rlc3BhY2hhciByZWN1cnNvcycsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBhY3Rpb246ICdhZHZhbmNlJyxcbiAgICAgICAgY29uZGl0aW9uU2hvd0hlYWRlcjogKCkgPT5cbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93cy5sZW5ndGggPT09IDEgJiYgdGhpcy5jb25maWd1cmF0aW9uLmFkdmFuY2UgJiYgdGhpcy5oYXNQZXJtaXNzaW9uKCdhZHZhbmNlJyksXG4gICAgICAgIGNvbmRpdGlvbjogKCkgPT4gdGhpcy5jb25maWd1cmF0aW9uLmFkdmFuY2UgJiYgdGhpcy5oYXNQZXJtaXNzaW9uKCdhZHZhbmNlJyksXG4gICAgICAgIGljb246ICdmYS1hcnJvdy1yaWdodCcsXG4gICAgICAgIHRvb2x0aXA6IHRoaXMuY29uZmlndXJhdGlvbi5hZHZhbmNlTGFiZWwsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBhY3Rpb246ICdzZW5kRW1haWwnLFxuICAgICAgICBjb25kaXRpb25TaG93SGVhZGVyOiAoKSA9PlxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5zZW5kRW1haWwgJiZcbiAgICAgICAgICB0aGlzLmhhc1Blcm1pc3Npb24oJ3NlbmRFbWFpbCcpLFxuICAgICAgICBjb25kaXRpb246ICgpID0+IHRoaXMuY29uZmlndXJhdGlvbi5zZW5kRW1haWwgJiYgdGhpcy5oYXNQZXJtaXNzaW9uKCdzZW5kRW1haWwnKSxcbiAgICAgICAgaWNvbjogJ2ZhLW1haWwtYnVsaycsXG4gICAgICAgIHRvb2x0aXA6ICdFbnZpYSBjb3JyZW8nLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYWN0aW9uOiAnZXhwb3J0VG9FeGNlbCcsXG4gICAgICAgIGNvbmRpdGlvblNob3dIZWFkZXI6ICgpID0+XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3MubGVuZ3RoID09PSAwICYmXG4gICAgICAgICAgdGhpcy5kYXRhLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAodGhpcy5jb25maWd1cmF0aW9uLmV4cG9ydFhzbHggfHwgdGhpcy5jb25maWd1cmF0aW9uLmV4cG9ydFhzbHhXaXRoUGFnZXMpICYmXG4gICAgICAgICAgdGhpcy5oYXNQZXJtaXNzaW9uKCdleHBvcnQnKSxcbiAgICAgICAgY29uZGl0aW9uOiAoKSA9PiBmYWxzZSxcbiAgICAgICAgaWNvbjogJ2ZhLWRvd25sb2FkJyxcbiAgICAgICAgdG9vbHRpcDogJ0V4cG9ydGFyIFRhYmxhJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGFjdGlvbjogJ2V4cG9ydFRvRXhjZWxCeVJvdycsXG4gICAgICAgIGNvbmRpdGlvblNob3dIZWFkZXI6ICgpID0+XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3MubGVuZ3RoID09PSAxICYmIHRoaXMuY29uZmlndXJhdGlvbi5leHBvcnRYc2x4QnlSb3cgJiYgdGhpcy5oYXNQZXJtaXNzaW9uKCdleHBvcnQnKSxcbiAgICAgICAgY29uZGl0aW9uOiAoKSA9PiB0aGlzLmNvbmZpZ3VyYXRpb24uZXhwb3J0WHNseEJ5Um93ICYmIHRoaXMuaGFzUGVybWlzc2lvbignZXhwb3J0JyksXG4gICAgICAgIGljb246ICdmYS1kb3dubG9hZCcsXG4gICAgICAgIHRvb2x0aXA6ICdFeHBvcnRhciBSZWdpc3RybycsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBhY3Rpb246ICdhZGRDb21tZW50JyxcbiAgICAgICAgY29uZGl0aW9uU2hvd0hlYWRlcjogKCkgPT5cbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93cy5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uYWRkQ29tbWVudCAmJlxuICAgICAgICAgIHRoaXMuaGFzUGVybWlzc2lvbignYWRkQ29tbWVudCcpLFxuICAgICAgICBjb25kaXRpb246ICgpID0+IHRoaXMuY29uZmlndXJhdGlvbi5hZGRDb21tZW50ICYmIHRoaXMuaGFzUGVybWlzc2lvbignYWRkQ29tbWVudCcpLFxuICAgICAgICBpY29uOiAnZmEtY29tbWVudHMnLFxuICAgICAgICB0b29sdGlwOiAnQWdyZWdhciBDb21lbnRhcmlvJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGFjdGlvbjogJ2RlbGV0ZScsXG4gICAgICAgIGNvbmRpdGlvblNob3dIZWFkZXI6ICgpID0+XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3MubGVuZ3RoID4gMCAmJiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVsZXRlICYmIHRoaXMuaGFzUGVybWlzc2lvbignZGVsZXRlJyksXG4gICAgICAgIGNvbmRpdGlvbjogKCkgPT4gdGhpcy5jb25maWd1cmF0aW9uLmRlbGV0ZSAmJiB0aGlzLmhhc1Blcm1pc3Npb24oJ2RlbGV0ZScpLFxuICAgICAgICBpY29uOiAnZmEtdHJhc2gnLFxuICAgICAgICB0b29sdGlwOiAnRWxpbWluYXInLFxuICAgICAgfSxcbiAgICBdO1xuICB9XG5cblxuICBoYXNQZXJtaXNzaW9uKHBlcm1pc3Npb246IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmhhc0FjY2Vzc1RvQWxsKSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcy5yb2xlc0FuZFBlcm1pc3Npb25Vc2VyPy5bcGVybWlzc2lvbl0gPz8gZmFsc2U7XG4gIH1cblxuICBhc3luYyBnZXREYXRlVGFibGVCeVVybCgpIHtcbiAgICB0aGlzLnZhbGlkYXJQYXJhbXMoKTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwLnBvc3REYXRhQm9keShcbiAgICAgIHRoaXMudXJsLFxuICAgICAgdGhpcy5maWx0ZXJzUG9zdCxcbiAgICAgIHRoaXMucGFyYW1zXG4gICAgKTtcbiAgfVxuXG4gIHZhbGlkYXJQYXJhbXMoKSB7XG4gICAgdGhpcy5wYXJhbXMgPSB0aGlzLmZ1bmN0aW9uRXRlci5yZW1vdmVEdXBsaWNhdGVPYmplY3RzKHRoaXMucGFyYW1zKTtcbiAgICBpZiAodGhpcy5wYXJhbXMpIHtcbiAgICAgIGlmICghdGhpcy5wYXJhbXMuZmluZCgoeCkgPT4geC5pZCA9PSAncGFnZScpKSB7XG4gICAgICAgIHRoaXMucGFyYW1zLnB1c2goeyBpZDogJ3BhZ2UnLCB2YWx1ZTogJzAnIH0pO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLnBhcmFtcy5maW5kKCh4KSA9PiB4LmlkID09ICdwZXJfcGFnZScpKSB7XG4gICAgICAgIHRoaXMucGFyYW1zLnB1c2goeyBpZDogJ3Blcl9wYWdlJywgdmFsdWU6IHRoaXMucGFnZVNpemUgfSk7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMucGFyYW1zLmZpbmQoKHgpID0+IHguaWQgPT0gJ2ZpbHRlcicpKSB7XG4gICAgICAgIHRoaXMucGFyYW1zLnB1c2goeyBpZDogJ2ZpbHRlcicsIHZhbHVlOiAnJyB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyB2YWxpZGF0ZVJ1bGVzKCkge1xuICAgIGZvciAoY29uc3QgW2luZGV4LCBjb2x1bW5zXSBvZiB0aGlzLmNvbHVtbnMuZW50cmllcygpKSB7XG4gICAgICBmb3IgKGNvbnN0IFtpbmRleERhdGEsIGVsZW1lbnRdIG9mIHRoaXMuZGF0YS5lbnRyaWVzKCkpIHtcbiAgICAgICAgaWYgKGNvbHVtbnMucnVsZXMpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgY29sdW1ucy5ydWxlcykge1xuICAgICAgICAgICAgaWYgKHJ1bGUucnVsZSA9PSBlbnVtUnVsZXNbJz09J10pIHtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGVsZW1lbnRbY29sdW1ucy5JRF0gJiZcbiAgICAgICAgICAgICAgICBlbGVtZW50W2NvbHVtbnMuSURdLnRvU3RyaW5nKCkgPT0gcnVsZS52YWx1ZVJ1bGUudG9TdHJpbmcoKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFbaW5kZXhEYXRhXVtjb2x1bW5zLklEXSA9IHJ1bGUudmFsdWVBY3Rpb247XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29sdW1uVmFsdWUgPSBlbGVtZW50W2NvbHVtbnMuSURdO1xuICAgICAgICBpZiAoY29sdW1ucy50eXBlID09ICdmZWNoYScgfHwgY29sdW1ucy50eXBlID09ICdkYXRlJylcbiAgICAgICAgICB0aGlzLmRhdGFbaW5kZXhEYXRhXVtjb2x1bW5zLklEXSA9XG4gICAgICAgICAgICB0aGlzLmZ1bmN0aW9uRXRlci5kYXRlSXNvKGNvbHVtblZhbHVlKTtcbiAgICAgICAgaWYgKGNvbHVtbnMudHlwZSA9PSAnZGF0ZVdpdGhUaW1lJylcbiAgICAgICAgICB0aGlzLmRhdGFbaW5kZXhEYXRhXVtjb2x1bW5zLklEXSA9IHRoaXMuZnVuY3Rpb25FdGVyLmRhdGVXaXRoVGltZShcbiAgICAgICAgICAgIGNvbHVtblZhbHVlPy50b1N0cmluZygpID8/IGNvbHVtblZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgaWYgKGNvbHVtbnMudHlwZSA9PSAnY3VycmVuY3knKVxuICAgICAgICAgIHRoaXMuZGF0YVtpbmRleERhdGFdW2NvbHVtbnMuSURdID1cbiAgICAgICAgICAgIEludGwuTnVtYmVyRm9ybWF0KCdlcy1DTycpLmZvcm1hdChjb2x1bW5WYWx1ZSk7XG4gICAgICAgIGlmIChjb2x1bW5zLnR5cGUgPT0gJ2Jvb2xlYW4nKVxuICAgICAgICAgIHRoaXMuZGF0YVtpbmRleERhdGFdW2NvbHVtbnMuSURdID0gY29sdW1uVmFsdWUgPT0gMSA/ICdTaScgOiAnTm8nO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlc1snZGF0YSddKSB7XG4gICAgICBpZiAodGhpcy5kYXRhKSB7XG4gICAgICAgIHRoaXMuZGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICB0aGlzLmNoZWNrYm94c1tyb3dbdGhpcy5jb25maWd1cmF0aW9uLnByaW1hcnlLZXldXSA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoaXMub3JpZ2luYWxEYXRhLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgaWYgKHRoaXMuZGF0YS5sZW5ndGggIT0gMCkge1xuICAgICAgICAgICAgdGhpcy5kYXRhLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5vcmlnaW5hbERhdGEucHVzaChlbGVtZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy52YWxpZGF0ZVJ1bGVzKCk7XG4gICAgfVxuXG4gIH1cblxuICBldmFsdWF0ZVJ1bGVzKHZhbHVlOiBhbnksIHJ1bGVzOiBhbnlbXSk6IGJvb2xlYW4ge1xuICAgIGlmICghcnVsZXMpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBsZXQgYWN0aXZlID0gZmFsc2U7XG4gICAgY29uc3QgYWxsb3dlZEV4dGVuc2lvbnMgPSBbXG4gICAgICAgICcucG5nJywgJy5qcGVnJywgJy5qcGcnLCAnLmdpZicsICcuYm1wJywgJy53ZWJwJywgJy5zdmcnLFxuICAgICAgICAnLnBkZicsICcuZG9jJywgJy5kb2N4JywgJy54bHMnLCAnLnhsc3gnLCAnLmRvY3VtZW50J1xuICAgIF07XG4gICAgcnVsZXMuZm9yRWFjaChydWxlID0+IHtcbiAgICAgICAgaWYgKHJ1bGUuYWN0aW9uID09PSBlbnVtQWN0aW9ucy5TSE9XX0ZJTEVfSUNPTiAmJiB2YWx1ZSAmJiB2YWx1ZS5pbmNsdWRlcygnL2RvY3MvJykpIHtcbiAgICAgICAgICAgIGNvbnN0IGxvd2VyVmFsdWUgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBleHQgb2YgYWxsb3dlZEV4dGVuc2lvbnMpIHtcbiAgICAgICAgICAgICAgICBpZiAobG93ZXJWYWx1ZS5pbmNsdWRlcyhleHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBhY3RpdmU7XG59XG5cbiAgb25GaWxlSWNvbkNsaWNrKGV2ZW50LCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5maWxlSWNvbkNsaWNrLmVtaXQodmFsdWUpO1xuICB9XG5cbiAgY2xpY2tPblJvVyhyb3dEYXRhKSB7XG4gICAgbGV0IHN0YXRlID0gdGhpcy5jaGVja2JveHNbcm93RGF0YVt0aGlzLmNvbmZpZ3VyYXRpb24ucHJpbWFyeUtleV1dO1xuXG4gICAgaWYgKCF0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0YWJsZSkge1xuICAgICAgdGhpcy5jbGVhckNoZWNrYm94ZXMoKTtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGlvbihyb3dEYXRhLCB7IGNoZWNrZWQ6ICFzdGF0ZSB9LCB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0YWJsZSk7XG4gICAgdGhpcy5jbGlja1Jvdy5lbWl0KHJvd0RhdGEpO1xuICB9XG5cbiAgc2hvd01lbnUoJGV2ZW50KSB7XG4gICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgYWN0aW9uKGFjdGlvbiwgcm93ID0gbnVsbCkge1xuICAgIHZhciBjdXJyZW50Um93ID0gcm93ID8gW3Jvd10gOiB0aGlzLnNlbGVjdGVkUm93cztcblxuICAgIHN3aXRjaCAoYWN0aW9uKSB7XG4gICAgICBjYXNlICdhZGQnOlxuICAgICAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uLmFkZFBlcikge1xuICAgICAgICAgIHRoaXMuYWRkLmVtaXQodGhpcy5sZW5ndGgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZGlhbG9nXG4gICAgICAgICAgICAub3BlbihUYWJsZU1vZGFsQ29tcG9uZW50LCB7XG4gICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICAgICAgY29sdW1uczogSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmNvbHVtbnMpKSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgd2lkdGg6ICc2MHZoJyxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYWZ0ZXJDbG9zZWQoKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZC5lbWl0KHJlc3VsdCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2VkaXQnOlxuICAgICAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uLmVkaXRQZXIpIHtcbiAgICAgICAgICB0aGlzLmVkaXQuZW1pdChjdXJyZW50Um93KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZXQgY29sdW1uczogYW55O1xuICAgICAgICAgIGNvbHVtbnMgPSB0aGlzLmNvbHVtbnM7XG5cbiAgICAgICAgICBjb2x1bW5zLmZvckVhY2goKGNvbHVtbiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGN1cnJlbnRSb3dbMF0pLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoY29sdW1uLklEID09IGtleSkge1xuICAgICAgICAgICAgICAgIGNvbHVtbnNbaW5kZXhdLnZhbHVlID0gY3VycmVudFJvd1swXVtrZXldO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHRoaXMuZGlhbG9nXG4gICAgICAgICAgICAub3BlbihUYWJsZU1vZGFsQ29tcG9uZW50LCB7XG4gICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICAgICAgY29sdW1uczogSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmNvbHVtbnMpKSxcbiAgICAgICAgICAgICAgICB2YWx1ZXM6IGN1cnJlbnRSb3dbMF0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHdpZHRoOiAnNjB2aCcsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmFmdGVyQ2xvc2VkKClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0LmVtaXQoeyBuZXc6IHJlc3VsdCwgb2xkOiBjdXJyZW50Um93WzBdIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdkZWxldGUnOlxuICAgICAgICB0aGlzLmRlbGV0ZS5lbWl0KGN1cnJlbnRSb3cpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3ByaW50JzpcbiAgICAgICAgdGhpcy5wcmludC5lbWl0KGN1cnJlbnRSb3cpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2FjdGl2ZSc6XG4gICAgICAgIHRoaXMuYWN0aXZlLmVtaXQoY3VycmVudFJvdyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZXhwb3J0VG9FeGNlbCc6XG4gICAgICAgIHRoaXMuZXhwb3J0VG9FeGNlbCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2V4cG9ydFRvRXhjZWxCeVJvdyc6XG4gICAgICAgIHRoaXMuZXhwb3J0WHNseEJ5Um93LmVtaXQoY3VycmVudFJvdyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndmlldyc6XG4gICAgICAgIHRoaXMudmlldy5lbWl0KGN1cnJlbnRSb3cpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Nsb3NlT3JkZXInOlxuICAgICAgICB0aGlzLmNsb3NlT3JkZXIuZW1pdChjdXJyZW50Um93KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdwYWNrT2ZmJzpcbiAgICAgICAgdGhpcy5wYWNrT2ZmLmVtaXQoY3VycmVudFJvdyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYWR2YW5jZSc6XG4gICAgICAgIHRoaXMuYWR2YW5jZS5lbWl0KGN1cnJlbnRSb3cpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2luY29tZSc6XG4gICAgICAgIHRoaXMuaW5jb21lLmVtaXQodGhpcy5sZW5ndGgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2V4aXQnOlxuICAgICAgICB0aGlzLmV4aXQuZW1pdCh0aGlzLmxlbmd0aCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnc2VuZEVtYWlsJzpcbiAgICAgICAgdGhpcy5zZW5kRW1haWwuZW1pdChjdXJyZW50Um93KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdhZGRDb21tZW50JzpcbiAgICAgICAgdGhpcy5hZGRDb21tZW50LmVtaXQoY3VycmVudFJvdyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgc2hvdWxkU2hvd01lbnUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYnV0dG9uc0NvbmZpZy5zb21lKChidG4pID0+IGJ0bi5jb25kaXRpb24oKSk7XG4gIH1cblxuICBleHBvcnRUb0V4Y2VsKCkge1xuICAgIGxldCBwYXJhbXMgPSBbXTtcbiAgICBpZiAodGhpcy51cmwgJiYgdGhpcy5wYXJhbXMpIHtcbiAgICAgIHBhcmFtcyA9IFsuLi50aGlzLnBhcmFtc107XG5cbiAgICAgIGlmICh0aGlzLnhzbHhQYXJhbXMpIHtcbiAgICAgICAgcGFyYW1zID0gWy4uLnBhcmFtcywgLi4udGhpcy54c2x4UGFyYW1zXTtcbiAgICAgIH1cbiAgICAgIGxldCBpID0gcGFyYW1zLmZpbmRJbmRleCgoeCkgPT4geC5pZCA9PSAncGVyX3BhZ2UnKTtcbiAgICAgIGlmIChpICE9IC0xKSBwYXJhbXNbaV0udmFsdWUgPSAxMDAwMDAwMDA7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5leHBvcnRYc2x4V2l0aFBhZ2VzKSB7XG4gICAgICB0aGlzLmV4cG9ydFNlcnZpY2UuZ2VuZXJhdGVFeGNlbFdpdGhTaGVldHM8YW55PihcbiAgICAgICAgdGhpcy50aXRsZSxcbiAgICAgICAgdGhpcy5oZWFkZXJGaWxlWGxzbSxcbiAgICAgICAgdGhpcy50aXRsZSxcbiAgICAgICAgdGhpcy51cmwgPyBudWxsIDogdGhpcy5kYXRhLFxuICAgICAgICB0aGlzLnVybCxcbiAgICAgICAgcGFyYW1zLFxuICAgICAgICB0aGlzLmZpbHRlcnNQb3N0LFxuICAgICAgICB0aGlzLnhzbHhUaXRsZUZpZWxkcyxcbiAgICAgICAgdGhpcy54c2x4U2hlZXROYW1lRmllbGRzLFxuICAgICAgICB0aGlzLnhzbHhCb2R5RmllbGRzXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmV4cG9ydFNlcnZpY2UuZ2VuZXJhdGVUb1hsc3g8YW55PihcbiAgICAgICAgdGhpcy50aXRsZSxcbiAgICAgICAgdGhpcy5oZWFkZXJGaWxlWGxzbSxcbiAgICAgICAgdGhpcy50aXRsZSxcbiAgICAgICAgdGhpcy51cmwgPyBudWxsIDogdGhpcy5kYXRhLFxuICAgICAgICB0aGlzLnVybCxcbiAgICAgICAgcGFyYW1zLFxuICAgICAgICB0aGlzLmZpbHRlcnNQb3N0XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdGlvbihyb3csICRldmVudCwgZW1pdEV2ZW50ID0gdHJ1ZSkge1xuICAgIHRoaXMuY2hlY2tib3hzW3Jvd1t0aGlzLmNvbmZpZ3VyYXRpb24ucHJpbWFyeUtleV1dID0gJGV2ZW50LmNoZWNrZWQ7XG4gICAgaWYgKCRldmVudC5jaGVja2VkKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkUm93cy5wdXNoKHJvdyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBpbmRleCA9IHRoaXMuc2VsZWN0ZWRSb3dzLmluZGV4T2Yocm93KTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RhYmxlICYmIGVtaXRFdmVudCkge1xuICAgICAgdGhpcy5zZWxlY3RlZC5lbWl0KHRoaXMuc2VsZWN0ZWRSb3dzKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zZWxlY3RlZFJvd3MubGVuZ3RoID09IHRoaXMuZGF0YS5sZW5ndGgpIHtcbiAgICAgIHRoaXMuc2VsZWN0QWxsID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RBbGwgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnNlbGVjdGVkUm93cy5sZW5ndGggPiAwICYmXG4gICAgICB0aGlzLnNlbGVjdGVkUm93cy5sZW5ndGggPCB0aGlzLmRhdGEubGVuZ3RoXG4gICAgKSB7XG4gICAgICB0aGlzLmluZGV0ZXJtaW5hdGVTdGF0ZSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5kZXRlcm1pbmF0ZVN0YXRlID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgY2xpY2tlZCgkZXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuXG4gIGFzeW5jIHNlbGV0ZWNBbGxFdmVudCgkZXZlbnQpIHtcbiAgICB0aGlzLmluZGV0ZXJtaW5hdGVTdGF0ZSA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuc2VsZWN0QWxsKSB7XG4gICAgICBPYmplY3Qua2V5cyh0aGlzLmNoZWNrYm94cykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIHRoaXMuY2hlY2tib3hzW2tleV0gPSB0cnVlO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzID0gW107XG4gICAgICBsZXQgZGF0YSA9IHRoaXMuZGF0YTtcbiAgICAgIGRhdGEuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICB0aGlzLnNlbGVjdGVkUm93cy5wdXNoKGVsZW1lbnQpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuc2VsZWN0ZWQuZW1pdCh0aGlzLnNlbGVjdGVkUm93cyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2xlYXJDaGVja2JveGVzKCk7XG4gICAgICB0aGlzLnNlbGVjdGVkLmVtaXQodGhpcy5zZWxlY3RlZFJvd3MpO1xuICAgIH1cblxuICAgIGxldCBzZXJ2aWNlID0gYXdhaXQgdGhpcy5nZXREYXRlVGFibGVCeVVybCgpO1xuICAgIHRoaXMuZGF0YSA9IHNlcnZpY2VbJ2RhdGEnXTtcbiAgICB0aGlzLmludGVybmFsRGF0YS5lbWl0KHNlcnZpY2UpO1xuICAgIHRoaXMubGVuZ3RoID0gc2VydmljZVsnY291bnQnXTtcbiAgICB0aGlzLnZhbGlkYXRlUnVsZXMoKTtcbiAgfVxuXG4gIGNsZWFyQ2hlY2tib3hlcygpIHtcbiAgICBPYmplY3Qua2V5cyh0aGlzLmNoZWNrYm94cykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICB0aGlzLmNoZWNrYm94c1trZXldID0gZmFsc2U7XG4gICAgfSk7XG5cbiAgICB0aGlzLnNlbGVjdGVkUm93cyA9IFtdO1xuICB9XG5cbiAgY2hhbmdlRmlsdGVycygpIHtcbiAgICBpZiAodGhpcy5wYXJhbXMpXG4gICAgICB0aGlzLnBhcmFtcy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgIGlmIChlbGVtZW50LmlkID09ICdmaWx0ZXInKSB7XG4gICAgICAgICAgZWxlbWVudC52YWx1ZSA9IHRoaXMuZmlsdGVycztcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGFwcGx5RmlsdGVycygkZXZlbnQ/OiBhbnkpIHtcbiAgICBpZiAoJGV2ZW50KSB0aGlzLmZpbHRlcnNQb3N0ID0gJGV2ZW50O1xuICAgIGlmICh0aGlzLnVybCkge1xuICAgICAgbGV0IHJlczogYW55ID0gYXdhaXQgdGhpcy5nZXREYXRlVGFibGVCeVVybCgpO1xuICAgICAgdGhpcy5kYXRhID0gcmVzWydkYXRhJ107XG4gICAgICB0aGlzLnZhbGlkYXRlUnVsZXMoKTtcbiAgICAgIHRoaXMubGVuZ3RoID0gcmVzWydjb3VudCddO1xuICAgICAgdGhpcy5pbnRlcm5hbERhdGEuZW1pdChyZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRhdGEgPSB0aGlzLm9yaWdpbmFsRGF0YS5maWx0ZXIoKGRhdGEpID0+IHtcbiAgICAgICAgZm9yIChsZXQga2V5IG9mIE9iamVjdC5rZXlzKGRhdGEpKSB7XG4gICAgICAgICAgbGV0IHJlc3VsdCA9IGRhdGFba2V5XVxuICAgICAgICAgICAgLnRvU3RyaW5nKClcbiAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAuaW5jbHVkZXModGhpcy5maWx0ZXJzLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlUGFnZSgkZXZlbnQpIHtcbiAgICB0aGlzLnBhcmFtcy5mb3JFYWNoKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGVsZW1lbnQuaWQgPT0gJ3Blcl9wYWdlJykge1xuICAgICAgICBlbGVtZW50LnZhbHVlID0gJGV2ZW50LnBhZ2VTaXplO1xuICAgICAgfVxuICAgICAgaWYgKGVsZW1lbnQuaWQgPT0gJ3BhZ2UnKSB7XG4gICAgICAgIGVsZW1lbnQudmFsdWUgPSAkZXZlbnQucGFnZUluZGV4O1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XG4gIH1cbn1cblxuZW51bSBlbnVtUnVsZXMge1xuICAnPicsXG4gICc8JyxcbiAgJz09JyxcbiAgJyE9Jyxcbn1cblxuZW51bSBlbnVtQWN0aW9ucyB7XG4gIFJFUExBQ0UsXG4gIEFERCxcbiAgUkVNT1ZFLFxuICBTSE9XX0ZJTEVfSUNPTlxufSIsIjxkaXYgY2xhc3M9XCJjb250ZW5lZG9yLXRhYmxhXCI+XG4gIDxkaXYgY2xhc3M9XCJ0YWJsZS10aXRsZS1tb2JpbGVcIiAqbmdJZj1cIiFjb25maWd1cmF0aW9uLmhpZGVUaXRsZVwiPlxuICAgIDxzdHJvbmc+e3sgdGl0bGUgfX08L3N0cm9uZz5cbiAgPC9kaXY+XG5cbiAgPGFwcC1maWx0ZXJzIFtoZWFkZXJGaWx0ZXJzXT1cImhlYWRlckZpbHRlcnNcIiAoYXBwbHlGaWx0ZXJzKT1cImFwcGx5RmlsdGVycygkZXZlbnQpXCI+XG4gIDwvYXBwLWZpbHRlcnM+XG5cbiAgPGRpdiBjbGFzcz1cInJvdyBtYi0yXCIgc3R5bGU9XCJ3aWR0aDogOTklXCI+XG4gICAgPGRpdiAqbmdJZj1cIiFjb25maWd1cmF0aW9uLmhpZGVGaWx0ZXJcIiBjbGFzcz1cImNvbC0xMiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZmlsdGVyXCI+XG4gICAgICAgIDxtYXQtbGFiZWw+RmlsdHJhcjwvbWF0LWxhYmVsPlxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbKG5nTW9kZWwpXT1cImZpbHRlcnNcIiAoa2V5dXApPVwiY2hhbmdlRmlsdGVycygpXCIgbWF0SW5wdXQgcGxhY2Vob2xkZXI9XCJGaWx0cmFyXCIgLz5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJjb2wtMTIgZC1mbGV4IGZsZXgtcm93IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBwLTJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZC1ub25lIGQtbWQtYmxvY2sgbWUtbWQtMyB3LTEwMFwiIHN0eWxlPVwiZm9udC1zaXplOiAxcmVtXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImZ3LWJvbGRcIiAqbmdJZj1cInNlbGVjdGVkUm93cy5sZW5ndGggPiAwICYmIGNvbmZpZ3VyYXRpb24uc2VsZWN0YWJsZVwiPlxuICAgICAgICB7eyBzZWxlY3RlZFJvd3MubGVuZ3RoIH19XG4gICAgICAgIHt7IHNlbGVjdGVkUm93cy5sZW5ndGggPT09IDEgPyAnU2VsZWNjaW9uYWRvJyA6ICdTZWxlY2Npb25hZG9zJyB9fVxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCB3LTEwMFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJ1dHRvbnNUYWJsZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8dGFibGUgY2xhc3M9XCJ0YWJsZV9FdGVyIHRhYmxlLWhvdmVyXCI+XG4gICAgPHRoZWFkIGNsYXNzPVwiZGFya1wiPlxuICAgICAgPHRyPlxuICAgICAgICA8dGggKm5nSWY9XCJjb25maWd1cmF0aW9uLnNlbGVjdGFibGVcIiBzdHlsZT1cImp1c3RpZnktY29udGVudDogY2VudGVyXCI+XG4gICAgICAgICAgPG1hdC1jaGVja2JveCBjb2xvcj1cInByaW1hcnlcIiAoY2hhbmdlKT1cInNlbGV0ZWNBbGxFdmVudCgkZXZlbnQpXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RBbGxcIlxuICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwiaW5kZXRlcm1pbmF0ZVN0YXRlXCI+XG4gICAgICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0aCBbY2xhc3NdPVwiY29sdW1uLnN0eWxlPy5tb3ZpbFwiICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uc1wiIHNjb3BlPVwiY29sXCIgW25nU3R5bGVdPVwiY29sdW1uLnN0eWxlXCI+XG4gICAgICAgICAge3sgY29sdW1uLmxhYmVsIH19XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0aCAqbmdJZj1cInNob3VsZFNob3dNZW51KClcIj48L3RoPlxuICAgICAgPC90cj5cbiAgICA8L3RoZWFkPlxuICAgIDx0Ym9keSBjbGFzcz1cIm1hdC1lbGV2YXRpb24tejNcIj5cbiAgICAgIDx0ciBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiICpuZ0Zvcj1cImxldCByb3cgb2YgZGF0YVwiIChjbGljayk9XCJjbGlja09uUm9XKHJvdylcIlxuICAgICAgICBbY2xhc3NdPVwiY2hlY2tib3hzW3Jvd1tjb25maWd1cmF0aW9uLnByaW1hcnlLZXldXSA/ICdzZWxlY3RlZC1yb3cnIDogJydcIj5cbiAgICAgICAgPHRoICpuZ0lmPVwiY29uZmlndXJhdGlvbi5zZWxlY3RhYmxlXCIgc3R5bGU9XCJqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlclwiPlxuICAgICAgICAgIDxtYXQtY2hlY2tib3ggY29sb3I9XCJwcmltYXJ5XCIgWyhuZ01vZGVsKV09XCJjaGVja2JveHNbcm93W2NvbmZpZ3VyYXRpb24ucHJpbWFyeUtleV1dXCIgKGNsaWNrKT1cImNsaWNrZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cInNlbGVjdGlvbihyb3csICRldmVudClcIj5cbiAgICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRoIFtjbGFzc109XCJjb2x1bW4uc3R5bGU/Lm1vdmlsXCIgW25nU3R5bGVdPVwiY29sdW1uLnN0eWxlXCIgc2NvcGU9XCJyb3dcIiAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHVtbnNcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiXG4gICAgICAgICAgICAgIGNvbHVtbi50eXBlID09PSAnZmlsZScgfHxcbiAgICAgICAgICAgICAgICAoY29sdW1uLnJ1bGVzICYmIGV2YWx1YXRlUnVsZXMocm93W2NvbHVtbi5JRF0sIGNvbHVtbi5ydWxlcykpO1xuICAgICAgICAgICAgICBlbHNlIGRpc3BsYXlWYWx1ZVxuICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICA8ZGl2IChjbGljayk9XCJvbkZpbGVJY29uQ2xpY2soJGV2ZW50LCByb3dbY29sdW1uLklEXSlcIj5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1maWxlXCIgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXJcIj48L2k+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2Rpc3BsYXlWYWx1ZT5cbiAgICAgICAgICAgIHt7IHJvd1tjb2x1bW4uSURdIH19XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC90aD5cblxuICAgICAgICA8dGggKm5nSWY9XCJzaG91bGRTaG93TWVudSgpXCIgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgIHN0eWxlPVwib3ZlcmZsb3c6IHZpc2libGU7XCI+XG4gICAgICAgICAgPG1hdC1pY29uIChjbGljayk9XCJzaG93TWVudSgkZXZlbnQpXCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIiBtYXRSaXBwbGUgY2xhc3M9XCJtZW51X21vcmVfdmVydFwiXG4gICAgICAgICAgICBhcmlhLWhpZGRlbj1cImZhbHNlXCIgYXJpYS1sYWJlbD1cIkV4YW1wbGUgZGVsZXRlIGljb25cIj5tb3JlX3ZlcnQ8L21hdC1pY29uPlxuXG4gICAgICAgICAgPG1hdC1tZW51ICNtZW51PVwibWF0TWVudVwiPlxuICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgYnRuIG9mIGJ1dHRvbnNDb25maWdcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImJ0bi5jb25kaXRpb24oKVwiIChjbGljayk9XCJhY3Rpb24oYnRuLmFjdGlvbiwgcm93KVwiIG1hdC1tZW51LWl0ZW1cbiAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgdy0xMDBcIj5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIHt7IGJ0bi5pY29uIH19IGJ0bi1hY2Npb25cIiBzdHlsZT1cImZvbnQtc2l6ZTogMTIwJTsgbWFyZ2luLXJpZ2h0OiAxMHB4XCI+PC9pPlxuICAgICAgICAgICAgICAgIHt7IGJ0bi50b29sdGlwIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtbWVudT5cbiAgICAgICAgPC90aD5cbiAgICAgIDwvdHI+XG4gICAgPC90Ym9keT5cbiAgPC90YWJsZT5cblxuICA8ZGl2ICpuZ0lmPVwibGVuZ3RoID09IDAgJiYgZGF0YS5sZW5ndGggPT0gMFwiIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIj5cbiAgICA8c3Ryb25nPk5vIHNlIGVuY29udHLDsyBpbmZvcm1hY2nDs248L3N0cm9uZz5cbiAgPC9kaXY+XG5cbiAgPG1hdC1wYWdpbmF0b3IgKm5nSWY9XCJwYWdpbmF0b3JBY3RpdmVcIiBbbGVuZ3RoXT1cImxlbmd0aFwiIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiIFtwYWdlU2l6ZU9wdGlvbnNdPVwicGFnZVNpemVPcHRpb25zXCJcbiAgICBzaG93Rmlyc3RMYXN0QnV0dG9ucyAocGFnZSk9XCJjaGFuZ2VQYWdlKCRldmVudClcIj48L21hdC1wYWdpbmF0b3I+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNidXR0b25zVGFibGUgbGV0LWZvbnRTaXplPVwiZm9udFNpemVcIiBsZXQtbWFyZ2luUmlnaHQ9XCJtYXJnaW5SaWdodFwiIGNsYXNzPVwiYnV0dG9uLXRhYmxlXCI+XG4gIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGJ0biBvZiBidXR0b25zQ29uZmlnXCI+XG4gICAgPGRpdiAqbmdJZj1cImJ0bi5jb25kaXRpb25TaG93SGVhZGVyKClcIiAoY2xpY2spPVwiYWN0aW9uKGJ0bi5hY3Rpb24pXCIgbWF0VG9vbHRpcD1cInt7IGJ0bi50b29sdGlwIH19XCJcbiAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCI+XG4gICAgICA8aSBjbGFzcz1cImZhIHt7IGJ0bi5pY29uIH19IGJ0bi1hY2Npb25cIiBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgJ2ZvbnQtc2l6ZSc6IGZvbnRTaXplID8gZm9udFNpemUgOiAnMTcwJScsXG4gICAgICAgICAgJ21hcmdpbi1yaWdodCc6IG1hcmdpblJpZ2h0ID8gbWFyZ2luUmlnaHQgOiAnMTVweCdcbiAgICAgICAgfVwiPjwvaT5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPiJdfQ==